{"version":3,"file":"ngx-buttercms.mjs","sources":["../../../projects/ngx-buttercms/src/lib/constants/response-error-handler.ts","../../../projects/ngx-buttercms/src/lib/constants/request-marker.ts","../../../projects/ngx-buttercms/src/lib/constants/http-parameter-codec.ts","../../../projects/ngx-buttercms/src/lib/injection-tokens/auth-token.ts","../../../projects/ngx-buttercms/src/lib/injection-tokens/base-url.ts","../../../projects/ngx-buttercms/src/lib/enums/preview.ts","../../../projects/ngx-buttercms/src/lib/injection-tokens/preview.ts","../../../projects/ngx-buttercms/src/lib/injection-tokens/response-timeout-config.ts","../../../projects/ngx-buttercms/src/lib/injection-tokens/response-cache.ts","../../../projects/ngx-buttercms/src/lib/interceptors/request-hydration-interceptor.ts","../../../projects/ngx-buttercms/src/lib/interceptors/response-error-handler-interceptor.ts","../../../projects/ngx-buttercms/src/lib/interceptors/transfer-state-interceptor.ts","../../../projects/ngx-buttercms/src/lib/interceptors/response-timeout-interceptor.ts","../../../projects/ngx-buttercms/src/lib/interceptors/response-cache-interceptor.ts","../../../projects/ngx-buttercms/src/lib/interceptors/interceptors.ts","../../../projects/ngx-buttercms/src/lib/services/page.service.ts","../../../projects/ngx-buttercms/src/lib/services/post.service.ts","../../../projects/ngx-buttercms/src/lib/services/author.service.ts","../../../projects/ngx-buttercms/src/lib/services/content.service.ts","../../../projects/ngx-buttercms/src/ngx-buttercms.ts"],"sourcesContent":["import { InjectionToken, isDevMode } from '@angular/core';\r\nimport { ResponseErrorHandlerFn } from '../types';\r\n\r\n/**\r\n * @see {@link ResponseErrorHandlerFn}\r\n * @see {@link InjectionToken}\r\n */\r\nexport const responseErrorHandler = new InjectionToken<ResponseErrorHandlerFn>(\r\n\tisDevMode() ? 'responseErrorHandler' : '',\r\n);\r\n","import { HttpContextToken } from '@angular/common/http';\r\n\r\n/**\r\n * @description A signifier that an Http request should be treated as if it originated from a CMS context.\r\n * @see {@link HttpContextToken}\r\n */\r\nexport const requestMarker = new HttpContextToken<void>(() => void 0);\r\n","import { HttpParameterCodec } from '@angular/common/http';\r\n\r\nconst encode = globalThis.encodeURIComponent;\r\nconst decode = globalThis.decodeURIComponent;\r\n\r\n/**\r\n * @description Encodes and decodes URL parameter keys and values using the standard {@link encodeURIComponent} and {@link decodeURIComponent} functions.\r\n */\r\nexport const httpParameterCodec: HttpParameterCodec = {\r\n\tencodeKey: encode,\r\n\tencodeValue: encode,\r\n\tdecodeKey: decode,\r\n\tdecodeValue: decode,\r\n};\r\n","import { InjectionToken, isDevMode } from '@angular/core';\r\n\r\n/**\r\n * @see {@link InjectionToken}\r\n */\r\nexport const authToken = new InjectionToken<string>(\r\n\tisDevMode() ? 'authToken' : '',\r\n);\r\n","import { InjectionToken, isDevMode } from '@angular/core';\r\n\r\n/**\r\n * @see {@link InjectionToken}\r\n * @default 'https://api.buttercms.com/v2'\r\n */\r\nexport const baseUrl = new InjectionToken<string>(\r\n\tisDevMode() ? 'baseUrl' : '',\r\n\t{ factory: () => 'https://api.buttercms.com/v2' },\r\n);\r\n","export enum Preview {\r\n\toff,\r\n\ton,\r\n}\r\n","import { InjectionToken, isDevMode } from '@angular/core';\r\nimport { Preview } from '../enums';\r\n\r\n/**\r\n * @see {@link Preview}\r\n * @see {@link InjectionToken}\r\n * @default Preview.off\r\n */\r\nexport const preview = new InjectionToken<Preview>(\r\n\tisDevMode() ? 'preview' : '',\r\n\t{ factory: () => Preview.off },\r\n);\r\n","import { InjectionToken, isDevMode } from '@angular/core';\r\nimport { ResponseTimeoutConfig } from '../types';\r\n\r\n/**\r\n * @see {@link ResponseTimeoutConfig}\r\n * @see {@link InjectionToken}\r\n * @default { each: 3_000 }\r\n */\r\nexport const responseTimeoutConfig = new InjectionToken<ResponseTimeoutConfig>(\r\n\tisDevMode() ? 'responseTimeoutConfig' : '',\r\n\t{ factory: () => ({ each: 3_000 }) },\r\n);\r\n","import { InjectionToken, isDevMode } from '@angular/core';\r\nimport { ResponseCache } from '../types';\r\n\r\n/**\r\n * @see {@linkcode ResponseCache}\r\n * @see {@linkcode InjectionToken}\r\n * @default new Map()\r\n */\r\nexport const responseCache = new InjectionToken<ResponseCache>(\r\n\tisDevMode() ? 'responseCache' : '',\r\n\t{ factory: () => new Map() },\r\n);\r\n","import { HttpInterceptorFn, HttpRequest } from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { baseUrl, preview, authToken } from '../injection-tokens';\r\nimport { requestMarker } from '../constants';\r\n\r\n/**\r\n * @description Hydrates requests marked with {@link requestMarker} with the provided {@link baseUrl}, {@link preview}, and {@link authToken}.\r\n * @see {@link requestMarker}\r\n * @see {@link baseUrl}\r\n * @see {@link preview}\r\n * @see {@link authToken}\r\n * @see {@link HttpInterceptorFn}\r\n */\r\nexport const requestHydrationInterceptor: HttpInterceptorFn = (\r\n\trequest,\r\n\tnext,\r\n) => {\r\n\tif (request.context.has(requestMarker)) request = hydrate(request);\r\n\treturn next(request);\r\n};\r\n\r\nfunction hydrate(request: HttpRequest<unknown>): HttpRequest<unknown> {\r\n\treturn request.clone({\r\n\t\turl: `${inject(baseUrl)}${request.url}`,\r\n\t\tsetParams: {\r\n\t\t\tpreview: inject(preview).toString(),\r\n\t\t\tauth_token: inject(authToken),\r\n\t\t},\r\n\t});\r\n}\r\n","import { HttpInterceptorFn } from '@angular/common/http';\r\nimport { requestMarker, responseErrorHandler } from '../constants';\r\nimport { catchError, identity } from 'rxjs';\r\nimport { Injector, inject, runInInjectionContext } from '@angular/core';\r\n\r\n/**\r\n * @description Catches and handles errors for requests marked with {@link requestMarker} with the provided {@link responseErrorHandler} from within an injection context.\r\n * @see {@link requestMarker}\r\n * @see {@link responseErrorHandler}\r\n * @see {@link HttpInterceptorFn}\r\n * @see {@link catchError}\r\n */\r\nexport const responseErrorHandlerInterceptor: HttpInterceptorFn = (\r\n\trequest,\r\n\tnext,\r\n) => {\r\n\tconst injector = inject(Injector);\r\n\tconst handler = inject(responseErrorHandler);\r\n\treturn next(request).pipe(\r\n\t\trequest.context.has(requestMarker)\r\n\t\t\t? catchError((...params) =>\r\n\t\t\t\t\trunInInjectionContext(injector, () => handler(...params)),\r\n\t\t\t\t)\r\n\t\t\t: identity,\r\n\t);\r\n};\r\n","import {\r\n\tHttpInterceptorFn,\r\n\tHttpResponse,\r\n\tHttpStatusCode,\r\n} from '@angular/common/http';\r\nimport { requestMarker } from '../constants';\r\nimport {\r\n\tPLATFORM_ID,\r\n\tTransferState,\r\n\tinject,\r\n\tmakeStateKey,\r\n} from '@angular/core';\r\nimport { of, tap, identity } from 'rxjs';\r\nimport { isPlatformServer } from '@angular/common';\r\n\r\n/**\r\n * @description Transfers the state of successful response bodies for requests marked with {@link requestMarker} from the server to the client.\r\n * @see {@link requestMarker}\r\n * @see {@link TransferState}\r\n * @see {@link HttpInterceptorFn}\r\n */\r\nexport const transferStateInterceptor: HttpInterceptorFn = (request, next) => {\r\n\tconst { context, urlWithParams } = request;\r\n\tconst hasRequestMarker = context.has(requestMarker);\r\n\tconst transferState = inject(TransferState);\r\n\tconst key = makeStateKey<unknown>(urlWithParams);\r\n\tif (hasRequestMarker && transferState.hasKey(key)) {\r\n\t\tconst body = transferState.get(key, void 0);\r\n\t\treturn of(new HttpResponse({ body, status: HttpStatusCode.Ok }));\r\n\t}\r\n\tconst isServer = isPlatformServer(inject(PLATFORM_ID));\r\n\treturn next(request).pipe(\r\n\t\thasRequestMarker\r\n\t\t\t? tap(\r\n\t\t\t\t\t(event) =>\r\n\t\t\t\t\t\tevent instanceof HttpResponse &&\r\n\t\t\t\t\t\tevent.ok &&\r\n\t\t\t\t\t\tisServer &&\r\n\t\t\t\t\t\ttransferState.set(key, event.body),\r\n\t\t\t\t)\r\n\t\t\t: identity,\r\n\t);\r\n};\r\n","import { HttpInterceptorFn } from '@angular/common/http';\r\nimport { identity, timeout } from 'rxjs';\r\nimport { inject } from '@angular/core';\r\nimport { requestMarker } from '../constants';\r\nimport { responseTimeoutConfig } from '../injection-tokens';\r\n\r\n/**\r\n * @description Applies a timeout to requests marked with {@link requestMarker} with the provided {@link responseTimeout}.\r\n * @see {@link requestMarker}\r\n * @see {@link responseTimeoutConfig}\r\n * @see {@link HttpInterceptorFn}\r\n * @see {@link timeout}\r\n */\r\nexport const responseTimeoutInterceptor: HttpInterceptorFn = (\r\n\trequest,\r\n\tnext,\r\n) => {\r\n\treturn next(request).pipe(\r\n\t\trequest.context.has(requestMarker)\r\n\t\t\t? timeout({ ...inject(responseTimeoutConfig), meta: request })\r\n\t\t\t: identity,\r\n\t);\r\n};\r\n","import { HttpInterceptorFn } from '@angular/common/http';\r\nimport { requestMarker } from '../constants';\r\nimport { inject } from '@angular/core';\r\nimport { responseCache } from '../injection-tokens';\r\nimport { shareReplay } from 'rxjs';\r\n\r\n/**\r\n * @description Caches requests marked with {@link requestMarker} with the provided {@link responseCache}.\r\n * @see {@linkcode requestMarker}\r\n * @see {@linkcode responseCache}\r\n * @see {@linkcode HttpInterceptorFn}\r\n * @see {@linkcode shareReplay}\r\n */\r\nexport const responseCacheInterceptor: HttpInterceptorFn = (request, next) => {\r\n\tconst event$ = next(request);\r\n\tif (!request.context.has(requestMarker)) return event$;\r\n\r\n\tconst { urlWithParams: key } = request;\r\n\tconst cache = inject(responseCache);\r\n\tif (!cache.has(key)) cache.set(key, event$.pipe(shareReplay(1)));\r\n\treturn cache.get(key)!;\r\n};\r\n","import { requestHydrationInterceptor } from './request-hydration-interceptor';\r\nimport { responseErrorHandlerInterceptor } from './response-error-handler-interceptor';\r\nimport { transferStateInterceptor } from './transfer-state-interceptor';\r\nimport { responseTimeoutInterceptor } from './response-timeout-interceptor';\r\nimport { responseCacheInterceptor } from './response-cache-interceptor';\r\n\r\n/**\r\n * @see {@link responseErrorHandlerInterceptor}\r\n * @see {@link requestHydrationInterceptor}\r\n * @see {@link transferStateInterceptor}\r\n * @see {@link responseCacheInterceptor}\r\n * @see {@link responseTimeoutInterceptor}\r\n * @see {@link HttpInterceptorFn}\r\n */\r\nexport const interceptors = [\r\n\tresponseErrorHandlerInterceptor,\r\n\trequestHydrationInterceptor,\r\n\ttransferStateInterceptor,\r\n\tresponseCacheInterceptor,\r\n\tresponseTimeoutInterceptor,\r\n] as const;\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient, HttpContext, HttpParams } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n\tPage,\r\n\tPageOptions,\r\n\tPageSearchOptions,\r\n\tPages,\r\n\tPagesOptions,\r\n\tResponse,\r\n\tPaginatedResponse,\r\n} from '../types';\r\nimport { httpParameterCodec as encoder } from '../constants';\r\nimport { requestMarker } from '../constants';\r\nimport { Params } from '@angular/router';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PageService {\r\n\treadonly #http = inject(HttpClient);\r\n\r\n\tget<\r\n\t\tFields extends Readonly<Record<keyof unknown, unknown>> = Readonly<\r\n\t\t\tRecord<keyof unknown, unknown>\r\n\t\t>,\r\n\t\tType extends string = string,\r\n\t\tSlug extends string = string,\r\n\t>(\r\n\t\ttype: Type,\r\n\t\tslug: Slug,\r\n\t\toptions?: PageOptions,\r\n\t): Observable<Response<Page<Fields, Type, Slug>>>;\r\n\tget<\r\n\t\tFields extends Readonly<Record<keyof unknown, unknown>> = Readonly<\r\n\t\t\tRecord<keyof unknown, unknown>\r\n\t\t>,\r\n\t\tType extends string = string,\r\n\t>(\r\n\t\ttype: Type,\r\n\t\toptions?: PagesOptions<Fields>,\r\n\t): Observable<PaginatedResponse<Pages<Fields, Type>>>;\r\n\tget(\r\n\t\ttype: string,\r\n\t\tslugOrOptions?: string | Params,\r\n\t\toptions?: Params,\r\n\t): Observable<Response<Page> | PaginatedResponse<Pages>> {\r\n\t\tlet url = `/pages/${type}/` as const;\r\n\t\ttypeof slugOrOptions === 'string'\r\n\t\t\t? (url += `${slugOrOptions}/`)\r\n\t\t\t: (options = { ...options, ...slugOrOptions });\r\n\t\treturn this.#http.get<Response<Page> | PaginatedResponse<Pages>>(url, {\r\n\t\t\tparams: new HttpParams({ fromObject: options, encoder }),\r\n\t\t\tcontext: new HttpContext().set(requestMarker, void 0),\r\n\t\t});\r\n\t}\r\n\r\n\tsearch<\r\n\t\tFields extends Readonly<Record<keyof unknown, unknown>> = Readonly<\r\n\t\t\tRecord<keyof unknown, unknown>\r\n\t\t>,\r\n\t\tType extends string = string,\r\n\t>(\r\n\t\tquery: string,\r\n\t\toptions?: PageSearchOptions<Type>,\r\n\t): Observable<PaginatedResponse<Pages<Fields, Type>>> {\r\n\t\treturn this.#http.get<PaginatedResponse<Pages<Fields, Type>>>(\r\n\t\t\t'/pages/search/',\r\n\t\t\t{\r\n\t\t\t\tparams: new HttpParams({ fromObject: { ...options, query }, encoder }),\r\n\t\t\t\tcontext: new HttpContext().set(requestMarker, void 0),\r\n\t\t\t},\r\n\t\t);\r\n\t}\r\n}\r\n","import { Observable } from 'rxjs';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport {\r\n\tPost,\r\n\tPostSearchOptions,\r\n\tPosts,\r\n\tPostsOptions,\r\n\tPaginatedResponse,\r\n\tResponse,\r\n} from '../types';\r\nimport { HttpClient, HttpContext, HttpParams } from '@angular/common/http';\r\nimport { httpParameterCodec as encoder } from '../constants';\r\nimport { requestMarker } from '../constants';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PostService {\r\n\treadonly #http = inject(HttpClient);\r\n\r\n\tget<\r\n\t\tSlug extends string = string,\r\n\t\tAuthorSlug extends string = string,\r\n\t\tTagSlug extends string = string,\r\n\t\tCategorySlug extends string = string,\r\n\t>(\r\n\t\toptions?: PostsOptions<AuthorSlug, CategorySlug, TagSlug>,\r\n\t): Observable<\r\n\t\tPaginatedResponse<Posts<Slug, AuthorSlug, TagSlug, CategorySlug>>\r\n\t>;\r\n\tget<\r\n\t\tSlug extends string = string,\r\n\t\tAuthorSlug extends string = string,\r\n\t\tTagSlug extends string = string,\r\n\t\tCategorySlug extends string = string,\r\n\t>(\r\n\t\tslug: Slug,\r\n\t): Observable<Response<Post<Slug, AuthorSlug, TagSlug, CategorySlug>>>;\r\n\tget(\r\n\t\tslugOrOptions?: string | PostsOptions,\r\n\t): Observable<Response<Post> | PaginatedResponse<Posts>> {\r\n\t\tlet url = `/posts/`;\r\n\t\tlet options: PostsOptions | undefined;\r\n\t\ttypeof slugOrOptions === 'string'\r\n\t\t\t? (url += `${slugOrOptions}/`)\r\n\t\t\t: (options = slugOrOptions);\r\n\t\treturn this.#http.get<Response<Post> | PaginatedResponse<Posts>>(url, {\r\n\t\t\tparams: new HttpParams({ fromObject: options, encoder }),\r\n\t\t\tcontext: new HttpContext().set(requestMarker, void 0),\r\n\t\t});\r\n\t}\r\n\r\n\tsearch<\r\n\t\tSlug extends string = string,\r\n\t\tAuthorSlug extends string = string,\r\n\t\tTagSlug extends string = string,\r\n\t\tCategorySlug extends string = string,\r\n\t>(\r\n\t\tquery: string,\r\n\t\toptions?: PostSearchOptions,\r\n\t): Observable<Response<Posts<Slug, AuthorSlug, TagSlug, CategorySlug>>> {\r\n\t\treturn this.#http.get<\r\n\t\t\tResponse<Posts<Slug, AuthorSlug, TagSlug, CategorySlug>>\r\n\t\t>('/posts/search/', {\r\n\t\t\tparams: new HttpParams({ fromObject: { ...options, query }, encoder }),\r\n\t\t\tcontext: new HttpContext().set(requestMarker, void 0),\r\n\t\t});\r\n\t}\r\n}\r\n","import { HttpClient, HttpContext, HttpParams } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { httpParameterCodec as encoder } from '../constants';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n\tAuthor,\r\n\tAuthorOptions,\r\n\tAuthors,\r\n\tResponse,\r\n\tAuthorsWithRecentPosts,\r\n} from '../types';\r\nimport { requestMarker } from '../constants';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AuthorService {\r\n\treadonly #http = inject(HttpClient);\r\n\r\n\tget<Slug extends string = string>(): Observable<Response<Authors<Slug>>>;\r\n\tget<\r\n\t\tSlug extends string = string,\r\n\t\tPostSlug extends string = string,\r\n\t\tTagSlug extends string = string,\r\n\t\tCategorySlug extends string = string,\r\n\t>(\r\n\t\toptions: AuthorOptions,\r\n\t): Observable<\r\n\t\tResponse<AuthorsWithRecentPosts<Slug, PostSlug, TagSlug, CategorySlug>>\r\n\t>;\r\n\tget<Slug extends string = string>(\r\n\t\tslug: Slug,\r\n\t): Observable<Response<Author<Slug>>>;\r\n\tget<\r\n\t\tSlug extends string = string,\r\n\t\tPostSlug extends string = string,\r\n\t\tTagSlug extends string = string,\r\n\t\tCategorySlug extends string = string,\r\n\t>(\r\n\t\tslug: Slug,\r\n\t\toptions: AuthorOptions,\r\n\t): Observable<\r\n\t\tResponse<AuthorsWithRecentPosts<Slug, PostSlug, TagSlug, CategorySlug>>\r\n\t>;\r\n\tget(\r\n\t\tslugOrOptions?: string | AuthorOptions,\r\n\t\toptions?: Partial<AuthorOptions>,\r\n\t): Observable<Response<Author | Authors>> {\r\n\t\tlet url = `/authors/`;\r\n\t\ttypeof slugOrOptions === 'string'\r\n\t\t\t? (url += `${slugOrOptions}/`)\r\n\t\t\t: (options = { ...options, ...slugOrOptions });\r\n\t\treturn this.#http.get<Response<Author | Authors>>(url, {\r\n\t\t\tparams: new HttpParams({ fromObject: options, encoder }),\r\n\t\t\tcontext: new HttpContext().set(requestMarker, void 0),\r\n\t\t});\r\n\t}\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { HttpClient, HttpContext, HttpParams } from '@angular/common/http';\r\nimport { httpParameterCodec as encoder } from '../constants';\r\nimport { requestMarker } from '../constants';\r\nimport { Content, ContentOptions, PaginatedResponse } from '../types';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ContentService {\r\n\treadonly #http = inject(HttpClient);\r\n\r\n\tget<\r\n\t\tFields extends Readonly<Record<keyof unknown, unknown>> = Readonly<\r\n\t\t\tRecord<keyof unknown, unknown>\r\n\t\t>,\r\n\t\tType extends string = string,\r\n\t>(\r\n\t\ttype: Type,\r\n\t\toptions?: ContentOptions<Fields>,\r\n\t): Observable<PaginatedResponse<Content<Fields, Type>>> {\r\n\t\treturn this.#http.get<PaginatedResponse<Content<Fields, Type>>>(\r\n\t\t\t'/content/',\r\n\t\t\t{\r\n\t\t\t\tparams: new HttpParams({\r\n\t\t\t\t\tfromObject: { ...options, keys: type },\r\n\t\t\t\t\tencoder,\r\n\t\t\t\t}),\r\n\t\t\t\tcontext: new HttpContext().set(requestMarker, void 0),\r\n\t\t\t},\r\n\t\t);\r\n\t}\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["encoder"],"mappings":"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"}