@ethlete/query 0.1.0-next.9 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/esm2020/lib/auth/auth-provider.types.mjs +1 -1
  2. package/esm2020/lib/auth/auth-provider.utils.mjs +1 -1
  3. package/esm2020/lib/auth/basic-auth-provider.mjs +4 -5
  4. package/esm2020/lib/auth/bearer-auth-provider.mjs +117 -60
  5. package/esm2020/lib/auth/custom-header-auth-provider.mjs +4 -5
  6. package/esm2020/lib/directives/infinity-query-trigger.directive.mjs +3 -3
  7. package/esm2020/lib/directives/infinity-query.directive.mjs +7 -9
  8. package/esm2020/lib/directives/query.directive.mjs +23 -19
  9. package/esm2020/lib/infinite-query/infinity-query.mjs +15 -11
  10. package/esm2020/lib/query/query.mjs +111 -86
  11. package/esm2020/lib/query/query.types.mjs +1 -1
  12. package/esm2020/lib/query/query.utils.mjs +51 -4
  13. package/esm2020/lib/query-client/query-client.mjs +25 -13
  14. package/esm2020/lib/query-client/query-client.types.mjs +1 -1
  15. package/esm2020/lib/query-form/query-form.mjs +7 -6
  16. package/esm2020/lib/request/request.mjs +168 -19
  17. package/esm2020/lib/request/request.types.mjs +1 -1
  18. package/esm2020/lib/request/request.util.mjs +66 -91
  19. package/fesm2015/ethlete-query.mjs +673 -398
  20. package/fesm2015/ethlete-query.mjs.map +1 -1
  21. package/fesm2020/ethlete-query.mjs +657 -389
  22. package/fesm2020/ethlete-query.mjs.map +1 -1
  23. package/lib/auth/auth-provider.types.d.ts +30 -22
  24. package/lib/auth/auth-provider.utils.d.ts +2 -1
  25. package/lib/auth/basic-auth-provider.d.ts +0 -2
  26. package/lib/auth/bearer-auth-provider.d.ts +14 -14
  27. package/lib/auth/custom-header-auth-provider.d.ts +0 -2
  28. package/lib/directives/infinity-query.directive.d.ts +1 -2
  29. package/lib/directives/query.directive.d.ts +6 -5
  30. package/lib/infinite-query/infinity-query.types.d.ts +4 -4
  31. package/lib/query/query.d.ts +6 -6
  32. package/lib/query/query.types.d.ts +78 -43
  33. package/lib/query/query.utils.d.ts +21 -5
  34. package/lib/query-client/query-client.d.ts +13 -11
  35. package/lib/query-client/query-client.types.d.ts +22 -10
  36. package/lib/query-form/query-form.types.d.ts +2 -2
  37. package/lib/request/request.d.ts +3 -9
  38. package/lib/request/request.types.d.ts +63 -15
  39. package/lib/request/request.util.d.ts +74 -7
  40. package/package.json +2 -5
