@ethlete/query 5.29.1 → 5.30.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/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/experimental/http/query-errors.ts","../../../../libs/query/src/lib/experimental/auth/bearer-auth-provider.ts","../../../../libs/query/src/lib/experimental/auth/bearer-auth-provider-config.ts","../../../../libs/query/src/lib/experimental/http/query-state.ts","../../../../libs/query/src/lib/experimental/http/query-snapshot.ts","../../../../libs/query/src/lib/experimental/http/query-utils.ts","../../../../libs/query/src/lib/experimental/http/query-error-response.ts","../../../../libs/query/src/lib/experimental/http/http-request.ts","../../../../libs/query/src/lib/experimental/http/query-features.ts","../../../../libs/query/src/lib/experimental/http/query-stack.ts","../../../../libs/query/src/lib/experimental/http/paged-query-stack.ts","../../../../libs/query/src/lib/experimental/http/query-dependencies.ts","../../../../libs/query/src/lib/experimental/http/query-execute-utils.ts","../../../../libs/query/src/lib/experimental/http/query-execute.ts","../../../../libs/query/src/lib/experimental/http/query.ts","../../../../libs/query/src/lib/experimental/http/query-repository.ts","../../../../libs/query/src/lib/experimental/http/query-client.ts","../../../../libs/query/src/lib/experimental/http/query-client-config.ts","../../../../libs/query/src/lib/experimental/http/query-creator.ts","../../../../libs/query/src/lib/experimental/http/secure-query-execute.ts","../../../../libs/query/src/lib/experimental/http/secure-query.ts","../../../../libs/query/src/lib/experimental/http/secure-query-creator.ts","../../../../libs/query/src/lib/experimental/http/query-creator-templates.ts","../../../../libs/query/src/lib/experimental/gql/gql-query-execute.ts","../../../../libs/query/src/lib/experimental/gql/gql-query.ts","../../../../libs/query/src/lib/experimental/gql/gql-query-creator.ts","../../../../libs/query/src/lib/experimental/gql/gql-query-creator-templates.ts","../../../../libs/query/src/lib/experimental/pipes/parse-http-error-code-de.ts","../../../../libs/query/src/lib/experimental/pipes/parse-http-error-code-de.pipe.ts","../../../../libs/query/src/lib/experimental/pipes/parse-http-error-code-en.ts","../../../../libs/query/src/lib/experimental/pipes/parse-http-error-code-en.pipe.ts","../../../../libs/query/src/lib/experimental/ws/web-socket-errors.ts","../../../../libs/query/src/lib/experimental/ws/web-socket-client.ts","../../../../libs/query/src/lib/experimental/ws/web-socket-client-config.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 { HttpStatusCode } from '@angular/common/http';\nimport { 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 as number) === 0) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n return { retry: false };\n};\n","import { HttpStatusCode } from '@angular/common/http';\nimport { Observable, Observer } from 'rxjs';\nimport { PartialXhrState, RequestConfig, RequestError, RequestEvent } from './request.types';\nimport {\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 {\n CreateComputedOptions,\n Injector,\n Signal,\n assertInInjectionContext,\n computed,\n inject,\n signal,\n} from '@angular/core';\nimport { ToObservableOptions, ToSignalOptions, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { computedTillTruthy, createDestroy, syncSignal } 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: NoInfer<ToSignalOptions<T | undefined>> & {\n initialValue?: undefined;\n requireSync?: false;\n } & QueryContainerConfig,\n): Signal<T | undefined>;\nexport function toQuerySignal<T extends AnyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T | null>> & {\n initialValue?: null;\n requireSync?: false;\n } & QueryContainerConfig,\n): Signal<T | null>;\nexport function toQuerySignal<T extends AnyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T>> & {\n initialValue?: undefined;\n requireSync: true;\n } & QueryContainerConfig,\n): Signal<T>;\nexport function toQuerySignal<T extends AnyQuery | null, const U extends T>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T | U>> & {\n initialValue: U;\n requireSync?: false;\n } & QueryContainerConfig,\n): Signal<T | U>;\n\nexport function toQuerySignal<T extends AnyQuery | null, U = undefined>(\n source: Observable<T> | Subscribable<T>,\n options?: ToSignalOptions<T | U> & { 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\n/**\n * Creates a signal that will only be reactive until the first query is created.\n * All subsequent changes inside the computation will be ignored.\n */\nexport function queryComputedTillTruthy<T extends AnyQuery | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T | null> {\n const c = computedTillTruthy(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 const roSignal = toSignal(\n toObservable(source).pipe(\n switchMap((q) => extractQuery(q)?.state$ ?? of(null)),\n switchMap((state) => {\n if (cacheResponse) {\n return of(state).pipe(filterQueryStates([QueryStateType.Success, QueryStateType.Failure]));\n }\n\n return of(state);\n }),\n ),\n {\n initialValue: null,\n },\n ) as Signal<QueryState<QueryDataOf<QueryOf<ReturnType<T>>>> | null>;\n\n const rwSignal = signal<QueryState<QueryDataOf<QueryOf<ReturnType<T>>>> | null>(roSignal());\n\n syncSignal(roSignal, rwSignal);\n\n return rwSignal;\n}\n\nexport type QueryStateSignal<T extends Signal<AnyQuery | AnyQueryCollection | null>> = Signal<QueryDataOf<\n QueryOf<ReturnType<T>>\n> | null> & { reset: () => void };\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 const dataSignal = computed(() => {\n const state = s();\n\n return isQueryStateSuccess(state) ? state.response : null;\n });\n\n (dataSignal as QueryStateSignal<T>)['reset'] = () => {\n s.set(null);\n };\n\n return dataSignal as QueryStateSignal<T>;\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 } from '../query';\nimport { QueryClient, buildQueryCacheKey, 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 = (args?.config?.queryStoreCacheKey ?? '') + buildQueryCacheKey(route as string, args);\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 { 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 buildQueryCacheKey = (route: string, args: BaseArguments | undefined) => {\n const variables = JSON.stringify(args?.variables || {})\n // replace all curly braces with empty string\n .replace(/{|}/g, '')\n // replace new lines and whitespaces with empty string\n .replace(/\\s/g, '');\n\n const seed = `${route}...${variables}`;\n\n let hash = 0;\n\n for (const char of seed) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;\n }\n\n // Force positive number hash.\n // 2147483647 = equivalent of Integer.MAX_VALUE.\n hash += 2147483647 + 1;\n\n return hash.toString();\n};\n","const getOpName = /(query|mutation) ?([\\w\\d-_]+)? ?\\(.*?\\)? \\{/;\n\nexport type TransformedGqlQuery = {\n query: string;\n variables?: Record<string, unknown>;\n operationName?: string;\n};\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: TransformedGqlQuery = { query: str };\n if (variables) data['variables'] = variables;\n if (name && name.length) {\n const operationName = name[2];\n if (operationName) data['operationName'] = name[2];\n }\n\n // minify the query\n data.query = data.query.replace(/\\s+/g, ' ').trim();\n\n return data as TransformedGqlQuery;\n };\n};\n\nexport type GQL = string & { gql: 'tag' };\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 as GQL;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpStatusCode } from '@angular/common/http';\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 { 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 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 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 { HttpStatusCode } from '@angular/common/http';\nimport { 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 { 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, headers } = 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 headers: headers,\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 if (this._dependents[tNodeIndex] !== undefined) {\n this._dependents[tNodeIndex]--;\n }\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 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, Observable, combineLatest, map, of, shareReplay, switchMap, tap } from 'rxjs';\nimport { filterSuccess } 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>(10);\n\n private readonly _data$ = this._queries$.pipe(\n switchMap((queries) => {\n if (!queries.length) {\n return of([]);\n }\n\n return combineLatest(\n queries.map((query) =>\n query.state$.pipe(\n filterSuccess(),\n map((state) => ({ state, query })),\n ),\n ),\n );\n }),\n tap((stateMaps) => {\n const lastState = stateMaps[stateMaps.length - 1]?.state;\n const lastQuery = stateMaps[stateMaps.length - 1]?.query;\n\n if (!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 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 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(\n private _config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n private _destroy$: Observable<boolean>,\n ) {\n this._itemsPerPage$.next(this._config.limitParam?.value ?? 10);\n }\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 && newPage > 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 if (this._config.pollingInterval) {\n query.poll({ interval: this._config.pollingInterval, takeUntil: this._destroy$ });\n }\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 { toSignal } from '@angular/core/rxjs-interop';\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 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 data = toSignal(this._data$, { requireSync: true });\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, this._destroy$) 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 = state ? state.meta.triggeredVia !== 'poll' : 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 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.tagName === 'BUTTON';\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 changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\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 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\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\">Query 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","import { RuntimeError } from '@ethlete/core';\nimport { QueryFeatureType } from './query-features';\n\n// codes 0-999\nexport const enum QueryRuntimeErrorCode {\n // Query\n QUERY_FEATURE_USED_MULTIPLE_TIMES = 0,\n\n // Query features\n WITH_ARGS_QUERY_FEATURE_MISSING_BUT_ROUTE_IS_FUNCTION = 100,\n WITH_POLLING_USED_ON_UNSUPPORTED_HTTP_METHOD = 101,\n WITH_AUTO_REFRESH_USED_ON_UNSUPPORTED_HTTP_METHOD = 102,\n WITH_AUTO_REFRESH_USED_IN_MANUAL_QUERY = 103,\n\n // Auth provider\n COOKIE_LOGIN_TRIED_BUT_COOKIE_DISABLED = 200,\n ENABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG = 201,\n DISABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG = 202,\n LOGIN_CALLED_WITHOUT_CONFIG = 203,\n LOGIN_WITH_TOKEN_CALLED_WITHOUT_CONFIG = 204,\n REFRESH_TOKEN_CALLED_WITHOUT_CONFIG = 205,\n SELECT_ROLE_CALLED_WITHOUT_CONFIG = 206,\n DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_OBJECT = 207,\n DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_ACCESS_TOKEN = 208,\n DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_REFRESH_TOKEN = 209,\n UNABLE_TO_DECRYPT_BEARER_TOKEN = 210,\n BEARER_EXPIRES_IN_PROPERTY_NOT_NUMBER = 211,\n\n // Query Repository\n UNCACHEABLE_REQUEST_HAS_CACHE_KEY_PARAM = 300,\n UNCACHEABLE_REQUEST_HAS_ALLOW_CACHE_PARAM = 301,\n\n // Paged Query Stack\n PAGED_QUERY_STACK_PAGE_BIGGER_THAN_TOTAL_PAGES = 400,\n PAGED_QUERY_STACK_NEXT_PAGE_CALLED_WITHOUT_PREVIOUS_PAGE = 401,\n PAGED_QUERY_STACK_PREVIOUS_PAGE_CALLED_BUT_ALREADY_AT_FIRST_PAGE = 402,\n\n // Query Stack\n QUERY_STACK_WITH_ARGS_USED = 500,\n QUERY_STACK_WITH_RESPONSE_UPDATE_USED = 501,\n}\n\nexport const queryFeatureUsedMultipleTimes = (type: QueryFeatureType) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_FEATURE_USED_MULTIPLE_TIMES,\n `The query feature \"${type}()\" was used multiple times.`,\n );\n};\n\nexport const withArgsQueryFeatureMissingButRouteIsFunction = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_ARGS_QUERY_FEATURE_MISSING_BUT_ROUTE_IS_FUNCTION,\n `This queries route is a function, but a \"withArgs()\" feature is missing.`,\n );\n};\n\nexport const withPollingUsedOnUnsupportedHttpMethod = (method: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_POLLING_USED_ON_UNSUPPORTED_HTTP_METHOD,\n `This is a \"${method}\" request, \"withPolling()\" is only supported for GET, HEAD, OPTIONS requests and GQL queries.`,\n );\n};\n\nexport const withAutoRefreshUsedOnUnsupportedHttpMethod = (method: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_AUTO_REFRESH_USED_ON_UNSUPPORTED_HTTP_METHOD,\n `This is a \"${method}\" request, \"withAutoRefresh()\" is only supported for GET, HEAD, OPTIONS requests and GQL queries.`,\n );\n};\n\nexport const withAutoRefreshUsedInManualQuery = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_AUTO_REFRESH_USED_IN_MANUAL_QUERY,\n `\"withAutoRefresh()\" has been used inside a query that has \"onlyManualExecution\" set to true.` +\n ` If this is intentional, set \"ignoreOnlyManualExecution\" to true inside the auto refresh config.`,\n );\n};\n\nexport const cookieLoginTriedButCookieDisabled = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.COOKIE_LOGIN_TRIED_BUT_COOKIE_DISABLED,\n `Cookie login has been tried, but the cookie is disabled.`,\n );\n};\n\nexport const enableCookieCalledWithoutCookieConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.ENABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG,\n `enableCookie() has been called but there is no cookie config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const disableCookieCalledWithoutCookieConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.DISABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG,\n `disableCookie() has been called but there is no cookie config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const loginCalledWithoutConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.LOGIN_CALLED_WITHOUT_CONFIG,\n `login() has been called without a config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const loginWithTokenCalledWithoutConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.LOGIN_WITH_TOKEN_CALLED_WITHOUT_CONFIG,\n `loginWithToken() has been called without a config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const refreshTokenCalledWithoutConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.REFRESH_TOKEN_CALLED_WITHOUT_CONFIG,\n `refreshToken() has been called without a config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const selectRoleCalledWithoutConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.SELECT_ROLE_CALLED_WITHOUT_CONFIG,\n `selectRole() has been called without a config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const defaultResponseTransformerResponseNotObject = (currentType: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_OBJECT,\n `The default response transformer expects the response to be an object, but it is a \"${currentType}\".`,\n );\n};\n\nexport const defaultResponseTransformerResponseNotContainingAccessToken = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_ACCESS_TOKEN,\n `The default response transformer expects the response to contain an \"accessToken\" property.`,\n );\n};\n\nexport const defaultResponseTransformerResponseNotContainingRefreshToken = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_REFRESH_TOKEN,\n `The default response transformer expects the response to contain a \"refreshToken\" property.`,\n );\n};\n\nexport const unableToDecryptBearerToken = (token: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.UNABLE_TO_DECRYPT_BEARER_TOKEN,\n `The bearer token could not be decrypted: ${token}`,\n );\n};\n\nexport const bearerExpiresInPropertyNotNumber = (expiresIn: unknown) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.BEARER_EXPIRES_IN_PROPERTY_NOT_NUMBER,\n `The expires in property is not a number: ${expiresIn}`,\n );\n};\n\nexport const uncacheableRequestHasCacheKeyParam = (key: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.UNCACHEABLE_REQUEST_HAS_CACHE_KEY_PARAM,\n `This request is uncacheable, but a cache key was provided: ${key}. Please remove it.`,\n );\n};\n\nexport const uncacheableRequestHasAllowCacheParam = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.UNCACHEABLE_REQUEST_HAS_ALLOW_CACHE_PARAM,\n `This request is uncacheable, but allowCache is set to true. Please remove it.`,\n );\n};\n\nexport const pagedQueryStackPageBiggerThanTotalPages = (page: number, totalPages: number) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.PAGED_QUERY_STACK_PAGE_BIGGER_THAN_TOTAL_PAGES,\n `The page \"${page}\" is bigger than the total pages \"${totalPages}\".`,\n );\n};\n\nexport const pagedQueryStackNextPageCalledWithoutPreviousPage = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.PAGED_QUERY_STACK_NEXT_PAGE_CALLED_WITHOUT_PREVIOUS_PAGE,\n `fetchNextPage() has been called but the current page is not yet loaded. Please call it after the previous page has been loaded.`,\n );\n};\n\nexport const pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.PAGED_QUERY_STACK_PREVIOUS_PAGE_CALLED_BUT_ALREADY_AT_FIRST_PAGE,\n `fetchPreviousPage() has been called but the current page is already the first page.`,\n );\n};\n\nexport const queryStackWithArgsUsed = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_STACK_WITH_ARGS_USED,\n `withArgs() has been used in a query stack or a paged query stack. This is not supported.`,\n );\n};\n\nexport const queryStackWithResponseUpdateUsed = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_STACK_WITH_RESPONSE_UPDATE_USED,\n `withResponseUpdate() has been used in a query stack or a paged query stack. This is not supported.`,\n );\n};\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { computed, effect, isDevMode, Signal, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport {\n deleteCookie as coreDeleteCookie,\n getCookie,\n getDomain,\n injectRoute,\n isObject,\n setCookie,\n} from '@ethlete/core';\nimport { of, switchMap, tap, timer } from 'rxjs';\nimport { decryptBearer } from '../../auth';\nimport { QueryArgs, QuerySnapshot, RequestArgs } from '../http';\nimport {\n bearerExpiresInPropertyNotNumber,\n cookieLoginTriedButCookieDisabled,\n defaultResponseTransformerResponseNotContainingAccessToken,\n defaultResponseTransformerResponseNotContainingRefreshToken,\n defaultResponseTransformerResponseNotObject,\n disableCookieCalledWithoutCookieConfig,\n enableCookieCalledWithoutCookieConfig,\n loginCalledWithoutConfig,\n loginWithTokenCalledWithoutConfig,\n refreshTokenCalledWithoutConfig,\n selectRoleCalledWithoutConfig,\n unableToDecryptBearerToken,\n} from '../http/query-errors';\nimport {\n BearerAuthProviderConfig,\n BearerAuthProviderCookieConfig,\n BearerAuthProviderRouteConfig,\n BearerAuthProviderTokens,\n} from './bearer-auth-provider-config';\n\ntype InternalQueryExecuteOptions = {\n triggeredInternally?: boolean;\n};\n\ntype AuthProviderQueryWithType<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n> =\n | {\n type: 'login';\n query: ReturnType<typeof createAuthProviderQuery<TLoginArgs>> | null;\n }\n | {\n type: 'tokenLogin';\n query: ReturnType<typeof createAuthProviderQuery<TTokenLoginArgs>> | null;\n }\n | {\n type: 'tokenRefresh';\n query: ReturnType<typeof createAuthProviderQuery<TTokenRefreshArgs>> | null;\n }\n | {\n type: 'selectRole';\n query: ReturnType<typeof createAuthProviderQuery<TSelectRoleArgs>> | null;\n };\n\ntype QuerySnapshotWithType<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n> =\n | ({\n type: 'login';\n } & QuerySnapshot<TLoginArgs>)\n | ({\n type: 'tokenLogin';\n } & QuerySnapshot<TTokenLoginArgs>)\n | ({\n type: 'tokenRefresh';\n } & QuerySnapshot<TTokenRefreshArgs>)\n | ({\n type: 'selectRole';\n } & QuerySnapshot<TSelectRoleArgs>);\n\nexport type BearerAuthProvider<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n> = {\n /**\n * Logs in the user with the given args.\n */\n login: (args: RequestArgs<TLoginArgs>) => QuerySnapshot<TLoginArgs>;\n\n /**\n * Logs in the user with the given token.\n */\n loginWithToken: (args: RequestArgs<TTokenLoginArgs>) => QuerySnapshot<TTokenLoginArgs>;\n\n /**\n * Refreshes the token with the given refresh token.\n */\n refreshToken: (args: RequestArgs<TTokenRefreshArgs>) => QuerySnapshot<TTokenRefreshArgs>;\n\n /**\n * Selects the role for the user.\n */\n selectRole: (args: RequestArgs<TSelectRoleArgs>) => QuerySnapshot<TSelectRoleArgs>;\n\n /**\n * Logs out the user and removes the cookie.\n */\n logout: () => void;\n\n /**\n * Enables cookie usage for the auth provider.\n */\n enableCookie: () => void;\n\n /**\n * Disables cookie usage for the auth provider and removes the cookie.\n */\n disableCookie: () => void;\n\n /**\n * Tries to login with the given cookie config.\n * Returns `true` if a cookie was found, `false` otherwise.\n */\n tryLoginWithCookie: () => boolean;\n\n /**\n * The latest executed query that was not triggered internally.\n */\n latestExecutedQuery: Signal<QuerySnapshotWithType<\n TLoginArgs,\n TTokenLoginArgs,\n TTokenRefreshArgs,\n TSelectRoleArgs\n > | null>;\n\n onRefreshFailure?: (callback: (error: HttpErrorResponse) => void) => void;\n\n /**\n * A signal that contains the current access and refresh tokens.\n */\n tokens: Signal<BearerAuthProviderTokens | null>;\n};\n\nconst defaultResponseTransformer = <T>(response: T) => {\n if (!isObject(response)) {\n throw defaultResponseTransformerResponseNotObject(typeof response);\n }\n\n if (!('accessToken' in response)) {\n throw defaultResponseTransformerResponseNotContainingAccessToken();\n }\n\n if (!('refreshToken' in response)) {\n throw defaultResponseTransformerResponseNotContainingRefreshToken();\n }\n\n return response as unknown as BearerAuthProviderTokens;\n};\n\nconst FIVE_MINUTES = 5 * 60 * 1000;\n\nconst createAuthProviderQuery = <T extends QueryArgs>(\n config: BearerAuthProviderRouteConfig<T>,\n authProviderConfig: {\n /**\n * The time in milliseconds before the token expires when the refresh should be triggered.\n * @default 300000 // (5 minutes)\n */\n refreshBuffer?: number;\n\n /**\n * The expires in property name inside the jwt body\n * @default 'exp'\n */\n expiresInPropertyName?: string;\n },\n) => {\n const query = config.queryCreator();\n\n const triggeredInternally = signal(false);\n\n const tokens = computed(() => {\n const res = query.response();\n\n if (!res) return null;\n\n const transformed = config.responseTransformer?.(res) ?? defaultResponseTransformer(res);\n\n const bearerValue = decryptBearer(transformed.accessToken);\n\n if (!bearerValue) throw unableToDecryptBearerToken(transformed.accessToken);\n\n return {\n bearer: bearerValue,\n tokens: transformed,\n };\n });\n\n const expiresIn = computed(() => {\n const res = tokens();\n\n if (!res) return null;\n\n const expiresIn = res.bearer[authProviderConfig.expiresInPropertyName ?? 'exp'];\n const refreshBuffer = authProviderConfig.refreshBuffer ?? FIVE_MINUTES;\n\n if (typeof expiresIn !== 'number') {\n throw bearerExpiresInPropertyNotNumber(expiresIn);\n }\n\n // const dummyRemainingTime = (query.lastTimeExecutedAt() ?? 0) + 5000 - new Date().getTime();\n const remainingTime = new Date(expiresIn * 1000).getTime() - refreshBuffer - new Date().getTime();\n\n return remainingTime;\n });\n\n const execute = (newArgs: RequestArgs<T>, options?: InternalQueryExecuteOptions) => {\n query.execute({ args: newArgs });\n triggeredInternally.set(options?.triggeredInternally ?? false);\n };\n\n return {\n execute,\n query,\n tokens,\n expiresIn,\n triggeredInternally: triggeredInternally.asReadonly(),\n };\n};\n\nexport const createBearerAuthProvider = <\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n>(\n options: BearerAuthProviderConfig<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>,\n): BearerAuthProvider<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs> => {\n const route = injectRoute();\n const cookieEnabled = signal(options.cookie === undefined ? false : (options.cookie.enabled ?? true));\n const cookieOptions: Required<Omit<BearerAuthProviderCookieConfig<TTokenRefreshArgs>, 'enabled'>> = {\n expiresInDays: 30,\n name: 'etAuth',\n path: '/',\n sameSite: 'lax',\n domain: getDomain() ?? 'localhost',\n refreshArgsTransformer: (token) => ({ body: { token } }) as RequestArgs<TTokenRefreshArgs>,\n autoLoginExcludeRoutes: [],\n ...(options.cookie ?? {}),\n };\n\n const loginQuery = options.login ? createAuthProviderQuery(options.login, options) : null;\n const tokenLoginQuery = options.tokenLogin ? createAuthProviderQuery(options.tokenLogin, options) : null;\n const tokenRefreshQuery = options.tokenRefresh ? createAuthProviderQuery(options.tokenRefresh, options) : null;\n const selectRoleQuery = options.selectRole ? createAuthProviderQuery(options.selectRole, options) : null;\n\n const queries: AuthProviderQueryWithType<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>[] = [\n { type: 'login', query: loginQuery },\n { type: 'tokenLogin', query: tokenLoginQuery },\n { type: 'tokenRefresh', query: tokenRefreshQuery },\n { type: 'selectRole', query: selectRoleQuery },\n ];\n\n const latestExecutedQuery = computed(() => {\n const relevantQueries = queries.filter((q) => q.query && q.query.query.lastTimeExecutedAt() !== null);\n\n return findMostRecentQuery(relevantQueries);\n });\n\n const tokens = computed(() => {\n const query = latestExecutedQuery();\n\n return query?.query?.tokens()?.tokens ?? null;\n });\n\n toObservable(\n computed(() => {\n const query = latestExecutedQuery();\n const expiresIn = query?.query?.expiresIn() ?? null;\n const tokens = query?.query?.tokens() ?? null;\n\n return { expiresIn, tokens, query };\n }),\n )\n .pipe(\n switchMap((res) => {\n if (!res.tokens || res.expiresIn === null || !options.tokenRefresh) return of(null);\n\n const expIn = res.expiresIn;\n const tokens = res.tokens;\n\n if (!expIn || !tokens) return of(null);\n\n return timer(expIn).pipe(\n tap(() =>\n refreshToken(\n {\n ...cookieOptions.refreshArgsTransformer(tokens.tokens.refreshToken),\n },\n { triggeredInternally: true },\n ),\n ),\n );\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n const latestNonInternalQuery = signal<QuerySnapshotWithType<\n TLoginArgs,\n TTokenLoginArgs,\n TTokenRefreshArgs,\n TSelectRoleArgs\n > | null>(null);\n\n effect(() => {\n const relevantQueries = queries.filter(\n (q) => q.query && !q.query.triggeredInternally() && q.query.query.lastTimeExecutedAt() !== null,\n );\n\n const lastQuery = findMostRecentQuery(relevantQueries);\n\n untracked(() => {\n if (!lastQuery || !lastQuery.query?.query) return;\n\n latestNonInternalQuery.set({\n type: lastQuery.type,\n ...lastQuery.query.query.createSnapshot(),\n } as QuerySnapshotWithType<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>);\n });\n });\n\n // Cookie writing\n effect(() => {\n const isCookieEnabled = cookieEnabled();\n const res = latestExecutedQuery();\n const error = res?.query?.query.error();\n\n if (!isCookieEnabled || (error && error.raw.status === 401)) {\n deleteCookie();\n return;\n }\n\n if (!res?.query) return;\n\n const { tokens } = res.query;\n\n const rt = tokens()?.tokens.refreshToken;\n\n if (!rt) return;\n\n writeCookie(rt);\n });\n\n const login = (args: RequestArgs<TLoginArgs>) => {\n if (!loginQuery) {\n throw loginCalledWithoutConfig();\n }\n\n loginQuery.execute(args);\n\n return loginQuery.query.createSnapshot();\n };\n\n const loginWithToken = (args: RequestArgs<TTokenLoginArgs>) => {\n if (!tokenLoginQuery) {\n throw loginWithTokenCalledWithoutConfig();\n }\n\n tokenLoginQuery.execute(args);\n\n return tokenLoginQuery.query.createSnapshot();\n };\n\n const refreshToken = (args: RequestArgs<TTokenRefreshArgs>, options?: InternalQueryExecuteOptions) => {\n if (!tokenRefreshQuery) {\n throw refreshTokenCalledWithoutConfig();\n }\n\n tokenRefreshQuery.execute(args, { triggeredInternally: options?.triggeredInternally });\n\n return tokenRefreshQuery.query.createSnapshot();\n };\n\n const selectRole = (args: RequestArgs<TSelectRoleArgs>) => {\n if (!selectRoleQuery) {\n throw selectRoleCalledWithoutConfig();\n }\n\n selectRoleQuery.execute(args);\n\n return selectRoleQuery.query.createSnapshot();\n };\n\n const logout = () => {\n deleteCookie();\n loginQuery?.query.reset();\n tokenLoginQuery?.query.reset();\n tokenRefreshQuery?.query.reset();\n selectRoleQuery?.query.reset();\n latestNonInternalQuery.set(null);\n };\n\n const enableCookie = () => {\n if (isDevMode() && !options.cookie) {\n throw enableCookieCalledWithoutCookieConfig();\n }\n\n cookieEnabled.set(true);\n };\n\n const disableCookie = () => {\n if (isDevMode() && !options.cookie) {\n throw disableCookieCalledWithoutCookieConfig();\n }\n\n cookieEnabled.set(false);\n deleteCookie();\n };\n\n const tryLoginWithCookie = () => {\n const isCookieEnabled = cookieEnabled();\n\n if (!isCookieEnabled) {\n if (isDevMode()) {\n throw cookieLoginTriedButCookieDisabled();\n }\n return false;\n }\n\n const cookie = getCookie(cookieOptions.name);\n\n if (!cookie) {\n return false;\n }\n\n refreshToken(cookieOptions.refreshArgsTransformer(cookie));\n\n return true;\n };\n\n const writeCookie = (refreshToken: string) => {\n const { name, expiresInDays, domain, path, sameSite } = cookieOptions;\n\n setCookie(name, refreshToken, expiresInDays, domain, path, sameSite);\n };\n\n const deleteCookie = () => {\n const { name, path, domain } = cookieOptions;\n\n coreDeleteCookie(name, path, domain);\n };\n\n const findMostRecentQuery = (\n queriesToSearch: AuthProviderQueryWithType<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>[],\n ) => {\n return queriesToSearch.reduce(\n (acc, curr) => {\n if (!acc) return curr;\n\n const accExp = acc.query?.query.lastTimeExecutedAt() ?? null;\n const currExp = curr.query?.query.lastTimeExecutedAt() ?? null;\n\n if (currExp === null || accExp === null) return acc;\n\n return accExp > currExp ? acc : curr;\n },\n null as AuthProviderQueryWithType<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs> | null,\n );\n };\n\n const bearerAuthProvider: BearerAuthProvider<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs> = {\n login,\n loginWithToken,\n refreshToken,\n selectRole,\n logout,\n enableCookie,\n disableCookie,\n tryLoginWithCookie,\n latestExecutedQuery: latestNonInternalQuery.asReadonly(),\n tokens,\n };\n\n if (cookieEnabled()) {\n if (!cookieOptions.autoLoginExcludeRoutes.some((r) => route().startsWith(r))) {\n tryLoginWithCookie();\n }\n }\n\n return bearerAuthProvider;\n};\n\nexport const provideBearerAuthProvider = <\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n>(\n config: BearerAuthProviderConfig<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>,\n) => {\n return {\n provide: config.token,\n useFactory: () => createBearerAuthProvider(config),\n };\n};\n","import { InjectionToken } from '@angular/core';\nimport { QueryArgs, QueryClientRef, QueryCreator, RequestArgs, ResponseType } from '../http';\nimport { BearerAuthProvider } from './bearer-auth-provider';\n\nexport type BearerAuthProviderTokens = {\n accessToken: string;\n refreshToken: string;\n};\n\nexport type BearerAuthProviderRouteConfig<TArgs extends QueryArgs> = {\n queryCreator: QueryCreator<TArgs>;\n\n /**\n * A function that transforms the response into the format that the auth provider expects\n *\n * The expected format is an object with the `accessToken` and `refreshToken` properties.\n *\n * @default (response) => response\n */\n responseTransformer?: (response: ResponseType<TArgs>) => BearerAuthProviderTokens;\n};\n\nexport type BearerAuthProviderCookieConfig<TTokenRefreshArgs extends QueryArgs> = {\n /**\n * The cookie name where the refresh token is stored\n * @default 'etAuth'\n */\n name?: string;\n\n /**\n * The domain of the cookie. If not set, the current origin will be used.\n *\n * @example\n * \"https://example.com\" -> \"example.com\"\n * \"https://sub.example.com\" -> \"example.com\"\n */\n domain?: string;\n\n /**\n * The days until the cookie expires\n * @default 30\n */\n expiresInDays?: number;\n\n /**\n * The path of the cookie\n * @default '/'\n */\n path?: string;\n\n /**\n * Enable or disable the cookie\n * @default true\n */\n enabled?: boolean;\n\n /**\n * The same site property of the cookie\n * @default 'lax'\n */\n sameSite?: 'strict' | 'none' | 'lax';\n\n /**\n * A function that turns the token gotten from the cookie into the body for the refresh token request\n * @default (token) => ({ token })\n */\n refreshArgsTransformer?: (token: string) => RequestArgs<TTokenRefreshArgs>;\n\n /**\n * An array of routes where the auto login via cookie should not be triggered.\n *\n * This checks the current route against the array of routes using the `startsWith` method.\n * Make sure to start each route with a `/`.\n *\n * @default []\n * @example ['/login', '/register']\n */\n autoLoginExcludeRoutes?: string[];\n};\n\nexport type CreateBearerAuthProviderConfigOptions<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n> = {\n /**\n * The name of the auth provider\n */\n name: string;\n\n /**\n * The query client reference\n */\n queryClientRef: QueryClientRef;\n\n /**\n * The login route configuration\n */\n login?: BearerAuthProviderRouteConfig<TLoginArgs>;\n\n /**\n * The token login route configuration\n */\n tokenLogin?: BearerAuthProviderRouteConfig<TTokenLoginArgs>;\n\n /**\n * The token refresh route configuration\n */\n tokenRefresh?: BearerAuthProviderRouteConfig<TTokenRefreshArgs>;\n\n /**\n * The select role route configuration\n */\n selectRole?: BearerAuthProviderRouteConfig<TSelectRoleArgs>;\n\n /**\n * The cookie configuration for the auth provider\n */\n cookie?: BearerAuthProviderCookieConfig<TTokenRefreshArgs>;\n\n /**\n * The time in milliseconds before the token expires when the refresh should be triggered.\n * @default 300000 // (5 minutes)\n */\n refreshBuffer?: number;\n\n /**\n * The expires in property name inside the jwt body\n * @default 'exp'\n */\n expiresInPropertyName?: string;\n\n /**\n * Determines if the token should be refreshed if **any** query returns a 401 response.\n * @default true\n */\n refreshOnUnauthorizedResponse?: boolean;\n};\n\nexport type BearerAuthProviderConfig<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n> = CreateBearerAuthProviderConfigOptions<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs> & {\n token: BearerAuthProviderRef<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyBearerAuthProviderConfig = BearerAuthProviderConfig<any, any, any, any>;\n\nexport type BearerAuthProviderRef<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n> = InjectionToken<BearerAuthProvider<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>>;\n\nexport const createBearerAuthProviderConfig = <\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n>(\n options: CreateBearerAuthProviderConfigOptions<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>,\n) => {\n const token = new InjectionToken<\n BearerAuthProviderConfig<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>\n >(`BearerAuthProvider_${options.name}`);\n\n const bearerAuthProviderConfig: BearerAuthProviderConfig<\n TLoginArgs,\n TTokenLoginArgs,\n TTokenRefreshArgs,\n TSelectRoleArgs\n > = {\n name: options.name,\n queryClientRef: options.queryClientRef,\n token,\n cookie: options.cookie,\n expiresInPropertyName: options.expiresInPropertyName || 'exp',\n refreshBuffer: options.refreshBuffer ?? 300000,\n refreshOnUnauthorizedResponse: options.refreshOnUnauthorizedResponse ?? true,\n login: options.login,\n selectRole: options.selectRole,\n tokenLogin: options.tokenLogin,\n tokenRefresh: options.tokenRefresh,\n };\n\n return bearerAuthProviderConfig;\n};\n","import { HttpEvent } from '@angular/common/http';\nimport { WritableSignal, signal } from '@angular/core';\nimport { HttpRequest, HttpRequestLoadingState } from './http-request';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { QueryErrorResponse } from './query-error-response';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type SetupQueryStateOptions = {};\n\nexport type QueryStateSubtle<TArgs extends QueryArgs> = {\n request: WritableSignal<HttpRequest<TArgs> | null>;\n};\n\nexport type QueryState<TArgs extends QueryArgs> = {\n response: WritableSignal<ResponseType<TArgs> | null>;\n args: WritableSignal<RequestArgs<TArgs> | null>;\n latestHttpEvent: WritableSignal<HttpEvent<ResponseType<TArgs>> | null>;\n loading: WritableSignal<HttpRequestLoadingState | null>;\n error: WritableSignal<QueryErrorResponse | null>;\n lastTimeExecutedAt: WritableSignal<number | null>;\n\n subtle: QueryStateSubtle<TArgs>;\n};\n\nexport const setupQueryState = <TArgs extends QueryArgs>(options: SetupQueryStateOptions) => {\n const response = signal<ResponseType<TArgs> | null>(null);\n const args = signal<RequestArgs<TArgs> | null>(null);\n const latestHttpEvent = signal<HttpEvent<ResponseType<TArgs>> | null>(null);\n const error = signal<QueryErrorResponse | null>(null);\n const loading = signal<HttpRequestLoadingState | null>(null);\n const lastTimeExecutedAt = signal<number | null>(null);\n const request = signal<HttpRequest<TArgs> | null>(null);\n\n const state: QueryState<TArgs> = {\n response,\n args,\n latestHttpEvent,\n loading,\n error,\n lastTimeExecutedAt,\n subtle: {\n request,\n },\n };\n\n return state;\n};\n","import { effect, signal, untracked } from '@angular/core';\nimport { QueryArgs, QuerySnapshot } from './query';\nimport { QueryDependencies } from './query-dependencies';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryState, setupQueryState } from './query-state';\nimport { normalizeQueryRepositoryKey } from './query-utils';\n\nexport type CreateQuerySnapshotOptions<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n deps: QueryDependencies;\n execute: InternalQueryExecute<TArgs>;\n};\n\nexport const createQuerySnapshotFn = <TArgs extends QueryArgs>(options: CreateQuerySnapshotOptions<TArgs>) => {\n const { state, deps } = options;\n\n const snapshotFn = () => {\n const snapshotState = setupQueryState<TArgs>({});\n const isAlive = signal(true);\n\n const killEffectRef = effect(\n () => {\n const currentLoading = state.loading();\n const currentError = state.error();\n const currentResponse = state.response();\n const currentArgs = state.args();\n const currentLatestHttpEvent = state.latestHttpEvent();\n const currentLastTimeExecutedAt = state.lastTimeExecutedAt();\n\n untracked(() => {\n snapshotState.args.set(currentArgs);\n snapshotState.error.set(currentError);\n snapshotState.lastTimeExecutedAt.set(currentLastTimeExecutedAt);\n snapshotState.latestHttpEvent.set(currentLatestHttpEvent);\n snapshotState.loading.set(currentLoading);\n snapshotState.response.set(currentResponse);\n\n if (currentLoading) return;\n\n if (!currentResponse && !currentError) return;\n\n // kill the effect once loading is done and we either have a response or an error\n killEffectRef.destroy();\n\n isAlive.set(false);\n });\n },\n { injector: deps.injector },\n );\n\n const snapshot: QuerySnapshot<TArgs> = {\n args: snapshotState.args.asReadonly(),\n response: snapshotState.response.asReadonly(),\n latestHttpEvent: snapshotState.latestHttpEvent.asReadonly(),\n loading: snapshotState.loading.asReadonly(),\n error: snapshotState.error.asReadonly(),\n lastTimeExecutedAt: snapshotState.lastTimeExecutedAt.asReadonly(),\n isAlive: isAlive.asReadonly(),\n id: normalizeQueryRepositoryKey(options.execute.currentRepositoryKey),\n };\n\n return snapshot;\n };\n\n return snapshotFn;\n};\n","import { HttpErrorResponse, HttpHeaders, HttpStatusCode } from '@angular/common/http';\nimport { computed, CreateEffectOptions, effect, isDevMode, Signal } from '@angular/core';\nimport { getActiveConsumer, setActiveConsumer } from '@angular/core/primitives/signals';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../../symfony';\nimport { CreateGqlQueryOptions, isCreateGqlQueryOptions } from '../gql/gql-query';\nimport { CreateGqlQueryCreatorOptions, GqlQueryMethod } from '../gql/gql-query-creator';\nimport { CreateQueryOptions, Query, QueryArgs, ReadonlyQuery, RequestArgs, ResponseType } from './query';\nimport { InternalCreateQueryCreatorOptions, QueryMethod } from './query-creator';\nimport { QueryDependencies } from './query-dependencies';\nimport { queryFeatureUsedMultipleTimes, withArgsQueryFeatureMissingButRouteIsFunction } from './query-errors';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryFeature, QueryFeatureContext, QueryFeatureType } from './query-features';\nimport { QueryKeyOrNone } from './query-repository';\nimport { createQuerySnapshotFn } from './query-snapshot';\nimport { QueryState } from './query-state';\n\n/**\n * Returning this inside a withArgs feature will reset the query args to null.\n * This will also pause polling and auto refresh until new args are set.\n */\nexport const CLEAR_QUERY_ARGS = Symbol('CLEAR_QUERY_ARGS');\nexport type ClearQueryArgs = typeof CLEAR_QUERY_ARGS;\n\nexport const QUERY_EFFECT_ERROR_MESSAGE =\n 'Effect triggered too often. This is probably due to a circular dependency inside the query.';\n\n/** A angular effect that will throw an error in dev mode if it is called too often. This indicates a circular dependency inside the effect. */\nexport const queryEffect = (fn: (isFirstRun: boolean) => void, errorMessage: string, options?: CreateEffectOptions) => {\n let lastTriggerTs = 0;\n let illegalWrites = 0;\n\n let isFirstRun = true;\n\n const activeConsumer = getActiveConsumer();\n\n setActiveConsumer(null);\n\n const eff = effect(() => {\n if (isDevMode()) {\n const now = performance.now();\n\n if (now - lastTriggerTs < 100) {\n illegalWrites++;\n\n if (illegalWrites > 5) {\n throw new Error(errorMessage);\n }\n }\n\n lastTriggerTs = now;\n }\n\n fn(isFirstRun);\n\n if (isFirstRun) {\n isFirstRun = false;\n }\n }, options);\n\n setActiveConsumer(activeConsumer);\n\n return eff;\n};\n\nexport const shouldAutoExecuteQuery = (method: QueryMethod) => {\n return method === 'GET' || method === 'HEAD' || method === 'OPTIONS';\n};\n\nexport const shouldAutoExecuteGqlQuery = (method: GqlQueryMethod) => {\n return method === 'QUERY';\n};\n\nexport const extractExpiresInSeconds = (headers: HttpHeaders) => {\n const cacheControl = headers.get('cache-control');\n const age = headers.get('age');\n const expires = headers.get('expires');\n\n // In seconds\n let expiresIn: number | null = null;\n let maxAge: number | null = null;\n\n if (cacheControl?.includes('no-cache')) {\n return null;\n }\n\n if (cacheControl?.includes('max-age')) {\n 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 type ShouldRetryRequestOptions = {\n retryCount: number;\n error: HttpErrorResponse;\n};\n\nexport type ShouldRetryRequestResult =\n | {\n retry: false;\n }\n | {\n retry: true;\n delay: number;\n };\n\nexport type ShouldRetryRequestFn = (options: ShouldRetryRequestOptions) => ShouldRetryRequestResult;\n\nexport const shouldRetryRequest = (\n options: ShouldRetryRequestOptions | HttpErrorResponse,\n): ShouldRetryRequestResult => {\n const normalizedOptions =\n options instanceof HttpErrorResponse ? { retryCount: 0, error: options } : (options as ShouldRetryRequestOptions);\n const { retryCount, error } = normalizedOptions;\n const defaultRetryDelay = 1000 + 1000 * retryCount;\n\n if (retryCount > 3) {\n return { retry: false };\n }\n\n if (!(error instanceof HttpErrorResponse)) {\n return { retry: false };\n }\n\n const { status, error: detail, headers } = error;\n\n // Retry on 5xx errors (except 500 internal server error since those are usually not recoverable)\n if (status >= 501) {\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 = headers.get('retry-after') || headers.get('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 type QueryFeatureFlags = {\n hasWithArgsFeature: boolean;\n shouldAutoExecuteMethod: boolean;\n shouldAutoExecute: boolean;\n hasRouteFunction: boolean;\n onlyManualExecution?: boolean;\n\n /** Human readable method name */\n method: string;\n};\n\nexport const getQueryFeatureUsage = <TArgs extends QueryArgs>(\n options: CreateQueryOptions<TArgs> | CreateGqlQueryOptions<TArgs>,\n) => {\n const { creator, features, queryConfig, creatorInternals } = options;\n\n const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WithArgs);\n const shouldAutoExecuteMethod = isCreateGqlQueryOptions(options)\n ? shouldAutoExecuteGqlQuery(options.creatorInternals.method)\n : shouldAutoExecuteQuery(options.creatorInternals.method);\n const shouldAutoExecute = shouldAutoExecuteMethod && !queryConfig.onlyManualExecution;\n const hasRouteFunction =\n typeof (creatorInternals as InternalCreateQueryCreatorOptions<TArgs>)?.route === 'function' ||\n typeof (creator as CreateGqlQueryCreatorOptions<TArgs>)?.route === 'function';\n\n if (hasRouteFunction && !hasWithArgsFeature) {\n throw withArgsQueryFeatureMissingButRouteIsFunction();\n }\n\n const featureFnContext: QueryFeatureFlags = {\n hasWithArgsFeature,\n shouldAutoExecuteMethod,\n shouldAutoExecute,\n hasRouteFunction,\n onlyManualExecution: queryConfig.onlyManualExecution,\n method: isCreateGqlQueryOptions(options)\n ? `GQL ${options.creatorInternals.method}`\n : options.creatorInternals.method,\n };\n\n return featureFnContext;\n};\n\nexport const applyQueryFeatures = <TArgs extends QueryArgs>(\n features: QueryFeature<TArgs>[],\n context: QueryFeatureContext<TArgs>,\n) => {\n const featureTypes = new Set<QueryFeatureType>();\n\n for (const feature of features) {\n if (featureTypes.has(feature.type)) {\n throw queryFeatureUsedMultipleTimes(feature.type);\n }\n\n featureTypes.add(feature.type);\n feature.fn(context);\n }\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const maybeExecute = (options: { flags: QueryFeatureFlags; execute: InternalQueryExecute<any> }) => {\n if (options.flags.shouldAutoExecute && !options.flags.hasRouteFunction && !options.flags.hasWithArgsFeature) {\n options.execute();\n }\n};\n\nexport type CreateQueryObjectOptions<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n deps: QueryDependencies;\n execute: InternalQueryExecute<TArgs>;\n};\n\nexport const createQueryObject = <TArgs extends QueryArgs>(options: CreateQueryObjectOptions<TArgs>) => {\n const { state, execute, deps } = options;\n\n const destroy = () => deps.injector.destroy();\n const setResponse = (response: ResponseType<TArgs>) => state.response.set(response);\n const createSnapshot = createQuerySnapshotFn({ state, deps, execute });\n\n const asReadonly = () => {\n const roQuery: ReadonlyQuery<TArgs> = {\n args: state.args.asReadonly(),\n response: state.response.asReadonly(),\n latestHttpEvent: state.latestHttpEvent.asReadonly(),\n loading: state.loading.asReadonly(),\n error: state.error.asReadonly(),\n lastTimeExecutedAt: state.lastTimeExecutedAt.asReadonly(),\n id: normalizeQueryRepositoryKey(execute.currentRepositoryKey),\n createSnapshot,\n };\n\n return roQuery;\n };\n\n const query: Query<TArgs> = {\n execute,\n args: state.args.asReadonly(),\n response: state.response.asReadonly(),\n latestHttpEvent: state.latestHttpEvent.asReadonly(),\n loading: state.loading.asReadonly(),\n error: state.error.asReadonly(),\n lastTimeExecutedAt: state.lastTimeExecutedAt.asReadonly(),\n id: normalizeQueryRepositoryKey(execute.currentRepositoryKey),\n createSnapshot,\n reset: execute.reset,\n asReadonly,\n subtle: {\n destroy,\n setResponse,\n },\n };\n\n return query;\n};\n\nexport const normalizeQueryRepositoryKey = (key: Signal<QueryKeyOrNone>) =>\n computed(() => {\n const k = key();\n\n if (k === false) {\n // false means the query cannot be cached and thus it is not stored in the repository\n // We generate a random id in this case to avoid confusion\n return crypto.randomUUID();\n }\n\n return k;\n });\n\nexport const shouldCacheQuery = (method: QueryMethod) => {\n return method === 'GET' || method === 'OPTIONS' || method === 'HEAD';\n};\n\nexport const buildQueryCacheKey = (route: string, args: RequestArgs<QueryArgs> | undefined) => {\n // We need to hash the body in case it's a gql query and the query get's transported in the body\n const body = JSON.stringify(args?.body || {})\n // replace all curly braces with empty string\n .replace(/{|}/g, '')\n // replace new lines and whitespaces with empty string\n .replace(/\\s/g, '');\n\n const seed = `${route}_${body}`;\n\n let hash = 0;\n\n for (const char of seed) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;\n }\n\n // Force positive number hash.\n // 2147483647 = equivalent of Integer.MAX_VALUE.\n hash += 2147483647 + 1;\n\n return hash.toString();\n};\n","import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http';\nimport { isClassValidatorError } from '../../class-validator';\nimport { isSymfonyFormViolationListError, isSymfonyListError } from '../../symfony';\nimport { shouldRetryRequest, ShouldRetryRequestResult } from './query-utils';\n\nexport type QueryErrorResponseList = {\n isList: true;\n errors: QueryErrorResponseItem[];\n};\n\nexport type QueryErrorResponseSingle = {\n isList: false;\n error: QueryErrorResponseItem;\n};\n\nexport type QueryErrorResponse = {\n raw: HttpErrorResponse;\n retryState: ShouldRetryRequestResult;\n code: HttpStatusCode;\n} & (QueryErrorResponseList | QueryErrorResponseSingle);\n\nexport interface QueryErrorResponseItem {\n message: string;\n}\n\nexport const createQueryErrorResponse = (error: unknown): QueryErrorResponse => {\n let err = error instanceof HttpErrorResponse ? error : null;\n\n if (!err) {\n err = new HttpErrorResponse({\n error: error,\n status: 0,\n statusText: 'Unknown Error',\n });\n }\n const retryState = shouldRetryRequest(err);\n\n const detail = err.error;\n const errorList: QueryErrorResponseItem[] = [];\n\n if (isClassValidatorError(detail)) {\n for (const error of detail.message) {\n errorList.push({ message: error });\n }\n } else if (isSymfonyFormViolationListError(detail)) {\n for (const violation of detail.violations) {\n errorList.push({ message: violation.message });\n }\n } else if (isSymfonyListError(detail)) {\n for (const error of detail) {\n errorList.push({ message: error.message });\n }\n } else if (typeof detail === 'object' && !!detail && 'message' in detail && typeof detail.message === 'string') {\n errorList.push({ message: detail.message });\n } else if (typeof detail === 'object' && !!detail && 'detail' in detail && typeof detail.detail === 'string') {\n // Symfony error response (during development)\n errorList.push({ message: detail.detail });\n } else if (typeof detail === 'string') {\n errorList.push({ message: detail });\n } else if (Array.isArray(detail) && detail.length > 0 && typeof detail[0] === 'string') {\n for (const error of detail) {\n errorList.push({ message: error });\n }\n }\n\n if (errorList.length > 0) {\n return {\n isList: true,\n errors: errorList,\n raw: err,\n retryState,\n code: err.status,\n };\n } else {\n const singleError = errorList[0] ?? { message: err.message };\n\n return {\n isList: false,\n error: singleError,\n raw: err,\n retryState,\n code: err.status,\n };\n }\n};\n","import { HttpClient, HttpContext, HttpEvent, HttpEventType, HttpProgressEvent } from '@angular/common/http';\nimport { Signal, computed, signal } from '@angular/core';\nimport { Subscription, catchError, retry, tap, throwError, timer } from 'rxjs';\nimport { buildTimestampFromSeconds } from '../../request';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { CacheAdapterFn } from './query-client-config';\nimport { QueryMethod } from './query-creator';\nimport { QueryErrorResponse, createQueryErrorResponse } from './query-error-response';\nimport {\n ShouldRetryRequestFn,\n ShouldRetryRequestOptions,\n extractExpiresInSeconds,\n shouldRetryRequest,\n} from './query-utils';\n\nexport const SPEED_BUFFER_TIME_IN_MS = 2000;\n\nexport type HttpRequestTransferCacheConfig =\n | boolean\n | {\n includeHeaders?: string[];\n };\n\nexport type HttpRequestResponseType = 'json' | 'text' | 'blob' | 'arraybuffer';\n\nexport type CreateHttpRequestDependencies = {\n /** The http client instance to use for the request */\n httpClient: HttpClient;\n};\n\nexport type CreateHttpRequestClientOptions = {\n /**\n * Whether to report the progress of the request or not. If the fetch backend is used, this will only work for downloads.\n * @see https://angular.dev/guide/http/making-requests#receiving-raw-progress-events\n * @default false\n */\n reportProgress?: boolean;\n\n /**\n * Whether to include credentials in the request or not\n * @default false\n */\n withCredentials?: boolean;\n\n /**\n * This property accepts either a boolean to enable/disable transferring cache for eligible\n * requests performed using `HttpClient`, or an object, which allows to configure cache\n * parameters, such as which headers should be included (no headers are included by default).\n *\n * Setting this property will override the options passed to `provideClientHydration()` for this\n * particular request\n */\n transferCache?: HttpRequestTransferCacheConfig;\n\n /**\n * The response type of the request\n * @default 'json'\n */\n responseType?: HttpRequestResponseType;\n\n /**\n * The context of the request\n * @default undefined\n * @see https://angular.dev/guide/http/interceptors#request-and-response-metadata\n */\n context?: HttpContext;\n};\n\nexport type CreateHttpRequestOptions<TArgs extends QueryArgs> = {\n /** The HTTP method of the request */\n method: QueryMethod;\n\n /**\n * The full path of the request\n * @example 'https://api.example.com/v1/users'\n */\n fullPath: string;\n\n /** The data of the request */\n args?: RequestArgs<TArgs> | null;\n\n /** The dependencies of the request */\n dependencies: CreateHttpRequestDependencies;\n\n /** The client options of the request */\n clientOptions?: CreateHttpRequestClientOptions;\n\n /**\n * The cache adapter function to use for the request\n * @default extractExpiresInSeconds()\n */\n cacheAdapter?: CacheAdapterFn;\n\n /**\n * The retry function to use for the request\n * @default shouldRetryRequest()\n */\n retryFn?: ShouldRetryRequestFn;\n};\n\nexport type HttpRequestLoadingState = {\n /** The time when the request was executed in ms */\n executeTime: number;\n\n /** The progress of the request. Null if reportProgress is false or progress is not available / unsupported */\n progress: HttpRequestLoadingProgressState | null;\n};\n\nexport type HttpRequestLoadingProgressState = {\n /** The total number of bytes to be transferred */\n total: number;\n\n /** The number of bytes transferred */\n loaded: number;\n\n /** The percentage of the transfer that is completed */\n percentage: number;\n\n /** The speed of the transfer in bytes per millisecond */\n speed: number | null;\n\n /** The estimated remaining time in milliseconds */\n remainingTime: number | null;\n};\n\nexport type HttpRequest<TArgs extends QueryArgs> = {\n /** Executes the request */\n execute: (options?: { allowCache?: boolean }) => boolean;\n\n /** Destroys the request (cancels it if in progress) */\n destroy: () => boolean;\n\n /** The loading state of the request */\n loading: Signal<HttpRequestLoadingState | null>;\n\n /** The error state of the request */\n error: Signal<QueryErrorResponse | null>;\n\n /** The response state of the request */\n response: Signal<ResponseType<TArgs> | null>;\n\n /** The current event of the request */\n currentEvent: Signal<HttpEvent<ResponseType<TArgs>> | HttpErrorEvent | null>;\n\n /** Whether the request is stale or not aka the cache header has expired */\n isStale: Signal<boolean>;\n};\n\n/** A custom error event since the Angular http client does not provide a specific event for errors */\nexport type HttpErrorEvent = {\n type: 'error';\n error: QueryErrorResponse;\n};\n\nexport const createHttpRequest = <TArgs extends QueryArgs>(options: CreateHttpRequestOptions<TArgs>) => {\n let currentStreamSubscription = Subscription.EMPTY;\n\n const { args, clientOptions, dependencies } = options;\n\n const currentEvent = signal<HttpEvent<ResponseType<TArgs>> | HttpErrorEvent | null>(null);\n const loading = signal<HttpRequestLoadingState | null>(null);\n const error = signal<QueryErrorResponse | null>(null);\n const response = signal<ResponseType<TArgs> | null>(null);\n\n const lastLoadEventTime = signal(0);\n const lastLoadEventAmount = signal(0);\n const lastExecuteTime = signal(0);\n const expiresIn = signal<number | null>(null);\n\n const isStale = computed(() => {\n const expiresInTs = expiresIn();\n\n return expiresInTs === null || expiresInTs < Date.now();\n });\n\n const stream = dependencies.httpClient\n .request(options.method, options.fullPath, {\n observe: 'events',\n body: args?.body,\n reportProgress: clientOptions?.reportProgress,\n withCredentials: clientOptions?.withCredentials,\n transferCache: clientOptions?.transferCache,\n responseType: clientOptions?.responseType || 'json',\n context: clientOptions?.context,\n headers: args?.headers,\n })\n .pipe(\n tap((event) => updateState(event)),\n retry({\n delay: (error, retryCount) => {\n const retryOptions: ShouldRetryRequestOptions = { error, retryCount };\n\n const retryResult = options.retryFn?.(retryOptions) || shouldRetryRequest(retryOptions);\n\n if (!retryResult.retry) {\n return throwError(() => error);\n }\n\n return timer(retryResult.delay);\n },\n }),\n catchError((e) => {\n updateErrorState(e);\n\n return throwError(() => e);\n }),\n );\n\n const execute = (options?: { allowCache?: boolean }) => {\n if (loading() || (!isStale() && options?.allowCache)) {\n // Do not execute if there is already a request in progress or caching is allowed\n return false;\n }\n\n currentStreamSubscription.unsubscribe();\n\n lastExecuteTime.set(Date.now());\n lastLoadEventTime.set(lastExecuteTime());\n\n loading.set({\n executeTime: lastExecuteTime(),\n progress: null,\n });\n error.set(null);\n expiresIn.set(null);\n\n currentStreamSubscription = stream.subscribe();\n\n return true;\n };\n\n const destroy = () => {\n if (currentStreamSubscription.closed) {\n return false;\n }\n\n currentStreamSubscription.unsubscribe();\n\n return true;\n };\n\n const updateState = (event: HttpEvent<ResponseType<TArgs>>) => {\n currentEvent.set(event);\n\n switch (event.type) {\n case HttpEventType.Response:\n {\n loading.set(null);\n response.set(event.body);\n\n const expiresInSeconds = options.cacheAdapter\n ? options.cacheAdapter(event.headers)\n : extractExpiresInSeconds(event.headers);\n const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);\n expiresIn.set(expiresInTimestamp);\n }\n break;\n\n case HttpEventType.UploadProgress:\n case HttpEventType.DownloadProgress:\n {\n updateLoadingState(event);\n }\n break;\n\n case HttpEventType.Sent:\n case HttpEventType.ResponseHeader:\n case HttpEventType.User:\n {\n // we don't care about these events\n }\n break;\n }\n };\n\n const updateErrorState = (errorResponse: unknown) => {\n const errorRes = createQueryErrorResponse(errorResponse);\n\n error.set(errorRes);\n loading.set(null);\n currentEvent.set({ type: 'error', error: errorRes });\n };\n\n const updateLoadingState = (event: HttpProgressEvent) => {\n if (event.total === undefined) {\n return;\n }\n\n const progress: HttpRequestLoadingProgressState = {\n total: event.total,\n loaded: event.loaded,\n percentage: (event.loaded / event.total) * 100,\n speed: null,\n remainingTime: null,\n };\n\n const state: HttpRequestLoadingState = {\n executeTime: lastExecuteTime(),\n progress,\n };\n\n const currentTime = Date.now();\n const elapsedTimeSinceLastEvent = currentTime - lastLoadEventTime();\n const elapsedTimeSinceLastExecute = currentTime - lastExecuteTime();\n const loadedAmount = event.loaded - lastLoadEventAmount();\n\n // We only want to calculate speed and remaining time after 2 seconds of the execution\n // This is to avoid showing incorrect speed and remaining time when the request is very fast\n if (elapsedTimeSinceLastExecute > SPEED_BUFFER_TIME_IN_MS) {\n const speed = (loadedAmount / elapsedTimeSinceLastEvent) * 1000;\n\n progress.speed = speed * 1000;\n progress.remainingTime = Math.round((event.total - event.loaded) / speed) * 1000;\n }\n\n lastLoadEventTime.set(currentTime);\n lastLoadEventAmount.set(event.loaded);\n\n loading.set(state);\n };\n\n const httpRequest: HttpRequest<TArgs> = {\n execute,\n destroy,\n loading: loading.asReadonly(),\n error: error.asReadonly(),\n response: response.asReadonly(),\n currentEvent: currentEvent.asReadonly(),\n isStale,\n };\n\n return httpRequest;\n};\n","import { HttpEvent } from '@angular/common/http';\nimport { computed, Signal, untracked } from '@angular/core';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { QueryDependencies } from './query-dependencies';\nimport { QueryErrorResponse } from './query-error-response';\nimport {\n withAutoRefreshUsedInManualQuery,\n withAutoRefreshUsedOnUnsupportedHttpMethod,\n withPollingUsedOnUnsupportedHttpMethod,\n} from './query-errors';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryState } from './query-state';\nimport {\n CLEAR_QUERY_ARGS,\n ClearQueryArgs,\n QUERY_EFFECT_ERROR_MESSAGE,\n queryEffect,\n QueryFeatureFlags,\n} from './query-utils';\n\nexport const enum QueryFeatureType {\n WithArgs = 'withArgs',\n WithLogging = 'withLogging',\n WithErrorHandling = 'withErrorHandling',\n WithSuccessHandling = 'withSuccessHandling',\n WithPolling = 'withPolling',\n WithAutoRefresh = 'withAutoRefresh',\n WithResponseUpdate = 'withResponseUpdate',\n}\n\nexport type QueryFeatureContext<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n execute: InternalQueryExecute<TArgs>;\n deps: QueryDependencies;\n flags: QueryFeatureFlags;\n};\n\nexport type QueryFeatureFn<TArgs extends QueryArgs> = (context: QueryFeatureContext<TArgs>) => void;\n\nexport type QueryFeature<TArgs extends QueryArgs> = {\n type: QueryFeatureType;\n fn: (context: QueryFeatureContext<TArgs>) => void;\n};\n\nconst createQueryFeature = <TArgs extends QueryArgs>(config: { type: QueryFeatureType; fn: QueryFeatureFn<TArgs> }) => {\n return config as QueryFeature<TArgs>;\n};\n\n/**\n * A query feature that allows you to set the arguments of the query.\n * The arguments are read within a computed function, so you can use reactive values.\n *\n * To set the arguments to `null`, return the symbol `CLEAR_QUERY_ARGS`.\n * If you instead return `null`, the arguments won't change.\n *\n * Changing arguments will automatically trigger a new execution of the query if it is eligible for auto execution (e.g. a GET request).\n */\nexport const withArgs = <TArgs extends QueryArgs>(args: () => NoInfer<RequestArgs<TArgs>> | ClearQueryArgs | null) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithArgs,\n fn: (context) => {\n const currArgs = computed(() => args());\n\n queryEffect(\n () => {\n const currArgsNow = currArgs();\n\n if (currArgsNow === null) return;\n\n untracked(() => {\n if (currArgsNow === CLEAR_QUERY_ARGS) {\n context.state.args.set(null);\n return;\n }\n\n context.state.args.set(currArgsNow);\n\n if (context.flags.shouldAutoExecute) context.execute({ args: currArgsNow });\n });\n },\n QUERY_EFFECT_ERROR_MESSAGE,\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithPollingFeatureOptions = {\n /** The interval in milliseconds at which the query should be executed */\n interval: number;\n\n /**\n * Whether the query should be executed initially.\n * By default, the query will be executed after the first interval.\n * @default false\n */\n executeInitially?: boolean;\n};\n\n/**\n * A query feature that will automatically execute the query at a given interval.\n * The interval will be cleared when the query is destroyed.\n * The interval will be reset when the arguments of the query change.\n *\n * @throws If the query is not eligible for auto execution (e.g. a POST request)\n */\nexport const withPolling = <TArgs extends QueryArgs>(options: WithPollingFeatureOptions) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithPolling,\n fn: (context) => {\n if (!context.flags.shouldAutoExecuteMethod) {\n throw withPollingUsedOnUnsupportedHttpMethod(context.flags.method);\n }\n\n let intervalId: number | null = null;\n\n queryEffect(\n () => {\n const args = context.state.args();\n\n untracked(() => {\n if (intervalId !== null) clearInterval(intervalId);\n\n // Don't start polling if the query doesn't have args.\n // It should have args because a withArgs feature is present.\n if (args === null && context.flags.hasWithArgsFeature) return;\n\n if (options.executeInitially) {\n context.execute({ args });\n }\n\n intervalId = window.setInterval(() => {\n context.execute({ args });\n }, options.interval);\n });\n },\n QUERY_EFFECT_ERROR_MESSAGE,\n { injector: context.deps.injector },\n );\n\n context.deps.destroyRef.onDestroy(() => intervalId !== null && clearInterval(intervalId));\n },\n });\n};\n\nexport type WithLoggingFeatureOptions<TArgs extends QueryArgs> = {\n /** A function that will be called with the latest http event */\n logFn: (v: HttpEvent<ResponseType<TArgs>> | null) => void;\n};\n\n/** A query feature that can be used to log the latest http event */\nexport const withLogging = <TArgs extends QueryArgs>(options: WithLoggingFeatureOptions<TArgs>) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithLogging,\n fn: (context) => {\n queryEffect(\n () => {\n const event = context.state.latestHttpEvent();\n\n if (event === null) return;\n\n untracked(() => {\n options.logFn(event);\n });\n },\n QUERY_EFFECT_ERROR_MESSAGE,\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithErrorHandlingFeatureOptions = {\n /** A function that will be called with the latest error */\n handler: (e: QueryErrorResponse) => void;\n};\n\n/** A query feature that can be used to handle errors */\nexport const withErrorHandling = <TArgs extends QueryArgs>(options: WithErrorHandlingFeatureOptions) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithErrorHandling,\n fn: (context) => {\n queryEffect(\n () => {\n const error = context.state.error();\n\n if (error === null) return;\n\n untracked(() => {\n options.handler(error);\n });\n },\n QUERY_EFFECT_ERROR_MESSAGE,\n { injector: context.deps.injector },\n );\n },\n });\n};\n\ntype WithSuccessHandlingFeatureOptions<TArgs extends QueryArgs> = {\n /** A function that will be called with the latest response */\n handler: (data: NonNullable<ResponseType<TArgs>>) => void;\n};\n\n/** A query feature that can be used to handle successful responses */\nexport const withSuccessHandling = <TArgs extends QueryArgs>(options: WithSuccessHandlingFeatureOptions<TArgs>) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithSuccessHandling,\n fn: (context) => {\n queryEffect(\n () => {\n const response = context.state.response();\n\n if (response === null) return;\n\n untracked(() => {\n options.handler(response as NonNullable<ResponseType<TArgs>>);\n });\n },\n QUERY_EFFECT_ERROR_MESSAGE,\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithAutoRefreshFeatureOptions = {\n /** The signals that should trigger a refresh of the query */\n onSignalChanges: Signal<unknown>[];\n\n /** Whether to ignore the `onlyManualExecution` query config flag */\n ignoreOnlyManualExecution?: boolean;\n};\n\n/**\n * A query feature that will automatically execute the query when any of the provided signals change\n * @throws If the query is not eligible for auto execution (e.g. a POST request)\n * @throws If the query has the `onlyManualExecution` query config flag set and `ignoreOnlyManualExecution` is not set\n */\nexport const withAutoRefresh = <TArgs extends QueryArgs>(options: WithAutoRefreshFeatureOptions) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithAutoRefresh,\n fn: (context) => {\n if (!context.flags.shouldAutoExecuteMethod) {\n throw withAutoRefreshUsedOnUnsupportedHttpMethod(context.flags.method);\n }\n\n if (context.flags.onlyManualExecution && !options.ignoreOnlyManualExecution) {\n throw withAutoRefreshUsedInManualQuery();\n }\n\n queryEffect(\n () => {\n for (const signal of options.onSignalChanges) {\n signal();\n }\n\n untracked(() => {\n const args = context.state.args();\n\n // Don't start polling if the query doesn't have args.\n // It should have args because a withArgs feature is present.\n if (args === null && context.flags.hasWithArgsFeature) return;\n\n context.execute({ args });\n });\n },\n QUERY_EFFECT_ERROR_MESSAGE,\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithResponseUpdateFeatureFnData<TArgs extends QueryArgs> = {\n /** The current response of the query */\n currentResponse: ResponseType<TArgs> | null;\n};\n\nexport type WithResponseUpdateFeatureOptions<TArgs extends QueryArgs> = {\n /**\n * A function that will be called with the latest response\n * If the function returns `null`, the response will not be updated.\n * Otherwise, the response will be updated with the returned value.\n * The function will be called in a reactive signal context.\n * If the query get's executed after the response was updated, the response will be set the the fresh data received from the server.\n *\n * This feature is most useful in combination with web sockets where the data received from the socket might be more up-to-date than the data received previously.\n *\n * @example\n * const matchEvents = mySocket.joinRoom('match-events');\n *\n * const myMatchQuery = getMatch(\n * withArgs(() => ({ matchId: 1 })),\n * withResponseUpdate(({ currentResponse }) => {\n * const matchEvent = matchEvents();\n *\n * if (!matchEvent) return null;\n *\n * // Do some checks here. This is just a very simple example.\n * // To apply partial updates, you can use the spread operator in combination with the current response.\n *\n * return matchEvent;\n * })\n * )\n */\n updater: (data: WithResponseUpdateFeatureFnData<TArgs>) => ResponseType<TArgs> | null;\n};\n\nexport const withResponseUpdate = <TArgs extends QueryArgs>(options: WithResponseUpdateFeatureOptions<TArgs>) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithResponseUpdate,\n fn: (context) => {\n queryEffect(\n () => {\n const currentResponse = untracked(() => context.state.response());\n const response = options.updater({ currentResponse });\n\n if (response === null) return;\n\n untracked(() => {\n context.state.response.set(response);\n });\n },\n QUERY_EFFECT_ERROR_MESSAGE,\n { injector: context.deps.injector },\n );\n },\n });\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, effect, inject, Injector, runInInjectionContext, Signal, signal, untracked } from '@angular/core';\nimport { AnyQuery, RequestArgs, ResponseType } from './query';\nimport { AnyQueryCreator, QueryArgsOf, RunQueryCreator } from './query-creator';\nimport { QueryErrorResponse } from './query-error-response';\nimport { queryStackWithArgsUsed, queryStackWithResponseUpdateUsed } from './query-errors';\nimport { QueryFeature, QueryFeatureType, withArgs } from './query-features';\n\nexport type QueryStack<TQuery extends AnyQuery, TTransform> = {\n /** Contains all queries in the stack. */\n queries: Signal<TQuery[]>;\n\n /** Contains the last query in the stack. Useful for getting current pagination values. */\n lastQuery: Signal<TQuery | null>;\n\n /** True if any query in the stack is loading. */\n loading: Signal<boolean>;\n\n /** Contains the first error that occurred in the stack. */\n error: Signal<QueryErrorResponse | null>;\n\n /** Contains the responses of all queries in the stack. Will be `null` for queries that are loading or errored. */\n response: Signal<TTransform>;\n\n /** Executes all queries in the stack. */\n execute: (options?: { allowCache?: boolean }) => void;\n\n /** Destroys all queries in the stack and empties it. This should only be used if `append` is true. */\n clear: () => void;\n};\n\nexport type AnyQueryStack = QueryStack<AnyQuery, any>;\n\nexport type CreateQueryStackOptions<\n TCreator extends AnyQueryCreator,\n TDeps extends () => any,\n TTransform = (ResponseType<QueryArgsOf<TCreator>> | null)[],\n> = {\n /**\n * The query creator function that will be used to create the query stack.\n */\n queryCreator: TCreator;\n\n /**\n * The dependencies that should trigger a new query stack creation.\n * This function can be treated like a computed function. It reacts to signal changes.\n * The return value of this function will be passed to the `args` function.\n *\n * This option can be ignored if `append` is false.\n */\n dependencies?: TDeps;\n\n /**\n * The features that should be used for all queries in the stack.\n *\n * @throws If the `withArgs` feature is used. This feature is internally used.\n *\n * @example\n * // Due to limitations in TypeScript, you have to manually add the needed generic types if needed.\n * features: [E.withSuccessHandling<GetPostQueryArgs>({ handler: (post) => console.log(post.title) })]\n *\n * @example\n * // If typings are not needed, you can use the feature without generics.\n * features: [E.withPolling({ interval: 5000 })]\n */\n features?: QueryFeature<any>[];\n\n /**\n * The arguments to create queries with.\n * This function can be treated like a computed function. It reacts to signal changes.\n * If a signal changes, a new query will be created (and appended to the existing ones if `append` is true).\n * If this function returns `null`, the args will be ignored.\n * If this function returns an array, multiple queries will be created.\n *\n * @example\n * // One query\n * () => ({ queryParams: { postId: myId() } }),\n *\n * @example\n * // Multiple queries (these can of cause also be created using a loop)\n * () => [\n * { queryParams: { postId: myId() } },\n * { queryParams: { postId: myOtherId() } },\n * ],\n *\n * @example\n * // One query with dependencies\n * (deps) => ({ queryParams: { postId: myId(), limit: deps.limit } }),\n */\n args: (deps: ReturnType<TDeps>) => RequestArgs<QueryArgsOf<TCreator>> | RequestArgs<QueryArgsOf<TCreator>>[] | null;\n\n /**\n * If true, new queries will be appended to the existing ones. Otherwise, existing queries will be destroyed.\n * This should be used for things like infinite scrolling where already fetched queries should not be destroyed.\n */\n append?: boolean;\n\n /**\n * If append is true, this function will be called to merge the old and new queries.\n * Useful if you want to append the new queries in a specific order (e.g. at the beginning).\n */\n appendFn?: (\n oldQueries: RunQueryCreator<TCreator>[],\n newQueries: RunQueryCreator<TCreator>[],\n ) => {\n /** The new queries merged with the old ones. */\n queries: RunQueryCreator<TCreator>[];\n\n /** The last query in the new queries. */\n lastQuery: RunQueryCreator<TCreator> | null;\n };\n\n /**\n * Transforms the responses of all queries in the stack. Useful for merging or filtering responses.\n */\n transform?: (responses: ResponseType<QueryArgsOf<TCreator>>[]) => TTransform;\n};\n\n/** Transforms an array of arrays into a single array and filters out `null` values. */\nexport const transformArrayResponse = <T extends (unknown | null)[]>(responses: T) =>\n responses.filter((r) => !!r).flatMap((r) => r) as NonNullable<T[0]>[];\n\n/** Transforms an array of paginated responses into a single array and filters out `null` values. */\nexport const transformPaginatedResponse = <T extends ({ items: unknown[] } | null)[]>(responses: T) =>\n responses.filter((r) => !!r).flatMap((r) => r.items) as NonNullable<NonNullable<T[0]>['items']>;\n\nexport const createQueryStack = <\n TCreator extends AnyQueryCreator,\n TArgs extends QueryArgsOf<TCreator>,\n TDeps extends () => any,\n TTransform = (ResponseType<TArgs> | null)[],\n>(\n options: CreateQueryStackOptions<TCreator, TDeps, TTransform>,\n) => {\n type QueryType = RunQueryCreator<TCreator>;\n\n const {\n args,\n queryCreator,\n dependencies,\n append,\n features = [],\n appendFn = (oldQueries: QueryType[], newQueries: QueryType[]) => {\n const queries = [...oldQueries, ...newQueries];\n const lastQuery = newQueries[newQueries.length - 1] ?? oldQueries[oldQueries.length - 1] ?? null;\n\n return { queries, lastQuery };\n },\n transform,\n } = options ?? {};\n\n const injector = inject(Injector);\n\n const queries = signal<QueryType[]>([]);\n const lastQuery = signal<QueryType | null>(null);\n\n const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WithArgs);\n const hasWithOptimisticUpdateFeature = features.some((f) => f.type == QueryFeatureType.WithResponseUpdate);\n\n if (hasWithArgsFeature) {\n throw queryStackWithArgsUsed();\n }\n\n if (hasWithOptimisticUpdateFeature) {\n throw queryStackWithResponseUpdateUsed();\n }\n\n effect(() => {\n // Clear the stack if dependencies change\n dependencies?.();\n\n untracked(() => clear());\n });\n\n effect(() => {\n const newArgs = args(dependencies?.());\n\n if (newArgs === null) return;\n\n const newArgsArray = Array.isArray(newArgs) ? newArgs : [newArgs];\n\n const newQueries = runInInjectionContext(injector, () =>\n newArgsArray.map(\n (newArgsEntry) =>\n queryCreator(\n withArgs(() => newArgsEntry),\n ...features,\n ) as QueryType,\n ),\n );\n\n untracked(() => {\n const oldQueries = queries();\n\n if (append) {\n const { queries: appendedQueries, lastQuery: lastAppendedQuery } = appendFn(oldQueries, newQueries);\n queries.set(appendedQueries);\n lastQuery.set(lastAppendedQuery);\n } else {\n for (const oldQuery of oldQueries) {\n if (!newQueries.some((q) => q.id() === oldQuery.id())) {\n oldQuery.subtle.destroy();\n }\n }\n queries.set(newQueries);\n lastQuery.set(newQueries[newQueries.length - 1] ?? null);\n }\n });\n });\n\n const loading = computed(() => queries().some((q) => q.loading()));\n\n const error = computed(\n () =>\n queries()\n .map((q) => q.error())\n .find((e) => e !== null) ?? null,\n );\n\n const response = computed(() => {\n const responses = queries().map((q) => q.response());\n return transform?.(responses) ?? responses;\n }) as Signal<TTransform>;\n\n const execute = (options?: { allowCache?: boolean }) => {\n for (const query of queries()) {\n query.execute({ options: { allowCache: options?.allowCache } });\n }\n };\n\n const clear = () => {\n for (const query of queries()) {\n query.subtle.destroy();\n }\n\n queries.set([]);\n lastQuery.set(null);\n };\n\n const stack: QueryStack<QueryType, TTransform> = {\n queries: queries.asReadonly(),\n lastQuery: lastQuery.asReadonly(),\n loading,\n error,\n response,\n execute,\n clear,\n };\n\n return stack;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, effect, isDevMode, Signal, signal, untracked } from '@angular/core';\nimport {\n ContentfulGqlLikePaginated,\n DynLikePaginated,\n GgLikePaginated,\n NormalizedPagination,\n Paginated,\n} from '@ethlete/types';\nimport { AnyQuery, Query, QueryArgs, RequestArgs, ResponseType } from './query';\nimport { AnyQueryCreator, QueryArgsOf, QueryCreator } from './query-creator';\nimport { QueryErrorResponse } from './query-error-response';\nimport {\n pagedQueryStackNextPageCalledWithoutPreviousPage,\n pagedQueryStackPageBiggerThanTotalPages,\n pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage,\n} from './query-errors';\nimport { QueryFeature } from './query-features';\nimport { createQueryStack, transformArrayResponse } from './query-stack';\nimport { shouldRetryRequest } from './query-utils';\n\nexport const ethletePaginationAdapter = <T>(response: Paginated<T>) => {\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages: response.totalPageCount,\n currentPage: response.currentPage,\n itemsPerPage: response.itemsPerPage,\n totalHits: response.totalHits,\n };\n\n return pagination;\n};\n\nexport const ggLikePaginationAdapter = <T>(response: GgLikePaginated<T>) => {\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages: response.totalPageCount,\n currentPage: response.currentPage,\n itemsPerPage: response.itemsPerPage,\n totalHits: response.totalHits,\n };\n\n return pagination;\n};\n\nexport const dynLikePaginationAdapter = <T>(response: DynLikePaginated<T>) => {\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages: response.totalPages,\n currentPage: response.currentPage,\n itemsPerPage: response.limit,\n totalHits: response.totalHits,\n };\n\n return pagination;\n};\n\nexport const contentfulGqlLikePaginationAdapter = <T>(response: ContentfulGqlLikePaginated<T>) => {\n const totalPages = Math.max(Math.ceil(response.total / response.limit), 1); // If there are no items, there is still one page\n const currentPage = Math.max(Math.ceil(response.skip / response.limit) + 1, 1);\n\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages,\n currentPage,\n itemsPerPage: response.limit,\n totalHits: response.total,\n };\n\n return pagination;\n};\n\nexport const fakePaginationAdapter = (totalHits = 10) => {\n return <T>(response: T) => {\n const pagination: NormalizedPagination<T> = {\n items: [response],\n totalPages: totalHits,\n currentPage: 1,\n itemsPerPage: 1,\n totalHits,\n };\n\n return pagination;\n };\n};\n\nexport type CreatePagedQueryStackOptions<\n TArgs extends QueryArgs,\n TNormPagination extends NormalizedPagination<unknown>,\n> = {\n /**\n * The normalizer function that will be used to normalize the response to a format that the paged query can understand.\n *\n * There are some built-in normalizers that can be used:\n * - `ethletePaginationAdapter`\n * - `ggLikePaginationAdapter`\n * - `dynLikePaginationAdapter`\n * - `contentfulGqlLikePaginationAdapter`\n * - `fakePaginationAdapter` (for testing purposes)\n *\n * @param currentResponse The current response that was fetched.\n * @param allResponses All responses that were fetched till now including the current response and pagination.\n */\n responseNormalizer: (\n currentResponse: ResponseType<TArgs>,\n allResponses: NonNullable<ResponseType<TArgs>>[],\n ) => TNormPagination;\n\n /**\n * The query creator function that will be used to create the paged query.\n */\n queryCreator: QueryCreator<TArgs>;\n\n /**\n * The arguments to create the query.\n * The current page will be passed as an argument.\n * This function can be treated like a computed function. It reacts to signal changes.\n * If a signal changes, the paged query will be reset to the initial page.\n *\n * @example (page) => ({ queryParams: { page, limit:20 } }),\n *\n * @param page The page to fetch next. **Do not modify this argument.**\n * @param allResponses All responses that were fetched till now including pagination.\n */\n args: (page: number, allResponses: NonNullable<ResponseType<TArgs>>[]) => RequestArgs<TArgs> | null;\n\n /**\n * The features that should be used for all queries in the stack.\n *\n * @throws If the `withArgs` feature is used. This feature is internally used.\n *\n * @example\n * // Due to limitations in TypeScript, you have to manually add the needed generic types if needed.\n * features: [E.withSuccessHandling<GetPostQueryArgs>({ handler: (post) => console.log(post.title) })]\n *\n * @example\n * // If typings are not needed, you can use the feature without generics.\n * features: [E.withPolling({ interval: 5000 })]\n */\n features?: QueryFeature<any>[];\n\n /**\n * The page to start this paged query from.\n * @default 1\n */\n initialPage?: number;\n};\n\nexport type PagedQueryStackResetOptions = {\n /**\n * The page to reset this paged query to.\n * This will clear everything and start from this page.\n * @default 1 // or the value passed in the `initialPage` option when creating the paged query.\n */\n initialPage?: number;\n};\n\nexport type PagedQueryStackExecuteOptions<TNormPagination extends NormalizedPagination<unknown>> = {\n /**\n * If provided, only the queries that match the condition will be executed.\n * This will also execute the previous and next query to the one that matched the condition.\n * If not provided, all queries will be executed.\n *\n * @example\n * myPagedQuery.execute({ where: (item) => item.id === 4 });\n */\n where?: (item: TNormPagination['items'][number], index: number, array: TNormPagination['items']) => boolean;\n\n /**\n * If true, the cache will be used (if not expired) and the request will not be made.\n * @default false\n */\n allowCache?: boolean;\n};\n\nexport type PagedQueryStackDirection = 'next' | 'previous';\n\nexport type AnyPagedQueryStack = PagedQueryStack<AnyQuery, NormalizedPagination<unknown>>;\n\nexport type PagedQueryStack<TQuery extends AnyQuery, TNormPagination extends NormalizedPagination<unknown>> = {\n /**\n * The current pagination state of the paged query.\n */\n pagination: Signal<TNormPagination | null>;\n\n /**\n * Fetches the previous page of the paged query.\n *\n * @throws If the paged query is already at the first page.\n */\n fetchPreviousPage: () => void;\n\n /**\n * Fetches the next page of the paged query.\n *\n * @throws If the paged query is already at the last page.\n */\n fetchNextPage: () => void;\n\n /**\n * Whether the previous page can be fetched or not.\n *\n * This will be false if the paged query is already at the first page or if the paged query is loading.\n */\n canFetchPreviousPage: Signal<boolean>;\n\n /**\n * Whether the next page can be fetched or not.\n *\n * This will be false if the paged query is already at the last page or if the paged query is loading.\n */\n canFetchNextPage: Signal<boolean>;\n\n /**\n * The items of the paged query.\n */\n items: Signal<TNormPagination['items']>;\n\n /**\n * Whether the paged query is loading or not.\n */\n loading: Signal<boolean>;\n\n /**\n * The error that occurred during the last execution of the paged query.\n */\n error: Signal<QueryErrorResponse | null>;\n\n /**\n * The last query executed in the paged query.\n */\n lastQuery: Signal<Query<QueryArgsOf<TQuery>> | null>;\n\n /**\n * Whether the paged query is on its first load or not.\n */\n isFirstLoad: Signal<boolean>;\n\n /**\n * The queries in the paged query stack.\n */\n queries: Signal<TQuery[]>;\n\n /**\n * Resets the paged query to the initial page.\n */\n reset: (resetOptions?: PagedQueryStackResetOptions) => void;\n\n /**\n * Executes the paged query.\n */\n execute: (options?: PagedQueryStackExecuteOptions<TNormPagination>) => void;\n\n /**\n * The current direction of the paged query.\n */\n direction: Signal<PagedQueryStackDirection>;\n};\n\nexport const createPagedQueryStack = <\n TCreator extends AnyQueryCreator,\n TArgs extends QueryArgsOf<TCreator>,\n TNormPagination extends NormalizedPagination<unknown>,\n>(\n options: CreatePagedQueryStackOptions<TArgs, TNormPagination>,\n) => {\n const { responseNormalizer, queryCreator, features } = options;\n\n const currentPageArgs = signal<RequestArgs<TArgs> | null>(null);\n const initialPage = signal(options.initialPage ?? 1);\n const loadedMinPage = signal(initialPage());\n const loadedMaxPage = signal(initialPage());\n const lastResetTimestamp = signal(Date.now());\n\n const pageDirection = signal<PagedQueryStackDirection>('next');\n\n const stack = createQueryStack({\n args: () => currentPageArgs(),\n queryCreator,\n append: true,\n features,\n appendFn: (oldQueries, newQueries) => {\n const newQuery = newQueries[0];\n const dir = pageDirection();\n\n if (!newQuery) {\n const lastQuery = oldQueries[oldQueries.length - 1] ?? null;\n return { queries: oldQueries, lastQuery };\n } else if (dir === 'previous') {\n return { queries: [newQuery, ...oldQueries], lastQuery: newQuery };\n } else {\n return { queries: [...oldQueries, newQuery], lastQuery: newQuery };\n }\n },\n transform: transformArrayResponse,\n });\n\n effect(() => {\n lastResetTimestamp();\n\n const args = options.args(initialPage(), []);\n\n untracked(() => {\n stack.clear();\n currentPageArgs.set(args);\n loadedMinPage.set(initialPage());\n loadedMaxPage.set(initialPage());\n });\n });\n\n const pagination = computed(() => {\n const res = stack.lastQuery()?.response();\n const all = stack.response();\n\n if (!res) return null;\n\n return responseNormalizer(res, all);\n });\n\n const fetchPreviousPage = () => {\n const page = loadedMinPage() - 1;\n const allResponses = stack.response();\n\n if (page < 1) {\n if (isDevMode()) {\n throw pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage();\n }\n\n return;\n }\n\n currentPageArgs.set(options.args(page, allResponses));\n loadedMinPage.set(page);\n pageDirection.set('previous');\n };\n\n const fetchNextPage = () => {\n const page = loadedMaxPage() + 1;\n const currentPagination = pagination();\n const allResponses = stack.response();\n\n if (!currentPagination) {\n if (isDevMode()) {\n throw pagedQueryStackNextPageCalledWithoutPreviousPage();\n }\n\n return;\n }\n\n if (page > currentPagination.totalPages) {\n if (isDevMode()) {\n throw pagedQueryStackPageBiggerThanTotalPages(page, currentPagination.totalPages);\n }\n\n return;\n }\n\n currentPageArgs.set(options.args(page, allResponses));\n loadedMaxPage.set(page);\n pageDirection.set('next');\n };\n\n const reset = (resetOptions?: PagedQueryStackResetOptions) => {\n const page = resetOptions?.initialPage ?? initialPage();\n\n initialPage.set(page);\n pageDirection.set('next');\n lastResetTimestamp.set(Date.now());\n };\n\n const canFetchPreviousPage = computed(() => {\n const currentPagination = pagination();\n\n if (!currentPagination) return false;\n\n return loadedMinPage() > 1;\n });\n const canFetchNextPage = computed(() => {\n const currentPagination = pagination();\n\n return currentPagination ? loadedMaxPage() < currentPagination.totalPages : false;\n });\n\n const items = computed(() => {\n const res = stack.response();\n return res.map((r) => responseNormalizer(r, res).items).flat();\n });\n\n const isFirstLoad = computed(() => {\n return stack.queries().length === 1 && !!stack.lastQuery()?.loading();\n });\n\n const execute = (options?: PagedQueryStackExecuteOptions<TArgs>) => {\n const whereFn = options?.where;\n\n if (whereFn) {\n const queriesToExecute = new Set<Query<TArgs>>();\n const all = stack.response();\n\n for (const [index, query] of stack.queries().entries()) {\n const res = query.response();\n const err = query.error();\n const isErroredAndCanBeRetried = err && shouldRetryRequest(err.raw);\n\n if (isErroredAndCanBeRetried) {\n queriesToExecute.add(query);\n } else if (res) {\n if (responseNormalizer(res, all).items.some((item, i, a) => whereFn(item, i, a))) {\n queriesToExecute.add(query);\n\n // Also execute the previous and next query to the one that matched the condition.\n\n if (index !== 0) {\n const prevQuery = stack.queries()[index - 1];\n\n if (prevQuery) {\n queriesToExecute.add(prevQuery);\n }\n }\n\n if (index !== stack.queries().length - 1) {\n const nextQuery = stack.queries()[index + 1];\n\n if (nextQuery) {\n queriesToExecute.add(nextQuery);\n }\n }\n }\n }\n }\n\n for (const query of queriesToExecute) {\n query.execute({ options: { allowCache: options.allowCache } });\n }\n } else {\n stack.execute({ allowCache: options?.allowCache });\n }\n };\n\n const pagedQuery: PagedQueryStack<Query<TArgs>, TNormPagination> = {\n pagination,\n fetchPreviousPage,\n fetchNextPage,\n canFetchPreviousPage,\n canFetchNextPage,\n items,\n direction: pageDirection.asReadonly(),\n loading: stack.loading,\n error: stack.error,\n lastQuery: stack.lastQuery,\n isFirstLoad,\n queries: stack.queries,\n reset,\n execute,\n };\n\n return pagedQuery;\n};\n","import { DestroyRef, EnvironmentInjector, createEnvironmentInjector, inject } from '@angular/core';\nimport { QueryClient } from './query-client';\nimport { QueryClientConfig } from './query-client-config';\n\nexport type SetupQueryDependenciesOptions = {\n clientConfig: QueryClientConfig;\n};\n\nexport type QueryDependencies = {\n /** The destroy ref of the query. */\n destroyRef: DestroyRef;\n\n /** The destroy ref of the scope the query is in (e.g. a component) */\n scopeDestroyRef: DestroyRef;\n\n /** The query client */\n client: QueryClient;\n\n /** The injector of the query */\n injector: EnvironmentInjector;\n};\n\nexport const setupQueryDependencies = (options: SetupQueryDependenciesOptions) => {\n const environmentInjector = inject(EnvironmentInjector);\n const queryEnvironmentInjector = createEnvironmentInjector([], environmentInjector);\n const destroyRef = queryEnvironmentInjector.get(DestroyRef);\n const scopeDestroyRef = inject(DestroyRef);\n const client = inject(options.clientConfig.token);\n\n const dependencies: QueryDependencies = {\n destroyRef,\n scopeDestroyRef,\n client,\n injector: queryEnvironmentInjector,\n };\n\n // cleanup the environment injector when the scope (e.g. the component the query is in) is destroyed\n const scopeDestroyListener = scopeDestroyRef.onDestroy(() => {\n try {\n queryEnvironmentInjector.destroy();\n } catch {\n // ignore\n }\n });\n\n destroyRef.onDestroy(() => {\n // cleanup the scope destroy listener\n try {\n scopeDestroyListener();\n } catch {\n // ignore\n }\n });\n\n return dependencies;\n};\n","import { computed, EffectRef, runInInjectionContext, signal, WritableSignal } from '@angular/core';\nimport { syncSignal } from '@ethlete/core';\nimport { QueryArgs, RequestArgs } from './query';\nimport { CreateQueryExecuteOptions } from './query-execute';\n\nexport type ResetExecuteStateOptions<TArgs extends QueryArgs> = {\n executeOptions: Pick<CreateQueryExecuteOptions<TArgs>, 'state' | 'deps'>;\n executeState: QueryExecuteState;\n};\n\nexport const resetExecuteState = <TArgs extends QueryArgs>(options: ResetExecuteStateOptions<TArgs>) => {\n const { executeState, executeOptions: opts } = options;\n const { state } = opts;\n\n cleanupPreviousExecute({ executeOptions: opts, executeState });\n\n opts.deps.client.repository.unbind(executeState.previousKey(), opts.deps.destroyRef);\n\n state.args.set(null);\n state.error.set(null);\n state.latestHttpEvent.set(null);\n state.loading.set(null);\n state.response.set(null);\n state.lastTimeExecutedAt.set(null);\n};\n\nexport type QueryExecuteState = {\n effectRefs: EffectRef[];\n previousKey: WritableSignal<string | false>;\n};\n\nexport const setupQueryExecuteState = (): QueryExecuteState => {\n return {\n effectRefs: [],\n previousKey: signal(false),\n };\n};\n\nexport type RunQueryExecuteOptions = {\n allowCache?: boolean;\n};\n\nexport type InternalRunQueryExecuteOptions = {\n /**\n * If true, the request will be forced to be cached (saved inside the query repository).\n * Can be used to e.g. cache GQL queries transported via POST\n *\n * - `true` means the request will always be cached\n * - `false` means the request will never be cached\n * - `undefined` means the request will be cached if the method is GET, OPTIONS or HEAD\n */\n useQueryRepositoryCache?: boolean;\n};\n\nexport type QueryExecuteOptions<TArgs extends QueryArgs> = {\n executeOptions: CreateQueryExecuteOptions<TArgs>;\n executeState: QueryExecuteState;\n\n args: RequestArgs<TArgs> | null;\n options?: RunQueryExecuteOptions;\n internalOptions?: InternalRunQueryExecuteOptions;\n\n // TODO: Typings\n transformResponse?: (response: any) => any;\n};\n\nexport const queryExecute = <TArgs extends QueryArgs>(options: QueryExecuteOptions<TArgs>) => {\n const {\n executeOptions,\n args,\n executeState,\n options: runQueryOptions,\n internalOptions: internalRunQueryOptions,\n transformResponse,\n } = options;\n const { deps, state, creator, creatorInternals, queryConfig } = executeOptions;\n\n const { key, request } = deps.client.repository.request({\n route: creatorInternals.route,\n method: creatorInternals.method,\n args,\n clientOptions: creator,\n destroyRef: deps.destroyRef,\n key: queryConfig.key,\n previousKey: executeState.previousKey(),\n internalRunQueryOptions,\n runQueryOptions,\n });\n\n executeState.previousKey.set(key);\n\n const responseSignal = transformResponse ? computed(() => transformResponse(request.response())) : request.response;\n\n runInInjectionContext(deps.injector, () => {\n const responseRef = syncSignal(responseSignal, state.response);\n const loadingRef = syncSignal(request.loading, state.loading);\n const errorRef = syncSignal(request.error, state.error);\n const latestHttpEventRef = syncSignal(request.currentEvent, state.latestHttpEvent);\n\n executeState.effectRefs.push(responseRef, loadingRef, errorRef, latestHttpEventRef);\n });\n\n state.lastTimeExecutedAt.set(Date.now());\n state.subtle.request.set(request);\n};\n\nexport type CleanupPreviousExecuteOptions<TArgs extends QueryArgs> = {\n executeOptions: Pick<CreateQueryExecuteOptions<TArgs>, 'state'>;\n executeState: QueryExecuteState;\n};\n\nexport const cleanupPreviousExecute = <TArgs extends QueryArgs>(options: CleanupPreviousExecuteOptions<TArgs>) => {\n const { executeState } = options;\n\n executeState.effectRefs.forEach((ref) => ref.destroy());\n executeState.effectRefs.length = 0;\n};\n","import { Signal } from '@angular/core';\nimport { QueryArgs, RequestArgs } from './query';\nimport { CreateQueryCreatorOptions, InternalCreateQueryCreatorOptions, QueryConfig } from './query-creator';\nimport { QueryDependencies } from './query-dependencies';\nimport {\n cleanupPreviousExecute,\n queryExecute,\n resetExecuteState,\n RunQueryExecuteOptions,\n setupQueryExecuteState,\n} from './query-execute-utils';\nimport { QueryKeyOrNone } from './query-repository';\nimport { QueryState } from './query-state';\n\nexport type CreateQueryExecuteOptions<TArgs extends QueryArgs> = {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: CreateQueryCreatorOptions;\n creatorInternals: InternalCreateQueryCreatorOptions<TArgs>;\n queryConfig: QueryConfig;\n};\n\nexport type QueryExecuteArgs<TArgs extends QueryArgs> = {\n args?: RequestArgs<TArgs> | null;\n options?: RunQueryExecuteOptions;\n};\n\nexport type InternalQueryExecute<TArgs extends QueryArgs> = {\n (executeArgs?: QueryExecuteArgs<TArgs>): void;\n reset: () => void;\n currentRepositoryKey: Signal<QueryKeyOrNone>;\n};\n\nexport type QueryExecute<TArgs extends QueryArgs> = (executeArgs?: QueryExecuteArgs<TArgs>) => void;\n\nexport const createExecuteFn = <TArgs extends QueryArgs>(\n executeOptions: CreateQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n\n const reset = () => resetExecuteState({ executeState, executeOptions });\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n const { args = executeOptions.state.args(), options } = executeArgs ?? {};\n cleanupPreviousExecute({ executeOptions, executeState });\n queryExecute({ executeOptions, executeState, args, options });\n };\n\n exec['reset'] = reset;\n\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { HttpEvent, HttpHeaders } from '@angular/common/http';\nimport { Signal } from '@angular/core';\nimport { HttpRequestLoadingState } from './http-request';\nimport { CreateQueryCreatorOptions, InternalCreateQueryCreatorOptions, QueryConfig } from './query-creator';\nimport { setupQueryDependencies } from './query-dependencies';\nimport { QueryErrorResponse } from './query-error-response';\nimport { createExecuteFn, QueryExecute } from './query-execute';\nimport { QueryFeature, QueryFeatureContext } from './query-features';\nimport { setupQueryState } from './query-state';\nimport { applyQueryFeatures, createQueryObject, getQueryFeatureUsage, maybeExecute } from './query-utils';\n\nexport type QueryArgs = {\n response?: any;\n pathParams?: Record<string, string | number>;\n queryParams?: any;\n body?: any;\n headers?: HttpHeaders;\n};\n\nexport type ResponseType<T extends QueryArgs | null> = T extends QueryArgs ? T['response'] : never;\nexport type PathParamsType<T extends QueryArgs | null> = T extends QueryArgs ? T['pathParams'] : never;\nexport type QueryParamsType<T extends QueryArgs | null> = T extends QueryArgs ? T['queryParams'] : never;\nexport type BodyType<T extends QueryArgs | null> = T extends QueryArgs ? T['body'] : never;\n\nexport type RequestArgs<T extends QueryArgs | null> = T extends QueryArgs ? Omit<T, 'response'> : never;\n\nexport type CreateQueryOptions<TArgs extends QueryArgs> = {\n creator?: CreateQueryCreatorOptions;\n creatorInternals: InternalCreateQueryCreatorOptions<TArgs>;\n features: QueryFeature<TArgs>[];\n queryConfig: QueryConfig;\n};\n\nexport type QueryBase<TArgs extends QueryArgs> = {\n /** The arguments of the last execution of the query. Will be `null` if the query has never been executed */\n args: Signal<RequestArgs<TArgs> | null>;\n\n /**\n * The latest response of the query. Will be `null` if the query has never been executed.\n * Responses are cached until a new response is received.\n * If a response is present but the next execution of the query fails, the response will be set to `null` again.\n */\n response: Signal<ResponseType<TArgs> | null>;\n\n /** The latest Angular HTTP client native http event that occurred during the last execution of the query. Will be `null` if no event occurred. */\n latestHttpEvent: Signal<HttpEvent<ResponseType<TArgs>> | null>;\n\n /** The loading state of the query. Will be `null` if the query currently isn't loading. */\n loading: Signal<HttpRequestLoadingState | null>;\n\n /** The error that occurred during the last execution of the query. Will be `null` if no error occurred. */\n error: Signal<QueryErrorResponse | null>;\n\n /** The time the query was last executed at. Will be `null` if the query has never been executed. */\n lastTimeExecutedAt: Signal<number | null>;\n\n /** The id of the query */\n id: Signal<string>;\n};\n\n/** A snapshot of a query state at a specific point in time */\nexport type QuerySnapshot<TArgs extends QueryArgs> = QueryBase<TArgs> & {\n /** This signal is `true` until the latest execution of the query has completed in any way (success, error, or cancellation) */\n isAlive: Signal<boolean>;\n};\n\nexport type AnyQuerySnapshot = QuerySnapshot<any>;\nexport type AnyQuery = Query<any>;\n\nexport type QuerySubtle<TArgs extends QueryArgs> = {\n /** Destroys the query and cleans up all resources. The query should not be used after this method is called. */\n destroy: () => void;\n\n /** Manually sets the response of the query. This will not trigger a new execution of the query. */\n setResponse: (response: ResponseType<TArgs>) => void;\n};\n\nexport type Query<TArgs extends QueryArgs> = QueryBase<TArgs> & {\n /** Executes the query */\n execute: QueryExecute<TArgs>;\n\n /** Creates an immutable snapshot of the current query state */\n createSnapshot: () => QuerySnapshot<TArgs>;\n\n /** Resets the query state to its initial state */\n reset: () => void;\n\n /** Returns a readonly version of the query */\n asReadonly: () => ReadonlyQuery<TArgs>;\n\n /** Advanced query features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle: QuerySubtle<TArgs>;\n};\n\nexport type ReadonlyQuery<TArgs extends QueryArgs> = Omit<Query<TArgs>, 'execute' | 'subtle' | 'reset' | 'asReadonly'>;\n\nexport const createQuery = <TArgs extends QueryArgs>(options: CreateQueryOptions<TArgs>) => {\n const deps = setupQueryDependencies({ clientConfig: options.creatorInternals.client });\n const state = setupQueryState<TArgs>({});\n const { creator, creatorInternals, queryConfig } = options;\n const flags = getQueryFeatureUsage(options);\n\n const execute = createExecuteFn<TArgs>({ deps, state, creator, creatorInternals, queryConfig });\n\n const featureFnContext: QueryFeatureContext<TArgs> = {\n state,\n execute,\n flags,\n deps,\n };\n\n applyQueryFeatures(options.features, featureFnContext);\n\n maybeExecute({ execute, flags });\n\n return createQueryObject({ state, execute, deps });\n};\n","import { HttpClient } from '@angular/common/http';\nimport { DestroyRef, inject } from '@angular/core';\nimport { buildRoute } from '../../request';\nimport { CreateHttpRequestClientOptions, HttpRequest, createHttpRequest } from './http-request';\nimport { QueryArgs, RequestArgs } from './query';\nimport { QueryClientConfig } from './query-client-config';\nimport { QueryMethod, RouteType } from './query-creator';\nimport { uncacheableRequestHasAllowCacheParam, uncacheableRequestHasCacheKeyParam } from './query-errors';\nimport { InternalRunQueryExecuteOptions, RunQueryExecuteOptions } from './query-execute-utils';\nimport { buildQueryCacheKey, shouldCacheQuery } from './query-utils';\n\nexport type QueryRepositoryRequestOptions<TArgs extends QueryArgs> = {\n /**\n * The route of the request.\n * @example '/users'\n * @example (args) => `/users/${args.userId}`\n */\n route: RouteType<TArgs>;\n\n /** The HTTP method of the request */\n method: QueryMethod;\n\n /** The data of the request */\n args?: RequestArgs<TArgs> | null;\n\n /** The client options of the request */\n clientOptions?: CreateHttpRequestClientOptions;\n\n /** If set, this request's cache key will be prefixed with this key */\n key?: string;\n\n /** The previous cache key of the request */\n previousKey?: string | false;\n\n /** The destroy ref to bind the request to. If the destroy ref is destroyed, the request will be destroyed as well. */\n destroyRef: DestroyRef;\n\n /** Configuration on how to run the query */\n runQueryOptions?: RunQueryExecuteOptions;\n\n /** Internal options for running the query */\n internalRunQueryOptions?: InternalRunQueryExecuteOptions;\n};\n\nexport type QueryRepositoryItem<TArgs extends QueryArgs> = {\n /** The key of the request. If the key is `false`, the request is not cached, otherwise it is. */\n key: QueryKeyOrNone;\n\n /** The request object */\n request: HttpRequest<TArgs>;\n};\n\n/**\n * The query repository is responsible for managing all requests and their consumers.\n * It will cache requests if they can be cached and reuse them if they are already cached.\n * It will also destroy requests if there are no more consumers left.\n */\nexport type QueryRepository = {\n /** Creates a new request. If the request is already cached, it will be reused. */\n request: <TArgs extends QueryArgs>(options: QueryRepositoryRequestOptions<TArgs>) => QueryRepositoryItem<TArgs>;\n\n /** Removes a consumer from a request by its key. Destroys the request if there are no more consumers left. */\n unbind: (key: QueryKeyOrNone, destroyRef: DestroyRef) => boolean;\n};\n\n/** The key of a query */\nexport type QueryKey = string;\n\n/** A key that will not be cached */\nexport type QueryKeyNoCache = false;\n\n/** A key that may or may not be cached */\nexport type QueryKeyOrNone = QueryKey | QueryKeyNoCache;\n\n/** Runs .unbind() if the DestroyRef.onDestroy() gets called */\ntype DestroyCleanupCallback = () => void;\n\n/** Keeps track of all places where the request gets used. Will be cleaned up and removed if there are no more consumers. */\ntype DestroyListenerMapItem = {\n consumers: Map<DestroyRef, DestroyCleanupCallback>;\n request: HttpRequest<QueryArgs>;\n};\n\nexport const createQueryRepository = (config: QueryClientConfig): QueryRepository => {\n const httpClient = inject(HttpClient);\n\n const cache = new Map<QueryKey, DestroyListenerMapItem>();\n\n const request = <TArgs extends QueryArgs>(options: QueryRepositoryRequestOptions<TArgs>) => {\n const { args, clientOptions, runQueryOptions } = options;\n const shouldCache =\n options.internalRunQueryOptions?.useQueryRepositoryCache === false\n ? false\n : shouldCacheQuery(options.method) || options.internalRunQueryOptions?.useQueryRepositoryCache === true;\n\n if (!shouldCache && options.key) throw uncacheableRequestHasCacheKeyParam(options.key);\n if (!shouldCache && runQueryOptions?.allowCache) throw uncacheableRequestHasAllowCacheParam();\n\n const route = buildRoute({\n base: config.baseUrl,\n route: options.route,\n pathParams: args?.pathParams,\n queryParams: args?.queryParams,\n queryParamConfig: config.queryString,\n });\n\n const key =\n shouldCache &&\n buildQueryCacheKey(`${options.key ? options.key + '_' : ''}${route}`, {\n body: args?.body,\n queryParams: args?.queryParams,\n pathParams: args?.pathParams,\n headers: args?.headers,\n });\n\n const previousKey = options.previousKey;\n\n if (key !== previousKey && previousKey) {\n unbind(previousKey, options.destroyRef);\n }\n\n if (shouldCache && key) {\n const cacheEntry = cache.get(key);\n\n if (cacheEntry) {\n bind(key, options.destroyRef, cacheEntry.request);\n\n if (!runQueryOptions?.allowCache || cacheEntry.request.isStale()) {\n cacheEntry.request.execute({ allowCache: runQueryOptions?.allowCache });\n }\n\n return { key, request: cacheEntry.request as HttpRequest<TArgs> };\n }\n }\n\n const request = createHttpRequest<TArgs>({\n fullPath: route,\n args,\n method: options.method,\n dependencies: {\n httpClient,\n },\n clientOptions,\n cacheAdapter: config.cacheAdapter,\n retryFn: config.retryFn,\n });\n\n request.execute();\n\n if (shouldCache && key) {\n bind(key, options.destroyRef, request);\n }\n\n return { key, request };\n };\n\n const unbind = (key: QueryKeyOrNone, destroyRef: DestroyRef) => {\n if (!key) return false;\n\n const cacheEntry = cache.get(key);\n\n if (!cacheEntry) return false;\n\n cacheEntry.consumers.delete(destroyRef);\n\n if (cacheEntry.consumers.size === 0) {\n cacheEntry.request.destroy();\n cache.delete(key);\n }\n\n return true;\n };\n\n const bind = (key: QueryKey, destroyRef: DestroyRef, request: HttpRequest<QueryArgs>) => {\n const destroyListener = destroyRef.onDestroy(() => unbind(key, destroyRef));\n\n const cacheEntry = cache.get(key);\n\n if (cacheEntry) {\n cacheEntry.consumers.set(destroyRef, destroyListener);\n } else {\n const consumers: Map<DestroyRef, DestroyCleanupCallback> = new Map([]);\n\n consumers.set(destroyRef, destroyListener);\n\n cache.set(key, {\n consumers,\n request,\n });\n }\n };\n\n const repository: QueryRepository = {\n request,\n unbind,\n };\n\n return repository;\n};\n","import { QueryClientConfig } from './query-client-config';\nimport { QueryRepository, createQueryRepository } from './query-repository';\n\nexport type QueryClient = {\n repository: QueryRepository;\n};\n\nexport const createQueryClient = (config: QueryClientConfig) => {\n const repository = createQueryRepository(config);\n\n const client: QueryClient = {\n repository,\n };\n\n return client;\n};\n\nexport const provideQueryClient = (config: QueryClientConfig) => {\n return {\n provide: config.token,\n useFactory: () => createQueryClient(config),\n };\n};\n","import { HttpHeaders } from '@angular/common/http';\nimport { InjectionToken } from '@angular/core';\nimport { BuildQueryStringConfig } from '../../request';\nimport { QueryClient } from './query-client';\nimport { ShouldRetryRequestFn } from './query-utils';\n\nexport type CacheAdapterFn = (headers: HttpHeaders) => number | null;\n\nexport type CreateQueryClientConfigOptions = {\n /**\n * The base URL of the client\n * @example 'https://api.example.com/v1'\n */\n baseUrl: string;\n\n /** Configuration for building query strings */\n queryString?: BuildQueryStringConfig;\n\n /** The name of the client */\n name: string;\n\n /**\n * The cache adapter function to use for the client.\n * It determines how long the response of a request can be cached.\n *\n * @default extractExpiresInSeconds()\n */\n cacheAdapter?: CacheAdapterFn;\n\n /**\n * The retry function to use for the client.\n * It determines if a request should be retried after it failed.\n *\n * @default shouldRetryRequest()\n */\n retryFn?: ShouldRetryRequestFn;\n};\n\nexport type QueryClientConfig = CreateQueryClientConfigOptions & {\n /** A generated token for dependency injection */\n token: QueryClientRef;\n};\n\n/**\n * A token for a query client.\n * This token can be used to inject a query client into a service.\n */\nexport type QueryClientRef = InjectionToken<QueryClient>;\n\n/**\n * This function creates a query client config.\n * The config is used to create a query client using the `provideQueryClient(myConfig)` function.\n */\nexport const createQueryClientConfig = (options: CreateQueryClientConfigOptions) => {\n const token = new InjectionToken<QueryClientConfig>(`QueryClient_${options.name}`);\n\n const clientConfig: QueryClientConfig = {\n baseUrl: options.baseUrl,\n token,\n name: options.name,\n queryString: options.queryString,\n\n // createHttpRequest will use fallbacks if these are not provided\n cacheAdapter: options.cacheAdapter,\n retryFn: options.retryFn,\n };\n\n return clientConfig;\n};\n","import { HttpRequestResponseType, HttpRequestTransferCacheConfig } from './http-request';\nimport { AnyQuery, PathParamsType, Query, QueryArgs, createQuery } from './query';\nimport { QueryClientConfig } from './query-client-config';\nimport { QueryFeature } from './query-features';\n\nexport type RouteType<TArgs extends QueryArgs> =\n PathParamsType<TArgs> extends { [key: string]: unknown } ? (args: TArgs['pathParams']) => RouteString : RouteString;\n\nexport type RouteString = `/${string}`;\n\nexport type CreateQueryCreatorOptions = {\n /**\n * If true, the query loading state will include progress information.\n * This is useful for file uploads and downloads.\n *\n * **Warning**: Upload progress events are not supported by browsers when using the fetch API, such as with `provideHttpClient(withFetch())`.\n * In this case, you should use the older XHR implementation by omitting `withFetch()`. But take into account that XHR is not supported in server-side rendering environments.\n *\n * @see https://angular.dev/guide/http/making-requests#receiving-raw-progress-events\n *\n * @default false\n */\n reportProgress?: boolean;\n\n /**\n * The response type of the query.\n * @default 'json'\n */\n responseType?: HttpRequestResponseType;\n\n /**\n * Whether to include credentials (cookies) in the request or not.\n * @default false\n */\n withCredentials?: boolean;\n\n /**\n * This property accepts either a boolean to enable/disable transferring cache for eligible\n * requests performed using `HttpClient`, or an object, which allows to configure cache\n * parameters, such as which headers should be included (no headers are included by default).\n *\n * Setting this property will override the options passed to `provideClientHydration()` for this\n * particular request\n */\n transferCache?: HttpRequestTransferCacheConfig;\n};\n\nexport type QueryCreator<TArgs extends QueryArgs> = {\n (...features: QueryFeature<TArgs>[]): Query<TArgs>;\n (queryConfig: QueryConfig, ...features: QueryFeature<TArgs>[]): Query<TArgs>;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyQueryCreator = QueryCreator<any>;\n\nexport type QueryArgsOf<T extends AnyQueryCreator | AnyQuery> =\n T extends QueryCreator<infer TArgs> ? TArgs : T extends Query<infer TArgs> ? TArgs : never;\n\nexport type RunQueryCreator<TCreator extends AnyQueryCreator> = ReturnType<TCreator>;\n\nexport type QueryMethod = 'GET' | 'OPTIONS' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'TRACE' | 'CONNECT';\n\nexport type InternalCreateQueryCreatorOptions<TArgs extends QueryArgs> = {\n /**\n * The route of the query.\n * If the query has path params, the route should be a function that takes the path params as an argument.\n * Otherwise, it should be a string.\n */\n route: RouteType<TArgs>;\n\n method: QueryMethod;\n client: QueryClientConfig;\n};\n\nexport type QueryConfig = {\n /** A custom id to use for this query. Only affects queries that can be cached. */\n key?: string;\n\n /**\n * If true, the query will not be executed automatically.\n * Does not affect mutations such as POST, PUT etc. since those are never executed automatically.\n */\n onlyManualExecution?: boolean;\n};\n\nexport const splitQueryConfig = <TArgs extends QueryArgs>(args: (QueryFeature<TArgs> | QueryConfig)[]) => {\n let queryConfig: QueryConfig = {};\n let features: QueryFeature<TArgs>[] = [];\n\n const first = args[0];\n\n if (first) {\n if ('type' in first) {\n features = args as QueryFeature<TArgs>[];\n } else {\n [queryConfig, ...features] = args as [QueryConfig, ...QueryFeature<TArgs>[]];\n }\n }\n return { features, queryConfig };\n};\n\nexport const createQueryCreator = <TArgs extends QueryArgs>(\n options: CreateQueryCreatorOptions | undefined,\n internals: InternalCreateQueryCreatorOptions<TArgs>,\n): QueryCreator<TArgs> => {\n function queryCreator(...features: QueryFeature<TArgs>[]): Query<TArgs>;\n function queryCreator(queryConfig: QueryConfig, ...features: QueryFeature<TArgs>[]): Query<TArgs>;\n\n function queryCreator(...args: (QueryFeature<TArgs> | QueryConfig)[]): Query<TArgs> {\n const { features, queryConfig } = splitQueryConfig<TArgs>(args);\n\n return createQuery<TArgs>({\n creator: options,\n creatorInternals: internals,\n features,\n queryConfig,\n });\n }\n\n return queryCreator;\n};\n","import { HttpHeaders } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { of, Subscription, switchMap, tap } from 'rxjs';\nimport { AnyQuerySnapshot, QueryArgs, RequestArgs } from './query';\nimport { CreateQueryExecuteOptions, InternalQueryExecute, QueryExecuteArgs } from './query-execute';\nimport { cleanupPreviousExecute, queryExecute, resetExecuteState, setupQueryExecuteState } from './query-execute-utils';\nimport { InternalSecureCreateQueryCreatorOptions } from './secure-query-creator';\n\nconst AUTH_HEADER = 'Authorization';\n\nexport type CreateSecureQueryExecuteOptions<TArgs extends QueryArgs> = Omit<\n CreateQueryExecuteOptions<TArgs>,\n 'creatorInternals'\n> & {\n creatorInternals: InternalSecureCreateQueryCreatorOptions<TArgs>;\n};\n\nexport const createSecureExecuteFn = <TArgs extends QueryArgs>(\n options: CreateSecureQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n const authProvider = inject(options.creatorInternals.authProvider.token);\n\n let authQuerySubscription = Subscription.EMPTY;\n\n const reset = () => {\n authQuerySubscription.unsubscribe();\n authQuerySubscription = Subscription.EMPTY;\n resetExecuteState({ executeState, executeOptions: options });\n };\n\n const error = (query: AnyQuerySnapshot) => {\n const state = options.state;\n\n state.error.set(query.error());\n state.loading.set(null);\n state.response.set(null);\n state.latestHttpEvent.set(null);\n state.args.set(null);\n };\n\n const authAndExec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n const { args, options: runOptions } = executeArgs ?? {};\n\n const tokens = authProvider.tokens();\n let headers = args?.headers || new HttpHeaders();\n\n if (!tokens) {\n throw new Error('Tokens are not available inside authAndExec');\n }\n\n if (!headers.has(AUTH_HEADER)) {\n headers = headers.set(AUTH_HEADER, `Bearer ${tokens.accessToken}`);\n }\n\n const updatedArgs = { ...(args ?? ({} as RequestArgs<TArgs>)), headers };\n\n queryExecute({\n executeOptions: options,\n executeState,\n args: updatedArgs,\n options: runOptions,\n });\n };\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n authQuerySubscription.unsubscribe();\n authQuerySubscription = Subscription.EMPTY;\n cleanupPreviousExecute({ executeOptions: options, executeState });\n\n const authQuery = authProvider.latestExecutedQuery();\n\n if (!authQuery || authQuery.loading()) {\n options.state.loading.set({ executeTime: Date.now(), progress: null });\n\n authQuerySubscription = toObservable(authProvider.latestExecutedQuery, { injector: options.deps.injector })\n .pipe(\n switchMap((query) => {\n if (!query) return of(null);\n\n return toObservable(query.isAlive, { injector: options.deps.injector }).pipe(\n tap((isAlive) => {\n if (isAlive) return;\n\n if (query.error()) {\n error(query);\n } else if (query.response()) {\n authAndExec(executeArgs);\n }\n }),\n );\n }),\n )\n .subscribe();\n } else if (authQuery.response()) {\n authAndExec(executeArgs);\n } else if (authQuery.error()) {\n error(authQuery);\n } else {\n throw new Error('Invalid state ocurred inside createSecureExecuteFn');\n }\n };\n\n exec['reset'] = reset;\n\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","import { CreateQueryOptions, QueryArgs } from './query';\nimport { setupQueryDependencies } from './query-dependencies';\nimport { QueryFeatureContext } from './query-features';\nimport { setupQueryState } from './query-state';\nimport { applyQueryFeatures, createQueryObject, getQueryFeatureUsage, maybeExecute } from './query-utils';\nimport { InternalSecureCreateQueryCreatorOptions } from './secure-query-creator';\nimport { createSecureExecuteFn } from './secure-query-execute';\n\nexport type CreateSecureQueryOptions<TArgs extends QueryArgs> = Omit<CreateQueryOptions<TArgs>, 'creatorInternals'> & {\n creatorInternals: InternalSecureCreateQueryCreatorOptions<TArgs>;\n};\n\nexport const createSecureQuery = <TArgs extends QueryArgs>(options: CreateSecureQueryOptions<TArgs>) => {\n const deps = setupQueryDependencies({ clientConfig: options.creatorInternals.client });\n const state = setupQueryState<TArgs>({});\n const { creator, creatorInternals, queryConfig } = options;\n const flags = getQueryFeatureUsage(options);\n\n const execute = createSecureExecuteFn<TArgs>({\n deps,\n state,\n creator,\n creatorInternals,\n queryConfig,\n });\n\n const featureFnContext: QueryFeatureContext<TArgs> = {\n deps,\n state,\n execute,\n flags,\n };\n\n applyQueryFeatures(options.features, featureFnContext);\n\n maybeExecute({ execute, flags });\n\n return createQueryObject({ state, execute, deps });\n};\n","import { AnyBearerAuthProviderConfig } from '../auth/bearer-auth-provider-config';\nimport { Query, QueryArgs } from './query';\nimport {\n CreateQueryCreatorOptions,\n InternalCreateQueryCreatorOptions,\n QueryConfig,\n QueryCreator,\n splitQueryConfig,\n} from './query-creator';\nimport { QueryFeature } from './query-features';\nimport { createSecureQuery } from './secure-query';\n\nexport type InternalSecureCreateQueryCreatorOptions<TArgs extends QueryArgs> =\n InternalCreateQueryCreatorOptions<TArgs> & {\n authProvider: AnyBearerAuthProviderConfig;\n };\n\nexport const createSecureQueryCreator = <TArgs extends QueryArgs>(\n options: CreateQueryCreatorOptions | undefined,\n internals: InternalSecureCreateQueryCreatorOptions<TArgs>,\n): QueryCreator<TArgs> => {\n function queryCreator(...features: QueryFeature<TArgs>[]): Query<TArgs>;\n function queryCreator(queryConfig: QueryConfig, ...features: QueryFeature<TArgs>[]): Query<TArgs>;\n\n function queryCreator(...args: (QueryFeature<TArgs> | QueryConfig)[]): Query<TArgs> {\n const { features, queryConfig } = splitQueryConfig<TArgs>(args);\n\n return createSecureQuery<TArgs>({\n creator: options,\n creatorInternals: internals,\n features,\n queryConfig,\n });\n }\n\n return queryCreator;\n};\n","import { AnyBearerAuthProviderConfig } from '../auth/bearer-auth-provider-config';\nimport { QueryArgs } from './query';\nimport { QueryClientConfig } from './query-client-config';\nimport { CreateQueryCreatorOptions, RouteType, createQueryCreator } from './query-creator';\nimport { createSecureQueryCreator } from './secure-query-creator';\n\n/** A query creator that creates a GET query */\nexport const createGetQuery = (client: QueryClientConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createQueryCreator<TArgs>(creatorOptions, { method: 'GET', client, route });\n};\n\n/** A query creator that creates a secure GET query (requires authentication) */\nexport const createSecureGetQuery = (client: QueryClientConfig, authProvider: AnyBearerAuthProviderConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createSecureQueryCreator<TArgs>(creatorOptions, { method: 'GET', client, authProvider, route });\n};\n\n/** A query creator that creates a POST query */\nexport const createPostQuery = (client: QueryClientConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createQueryCreator<TArgs>(creatorOptions, { method: 'POST', client, route });\n};\n\n/** A query creator that creates a secure POST query (requires authentication) */\nexport const createSecurePostQuery = (client: QueryClientConfig, authProvider: AnyBearerAuthProviderConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createSecureQueryCreator<TArgs>(creatorOptions, { method: 'POST', client, authProvider, route });\n};\n\n/** A query creator that creates a PUT query */\nexport const createPutQuery = (client: QueryClientConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createQueryCreator<TArgs>(creatorOptions, { method: 'PUT', client, route });\n};\n\n/** A query creator that creates a secure PUT query (requires authentication) */\nexport const createSecurePutQuery = (client: QueryClientConfig, authProvider: AnyBearerAuthProviderConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createSecureQueryCreator<TArgs>(creatorOptions, { method: 'PUT', client, authProvider, route });\n};\n\n/** A query creator that creates a DELETE query */\nexport const createDeleteQuery = (client: QueryClientConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createQueryCreator<TArgs>(creatorOptions, { method: 'DELETE', client, route });\n};\n\n/** A query creator that creates a secure DELETE query (requires authentication) */\nexport const createSecureDeleteQuery = (client: QueryClientConfig, authProvider: AnyBearerAuthProviderConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createSecureQueryCreator<TArgs>(creatorOptions, { method: 'DELETE', client, authProvider, route });\n};\n\n/** A query creator that creates a PATCH query */\nexport const createPatchQuery = (client: QueryClientConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createQueryCreator<TArgs>(creatorOptions, { method: 'PATCH', client, route });\n};\n\n/** A query creator that creates a secure PATCH query (requires authentication) */\nexport const createSecurePatchQuery = (client: QueryClientConfig, authProvider: AnyBearerAuthProviderConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createSecureQueryCreator<TArgs>(creatorOptions, { method: 'PATCH', client, authProvider, route });\n};\n","import { transformGql } from '../../gql';\nimport {\n cleanupPreviousExecute,\n CreateQueryExecuteOptions,\n InternalQueryExecute,\n QueryArgs,\n QueryConfig,\n QueryDependencies,\n queryExecute,\n QueryExecuteArgs,\n QueryState,\n RequestArgs,\n resetExecuteState,\n RouteType,\n setupQueryExecuteState,\n} from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport { CreateGqlQueryCreatorOptions, InternalCreateGqlQueryCreatorOptions } from './gql-query-creator';\n\nexport type CreateGqlQueryExecuteOptions<TArgs extends QueryArgs> = {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: CreateGqlQueryCreatorOptions<TArgs>;\n creatorInternals: InternalCreateGqlQueryCreatorOptions;\n queryConfig: QueryConfig;\n};\n\nexport const createGqlExecuteFn = <TArgs extends GqlQueryArgs>(\n executeOptions: CreateGqlQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n\n const reset = () => resetExecuteState({ executeState, executeOptions });\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n const { args = executeOptions.state.args(), options } = executeArgs ?? {};\n cleanupPreviousExecute({ executeOptions, executeState });\n\n // TODO: This should get cleaned up\n const tpl = executeOptions.creatorInternals.query;\n const query = transformGql(tpl);\n let gqlParams = query(args?.variables);\n\n if (args?.queryParams && executeOptions.creatorInternals.transport === 'GET') {\n gqlParams = { ...gqlParams, ...args.queryParams };\n }\n\n const computedArgs = args ?? ({} as RequestArgs<TArgs>);\n\n if (executeOptions.creatorInternals.transport === 'GET') {\n computedArgs.queryParams = gqlParams;\n } else {\n computedArgs.body = gqlParams;\n }\n\n const normalizedOpts: CreateQueryExecuteOptions<TArgs> = {\n creator: executeOptions.creator ?? {},\n creatorInternals: {\n client: executeOptions.creatorInternals.client,\n method: executeOptions.creatorInternals.transport,\n route: (executeOptions.creator?.route ?? '') as RouteType<TArgs>,\n },\n deps: executeOptions.deps,\n queryConfig: executeOptions.queryConfig,\n state: executeOptions.state,\n };\n\n queryExecute({\n executeOptions: normalizedOpts,\n executeState,\n args: computedArgs,\n options,\n internalOptions: {\n useQueryRepositoryCache: executeOptions.creatorInternals.method === 'QUERY',\n },\n transformResponse: (originalResponse) => {\n if (originalResponse && 'data' in originalResponse) {\n return originalResponse.data;\n }\n\n return originalResponse;\n },\n });\n };\n\n exec['reset'] = reset;\n\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","import {\n applyQueryFeatures,\n createQueryObject,\n CreateQueryOptions,\n getQueryFeatureUsage,\n maybeExecute,\n QueryArgs,\n QueryFeatureContext,\n setupQueryDependencies,\n setupQueryState,\n} from '../http';\nimport { CreateGqlQueryCreatorOptions, InternalCreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { createGqlExecuteFn } from './gql-query-execute';\n\nexport type GqlQueryArgs = QueryArgs & {\n variables?: Record<string, unknown>;\n};\n\nexport type CreateGqlQueryOptions<TArgs extends GqlQueryArgs> = Omit<\n CreateQueryOptions<TArgs>,\n 'creator' | 'creatorInternals'\n> & {\n creator?: CreateGqlQueryCreatorOptions<TArgs>;\n creatorInternals: InternalCreateGqlQueryCreatorOptions;\n};\n\nexport type GqlVariablesType<T extends GqlQueryArgs | null> = T extends GqlQueryArgs ? T['variables'] : never;\n\nexport const isCreateGqlQueryOptions = <TArgs extends QueryArgs>(\n options: CreateQueryOptions<TArgs> | CreateGqlQueryOptions<TArgs>,\n): options is CreateGqlQueryOptions<TArgs> => {\n return 'transport' in options.creatorInternals;\n};\n\nexport const createGqlQuery = <TArgs extends GqlQueryArgs>(options: CreateGqlQueryOptions<TArgs>) => {\n const deps = setupQueryDependencies({ clientConfig: options.creatorInternals.client });\n const state = setupQueryState<TArgs>({});\n const { creator, creatorInternals, queryConfig } = options;\n const flags = getQueryFeatureUsage(options);\n\n const execute = createGqlExecuteFn<TArgs>({\n deps,\n state,\n creator,\n creatorInternals,\n queryConfig,\n });\n\n const featureFnContext: QueryFeatureContext<TArgs> = {\n state,\n execute,\n flags,\n deps,\n };\n\n applyQueryFeatures(options.features, featureFnContext);\n\n maybeExecute({ execute, flags });\n\n return createQueryObject({ state, execute, deps });\n};\n","import {\n CreateQueryCreatorOptions,\n Query,\n QueryClientConfig,\n QueryConfig,\n QueryCreator,\n QueryFeature,\n RouteType,\n splitQueryConfig,\n} from '../http';\nimport { createGqlQuery, GqlQueryArgs } from './gql-query';\n\nexport type CreateGqlQueryCreatorOptions<TArgs extends GqlQueryArgs> = Omit<CreateQueryCreatorOptions, 'route'> & {\n route?: RouteType<TArgs>;\n};\n\nexport type GqlQueryMethod = 'QUERY' | 'MUTATE';\nexport type GqlQueryTransport = 'GET' | 'POST';\n\nexport type InternalCreateGqlQueryCreatorOptions = {\n method: GqlQueryMethod;\n transport: GqlQueryTransport;\n client: QueryClientConfig;\n query: string;\n};\n\nexport const createGqlQueryCreator = <TArgs extends GqlQueryArgs>(\n options: CreateGqlQueryCreatorOptions<TArgs> | undefined,\n internals: InternalCreateGqlQueryCreatorOptions,\n): QueryCreator<TArgs> => {\n function queryCreator(...features: QueryFeature<TArgs>[]): Query<TArgs>;\n function queryCreator(queryConfig: QueryConfig, ...features: QueryFeature<TArgs>[]): Query<TArgs>;\n\n function queryCreator(...args: (QueryFeature<TArgs> | QueryConfig)[]): Query<TArgs> {\n const { features, queryConfig } = splitQueryConfig<TArgs>(args);\n\n return createGqlQuery<TArgs>({\n creator: options,\n creatorInternals: internals,\n features,\n queryConfig,\n });\n }\n\n return queryCreator;\n};\n","import { GQL } from '../../gql';\nimport { QueryClientConfig } from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport { CreateGqlQueryCreatorOptions, createGqlQueryCreator } from './gql-query-creator';\n\n/** A query creator that creates a GQL query where the payload is sent via GET (query params) */\nexport const createGqlQueryViaGet = (client: QueryClientConfig) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createGqlQueryCreator<TArgs>(creatorOptions, { method: 'QUERY', client, transport: 'GET', query });\n};\n\n/** A query creator that creates a GQL query where the payload is sent via POST (body) */\nexport const createGqlQueryViaPost = (client: QueryClientConfig) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createGqlQueryCreator<TArgs>(creatorOptions, { method: 'QUERY', client, transport: 'POST', query });\n};\n\n/** A query creator that creates a GQL mutation where the payload is sent via GET (query params) */\nexport const createGqlMutationViaGet = (client: QueryClientConfig) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createGqlQueryCreator<TArgs>(creatorOptions, { method: 'MUTATE', client, transport: 'GET', query });\n};\n\n/** A query creator that creates a GQL mutation where the payload is sent via POST (body) */\nexport const createGqlMutationViaPost = (client: QueryClientConfig) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createGqlQueryCreator<TArgs>(creatorOptions, { method: 'MUTATE', client, transport: 'POST', query });\n};\n","import { HttpStatusCode } from '@angular/common/http';\n\nexport const parseHttpErrorCodeToTitleDe = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Ungültige Anfrage';\n case HttpStatusCode.Unauthorized:\n return 'Nicht autorisiert';\n case HttpStatusCode.PaymentRequired:\n return 'Zahlung erforderlich';\n case HttpStatusCode.Forbidden:\n return 'Verboten';\n case HttpStatusCode.NotFound:\n return 'Nicht gefunden';\n case HttpStatusCode.MethodNotAllowed:\n return 'Methode nicht erlaubt';\n case HttpStatusCode.NotAcceptable:\n return 'Nicht akzeptabel';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy-Authentifizierung erforderlich';\n case HttpStatusCode.RequestTimeout:\n return 'Anforderungszeitüberschreitung';\n case HttpStatusCode.Conflict:\n return 'Konflikt';\n case HttpStatusCode.Gone:\n return 'Weg';\n case HttpStatusCode.LengthRequired:\n return 'Länge erforderlich';\n case HttpStatusCode.PreconditionFailed:\n return 'Vorbedingung fehlgeschlagen';\n case HttpStatusCode.PayloadTooLarge:\n return 'Nutzlast zu groß';\n case HttpStatusCode.UriTooLong:\n return 'URI zu lang';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Nicht unterstützter Medientyp';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Bereich nicht zufriedenstellend';\n case HttpStatusCode.ExpectationFailed:\n return 'Erwartung fehlgeschlagen';\n case HttpStatusCode.ImATeapot:\n return 'Ich bin eine Teekanne';\n case HttpStatusCode.MisdirectedRequest:\n return 'Fehlgeleitete Anfrage';\n case HttpStatusCode.UnprocessableEntity:\n return 'Unverarbeitbare Entität';\n case HttpStatusCode.Locked:\n return 'Gesperrt';\n case HttpStatusCode.FailedDependency:\n return 'Fehlgeschlagene Abhängigkeit';\n case HttpStatusCode.TooEarly:\n return 'Zu früh';\n case HttpStatusCode.UpgradeRequired:\n return 'Upgrade erforderlich';\n case HttpStatusCode.PreconditionRequired:\n return 'Vorbedingung erforderlich';\n case HttpStatusCode.TooManyRequests:\n return 'Zu viele Anfragen';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Anforderungskopffelder zu groß';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Aus rechtlichen Gründen nicht verfügbar';\n case HttpStatusCode.InternalServerError:\n return 'Interner Serverfehler';\n case HttpStatusCode.NotImplemented:\n return 'Nicht implementiert';\n case HttpStatusCode.BadGateway:\n return 'Schlechtes Gateway';\n case HttpStatusCode.ServiceUnavailable:\n return 'Dienst nicht verfügbar';\n case HttpStatusCode.GatewayTimeout:\n return 'Gateway-Zeitüberschreitung';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'HTTP-Version nicht unterstützt';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Variante verhandelt auch';\n case HttpStatusCode.InsufficientStorage:\n return 'Unzureichender Speicher';\n case HttpStatusCode.LoopDetected:\n return 'Schleifenerkennung';\n case HttpStatusCode.NotExtended:\n return 'Nicht erweitert';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Netzwerkauthentifizierung erforderlich';\n default:\n return 'Etwas ist schief gelaufen';\n }\n};\n\nexport const parseHttpErrorCodeToMessageDe = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Entschuldigung, wir konnten Ihre Anfrage nicht bearbeiten. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.Unauthorized:\n return 'Sie sind nicht berechtigt, diese Aktion auszuführen. Bitte melden Sie sich an, um fortzufahren.';\n case HttpStatusCode.PaymentRequired:\n return 'Zur Ausführung dieser Aktion ist eine Zahlung erforderlich.';\n case HttpStatusCode.Forbidden:\n return 'Sie haben keine Berechtigung, diese Aktion auszuführen.';\n case HttpStatusCode.NotFound:\n return 'Die angeforderte Ressource wurde nicht gefunden.';\n case HttpStatusCode.MethodNotAllowed:\n return 'Die angeforderte Methode ist für diese Ressource nicht zulässig.';\n case HttpStatusCode.NotAcceptable:\n return 'Die angeforderte Ressource ist nicht in der Lage, eine Antwort zu generieren, die der Liste der akzeptablen Werte entspricht.';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Zur Ausführung dieser Aktion ist eine Proxy-Authentifizierung erforderlich.';\n case HttpStatusCode.RequestTimeout:\n return 'Der Server hat auf die Anforderung gewartet.';\n case HttpStatusCode.Conflict:\n return 'Die Anforderung steht im Widerspruch zum aktuellen Zustand der Ressource.';\n case HttpStatusCode.Gone:\n return 'Die angeforderte Ressource ist nicht mehr verfügbar und wird auch nicht mehr verfügbar sein.';\n case HttpStatusCode.LengthRequired:\n return 'Die Anforderung hat die Länge ihres Inhalts nicht angegeben, die von der angeforderten Ressource benötigt wird.';\n case HttpStatusCode.PreconditionFailed:\n return 'Der Server erfüllt eine der Voraussetzungen nicht, die der Anforderer an die Anforderung gestellt hat.';\n case HttpStatusCode.PayloadTooLarge:\n return 'Die Anforderung ist größer als der Server bereit oder in der Lage ist, zu verarbeiten.';\n case HttpStatusCode.UriTooLong:\n return 'Die bereitgestellte URL war für den Server zu lang, um sie zu verarbeiten.';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Die Anforderungseinheit hat einen Medientyp, den der Server oder die Ressource nicht unterstützt.';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Der Client hat einen Teil der Datei angefordert, aber der Server kann diesen Teil nicht liefern.';\n case HttpStatusCode.ExpectationFailed:\n return 'Der Server kann die Anforderungen des Erwartung-Anforderungskopffelds nicht erfüllen.';\n case HttpStatusCode.ImATeapot:\n return 'Ich bin eine Teekanne.';\n case HttpStatusCode.MisdirectedRequest:\n return 'Die Anforderung wurde an einen Server gerichtet, der nicht in der Lage ist, eine Antwort zu generieren.';\n case HttpStatusCode.UnprocessableEntity:\n return 'Die Anforderung war gut formuliert, konnte aber aufgrund semantischer Fehler nicht befolgt werden.';\n case HttpStatusCode.Locked:\n return 'Die Ressource, auf die zugegriffen wird, ist gesperrt.';\n case HttpStatusCode.FailedDependency:\n return 'Die Anforderung ist aufgrund eines Fehlers einer vorherigen Anforderung fehlgeschlagen.';\n case HttpStatusCode.TooEarly:\n return 'Der Server ist nicht bereit, die Anforderung zu verarbeiten, weil der Benutzer nicht authentifiziert wurde.';\n case HttpStatusCode.UpgradeRequired:\n return 'Der Client sollte zu einem anderen Protokoll wie TLS/1.0 wechseln, das im Upgrade-Anforderungskopffeld angegeben ist.';\n case HttpStatusCode.PreconditionRequired:\n return 'Der Ursprungsserver erfordert, dass die Anforderung bedingt ist.';\n case HttpStatusCode.TooManyRequests:\n return 'Sie haben in einer bestimmten Zeit zu viele Anfragen gesendet. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Der Server ist nicht bereit, die Anforderung zu verarbeiten, weil seine Kopffelder zu groß sind.';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Die Ressource ist aufgrund einer rechtlichen Forderung nicht verfügbar.';\n case HttpStatusCode.InternalServerError:\n return 'Etwas ist schief gelaufen. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.NotImplemented:\n return 'Der Server unterstützt die zur Erfüllung der Anforderung erforderliche Funktionalität nicht.';\n case HttpStatusCode.BadGateway:\n return 'Etwas ist schief gelaufen. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.ServiceUnavailable:\n return 'Der Server kann die Anforderung derzeit nicht bearbeiten, da er vorübergehend überlastet oder gewartet wird.';\n case HttpStatusCode.GatewayTimeout:\n return 'Der Server hat beim Versuch, die Anforderung abzuschließen, keine rechtzeitige Antwort vom Server erhalten.';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'Der Server unterstützt die in der Anforderung verwendete HTTP-Protokollversion nicht.';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Der Server hat einen internen Konfigurationsfehler: Die ausgewählte Variantenressource ist so konfiguriert, dass sie sich selbst in die transparente Inhaltsverhandlung einbindet, und ist daher kein geeigneter Endpunkt im Verhandlungsprozess.';\n case HttpStatusCode.InsufficientStorage:\n return 'Die Methode konnte auf die Ressource nicht angewendet werden, weil der Server nicht in der Lage ist, die für die erfolgreiche Ausführung der Anforderung erforderliche Darstellung zu speichern.';\n case HttpStatusCode.LoopDetected:\n return 'Der Server hat eine Endlosschleife erkannt, während er die Anforderung verarbeitet.';\n case HttpStatusCode.NotExtended:\n return 'Weitere Erweiterungen der Anforderung sind erforderlich, damit der Server sie erfüllen kann.';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Sie müssen sich authentifizieren, um Zugang zum Netzwerk zu erhalten.';\n default:\n return 'Etwas ist schief gelaufen. Überprüfen Sie Ihre Internetverbindung und versuchen Sie es später erneut.';\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { parseHttpErrorCodeToMessageDe, parseHttpErrorCodeToTitleDe } from './parse-http-error-code-de';\n\n@Pipe({\n name: 'parseHttpErrorCodeToTitleDe',\n standalone: true,\n})\nexport class ParseHttpErrorCodeToTitleDePipe implements PipeTransform {\n transform = parseHttpErrorCodeToTitleDe;\n}\n\n@Pipe({\n name: 'parseHttpErrorCodeToMessageDe',\n standalone: true,\n})\nexport class ParseHttpErrorCodeToMessageDePipe implements PipeTransform {\n transform = parseHttpErrorCodeToMessageDe;\n}\n","import { HttpStatusCode } from '@angular/common/http';\n\nexport const parseHttpErrorCodeToTitleEn = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Bad request';\n case HttpStatusCode.Unauthorized:\n return 'Unauthorized';\n case HttpStatusCode.PaymentRequired:\n return 'Payment required';\n case HttpStatusCode.Forbidden:\n return 'Forbidden';\n case HttpStatusCode.NotFound:\n return 'Not found';\n case HttpStatusCode.MethodNotAllowed:\n return 'Method not allowed';\n case HttpStatusCode.NotAcceptable:\n return 'Not acceptable';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy authentication required';\n case HttpStatusCode.RequestTimeout:\n return 'Request timeout';\n case HttpStatusCode.Conflict:\n return 'Conflict';\n case HttpStatusCode.Gone:\n return 'Gone';\n case HttpStatusCode.LengthRequired:\n return 'Length required';\n case HttpStatusCode.PreconditionFailed:\n return 'Precondition failed';\n case HttpStatusCode.PayloadTooLarge:\n return 'Payload too large';\n case HttpStatusCode.UriTooLong:\n return 'URI too long';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Unsupported media type';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Range not satisfiable';\n case HttpStatusCode.ExpectationFailed:\n return 'Expectation failed';\n case HttpStatusCode.ImATeapot:\n return 'I am a teapot';\n case HttpStatusCode.MisdirectedRequest:\n return 'Misdirected request';\n case HttpStatusCode.UnprocessableEntity:\n return 'Unprocessable entity';\n case HttpStatusCode.Locked:\n return 'Locked';\n case HttpStatusCode.FailedDependency:\n return 'Failed dependency';\n case HttpStatusCode.TooEarly:\n return 'Too early';\n case HttpStatusCode.UpgradeRequired:\n return 'Upgrade required';\n case HttpStatusCode.PreconditionRequired:\n return 'Precondition required';\n case HttpStatusCode.TooManyRequests:\n return 'Too many requests';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Request header fields too large';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Unavailable for legal reasons';\n case HttpStatusCode.InternalServerError:\n return 'Internal server error';\n case HttpStatusCode.NotImplemented:\n return 'Not implemented';\n case HttpStatusCode.BadGateway:\n return 'Bad gateway';\n case HttpStatusCode.ServiceUnavailable:\n return 'Service unavailable';\n case HttpStatusCode.GatewayTimeout:\n return 'Gateway timeout';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'HTTP version not supported';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Variant also negotiates';\n case HttpStatusCode.InsufficientStorage:\n return 'Insufficient storage';\n case HttpStatusCode.LoopDetected:\n return 'Loop detected';\n case HttpStatusCode.NotExtended:\n return 'Not extended';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Network authentication required';\n default:\n return 'Something went wrong';\n }\n};\n\nexport const parseHttpErrorCodeToMessageEn = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Sorry, we could not process your request. Please try again later.';\n case HttpStatusCode.Unauthorized:\n return 'You are not authorized to perform this action. Please log in to continue.';\n case HttpStatusCode.PaymentRequired:\n return 'Payment is required to complete this action.';\n case HttpStatusCode.Forbidden:\n return 'You do not have permission to perform this action.';\n case HttpStatusCode.NotFound:\n return 'The requested resource was not found.';\n case HttpStatusCode.MethodNotAllowed:\n return 'The requested method is not allowed for this resource.';\n case HttpStatusCode.NotAcceptable:\n return 'The requested resource is not capable of generating a response matching the list of acceptable values.';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy authentication is required to complete this action.';\n case HttpStatusCode.RequestTimeout:\n return 'The server timed out waiting for the request.';\n case HttpStatusCode.Conflict:\n return 'The request conflicts with the current state of the resource.';\n case HttpStatusCode.Gone:\n return 'The requested resource is no longer available and will not be available again.';\n case HttpStatusCode.LengthRequired:\n return 'The request did not specify the length of its content, which is required by the requested resource.';\n case HttpStatusCode.PreconditionFailed:\n return 'The server does not meet one of the preconditions that the requester put on the request.';\n case HttpStatusCode.PayloadTooLarge:\n return 'The request is larger than the server is willing or able to process.';\n case HttpStatusCode.UriTooLong:\n return 'The URL provided was too long for the server to process.';\n case HttpStatusCode.UnsupportedMediaType:\n return 'The request entity has a media type which the server or resource does not support.';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'The client has asked for a portion of the file, but the server cannot supply that portion.';\n case HttpStatusCode.ExpectationFailed:\n return 'The server cannot meet the requirements of the Expect request-header field.';\n case HttpStatusCode.ImATeapot:\n return 'I am a teapot.';\n case HttpStatusCode.MisdirectedRequest:\n return 'The request was directed at a server that is not able to produce a response.';\n case HttpStatusCode.UnprocessableEntity:\n return 'The request was well-formed but was unable to be followed due to semantic errors.';\n case HttpStatusCode.Locked:\n return 'The resource that is being accessed is locked.';\n case HttpStatusCode.FailedDependency:\n return 'The request failed due to failure of a previous request.';\n case HttpStatusCode.TooEarly:\n return 'The server is unwilling to process the request because the user has not been authenticated.';\n case HttpStatusCode.UpgradeRequired:\n return 'The client should switch to a different protocol such as TLS/1.0, given in the Upgrade header field.';\n case HttpStatusCode.PreconditionRequired:\n return 'The origin server requires the request to be conditional.';\n case HttpStatusCode.TooManyRequests:\n return 'You have sent too many requests in a given amount of time. Please try again later.';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'The server is unwilling to process the request because its header fields are too large.';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'The resource is unavailable due to a legal demand.';\n case HttpStatusCode.InternalServerError:\n return 'Something went wrong on our end. Please try again later.';\n case HttpStatusCode.NotImplemented:\n return 'The server does not support the functionality required to fulfill the request.';\n case HttpStatusCode.BadGateway:\n return 'Something went wrong on our end. Please try again later.';\n case HttpStatusCode.ServiceUnavailable:\n return 'The server is currently unable to handle the request due to a temporary overload or maintenance of the server.';\n case HttpStatusCode.GatewayTimeout:\n return 'The server, while acting as a gateway or proxy, did not receive a timely response from the upstream server specified by the URL or some other auxiliary server it needed to access in attempting to complete the request.';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'The server does not support the HTTP protocol version used in the request.';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'The server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.';\n case HttpStatusCode.InsufficientStorage:\n return 'The method could not be performed on the resource because the server is unable to store the representation needed to successfully complete the request.';\n case HttpStatusCode.LoopDetected:\n return 'The server detected an infinite loop while processing the request.';\n case HttpStatusCode.NotExtended:\n return 'Further extensions to the request are required for the server to fulfill it.';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'You need to authenticate to gain network access.';\n default:\n return 'Something went wrong. Check your internet connection and try again later.';\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { parseHttpErrorCodeToMessageEn, parseHttpErrorCodeToTitleEn } from './parse-http-error-code-en';\n\n@Pipe({\n name: 'parseHttpErrorCodeToTitleEn',\n standalone: true,\n})\nexport class ParseHttpErrorCodeToTitleEnPipe implements PipeTransform {\n transform = parseHttpErrorCodeToTitleEn;\n}\n\n@Pipe({\n name: 'parseHttpErrorCodeToMessageEn',\n standalone: true,\n})\nexport class ParseHttpErrorCodeToMessageEnPipe implements PipeTransform {\n transform = parseHttpErrorCodeToMessageEn;\n}\n","import { RuntimeError } from '@ethlete/core';\n\n// codes 1000-1999\nexport const enum WebSocketRuntimeErrorCode {\n // Web Socket Client\n ROOM_NOT_JOINED = 1000,\n MESSAGE_MALFORMED = 1001,\n}\n\nexport const roomNotJoined = (room: string) => {\n return new RuntimeError(\n WebSocketRuntimeErrorCode.ROOM_NOT_JOINED,\n `Tried leaving the room \"${room}\" but it has not been joined.`,\n );\n};\n\nexport const messageMalformed = () => {\n return new RuntimeError(\n WebSocketRuntimeErrorCode.MESSAGE_MALFORMED,\n 'A message has been received but it is malformed (cannot be parsed as JSON).',\n );\n};\n","import {\n computed,\n DestroyRef,\n effect,\n inject,\n isDevMode,\n Signal,\n signal,\n untracked,\n WritableSignal,\n} from '@angular/core';\nimport { previousSignalValue } from '@ethlete/core';\nimport { io } from 'socket.io-client';\nimport { WebSocketClientConfig } from './web-socket-client-config';\nimport { messageMalformed, roomNotJoined } from './web-socket-errors';\n\n/** A default socket io message view */\nexport type SocketMessageView<TMessageData = unknown> = {\n room: string;\n event: string;\n data: TMessageData;\n};\n\nexport type WebSocketClientSubtle = {\n /** Leave a socket io room */\n leaveRoom: (room: string) => void;\n};\n\nexport type WebSocketClient<TMessageData extends SocketMessageView> = {\n /**\n * Join a socket io room\n * If a function is passed, it will be evaluated in a reactive signal context.\n * If the function returns null, no room will be joined.\n * If the function returns a string, the previous room will be left and the new room will be joined.\n */\n joinRoom: (room: string | (() => string | null)) => Signal<WebSocketRoom<TMessageData> | null>;\n\n /** Whether the client is connected to the server */\n isConnected: Signal<boolean>;\n\n /** Advanced web socket features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle: WebSocketClientSubtle;\n};\n\nexport type InternalWebSocketRoom<TMessageData extends SocketMessageView> = {\n latestMessage: WritableSignal<TMessageData | null>;\n};\n\nexport type WebSocketRoom<TMessageData extends SocketMessageView> = {\n /** The latest message received in the room */\n latestMessage: Signal<TMessageData | null>;\n};\n\nexport const createWebSocketClient = <TMessageData extends SocketMessageView>(config: WebSocketClientConfig) => {\n const socket = io(config.url, {\n withCredentials: true,\n autoConnect: false,\n });\n\n const rooms = new Map<string, InternalWebSocketRoom<TMessageData>>();\n const isConnected = signal(false);\n\n const joinRoom = (room: string | (() => string | null)) => {\n const roomFn = typeof room === 'function' ? room : () => room;\n\n const join = (name: string) => {\n socket.emit('join-room', name);\n\n const existingRoom = rooms.get(name);\n\n if (existingRoom) return existingRoom;\n\n const message = signal<TMessageData | null>(null);\n\n const newRoom: InternalWebSocketRoom<TMessageData> = {\n latestMessage: message,\n };\n\n rooms.set(name, newRoom);\n\n return newRoom;\n };\n\n const pre = previousSignalValue(computed(() => roomFn()));\n const roomData = signal<InternalWebSocketRoom<TMessageData> | null>(null);\n\n effect(() => {\n const current = roomFn();\n\n untracked(() => {\n const previous = pre();\n\n if (previous === current) return;\n\n if (previous) leaveRoom(previous);\n\n if (current) {\n const joinedRoom = join(current);\n if (joinedRoom) roomData.set(joinedRoom);\n } else {\n roomData.set(null);\n }\n });\n });\n\n inject(DestroyRef).onDestroy(() => {\n const current = roomFn();\n\n if (current) {\n leaveRoom(current);\n roomData.set(null);\n }\n });\n\n return roomData.asReadonly() as Signal<WebSocketRoom<TMessageData> | null>;\n };\n\n const leaveRoom = (room: string) => {\n if (!rooms.has(room)) {\n if (isDevMode()) throw roomNotJoined(room);\n }\n\n socket.emit('leave-room', room);\n\n rooms.delete(room);\n };\n\n const setupWebSocketConnectionListener = () => {\n socket.on('connect', () => {\n isConnected.set(true);\n\n for (const room of rooms.keys()) {\n joinRoom(room);\n }\n });\n socket.on('disconnect', () => isConnected.set(false));\n };\n\n const setupWebSocketListener = () => {\n socket.onAny((data: string) => {\n try {\n const json = JSON.parse(data) as TMessageData;\n\n const room = rooms.get(json.room);\n\n if (room) room.latestMessage.set(json);\n } catch (error) {\n console.error(error);\n if (isDevMode()) throw messageMalformed();\n }\n });\n };\n\n inject(DestroyRef).onDestroy(() => socket.disconnect());\n\n setupWebSocketConnectionListener();\n setupWebSocketListener();\n socket.connect();\n\n const client: WebSocketClient<TMessageData> = {\n joinRoom,\n isConnected: isConnected.asReadonly(),\n subtle: {\n leaveRoom,\n },\n };\n\n return client;\n};\n\nexport const provideWebSocketClient = (config: WebSocketClientConfig) => {\n return {\n provide: config.token,\n useFactory: () => createWebSocketClient(config),\n };\n};\n","import { InjectionToken } from '@angular/core';\nimport { SocketMessageView, WebSocketClient } from './web-socket-client';\n\nexport type CreateWebSocketClientConfig = {\n /** A unique name for the client */\n name: string;\n\n /** The URL of the socket io server */\n url: string;\n};\n\nexport type WebSocketClientRef<TMessageData extends SocketMessageView = SocketMessageView> = InjectionToken<\n WebSocketClient<TMessageData>\n>;\n\nexport type WebSocketClientConfig = CreateWebSocketClientConfig & {\n /** A generated token for dependency injection */\n token: WebSocketClientRef;\n};\n\nexport const createWebSocketClientConfig = (options: CreateWebSocketClientConfig) => {\n const token = new InjectionToken<WebSocketClientConfig>(`WebSocketClient_${options.name}`);\n\n const clientConfig: WebSocketClientConfig = {\n token,\n name: options.name,\n url: options.url,\n };\n\n return clientConfig;\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 { DestroyRef, NgZone, assertInInjectionContext, inject, isDevMode } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n ET_PROPERTY_REMOVED,\n clone,\n createDestroy,\n equal,\n injectQueryParamChanges,\n injectQueryParams,\n} 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 | (() => string);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyQueryForm = QueryForm<any>;\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 _zone = inject(NgZone);\n private readonly _didValueChanges$ = new Subject<boolean>();\n\n private _isObserving = false;\n private _skipNextResets = false;\n\n private _queryParamChanges$ = toObservable(injectQueryParamChanges());\n private _queryParams = injectQueryParams();\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 inject(DestroyRef).onDestroy(() => this._cleanup());\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._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._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 this._cleanup();\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 (!field.data.skipAutoTransform) {\n const defaultIsNum = this._getDefaultValue(key) === 'number';\n const valueIsNum = !isNaN(Number(value));\n const valueContainsWhitespace = typeof value === 'string' && value.trim() !== value;\n const valueHasLeadingZero = typeof value === 'string' && value.startsWith('0');\n const valueEndsWithDot = typeof value === 'string' && value.endsWith('.');\n\n const defaultIsBool = this._getDefaultValue(key) === 'boolean';\n const valueIsBool = value === 'true' || value === 'false';\n\n if (defaultIsNum || (valueIsNum && !valueContainsWhitespace && !valueHasLeadingZero && !valueEndsWithDot)) {\n deserializedValue = transformToNumber(value);\n } else if (defaultIsBool || valueIsBool) {\n deserializedValue = transformToBoolean(value);\n }\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 resetFieldToDefault(key: keyof QueryFormValue<T>, options?: QueryFormWriteOptions) {\n const defaultValue = this._getDefaultValue(key as string);\n\n this.form.controls[key].setValue(defaultValue);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n resetFieldsToDefault(keys: (keyof QueryFormValue<T>)[], options?: QueryFormWriteOptions) {\n const defaults = keys.reduce(\n (acc, key) => {\n acc[key] = this._getDefaultValue(key as string);\n\n return acc;\n },\n {} as Partial<QueryFormValue<T>>,\n );\n\n this.patchValue(defaults);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n resetAllFieldsToDefault(options?: QueryFormWriteOptions & { skipFields?: (keyof QueryFormValue<T>)[] }) {\n const keys = Object.keys(this._fields) as (keyof QueryFormValue<T>)[];\n\n if (options?.skipFields) {\n for (const key of options.skipFields) {\n const index = keys.indexOf(key);\n\n if (index !== -1) {\n keys.splice(index, 1);\n }\n }\n }\n\n this.resetFieldsToDefault(keys, options);\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 } else if (typeof val === 'function') {\n return val();\n }\n\n return val ?? null;\n }\n\n private _transformKeyToQueryParam(key: string) {\n if (!this._options?.queryParamPrefix) return key;\n\n const prefix =\n typeof this._options?.queryParamPrefix === 'string'\n ? this._options.queryParamPrefix\n : this._options.queryParamPrefix();\n\n return `${prefix}-${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.data.defaultValue !== undefined ? field.data.defaultValue : 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 const isDefault = this._isDefaultValue(key, value);\n const writeDefaultToUrl = field.data.appendDefaultValueToUrl === true;\n const writeToUrl = field.data.appendToUrl !== false;\n\n if (!writeToUrl || (isDefault && !writeDefaultToUrl)) {\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 queueMicrotask(() => {\n this._router.navigate([], {\n queryParams,\n replaceUrl,\n queryParamsHandling: 'merge',\n });\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 private _cleanup() {\n const queryParamKeys = Object.keys(this._fields);\n const queryParams = queryParamKeys.reduce(\n (acc, key) => {\n acc[this._transformKeyToQueryParam(key)] = undefined;\n return acc;\n },\n {} as Record<string, unknown>,\n );\n this._zone.run(() => {\n queueMicrotask(() => {\n this._router.navigate([], {\n queryParams,\n replaceUrl: true,\n queryParamsHandling: 'merge',\n });\n });\n });\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 * as ExperimentalQuery from './lib/experimental';\nexport * from './lib/experimental/pipes';\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","extractExpiresInSeconds","shouldRetryRequest","buildQueryCacheKey","shouldCacheQuery","i1","deleteCookie","coreDeleteCookie"],"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/experimental/http/query-errors.ts","../../../../libs/query/src/lib/experimental/auth/bearer-auth-provider.ts","../../../../libs/query/src/lib/experimental/auth/bearer-auth-provider-config.ts","../../../../libs/query/src/lib/experimental/http/query-state.ts","../../../../libs/query/src/lib/experimental/http/query-snapshot.ts","../../../../libs/query/src/lib/experimental/http/query-utils.ts","../../../../libs/query/src/lib/experimental/http/query-error-response.ts","../../../../libs/query/src/lib/experimental/http/http-request.ts","../../../../libs/query/src/lib/experimental/http/query-features.ts","../../../../libs/query/src/lib/experimental/http/query-stack.ts","../../../../libs/query/src/lib/experimental/http/paged-query-stack.ts","../../../../libs/query/src/lib/experimental/http/query-dependencies.ts","../../../../libs/query/src/lib/experimental/http/query-execute-utils.ts","../../../../libs/query/src/lib/experimental/http/query-execute.ts","../../../../libs/query/src/lib/experimental/http/query.ts","../../../../libs/query/src/lib/experimental/http/query-repository.ts","../../../../libs/query/src/lib/experimental/http/query-client.ts","../../../../libs/query/src/lib/experimental/http/query-client-config.ts","../../../../libs/query/src/lib/experimental/http/query-creator.ts","../../../../libs/query/src/lib/experimental/http/secure-query-execute.ts","../../../../libs/query/src/lib/experimental/http/secure-query.ts","../../../../libs/query/src/lib/experimental/http/secure-query-creator.ts","../../../../libs/query/src/lib/experimental/http/query-creator-templates.ts","../../../../libs/query/src/lib/experimental/gql/gql-query-execute.ts","../../../../libs/query/src/lib/experimental/gql/gql-query.ts","../../../../libs/query/src/lib/experimental/gql/gql-query-creator.ts","../../../../libs/query/src/lib/experimental/gql/gql-query-creator-templates.ts","../../../../libs/query/src/lib/experimental/pipes/parse-http-error-code-de.ts","../../../../libs/query/src/lib/experimental/pipes/parse-http-error-code-de.pipe.ts","../../../../libs/query/src/lib/experimental/pipes/parse-http-error-code-en.ts","../../../../libs/query/src/lib/experimental/pipes/parse-http-error-code-en.pipe.ts","../../../../libs/query/src/lib/experimental/ws/web-socket-errors.ts","../../../../libs/query/src/lib/experimental/ws/web-socket-client.ts","../../../../libs/query/src/lib/experimental/ws/web-socket-client-config.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 typeof error[0] === 'object' &&\n 'message' in error[0] &&\n 'propertyPath' in error[0] &&\n 'invalidValue' in error[0]\n );\n};\n","import { HttpStatusCode } from '@angular/common/http';\nimport { 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 as number) === 0) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n return { retry: false };\n};\n","import { HttpStatusCode } from '@angular/common/http';\nimport { Observable, Observer } from 'rxjs';\nimport { PartialXhrState, RequestConfig, RequestError, RequestEvent } from './request.types';\nimport {\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 {\n CreateComputedOptions,\n Injector,\n Signal,\n assertInInjectionContext,\n computed,\n inject,\n signal,\n} from '@angular/core';\nimport { ToObservableOptions, ToSignalOptions, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { computedTillTruthy, createDestroy, syncSignal } 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: NoInfer<ToSignalOptions<T | undefined>> & {\n initialValue?: undefined;\n requireSync?: false;\n } & QueryContainerConfig,\n): Signal<T | undefined>;\nexport function toQuerySignal<T extends AnyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T | null>> & {\n initialValue?: null;\n requireSync?: false;\n } & QueryContainerConfig,\n): Signal<T | null>;\nexport function toQuerySignal<T extends AnyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T>> & {\n initialValue?: undefined;\n requireSync: true;\n } & QueryContainerConfig,\n): Signal<T>;\nexport function toQuerySignal<T extends AnyQuery | null, const U extends T>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T | U>> & {\n initialValue: U;\n requireSync?: false;\n } & QueryContainerConfig,\n): Signal<T | U>;\n\nexport function toQuerySignal<T extends AnyQuery | null, U = undefined>(\n source: Observable<T> | Subscribable<T>,\n options?: ToSignalOptions<T | U> & { 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\n/**\n * Creates a signal that will only be reactive until the first query is created.\n * All subsequent changes inside the computation will be ignored.\n */\nexport function queryComputedTillTruthy<T extends AnyQuery | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T | null> {\n const c = computedTillTruthy(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 const roSignal = toSignal(\n toObservable(source).pipe(\n switchMap((q) => extractQuery(q)?.state$ ?? of(null)),\n switchMap((state) => {\n if (cacheResponse) {\n return of(state).pipe(filterQueryStates([QueryStateType.Success, QueryStateType.Failure]));\n }\n\n return of(state);\n }),\n ),\n {\n initialValue: null,\n },\n ) as Signal<QueryState<QueryDataOf<QueryOf<ReturnType<T>>>> | null>;\n\n const rwSignal = signal<QueryState<QueryDataOf<QueryOf<ReturnType<T>>>> | null>(roSignal());\n\n syncSignal(roSignal, rwSignal);\n\n return rwSignal;\n}\n\nexport type QueryStateSignal<T extends Signal<AnyQuery | AnyQueryCollection | null>> = Signal<QueryDataOf<\n QueryOf<ReturnType<T>>\n> | null> & { reset: () => void };\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 const dataSignal = computed(() => {\n const state = s();\n\n return isQueryStateSuccess(state) ? state.response : null;\n });\n\n (dataSignal as QueryStateSignal<T>)['reset'] = () => {\n s.set(null);\n };\n\n return dataSignal as QueryStateSignal<T>;\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 } from '../query';\nimport { QueryClient, buildQueryCacheKey, 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 = (args?.config?.queryStoreCacheKey ?? '') + buildQueryCacheKey(route as string, args);\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 { 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 buildQueryCacheKey = (route: string, args: BaseArguments | undefined) => {\n const variables = JSON.stringify(args?.variables || {})\n // replace all curly braces with empty string\n .replace(/{|}/g, '')\n // replace new lines and whitespaces with empty string\n .replace(/\\s/g, '');\n\n const seed = `${route}...${variables}`;\n\n let hash = 0;\n\n for (const char of seed) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;\n }\n\n // Force positive number hash.\n // 2147483647 = equivalent of Integer.MAX_VALUE.\n hash += 2147483647 + 1;\n\n return hash.toString();\n};\n","const getOpName = /(query|mutation) ?([\\w\\d-_]+)? ?\\(.*?\\)? \\{/;\n\nexport type TransformedGqlQuery = {\n query: string;\n variables?: Record<string, unknown>;\n operationName?: string;\n};\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: TransformedGqlQuery = { query: str };\n if (variables) data['variables'] = variables;\n if (name && name.length) {\n const operationName = name[2];\n if (operationName) data['operationName'] = name[2];\n }\n\n // minify the query\n data.query = data.query.replace(/\\s+/g, ' ').trim();\n\n return data as TransformedGqlQuery;\n };\n};\n\nexport type GQL = string & { gql: 'tag' };\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 as GQL;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpStatusCode } from '@angular/common/http';\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 { 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 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 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 { HttpStatusCode } from '@angular/common/http';\nimport { 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 { 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, headers } = 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 headers: headers,\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 if (this._dependents[tNodeIndex] !== undefined) {\n this._dependents[tNodeIndex]--;\n }\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 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, Observable, combineLatest, map, of, shareReplay, switchMap, tap } from 'rxjs';\nimport { filterSuccess } 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>(10);\n\n private readonly _data$ = this._queries$.pipe(\n switchMap((queries) => {\n if (!queries.length) {\n return of([]);\n }\n\n return combineLatest(\n queries.map((query) =>\n query.state$.pipe(\n filterSuccess(),\n map((state) => ({ state, query })),\n ),\n ),\n );\n }),\n tap((stateMaps) => {\n const lastState = stateMaps[stateMaps.length - 1]?.state;\n const lastQuery = stateMaps[stateMaps.length - 1]?.query;\n\n if (!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 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 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(\n private _config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n private _destroy$: Observable<boolean>,\n ) {\n this._itemsPerPage$.next(this._config.limitParam?.value ?? 10);\n }\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 && newPage > 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 if (this._config.pollingInterval) {\n query.poll({ interval: this._config.pollingInterval, takeUntil: this._destroy$ });\n }\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 { toSignal } from '@angular/core/rxjs-interop';\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 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 data = toSignal(this._data$, { requireSync: true });\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, this._destroy$) 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 = state ? state.meta.triggeredVia !== 'poll' : 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 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.tagName === 'BUTTON';\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 changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\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 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\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\">Query 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","import { RuntimeError } from '@ethlete/core';\nimport { QueryFeatureType } from './query-features';\n\n// codes 0-999\nexport const enum QueryRuntimeErrorCode {\n // Query\n QUERY_FEATURE_USED_MULTIPLE_TIMES = 0,\n\n // Query features\n WITH_ARGS_QUERY_FEATURE_MISSING_BUT_ROUTE_IS_FUNCTION = 100,\n WITH_POLLING_USED_ON_UNSUPPORTED_HTTP_METHOD = 101,\n WITH_AUTO_REFRESH_USED_ON_UNSUPPORTED_HTTP_METHOD = 102,\n WITH_AUTO_REFRESH_USED_IN_MANUAL_QUERY = 103,\n\n // Auth provider\n COOKIE_LOGIN_TRIED_BUT_COOKIE_DISABLED = 200,\n ENABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG = 201,\n DISABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG = 202,\n LOGIN_CALLED_WITHOUT_CONFIG = 203,\n LOGIN_WITH_TOKEN_CALLED_WITHOUT_CONFIG = 204,\n REFRESH_TOKEN_CALLED_WITHOUT_CONFIG = 205,\n SELECT_ROLE_CALLED_WITHOUT_CONFIG = 206,\n DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_OBJECT = 207,\n DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_ACCESS_TOKEN = 208,\n DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_REFRESH_TOKEN = 209,\n UNABLE_TO_DECRYPT_BEARER_TOKEN = 210,\n BEARER_EXPIRES_IN_PROPERTY_NOT_NUMBER = 211,\n\n // Query Repository\n UNCACHEABLE_REQUEST_HAS_CACHE_KEY_PARAM = 300,\n UNCACHEABLE_REQUEST_HAS_ALLOW_CACHE_PARAM = 301,\n\n // Paged Query Stack\n PAGED_QUERY_STACK_PAGE_BIGGER_THAN_TOTAL_PAGES = 400,\n PAGED_QUERY_STACK_NEXT_PAGE_CALLED_WITHOUT_PREVIOUS_PAGE = 401,\n PAGED_QUERY_STACK_PREVIOUS_PAGE_CALLED_BUT_ALREADY_AT_FIRST_PAGE = 402,\n\n // Query Stack\n QUERY_STACK_WITH_ARGS_USED = 500,\n QUERY_STACK_WITH_RESPONSE_UPDATE_USED = 501,\n}\n\nexport const queryFeatureUsedMultipleTimes = (type: QueryFeatureType) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_FEATURE_USED_MULTIPLE_TIMES,\n `The query feature \"${type}()\" was used multiple times.`,\n );\n};\n\nexport const withArgsQueryFeatureMissingButRouteIsFunction = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_ARGS_QUERY_FEATURE_MISSING_BUT_ROUTE_IS_FUNCTION,\n `This queries route is a function, but a \"withArgs()\" feature is missing.`,\n );\n};\n\nexport const withPollingUsedOnUnsupportedHttpMethod = (method: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_POLLING_USED_ON_UNSUPPORTED_HTTP_METHOD,\n `This is a \"${method}\" request, \"withPolling()\" is only supported for GET, HEAD, OPTIONS requests and GQL queries.`,\n );\n};\n\nexport const withAutoRefreshUsedOnUnsupportedHttpMethod = (method: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_AUTO_REFRESH_USED_ON_UNSUPPORTED_HTTP_METHOD,\n `This is a \"${method}\" request, \"withAutoRefresh()\" is only supported for GET, HEAD, OPTIONS requests and GQL queries.`,\n );\n};\n\nexport const withAutoRefreshUsedInManualQuery = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_AUTO_REFRESH_USED_IN_MANUAL_QUERY,\n `\"withAutoRefresh()\" has been used inside a query that has \"onlyManualExecution\" set to true.` +\n ` If this is intentional, set \"ignoreOnlyManualExecution\" to true inside the auto refresh config.`,\n );\n};\n\nexport const cookieLoginTriedButCookieDisabled = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.COOKIE_LOGIN_TRIED_BUT_COOKIE_DISABLED,\n `Cookie login has been tried, but the cookie is disabled.`,\n );\n};\n\nexport const enableCookieCalledWithoutCookieConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.ENABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG,\n `enableCookie() has been called but there is no cookie config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const disableCookieCalledWithoutCookieConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.DISABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG,\n `disableCookie() has been called but there is no cookie config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const loginCalledWithoutConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.LOGIN_CALLED_WITHOUT_CONFIG,\n `login() has been called without a config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const loginWithTokenCalledWithoutConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.LOGIN_WITH_TOKEN_CALLED_WITHOUT_CONFIG,\n `loginWithToken() has been called without a config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const refreshTokenCalledWithoutConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.REFRESH_TOKEN_CALLED_WITHOUT_CONFIG,\n `refreshToken() has been called without a config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const selectRoleCalledWithoutConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.SELECT_ROLE_CALLED_WITHOUT_CONFIG,\n `selectRole() has been called without a config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const defaultResponseTransformerResponseNotObject = (currentType: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_OBJECT,\n `The default response transformer expects the response to be an object, but it is a \"${currentType}\".`,\n );\n};\n\nexport const defaultResponseTransformerResponseNotContainingAccessToken = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_ACCESS_TOKEN,\n `The default response transformer expects the response to contain an \"accessToken\" property.`,\n );\n};\n\nexport const defaultResponseTransformerResponseNotContainingRefreshToken = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_REFRESH_TOKEN,\n `The default response transformer expects the response to contain a \"refreshToken\" property.`,\n );\n};\n\nexport const unableToDecryptBearerToken = (token: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.UNABLE_TO_DECRYPT_BEARER_TOKEN,\n `The bearer token could not be decrypted: ${token}`,\n );\n};\n\nexport const bearerExpiresInPropertyNotNumber = (expiresIn: unknown) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.BEARER_EXPIRES_IN_PROPERTY_NOT_NUMBER,\n `The expires in property is not a number: ${expiresIn}`,\n );\n};\n\nexport const uncacheableRequestHasCacheKeyParam = (key: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.UNCACHEABLE_REQUEST_HAS_CACHE_KEY_PARAM,\n `This request is uncacheable, but a cache key was provided: ${key}. Please remove it.`,\n );\n};\n\nexport const uncacheableRequestHasAllowCacheParam = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.UNCACHEABLE_REQUEST_HAS_ALLOW_CACHE_PARAM,\n `This request is uncacheable, but allowCache is set to true. Please remove it.`,\n );\n};\n\nexport const pagedQueryStackPageBiggerThanTotalPages = (page: number, totalPages: number) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.PAGED_QUERY_STACK_PAGE_BIGGER_THAN_TOTAL_PAGES,\n `The page \"${page}\" is bigger than the total pages \"${totalPages}\".`,\n );\n};\n\nexport const pagedQueryStackNextPageCalledWithoutPreviousPage = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.PAGED_QUERY_STACK_NEXT_PAGE_CALLED_WITHOUT_PREVIOUS_PAGE,\n `fetchNextPage() has been called but the current page is not yet loaded. Please call it after the previous page has been loaded.`,\n );\n};\n\nexport const pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.PAGED_QUERY_STACK_PREVIOUS_PAGE_CALLED_BUT_ALREADY_AT_FIRST_PAGE,\n `fetchPreviousPage() has been called but the current page is already the first page.`,\n );\n};\n\nexport const queryStackWithArgsUsed = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_STACK_WITH_ARGS_USED,\n `withArgs() has been used in a query stack or a paged query stack. This is not supported.`,\n );\n};\n\nexport const queryStackWithResponseUpdateUsed = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_STACK_WITH_RESPONSE_UPDATE_USED,\n `withResponseUpdate() has been used in a query stack or a paged query stack. This is not supported.`,\n );\n};\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { computed, effect, isDevMode, Signal, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport {\n deleteCookie as coreDeleteCookie,\n getCookie,\n getDomain,\n injectRoute,\n isObject,\n setCookie,\n} from '@ethlete/core';\nimport { of, switchMap, tap, timer } from 'rxjs';\nimport { decryptBearer } from '../../auth';\nimport { QueryArgs, QuerySnapshot, RequestArgs } from '../http';\nimport {\n bearerExpiresInPropertyNotNumber,\n cookieLoginTriedButCookieDisabled,\n defaultResponseTransformerResponseNotContainingAccessToken,\n defaultResponseTransformerResponseNotContainingRefreshToken,\n defaultResponseTransformerResponseNotObject,\n disableCookieCalledWithoutCookieConfig,\n enableCookieCalledWithoutCookieConfig,\n loginCalledWithoutConfig,\n loginWithTokenCalledWithoutConfig,\n refreshTokenCalledWithoutConfig,\n selectRoleCalledWithoutConfig,\n unableToDecryptBearerToken,\n} from '../http/query-errors';\nimport {\n BearerAuthProviderConfig,\n BearerAuthProviderCookieConfig,\n BearerAuthProviderRouteConfig,\n BearerAuthProviderTokens,\n} from './bearer-auth-provider-config';\n\ntype InternalQueryExecuteOptions = {\n triggeredInternally?: boolean;\n};\n\ntype AuthProviderQueryWithType<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n> =\n | {\n type: 'login';\n query: ReturnType<typeof createAuthProviderQuery<TLoginArgs>> | null;\n }\n | {\n type: 'tokenLogin';\n query: ReturnType<typeof createAuthProviderQuery<TTokenLoginArgs>> | null;\n }\n | {\n type: 'tokenRefresh';\n query: ReturnType<typeof createAuthProviderQuery<TTokenRefreshArgs>> | null;\n }\n | {\n type: 'selectRole';\n query: ReturnType<typeof createAuthProviderQuery<TSelectRoleArgs>> | null;\n };\n\ntype QuerySnapshotWithType<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n> =\n | ({\n type: 'login';\n } & QuerySnapshot<TLoginArgs>)\n | ({\n type: 'tokenLogin';\n } & QuerySnapshot<TTokenLoginArgs>)\n | ({\n type: 'tokenRefresh';\n } & QuerySnapshot<TTokenRefreshArgs>)\n | ({\n type: 'selectRole';\n } & QuerySnapshot<TSelectRoleArgs>);\n\nexport type BearerAuthProvider<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n> = {\n /**\n * Logs in the user with the given args.\n */\n login: (args: RequestArgs<TLoginArgs>) => QuerySnapshot<TLoginArgs>;\n\n /**\n * Logs in the user with the given token.\n */\n loginWithToken: (args: RequestArgs<TTokenLoginArgs>) => QuerySnapshot<TTokenLoginArgs>;\n\n /**\n * Refreshes the token with the given refresh token.\n */\n refreshToken: (args: RequestArgs<TTokenRefreshArgs>) => QuerySnapshot<TTokenRefreshArgs>;\n\n /**\n * Selects the role for the user.\n */\n selectRole: (args: RequestArgs<TSelectRoleArgs>) => QuerySnapshot<TSelectRoleArgs>;\n\n /**\n * Logs out the user and removes the cookie.\n */\n logout: () => void;\n\n /**\n * Enables cookie usage for the auth provider.\n */\n enableCookie: () => void;\n\n /**\n * Disables cookie usage for the auth provider and removes the cookie.\n */\n disableCookie: () => void;\n\n /**\n * Checks if the cookie is present.\n */\n isCookiePresent: () => boolean;\n\n /**\n * Tries to login with the given cookie config.\n * Returns `true` if a cookie was found, `false` otherwise.\n */\n tryLoginWithCookie: () => boolean;\n\n /**\n * The latest executed query that was not triggered internally.\n */\n latestExecutedQuery: Signal<QuerySnapshotWithType<\n TLoginArgs,\n TTokenLoginArgs,\n TTokenRefreshArgs,\n TSelectRoleArgs\n > | null>;\n\n onRefreshFailure?: (callback: (error: HttpErrorResponse) => void) => void;\n\n /**\n * A signal that contains the current access and refresh tokens.\n */\n tokens: Signal<BearerAuthProviderTokens | null>;\n};\n\nconst defaultResponseTransformer = <T>(response: T) => {\n if (!isObject(response)) {\n throw defaultResponseTransformerResponseNotObject(typeof response);\n }\n\n if (!('accessToken' in response)) {\n throw defaultResponseTransformerResponseNotContainingAccessToken();\n }\n\n if (!('refreshToken' in response)) {\n throw defaultResponseTransformerResponseNotContainingRefreshToken();\n }\n\n return response as unknown as BearerAuthProviderTokens;\n};\n\nconst FIVE_MINUTES = 5 * 60 * 1000;\n\nconst createAuthProviderQuery = <T extends QueryArgs>(\n config: BearerAuthProviderRouteConfig<T>,\n authProviderConfig: {\n /**\n * The time in milliseconds before the token expires when the refresh should be triggered.\n * @default 300000 // (5 minutes)\n */\n refreshBuffer?: number;\n\n /**\n * The expires in property name inside the jwt body\n * @default 'exp'\n */\n expiresInPropertyName?: string;\n },\n) => {\n const query = config.queryCreator({ onlyManualExecution: true });\n\n const triggeredInternally = signal(false);\n\n const tokens = computed(() => {\n const res = query.response();\n\n if (!res) return null;\n\n const transformed = config.responseTransformer?.(res) ?? defaultResponseTransformer(res);\n\n const bearerValue = decryptBearer(transformed.accessToken);\n\n if (!bearerValue) throw unableToDecryptBearerToken(transformed.accessToken);\n\n return {\n bearer: bearerValue,\n tokens: transformed,\n };\n });\n\n const expiresIn = computed(() => {\n const res = tokens();\n\n if (!res) return null;\n\n const expiresIn = res.bearer[authProviderConfig.expiresInPropertyName ?? 'exp'];\n const refreshBuffer = authProviderConfig.refreshBuffer ?? FIVE_MINUTES;\n\n if (typeof expiresIn !== 'number') {\n throw bearerExpiresInPropertyNotNumber(expiresIn);\n }\n\n // const dummyRemainingTime = (query.lastTimeExecutedAt() ?? 0) + 5000 - new Date().getTime();\n const remainingTime = new Date(expiresIn * 1000).getTime() - refreshBuffer - new Date().getTime();\n\n return remainingTime;\n });\n\n const execute = (newArgs: RequestArgs<T>, options?: InternalQueryExecuteOptions) => {\n query.execute({ args: newArgs });\n triggeredInternally.set(options?.triggeredInternally ?? false);\n };\n\n return {\n execute,\n query,\n tokens,\n expiresIn,\n triggeredInternally: triggeredInternally.asReadonly(),\n };\n};\n\nexport const createBearerAuthProvider = <\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n>(\n options: BearerAuthProviderConfig<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>,\n): BearerAuthProvider<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs> => {\n const route = injectRoute();\n const cookieEnabled = signal(options.cookie === undefined ? false : (options.cookie.enabled ?? true));\n const cookieOptions: Required<Omit<BearerAuthProviderCookieConfig<TTokenRefreshArgs>, 'enabled'>> = {\n expiresInDays: 30,\n name: 'etAuth',\n path: '/',\n sameSite: 'lax',\n domain: getDomain() ?? 'localhost',\n refreshArgsTransformer: (token) => ({ body: { token } }) as RequestArgs<TTokenRefreshArgs>,\n autoLoginExcludeRoutes: [],\n ...(options.cookie ?? {}),\n };\n\n const loginQuery = options.login ? createAuthProviderQuery(options.login, options) : null;\n const tokenLoginQuery = options.tokenLogin ? createAuthProviderQuery(options.tokenLogin, options) : null;\n const tokenRefreshQuery = options.tokenRefresh ? createAuthProviderQuery(options.tokenRefresh, options) : null;\n const selectRoleQuery = options.selectRole ? createAuthProviderQuery(options.selectRole, options) : null;\n\n const queries: AuthProviderQueryWithType<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>[] = [\n { type: 'login', query: loginQuery },\n { type: 'tokenLogin', query: tokenLoginQuery },\n { type: 'tokenRefresh', query: tokenRefreshQuery },\n { type: 'selectRole', query: selectRoleQuery },\n ];\n\n const latestExecutedQuery = computed(() => {\n const relevantQueries = queries.filter((q) => q.query && q.query.query.lastTimeExecutedAt() !== null);\n\n return findMostRecentQuery(relevantQueries);\n });\n\n const tokens = computed(() => {\n const query = latestExecutedQuery();\n\n return query?.query?.tokens()?.tokens ?? null;\n });\n\n toObservable(\n computed(() => {\n const query = latestExecutedQuery();\n const expiresIn = query?.query?.expiresIn() ?? null;\n const tokens = query?.query?.tokens() ?? null;\n\n return { expiresIn, tokens, query };\n }),\n )\n .pipe(\n switchMap((res) => {\n if (!res.tokens || res.expiresIn === null || !options.tokenRefresh) return of(null);\n\n const expIn = res.expiresIn;\n const tokens = res.tokens;\n\n if (!expIn || !tokens) return of(null);\n\n return timer(expIn).pipe(\n tap(() =>\n refreshToken(\n {\n ...cookieOptions.refreshArgsTransformer(tokens.tokens.refreshToken),\n },\n { triggeredInternally: true },\n ),\n ),\n );\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n const latestNonInternalQuery = signal<QuerySnapshotWithType<\n TLoginArgs,\n TTokenLoginArgs,\n TTokenRefreshArgs,\n TSelectRoleArgs\n > | null>(null);\n\n effect(() => {\n const relevantQueries = queries.filter(\n (q) => q.query && !q.query.triggeredInternally() && q.query.query.lastTimeExecutedAt() !== null,\n );\n\n const lastQuery = findMostRecentQuery(relevantQueries);\n\n untracked(() => {\n if (!lastQuery || !lastQuery.query?.query) return;\n\n latestNonInternalQuery.set({\n type: lastQuery.type,\n ...lastQuery.query.query.createSnapshot(),\n } as QuerySnapshotWithType<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>);\n });\n });\n\n // Cookie writing\n effect(() => {\n const isCookieEnabled = cookieEnabled();\n const res = latestExecutedQuery();\n const error = res?.query?.query.error();\n\n if (!isCookieEnabled || (error && error.raw.status === 401)) {\n deleteCookie();\n return;\n }\n\n if (!res?.query) return;\n\n const { tokens } = res.query;\n\n const rt = tokens()?.tokens.refreshToken;\n\n if (!rt) return;\n\n writeCookie(rt);\n });\n\n const login = (args: RequestArgs<TLoginArgs>) => {\n if (!loginQuery) {\n throw loginCalledWithoutConfig();\n }\n\n loginQuery.execute(args);\n\n return loginQuery.query.createSnapshot();\n };\n\n const loginWithToken = (args: RequestArgs<TTokenLoginArgs>) => {\n if (!tokenLoginQuery) {\n throw loginWithTokenCalledWithoutConfig();\n }\n\n tokenLoginQuery.execute(args);\n\n return tokenLoginQuery.query.createSnapshot();\n };\n\n const refreshToken = (args: RequestArgs<TTokenRefreshArgs>, options?: InternalQueryExecuteOptions) => {\n if (!tokenRefreshQuery) {\n throw refreshTokenCalledWithoutConfig();\n }\n\n tokenRefreshQuery.execute(args, { triggeredInternally: options?.triggeredInternally });\n\n return tokenRefreshQuery.query.createSnapshot();\n };\n\n const selectRole = (args: RequestArgs<TSelectRoleArgs>) => {\n if (!selectRoleQuery) {\n throw selectRoleCalledWithoutConfig();\n }\n\n selectRoleQuery.execute(args);\n\n return selectRoleQuery.query.createSnapshot();\n };\n\n const logout = () => {\n deleteCookie();\n loginQuery?.query.reset();\n tokenLoginQuery?.query.reset();\n tokenRefreshQuery?.query.reset();\n selectRoleQuery?.query.reset();\n latestNonInternalQuery.set(null);\n };\n\n const enableCookie = () => {\n if (isDevMode() && !options.cookie) {\n throw enableCookieCalledWithoutCookieConfig();\n }\n\n cookieEnabled.set(true);\n };\n\n const disableCookie = () => {\n if (isDevMode() && !options.cookie) {\n throw disableCookieCalledWithoutCookieConfig();\n }\n\n cookieEnabled.set(false);\n deleteCookie();\n };\n\n const isCookiePresent = () => {\n return !!getCookie(cookieOptions.name);\n };\n\n const tryLoginWithCookie = () => {\n const isCookieEnabled = cookieEnabled();\n\n if (!isCookieEnabled) {\n if (isDevMode()) {\n throw cookieLoginTriedButCookieDisabled();\n }\n return false;\n }\n\n const cookie = getCookie(cookieOptions.name);\n\n if (!cookie) {\n return false;\n }\n\n refreshToken(cookieOptions.refreshArgsTransformer(cookie));\n\n return true;\n };\n\n const writeCookie = (refreshToken: string) => {\n const { name, expiresInDays, domain, path, sameSite } = cookieOptions;\n\n setCookie(name, refreshToken, expiresInDays, domain, path, sameSite);\n };\n\n const deleteCookie = () => {\n const { name, path, domain } = cookieOptions;\n\n coreDeleteCookie(name, path, domain);\n };\n\n const findMostRecentQuery = (\n queriesToSearch: AuthProviderQueryWithType<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>[],\n ) => {\n return queriesToSearch.reduce(\n (acc, curr) => {\n if (!acc) return curr;\n\n const accExp = acc.query?.query.lastTimeExecutedAt() ?? null;\n const currExp = curr.query?.query.lastTimeExecutedAt() ?? null;\n\n if (currExp === null || accExp === null) return acc;\n\n return accExp > currExp ? acc : curr;\n },\n null as AuthProviderQueryWithType<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs> | null,\n );\n };\n\n const bearerAuthProvider: BearerAuthProvider<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs> = {\n login,\n loginWithToken,\n refreshToken,\n selectRole,\n logout,\n enableCookie,\n disableCookie,\n isCookiePresent,\n tryLoginWithCookie,\n latestExecutedQuery: latestNonInternalQuery.asReadonly(),\n tokens,\n };\n\n if (cookieEnabled()) {\n if (!cookieOptions.autoLoginExcludeRoutes.some((r) => route().startsWith(r))) {\n tryLoginWithCookie();\n }\n }\n\n return bearerAuthProvider;\n};\n\nexport const provideBearerAuthProvider = <\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n>(\n config: BearerAuthProviderConfig<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>,\n) => {\n return {\n provide: config.token,\n useFactory: () => createBearerAuthProvider(config),\n };\n};\n","import { InjectionToken } from '@angular/core';\nimport { QueryArgs, QueryClientRef, QueryCreator, RequestArgs, ResponseType } from '../http';\nimport { BearerAuthProvider } from './bearer-auth-provider';\n\nexport type BearerAuthProviderTokens = {\n accessToken: string;\n refreshToken: string;\n};\n\nexport type BearerAuthProviderRouteConfig<TArgs extends QueryArgs> = {\n queryCreator: QueryCreator<TArgs>;\n\n /**\n * A function that transforms the response into the format that the auth provider expects\n *\n * The expected format is an object with the `accessToken` and `refreshToken` properties.\n *\n * @default (response) => response\n */\n responseTransformer?: (response: ResponseType<TArgs>) => BearerAuthProviderTokens;\n};\n\nexport type BearerAuthProviderCookieConfig<TTokenRefreshArgs extends QueryArgs> = {\n /**\n * The cookie name where the refresh token is stored\n * @default 'etAuth'\n */\n name?: string;\n\n /**\n * The domain of the cookie. If not set, the current origin will be used.\n *\n * @example\n * \"https://example.com\" -> \"example.com\"\n * \"https://sub.example.com\" -> \"example.com\"\n */\n domain?: string;\n\n /**\n * The days until the cookie expires\n * @default 30\n */\n expiresInDays?: number;\n\n /**\n * The path of the cookie\n * @default '/'\n */\n path?: string;\n\n /**\n * Enable or disable the cookie\n * @default true\n */\n enabled?: boolean;\n\n /**\n * The same site property of the cookie\n * @default 'lax'\n */\n sameSite?: 'strict' | 'none' | 'lax';\n\n /**\n * A function that turns the token gotten from the cookie into the body for the refresh token request\n * @default (token) => ({ token })\n */\n refreshArgsTransformer?: (token: string) => RequestArgs<TTokenRefreshArgs>;\n\n /**\n * An array of routes where the auto login via cookie should not be triggered.\n *\n * This checks the current route against the array of routes using the `startsWith` method.\n * Make sure to start each route with a `/`.\n *\n * @default []\n * @example ['/login', '/register']\n */\n autoLoginExcludeRoutes?: string[];\n};\n\nexport type CreateBearerAuthProviderConfigOptions<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n> = {\n /**\n * The name of the auth provider\n */\n name: string;\n\n /**\n * The query client reference\n */\n queryClientRef: QueryClientRef;\n\n /**\n * The login route configuration\n */\n login?: BearerAuthProviderRouteConfig<TLoginArgs>;\n\n /**\n * The token login route configuration\n */\n tokenLogin?: BearerAuthProviderRouteConfig<TTokenLoginArgs>;\n\n /**\n * The token refresh route configuration\n */\n tokenRefresh?: BearerAuthProviderRouteConfig<TTokenRefreshArgs>;\n\n /**\n * The select role route configuration\n */\n selectRole?: BearerAuthProviderRouteConfig<TSelectRoleArgs>;\n\n /**\n * The cookie configuration for the auth provider\n */\n cookie?: BearerAuthProviderCookieConfig<TTokenRefreshArgs>;\n\n /**\n * The time in milliseconds before the token expires when the refresh should be triggered.\n * @default 300000 // (5 minutes)\n */\n refreshBuffer?: number;\n\n /**\n * The expires in property name inside the jwt body\n * @default 'exp'\n */\n expiresInPropertyName?: string;\n\n /**\n * Determines if the token should be refreshed if **any** query returns a 401 response.\n * @default true\n */\n refreshOnUnauthorizedResponse?: boolean;\n};\n\nexport type BearerAuthProviderConfig<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n> = CreateBearerAuthProviderConfigOptions<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs> & {\n token: BearerAuthProviderRef<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyBearerAuthProviderConfig = BearerAuthProviderConfig<any, any, any, any>;\n\nexport type BearerAuthProviderRef<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n> = InjectionToken<BearerAuthProvider<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>>;\n\nexport const createBearerAuthProviderConfig = <\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n>(\n options: CreateBearerAuthProviderConfigOptions<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>,\n) => {\n const token = new InjectionToken<\n BearerAuthProviderConfig<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>\n >(`BearerAuthProvider_${options.name}`);\n\n const bearerAuthProviderConfig: BearerAuthProviderConfig<\n TLoginArgs,\n TTokenLoginArgs,\n TTokenRefreshArgs,\n TSelectRoleArgs\n > = {\n name: options.name,\n queryClientRef: options.queryClientRef,\n token,\n cookie: options.cookie,\n expiresInPropertyName: options.expiresInPropertyName || 'exp',\n refreshBuffer: options.refreshBuffer ?? 300000,\n refreshOnUnauthorizedResponse: options.refreshOnUnauthorizedResponse ?? true,\n login: options.login,\n selectRole: options.selectRole,\n tokenLogin: options.tokenLogin,\n tokenRefresh: options.tokenRefresh,\n };\n\n return bearerAuthProviderConfig;\n};\n","import { HttpEvent } from '@angular/common/http';\nimport { WritableSignal, signal } from '@angular/core';\nimport { HttpRequest, HttpRequestLoadingState } from './http-request';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { QueryErrorResponse } from './query-error-response';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type SetupQueryStateOptions = {};\n\nexport type QueryStateSubtle<TArgs extends QueryArgs> = {\n request: WritableSignal<HttpRequest<TArgs> | null>;\n};\n\nexport type QueryState<TArgs extends QueryArgs> = {\n response: WritableSignal<ResponseType<TArgs> | null>;\n args: WritableSignal<RequestArgs<TArgs> | null>;\n latestHttpEvent: WritableSignal<HttpEvent<ResponseType<TArgs>> | null>;\n loading: WritableSignal<HttpRequestLoadingState | null>;\n error: WritableSignal<QueryErrorResponse | null>;\n lastTimeExecutedAt: WritableSignal<number | null>;\n\n subtle: QueryStateSubtle<TArgs>;\n};\n\nexport const setupQueryState = <TArgs extends QueryArgs>(options: SetupQueryStateOptions) => {\n const response = signal<ResponseType<TArgs> | null>(null);\n const args = signal<RequestArgs<TArgs> | null>(null);\n const latestHttpEvent = signal<HttpEvent<ResponseType<TArgs>> | null>(null);\n const error = signal<QueryErrorResponse | null>(null);\n const loading = signal<HttpRequestLoadingState | null>(null);\n const lastTimeExecutedAt = signal<number | null>(null);\n const request = signal<HttpRequest<TArgs> | null>(null);\n\n const state: QueryState<TArgs> = {\n response,\n args,\n latestHttpEvent,\n loading,\n error,\n lastTimeExecutedAt,\n subtle: {\n request,\n },\n };\n\n return state;\n};\n","import { effect, signal, untracked } from '@angular/core';\nimport { QueryArgs, QuerySnapshot } from './query';\nimport { QueryDependencies } from './query-dependencies';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryState, setupQueryState } from './query-state';\nimport { normalizeQueryRepositoryKey } from './query-utils';\n\nexport type CreateQuerySnapshotOptions<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n deps: QueryDependencies;\n execute: InternalQueryExecute<TArgs>;\n};\n\nexport const createQuerySnapshotFn = <TArgs extends QueryArgs>(options: CreateQuerySnapshotOptions<TArgs>) => {\n const { state, deps } = options;\n\n const snapshotFn = () => {\n const snapshotState = setupQueryState<TArgs>({});\n const isAlive = signal(true);\n\n const killEffectRef = effect(\n () => {\n const currentLoading = state.loading();\n const currentError = state.error();\n const currentResponse = state.response();\n const currentArgs = state.args();\n const currentLatestHttpEvent = state.latestHttpEvent();\n const currentLastTimeExecutedAt = state.lastTimeExecutedAt();\n\n untracked(() => {\n snapshotState.args.set(currentArgs);\n snapshotState.error.set(currentError);\n snapshotState.lastTimeExecutedAt.set(currentLastTimeExecutedAt);\n snapshotState.latestHttpEvent.set(currentLatestHttpEvent);\n snapshotState.loading.set(currentLoading);\n snapshotState.response.set(currentResponse);\n\n if (currentLoading) return;\n\n if (!currentResponse && !currentError) return;\n\n // kill the effect once loading is done and we either have a response or an error\n killEffectRef.destroy();\n\n isAlive.set(false);\n });\n },\n { injector: deps.injector },\n );\n\n const snapshot: QuerySnapshot<TArgs> = {\n args: snapshotState.args.asReadonly(),\n response: snapshotState.response.asReadonly(),\n latestHttpEvent: snapshotState.latestHttpEvent.asReadonly(),\n loading: snapshotState.loading.asReadonly(),\n error: snapshotState.error.asReadonly(),\n lastTimeExecutedAt: snapshotState.lastTimeExecutedAt.asReadonly(),\n isAlive: isAlive.asReadonly(),\n id: normalizeQueryRepositoryKey(options.execute.currentRepositoryKey),\n };\n\n return snapshot;\n };\n\n return snapshotFn;\n};\n","import { HttpErrorResponse, HttpHeaders, HttpStatusCode } from '@angular/common/http';\nimport { computed, CreateEffectOptions, effect, isDevMode, Signal } from '@angular/core';\nimport { getActiveConsumer, setActiveConsumer } from '@angular/core/primitives/signals';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../../symfony';\nimport { CreateGqlQueryOptions, isCreateGqlQueryOptions } from '../gql/gql-query';\nimport { CreateGqlQueryCreatorOptions, GqlQueryMethod } from '../gql/gql-query-creator';\nimport { CreateQueryOptions, Query, QueryArgs, ReadonlyQuery, RequestArgs, ResponseType } from './query';\nimport { InternalCreateQueryCreatorOptions, QueryMethod } from './query-creator';\nimport { QueryDependencies } from './query-dependencies';\nimport { queryFeatureUsedMultipleTimes, withArgsQueryFeatureMissingButRouteIsFunction } from './query-errors';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryFeature, QueryFeatureContext, QueryFeatureType } from './query-features';\nimport { QueryKeyOrNone } from './query-repository';\nimport { createQuerySnapshotFn } from './query-snapshot';\nimport { QueryState } from './query-state';\n\n/**\n * Returning this inside a withArgs feature will reset the query args to null.\n * This will also pause polling and auto refresh until new args are set.\n */\nexport const CLEAR_QUERY_ARGS = Symbol('CLEAR_QUERY_ARGS');\nexport type ClearQueryArgs = typeof CLEAR_QUERY_ARGS;\n\nexport const QUERY_EFFECT_ERROR_MESSAGE =\n 'Effect triggered too often. This is probably due to a circular dependency inside the query.';\n\n/** A angular effect that will throw an error in dev mode if it is called too often. This indicates a circular dependency inside the effect. */\nexport const queryEffect = (fn: (isFirstRun: boolean) => void, errorMessage: string, options?: CreateEffectOptions) => {\n let lastTriggerTs = 0;\n let illegalWrites = 0;\n\n let isFirstRun = true;\n\n const activeConsumer = getActiveConsumer();\n\n setActiveConsumer(null);\n\n const eff = effect(() => {\n if (isDevMode()) {\n const now = performance.now();\n\n if (now - lastTriggerTs < 100) {\n illegalWrites++;\n\n if (illegalWrites > 5) {\n throw new Error(errorMessage);\n }\n }\n\n lastTriggerTs = now;\n }\n\n fn(isFirstRun);\n\n if (isFirstRun) {\n isFirstRun = false;\n }\n }, options);\n\n setActiveConsumer(activeConsumer);\n\n return eff;\n};\n\nexport const shouldAutoExecuteQuery = (method: QueryMethod) => {\n return method === 'GET' || method === 'HEAD' || method === 'OPTIONS';\n};\n\nexport const shouldAutoExecuteGqlQuery = (method: GqlQueryMethod) => {\n return method === 'QUERY';\n};\n\nexport const extractExpiresInSeconds = (headers: HttpHeaders) => {\n const cacheControl = headers.get('cache-control');\n const age = headers.get('age');\n const expires = headers.get('expires');\n\n // In seconds\n let expiresIn: number | null = null;\n let maxAge: number | null = null;\n\n if (cacheControl?.includes('no-cache')) {\n return null;\n }\n\n if (cacheControl?.includes('max-age')) {\n 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 type ShouldRetryRequestOptions = {\n retryCount: number;\n error: HttpErrorResponse;\n};\n\nexport type ShouldRetryRequestResult =\n | {\n retry: false;\n }\n | {\n retry: true;\n delay: number;\n };\n\nexport type ShouldRetryRequestFn = (options: ShouldRetryRequestOptions) => ShouldRetryRequestResult;\n\nexport const shouldRetryRequest = (\n options: ShouldRetryRequestOptions | HttpErrorResponse,\n): ShouldRetryRequestResult => {\n const normalizedOptions =\n options instanceof HttpErrorResponse ? { retryCount: 0, error: options } : (options as ShouldRetryRequestOptions);\n const { retryCount, error } = normalizedOptions;\n const defaultRetryDelay = 1000 + 1000 * retryCount;\n\n if (retryCount > 3) {\n return { retry: false };\n }\n\n if (!(error instanceof HttpErrorResponse)) {\n return { retry: false };\n }\n\n const { status, error: detail, headers } = error;\n\n // Retry on 5xx errors (except 500 internal server error since those are usually not recoverable)\n if (status >= 501) {\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 = headers.get('retry-after') || headers.get('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 type QueryFeatureFlags = {\n hasWithArgsFeature: boolean;\n shouldAutoExecuteMethod: boolean;\n shouldAutoExecute: boolean;\n hasRouteFunction: boolean;\n onlyManualExecution?: boolean;\n\n /** Human readable method name */\n method: string;\n};\n\nexport const getQueryFeatureUsage = <TArgs extends QueryArgs>(\n options: CreateQueryOptions<TArgs> | CreateGqlQueryOptions<TArgs>,\n) => {\n const { creator, features, queryConfig, creatorInternals } = options;\n\n const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WithArgs);\n const shouldAutoExecuteMethod = isCreateGqlQueryOptions(options)\n ? shouldAutoExecuteGqlQuery(options.creatorInternals.method)\n : shouldAutoExecuteQuery(options.creatorInternals.method);\n const shouldAutoExecute = shouldAutoExecuteMethod && !queryConfig.onlyManualExecution;\n const hasRouteFunction =\n typeof (creatorInternals as InternalCreateQueryCreatorOptions<TArgs>)?.route === 'function' ||\n typeof (creator as CreateGqlQueryCreatorOptions<TArgs>)?.route === 'function';\n\n if (hasRouteFunction && !hasWithArgsFeature) {\n throw withArgsQueryFeatureMissingButRouteIsFunction();\n }\n\n const featureFnContext: QueryFeatureFlags = {\n hasWithArgsFeature,\n shouldAutoExecuteMethod,\n shouldAutoExecute,\n hasRouteFunction,\n onlyManualExecution: queryConfig.onlyManualExecution,\n method: isCreateGqlQueryOptions(options)\n ? `GQL ${options.creatorInternals.method}`\n : options.creatorInternals.method,\n };\n\n return featureFnContext;\n};\n\nexport const applyQueryFeatures = <TArgs extends QueryArgs>(\n features: QueryFeature<TArgs>[],\n context: QueryFeatureContext<TArgs>,\n) => {\n const featureTypes = new Set<QueryFeatureType>();\n\n for (const feature of features) {\n if (featureTypes.has(feature.type)) {\n throw queryFeatureUsedMultipleTimes(feature.type);\n }\n\n featureTypes.add(feature.type);\n feature.fn(context);\n }\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const maybeExecute = (options: { flags: QueryFeatureFlags; execute: InternalQueryExecute<any> }) => {\n if (options.flags.shouldAutoExecute && !options.flags.hasRouteFunction && !options.flags.hasWithArgsFeature) {\n options.execute();\n }\n};\n\nexport type CreateQueryObjectOptions<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n deps: QueryDependencies;\n execute: InternalQueryExecute<TArgs>;\n};\n\nexport const createQueryObject = <TArgs extends QueryArgs>(options: CreateQueryObjectOptions<TArgs>) => {\n const { state, execute, deps } = options;\n\n const destroy = () => deps.injector.destroy();\n const setResponse = (response: ResponseType<TArgs>) => state.response.set(response);\n const createSnapshot = createQuerySnapshotFn({ state, deps, execute });\n\n const asReadonly = () => {\n const roQuery: ReadonlyQuery<TArgs> = {\n args: state.args.asReadonly(),\n response: state.response.asReadonly(),\n latestHttpEvent: state.latestHttpEvent.asReadonly(),\n loading: state.loading.asReadonly(),\n error: state.error.asReadonly(),\n lastTimeExecutedAt: state.lastTimeExecutedAt.asReadonly(),\n id: normalizeQueryRepositoryKey(execute.currentRepositoryKey),\n createSnapshot,\n };\n\n return roQuery;\n };\n\n const query: Query<TArgs> = {\n execute,\n args: state.args.asReadonly(),\n response: state.response.asReadonly(),\n latestHttpEvent: state.latestHttpEvent.asReadonly(),\n loading: state.loading.asReadonly(),\n error: state.error.asReadonly(),\n lastTimeExecutedAt: state.lastTimeExecutedAt.asReadonly(),\n id: normalizeQueryRepositoryKey(execute.currentRepositoryKey),\n createSnapshot,\n reset: execute.reset,\n asReadonly,\n subtle: {\n destroy,\n setResponse,\n },\n };\n\n return query;\n};\n\nexport const normalizeQueryRepositoryKey = (key: Signal<QueryKeyOrNone>) =>\n computed(() => {\n const k = key();\n\n if (k === false) {\n // false means the query cannot be cached and thus it is not stored in the repository\n // We generate a random id in this case to avoid confusion\n return crypto.randomUUID();\n }\n\n return k;\n });\n\nexport const shouldCacheQuery = (method: QueryMethod) => {\n return method === 'GET' || method === 'OPTIONS' || method === 'HEAD';\n};\n\nexport const buildQueryCacheKey = (route: string, args: RequestArgs<QueryArgs> | undefined) => {\n // We need to hash the body in case it's a gql query and the query get's transported in the body\n const body = JSON.stringify(args?.body || {})\n // replace all curly braces with empty string\n .replace(/{|}/g, '')\n // replace new lines and whitespaces with empty string\n .replace(/\\s/g, '');\n\n const seed = `${route}_${body}`;\n\n let hash = 0;\n\n for (const char of seed) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;\n }\n\n // Force positive number hash.\n // 2147483647 = equivalent of Integer.MAX_VALUE.\n hash += 2147483647 + 1;\n\n return hash.toString();\n};\n","import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http';\nimport { isClassValidatorError } from '../../class-validator';\nimport { isSymfonyFormViolationListError, isSymfonyListError } from '../../symfony';\nimport { shouldRetryRequest, ShouldRetryRequestResult } from './query-utils';\n\nexport type QueryErrorResponseList = {\n isList: true;\n errors: QueryErrorResponseItem[];\n};\n\nexport type QueryErrorResponseSingle = {\n isList: false;\n error: QueryErrorResponseItem;\n};\n\nexport type QueryErrorResponse = {\n raw: HttpErrorResponse;\n retryState: ShouldRetryRequestResult;\n code: HttpStatusCode;\n} & (QueryErrorResponseList | QueryErrorResponseSingle);\n\nexport interface QueryErrorResponseItem {\n message: string;\n}\n\nexport const createQueryErrorResponse = (error: unknown): QueryErrorResponse => {\n let err = error instanceof HttpErrorResponse ? error : null;\n\n if (!err) {\n err = new HttpErrorResponse({\n error: error,\n status: 0,\n statusText: 'Unknown Error',\n });\n }\n const retryState = shouldRetryRequest(err);\n\n const detail = err.error;\n const errorList: QueryErrorResponseItem[] = [];\n\n if (isClassValidatorError(detail)) {\n for (const error of detail.message) {\n errorList.push({ message: error });\n }\n } else if (isSymfonyFormViolationListError(detail)) {\n for (const violation of detail.violations) {\n errorList.push({ message: violation.message });\n }\n } else if (isSymfonyListError(detail)) {\n for (const error of detail) {\n errorList.push({ message: error.message });\n }\n } else if (typeof detail === 'object' && !!detail && 'message' in detail && typeof detail.message === 'string') {\n errorList.push({ message: detail.message });\n } else if (typeof detail === 'object' && !!detail && 'detail' in detail && typeof detail.detail === 'string') {\n // Symfony error response (during development)\n errorList.push({ message: detail.detail });\n } else if (typeof detail === 'string') {\n errorList.push({ message: detail });\n } else if (Array.isArray(detail) && detail.length > 0 && typeof detail[0] === 'string') {\n for (const error of detail) {\n errorList.push({ message: error });\n }\n }\n\n if (errorList.length > 1) {\n return {\n isList: true,\n errors: errorList,\n raw: err,\n retryState,\n code: err.status,\n };\n } else {\n const singleError = errorList[0] ?? { message: err.message };\n\n return {\n isList: false,\n error: singleError,\n raw: err,\n retryState,\n code: err.status,\n };\n }\n};\n","import { HttpClient, HttpContext, HttpEvent, HttpEventType, HttpProgressEvent } from '@angular/common/http';\nimport { Signal, computed, signal } from '@angular/core';\nimport { Subscription, catchError, retry, tap, throwError, timer } from 'rxjs';\nimport { buildTimestampFromSeconds } from '../../request';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { CacheAdapterFn } from './query-client-config';\nimport { QueryMethod } from './query-creator';\nimport { QueryErrorResponse, createQueryErrorResponse } from './query-error-response';\nimport {\n ShouldRetryRequestFn,\n ShouldRetryRequestOptions,\n extractExpiresInSeconds,\n shouldRetryRequest,\n} from './query-utils';\n\nexport const SPEED_BUFFER_TIME_IN_MS = 2000;\n\nexport type HttpRequestTransferCacheConfig =\n | boolean\n | {\n includeHeaders?: string[];\n };\n\nexport type HttpRequestResponseType = 'json' | 'text' | 'blob' | 'arraybuffer';\n\nexport type CreateHttpRequestDependencies = {\n /** The http client instance to use for the request */\n httpClient: HttpClient;\n};\n\nexport type CreateHttpRequestClientOptions = {\n /**\n * Whether to report the progress of the request or not. If the fetch backend is used, this will only work for downloads.\n * @see https://angular.dev/guide/http/making-requests#receiving-raw-progress-events\n * @default false\n */\n reportProgress?: boolean;\n\n /**\n * Whether to include credentials in the request or not\n * @default false\n */\n withCredentials?: boolean;\n\n /**\n * This property accepts either a boolean to enable/disable transferring cache for eligible\n * requests performed using `HttpClient`, or an object, which allows to configure cache\n * parameters, such as which headers should be included (no headers are included by default).\n *\n * Setting this property will override the options passed to `provideClientHydration()` for this\n * particular request\n */\n transferCache?: HttpRequestTransferCacheConfig;\n\n /**\n * The response type of the request\n * @default 'json'\n */\n responseType?: HttpRequestResponseType;\n\n /**\n * The context of the request\n * @default undefined\n * @see https://angular.dev/guide/http/interceptors#request-and-response-metadata\n */\n context?: HttpContext;\n};\n\nexport type CreateHttpRequestOptions<TArgs extends QueryArgs> = {\n /** The HTTP method of the request */\n method: QueryMethod;\n\n /**\n * The full path of the request\n * @example 'https://api.example.com/v1/users'\n */\n fullPath: string;\n\n /** The data of the request */\n args?: RequestArgs<TArgs> | null;\n\n /** The dependencies of the request */\n dependencies: CreateHttpRequestDependencies;\n\n /** The client options of the request */\n clientOptions?: CreateHttpRequestClientOptions;\n\n /**\n * The cache adapter function to use for the request\n * @default extractExpiresInSeconds()\n */\n cacheAdapter?: CacheAdapterFn;\n\n /**\n * The retry function to use for the request\n * @default shouldRetryRequest()\n */\n retryFn?: ShouldRetryRequestFn;\n};\n\nexport type HttpRequestLoadingState = {\n /** The time when the request was executed in ms */\n executeTime: number;\n\n /** The progress of the request. Null if reportProgress is false or progress is not available / unsupported */\n progress: HttpRequestLoadingProgressState | null;\n};\n\nexport type HttpRequestLoadingProgressState = {\n /** The total number of bytes to be transferred */\n total: number;\n\n /** The number of bytes transferred */\n loaded: number;\n\n /** The percentage of the transfer that is completed */\n percentage: number;\n\n /** The speed of the transfer in bytes per millisecond */\n speed: number | null;\n\n /** The estimated remaining time in milliseconds */\n remainingTime: number | null;\n};\n\nexport type HttpRequest<TArgs extends QueryArgs> = {\n /** Executes the request */\n execute: (options?: { allowCache?: boolean }) => boolean;\n\n /** Destroys the request (cancels it if in progress) */\n destroy: () => boolean;\n\n /** The loading state of the request */\n loading: Signal<HttpRequestLoadingState | null>;\n\n /** The error state of the request */\n error: Signal<QueryErrorResponse | null>;\n\n /** The response state of the request */\n response: Signal<ResponseType<TArgs> | null>;\n\n /** The current event of the request */\n currentEvent: Signal<HttpEvent<ResponseType<TArgs>> | HttpErrorEvent | null>;\n\n /** Whether the request is stale or not aka the cache header has expired */\n isStale: Signal<boolean>;\n};\n\n/** A custom error event since the Angular http client does not provide a specific event for errors */\nexport type HttpErrorEvent = {\n type: 'error';\n error: QueryErrorResponse;\n};\n\nexport const createHttpRequest = <TArgs extends QueryArgs>(options: CreateHttpRequestOptions<TArgs>) => {\n let currentStreamSubscription = Subscription.EMPTY;\n\n const { args, clientOptions, dependencies } = options;\n\n const currentEvent = signal<HttpEvent<ResponseType<TArgs>> | HttpErrorEvent | null>(null);\n const loading = signal<HttpRequestLoadingState | null>(null);\n const error = signal<QueryErrorResponse | null>(null);\n const response = signal<ResponseType<TArgs> | null>(null);\n\n const lastLoadEventTime = signal(0);\n const lastLoadEventAmount = signal(0);\n const lastExecuteTime = signal(0);\n const expiresIn = signal<number | null>(null);\n\n const isStale = computed(() => {\n const expiresInTs = expiresIn();\n\n return expiresInTs === null || expiresInTs < Date.now();\n });\n\n const stream = dependencies.httpClient\n .request(options.method, options.fullPath, {\n observe: 'events',\n body: args?.body,\n reportProgress: clientOptions?.reportProgress,\n withCredentials: clientOptions?.withCredentials,\n transferCache: clientOptions?.transferCache,\n responseType: clientOptions?.responseType || 'json',\n context: clientOptions?.context,\n headers: args?.headers,\n })\n .pipe(\n tap((event) => updateState(event)),\n retry({\n delay: (error, retryCount) => {\n const retryOptions: ShouldRetryRequestOptions = { error, retryCount };\n\n const retryResult = options.retryFn?.(retryOptions) || shouldRetryRequest(retryOptions);\n\n if (!retryResult.retry) {\n return throwError(() => error);\n }\n\n return timer(retryResult.delay);\n },\n }),\n catchError((e) => {\n updateErrorState(e);\n\n return throwError(() => e);\n }),\n );\n\n const execute = (options?: { allowCache?: boolean }) => {\n if (loading() || (!isStale() && options?.allowCache)) {\n // Do not execute if there is already a request in progress or caching is allowed\n return false;\n }\n\n currentStreamSubscription.unsubscribe();\n\n lastExecuteTime.set(Date.now());\n lastLoadEventTime.set(lastExecuteTime());\n\n loading.set({\n executeTime: lastExecuteTime(),\n progress: null,\n });\n error.set(null);\n expiresIn.set(null);\n\n currentStreamSubscription = stream.subscribe();\n\n return true;\n };\n\n const destroy = () => {\n if (currentStreamSubscription.closed) {\n return false;\n }\n\n currentStreamSubscription.unsubscribe();\n\n return true;\n };\n\n const updateState = (event: HttpEvent<ResponseType<TArgs>>) => {\n currentEvent.set(event);\n\n switch (event.type) {\n case HttpEventType.Response:\n {\n loading.set(null);\n response.set(event.body);\n\n const expiresInSeconds = options.cacheAdapter\n ? options.cacheAdapter(event.headers)\n : extractExpiresInSeconds(event.headers);\n const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);\n expiresIn.set(expiresInTimestamp);\n }\n break;\n\n case HttpEventType.UploadProgress:\n case HttpEventType.DownloadProgress:\n {\n updateLoadingState(event);\n }\n break;\n\n case HttpEventType.Sent:\n case HttpEventType.ResponseHeader:\n case HttpEventType.User:\n {\n // we don't care about these events\n }\n break;\n }\n };\n\n const updateErrorState = (errorResponse: unknown) => {\n const errorRes = createQueryErrorResponse(errorResponse);\n\n error.set(errorRes);\n loading.set(null);\n currentEvent.set({ type: 'error', error: errorRes });\n };\n\n const updateLoadingState = (event: HttpProgressEvent) => {\n if (event.total === undefined) {\n return;\n }\n\n const progress: HttpRequestLoadingProgressState = {\n total: event.total,\n loaded: event.loaded,\n percentage: (event.loaded / event.total) * 100,\n speed: null,\n remainingTime: null,\n };\n\n const state: HttpRequestLoadingState = {\n executeTime: lastExecuteTime(),\n progress,\n };\n\n const currentTime = Date.now();\n const elapsedTimeSinceLastEvent = currentTime - lastLoadEventTime();\n const elapsedTimeSinceLastExecute = currentTime - lastExecuteTime();\n const loadedAmount = event.loaded - lastLoadEventAmount();\n\n // We only want to calculate speed and remaining time after 2 seconds of the execution\n // This is to avoid showing incorrect speed and remaining time when the request is very fast\n if (elapsedTimeSinceLastExecute > SPEED_BUFFER_TIME_IN_MS) {\n const speed = (loadedAmount / elapsedTimeSinceLastEvent) * 1000;\n\n progress.speed = speed * 1000;\n progress.remainingTime = Math.round((event.total - event.loaded) / speed) * 1000;\n }\n\n lastLoadEventTime.set(currentTime);\n lastLoadEventAmount.set(event.loaded);\n\n loading.set(state);\n };\n\n const httpRequest: HttpRequest<TArgs> = {\n execute,\n destroy,\n loading: loading.asReadonly(),\n error: error.asReadonly(),\n response: response.asReadonly(),\n currentEvent: currentEvent.asReadonly(),\n isStale,\n };\n\n return httpRequest;\n};\n","import { HttpEvent } from '@angular/common/http';\nimport { computed, Signal, untracked } from '@angular/core';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { QueryDependencies } from './query-dependencies';\nimport { QueryErrorResponse } from './query-error-response';\nimport {\n withAutoRefreshUsedInManualQuery,\n withAutoRefreshUsedOnUnsupportedHttpMethod,\n withPollingUsedOnUnsupportedHttpMethod,\n} from './query-errors';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryState } from './query-state';\nimport {\n CLEAR_QUERY_ARGS,\n ClearQueryArgs,\n QUERY_EFFECT_ERROR_MESSAGE,\n queryEffect,\n QueryFeatureFlags,\n} from './query-utils';\n\nexport const enum QueryFeatureType {\n WithArgs = 'withArgs',\n WithLogging = 'withLogging',\n WithErrorHandling = 'withErrorHandling',\n WithSuccessHandling = 'withSuccessHandling',\n WithPolling = 'withPolling',\n WithAutoRefresh = 'withAutoRefresh',\n WithResponseUpdate = 'withResponseUpdate',\n}\n\nexport type QueryFeatureContext<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n execute: InternalQueryExecute<TArgs>;\n deps: QueryDependencies;\n flags: QueryFeatureFlags;\n};\n\nexport type QueryFeatureFn<TArgs extends QueryArgs> = (context: QueryFeatureContext<TArgs>) => void;\n\nexport type QueryFeature<TArgs extends QueryArgs> = {\n type: QueryFeatureType;\n fn: (context: QueryFeatureContext<TArgs>) => void;\n};\n\nconst createQueryFeature = <TArgs extends QueryArgs>(config: { type: QueryFeatureType; fn: QueryFeatureFn<TArgs> }) => {\n return config as QueryFeature<TArgs>;\n};\n\n/**\n * A query feature that allows you to set the arguments of the query.\n * The arguments are read within a computed function, so you can use reactive values.\n *\n * To set the arguments to `null`, return the symbol `CLEAR_QUERY_ARGS`.\n * If you instead return `null`, the arguments won't change.\n *\n * Changing arguments will automatically trigger a new execution of the query if it is eligible for auto execution (e.g. a GET request).\n */\nexport const withArgs = <TArgs extends QueryArgs>(args: () => NoInfer<RequestArgs<TArgs>> | ClearQueryArgs | null) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithArgs,\n fn: (context) => {\n const currArgs = computed(() => args());\n\n queryEffect(\n () => {\n const currArgsNow = currArgs();\n\n if (currArgsNow === null) return;\n\n untracked(() => {\n if (currArgsNow === CLEAR_QUERY_ARGS) {\n context.state.args.set(null);\n return;\n }\n\n context.state.args.set(currArgsNow);\n\n if (context.flags.shouldAutoExecute) context.execute({ args: currArgsNow });\n });\n },\n QUERY_EFFECT_ERROR_MESSAGE,\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithPollingFeatureOptions = {\n /** The interval in milliseconds at which the query should be executed */\n interval: number;\n\n /**\n * Whether the query should be executed initially.\n * By default, the query will be executed after the first interval.\n * @default false\n */\n executeInitially?: boolean;\n};\n\n/**\n * A query feature that will automatically execute the query at a given interval.\n * The interval will be cleared when the query is destroyed.\n * The interval will be reset when the arguments of the query change.\n *\n * @throws If the query is not eligible for auto execution (e.g. a POST request)\n */\nexport const withPolling = <TArgs extends QueryArgs>(options: WithPollingFeatureOptions) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithPolling,\n fn: (context) => {\n if (!context.flags.shouldAutoExecuteMethod) {\n throw withPollingUsedOnUnsupportedHttpMethod(context.flags.method);\n }\n\n let intervalId: number | null = null;\n\n queryEffect(\n () => {\n const args = context.state.args();\n\n untracked(() => {\n if (intervalId !== null) clearInterval(intervalId);\n\n // Don't start polling if the query doesn't have args.\n // It should have args because a withArgs feature is present.\n if (args === null && context.flags.hasWithArgsFeature) return;\n\n if (options.executeInitially) {\n context.execute({ args });\n }\n\n intervalId = window.setInterval(() => {\n context.execute({ args });\n }, options.interval);\n });\n },\n QUERY_EFFECT_ERROR_MESSAGE,\n { injector: context.deps.injector },\n );\n\n context.deps.destroyRef.onDestroy(() => intervalId !== null && clearInterval(intervalId));\n },\n });\n};\n\nexport type WithLoggingFeatureOptions<TArgs extends QueryArgs> = {\n /** A function that will be called with the latest http event */\n logFn: (v: HttpEvent<ResponseType<TArgs>> | null) => void;\n};\n\n/** A query feature that can be used to log the latest http event */\nexport const withLogging = <TArgs extends QueryArgs>(options: WithLoggingFeatureOptions<TArgs>) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithLogging,\n fn: (context) => {\n queryEffect(\n () => {\n const event = context.state.latestHttpEvent();\n\n if (event === null) return;\n\n untracked(() => {\n options.logFn(event);\n });\n },\n QUERY_EFFECT_ERROR_MESSAGE,\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithErrorHandlingFeatureOptions = {\n /** A function that will be called with the latest error */\n handler: (e: QueryErrorResponse) => void;\n};\n\n/** A query feature that can be used to handle errors */\nexport const withErrorHandling = <TArgs extends QueryArgs>(options: WithErrorHandlingFeatureOptions) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithErrorHandling,\n fn: (context) => {\n queryEffect(\n () => {\n const error = context.state.error();\n\n if (error === null) return;\n\n untracked(() => {\n options.handler(error);\n });\n },\n QUERY_EFFECT_ERROR_MESSAGE,\n { injector: context.deps.injector },\n );\n },\n });\n};\n\ntype WithSuccessHandlingFeatureOptions<TArgs extends QueryArgs> = {\n /** A function that will be called with the latest response */\n handler: (data: NonNullable<ResponseType<TArgs>>) => void;\n};\n\n/** A query feature that can be used to handle successful responses */\nexport const withSuccessHandling = <TArgs extends QueryArgs>(options: WithSuccessHandlingFeatureOptions<TArgs>) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithSuccessHandling,\n fn: (context) => {\n queryEffect(\n () => {\n const response = context.state.response();\n\n if (response === null) return;\n\n untracked(() => {\n options.handler(response as NonNullable<ResponseType<TArgs>>);\n });\n },\n QUERY_EFFECT_ERROR_MESSAGE,\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithAutoRefreshFeatureOptions = {\n /** The signals that should trigger a refresh of the query */\n onSignalChanges: Signal<unknown>[];\n\n /** Whether to ignore the `onlyManualExecution` query config flag */\n ignoreOnlyManualExecution?: boolean;\n};\n\n/**\n * A query feature that will automatically execute the query when any of the provided signals change\n * @throws If the query is not eligible for auto execution (e.g. a POST request)\n * @throws If the query has the `onlyManualExecution` query config flag set and `ignoreOnlyManualExecution` is not set\n */\nexport const withAutoRefresh = <TArgs extends QueryArgs>(options: WithAutoRefreshFeatureOptions) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithAutoRefresh,\n fn: (context) => {\n if (!context.flags.shouldAutoExecuteMethod) {\n throw withAutoRefreshUsedOnUnsupportedHttpMethod(context.flags.method);\n }\n\n if (context.flags.onlyManualExecution && !options.ignoreOnlyManualExecution) {\n throw withAutoRefreshUsedInManualQuery();\n }\n\n queryEffect(\n () => {\n for (const signal of options.onSignalChanges) {\n signal();\n }\n\n untracked(() => {\n const args = context.state.args();\n\n // Don't start polling if the query doesn't have args.\n // It should have args because a withArgs feature is present.\n if (args === null && context.flags.hasWithArgsFeature) return;\n\n context.execute({ args });\n });\n },\n QUERY_EFFECT_ERROR_MESSAGE,\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithResponseUpdateFeatureFnData<TArgs extends QueryArgs> = {\n /** The current response of the query */\n currentResponse: ResponseType<TArgs> | null;\n};\n\nexport type WithResponseUpdateFeatureOptions<TArgs extends QueryArgs> = {\n /**\n * A function that will be called with the latest response\n * If the function returns `null`, the response will not be updated.\n * Otherwise, the response will be updated with the returned value.\n * The function will be called in a reactive signal context.\n * If the query get's executed after the response was updated, the response will be set the the fresh data received from the server.\n *\n * This feature is most useful in combination with web sockets where the data received from the socket might be more up-to-date than the data received previously.\n *\n * @example\n * const matchEvents = mySocket.joinRoom('match-events');\n *\n * const myMatchQuery = getMatch(\n * withArgs(() => ({ matchId: 1 })),\n * withResponseUpdate(({ currentResponse }) => {\n * const matchEvent = matchEvents();\n *\n * if (!matchEvent) return null;\n *\n * // Do some checks here. This is just a very simple example.\n * // To apply partial updates, you can use the spread operator in combination with the current response.\n *\n * return matchEvent;\n * })\n * )\n */\n updater: (data: WithResponseUpdateFeatureFnData<TArgs>) => ResponseType<TArgs> | null;\n};\n\nexport const withResponseUpdate = <TArgs extends QueryArgs>(options: WithResponseUpdateFeatureOptions<TArgs>) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithResponseUpdate,\n fn: (context) => {\n queryEffect(\n () => {\n const currentResponse = untracked(() => context.state.response());\n const response = options.updater({ currentResponse });\n\n if (response === null) return;\n\n untracked(() => {\n context.state.response.set(response);\n });\n },\n QUERY_EFFECT_ERROR_MESSAGE,\n { injector: context.deps.injector },\n );\n },\n });\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, effect, inject, Injector, runInInjectionContext, Signal, signal, untracked } from '@angular/core';\nimport { AnyQuery, RequestArgs, ResponseType } from './query';\nimport { AnyQueryCreator, QueryArgsOf, RunQueryCreator } from './query-creator';\nimport { QueryErrorResponse } from './query-error-response';\nimport { queryStackWithArgsUsed, queryStackWithResponseUpdateUsed } from './query-errors';\nimport { QueryFeature, QueryFeatureType, withArgs } from './query-features';\n\nexport type QueryStack<TQuery extends AnyQuery, TTransform> = {\n /** Contains all queries in the stack. */\n queries: Signal<TQuery[]>;\n\n /** Contains the last query in the stack. Useful for getting current pagination values. */\n lastQuery: Signal<TQuery | null>;\n\n /** True if any query in the stack is loading. */\n loading: Signal<boolean>;\n\n /** Contains the first error that occurred in the stack. */\n error: Signal<QueryErrorResponse | null>;\n\n /** Contains the responses of all queries in the stack. Will be `null` for queries that are loading or errored. */\n response: Signal<TTransform>;\n\n /** Executes all queries in the stack. */\n execute: (options?: { allowCache?: boolean }) => void;\n\n /** Destroys all queries in the stack and empties it. This should only be used if `append` is true. */\n clear: () => void;\n};\n\nexport type AnyQueryStack = QueryStack<AnyQuery, any>;\n\nexport type CreateQueryStackOptions<\n TCreator extends AnyQueryCreator,\n TDeps extends () => any,\n TTransform = (ResponseType<QueryArgsOf<TCreator>> | null)[],\n> = {\n /**\n * The query creator function that will be used to create the query stack.\n */\n queryCreator: TCreator;\n\n /**\n * The dependencies that should trigger a new query stack creation.\n * This function can be treated like a computed function. It reacts to signal changes.\n * The return value of this function will be passed to the `args` function.\n *\n * This option can be ignored if `append` is false.\n */\n dependencies?: TDeps;\n\n /**\n * The features that should be used for all queries in the stack.\n *\n * @throws If the `withArgs` feature is used. This feature is internally used.\n *\n * @example\n * // Due to limitations in TypeScript, you have to manually add the needed generic types if needed.\n * features: [E.withSuccessHandling<GetPostQueryArgs>({ handler: (post) => console.log(post.title) })]\n *\n * @example\n * // If typings are not needed, you can use the feature without generics.\n * features: [E.withPolling({ interval: 5000 })]\n */\n features?: QueryFeature<any>[];\n\n /**\n * The arguments to create queries with.\n * This function can be treated like a computed function. It reacts to signal changes.\n * If a signal changes, a new query will be created (and appended to the existing ones if `append` is true).\n * If this function returns `null`, the args will be ignored.\n * If this function returns an array, multiple queries will be created.\n *\n * @example\n * // One query\n * () => ({ queryParams: { postId: myId() } }),\n *\n * @example\n * // Multiple queries (these can of cause also be created using a loop)\n * () => [\n * { queryParams: { postId: myId() } },\n * { queryParams: { postId: myOtherId() } },\n * ],\n *\n * @example\n * // One query with dependencies\n * (deps) => ({ queryParams: { postId: myId(), limit: deps.limit } }),\n */\n args: (deps: ReturnType<TDeps>) => RequestArgs<QueryArgsOf<TCreator>> | RequestArgs<QueryArgsOf<TCreator>>[] | null;\n\n /**\n * If true, new queries will be appended to the existing ones. Otherwise, existing queries will be destroyed.\n * This should be used for things like infinite scrolling where already fetched queries should not be destroyed.\n */\n append?: boolean;\n\n /**\n * If append is true, this function will be called to merge the old and new queries.\n * Useful if you want to append the new queries in a specific order (e.g. at the beginning).\n */\n appendFn?: (\n oldQueries: RunQueryCreator<TCreator>[],\n newQueries: RunQueryCreator<TCreator>[],\n ) => {\n /** The new queries merged with the old ones. */\n queries: RunQueryCreator<TCreator>[];\n\n /** The last query in the new queries. */\n lastQuery: RunQueryCreator<TCreator> | null;\n };\n\n /**\n * Transforms the responses of all queries in the stack. Useful for merging or filtering responses.\n */\n transform?: (responses: ResponseType<QueryArgsOf<TCreator>>[]) => TTransform;\n};\n\n/** Transforms an array of arrays into a single array and filters out `null` values. */\nexport const transformArrayResponse = <T extends (unknown | null)[]>(responses: T) =>\n responses.filter((r) => !!r).flatMap((r) => r) as NonNullable<T[0]>[];\n\n/** Transforms an array of paginated responses into a single array and filters out `null` values. */\nexport const transformPaginatedResponse = <T extends ({ items: unknown[] } | null)[]>(responses: T) =>\n responses.filter((r) => !!r).flatMap((r) => r.items) as NonNullable<NonNullable<T[0]>['items']>;\n\nexport const createQueryStack = <\n TCreator extends AnyQueryCreator,\n TArgs extends QueryArgsOf<TCreator>,\n TDeps extends () => any,\n TTransform = (ResponseType<TArgs> | null)[],\n>(\n options: CreateQueryStackOptions<TCreator, TDeps, TTransform>,\n) => {\n type QueryType = RunQueryCreator<TCreator>;\n\n const {\n args,\n queryCreator,\n dependencies,\n append,\n features = [],\n appendFn = (oldQueries: QueryType[], newQueries: QueryType[]) => {\n const queries = [...oldQueries, ...newQueries];\n const lastQuery = newQueries[newQueries.length - 1] ?? oldQueries[oldQueries.length - 1] ?? null;\n\n return { queries, lastQuery };\n },\n transform,\n } = options ?? {};\n\n const injector = inject(Injector);\n\n const queries = signal<QueryType[]>([]);\n const lastQuery = signal<QueryType | null>(null);\n\n const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WithArgs);\n const hasWithOptimisticUpdateFeature = features.some((f) => f.type == QueryFeatureType.WithResponseUpdate);\n\n if (hasWithArgsFeature) {\n throw queryStackWithArgsUsed();\n }\n\n if (hasWithOptimisticUpdateFeature) {\n throw queryStackWithResponseUpdateUsed();\n }\n\n effect(() => {\n // Clear the stack if dependencies change\n dependencies?.();\n\n untracked(() => clear());\n });\n\n effect(() => {\n const newArgs = args(dependencies?.());\n\n if (newArgs === null) return;\n\n const newArgsArray = Array.isArray(newArgs) ? newArgs : [newArgs];\n\n const newQueries = runInInjectionContext(injector, () =>\n newArgsArray.map(\n (newArgsEntry) =>\n queryCreator(\n withArgs(() => newArgsEntry),\n ...features,\n ) as QueryType,\n ),\n );\n\n untracked(() => {\n const oldQueries = queries();\n\n if (append) {\n const { queries: appendedQueries, lastQuery: lastAppendedQuery } = appendFn(oldQueries, newQueries);\n queries.set(appendedQueries);\n lastQuery.set(lastAppendedQuery);\n } else {\n for (const oldQuery of oldQueries) {\n if (!newQueries.some((q) => q.id() === oldQuery.id())) {\n oldQuery.subtle.destroy();\n }\n }\n queries.set(newQueries);\n lastQuery.set(newQueries[newQueries.length - 1] ?? null);\n }\n });\n });\n\n const loading = computed(() => queries().some((q) => q.loading()));\n\n const error = computed(\n () =>\n queries()\n .map((q) => q.error())\n .find((e) => e !== null) ?? null,\n );\n\n const response = computed(() => {\n const responses = queries().map((q) => q.response());\n return transform?.(responses) ?? responses;\n }) as Signal<TTransform>;\n\n const execute = (options?: { allowCache?: boolean }) => {\n for (const query of queries()) {\n query.execute({ options: { allowCache: options?.allowCache } });\n }\n };\n\n const clear = () => {\n for (const query of queries()) {\n query.subtle.destroy();\n }\n\n queries.set([]);\n lastQuery.set(null);\n };\n\n const stack: QueryStack<QueryType, TTransform> = {\n queries: queries.asReadonly(),\n lastQuery: lastQuery.asReadonly(),\n loading,\n error,\n response,\n execute,\n clear,\n };\n\n return stack;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, effect, isDevMode, Signal, signal, untracked } from '@angular/core';\nimport {\n ContentfulGqlLikePaginated,\n DynLikePaginated,\n GgLikePaginated,\n NormalizedPagination,\n Paginated,\n} from '@ethlete/types';\nimport { AnyQuery, Query, QueryArgs, RequestArgs, ResponseType } from './query';\nimport { AnyQueryCreator, QueryArgsOf, QueryCreator } from './query-creator';\nimport { QueryErrorResponse } from './query-error-response';\nimport {\n pagedQueryStackNextPageCalledWithoutPreviousPage,\n pagedQueryStackPageBiggerThanTotalPages,\n pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage,\n} from './query-errors';\nimport { QueryFeature } from './query-features';\nimport { createQueryStack, transformArrayResponse } from './query-stack';\nimport { shouldRetryRequest } from './query-utils';\n\nexport const ethletePaginationAdapter = <T>(response: Paginated<T>) => {\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages: response.totalPageCount,\n currentPage: response.currentPage,\n itemsPerPage: response.itemsPerPage,\n totalHits: response.totalHits,\n };\n\n return pagination;\n};\n\nexport const ggLikePaginationAdapter = <T>(response: GgLikePaginated<T>) => {\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages: response.totalPageCount,\n currentPage: response.currentPage,\n itemsPerPage: response.itemsPerPage,\n totalHits: response.totalHits,\n };\n\n return pagination;\n};\n\nexport const dynLikePaginationAdapter = <T>(response: DynLikePaginated<T>) => {\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages: response.totalPages,\n currentPage: response.currentPage,\n itemsPerPage: response.limit,\n totalHits: response.totalHits,\n };\n\n return pagination;\n};\n\nexport const contentfulGqlLikePaginationAdapter = <T>(response: ContentfulGqlLikePaginated<T>) => {\n const totalPages = Math.max(Math.ceil(response.total / response.limit), 1); // If there are no items, there is still one page\n const currentPage = Math.max(Math.ceil(response.skip / response.limit) + 1, 1);\n\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages,\n currentPage,\n itemsPerPage: response.limit,\n totalHits: response.total,\n };\n\n return pagination;\n};\n\nexport const fakePaginationAdapter = (totalHits = 10) => {\n return <T>(response: T) => {\n const pagination: NormalizedPagination<T> = {\n items: [response],\n totalPages: totalHits,\n currentPage: 1,\n itemsPerPage: 1,\n totalHits,\n };\n\n return pagination;\n };\n};\n\nexport type CreatePagedQueryStackOptions<\n TArgs extends QueryArgs,\n TNormPagination extends NormalizedPagination<unknown>,\n> = {\n /**\n * The normalizer function that will be used to normalize the response to a format that the paged query can understand.\n *\n * There are some built-in normalizers that can be used:\n * - `ethletePaginationAdapter`\n * - `ggLikePaginationAdapter`\n * - `dynLikePaginationAdapter`\n * - `contentfulGqlLikePaginationAdapter`\n * - `fakePaginationAdapter` (for testing purposes)\n *\n * @param currentResponse The current response that was fetched.\n * @param allResponses All responses that were fetched till now including the current response and pagination.\n */\n responseNormalizer: (\n currentResponse: ResponseType<TArgs>,\n allResponses: NonNullable<ResponseType<TArgs>>[],\n ) => TNormPagination;\n\n /**\n * The query creator function that will be used to create the paged query.\n */\n queryCreator: QueryCreator<TArgs>;\n\n /**\n * The arguments to create the query.\n * The current page will be passed as an argument.\n * This function can be treated like a computed function. It reacts to signal changes.\n * If a signal changes, the paged query will be reset to the initial page.\n *\n * @example (page) => ({ queryParams: { page, limit:20 } }),\n *\n * @param page The page to fetch next. **Do not modify this argument.**\n * @param allResponses All responses that were fetched till now including pagination.\n */\n args: (page: number, allResponses: NonNullable<ResponseType<TArgs>>[]) => RequestArgs<TArgs> | null;\n\n /**\n * The features that should be used for all queries in the stack.\n *\n * @throws If the `withArgs` feature is used. This feature is internally used.\n *\n * @example\n * // Due to limitations in TypeScript, you have to manually add the needed generic types if needed.\n * features: [E.withSuccessHandling<GetPostQueryArgs>({ handler: (post) => console.log(post.title) })]\n *\n * @example\n * // If typings are not needed, you can use the feature without generics.\n * features: [E.withPolling({ interval: 5000 })]\n */\n features?: QueryFeature<any>[];\n\n /**\n * The page to start this paged query from.\n * @default 1\n */\n initialPage?: number;\n};\n\nexport type PagedQueryStackResetOptions = {\n /**\n * The page to reset this paged query to.\n * This will clear everything and start from this page.\n * @default 1 // or the value passed in the `initialPage` option when creating the paged query.\n */\n initialPage?: number;\n};\n\nexport type PagedQueryStackExecuteOptions<TNormPagination extends NormalizedPagination<unknown>> = {\n /**\n * If provided, only the queries that match the condition will be executed.\n * This will also execute the previous and next query to the one that matched the condition.\n * If not provided, all queries will be executed.\n *\n * @example\n * myPagedQuery.execute({ where: (item) => item.id === 4 });\n */\n where?: (item: TNormPagination['items'][number], index: number, array: TNormPagination['items']) => boolean;\n\n /**\n * If true, the cache will be used (if not expired) and the request will not be made.\n * @default false\n */\n allowCache?: boolean;\n};\n\nexport type PagedQueryStackDirection = 'next' | 'previous';\n\nexport type AnyPagedQueryStack = PagedQueryStack<AnyQuery, NormalizedPagination<unknown>>;\n\nexport type PagedQueryStack<TQuery extends AnyQuery, TNormPagination extends NormalizedPagination<unknown>> = {\n /**\n * The current pagination state of the paged query.\n */\n pagination: Signal<TNormPagination | null>;\n\n /**\n * Fetches the previous page of the paged query.\n *\n * @throws If the paged query is already at the first page.\n */\n fetchPreviousPage: () => void;\n\n /**\n * Fetches the next page of the paged query.\n *\n * @throws If the paged query is already at the last page.\n */\n fetchNextPage: () => void;\n\n /**\n * Whether the previous page can be fetched or not.\n *\n * This will be false if the paged query is already at the first page or if the paged query is loading.\n */\n canFetchPreviousPage: Signal<boolean>;\n\n /**\n * Whether the next page can be fetched or not.\n *\n * This will be false if the paged query is already at the last page or if the paged query is loading.\n */\n canFetchNextPage: Signal<boolean>;\n\n /**\n * The items of the paged query.\n */\n items: Signal<TNormPagination['items']>;\n\n /**\n * Whether the paged query is loading or not.\n */\n loading: Signal<boolean>;\n\n /**\n * The error that occurred during the last execution of the paged query.\n */\n error: Signal<QueryErrorResponse | null>;\n\n /**\n * The last query executed in the paged query.\n */\n lastQuery: Signal<Query<QueryArgsOf<TQuery>> | null>;\n\n /**\n * Whether the paged query is on its first load or not.\n */\n isFirstLoad: Signal<boolean>;\n\n /**\n * The queries in the paged query stack.\n */\n queries: Signal<TQuery[]>;\n\n /**\n * Resets the paged query to the initial page.\n */\n reset: (resetOptions?: PagedQueryStackResetOptions) => void;\n\n /**\n * Executes the paged query.\n */\n execute: (options?: PagedQueryStackExecuteOptions<TNormPagination>) => void;\n\n /**\n * The current direction of the paged query.\n */\n direction: Signal<PagedQueryStackDirection>;\n};\n\nexport const createPagedQueryStack = <\n TCreator extends AnyQueryCreator,\n TArgs extends QueryArgsOf<TCreator>,\n TNormPagination extends NormalizedPagination<unknown>,\n>(\n options: CreatePagedQueryStackOptions<TArgs, TNormPagination>,\n) => {\n const { responseNormalizer, queryCreator, features } = options;\n\n const currentPageArgs = signal<RequestArgs<TArgs> | null>(null);\n const initialPage = signal(options.initialPage ?? 1);\n const loadedMinPage = signal(initialPage());\n const loadedMaxPage = signal(initialPage());\n const lastResetTimestamp = signal(Date.now());\n\n const pageDirection = signal<PagedQueryStackDirection>('next');\n\n const stack = createQueryStack({\n args: () => currentPageArgs(),\n queryCreator,\n append: true,\n features,\n appendFn: (oldQueries, newQueries) => {\n const newQuery = newQueries[0];\n const dir = pageDirection();\n\n if (!newQuery) {\n const lastQuery = oldQueries[oldQueries.length - 1] ?? null;\n return { queries: oldQueries, lastQuery };\n } else if (dir === 'previous') {\n return { queries: [newQuery, ...oldQueries], lastQuery: newQuery };\n } else {\n return { queries: [...oldQueries, newQuery], lastQuery: newQuery };\n }\n },\n transform: transformArrayResponse,\n });\n\n effect(() => {\n lastResetTimestamp();\n\n const args = options.args(initialPage(), []);\n\n untracked(() => {\n stack.clear();\n currentPageArgs.set(args);\n loadedMinPage.set(initialPage());\n loadedMaxPage.set(initialPage());\n });\n });\n\n const pagination = computed(() => {\n const res = stack.lastQuery()?.response();\n const all = stack.response();\n\n if (!res) return null;\n\n return responseNormalizer(res, all);\n });\n\n const fetchPreviousPage = () => {\n const page = loadedMinPage() - 1;\n const allResponses = stack.response();\n\n if (page < 1) {\n if (isDevMode()) {\n throw pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage();\n }\n\n return;\n }\n\n currentPageArgs.set(options.args(page, allResponses));\n loadedMinPage.set(page);\n pageDirection.set('previous');\n };\n\n const fetchNextPage = () => {\n const page = loadedMaxPage() + 1;\n const currentPagination = pagination();\n const allResponses = stack.response();\n\n if (!currentPagination) {\n if (isDevMode()) {\n throw pagedQueryStackNextPageCalledWithoutPreviousPage();\n }\n\n return;\n }\n\n if (page > currentPagination.totalPages) {\n if (isDevMode()) {\n throw pagedQueryStackPageBiggerThanTotalPages(page, currentPagination.totalPages);\n }\n\n return;\n }\n\n currentPageArgs.set(options.args(page, allResponses));\n loadedMaxPage.set(page);\n pageDirection.set('next');\n };\n\n const reset = (resetOptions?: PagedQueryStackResetOptions) => {\n const page = resetOptions?.initialPage ?? initialPage();\n\n initialPage.set(page);\n pageDirection.set('next');\n lastResetTimestamp.set(Date.now());\n };\n\n const canFetchPreviousPage = computed(() => {\n const currentPagination = pagination();\n\n if (!currentPagination) return false;\n\n return loadedMinPage() > 1;\n });\n const canFetchNextPage = computed(() => {\n const currentPagination = pagination();\n\n return currentPagination ? loadedMaxPage() < currentPagination.totalPages : false;\n });\n\n const items = computed(() => {\n const res = stack.response();\n return res.map((r) => responseNormalizer(r, res).items).flat();\n });\n\n const isFirstLoad = computed(() => {\n return stack.queries().length === 1 && !!stack.lastQuery()?.loading();\n });\n\n const execute = (options?: PagedQueryStackExecuteOptions<TArgs>) => {\n const whereFn = options?.where;\n\n if (whereFn) {\n const queriesToExecute = new Set<Query<TArgs>>();\n const all = stack.response();\n\n for (const [index, query] of stack.queries().entries()) {\n const res = query.response();\n const err = query.error();\n const isErroredAndCanBeRetried = err && shouldRetryRequest(err.raw);\n\n if (isErroredAndCanBeRetried) {\n queriesToExecute.add(query);\n } else if (res) {\n if (responseNormalizer(res, all).items.some((item, i, a) => whereFn(item, i, a))) {\n queriesToExecute.add(query);\n\n // Also execute the previous and next query to the one that matched the condition.\n\n if (index !== 0) {\n const prevQuery = stack.queries()[index - 1];\n\n if (prevQuery) {\n queriesToExecute.add(prevQuery);\n }\n }\n\n if (index !== stack.queries().length - 1) {\n const nextQuery = stack.queries()[index + 1];\n\n if (nextQuery) {\n queriesToExecute.add(nextQuery);\n }\n }\n }\n }\n }\n\n for (const query of queriesToExecute) {\n query.execute({ options: { allowCache: options.allowCache } });\n }\n } else {\n stack.execute({ allowCache: options?.allowCache });\n }\n };\n\n const pagedQuery: PagedQueryStack<Query<TArgs>, TNormPagination> = {\n pagination,\n fetchPreviousPage,\n fetchNextPage,\n canFetchPreviousPage,\n canFetchNextPage,\n items,\n direction: pageDirection.asReadonly(),\n loading: stack.loading,\n error: stack.error,\n lastQuery: stack.lastQuery,\n isFirstLoad,\n queries: stack.queries,\n reset,\n execute,\n };\n\n return pagedQuery;\n};\n","import { DestroyRef, EnvironmentInjector, createEnvironmentInjector, inject } from '@angular/core';\nimport { QueryClient } from './query-client';\nimport { QueryClientConfig } from './query-client-config';\n\nexport type SetupQueryDependenciesOptions = {\n clientConfig: QueryClientConfig;\n};\n\nexport type QueryDependencies = {\n /** The destroy ref of the query. */\n destroyRef: DestroyRef;\n\n /** The destroy ref of the scope the query is in (e.g. a component) */\n scopeDestroyRef: DestroyRef;\n\n /** The query client */\n client: QueryClient;\n\n /** The injector of the query */\n injector: EnvironmentInjector;\n};\n\nexport const setupQueryDependencies = (options: SetupQueryDependenciesOptions) => {\n const environmentInjector = inject(EnvironmentInjector);\n const queryEnvironmentInjector = createEnvironmentInjector([], environmentInjector);\n const destroyRef = queryEnvironmentInjector.get(DestroyRef);\n const scopeDestroyRef = inject(DestroyRef);\n const client = inject(options.clientConfig.token);\n\n const dependencies: QueryDependencies = {\n destroyRef,\n scopeDestroyRef,\n client,\n injector: queryEnvironmentInjector,\n };\n\n // cleanup the environment injector when the scope (e.g. the component the query is in) is destroyed\n const scopeDestroyListener = scopeDestroyRef.onDestroy(() => {\n try {\n queryEnvironmentInjector.destroy();\n } catch {\n // ignore\n }\n });\n\n destroyRef.onDestroy(() => {\n // cleanup the scope destroy listener\n try {\n scopeDestroyListener();\n } catch {\n // ignore\n }\n });\n\n return dependencies;\n};\n","import { computed, EffectRef, runInInjectionContext, signal, WritableSignal } from '@angular/core';\nimport { syncSignal } from '@ethlete/core';\nimport { QueryArgs, RequestArgs } from './query';\nimport { CreateQueryExecuteOptions } from './query-execute';\n\nexport type ResetExecuteStateOptions<TArgs extends QueryArgs> = {\n executeOptions: Pick<CreateQueryExecuteOptions<TArgs>, 'state' | 'deps'>;\n executeState: QueryExecuteState;\n};\n\nexport const resetExecuteState = <TArgs extends QueryArgs>(options: ResetExecuteStateOptions<TArgs>) => {\n const { executeState, executeOptions: opts } = options;\n const { state } = opts;\n\n cleanupPreviousExecute({ executeOptions: opts, executeState });\n\n opts.deps.client.repository.unbind(executeState.previousKey(), opts.deps.destroyRef);\n\n state.args.set(null);\n state.error.set(null);\n state.latestHttpEvent.set(null);\n state.loading.set(null);\n state.response.set(null);\n state.lastTimeExecutedAt.set(null);\n};\n\nexport type QueryExecuteState = {\n effectRefs: EffectRef[];\n previousKey: WritableSignal<string | false>;\n};\n\nexport const setupQueryExecuteState = (): QueryExecuteState => {\n return {\n effectRefs: [],\n previousKey: signal(false),\n };\n};\n\nexport type RunQueryExecuteOptions = {\n allowCache?: boolean;\n};\n\nexport type InternalRunQueryExecuteOptions = {\n /**\n * If true, the request will be forced to be cached (saved inside the query repository).\n * Can be used to e.g. cache GQL queries transported via POST\n *\n * - `true` means the request will always be cached\n * - `false` means the request will never be cached\n * - `undefined` means the request will be cached if the method is GET, OPTIONS or HEAD\n */\n useQueryRepositoryCache?: boolean;\n};\n\nexport type QueryExecuteOptions<TArgs extends QueryArgs> = {\n executeOptions: CreateQueryExecuteOptions<TArgs>;\n executeState: QueryExecuteState;\n\n args: RequestArgs<TArgs> | null;\n options?: RunQueryExecuteOptions;\n internalOptions?: InternalRunQueryExecuteOptions;\n\n // TODO: Typings\n transformResponse?: (response: any) => any;\n};\n\nexport const queryExecute = <TArgs extends QueryArgs>(options: QueryExecuteOptions<TArgs>) => {\n const {\n executeOptions,\n args,\n executeState,\n options: runQueryOptions,\n internalOptions: internalRunQueryOptions,\n transformResponse,\n } = options;\n const { deps, state, creator, creatorInternals, queryConfig } = executeOptions;\n\n const { key, request } = deps.client.repository.request({\n route: creatorInternals.route,\n method: creatorInternals.method,\n args,\n clientOptions: creator,\n destroyRef: deps.destroyRef,\n key: queryConfig.key,\n previousKey: executeState.previousKey(),\n internalRunQueryOptions,\n runQueryOptions,\n });\n\n executeState.previousKey.set(key);\n\n const responseSignal = transformResponse ? computed(() => transformResponse(request.response())) : request.response;\n\n runInInjectionContext(deps.injector, () => {\n const responseRef = syncSignal(responseSignal, state.response);\n const loadingRef = syncSignal(request.loading, state.loading);\n const errorRef = syncSignal(request.error, state.error);\n const latestHttpEventRef = syncSignal(request.currentEvent, state.latestHttpEvent);\n\n executeState.effectRefs.push(responseRef, loadingRef, errorRef, latestHttpEventRef);\n });\n\n state.lastTimeExecutedAt.set(Date.now());\n state.subtle.request.set(request);\n};\n\nexport type CleanupPreviousExecuteOptions<TArgs extends QueryArgs> = {\n executeOptions: Pick<CreateQueryExecuteOptions<TArgs>, 'state'>;\n executeState: QueryExecuteState;\n};\n\nexport const cleanupPreviousExecute = <TArgs extends QueryArgs>(options: CleanupPreviousExecuteOptions<TArgs>) => {\n const { executeState } = options;\n\n executeState.effectRefs.forEach((ref) => ref.destroy());\n executeState.effectRefs.length = 0;\n};\n","import { Signal } from '@angular/core';\nimport { QueryArgs, RequestArgs } from './query';\nimport { CreateQueryCreatorOptions, InternalCreateQueryCreatorOptions, QueryConfig } from './query-creator';\nimport { QueryDependencies } from './query-dependencies';\nimport {\n cleanupPreviousExecute,\n queryExecute,\n resetExecuteState,\n RunQueryExecuteOptions,\n setupQueryExecuteState,\n} from './query-execute-utils';\nimport { QueryKeyOrNone } from './query-repository';\nimport { QueryState } from './query-state';\n\nexport type CreateQueryExecuteOptions<TArgs extends QueryArgs> = {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: CreateQueryCreatorOptions;\n creatorInternals: InternalCreateQueryCreatorOptions<TArgs>;\n queryConfig: QueryConfig;\n};\n\nexport type QueryExecuteArgs<TArgs extends QueryArgs> = {\n args?: RequestArgs<TArgs> | null;\n options?: RunQueryExecuteOptions;\n};\n\nexport type InternalQueryExecute<TArgs extends QueryArgs> = {\n (executeArgs?: QueryExecuteArgs<TArgs>): void;\n reset: () => void;\n currentRepositoryKey: Signal<QueryKeyOrNone>;\n};\n\nexport type QueryExecute<TArgs extends QueryArgs> = (executeArgs?: QueryExecuteArgs<TArgs>) => void;\n\nexport const createExecuteFn = <TArgs extends QueryArgs>(\n executeOptions: CreateQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n\n const reset = () => resetExecuteState({ executeState, executeOptions });\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n const { args = executeOptions.state.args(), options } = executeArgs ?? {};\n cleanupPreviousExecute({ executeOptions, executeState });\n queryExecute({ executeOptions, executeState, args, options });\n };\n\n exec['reset'] = reset;\n\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { HttpEvent, HttpHeaders } from '@angular/common/http';\nimport { Signal } from '@angular/core';\nimport { HttpRequestLoadingState } from './http-request';\nimport { CreateQueryCreatorOptions, InternalCreateQueryCreatorOptions, QueryConfig } from './query-creator';\nimport { setupQueryDependencies } from './query-dependencies';\nimport { QueryErrorResponse } from './query-error-response';\nimport { createExecuteFn, QueryExecute } from './query-execute';\nimport { QueryFeature, QueryFeatureContext } from './query-features';\nimport { setupQueryState } from './query-state';\nimport { applyQueryFeatures, createQueryObject, getQueryFeatureUsage, maybeExecute } from './query-utils';\n\nexport type QueryArgs = {\n response?: any;\n pathParams?: Record<string, string | number>;\n queryParams?: any;\n body?: any;\n headers?: HttpHeaders;\n};\n\nexport type ResponseType<T extends QueryArgs | null> = T extends QueryArgs ? T['response'] : never;\nexport type PathParamsType<T extends QueryArgs | null> = T extends QueryArgs ? T['pathParams'] : never;\nexport type QueryParamsType<T extends QueryArgs | null> = T extends QueryArgs ? T['queryParams'] : never;\nexport type BodyType<T extends QueryArgs | null> = T extends QueryArgs ? T['body'] : never;\n\nexport type RequestArgs<T extends QueryArgs | null> = T extends QueryArgs ? Omit<T, 'response'> : never;\n\nexport type CreateQueryOptions<TArgs extends QueryArgs> = {\n creator?: CreateQueryCreatorOptions;\n creatorInternals: InternalCreateQueryCreatorOptions<TArgs>;\n features: QueryFeature<TArgs>[];\n queryConfig: QueryConfig;\n};\n\nexport type QueryBase<TArgs extends QueryArgs> = {\n /** The arguments of the last execution of the query. Will be `null` if the query has never been executed */\n args: Signal<RequestArgs<TArgs> | null>;\n\n /**\n * The latest response of the query. Will be `null` if the query has never been executed.\n * Responses are cached until a new response is received.\n * If a response is present but the next execution of the query fails, the response will be set to `null` again.\n */\n response: Signal<ResponseType<TArgs> | null>;\n\n /** The latest Angular HTTP client native http event that occurred during the last execution of the query. Will be `null` if no event occurred. */\n latestHttpEvent: Signal<HttpEvent<ResponseType<TArgs>> | null>;\n\n /** The loading state of the query. Will be `null` if the query currently isn't loading. */\n loading: Signal<HttpRequestLoadingState | null>;\n\n /** The error that occurred during the last execution of the query. Will be `null` if no error occurred. */\n error: Signal<QueryErrorResponse | null>;\n\n /** The time the query was last executed at. Will be `null` if the query has never been executed. */\n lastTimeExecutedAt: Signal<number | null>;\n\n /** The id of the query */\n id: Signal<string>;\n};\n\n/** A snapshot of a query state at a specific point in time */\nexport type QuerySnapshot<TArgs extends QueryArgs> = QueryBase<TArgs> & {\n /** This signal is `true` until the latest execution of the query has completed in any way (success, error, or cancellation) */\n isAlive: Signal<boolean>;\n};\n\nexport type AnyQuerySnapshot = QuerySnapshot<any>;\nexport type AnyQuery = Query<any>;\n\nexport type QuerySubtle<TArgs extends QueryArgs> = {\n /** Destroys the query and cleans up all resources. The query should not be used after this method is called. */\n destroy: () => void;\n\n /** Manually sets the response of the query. This will not trigger a new execution of the query. */\n setResponse: (response: ResponseType<TArgs>) => void;\n};\n\nexport type Query<TArgs extends QueryArgs> = QueryBase<TArgs> & {\n /** Executes the query */\n execute: QueryExecute<TArgs>;\n\n /** Creates an immutable snapshot of the current query state */\n createSnapshot: () => QuerySnapshot<TArgs>;\n\n /** Resets the query state to its initial state */\n reset: () => void;\n\n /** Returns a readonly version of the query */\n asReadonly: () => ReadonlyQuery<TArgs>;\n\n /** Advanced query features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle: QuerySubtle<TArgs>;\n};\n\nexport type ReadonlyQuery<TArgs extends QueryArgs> = Omit<Query<TArgs>, 'execute' | 'subtle' | 'reset' | 'asReadonly'>;\n\nexport const createQuery = <TArgs extends QueryArgs>(options: CreateQueryOptions<TArgs>) => {\n const deps = setupQueryDependencies({ clientConfig: options.creatorInternals.client });\n const state = setupQueryState<TArgs>({});\n const { creator, creatorInternals, queryConfig } = options;\n const flags = getQueryFeatureUsage(options);\n\n const execute = createExecuteFn<TArgs>({ deps, state, creator, creatorInternals, queryConfig });\n\n const featureFnContext: QueryFeatureContext<TArgs> = {\n state,\n execute,\n flags,\n deps,\n };\n\n applyQueryFeatures(options.features, featureFnContext);\n\n maybeExecute({ execute, flags });\n\n return createQueryObject({ state, execute, deps });\n};\n","import { HttpClient } from '@angular/common/http';\nimport { DestroyRef, inject } from '@angular/core';\nimport { buildRoute } from '../../request';\nimport { CreateHttpRequestClientOptions, HttpRequest, createHttpRequest } from './http-request';\nimport { QueryArgs, RequestArgs } from './query';\nimport { QueryClientConfig } from './query-client-config';\nimport { QueryMethod, RouteType } from './query-creator';\nimport { uncacheableRequestHasAllowCacheParam, uncacheableRequestHasCacheKeyParam } from './query-errors';\nimport { InternalRunQueryExecuteOptions, RunQueryExecuteOptions } from './query-execute-utils';\nimport { buildQueryCacheKey, shouldCacheQuery } from './query-utils';\n\nexport type QueryRepositoryRequestOptions<TArgs extends QueryArgs> = {\n /**\n * The route of the request.\n * @example '/users'\n * @example (args) => `/users/${args.userId}`\n */\n route: RouteType<TArgs>;\n\n /** The HTTP method of the request */\n method: QueryMethod;\n\n /** The data of the request */\n args?: RequestArgs<TArgs> | null;\n\n /** The client options of the request */\n clientOptions?: CreateHttpRequestClientOptions;\n\n /** If set, this request's cache key will be prefixed with this key */\n key?: string;\n\n /** The previous cache key of the request */\n previousKey?: string | false;\n\n /** The destroy ref to bind the request to. If the destroy ref is destroyed, the request will be destroyed as well. */\n destroyRef: DestroyRef;\n\n /** Configuration on how to run the query */\n runQueryOptions?: RunQueryExecuteOptions;\n\n /** Internal options for running the query */\n internalRunQueryOptions?: InternalRunQueryExecuteOptions;\n};\n\nexport type QueryRepositoryItem<TArgs extends QueryArgs> = {\n /** The key of the request. If the key is `false`, the request is not cached, otherwise it is. */\n key: QueryKeyOrNone;\n\n /** The request object */\n request: HttpRequest<TArgs>;\n};\n\n/**\n * The query repository is responsible for managing all requests and their consumers.\n * It will cache requests if they can be cached and reuse them if they are already cached.\n * It will also destroy requests if there are no more consumers left.\n */\nexport type QueryRepository = {\n /** Creates a new request. If the request is already cached, it will be reused. */\n request: <TArgs extends QueryArgs>(options: QueryRepositoryRequestOptions<TArgs>) => QueryRepositoryItem<TArgs>;\n\n /** Removes a consumer from a request by its key. Destroys the request if there are no more consumers left. */\n unbind: (key: QueryKeyOrNone, destroyRef: DestroyRef) => boolean;\n};\n\n/** The key of a query */\nexport type QueryKey = string;\n\n/** A key that will not be cached */\nexport type QueryKeyNoCache = false;\n\n/** A key that may or may not be cached */\nexport type QueryKeyOrNone = QueryKey | QueryKeyNoCache;\n\n/** Runs .unbind() if the DestroyRef.onDestroy() gets called */\ntype DestroyCleanupCallback = () => void;\n\n/** Keeps track of all places where the request gets used. Will be cleaned up and removed if there are no more consumers. */\ntype DestroyListenerMapItem = {\n consumers: Map<DestroyRef, DestroyCleanupCallback>;\n request: HttpRequest<QueryArgs>;\n};\n\nexport const createQueryRepository = (config: QueryClientConfig): QueryRepository => {\n const httpClient = inject(HttpClient);\n\n const cache = new Map<QueryKey, DestroyListenerMapItem>();\n\n const request = <TArgs extends QueryArgs>(options: QueryRepositoryRequestOptions<TArgs>) => {\n const { args, clientOptions, runQueryOptions } = options;\n const shouldCache =\n options.internalRunQueryOptions?.useQueryRepositoryCache === false\n ? false\n : shouldCacheQuery(options.method) || options.internalRunQueryOptions?.useQueryRepositoryCache === true;\n\n if (!shouldCache && options.key) throw uncacheableRequestHasCacheKeyParam(options.key);\n if (!shouldCache && runQueryOptions?.allowCache) throw uncacheableRequestHasAllowCacheParam();\n\n const route = buildRoute({\n base: config.baseUrl,\n route: options.route,\n pathParams: args?.pathParams,\n queryParams: args?.queryParams,\n queryParamConfig: config.queryString,\n });\n\n const key =\n shouldCache &&\n buildQueryCacheKey(`${options.key ? options.key + '_' : ''}${route}`, {\n body: args?.body,\n queryParams: args?.queryParams,\n pathParams: args?.pathParams,\n headers: args?.headers,\n });\n\n const previousKey = options.previousKey;\n\n if (key !== previousKey && previousKey) {\n unbind(previousKey, options.destroyRef);\n }\n\n if (shouldCache && key) {\n const cacheEntry = cache.get(key);\n\n if (cacheEntry) {\n bind(key, options.destroyRef, cacheEntry.request);\n\n if (!runQueryOptions?.allowCache || cacheEntry.request.isStale()) {\n cacheEntry.request.execute({ allowCache: runQueryOptions?.allowCache });\n }\n\n return { key, request: cacheEntry.request as HttpRequest<TArgs> };\n }\n }\n\n const request = createHttpRequest<TArgs>({\n fullPath: route,\n args,\n method: options.method,\n dependencies: {\n httpClient,\n },\n clientOptions,\n cacheAdapter: config.cacheAdapter,\n retryFn: config.retryFn,\n });\n\n request.execute();\n\n if (shouldCache && key) {\n bind(key, options.destroyRef, request);\n }\n\n return { key, request };\n };\n\n const unbind = (key: QueryKeyOrNone, destroyRef: DestroyRef) => {\n if (!key) return false;\n\n const cacheEntry = cache.get(key);\n\n if (!cacheEntry) return false;\n\n cacheEntry.consumers.delete(destroyRef);\n\n if (cacheEntry.consumers.size === 0) {\n cacheEntry.request.destroy();\n cache.delete(key);\n }\n\n return true;\n };\n\n const bind = (key: QueryKey, destroyRef: DestroyRef, request: HttpRequest<QueryArgs>) => {\n const destroyListener = destroyRef.onDestroy(() => unbind(key, destroyRef));\n\n const cacheEntry = cache.get(key);\n\n if (cacheEntry) {\n cacheEntry.consumers.set(destroyRef, destroyListener);\n } else {\n const consumers: Map<DestroyRef, DestroyCleanupCallback> = new Map([]);\n\n consumers.set(destroyRef, destroyListener);\n\n cache.set(key, {\n consumers,\n request,\n });\n }\n };\n\n const repository: QueryRepository = {\n request,\n unbind,\n };\n\n return repository;\n};\n","import { QueryClientConfig } from './query-client-config';\nimport { QueryRepository, createQueryRepository } from './query-repository';\n\nexport type QueryClient = {\n repository: QueryRepository;\n};\n\nexport const createQueryClient = (config: QueryClientConfig) => {\n const repository = createQueryRepository(config);\n\n const client: QueryClient = {\n repository,\n };\n\n return client;\n};\n\nexport const provideQueryClient = (config: QueryClientConfig) => {\n return {\n provide: config.token,\n useFactory: () => createQueryClient(config),\n };\n};\n","import { HttpHeaders } from '@angular/common/http';\nimport { InjectionToken } from '@angular/core';\nimport { BuildQueryStringConfig } from '../../request';\nimport { QueryClient } from './query-client';\nimport { ShouldRetryRequestFn } from './query-utils';\n\nexport type CacheAdapterFn = (headers: HttpHeaders) => number | null;\n\nexport type CreateQueryClientConfigOptions = {\n /**\n * The base URL of the client\n * @example 'https://api.example.com/v1'\n */\n baseUrl: string;\n\n /** Configuration for building query strings */\n queryString?: BuildQueryStringConfig;\n\n /** The name of the client */\n name: string;\n\n /**\n * The cache adapter function to use for the client.\n * It determines how long the response of a request can be cached.\n *\n * @default extractExpiresInSeconds()\n */\n cacheAdapter?: CacheAdapterFn;\n\n /**\n * The retry function to use for the client.\n * It determines if a request should be retried after it failed.\n *\n * @default shouldRetryRequest()\n */\n retryFn?: ShouldRetryRequestFn;\n};\n\nexport type QueryClientConfig = CreateQueryClientConfigOptions & {\n /** A generated token for dependency injection */\n token: QueryClientRef;\n};\n\n/**\n * A token for a query client.\n * This token can be used to inject a query client into a service.\n */\nexport type QueryClientRef = InjectionToken<QueryClient>;\n\n/**\n * This function creates a query client config.\n * The config is used to create a query client using the `provideQueryClient(myConfig)` function.\n */\nexport const createQueryClientConfig = (options: CreateQueryClientConfigOptions) => {\n const token = new InjectionToken<QueryClientConfig>(`QueryClient_${options.name}`);\n\n const clientConfig: QueryClientConfig = {\n baseUrl: options.baseUrl,\n token,\n name: options.name,\n queryString: options.queryString,\n\n // createHttpRequest will use fallbacks if these are not provided\n cacheAdapter: options.cacheAdapter,\n retryFn: options.retryFn,\n };\n\n return clientConfig;\n};\n","import { HttpRequestResponseType, HttpRequestTransferCacheConfig } from './http-request';\nimport { AnyQuery, PathParamsType, Query, QueryArgs, createQuery } from './query';\nimport { QueryClientConfig } from './query-client-config';\nimport { QueryFeature } from './query-features';\n\nexport type RouteType<TArgs extends QueryArgs> =\n PathParamsType<TArgs> extends { [key: string]: unknown } ? (args: TArgs['pathParams']) => RouteString : RouteString;\n\nexport type RouteString = `/${string}`;\n\nexport type CreateQueryCreatorOptions = {\n /**\n * If true, the query loading state will include progress information.\n * This is useful for file uploads and downloads.\n *\n * **Warning**: Upload progress events are not supported by browsers when using the fetch API, such as with `provideHttpClient(withFetch())`.\n * In this case, you should use the older XHR implementation by omitting `withFetch()`. But take into account that XHR is not supported in server-side rendering environments.\n *\n * @see https://angular.dev/guide/http/making-requests#receiving-raw-progress-events\n *\n * @default false\n */\n reportProgress?: boolean;\n\n /**\n * The response type of the query.\n * @default 'json'\n */\n responseType?: HttpRequestResponseType;\n\n /**\n * Whether to include credentials (cookies) in the request or not.\n * @default false\n */\n withCredentials?: boolean;\n\n /**\n * This property accepts either a boolean to enable/disable transferring cache for eligible\n * requests performed using `HttpClient`, or an object, which allows to configure cache\n * parameters, such as which headers should be included (no headers are included by default).\n *\n * Setting this property will override the options passed to `provideClientHydration()` for this\n * particular request\n */\n transferCache?: HttpRequestTransferCacheConfig;\n};\n\nexport type QueryCreator<TArgs extends QueryArgs> = {\n (...features: QueryFeature<TArgs>[]): Query<TArgs>;\n (queryConfig: QueryConfig, ...features: QueryFeature<TArgs>[]): Query<TArgs>;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyQueryCreator = QueryCreator<any>;\n\nexport type QueryArgsOf<T extends AnyQueryCreator | AnyQuery> =\n T extends QueryCreator<infer TArgs> ? TArgs : T extends Query<infer TArgs> ? TArgs : never;\n\nexport type RunQueryCreator<TCreator extends AnyQueryCreator> = ReturnType<TCreator>;\n\nexport type QueryMethod = 'GET' | 'OPTIONS' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'TRACE' | 'CONNECT';\n\nexport type InternalCreateQueryCreatorOptions<TArgs extends QueryArgs> = {\n /**\n * The route of the query.\n * If the query has path params, the route should be a function that takes the path params as an argument.\n * Otherwise, it should be a string.\n */\n route: RouteType<TArgs>;\n\n method: QueryMethod;\n client: QueryClientConfig;\n};\n\nexport type QueryConfig = {\n /** A custom id to use for this query. Only affects queries that can be cached. */\n key?: string;\n\n /**\n * If true, the query will not be executed automatically.\n * Does not affect mutations such as POST, PUT etc. since those are never executed automatically.\n */\n onlyManualExecution?: boolean;\n};\n\nexport const splitQueryConfig = <TArgs extends QueryArgs>(args: (QueryFeature<TArgs> | QueryConfig)[]) => {\n let queryConfig: QueryConfig = {};\n let features: QueryFeature<TArgs>[] = [];\n\n const first = args[0];\n\n if (first) {\n if ('type' in first) {\n features = args as QueryFeature<TArgs>[];\n } else {\n [queryConfig, ...features] = args as [QueryConfig, ...QueryFeature<TArgs>[]];\n }\n }\n return { features, queryConfig };\n};\n\nexport const createQueryCreator = <TArgs extends QueryArgs>(\n options: CreateQueryCreatorOptions | undefined,\n internals: InternalCreateQueryCreatorOptions<TArgs>,\n): QueryCreator<TArgs> => {\n function queryCreator(...features: QueryFeature<TArgs>[]): Query<TArgs>;\n function queryCreator(queryConfig: QueryConfig, ...features: QueryFeature<TArgs>[]): Query<TArgs>;\n\n function queryCreator(...args: (QueryFeature<TArgs> | QueryConfig)[]): Query<TArgs> {\n const { features, queryConfig } = splitQueryConfig<TArgs>(args);\n\n return createQuery<TArgs>({\n creator: options,\n creatorInternals: internals,\n features,\n queryConfig,\n });\n }\n\n return queryCreator;\n};\n","import { HttpHeaders } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { of, Subscription, switchMap, tap } from 'rxjs';\nimport { AnyQuerySnapshot, QueryArgs, RequestArgs } from './query';\nimport { CreateQueryExecuteOptions, InternalQueryExecute, QueryExecuteArgs } from './query-execute';\nimport { cleanupPreviousExecute, queryExecute, resetExecuteState, setupQueryExecuteState } from './query-execute-utils';\nimport { InternalSecureCreateQueryCreatorOptions } from './secure-query-creator';\n\nconst AUTH_HEADER = 'Authorization';\n\nexport type CreateSecureQueryExecuteOptions<TArgs extends QueryArgs> = Omit<\n CreateQueryExecuteOptions<TArgs>,\n 'creatorInternals'\n> & {\n creatorInternals: InternalSecureCreateQueryCreatorOptions<TArgs>;\n};\n\nexport const createSecureExecuteFn = <TArgs extends QueryArgs>(\n options: CreateSecureQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n const authProvider = inject(options.creatorInternals.authProvider.token);\n\n let authQuerySubscription = Subscription.EMPTY;\n\n const reset = () => {\n authQuerySubscription.unsubscribe();\n authQuerySubscription = Subscription.EMPTY;\n resetExecuteState({ executeState, executeOptions: options });\n };\n\n const error = (query: AnyQuerySnapshot) => {\n const state = options.state;\n\n state.error.set(query.error());\n state.loading.set(null);\n state.response.set(null);\n state.latestHttpEvent.set(null);\n state.args.set(null);\n };\n\n const authAndExec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n const { args, options: runOptions } = executeArgs ?? {};\n\n const tokens = authProvider.tokens();\n let headers = args?.headers || new HttpHeaders();\n\n if (!tokens) {\n throw new Error('Tokens are not available inside authAndExec');\n }\n\n if (!headers.has(AUTH_HEADER)) {\n headers = headers.set(AUTH_HEADER, `Bearer ${tokens.accessToken}`);\n }\n\n const updatedArgs = { ...(args ?? ({} as RequestArgs<TArgs>)), headers };\n\n queryExecute({\n executeOptions: options,\n executeState,\n args: updatedArgs,\n options: runOptions,\n });\n };\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n authQuerySubscription.unsubscribe();\n authQuerySubscription = Subscription.EMPTY;\n cleanupPreviousExecute({ executeOptions: options, executeState });\n\n const authQuery = authProvider.latestExecutedQuery();\n\n if (!authQuery || authQuery.loading()) {\n options.state.loading.set({ executeTime: Date.now(), progress: null });\n\n authQuerySubscription = toObservable(authProvider.latestExecutedQuery, { injector: options.deps.injector })\n .pipe(\n switchMap((query) => {\n if (!query) return of(null);\n\n return toObservable(query.isAlive, { injector: options.deps.injector }).pipe(\n tap((isAlive) => {\n if (isAlive) return;\n\n if (query.error()) {\n error(query);\n } else if (query.response()) {\n authAndExec(executeArgs);\n }\n }),\n );\n }),\n )\n .subscribe();\n } else if (authQuery.response()) {\n authAndExec(executeArgs);\n } else if (authQuery.error()) {\n error(authQuery);\n } else {\n throw new Error('Invalid state ocurred inside createSecureExecuteFn');\n }\n };\n\n exec['reset'] = reset;\n\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","import { CreateQueryOptions, QueryArgs } from './query';\nimport { setupQueryDependencies } from './query-dependencies';\nimport { QueryFeatureContext } from './query-features';\nimport { setupQueryState } from './query-state';\nimport { applyQueryFeatures, createQueryObject, getQueryFeatureUsage, maybeExecute } from './query-utils';\nimport { InternalSecureCreateQueryCreatorOptions } from './secure-query-creator';\nimport { createSecureExecuteFn } from './secure-query-execute';\n\nexport type CreateSecureQueryOptions<TArgs extends QueryArgs> = Omit<CreateQueryOptions<TArgs>, 'creatorInternals'> & {\n creatorInternals: InternalSecureCreateQueryCreatorOptions<TArgs>;\n};\n\nexport const createSecureQuery = <TArgs extends QueryArgs>(options: CreateSecureQueryOptions<TArgs>) => {\n const deps = setupQueryDependencies({ clientConfig: options.creatorInternals.client });\n const state = setupQueryState<TArgs>({});\n const { creator, creatorInternals, queryConfig } = options;\n const flags = getQueryFeatureUsage(options);\n\n const execute = createSecureExecuteFn<TArgs>({\n deps,\n state,\n creator,\n creatorInternals,\n queryConfig,\n });\n\n const featureFnContext: QueryFeatureContext<TArgs> = {\n deps,\n state,\n execute,\n flags,\n };\n\n applyQueryFeatures(options.features, featureFnContext);\n\n maybeExecute({ execute, flags });\n\n return createQueryObject({ state, execute, deps });\n};\n","import { AnyBearerAuthProviderConfig } from '../auth/bearer-auth-provider-config';\nimport { Query, QueryArgs } from './query';\nimport {\n CreateQueryCreatorOptions,\n InternalCreateQueryCreatorOptions,\n QueryConfig,\n QueryCreator,\n splitQueryConfig,\n} from './query-creator';\nimport { QueryFeature } from './query-features';\nimport { createSecureQuery } from './secure-query';\n\nexport type InternalSecureCreateQueryCreatorOptions<TArgs extends QueryArgs> =\n InternalCreateQueryCreatorOptions<TArgs> & {\n authProvider: AnyBearerAuthProviderConfig;\n };\n\nexport const createSecureQueryCreator = <TArgs extends QueryArgs>(\n options: CreateQueryCreatorOptions | undefined,\n internals: InternalSecureCreateQueryCreatorOptions<TArgs>,\n): QueryCreator<TArgs> => {\n function queryCreator(...features: QueryFeature<TArgs>[]): Query<TArgs>;\n function queryCreator(queryConfig: QueryConfig, ...features: QueryFeature<TArgs>[]): Query<TArgs>;\n\n function queryCreator(...args: (QueryFeature<TArgs> | QueryConfig)[]): Query<TArgs> {\n const { features, queryConfig } = splitQueryConfig<TArgs>(args);\n\n return createSecureQuery<TArgs>({\n creator: options,\n creatorInternals: internals,\n features,\n queryConfig,\n });\n }\n\n return queryCreator;\n};\n","import { AnyBearerAuthProviderConfig } from '../auth/bearer-auth-provider-config';\nimport { QueryArgs } from './query';\nimport { QueryClientConfig } from './query-client-config';\nimport { CreateQueryCreatorOptions, RouteType, createQueryCreator } from './query-creator';\nimport { createSecureQueryCreator } from './secure-query-creator';\n\n/** A query creator that creates a GET query */\nexport const createGetQuery = (client: QueryClientConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createQueryCreator<TArgs>(creatorOptions, { method: 'GET', client, route });\n};\n\n/** A query creator that creates a secure GET query (requires authentication) */\nexport const createSecureGetQuery = (client: QueryClientConfig, authProvider: AnyBearerAuthProviderConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createSecureQueryCreator<TArgs>(creatorOptions, { method: 'GET', client, authProvider, route });\n};\n\n/** A query creator that creates a POST query */\nexport const createPostQuery = (client: QueryClientConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createQueryCreator<TArgs>(creatorOptions, { method: 'POST', client, route });\n};\n\n/** A query creator that creates a secure POST query (requires authentication) */\nexport const createSecurePostQuery = (client: QueryClientConfig, authProvider: AnyBearerAuthProviderConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createSecureQueryCreator<TArgs>(creatorOptions, { method: 'POST', client, authProvider, route });\n};\n\n/** A query creator that creates a PUT query */\nexport const createPutQuery = (client: QueryClientConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createQueryCreator<TArgs>(creatorOptions, { method: 'PUT', client, route });\n};\n\n/** A query creator that creates a secure PUT query (requires authentication) */\nexport const createSecurePutQuery = (client: QueryClientConfig, authProvider: AnyBearerAuthProviderConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createSecureQueryCreator<TArgs>(creatorOptions, { method: 'PUT', client, authProvider, route });\n};\n\n/** A query creator that creates a DELETE query */\nexport const createDeleteQuery = (client: QueryClientConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createQueryCreator<TArgs>(creatorOptions, { method: 'DELETE', client, route });\n};\n\n/** A query creator that creates a secure DELETE query (requires authentication) */\nexport const createSecureDeleteQuery = (client: QueryClientConfig, authProvider: AnyBearerAuthProviderConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createSecureQueryCreator<TArgs>(creatorOptions, { method: 'DELETE', client, authProvider, route });\n};\n\n/** A query creator that creates a PATCH query */\nexport const createPatchQuery = (client: QueryClientConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createQueryCreator<TArgs>(creatorOptions, { method: 'PATCH', client, route });\n};\n\n/** A query creator that creates a secure PATCH query (requires authentication) */\nexport const createSecurePatchQuery = (client: QueryClientConfig, authProvider: AnyBearerAuthProviderConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createSecureQueryCreator<TArgs>(creatorOptions, { method: 'PATCH', client, authProvider, route });\n};\n","import { transformGql } from '../../gql';\nimport {\n cleanupPreviousExecute,\n CreateQueryExecuteOptions,\n InternalQueryExecute,\n QueryArgs,\n QueryConfig,\n QueryDependencies,\n queryExecute,\n QueryExecuteArgs,\n QueryState,\n RequestArgs,\n resetExecuteState,\n RouteType,\n setupQueryExecuteState,\n} from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport { CreateGqlQueryCreatorOptions, InternalCreateGqlQueryCreatorOptions } from './gql-query-creator';\n\nexport type CreateGqlQueryExecuteOptions<TArgs extends QueryArgs> = {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: CreateGqlQueryCreatorOptions<TArgs>;\n creatorInternals: InternalCreateGqlQueryCreatorOptions;\n queryConfig: QueryConfig;\n};\n\nexport const createGqlExecuteFn = <TArgs extends GqlQueryArgs>(\n executeOptions: CreateGqlQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n\n const reset = () => resetExecuteState({ executeState, executeOptions });\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n const { args = executeOptions.state.args(), options } = executeArgs ?? {};\n cleanupPreviousExecute({ executeOptions, executeState });\n\n // TODO: This should get cleaned up\n const tpl = executeOptions.creatorInternals.query;\n const query = transformGql(tpl);\n let gqlParams = query(args?.variables);\n\n if (args?.queryParams && executeOptions.creatorInternals.transport === 'GET') {\n gqlParams = { ...gqlParams, ...args.queryParams };\n }\n\n const computedArgs = args ?? ({} as RequestArgs<TArgs>);\n\n if (executeOptions.creatorInternals.transport === 'GET') {\n computedArgs.queryParams = gqlParams;\n } else {\n computedArgs.body = gqlParams;\n }\n\n const normalizedOpts: CreateQueryExecuteOptions<TArgs> = {\n creator: executeOptions.creator ?? {},\n creatorInternals: {\n client: executeOptions.creatorInternals.client,\n method: executeOptions.creatorInternals.transport,\n route: (executeOptions.creator?.route ?? '') as RouteType<TArgs>,\n },\n deps: executeOptions.deps,\n queryConfig: executeOptions.queryConfig,\n state: executeOptions.state,\n };\n\n queryExecute({\n executeOptions: normalizedOpts,\n executeState,\n args: computedArgs,\n options,\n internalOptions: {\n useQueryRepositoryCache: executeOptions.creatorInternals.method === 'QUERY',\n },\n transformResponse: (originalResponse) => {\n if (originalResponse && 'data' in originalResponse) {\n return originalResponse.data;\n }\n\n return originalResponse;\n },\n });\n };\n\n exec['reset'] = reset;\n\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","import {\n applyQueryFeatures,\n createQueryObject,\n CreateQueryOptions,\n getQueryFeatureUsage,\n maybeExecute,\n QueryArgs,\n QueryFeatureContext,\n setupQueryDependencies,\n setupQueryState,\n} from '../http';\nimport { CreateGqlQueryCreatorOptions, InternalCreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { createGqlExecuteFn } from './gql-query-execute';\n\nexport type GqlQueryArgs = QueryArgs & {\n variables?: Record<string, unknown>;\n};\n\nexport type CreateGqlQueryOptions<TArgs extends GqlQueryArgs> = Omit<\n CreateQueryOptions<TArgs>,\n 'creator' | 'creatorInternals'\n> & {\n creator?: CreateGqlQueryCreatorOptions<TArgs>;\n creatorInternals: InternalCreateGqlQueryCreatorOptions;\n};\n\nexport type GqlVariablesType<T extends GqlQueryArgs | null> = T extends GqlQueryArgs ? T['variables'] : never;\n\nexport const isCreateGqlQueryOptions = <TArgs extends QueryArgs>(\n options: CreateQueryOptions<TArgs> | CreateGqlQueryOptions<TArgs>,\n): options is CreateGqlQueryOptions<TArgs> => {\n return 'transport' in options.creatorInternals;\n};\n\nexport const createGqlQuery = <TArgs extends GqlQueryArgs>(options: CreateGqlQueryOptions<TArgs>) => {\n const deps = setupQueryDependencies({ clientConfig: options.creatorInternals.client });\n const state = setupQueryState<TArgs>({});\n const { creator, creatorInternals, queryConfig } = options;\n const flags = getQueryFeatureUsage(options);\n\n const execute = createGqlExecuteFn<TArgs>({\n deps,\n state,\n creator,\n creatorInternals,\n queryConfig,\n });\n\n const featureFnContext: QueryFeatureContext<TArgs> = {\n state,\n execute,\n flags,\n deps,\n };\n\n applyQueryFeatures(options.features, featureFnContext);\n\n maybeExecute({ execute, flags });\n\n return createQueryObject({ state, execute, deps });\n};\n","import {\n CreateQueryCreatorOptions,\n Query,\n QueryClientConfig,\n QueryConfig,\n QueryCreator,\n QueryFeature,\n RouteType,\n splitQueryConfig,\n} from '../http';\nimport { createGqlQuery, GqlQueryArgs } from './gql-query';\n\nexport type CreateGqlQueryCreatorOptions<TArgs extends GqlQueryArgs> = Omit<CreateQueryCreatorOptions, 'route'> & {\n route?: RouteType<TArgs>;\n};\n\nexport type GqlQueryMethod = 'QUERY' | 'MUTATE';\nexport type GqlQueryTransport = 'GET' | 'POST';\n\nexport type InternalCreateGqlQueryCreatorOptions = {\n method: GqlQueryMethod;\n transport: GqlQueryTransport;\n client: QueryClientConfig;\n query: string;\n};\n\nexport const createGqlQueryCreator = <TArgs extends GqlQueryArgs>(\n options: CreateGqlQueryCreatorOptions<TArgs> | undefined,\n internals: InternalCreateGqlQueryCreatorOptions,\n): QueryCreator<TArgs> => {\n function queryCreator(...features: QueryFeature<TArgs>[]): Query<TArgs>;\n function queryCreator(queryConfig: QueryConfig, ...features: QueryFeature<TArgs>[]): Query<TArgs>;\n\n function queryCreator(...args: (QueryFeature<TArgs> | QueryConfig)[]): Query<TArgs> {\n const { features, queryConfig } = splitQueryConfig<TArgs>(args);\n\n return createGqlQuery<TArgs>({\n creator: options,\n creatorInternals: internals,\n features,\n queryConfig,\n });\n }\n\n return queryCreator;\n};\n","import { GQL } from '../../gql';\nimport { QueryClientConfig } from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport { CreateGqlQueryCreatorOptions, createGqlQueryCreator } from './gql-query-creator';\n\n/** A query creator that creates a GQL query where the payload is sent via GET (query params) */\nexport const createGqlQueryViaGet = (client: QueryClientConfig) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createGqlQueryCreator<TArgs>(creatorOptions, { method: 'QUERY', client, transport: 'GET', query });\n};\n\n/** A query creator that creates a GQL query where the payload is sent via POST (body) */\nexport const createGqlQueryViaPost = (client: QueryClientConfig) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createGqlQueryCreator<TArgs>(creatorOptions, { method: 'QUERY', client, transport: 'POST', query });\n};\n\n/** A query creator that creates a GQL mutation where the payload is sent via GET (query params) */\nexport const createGqlMutationViaGet = (client: QueryClientConfig) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createGqlQueryCreator<TArgs>(creatorOptions, { method: 'MUTATE', client, transport: 'GET', query });\n};\n\n/** A query creator that creates a GQL mutation where the payload is sent via POST (body) */\nexport const createGqlMutationViaPost = (client: QueryClientConfig) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createGqlQueryCreator<TArgs>(creatorOptions, { method: 'MUTATE', client, transport: 'POST', query });\n};\n","import { HttpStatusCode } from '@angular/common/http';\n\nexport const parseHttpErrorCodeToTitleDe = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Ungültige Anfrage';\n case HttpStatusCode.Unauthorized:\n return 'Nicht autorisiert';\n case HttpStatusCode.PaymentRequired:\n return 'Zahlung erforderlich';\n case HttpStatusCode.Forbidden:\n return 'Verboten';\n case HttpStatusCode.NotFound:\n return 'Nicht gefunden';\n case HttpStatusCode.MethodNotAllowed:\n return 'Methode nicht erlaubt';\n case HttpStatusCode.NotAcceptable:\n return 'Nicht akzeptabel';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy-Authentifizierung erforderlich';\n case HttpStatusCode.RequestTimeout:\n return 'Anforderungszeitüberschreitung';\n case HttpStatusCode.Conflict:\n return 'Konflikt';\n case HttpStatusCode.Gone:\n return 'Weg';\n case HttpStatusCode.LengthRequired:\n return 'Länge erforderlich';\n case HttpStatusCode.PreconditionFailed:\n return 'Vorbedingung fehlgeschlagen';\n case HttpStatusCode.PayloadTooLarge:\n return 'Nutzlast zu groß';\n case HttpStatusCode.UriTooLong:\n return 'URI zu lang';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Nicht unterstützter Medientyp';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Bereich nicht zufriedenstellend';\n case HttpStatusCode.ExpectationFailed:\n return 'Erwartung fehlgeschlagen';\n case HttpStatusCode.ImATeapot:\n return 'Ich bin eine Teekanne';\n case HttpStatusCode.MisdirectedRequest:\n return 'Fehlgeleitete Anfrage';\n case HttpStatusCode.UnprocessableEntity:\n return 'Unverarbeitbare Entität';\n case HttpStatusCode.Locked:\n return 'Gesperrt';\n case HttpStatusCode.FailedDependency:\n return 'Fehlgeschlagene Abhängigkeit';\n case HttpStatusCode.TooEarly:\n return 'Zu früh';\n case HttpStatusCode.UpgradeRequired:\n return 'Upgrade erforderlich';\n case HttpStatusCode.PreconditionRequired:\n return 'Vorbedingung erforderlich';\n case HttpStatusCode.TooManyRequests:\n return 'Zu viele Anfragen';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Anforderungskopffelder zu groß';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Aus rechtlichen Gründen nicht verfügbar';\n case HttpStatusCode.InternalServerError:\n return 'Interner Serverfehler';\n case HttpStatusCode.NotImplemented:\n return 'Nicht implementiert';\n case HttpStatusCode.BadGateway:\n return 'Schlechtes Gateway';\n case HttpStatusCode.ServiceUnavailable:\n return 'Dienst nicht verfügbar';\n case HttpStatusCode.GatewayTimeout:\n return 'Gateway-Zeitüberschreitung';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'HTTP-Version nicht unterstützt';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Variante verhandelt auch';\n case HttpStatusCode.InsufficientStorage:\n return 'Unzureichender Speicher';\n case HttpStatusCode.LoopDetected:\n return 'Schleifenerkennung';\n case HttpStatusCode.NotExtended:\n return 'Nicht erweitert';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Netzwerkauthentifizierung erforderlich';\n default:\n return 'Etwas ist schief gelaufen';\n }\n};\n\nexport const parseHttpErrorCodeToMessageDe = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Entschuldigung, wir konnten Ihre Anfrage nicht bearbeiten. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.Unauthorized:\n return 'Sie sind nicht berechtigt, diese Aktion auszuführen. Bitte melden Sie sich an, um fortzufahren.';\n case HttpStatusCode.PaymentRequired:\n return 'Zur Ausführung dieser Aktion ist eine Zahlung erforderlich.';\n case HttpStatusCode.Forbidden:\n return 'Sie haben keine Berechtigung, diese Aktion auszuführen.';\n case HttpStatusCode.NotFound:\n return 'Die angeforderte Ressource wurde nicht gefunden.';\n case HttpStatusCode.MethodNotAllowed:\n return 'Die angeforderte Methode ist für diese Ressource nicht zulässig.';\n case HttpStatusCode.NotAcceptable:\n return 'Die angeforderte Ressource ist nicht in der Lage, eine Antwort zu generieren, die der Liste der akzeptablen Werte entspricht.';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Zur Ausführung dieser Aktion ist eine Proxy-Authentifizierung erforderlich.';\n case HttpStatusCode.RequestTimeout:\n return 'Der Server hat auf die Anforderung gewartet.';\n case HttpStatusCode.Conflict:\n return 'Die Anforderung steht im Widerspruch zum aktuellen Zustand der Ressource.';\n case HttpStatusCode.Gone:\n return 'Die angeforderte Ressource ist nicht mehr verfügbar und wird auch nicht mehr verfügbar sein.';\n case HttpStatusCode.LengthRequired:\n return 'Die Anforderung hat die Länge ihres Inhalts nicht angegeben, die von der angeforderten Ressource benötigt wird.';\n case HttpStatusCode.PreconditionFailed:\n return 'Der Server erfüllt eine der Voraussetzungen nicht, die der Anforderer an die Anforderung gestellt hat.';\n case HttpStatusCode.PayloadTooLarge:\n return 'Die Anforderung ist größer als der Server bereit oder in der Lage ist, zu verarbeiten.';\n case HttpStatusCode.UriTooLong:\n return 'Die bereitgestellte URL war für den Server zu lang, um sie zu verarbeiten.';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Die Anforderungseinheit hat einen Medientyp, den der Server oder die Ressource nicht unterstützt.';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Der Client hat einen Teil der Datei angefordert, aber der Server kann diesen Teil nicht liefern.';\n case HttpStatusCode.ExpectationFailed:\n return 'Der Server kann die Anforderungen des Erwartung-Anforderungskopffelds nicht erfüllen.';\n case HttpStatusCode.ImATeapot:\n return 'Ich bin eine Teekanne.';\n case HttpStatusCode.MisdirectedRequest:\n return 'Die Anforderung wurde an einen Server gerichtet, der nicht in der Lage ist, eine Antwort zu generieren.';\n case HttpStatusCode.UnprocessableEntity:\n return 'Die Anforderung war gut formuliert, konnte aber aufgrund semantischer Fehler nicht befolgt werden.';\n case HttpStatusCode.Locked:\n return 'Die Ressource, auf die zugegriffen wird, ist gesperrt.';\n case HttpStatusCode.FailedDependency:\n return 'Die Anforderung ist aufgrund eines Fehlers einer vorherigen Anforderung fehlgeschlagen.';\n case HttpStatusCode.TooEarly:\n return 'Der Server ist nicht bereit, die Anforderung zu verarbeiten, weil der Benutzer nicht authentifiziert wurde.';\n case HttpStatusCode.UpgradeRequired:\n return 'Der Client sollte zu einem anderen Protokoll wie TLS/1.0 wechseln, das im Upgrade-Anforderungskopffeld angegeben ist.';\n case HttpStatusCode.PreconditionRequired:\n return 'Der Ursprungsserver erfordert, dass die Anforderung bedingt ist.';\n case HttpStatusCode.TooManyRequests:\n return 'Sie haben in einer bestimmten Zeit zu viele Anfragen gesendet. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Der Server ist nicht bereit, die Anforderung zu verarbeiten, weil seine Kopffelder zu groß sind.';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Die Ressource ist aufgrund einer rechtlichen Forderung nicht verfügbar.';\n case HttpStatusCode.InternalServerError:\n return 'Etwas ist schief gelaufen. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.NotImplemented:\n return 'Der Server unterstützt die zur Erfüllung der Anforderung erforderliche Funktionalität nicht.';\n case HttpStatusCode.BadGateway:\n return 'Etwas ist schief gelaufen. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.ServiceUnavailable:\n return 'Der Server kann die Anforderung derzeit nicht bearbeiten, da er vorübergehend überlastet oder gewartet wird.';\n case HttpStatusCode.GatewayTimeout:\n return 'Der Server hat beim Versuch, die Anforderung abzuschließen, keine rechtzeitige Antwort vom Server erhalten.';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'Der Server unterstützt die in der Anforderung verwendete HTTP-Protokollversion nicht.';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Der Server hat einen internen Konfigurationsfehler: Die ausgewählte Variantenressource ist so konfiguriert, dass sie sich selbst in die transparente Inhaltsverhandlung einbindet, und ist daher kein geeigneter Endpunkt im Verhandlungsprozess.';\n case HttpStatusCode.InsufficientStorage:\n return 'Die Methode konnte auf die Ressource nicht angewendet werden, weil der Server nicht in der Lage ist, die für die erfolgreiche Ausführung der Anforderung erforderliche Darstellung zu speichern.';\n case HttpStatusCode.LoopDetected:\n return 'Der Server hat eine Endlosschleife erkannt, während er die Anforderung verarbeitet.';\n case HttpStatusCode.NotExtended:\n return 'Weitere Erweiterungen der Anforderung sind erforderlich, damit der Server sie erfüllen kann.';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Sie müssen sich authentifizieren, um Zugang zum Netzwerk zu erhalten.';\n default:\n return 'Etwas ist schief gelaufen. Überprüfen Sie Ihre Internetverbindung und versuchen Sie es später erneut.';\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { parseHttpErrorCodeToMessageDe, parseHttpErrorCodeToTitleDe } from './parse-http-error-code-de';\n\n@Pipe({\n name: 'parseHttpErrorCodeToTitleDe',\n standalone: true,\n})\nexport class ParseHttpErrorCodeToTitleDePipe implements PipeTransform {\n transform = parseHttpErrorCodeToTitleDe;\n}\n\n@Pipe({\n name: 'parseHttpErrorCodeToMessageDe',\n standalone: true,\n})\nexport class ParseHttpErrorCodeToMessageDePipe implements PipeTransform {\n transform = parseHttpErrorCodeToMessageDe;\n}\n","import { HttpStatusCode } from '@angular/common/http';\n\nexport const parseHttpErrorCodeToTitleEn = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Bad request';\n case HttpStatusCode.Unauthorized:\n return 'Unauthorized';\n case HttpStatusCode.PaymentRequired:\n return 'Payment required';\n case HttpStatusCode.Forbidden:\n return 'Forbidden';\n case HttpStatusCode.NotFound:\n return 'Not found';\n case HttpStatusCode.MethodNotAllowed:\n return 'Method not allowed';\n case HttpStatusCode.NotAcceptable:\n return 'Not acceptable';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy authentication required';\n case HttpStatusCode.RequestTimeout:\n return 'Request timeout';\n case HttpStatusCode.Conflict:\n return 'Conflict';\n case HttpStatusCode.Gone:\n return 'Gone';\n case HttpStatusCode.LengthRequired:\n return 'Length required';\n case HttpStatusCode.PreconditionFailed:\n return 'Precondition failed';\n case HttpStatusCode.PayloadTooLarge:\n return 'Payload too large';\n case HttpStatusCode.UriTooLong:\n return 'URI too long';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Unsupported media type';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Range not satisfiable';\n case HttpStatusCode.ExpectationFailed:\n return 'Expectation failed';\n case HttpStatusCode.ImATeapot:\n return 'I am a teapot';\n case HttpStatusCode.MisdirectedRequest:\n return 'Misdirected request';\n case HttpStatusCode.UnprocessableEntity:\n return 'Unprocessable entity';\n case HttpStatusCode.Locked:\n return 'Locked';\n case HttpStatusCode.FailedDependency:\n return 'Failed dependency';\n case HttpStatusCode.TooEarly:\n return 'Too early';\n case HttpStatusCode.UpgradeRequired:\n return 'Upgrade required';\n case HttpStatusCode.PreconditionRequired:\n return 'Precondition required';\n case HttpStatusCode.TooManyRequests:\n return 'Too many requests';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Request header fields too large';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Unavailable for legal reasons';\n case HttpStatusCode.InternalServerError:\n return 'Internal server error';\n case HttpStatusCode.NotImplemented:\n return 'Not implemented';\n case HttpStatusCode.BadGateway:\n return 'Bad gateway';\n case HttpStatusCode.ServiceUnavailable:\n return 'Service unavailable';\n case HttpStatusCode.GatewayTimeout:\n return 'Gateway timeout';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'HTTP version not supported';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Variant also negotiates';\n case HttpStatusCode.InsufficientStorage:\n return 'Insufficient storage';\n case HttpStatusCode.LoopDetected:\n return 'Loop detected';\n case HttpStatusCode.NotExtended:\n return 'Not extended';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Network authentication required';\n default:\n return 'Something went wrong';\n }\n};\n\nexport const parseHttpErrorCodeToMessageEn = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Sorry, we could not process your request. Please try again later.';\n case HttpStatusCode.Unauthorized:\n return 'You are not authorized to perform this action. Please log in to continue.';\n case HttpStatusCode.PaymentRequired:\n return 'Payment is required to complete this action.';\n case HttpStatusCode.Forbidden:\n return 'You do not have permission to perform this action.';\n case HttpStatusCode.NotFound:\n return 'The requested resource was not found.';\n case HttpStatusCode.MethodNotAllowed:\n return 'The requested method is not allowed for this resource.';\n case HttpStatusCode.NotAcceptable:\n return 'The requested resource is not capable of generating a response matching the list of acceptable values.';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy authentication is required to complete this action.';\n case HttpStatusCode.RequestTimeout:\n return 'The server timed out waiting for the request.';\n case HttpStatusCode.Conflict:\n return 'The request conflicts with the current state of the resource.';\n case HttpStatusCode.Gone:\n return 'The requested resource is no longer available and will not be available again.';\n case HttpStatusCode.LengthRequired:\n return 'The request did not specify the length of its content, which is required by the requested resource.';\n case HttpStatusCode.PreconditionFailed:\n return 'The server does not meet one of the preconditions that the requester put on the request.';\n case HttpStatusCode.PayloadTooLarge:\n return 'The request is larger than the server is willing or able to process.';\n case HttpStatusCode.UriTooLong:\n return 'The URL provided was too long for the server to process.';\n case HttpStatusCode.UnsupportedMediaType:\n return 'The request entity has a media type which the server or resource does not support.';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'The client has asked for a portion of the file, but the server cannot supply that portion.';\n case HttpStatusCode.ExpectationFailed:\n return 'The server cannot meet the requirements of the Expect request-header field.';\n case HttpStatusCode.ImATeapot:\n return 'I am a teapot.';\n case HttpStatusCode.MisdirectedRequest:\n return 'The request was directed at a server that is not able to produce a response.';\n case HttpStatusCode.UnprocessableEntity:\n return 'The request was well-formed but was unable to be followed due to semantic errors.';\n case HttpStatusCode.Locked:\n return 'The resource that is being accessed is locked.';\n case HttpStatusCode.FailedDependency:\n return 'The request failed due to failure of a previous request.';\n case HttpStatusCode.TooEarly:\n return 'The server is unwilling to process the request because the user has not been authenticated.';\n case HttpStatusCode.UpgradeRequired:\n return 'The client should switch to a different protocol such as TLS/1.0, given in the Upgrade header field.';\n case HttpStatusCode.PreconditionRequired:\n return 'The origin server requires the request to be conditional.';\n case HttpStatusCode.TooManyRequests:\n return 'You have sent too many requests in a given amount of time. Please try again later.';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'The server is unwilling to process the request because its header fields are too large.';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'The resource is unavailable due to a legal demand.';\n case HttpStatusCode.InternalServerError:\n return 'Something went wrong on our end. Please try again later.';\n case HttpStatusCode.NotImplemented:\n return 'The server does not support the functionality required to fulfill the request.';\n case HttpStatusCode.BadGateway:\n return 'Something went wrong on our end. Please try again later.';\n case HttpStatusCode.ServiceUnavailable:\n return 'The server is currently unable to handle the request due to a temporary overload or maintenance of the server.';\n case HttpStatusCode.GatewayTimeout:\n return 'The server, while acting as a gateway or proxy, did not receive a timely response from the upstream server specified by the URL or some other auxiliary server it needed to access in attempting to complete the request.';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'The server does not support the HTTP protocol version used in the request.';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'The server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.';\n case HttpStatusCode.InsufficientStorage:\n return 'The method could not be performed on the resource because the server is unable to store the representation needed to successfully complete the request.';\n case HttpStatusCode.LoopDetected:\n return 'The server detected an infinite loop while processing the request.';\n case HttpStatusCode.NotExtended:\n return 'Further extensions to the request are required for the server to fulfill it.';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'You need to authenticate to gain network access.';\n default:\n return 'Something went wrong. Check your internet connection and try again later.';\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { parseHttpErrorCodeToMessageEn, parseHttpErrorCodeToTitleEn } from './parse-http-error-code-en';\n\n@Pipe({\n name: 'parseHttpErrorCodeToTitleEn',\n standalone: true,\n})\nexport class ParseHttpErrorCodeToTitleEnPipe implements PipeTransform {\n transform = parseHttpErrorCodeToTitleEn;\n}\n\n@Pipe({\n name: 'parseHttpErrorCodeToMessageEn',\n standalone: true,\n})\nexport class ParseHttpErrorCodeToMessageEnPipe implements PipeTransform {\n transform = parseHttpErrorCodeToMessageEn;\n}\n","import { RuntimeError } from '@ethlete/core';\n\n// codes 1000-1999\nexport const enum WebSocketRuntimeErrorCode {\n // Web Socket Client\n ROOM_NOT_JOINED = 1000,\n MESSAGE_MALFORMED = 1001,\n}\n\nexport const roomNotJoined = (room: string) => {\n return new RuntimeError(\n WebSocketRuntimeErrorCode.ROOM_NOT_JOINED,\n `Tried leaving the room \"${room}\" but it has not been joined.`,\n );\n};\n\nexport const messageMalformed = () => {\n return new RuntimeError(\n WebSocketRuntimeErrorCode.MESSAGE_MALFORMED,\n 'A message has been received but it is malformed (cannot be parsed as JSON).',\n );\n};\n","import {\n computed,\n DestroyRef,\n effect,\n inject,\n isDevMode,\n Signal,\n signal,\n untracked,\n WritableSignal,\n} from '@angular/core';\nimport { previousSignalValue } from '@ethlete/core';\nimport { io } from 'socket.io-client';\nimport { WebSocketClientConfig } from './web-socket-client-config';\nimport { messageMalformed, roomNotJoined } from './web-socket-errors';\n\n/** A default socket io message view */\nexport type SocketMessageView<TMessageData = unknown> = {\n room: string;\n event: string;\n data: TMessageData;\n};\n\nexport type WebSocketClientSubtle = {\n /** Leave a socket io room */\n leaveRoom: (room: string) => void;\n};\n\nexport type WebSocketClient<TMessageData extends SocketMessageView> = {\n /**\n * Join a socket io room\n * If a function is passed, it will be evaluated in a reactive signal context.\n * If the function returns null, no room will be joined.\n * If the function returns a string, the previous room will be left and the new room will be joined.\n */\n joinRoom: (room: string | (() => string | null)) => Signal<WebSocketRoom<TMessageData> | null>;\n\n /** Whether the client is connected to the server */\n isConnected: Signal<boolean>;\n\n /** Advanced web socket features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle: WebSocketClientSubtle;\n};\n\nexport type InternalWebSocketRoom<TMessageData extends SocketMessageView> = {\n latestMessage: WritableSignal<TMessageData | null>;\n};\n\nexport type WebSocketRoom<TMessageData extends SocketMessageView> = {\n /** The latest message received in the room */\n latestMessage: Signal<TMessageData | null>;\n};\n\nexport const createWebSocketClient = <TMessageData extends SocketMessageView>(config: WebSocketClientConfig) => {\n const socket = io(config.url, {\n withCredentials: true,\n autoConnect: false,\n });\n\n const rooms = new Map<string, InternalWebSocketRoom<TMessageData>>();\n const isConnected = signal(false);\n\n const joinRoom = (room: string | (() => string | null)) => {\n const roomFn = typeof room === 'function' ? room : () => room;\n\n const join = (name: string) => {\n socket.emit('join-room', name);\n\n const existingRoom = rooms.get(name);\n\n if (existingRoom) return existingRoom;\n\n const message = signal<TMessageData | null>(null);\n\n const newRoom: InternalWebSocketRoom<TMessageData> = {\n latestMessage: message,\n };\n\n rooms.set(name, newRoom);\n\n return newRoom;\n };\n\n const pre = previousSignalValue(computed(() => roomFn()));\n const roomData = signal<InternalWebSocketRoom<TMessageData> | null>(null);\n\n effect(() => {\n const current = roomFn();\n\n untracked(() => {\n const previous = pre();\n\n if (previous === current) return;\n\n if (previous) leaveRoom(previous);\n\n if (current) {\n const joinedRoom = join(current);\n if (joinedRoom) roomData.set(joinedRoom);\n } else {\n roomData.set(null);\n }\n });\n });\n\n inject(DestroyRef).onDestroy(() => {\n const current = roomFn();\n\n if (current) {\n leaveRoom(current);\n roomData.set(null);\n }\n });\n\n return roomData.asReadonly() as Signal<WebSocketRoom<TMessageData> | null>;\n };\n\n const leaveRoom = (room: string) => {\n if (!rooms.has(room)) {\n if (isDevMode()) throw roomNotJoined(room);\n }\n\n socket.emit('leave-room', room);\n\n rooms.delete(room);\n };\n\n const setupWebSocketConnectionListener = () => {\n socket.on('connect', () => {\n isConnected.set(true);\n\n for (const room of rooms.keys()) {\n joinRoom(room);\n }\n });\n socket.on('disconnect', () => isConnected.set(false));\n };\n\n const setupWebSocketListener = () => {\n socket.onAny((data: string) => {\n try {\n const json = JSON.parse(data) as TMessageData;\n\n const room = rooms.get(json.room);\n\n if (room) room.latestMessage.set(json);\n } catch (error) {\n console.error(error);\n if (isDevMode()) throw messageMalformed();\n }\n });\n };\n\n inject(DestroyRef).onDestroy(() => socket.disconnect());\n\n setupWebSocketConnectionListener();\n setupWebSocketListener();\n socket.connect();\n\n const client: WebSocketClient<TMessageData> = {\n joinRoom,\n isConnected: isConnected.asReadonly(),\n subtle: {\n leaveRoom,\n },\n };\n\n return client;\n};\n\nexport const provideWebSocketClient = (config: WebSocketClientConfig) => {\n return {\n provide: config.token,\n useFactory: () => createWebSocketClient(config),\n };\n};\n","import { InjectionToken } from '@angular/core';\nimport { SocketMessageView, WebSocketClient } from './web-socket-client';\n\nexport type CreateWebSocketClientConfig = {\n /** A unique name for the client */\n name: string;\n\n /** The URL of the socket io server */\n url: string;\n};\n\nexport type WebSocketClientRef<TMessageData extends SocketMessageView = SocketMessageView> = InjectionToken<\n WebSocketClient<TMessageData>\n>;\n\nexport type WebSocketClientConfig = CreateWebSocketClientConfig & {\n /** A generated token for dependency injection */\n token: WebSocketClientRef;\n};\n\nexport const createWebSocketClientConfig = (options: CreateWebSocketClientConfig) => {\n const token = new InjectionToken<WebSocketClientConfig>(`WebSocketClient_${options.name}`);\n\n const clientConfig: WebSocketClientConfig = {\n token,\n name: options.name,\n url: options.url,\n };\n\n return clientConfig;\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 { DestroyRef, NgZone, assertInInjectionContext, inject, isDevMode } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n ET_PROPERTY_REMOVED,\n clone,\n createDestroy,\n equal,\n injectQueryParamChanges,\n injectQueryParams,\n} 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 | (() => string);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyQueryForm = QueryForm<any>;\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 _zone = inject(NgZone);\n private readonly _didValueChanges$ = new Subject<boolean>();\n\n private _isObserving = false;\n private _skipNextResets = false;\n\n private _queryParamChanges$ = toObservable(injectQueryParamChanges());\n private _queryParams = injectQueryParams();\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 inject(DestroyRef).onDestroy(() => this._cleanup());\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._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._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 this._cleanup();\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 (!field.data.skipAutoTransform) {\n const defaultIsNum = this._getDefaultValue(key) === 'number';\n const valueIsNum = !isNaN(Number(value));\n const valueContainsWhitespace = typeof value === 'string' && value.trim() !== value;\n const valueHasLeadingZero = typeof value === 'string' && value.startsWith('0');\n const valueEndsWithDot = typeof value === 'string' && value.endsWith('.');\n\n const defaultIsBool = this._getDefaultValue(key) === 'boolean';\n const valueIsBool = value === 'true' || value === 'false';\n\n if (defaultIsNum || (valueIsNum && !valueContainsWhitespace && !valueHasLeadingZero && !valueEndsWithDot)) {\n deserializedValue = transformToNumber(value);\n } else if (defaultIsBool || valueIsBool) {\n deserializedValue = transformToBoolean(value);\n }\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 resetFieldToDefault(key: keyof QueryFormValue<T>, options?: QueryFormWriteOptions) {\n const defaultValue = this._getDefaultValue(key as string);\n\n this.form.controls[key].setValue(defaultValue);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n resetFieldsToDefault(keys: (keyof QueryFormValue<T>)[], options?: QueryFormWriteOptions) {\n const defaults = keys.reduce(\n (acc, key) => {\n acc[key] = this._getDefaultValue(key as string);\n\n return acc;\n },\n {} as Partial<QueryFormValue<T>>,\n );\n\n this.patchValue(defaults);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n resetAllFieldsToDefault(options?: QueryFormWriteOptions & { skipFields?: (keyof QueryFormValue<T>)[] }) {\n const keys = Object.keys(this._fields) as (keyof QueryFormValue<T>)[];\n\n if (options?.skipFields) {\n for (const key of options.skipFields) {\n const index = keys.indexOf(key);\n\n if (index !== -1) {\n keys.splice(index, 1);\n }\n }\n }\n\n this.resetFieldsToDefault(keys, options);\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 } else if (typeof val === 'function') {\n return val();\n }\n\n return val ?? null;\n }\n\n private _transformKeyToQueryParam(key: string) {\n if (!this._options?.queryParamPrefix) return key;\n\n const prefix =\n typeof this._options?.queryParamPrefix === 'string'\n ? this._options.queryParamPrefix\n : this._options.queryParamPrefix();\n\n return `${prefix}-${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.data.defaultValue !== undefined ? field.data.defaultValue : 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 const isDefault = this._isDefaultValue(key, value);\n const writeDefaultToUrl = field.data.appendDefaultValueToUrl === true;\n const writeToUrl = field.data.appendToUrl !== false;\n\n if (!writeToUrl || (isDefault && !writeDefaultToUrl)) {\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 queueMicrotask(() => {\n this._router.navigate([], {\n queryParams,\n replaceUrl,\n queryParamsHandling: 'merge',\n });\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 private _cleanup() {\n const queryParamKeys = Object.keys(this._fields);\n const queryParams = queryParamKeys.reduce(\n (acc, key) => {\n acc[this._transformKeyToQueryParam(key)] = undefined;\n return acc;\n },\n {} as Record<string, unknown>,\n );\n this._zone.run(() => {\n queueMicrotask(() => {\n this._router.navigate([], {\n queryParams,\n replaceUrl: true,\n queryParamsHandling: 'merge',\n });\n });\n });\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 * as ExperimentalQuery from './lib/experimental';\nexport * from './lib/experimental/pipes';\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","extractExpiresInSeconds","shouldRetryRequest","buildQueryCacheKey","shouldCacheQuery","i1","deleteCookie","coreDeleteCookie"],"mappings":"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"}