@ethlete/query 5.8.1 → 5.9.1

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.
@@ -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/symfony/symfony.utils.ts","../../../../libs/query/src/lib/request/request.util.ts","../../../../libs/query/src/lib/request/request.ts","../../../../libs/query/src/lib/utils/data.utils.ts","../../../../libs/query/src/lib/utils/deep-freeze.util.ts","../../../../libs/query/src/lib/utils/def.util.ts","../../../../libs/query/src/lib/query-creator/query-creator.ts","../../../../libs/query/src/lib/query-store/query-store.ts","../../../../libs/query/src/lib/query-client/query-client.ts","../../../../libs/query/src/lib/query-client/query-client.utils.ts","../../../../libs/query/src/lib/gql/gql.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/class-validator/class-validator.utils.ts","../../../../libs/query/src/lib/devtools/pipes/query-short-name.pipe.ts","../../../../libs/query/src/lib/devtools/utils/query-client.utils.ts","../../../../libs/query/src/lib/devtools/components/query-devtools/query-devtools.component.ts","../../../../libs/query/src/lib/devtools/components/query-devtools/query-devtools.component.html","../../../../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/entity/entity-store.ts","../../../../libs/query/src/lib/entity/entity.utils.ts","../../../../libs/query/src/lib/query-form/query-form.utils.ts","../../../../libs/query/src/lib/query-form/query-form.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","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 { FormViolationListView, FormViolationView } from '@ethlete/types';\nimport { SymfonyError } from './symfony.types';\n\nexport const isSymfonyError = (error: unknown): error is SymfonyError => {\n if (!error || typeof error !== 'object') {\n return false;\n }\n\n const symfonyError = error as SymfonyError;\n\n return (\n symfonyError.class !== undefined &&\n symfonyError.detail !== undefined &&\n symfonyError.status !== undefined &&\n symfonyError.title !== undefined &&\n symfonyError.trace !== undefined &&\n symfonyError.type !== undefined\n );\n};\n\nexport const isSymfonyPagerfantaOutOfRangeError = (error: unknown): error is SymfonyError => {\n if (!isSymfonyError(error)) {\n return false;\n }\n\n return error.class.startsWith('Pagerfanta') && error.class.endsWith('OutOfRangeCurrentPageException');\n};\n\nexport const isSymfonyFormViolationListError = (error: unknown): error is FormViolationListView => {\n return typeof error === 'object' && error !== null && 'violations' in error;\n};\n\nexport const isSymfonyListError = (error: unknown): error is FormViolationView[] => {\n return (\n !!error &&\n typeof error === 'object' &&\n Array.isArray(error) &&\n !!error.length &&\n 'message' in error[0] &&\n 'propertyPath' in error[0] &&\n 'invalidValue' in error[0]\n );\n};\n","import { invalidBaseRouteError, invalidRouteError, pathParamsMissingInRouteFunctionError } from '../logger';\nimport { AnyRoute } from '../query';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../symfony';\nimport {\n BuildQueryStringConfig,\n Method,\n PathParams,\n QueryParams,\n RequestError,\n RequestHeaders,\n RequestRetryFn,\n} from './request.types';\n\nexport const isNaN = (value: unknown): boolean => typeof value === 'number' && Number.isNaN(value);\nexport const isEmptyString = (value: unknown): boolean => typeof value === 'string' && value.trim() === '';\n\nexport const isRequestError = <T = unknown>(error: unknown): error is RequestError<T> =>\n error instanceof Object && 'status' in error && 'statusText' in error && 'url' in error;\n\nexport const buildRoute = (options: {\n base: string;\n route: AnyRoute | null | undefined;\n pathParams?: PathParams;\n queryParams?: QueryParams;\n queryParamConfig?: BuildQueryStringConfig;\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, options.queryParamConfig);\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, config?: BuildQueryStringConfig): string | null => {\n const objectNotation = config?.objectNotation ?? 'bracket';\n const writeArrayIndexes = config?.writeArrayIndexes ?? false;\n const ignoredValues = config?.ignoredValues ?? [undefined, null, Infinity, -Infinity];\n const ignoredValuesFns = config?.ignoredValuesFns ?? [isNaN, isEmptyString];\n\n const queryParams: string[] = [];\n\n function processValue(key: string, value: unknown) {\n if (Array.isArray(value)) {\n let currentFilteredIndex = 0;\n for (const arrayValue of value) {\n const nestedKey = writeArrayIndexes ? `${key}[${currentFilteredIndex}]` : `${key}[]`;\n\n const didAddValue = processValue(nestedKey, arrayValue);\n\n if (didAddValue) {\n currentFilteredIndex++;\n }\n }\n\n return null;\n } else if (typeof value === 'object' && value !== null) {\n for (const [objKey, val] of Object.entries(value)) {\n const nestedKey = objectNotation === 'dot' ? `${key}.${objKey}` : `${key}[${objKey}]`;\n processValue(nestedKey, val);\n }\n\n return null;\n } else {\n if (ignoredValues.includes(value)) {\n return false;\n }\n\n if (ignoredValuesFns.some((fn) => fn(value))) {\n return false;\n }\n\n const encodedKey = encodeURIComponent(key);\n const encodedValue = encodeURIComponent(value as string);\n\n queryParams.push(`${encodedKey}=${encodedValue}`);\n\n return true;\n }\n }\n\n for (const [key, val] of Object.entries(params)) {\n processValue(key, val);\n }\n\n return queryParams.length ? queryParams.join('&') : null;\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 const m = cacheControl.split('max-age=')[1];\n\n if (m) {\n maxAge = parseInt(m);\n }\n } else if (cacheControl?.includes('s-maxage')) {\n const m = cacheControl.split('s-maxage=')[1];\n\n if (m) {\n maxAge = parseInt(m);\n }\n }\n\n if (maxAge && age) {\n const ageSeconds = parseInt(age);\n\n expiresIn = maxAge - ageSeconds;\n } else if (maxAge) {\n expiresIn = maxAge / 2; // We assume the response is half way to its expiration\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 | URLSearchParams | 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 as ArrayBuffer | URLSearchParams | Blob | FormData | string;\n }\n\n if (typeof body === 'object' || typeof body === 'boolean' || Array.isArray(body)) {\n return JSON.stringify(body);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (body as any).toString();\n};\n\nexport const transformMethod = (config: { method: Method; transferVia?: 'GET' | 'POST' }) => {\n if (config.method === 'GQL_QUERY' || config.method === 'GQL_MUTATE') {\n if (!config.transferVia) {\n return 'POST';\n }\n\n return config.transferVia;\n }\n\n return config.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 shouldRetryRequest: RequestRetryFn = (config) => {\n const defaultRetryDelay = 1000 + 1000 * config.currentRetryCount;\n\n if (config.currentRetryCount > 3) {\n return { retry: false };\n }\n\n if (!isRequestError(config.error)) {\n return { retry: false };\n }\n\n const { status, detail } = config.error;\n\n // Retry on 5xx errors\n if (status >= 500) {\n // Don't retry if a requested page is out of range\n if (isSymfonyPagerfantaOutOfRangeError(detail)) {\n return { retry: false };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 408 or 425 errors\n if (status === HttpStatusCode.RequestTimeout || status === HttpStatusCode.TooEarly) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 429 errors\n if (status === HttpStatusCode.TooManyRequests) {\n const retryAfter =\n config.headers['retry-after'] ||\n config.headers['Retry-After'] ||\n config.headers['x-retry-after'] ||\n config.headers['X-Retry-After'];\n\n if (retryAfter) {\n const delay = parseInt(retryAfter) * 1000;\n return { retry: true, delay: Number.isNaN(delay) ? defaultRetryDelay : delay };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Code 0 usually means the internet connection is down. We retry in this case.\n // It could also be a CORS issue but that should not be the case in production.\n if (status === 0) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n return { retry: false };\n};\n\nexport const enum HttpStatusCode {\n Unknown = 0,\n\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, RequestError, RequestEvent } from './request.types';\nimport {\n HttpStatusCode,\n buildTimestampFromSeconds,\n detectContentTypeHeader,\n extractExpiresInSeconds,\n forEachHeader,\n getResponseUrl,\n hasHeader,\n parseAllXhrResponseHeaders,\n serializeBody,\n shouldRetryRequest,\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 const retryFn = config.retryFn || shouldRetryRequest;\n let currentRetryCount = 0;\n let retryTimeout: number | null = null;\n\n return new Observable((observer: Observer<RequestEvent<Response>>) => {\n const xhr = new XMLHttpRequest();\n const reqBody = serializeBody(body);\n\n const setupXhr = () => {\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\n setupXhr();\n\n const partialFromXhr = (): PartialXhrState => {\n const statusText = xhr.statusText || 'OK';\n const headers = parseAllXhrResponseHeaders(xhr);\n const _url = getResponseUrl(xhr) || url;\n\n return { headers, status: xhr.status, statusText, url: _url };\n };\n\n const handleRetry = (error: RequestError) => {\n const newRetryCount = currentRetryCount + 1;\n const { headers } = partialFromXhr();\n const { retry, delay } = retryFn({ currentRetryCount: newRetryCount, headers, error });\n\n if (!retry) {\n observer.next({ type: 'failure', headers, error });\n observer.complete();\n return;\n }\n\n const _delay = delay ?? 1000;\n observer.next({ type: 'delay-retry', headers, retryNumber: newRetryCount, retryDelay: _delay });\n\n retryTimeout = window.setTimeout(() => {\n setupXhr();\n xhr.send(reqBody);\n currentRetryCount = newRetryCount;\n observer.next({ type: 'start', headers, isRetry: true, retryNumber: currentRetryCount, retryDelay: _delay });\n }, _delay);\n };\n\n const onLoad = async () => {\n const { headers, statusText, url } = partialFromXhr();\n\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 } else if (!ok && body instanceof Blob) {\n try {\n const text = await body.text();\n\n if (body.type === 'application/json') {\n body = JSON.parse(text);\n } else {\n body = text;\n }\n } catch (error) {\n // Ignore the error.\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 handleRetry({\n url,\n detail: body,\n status,\n statusText,\n });\n }\n };\n\n const onError = (error: Event) => {\n const { url } = partialFromXhr();\n\n handleRetry({\n url,\n detail: error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n });\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\n if (retryTimeout) {\n window.clearTimeout(retryTimeout);\n }\n\n if (config.reportProgress) {\n xhr.removeEventListener('progress', onDownProgress);\n\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 { CreateComputedOptions, Injector, Signal, assertInInjectionContext, computed, inject } from '@angular/core';\nimport { ToObservableOptions, ToSignalOptions, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { createDestroy } from '@ethlete/core';\nimport { Observable, Subscribable, of, pairwise, startWith, switchMap, takeUntil, tap } from 'rxjs';\nimport {\n AnyQuery,\n AnyQueryCollection,\n QueryOf,\n QueryState,\n QueryStateType,\n extractQuery,\n filterQueryStates,\n isQuery,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n} from '../query';\nimport { QueryDataOf } from '../query-creator';\n\nexport interface QueryContainerConfig {\n /**\n * If `true`, the previous query will be aborted when a new query is pushed into the container.\n * @default true // Only if the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.\n */\n abortPrevious?: boolean;\n\n /**\n * If `true`, the query will be aborted when the container is destroyed.\n * @default true // Only if the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.\n */\n abortOnDestroy?: boolean;\n\n /**\n * If `true`, the previous polling will be stopped when a new query is pushed into the container.\n * @default true // Only if the query has no other dependents and the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.\n */\n stopPreviousPolling?: boolean;\n}\n\nexport interface QueryFilterConfig {\n /**\n * If `true`, the response will be cached until the next response is received or the query fails.\n * @default false\n */\n cacheResponse?: boolean;\n}\n\nexport const addQueryContainerHandling = (\n obs: Observable<AnyQuery | AnyQuery[] | null>,\n valueFn: () => AnyQuery | AnyQuery[] | null | undefined,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(addQueryContainerHandling);\n\n const { abortPrevious, abortOnDestroy, stopPreviousPolling } = config ?? {};\n\n const injector = inject(Injector);\n const destroy$ = createDestroy();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const tNode = (injector as any)._tNode;\n const componentId = tNode?.index ?? -1;\n\n obs\n .pipe(\n takeUntil(destroy$),\n startWith(null),\n pairwise(),\n tap(([prevQuery, currQuery]) => {\n const cleanQuery = (q: AnyQuery | null | undefined) => {\n if (!q?._hasDependents() && ((abortPrevious === undefined && q?.canBeCached) || abortPrevious)) {\n q?.abort();\n }\n\n if (\n !q?._hasDependents() &&\n ((stopPreviousPolling === undefined && q?.canBeCached) || stopPreviousPolling) &&\n q?.isPolling\n ) {\n q?.stopPolling();\n }\n };\n\n if ((isQuery(prevQuery) || prevQuery === null) && (isQuery(currQuery) || currQuery === null)) {\n prevQuery?._removeDependent(componentId);\n currQuery?._addDependent(componentId);\n\n cleanQuery(prevQuery);\n } else if (\n (Array.isArray(prevQuery) || prevQuery === null) &&\n (Array.isArray(currQuery) || currQuery === null)\n ) {\n if (prevQuery) {\n for (let i = 0; i < prevQuery.length; i++) {\n prevQuery[i]?._removeDependent(componentId);\n }\n }\n\n if (currQuery) {\n for (let i = 0; i < currQuery.length; i++) {\n currQuery[i]?._addDependent(componentId);\n }\n }\n\n if (prevQuery) {\n for (let i = 0; i < prevQuery.length; i++) {\n cleanQuery(prevQuery[i]);\n }\n }\n } else if (\n (isQuery(prevQuery) && Array.isArray(currQuery)) ||\n (Array.isArray(prevQuery) && isQuery(currQuery))\n ) {\n throw new Error('Cannot mix queries and arrays of queries in the same query container.');\n }\n }),\n )\n .subscribe();\n\n destroy$.subscribe(() => {\n const query = valueFn();\n\n const handleQuery = (q: AnyQuery | null | undefined) => {\n q?._removeDependent(componentId);\n\n if (!q?._hasDependents() && ((q?.canBeCached && abortOnDestroy === undefined) || abortOnDestroy)) {\n q?.abort();\n }\n };\n\n if (isQuery(query)) {\n handleQuery(query);\n } else if (Array.isArray(query)) {\n for (const q of query) {\n handleQuery(q);\n }\n }\n });\n};\n\nexport function toQuerySignal<T extends AnyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n): Signal<T | undefined>;\nexport function toQuerySignal<T extends AnyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: ToSignalOptions & { initialValue?: undefined; requireSync?: false } & QueryContainerConfig,\n): Signal<T | undefined>;\nexport function toQuerySignal<T extends AnyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: ToSignalOptions & { initialValue?: null; requireSync?: false } & QueryContainerConfig,\n): Signal<T | null>;\nexport function toQuerySignal<T extends AnyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: ToSignalOptions & { initialValue?: undefined; requireSync: true } & QueryContainerConfig,\n): Signal<T>;\nexport function toQuerySignal<T extends AnyQuery | null, const U extends T>(\n source: Observable<T> | Subscribable<T>,\n options: ToSignalOptions & { initialValue: U; requireSync?: false } & QueryContainerConfig,\n): Signal<T | U>;\n\nexport function toQuerySignal<T extends AnyQuery | null, U = undefined>(\n source: Observable<T> | Subscribable<T>,\n options?: ToSignalOptions & { initialValue?: U } & QueryContainerConfig,\n): Signal<T | U> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const s = toSignal(source, options as any);\n\n addQueryContainerHandling(source as Observable<T>, () => s() as T, options);\n\n return s as Signal<T | U>;\n}\n\nexport function queryComputed<T extends AnyQuery | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T> {\n const c = computed(computation, options);\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\nexport function queryArrayComputed<T extends AnyQuery[] | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T> {\n const c = computed(computation, options);\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\nexport function toQuerySubject<T extends AnyQuery | null>(\n source: Signal<T>,\n options?: ToObservableOptions & QueryContainerConfig,\n): Observable<T> {\n const obs = toObservable(source, options);\n\n addQueryContainerHandling(obs, () => source(), options);\n\n return obs;\n}\n\nexport function queryStateSignal<T extends Signal<AnyQuery | AnyQueryCollection | null>>(\n source: T,\n options?: QueryFilterConfig,\n) {\n const { cacheResponse } = options ?? {};\n\n return toSignal(\n toObservable(source).pipe(\n switchMap((q) => extractQuery(q)?.state$ ?? of(null)),\n switchMap((state) => {\n if (cacheResponse) {\n return of(state).pipe(\n filterQueryStates([QueryStateType.Success, QueryStateType.Failure, QueryStateType.Cancelled]),\n );\n }\n\n return of(state);\n }),\n ),\n {\n initialValue: null,\n },\n ) as Signal<QueryState<QueryDataOf<QueryOf<ReturnType<T>>>> | null>;\n}\n\nexport function queryStateResponseSignal<T extends Signal<AnyQuery | AnyQueryCollection | null>>(\n source: T,\n options?: QueryFilterConfig,\n) {\n const s = queryStateSignal(source, options);\n\n return computed(() => {\n const state = s();\n\n return isQueryStateSuccess(state) ? state.response : null;\n });\n}\n\nexport function queryStateErrorSignal<T extends Signal<AnyQuery | AnyQueryCollection | null>>(source: T) {\n const s = queryStateSignal(source);\n\n return computed(() => {\n const state = s();\n\n return isQueryStateFailure(state) ? state.error : null;\n });\n}\n\nexport function queryStateLoadingSignal<T extends Signal<AnyQuery | AnyQueryCollection | null>>(source: T) {\n const s = queryStateSignal(source);\n\n return computed(() => {\n const state = s();\n\n return isQueryStateLoading(state) ? state : null;\n });\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 { assertInInjectionContext, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject } from 'rxjs';\nimport { EntityStore } from '../entity';\nimport { Query, computeQueryQueryParams, isGqlQueryConfig } from '../query';\nimport { QueryClient, buildGqlCacheKey, shouldCacheQuery } from '../query-client';\nimport { QueryStore } from '../query-store';\nimport {\n AnyRoute,\n BaseArguments,\n GqlQueryConfig,\n RestQueryConfig,\n RouteType,\n WithConfig,\n WithHeaders,\n WithMock,\n} from '../query/query.types';\nimport { buildRoute } from '../request';\nimport { QueryContainerConfig, addQueryContainerHandling } from '../utils';\nimport { QueryPrepareFn } from './query-creator.types';\n\nexport class QueryCreator<\n Arguments extends BaseArguments | undefined,\n Response,\n Route extends RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> {\n constructor(\n private _queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n private _client: QueryClient,\n private _store: QueryStore,\n ) {}\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n prepare: QueryPrepareFn<Arguments, Response, Route, Store, Data, Id> = (\n args?: Arguments & WithHeaders & WithConfig & WithMock<Response>,\n ) => {\n const route = buildRoute({\n base: this._client.config.baseRoute,\n route: this._queryConfig.route as AnyRoute,\n pathParams: args?.pathParams,\n queryParams: computeQueryQueryParams({ config: this._queryConfig, client: this._client, args }),\n queryParamConfig: this._client.config.request?.queryParams,\n }) as Route;\n\n const cacheKey =\n (args?.config?.queryStoreCacheKey ?? '') +\n (isGqlQueryConfig(this._queryConfig) ? buildGqlCacheKey(this._queryConfig, args) : route);\n\n if (shouldCacheQuery(this._queryConfig.method) && !args?.config?.skipQueryStore) {\n const existingQuery = this._store.get<Query<Response, Arguments, Route, Store, Data, Id>>(cacheKey);\n\n if (existingQuery) {\n return existingQuery;\n }\n }\n\n const query = new Query<Response, Arguments, Route, Store, Data, Id>(\n this._client,\n this._queryConfig,\n route,\n args ?? ({} as Arguments),\n cacheKey,\n );\n\n if (shouldCacheQuery(this._queryConfig.method) && !args?.config?.skipQueryStore) {\n this._store.add(cacheKey, query);\n }\n\n this._store._dispatchQueryCreated(query);\n\n return query;\n };\n\n createSubject = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\n assertInInjectionContext(this.createSubject);\n\n const subject = new BehaviorSubject<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n\n addQueryContainerHandling(subject, () => subject.getValue(), config);\n\n return subject;\n };\n\n createSignal = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\n assertInInjectionContext(this.createSignal);\n\n const _signal = signal<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n\n addQueryContainerHandling(toObservable(_signal), () => _signal(), config);\n\n return _signal;\n };\n\n /**\n * @deprecated Use `myQuery.createSubject()` or `myQuery.createSignal()` instead. Will be removed in v6.\n */\n behaviorSubject = (initialValue?: ReturnType<typeof this.prepare> | null) =>\n new BehaviorSubject<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n}\n","import { Subject, fromEvent, take, takeUntil, timer } from 'rxjs';\nimport { AnyQuery } from '../query';\n\nexport class QueryStore {\n /**\n * @internal\n */\n readonly _store = new Map<string, AnyQuery>();\n\n private _garbageCollector: number | null = null;\n private _isInLowResourceMode = false;\n private _lastBlurTimestamp = Date.now();\n\n private _storeChange$ = new Subject<string>();\n private _queryCreated$ = new Subject<AnyQuery>();\n\n readonly storeChange$ = this._storeChange$.asObservable();\n readonly queryCreated$ = this._queryCreated$.asObservable();\n\n constructor(\n private _config?: {\n enableChangeLogging?: boolean;\n enableGarbageCollectorLogging?: boolean;\n autoRefreshQueriesOnWindowFocus?: boolean;\n enableSmartPolling?: boolean;\n },\n ) {\n this._initSmartQueryHandling();\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 this._storeChange$.next(id);\n }\n\n get<T extends AnyQuery>(id: string): T | null {\n return (this._store.get(id) as T) ?? null;\n }\n\n remove(id: string) {\n this._store.delete(id);\n\n this._logState(id, null, 'REMOVE');\n\n this._storeChange$.next(id);\n }\n\n forEach(callback: (value: AnyQuery, key: string) => void) {\n for (const [key, query] of this._store) {\n callback(query, key);\n }\n }\n\n refreshQueriesInUse(config?: { ignoreCacheValidity?: boolean; purgeUnused?: boolean }) {\n const { ignoreCacheValidity, purgeUnused } = config ?? {};\n\n for (const [key, query] of this._store) {\n if (\n query.isInUse &&\n (query.isExpired || ignoreCacheValidity) &&\n query.autoRefreshOnConfig.queryClientDefaultHeadersChange\n ) {\n query.execute({ skipCache: true, _triggeredVia: 'auto' });\n } else if (purgeUnused && !query.isInUse) {\n this.remove(key);\n }\n }\n }\n\n /**\n * @internal\n */\n _dispatchQueryCreated(query: AnyQuery) {\n this._queryCreated$.next(query);\n }\n\n private _initSmartQueryHandling() {\n const windowBlur$ = fromEvent<Event>(window, 'blur');\n const windowFocus$ = fromEvent<Event>(window, 'focus');\n\n windowBlur$.subscribe(() => {\n timer(5000)\n .pipe(takeUntil(windowFocus$), take(1))\n .subscribe(() => {\n this._lastBlurTimestamp = Date.now();\n this._isInLowResourceMode = true;\n this._stopGarbageCollector();\n\n if (this._config?.enableSmartPolling) {\n this.forEach((query) => {\n if (!query.isPolling || !query._enableSmartPolling) {\n return;\n }\n\n query.pausePolling();\n });\n }\n });\n });\n\n windowFocus$.subscribe(() => {\n if (!this._isInLowResourceMode) {\n return;\n }\n\n this._isInLowResourceMode = false;\n\n if (this._config?.enableSmartPolling || this._config?.autoRefreshQueriesOnWindowFocus) {\n this.forEach((query) => {\n if (this._config?.enableSmartPolling && query._isPollingPaused) {\n query.resumePolling();\n }\n\n if (Date.now() - this._lastBlurTimestamp > 15000) {\n if (\n this._config?.autoRefreshQueriesOnWindowFocus &&\n query.isExpired &&\n query.isInUse &&\n query.autoRefreshOnConfig.windowFocus\n ) {\n query.execute({ skipCache: true, _triggeredVia: 'auto' });\n }\n }\n });\n }\n\n this._initGarbageCollector();\n });\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 this._logGarbageCollector('Stop');\n }\n }\n\n private _runGarbageCollector() {\n this._logGarbageCollector('Collecting...');\n\n this._store.forEach((item, key) => {\n if (item.isExpired && !item.isInUse) {\n this.remove(key);\n }\n });\n\n this._logGarbageCollector('Collection done');\n\n if (!this._store.size) {\n this._stopGarbageCollector();\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 { BehaviorSubject } from 'rxjs';\nimport { AuthProvider } from '../auth';\nimport { EntityStore } from '../entity';\nimport {\n BaseArguments,\n GqlQueryConfig,\n GqlQueryConfigWithoutMethod,\n QueryConfigWithoutMethod,\n RestQueryConfig,\n RouteType,\n} from '../query';\nimport { QueryCreator } from '../query-creator';\nimport { QueryStore } from '../query-store';\nimport { RequestHeaders, RequestHeadersMethodMap } from '../request';\nimport { QueryClientConfig } from './query-client.types';\n\nexport class QueryClient {\n /**\n * @internal\n */\n 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 autoRefreshQueriesOnWindowFocus: _clientConfig.request?.autoRefreshQueriesOnWindowFocus ?? true,\n enableSmartPolling: _clientConfig.request?.enableSmartPolling ?? true,\n });\n }\n\n get = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GET',\n });\n\n post = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'POST',\n });\n\n put = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'PUT',\n });\n\n patch = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'PATCH',\n });\n\n delete = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'DELETE',\n });\n\n gqlQuery = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GQL_QUERY',\n });\n\n gqlMutate = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GQL_MUTATE',\n });\n\n fetch = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined,\n Id,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n Data = Response,\n >(\n queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n ) => new QueryCreator<Arguments, Response, Route, Store, Data, Id>(queryConfig, this, this._store);\n\n setAuthProvider = (authProvider: AuthProvider) => {\n if (this.authProvider) {\n this.authProvider?.cleanUp();\n }\n\n this._authProvider$.next(authProvider);\n };\n\n setDefaultHeaders = (config: {\n headers: RequestHeaders | RequestHeadersMethodMap | null;\n refreshQueriesInUse?: boolean;\n }) => {\n if (!this._clientConfig.request) {\n this._clientConfig.request = {\n headers: config.headers ?? undefined,\n };\n } else {\n this._clientConfig.request.headers = config.headers ?? undefined;\n }\n\n if (config.refreshQueriesInUse) {\n this._store.refreshQueriesInUse({ purgeUnused: true, ignoreCacheValidity: true });\n }\n };\n\n clearAuthProvider = () => {\n this.authProvider?.cleanUp();\n this._authProvider$.next(null);\n };\n\n _updateBaseRoute = (route: string) => {\n this._clientConfig.baseRoute = route;\n };\n}\n","import { AnyGqlQueryConfig, BaseArguments } 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 = (config: AnyGqlQueryConfig, args: BaseArguments | undefined) => {\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","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 data as { query: string; variables?: string; operationName?: string };\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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { assertInInjectionContext, isDevMode, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Paginated } from '@ethlete/types';\nimport { BehaviorSubject, Observable, filter, map, of, switchMap, takeWhile, tap } from 'rxjs';\nimport { EntityStore } from '../entity';\nimport { transformGql } from '../gql';\nimport { QueryClient } from '../query-client';\nimport {\n AnyQueryCreator,\n QueryArgsOf,\n QueryCreator,\n QueryDataOf,\n QueryResponseOf,\n QueryStoreIdOf,\n QueryStoreOf,\n} from '../query-creator';\nimport { QueryForm } from '../query-form';\nimport { HttpStatusCode, Method, RequestHeaders, RequestHeadersMethodMap, transformMethod } from '../request';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../symfony';\nimport { QueryContainerConfig, addQueryContainerHandling } from '../utils';\nimport {\n AnyGqlQueryConfig,\n AnyQuery,\n AnyQueryCollection,\n AnyQueryCollectionData,\n AnyQueryCreatorCollection,\n AnyRestQueryConfig,\n BaseArguments,\n Cancelled,\n Failure,\n GqlQueryConfig,\n Loading,\n Prepared,\n QueryCollectionOf,\n QueryState,\n QueryStateResponseOf,\n QueryStateType,\n ResetPageOnErrorOperatorConfig,\n RouteType,\n Success,\n} from './query.types';\n\ntype OmitNull<T> = T extends null ? never : T;\n\nexport function filterSuccess() {\n return function <T extends QueryState | null, Response extends QueryStateResponseOf<OmitNull<T>>>(\n source: Observable<T>,\n ) {\n return source.pipe(filter((value) => isQueryStateSuccess(value))) as Observable<Success<Response>>;\n };\n}\n\nexport function ignoreAutoRefresh() {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => !isAutoRefresh(value))) as Observable<T>;\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) || isQueryStatePrepared(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 <T extends AnyQuery | null, Data extends QueryDataOf<T>>(source: Observable<T>) {\n return source.pipe(switchMap((value) => value?.state$ ?? of(null))) as Observable<QueryState<Data> | null>;\n };\n}\n\nexport function switchQueryCollectionState() {\n return function <T extends AnyQueryCollection | null, Data extends AnyQueryCollectionData<OmitNull<T>>>(\n source: Observable<T>,\n ) {\n return source.pipe(switchMap((value) => value?.query.state$ ?? of(null))) as Observable<QueryState<Data> | null>;\n };\n}\n\nexport const resetPageOnError =\n <T extends AnyQuery | null | undefined, J extends QueryForm<any>>(config: ResetPageOnErrorOperatorConfig<J>) =>\n (source: Observable<T>) => {\n const { queryForm, pageControlKey = 'page' } = config;\n\n if (isDevMode() && !queryForm.form.controls[pageControlKey]) {\n console.warn(`resetPageOnError: queryForm.form.controls[\"${pageControlKey}\"] is undefined`);\n }\n\n return source.pipe(\n switchMap((q) => {\n if (!q) {\n return of(q);\n }\n\n return q.state$.pipe(\n tap((state) => {\n if (!isQueryStateFailure(state)) {\n return;\n }\n\n switch (state.error.status) {\n // The page is invalid (in prod mode, code is 416)\n case HttpStatusCode.RangeNotSatisfiable:\n queryForm.form.controls[pageControlKey]?.patchValue(1);\n break;\n\n // The page might be invalid (in dev mode, code is 500)\n case HttpStatusCode.InternalServerError:\n if (isSymfonyPagerfantaOutOfRangeError(state.error.detail)) {\n queryForm.form.controls[pageControlKey].patchValue(1);\n }\n break;\n }\n }),\n takeUntilResponse(),\n );\n }),\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 isAutoRefresh = (state: QueryState | null | undefined): boolean => state?.meta.triggeredVia === 'auto';\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 Store extends EntityStore<unknown>,\n Data,\n Id,\n>(\n config: unknown,\n): config is GqlQueryConfig<Route, Response, Arguments, Store, Data, Id> => {\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 isQueryCollection = <T extends AnyQueryCollection>(query: unknown): query is T => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n\n if (!('query' in query)) {\n return false;\n }\n\n return true;\n};\n\n/**\n * @deprecated Use `createQueryCollectionSubject` instead. Will be removed in v6.\n */\nexport const createQueryCollection = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n) => new BehaviorSubject<R | null>(null);\n\nexport const createQueryCollectionSubject = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(createQueryCollectionSubject);\n\n const subject = new BehaviorSubject<R | null>(null);\n\n addQueryContainerHandling(\n subject.pipe(map((s) => s?.query ?? null)),\n () => subject.getValue()?.query ?? null,\n config,\n );\n\n return subject;\n};\n\nexport const createQueryCollectionSignal = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(createQueryCollectionSignal);\n\n const _signal = signal<R | null>(null);\n\n addQueryContainerHandling(\n toObservable(_signal).pipe(map((s) => s?.query ?? null)),\n () => _signal()?.query ?? null,\n config,\n );\n\n return _signal;\n};\n\nexport const extractQuery = <T extends AnyQuery | AnyQueryCollection | null>(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\nexport const castQueryCreatorTypes = <\n QC extends AnyQueryCreator,\n Arguments extends QueryArgsOf<QC>,\n Response extends QueryResponseOf<QC>,\n Store extends QueryStoreOf<QC>,\n Data extends QueryDataOf<QC>,\n Route extends RouteType<Arguments>,\n Id extends QueryStoreIdOf<QC>,\n OverrideArguments extends BaseArguments | undefined,\n OverrideResponse extends Response | undefined,\n>(config: {\n creator: QC;\n args?: OverrideArguments;\n response?: OverrideResponse;\n}) => {\n if (config.args?.pathParams) {\n console.error(config);\n\n throw new Error('Path params cannot be overridden in castQueryCreatorTypes. Create a new query creator instead.');\n }\n\n return config.creator as unknown as QueryCreator<OverrideArguments, OverrideResponse, Route, Store, Data, Id>;\n};\n\nexport const computeQueryMethod = (config: { config: AnyRestQueryConfig | AnyGqlQueryConfig; client: QueryClient }) => {\n let method: Method;\n\n if (isGqlQueryConfig(config.config)) {\n const transferVia = config.config.transferVia ?? config.client.config.request?.gql?.transferVia;\n method = transformMethod({ method: config.config.method, transferVia });\n } else {\n method = transformMethod({ method: config.config.method });\n }\n\n return method;\n};\n\nexport const computeQueryBody = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n method: Method;\n args?: BaseArguments;\n}) => {\n let body: unknown;\n\n if (\n config.method === 'GET' ||\n config.method === 'HEAD' ||\n config.method === 'OPTIONS' ||\n (isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia)))\n ) {\n return undefined;\n }\n\n if (isGqlQueryConfig(config.config)) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n\n body = query(config.args?.variables);\n } else {\n body = config.args?.body;\n }\n\n return body;\n};\n\nexport const computeQueryAuthHeader = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n}) => {\n let authHeader: Record<string, string> | null = null;\n\n if (config.config.secure) {\n const header = config.client.authProvider?.header;\n\n if (header) {\n authHeader = header;\n }\n } else if (config.client.authProvider?.header) {\n if (config.config.secure === undefined || config.config.secure) {\n authHeader = config.client.authProvider.header;\n }\n }\n\n return authHeader;\n};\n\nexport const computeQueryHeaders = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n args?: BaseArguments;\n}) => {\n const authHeader = computeQueryAuthHeader(config);\n\n const mergedHeaders =\n mergeHeaders(\n getDefaultHeaders(config.client.config.request?.headers, config.config.method),\n authHeader,\n config.args?.headers,\n ) || undefined;\n\n return mergedHeaders;\n};\n\nexport const computeQueryQueryParams = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n args?: BaseArguments;\n}) => {\n if (\n isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia))\n ) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n\n let params = query(config.args?.variables);\n\n if (config.args?.queryParams) {\n params = { ...params, ...config.args?.queryParams };\n }\n\n return params;\n }\n\n return config.args?.queryParams;\n};\n\nexport const paginatedEntityValueUpdater =\n <\n T extends Paginated<unknown>,\n Args extends BaseArguments,\n Entity,\n J extends T extends Paginated<infer X> ? X : never,\n >(\n findFn: (val: J, entity: Entity) => boolean,\n ) =>\n ({ response, rawResponse, entity }: { rawResponse: T; response: T; args: Args; entity: Entity }) => {\n const indexOfEntityRaw = rawResponse.items.findIndex((item) => findFn(item as J, entity));\n const indexOfEntity = response.items.findIndex((item) => findFn(item as J, entity));\n\n if (indexOfEntity === -1 || indexOfEntityRaw === -1) {\n return null;\n }\n\n const newRawResponse = {\n ...rawResponse,\n items: [\n ...rawResponse.items.slice(0, indexOfEntityRaw),\n entity,\n ...rawResponse.items.slice(indexOfEntityRaw + 1),\n ],\n };\n\n const newResponse = {\n ...response,\n items: [...response.items.slice(0, indexOfEntity), entity, ...response.items.slice(indexOfEntity + 1)],\n };\n\n return {\n response: newResponse,\n rawResponse: newRawResponse,\n };\n };\n","import { untracked } from '@angular/core';\nimport {\n BehaviorSubject,\n filter,\n interval,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n skip,\n Subject,\n Subscription,\n switchMap,\n takeUntil,\n takeWhile,\n tap,\n timer,\n} from 'rxjs';\nimport { isBearerAuthProvider } from '../auth';\nimport { EntityStore } from '../entity';\nimport { QueryClient, shouldCacheQuery } from '../query-client';\nimport { HttpStatusCode, request, RequestError, RequestEvent, RequestHeaders } from '../request';\nimport {\n BaseArguments,\n ExecuteQueryOptions,\n GqlQueryConfig,\n PollConfig,\n QueryAutoRefreshConfig,\n QueryState,\n QueryStateMeta,\n QueryStateType,\n RestQueryConfig,\n RouteType,\n} from './query.types';\nimport {\n computeQueryBody,\n computeQueryHeaders,\n computeQueryMethod,\n filterFailure,\n filterSuccess,\n isGqlQueryConfig,\n isQueryStateCancelled,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStatePrepared,\n isQueryStateSuccess,\n takeUntilResponse,\n} from './query.utils';\n\nlet _nextQueryId = 0;\n\nexport class Query<\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> {\n readonly _id = _nextQueryId++;\n\n private _currentLocalId = 0;\n private _pollingSubscription: Subscription | null = null;\n private _onAbort$ = new Subject<void>();\n private _currentPollConfig: PollConfig | null = null;\n\n /**\n * @internal\n * Used to track which components depend on this query.\n * The key is the component's _tNode index.\n * The value is the number of times the component has subscribed to this query.\n * The value might increase since we cant distinguish between a component and a host directive applied to it.\n */\n _dependents: Record<number, number> = {};\n\n /**\n * @internal\n */\n _dependentsChanged$ = new ReplaySubject<Record<number, number>>();\n\n /**\n * @internal\n */\n _isPollingPaused = false;\n\n private readonly _state$ = new BehaviorSubject<QueryState<Response>>({\n type: QueryStateType.Prepared,\n meta: { id: this._currentLocalId, triggeredVia: 'program' },\n });\n\n private get _nextId() {\n return ++this._currentLocalId;\n }\n\n get state$(): Observable<QueryState<Data>> {\n return this._state$.pipe(\n tap((s) => {\n if (!this._client.config.logging?.preparedQuerySubscriptions) return;\n\n if (isQueryStatePrepared(s)) {\n console.warn(\n `Query ${this._routeWithParams} was subscribed to in the prepared state. Did you forget to call .execute()?`,\n );\n }\n }),\n switchMap((s) => this._transformState(s)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n /**\n * The current state of the query.\n *\n * **Warning!** This differs from the `state$` observable in that it does not use the query store. Thus, the response data might be outdated.\n * Use `state$` (or `firstValueFrom(state$)`) the most up-to-date data.\n */\n get rawState() {\n return this._state$.value;\n }\n\n get isExpired() {\n if (isQueryStateLoading(this.rawState)) {\n return false;\n }\n\n if (\n isQueryStatePrepared(this.rawState) ||\n isQueryStateCancelled(this.rawState) ||\n isQueryStateFailure(this.rawState)\n ) {\n return true;\n }\n\n const ts = this.rawState.meta.expiresAt;\n\n if (!ts) {\n return true;\n }\n\n return ts < Date.now();\n }\n\n get isInUse() {\n return this._state$.observed || Object.keys(this._dependents).length > 0;\n }\n\n /**\n * @internal\n */\n get _subscriberCount() {\n return this._state$.observers.length;\n }\n\n get isPolling() {\n return !!this._pollingSubscription;\n }\n\n get autoRefreshOnConfig() {\n const base = this._queryConfig.autoRefreshOn ?? {};\n\n const transformed: Readonly<QueryAutoRefreshConfig> = {\n queryClientDefaultHeadersChange: base.queryClientDefaultHeadersChange ?? true,\n windowFocus: base.windowFocus ?? true,\n };\n\n return transformed;\n }\n\n /**\n * @internal\n */\n get _enableSmartPolling() {\n return this._queryConfig.enableSmartPolling ?? true;\n }\n\n get store() {\n return this._queryConfig.entity?.store ?? null;\n }\n\n get canBeCached() {\n return shouldCacheQuery(this._queryConfig.method);\n }\n\n get _isInMockMode() {\n return !!this._arguments?.mock;\n }\n\n constructor(\n private readonly _client: QueryClient,\n\n /**\n * @internal\n */\n public readonly _queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n\n /**\n * @internal\n */\n public readonly _routeWithParams: Route,\n\n /**\n * @internal\n */\n public readonly _arguments: Arguments,\n\n /**\n * @internal\n */\n public readonly _queryStoreKey: string,\n ) {}\n\n execute(options: ExecuteQueryOptions = {}) {\n const { skipCache = false, _triggeredVia: triggeredVia = 'program', cancelPrevious = false } = options;\n const { authProvider } = this._client;\n const queryConfig = this._queryConfig;\n\n if (!this.isExpired && !skipCache && isQueryStateSuccess(this.rawState)) {\n return this;\n }\n\n if (queryConfig.secure && !authProvider && !this._isInMockMode) {\n throw new Error('Cannot execute secure query without auth provider');\n }\n\n const id = this._nextId;\n const meta: QueryStateMeta = { id, triggeredVia };\n\n if (isQueryStateLoading(this.rawState)) {\n if (cancelPrevious) {\n this.abort();\n } else {\n return this;\n }\n }\n\n this._updateState({ type: QueryStateType.Loading, meta });\n\n const method = computeQueryMethod({ config: queryConfig, client: this._client });\n const body = computeQueryBody({ config: queryConfig, client: this._client, args: this._arguments, method });\n const headers = computeQueryHeaders({ client: this._client, config: queryConfig, args: this._arguments });\n\n if (this._isInMockMode) {\n this._mockRequest(headers, meta, options);\n } else {\n request<Response>({\n urlWithParams: this._routeWithParams as string,\n method,\n body,\n headers,\n reportProgress: queryConfig.reportProgress,\n responseType: queryConfig.responseType,\n withCredentials: queryConfig.withCredentials,\n cacheAdapter: this._client.config.request?.cacheAdapter,\n retryFn: this._client.config.request?.retryFn,\n })\n .pipe(\n tap((state) => this._updateEntityState(state, meta, options)),\n takeUntil(this._onAbort$),\n )\n .subscribe();\n }\n\n return this;\n }\n\n abort() {\n if (!isQueryStateLoading(this.rawState)) {\n return this;\n }\n\n this._onAbort$.next();\n\n this._updateState({\n type: QueryStateType.Cancelled,\n meta: { id: this.rawState.meta.id, triggeredVia: this.rawState.meta.triggeredVia },\n });\n\n return this;\n }\n\n poll(config: PollConfig) {\n if (this._pollingSubscription) {\n return this;\n }\n\n this._currentPollConfig = config;\n\n const interval$ = interval(config.interval);\n const poll$ = interval$.pipe(\n skip(config.triggerImmediately ? 0 : 1),\n takeUntil(config.takeUntil),\n takeWhile(() => !this._isPollingPaused),\n filter(() => !isQueryStateLoading(this._state$.value)),\n );\n\n this._pollingSubscription = poll$.subscribe({\n next: () => this.execute({ skipCache: true, _triggeredVia: 'poll' }),\n complete: () => this.stopPolling(),\n });\n\n return this;\n }\n\n stopPolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._currentPollConfig = null;\n\n return this;\n }\n\n pausePolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n\n this._isPollingPaused = true;\n\n return this;\n }\n\n resumePolling() {\n if (!this._isPollingPaused || !this._currentPollConfig) {\n return this;\n }\n\n this._isPollingPaused = false;\n\n return this.poll({ ...this._currentPollConfig, triggerImmediately: true });\n }\n\n onSuccess(callback: (response: Data) => void) {\n this.state$.pipe(takeUntilResponse(), filterSuccess()).subscribe((state) => callback(state.response));\n return this;\n }\n\n onFailure(callback: (error: RequestError<unknown>) => void) {\n this.state$.pipe(takeUntilResponse(), filterFailure()).subscribe((state) => callback(state.error));\n return this;\n }\n\n private _getBearerAuthProvider() {\n const authProvider = this._client.authProvider;\n\n if (authProvider && isBearerAuthProvider(authProvider)) {\n return authProvider;\n }\n\n return null;\n }\n\n private _updateEntityState(\n requestEvent: RequestEvent<Response>,\n meta: QueryStateMeta,\n options?: ExecuteQueryOptions,\n ) {\n switch (requestEvent.type) {\n case 'start':\n case 'delay-retry': {\n const { type, retryDelay, retryNumber } = requestEvent;\n const newMeta: QueryStateMeta = { ...meta, isWaitingForRetry: type === 'delay-retry', retryDelay, retryNumber };\n\n this._updateState({\n type: QueryStateType.Loading,\n meta: newMeta,\n });\n break;\n }\n\n case 'upload-progress':\n case 'download-progress': {\n this._updateState({\n type: QueryStateType.Loading,\n progress: requestEvent.progress,\n partialText: 'partialText' in requestEvent ? requestEvent.partialText : undefined,\n meta,\n });\n\n break;\n }\n\n case 'success': {\n const { response, expiresInTimestamp } = requestEvent;\n const isGql = isGqlQueryConfig(this._queryConfig);\n const responseData =\n isGql && typeof response === 'object' && !!response && 'data' in response\n ? (response['data'] as Response)\n : (response as Response);\n\n if (this._queryConfig.entity && this._queryConfig.entity.set) {\n const id = this._queryConfig.entity?.id({ args: this._arguments, response: responseData });\n\n this._queryConfig.entity?.set({\n args: this._arguments,\n response: responseData,\n id,\n store: this._queryConfig.entity.store,\n });\n }\n\n this._updateState({\n type: QueryStateType.Success,\n response: responseData,\n meta: { ...meta, expiresAt: expiresInTimestamp },\n });\n\n break;\n }\n\n case 'failure': {\n const { error } = requestEvent;\n const failure = () => this._updateState({ type: QueryStateType.Failure, error, meta });\n const bearerAuthProvider = this._getBearerAuthProvider();\n\n if (\n !bearerAuthProvider ||\n options?._isUnauthorizedRetry ||\n error.status !== HttpStatusCode.Unauthorized ||\n !bearerAuthProvider.shouldRefreshOnUnauthorizedResponse\n ) {\n return failure();\n }\n\n const query = bearerAuthProvider._refreshQuery();\n if (!query) return failure();\n\n query.state$\n .pipe(\n takeUntilResponse(),\n takeUntil(this._onAbort$),\n tap((state) =>\n isQueryStateSuccess(state) ? this.execute({ ...options, _isUnauthorizedRetry: true }) : failure(),\n ),\n )\n .subscribe();\n\n break;\n }\n\n case 'cancel': {\n this._updateState({\n type: QueryStateType.Cancelled,\n meta,\n });\n\n break;\n }\n }\n }\n\n private _transformState(s: QueryState<Response>): Observable<QueryState<Data>> {\n if (!isQueryStateSuccess(s) || !this._queryConfig.entity?.get) {\n return of(s) as Observable<QueryState<Data>>;\n }\n\n const id = this._queryConfig.entity.id({ args: this._arguments, response: s.response });\n\n return this._queryConfig.entity\n .get({ args: this._arguments, id, response: s.response, store: this._queryConfig.entity.store })\n .pipe(map((v) => ({ ...s, response: v })));\n }\n\n private _updateState(s: QueryState<Response>) {\n // We need to use untracked here to avoid Angular's \"allowSignalWrites is false\" error when executing queries inside Angular's computed/effect signal functions.\n untracked(() => this._state$.next(s));\n }\n\n private _mockRequest(headers: RequestHeaders | undefined, meta: QueryStateMeta, options: ExecuteQueryOptions) {\n if (!this._arguments?.mock) return;\n\n const { delay = 200, error, response, retryIntoResponse = false, progress } = this._arguments.mock;\n const progressFileSize = progress?.fileSize ?? 1000000;\n const progressEventType = progress?.eventType ?? 'upload';\n const progressEventCount = progress?.eventCount ?? 5;\n const progressOmitTotal = progress?.omitTotal ?? false;\n const omitPartialText = progress?.omitPartialText ?? false;\n\n const finalResolveMock = () => {\n if (error) {\n this._updateEntityState({ error, headers: headers ?? {}, type: 'failure' }, meta, options);\n return;\n }\n\n this._updateEntityState(\n { response: response as Response, headers: headers ?? {}, type: 'success' },\n meta,\n options,\n );\n };\n\n if (progress) {\n interval(delay)\n .pipe(\n tap((a) => {\n if (a === progressEventCount + 1) {\n finalResolveMock();\n } else {\n const current = Math.min(progressFileSize * a, progressFileSize * progressEventCount);\n const percentage = (current / (progressFileSize * progressEventCount)) * 100;\n\n this._updateEntityState(\n {\n type: progressEventType === 'upload' ? 'upload-progress' : 'download-progress',\n headers: headers ?? {},\n progress: { current, ...(progressOmitTotal ? {} : { percentage, total: progressFileSize }) },\n partialText: omitPartialText ? undefined : `Partial text ${a}`,\n },\n meta,\n options,\n );\n }\n }),\n takeUntil(this._onAbort$),\n takeWhile((a) => a < progressEventCount + 1, true),\n )\n .subscribe();\n } else if (retryIntoResponse) {\n interval(delay)\n .pipe(\n tap((a) => {\n if (a === 3) {\n finalResolveMock();\n } else {\n const aModified = a + 1;\n this._updateEntityState(\n {\n type: 'delay-retry',\n headers: headers ?? {},\n retryDelay: 1000 + 1000 * aModified,\n retryNumber: aModified,\n },\n meta,\n options,\n );\n }\n }),\n takeUntil(this._onAbort$),\n takeWhile((a) => a < 3, true),\n )\n .subscribe();\n } else {\n timer(delay)\n .pipe(\n tap(() => finalResolveMock()),\n takeUntil(this._onAbort$),\n )\n .subscribe();\n }\n }\n\n /**\n * @internal\n */\n _addDependent(tNodeIndex: number) {\n if (!this._dependents[tNodeIndex]) {\n this._dependents[tNodeIndex] = 0;\n }\n\n this._dependents[tNodeIndex]++;\n\n this._dependentsChanged$.next(this._dependents);\n }\n\n /**\n * @internal\n */\n _removeDependent(tNodeIndex: number) {\n const count = this._dependents[tNodeIndex];\n if (count === undefined) {\n return;\n }\n\n this._dependents[tNodeIndex]--;\n\n if (count <= 1) {\n delete this._dependents[tNodeIndex];\n }\n\n this._dependentsChanged$.next(this._dependents);\n }\n\n /**\n * @internal\n */\n _hasDependents() {\n return Object.keys(this._dependents).length > 0;\n }\n}\n","import { AnyQueryCreator } from '../query-creator';\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>(\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\n if (!base64Url) {\n return null;\n }\n\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 {\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n switchQueryState,\n takeUntilResponse,\n} from '../query';\nimport { AnyQueryCreator, ConstructQuery, QueryResponseOf } from '../query-creator';\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<ConstructQuery<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 get shouldRefreshOnUnauthorizedResponse() {\n return (\n !!this._config.refreshConfig &&\n (this._config.refreshConfig.refreshOnUnauthorizedResponse === undefined ||\n this._config.refreshConfig.refreshOnUnauthorizedResponse)\n );\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 && cookieEnabled) {\n this._setCookie();\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 this._deleteCookie();\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 this._setCookie();\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 this._deleteCookie();\n }\n\n private _setCookie() {\n if (!this._config.refreshConfig?.cookieName || !this.tokens.refreshToken) return;\n\n setCookie(\n this._config.refreshConfig.cookieName,\n this.tokens.refreshToken,\n this._config.refreshConfig.cookieExpiresInDays,\n this._config.refreshConfig.cookieDomain,\n this._config.refreshConfig.cookiePath,\n this._config.refreshConfig.cookieSameSite,\n );\n }\n\n private _deleteCookie() {\n if (!this._config.refreshConfig?.cookieName) return;\n\n deleteCookie(\n this._config.refreshConfig.cookieName,\n this._config.refreshConfig.cookiePath,\n this._config.refreshConfig.cookieDomain,\n );\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 /**\n * @internal\n */\n _refreshQuery() {\n const currentQuery = this._currentRefreshQuery$.getValue();\n\n if (isQueryStateLoading(currentQuery?.rawState)) {\n return currentQuery;\n }\n\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 ConstructQuery<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 as QueryResponseOf<T>);\n\n this._tokens$.next(tokens);\n } else {\n this._tokens$.next({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n token: (state.response as any)['token'],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n refreshToken: (state.response as any)['refreshToken'],\n });\n }\n const cookieEnabled = this._config.refreshConfig?.cookieEnabled ?? true;\n\n if (this._config.refreshConfig?.cookieName && this.tokens.refreshToken && cookieEnabled) {\n this._setCookie();\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 this._deleteCookie();\n }\n }\n }),\n takeUntilResponse(),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n return query;\n }\n}\n","import { ClassValidatorError } from './class-validator.types';\n\nexport const isClassValidatorError = (error: unknown): error is ClassValidatorError => {\n return typeof error === 'object' && error !== null && 'statusCode' in error && 'message' in error && 'error' in error;\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AnyQuery } from '../../query';\n\n@Pipe({ name: 'queryShortName', standalone: true })\nexport class QueryShortNamePipe implements PipeTransform {\n transform(value: AnyQuery) {\n const route = value._routeWithParams;\n\n if (typeof route === 'string') {\n // given an url that looks like this: https://api.github.com/repos/EladBezalel/etimo-achievements or https://api.github.com/repos/EladBezalel/etimo-achievements?test=1&test2=2\n // we want to extract the last 3 parts of the url, so we get: repos/EladBezalel/etimo-achievements\n\n const parts = route.split('/');\n\n if (parts.length > 3) {\n return `.../${parts.slice(parts.length - 3).join('/')}`;\n }\n\n return route;\n }\n\n console.log(route);\n\n return route as string;\n }\n}\n","import { InjectionToken, isDevMode } from '@angular/core';\nimport { QueryClient } from '../../query-client';\n\nexport interface QueryClientDevtoolsOptions {\n displayName?: string;\n client: QueryClient;\n}\n\nexport const QUERY_CLIENT_DEVTOOLS_TOKEN = new InjectionToken<QueryClientDevtoolsOptions[]>(\n 'QUERY_CLIENT_DEVTOOLS_TOKEN',\n);\n\nexport const provideQueryClientForDevtools = (queryClient: QueryClientDevtoolsOptions) => {\n if (!isDevMode()) {\n console.warn(\n 'You are using the Query Devtools in production mode. This increases the size of your bundle and should only be used for development purposes.',\n );\n }\n\n return {\n provide: QUERY_CLIENT_DEVTOOLS_TOKEN,\n useValue: queryClient,\n multi: true,\n };\n};\n","import { AsyncPipe, JsonPipe, NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n TrackByFunction,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n signal,\n untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { createDestroy, nextFrame } from '@ethlete/core';\nimport { BehaviorSubject, map, of, startWith, switchMap, takeUntil, tap } from 'rxjs';\nimport { EntityStore } from '../../../entity';\nimport { AnyQuery, isGqlQueryConfig } from '../../../query';\nimport { QueryShortNamePipe } from '../../pipes';\nimport { QUERY_CLIENT_DEVTOOLS_TOKEN, QueryClientDevtoolsOptions } from '../../utils';\n\ntype QueryDevtoolsSnapLayout = 'full' | 'left' | 'right' | 'bottom' | 'top';\ntype QueryListMode = 'live' | 'history';\n\n@Component({\n selector: 'et-query-devtools',\n templateUrl: './query-devtools.component.html',\n styleUrls: ['./query-devtools.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {\n class: 'et-query-devtools',\n },\n imports: [AsyncPipe, JsonPipe, ReactiveFormsModule, NgClass, QueryShortNamePipe],\n})\nexport class QueryDevtoolsComponent {\n private readonly _cdr = inject(ChangeDetectorRef);\n protected readonly _destroy$ = createDestroy();\n\n protected readonly queryClientConfigs = inject(QUERY_CLIENT_DEVTOOLS_TOKEN);\n\n protected readonly isOpen = signal(false);\n protected readonly isTranslucent = signal(false);\n protected readonly snapLayout = signal<QueryDevtoolsSnapLayout>('full');\n protected readonly queryListMode = signal<QueryListMode>('live');\n\n protected showResponse = signal(false);\n protected showRawResponse = signal(false);\n protected showQueryConfig = signal(false);\n protected showEntityStoreValue = signal(false);\n protected showArguments = signal(false);\n\n protected selectedClientIdCtrl = new FormControl(0);\n\n protected readonly selectedClientId = toSignal(\n this.selectedClientIdCtrl.valueChanges.pipe(startWith(this.selectedClientIdCtrl.value)),\n );\n protected readonly selectedQueryId = signal<number | null>(null);\n\n protected readonly selectedClientConfig = computed(() => {\n if (this.queryClientConfigs.length === 1) {\n return this.queryClientConfigs[0]!;\n }\n\n const index = this.selectedClientId() ?? 0;\n\n const cfg = this.queryClientConfigs[index];\n\n if (!cfg) {\n return this.queryClientConfigs[0]!;\n }\n\n return cfg;\n });\n\n protected readonly queryStore = computed(() => {\n const config = this.selectedClientConfig();\n\n return config.client._store;\n });\n\n protected readonly queryStore$ = toObservable(this.queryStore);\n\n private readonly _queries$ = new BehaviorSubject<AnyQuery[]>([]);\n protected readonly queries = toSignal(this._queries$);\n\n protected readonly selectedQuery = computed(() => {\n const id = this.selectedQueryId();\n const mode = this.queryListMode();\n\n if (id === null || !mode) {\n return null;\n }\n\n if (mode === 'live') {\n return this.queries()?.find((q) => q._id === id) ?? null;\n }\n\n return this.queryHistory$.getValue()?.find((q) => q._id === id) ?? null;\n });\n\n protected readonly selectedQuery$ = toObservable(this.selectedQuery);\n\n protected selectedQueryEntityStore = computed(() => {\n const query = this.selectedQuery();\n\n if (!query) return null;\n\n return query.store as EntityStore<unknown> | null;\n });\n\n protected readonly selectedQueryEntityStore$ = toObservable(this.selectedQueryEntityStore);\n\n protected readonly selectedQueryEntityStoreValue$ = this.selectedQueryEntityStore$.pipe(\n switchMap(\n (s) =>\n s?._change$.pipe(\n startWith(''),\n map(() => {\n if (!s._dictionary) return null;\n\n return Array.from(s._dictionary).reduce(\n (obj, [key, value]) => {\n obj[key] = value;\n return obj;\n },\n {} as Record<string, unknown>,\n );\n }),\n ) ?? of(null),\n ),\n );\n\n protected readonly queryHistory$ = new BehaviorSubject<AnyQuery[]>([]);\n\n protected readonly stringifiedQueryConfig = computed(() => {\n const query = this.selectedQuery();\n\n if (!query) return null;\n\n const cfg = query._queryConfig;\n const route =\n typeof cfg.route === 'string' ? cfg.route : cfg.route ? cfg.route({}).replace(/undefined/g, ':param') : null;\n\n const sharedCfg = {\n method: cfg.method,\n secure: cfg.secure,\n route,\n reportProgress: cfg.reportProgress,\n responseType: cfg.responseType,\n withCredentials: cfg.withCredentials,\n autoRefreshOn: cfg.autoRefreshOn,\n enableSmartPolling: cfg.enableSmartPolling,\n hasEntityStore: !!cfg.entity,\n };\n\n if (isGqlQueryConfig(cfg)) {\n return {\n ...sharedCfg,\n query: cfg.query,\n transferVia: cfg.transferVia,\n };\n }\n\n return {\n ...sharedCfg,\n };\n });\n\n constructor() {\n this.selectedClientIdCtrl.valueChanges\n .pipe(\n tap(() => this.clearQueryHistory()),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n this.selectedQuery$\n .pipe(\n switchMap((q) => q?._dependentsChanged$ ?? of(null)),\n tap(() => this._cdr.markForCheck()),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n this.queryStore$\n .pipe(\n switchMap((s) =>\n s.storeChange$.pipe(\n startWith(''),\n map(() => s._store),\n tap((s) => {\n untracked(() => {\n this._queries$.next(Array.from(s.values()));\n });\n }),\n takeUntil(this._destroy$),\n ),\n ),\n )\n .subscribe();\n\n this.queryStore$\n .pipe(\n switchMap((s) =>\n s.queryCreated$.pipe(\n tap((query) => {\n const currentHistory = this.queryHistory$.getValue();\n\n if (!currentHistory) return;\n\n const currentHistoryClone = [...currentHistory];\n\n if (!currentHistory.some((q) => q._id === query._id)) {\n currentHistoryClone.unshift(query);\n }\n\n currentHistoryClone.splice(50);\n\n this.queryHistory$.next(currentHistoryClone);\n }),\n takeUntil(this._destroy$),\n ),\n ),\n )\n .subscribe();\n\n this._queries$\n .pipe(\n tap((queries) => {\n const currentHistory = this.queryHistory$.getValue();\n\n if (!queries || !currentHistory) return;\n\n const currentHistoryClone = [...currentHistory];\n\n for (const query of queries) {\n if (!currentHistoryClone.some((q) => q._id === query._id)) {\n currentHistoryClone.unshift(query);\n }\n }\n\n currentHistoryClone.splice(50);\n\n this.queryHistory$.next(currentHistoryClone);\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n effect(\n () => {\n const devtoolConfig = {\n isOpen: this.isOpen(),\n isTranslucent: this.isTranslucent(),\n snapLayout: this.snapLayout(),\n showResponse: this.showResponse(),\n showRawResponse: this.showRawResponse(),\n showQueryConfig: this.showQueryConfig(),\n showEntityStoreValue: this.showEntityStoreValue(),\n showArguments: this.showArguments(),\n selectedClientId: this.selectedClientId(),\n selectedQueryPath: this.selectedQueryId(),\n queryListMode: this.queryListMode(),\n };\n\n window.localStorage.setItem('ethlete:query:devtools', JSON.stringify(devtoolConfig));\n },\n { allowSignalWrites: true },\n );\n\n const initialConfig = window.localStorage.getItem('ethlete:query:devtools');\n\n if (initialConfig) {\n const parsed = JSON.parse(initialConfig);\n\n this.isOpen.set(parsed.isOpen ?? false);\n this.isTranslucent.set(parsed.isTranslucent ?? false);\n this.snapLayout.set(parsed.snapLayout ?? 'full');\n this.showResponse.set(parsed.showResponse ?? false);\n this.showRawResponse.set(parsed.showRawResponse ?? false);\n this.showQueryConfig.set(parsed.showQueryConfig ?? false);\n this.showEntityStoreValue.set(parsed.showEntityStoreValue ?? false);\n this.showArguments.set(parsed.showArguments ?? false);\n this.selectedClientIdCtrl.setValue(parsed.selectedClientId ?? 0);\n this.selectedQueryId.set(parsed.selectedQueryPath ?? null);\n this.queryListMode.set(parsed.queryListMode ?? 'live');\n }\n }\n\n protected trackByClient: TrackByFunction<QueryClientDevtoolsOptions> = (_, { client }) => client.config.baseRoute;\n protected trackByQuery: TrackByFunction<AnyQuery> = (_, { _id }) => _id;\n\n protected toggleOpen() {\n this.isOpen.set(!this.isOpen());\n }\n\n protected toggleTranslucent() {\n this.isTranslucent.set(!this.isTranslucent());\n }\n\n protected toggleShowResponse() {\n this.showResponse.set(!this.showResponse());\n\n nextFrame(() => {\n this._cdr.markForCheck();\n });\n }\n\n protected toggleShowQueryConfig() {\n this.showQueryConfig.set(!this.showQueryConfig());\n }\n\n protected toggleShowRawResponse() {\n this.showRawResponse.set(!this.showRawResponse());\n }\n\n protected toggleShowEntityStoreValue() {\n this.showEntityStoreValue.set(!this.showEntityStoreValue());\n }\n\n protected toggleShowArguments() {\n this.showArguments.set(!this.showArguments());\n }\n\n protected selectSnapLayout(layout: QueryDevtoolsSnapLayout) {\n this.snapLayout.set(layout);\n }\n\n protected selectQueryListMode(mode: QueryListMode) {\n this.queryListMode.set(mode);\n }\n\n protected selectQuery(query: AnyQuery) {\n this.selectedQueryId.set(query._id);\n }\n\n protected clearQueryHistory() {\n this.queryHistory$.next([]);\n }\n}\n","@if (!isOpen()) {\n <button (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Open Devtools</button>\n}\n\n@if (isOpen()) {\n <div\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n >\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n @for (clientConfig of queryClientConfigs; track trackByClient(i, clientConfig); let i = $index) {\n <option [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n }\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n }\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Query browser</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' }\"\n (click)=\"selectQueryListMode('live')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' }\"\n (click)=\"selectQueryListMode('history')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)\n </button>\n @if (queryListMode() === 'history') {\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n }\n </div>\n\n <div class=\"et-qd-queries__browser\">\n @if (queryListMode() === 'live') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queries(); track trackByQuery($index, query)) {\n <li>\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n @if (queryListMode() === 'history') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queryHistory$ | async; track trackByQuery($index, query)) {\n <li>\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n <div class=\"et-qd-queries__browser-detail\">\n @if (selectedQuery(); as query) {\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n @if (query.isPolling || query._isPollingPaused) {\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n }\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Dependents</p>\n <pre>{{ query._dependents | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query store key</p>\n <pre>{{ query._queryStoreKey }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showArguments()) {\n <pre>{{ query._arguments | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showResponse()) {\n <pre>{{ query.state$ | async | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showRawResponse()) {\n <pre>{{ query.rawState | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showQueryConfig()) {\n <pre>{{ stringifiedQueryConfig() | json }}</pre>\n }\n </div>\n\n @if (!!query._queryConfig.entity) {\n <div class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showEntityStoreValue()) {\n <pre>{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n inject,\n} from '@angular/core';\nimport { Subscription, tap } from 'rxjs';\nimport {\n AnyQuery,\n AnyQueryCollection,\n QueryCollectionKeysOf,\n QueryOf,\n QueryState,\n extractQuery,\n isQueryCollection,\n isQueryStateCancelled,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStatePrepared,\n isQueryStateSuccess,\n} from '../query';\nimport { QueryDataOf } from '../query-creator';\nimport { RequestError, RequestProgress } from '../request';\n\ninterface QueryContext<Q extends AnyQuery | AnyQueryCollection | null> {\n /**\n * The queries's response data.\n */\n $implicit: QueryDataOf<QueryOf<Q>> | null;\n\n /**\n * The queries's response data.\n */\n etQuery: QueryDataOf<QueryOf<Q>> | null;\n\n /**\n * The query used inside this directive. Useful if for instance the query gets unwrapped via async pipe inside the directive.\n */\n query: QueryOf<Q> | null;\n\n /**\n * Is true when the query is triggered by user interaction.\n */\n loading: boolean;\n\n /**\n * Is true when the query is triggered by either polling or auto refresh event.\n */\n refreshing: boolean;\n\n /**\n * The query's progress state.\n */\n progress: RequestProgress | null;\n\n /**\n * The query's error state.\n */\n error: RequestError<unknown> | null;\n\n /**\n * The query's scope (only available when the query is a collection)\n */\n scope: QueryCollectionKeysOf<Q> | null;\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[etQuery]',\n standalone: true,\n})\nexport class QueryDirective<Q extends AnyQuery | AnyQueryCollection | null> implements OnInit, OnDestroy {\n private _mainTemplateRef = inject<TemplateRef<QueryContext<Q>>>(TemplateRef);\n private _viewContainerRef = inject(ViewContainerRef);\n private _errorHandler = inject(ErrorHandler);\n private _cdr = inject(ChangeDetectorRef);\n\n private _isMainViewCreated = false;\n private _subscription: Subscription | null = null;\n\n private readonly _viewContext: QueryContext<Q> = {\n $implicit: null,\n etQuery: null,\n loading: false,\n refreshing: false,\n error: null,\n progress: null,\n scope: null,\n query: null,\n };\n\n @Input('etQuery')\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('etQueryCache')\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 static ngTemplateContextGuard<Q extends AnyQuery | AnyQueryCollection | 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 const query = extractQuery(this.query);\n\n if (!query) {\n this._viewContext.$implicit = null;\n this._viewContext.etQuery = null;\n this._viewContext.loading = false;\n this._viewContext.refreshing = false;\n this._viewContext.error = null;\n this._viewContext.progress = null;\n this._viewContext.scope = null;\n this._viewContext.query = null;\n return;\n }\n\n if (isQueryStatePrepared(query.rawState) || isQueryStateCancelled(query.rawState)) {\n query.execute();\n }\n\n const sub = query.state$.pipe(tap((state) => this._updateView(state))).subscribe();\n\n this._viewContext.scope = isQueryCollection(query) ? (query.type as QueryCollectionKeysOf<Q>) : null;\n this._viewContext.query = query as QueryOf<Q>;\n\n this._subscription = sub;\n }\n\n private _updateView(state: QueryState) {\n if (isQueryStateLoading(state)) {\n this._viewContext.progress = state.progress ?? null;\n this._viewContext.refreshing = state.meta.triggeredVia === 'auto' || state.meta.triggeredVia === 'poll';\n\n if (!this._viewContext.refreshing) {\n this._viewContext.loading = true;\n }\n } else {\n this._viewContext.loading = false;\n this._viewContext.refreshing = false;\n this._viewContext.progress = null;\n }\n\n if (isQueryStateSuccess(state)) {\n this._viewContext.etQuery = state.response as QueryDataOf<QueryOf<Q>>;\n this._viewContext.$implicit = state.response as QueryDataOf<QueryOf<Q>>;\n } else if (!this.cache) {\n this._viewContext.etQuery = null;\n this._viewContext.$implicit = null;\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","import { BehaviorSubject, combineLatest, map, of, shareReplay, switchMap, tap } from 'rxjs';\nimport { isQueryStateSuccess } from '../query';\nimport { AnyQueryCreator, ConstructQuery, QueryArgsOf, QueryDataOf } from '../query-creator';\nimport { InfinityQueryConfig, InfinityQueryParamLocation } from './infinity-query.types';\n\nexport class InfinityQuery<\n QueryCreator extends AnyQueryCreator,\n Query extends ConstructQuery<QueryCreator>,\n Args extends QueryArgsOf<QueryCreator>,\n QueryResponse extends QueryDataOf<QueryCreator>,\n InfinityResponse extends unknown[],\n> {\n private readonly _queries$ = new BehaviorSubject<Query[]>([]);\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\n private readonly _data$ = this._queries$.pipe(\n switchMap((queries) => {\n if (!queries.length) {\n return of([]);\n }\n\n return combineLatest(queries.map((query) => query.state$.pipe(map((state) => ({ state, query })))));\n }),\n tap((stateMaps) => {\n const lastState = stateMaps[stateMaps.length - 1]?.state;\n const lastQuery = stateMaps[stateMaps.length - 1]?.query;\n\n if (!isQueryStateSuccess(lastState) || !lastQuery) {\n return;\n }\n\n const totalPages =\n this._config.response.totalPagesExtractor?.({\n response: lastState.response as QueryResponse,\n itemsPerPage: this.itemsPerPage,\n args: lastQuery._arguments,\n }) ??\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (lastState.response as any)?.totalPages ??\n null;\n\n this._totalPages$.next(totalPages);\n }),\n map((stateMaps) => {\n const fullData = stateMaps.reduce(\n (acc, stateMap) => {\n if (isQueryStateSuccess(stateMap.state)) {\n const valExtractFn = this._config?.response?.valueExtractor;\n let data = valExtractFn\n ? valExtractFn?.(stateMap.state.response as QueryResponse)\n : (stateMap.state.response as InfinityResponse);\n\n if (this._config.response.reverse) {\n data = [...data].reverse() as InfinityResponse;\n }\n\n if (this._config.response.appendItemsTo === 'start') {\n acc.unshift(...data);\n } else {\n acc.push(...data);\n }\n }\n return acc;\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [] as any as InfinityResponse,\n );\n\n return fullData;\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n private readonly _lastQuery$ = this._queries$.pipe(\n map((queries) => queries[queries.length - 1] ?? null),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\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 data$() {\n return this._data$;\n }\n\n get currentQuery$() {\n return this._lastQuery$;\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\n this._queries$.next([...this._queries$.value, query]);\n\n this._currentPage$.next(newPage);\n this._currentCalculatedPage$.next(calculatedPage);\n }\n\n reset(\n newConfig?: Omit<\n InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n 'queryCreator' | 'response'\n >,\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._queries$.next([]);\n\n this.nextPage();\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 { AnyQueryCreator, QueryArgsOf, QueryDataOf } from '../query-creator';\nimport { InfinityQueryConfig, PageParamCalculatorOptions } from './infinity-query.types';\n\nexport const createInfinityQueryConfig = <\n QueryCreator extends AnyQueryCreator,\n Args extends QueryArgsOf<QueryCreator>,\n QueryResponse extends QueryDataOf<QueryCreator>,\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 OnInit,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { createDestroy, DelayableDirective } from '@ethlete/core';\nimport { BehaviorSubject, combineLatest, skip, Subject, takeUntil, tap, withLatestFrom } from 'rxjs';\nimport { InfinityQuery, InfinityQueryConfig, InfinityQueryOf } from '../infinite-query';\nimport {\n BaseArguments,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n switchQueryState,\n} from '../query';\nimport { AnyQueryCreator, ConstructQuery } from '../query-creator';\nimport { RequestError } from '../request';\n\ninterface InfinityQueryContext<\n Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments | undefined, any, unknown[]>,\n> {\n $implicit: Q['response']['arrayType'] | null;\n etInfinityQuery: 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 currentQuery: ConstructQuery<Q['queryCreator']> | 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: '[etInfinityQuery]',\n exportAs: 'etInfinityQuery',\n standalone: true,\n providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }],\n hostDirectives: [DelayableDirective],\n})\nexport class InfinityQueryDirective<\n Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments | undefined, any, unknown[]>,\n> implements OnInit\n{\n private readonly _queryConfigChanged$ = new Subject<boolean>();\n private readonly _viewContext: InfinityQueryContext<Q> = {\n $implicit: null,\n etInfinityQuery: 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 currentQuery: null,\n };\n private _infinityQueryInstance: InfinityQueryOf<Q> | null = null;\n\n private readonly _destroy$ = createDestroy();\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 private readonly _delayable = inject(DelayableDirective, { host: true });\n\n private readonly _data$ = new BehaviorSubject<Q['response']['arrayType']>([]);\n\n private _didReceiveFirstData$ = new BehaviorSubject(false);\n private _isMainViewCreated = false;\n\n @Input('etInfinityQuery')\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<\n Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments | undefined, any, unknown[]>,\n >(dir: InfinityQueryDirective<Q>, ctx: unknown): ctx is InfinityQueryContext<Q> {\n return true;\n }\n\n ngOnInit(): void {\n this._renderMainView();\n }\n\n private _setupInfinityQuery(config: Q) {\n const instance = new InfinityQuery(config) as InfinityQueryOf<Q>;\n\n combineLatest([\n instance.currentQuery$.pipe(switchQueryState(), withLatestFrom(instance.currentQuery$)),\n this._delayable.isDelayed$,\n this._didReceiveFirstData$,\n ])\n .pipe(\n tap(([[state, currentQuery], isDelayed, didReceiveFirstData]) => {\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 this._viewContext.currentQuery = currentQuery;\n\n if (isQueryStateLoading(state) || isDelayed || (!didReceiveFirstData && isQueryStateSuccess(state))) {\n this._viewContext.loading = true;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = this.context.etInfinityQuery === 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.etInfinityQuery = 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._viewContext.currentQuery = 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 skip(1),\n tap((data) => {\n this._viewContext.etInfinityQuery = this._viewContext.$implicit = data as Q['response']['arrayType'] | null;\n this._data$.next(data);\n\n if (!this._didReceiveFirstData$.getValue()) {\n this._didReceiveFirstData$.next(true);\n }\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 if (this._viewContext.loading) {\n return;\n }\n\n this._infinityQueryInstance.nextPage();\n }\n\n reset(newConfig?: Omit<Q, 'queryCreator' | 'response'>) {\n if (!this._infinityQueryInstance) {\n return;\n }\n\n this._infinityQueryInstance.reset(newConfig as any);\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._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.etInfinityQuery = 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._viewContext.currentQuery = 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: '[etInfinityQueryTrigger], et-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('etInfinityQueryTrigger');\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) return;\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: [0.25, 0.5, 0.75, 1],\n },\n );\n\n this._observer.observe(this._elementRef.nativeElement);\n }\n}\n","import { Observable, Subject, debounceTime, filter, map, shareReplay, startWith } from 'rxjs';\nimport { EntityKey, EntityStoreConfig } from './entity.types';\n\nclass EntityStoreError extends Error {\n constructor(\n message: string,\n public detail?: unknown,\n ) {\n super(message);\n this.name = 'EntityStoreError';\n }\n}\n\nfunction flatten<T>(arr: T[][]): T[] {\n return arr.reduce((acc, val) => acc.concat(val), []);\n}\n\nexport class EntityStore<T> {\n /**\n * @internal\n */\n readonly _dictionary = new Map<EntityKey, T>();\n\n /**\n * @internal\n */\n readonly _change$ = new Subject<EntityKey | EntityKey[]>();\n\n constructor(private readonly _config: EntityStoreConfig) {}\n\n select(key: EntityKey): Observable<T | null>;\n select(keys: EntityKey[]): Observable<T[]>;\n select(keys: EntityKey[][]): Observable<T[]>;\n select(keyOrKeys: EntityKey | EntityKey[] | EntityKey[][]): Observable<T | null> | Observable<T[]> {\n if (Array.isArray(keyOrKeys)) {\n const _keys = this._normalizeKeys(keyOrKeys);\n return this._selectMany(_keys as EntityKey[]);\n }\n\n return this._select(keyOrKeys);\n }\n\n /**\n * **Note:** Prefer `select` over `selectWhere` when possible.\n */\n selectWhere(predicate: (value: T) => boolean): Observable<T[]> {\n return this._change$.pipe(\n startWith(null),\n debounceTime(0),\n map(() => Array.from(this._dictionary.values()).filter(predicate)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n set(key: EntityKey, value: T): void;\n set(keys: EntityKey[], values: T[]): void;\n set(keys: EntityKey[][], values: T[][]): void;\n set(keyOrKeys: EntityKey | EntityKey[] | EntityKey[][], valueOrValues: T | T[] | T[][]) {\n const _keys = this._normalizeKeys(keyOrKeys);\n\n if (Array.isArray(_keys)) {\n if (!Array.isArray(valueOrValues)) {\n throw new EntityStoreError('When setting multiple keys, values must be an array', {\n keyOrValues: _keys,\n valueOrValues,\n });\n }\n\n const _values = (Array.isArray(valueOrValues[0]) ? flatten(valueOrValues as T[][]) : valueOrValues) as T[];\n\n for (let i = 0; i < _keys.length; i++) {\n const k = _keys[i];\n const v = _values[i];\n\n if (k === undefined || v === undefined) continue;\n\n this._set(k, v);\n }\n } else {\n this._set(_keys, valueOrValues as T);\n }\n\n this._change$.next(_keys);\n }\n\n remove(key: EntityKey): void;\n remove(keys: EntityKey[]): void;\n remove(keys: EntityKey[][]): void;\n remove(keyOrKeys: EntityKey | EntityKey[] | EntityKey[][]) {\n const _keys = this._normalizeKeys(keyOrKeys);\n\n if (Array.isArray(_keys)) {\n for (const key of _keys) {\n this._remove(key);\n }\n } else {\n this._remove(_keys);\n }\n\n this._change$.next(_keys);\n }\n\n logState() {\n console.log('EntityStore:', this._config.name, {\n dictionary: this._dictionary,\n });\n }\n\n private _select(key: EntityKey): Observable<T | null> {\n if (this._config.logActions) {\n console.log('EntityStore: select', this._config.name, key);\n }\n\n return this._change$.pipe(\n startWith(null),\n filter((v) => {\n if (v === null) {\n return true;\n }\n\n if (Array.isArray(v)) {\n return v.includes(key);\n }\n\n return v === key;\n }),\n map(() => this._dictionary.get(key) ?? null),\n );\n }\n\n private _selectMany(keys: EntityKey[]): Observable<T[]> {\n if (this._config.logActions) {\n console.log('EntityStore: selectMany', this._config.name, keys);\n }\n\n return this._change$.pipe(\n startWith(null),\n filter((v) => {\n if (v === null) {\n return true;\n }\n\n if (Array.isArray(v)) {\n return keys.some((key) => v.includes(key));\n }\n\n return keys.includes(v);\n }),\n map(() => keys.map((key) => this._dictionary.get(key)).filter((value): value is T => value !== undefined)),\n );\n }\n\n private _set(key: EntityKey, value: T) {\n if (this._config.logActions) {\n console.log('EntityStore: set', this._config.name, key, value);\n }\n\n this._dictionary.set(key, value);\n }\n\n private _remove(key: EntityKey) {\n if (this._config.logActions) {\n console.log('EntityStore: remove', this._config.name, key);\n }\n\n this._dictionary.delete(key);\n }\n\n private _normalizeKeys(keys: EntityKey | EntityKey[] | EntityKey[][]): EntityKey | EntityKey[] {\n if (Array.isArray(keys)) {\n if (Array.isArray(keys[0])) {\n return flatten(keys as EntityKey[][]);\n }\n\n return keys as EntityKey[];\n }\n\n return keys;\n }\n}\n","import { Paginated } from '@ethlete/types';\nimport { map, of, switchMap, take, tap } from 'rxjs';\nimport { EntityStore } from './entity-store';\nimport { EntityKey, InsertFromConfig, RemoveFromConfig } from './entity.types';\n\nexport function mapToPaginated<T>(response: Paginated<T>) {\n return map((items) => ({ ...response, items }) as Paginated<T>);\n}\n\n// FIXME: This breaks if SubStoreType is an array\n/**\n * Use an other store to represent a property of the current entity.\n */\nexport const insertFrom = <\n OriginStoreType,\n OriginKeys extends keyof NonNullable<OriginStoreType>,\n SubStoreType extends NonNullable<OriginStoreType>[OriginKeys] extends Array<infer U>\n ? U\n : NonNullable<OriginStoreType>[OriginKeys],\n IdFn extends (value: NonNullable<OriginStoreType>) => EntityKey | EntityKey[],\n ComputedEntityType extends ReturnType<IdFn> extends Array<unknown>\n ? OriginStoreType\n : Omit<OriginStoreType, OriginKeys> & { [K in OriginKeys]: SubStoreType | null },\n>(\n store: EntityStore<SubStoreType>,\n { for: key, id }: InsertFromConfig<OriginStoreType, OriginKeys, IdFn>,\n) =>\n switchMap((value: OriginStoreType) => {\n if (!value) return of(null);\n\n const ids = id(value);\n\n if (Array.isArray(ids)) {\n return store.select(ids).pipe(map((data) => ({ ...value, [key]: data }) as ComputedEntityType));\n } else {\n return store.select(ids).pipe(map((data) => ({ ...value, [key]: data }) as ComputedEntityType));\n }\n });\n\n/**\n * Remove entities from a store based on a where function.\n */\nexport const removeFrom = <T>(store: EntityStore<T>, { where, id }: RemoveFromConfig<T>) => {\n store\n .selectWhere(where)\n .pipe(\n tap((entities) => store.remove(entities.map(id))),\n take(1),\n )\n .subscribe();\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 if (!active) {\n return null;\n }\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","import { NgZone, assertInInjectionContext, inject, isDevMode } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ET_PROPERTY_REMOVED, RouterStateService, clone, createDestroy, equal } from '@ethlete/core';\nimport { BehaviorSubject, Subject, debounceTime, map, merge, of, switchMap, takeUntil, tap, timer } from 'rxjs';\nimport {\n QueryFieldOptions,\n QueryFormGroup,\n QueryFormGroupControls,\n QueryFormObserveOptions,\n QueryFormValue,\n QueryFormValueEvent,\n QueryFormWriteOptions,\n} from './query-form.types';\nimport { transformToBoolean, transformToNumber } from './query-form.utils';\n\nconst ET_ARR_PREFIX = 'ET_ARR__';\n\nexport class QueryField<T> {\n get control() {\n return this.data.control;\n }\n\n constructor(public data: QueryFieldOptions<T>) {}\n}\n\nconst IGNORED_FILTER_COUNT_FIELDS = ['page', 'skip', 'take', 'limit', 'sort', 'sortBy', 'sortOrder', 'query', 'search'];\n\nexport interface QueryFormOptions {\n /**\n * A prefix to use for the query parameters. This is useful when you have multiple query forms on the same page.\n */\n queryParamPrefix?: string;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class QueryForm<T extends Record<string, QueryField<any>>> {\n private readonly _destroy$ = createDestroy();\n private readonly _unobserveTrigger$ = new Subject<boolean>();\n private readonly _router = inject(Router);\n private readonly _activatedRoute = inject(ActivatedRoute);\n private readonly _defaultValues = this._extractDefaultValues();\n private readonly _routerStateService = inject(RouterStateService);\n private readonly _zone = inject(NgZone);\n private readonly _didValueChanges$ = new Subject<boolean>();\n\n private _isObserving = false;\n private _skipNextResets = false;\n\n /**\n * The angular form group that contains all the fields.\n *\n * **Do not** use any of the following methods on this form group:\n * - `setValue`: Use `QueryForm.setValue` instead.\n * - `patchValue`: Use `QueryForm.patchValue` instead.\n * - `valueChanges`: Use `QueryForm.changes$` instead.\n * - `value`: Use `QueryForm.value` instead.\n * - `controls`: Use `QueryForm.controls` instead.\n */\n readonly form = this._setupFormGroup();\n\n private readonly _lastFormValue$ = new BehaviorSubject<QueryFormValue<T> | null>(null);\n private readonly _currentFormValue$ = new BehaviorSubject<QueryFormValue<T>>(this._formValue);\n\n private get _formValue() {\n return this.form.getRawValue() as QueryFormValue<T>;\n }\n\n private get _form() {\n return this.form as unknown as QueryFormGroup;\n }\n\n private readonly _changes$ = new BehaviorSubject<QueryFormValueEvent<T>>({\n previousValue: null,\n currentValue: this.form.getRawValue() as QueryFormValue<T>,\n });\n\n readonly changes$ = this._changes$.asObservable();\n readonly currentValue$ = this._changes$.pipe(map(({ currentValue }) => currentValue));\n readonly previousValue$ = this._changes$.pipe(map(({ previousValue }) => previousValue));\n\n readonly changes = toSignal(this.changes$);\n readonly currentValue = toSignal(this.currentValue$);\n readonly previousValue = toSignal(this.previousValue$);\n\n /**\n * The number of active filters.\n *\n * Excludes the following fields by default:\n * - `page`\n * - `skip`\n * - `take`\n * - `limit`\n * - `sort`\n * - `sortBy`\n * - `sortOrder`\n * - `query`\n * - `search`\n */\n readonly activeFilterCount$ = this.changes$.pipe(\n map(\n ({ currentValue }) =>\n Object.entries(currentValue)\n .map(([key, value]) => {\n if (IGNORED_FILTER_COUNT_FIELDS.includes(key) || this._fields[key]?.data.skipInFilterCount) {\n return true;\n }\n\n return this._isDefaultValue(key, value);\n })\n .filter((v) => v === false).length,\n ),\n );\n\n get controls() {\n return this.form.controls;\n }\n\n get value() {\n return this._changes$.value.currentValue;\n }\n\n get defaultFormValue() {\n return Object.entries(this._defaultValues).reduce((acc, [key]) => {\n acc[key as keyof QueryFormValue<T>] = this._getDefaultValue(key);\n\n return acc;\n }, {} as QueryFormValue<T>);\n }\n\n // with prefix eg. page should become ${prefix}-page\n constructor(\n private _fields: T,\n private _options?: QueryFormOptions,\n ) {\n assertInInjectionContext(QueryForm);\n }\n\n observe(options?: QueryFormObserveOptions) {\n if (this._isObserving) {\n if (isDevMode()) {\n console.warn('QueryForm.observe() was called multiple times. This is not supported.');\n }\n return this;\n }\n\n this._isObserving = true;\n\n if (options?.syncOnNavigation !== false) {\n const didChanges = this.setFormValueFromUrlQueryParams({\n queryParams: this._routerStateService.queryParams,\n });\n\n if (didChanges) {\n this._handleFormChange(true);\n }\n }\n\n merge(...Object.values(this._fields).map((field) => field.control.valueChanges), this._didValueChanges$)\n .pipe(\n debounceTime(0),\n tap(() => {\n this._handleFormChange();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n )\n .subscribe();\n\n let changedFieldsInLastResetLoop: string[] = [];\n let currentUniqueChangedFields: string[] = [];\n\n this._currentFormValue$\n .pipe(\n map((currentValue) => {\n return {\n previousValue: clone(this._lastFormValue$.value),\n currentValue: clone(currentValue),\n };\n }),\n tap(({ currentValue, previousValue }) => {\n if (options?.writeToQueryParams !== false) {\n this._syncViaUrlQueryParams(currentValue, options?.replaceUrl);\n }\n\n const didResetValues = this._skipNextResets\n ? false\n : this._handleQueryFormResets(previousValue ?? null, currentValue);\n\n this._skipNextResets = false;\n\n const changedFields = Object.keys(currentValue).filter(\n (key) => !equal(previousValue?.[key], currentValue[key]),\n );\n\n if (changedFieldsInLastResetLoop.length) {\n changedFields.push(...changedFieldsInLastResetLoop);\n changedFieldsInLastResetLoop = [];\n }\n\n if (didResetValues) {\n this._didValueChanges$.next(true);\n changedFieldsInLastResetLoop = changedFields;\n }\n\n currentUniqueChangedFields = [...new Set(changedFields)];\n }),\n switchMap(({ currentValue, previousValue }) => {\n if (changedFieldsInLastResetLoop.length) return of(null).pipe(map(() => ({ currentValue, previousValue })));\n\n const debounceValues = currentUniqueChangedFields.map((key) => {\n const field = this._fields[key];\n\n if (!field) return null;\n\n if (field.data.disableDebounceIfFalsy === true && !currentValue[key]) {\n return null;\n }\n\n return field.data.debounce ?? null;\n });\n\n currentUniqueChangedFields = [];\n\n if (debounceValues.some((v) => v === null) || !debounceValues.length) {\n return of(null).pipe(map(() => ({ currentValue, previousValue })));\n }\n\n const shortestDebounceTime = Math.min(...debounceValues.filter((v): v is number => v !== null));\n\n return timer(shortestDebounceTime).pipe(map(() => ({ currentValue, previousValue })));\n }),\n tap(({ currentValue, previousValue }) => {\n if (changedFieldsInLastResetLoop.length) return;\n\n this._changes$.next({\n previousValue: previousValue ?? null,\n currentValue: currentValue,\n });\n }),\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n )\n .subscribe();\n\n if (options?.syncOnNavigation !== false) {\n this._routerStateService.queryParamChanges$\n .pipe(\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n tap((changes) => {\n const didValueChanges = this.setFormValueFromUrlQueryParams({ queryParams: changes });\n\n if (didValueChanges) {\n this._didValueChanges$.next(true);\n }\n }),\n )\n .subscribe();\n }\n\n return this;\n }\n\n private _handleQueryFormResets(previousValue: QueryFormValue<T> | null, currentValue: QueryFormValue<T>) {\n let didResetValues = false;\n\n for (const formFieldKey in this._fields) {\n const field = this._fields[formFieldKey];\n\n if (!field) continue;\n\n const resets = field.data.isResetBy;\n\n if (!resets) continue;\n\n const resetConditionKeys = Array.isArray(resets) ? resets : [resets];\n\n for (const resetConditionKey of resetConditionKeys) {\n if (!(resetConditionKey in this._fields)) {\n if (isDevMode()) {\n console.warn(`The field \"${resetConditionKey}\" is not defined in the QueryForm. Is it a typo?`, this);\n }\n\n continue;\n }\n\n if (\n previousValue &&\n currentValue &&\n !equal(previousValue[resetConditionKey], currentValue[resetConditionKey])\n ) {\n const defaultValueForKeyToReset = this._getDefaultValue(formFieldKey);\n const currentValueForKeyToReset = currentValue[formFieldKey];\n\n if (equal(defaultValueForKeyToReset, currentValueForKeyToReset)) {\n continue;\n }\n\n this.form.controls[formFieldKey].setValue(defaultValueForKeyToReset);\n\n didResetValues = true;\n\n break;\n }\n }\n }\n\n return didResetValues;\n }\n\n unobserve() {\n this._unobserveTrigger$.next(true);\n }\n\n setFormValueFromUrlQueryParams(options: { queryParams: Record<string, unknown> }) {\n let didValueChanges = false;\n\n for (const [key, field] of Object.entries(this._fields)) {\n const value = options.queryParams[this._transformKeyToQueryParam(key)];\n\n const valueDoesNotExist = value === undefined;\n\n if (valueDoesNotExist) continue;\n\n const valueGotRemoved = value === ET_PROPERTY_REMOVED;\n\n if (valueGotRemoved) {\n field.control.setValue(this._getDefaultValue(key), { emitEvent: false });\n didValueChanges = true;\n\n continue;\n }\n let deserializedValue = value;\n\n if (field.data.queryParamToValueTransformFn) {\n deserializedValue = field.data.queryParamToValueTransformFn(value);\n } else if (typeof this._getDefaultValue(key) === 'number') {\n deserializedValue = transformToNumber(value);\n } else if (typeof this._getDefaultValue(key) === 'boolean') {\n deserializedValue = transformToBoolean(value);\n }\n\n const valueIsEqualToCurrent = equal(deserializedValue, field.control.value);\n\n if (valueIsEqualToCurrent) continue;\n\n field.control.setValue(deserializedValue, { emitEvent: false });\n didValueChanges = true;\n }\n\n return didValueChanges;\n }\n\n setValue(value: QueryFormValue<T>, options?: QueryFormWriteOptions) {\n this._form._setValue(value, options);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n patchValue(value: Partial<QueryFormValue<T>>, options?: QueryFormWriteOptions) {\n this._form._patchValue(value, options);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n private _getDefaultValue(key: string) {\n const val = this._defaultValues[key];\n\n if (typeof val === 'string' && val.startsWith(ET_ARR_PREFIX)) {\n return JSON.parse(val.slice(ET_ARR_PREFIX.length));\n }\n\n return val ?? null;\n }\n\n private _transformKeyToQueryParam(key: string) {\n return this._options?.queryParamPrefix ? `${this._options.queryParamPrefix}-${key}` : key;\n }\n\n private _isDefaultValue(key: string, value: unknown) {\n const normalizedValue = Array.isArray(value) ? `${ET_ARR_PREFIX}${JSON.stringify(value)}` : value;\n\n return this._getDefaultValue(key) === normalizedValue;\n }\n\n private _setupFormGroup() {\n const group = new FormGroup({} as QueryFormGroupControls<T>) as unknown as QueryFormGroup;\n\n for (const [key, field] of Object.entries(this._fields)) {\n group.addControl(key, field.control);\n }\n\n group._patchValue = group.patchValue;\n group._setValue = group.setValue;\n\n group.patchValue = this.patchValue.bind(this);\n group.setValue = this.setValue.bind(this);\n\n return group as unknown as FormGroup<QueryFormGroupControls<T>>;\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 (Array.isArray(value)) {\n defaultValues[key] = `${ET_ARR_PREFIX}${JSON.stringify(value)}`;\n } else {\n defaultValues[key] = value;\n }\n }\n\n return defaultValues;\n }\n\n private _syncViaUrlQueryParams(values: QueryFormValue<T>, replaceUrl?: boolean) {\n const queryParams = { ...clone(this._activatedRoute.snapshot.queryParams) };\n\n for (const [key, value] of Object.entries(values)) {\n const queryParamKey = this._transformKeyToQueryParam(key);\n const field = this._fields[key];\n\n if (!field) {\n continue;\n }\n\n if (this._isDefaultValue(key, value) || field.data.appendToUrl === false) {\n queryParams[queryParamKey] = undefined;\n } else {\n queryParams[queryParamKey] = field.data.valueToQueryParamTransformFn\n ? field.data.valueToQueryParamTransformFn?.(value)\n : value;\n }\n }\n\n this._zone.run(() => {\n this._router.navigate([], {\n queryParams,\n replaceUrl,\n queryParamsHandling: 'merge',\n });\n });\n }\n\n private _handleFormChange(forceOverwrite = false) {\n const currentVal = clone(this._currentFormValue$.value);\n const newVal = clone(this._formValue);\n\n if (equal(currentVal, newVal)) {\n return;\n }\n\n if (forceOverwrite) {\n this._lastFormValue$.next(newVal);\n } else {\n this._lastFormValue$.next(currentVal);\n }\n\n this._currentFormValue$.next(newVal);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isNaN","i1"],"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/logger/logger.ts","../../../../libs/query/src/lib/symfony/symfony.utils.ts","../../../../libs/query/src/lib/request/request.util.ts","../../../../libs/query/src/lib/request/request.ts","../../../../libs/query/src/lib/utils/data.utils.ts","../../../../libs/query/src/lib/utils/deep-freeze.util.ts","../../../../libs/query/src/lib/utils/def.util.ts","../../../../libs/query/src/lib/query-creator/query-creator.ts","../../../../libs/query/src/lib/query-store/query-store.ts","../../../../libs/query/src/lib/query-client/query-client.ts","../../../../libs/query/src/lib/query-client/query-client.utils.ts","../../../../libs/query/src/lib/gql/gql.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/class-validator/class-validator.utils.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/devtools/pipes/query-short-name.pipe.ts","../../../../libs/query/src/lib/devtools/utils/query-client.utils.ts","../../../../libs/query/src/lib/devtools/components/query-devtools/query-devtools.component.ts","../../../../libs/query/src/lib/devtools/components/query-devtools/query-devtools.component.html","../../../../libs/query/src/lib/entity/entity-store.ts","../../../../libs/query/src/lib/entity/entity.utils.ts","../../../../libs/query/src/lib/query-form/query-form.utils.ts","../../../../libs/query/src/lib/query-form/query-form.ts","../../../../libs/query/src/index.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(public _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(public _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 { FormViolationListView, FormViolationView } from '@ethlete/types';\nimport { SymfonyError } from './symfony.types';\n\nexport const isSymfonyError = (error: unknown): error is SymfonyError => {\n if (!error || typeof error !== 'object') {\n return false;\n }\n\n const symfonyError = error as SymfonyError;\n\n return (\n symfonyError.class !== undefined &&\n symfonyError.detail !== undefined &&\n symfonyError.status !== undefined &&\n symfonyError.title !== undefined &&\n symfonyError.trace !== undefined &&\n symfonyError.type !== undefined\n );\n};\n\nexport const isSymfonyPagerfantaOutOfRangeError = (error: unknown): error is SymfonyError => {\n if (!isSymfonyError(error)) {\n return false;\n }\n\n return error.class.startsWith('Pagerfanta') && error.class.endsWith('OutOfRangeCurrentPageException');\n};\n\nexport const isSymfonyFormViolationListError = (error: unknown): error is FormViolationListView => {\n return typeof error === 'object' && error !== null && 'violations' in error;\n};\n\nexport const isSymfonyListError = (error: unknown): error is FormViolationView[] => {\n return (\n !!error &&\n typeof error === 'object' &&\n Array.isArray(error) &&\n !!error.length &&\n 'message' in error[0] &&\n 'propertyPath' in error[0] &&\n 'invalidValue' in error[0]\n );\n};\n","import { invalidBaseRouteError, invalidRouteError, pathParamsMissingInRouteFunctionError } from '../logger';\nimport { AnyRoute } from '../query';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../symfony';\nimport {\n BuildQueryStringConfig,\n Method,\n PathParams,\n QueryParams,\n RequestError,\n RequestHeaders,\n RequestRetryFn,\n} from './request.types';\n\nexport const isNaN = (value: unknown): boolean => typeof value === 'number' && Number.isNaN(value);\nexport const isEmptyString = (value: unknown): boolean => typeof value === 'string' && value.trim() === '';\n\nexport const isRequestError = <T = unknown>(error: unknown): error is RequestError<T> =>\n error instanceof Object && 'status' in error && 'statusText' in error && 'url' in error;\n\nexport const buildRoute = (options: {\n base: string;\n route: AnyRoute | null | undefined;\n pathParams?: PathParams;\n queryParams?: QueryParams;\n queryParamConfig?: BuildQueryStringConfig;\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, options.queryParamConfig);\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, config?: BuildQueryStringConfig): string | null => {\n const objectNotation = config?.objectNotation ?? 'bracket';\n const writeArrayIndexes = config?.writeArrayIndexes ?? false;\n const ignoredValues = config?.ignoredValues ?? [undefined, null, Infinity, -Infinity];\n const ignoredValuesFns = config?.ignoredValuesFns ?? [isNaN, isEmptyString];\n\n const queryParams: string[] = [];\n\n function processValue(key: string, value: unknown) {\n if (Array.isArray(value)) {\n let currentFilteredIndex = 0;\n for (const arrayValue of value) {\n const nestedKey = writeArrayIndexes ? `${key}[${currentFilteredIndex}]` : `${key}[]`;\n\n const didAddValue = processValue(nestedKey, arrayValue);\n\n if (didAddValue) {\n currentFilteredIndex++;\n }\n }\n\n return null;\n } else if (typeof value === 'object' && value !== null) {\n for (const [objKey, val] of Object.entries(value)) {\n const nestedKey = objectNotation === 'dot' ? `${key}.${objKey}` : `${key}[${objKey}]`;\n processValue(nestedKey, val);\n }\n\n return null;\n } else {\n if (ignoredValues.includes(value)) {\n return false;\n }\n\n if (ignoredValuesFns.some((fn) => fn(value))) {\n return false;\n }\n\n const encodedKey = encodeURIComponent(key);\n const encodedValue = encodeURIComponent(value as string);\n\n queryParams.push(`${encodedKey}=${encodedValue}`);\n\n return true;\n }\n }\n\n for (const [key, val] of Object.entries(params)) {\n processValue(key, val);\n }\n\n return queryParams.length ? queryParams.join('&') : null;\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 const m = cacheControl.split('max-age=')[1];\n\n if (m) {\n maxAge = parseInt(m);\n }\n } else if (cacheControl?.includes('s-maxage')) {\n const m = cacheControl.split('s-maxage=')[1];\n\n if (m) {\n maxAge = parseInt(m);\n }\n }\n\n if (maxAge && age) {\n const ageSeconds = parseInt(age);\n\n expiresIn = maxAge - ageSeconds;\n } else if (maxAge) {\n expiresIn = maxAge / 2; // We assume the response is half way to its expiration\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 | URLSearchParams | 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 as ArrayBuffer | URLSearchParams | Blob | FormData | string;\n }\n\n if (typeof body === 'object' || typeof body === 'boolean' || Array.isArray(body)) {\n return JSON.stringify(body);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (body as any).toString();\n};\n\nexport const transformMethod = (config: { method: Method; transferVia?: 'GET' | 'POST' }) => {\n if (config.method === 'GQL_QUERY' || config.method === 'GQL_MUTATE') {\n if (!config.transferVia) {\n return 'POST';\n }\n\n return config.transferVia;\n }\n\n return config.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 shouldRetryRequest: RequestRetryFn = (config) => {\n const defaultRetryDelay = 1000 + 1000 * config.currentRetryCount;\n\n if (config.currentRetryCount > 3) {\n return { retry: false };\n }\n\n if (!isRequestError(config.error)) {\n return { retry: false };\n }\n\n const { status, detail } = config.error;\n\n // Retry on 5xx errors\n if (status >= 500) {\n // Don't retry if a requested page is out of range\n if (isSymfonyPagerfantaOutOfRangeError(detail)) {\n return { retry: false };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 408 or 425 errors\n if (status === HttpStatusCode.RequestTimeout || status === HttpStatusCode.TooEarly) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 429 errors\n if (status === HttpStatusCode.TooManyRequests) {\n const retryAfter =\n config.headers['retry-after'] ||\n config.headers['Retry-After'] ||\n config.headers['x-retry-after'] ||\n config.headers['X-Retry-After'];\n\n if (retryAfter) {\n const delay = parseInt(retryAfter) * 1000;\n return { retry: true, delay: Number.isNaN(delay) ? defaultRetryDelay : delay };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Code 0 usually means the internet connection is down. We retry in this case.\n // It could also be a CORS issue but that should not be the case in production.\n if (status === 0) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n return { retry: false };\n};\n\nexport const enum HttpStatusCode {\n Unknown = 0,\n\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, RequestError, RequestEvent } from './request.types';\nimport {\n HttpStatusCode,\n buildTimestampFromSeconds,\n detectContentTypeHeader,\n extractExpiresInSeconds,\n forEachHeader,\n getResponseUrl,\n hasHeader,\n parseAllXhrResponseHeaders,\n serializeBody,\n shouldRetryRequest,\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 const retryFn = config.retryFn || shouldRetryRequest;\n let currentRetryCount = 0;\n let retryTimeout: number | null = null;\n\n return new Observable((observer: Observer<RequestEvent<Response>>) => {\n const xhr = new XMLHttpRequest();\n const reqBody = serializeBody(body);\n\n const setupXhr = () => {\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\n setupXhr();\n\n const partialFromXhr = (): PartialXhrState => {\n const statusText = xhr.statusText || 'OK';\n const headers = parseAllXhrResponseHeaders(xhr);\n const _url = getResponseUrl(xhr) || url;\n\n return { headers, status: xhr.status, statusText, url: _url };\n };\n\n const handleRetry = (error: RequestError) => {\n const newRetryCount = currentRetryCount + 1;\n const { headers } = partialFromXhr();\n const { retry, delay } = retryFn({ currentRetryCount: newRetryCount, headers, error });\n\n if (!retry) {\n observer.next({ type: 'failure', headers, error });\n observer.complete();\n return;\n }\n\n const _delay = delay ?? 1000;\n observer.next({ type: 'delay-retry', headers, retryNumber: newRetryCount, retryDelay: _delay });\n\n retryTimeout = window.setTimeout(() => {\n setupXhr();\n xhr.send(reqBody);\n currentRetryCount = newRetryCount;\n observer.next({ type: 'start', headers, isRetry: true, retryNumber: currentRetryCount, retryDelay: _delay });\n }, _delay);\n };\n\n const onLoad = async () => {\n const { headers, statusText, url } = partialFromXhr();\n\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 } else if (!ok && body instanceof Blob) {\n try {\n const text = await body.text();\n\n if (body.type === 'application/json') {\n body = JSON.parse(text);\n } else {\n body = text;\n }\n } catch (error) {\n // Ignore the error.\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 handleRetry({\n url,\n detail: body,\n status,\n statusText,\n });\n }\n };\n\n const onError = (error: Event) => {\n const { url } = partialFromXhr();\n\n handleRetry({\n url,\n detail: error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n });\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\n if (retryTimeout) {\n window.clearTimeout(retryTimeout);\n }\n\n if (config.reportProgress) {\n xhr.removeEventListener('progress', onDownProgress);\n\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 { CreateComputedOptions, Injector, Signal, assertInInjectionContext, computed, inject } from '@angular/core';\nimport { ToObservableOptions, ToSignalOptions, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { createDestroy } from '@ethlete/core';\nimport { Observable, Subscribable, of, pairwise, startWith, switchMap, takeUntil, tap } from 'rxjs';\nimport {\n AnyQuery,\n AnyQueryCollection,\n QueryOf,\n QueryState,\n QueryStateType,\n extractQuery,\n filterQueryStates,\n isQuery,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n} from '../query';\nimport { QueryDataOf } from '../query-creator';\n\nexport interface QueryContainerConfig {\n /**\n * If `true`, the previous query will be aborted when a new query is pushed into the container.\n * @default true // Only if the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.\n */\n abortPrevious?: boolean;\n\n /**\n * If `true`, the query will be aborted when the container is destroyed.\n * @default true // Only if the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.\n */\n abortOnDestroy?: boolean;\n\n /**\n * If `true`, the previous polling will be stopped when a new query is pushed into the container.\n * @default true // Only if the query has no other dependents and the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.\n */\n stopPreviousPolling?: boolean;\n}\n\nexport interface QueryFilterConfig {\n /**\n * If `true`, the response will be cached until the next response is received or the query fails.\n * @default false\n */\n cacheResponse?: boolean;\n}\n\nexport const addQueryContainerHandling = (\n obs: Observable<AnyQuery | AnyQuery[] | null>,\n valueFn: () => AnyQuery | AnyQuery[] | null | undefined,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(addQueryContainerHandling);\n\n const { abortPrevious, abortOnDestroy, stopPreviousPolling } = config ?? {};\n\n const injector = inject(Injector);\n const destroy$ = createDestroy();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const tNode = (injector as any)._tNode;\n const componentId = tNode?.index ?? -1;\n\n obs\n .pipe(\n takeUntil(destroy$),\n startWith(null),\n pairwise(),\n tap(([prevQuery, currQuery]) => {\n const cleanQuery = (q: AnyQuery | null | undefined) => {\n if (!q?._hasDependents() && ((abortPrevious === undefined && q?.canBeCached) || abortPrevious)) {\n q?.abort();\n }\n\n if (\n !q?._hasDependents() &&\n ((stopPreviousPolling === undefined && q?.canBeCached) || stopPreviousPolling) &&\n q?.isPolling\n ) {\n q?.stopPolling();\n }\n };\n\n if ((isQuery(prevQuery) || prevQuery === null) && (isQuery(currQuery) || currQuery === null)) {\n prevQuery?._removeDependent(componentId);\n currQuery?._addDependent(componentId);\n\n cleanQuery(prevQuery);\n } else if (\n (Array.isArray(prevQuery) || prevQuery === null) &&\n (Array.isArray(currQuery) || currQuery === null)\n ) {\n if (prevQuery) {\n for (let i = 0; i < prevQuery.length; i++) {\n prevQuery[i]?._removeDependent(componentId);\n }\n }\n\n if (currQuery) {\n for (let i = 0; i < currQuery.length; i++) {\n currQuery[i]?._addDependent(componentId);\n }\n }\n\n if (prevQuery) {\n for (let i = 0; i < prevQuery.length; i++) {\n cleanQuery(prevQuery[i]);\n }\n }\n } else if (\n (isQuery(prevQuery) && Array.isArray(currQuery)) ||\n (Array.isArray(prevQuery) && isQuery(currQuery))\n ) {\n throw new Error('Cannot mix queries and arrays of queries in the same query container.');\n }\n }),\n )\n .subscribe();\n\n destroy$.subscribe(() => {\n const query = valueFn();\n\n const handleQuery = (q: AnyQuery | null | undefined) => {\n q?._removeDependent(componentId);\n\n if (!q?._hasDependents() && ((q?.canBeCached && abortOnDestroy === undefined) || abortOnDestroy)) {\n q?.abort();\n }\n };\n\n if (isQuery(query)) {\n handleQuery(query);\n } else if (Array.isArray(query)) {\n for (const q of query) {\n handleQuery(q);\n }\n }\n });\n};\n\nexport function toQuerySignal<T extends AnyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n): Signal<T | undefined>;\nexport function toQuerySignal<T extends AnyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: ToSignalOptions & { initialValue?: undefined; requireSync?: false } & QueryContainerConfig,\n): Signal<T | undefined>;\nexport function toQuerySignal<T extends AnyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: ToSignalOptions & { initialValue?: null; requireSync?: false } & QueryContainerConfig,\n): Signal<T | null>;\nexport function toQuerySignal<T extends AnyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: ToSignalOptions & { initialValue?: undefined; requireSync: true } & QueryContainerConfig,\n): Signal<T>;\nexport function toQuerySignal<T extends AnyQuery | null, const U extends T>(\n source: Observable<T> | Subscribable<T>,\n options: ToSignalOptions & { initialValue: U; requireSync?: false } & QueryContainerConfig,\n): Signal<T | U>;\n\nexport function toQuerySignal<T extends AnyQuery | null, U = undefined>(\n source: Observable<T> | Subscribable<T>,\n options?: ToSignalOptions & { initialValue?: U } & QueryContainerConfig,\n): Signal<T | U> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const s = toSignal(source, options as any);\n\n addQueryContainerHandling(source as Observable<T>, () => s() as T, options);\n\n return s as Signal<T | U>;\n}\n\nexport function queryComputed<T extends AnyQuery | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T> {\n const c = computed(computation, options);\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\nexport function queryArrayComputed<T extends AnyQuery[] | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T> {\n const c = computed(computation, options);\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\nexport function toQuerySubject<T extends AnyQuery | null>(\n source: Signal<T>,\n options?: ToObservableOptions & QueryContainerConfig,\n): Observable<T> {\n const obs = toObservable(source, options);\n\n addQueryContainerHandling(obs, () => source(), options);\n\n return obs;\n}\n\nexport function queryStateSignal<T extends Signal<AnyQuery | AnyQueryCollection | null>>(\n source: T,\n options?: QueryFilterConfig,\n) {\n const { cacheResponse } = options ?? {};\n\n return toSignal(\n toObservable(source).pipe(\n switchMap((q) => extractQuery(q)?.state$ ?? of(null)),\n switchMap((state) => {\n if (cacheResponse) {\n return of(state).pipe(\n filterQueryStates([QueryStateType.Success, QueryStateType.Failure, QueryStateType.Cancelled]),\n );\n }\n\n return of(state);\n }),\n ),\n {\n initialValue: null,\n },\n ) as Signal<QueryState<QueryDataOf<QueryOf<ReturnType<T>>>> | null>;\n}\n\nexport function queryStateResponseSignal<T extends Signal<AnyQuery | AnyQueryCollection | null>>(\n source: T,\n options?: QueryFilterConfig,\n) {\n const s = queryStateSignal(source, options);\n\n return computed(() => {\n const state = s();\n\n return isQueryStateSuccess(state) ? state.response : null;\n });\n}\n\nexport function queryStateErrorSignal<T extends Signal<AnyQuery | AnyQueryCollection | null>>(source: T) {\n const s = queryStateSignal(source);\n\n return computed(() => {\n const state = s();\n\n return isQueryStateFailure(state) ? state.error : null;\n });\n}\n\nexport function queryStateLoadingSignal<T extends Signal<AnyQuery | AnyQueryCollection | null>>(source: T) {\n const s = queryStateSignal(source);\n\n return computed(() => {\n const state = s();\n\n return isQueryStateLoading(state) ? state : null;\n });\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 { assertInInjectionContext, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject } from 'rxjs';\nimport { EntityStore } from '../entity';\nimport { Query, computeQueryQueryParams, isGqlQueryConfig } from '../query';\nimport { QueryClient, buildGqlCacheKey, shouldCacheQuery } from '../query-client';\nimport { QueryStore } from '../query-store';\nimport {\n AnyRoute,\n BaseArguments,\n GqlQueryConfig,\n RestQueryConfig,\n RouteType,\n WithConfig,\n WithHeaders,\n WithMock,\n} from '../query/query.types';\nimport { buildRoute } from '../request';\nimport { QueryContainerConfig, addQueryContainerHandling } from '../utils';\nimport { QueryPrepareFn } from './query-creator.types';\n\nexport class QueryCreator<\n Arguments extends BaseArguments | undefined,\n Response,\n Route extends RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> {\n constructor(\n private _queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n private _client: QueryClient,\n private _store: QueryStore,\n ) {}\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n prepare: QueryPrepareFn<Arguments, Response, Route, Store, Data, Id> = (\n args?: Arguments & WithHeaders & WithConfig & WithMock<Response>,\n ) => {\n const route = buildRoute({\n base: this._client.config.baseRoute,\n route: this._queryConfig.route as AnyRoute,\n pathParams: args?.pathParams,\n queryParams: computeQueryQueryParams({ config: this._queryConfig, client: this._client, args }),\n queryParamConfig: this._client.config.request?.queryParams,\n }) as Route;\n\n const cacheKey =\n (args?.config?.queryStoreCacheKey ?? '') +\n (isGqlQueryConfig(this._queryConfig) ? buildGqlCacheKey(this._queryConfig, args) : route);\n\n if (shouldCacheQuery(this._queryConfig.method) && !args?.config?.skipQueryStore) {\n const existingQuery = this._store.get<Query<Response, Arguments, Route, Store, Data, Id>>(cacheKey);\n\n if (existingQuery) {\n return existingQuery;\n }\n }\n\n const query = new Query<Response, Arguments, Route, Store, Data, Id>(\n this._client,\n this._queryConfig,\n route,\n args ?? ({} as Arguments),\n cacheKey,\n );\n\n if (shouldCacheQuery(this._queryConfig.method) && !args?.config?.skipQueryStore) {\n this._store.add(cacheKey, query);\n }\n\n this._store._dispatchQueryCreated(query);\n\n return query;\n };\n\n createSubject = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\n assertInInjectionContext(this.createSubject);\n\n const subject = new BehaviorSubject<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n\n addQueryContainerHandling(subject, () => subject.getValue(), config);\n\n return subject;\n };\n\n createSignal = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\n assertInInjectionContext(this.createSignal);\n\n const _signal = signal<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n\n addQueryContainerHandling(toObservable(_signal), () => _signal(), config);\n\n return _signal;\n };\n\n /**\n * @deprecated Use `myQuery.createSubject()` or `myQuery.createSignal()` instead. Will be removed in v6.\n */\n behaviorSubject = (initialValue?: ReturnType<typeof this.prepare> | null) =>\n new BehaviorSubject<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n}\n","import { Subject, fromEvent, take, takeUntil, timer } from 'rxjs';\nimport { AnyQuery } from '../query';\n\nexport class QueryStore {\n /**\n * @internal\n */\n readonly _store = new Map<string, AnyQuery>();\n\n private _garbageCollector: number | null = null;\n private _isInLowResourceMode = false;\n private _lastBlurTimestamp = Date.now();\n\n private _storeChange$ = new Subject<string>();\n private _queryCreated$ = new Subject<AnyQuery>();\n\n readonly storeChange$ = this._storeChange$.asObservable();\n readonly queryCreated$ = this._queryCreated$.asObservable();\n\n constructor(\n private _config?: {\n enableChangeLogging?: boolean;\n enableGarbageCollectorLogging?: boolean;\n autoRefreshQueriesOnWindowFocus?: boolean;\n enableSmartPolling?: boolean;\n },\n ) {\n this._initSmartQueryHandling();\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 this._storeChange$.next(id);\n }\n\n get<T extends AnyQuery>(id: string): T | null {\n return (this._store.get(id) as T) ?? null;\n }\n\n remove(id: string) {\n this._store.delete(id);\n\n this._logState(id, null, 'REMOVE');\n\n this._storeChange$.next(id);\n }\n\n forEach(callback: (value: AnyQuery, key: string) => void) {\n for (const [key, query] of this._store) {\n callback(query, key);\n }\n }\n\n refreshQueriesInUse(config?: { ignoreCacheValidity?: boolean; purgeUnused?: boolean }) {\n const { ignoreCacheValidity, purgeUnused } = config ?? {};\n\n for (const [key, query] of this._store) {\n if (\n query.isInUse &&\n (query.isExpired || ignoreCacheValidity) &&\n query.autoRefreshOnConfig.queryClientDefaultHeadersChange\n ) {\n query.execute({ skipCache: true, _triggeredVia: 'auto' });\n } else if (purgeUnused && !query.isInUse) {\n this.remove(key);\n }\n }\n }\n\n /**\n * @internal\n */\n _dispatchQueryCreated(query: AnyQuery) {\n this._queryCreated$.next(query);\n }\n\n private _initSmartQueryHandling() {\n const windowBlur$ = fromEvent<Event>(window, 'blur');\n const windowFocus$ = fromEvent<Event>(window, 'focus');\n\n windowBlur$.subscribe(() => {\n timer(5000)\n .pipe(takeUntil(windowFocus$), take(1))\n .subscribe(() => {\n this._lastBlurTimestamp = Date.now();\n this._isInLowResourceMode = true;\n this._stopGarbageCollector();\n\n if (this._config?.enableSmartPolling) {\n this.forEach((query) => {\n if (!query.isPolling || !query._enableSmartPolling) {\n return;\n }\n\n query.pausePolling();\n });\n }\n });\n });\n\n windowFocus$.subscribe(() => {\n if (!this._isInLowResourceMode) {\n return;\n }\n\n this._isInLowResourceMode = false;\n\n if (this._config?.enableSmartPolling || this._config?.autoRefreshQueriesOnWindowFocus) {\n this.forEach((query) => {\n if (this._config?.enableSmartPolling && query._isPollingPaused) {\n query.resumePolling();\n }\n\n if (Date.now() - this._lastBlurTimestamp > 15000) {\n if (\n this._config?.autoRefreshQueriesOnWindowFocus &&\n query.isExpired &&\n query.isInUse &&\n query.autoRefreshOnConfig.windowFocus\n ) {\n query.execute({ skipCache: true, _triggeredVia: 'auto' });\n }\n }\n });\n }\n\n this._initGarbageCollector();\n });\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 this._logGarbageCollector('Stop');\n }\n }\n\n private _runGarbageCollector() {\n this._logGarbageCollector('Collecting...');\n\n this._store.forEach((item, key) => {\n if (item.isExpired && !item.isInUse) {\n this.remove(key);\n }\n });\n\n this._logGarbageCollector('Collection done');\n\n if (!this._store.size) {\n this._stopGarbageCollector();\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 { BehaviorSubject } from 'rxjs';\nimport { AuthProvider } from '../auth';\nimport { EntityStore } from '../entity';\nimport {\n BaseArguments,\n GqlQueryConfig,\n GqlQueryConfigWithoutMethod,\n QueryConfigWithoutMethod,\n RestQueryConfig,\n RouteType,\n} from '../query';\nimport { QueryCreator } from '../query-creator';\nimport { QueryStore } from '../query-store';\nimport { RequestHeaders, RequestHeadersMethodMap } from '../request';\nimport { QueryClientConfig } from './query-client.types';\n\nexport class QueryClient {\n /**\n * @internal\n */\n 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 autoRefreshQueriesOnWindowFocus: _clientConfig.request?.autoRefreshQueriesOnWindowFocus ?? true,\n enableSmartPolling: _clientConfig.request?.enableSmartPolling ?? true,\n });\n }\n\n get = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GET',\n });\n\n post = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'POST',\n });\n\n put = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'PUT',\n });\n\n patch = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'PATCH',\n });\n\n delete = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'DELETE',\n });\n\n gqlQuery = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GQL_QUERY',\n });\n\n gqlMutate = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GQL_MUTATE',\n });\n\n fetch = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined,\n Id,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n Data = Response,\n >(\n queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n ) => new QueryCreator<Arguments, Response, Route, Store, Data, Id>(queryConfig, this, this._store);\n\n setAuthProvider = (authProvider: AuthProvider) => {\n if (this.authProvider) {\n this.authProvider?.cleanUp();\n }\n\n this._authProvider$.next(authProvider);\n };\n\n setDefaultHeaders = (config: {\n headers: RequestHeaders | RequestHeadersMethodMap | null;\n refreshQueriesInUse?: boolean;\n }) => {\n if (!this._clientConfig.request) {\n this._clientConfig.request = {\n headers: config.headers ?? undefined,\n };\n } else {\n this._clientConfig.request.headers = config.headers ?? undefined;\n }\n\n if (config.refreshQueriesInUse) {\n this._store.refreshQueriesInUse({ purgeUnused: true, ignoreCacheValidity: true });\n }\n };\n\n clearAuthProvider = () => {\n this.authProvider?.cleanUp();\n this._authProvider$.next(null);\n };\n\n _updateBaseRoute = (route: string) => {\n this._clientConfig.baseRoute = route;\n };\n}\n","import { AnyGqlQueryConfig, BaseArguments } 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 = (config: AnyGqlQueryConfig, args: BaseArguments | undefined) => {\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","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 data as { query: string; variables?: string; operationName?: string };\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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { assertInInjectionContext, isDevMode, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Paginated } from '@ethlete/types';\nimport { BehaviorSubject, Observable, filter, map, of, switchMap, takeWhile, tap } from 'rxjs';\nimport { EntityStore } from '../entity';\nimport { transformGql } from '../gql';\nimport { QueryClient } from '../query-client';\nimport {\n AnyQueryCreator,\n QueryArgsOf,\n QueryCreator,\n QueryDataOf,\n QueryResponseOf,\n QueryStoreIdOf,\n QueryStoreOf,\n} from '../query-creator';\nimport { QueryForm } from '../query-form';\nimport { HttpStatusCode, Method, RequestHeaders, RequestHeadersMethodMap, transformMethod } from '../request';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../symfony';\nimport { QueryContainerConfig, addQueryContainerHandling } from '../utils';\nimport {\n AnyGqlQueryConfig,\n AnyQuery,\n AnyQueryCollection,\n AnyQueryCollectionData,\n AnyQueryCreatorCollection,\n AnyRestQueryConfig,\n BaseArguments,\n Cancelled,\n Failure,\n GqlQueryConfig,\n Loading,\n Prepared,\n QueryCollectionOf,\n QueryState,\n QueryStateResponseOf,\n QueryStateType,\n ResetPageOnErrorOperatorConfig,\n RouteType,\n Success,\n} from './query.types';\n\ntype OmitNull<T> = T extends null ? never : T;\n\nexport function filterSuccess() {\n return function <T extends QueryState | null, Response extends QueryStateResponseOf<OmitNull<T>>>(\n source: Observable<T>,\n ) {\n return source.pipe(filter((value) => isQueryStateSuccess(value))) as Observable<Success<Response>>;\n };\n}\n\nexport function ignoreAutoRefresh() {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => !isAutoRefresh(value))) as Observable<T>;\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) || isQueryStatePrepared(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 <T extends AnyQuery | null, Data extends QueryDataOf<T>>(source: Observable<T>) {\n return source.pipe(switchMap((value) => value?.state$ ?? of(null))) as Observable<QueryState<Data> | null>;\n };\n}\n\nexport function switchQueryCollectionState() {\n return function <T extends AnyQueryCollection | null, Data extends AnyQueryCollectionData<OmitNull<T>>>(\n source: Observable<T>,\n ) {\n return source.pipe(switchMap((value) => value?.query.state$ ?? of(null))) as Observable<QueryState<Data> | null>;\n };\n}\n\nexport const resetPageOnError =\n <T extends AnyQuery | null | undefined, J extends QueryForm<any>>(config: ResetPageOnErrorOperatorConfig<J>) =>\n (source: Observable<T>) => {\n const { queryForm, pageControlKey = 'page' } = config;\n\n if (isDevMode() && !queryForm.form.controls[pageControlKey]) {\n console.warn(`resetPageOnError: queryForm.form.controls[\"${pageControlKey}\"] is undefined`);\n }\n\n return source.pipe(\n switchMap((q) => {\n if (!q) {\n return of(q);\n }\n\n return q.state$.pipe(\n tap((state) => {\n if (!isQueryStateFailure(state)) {\n return;\n }\n\n switch (state.error.status) {\n // The page is invalid (in prod mode, code is 416)\n case HttpStatusCode.RangeNotSatisfiable:\n queryForm.form.controls[pageControlKey]?.patchValue(1);\n break;\n\n // The page might be invalid (in dev mode, code is 500)\n case HttpStatusCode.InternalServerError:\n if (isSymfonyPagerfantaOutOfRangeError(state.error.detail)) {\n queryForm.form.controls[pageControlKey].patchValue(1);\n }\n break;\n }\n }),\n takeUntilResponse(),\n );\n }),\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 isAutoRefresh = (state: QueryState | null | undefined): boolean => state?.meta.triggeredVia === 'auto';\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 Store extends EntityStore<unknown>,\n Data,\n Id,\n>(\n config: unknown,\n): config is GqlQueryConfig<Route, Response, Arguments, Store, Data, Id> => {\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 isQueryCollection = <T extends AnyQueryCollection>(query: unknown): query is T => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n\n if (!('query' in query)) {\n return false;\n }\n\n return true;\n};\n\n/**\n * @deprecated Use `createQueryCollectionSubject` instead. Will be removed in v6.\n */\nexport const createQueryCollection = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n) => new BehaviorSubject<R | null>(null);\n\nexport const createQueryCollectionSubject = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(createQueryCollectionSubject);\n\n const subject = new BehaviorSubject<R | null>(null);\n\n addQueryContainerHandling(\n subject.pipe(map((s) => s?.query ?? null)),\n () => subject.getValue()?.query ?? null,\n config,\n );\n\n return subject;\n};\n\nexport const createQueryCollectionSignal = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(createQueryCollectionSignal);\n\n const _signal = signal<R | null>(null);\n\n addQueryContainerHandling(\n toObservable(_signal).pipe(map((s) => s?.query ?? null)),\n () => _signal()?.query ?? null,\n config,\n );\n\n return _signal;\n};\n\nexport const extractQuery = <T extends AnyQuery | AnyQueryCollection | null>(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\nexport const castQueryCreatorTypes = <\n QC extends AnyQueryCreator,\n Arguments extends QueryArgsOf<QC>,\n Response extends QueryResponseOf<QC>,\n Store extends QueryStoreOf<QC>,\n Data extends QueryDataOf<QC>,\n Route extends RouteType<Arguments>,\n Id extends QueryStoreIdOf<QC>,\n OverrideArguments extends BaseArguments | undefined,\n OverrideResponse extends Response | undefined,\n>(config: {\n creator: QC;\n args?: OverrideArguments;\n response?: OverrideResponse;\n}) => {\n if (config.args?.pathParams) {\n console.error(config);\n\n throw new Error('Path params cannot be overridden in castQueryCreatorTypes. Create a new query creator instead.');\n }\n\n return config.creator as unknown as QueryCreator<OverrideArguments, OverrideResponse, Route, Store, Data, Id>;\n};\n\nexport const computeQueryMethod = (config: { config: AnyRestQueryConfig | AnyGqlQueryConfig; client: QueryClient }) => {\n let method: Method;\n\n if (isGqlQueryConfig(config.config)) {\n const transferVia = config.config.transferVia ?? config.client.config.request?.gql?.transferVia;\n method = transformMethod({ method: config.config.method, transferVia });\n } else {\n method = transformMethod({ method: config.config.method });\n }\n\n return method;\n};\n\nexport const computeQueryBody = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n method: Method;\n args?: BaseArguments;\n}) => {\n let body: unknown;\n\n if (\n config.method === 'GET' ||\n config.method === 'HEAD' ||\n config.method === 'OPTIONS' ||\n (isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia)))\n ) {\n return undefined;\n }\n\n if (isGqlQueryConfig(config.config)) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n\n body = query(config.args?.variables);\n } else {\n body = config.args?.body;\n }\n\n return body;\n};\n\nexport const computeQueryAuthHeader = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n}) => {\n let authHeader: Record<string, string> | null = null;\n\n if (config.config.secure) {\n const header = config.client.authProvider?.header;\n\n if (header) {\n authHeader = header;\n }\n } else if (config.client.authProvider?.header) {\n if (config.config.secure === undefined || config.config.secure) {\n authHeader = config.client.authProvider.header;\n }\n }\n\n return authHeader;\n};\n\nexport const computeQueryHeaders = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n args?: BaseArguments;\n}) => {\n const authHeader = computeQueryAuthHeader(config);\n\n const mergedHeaders =\n mergeHeaders(\n getDefaultHeaders(config.client.config.request?.headers, config.config.method),\n authHeader,\n config.args?.headers,\n ) || undefined;\n\n return mergedHeaders;\n};\n\nexport const computeQueryQueryParams = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n args?: BaseArguments;\n}) => {\n if (\n isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia))\n ) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n\n let params = query(config.args?.variables);\n\n if (config.args?.queryParams) {\n params = { ...params, ...config.args?.queryParams };\n }\n\n return params;\n }\n\n return config.args?.queryParams;\n};\n\nexport const paginatedEntityValueUpdater =\n <\n T extends Paginated<unknown>,\n Args extends BaseArguments,\n Entity,\n J extends T extends Paginated<infer X> ? X : never,\n >(\n findFn: (val: J, entity: Entity) => boolean,\n ) =>\n ({ response, rawResponse, entity }: { rawResponse: T; response: T; args: Args; entity: Entity }) => {\n const indexOfEntityRaw = rawResponse.items.findIndex((item) => findFn(item as J, entity));\n const indexOfEntity = response.items.findIndex((item) => findFn(item as J, entity));\n\n if (indexOfEntity === -1 || indexOfEntityRaw === -1) {\n return null;\n }\n\n const newRawResponse = {\n ...rawResponse,\n items: [\n ...rawResponse.items.slice(0, indexOfEntityRaw),\n entity,\n ...rawResponse.items.slice(indexOfEntityRaw + 1),\n ],\n };\n\n const newResponse = {\n ...response,\n items: [...response.items.slice(0, indexOfEntity), entity, ...response.items.slice(indexOfEntity + 1)],\n };\n\n return {\n response: newResponse,\n rawResponse: newRawResponse,\n };\n };\n","import { untracked } from '@angular/core';\nimport {\n BehaviorSubject,\n combineLatest,\n filter,\n interval,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n skip,\n Subject,\n Subscription,\n switchMap,\n take,\n takeUntil,\n takeWhile,\n tap,\n timer,\n} from 'rxjs';\nimport { isBearerAuthProvider } from '../auth';\nimport { EntityStore } from '../entity';\nimport { QueryClient, shouldCacheQuery } from '../query-client';\nimport { HttpStatusCode, request, RequestError, RequestEvent, RequestHeaders } from '../request';\nimport {\n BaseArguments,\n ExecuteQueryOptions,\n GqlQueryConfig,\n PollConfig,\n QueryAutoRefreshConfig,\n QueryState,\n QueryStateMeta,\n QueryStateType,\n RestQueryConfig,\n RouteType,\n} from './query.types';\nimport {\n computeQueryBody,\n computeQueryHeaders,\n computeQueryMethod,\n filterFailure,\n filterSuccess,\n isGqlQueryConfig,\n isQueryStateCancelled,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStatePrepared,\n isQueryStateSuccess,\n switchQueryState,\n takeUntilResponse,\n} from './query.utils';\n\nlet _nextQueryId = 0;\n\nexport class Query<\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> {\n readonly _id = _nextQueryId++;\n\n private _currentLocalId = 0;\n private _pollingSubscription: Subscription | null = null;\n private _onAbort$ = new Subject<void>();\n private _currentPollConfig: PollConfig | null = null;\n\n /**\n * @internal\n * Used to track which components depend on this query.\n * The key is the component's _tNode index.\n * The value is the number of times the component has subscribed to this query.\n * The value might increase since we cant distinguish between a component and a host directive applied to it.\n */\n _dependents: Record<number, number> = {};\n\n /**\n * @internal\n */\n _dependentsChanged$ = new ReplaySubject<Record<number, number>>();\n\n /**\n * @internal\n */\n _isPollingPaused = false;\n\n private readonly _state$ = new BehaviorSubject<QueryState<Response>>({\n type: QueryStateType.Prepared,\n meta: { id: this._currentLocalId, triggeredVia: 'program' },\n });\n\n private get _nextId() {\n return ++this._currentLocalId;\n }\n\n get state$(): Observable<QueryState<Data>> {\n return this._state$.pipe(\n tap((s) => {\n if (!this._client.config.logging?.preparedQuerySubscriptions) return;\n\n if (isQueryStatePrepared(s)) {\n console.warn(\n `Query ${this._routeWithParams} was subscribed to in the prepared state. Did you forget to call .execute()?`,\n );\n }\n }),\n switchMap((s) => this._transformState(s)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n /**\n * The current state of the query.\n *\n * **Warning!** This differs from the `state$` observable in that it does not use the query store. Thus, the response data might be outdated.\n * Use `state$` (or `firstValueFrom(state$)`) the most up-to-date data.\n */\n get rawState() {\n return this._state$.value;\n }\n\n get isExpired() {\n if (isQueryStateLoading(this.rawState)) {\n return false;\n }\n\n if (\n isQueryStatePrepared(this.rawState) ||\n isQueryStateCancelled(this.rawState) ||\n isQueryStateFailure(this.rawState)\n ) {\n return true;\n }\n\n const ts = this.rawState.meta.expiresAt;\n\n if (!ts) {\n return true;\n }\n\n return ts < Date.now();\n }\n\n get isInUse() {\n return this._state$.observed || Object.keys(this._dependents).length > 0;\n }\n\n /**\n * @internal\n */\n get _subscriberCount() {\n return this._state$.observers.length;\n }\n\n get isPolling() {\n return !!this._pollingSubscription;\n }\n\n get autoRefreshOnConfig() {\n const base = this._queryConfig.autoRefreshOn ?? {};\n\n const transformed: Readonly<QueryAutoRefreshConfig> = {\n queryClientDefaultHeadersChange: base.queryClientDefaultHeadersChange ?? true,\n windowFocus: base.windowFocus ?? true,\n };\n\n return transformed;\n }\n\n /**\n * @internal\n */\n get _enableSmartPolling() {\n return this._queryConfig.enableSmartPolling ?? true;\n }\n\n get store() {\n return this._queryConfig.entity?.store ?? null;\n }\n\n get canBeCached() {\n return shouldCacheQuery(this._queryConfig.method);\n }\n\n get _isInMockMode() {\n return !!this._arguments?.mock;\n }\n\n constructor(\n private readonly _client: QueryClient,\n\n /**\n * @internal\n */\n public readonly _queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n\n /**\n * @internal\n */\n public readonly _routeWithParams: Route,\n\n /**\n * @internal\n */\n public readonly _arguments: Arguments,\n\n /**\n * @internal\n */\n public readonly _queryStoreKey: string,\n ) {}\n\n execute(options: ExecuteQueryOptions = {}) {\n const { skipCache = false, _triggeredVia: triggeredVia = 'program', cancelPrevious = false } = options;\n const { authProvider } = this._client;\n const queryConfig = this._queryConfig;\n\n if (!this.isExpired && !skipCache && isQueryStateSuccess(this.rawState)) {\n return this;\n }\n\n if (queryConfig.secure && !authProvider && !this._isInMockMode) {\n throw new Error('Cannot execute secure query without auth provider');\n }\n\n const id = this._nextId;\n const meta: QueryStateMeta = { id, triggeredVia };\n\n if (isQueryStateLoading(this.rawState)) {\n if (cancelPrevious) {\n this.abort();\n } else {\n return this;\n }\n }\n\n this._updateState({ type: QueryStateType.Loading, meta });\n\n if (this._isInMockMode) {\n this._mockRequest({}, meta, options);\n } else {\n let goSignal = of(true);\n\n if (\n authProvider &&\n isBearerAuthProvider(authProvider) &&\n queryConfig.secure &&\n !isQueryStateSuccess(authProvider.currentRefreshQuery?.rawState)\n ) {\n // On page load the query might be executed before the auth provider has been initialized.\n // In this case we need to wait for the auth provider to be ready before we can execute the query.\n goSignal = combineLatest([\n // The tokens might get set without a refresh query being created (e.g.) directly after login.\n authProvider.currentRefreshQuery$.pipe(switchQueryState(), takeUntilResponse()),\n authProvider.tokens$.pipe(take(1)),\n ]).pipe(\n takeUntil(this._onAbort$),\n filter(([state, tokens]) => {\n if (state) {\n return !isQueryStateLoading(state);\n }\n\n return !!tokens;\n }),\n tap(([state]) => {\n if (isQueryStateFailure(state)) {\n this._updateEntityState({ type: 'failure', error: state.error, headers: {} }, meta, options);\n }\n }),\n map(() => true),\n take(1),\n );\n }\n\n goSignal\n .pipe(\n switchMap(() => {\n const method = computeQueryMethod({ config: queryConfig, client: this._client });\n const body = computeQueryBody({ config: queryConfig, client: this._client, args: this._arguments, method });\n const headers = computeQueryHeaders({ client: this._client, config: queryConfig, args: this._arguments });\n\n return request<Response>({\n urlWithParams: this._routeWithParams as string,\n method,\n body,\n headers,\n reportProgress: queryConfig.reportProgress,\n responseType: queryConfig.responseType,\n withCredentials: queryConfig.withCredentials,\n cacheAdapter: this._client.config.request?.cacheAdapter,\n retryFn: this._client.config.request?.retryFn,\n }).pipe(\n tap((state) => this._updateEntityState(state, meta, options)),\n takeUntil(this._onAbort$),\n );\n }),\n )\n\n .subscribe();\n }\n\n return this;\n }\n\n abort() {\n if (!isQueryStateLoading(this.rawState)) {\n return this;\n }\n\n this._onAbort$.next();\n\n this._updateState({\n type: QueryStateType.Cancelled,\n meta: { id: this.rawState.meta.id, triggeredVia: this.rawState.meta.triggeredVia },\n });\n\n return this;\n }\n\n poll(config: PollConfig) {\n if (this._pollingSubscription) {\n return this;\n }\n\n this._currentPollConfig = config;\n\n const interval$ = interval(config.interval);\n const poll$ = interval$.pipe(\n skip(config.triggerImmediately ? 0 : 1),\n takeUntil(config.takeUntil),\n takeWhile(() => !this._isPollingPaused),\n filter(() => !isQueryStateLoading(this._state$.value)),\n );\n\n this._pollingSubscription = poll$.subscribe({\n next: () => this.execute({ skipCache: true, _triggeredVia: 'poll' }),\n complete: () => this.stopPolling(),\n });\n\n return this;\n }\n\n stopPolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._currentPollConfig = null;\n\n return this;\n }\n\n pausePolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n\n this._isPollingPaused = true;\n\n return this;\n }\n\n resumePolling() {\n if (!this._isPollingPaused || !this._currentPollConfig) {\n return this;\n }\n\n this._isPollingPaused = false;\n\n return this.poll({ ...this._currentPollConfig, triggerImmediately: true });\n }\n\n onSuccess(callback: (response: Data) => void) {\n this.state$.pipe(takeUntilResponse(), filterSuccess()).subscribe((state) => callback(state.response));\n return this;\n }\n\n onFailure(callback: (error: RequestError<unknown>) => void) {\n this.state$.pipe(takeUntilResponse(), filterFailure()).subscribe((state) => callback(state.error));\n return this;\n }\n\n private _getBearerAuthProvider() {\n const authProvider = this._client.authProvider;\n\n if (authProvider && isBearerAuthProvider(authProvider)) {\n return authProvider;\n }\n\n return null;\n }\n\n private _updateEntityState(\n requestEvent: RequestEvent<Response>,\n meta: QueryStateMeta,\n options?: ExecuteQueryOptions,\n ) {\n switch (requestEvent.type) {\n case 'start':\n case 'delay-retry': {\n const { type, retryDelay, retryNumber } = requestEvent;\n const newMeta: QueryStateMeta = { ...meta, isWaitingForRetry: type === 'delay-retry', retryDelay, retryNumber };\n\n this._updateState({\n type: QueryStateType.Loading,\n meta: newMeta,\n });\n break;\n }\n\n case 'upload-progress':\n case 'download-progress': {\n this._updateState({\n type: QueryStateType.Loading,\n progress: requestEvent.progress,\n partialText: 'partialText' in requestEvent ? requestEvent.partialText : undefined,\n meta,\n });\n\n break;\n }\n\n case 'success': {\n const { response, expiresInTimestamp } = requestEvent;\n const isGql = isGqlQueryConfig(this._queryConfig);\n const responseData =\n isGql && typeof response === 'object' && !!response && 'data' in response\n ? (response['data'] as Response)\n : (response as Response);\n\n if (this._queryConfig.entity && this._queryConfig.entity.set) {\n const id = this._queryConfig.entity?.id({ args: this._arguments, response: responseData });\n\n this._queryConfig.entity?.set({\n args: this._arguments,\n response: responseData,\n id,\n store: this._queryConfig.entity.store,\n });\n }\n\n this._updateState({\n type: QueryStateType.Success,\n response: responseData,\n meta: { ...meta, expiresAt: expiresInTimestamp },\n });\n\n break;\n }\n\n case 'failure': {\n const { error } = requestEvent;\n const failure = () => this._updateState({ type: QueryStateType.Failure, error, meta });\n const bearerAuthProvider = this._getBearerAuthProvider();\n\n if (\n !bearerAuthProvider ||\n options?._isUnauthorizedRetry ||\n error.status !== HttpStatusCode.Unauthorized ||\n !bearerAuthProvider.shouldRefreshOnUnauthorizedResponse\n ) {\n return failure();\n }\n\n const query = bearerAuthProvider._refreshQuery();\n if (!query) return failure();\n\n query.state$\n .pipe(\n takeUntilResponse(),\n takeUntil(this._onAbort$),\n tap((state) =>\n isQueryStateSuccess(state) ? this.execute({ ...options, _isUnauthorizedRetry: true }) : failure(),\n ),\n )\n .subscribe();\n\n break;\n }\n\n case 'cancel': {\n this._updateState({\n type: QueryStateType.Cancelled,\n meta,\n });\n\n break;\n }\n }\n }\n\n private _transformState(s: QueryState<Response>): Observable<QueryState<Data>> {\n if (!isQueryStateSuccess(s) || !this._queryConfig.entity?.get) {\n return of(s) as Observable<QueryState<Data>>;\n }\n\n const id = this._queryConfig.entity.id({ args: this._arguments, response: s.response });\n\n return this._queryConfig.entity\n .get({ args: this._arguments, id, response: s.response, store: this._queryConfig.entity.store })\n .pipe(map((v) => ({ ...s, response: v })));\n }\n\n private _updateState(s: QueryState<Response>) {\n // We need to use untracked here to avoid Angular's \"allowSignalWrites is false\" error when executing queries inside Angular's computed/effect signal functions.\n untracked(() => this._state$.next(s));\n }\n\n private _mockRequest(headers: RequestHeaders | undefined, meta: QueryStateMeta, options: ExecuteQueryOptions) {\n if (!this._arguments?.mock) return;\n\n const { delay = 200, error, response, retryIntoResponse = false, progress } = this._arguments.mock;\n const progressFileSize = progress?.fileSize ?? 1000000;\n const progressEventType = progress?.eventType ?? 'upload';\n const progressEventCount = progress?.eventCount ?? 5;\n const progressOmitTotal = progress?.omitTotal ?? false;\n const omitPartialText = progress?.omitPartialText ?? false;\n\n const finalResolveMock = () => {\n if (error) {\n this._updateEntityState({ error, headers: headers ?? {}, type: 'failure' }, meta, options);\n return;\n }\n\n this._updateEntityState(\n { response: response as Response, headers: headers ?? {}, type: 'success' },\n meta,\n options,\n );\n };\n\n if (progress) {\n interval(delay)\n .pipe(\n tap((a) => {\n if (a === progressEventCount + 1) {\n finalResolveMock();\n } else {\n const current = Math.min(progressFileSize * a, progressFileSize * progressEventCount);\n const percentage = (current / (progressFileSize * progressEventCount)) * 100;\n\n this._updateEntityState(\n {\n type: progressEventType === 'upload' ? 'upload-progress' : 'download-progress',\n headers: headers ?? {},\n progress: { current, ...(progressOmitTotal ? {} : { percentage, total: progressFileSize }) },\n partialText: omitPartialText ? undefined : `Partial text ${a}`,\n },\n meta,\n options,\n );\n }\n }),\n takeUntil(this._onAbort$),\n takeWhile((a) => a < progressEventCount + 1, true),\n )\n .subscribe();\n } else if (retryIntoResponse) {\n interval(delay)\n .pipe(\n tap((a) => {\n if (a === 3) {\n finalResolveMock();\n } else {\n const aModified = a + 1;\n this._updateEntityState(\n {\n type: 'delay-retry',\n headers: headers ?? {},\n retryDelay: 1000 + 1000 * aModified,\n retryNumber: aModified,\n },\n meta,\n options,\n );\n }\n }),\n takeUntil(this._onAbort$),\n takeWhile((a) => a < 3, true),\n )\n .subscribe();\n } else {\n timer(delay)\n .pipe(\n tap(() => finalResolveMock()),\n takeUntil(this._onAbort$),\n )\n .subscribe();\n }\n }\n\n /**\n * @internal\n */\n _addDependent(tNodeIndex: number) {\n if (!this._dependents[tNodeIndex]) {\n this._dependents[tNodeIndex] = 0;\n }\n\n this._dependents[tNodeIndex]++;\n\n this._dependentsChanged$.next(this._dependents);\n }\n\n /**\n * @internal\n */\n _removeDependent(tNodeIndex: number) {\n const count = this._dependents[tNodeIndex];\n if (count === undefined) {\n return;\n }\n\n this._dependents[tNodeIndex]--;\n\n if (count <= 1) {\n delete this._dependents[tNodeIndex];\n }\n\n this._dependentsChanged$.next(this._dependents);\n }\n\n /**\n * @internal\n */\n _hasDependents() {\n return Object.keys(this._dependents).length > 0;\n }\n}\n","import { AnyQueryCreator } from '../query-creator';\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>(\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\n if (!base64Url) {\n return null;\n }\n\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 {\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n switchQueryState,\n takeUntilResponse,\n} from '../query';\nimport { AnyQueryCreator, ConstructQuery, QueryResponseOf } from '../query-creator';\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<ConstructQuery<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 get shouldRefreshOnUnauthorizedResponse() {\n return (\n !!this._config.refreshConfig &&\n (this._config.refreshConfig.refreshOnUnauthorizedResponse === undefined ||\n this._config.refreshConfig.refreshOnUnauthorizedResponse)\n );\n }\n\n constructor(public _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 && cookieEnabled) {\n this._setCookie();\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 this._deleteCookie();\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 this._setCookie();\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 this._deleteCookie();\n }\n\n private _setCookie() {\n if (!this._config.refreshConfig?.cookieName || !this.tokens.refreshToken) return;\n\n setCookie(\n this._config.refreshConfig.cookieName,\n this.tokens.refreshToken,\n this._config.refreshConfig.cookieExpiresInDays,\n this._config.refreshConfig.cookieDomain,\n this._config.refreshConfig.cookiePath,\n this._config.refreshConfig.cookieSameSite,\n );\n }\n\n private _deleteCookie() {\n if (!this._config.refreshConfig?.cookieName) return;\n\n deleteCookie(\n this._config.refreshConfig.cookieName,\n this._config.refreshConfig.cookiePath,\n this._config.refreshConfig.cookieDomain,\n );\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 /**\n * @internal\n */\n _refreshQuery() {\n const currentQuery = this._currentRefreshQuery$.getValue();\n\n if (isQueryStateLoading(currentQuery?.rawState)) {\n return currentQuery;\n }\n\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 ConstructQuery<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 as QueryResponseOf<T>);\n\n this._tokens$.next(tokens);\n } else {\n this._tokens$.next({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n token: (state.response as any)['token'],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n refreshToken: (state.response as any)['refreshToken'],\n });\n }\n const cookieEnabled = this._config.refreshConfig?.cookieEnabled ?? true;\n\n if (this._config.refreshConfig?.cookieName && this.tokens.refreshToken && cookieEnabled) {\n this._setCookie();\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 this._deleteCookie();\n }\n }\n }),\n takeUntilResponse(),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n return query;\n }\n}\n","import { ClassValidatorError } from './class-validator.types';\n\nexport const isClassValidatorError = (error: unknown): error is ClassValidatorError => {\n return typeof error === 'object' && error !== null && 'statusCode' in error && 'message' in error && 'error' in error;\n};\n","import {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n inject,\n} from '@angular/core';\nimport { Subscription, tap } from 'rxjs';\nimport {\n AnyQuery,\n AnyQueryCollection,\n QueryCollectionKeysOf,\n QueryOf,\n QueryState,\n extractQuery,\n isQueryCollection,\n isQueryStateCancelled,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStatePrepared,\n isQueryStateSuccess,\n} from '../query';\nimport { QueryDataOf } from '../query-creator';\nimport { RequestError, RequestProgress } from '../request';\n\ninterface QueryContext<Q extends AnyQuery | AnyQueryCollection | null> {\n /**\n * The queries's response data.\n */\n $implicit: QueryDataOf<QueryOf<Q>> | null;\n\n /**\n * The queries's response data.\n */\n etQuery: QueryDataOf<QueryOf<Q>> | null;\n\n /**\n * The query used inside this directive. Useful if for instance the query gets unwrapped via async pipe inside the directive.\n */\n query: QueryOf<Q> | null;\n\n /**\n * Is true when the query is triggered by user interaction.\n */\n loading: boolean;\n\n /**\n * Is true when the query is triggered by either polling or auto refresh event.\n */\n refreshing: boolean;\n\n /**\n * The query's progress state.\n */\n progress: RequestProgress | null;\n\n /**\n * The query's error state.\n */\n error: RequestError<unknown> | null;\n\n /**\n * The query's scope (only available when the query is a collection)\n */\n scope: QueryCollectionKeysOf<Q> | null;\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[etQuery]',\n standalone: true,\n})\nexport class QueryDirective<Q extends AnyQuery | AnyQueryCollection | null> implements OnInit, OnDestroy {\n private _mainTemplateRef = inject<TemplateRef<QueryContext<Q>>>(TemplateRef);\n private _viewContainerRef = inject(ViewContainerRef);\n private _errorHandler = inject(ErrorHandler);\n private _cdr = inject(ChangeDetectorRef);\n\n private _isMainViewCreated = false;\n private _subscription: Subscription | null = null;\n\n private readonly _viewContext: QueryContext<Q> = {\n $implicit: null,\n etQuery: null,\n loading: false,\n refreshing: false,\n error: null,\n progress: null,\n scope: null,\n query: null,\n };\n\n @Input('etQuery')\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('etQueryCache')\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 static ngTemplateContextGuard<Q extends AnyQuery | AnyQueryCollection | 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 const query = extractQuery(this.query);\n\n if (!query) {\n this._viewContext.$implicit = null;\n this._viewContext.etQuery = null;\n this._viewContext.loading = false;\n this._viewContext.refreshing = false;\n this._viewContext.error = null;\n this._viewContext.progress = null;\n this._viewContext.scope = null;\n this._viewContext.query = null;\n return;\n }\n\n if (isQueryStatePrepared(query.rawState) || isQueryStateCancelled(query.rawState)) {\n query.execute();\n }\n\n const sub = query.state$.pipe(tap((state) => this._updateView(state))).subscribe();\n\n this._viewContext.scope = isQueryCollection(query) ? (query.type as QueryCollectionKeysOf<Q>) : null;\n this._viewContext.query = query as QueryOf<Q>;\n\n this._subscription = sub;\n }\n\n private _updateView(state: QueryState) {\n if (isQueryStateLoading(state)) {\n this._viewContext.progress = state.progress ?? null;\n this._viewContext.refreshing = state.meta.triggeredVia === 'auto' || state.meta.triggeredVia === 'poll';\n\n if (!this._viewContext.refreshing) {\n this._viewContext.loading = true;\n }\n } else {\n this._viewContext.loading = false;\n this._viewContext.refreshing = false;\n this._viewContext.progress = null;\n }\n\n if (isQueryStateSuccess(state)) {\n this._viewContext.etQuery = state.response as QueryDataOf<QueryOf<Q>>;\n this._viewContext.$implicit = state.response as QueryDataOf<QueryOf<Q>>;\n } else if (!this.cache) {\n this._viewContext.etQuery = null;\n this._viewContext.$implicit = null;\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","import { BehaviorSubject, combineLatest, map, of, shareReplay, switchMap, tap } from 'rxjs';\nimport { isQueryStateSuccess } from '../query';\nimport { AnyQueryCreator, ConstructQuery, QueryArgsOf, QueryDataOf } from '../query-creator';\nimport { InfinityQueryConfig, InfinityQueryParamLocation } from './infinity-query.types';\n\nexport class InfinityQuery<\n QueryCreator extends AnyQueryCreator,\n Query extends ConstructQuery<QueryCreator>,\n Args extends QueryArgsOf<QueryCreator>,\n QueryResponse extends QueryDataOf<QueryCreator>,\n InfinityResponse extends unknown[],\n> {\n private readonly _queries$ = new BehaviorSubject<Query[]>([]);\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\n private readonly _data$ = this._queries$.pipe(\n switchMap((queries) => {\n if (!queries.length) {\n return of([]);\n }\n\n return combineLatest(queries.map((query) => query.state$.pipe(map((state) => ({ state, query })))));\n }),\n tap((stateMaps) => {\n const lastState = stateMaps[stateMaps.length - 1]?.state;\n const lastQuery = stateMaps[stateMaps.length - 1]?.query;\n\n if (!isQueryStateSuccess(lastState) || !lastQuery) {\n return;\n }\n\n const totalPages =\n this._config.response.totalPagesExtractor?.({\n response: lastState.response as QueryResponse,\n itemsPerPage: this.itemsPerPage,\n args: lastQuery._arguments,\n }) ??\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (lastState.response as any)?.totalPages ??\n null;\n\n this._totalPages$.next(totalPages);\n }),\n map((stateMaps) => {\n if (!stateMaps.length) {\n return null;\n }\n\n const fullData = stateMaps.reduce(\n (acc, stateMap) => {\n if (isQueryStateSuccess(stateMap.state)) {\n const valExtractFn = this._config?.response?.valueExtractor;\n let data = valExtractFn\n ? valExtractFn?.(stateMap.state.response as QueryResponse)\n : (stateMap.state.response as InfinityResponse);\n\n if (this._config.response.reverse) {\n data = [...data].reverse() as InfinityResponse;\n }\n\n if (this._config.response.appendItemsTo === 'start') {\n acc.unshift(...data);\n } else {\n acc.push(...data);\n }\n }\n return acc;\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [] as any as InfinityResponse,\n );\n\n return fullData;\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n private readonly _lastQuery$ = this._queries$.pipe(\n map((queries) => queries[queries.length - 1] ?? null),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\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 data$() {\n return this._data$;\n }\n\n get currentQuery$() {\n return this._lastQuery$;\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\n this._queries$.next([...this._queries$.value, query]);\n\n this._currentPage$.next(newPage);\n this._currentCalculatedPage$.next(calculatedPage);\n }\n\n reset(\n newConfig?: Omit<\n InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n 'queryCreator' | 'response'\n >,\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._queries$.next([]);\n\n this.nextPage();\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 { AnyQueryCreator, QueryArgsOf, QueryDataOf } from '../query-creator';\nimport { InfinityQueryConfig, PageParamCalculatorOptions } from './infinity-query.types';\n\nexport const createInfinityQueryConfig = <\n QueryCreator extends AnyQueryCreator,\n Args extends QueryArgsOf<QueryCreator>,\n QueryResponse extends QueryDataOf<QueryCreator>,\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 TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { createDestroy, DelayableDirective } from '@ethlete/core';\nimport { BehaviorSubject, combineLatest, Subject, takeUntil, tap, withLatestFrom } from 'rxjs';\nimport { InfinityQuery, InfinityQueryConfig, InfinityQueryOf } from '../infinite-query';\nimport {\n BaseArguments,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n switchQueryState,\n} from '../query';\nimport { AnyQueryCreator, ConstructQuery } from '../query-creator';\nimport { RequestError } from '../request';\n\ninterface InfinityQueryContext<\n Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments | undefined, any, unknown[]>,\n> {\n $implicit: Q['response']['arrayType'] | null;\n etInfinityQuery: 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 currentQuery: ConstructQuery<Q['queryCreator']> | 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: '[etInfinityQuery]',\n exportAs: 'etInfinityQuery',\n standalone: true,\n providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }],\n hostDirectives: [DelayableDirective],\n})\nexport class InfinityQueryDirective<\n Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments | undefined, any, unknown[]>,\n> {\n private readonly _queryConfigChanged$ = new Subject<boolean>();\n private readonly _viewContext: InfinityQueryContext<Q> = {\n $implicit: null,\n etInfinityQuery: 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 currentQuery: null,\n };\n private _infinityQueryInstance: InfinityQueryOf<Q> | null = null;\n\n private readonly _destroy$ = createDestroy();\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 private readonly _delayable = inject(DelayableDirective, { host: true });\n\n private readonly _data$ = new BehaviorSubject<Q['response']['arrayType']>([]);\n\n @Input('etInfinityQuery')\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._infinityQueryInstance.nextPage();\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<\n Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments | undefined, any, unknown[]>,\n >(dir: InfinityQueryDirective<Q>, ctx: unknown): ctx is InfinityQueryContext<Q> {\n return true;\n }\n\n constructor() {\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);\n }\n\n private _setupInfinityQuery(config: Q) {\n const instance = new InfinityQuery(config) as InfinityQueryOf<Q>;\n\n combineLatest([\n instance.currentQuery$.pipe(switchQueryState(), withLatestFrom(instance.currentQuery$)),\n this._delayable.isDelayed$,\n instance.data$,\n ])\n .pipe(\n tap(([[state, currentQuery], isDelayed, infinityArray]) => {\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 !== null &&\n instance.currentPage !== null &&\n instance.totalPages > instance.currentPage) ||\n false;\n this._viewContext.currentCalculatedPage = instance.currentCalculatedPage;\n this._viewContext.currentQuery = currentQuery;\n\n if (isQueryStateLoading(state) || isDelayed || !infinityArray) {\n this._viewContext.loading = true;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = this.context.etInfinityQuery === 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 this._viewContext.etInfinityQuery = this._viewContext.$implicit =\n infinityArray as Q['response']['arrayType'];\n this._data$.next(infinityArray);\n }\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 if (this._viewContext.loading) {\n return;\n }\n\n this._infinityQueryInstance.nextPage();\n }\n\n reset(newConfig?: Omit<Q, 'queryCreator' | 'response'>) {\n if (!this._infinityQueryInstance) {\n return;\n }\n\n this._infinityQueryInstance.reset(newConfig as any);\n }\n\n private _cleanup() {\n this._queryConfigChanged$.next(true);\n\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.etInfinityQuery = 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._viewContext.currentQuery = 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: '[etInfinityQueryTrigger], et-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('etInfinityQueryTrigger');\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) return;\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: [0.25, 0.5, 0.75, 1],\n },\n );\n\n this._observer.observe(this._elementRef.nativeElement);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AnyQuery } from '../../query';\n\n@Pipe({ name: 'queryShortName', standalone: true })\nexport class QueryShortNamePipe implements PipeTransform {\n transform(value: AnyQuery) {\n const route = value._routeWithParams;\n\n if (typeof route === 'string') {\n // given an url that looks like this: https://api.github.com/repos/EladBezalel/etimo-achievements or https://api.github.com/repos/EladBezalel/etimo-achievements?test=1&test2=2\n // we want to extract the last 3 parts of the url, so we get: repos/EladBezalel/etimo-achievements\n\n const parts = route.split('/');\n\n if (parts.length > 3) {\n return `.../${parts.slice(parts.length - 3).join('/')}`;\n }\n\n return route;\n }\n\n return route as string;\n }\n}\n","import { InjectionToken, isDevMode } from '@angular/core';\nimport { QueryClient } from '../../query-client';\n\nexport interface QueryClientDevtoolsOptions {\n displayName?: string;\n client: QueryClient;\n}\n\nexport const QUERY_CLIENT_DEVTOOLS_TOKEN = new InjectionToken<QueryClientDevtoolsOptions[]>(\n 'QUERY_CLIENT_DEVTOOLS_TOKEN',\n);\n\nexport const provideQueryClientForDevtools = (queryClient: QueryClientDevtoolsOptions) => {\n if (!isDevMode()) {\n console.warn(\n 'You are using the Query Devtools in production mode. This increases the size of your bundle and should only be used for development purposes.',\n );\n }\n\n return {\n provide: QUERY_CLIENT_DEVTOOLS_TOKEN,\n useValue: queryClient,\n multi: true,\n };\n};\n","import { AsyncPipe, JsonPipe, NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n TrackByFunction,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n signal,\n untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { createDestroy, nextFrame } from '@ethlete/core';\nimport { BehaviorSubject, map, of, startWith, switchMap, takeUntil, tap } from 'rxjs';\nimport { BasicAuthProvider, CustomHeaderAuthProvider, isBearerAuthProvider } from '../../../auth';\nimport { QueryDirective } from '../../../directives';\nimport { EntityStore } from '../../../entity';\nimport { AnyQuery, isGqlQueryConfig } from '../../../query';\nimport { QueryShortNamePipe } from '../../pipes';\nimport { QUERY_CLIENT_DEVTOOLS_TOKEN, QueryClientDevtoolsOptions } from '../../utils';\n\ntype QueryDevtoolsSnapLayout = 'full' | 'left' | 'right' | 'bottom' | 'top';\ntype QueryListMode = 'live' | 'history';\ntype QueryViewMode = 'query' | 'authProvider';\n\n@Component({\n selector: 'et-query-devtools',\n templateUrl: './query-devtools.component.html',\n styleUrls: ['./query-devtools.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {\n class: 'et-query-devtools',\n },\n imports: [AsyncPipe, JsonPipe, ReactiveFormsModule, NgClass, QueryShortNamePipe, QueryDirective],\n})\nexport class QueryDevtoolsComponent {\n private readonly _cdr = inject(ChangeDetectorRef);\n protected readonly _destroy$ = createDestroy();\n\n protected readonly queryClientConfigs = inject(QUERY_CLIENT_DEVTOOLS_TOKEN);\n\n protected readonly isOpen = signal(false);\n protected readonly isTranslucent = signal(false);\n protected readonly snapLayout = signal<QueryDevtoolsSnapLayout>('full');\n protected readonly queryListMode = signal<QueryListMode>('live');\n protected readonly viewMode = signal<QueryViewMode>('query');\n\n protected showResponse = signal(false);\n protected showRawResponse = signal(false);\n protected showQueryConfig = signal(false);\n protected showEntityStoreValue = signal(false);\n protected showArguments = signal(false);\n\n protected selectedClientIdCtrl = new FormControl(0);\n\n protected readonly selectedClientId = toSignal(\n this.selectedClientIdCtrl.valueChanges.pipe(startWith(this.selectedClientIdCtrl.value)),\n );\n protected readonly selectedQueryId = signal<number | null>(null);\n\n protected readonly selectedClientConfig = computed(() => {\n if (this.queryClientConfigs.length === 1) {\n return this.queryClientConfigs[0]!;\n }\n\n const index = this.selectedClientId() ?? 0;\n\n const cfg = this.queryClientConfigs[index];\n\n if (!cfg) {\n return this.queryClientConfigs[0]!;\n }\n\n return cfg;\n });\n\n protected readonly queryStore = computed(() => {\n const config = this.selectedClientConfig();\n\n return config.client._store;\n });\n\n protected readonly queryStore$ = toObservable(this.queryStore);\n\n private readonly _queries$ = new BehaviorSubject<AnyQuery[]>([]);\n protected readonly queries = toSignal(this._queries$);\n\n protected readonly selectedQuery = computed(() => {\n const id = this.selectedQueryId();\n const mode = this.queryListMode();\n\n if (id === null || !mode) {\n return null;\n }\n\n if (mode === 'live') {\n return this.queries()?.find((q) => q._id === id) ?? null;\n }\n\n return this.queryHistory$.getValue()?.find((q) => q._id === id) ?? null;\n });\n\n protected readonly selectedQuery$ = toObservable(this.selectedQuery);\n\n protected selectedQueryEntityStore = computed(() => {\n const query = this.selectedQuery();\n\n if (!query) return null;\n\n return query.store as EntityStore<unknown> | null;\n });\n\n protected readonly selectedQueryEntityStore$ = toObservable(this.selectedQueryEntityStore);\n\n protected readonly selectedQueryEntityStoreValue$ = this.selectedQueryEntityStore$.pipe(\n switchMap(\n (s) =>\n s?._change$.pipe(\n startWith(''),\n map(() => {\n if (!s._dictionary) return null;\n\n return Array.from(s._dictionary).reduce(\n (obj, [key, value]) => {\n obj[key] = value;\n return obj;\n },\n {} as Record<string, unknown>,\n );\n }),\n ) ?? of(null),\n ),\n );\n\n protected readonly queryHistory$ = new BehaviorSubject<AnyQuery[]>([]);\n\n protected readonly stringifiedQueryConfig = computed(() => {\n const query = this.selectedQuery();\n\n if (!query) return null;\n\n const cfg = query._queryConfig;\n const route =\n typeof cfg.route === 'string' ? cfg.route : cfg.route ? cfg.route({}).replace(/undefined/g, ':param') : null;\n\n const sharedCfg = {\n method: cfg.method,\n secure: cfg.secure,\n route,\n reportProgress: cfg.reportProgress,\n responseType: cfg.responseType,\n withCredentials: cfg.withCredentials,\n autoRefreshOn: cfg.autoRefreshOn,\n enableSmartPolling: cfg.enableSmartPolling,\n hasEntityStore: !!cfg.entity,\n };\n\n if (isGqlQueryConfig(cfg)) {\n return {\n ...sharedCfg,\n query: cfg.query,\n transferVia: cfg.transferVia,\n };\n }\n\n return {\n ...sharedCfg,\n };\n });\n\n protected readonly authProvider = toSignal(\n toObservable(this.selectedClientConfig).pipe(switchMap((c) => c.client.authProvider$)),\n );\n\n protected readonly authProviderDetails = computed(() => {\n const provider = this.authProvider();\n\n if (!provider) return null;\n\n if (provider instanceof CustomHeaderAuthProvider) {\n return {\n type: 'CustomHeaderAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {\n name: provider._config.name,\n value: provider._config.value,\n },\n } as const;\n } else if (provider instanceof BasicAuthProvider) {\n return {\n type: 'BasicAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {\n username: provider._config.username,\n password: provider._config.password,\n },\n } as const;\n } else if (isBearerAuthProvider(provider)) {\n const refreshCfg = provider._config.refreshConfig;\n\n return {\n type: 'BearerAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {\n token: provider._config.token,\n refreshConfig: {\n refreshOnUnauthorizedResponse: refreshCfg?.refreshOnUnauthorizedResponse ?? 'true (default)',\n token: refreshCfg?.token,\n cookieName: refreshCfg?.cookieName,\n cookieDomain: refreshCfg?.cookieDomain ?? 'current origin (default)',\n cookieExpiresInDays: refreshCfg?.cookieExpiresInDays ?? '30 (default)',\n cookiePath: refreshCfg?.cookiePath ?? '/ (default)',\n cookieEnabled: refreshCfg?.cookieEnabled ?? 'true (default)',\n cookieSameSite: refreshCfg?.cookieSameSite ?? 'lax (default)',\n refreshBuffer: refreshCfg?.refreshBuffer ?? '30000 (default)',\n expiresInPropertyName: refreshCfg?.expiresInPropertyName ?? 'exp (default)',\n strategy: refreshCfg?.strategy ?? 'AuthBearerRefreshStrategy.BeforeExpiration (default)',\n requestArgsAdapter: refreshCfg?.requestArgsAdapter ? 'custom' : 'default',\n responseAdapter: refreshCfg?.responseAdapter ? 'custom' : 'default',\n },\n },\n } as const;\n } else {\n return {\n type: 'UnknownAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {},\n } as const;\n }\n });\n\n constructor() {\n this.selectedClientIdCtrl.valueChanges\n .pipe(\n tap(() => this.clearQueryHistory()),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n this.selectedQuery$\n .pipe(\n switchMap((q) => q?._dependentsChanged$ ?? of(null)),\n tap(() => this._cdr.markForCheck()),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n toObservable(this.authProviderDetails)\n .pipe(switchMap((ap) => (ap?.type === 'BearerAuthProvider' ? ap.provider.tokens$ : of(null))))\n .pipe(\n tap(() => this._cdr.markForCheck()),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n this.queryStore$\n .pipe(\n switchMap((s) =>\n s.storeChange$.pipe(\n startWith(''),\n map(() => s._store),\n tap((s) => {\n untracked(() => {\n this._queries$.next(Array.from(s.values()));\n });\n }),\n takeUntil(this._destroy$),\n ),\n ),\n )\n .subscribe();\n\n this.queryStore$\n .pipe(\n switchMap((s) =>\n s.queryCreated$.pipe(\n tap((query) => {\n const currentHistory = this.queryHistory$.getValue();\n\n if (!currentHistory) return;\n\n const currentHistoryClone = [...currentHistory];\n\n if (!currentHistory.some((q) => q._id === query._id)) {\n currentHistoryClone.unshift(query);\n }\n\n currentHistoryClone.splice(50);\n\n this.queryHistory$.next(currentHistoryClone);\n }),\n takeUntil(this._destroy$),\n ),\n ),\n )\n .subscribe();\n\n this._queries$\n .pipe(\n tap((queries) => {\n const currentHistory = this.queryHistory$.getValue();\n\n if (!queries || !currentHistory) return;\n\n const currentHistoryClone = [...currentHistory];\n\n for (const query of queries) {\n if (!currentHistoryClone.some((q) => q._id === query._id)) {\n currentHistoryClone.unshift(query);\n }\n }\n\n currentHistoryClone.splice(50);\n\n this.queryHistory$.next(currentHistoryClone);\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n effect(\n () => {\n const devtoolConfig = {\n isOpen: this.isOpen(),\n isTranslucent: this.isTranslucent(),\n snapLayout: this.snapLayout(),\n showResponse: this.showResponse(),\n showRawResponse: this.showRawResponse(),\n showQueryConfig: this.showQueryConfig(),\n showEntityStoreValue: this.showEntityStoreValue(),\n showArguments: this.showArguments(),\n selectedClientId: this.selectedClientId(),\n selectedQueryPath: this.selectedQueryId(),\n queryListMode: this.queryListMode(),\n viewMode: this.viewMode(),\n };\n\n window.localStorage.setItem('ethlete:query:devtools', JSON.stringify(devtoolConfig));\n },\n { allowSignalWrites: true },\n );\n\n const initialConfig = window.localStorage.getItem('ethlete:query:devtools');\n\n if (initialConfig) {\n const parsed = JSON.parse(initialConfig);\n\n this.isOpen.set(parsed.isOpen ?? false);\n this.isTranslucent.set(parsed.isTranslucent ?? false);\n this.snapLayout.set(parsed.snapLayout ?? 'full');\n this.showResponse.set(parsed.showResponse ?? false);\n this.showRawResponse.set(parsed.showRawResponse ?? false);\n this.showQueryConfig.set(parsed.showQueryConfig ?? false);\n this.showEntityStoreValue.set(parsed.showEntityStoreValue ?? false);\n this.showArguments.set(parsed.showArguments ?? false);\n this.selectedClientIdCtrl.setValue(parsed.selectedClientId ?? 0);\n this.selectedQueryId.set(parsed.selectedQueryPath ?? null);\n this.queryListMode.set(parsed.queryListMode ?? 'live');\n this.viewMode.set(parsed.viewMode ?? 'query');\n }\n }\n\n protected trackByClient: TrackByFunction<QueryClientDevtoolsOptions> = (_, { client }) => client.config.baseRoute;\n protected trackByQuery: TrackByFunction<AnyQuery> = (_, { _id }) => _id;\n\n protected toggleOpen() {\n this.isOpen.set(!this.isOpen());\n }\n\n protected toggleTranslucent() {\n this.isTranslucent.set(!this.isTranslucent());\n }\n\n protected toggleShowResponse() {\n this.showResponse.set(!this.showResponse());\n\n nextFrame(() => {\n this._cdr.markForCheck();\n });\n }\n\n protected toggleShowQueryConfig() {\n this.showQueryConfig.set(!this.showQueryConfig());\n }\n\n protected toggleShowRawResponse() {\n this.showRawResponse.set(!this.showRawResponse());\n }\n\n protected toggleShowEntityStoreValue() {\n this.showEntityStoreValue.set(!this.showEntityStoreValue());\n }\n\n protected toggleShowArguments() {\n this.showArguments.set(!this.showArguments());\n }\n\n protected selectSnapLayout(layout: QueryDevtoolsSnapLayout) {\n this.snapLayout.set(layout);\n }\n\n protected selectQueryListMode(mode: QueryListMode) {\n this.queryListMode.set(mode);\n }\n\n protected selectViewMode(mode: QueryViewMode) {\n this.viewMode.set(mode);\n }\n\n protected selectQuery(query: AnyQuery) {\n this.selectedQueryId.set(query._id);\n }\n\n protected clearQueryHistory() {\n this.queryHistory$.next([]);\n }\n}\n","@if (!isOpen()) {\n <button (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Open Devtools</button>\n}\n\n@if (isOpen()) {\n <div\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n >\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n @for (clientConfig of queryClientConfigs; track trackByClient(i, clientConfig); let i = $index) {\n <option [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n }\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n }\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Inspector</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' || viewMode() !== 'query' }\"\n (click)=\"selectQueryListMode('live'); selectViewMode('query')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live Queries ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' || viewMode() !== 'query' }\"\n (click)=\"selectQueryListMode('history'); selectViewMode('query')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Query History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)\n </button>\n @if (queryListMode() === 'history' && viewMode() === 'query') {\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n }\n\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': viewMode() !== 'authProvider' }\"\n (click)=\"selectViewMode('authProvider')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Auth Provider\n </button>\n </div>\n\n @if (viewMode() === 'query') {\n <div class=\"et-qd-queries__browser\">\n @if (queryListMode() === 'live') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queries(); track trackByQuery($index, query)) {\n <li>\n <button\n [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\"\n (click)=\"selectQuery(query)\"\n >\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n @if (queryListMode() === 'history') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queryHistory$ | async; track trackByQuery($index, query)) {\n <li>\n <button\n [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\"\n (click)=\"selectQuery(query)\"\n >\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n <div class=\"et-qd-queries__browser-detail\">\n @if (selectedQuery(); as query) {\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n @if (query.isPolling || query._isPollingPaused) {\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n }\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Dependents</p>\n <pre>{{ query._dependents | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query store key</p>\n <pre>{{ query._queryStoreKey }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showArguments()) {\n <pre>{{ query._arguments | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showResponse()) {\n <pre>{{ query.state$ | async | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showRawResponse()) {\n <pre>{{ query.rawState | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showQueryConfig()) {\n <pre>{{ stringifiedQueryConfig() | json }}</pre>\n }\n </div>\n\n @if (!!query._queryConfig.entity) {\n <div class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showEntityStoreValue()) {\n <pre>{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n } @else if (viewMode() === 'authProvider') {\n <div class=\"et-qd-auth-provider__viewer\">\n @if (authProviderDetails(); as details) {\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>Type</p>\n <pre>{{ details.type }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Header value</p>\n <pre>{{ details.header() | json }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Config</p>\n <pre>{{ details.config | json }}</pre>\n </div>\n\n @if (details.type === 'BearerAuthProvider') {\n <div class=\"et-qd-list-item\">\n <p>Tokens</p>\n <pre>{{ details.provider.tokens$ | async | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Should refresh on unauthorized response</p>\n <pre>{{ details.provider.shouldRefreshOnUnauthorizedResponse }}</pre>\n </div>\n\n <ng-container\n *etQuery=\"\n details.provider.currentRefreshQuery$ | async as response;\n loading as loading;\n error as error;\n query as query\n \"\n >\n <div class=\"et-qd-list-item\">\n <p>Refresh query response</p>\n\n <div>\n <button (click)=\"details.provider._refreshQuery()\" class=\"et-qd-chip et-qd-chip-bordered\">\n Refresh\n </button>\n </div>\n <pre>{{ response | json }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Refresh query loading</p>\n <pre>{{ loading }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Refresh query error</p>\n <pre>{{ error ?? 'null' }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <pre>{{ query?.state$ | async | json }}</pre>\n </div>\n </ng-container>\n }\n </div>\n } @else {\n <p>No auth provider set</p>\n }\n </div>\n }\n </div>\n }\n </div>\n}\n","import { Observable, Subject, debounceTime, filter, map, shareReplay, startWith } from 'rxjs';\nimport { EntityKey, EntityStoreConfig } from './entity.types';\n\nclass EntityStoreError extends Error {\n constructor(\n message: string,\n public detail?: unknown,\n ) {\n super(message);\n this.name = 'EntityStoreError';\n }\n}\n\nfunction flatten<T>(arr: T[][]): T[] {\n return arr.reduce((acc, val) => acc.concat(val), []);\n}\n\nexport class EntityStore<T> {\n /**\n * @internal\n */\n readonly _dictionary = new Map<EntityKey, T>();\n\n /**\n * @internal\n */\n readonly _change$ = new Subject<EntityKey | EntityKey[]>();\n\n constructor(private readonly _config: EntityStoreConfig) {}\n\n select(key: EntityKey): Observable<T | null>;\n select(keys: EntityKey[]): Observable<T[]>;\n select(keys: EntityKey[][]): Observable<T[]>;\n select(keyOrKeys: EntityKey | EntityKey[] | EntityKey[][]): Observable<T | null> | Observable<T[]> {\n if (Array.isArray(keyOrKeys)) {\n const _keys = this._normalizeKeys(keyOrKeys);\n return this._selectMany(_keys as EntityKey[]);\n }\n\n return this._select(keyOrKeys);\n }\n\n /**\n * **Note:** Prefer `select` over `selectWhere` when possible.\n */\n selectWhere(predicate: (value: T) => boolean): Observable<T[]> {\n return this._change$.pipe(\n startWith(null),\n debounceTime(0),\n map(() => Array.from(this._dictionary.values()).filter(predicate)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n set(key: EntityKey, value: T): void;\n set(keys: EntityKey[], values: T[]): void;\n set(keys: EntityKey[][], values: T[][]): void;\n set(keyOrKeys: EntityKey | EntityKey[] | EntityKey[][], valueOrValues: T | T[] | T[][]) {\n const _keys = this._normalizeKeys(keyOrKeys);\n\n if (Array.isArray(_keys)) {\n if (!Array.isArray(valueOrValues)) {\n throw new EntityStoreError('When setting multiple keys, values must be an array', {\n keyOrValues: _keys,\n valueOrValues,\n });\n }\n\n const _values = (Array.isArray(valueOrValues[0]) ? flatten(valueOrValues as T[][]) : valueOrValues) as T[];\n\n for (let i = 0; i < _keys.length; i++) {\n const k = _keys[i];\n const v = _values[i];\n\n if (k === undefined || v === undefined) continue;\n\n this._set(k, v);\n }\n } else {\n this._set(_keys, valueOrValues as T);\n }\n\n this._change$.next(_keys);\n }\n\n remove(key: EntityKey): void;\n remove(keys: EntityKey[]): void;\n remove(keys: EntityKey[][]): void;\n remove(keyOrKeys: EntityKey | EntityKey[] | EntityKey[][]) {\n const _keys = this._normalizeKeys(keyOrKeys);\n\n if (Array.isArray(_keys)) {\n for (const key of _keys) {\n this._remove(key);\n }\n } else {\n this._remove(_keys);\n }\n\n this._change$.next(_keys);\n }\n\n logState() {\n console.log('EntityStore:', this._config.name, {\n dictionary: this._dictionary,\n });\n }\n\n private _select(key: EntityKey): Observable<T | null> {\n if (this._config.logActions) {\n console.log('EntityStore: select', this._config.name, key);\n }\n\n return this._change$.pipe(\n startWith(null),\n filter((v) => {\n if (v === null) {\n return true;\n }\n\n if (Array.isArray(v)) {\n return v.includes(key);\n }\n\n return v === key;\n }),\n map(() => this._dictionary.get(key) ?? null),\n );\n }\n\n private _selectMany(keys: EntityKey[]): Observable<T[]> {\n if (this._config.logActions) {\n console.log('EntityStore: selectMany', this._config.name, keys);\n }\n\n return this._change$.pipe(\n startWith(null),\n filter((v) => {\n if (v === null) {\n return true;\n }\n\n if (Array.isArray(v)) {\n return keys.some((key) => v.includes(key));\n }\n\n return keys.includes(v);\n }),\n map(() => keys.map((key) => this._dictionary.get(key)).filter((value): value is T => value !== undefined)),\n );\n }\n\n private _set(key: EntityKey, value: T) {\n if (this._config.logActions) {\n console.log('EntityStore: set', this._config.name, key, value);\n }\n\n this._dictionary.set(key, value);\n }\n\n private _remove(key: EntityKey) {\n if (this._config.logActions) {\n console.log('EntityStore: remove', this._config.name, key);\n }\n\n this._dictionary.delete(key);\n }\n\n private _normalizeKeys(keys: EntityKey | EntityKey[] | EntityKey[][]): EntityKey | EntityKey[] {\n if (Array.isArray(keys)) {\n if (Array.isArray(keys[0])) {\n return flatten(keys as EntityKey[][]);\n }\n\n return keys as EntityKey[];\n }\n\n return keys;\n }\n}\n","import { Paginated } from '@ethlete/types';\nimport { map, of, switchMap, take, tap } from 'rxjs';\nimport { EntityStore } from './entity-store';\nimport { EntityKey, InsertFromConfig, RemoveFromConfig } from './entity.types';\n\nexport function mapToPaginated<T>(response: Paginated<T>) {\n return map((items) => ({ ...response, items }) as Paginated<T>);\n}\n\n// FIXME: This breaks if SubStoreType is an array\n/**\n * Use an other store to represent a property of the current entity.\n */\nexport const insertFrom = <\n OriginStoreType,\n OriginKeys extends keyof NonNullable<OriginStoreType>,\n SubStoreType extends NonNullable<OriginStoreType>[OriginKeys] extends Array<infer U>\n ? U\n : NonNullable<OriginStoreType>[OriginKeys],\n IdFn extends (value: NonNullable<OriginStoreType>) => EntityKey | EntityKey[],\n ComputedEntityType extends ReturnType<IdFn> extends Array<unknown>\n ? OriginStoreType\n : Omit<OriginStoreType, OriginKeys> & { [K in OriginKeys]: SubStoreType | null },\n>(\n store: EntityStore<SubStoreType>,\n { for: key, id }: InsertFromConfig<OriginStoreType, OriginKeys, IdFn>,\n) =>\n switchMap((value: OriginStoreType) => {\n if (!value) return of(null);\n\n const ids = id(value);\n\n if (Array.isArray(ids)) {\n return store.select(ids).pipe(map((data) => ({ ...value, [key]: data }) as ComputedEntityType));\n } else {\n return store.select(ids).pipe(map((data) => ({ ...value, [key]: data }) as ComputedEntityType));\n }\n });\n\n/**\n * Remove entities from a store based on a where function.\n */\nexport const removeFrom = <T>(store: EntityStore<T>, { where, id }: RemoveFromConfig<T>) => {\n store\n .selectWhere(where)\n .pipe(\n tap((entities) => store.remove(entities.map(id))),\n take(1),\n )\n .subscribe();\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 if (!active) {\n return null;\n }\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","import { NgZone, assertInInjectionContext, inject, isDevMode } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ET_PROPERTY_REMOVED, RouterStateService, clone, createDestroy, equal } from '@ethlete/core';\nimport { BehaviorSubject, Subject, debounceTime, map, merge, of, switchMap, takeUntil, tap, timer } from 'rxjs';\nimport {\n QueryFieldOptions,\n QueryFormGroup,\n QueryFormGroupControls,\n QueryFormObserveOptions,\n QueryFormValue,\n QueryFormValueEvent,\n QueryFormWriteOptions,\n} from './query-form.types';\nimport { transformToBoolean, transformToNumber } from './query-form.utils';\n\nconst ET_ARR_PREFIX = 'ET_ARR__';\n\nexport class QueryField<T> {\n get control() {\n return this.data.control;\n }\n\n constructor(public data: QueryFieldOptions<T>) {}\n}\n\nconst IGNORED_FILTER_COUNT_FIELDS = ['page', 'skip', 'take', 'limit', 'sort', 'sortBy', 'sortOrder', 'query', 'search'];\n\nexport interface QueryFormOptions {\n /**\n * A prefix to use for the query parameters. This is useful when you have multiple query forms on the same page.\n */\n queryParamPrefix?: string;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class QueryForm<T extends Record<string, QueryField<any>>> {\n private readonly _destroy$ = createDestroy();\n private readonly _unobserveTrigger$ = new Subject<boolean>();\n private readonly _router = inject(Router);\n private readonly _activatedRoute = inject(ActivatedRoute);\n private readonly _defaultValues = this._extractDefaultValues();\n private readonly _routerStateService = inject(RouterStateService);\n private readonly _zone = inject(NgZone);\n private readonly _didValueChanges$ = new Subject<boolean>();\n\n private _isObserving = false;\n private _skipNextResets = false;\n\n /**\n * The angular form group that contains all the fields.\n *\n * **Do not** use any of the following methods on this form group:\n * - `setValue`: Use `QueryForm.setValue` instead.\n * - `patchValue`: Use `QueryForm.patchValue` instead.\n * - `valueChanges`: Use `QueryForm.changes$` instead.\n * - `value`: Use `QueryForm.value` instead.\n * - `controls`: Use `QueryForm.controls` instead.\n */\n readonly form = this._setupFormGroup();\n\n private readonly _lastFormValue$ = new BehaviorSubject<QueryFormValue<T> | null>(null);\n private readonly _currentFormValue$ = new BehaviorSubject<QueryFormValue<T>>(this._formValue);\n\n private get _formValue() {\n return this.form.getRawValue() as QueryFormValue<T>;\n }\n\n private get _form() {\n return this.form as unknown as QueryFormGroup;\n }\n\n private readonly _changes$ = new BehaviorSubject<QueryFormValueEvent<T>>({\n previousValue: null,\n currentValue: this.form.getRawValue() as QueryFormValue<T>,\n });\n\n readonly changes$ = this._changes$.asObservable();\n readonly currentValue$ = this._changes$.pipe(map(({ currentValue }) => currentValue));\n readonly previousValue$ = this._changes$.pipe(map(({ previousValue }) => previousValue));\n\n readonly changes = toSignal(this.changes$);\n readonly currentValue = toSignal(this.currentValue$);\n readonly previousValue = toSignal(this.previousValue$);\n\n /**\n * The number of active filters.\n *\n * Excludes the following fields by default:\n * - `page`\n * - `skip`\n * - `take`\n * - `limit`\n * - `sort`\n * - `sortBy`\n * - `sortOrder`\n * - `query`\n * - `search`\n */\n readonly activeFilterCount$ = this.changes$.pipe(\n map(\n ({ currentValue }) =>\n Object.entries(currentValue)\n .map(([key, value]) => {\n if (IGNORED_FILTER_COUNT_FIELDS.includes(key) || this._fields[key]?.data.skipInFilterCount) {\n return true;\n }\n\n return this._isDefaultValue(key, value);\n })\n .filter((v) => v === false).length,\n ),\n );\n\n get controls() {\n return this.form.controls;\n }\n\n get value() {\n return this._changes$.value.currentValue;\n }\n\n get defaultFormValue() {\n return Object.entries(this._defaultValues).reduce((acc, [key]) => {\n acc[key as keyof QueryFormValue<T>] = this._getDefaultValue(key);\n\n return acc;\n }, {} as QueryFormValue<T>);\n }\n\n // with prefix eg. page should become ${prefix}-page\n constructor(\n private _fields: T,\n private _options?: QueryFormOptions,\n ) {\n assertInInjectionContext(QueryForm);\n }\n\n observe(options?: QueryFormObserveOptions) {\n if (this._isObserving) {\n if (isDevMode()) {\n console.warn('QueryForm.observe() was called multiple times. This is not supported.');\n }\n return this;\n }\n\n this._isObserving = true;\n\n if (options?.syncOnNavigation !== false) {\n const didChanges = this.setFormValueFromUrlQueryParams({\n queryParams: this._routerStateService.queryParams,\n });\n\n if (didChanges) {\n this._handleFormChange(true);\n }\n }\n\n merge(...Object.values(this._fields).map((field) => field.control.valueChanges), this._didValueChanges$)\n .pipe(\n debounceTime(0),\n tap(() => {\n this._handleFormChange();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n )\n .subscribe();\n\n let changedFieldsInLastResetLoop: string[] = [];\n let currentUniqueChangedFields: string[] = [];\n\n this._currentFormValue$\n .pipe(\n map((currentValue) => {\n return {\n previousValue: clone(this._lastFormValue$.value),\n currentValue: clone(currentValue),\n };\n }),\n tap(({ currentValue, previousValue }) => {\n if (options?.writeToQueryParams !== false) {\n this._syncViaUrlQueryParams(currentValue, options?.replaceUrl);\n }\n\n const didResetValues = this._skipNextResets\n ? false\n : this._handleQueryFormResets(previousValue ?? null, currentValue);\n\n this._skipNextResets = false;\n\n const changedFields = Object.keys(currentValue).filter(\n (key) => !equal(previousValue?.[key], currentValue[key]),\n );\n\n if (changedFieldsInLastResetLoop.length) {\n changedFields.push(...changedFieldsInLastResetLoop);\n changedFieldsInLastResetLoop = [];\n }\n\n if (didResetValues) {\n this._didValueChanges$.next(true);\n changedFieldsInLastResetLoop = changedFields;\n }\n\n currentUniqueChangedFields = [...new Set(changedFields)];\n }),\n switchMap(({ currentValue, previousValue }) => {\n if (changedFieldsInLastResetLoop.length) return of(null).pipe(map(() => ({ currentValue, previousValue })));\n\n const debounceValues = currentUniqueChangedFields.map((key) => {\n const field = this._fields[key];\n\n if (!field) return null;\n\n if (field.data.disableDebounceIfFalsy === true && !currentValue[key]) {\n return null;\n }\n\n return field.data.debounce ?? null;\n });\n\n currentUniqueChangedFields = [];\n\n if (debounceValues.some((v) => v === null) || !debounceValues.length) {\n return of(null).pipe(map(() => ({ currentValue, previousValue })));\n }\n\n const shortestDebounceTime = Math.min(...debounceValues.filter((v): v is number => v !== null));\n\n return timer(shortestDebounceTime).pipe(map(() => ({ currentValue, previousValue })));\n }),\n tap(({ currentValue, previousValue }) => {\n if (changedFieldsInLastResetLoop.length) return;\n\n this._changes$.next({\n previousValue: previousValue ?? null,\n currentValue: currentValue,\n });\n }),\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n )\n .subscribe();\n\n if (options?.syncOnNavigation !== false) {\n this._routerStateService.queryParamChanges$\n .pipe(\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n tap((changes) => {\n const didValueChanges = this.setFormValueFromUrlQueryParams({ queryParams: changes });\n\n if (didValueChanges) {\n this._didValueChanges$.next(true);\n }\n }),\n )\n .subscribe();\n }\n\n return this;\n }\n\n private _handleQueryFormResets(previousValue: QueryFormValue<T> | null, currentValue: QueryFormValue<T>) {\n let didResetValues = false;\n\n for (const formFieldKey in this._fields) {\n const field = this._fields[formFieldKey];\n\n if (!field) continue;\n\n const resets = field.data.isResetBy;\n\n if (!resets) continue;\n\n const resetConditionKeys = Array.isArray(resets) ? resets : [resets];\n\n for (const resetConditionKey of resetConditionKeys) {\n if (!(resetConditionKey in this._fields)) {\n if (isDevMode()) {\n console.warn(`The field \"${resetConditionKey}\" is not defined in the QueryForm. Is it a typo?`, this);\n }\n\n continue;\n }\n\n if (\n previousValue &&\n currentValue &&\n !equal(previousValue[resetConditionKey], currentValue[resetConditionKey])\n ) {\n const defaultValueForKeyToReset = this._getDefaultValue(formFieldKey);\n const currentValueForKeyToReset = currentValue[formFieldKey];\n\n if (equal(defaultValueForKeyToReset, currentValueForKeyToReset)) {\n continue;\n }\n\n this.form.controls[formFieldKey].setValue(defaultValueForKeyToReset);\n\n didResetValues = true;\n\n break;\n }\n }\n }\n\n return didResetValues;\n }\n\n unobserve() {\n this._unobserveTrigger$.next(true);\n }\n\n setFormValueFromUrlQueryParams(options: { queryParams: Record<string, unknown> }) {\n let didValueChanges = false;\n\n for (const [key, field] of Object.entries(this._fields)) {\n const value = options.queryParams[this._transformKeyToQueryParam(key)];\n\n const valueDoesNotExist = value === undefined;\n\n if (valueDoesNotExist) continue;\n\n const valueGotRemoved = value === ET_PROPERTY_REMOVED;\n\n if (valueGotRemoved) {\n field.control.setValue(this._getDefaultValue(key), { emitEvent: false });\n didValueChanges = true;\n\n continue;\n }\n let deserializedValue = value;\n\n if (field.data.queryParamToValueTransformFn) {\n deserializedValue = field.data.queryParamToValueTransformFn(value);\n } else if (typeof this._getDefaultValue(key) === 'number') {\n deserializedValue = transformToNumber(value);\n } else if (typeof this._getDefaultValue(key) === 'boolean') {\n deserializedValue = transformToBoolean(value);\n }\n\n const valueIsEqualToCurrent = equal(deserializedValue, field.control.value);\n\n if (valueIsEqualToCurrent) continue;\n\n field.control.setValue(deserializedValue, { emitEvent: false });\n didValueChanges = true;\n }\n\n return didValueChanges;\n }\n\n setValue(value: QueryFormValue<T>, options?: QueryFormWriteOptions) {\n this._form._setValue(value, options);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n patchValue(value: Partial<QueryFormValue<T>>, options?: QueryFormWriteOptions) {\n this._form._patchValue(value, options);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n private _getDefaultValue(key: string) {\n const val = this._defaultValues[key];\n\n if (typeof val === 'string' && val.startsWith(ET_ARR_PREFIX)) {\n return JSON.parse(val.slice(ET_ARR_PREFIX.length));\n }\n\n return val ?? null;\n }\n\n private _transformKeyToQueryParam(key: string) {\n return this._options?.queryParamPrefix ? `${this._options.queryParamPrefix}-${key}` : key;\n }\n\n private _isDefaultValue(key: string, value: unknown) {\n const normalizedValue = Array.isArray(value) ? `${ET_ARR_PREFIX}${JSON.stringify(value)}` : value;\n\n return this._getDefaultValue(key) === normalizedValue;\n }\n\n private _setupFormGroup() {\n const group = new FormGroup({} as QueryFormGroupControls<T>) as unknown as QueryFormGroup;\n\n for (const [key, field] of Object.entries(this._fields)) {\n group.addControl(key, field.control);\n }\n\n group._patchValue = group.patchValue;\n group._setValue = group.setValue;\n\n group.patchValue = this.patchValue.bind(this);\n group.setValue = this.setValue.bind(this);\n\n return group as unknown as FormGroup<QueryFormGroupControls<T>>;\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 (Array.isArray(value)) {\n defaultValues[key] = `${ET_ARR_PREFIX}${JSON.stringify(value)}`;\n } else {\n defaultValues[key] = value;\n }\n }\n\n return defaultValues;\n }\n\n private _syncViaUrlQueryParams(values: QueryFormValue<T>, replaceUrl?: boolean) {\n const queryParams = { ...clone(this._activatedRoute.snapshot.queryParams) };\n\n for (const [key, value] of Object.entries(values)) {\n const queryParamKey = this._transformKeyToQueryParam(key);\n const field = this._fields[key];\n\n if (!field) {\n continue;\n }\n\n if (this._isDefaultValue(key, value) || field.data.appendToUrl === false) {\n queryParams[queryParamKey] = undefined;\n } else {\n queryParams[queryParamKey] = field.data.valueToQueryParamTransformFn\n ? field.data.valueToQueryParamTransformFn?.(value)\n : value;\n }\n }\n\n this._zone.run(() => {\n this._router.navigate([], {\n queryParams,\n replaceUrl,\n queryParamsHandling: 'merge',\n });\n });\n }\n\n private _handleFormChange(forceOverwrite = false) {\n const currentVal = clone(this._currentFormValue$.value);\n const newVal = clone(this._formValue);\n\n if (equal(currentVal, newVal)) {\n return;\n }\n\n if (forceOverwrite) {\n this._lastFormValue$.next(newVal);\n } else {\n this._lastFormValue$.next(currentVal);\n }\n\n this._currentFormValue$.next(newVal);\n }\n}\n","export * from './lib/auth';\nexport * from './lib/class-validator';\nexport * from './lib/devtools/components/query-devtools';\nexport * from './lib/devtools/pipes';\nexport * from './lib/devtools/utils';\nexport * from './lib/directives';\nexport * from './lib/entity';\nexport * from './lib/gql';\nexport * from './lib/infinite-query';\nexport * from './lib/logger';\nexport * from './lib/query';\nexport * from './lib/query-client';\nexport * from './lib/query-creator';\nexport * from './lib/query-form';\nexport * from './lib/query-store';\nexport * from './lib/request';\nexport * from './lib/symfony';\nexport * from './lib/utils';\n\n// Burst cache\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isNaN","i1"],"mappings":"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"}