@@ -1 +1 @@
1
- {"version":3,"file":"ethlete-query.mjs","sources":["../../../../libs/query/src/lib/auth/custom-header-auth-provider.ts","../../../../libs/query/src/lib/auth/basic-auth-provider.ts","../../../../libs/query/src/lib/logger/logger.ts","../../../../libs/query/src/lib/request/request.util.ts","../../../../libs/query/src/lib/request/request.ts","../../../../libs/query/src/lib/auth/auth-provider.utils.ts","../../../../libs/query/src/lib/auth/bearer-auth-provider.ts","../../../../libs/query/src/lib/gql/gql.ts","../../../../libs/query/src/lib/utils/deep-freeze.util.ts","../../../../libs/query/src/lib/utils/def.util.ts","../../../../libs/query/src/lib/query/query.utils.ts","../../../../libs/query/src/lib/query/query.ts","../../../../libs/query/src/lib/directives/query.directive.ts","../../../../libs/query/src/lib/infinite-query/infinity-query.ts","../../../../libs/query/src/lib/infinite-query/infinity-query.utils.ts","../../../../libs/query/src/lib/directives/infinity-query.directive.ts","../../../../libs/query/src/lib/directives/infinity-query-trigger.directive.ts","../../../../libs/query/src/lib/query-store/query-store.ts","../../../../libs/query/src/lib/query-client/query-client.utils.ts","../../../../libs/query/src/lib/query-client/query-client.ts","../../../../libs/query/src/lib/query-form/query-form.ts","../../../../libs/query/src/lib/query-form/query-form.utils.ts","../../../../libs/query/src/ethlete-query.ts"],"sourcesContent":["import { QueryClient } from '../query-client';\nimport { AuthProvider, AuthProviderCustomHeaderConfig } from './auth-provider.types';\n\nexport class CustomHeaderAuthProvider implements AuthProvider {\n get header() {\n return { [this._config.name]: this._config.value };\n }\n\n queryClient: QueryClient | null = null;\n\n constructor(private _config: AuthProviderCustomHeaderConfig) {}\n\n cleanUp(): void {\n // noop\n }\n}\n","import { QueryClient } from '../query-client';\nimport { AuthProvider, AuthProviderBasicConfig } from './auth-provider.types';\n\nexport class BasicAuthProvider implements AuthProvider {\n get header() {\n return { Authorization: `Basic ${this._basicAuthString}` };\n }\n\n private get _basicAuthString() {\n return btoa(`${this._config.username}:${this._config.password}`);\n }\n\n queryClient: QueryClient | null = null;\n\n constructor(private _config: AuthProviderBasicConfig) {}\n\n cleanUp(): void {\n // noop\n }\n}\n","export const buildErrorMessage = (code: string, message: string) => `[@ethlete\\\\query:${code}] ${message}`;\n\nexport class QueryError extends Error {\n data?: unknown;\n\n constructor(code: string, message: string, data?: unknown) {\n super(buildErrorMessage(code, message));\n this.name = 'QueryError';\n this.data = data;\n }\n}\n\nexport const invalidBaseRouteError = (data: unknown) =>\n new QueryError('001', 'The baseRoute must not end with a slash', data);\n\nexport const invalidRouteError = (data: unknown) => new QueryError('002', 'The route must start with a slash', data);\n\nexport const pathParamsMissingInRouteFunctionError = (data: unknown) =>\n new QueryError('003', 'The route is a function but pathParams are missing', data);\n\nexport const queryStateAlreadyHasKeyError = (data: unknown) =>\n new QueryError('004', 'The query state already contains the provided key', data);\n\nexport const queryStateDoesNotContainKeyError = (data: unknown) =>\n new QueryError('005', 'The query state does not contain the provided key', data);\n\nexport const queryStateCannotTransformError = (data: unknown) =>\n new QueryError('006', 'The query state cannot be transformed because it is not loading', data);\n\nexport const invalidBodyError = (data: unknown) => new QueryError('007', 'The body is not valid or upsupported', data);\n","import {\n invalidBaseRouteError,\n invalidBodyError,\n invalidRouteError,\n pathParamsMissingInRouteFunctionError,\n} from '../logger';\nimport { Method, ParamArray, Params, QueryParams, RequestError, UnfilteredParamPrimitive } from './request.types';\n\nexport const isRequestError = (error: unknown): error is RequestError =>\n error instanceof Object && 'code' in error && 'message' in error;\n\nexport const isAbortRequestError = (error: unknown): error is RequestError =>\n isRequestError(error) && error.code === -1;\n\nexport const buildRoute = (options: {\n base: string;\n route: ((args: Record<string, unknown>) => string) | string | null | undefined;\n pathParams?: Record<string, unknown>;\n queryParams?: QueryParams;\n}) => {\n if (options.base.endsWith('/')) {\n throw invalidBaseRouteError(options.base);\n }\n\n let route: string | null = null;\n\n if (typeof options.route === 'function') {\n if (!options.pathParams) {\n throw pathParamsMissingInRouteFunctionError(options.route({}));\n }\n\n route = options.route(options.pathParams);\n } else {\n route = options.route ?? null;\n }\n\n if (route && !route.startsWith('/')) {\n throw invalidRouteError(route);\n }\n\n if (options.queryParams) {\n const queryString = buildQueryString(options.queryParams);\n\n if (queryString) {\n route = route ? `${route}?${queryString}` : `/?${queryString}`;\n }\n }\n\n return `${options.base}${route ?? ''}`;\n};\n\nexport const buildQueryString = (params: QueryParams) => {\n const validParams = filterInvalidParams(params);\n\n const queryString = Object.keys(validParams)\n .map((key) =>\n Array.isArray(validParams[key])\n ? buildQueryArrayString(key, validParams[key] as ParamArray)\n : `${key}=${encodeURIComponent(validParams[key] as string | number | boolean)}`,\n )\n .join('&');\n\n return queryString || null;\n};\n\nexport const buildQueryArrayString = (key: string, array: ParamArray) => {\n const uriBrackets = encodeURIComponent('[]');\n\n return array\n .slice()\n .map((item) => `${key}${uriBrackets}=${encodeURIComponent(item as string | number | boolean)}`)\n .join('&');\n};\n\nexport const isFetchResponse = (response: unknown): response is Response =>\n typeof response === 'object' &&\n response !== null &&\n 'status' in response &&\n 'statusText' in response &&\n 'json' in response &&\n typeof (response as Response)['json'] === 'function';\n\nexport const filterInvalidParams = (params: QueryParams) => {\n const filteredParams: Params = Object.entries(params)\n .map(([key, value]) => {\n if (!Array.isArray(value)) {\n return [key, value];\n }\n\n return [key, value.filter((v) => isParamValid(v))];\n })\n .filter(([, value]) => isParamValid(value as UnfilteredParamPrimitive))\n .reduce((acc, [key, value]) => ({ ...acc, [key as string]: value }), {});\n\n return filteredParams;\n};\n\nexport const isParamValid = (primitive: UnfilteredParamPrimitive) => {\n if (primitive === undefined || primitive === null || primitive === '') {\n return false;\n }\n\n if (typeof primitive === 'string' && primitive.trim() === '') {\n return false;\n }\n\n if (typeof primitive === 'number' && isNaN(primitive)) {\n return false;\n }\n\n return true;\n};\n\nexport const extractExpiresInSeconds = (headers: Headers) => {\n const cacheControl = headers.get('cache-control');\n const age = headers.get('age');\n const expires = headers.get('expires');\n\n // In seconds\n let expiresIn: number | null = null;\n let maxAge: number | null = null;\n\n if (cacheControl?.includes('no-cache')) {\n return null;\n }\n\n if (cacheControl?.includes('max-age')) {\n maxAge = parseInt(cacheControl.split('max-age=')[1]);\n } else if (cacheControl?.includes('s-maxage')) {\n maxAge = parseInt(cacheControl.split('s-maxage=')[1]);\n }\n\n if (maxAge && age) {\n const ageSeconds = parseInt(age);\n\n expiresIn = maxAge - ageSeconds;\n } else if (expires) {\n // Used by some apis to tell the response will never expire\n // In this case we let the response expire after 1 hour\n if (expires === '-1') {\n expiresIn = 3600;\n } else {\n const expiresDate = new Date(expires);\n\n // check if the date is valid\n if (expiresDate.toString() !== 'Invalid Date') {\n expiresIn = Math.floor((expiresDate.getTime() - Date.now()) / 1000);\n }\n }\n }\n\n return expiresIn;\n};\n\nexport const buildTimestampFromSeconds = (seconds: number | null) => {\n if (seconds === null) {\n return null;\n }\n\n return new Date(Date.now() + seconds * 1000).getTime();\n};\n\nexport const buildRequestError = async <ErrorResponse = unknown>(\n error: unknown,\n route: string,\n requestInit?: RequestInit,\n) => {\n if (error instanceof DOMException && error.code === error.ABORT_ERR) {\n const err: RequestError<null> = {\n code: -1,\n message: 'Request aborted',\n detail: null,\n raw: error,\n route,\n requestInit,\n };\n\n return err;\n }\n\n if (error instanceof SyntaxError) {\n const err: RequestError<null> = {\n code: -3,\n message: 'Syntax error',\n detail: null,\n raw: error,\n route,\n requestInit,\n };\n\n return err;\n }\n\n if (error instanceof Error) {\n const err: RequestError<null> = {\n code: -2,\n message: `${error.name}: ${error.message}`,\n detail: null,\n raw: error,\n route,\n requestInit,\n };\n\n return err;\n }\n\n if (isFetchResponse(error)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let detail: any = null;\n\n try {\n detail = await error.json();\n } catch {\n // noop\n }\n\n if (!detail) {\n try {\n detail = await error.text();\n } catch {\n // noop\n }\n }\n\n const err: RequestError<ErrorResponse> = {\n code: error.status,\n message: error.statusText,\n detail,\n raw: error,\n route,\n requestInit,\n };\n\n return err;\n }\n\n const err: RequestError<null> = {\n code: 0,\n message: 'Unknown error',\n detail: null,\n raw: error,\n route,\n requestInit,\n };\n\n return err;\n};\n\nexport const buildBody = (body: unknown) => {\n if (body === undefined || body === null) {\n return null;\n }\n\n if (typeof body === 'string') {\n return body;\n }\n\n if (typeof body === 'object') {\n return JSON.stringify(body);\n }\n\n if (body instanceof FormData) {\n return body;\n }\n\n throw invalidBodyError(body);\n};\n\nexport const transformMethod = (method: Method) => {\n if (method === 'GQL_QUERY' || method === 'GQL_MUTATE') {\n return 'POST';\n }\n\n return method;\n};\n\nexport const guessContentType = (body: unknown) => {\n if (body === null || body === undefined) {\n return null;\n }\n\n if (typeof body === 'string') {\n return 'text/plain';\n }\n\n if (body instanceof FormData) {\n return 'multipart/form-data';\n }\n\n if (typeof body === 'object') {\n return 'application/json';\n }\n\n return null;\n};\n","import { CacheAdapterFn } from './request.types';\nimport { buildRequestError, buildTimestampFromSeconds, extractExpiresInSeconds } from './request.util';\n\nexport const request = async <Response = unknown>(options: {\n route: string;\n init?: RequestInit;\n cacheAdapter?: CacheAdapterFn;\n}) => {\n try {\n const response = await fetch(options.route, options.init);\n\n if (!response.ok) {\n throw response;\n }\n\n const isJsonResponse = response.headers.get('Content-Type')?.includes('application/json');\n const isTextResponse = response.headers.get('Content-Type')?.includes('text/plain');\n\n const data = (isJsonResponse ? await response.json() : isTextResponse ? await response.text() : null) as Response;\n\n const expiresInSeconds = options.cacheAdapter\n ? options.cacheAdapter(response.headers)\n : extractExpiresInSeconds(response.headers);\n\n const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);\n\n return { data, expiresInTimestamp };\n } catch (error) {\n throw await buildRequestError(error, options.route, options.init);\n }\n};\n","import { AuthProvider } from './auth-provider.types';\nimport { BasicAuthProvider } from './basic-auth-provider';\nimport { BearerAuthProvider } from './bearer-auth-provider';\nimport { CustomHeaderAuthProvider } from './custom-header-auth-provider';\n\nexport const isBasicAuthProvider = (authProvider: AuthProvider): authProvider is BasicAuthProvider =>\n authProvider instanceof BasicAuthProvider;\n\nexport const isBearerAuthProvider = (authProvider: AuthProvider): authProvider is BearerAuthProvider =>\n authProvider instanceof BearerAuthProvider;\n\nexport const isCustomHeaderAuthProvider = (authProvider: AuthProvider): authProvider is CustomHeaderAuthProvider =>\n authProvider instanceof CustomHeaderAuthProvider;\n\nexport const decryptBearer = <Result = Record<string, unknown>>(token: string) => {\n try {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n atob(base64)\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join(''),\n );\n\n return JSON.parse(jsonPayload) as Result;\n } catch (error) {\n console.error(`Invalid bearer token: ${token}`, error);\n\n return null;\n }\n};\n","import { Subject, Subscription, timer } from 'rxjs';\nimport { QueryClient } from '../query-client';\nimport { buildBody, buildRequestError, buildRoute, request, RequestError } from '../request';\nimport {\n AuthBearerRefreshStrategy,\n AuthProvider,\n AuthProviderBearerConfig,\n BearerRefreshConfig,\n TokenResponse,\n} from './auth-provider.types';\nimport { decryptBearer } from './auth-provider.utils';\n\nexport class BearerAuthProvider implements AuthProvider {\n private _token: string;\n private _refreshToken: string | null = null;\n private _refreshTimerSubscription: Subscription | null = null;\n\n get header() {\n return { Authorization: `Bearer ${this._token}` };\n }\n\n queryClient: QueryClient | null = null;\n\n onRefreshInitiation$ = new Subject<void>();\n onRefreshSuccess$ = new Subject<TokenResponse>();\n onRefreshFailure$ = new Subject<RequestError>();\n\n constructor(private _config: AuthProviderBearerConfig) {\n this._token = _config.token;\n this._refreshToken = _config.refreshConfig?.token ?? null;\n\n if (this._config.refreshConfig) {\n this._setupRefresh(this._config.refreshConfig);\n }\n }\n\n cleanUp(): void {\n this._refreshTimerSubscription?.unsubscribe();\n this._refreshTimerSubscription = null;\n }\n\n private _setupRefresh(config: BearerRefreshConfig) {\n const bearer = decryptBearer(this._token);\n\n if (!bearer) {\n return;\n }\n\n const expiresInPropertyName = config.expiresInPropertyName || 'exp';\n const expiresIn = bearer[expiresInPropertyName] as number | undefined;\n const fiveMinutes = 5 * 60 * 1000;\n\n if (expiresIn === undefined) {\n throw new Error(`Bearer token does not contain an '${expiresInPropertyName}' property`);\n }\n\n const remainingTime = new Date(expiresIn * 1000).getTime() - fiveMinutes - new Date().getTime();\n\n const strategy = config.strategy ?? AuthBearerRefreshStrategy.BeforeExpiration;\n\n switch (strategy) {\n case AuthBearerRefreshStrategy.BeforeExpiration:\n this._refreshTimerSubscription = timer(remainingTime).subscribe(() => this._refresh(config));\n break;\n }\n }\n\n private async _refresh(config: BearerRefreshConfig) {\n if (!this._refreshToken) {\n throw new Error('No refresh token found');\n }\n\n if (!this.queryClient) {\n throw new Error('Query client instance is null');\n }\n\n const { method, route, bodyAdapter, responseAdapter } = config;\n\n const fullRoute = buildRoute({\n base: this.queryClient.config.baseRoute,\n route,\n });\n\n const body = bodyAdapter ? bodyAdapter(this._refreshToken) : { refreshToken: this._refreshToken };\n const requestInit: RequestInit = { body: buildBody(body), method };\n\n this.onRefreshInitiation$.next();\n\n try {\n const result = await request({\n route: fullRoute,\n init: requestInit,\n });\n\n const tokens = responseAdapter ? responseAdapter(result.data) : (result.data as TokenResponse);\n\n if (!tokens.token) {\n throw new Error('Token not found in response');\n }\n\n if (!tokens.refreshToken) {\n throw new Error('Refresh token not found in response');\n }\n\n this._token = tokens.token;\n this._refreshToken = tokens.refreshToken;\n\n this.onRefreshSuccess$.next(tokens);\n } catch (error) {\n if (error instanceof Error) {\n this.onRefreshFailure$.next(await buildRequestError(error, fullRoute, requestInit));\n } else {\n this.onRefreshFailure$.next(error as RequestError);\n }\n }\n }\n}\n","const getOpName = /(query|mutation) ?([\\w\\d-_]+)? ?\\(.*?\\)? \\{/;\n\nexport const transformGql = (str: string) => {\n str = Array.isArray(str) ? str.join('') : str;\n const name = getOpName.exec(str);\n return function (variables: Record<string, unknown> | null | undefined) {\n const data: Record<string, unknown> = { query: str };\n if (variables) data['variables'] = JSON.stringify(variables);\n if (name && name.length) {\n const operationName = name[2];\n if (operationName) data['operationName'] = name[2];\n }\n return JSON.stringify(data);\n };\n};\n\nexport const gql = (strings: TemplateStringsArray, ...values: string[]) => {\n const str = strings.reduce((acc, cur, i) => {\n return acc + cur + (values[i] || '');\n }, '');\n return str;\n};\n","export const deepFreeze = <T extends Record<string, unknown>>(object: T) => {\n // check if object is actually an object or frozen\n if (!object || typeof object !== 'object' || Object.isFrozen(object)) {\n return object;\n }\n\n // Retrieve the property names defined on object\n const propNames = Object.getOwnPropertyNames(object);\n\n // Freeze properties before freezing self\n\n for (const name of propNames) {\n const value = object[name];\n\n if (value && typeof value === 'object') {\n deepFreeze(value as T);\n }\n }\n\n return Object.freeze(object);\n};\n","/**\n * Dummy function for providing types while not breaking inference.\n * **This function always returns null.**\n * @see https://github.com/microsoft/TypeScript/issues/26242\n * @returns null\n */\nexport const def = <Data>() => null as unknown as Data;\n","import { filter, Observable, takeWhile } from 'rxjs';\nimport { ResponseTransformerType } from '../query-client';\nimport { RequestHeaders } from '../request';\nimport {\n BaseArguments,\n Cancelled,\n Failure,\n GqlQueryConfig,\n Loading,\n Prepared,\n QueryState,\n QueryStateData,\n QueryStateRawData,\n QueryStateType,\n RouteType,\n Success,\n} from './query.types';\n\ntype OmitNull<T> = T extends null ? never : T;\n\nexport function filterSuccess() {\n return function <\n T extends QueryState | null,\n Response extends QueryStateData<OmitNull<T>>,\n RawResponse extends QueryStateRawData<OmitNull<T>>,\n >(source: Observable<T>) {\n return source.pipe(filter((value) => isQueryStateSuccess(value))) as Observable<Success<Response, RawResponse>>;\n };\n}\n\nexport function filterFailure() {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => isQueryStateFailure(value))) as Observable<Failure>;\n };\n}\n\nexport function takeUntilResponse() {\n return function <T extends QueryState>(source: Observable<T>) {\n return source.pipe(takeWhile((value) => isQueryStateLoading(value), true));\n };\n}\n\nexport const isQueryStateLoading = (state: QueryState | null | undefined): state is Loading =>\n state?.type === QueryStateType.Loading;\n\nexport const isQueryStateSuccess = (state: QueryState | null | undefined): state is Success =>\n state?.type === QueryStateType.Success;\n\nexport const isQueryStateFailure = (state: QueryState | null | undefined): state is Failure =>\n state?.type === QueryStateType.Failure;\n\nexport const isQueryStateCancelled = (state: QueryState | null | undefined): state is Cancelled =>\n state?.type === QueryStateType.Cancelled;\n\nexport const isQueryStatePrepared = (state: QueryState | null | undefined): state is Prepared =>\n state?.type === QueryStateType.Prepared;\n\nexport const mergeHeaders = (...headers: Array<RequestHeaders | null | undefined>) => {\n return headers.reduce((acc, headers) => {\n if (!headers) {\n return acc;\n }\n\n return {\n ...acc,\n ...headers,\n };\n }, {});\n};\n\nexport const isGqlQueryConfig = <\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends RouteType<Arguments> | undefined,\n ResponseTransformer extends ResponseTransformerType<Response> | undefined,\n>(\n config: unknown,\n): config is GqlQueryConfig<Route, Response, Arguments, ResponseTransformer> => {\n if (!config || typeof config !== 'object' || Array.isArray(config)) {\n return false;\n }\n\n if (!('query' in config)) {\n return false;\n }\n\n return true;\n};\n","import { BehaviorSubject, interval, Subscription, takeUntil } from 'rxjs';\nimport { transformGql } from '../gql';\nimport { DefaultResponseTransformer, QueryClient, ResponseTransformerType } from '../query-client';\nimport {\n buildBody,\n guessContentType,\n isAbortRequestError,\n isRequestError,\n Method as MethodType,\n request,\n transformMethod,\n} from '../request';\nimport { deepFreeze } from '../utils';\nimport {\n BaseArguments,\n GqlQueryConfig,\n PollConfig,\n QueryConfig,\n QueryState,\n QueryStateMeta,\n QueryStateType,\n RouteType,\n RunQueryOptions,\n} from './query.types';\nimport { isGqlQueryConfig, isQueryStateLoading, isQueryStateSuccess, mergeHeaders } from './query.utils';\n\nexport class Query<\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends RouteType<Arguments>,\n Method extends MethodType,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n> {\n private _currentId = 0;\n private _abortController = new AbortController();\n private _pollingSubscription: Subscription | null = null;\n\n private readonly _state$: BehaviorSubject<QueryState<ReturnType<ResponseTransformer>, Response>>;\n\n private get _nextId() {\n return this._currentId++;\n }\n\n get state$() {\n return this._state$.asObservable();\n }\n\n get state() {\n return this._state$.value;\n }\n\n get isExpired() {\n if (!isQueryStateSuccess(this.state)) {\n return false;\n }\n\n const ts = this.state.meta.expiresAt;\n\n if (!ts) {\n return true;\n }\n\n return ts < Date.now();\n }\n\n constructor(\n private _client: QueryClient,\n private _queryConfig:\n | QueryConfig<Route, Response, Arguments, ResponseTransformer>\n | GqlQueryConfig<Route, Response, Arguments, ResponseTransformer>,\n private _route: Route,\n private _args: Arguments | undefined,\n ) {\n this._state$ = new BehaviorSubject<QueryState<ReturnType<ResponseTransformer>, Response>>({\n type: QueryStateType.Prepared,\n meta: { id: this._currentId },\n });\n }\n\n clone() {\n return this._client.fetch<Route, Response, Arguments, Method, ResponseTransformer>(this._queryConfig);\n }\n\n execute<ComputedResponse extends ReturnType<ResponseTransformer>>(options?: RunQueryOptions) {\n if (!this.isExpired && !options?.skipCache && isQueryStateSuccess(this.state)) {\n return this;\n }\n\n if (this._queryConfig.secure && !this._client.authProvider) {\n throw new Error('Cannot execute secure query without auth provider');\n }\n\n const id = this._nextId;\n\n if (isQueryStateLoading(this._state$.value)) {\n this.abort();\n }\n\n const meta = deepFreeze({ id });\n\n this._state$.next({\n type: QueryStateType.Loading,\n meta,\n });\n\n let body: string | FormData | null = null;\n let contentType: string | null = null;\n\n if (isGqlQueryConfig(this._queryConfig)) {\n const queryTemplate = this._queryConfig.query;\n const query = transformGql(queryTemplate);\n\n contentType = 'application/json';\n body = query(this._args?.variables);\n } else {\n body = buildBody(this._args?.body);\n contentType = guessContentType(this._args?.body);\n }\n\n let authHeader: Record<string, string> | null = null;\n\n if (this._queryConfig.secure) {\n const header = this._client.authProvider?.header;\n\n if (header) {\n authHeader = header;\n }\n } else if (this._client.authProvider?.header) {\n if (this._queryConfig.secure === undefined || this._queryConfig.secure) {\n authHeader = this._client.authProvider.header;\n }\n }\n\n let headers = mergeHeaders(authHeader, this._args?.headers);\n\n if (contentType && !headers?.['Content-Type'] && !headers?.['content-type']) {\n if (headers) {\n headers['Content-Type'] = contentType;\n } else {\n headers = {\n 'Content-Type': contentType,\n };\n }\n }\n\n request<Response>({\n route: this._route,\n init: {\n method: transformMethod(this._queryConfig.method),\n signal: this._abortController.signal,\n body,\n headers: headers || undefined,\n },\n cacheAdapter: this._client.config.request?.cacheAdapter,\n })\n .then((response) => {\n const isResponseObject = typeof response === 'object';\n\n const isGql = isGqlQueryConfig(this._queryConfig);\n\n let responseData: Response | null = null;\n if (\n isGql &&\n isResponseObject &&\n !!response.data &&\n typeof response.data === 'object' &&\n 'data' in response.data\n ) {\n responseData = (response.data as Record<string, unknown>)['data'] as Response;\n } else {\n responseData = response.data as Response;\n }\n\n const transformedResponse = this._queryConfig.responseTransformer\n ? this._queryConfig.responseTransformer(responseData)\n : responseData;\n\n this._state$.next({\n type: QueryStateType.Success,\n response: deepFreeze(transformedResponse as Record<string, unknown>) as ComputedResponse,\n rawResponse: deepFreeze(responseData as Record<string, unknown>) as Response,\n meta: deepFreeze({ ...meta, expiresAt: response.expiresInTimestamp }),\n });\n })\n .catch((error) => this._handleExecuteError(error, meta));\n\n return this;\n }\n\n abort() {\n this._abortController.abort();\n this._abortController = new AbortController();\n\n return this;\n }\n\n poll(config: PollConfig) {\n if (this._pollingSubscription) {\n return this;\n }\n\n this._pollingSubscription = interval(config.interval)\n .pipe(takeUntil(config.takeUntil))\n .subscribe(() => this.execute({ skipCache: true }));\n\n return this;\n }\n\n stopPolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n\n return this;\n }\n\n private _handleExecuteError(error: unknown, meta: QueryStateMeta) {\n if (isAbortRequestError(error)) {\n this._state$.next({\n type: QueryStateType.Cancelled,\n meta,\n });\n } else if (isRequestError(error)) {\n this._state$.next({\n type: QueryStateType.Failure,\n error,\n meta,\n });\n } else {\n throw error;\n }\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { Subscription, tap } from 'rxjs';\nimport {\n AnyQuery,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n QueryRawResponseType,\n QueryResponseType,\n QueryState,\n} from '../query';\nimport { RequestError } from '../request';\n\ninterface QueryContext<Q extends AnyQuery | null> {\n $implicit: QueryResponseType<Q>;\n query: QueryResponseType<Q>;\n raw: QueryRawResponseType<Q>;\n loading: boolean;\n error: RequestError<unknown> | null;\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[query]',\n standalone: true,\n})\nexport class QueryDirective<Q extends AnyQuery | null> implements OnInit, OnDestroy {\n private _isMainViewCreated = false;\n private _subscription: Subscription | null = null;\n\n private readonly _viewContext: QueryContext<Q> = {\n $implicit: null as QueryResponseType<Q>,\n query: null as QueryResponseType<Q>,\n raw: null as QueryRawResponseType<Q>,\n loading: false,\n error: null,\n };\n\n @Input()\n get query(): Q {\n return this._query;\n }\n set query(v: Q) {\n this._query = v;\n\n this._subscribeToQuery();\n }\n private _query!: Q;\n\n @Input('queryCache')\n get cache(): boolean {\n return this._cache;\n }\n set cache(v: boolean) {\n this._cache = v;\n }\n private _cache = false;\n\n constructor(\n private _mainTemplateRef: TemplateRef<QueryContext<Q>>,\n private _viewContainerRef: ViewContainerRef,\n private _errorHandler: ErrorHandler,\n private _cdr: ChangeDetectorRef,\n ) {}\n\n static ngTemplateContextGuard<Q extends AnyQuery | null>(\n dir: QueryDirective<Q>,\n ctx: unknown,\n ): ctx is QueryContext<Q> {\n return true;\n }\n\n ngOnInit(): void {\n this._renderMainView();\n }\n\n ngOnDestroy(): void {\n this._subscription?.unsubscribe();\n }\n\n private _subscribeToQuery(): void {\n this._subscription?.unsubscribe();\n this._subscription = null;\n\n if (!this.query) {\n return;\n }\n\n const sub = this.query.state$.pipe(tap((state) => this._updateView(state))).subscribe();\n\n this._subscription = sub;\n }\n\n private _updateView(state: QueryState) {\n if (isQueryStateLoading(state)) {\n this._viewContext.loading = true;\n } else {\n this._viewContext.loading = false;\n }\n\n if (isQueryStateSuccess(state)) {\n this._viewContext.query = state.response as QueryResponseType<Q>;\n this._viewContext.$implicit = state.response as QueryResponseType<Q>;\n this._viewContext.raw = state.rawResponse as QueryRawResponseType<Q>;\n } else if (!this.cache) {\n this._viewContext.query = null as QueryResponseType<Q>;\n this._viewContext.$implicit = null as QueryResponseType<Q>;\n this._viewContext.raw = null as QueryRawResponseType<Q>;\n }\n\n if (isQueryStateFailure(state)) {\n this._viewContext.error = state.error;\n\n this._errorHandler.handleError(state.error);\n } else {\n this._viewContext.error = null;\n }\n\n this._cdr.markForCheck();\n }\n\n private _renderMainView(): void {\n if (!this._isMainViewCreated) {\n this._isMainViewCreated = true;\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { filterSuccess, QueryStateData, takeUntilResponse } from '../query';\nimport { AnyQueryCreator, QueryCreatorArgs, QueryCreatorReturnType } from '../query-client';\nimport { InfinityQueryConfig, InfinityQueryParamLocation } from './infinity-query.types';\n\nexport class InfinityQuery<\n QueryCreator extends AnyQueryCreator,\n Query extends QueryCreatorReturnType<QueryCreator>,\n Args extends QueryCreatorArgs<QueryCreator>,\n QueryResponse extends QueryStateData<Query['state']>,\n InfinityResponse extends unknown[],\n> {\n private readonly _currentPage$ = new BehaviorSubject<number | null>(null);\n private readonly _currentCalculatedPage$ = new BehaviorSubject<number | null>(null);\n private readonly _totalPages$ = new BehaviorSubject<number | null>(null);\n private readonly _itemsPerPage$ = new BehaviorSubject<number>(this._config.limitParam?.value ?? 10);\n private readonly _currentQuery$ = new BehaviorSubject<Query | null>(null);\n private readonly _data$ = new BehaviorSubject<InfinityResponse>([] as any as InfinityResponse);\n\n private _subscriptions: Subscription[] = [];\n\n get currentPage$() {\n return this._currentPage$.asObservable();\n }\n\n get currentPage() {\n return this._currentPage$.getValue();\n }\n\n get currentCalculatedPage$() {\n return this._currentCalculatedPage$.asObservable();\n }\n\n get currentCalculatedPage() {\n return this._currentCalculatedPage$.getValue();\n }\n\n get totalPages$() {\n return this._totalPages$.asObservable();\n }\n\n get totalPages() {\n return this._totalPages$.getValue();\n }\n\n get itemsPerPage$() {\n return this._itemsPerPage$.asObservable();\n }\n\n get itemsPerPage() {\n return this._itemsPerPage$.getValue();\n }\n\n get currentQuery$() {\n return this._currentQuery$.asObservable();\n }\n\n get currentQuery() {\n return this._currentQuery$.getValue();\n }\n\n get data$() {\n return this._data$.asObservable();\n }\n\n get data() {\n return this._data$.getValue();\n }\n\n constructor(private _config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>) {}\n\n nextPage() {\n const newPage = (this._currentPage$.value ?? 0) + 1;\n const calculatedPage =\n this._config?.pageParam?.valueCalculator?.({\n page: newPage,\n totalPages: this.totalPages,\n itemsPerPage: this.itemsPerPage,\n }) ?? newPage;\n\n const args = this._prepareArgs(this._config, calculatedPage);\n\n const query = this._config.queryCreator.prepare(args).execute() as Query;\n this._handleNewQuery(query);\n\n this._currentPage$.next(newPage);\n this._currentCalculatedPage$.next(calculatedPage);\n this._currentQuery$.next(query);\n }\n\n reset(\n newConfig?: Omit<\n InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n 'queryCreator' | 'response'\n >,\n ) {\n this._destroy();\n\n this._config = { ...this._config, ...(newConfig ?? {}) };\n\n this._currentPage$.next(null);\n this._currentCalculatedPage$.next(null);\n this._totalPages$.next(null);\n this._itemsPerPage$.next(this._config.limitParam?.value ?? 10);\n this._currentQuery$.next(null);\n\n this._data$.next([] as any as InfinityResponse);\n }\n\n _destroy() {\n this._subscriptions.forEach((sub) => sub.unsubscribe());\n this._subscriptions = [];\n }\n\n private _handleNewQuery(query: Query) {\n const stateChangesSub = query.state$.pipe(takeUntilResponse(), filterSuccess()).subscribe({\n next: (state) => {\n let newData = this._config?.response.valueExtractor(state.response);\n\n if (this._config.response.reverse) {\n newData = [...newData].reverse() as InfinityResponse;\n }\n\n if (this._config.response.appendItemsTo === 'start') {\n newData = [...newData, ...this.data] as InfinityResponse;\n } else {\n newData = [...this.data, ...newData] as InfinityResponse;\n }\n\n this._data$.next(newData);\n\n const totalPages =\n this._config.response.totalPagesExtractor?.({\n response: state.response,\n itemsPerPage: this.itemsPerPage,\n }) ??\n state.response?.totalPages ??\n null;\n\n this._totalPages$.next(totalPages);\n },\n complete: () => {\n this._subscriptions = this._subscriptions.filter((sub) => sub !== stateChangesSub);\n },\n });\n\n this._subscriptions.push(stateChangesSub);\n }\n\n private _prepareArgs(config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>, page: number) {\n const pageParamLocation = this._getPageParamLocation(config?.pageParam?.location);\n\n const pageArgs = {\n [pageParamLocation]: {\n [config?.pageParam?.key ?? 'page']: page,\n },\n };\n\n const limitParamLocation = this._getPageParamLocation(config?.limitParam?.location);\n\n const limitArgs = {\n [limitParamLocation]: {\n [config?.limitParam?.key ?? 'limit']: config?.limitParam?.value ?? 10,\n },\n };\n\n const defaultConfig = config?.defaultArgs ?? {};\n\n const mergedArgs =\n pageParamLocation === limitParamLocation\n ? {\n ...defaultConfig,\n [pageParamLocation]: {\n ...(config?.defaultArgs?.[pageParamLocation] ?? {}),\n ...pageArgs[limitParamLocation],\n ...limitArgs[limitParamLocation],\n },\n }\n : {\n ...defaultConfig,\n [pageParamLocation]: {\n ...(config?.defaultArgs?.[pageParamLocation] ?? {}),\n ...pageArgs[pageParamLocation],\n },\n [limitParamLocation]: {\n ...(config?.defaultArgs?.[limitParamLocation] ?? {}),\n ...limitArgs[limitParamLocation],\n },\n };\n\n return mergedArgs;\n }\n\n private _getPageParamLocation(location: InfinityQueryParamLocation | undefined) {\n const loc = location ?? 'query';\n\n switch (loc) {\n case 'path':\n return 'pathParams';\n case 'query':\n return 'queryParams';\n case 'body':\n return 'body';\n case 'header':\n return 'headers';\n case 'variable':\n return 'variables';\n default:\n throw new Error(`Invalid pageParamLocation: ${loc}`);\n }\n }\n}\n","import { QueryStateData } from '../query';\nimport { AnyQueryCreator, QueryCreatorArgs, QueryCreatorReturnType } from '../query-client';\nimport { InfinityQueryConfig, PageParamCalculatorOptions } from './infinity-query.types';\n\nexport const createInfinityQueryConfig = <\n QueryCreator extends AnyQueryCreator,\n Query extends QueryCreatorReturnType<QueryCreator>,\n Args extends QueryCreatorArgs<QueryCreator>,\n QueryResponse extends QueryStateData<Query['state']>,\n InfinityResponse extends unknown[],\n>(\n config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n) => config;\n\nexport const skipPaginationPageParamCalculator = ({ page, itemsPerPage }: PageParamCalculatorOptions) =>\n itemsPerPage * (page - 1);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n inject,\n InjectionToken,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { DestroyDirective } from '@ethlete/core';\nimport { BehaviorSubject, of, Subject, switchMap, takeUntil, tap } from 'rxjs';\nimport { InfinityQuery, InfinityQueryConfig } from '../infinite-query';\nimport { BaseArguments, isQueryStateFailure, isQueryStateLoading, isQueryStateSuccess } from '../query';\nimport { AnyQueryCreator } from '../query-client';\nimport { RequestError } from '../request';\n\ninterface InfinityQueryContext<Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments, any, unknown[]>> {\n $implicit: Q['response']['arrayType'] | null;\n infinityQuery: Q['response']['arrayType'] | null;\n loading: boolean;\n error: RequestError<unknown> | null;\n\n isFirstLoad: boolean;\n canLoadMore: boolean;\n currentPage: number | null;\n currentCalculatedPage: number | null;\n totalPages: number | null;\n itemsPerPage: number | null;\n}\n\nexport const INFINITY_QUERY_TOKEN = new InjectionToken<InfinityQueryDirective<any>>('INFINITY_QUERY_TOKEN');\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[infinityQuery]',\n exportAs: 'infinityQuery',\n standalone: true,\n providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }],\n hostDirectives: [DestroyDirective],\n})\nexport class InfinityQueryDirective<Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments, any, unknown[]>>\n implements OnInit, OnDestroy\n{\n private readonly _queryConfigChanged$ = new Subject<boolean>();\n private readonly _viewContext: InfinityQueryContext<Q> = {\n $implicit: null,\n infinityQuery: null,\n loading: false,\n error: null,\n\n isFirstLoad: false,\n canLoadMore: false,\n currentPage: null,\n currentCalculatedPage: null,\n totalPages: null,\n itemsPerPage: null,\n };\n private _infinityQueryInstance: ReturnType<typeof this._setupInfinityQuery> | null = null;\n\n private readonly _destroy$ = inject(DestroyDirective).destroy$;\n private readonly _cdr = inject(ChangeDetectorRef);\n private readonly _viewContainerRef = inject(ViewContainerRef);\n private readonly _mainTemplateRef = inject(TemplateRef<InfinityQueryContext<Q>>);\n private readonly _errorHandler = inject(ErrorHandler);\n\n private readonly _data$ = new BehaviorSubject<Q['response']['arrayType']>([]);\n\n private _isMainViewCreated = false;\n\n @Input()\n get infinityQuery(): Q {\n return this._infinityQuery;\n }\n set infinityQuery(v: Q) {\n this._cleanup();\n\n this._infinityQuery = v;\n this._infinityQueryInstance = this._setupInfinityQuery(v);\n this._loadNextPage();\n }\n private _infinityQuery!: Q;\n\n get context() {\n return this._viewContext;\n }\n\n get instance() {\n return this._infinityQueryInstance;\n }\n\n get data$() {\n return this._data$.asObservable();\n }\n\n get data() {\n return this._data$.getValue();\n }\n\n static ngTemplateContextGuard<Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments, any, unknown[]>>(\n dir: InfinityQueryDirective<Q>,\n ctx: unknown,\n ): ctx is InfinityQueryContext<Q> {\n return true;\n }\n\n ngOnInit(): void {\n this._renderMainView();\n }\n\n ngOnDestroy(): void {\n this.instance?._destroy();\n }\n\n private _setupInfinityQuery(config: Q) {\n const instance = new InfinityQuery(config);\n\n instance.currentQuery$\n .pipe(\n switchMap((q) => q?.state$ ?? of(null)),\n tap((state) => {\n this._viewContext.currentPage = instance.currentPage;\n this._viewContext.totalPages = instance.totalPages;\n this._viewContext.itemsPerPage = instance.itemsPerPage;\n this._viewContext.canLoadMore =\n (instance.totalPages && instance.currentPage && instance.totalPages > instance.currentPage) || false;\n this._viewContext.currentCalculatedPage = instance.currentCalculatedPage;\n\n if (isQueryStateLoading(state)) {\n this._viewContext.loading = true;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = this.context.infinityQuery === null;\n } else if (isQueryStateFailure(state)) {\n this._viewContext.loading = false;\n this._viewContext.error = state.error;\n this._viewContext.isFirstLoad = false;\n this._errorHandler.handleError(state.error);\n } else if (isQueryStateSuccess(state)) {\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = false;\n } else {\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.infinityQuery = null;\n this._viewContext.$implicit = null;\n\n this._viewContext.isFirstLoad = false;\n this._viewContext.canLoadMore = false;\n this._viewContext.currentPage = null;\n this._viewContext.itemsPerPage = null;\n this._viewContext.totalPages = null;\n\n this._data$.next([]);\n }\n\n this._cdr.markForCheck();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._queryConfigChanged$),\n )\n .subscribe();\n\n instance.data$\n .pipe(\n tap((data) => {\n this._viewContext.infinityQuery = this._viewContext.$implicit = data as Q['response']['arrayType'] | null;\n this._data$.next(data);\n\n this._cdr.markForCheck();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._queryConfigChanged$),\n )\n .subscribe();\n\n return instance;\n }\n\n _loadNextPage() {\n if (!this._infinityQueryInstance) {\n return;\n }\n\n this._infinityQueryInstance.nextPage();\n }\n\n private _renderMainView(): void {\n if (!this._isMainViewCreated) {\n this._isMainViewCreated = true;\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);\n }\n }\n\n private _cleanup() {\n this._queryConfigChanged$.next(true);\n\n this.instance?._destroy();\n\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.infinityQuery = null;\n this._viewContext.$implicit = null;\n\n this._viewContext.isFirstLoad = false;\n this._viewContext.canLoadMore = false;\n this._viewContext.currentPage = null;\n this._viewContext.itemsPerPage = null;\n this._viewContext.totalPages = null;\n\n this._data$.next([]);\n }\n}\n","import { Directive, ElementRef, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { fromEvent, Subject, takeUntil } from 'rxjs';\nimport { INFINITY_QUERY_TOKEN } from './infinity-query.directive';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[infinityQueryTrigger], infinity-query-trigger',\n standalone: true,\n})\nexport class InfinityQueryTriggerDirective implements OnInit, OnDestroy {\n private _elementRef = inject(ElementRef<HTMLElement>);\n private _infinityQuery = inject(INFINITY_QUERY_TOKEN);\n\n private _destroy = new Subject<boolean>();\n private _observer: IntersectionObserver | null = null;\n\n click$ = fromEvent(this._elementRef.nativeElement, 'click');\n\n @Input()\n scrollContainerSelector: string | null = null;\n\n ngOnInit(): void {\n const isInteractive = this._elementRef.nativeElement.hasAttribute('infinityQueryTrigger');\n\n if (isInteractive) {\n this.click$.pipe(takeUntil(this._destroy)).subscribe(() => this._infinityQuery._loadNextPage());\n } else {\n this._setupIntersectionObserver();\n }\n }\n\n ngOnDestroy(): void {\n this._destroy.next(true);\n this._destroy.unsubscribe();\n this._observer?.disconnect();\n }\n\n private _setupIntersectionObserver(): void {\n this._observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n\n if (entry.isIntersecting && !this._infinityQuery.context.loading) {\n this._infinityQuery._loadNextPage();\n }\n },\n {\n root: this.scrollContainerSelector ? document.querySelector(this.scrollContainerSelector) : null,\n rootMargin: '0px',\n threshold: 1.0,\n },\n );\n\n this._observer.observe(this._elementRef.nativeElement);\n }\n}\n","import { AnyQuery } from '../query';\n\nexport class QueryStore {\n private readonly _store = new Map<string, AnyQuery>();\n private _garbageCollector: number | null = null;\n\n constructor(\n private _config?: {\n enableChangeLogging?: boolean;\n enableGarbageCollectorLogging?: boolean;\n },\n ) {}\n\n add(id: string, query: AnyQuery) {\n this._store.set(id, query);\n\n this._initGarbageCollector();\n\n this._logState(id, query, 'SET');\n }\n\n get(id: string) {\n return this._store.get(id) ?? null;\n }\n\n remove(id: string) {\n this._store.delete(id);\n\n this._logState(id, null, 'REMOVE');\n }\n\n private _logState(key: string | null, item: AnyQuery | null, operation: string) {\n if (!this._config?.enableChangeLogging) return;\n\n const stateAsJson: Record<string, AnyQuery> = {};\n\n this._store.forEach((value, key) => {\n stateAsJson[key] = value;\n });\n\n console.log(`%c[${operation}] ${key}`, 'font-weight: bold');\n\n console.log({ operation, key, item });\n console.log(stateAsJson);\n }\n\n private _initGarbageCollector() {\n if (this._garbageCollector !== null) {\n return;\n }\n\n this._logGarbageCollector('Start');\n\n this._garbageCollector = window.setInterval(() => {\n this._runGarbageCollector();\n }, 15000);\n }\n\n private _stopGarbageCollector() {\n if (this._garbageCollector !== null) {\n window.clearInterval(this._garbageCollector);\n this._garbageCollector = null;\n }\n }\n\n private _runGarbageCollector() {\n this._logGarbageCollector('Collecting...');\n\n this._store.forEach((item, key) => {\n if (item.isExpired) {\n this.remove(key);\n }\n });\n\n this._logGarbageCollector('Collection done');\n\n if (!this._store.size) {\n this._stopGarbageCollector();\n this._logGarbageCollector('Stop');\n }\n }\n\n private _logGarbageCollector(action: string) {\n if (!this._config?.enableGarbageCollectorLogging) return;\n\n console.log(`%cGC: ${action}`, 'color: yellow; font-weight: bold');\n }\n}\n","import { BaseArguments, GqlQueryConfig } from '../query/query.types';\nimport { Method } from '../request';\n\nexport const shouldCacheQuery = (method: Method) => {\n return method === 'GET' || method === 'OPTIONS' || method === 'HEAD' || method === 'GQL_QUERY';\n};\n\nexport const buildGqlCacheKey = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n config: GqlQueryConfig<any, any, any, any>,\n args: BaseArguments | undefined,\n) => {\n const { query } = config;\n const variables = args?.variables || {};\n\n const queryWithoutNewLinesAndWhitespace = query.replace(/\\s/g, '');\n\n const queryFirst50Chars = queryWithoutNewLinesAndWhitespace.slice(0, 50);\n const queryMiddle25Chars = queryWithoutNewLinesAndWhitespace.slice(\n queryWithoutNewLinesAndWhitespace.length / 2 - 25,\n queryWithoutNewLinesAndWhitespace.length / 2 + 25,\n );\n const queryLast50Chars = queryWithoutNewLinesAndWhitespace.slice(-50);\n\n const vars = JSON.stringify(variables);\n\n return `${queryFirst50Chars}...${queryMiddle25Chars}...${queryLast50Chars}...${vars}`;\n};\n","import { BehaviorSubject } from 'rxjs';\nimport { AuthProvider } from '../auth';\nimport {\n BaseArguments,\n GqlQueryConfig,\n GqlQueryConfigWithoutMethod,\n isGqlQueryConfig,\n Query,\n QueryConfig,\n QueryConfigWithoutMethod,\n RouteType,\n} from '../query';\nimport { QueryStore } from '../query-store';\nimport { buildRoute, Method as MethodType } from '../request';\nimport {\n DefaultResponseTransformer,\n QueryClientConfig,\n QueryCreator,\n ResponseTransformerType,\n} from './query-client.types';\nimport { buildGqlCacheKey, shouldCacheQuery } from './query-client.utils';\n\nexport class QueryClient {\n private readonly _store: QueryStore;\n private _authProvider: AuthProvider | null = null;\n\n get config() {\n return this._clientConfig;\n }\n\n get authProvider() {\n return this._authProvider;\n }\n\n constructor(private _clientConfig: QueryClientConfig) {\n this._store = new QueryStore({\n enableChangeLogging: _clientConfig.logging?.queryStateChanges,\n enableGarbageCollectorLogging: _clientConfig.logging?.queryStateGarbageCollector,\n });\n }\n\n get = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, ResponseTransformer>,\n ) =>\n this.fetch<Route, Response, Arguments, 'GET', ResponseTransformer>({\n ...queryConfig,\n method: 'GET',\n });\n\n post = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, ResponseTransformer>,\n ) =>\n this.fetch<Route, Response, Arguments, 'POST', ResponseTransformer>({\n ...queryConfig,\n method: 'POST',\n });\n\n put = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, ResponseTransformer>,\n ) =>\n this.fetch<Route, Response, Arguments, 'PUT', ResponseTransformer>({\n ...queryConfig,\n method: 'PUT',\n });\n\n patch = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, ResponseTransformer>,\n ) =>\n this.fetch<Route, Response, Arguments, 'PATCH', ResponseTransformer>({\n ...queryConfig,\n method: 'PATCH',\n });\n\n delete = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, ResponseTransformer>,\n ) =>\n this.fetch<Route, Response, Arguments, 'DELETE', ResponseTransformer>({\n ...queryConfig,\n method: 'DELETE',\n });\n\n gqlQuery = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, ResponseTransformer>,\n ) =>\n this.fetch<Route, Response, Arguments, 'GQL_QUERY', ResponseTransformer>({\n ...queryConfig,\n method: 'GQL_QUERY',\n });\n\n gqlMutate = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, ResponseTransformer>,\n ) =>\n this.fetch<Route, Response, Arguments, 'GQL_MUTATE', ResponseTransformer>({\n ...queryConfig,\n method: 'GQL_MUTATE',\n });\n\n fetch = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined,\n Method extends MethodType,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n >(\n queryConfig:\n | QueryConfig<Route, Response, Arguments, ResponseTransformer>\n | GqlQueryConfig<Route, Response, Arguments, ResponseTransformer>,\n ): QueryCreator<Arguments, Method, Response, Route, ResponseTransformer> => {\n const prepare = (args?: Arguments) => {\n const route = buildRoute({\n base: this._clientConfig.baseRoute,\n route: queryConfig.route,\n pathParams: (args as BaseArguments)?.pathParams,\n queryParams: (args as BaseArguments)?.queryParams,\n }) as Route;\n\n const cacheKey = isGqlQueryConfig(queryConfig) ? buildGqlCacheKey(queryConfig, args) : route;\n\n if (shouldCacheQuery(queryConfig.method)) {\n const existingQuery = this._store.get(cacheKey);\n\n if (existingQuery) {\n return existingQuery as Query<Response, Arguments, Route, Method, ResponseTransformer>;\n }\n }\n\n const query = new Query<Response, Arguments, Route, Method, ResponseTransformer>(this, queryConfig, route, args);\n\n if (shouldCacheQuery(queryConfig.method)) {\n this._store.add(cacheKey, query);\n }\n\n return query;\n };\n\n const behaviorSubject = <T extends ReturnType<typeof prepare>>(initialValue: T | null = null) =>\n new BehaviorSubject<T | null>(initialValue);\n\n return {\n prepare,\n behaviorSubject,\n } as unknown as QueryCreator<Arguments, Method, Response, Route, ResponseTransformer>;\n };\n\n setAuthProvider = (authProvider: AuthProvider) => {\n if (this._authProvider) {\n throw new Error('The auth provider is already set. Please call clearAuthProvider() first.');\n }\n\n this._authProvider = authProvider;\n authProvider.queryClient = this;\n };\n\n clearAuthProvider = () => {\n this._authProvider?.cleanUp();\n this._authProvider = null;\n };\n}\n","import { inject } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { combineLatest, concat, debounceTime, distinctUntilChanged, map, Observable, startWith, take, tap } from 'rxjs';\nimport { QueryFieldOptions, QueryFormGroup, QueryFormValue } from './query-form.types';\n\nexport class QueryField<T> {\n changes$ = this._setupChangesObservable();\n\n get control() {\n return this.data.control;\n }\n\n private _currentDebounceTimeout: number | null = null;\n\n constructor(public data: QueryFieldOptions<T>) {}\n\n setValue(value: T | null) {\n if (this._currentDebounceTimeout !== null) {\n clearTimeout(this._currentDebounceTimeout);\n }\n\n if (this.data.debounce) {\n this._currentDebounceTimeout = window.setTimeout(() => {\n this.control.setValue(value);\n }, this.data.debounce);\n } else {\n this.control.setValue(value);\n }\n }\n\n private _setupChangesObservable() {\n const obs = this.control.valueChanges.pipe(startWith(this.control.value));\n\n if (!this.data.debounce) {\n return obs;\n }\n\n // The initial value should get emitted immediately\n // concat switches to the debounced observable after the first observable is completed\n return concat(obs.pipe(take(1)), this.control.valueChanges.pipe(debounceTime(this.data.debounce)));\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class QueryForm<T extends Record<string, QueryField<any>>> {\n private _router = inject(Router, { optional: true });\n private _activatedRoute = inject(ActivatedRoute, { optional: true });\n private _defaultValues = this._extractDefaultValues();\n\n form = this._setupFormGroup();\n\n constructor(private _fields: T) {}\n\n observe(options?: { syncViaUrlQueryParams?: boolean }) {\n return combineLatest(Object.values(this._fields).map((field) => field.changes$)).pipe(\n map(() => this.form.getRawValue()),\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n tap((values) => {\n if (options?.syncViaUrlQueryParams !== false) {\n this._syncViaUrlQueryParams(values);\n }\n }),\n\n // This type cast is needed since ng-packagr will break the type inference otherwise.\n ) as Observable<QueryFormValue<T>>;\n }\n\n setFormValueFromUrlQueryParams() {\n if (!this._activatedRoute) {\n throw new Error('Cannot set form value from url query params without ActivatedRoute');\n }\n\n const queryParams = this._activatedRoute.snapshot.queryParams;\n\n for (const [key, field] of Object.entries(this._fields)) {\n const value = queryParams[key];\n\n // We only check using == because the value types can be different (e.g. \"1\" and 1)\n if (value === undefined || value == field.control.value) {\n continue;\n }\n\n const deserializedValue = field.data.queryParamToValueTransformFn?.(value) ?? value;\n\n field.setValue(deserializedValue);\n }\n }\n\n updateFormOnUrlQueryParamsChange() {\n if (!this._activatedRoute) {\n throw new Error('Cannot update form on url query params change without ActivatedRoute');\n }\n\n return this._activatedRoute.queryParams.pipe(tap(() => this.setFormValueFromUrlQueryParams()));\n }\n\n private _getDefaultValue(key: string) {\n return this._defaultValues[key] ?? null;\n }\n\n private _isDefaultValue(key: string, value: unknown) {\n const normalizedValue = Array.isArray(value) ? JSON.stringify(value) : value;\n\n return this._getDefaultValue(key) === normalizedValue;\n }\n\n private _setupFormGroup() {\n const group = new FormGroup({} as QueryFormGroup<T>);\n\n for (const [key, field] of Object.entries(this._fields)) {\n group.addControl(key, field.control);\n }\n\n return group;\n }\n\n private _extractDefaultValues() {\n const defaultValues: Record<string, unknown> = {};\n\n for (const [key, field] of Object.entries(this._fields)) {\n const value = field.control.value;\n\n if (value === null || value === undefined) {\n continue;\n }\n\n if (Array.isArray(value)) {\n defaultValues[key] = JSON.stringify(value);\n } else {\n defaultValues[key] = value;\n }\n }\n\n return defaultValues;\n }\n\n private _syncViaUrlQueryParams(values: Record<string, unknown>) {\n if (!this._router || !this._activatedRoute) {\n return;\n }\n\n const queryParams = structuredClone(this._activatedRoute.snapshot.queryParams);\n\n for (const [key, value] of Object.entries(values)) {\n if (this._isDefaultValue(key, value) || this._fields[key].data.appendToUrl === false) {\n delete queryParams[key];\n } else {\n queryParams[key] = this._fields[key].data.valueToQueryParamTransformFn\n ? this._fields[key].data.valueToQueryParamTransformFn?.(value)\n : value;\n }\n }\n\n this._router.navigate([], {\n queryParams,\n });\n }\n}\n","export const transformToString = (value: unknown) => {\n if (typeof value === 'string') {\n return value;\n }\n\n return null;\n};\n\nexport const transformToStringArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToString).filter(Boolean) as string[];\n } else if (typeof value === 'string') {\n return [transformToString(value)] as string[];\n }\n\n return null;\n};\n\nexport const transformToNumber = (value: unknown) => {\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n return Number(value);\n }\n return null;\n};\n\nexport const transformToNumberArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToNumber).filter((item) => item !== null) as number[];\n } else if (typeof value === 'number') {\n return [value] as number[];\n }\n\n return null;\n};\n\nexport const transformToBoolean = (value: unknown) => {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n return value === 'true' || value === '1';\n }\n return null;\n};\n\nexport const transformToBooleanArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToBoolean).filter((item) => item !== null) as boolean[];\n } else if (typeof value === 'string' || typeof value === 'boolean') {\n return [transformToBoolean(value)] as boolean[];\n }\n\n return null;\n};\n\nexport const transformToDate = (value: unknown) => {\n if (value instanceof Date) {\n return value;\n }\n if (typeof value === 'string') {\n const date = new Date(value);\n\n if (isNaN(date.getTime())) {\n return null;\n }\n\n return date;\n }\n return null;\n};\n\nexport const transformToDateArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToDate).filter((item) => item !== null) as Date[];\n } else if (typeof value === 'string' || value instanceof Date) {\n return [transformToDate(value)] as Date[];\n }\n\n return null;\n};\n\nexport const transformToSort = (value: unknown) => {\n if (typeof value === 'string') {\n const [active, direction] = value.split(':');\n\n return {\n active,\n direction: direction as 'asc' | 'desc',\n };\n }\n\n return null;\n};\n\nexport const transformToSortQueryParam = (value: unknown) => {\n if (typeof value === 'string') {\n return value;\n }\n if (value && typeof value === 'object' && 'active' in value && 'direction' in value) {\n const valAsSort = value as {\n active: string;\n direction: 'asc' | 'desc';\n };\n\n return valAsSort.direction ? `${valAsSort.active}:${valAsSort.direction}` : null;\n }\n\n return null;\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ethlete-query.mjs","sources":["../../../../libs/query/src/lib/auth/custom-header-auth-provider.ts","../../../../libs/query/src/lib/auth/basic-auth-provider.ts","../../../../libs/query/src/lib/gql/gql.ts","../../../../libs/query/src/lib/logger/logger.ts","../../../../libs/query/src/lib/request/request.util.ts","../../../../libs/query/src/lib/request/request.ts","../../../../libs/query/src/lib/query/query.utils.ts","../../../../libs/query/src/lib/query/query.ts","../../../../libs/query/src/lib/auth/auth-provider.utils.ts","../../../../libs/query/src/lib/auth/bearer-auth-provider.ts","../../../../libs/query/src/lib/directives/query.directive.ts","../../../../libs/query/src/lib/infinite-query/infinity-query.ts","../../../../libs/query/src/lib/infinite-query/infinity-query.utils.ts","../../../../libs/query/src/lib/directives/infinity-query.directive.ts","../../../../libs/query/src/lib/directives/infinity-query-trigger.directive.ts","../../../../libs/query/src/lib/query-store/query-store.ts","../../../../libs/query/src/lib/query-client/query-client.utils.ts","../../../../libs/query/src/lib/query-client/query-client.ts","../../../../libs/query/src/lib/query-form/query-form.ts","../../../../libs/query/src/lib/query-form/query-form.utils.ts","../../../../libs/query/src/lib/utils/deep-freeze.util.ts","../../../../libs/query/src/lib/utils/def.util.ts","../../../../libs/query/src/ethlete-query.ts"],"sourcesContent":["import { AuthProvider, AuthProviderCustomHeaderConfig } from './auth-provider.types';\n\nexport class CustomHeaderAuthProvider implements AuthProvider {\n get header() {\n return { [this._config.name]: this._config.value };\n }\n\n constructor(private _config: AuthProviderCustomHeaderConfig) {}\n\n cleanUp(): void {\n // noop\n }\n}\n","import { AuthProvider, AuthProviderBasicConfig } from './auth-provider.types';\n\nexport class BasicAuthProvider implements AuthProvider {\n get header() {\n return { Authorization: `Basic ${this._basicAuthString}` };\n }\n\n private get _basicAuthString() {\n return btoa(`${this._config.username}:${this._config.password}`);\n }\n\n constructor(private _config: AuthProviderBasicConfig) {}\n\n cleanUp(): void {\n // noop\n }\n}\n","const getOpName = /(query|mutation) ?([\\w\\d-_]+)? ?\\(.*?\\)? \\{/;\n\nexport const transformGql = (str: string) => {\n str = Array.isArray(str) ? str.join('') : str;\n const name = getOpName.exec(str);\n return function (variables: Record<string, unknown> | null | undefined) {\n const data: Record<string, unknown> = { query: str };\n if (variables) data['variables'] = JSON.stringify(variables);\n if (name && name.length) {\n const operationName = name[2];\n if (operationName) data['operationName'] = name[2];\n }\n return JSON.stringify(data);\n };\n};\n\nexport const gql = (strings: TemplateStringsArray, ...values: string[]) => {\n const str = strings.reduce((acc, cur, i) => {\n return acc + cur + (values[i] || '');\n }, '');\n return str;\n};\n","export const buildErrorMessage = (code: string, message: string) => `[@ethlete\\\\query:${code}] ${message}`;\n\nexport class QueryError extends Error {\n data?: unknown;\n\n constructor(code: string, message: string, data?: unknown) {\n super(buildErrorMessage(code, message));\n this.name = 'QueryError';\n this.data = data;\n }\n}\n\nexport const invalidBaseRouteError = (data: unknown) =>\n new QueryError('001', 'The baseRoute must not end with a slash', data);\n\nexport const invalidRouteError = (data: unknown) => new QueryError('002', 'The route must start with a slash', data);\n\nexport const pathParamsMissingInRouteFunctionError = (data: unknown) =>\n new QueryError('003', 'The route is a function but pathParams are missing', data);\n\nexport const queryStateAlreadyHasKeyError = (data: unknown) =>\n new QueryError('004', 'The query state already contains the provided key', data);\n\nexport const queryStateDoesNotContainKeyError = (data: unknown) =>\n new QueryError('005', 'The query state does not contain the provided key', data);\n\nexport const queryStateCannotTransformError = (data: unknown) =>\n new QueryError('006', 'The query state cannot be transformed because it is not loading', data);\n\nexport const invalidBodyError = (data: unknown) => new QueryError('007', 'The body is not valid or upsupported', data);\n","import { invalidBaseRouteError, invalidRouteError, pathParamsMissingInRouteFunctionError } from '../logger';\nimport {\n Method,\n ParamArray,\n Params,\n QueryParams,\n RequestError,\n RequestHeaders,\n UnfilteredParamPrimitive,\n} from './request.types';\n\nexport const isRequestError = <T = unknown>(error: unknown): error is RequestError<T> =>\n error instanceof Object && 'code' in error && 'message' in error;\n\nexport const buildRoute = (options: {\n base: string;\n route: ((args: Record<string, unknown>) => string) | string | null | undefined;\n pathParams?: Record<string, unknown>;\n queryParams?: QueryParams;\n}) => {\n if (options.base.endsWith('/')) {\n throw invalidBaseRouteError(options.base);\n }\n\n let route: string | null = null;\n\n if (typeof options.route === 'function') {\n if (!options.pathParams) {\n throw pathParamsMissingInRouteFunctionError(options.route({}));\n }\n\n route = options.route(options.pathParams);\n } else {\n route = options.route ?? null;\n }\n\n if (route && !route.startsWith('/')) {\n throw invalidRouteError(route);\n }\n\n if (options.queryParams) {\n const queryString = buildQueryString(options.queryParams);\n\n if (queryString) {\n route = route ? `${route}?${queryString}` : `/?${queryString}`;\n }\n }\n\n return `${options.base}${route ?? ''}`;\n};\n\nexport const buildQueryString = (params: QueryParams) => {\n const validParams = filterInvalidParams(params);\n\n const queryString = Object.keys(validParams)\n .map((key) =>\n Array.isArray(validParams[key])\n ? buildQueryArrayString(key, validParams[key] as ParamArray)\n : `${key}=${encodeURIComponent(validParams[key] as string | number | boolean)}`,\n )\n .join('&');\n\n return queryString || null;\n};\n\nexport const buildQueryArrayString = (key: string, array: ParamArray) => {\n const uriBrackets = encodeURIComponent('[]');\n\n return array\n .slice()\n .map((item) => `${key}${uriBrackets}=${encodeURIComponent(item as string | number | boolean)}`)\n .join('&');\n};\n\nexport const isFetchResponse = (response: unknown): response is Response =>\n typeof response === 'object' &&\n response !== null &&\n 'status' in response &&\n 'statusText' in response &&\n 'json' in response &&\n typeof (response as Response)['json'] === 'function';\n\nexport const filterInvalidParams = (params: QueryParams) => {\n const filteredParams: Params = Object.entries(params)\n .map(([key, value]) => {\n if (!Array.isArray(value)) {\n return [key, value];\n }\n\n return [key, value.filter((v) => isParamValid(v))];\n })\n .filter(([, value]) => isParamValid(value as UnfilteredParamPrimitive))\n .reduce((acc, [key, value]) => ({ ...acc, [key as string]: value }), {});\n\n return filteredParams;\n};\n\nexport const isParamValid = (primitive: UnfilteredParamPrimitive) => {\n if (primitive === undefined || primitive === null || primitive === '') {\n return false;\n }\n\n if (typeof primitive === 'string' && primitive.trim() === '') {\n return false;\n }\n\n if (typeof primitive === 'number' && isNaN(primitive)) {\n return false;\n }\n\n return true;\n};\n\nexport const extractExpiresInSeconds = (headers: RequestHeaders) => {\n const cacheControl = headers['cache-control'];\n const age = headers['age'];\n const expires = headers['expires'];\n\n // In seconds\n let expiresIn: number | null = null;\n let maxAge: number | null = null;\n\n if (cacheControl?.includes('no-cache')) {\n return null;\n }\n\n if (cacheControl?.includes('max-age')) {\n maxAge = parseInt(cacheControl.split('max-age=')[1]);\n } else if (cacheControl?.includes('s-maxage')) {\n maxAge = parseInt(cacheControl.split('s-maxage=')[1]);\n }\n\n if (maxAge && age) {\n const ageSeconds = parseInt(age);\n\n expiresIn = maxAge - ageSeconds;\n } else if (expires) {\n // Used by some apis to tell the response will never expire\n // In this case we let the response expire after 1 hour\n if (expires === '-1') {\n expiresIn = 3600;\n } else {\n const expiresDate = new Date(expires);\n\n // check if the date is valid\n if (expiresDate.toString() !== 'Invalid Date') {\n expiresIn = Math.floor((expiresDate.getTime() - Date.now()) / 1000);\n }\n }\n }\n\n return expiresIn;\n};\n\nexport const buildTimestampFromSeconds = (seconds: number | null) => {\n if (seconds === null) {\n return null;\n }\n\n return new Date(Date.now() + seconds * 1000).getTime();\n};\n\nexport const serializeBody = (body: unknown): ArrayBuffer | Blob | FormData | string | null => {\n if (body === null || body === undefined) {\n return null;\n }\n\n if (\n body instanceof ArrayBuffer ||\n body instanceof Blob ||\n body instanceof FormData ||\n body instanceof URLSearchParams ||\n typeof body === 'string'\n ) {\n return body;\n }\n\n if (typeof body === 'object' || typeof body === 'boolean' || Array.isArray(body)) {\n return JSON.stringify(body);\n }\n\n return (body as any).toString();\n};\n\nexport const transformMethod = (method: Method) => {\n if (method === 'GQL_QUERY' || method === 'GQL_MUTATE') {\n return 'POST';\n }\n\n return method;\n};\n\nexport const detectContentTypeHeader = (body: unknown) => {\n // An empty body has no content type.\n if (body === null) {\n return null;\n }\n // FormData bodies rely on the browser's content type assignment.\n if (body instanceof FormData) {\n return null;\n }\n // Blobs usually have their own content type. If it doesn't, then\n // no type can be inferred.\n if (body instanceof Blob) {\n return body.type || null;\n }\n // Array buffers have unknown contents and thus no type can be inferred.\n if (body instanceof ArrayBuffer) {\n return null;\n }\n // Technically, strings could be a form of JSON data, but it's safe enough\n // to assume they're plain strings.\n if (typeof body === 'string') {\n return 'text/plain';\n }\n\n // Arrays, objects, boolean and numbers will be encoded as JSON.\n if (typeof body === 'object' || typeof body === 'number' || typeof body === 'boolean') {\n return 'application/json';\n }\n // No type could be inferred.\n return null;\n};\n\nexport const hasHeader = (headers: RequestHeaders, header: string) => {\n return Object.keys(headers).some((key) => key.toLowerCase() === header.toLowerCase());\n};\n\nexport const forEachHeader = (headers: RequestHeaders, callback: (value: string, key: string) => void) => {\n Object.entries(headers).forEach(([key, value]) => {\n callback(key, value);\n });\n};\n\nexport const parseAllXhrResponseHeaders = (xhr: XMLHttpRequest) => {\n const headers = xhr.getAllResponseHeaders();\n const parsedHeaders: RequestHeaders = {};\n\n for (const line of headers.split('\\n')) {\n const index = line.indexOf(':');\n if (index > 0) {\n const name = line.slice(0, index);\n const key = name.toLowerCase();\n const value = line.slice(index + 1).trim();\n\n parsedHeaders[key] = value;\n }\n }\n\n return parsedHeaders;\n};\n\nexport const getResponseUrl = (xhr: XMLHttpRequest): string | null => {\n if ('responseURL' in xhr && xhr.responseURL) {\n return xhr.responseURL;\n }\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL');\n }\n return null;\n};\n\nexport const enum HttpStatusCode {\n Continue = 100,\n SwitchingProtocols = 101,\n Processing = 102,\n EarlyHints = 103,\n\n Ok = 200,\n Created = 201,\n Accepted = 202,\n NonAuthoritativeInformation = 203,\n NoContent = 204,\n ResetContent = 205,\n PartialContent = 206,\n MultiStatus = 207,\n AlreadyReported = 208,\n ImUsed = 226,\n\n MultipleChoices = 300,\n MovedPermanently = 301,\n Found = 302,\n SeeOther = 303,\n NotModified = 304,\n UseProxy = 305,\n Unused = 306,\n TemporaryRedirect = 307,\n PermanentRedirect = 308,\n\n BadRequest = 400,\n Unauthorized = 401,\n PaymentRequired = 402,\n Forbidden = 403,\n NotFound = 404,\n MethodNotAllowed = 405,\n NotAcceptable = 406,\n ProxyAuthenticationRequired = 407,\n RequestTimeout = 408,\n Conflict = 409,\n Gone = 410,\n LengthRequired = 411,\n PreconditionFailed = 412,\n PayloadTooLarge = 413,\n UriTooLong = 414,\n UnsupportedMediaType = 415,\n RangeNotSatisfiable = 416,\n ExpectationFailed = 417,\n ImATeapot = 418,\n MisdirectedRequest = 421,\n UnprocessableEntity = 422,\n Locked = 423,\n FailedDependency = 424,\n TooEarly = 425,\n UpgradeRequired = 426,\n PreconditionRequired = 428,\n TooManyRequests = 429,\n RequestHeaderFieldsTooLarge = 431,\n UnavailableForLegalReasons = 451,\n\n InternalServerError = 500,\n NotImplemented = 501,\n BadGateway = 502,\n ServiceUnavailable = 503,\n GatewayTimeout = 504,\n HttpVersionNotSupported = 505,\n VariantAlsoNegotiates = 506,\n InsufficientStorage = 507,\n LoopDetected = 508,\n NotExtended = 510,\n NetworkAuthenticationRequired = 511,\n}\n","import { Observable, Observer } from 'rxjs';\nimport { PartialXhrState, RequestConfig, RequestEvent } from './request.types';\nimport {\n buildTimestampFromSeconds,\n detectContentTypeHeader,\n extractExpiresInSeconds,\n forEachHeader,\n getResponseUrl,\n hasHeader,\n HttpStatusCode,\n parseAllXhrResponseHeaders,\n serializeBody,\n} from './request.util';\n\nconst XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n\nexport const request = <Response = unknown>(config: RequestConfig): Observable<RequestEvent<Response>> => {\n const headers = config.headers || {};\n const responseType = config.responseType || 'json';\n const body = config.body || null;\n const url = config.urlWithParams.split('?')[0];\n\n return new Observable((observer: Observer<RequestEvent<Response>>) => {\n const xhr = new XMLHttpRequest();\n xhr.open(config.method, config.urlWithParams);\n if (config.withCredentials) {\n xhr.withCredentials = true;\n }\n\n forEachHeader(headers, (name, value) => xhr.setRequestHeader(name, value));\n\n if (!hasHeader(headers, 'Accept')) {\n xhr.setRequestHeader('Accept', 'application/json, text/plain, */*');\n }\n\n if (!hasHeader(headers, 'Content-Type')) {\n const detectedType = detectContentTypeHeader(body);\n\n if (detectedType) {\n xhr.setRequestHeader('Content-Type', detectedType);\n }\n }\n\n xhr.responseType = responseType !== 'json' ? responseType : 'text';\n\n const reqBody = serializeBody(body);\n\n let headerResponse: PartialXhrState | null = null;\n\n const partialFromXhr = (): PartialXhrState => {\n if (headerResponse !== null) {\n return headerResponse;\n }\n\n const statusText = xhr.statusText || 'OK';\n const headers = parseAllXhrResponseHeaders(xhr);\n const _url = getResponseUrl(xhr) || url;\n\n headerResponse = { headers, status: xhr.status, statusText, url: _url };\n\n return headerResponse;\n };\n\n const onLoad = () => {\n const { headers, statusText, url } = partialFromXhr();\n let { status } = partialFromXhr();\n\n let body: unknown | null = null;\n\n if (status !== HttpStatusCode.NoContent) {\n body = typeof xhr.response === 'undefined' ? xhr.responseText : xhr.response;\n }\n\n if (status === 0) {\n status = body ? HttpStatusCode.Ok : 0;\n }\n\n let ok = status >= 200 && status < 300;\n\n if (responseType === 'json' && typeof body === 'string') {\n const originalBody = body;\n body = body.replace(XSSI_PREFIX, '');\n try {\n body = body !== '' ? JSON.parse(body as string) : null;\n } catch (error) {\n body = originalBody;\n\n if (ok) {\n ok = false;\n body = { error, text: body };\n }\n }\n }\n\n if (ok) {\n const successEvent: RequestEvent<Response> = {\n type: 'success',\n headers,\n response: body as Response,\n };\n\n const expiresInSeconds = config.cacheAdapter?.(headers) ?? extractExpiresInSeconds(headers);\n const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);\n\n if (expiresInTimestamp) {\n successEvent.expiresInTimestamp = expiresInTimestamp;\n }\n\n observer.next(successEvent);\n\n observer.complete();\n } else {\n observer.next({\n type: 'failure',\n headers,\n error: {\n url,\n detail: body,\n status,\n statusText,\n },\n });\n\n observer.complete();\n }\n };\n\n const onError = (error: ProgressEvent) => {\n const { url, headers } = partialFromXhr();\n\n observer.next({\n type: 'failure',\n headers,\n error: {\n url,\n detail: error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n },\n });\n\n observer.complete();\n };\n\n const onDownProgress = (event: ProgressEvent) => {\n const { headers } = partialFromXhr();\n\n const progress: RequestEvent = {\n type: 'download-progress',\n headers,\n progress: {\n current: event.loaded,\n },\n };\n\n if (event.lengthComputable) {\n const progressPercent = (event.loaded / event.total) * 100;\n progress.progress.percentage = Math.round(progressPercent * 100) / 100;\n progress.progress.total = event.total;\n }\n\n if (responseType === 'text' && !!xhr.responseText) {\n progress.partialText = xhr.responseText;\n }\n\n observer.next(progress);\n };\n\n const onUpProgress = (event: ProgressEvent) => {\n const { headers } = partialFromXhr();\n\n const progress: RequestEvent = {\n type: 'upload-progress',\n headers,\n progress: {\n current: event.loaded,\n },\n };\n\n if (event.lengthComputable) {\n const progressPercent = (event.loaded / event.total) * 100;\n progress.progress.percentage = Math.round(progressPercent * 100) / 100;\n progress.progress.total = event.total;\n }\n\n observer.next(progress);\n };\n\n xhr.addEventListener('load', onLoad);\n xhr.addEventListener('error', onError);\n xhr.addEventListener('timeout', onError);\n xhr.addEventListener('abort', onError);\n\n if (config.reportProgress) {\n xhr.addEventListener('progress', onDownProgress);\n\n if (reqBody !== null && xhr.upload) {\n xhr.upload.addEventListener('progress', onUpProgress);\n }\n }\n\n xhr.send(reqBody);\n observer.next({ type: 'start', headers });\n\n return () => {\n xhr.removeEventListener('error', onError);\n xhr.removeEventListener('abort', onError);\n xhr.removeEventListener('load', onLoad);\n xhr.removeEventListener('timeout', onError);\n if (config.reportProgress) {\n xhr.removeEventListener('progress', onDownProgress);\n if (reqBody !== null && xhr.upload) {\n xhr.upload.removeEventListener('progress', onUpProgress);\n }\n }\n\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n\n observer.next({ type: 'cancel', headers });\n };\n });\n};\n","import { BehaviorSubject, filter, Observable, of, switchMap, takeWhile } from 'rxjs';\nimport { ResponseTransformerType } from '../query-client';\nimport { Method, RequestHeaders, RequestHeadersMethodMap } from '../request';\nimport {\n AnyQuery,\n AnyQueryCreatorCollection,\n AnyQueryOfCreatorCollection,\n AnyQueryRawResponseOfCreatorCollection,\n AnyQueryResponseOfCreatorCollection,\n BaseArguments,\n Cancelled,\n Failure,\n GqlQueryConfig,\n Loading,\n Prepared,\n QueryRawResponseType,\n QueryResponseType,\n QueryState,\n QueryStateData,\n QueryStateRawData,\n QueryStateType,\n RouteType,\n Success,\n} from './query.types';\n\ntype OmitNull<T> = T extends null ? never : T;\n\nexport function filterSuccess() {\n return function <\n T extends QueryState | null,\n Response extends QueryStateData<OmitNull<T>>,\n RawResponse extends QueryStateRawData<OmitNull<T>>,\n >(source: Observable<T>) {\n return source.pipe(filter((value) => isQueryStateSuccess(value))) as Observable<Success<Response, RawResponse>>;\n };\n}\n\nexport function filterFailure() {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => isQueryStateFailure(value))) as Observable<Failure>;\n };\n}\n\nexport function filterQueryStates(allowedStates: QueryStateType[]) {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => value && allowedStates.includes(value.type))) as Observable<T>;\n };\n}\n\nexport function takeUntilResponse(config?: { excludeNull?: boolean }) {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(\n takeWhile((value) => {\n if (config?.excludeNull && value === null) {\n return false;\n }\n\n return isQueryStateLoading(value) || value === null;\n }, true),\n );\n };\n}\n\nexport function filterNull() {\n return function <T>(source: Observable<T>) {\n return source.pipe(filter((value): value is OmitNull<T> => value !== null));\n };\n}\n\nexport function switchQueryState() {\n return function <\n T extends AnyQuery | null,\n Response extends QueryResponseType<OmitNull<T>>,\n RawResponse extends QueryRawResponseType<OmitNull<T>>,\n >(source: Observable<T>) {\n return source.pipe(switchMap((value) => value?.state$ ?? of(null))) as Observable<QueryState<\n OmitNull<Response>,\n OmitNull<RawResponse>\n > | null>;\n };\n}\n\nexport function switchQueryCollectionState() {\n return function <\n T extends AnyQueryOfCreatorCollection<AnyQueryCreatorCollection> | null,\n Response extends AnyQueryResponseOfCreatorCollection<OmitNull<T>>,\n RawResponse extends AnyQueryRawResponseOfCreatorCollection<OmitNull<T>>,\n >(source: Observable<T>) {\n return source.pipe(switchMap((value) => value?.query.state$ ?? of(null))) as Observable<QueryState<\n OmitNull<Response>,\n OmitNull<RawResponse>\n > | null>;\n };\n}\n\nexport const isQueryStateLoading = (state: QueryState | null | undefined): state is Loading =>\n state?.type === QueryStateType.Loading;\n\nexport const isQueryStateSuccess = (state: QueryState | null | undefined): state is Success =>\n state?.type === QueryStateType.Success;\n\nexport const isQueryStateFailure = (state: QueryState | null | undefined): state is Failure =>\n state?.type === QueryStateType.Failure;\n\nexport const isQueryStateCancelled = (state: QueryState | null | undefined): state is Cancelled =>\n state?.type === QueryStateType.Cancelled;\n\nexport const isQueryStatePrepared = (state: QueryState | null | undefined): state is Prepared =>\n state?.type === QueryStateType.Prepared;\n\nexport const mergeHeaders = (...headers: Array<RequestHeaders | null | undefined>) => {\n return headers.reduce((acc, headers) => {\n if (!headers) {\n return acc;\n }\n\n return {\n ...acc,\n ...headers,\n };\n }, {});\n};\n\nexport const isGqlQueryConfig = <\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends RouteType<Arguments> | undefined,\n ResponseTransformer extends ResponseTransformerType<Response> | undefined,\n>(\n config: unknown,\n): config is GqlQueryConfig<Route, Response, Arguments, ResponseTransformer> => {\n if (!config || typeof config !== 'object' || Array.isArray(config)) {\n return false;\n }\n\n if (!('query' in config)) {\n return false;\n }\n\n return true;\n};\n\nexport const isQuery = <T extends AnyQuery>(query: unknown): query is T => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n\n if (!('state$' in query)) {\n return false;\n }\n\n return true;\n};\n\nexport const createQueryCollection = <T extends AnyQueryCreatorCollection, R extends AnyQueryOfCreatorCollection<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n) => new BehaviorSubject<R | null>(null);\n\nexport const extractQuery = <T extends AnyQuery | AnyQueryOfCreatorCollection<AnyQueryCreatorCollection> | null>(\n v: T,\n) => (isQuery(v) ? v : v?.query) ?? null;\n\nexport const getDefaultHeaders = (\n headers: RequestHeaders | RequestHeadersMethodMap | null | undefined,\n method: Method,\n) => {\n if (!headers) {\n return {};\n }\n\n if (method in headers) {\n return (headers[method] ?? {}) as RequestHeaders;\n }\n\n return headers as RequestHeaders;\n};\n","import { BehaviorSubject, interval, Subject, Subscription, takeUntil, tap } from 'rxjs';\nimport { transformGql } from '../gql';\nimport { DefaultResponseTransformer, QueryClient, ResponseTransformerType } from '../query-client';\nimport { Method as MethodType, request, transformMethod } from '../request';\nimport {\n BaseArguments,\n GqlQueryConfig,\n PollConfig,\n QueryState,\n QueryStateType,\n RestQueryConfig,\n RouteType,\n RunQueryOptions,\n WithUseResultIn,\n} from './query.types';\nimport {\n filterSuccess,\n getDefaultHeaders,\n isGqlQueryConfig,\n isQueryStateLoading,\n isQueryStateSuccess,\n mergeHeaders,\n takeUntilResponse,\n} from './query.utils';\n\nexport class Query<\n Response,\n Arguments extends (BaseArguments & WithUseResultIn<Response, ResponseTransformer>) | undefined,\n Route extends RouteType<Arguments>,\n Method extends MethodType,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n> {\n private _currentId = 0;\n private _pollingSubscription: Subscription | null = null;\n private _onAbort$ = new Subject<void>();\n\n private readonly _state$: BehaviorSubject<QueryState<ReturnType<ResponseTransformer>, Response>>;\n\n private get _nextId() {\n return ++this._currentId;\n }\n\n get state$() {\n return this._state$.asObservable();\n }\n\n get state() {\n return this._state$.value;\n }\n\n get isExpired() {\n if (!isQueryStateSuccess(this.state)) {\n return false;\n }\n\n const ts = this.state.meta.expiresAt;\n\n if (!ts) {\n return true;\n }\n\n return ts < Date.now();\n }\n\n constructor(\n private _client: QueryClient,\n private _queryConfig:\n | RestQueryConfig<Route, Response, Arguments, ResponseTransformer>\n | GqlQueryConfig<Route, Response, Arguments, ResponseTransformer>,\n private _routeWithParams: Route,\n private _args: Arguments | undefined,\n ) {\n this._state$ = new BehaviorSubject<QueryState<ReturnType<ResponseTransformer>, Response>>({\n type: QueryStateType.Prepared,\n meta: { id: this._currentId },\n });\n }\n\n clone() {\n return this._client.fetch<Route, Response, Arguments, Method, ResponseTransformer>(this._queryConfig);\n }\n\n execute<ComputedResponse extends ReturnType<ResponseTransformer>>(options?: RunQueryOptions) {\n if (!this.isExpired && !options?.skipCache && isQueryStateSuccess(this.state)) {\n return this;\n }\n\n if (this._queryConfig.secure && !this._client.authProvider) {\n throw new Error('Cannot execute secure query without auth provider');\n }\n\n const id = this._nextId;\n\n if (isQueryStateLoading(this._state$.value)) {\n this.abort();\n }\n\n const meta = { id };\n\n this._state$.next({\n type: QueryStateType.Loading,\n meta,\n });\n\n this._updateUseResultInDependencies();\n\n let body: unknown;\n\n if (isGqlQueryConfig(this._queryConfig)) {\n const queryTemplate = this._queryConfig.query;\n const query = transformGql(queryTemplate);\n\n body = query(this._args?.variables);\n } else {\n body = this._args?.body;\n }\n\n let authHeader: Record<string, string> | null = null;\n\n if (this._queryConfig.secure) {\n const header = this._client.authProvider?.header;\n\n if (header) {\n authHeader = header;\n }\n } else if (this._client.authProvider?.header) {\n if (this._queryConfig.secure === undefined || this._queryConfig.secure) {\n authHeader = this._client.authProvider.header;\n }\n }\n\n request<Response>({\n urlWithParams: this._routeWithParams,\n method: transformMethod(this._queryConfig.method),\n body,\n headers:\n mergeHeaders(\n getDefaultHeaders(this._client.config.request?.headers, this._queryConfig.method),\n authHeader,\n this._args?.headers,\n ) || undefined,\n cacheAdapter: this._client.config.request?.cacheAdapter,\n reportProgress: this._queryConfig.reportProgress,\n responseType: this._queryConfig.responseType,\n withCredentials: this._queryConfig.withCredentials,\n })\n .pipe(takeUntil(this._onAbort$))\n .subscribe({\n next: (state) => {\n if (state.type === 'start') {\n this._state$.next({\n type: QueryStateType.Loading,\n meta,\n });\n } else if (state.type === 'download-progress') {\n this._state$.next({\n type: QueryStateType.Loading,\n progress: state.progress,\n partialText: state.partialText,\n meta,\n });\n } else if (state.type === 'upload-progress') {\n this._state$.next({\n type: QueryStateType.Loading,\n progress: state.progress,\n meta,\n });\n } else if (state.type === 'success') {\n const isResponseObject = typeof state.response === 'object';\n const isGql = isGqlQueryConfig(this._queryConfig);\n\n let responseData: Response | null = null;\n if (\n isGql &&\n isResponseObject &&\n !!state.response &&\n typeof state.response === 'object' &&\n 'data' in state.response\n ) {\n responseData = state.response['data'] as Response;\n } else {\n responseData = state.response as Response;\n }\n\n const transformedResponse = this._queryConfig.responseTransformer\n ? this._queryConfig.responseTransformer(responseData)\n : responseData;\n\n this._state$.next({\n type: QueryStateType.Success,\n rawResponse: state.response,\n response: transformedResponse as ComputedResponse,\n meta: { ...meta, expiresAt: state.expiresInTimestamp },\n });\n } else if (state.type === 'failure') {\n this._state$.next({\n type: QueryStateType.Failure,\n error: state.error,\n meta,\n });\n } else if (state.type === 'cancel') {\n this._state$.next({\n type: QueryStateType.Cancelled,\n meta,\n });\n }\n },\n });\n\n return this;\n }\n\n abort() {\n this._onAbort$.next();\n\n return this;\n }\n\n poll(config: PollConfig) {\n if (this._pollingSubscription) {\n return this;\n }\n\n this._pollingSubscription = interval(config.interval)\n .pipe(takeUntil(config.takeUntil))\n .subscribe(() => this.execute({ skipCache: true }));\n\n return this;\n }\n\n stopPolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n\n return this;\n }\n\n private _updateUseResultInDependencies() {\n if (!this._args?.useResultIn?.length) {\n return;\n }\n\n this.state$\n .pipe(\n filterSuccess(),\n takeUntil(this._onAbort$),\n takeUntilResponse(),\n tap((state) => {\n if (!this._args?.useResultIn) {\n return;\n }\n\n for (const query of this._args.useResultIn) {\n query._state$.next({\n type: QueryStateType.Success,\n meta: { ...state.meta, id: query._nextId },\n rawResponse: state.rawResponse,\n response: state.response,\n });\n }\n }),\n )\n .subscribe();\n }\n}\n","import { AnyQueryCreator } from '../query-client';\nimport { AuthProvider } from './auth-provider.types';\nimport { BasicAuthProvider } from './basic-auth-provider';\nimport { BearerAuthProvider } from './bearer-auth-provider';\nimport { CustomHeaderAuthProvider } from './custom-header-auth-provider';\n\nexport const isBasicAuthProvider = (authProvider: AuthProvider): authProvider is BasicAuthProvider =>\n authProvider instanceof BasicAuthProvider;\n\nexport const isBearerAuthProvider = <T extends AnyQueryCreator = AnyQueryCreator>(\n authProvider: AuthProvider,\n): authProvider is BearerAuthProvider<T> => authProvider instanceof BearerAuthProvider;\n\nexport const isCustomHeaderAuthProvider = (authProvider: AuthProvider): authProvider is CustomHeaderAuthProvider =>\n authProvider instanceof CustomHeaderAuthProvider;\n\nexport const decryptBearer = <Result = Record<string, unknown>>(token: string) => {\n try {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n atob(base64)\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join(''),\n );\n\n return JSON.parse(jsonPayload) as Result;\n } catch (error) {\n console.error(`Invalid bearer token: ${token}`, error);\n\n return null;\n }\n};\n","import { deleteCookie, getCookie, setCookie } from '@ethlete/core';\nimport { BehaviorSubject, Subject, takeUntil, tap, timer } from 'rxjs';\nimport { isQueryStateFailure, isQueryStateSuccess, switchQueryState, takeUntilResponse } from '../query';\nimport { AnyQueryCreator, QueryCreatorReturnType } from '../query-client';\nimport {\n AuthBearerRefreshStrategy,\n AuthProvider,\n AuthProviderBearerConfig,\n TokenResponse,\n} from './auth-provider.types';\nimport { decryptBearer } from './auth-provider.utils';\n\nexport class BearerAuthProvider<T extends AnyQueryCreator> implements AuthProvider {\n private readonly _destroy$ = new Subject<boolean>();\n private readonly _currentRefreshQuery$ = new BehaviorSubject<QueryCreatorReturnType<T> | null>(null);\n\n private readonly _tokens$ = new BehaviorSubject<TokenResponse>({\n token: null,\n refreshToken: null,\n });\n\n get header() {\n return { Authorization: `Bearer ${this._tokens$.getValue().token}` };\n }\n\n get tokens$() {\n return this._tokens$.asObservable();\n }\n\n get tokens() {\n return this._tokens$.getValue();\n }\n\n get currentRefreshQuery$() {\n return this._currentRefreshQuery$.asObservable();\n }\n\n get currentRefreshQuery() {\n return this._currentRefreshQuery$.getValue();\n }\n\n constructor(private _config: AuthProviderBearerConfig<T>) {\n const cookieEnabled = _config.refreshConfig?.cookieEnabled ?? true;\n const cookieToken =\n _config.refreshConfig?.cookieName && cookieEnabled ? getCookie(_config.refreshConfig.cookieName) ?? null : null;\n\n this._tokens$.next({\n token: _config.token || null,\n refreshToken: _config.refreshConfig?.token || cookieToken || null,\n });\n\n if (!this.tokens.token && !this.tokens.refreshToken) {\n if (!_config.refreshConfig?.cookieName) {\n console.error(\n 'A BearerAuthProvider was created without token or refresh token. You should provide at least a cookieName where the refresh token might be stored.',\n );\n }\n\n return;\n }\n\n if (this.tokens.token) {\n this._prepareForRefresh();\n\n if (this.tokens.refreshToken && this._config.refreshConfig?.cookieName) {\n setCookie(this._config.refreshConfig.cookieName, this.tokens.refreshToken);\n }\n } else if (this.tokens.refreshToken) {\n this._refreshQuery();\n }\n }\n\n cleanUp(): void {\n this._destroy$.next(true);\n this._destroy$.unsubscribe();\n this._currentRefreshQuery$.next(null);\n\n if (this._config.refreshConfig?.cookieName) {\n deleteCookie(this._config.refreshConfig.cookieName, '/');\n }\n }\n\n enableCookie() {\n if (!this._config.refreshConfig?.cookieName) {\n throw new Error('No cookie name was provided');\n }\n\n if (!this.tokens.refreshToken) {\n throw new Error('No refresh token was provided');\n }\n\n this._config.refreshConfig.cookieEnabled = true;\n\n setCookie(this._config.refreshConfig.cookieName, this.tokens.refreshToken);\n }\n\n disableCookie() {\n if (!this._config.refreshConfig?.cookieName) {\n throw new Error('No cookie name was provided');\n }\n\n this._config.refreshConfig.cookieEnabled = false;\n\n deleteCookie(this._config.refreshConfig.cookieName, '/');\n }\n\n private _prepareForRefresh() {\n if (!this.tokens.token || !this._config.refreshConfig) {\n return;\n }\n\n const bearer = decryptBearer(this.tokens.token);\n\n if (!bearer) {\n return;\n }\n\n const expiresInPropertyName = this._config.refreshConfig.expiresInPropertyName || 'exp';\n const expiresIn = bearer[expiresInPropertyName] as number | undefined;\n const fiveMinutes = 5 * 60 * 1000;\n const refreshBuffer = this._config.refreshConfig.refreshBuffer ?? fiveMinutes;\n\n if (expiresIn === undefined) {\n throw new Error(`Bearer token does not contain an '${expiresInPropertyName}' property`);\n }\n\n const remainingTime = new Date(expiresIn * 1000).getTime() - refreshBuffer - new Date().getTime();\n\n const strategy = this._config.refreshConfig.strategy ?? AuthBearerRefreshStrategy.BeforeExpiration;\n\n switch (strategy) {\n case AuthBearerRefreshStrategy.BeforeExpiration:\n timer(remainingTime)\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => this._refreshQuery());\n break;\n }\n }\n\n private _refreshQuery() {\n const currentRefreshToken = this.tokens.refreshToken;\n\n if (!currentRefreshToken || !this._config.refreshConfig) {\n return;\n }\n\n const args = this._config.refreshConfig.requestArgsAdapter?.({\n token: this.tokens.token,\n refreshToken: currentRefreshToken,\n }) ?? {\n body: { refreshToken: currentRefreshToken },\n };\n\n const query = this._config.refreshConfig.queryCreator.prepare(args).execute({ skipCache: true });\n\n this._currentRefreshQuery$.next(query as QueryCreatorReturnType<T>);\n\n this._currentRefreshQuery$\n .pipe(\n switchQueryState(),\n tap((state) => {\n if (isQueryStateSuccess(state)) {\n if (this._config.refreshConfig?.responseAdapter) {\n const tokens = this._config.refreshConfig.responseAdapter(state.response);\n\n this._tokens$.next(tokens);\n } else {\n this._tokens$.next({\n token: state.response['token'],\n refreshToken: state.response['refreshToken'],\n });\n }\n const cookieEnabled = this._config.refreshConfig?.cookieEnabled ?? true;\n\n if (this._config.refreshConfig?.cookieName && this.tokens.refreshToken && cookieEnabled) {\n setCookie(this._config.refreshConfig.cookieName, this.tokens.refreshToken);\n }\n\n this._prepareForRefresh();\n } else if (isQueryStateFailure(state)) {\n this._tokens$.next({ token: null, refreshToken: null });\n\n if (this._config.refreshConfig?.cookieName) {\n deleteCookie(this._config.refreshConfig.cookieName, '/');\n }\n }\n }),\n takeUntilResponse(),\n takeUntil(this._destroy$),\n )\n .subscribe();\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { Subscription, tap } from 'rxjs';\nimport {\n AnyQuery,\n AnyQueryCreatorCollection,\n AnyQueryOfCreatorCollection,\n isQuery,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n QueryOf,\n QueryRawResponseType,\n QueryResponseType,\n QueryState,\n} from '../query';\nimport { RequestError, RequestProgress } from '../request';\n\ninterface QueryContext<Q extends AnyQuery | null> {\n $implicit: QueryResponseType<Q>;\n query: QueryResponseType<Q>;\n raw: QueryRawResponseType<Q>;\n loading: boolean;\n progress: RequestProgress | null;\n error: RequestError<unknown> | null;\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[query]',\n standalone: true,\n})\nexport class QueryDirective<Q extends AnyQuery | AnyQueryOfCreatorCollection<AnyQueryCreatorCollection> | null>\n implements OnInit, OnDestroy\n{\n private _isMainViewCreated = false;\n private _subscription: Subscription | null = null;\n\n private readonly _viewContext: QueryContext<QueryOf<Q>> = {\n $implicit: null as QueryResponseType<QueryOf<Q>>,\n query: null as QueryResponseType<QueryOf<Q>>,\n raw: null as QueryRawResponseType<QueryOf<Q>>,\n loading: false,\n error: null,\n progress: null,\n };\n\n @Input()\n get query(): Q {\n return this._query;\n }\n set query(v: Q) {\n this._query = v;\n\n this._subscribeToQuery();\n }\n private _query!: Q;\n\n @Input('queryCache')\n get cache(): boolean {\n return this._cache;\n }\n set cache(v: boolean) {\n this._cache = v;\n }\n private _cache = false;\n\n constructor(\n private _mainTemplateRef: TemplateRef<QueryContext<QueryOf<Q>>>,\n private _viewContainerRef: ViewContainerRef,\n private _errorHandler: ErrorHandler,\n private _cdr: ChangeDetectorRef,\n ) {}\n\n static ngTemplateContextGuard<Q extends AnyQuery | AnyQueryOfCreatorCollection<AnyQueryCreatorCollection> | null>(\n dir: QueryDirective<Q>,\n ctx: unknown,\n ): ctx is QueryContext<QueryOf<Q>> {\n return true;\n }\n\n ngOnInit(): void {\n this._renderMainView();\n }\n\n ngOnDestroy(): void {\n this._subscription?.unsubscribe();\n }\n\n private _subscribeToQuery(): void {\n this._subscription?.unsubscribe();\n this._subscription = null;\n\n if (!this.query) {\n return;\n }\n\n const query = isQuery(this.query) ? this.query : this.query.query;\n\n const sub = query.state$.pipe(tap((state) => this._updateView(state))).subscribe();\n\n this._subscription = sub;\n }\n\n private _updateView(state: QueryState) {\n if (isQueryStateLoading(state)) {\n this._viewContext.loading = true;\n this._viewContext.progress = state.progress ?? null;\n } else {\n this._viewContext.loading = false;\n this._viewContext.progress = null;\n }\n\n if (isQueryStateSuccess(state)) {\n this._viewContext.query = state.response as QueryResponseType<QueryOf<Q>>;\n this._viewContext.$implicit = state.response as QueryResponseType<QueryOf<Q>>;\n this._viewContext.raw = state.rawResponse as QueryRawResponseType<QueryOf<Q>>;\n } else if (!this.cache) {\n this._viewContext.query = null as QueryResponseType<QueryOf<Q>>;\n this._viewContext.$implicit = null as QueryResponseType<QueryOf<Q>>;\n this._viewContext.raw = null as QueryRawResponseType<QueryOf<Q>>;\n }\n\n if (isQueryStateFailure(state)) {\n this._viewContext.error = state.error;\n\n this._errorHandler.handleError(state.error);\n } else {\n this._viewContext.error = null;\n }\n\n this._cdr.markForCheck();\n }\n\n private _renderMainView(): void {\n if (!this._isMainViewCreated) {\n this._isMainViewCreated = true;\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { filterSuccess, QueryStateData, takeUntilResponse } from '../query';\nimport { AnyQueryCreator, QueryCreatorArgs, QueryCreatorReturnType } from '../query-client';\nimport { InfinityQueryConfig, InfinityQueryParamLocation } from './infinity-query.types';\n\nexport class InfinityQuery<\n QueryCreator extends AnyQueryCreator,\n Query extends QueryCreatorReturnType<QueryCreator>,\n Args extends QueryCreatorArgs<QueryCreator>,\n QueryResponse extends QueryStateData<Query['state']>,\n InfinityResponse extends unknown[],\n> {\n private readonly _currentPage$ = new BehaviorSubject<number | null>(null);\n private readonly _currentCalculatedPage$ = new BehaviorSubject<number | null>(null);\n private readonly _totalPages$ = new BehaviorSubject<number | null>(null);\n private readonly _itemsPerPage$ = new BehaviorSubject<number>(this._config.limitParam?.value ?? 10);\n private readonly _currentQuery$ = new BehaviorSubject<Query | null>(null);\n private readonly _data$ = new BehaviorSubject<InfinityResponse>([] as any as InfinityResponse);\n\n private _subscriptions: Subscription[] = [];\n\n get currentPage$() {\n return this._currentPage$.asObservable();\n }\n\n get currentPage() {\n return this._currentPage$.getValue();\n }\n\n get currentCalculatedPage$() {\n return this._currentCalculatedPage$.asObservable();\n }\n\n get currentCalculatedPage() {\n return this._currentCalculatedPage$.getValue();\n }\n\n get totalPages$() {\n return this._totalPages$.asObservable();\n }\n\n get totalPages() {\n return this._totalPages$.getValue();\n }\n\n get itemsPerPage$() {\n return this._itemsPerPage$.asObservable();\n }\n\n get itemsPerPage() {\n return this._itemsPerPage$.getValue();\n }\n\n get currentQuery$() {\n return this._currentQuery$.asObservable();\n }\n\n get currentQuery() {\n return this._currentQuery$.getValue();\n }\n\n get data$() {\n return this._data$.asObservable();\n }\n\n get data() {\n return this._data$.getValue();\n }\n\n constructor(private _config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>) {}\n\n nextPage() {\n const newPage = (this._currentPage$.value ?? 0) + 1;\n const calculatedPage =\n this._config?.pageParam?.valueCalculator?.({\n page: newPage,\n totalPages: this.totalPages,\n itemsPerPage: this.itemsPerPage,\n }) ?? newPage;\n\n if (this.totalPages !== null && calculatedPage > this.totalPages) {\n console.error(\n 'Cannot load more pages, already at the end. Make sure to not render the infinity query trigger using *ngIf canLoadMore',\n );\n return;\n }\n\n const args = this._prepareArgs(this._config, calculatedPage);\n\n const query = this._config.queryCreator.prepare(args).execute() as Query;\n this._handleNewQuery(query);\n\n this._currentPage$.next(newPage);\n this._currentCalculatedPage$.next(calculatedPage);\n this._currentQuery$.next(query);\n }\n\n reset(\n newConfig?: Omit<\n InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n 'queryCreator' | 'response'\n >,\n ) {\n this._destroy();\n\n this._config = { ...this._config, ...(newConfig ?? {}) };\n\n this._currentPage$.next(null);\n this._currentCalculatedPage$.next(null);\n this._totalPages$.next(null);\n this._itemsPerPage$.next(this._config.limitParam?.value ?? 10);\n this._currentQuery$.next(null);\n\n this._data$.next([] as any as InfinityResponse);\n }\n\n _destroy() {\n this._subscriptions.forEach((sub) => sub.unsubscribe());\n this._subscriptions = [];\n }\n\n private _handleNewQuery(query: Query) {\n const stateChangesSub = query.state$.pipe(takeUntilResponse(), filterSuccess()).subscribe({\n next: (state) => {\n let newData = this._config?.response.valueExtractor(state.response);\n\n if (this._config.response.reverse) {\n newData = [...newData].reverse() as InfinityResponse;\n }\n\n if (this._config.response.appendItemsTo === 'start') {\n newData = [...newData, ...this.data] as InfinityResponse;\n } else {\n newData = [...this.data, ...newData] as InfinityResponse;\n }\n\n this._data$.next(newData);\n\n const totalPages =\n this._config.response.totalPagesExtractor?.({\n response: state.response,\n itemsPerPage: this.itemsPerPage,\n }) ??\n state.response?.totalPages ??\n null;\n\n this._totalPages$.next(totalPages);\n },\n complete: () => {\n this._subscriptions = this._subscriptions.filter((sub) => sub !== stateChangesSub);\n },\n });\n\n this._subscriptions.push(stateChangesSub);\n }\n\n private _prepareArgs(config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>, page: number) {\n const pageParamLocation = this._getPageParamLocation(config?.pageParam?.location);\n\n const pageArgs = {\n [pageParamLocation]: {\n [config?.pageParam?.key ?? 'page']: page,\n },\n };\n\n const limitParamLocation = this._getPageParamLocation(config?.limitParam?.location);\n\n const limitArgs = {\n [limitParamLocation]: {\n [config?.limitParam?.key ?? 'limit']: config?.limitParam?.value ?? 10,\n },\n };\n\n const defaultConfig = config?.defaultArgs ?? {};\n\n const mergedArgs =\n pageParamLocation === limitParamLocation\n ? {\n ...defaultConfig,\n [pageParamLocation]: {\n ...(config?.defaultArgs?.[pageParamLocation] ?? {}),\n ...pageArgs[limitParamLocation],\n ...limitArgs[limitParamLocation],\n },\n }\n : {\n ...defaultConfig,\n [pageParamLocation]: {\n ...(config?.defaultArgs?.[pageParamLocation] ?? {}),\n ...pageArgs[pageParamLocation],\n },\n [limitParamLocation]: {\n ...(config?.defaultArgs?.[limitParamLocation] ?? {}),\n ...limitArgs[limitParamLocation],\n },\n };\n\n return mergedArgs;\n }\n\n private _getPageParamLocation(location: InfinityQueryParamLocation | undefined) {\n const loc = location ?? 'query';\n\n switch (loc) {\n case 'path':\n return 'pathParams';\n case 'query':\n return 'queryParams';\n case 'body':\n return 'body';\n case 'header':\n return 'headers';\n case 'variable':\n return 'variables';\n default:\n throw new Error(`Invalid pageParamLocation: ${loc}`);\n }\n }\n}\n","import { QueryStateData } from '../query';\nimport { AnyQueryCreator, QueryCreatorArgs, QueryCreatorReturnType } from '../query-client';\nimport { InfinityQueryConfig, PageParamCalculatorOptions } from './infinity-query.types';\n\nexport const createInfinityQueryConfig = <\n QueryCreator extends AnyQueryCreator,\n Query extends QueryCreatorReturnType<QueryCreator>,\n Args extends QueryCreatorArgs<QueryCreator>,\n QueryResponse extends QueryStateData<Query['state']>,\n InfinityResponse extends unknown[],\n>(\n config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n) => config;\n\nexport const skipPaginationPageParamCalculator = ({ page, itemsPerPage }: PageParamCalculatorOptions) =>\n itemsPerPage * (page - 1);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n inject,\n InjectionToken,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { DestroyService } from '@ethlete/core';\nimport { BehaviorSubject, of, Subject, switchMap, takeUntil, tap } from 'rxjs';\nimport { InfinityQuery, InfinityQueryConfig } from '../infinite-query';\nimport { BaseArguments, isQueryStateFailure, isQueryStateLoading, isQueryStateSuccess } from '../query';\nimport { AnyQueryCreator } from '../query-client';\nimport { RequestError } from '../request';\n\ninterface InfinityQueryContext<Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments, any, unknown[]>> {\n $implicit: Q['response']['arrayType'] | null;\n infinityQuery: Q['response']['arrayType'] | null;\n loading: boolean;\n error: RequestError<unknown> | null;\n\n isFirstLoad: boolean;\n canLoadMore: boolean;\n currentPage: number | null;\n currentCalculatedPage: number | null;\n totalPages: number | null;\n itemsPerPage: number | null;\n}\n\nexport const INFINITY_QUERY_TOKEN = new InjectionToken<InfinityQueryDirective<any>>('INFINITY_QUERY_TOKEN');\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[infinityQuery]',\n exportAs: 'infinityQuery',\n standalone: true,\n providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }, DestroyService],\n})\nexport class InfinityQueryDirective<Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments, any, unknown[]>>\n implements OnInit, OnDestroy\n{\n private readonly _queryConfigChanged$ = new Subject<boolean>();\n private readonly _viewContext: InfinityQueryContext<Q> = {\n $implicit: null,\n infinityQuery: null,\n loading: false,\n error: null,\n\n isFirstLoad: false,\n canLoadMore: false,\n currentPage: null,\n currentCalculatedPage: null,\n totalPages: null,\n itemsPerPage: null,\n };\n private _infinityQueryInstance: ReturnType<typeof this._setupInfinityQuery> | null = null;\n\n private readonly _destroy$ = inject(DestroyService, { host: true }).destroy$;\n private readonly _cdr = inject(ChangeDetectorRef);\n private readonly _viewContainerRef = inject(ViewContainerRef);\n private readonly _mainTemplateRef = inject(TemplateRef<InfinityQueryContext<Q>>);\n private readonly _errorHandler = inject(ErrorHandler);\n\n private readonly _data$ = new BehaviorSubject<Q['response']['arrayType']>([]);\n\n private _isMainViewCreated = false;\n\n @Input()\n get infinityQuery(): Q {\n return this._infinityQuery;\n }\n set infinityQuery(v: Q) {\n this._cleanup();\n\n this._infinityQuery = v;\n this._infinityQueryInstance = this._setupInfinityQuery(v);\n this._loadNextPage();\n }\n private _infinityQuery!: Q;\n\n get context() {\n return this._viewContext;\n }\n\n get instance() {\n return this._infinityQueryInstance;\n }\n\n get data$() {\n return this._data$.asObservable();\n }\n\n get data() {\n return this._data$.getValue();\n }\n\n static ngTemplateContextGuard<Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments, any, unknown[]>>(\n dir: InfinityQueryDirective<Q>,\n ctx: unknown,\n ): ctx is InfinityQueryContext<Q> {\n return true;\n }\n\n ngOnInit(): void {\n this._renderMainView();\n }\n\n ngOnDestroy(): void {\n this.instance?._destroy();\n }\n\n private _setupInfinityQuery(config: Q) {\n const instance = new InfinityQuery(config);\n\n instance.currentQuery$\n .pipe(\n switchMap((q) => q?.state$ ?? of(null)),\n tap((state) => {\n this._viewContext.currentPage = instance.currentPage;\n this._viewContext.totalPages = instance.totalPages;\n this._viewContext.itemsPerPage = instance.itemsPerPage;\n this._viewContext.canLoadMore =\n (instance.totalPages && instance.currentPage && instance.totalPages > instance.currentPage) || false;\n this._viewContext.currentCalculatedPage = instance.currentCalculatedPage;\n\n if (isQueryStateLoading(state)) {\n this._viewContext.loading = true;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = this.context.infinityQuery === null;\n } else if (isQueryStateFailure(state)) {\n this._viewContext.loading = false;\n this._viewContext.error = state.error;\n this._viewContext.isFirstLoad = false;\n this._errorHandler.handleError(state.error);\n } else if (isQueryStateSuccess(state)) {\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = false;\n } else {\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.infinityQuery = null;\n this._viewContext.$implicit = null;\n\n this._viewContext.isFirstLoad = false;\n this._viewContext.canLoadMore = false;\n this._viewContext.currentPage = null;\n this._viewContext.itemsPerPage = null;\n this._viewContext.totalPages = null;\n\n this._data$.next([]);\n }\n\n this._cdr.markForCheck();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._queryConfigChanged$),\n )\n .subscribe();\n\n instance.data$\n .pipe(\n tap((data) => {\n this._viewContext.infinityQuery = this._viewContext.$implicit = data as Q['response']['arrayType'] | null;\n this._data$.next(data);\n\n this._cdr.markForCheck();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._queryConfigChanged$),\n )\n .subscribe();\n\n return instance;\n }\n\n _loadNextPage() {\n if (!this._infinityQueryInstance) {\n return;\n }\n\n this._infinityQueryInstance.nextPage();\n }\n\n private _renderMainView(): void {\n if (!this._isMainViewCreated) {\n this._isMainViewCreated = true;\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);\n }\n }\n\n private _cleanup() {\n this._queryConfigChanged$.next(true);\n\n this.instance?._destroy();\n\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.infinityQuery = null;\n this._viewContext.$implicit = null;\n\n this._viewContext.isFirstLoad = false;\n this._viewContext.canLoadMore = false;\n this._viewContext.currentPage = null;\n this._viewContext.itemsPerPage = null;\n this._viewContext.totalPages = null;\n\n this._data$.next([]);\n }\n}\n","import { Directive, ElementRef, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { fromEvent, Subject, takeUntil } from 'rxjs';\nimport { INFINITY_QUERY_TOKEN } from './infinity-query.directive';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[infinityQueryTrigger], infinity-query-trigger',\n standalone: true,\n})\nexport class InfinityQueryTriggerDirective implements OnInit, OnDestroy {\n private _elementRef = inject(ElementRef<HTMLElement>);\n private _infinityQuery = inject(INFINITY_QUERY_TOKEN);\n\n private _destroy = new Subject<boolean>();\n private _observer: IntersectionObserver | null = null;\n\n click$ = fromEvent(this._elementRef.nativeElement, 'click');\n\n @Input()\n scrollContainerSelector: string | null = null;\n\n ngOnInit(): void {\n const isInteractive = this._elementRef.nativeElement.hasAttribute('infinityQueryTrigger');\n\n if (isInteractive) {\n this.click$.pipe(takeUntil(this._destroy)).subscribe(() => this._infinityQuery._loadNextPage());\n } else {\n this._setupIntersectionObserver();\n }\n }\n\n ngOnDestroy(): void {\n this._destroy.next(true);\n this._destroy.unsubscribe();\n this._observer?.disconnect();\n }\n\n private _setupIntersectionObserver(): void {\n this._observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n\n if (entry.isIntersecting && !this._infinityQuery.context.loading) {\n this._infinityQuery._loadNextPage();\n }\n },\n {\n root: this.scrollContainerSelector ? document.querySelector(this.scrollContainerSelector) : null,\n rootMargin: '0px',\n threshold: 1.0,\n },\n );\n\n this._observer.observe(this._elementRef.nativeElement);\n }\n}\n","import { AnyQuery } from '../query';\n\nexport class QueryStore {\n private readonly _store = new Map<string, AnyQuery>();\n private _garbageCollector: number | null = null;\n\n constructor(\n private _config?: {\n enableChangeLogging?: boolean;\n enableGarbageCollectorLogging?: boolean;\n },\n ) {}\n\n add(id: string, query: AnyQuery) {\n this._store.set(id, query);\n\n this._initGarbageCollector();\n\n this._logState(id, query, 'SET');\n }\n\n get(id: string) {\n return this._store.get(id) ?? null;\n }\n\n remove(id: string) {\n this._store.delete(id);\n\n this._logState(id, null, 'REMOVE');\n }\n\n private _logState(key: string | null, item: AnyQuery | null, operation: string) {\n if (!this._config?.enableChangeLogging) return;\n\n const stateAsJson: Record<string, AnyQuery> = {};\n\n this._store.forEach((value, key) => {\n stateAsJson[key] = value;\n });\n\n console.log(`%c[${operation}] ${key}`, 'font-weight: bold');\n\n console.log({ operation, key, item });\n console.log(stateAsJson);\n }\n\n private _initGarbageCollector() {\n if (this._garbageCollector !== null) {\n return;\n }\n\n this._logGarbageCollector('Start');\n\n this._garbageCollector = window.setInterval(() => {\n this._runGarbageCollector();\n }, 15000);\n }\n\n private _stopGarbageCollector() {\n if (this._garbageCollector !== null) {\n window.clearInterval(this._garbageCollector);\n this._garbageCollector = null;\n }\n }\n\n private _runGarbageCollector() {\n this._logGarbageCollector('Collecting...');\n\n this._store.forEach((item, key) => {\n if (item.isExpired) {\n this.remove(key);\n }\n });\n\n this._logGarbageCollector('Collection done');\n\n if (!this._store.size) {\n this._stopGarbageCollector();\n this._logGarbageCollector('Stop');\n }\n }\n\n private _logGarbageCollector(action: string) {\n if (!this._config?.enableGarbageCollectorLogging) return;\n\n console.log(`%cGC: ${action}`, 'color: yellow; font-weight: bold');\n }\n}\n","import { BaseArguments, GqlQueryConfig } from '../query/query.types';\nimport { Method } from '../request';\n\nexport const shouldCacheQuery = (method: Method) => {\n return method === 'GET' || method === 'OPTIONS' || method === 'HEAD' || method === 'GQL_QUERY';\n};\n\nexport const buildGqlCacheKey = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n config: GqlQueryConfig<any, any, any, any>,\n args: BaseArguments | undefined,\n) => {\n const { query } = config;\n const variables = args?.variables || {};\n\n const queryWithoutNewLinesAndWhitespace = query.replace(/\\s/g, '');\n\n const queryFirst50Chars = queryWithoutNewLinesAndWhitespace.slice(0, 50);\n const queryMiddle25Chars = queryWithoutNewLinesAndWhitespace.slice(\n queryWithoutNewLinesAndWhitespace.length / 2 - 25,\n queryWithoutNewLinesAndWhitespace.length / 2 + 25,\n );\n const queryLast50Chars = queryWithoutNewLinesAndWhitespace.slice(-50);\n\n const vars = JSON.stringify(variables);\n\n return `${queryFirst50Chars}...${queryMiddle25Chars}...${queryLast50Chars}...${vars}`;\n};\n","import { BehaviorSubject } from 'rxjs';\nimport { AuthProvider } from '../auth';\nimport {\n BaseArguments,\n GqlQueryConfig,\n GqlQueryConfigWithoutMethod,\n isGqlQueryConfig,\n Query,\n QueryConfigWithoutMethod,\n RestQueryConfig,\n RouteType,\n} from '../query';\nimport { QueryStore } from '../query-store';\nimport { buildRoute, Method as MethodType, RequestHeaders, RequestHeadersMethodMap } from '../request';\nimport {\n DefaultResponseTransformer,\n QueryClientConfig,\n QueryCreator,\n ResponseTransformerType,\n} from './query-client.types';\nimport { buildGqlCacheKey, shouldCacheQuery } from './query-client.utils';\n\nexport class QueryClient {\n private readonly _store: QueryStore;\n\n get config() {\n return this._clientConfig;\n }\n\n get authProvider() {\n return this._authProvider$.getValue() ?? this._clientConfig.parent?._authProvider$.getValue() ?? null;\n }\n get authProvider$() {\n return this._authProvider$.asObservable() ?? this._clientConfig.parent?._authProvider$.asObservable() ?? null;\n }\n private readonly _authProvider$ = new BehaviorSubject<AuthProvider | null>(null);\n\n constructor(private _clientConfig: QueryClientConfig) {\n this._store = new QueryStore({\n enableChangeLogging: _clientConfig.logging?.queryStateChanges,\n enableGarbageCollectorLogging: _clientConfig.logging?.queryStateGarbageCollector,\n });\n }\n\n get = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined = undefined,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, ResponseTransformer>,\n ) =>\n this.fetch<Route, Response, Arguments, 'GET', ResponseTransformer>({\n ...queryConfig,\n method: 'GET',\n });\n\n post = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined = undefined,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, ResponseTransformer>,\n ) =>\n this.fetch<Route, Response, Arguments, 'POST', ResponseTransformer>({\n ...queryConfig,\n method: 'POST',\n });\n\n put = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined = undefined,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, ResponseTransformer>,\n ) =>\n this.fetch<Route, Response, Arguments, 'PUT', ResponseTransformer>({\n ...queryConfig,\n method: 'PUT',\n });\n\n patch = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined = undefined,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, ResponseTransformer>,\n ) =>\n this.fetch<Route, Response, Arguments, 'PATCH', ResponseTransformer>({\n ...queryConfig,\n method: 'PATCH',\n });\n\n delete = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined = undefined,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, ResponseTransformer>,\n ) =>\n this.fetch<Route, Response, Arguments, 'DELETE', ResponseTransformer>({\n ...queryConfig,\n method: 'DELETE',\n });\n\n gqlQuery = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined = undefined,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, ResponseTransformer>,\n ) =>\n this.fetch<Route, Response, Arguments, 'GQL_QUERY', ResponseTransformer>({\n ...queryConfig,\n method: 'GQL_QUERY',\n });\n\n gqlMutate = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined = undefined,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, ResponseTransformer>,\n ) =>\n this.fetch<Route, Response, Arguments, 'GQL_MUTATE', ResponseTransformer>({\n ...queryConfig,\n method: 'GQL_MUTATE',\n });\n\n fetch = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined,\n Method extends MethodType,\n ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>,\n >(\n queryConfig:\n | RestQueryConfig<Route, Response, Arguments, ResponseTransformer>\n | GqlQueryConfig<Route, Response, Arguments, ResponseTransformer>,\n ): QueryCreator<Arguments, Method, Response, Route, ResponseTransformer> => {\n const prepare = (args?: Arguments) => {\n const route = buildRoute({\n base: this._clientConfig.baseRoute,\n route: queryConfig.route,\n pathParams: (args as BaseArguments)?.pathParams,\n queryParams: (args as BaseArguments)?.queryParams,\n }) as Route;\n\n const cacheKey = isGqlQueryConfig(queryConfig) ? buildGqlCacheKey(queryConfig, args) : route;\n\n if (shouldCacheQuery(queryConfig.method)) {\n const existingQuery = this._store.get(cacheKey);\n\n if (existingQuery) {\n return existingQuery as Query<Response, Arguments, Route, Method, ResponseTransformer>;\n }\n }\n\n const query = new Query<Response, Arguments, Route, Method, ResponseTransformer>(this, queryConfig, route, args);\n\n if (shouldCacheQuery(queryConfig.method)) {\n this._store.add(cacheKey, query);\n }\n\n return query;\n };\n\n const behaviorSubject = <T extends ReturnType<typeof prepare>>(initialValue: T | null = null) =>\n new BehaviorSubject<T | null>(initialValue);\n\n return {\n prepare,\n behaviorSubject,\n } as unknown as QueryCreator<Arguments, Method, Response, Route, ResponseTransformer>;\n };\n\n setAuthProvider = (authProvider: AuthProvider) => {\n if (this.authProvider) {\n throw new Error('The auth provider is already set. Please call clearAuthProvider() first.');\n }\n\n this._authProvider$.next(authProvider);\n };\n\n setDefaultHeaders = (headers: RequestHeaders | RequestHeadersMethodMap | null) => {\n if (!this._clientConfig.request) {\n this._clientConfig.request = {\n headers: headers ?? undefined,\n };\n } else {\n this._clientConfig.request.headers = headers ?? undefined;\n }\n };\n\n clearAuthProvider = () => {\n this.authProvider?.cleanUp();\n this._authProvider$.next(null);\n };\n}\n","import { inject } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { clone, equal } from '@ethlete/core';\nimport { combineLatest, concat, debounceTime, distinctUntilChanged, map, Observable, startWith, take, tap } from 'rxjs';\nimport { QueryFieldOptions, QueryFormGroup, QueryFormValue } from './query-form.types';\n\nexport class QueryField<T> {\n changes$ = this._setupChangesObservable();\n\n get control() {\n return this.data.control;\n }\n\n private _currentDebounceTimeout: number | null = null;\n\n constructor(public data: QueryFieldOptions<T>) {}\n\n setValue(value: T | null) {\n if (this._currentDebounceTimeout !== null) {\n clearTimeout(this._currentDebounceTimeout);\n }\n\n if (this.data.debounce) {\n this._currentDebounceTimeout = window.setTimeout(() => {\n this.control.setValue(value);\n }, this.data.debounce);\n } else {\n this.control.setValue(value);\n }\n }\n\n private _setupChangesObservable() {\n const obs = this.control.valueChanges.pipe(startWith(this.control.value));\n\n if (!this.data.debounce) {\n return obs;\n }\n\n // The initial value should get emitted immediately\n // concat switches to the debounced observable after the first observable is completed\n return concat(obs.pipe(take(1)), this.control.valueChanges.pipe(debounceTime(this.data.debounce)));\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class QueryForm<T extends Record<string, QueryField<any>>> {\n private _router = inject(Router, { optional: true });\n private _activatedRoute = inject(ActivatedRoute, { optional: true });\n private _defaultValues = this._extractDefaultValues();\n\n form = this._setupFormGroup();\n\n constructor(private _fields: T) {}\n\n observe(options?: { syncViaUrlQueryParams?: boolean }) {\n return combineLatest(Object.values(this._fields).map((field) => field.changes$)).pipe(\n map(() => this.form.getRawValue()),\n distinctUntilChanged((a, b) => equal(a, b)),\n tap((values) => {\n if (options?.syncViaUrlQueryParams !== false) {\n this._syncViaUrlQueryParams(values);\n }\n }),\n\n // This type cast is needed since ng-packagr will break the type inference otherwise.\n ) as Observable<QueryFormValue<T>>;\n }\n\n setFormValueFromUrlQueryParams() {\n if (!this._activatedRoute) {\n throw new Error('Cannot set form value from url query params without ActivatedRoute');\n }\n\n const queryParams = this._activatedRoute.snapshot.queryParams;\n\n for (const [key, field] of Object.entries(this._fields)) {\n const value = queryParams[key];\n\n // We only check using == because the value types can be different (e.g. \"1\" and 1)\n if (value === undefined || value == field.control.value) {\n continue;\n }\n\n const deserializedValue = field.data.queryParamToValueTransformFn?.(value) ?? value;\n\n field.setValue(deserializedValue);\n }\n }\n\n updateFormOnUrlQueryParamsChange() {\n if (!this._activatedRoute) {\n throw new Error('Cannot update form on url query params change without ActivatedRoute');\n }\n\n return this._activatedRoute.queryParams.pipe(tap(() => this.setFormValueFromUrlQueryParams()));\n }\n\n private _getDefaultValue(key: string) {\n return this._defaultValues[key] ?? null;\n }\n\n private _isDefaultValue(key: string, value: unknown) {\n const normalizedValue = Array.isArray(value) ? JSON.stringify(value) : value;\n\n return this._getDefaultValue(key) === normalizedValue;\n }\n\n private _setupFormGroup() {\n const group = new FormGroup({} as QueryFormGroup<T>);\n\n for (const [key, field] of Object.entries(this._fields)) {\n group.addControl(key, field.control);\n }\n\n return group;\n }\n\n private _extractDefaultValues() {\n const defaultValues: Record<string, unknown> = {};\n\n for (const [key, field] of Object.entries(this._fields)) {\n const value = field.control.value;\n\n if (value === null || value === undefined) {\n continue;\n }\n\n if (Array.isArray(value)) {\n defaultValues[key] = JSON.stringify(value);\n } else {\n defaultValues[key] = value;\n }\n }\n\n return defaultValues;\n }\n\n private _syncViaUrlQueryParams(values: Record<string, unknown>) {\n if (!this._router || !this._activatedRoute) {\n return;\n }\n\n const queryParams = { ...clone(this._activatedRoute.snapshot.queryParams) };\n\n for (const [key, value] of Object.entries(values)) {\n if (this._isDefaultValue(key, value) || this._fields[key].data.appendToUrl === false) {\n delete queryParams[key];\n } else {\n queryParams[key] = this._fields[key].data.valueToQueryParamTransformFn\n ? this._fields[key].data.valueToQueryParamTransformFn?.(value)\n : value;\n }\n }\n\n this._router.navigate([], {\n queryParams,\n });\n }\n}\n","export const transformToString = (value: unknown) => {\n if (typeof value === 'string') {\n return value;\n }\n\n return null;\n};\n\nexport const transformToStringArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToString).filter(Boolean) as string[];\n } else if (typeof value === 'string') {\n return [transformToString(value)] as string[];\n }\n\n return null;\n};\n\nexport const transformToNumber = (value: unknown) => {\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n return Number(value);\n }\n return null;\n};\n\nexport const transformToNumberArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToNumber).filter((item) => item !== null) as number[];\n } else if (typeof value === 'number') {\n return [value] as number[];\n }\n\n return null;\n};\n\nexport const transformToBoolean = (value: unknown) => {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n return value === 'true' || value === '1';\n }\n return null;\n};\n\nexport const transformToBooleanArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToBoolean).filter((item) => item !== null) as boolean[];\n } else if (typeof value === 'string' || typeof value === 'boolean') {\n return [transformToBoolean(value)] as boolean[];\n }\n\n return null;\n};\n\nexport const transformToDate = (value: unknown) => {\n if (value instanceof Date) {\n return value;\n }\n if (typeof value === 'string') {\n const date = new Date(value);\n\n if (isNaN(date.getTime())) {\n return null;\n }\n\n return date;\n }\n return null;\n};\n\nexport const transformToDateArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToDate).filter((item) => item !== null) as Date[];\n } else if (typeof value === 'string' || value instanceof Date) {\n return [transformToDate(value)] as Date[];\n }\n\n return null;\n};\n\nexport const transformToSort = (value: unknown) => {\n if (typeof value === 'string') {\n const [active, direction] = value.split(':');\n\n return {\n active,\n direction: direction as 'asc' | 'desc',\n };\n }\n\n return null;\n};\n\nexport const transformToSortQueryParam = (value: unknown) => {\n if (typeof value === 'string') {\n return value;\n }\n if (value && typeof value === 'object' && 'active' in value && 'direction' in value) {\n const valAsSort = value as {\n active: string;\n direction: 'asc' | 'desc';\n };\n\n return valAsSort.direction ? `${valAsSort.active}:${valAsSort.direction}` : null;\n }\n\n return null;\n};\n","export const deepFreeze = <T extends Record<string, unknown>>(object: T) => {\n // check if object is actually an object or frozen\n if (!object || typeof object !== 'object' || Object.isFrozen(object)) {\n return object;\n }\n\n // Retrieve the property names defined on object\n const propNames = Object.getOwnPropertyNames(object);\n\n // Freeze properties before freezing self\n\n for (const name of propNames) {\n const value = object[name];\n\n if (value && typeof value === 'object') {\n deepFreeze(value as T);\n }\n }\n\n return Object.freeze(object);\n};\n","/**\n * Dummy function for providing types while not breaking inference.\n * **This function always returns null.**\n * @see https://github.com/microsoft/TypeScript/issues/26242\n * @returns null\n */\nexport const def = <Data>() => null as unknown as Data;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}