@ethlete/query 6.0.0-next.20 → 6.0.0-next.22

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/devtools/query-devtools-registry.ts","../../../../libs/query/src/lib/gql/gql-transformer.ts","../../../../libs/query/src/lib/gql/gql-query-execute.ts","../../../../libs/query/src/lib/gql/gql-query.ts","../../../../libs/query/src/lib/http/observable-signal.ts","../../../../libs/query/src/lib/http/query-context.ts","../../../../libs/query/src/lib/http/query-dependencies.ts","../../../../libs/query/src/lib/http/query-errors.ts","../../../../libs/query/src/lib/http/query-error-response-utils.ts","../../../../libs/query/src/lib/http/query-features.ts","../../../../libs/query/src/lib/http/query-state.ts","../../../../libs/query/src/lib/http/query-snapshot.ts","../../../../libs/query/src/lib/http/base-query-factory.ts","../../../../libs/query/src/lib/http/query-execute-utils.ts","../../../../libs/query/src/lib/http/query-execute.ts","../../../../libs/query/src/lib/http/query.ts","../../../../libs/query/src/lib/http/query-creator.ts","../../../../libs/query/src/lib/http/base-query-creator-factory.ts","../../../../libs/query/src/lib/legacy/logger/logger.ts","../../../../libs/query/src/lib/legacy/request/request.util.ts","../../../../libs/query/src/lib/legacy/request/request.ts","../../../../libs/query/src/lib/http/query-cache-utils.ts","../../../../libs/query/src/lib/http/query-retry-utils.ts","../../../../libs/query/src/lib/http/query-error-response.ts","../../../../libs/query/src/lib/http/http-request.ts","../../../../libs/query/src/lib/http/query-stack.ts","../../../../libs/query/src/lib/http/paged-query-stack.ts","../../../../libs/query/src/lib/legacy/auth/custom-header-auth-provider.ts","../../../../libs/query/src/lib/legacy/auth/basic-auth-provider.ts","../../../../libs/query/src/lib/legacy/utils/data.utils.ts","../../../../libs/query/src/lib/legacy/utils/deep-freeze.util.ts","../../../../libs/query/src/lib/legacy/utils/def.util.ts","../../../../libs/query/src/lib/legacy/query-creator/query-creator.ts","../../../../libs/query/src/lib/legacy/query-store/query-store.ts","../../../../libs/query/src/lib/legacy/query-client/query-client.ts","../../../../libs/query/src/lib/legacy/query-client/query-client.utils.ts","../../../../libs/query/src/lib/gql/gql-query-creator.ts","../../../../libs/query/src/lib/http/secure-query-execute-factory.ts","../../../../libs/query/src/lib/gql/secure-gql-query-execute.ts","../../../../libs/query/src/lib/gql/secure-gql-query.ts","../../../../libs/query/src/lib/gql/secure-gql-query-creator.ts","../../../../libs/query/src/lib/gql/gql-query-creator-templates.ts","../../../../libs/query/src/lib/legacy/interop/legacy-query.ts","../../../../libs/query/src/lib/legacy/interop/inert-query.ts","../../../../libs/query/src/lib/legacy/interop/legacy-query-creator.ts","../../../../libs/query/src/lib/legacy/query/query.utils.ts","../../../../libs/query/src/lib/legacy/query/query.ts","../../../../libs/query/src/lib/legacy/auth/auth-provider.utils.ts","../../../../libs/query/src/lib/legacy/auth/bearer-auth-provider.ts","../../../../libs/query/src/lib/legacy/directives/infinity-query-response-delay-provider.ts","../../../../libs/query/src/lib/legacy/infinite-query/infinity-query.ts","../../../../libs/query/src/lib/legacy/infinite-query/infinity-query.utils.ts","../../../../libs/query/src/lib/legacy/directives/infinity-query.directive.ts","../../../../libs/query/src/lib/legacy/directives/infinity-query-trigger.directive.ts","../../../../libs/query/src/lib/legacy/directives/query.directive.ts","../../../../libs/query/src/lib/legacy/devtools/pipes/query-short-name.pipe.ts","../../../../libs/query/src/lib/legacy/devtools/utils/query-client.utils.ts","../../../../libs/query/src/lib/legacy/devtools/components/query-devtools/query-devtools.component.ts","../../../../libs/query/src/lib/legacy/devtools/components/query-devtools/query-devtools.component.html","../../../../libs/query/src/lib/legacy/entity/entity-store.ts","../../../../libs/query/src/lib/legacy/entity/entity.utils.ts","../../../../libs/query/src/lib/http/query-signal-forms.ts","../../../../libs/query/src/lib/http/query-validator-core.ts","../../../../libs/query/src/lib/legacy/validate-with-v2-query.ts","../../../../libs/query/src/lib/http/query-repository.ts","../../../../libs/query/src/lib/http/query-client.ts","../../../../libs/query/src/lib/http/secure-query-execute.ts","../../../../libs/query/src/lib/http/secure-query.ts","../../../../libs/query/src/lib/http/secure-query-creator.ts","../../../../libs/query/src/lib/http/query-creator-templates.ts","../../../../libs/query/src/lib/http/query-snapshot-utils.ts","../../../../libs/query/src/lib/http/query-sequence.ts","../../../../libs/query/src/lib/http/validate-with-query.ts","../../../../libs/query/src/lib/auth/internal/leader-election.ts","../../../../libs/query/src/lib/auth/utils/token-encryption.ts","../../../../libs/query/src/lib/auth/internal/multi-tab-sync.ts","../../../../libs/query/src/lib/auth/bearer-auth-provider.ts","../../../../libs/query/src/lib/auth/bearer-auth-query-builders.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-inactivity-logout.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-persistent-auth.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-token-expiration-warning.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-token-revocation.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-tracking.ts","../../../../libs/query/src/lib/pipes/parse-http-error-code-de.ts","../../../../libs/query/src/lib/pipes/parse-http-error-code-de.pipe.ts","../../../../libs/query/src/lib/pipes/parse-http-error-code-en.ts","../../../../libs/query/src/lib/pipes/parse-http-error-code-en.pipe.ts","../../../../libs/query/src/lib/query-form/query-form.utils.ts","../../../../libs/query/src/lib/query-form/query-form.ts","../../../../libs/query/src/lib/query-form-signals/query-form-signals.ts","../../../../libs/query/src/lib/query-form-signals/query-form-signals.fields.ts","../../../../libs/query/src/lib/ws/web-socket-errors.ts","../../../../libs/query/src/lib/ws/web-socket-client.ts","../../../../libs/query/src/ethlete-query.ts"],"sourcesContent":["import { EnvironmentProviders, isDevMode, makeEnvironmentProviders, Signal, signal } from '@angular/core';\nimport type { AnyCreateQueryClientResult } from '../http/query-client';\nimport type { CreateQueryCreatorOptions, QueryConfig } from '../http/query-creator';\nimport type { QueryFeatureType } from '../http/query-features';\nimport type { QueryRepository } from '../http/query-repository';\n\n/**\n * The kind of object a {@link QueryDevtoolsEntry} describes. Part of the devtools contract consumed\n * by `<et-query-devtools>` — not a general-purpose query API.\n */\nexport type QueryDevtoolsEntryKind =\n 'query' | 'query-stack' | 'paged-query-stack' | 'query-sequence' | 'auth-provider' | 'ws-client';\n\n/**\n * Descriptive, mostly-static metadata about a registered devtools entry. The live, reactive state\n * is read from the entry's {@link QueryDevtoolsEntry.handle} instead.\n */\nexport type QueryDevtoolsEntryMeta = {\n /** Display name of the owning query client, where known. */\n clientName?: string;\n\n /** Base URL of the owning query client, where known. */\n clientBaseUrl?: string;\n\n /** Human readable display name (e.g. an auth provider or web socket client name). */\n name?: string;\n\n /** The connection URL, for web socket clients. */\n url?: string;\n\n /** The GraphQL document string, for GraphQL queries. */\n gqlQuery?: string;\n\n /** Stringified route with path params rendered as `:param`, for queries. */\n route?: string;\n\n /** Human readable HTTP/GQL method, for queries (e.g. `GET`, `GQL QUERY`). */\n method?: string;\n\n /** The feature types applied at creation, for queries. */\n featureTypes?: QueryFeatureType[];\n\n /** The query config passed at creation, for queries. */\n queryConfig?: QueryConfig;\n\n /** The creator options passed at creation, for queries. */\n creator?: CreateQueryCreatorOptions;\n\n /** The owning client's repository, where known (queries and auth providers). */\n repository?: QueryRepository;\n\n /**\n * The DOM element of the component/directive that created a query, when available. Used by the\n * devtools \"inspect\" tool to map a query back to its place in the live UI.\n */\n element?: HTMLElement | null;\n};\n\n/**\n * A single entry in the {@link queryDevtoolsEntries} registry. The `handle` is the live object\n * (query, stack, sequence or auth provider) so its signals stay reactive when read by the UI.\n */\nexport type QueryDevtoolsEntry = {\n id: string;\n kind: QueryDevtoolsEntryKind;\n meta: QueryDevtoolsEntryMeta;\n handle: unknown;\n createdAt: number;\n};\n\nconst noop = () => undefined;\n\nlet devtoolsEnabled = false;\n\n/**\n * Whether {@link provideQueryDevtools} has been called. When `false`, every `register*` call is a\n * no-op so the devtools instrumentation retains no references and adds no overhead in production.\n * @internal\n */\nexport const isQueryDevtoolsEnabled = () => devtoolsEnabled;\n\nconst entries = signal<QueryDevtoolsEntry[]>([]);\n\n/**\n * The reactive list of every registered devtools entry, consumed by the `<et-query-devtools>` UI.\n */\nexport const queryDevtoolsEntries: Signal<QueryDevtoolsEntry[]> = entries.asReadonly();\n\n// Per-descriptor counter used to derive stable, reload-deterministic ids. Reset on page load (module\n// re-eval), so the same queries created in the same order get the same ids across reloads — which is\n// what lets the devtools restore the selected query after a reload.\nconst idCounters = new Map<string, number>();\n\nconst descriptorOf = (entry: Omit<QueryDevtoolsEntry, 'id' | 'createdAt'>): string => {\n const { kind, meta } = entry;\n\n if (kind === 'query') return `query|${meta.clientName ?? ''}|${meta.method ?? ''}|${meta.route ?? ''}`;\n if (kind === 'auth-provider') return `auth-provider|${meta.name ?? ''}`;\n if (kind === 'ws-client') return `ws-client|${meta.name ?? ''}`;\n\n return kind;\n};\n\n/**\n * Registers an entry with the devtools registry. Returns an unregister callback. A no-op (returning\n * a no-op callback) unless {@link provideQueryDevtools} has been called.\n *\n * Ids are derived deterministically from a stable descriptor + a per-descriptor sequence number, so\n * they survive a page reload (letting the UI restore the selected entry) instead of being random.\n * @internal\n */\nexport const registerQueryDevtoolsEntry = (\n entry: Omit<QueryDevtoolsEntry, 'id' | 'createdAt'> & { id?: string },\n): (() => void) => {\n if (!devtoolsEnabled) return noop;\n\n let id = entry.id;\n\n if (!id) {\n const descriptor = descriptorOf(entry);\n const seq = idCounters.get(descriptor) ?? 0;\n idCounters.set(descriptor, seq + 1);\n id = `${descriptor}#${seq}`;\n }\n\n const fullEntry: QueryDevtoolsEntry = { ...entry, id, createdAt: Date.now() };\n\n entries.update((list) => [...list, fullEntry]);\n\n return () => entries.update((list) => list.filter((e) => e.id !== fullEntry.id));\n};\n\nlet suppressStackRegistration = false;\n\n/**\n * Suppresses devtools registration for the next {@link createQueryStack} call. Used by\n * `createPagedQueryStack` so its backing stack is not registered as a separate `query-stack` entry.\n * @internal\n */\nexport const suppressNextQueryStackDevtools = () => {\n suppressStackRegistration = true;\n};\n\n/**\n * Reads and clears the suppress-next-stack flag. Always call this from `createQueryStack` (even when\n * devtools are disabled) so a suppression request never leaks into a later stack.\n * @internal\n */\nexport const consumeSuppressQueryStackDevtools = () => {\n const value = suppressStackRegistration;\n suppressStackRegistration = false;\n\n return value;\n};\n\n/**\n * Stringifies a query creator route. Function routes are invoked with an empty args object and any\n * resulting `undefined` path segments are rendered as `:param`, matching the legacy devtools.\n * @internal\n */\nexport const stringifyQueryRoute = (route: unknown): string => {\n if (route === undefined || route === null) return '';\n\n try {\n if (typeof route === 'function') {\n return (route as (args: unknown) => string)({}).replace(/undefined/g, ':param');\n }\n\n return String(route);\n } catch {\n return typeof route === 'function' ? '(dynamic route)' : String(route);\n }\n};\n\n/**\n * Extracts the human readable client name from a query client tuple. The client's DI token is named\n * `QueryClient_<name>`, so we strip the prefix to recover the original name.\n * @internal\n */\nexport const getQueryClientName = (client: AnyCreateQueryClientResult): string => {\n const token = client[2];\n const desc = token?.toString?.() ?? '';\n\n return desc.replace('InjectionToken ', '').replace('QueryClient_', '') || 'unknown';\n};\n\n/**\n * Enables the `@ethlete/query` devtools. Add this to your application providers (e.g. in\n * `bootstrapApplication`) to make query clients, queries, stacks, sequences and auth providers\n * appear in the `<et-query-devtools>` panel.\n *\n * When omitted, all devtools instrumentation is a no-op — no references are retained and there is no\n * runtime overhead — so it is safe to leave out of production builds.\n *\n * @example\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideQueryDevtools()],\n * });\n * ```\n */\nexport const provideQueryDevtools = (): EnvironmentProviders => {\n devtoolsEnabled = true;\n\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 makeEnvironmentProviders([]);\n};\n","import { isDevMode } from '@angular/core';\n\nconst getOpName = /(query|mutation) ?([\\w\\d-_]+)? ?\\(.*?\\)? \\{/;\n\nexport type TransformedGqlQuery = {\n query: string;\n variables?: string;\n operationName?: string;\n};\n\nexport type GqlTransformer = (variables: Record<string, unknown> | null | undefined) => TransformedGqlQuery;\n\nexport const transformGql = (str: string | string[]): GqlTransformer => {\n const normalizedStr = Array.isArray(str) ? str.join('') : str;\n\n const name = getOpName.exec(normalizedStr);\n\n return (variables: Record<string, unknown> | null | undefined): TransformedGqlQuery => {\n const data: TransformedGqlQuery = { query: normalizedStr };\n\n if (variables) {\n data['variables'] = JSON.stringify(variables);\n }\n\n if (name && name.length) {\n const operationName = name[2];\n if (operationName) {\n data['operationName'] = operationName;\n }\n }\n\n if (!isDevMode()) {\n // minify the query\n data.query = data.query.replace(/\\s+/g, ' ').trim();\n }\n\n return data;\n };\n};\n\nexport type GQL = string & { readonly __gql: unique symbol };\n\nexport const gql = (strings: TemplateStringsArray, ...values: unknown[]): GQL => {\n const str = strings.reduce((acc, cur, i) => {\n return acc + cur + (values[i] ?? '');\n }, '');\n return str as GQL;\n};\n","import {\n circularQueryDependencyChecker,\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 { AnyCreateGqlQueryCreatorOptions, InternalCreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { transformGql } from './gql-transformer';\n\nexport type CreateGqlQueryExecuteOptions<TArgs extends QueryArgs> = {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: AnyCreateGqlQueryCreatorOptions;\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 const circularChecker = circularQueryDependencyChecker();\n\n const reset = () => resetExecuteState({ executeState, executeOptions });\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n circularChecker.check();\n\n const { args = executeOptions.state.args(), options } = executeArgs ?? {};\n\n const query = transformGql(executeOptions.creatorInternals.query);\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: {\n ...(executeOptions.creator ?? {}),\n subtle: {\n ...(executeOptions.creator?.subtle ?? {}),\n useQueryRepositoryCache:\n executeOptions.creator?.subtle?.useQueryRepositoryCache ??\n executeOptions.creatorInternals.method === 'QUERY',\n },\n },\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 });\n };\n\n exec['reset'] = reset;\n\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","import { createBaseQuery, CreateQueryOptions, QueryArgs } from '../http';\nimport { CreateGqlQueryCreatorOptions, InternalCreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { createGqlExecuteFn } from './gql-query-execute';\n\nexport type GqlQueryArgs<TResponse = unknown> = QueryArgs & {\n response: TResponse;\n rawResponse?: { data: TResponse };\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n options: CreateQueryOptions<TArgs> | CreateGqlQueryOptions<any>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): options is CreateGqlQueryOptions<any> => {\n return 'transport' in options.creatorInternals;\n};\n\nexport const createGqlQuery = <TArgs extends GqlQueryArgs>(options: CreateGqlQueryOptions<TArgs>) =>\n createBaseQuery({\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n features: options.features,\n queryConfig: options.queryConfig,\n executeFactory: createGqlExecuteFn,\n });\n","import { DestroyRef, Injector, Signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { Observable } from 'rxjs';\n\nexport type ObservableSignal<T> = Signal<T> & {\n /**\n * Converts this signal to an Observable.\n *\n * The observable lifetime is bounded by the signal owner's injector by default.\n * When an override injector is provided, the observable is bounded by whichever lifetime ends\n * first: `min(override injector lifetime, signal owner injector lifetime)`.\n */\n asObservable(options?: { injector?: Injector }): Observable<T>;\n};\n\nexport const wrapAsObservableSignal = <T>(source: Signal<T>, defaultInjector: Injector): ObservableSignal<T> => {\n const asObservable = (options?: { injector?: Injector }): Observable<T> => {\n const effectiveInjector = options?.injector ?? defaultInjector;\n const base$ = toObservable(source, { injector: effectiveInjector });\n\n if (options?.injector) {\n return base$.pipe(takeUntilDestroyed(defaultInjector.get(DestroyRef)));\n }\n\n return base$;\n };\n\n return Object.assign(source, { asObservable }) as unknown as ObservableSignal<T>;\n};\n","import { inject, InjectionToken } from '@angular/core';\nimport { createStaticProvider } from '@ethlete/core';\nimport { QueryDependencies } from './query-dependencies';\n\nexport type QueryContext = {\n /** All query dependencies (client, injector, destroy refs, etc.) */\n deps: QueryDependencies;\n};\n\nconst QUERY_CONTEXT_TOKEN = new InjectionToken<QueryContext>('QUERY_CONTEXT');\n\nexport const createQueryContext = (context: QueryContext) =>\n createStaticProvider(context, {\n name: 'Query Context',\n extraInjectionToken: QUERY_CONTEXT_TOKEN,\n });\n\nexport const injectQueryContext = () => inject(QUERY_CONTEXT_TOKEN);\n","import { HttpClient } from '@angular/common/http';\nimport {\n createEnvironmentInjector,\n DestroyRef,\n ElementRef,\n EnvironmentInjector,\n ErrorHandler,\n inject,\n Injector,\n} from '@angular/core';\nimport { AnyCreateQueryClientResult, QueryClient } from './query-client';\nimport { createQueryContext, QueryContext } from './query-context';\nimport { QueryConfig } from './query-creator';\n\nexport type SetupQueryDependenciesOptions = {\n /** The query client tuple from createQueryClient */\n client: AnyCreateQueryClientResult;\n\n /** Optional query configuration */\n queryConfig: QueryConfig | undefined;\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 /** The error handler */\n ngErrorHandler: ErrorHandler;\n\n /** The http client */\n httpClient: HttpClient;\n\n /**\n * The DOM element of the component/directive that created the query, when it was created in an\n * element (node) injection context. `null` for queries created in a root/environment context.\n * Used only by the devtools \"inspect\" tool.\n */\n hostElement: HTMLElement | null;\n};\n\nexport const setupQueryDependencies = (options: SetupQueryDependenciesOptions) => {\n const hostInjector = options.queryConfig?.injector ?? inject(Injector);\n const environmentInjector =\n options.queryConfig?.injector?.get(EnvironmentInjector) ?? hostInjector.get(EnvironmentInjector);\n\n const [, , clientToken] = options.client;\n\n const dependencies: QueryDependencies = {\n destroyRef: undefined as unknown as DestroyRef, // Will be set after injector creation\n scopeDestroyRef: hostInjector.get(DestroyRef),\n client: hostInjector.get<QueryClient>(clientToken),\n injector: undefined as unknown as EnvironmentInjector, // Will be set after injector creation\n ngErrorHandler: hostInjector.get(ErrorHandler),\n httpClient: hostInjector.get(HttpClient),\n hostElement: hostInjector.get(ElementRef, null, { optional: true })?.nativeElement ?? null,\n };\n\n const queryContext: QueryContext = {\n deps: dependencies,\n };\n\n const [provideQueryContext] = createQueryContext(queryContext);\n\n const queryEnvironmentInjector = createEnvironmentInjector([provideQueryContext()], environmentInjector);\n\n dependencies.destroyRef = queryEnvironmentInjector.get(DestroyRef);\n dependencies.injector = queryEnvironmentInjector;\n\n // cleanup the environment injector when the scope (e.g. the component the query is in) is destroyed\n const scopeDestroyListener = dependencies.scopeDestroyRef.onDestroy(() => {\n try {\n queryEnvironmentInjector.destroy();\n } catch {\n // ignore\n }\n });\n\n dependencies.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 { RuntimeError } from '@ethlete/core';\nimport { QueryFeatureType } from './query-features';\n\n// codes 0-999\nexport const 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 SILENCE_MISSING_WITH_ARGS_FEATURE_ERROR_USED_BUT_WITH_ARGS_PRESENT: 104,\n\n // Auth provider\n AUTH_EXTRACT_TOKENS_RESPONSE_NOT_OBJECT: 200,\n AUTH_EXTRACT_TOKENS_RESPONSE_MISSING_ACCESS_TOKEN: 201,\n AUTH_EXTRACT_TOKENS_RESPONSE_MISSING_REFRESH_TOKEN: 202,\n AUTH_PROVIDER_FEATURE_USED_MULTIPLE_TIMES: 203,\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 QUERY_STACK_TOTAL_QUERIES_AND_EXPECTED_QUERIES_MISMATCH: 502,\n\n // GQL\n GQL_DATA_PROPERTY_MISSING_IN_RESPONSE: 600,\n\n // Secure Execute\n TOKENS_NOT_AVAILABLE_INSIDE_AUTH_AND_EXEC: 700,\n INVALID_STATE_INSIDE_SECURE_EXECUTE_FACTORY: 701,\n\n // Query Execution\n CIRCULAR_QUERY_DEPENDENCY: 800,\n\n // Query Sequence\n QUERY_SEQUENCE_ALREADY_RUNNING: 900,\n\n // Legacy interop\n LEGACY_PREPARE_WITHOUT_INJECTION_CONTEXT: 950,\n} as const;\n\nexport type QueryRuntimeErrorCode = (typeof QueryRuntimeErrorCode)[keyof typeof QueryRuntimeErrorCode];\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 silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.SILENCE_MISSING_WITH_ARGS_FEATURE_ERROR_USED_BUT_WITH_ARGS_PRESENT,\n `The \"silenceMissingWithArgsFeatureError\" config is set to true, but a \"withArgs()\" feature is present.`,\n );\n};\n\nexport const authExtractTokensResponseNotObject = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.AUTH_EXTRACT_TOKENS_RESPONSE_NOT_OBJECT,\n `The auth token extractor expects the response to be an object.`,\n );\n};\n\nexport const authExtractTokensResponseMissingAccessToken = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.AUTH_EXTRACT_TOKENS_RESPONSE_MISSING_ACCESS_TOKEN,\n `The auth token extractor expects the response to contain a string \"accessToken\" property.`,\n );\n};\n\nexport const authExtractTokensResponseMissingRefreshToken = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.AUTH_EXTRACT_TOKENS_RESPONSE_MISSING_REFRESH_TOKEN,\n `The auth token extractor expects the response to contain a string \"refreshToken\" property.`,\n );\n};\n\nexport const authProviderFeatureUsedMultipleTimes = (type: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.AUTH_PROVIDER_FEATURE_USED_MULTIPLE_TIMES,\n `Bearer auth feature \"${type}\" was used multiple times.`,\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\nexport const queryStackTotalQueriesAndExpectedQueriesMismatch = (totalQueries: number, expectedQueries: number) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_STACK_TOTAL_QUERIES_AND_EXPECTED_QUERIES_MISMATCH,\n `The total queries \"${totalQueries}\" and the expected queries \"${expectedQueries}\" do not match. This usually happens if a query depends on the response of the previous query to calculate its pagination values. Set blockExecutionDuringLoading to true to prevent this.`,\n );\n};\n\nexport const gqlDataPropertyMissingInResponse = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.GQL_DATA_PROPERTY_MISSING_IN_RESPONSE,\n `The GraphQL response is missing the required \"data\" property. Please add a custom transformResponse param to the query creator to handle this response format.`,\n );\n};\n\nexport const tokensNotAvailableInsideAuthAndExec = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.TOKENS_NOT_AVAILABLE_INSIDE_AUTH_AND_EXEC,\n `Tokens are not available inside authAndExec.`,\n );\n};\n\nexport const invalidStateInsideSecureExecuteFactory = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.INVALID_STATE_INSIDE_SECURE_EXECUTE_FACTORY,\n `An invalid state occurred inside the secure execute factory.`,\n );\n};\n\nexport const circularQueryDependency = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.CIRCULAR_QUERY_DEPENDENCY,\n `Query was executed more than 5 times in less than 100ms. This is usually a sign of a circular dependency.`,\n );\n};\n\nexport const legacyPrepareWithoutInjectionContext = (creatorName: string | undefined) => {\n const label = creatorName ? `\"${creatorName}\"` : 'A legacy query creator';\n\n return new RuntimeError(\n QueryRuntimeErrorCode.LEGACY_PREPARE_WITHOUT_INJECTION_CONTEXT,\n `${label}.prepare() was called outside of an injection context. Unlike the v2 client, the legacy interop layer needs an injector to build the underlying query.\\n\\n` +\n `Capture one where a context does exist (field initializer, constructor) and pass it along:\\n\\n` +\n ` private injector = inject(Injector);\\n` +\n ` search = (term: string) => myQuery.prepare({ queryParams: { term }, injector: this.injector });\\n\\n` +\n `Prefer an injector that outlives the call site. A component injector passed from a callback that can still fire after the component is gone leaves prepare() with a destroyed injector, which returns an inert query instead of executing.`,\n );\n};\n\nexport const querySequenceAlreadyRunning = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_SEQUENCE_ALREADY_RUNNING,\n `run() was called on a query sequence that is already running. Wait for the current run to settle before starting another.`,\n );\n};\n","import { FormViolationListView, FormViolationView } from '@ethlete/types';\n\nexport type ClassValidatorError = {\n statusCode: number;\n message: string[];\n error: string;\n};\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\nexport type SymfonyErrorTrace = {\n args: string[];\n class: string;\n file: string;\n function: string;\n line: number;\n namespace: string;\n short_class: string;\n type: string;\n};\n\nexport type SymfonyError = {\n class: string;\n detail: string;\n status: number;\n title: string;\n trace: SymfonyErrorTrace[];\n type: string;\n};\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 { HttpEventType } from '@angular/common/http';\nimport { CreateEffectOptions, effect, Signal, untracked, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { getActiveConsumer, setActiveConsumer } from '@angular/core/primitives/signals';\nimport { filter } from 'rxjs';\nimport { HttpErrorEvent, RequestHttpEvent } from './http-request';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { QueryDependencies } from './query-dependencies';\nimport { QueryErrorResponse } from './query-error-response';\nimport { isSymfonyPagerfantaOutOfRangeError } from './query-error-response-utils';\nimport {\n withAutoRefreshUsedInManualQuery,\n withAutoRefreshUsedOnUnsupportedHttpMethod,\n withPollingUsedOnUnsupportedHttpMethod,\n} from './query-errors';\nimport { InternalQueryExecute } from './query-execute';\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\n/** A angular effect that can be nested inside another effect */\nexport const nestedEffect = (fn: () => void, options?: CreateEffectOptions) => {\n const activeConsumer = getActiveConsumer();\n\n setActiveConsumer(null);\n\n const eff = effect(() => {\n fn();\n }, options);\n\n setActiveConsumer(activeConsumer);\n\n return eff;\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 QueryFeatureType = {\n WITH_ARGS: 'WITH_ARGS',\n WITH_LOGGING: 'WITH_LOGGING',\n WITH_ERROR_HANDLING: 'WITH_ERROR_HANDLING',\n WITH_SUCCESS_HANDLING: 'WITH_SUCCESS_HANDLING',\n WITH_POLLING: 'WITH_POLLING',\n WITH_AUTO_REFRESH: 'WITH_AUTO_REFRESH',\n WITH_RESPONSE_UPDATE: 'WITH_RESPONSE_UPDATE',\n WITH_PAGE_RESET_ON_ERROR: 'WITH_PAGE_RESET_ON_ERROR',\n} as const;\nexport type QueryFeatureType = (typeof QueryFeatureType)[keyof typeof QueryFeatureType];\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\nexport const createQueryFeature = <TArgs extends QueryArgs>(config: {\n type: QueryFeatureType;\n fn: QueryFeatureFn<TArgs>;\n}) => {\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.WITH_ARGS,\n fn: (context) => {\n // `state.args` is reactively backed by this source, so every reader (exec, polling,\n // auto-refresh) always sees the latest value with no pending-effect window. Sentinels are\n // resolved here: CLEAR -> null, `null` (\"don't change\") -> keep the previous value.\n let previous: RequestArgs<TArgs> | null = null;\n context.state.subtle.setArgsSource(() => {\n const value = args();\n\n if (value === CLEAR_QUERY_ARGS) {\n previous = null;\n return null;\n }\n\n if (value === null) return previous;\n\n previous = value;\n return value;\n });\n\n // Trigger (auto-)execution whenever the resolved args change.\n nestedEffect(\n () => {\n const currArgsNow = context.state.args();\n\n if (currArgsNow === null) return;\n\n untracked(() => {\n if (context.flags.shouldAutoExecute) context.execute({ args: currArgsNow });\n });\n },\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.WITH_POLLING,\n fn: (context) => {\n if (!context.flags.shouldAutoExecuteMethod) {\n throw withPollingUsedOnUnsupportedHttpMethod(context.flags.method);\n }\n\n let intervalId: number | null = null;\n\n nestedEffect(\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 { 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: RequestHttpEvent<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.WITH_LOGGING,\n fn: (context) => {\n context.state.events$.pipe(takeUntilDestroyed(context.deps.destroyRef)).subscribe((event) => {\n options.logFn(event);\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.WITH_ERROR_HANDLING,\n fn: (context) => {\n context.state.events$\n .pipe(\n filter((event): event is HttpErrorEvent => event.type === 'error'),\n takeUntilDestroyed(context.deps.destroyRef),\n )\n .subscribe((event) => {\n options.handler(event.error);\n });\n },\n });\n};\n\nexport type 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.WITH_SUCCESS_HANDLING,\n fn: (context) => {\n context.state.events$\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n takeUntilDestroyed(context.deps.destroyRef),\n )\n .subscribe(() => {\n options.handler(context.state.response() as NonNullable<ResponseType<TArgs>>);\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.WITH_AUTO_REFRESH,\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 nestedEffect(\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 { 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.WITH_RESPONSE_UPDATE,\n fn: (context) => {\n nestedEffect(\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.rawResponse.set(response);\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\n/**\n * Whether an error means the requested page is out of range: HTTP `416`, or a\n * `500` carrying a Symfony/Pagerfanta out-of-range detail (the dev-mode shape).\n * Exported so it can also be used as the predicate of a `withErrorHandling` handler.\n */\nexport const isPageOutOfRangeError = (error: QueryErrorResponse): boolean => {\n if (error.code === 416) return true;\n\n return error.code === 500 && isSymfonyPagerfantaOutOfRangeError(error.raw.error);\n};\n\nexport type WithPageResetOnErrorFeatureOptions = {\n /**\n * Which errors trigger the reset.\n * @default isPageOutOfRangeError (HTTP 416, or a dev-mode 500 Pagerfanta out-of-range error)\n */\n when?: (error: QueryErrorResponse) => boolean;\n} & (\n | {\n /** The writable page signal to reset. */\n page: WritableSignal<number>;\n /**\n * The value to reset the page to.\n * @default 1\n */\n resetTo?: number;\n reset?: never;\n }\n | {\n /**\n * Called when a matching error occurs. Reset whatever drives the page here —\n * a signal (`() => page.set(1)`) or a query form (`() => qf.resetFieldToDefault('page')`).\n */\n reset: () => void;\n page?: never;\n resetTo?: never;\n }\n);\n\n/**\n * A query feature that resets the page when the current page becomes out of range\n * — e.g. after a filter shrinks the result set below the current page. It reacts\n * to the query's error events and resets the page source; the normal reactive\n * re-execution then runs with the corrected page.\n *\n * Because query args are reactively sourced, this fixes the *source* (a signal or\n * query form field) rather than patching args directly — so the change sticks.\n *\n * @example\n * // signal-driven page\n * const users = getUsers(\n * withArgs(() => ({ queryParams: { page: page() } })),\n * withPageResetOnError({ page }),\n * );\n *\n * @example\n * // query-form-driven page\n * const users = getUsers(\n * withArgs(() => ({ queryParams: qf.value() })),\n * withPageResetOnError({ reset: () => qf.resetFieldToDefault('page') }),\n * );\n */\nexport const withPageResetOnError = <TArgs extends QueryArgs>(options: WithPageResetOnErrorFeatureOptions) => {\n const matches = options.when ?? isPageOutOfRangeError;\n\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WITH_PAGE_RESET_ON_ERROR,\n fn: (context) => {\n context.state.events$\n .pipe(\n filter((event): event is HttpErrorEvent => event.type === 'error'),\n takeUntilDestroyed(context.deps.destroyRef),\n )\n .subscribe((event) => {\n if (!matches(event.error)) return;\n\n if (options.reset) {\n options.reset();\n } else {\n options.page.set(options.resetTo ?? 1);\n }\n });\n },\n });\n};\n","import { Signal, WritableSignal, computed, linkedSignal, signal } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { HttpRequest, HttpRequestLoadingState, RequestHttpEvent } from './http-request';\nimport { QueryArgs, RawResponseType, RequestArgs, ResponseType } from './query';\nimport { QueryErrorResponse } from './query-error-response';\n\nexport type SetupQueryStateOptions<TArgs extends QueryArgs> = {\n transformResponse?: (rawResponse: RawResponseType<TArgs>) => ResponseType<TArgs>;\n};\n\nexport type QueryStateSubtle<TArgs extends QueryArgs> = {\n request: WritableSignal<HttpRequest<TArgs> | null>;\n rawResponse: WritableSignal<RawResponseType<TArgs> | null>;\n\n /**\n * Forwards the given request's discrete event stream onto the query-level `events$`.\n * Called by `queryExecute` whenever a request is (re-)executed.\n */\n bindRequestEvents: (request: HttpRequest<TArgs>) => void;\n\n /**\n * Installs the reactive source that backs `state.args`. The `withArgs` feature uses this so that\n * `state.args` always reflects the latest args (pulled from the reactive source on read) instead\n * of being push-updated by an effect that may not have run yet. Without a `withArgs` feature the\n * default source returns `null`.\n */\n setArgsSource: (source: () => RequestArgs<TArgs> | null) => void;\n};\n\nexport type QueryState<TArgs extends QueryArgs> = {\n rawResponse: WritableSignal<RawResponseType<TArgs> | null>;\n response: Signal<ResponseType<TArgs> | null>;\n args: WritableSignal<RequestArgs<TArgs> | null>;\n latestHttpEvent: WritableSignal<RequestHttpEvent<TArgs> | null>;\n loading: WritableSignal<HttpRequestLoadingState | null>;\n error: WritableSignal<QueryErrorResponse | null>;\n lastTimeExecutedAt: WritableSignal<number | null>;\n lastTriggeredBy: WritableSignal<string | null>;\n executionState: Signal<QueryExecutionState<TArgs> | null>;\n\n /**\n * A discrete, query-level stream of every request event, fed synchronously from the current\n * request's `events$` at the moment each event occurs. Side-effect features\n * (success/error/logging) subscribe to this instead of edge-detecting on the shared, resettable\n * `response`/`error`/`latestHttpEvent` signals — so they cannot miss a transition when the next\n * execution swaps the underlying request.\n */\n events$: Observable<RequestHttpEvent<TArgs>>;\n\n subtle: QueryStateSubtle<TArgs>;\n};\n\nexport type QueryExecutionStateSuccess<TArgs extends QueryArgs> = {\n type: 'success';\n response: ResponseType<TArgs>;\n};\n\nexport type QueryExecutionStateFailure = {\n type: 'failure';\n error: QueryErrorResponse;\n};\n\nexport type QueryExecutionStateLoadingWithNoResponse = {\n type: 'loading';\n hasCachedResponse: false;\n loading: HttpRequestLoadingState;\n};\n\nexport type QueryExecutionStateLoadingWithCachedResponse<TArgs extends QueryArgs> = {\n type: 'loading';\n hasCachedResponse: true;\n loading: HttpRequestLoadingState;\n cachedResponse: ResponseType<TArgs>;\n};\n\nexport type QueryExecutionStateLoading<TArgs extends QueryArgs> =\n QueryExecutionStateLoadingWithNoResponse | QueryExecutionStateLoadingWithCachedResponse<TArgs>;\n\nexport type QueryExecutionState<TArgs extends QueryArgs> =\n QueryExecutionStateSuccess<TArgs> | QueryExecutionStateFailure | QueryExecutionStateLoading<TArgs>;\n\nexport const setupQueryState = <TArgs extends QueryArgs>(options: SetupQueryStateOptions<TArgs>) => {\n const request = signal<HttpRequest<TArgs> | null>(null);\n\n const rawResponse = linkedSignal(() => request()?.response() ?? null);\n const response = computed(() => {\n const raw = rawResponse();\n if (raw === null) return null;\n return options.transformResponse ? options.transformResponse(raw) : (raw as ResponseType<TArgs>);\n });\n const loading = linkedSignal(() => request()?.loading() ?? null);\n const error = linkedSignal(() => request()?.error() ?? null);\n const latestHttpEvent = linkedSignal(() => request()?.currentEvent() ?? null);\n\n // `args` is reactively sourced: reads always reflect the latest value from the installed source\n // (e.g. the `withArgs` feature), so there is no stale window between a source change and an\n // effect writing it. It stays writable (reset / auth-error clear it via `.set(null)`); a manual\n // set is overridden again the next time the source's dependencies change.\n const argsSource = signal<() => RequestArgs<TArgs> | null>(() => null);\n const args = linkedSignal(() => argsSource()());\n const setArgsSource = (source: () => RequestArgs<TArgs> | null) => argsSource.set(source);\n\n const lastTimeExecutedAt = signal<number | null>(null);\n const lastTriggeredBy = signal<string | null>(null);\n\n const requestEvents$ = new Subject<RequestHttpEvent<TArgs>>();\n let requestEventsSubscription = Subscription.EMPTY;\n const bindRequestEvents = (request: HttpRequest<TArgs>) => {\n requestEventsSubscription.unsubscribe();\n requestEventsSubscription = request.events$.subscribe((event) => requestEvents$.next(event));\n };\n\n const executionState = computed<QueryExecutionState<TArgs> | null>(() => {\n const currentResponse = response();\n const currentError = error();\n const currentLoading = loading();\n\n if (currentLoading) {\n if (currentResponse) {\n return {\n type: 'loading',\n hasCachedResponse: true,\n loading: currentLoading,\n cachedResponse: currentResponse,\n };\n }\n\n return {\n type: 'loading',\n hasCachedResponse: false,\n loading: currentLoading,\n };\n } else if (currentError) {\n return {\n type: 'failure',\n error: currentError,\n };\n } else if (currentResponse) {\n return {\n type: 'success',\n response: currentResponse,\n };\n } else {\n return null;\n }\n });\n\n const state: QueryState<TArgs> = {\n rawResponse,\n response,\n args,\n latestHttpEvent,\n loading,\n error,\n lastTimeExecutedAt,\n lastTriggeredBy,\n executionState,\n events$: requestEvents$.asObservable(),\n subtle: {\n request,\n rawResponse,\n bindRequestEvents,\n setArgsSource,\n },\n };\n\n return state;\n};\n","import { HttpEventType } from '@angular/common/http';\nimport { effect, signal, untracked } from '@angular/core';\nimport { wrapAsObservableSignal } from './observable-signal';\nimport { QueryArgs, QuerySnapshot } from './query';\nimport { injectQueryContext } from './query-context';\nimport { QueryDependencies } from './query-dependencies';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryState, setupQueryState } from './query-state';\n\nexport type CreateQuerySnapshotOptions<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n execute: InternalQueryExecute<TArgs>;\n deps: QueryDependencies;\n};\n\nexport const createQuerySnapshotFn = <TArgs extends QueryArgs>(options: CreateQuerySnapshotOptions<TArgs>) => {\n const { state } = options;\n const context = injectQueryContext();\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 const currentLastTriggeredBy = state.lastTriggeredBy();\n\n untracked(() => {\n snapshotState.args.set(currentArgs);\n snapshotState.error.set(currentError);\n snapshotState.lastTimeExecutedAt.set(currentLastTimeExecutedAt);\n snapshotState.lastTriggeredBy.set(currentLastTriggeredBy);\n snapshotState.latestHttpEvent.set(currentLatestHttpEvent);\n snapshotState.loading.set(currentLoading);\n snapshotState.rawResponse.set(currentResponse);\n\n if (currentLoading) return;\n\n const hasCompletedResponse = currentLatestHttpEvent?.type === HttpEventType.Response;\n if (!hasCompletedResponse && !currentError) return;\n\n // kill the effect once loading is done and we either have a response or an error\n killEffectRef.destroy();\n isAlive.set(false);\n });\n },\n { injector: context.deps.injector },\n );\n\n const snapshot: QuerySnapshot<TArgs> = {\n args: wrapAsObservableSignal(snapshotState.args.asReadonly(), context.deps.injector),\n response: wrapAsObservableSignal(snapshotState.response, context.deps.injector),\n latestHttpEvent: wrapAsObservableSignal(snapshotState.latestHttpEvent.asReadonly(), context.deps.injector),\n loading: wrapAsObservableSignal(snapshotState.loading.asReadonly(), context.deps.injector),\n error: wrapAsObservableSignal(snapshotState.error.asReadonly(), context.deps.injector),\n lastTimeExecutedAt: wrapAsObservableSignal(snapshotState.lastTimeExecutedAt.asReadonly(), context.deps.injector),\n triggeredBy: wrapAsObservableSignal(snapshotState.lastTriggeredBy.asReadonly(), context.deps.injector),\n isAlive: wrapAsObservableSignal(isAlive.asReadonly(), context.deps.injector),\n id: wrapAsObservableSignal(options.execute.currentRepositoryKey, context.deps.injector),\n executionState: wrapAsObservableSignal(snapshotState.executionState, context.deps.injector),\n };\n\n return snapshot;\n };\n\n return snapshotFn;\n};\n","import { runInInjectionContext } from '@angular/core';\nimport {\n getQueryClientName,\n isQueryDevtoolsEnabled,\n registerQueryDevtoolsEntry,\n stringifyQueryRoute,\n} from '../devtools';\nimport { CreateGqlQueryOptions, isCreateGqlQueryOptions } from '../gql/gql-query';\nimport { AnyCreateGqlQueryCreatorOptions, GqlQueryMethod } from '../gql/gql-query-creator';\nimport { HttpRequestLoadingState } from './http-request';\nimport { wrapAsObservableSignal } from './observable-signal';\nimport { CreateQueryOptions, Query, QueryArgs, RawResponseType, ReadonlyQuery, ResponseType } from './query';\nimport { QueryErrorResponse } from './query-error-response';\nimport { AnyCreateQueryClientResult } from './query-client';\nimport {\n CreateQueryCreatorOptions,\n InternalCreateQueryCreatorOptions,\n QueryConfig,\n QueryMethod,\n} from './query-creator';\nimport { QueryDependencies, setupQueryDependencies } from './query-dependencies';\nimport {\n queryFeatureUsedMultipleTimes,\n silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent,\n withArgsQueryFeatureMissingButRouteIsFunction,\n} from './query-errors';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryFeature, QueryFeatureContext, QueryFeatureFlags, QueryFeatureType } from './query-features';\nimport { createQuerySnapshotFn } from './query-snapshot';\nimport { QueryState, setupQueryState } from './query-state';\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 getQueryFeatureUsage = <TArgs extends QueryArgs>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n options: CreateQueryOptions<TArgs> | CreateGqlQueryOptions<any>,\n) => {\n const { creator, features, queryConfig, creatorInternals } = options;\n\n const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WITH_ARGS);\n const shouldAutoExecuteMethod = isCreateGqlQueryOptions(options)\n ? shouldAutoExecuteGqlQuery(options.creatorInternals.method)\n : shouldAutoExecuteQuery(options.creatorInternals.method);\n const hasRouteFunction =\n typeof (creatorInternals as InternalCreateQueryCreatorOptions<TArgs>)?.route === 'function' ||\n typeof (creator as AnyCreateGqlQueryCreatorOptions)?.route === 'function';\n const shouldAutoExecute = shouldAutoExecuteMethod && !queryConfig.onlyManualExecution;\n\n if (hasRouteFunction && !hasWithArgsFeature && !queryConfig.silenceMissingWithArgsFeatureError) {\n throw withArgsQueryFeatureMissingButRouteIsFunction();\n }\n\n if (hasWithArgsFeature && queryConfig.silenceMissingWithArgsFeatureError) {\n throw silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent();\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.rawResponse.set(response as RawResponseType<TArgs>);\n const setLoading = (loading: HttpRequestLoadingState | null) => state.loading.set(loading);\n const setError = (error: QueryErrorResponse | null) => state.error.set(error);\n const createSnapshot = createQuerySnapshotFn({ state, execute, deps });\n\n // Pre-wrap all public signals once so both `query` and `roQuery` share the same instances.\n const wrappedArgs = wrapAsObservableSignal(state.args.asReadonly(), deps.injector);\n const wrappedResponse = wrapAsObservableSignal(state.response, deps.injector);\n const wrappedLatestHttpEvent = wrapAsObservableSignal(state.latestHttpEvent.asReadonly(), deps.injector);\n const wrappedLoading = wrapAsObservableSignal(state.loading.asReadonly(), deps.injector);\n const wrappedError = wrapAsObservableSignal(state.error.asReadonly(), deps.injector);\n const wrappedLastTimeExecutedAt = wrapAsObservableSignal(state.lastTimeExecutedAt.asReadonly(), deps.injector);\n const wrappedTriggeredBy = wrapAsObservableSignal(state.lastTriggeredBy.asReadonly(), deps.injector);\n const wrappedId = wrapAsObservableSignal(execute.currentRepositoryKey, deps.injector);\n const wrappedExecutionState = wrapAsObservableSignal(state.executionState, deps.injector);\n const wrappedRequest = wrapAsObservableSignal(state.subtle.request.asReadonly(), deps.injector);\n\n const asReadonly = () => {\n const roQuery: ReadonlyQuery<TArgs> = {\n args: wrappedArgs,\n response: wrappedResponse,\n latestHttpEvent: wrappedLatestHttpEvent,\n loading: wrappedLoading,\n error: wrappedError,\n lastTimeExecutedAt: wrappedLastTimeExecutedAt,\n triggeredBy: wrappedTriggeredBy,\n id: wrappedId,\n createSnapshot,\n executionState: wrappedExecutionState,\n };\n\n return roQuery;\n };\n\n const query: Query<TArgs> = {\n execute,\n args: wrappedArgs,\n response: wrappedResponse,\n latestHttpEvent: wrappedLatestHttpEvent,\n loading: wrappedLoading,\n error: wrappedError,\n lastTimeExecutedAt: wrappedLastTimeExecutedAt,\n triggeredBy: wrappedTriggeredBy,\n id: wrappedId,\n createSnapshot,\n reset: execute.reset,\n asReadonly,\n executionState: wrappedExecutionState,\n subtle: {\n destroy,\n setResponse,\n setLoading,\n setError,\n request: wrappedRequest,\n destroyRef: deps.scopeDestroyRef,\n injector: deps.injector,\n },\n };\n\n return query;\n};\n\nexport type ExecuteFactory<TArgs extends QueryArgs, TInternals> = (options: {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: CreateQueryCreatorOptions;\n creatorInternals: TInternals;\n queryConfig: QueryConfig;\n}) => InternalQueryExecute<TArgs>;\n\nexport type CreateBaseQueryOptions<TArgs extends QueryArgs, TInternals> = {\n creator?: CreateQueryCreatorOptions;\n creatorInternals: TInternals;\n features: QueryFeature<TArgs>[];\n queryConfig: QueryConfig;\n executeFactory: ExecuteFactory<TArgs, TInternals>;\n};\n\nexport const createBaseQuery = <TArgs extends QueryArgs, TInternals extends { client: AnyCreateQueryClientResult }>(\n options: CreateBaseQueryOptions<TArgs, TInternals>,\n) => {\n const client = options.creatorInternals.client;\n\n const deps = setupQueryDependencies({\n client,\n queryConfig: options.queryConfig,\n });\n\n return runInInjectionContext(deps.injector, () => {\n const state = setupQueryState<TArgs>({\n transformResponse: options.creator?.transformResponse,\n });\n const flags = getQueryFeatureUsage(options as unknown as Parameters<typeof getQueryFeatureUsage>[0]);\n\n const execute = options.executeFactory({\n deps,\n state,\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n queryConfig: options.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 const query = createQueryObject({ state, execute, deps });\n\n if (isQueryDevtoolsEnabled()) {\n const unregister = registerQueryDevtoolsEntry({\n kind: 'query',\n handle: query,\n meta: {\n clientName: getQueryClientName(client),\n clientBaseUrl: deps.client.baseUrl,\n route: stringifyQueryRoute(\n (options.creatorInternals as { route?: unknown }).route ??\n (options.creator as { route?: unknown } | undefined)?.route,\n ),\n method: flags.method,\n featureTypes: options.features.map((f) => f.type),\n queryConfig: options.queryConfig,\n creator: options.creator,\n repository: deps.client.repository,\n element: deps.hostElement,\n gqlQuery: (options.creatorInternals as { query?: string }).query,\n },\n });\n\n deps.destroyRef.onDestroy(unregister);\n }\n\n return query;\n });\n};\n","import { signal, WritableSignal } from '@angular/core';\nimport { QueryArgs, RequestArgs } from './query';\nimport { circularQueryDependency } from './query-errors';\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 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.rawResponse.set(null);\n state.lastTimeExecutedAt.set(null);\n state.lastTriggeredBy.set(null);\n};\n\nexport type QueryExecuteState = {\n previousKey: WritableSignal<string | null>;\n};\n\nexport const setupQueryExecuteState = (): QueryExecuteState => {\n return {\n previousKey: signal(null),\n };\n};\n\nexport type RunQueryExecuteOptions = {\n allowCache?: boolean;\n triggeredBy?: string;\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\n isSecure?: boolean;\n};\n\nexport const queryExecute = <TArgs extends QueryArgs>(options: QueryExecuteOptions<TArgs>) => {\n const { executeOptions, args, executeState, options: runQueryOptions, isSecure } = 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 creatorOptions: creator,\n retryFn: creator?.retryFn,\n consumerDestroyRef: deps.destroyRef,\n key: queryConfig.key,\n previousKey: executeState.previousKey(),\n runQueryOptions,\n isSecure,\n });\n\n executeState.previousKey.set(key);\n state.lastTimeExecutedAt.set(Date.now());\n state.lastTriggeredBy.set(runQueryOptions?.triggeredBy ?? null);\n state.subtle.request.set(request);\n state.subtle.bindRequestEvents(request);\n};\n\nexport const circularQueryDependencyChecker = () => {\n let lastTriggerTs = 0;\n let illegalWrites = 0;\n\n // Typing this as number will throw an type error during testing since it is of type Timeout in a node env.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let timeout: any = null;\n\n const check = () => {\n const now = performance.now();\n\n if (now - lastTriggerTs < 100) {\n illegalWrites++;\n\n if (illegalWrites > 5) {\n throw circularQueryDependency();\n }\n }\n\n lastTriggerTs = now;\n\n if (timeout) clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n illegalWrites = 0;\n }, 100);\n };\n\n return {\n check,\n };\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 circularQueryDependencyChecker,\n queryExecute,\n resetExecuteState,\n RunQueryExecuteOptions,\n setupQueryExecuteState,\n} from './query-execute-utils';\nimport { QueryKey } 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<QueryKey | null>;\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 const circularChecker = circularQueryDependencyChecker();\n\n const reset = () => resetExecuteState({ executeState, executeOptions });\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n circularChecker.check();\n\n const { args = executeOptions.state.args(), options } = executeArgs ?? {};\n\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 { HttpHeaders } from '@angular/common/http';\nimport { DestroyRef, Injector } from '@angular/core';\nimport { createBaseQuery } from './base-query-factory';\nimport { HttpRequest, HttpRequestLoadingState, RequestHttpEvent } from './http-request';\nimport { ObservableSignal } from './observable-signal';\nimport { CreateQueryCreatorOptions, InternalCreateQueryCreatorOptions, QueryConfig } from './query-creator';\nimport { QueryErrorResponse } from './query-error-response';\nimport { createExecuteFn, QueryExecute } from './query-execute';\nimport { QueryFeature } from './query-features';\nimport { QueryExecutionState } from './query-state';\n\nexport type QueryArgs = {\n response?: any;\n rawResponse?: any;\n pathParams?: Record<string, string | number>;\n queryParams?: any;\n body?: any;\n headers?: HttpHeaders | (() => HttpHeaders);\n};\n\nexport type ResponseType<T extends QueryArgs | null> = T extends QueryArgs ? T['response'] : never;\nexport type RawResponseType<T extends QueryArgs | null> = T extends QueryArgs\n ? T['rawResponse'] extends undefined\n ? T['response']\n : T['rawResponse']\n : 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\n/**\n * The empty request-args object, typed to satisfy `RequestArgs<TArgs>` for a query that takes no\n * arguments — its `QueryArgs` is just `{ response: T }`, so `RequestArgs` resolves to `{}`.\n *\n * Only needed in generic code, where `TArgs` is still a type parameter and TS therefore cannot see\n * that `{}` is the whole of it. Against a concrete query, omit the argument instead: both\n * `query.execute()` and the auth registry's `execute()` already take none.\n *\n * @example\n * const runAnything = <TArgs extends QueryArgs>(query: Query<TArgs>) =>\n * query.execute({ args: emptyQueryArgs<TArgs>() });\n */\nexport const emptyQueryArgs = <TArgs extends QueryArgs>() => ({}) as RequestArgs<TArgs>;\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: ObservableSignal<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: ObservableSignal<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: ObservableSignal<RequestHttpEvent<TArgs> | null>;\n\n /** The loading state of the query. Will be `null` if the query currently isn't loading. */\n loading: ObservableSignal<HttpRequestLoadingState | null>;\n\n /** The error that occurred during the last execution of the query. Will be `null` if no error occurred. */\n error: ObservableSignal<QueryErrorResponse | null>;\n\n /** The time the query was last executed at. Will be `null` if the query has never been executed. */\n lastTimeExecutedAt: ObservableSignal<number | null>;\n\n /** Who or what triggered the last execution. Will be `null` for user-triggered executions. */\n triggeredBy: ObservableSignal<string | null>;\n\n /** The id of the query */\n id: ObservableSignal<string | null>;\n\n /** The current state of the query. Will be `null` if the query has never been executed. */\n executionState: ObservableSignal<QueryExecutionState<TArgs> | null>;\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: ObservableSignal<boolean>;\n};\n\nexport type AnyQuerySnapshot = QuerySnapshot<any>;\nexport type AnyNewQuery = 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 /**\n * Manually forces the loading state of the query. Overridden on the next execution. Intended for\n * devtools / testing UI states — not for application logic.\n */\n setLoading: (loading: HttpRequestLoadingState | null) => void;\n\n /**\n * Manually forces the error state of the query. Overridden on the next execution. Intended for\n * devtools / testing UI states — not for application logic.\n */\n setError: (error: QueryErrorResponse | null) => void;\n\n /** The currently underlying HTTP request of the query. Will be `null` if the query has never been executed. */\n request: ObservableSignal<HttpRequest<TArgs> | null>;\n\n /** The destroy reference used to clean up the query when it is no longer needed */\n destroyRef: DestroyRef;\n\n /** The Angular injector used to resolve dependencies for the query */\n injector: Injector;\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 createBaseQuery({\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n features: options.features,\n queryConfig: options.queryConfig,\n executeFactory: createExecuteFn,\n });\n","import { Injector } from '@angular/core';\nimport { createBaseQueryCreator } from './base-query-creator-factory';\nimport { HttpRequestResponseType, HttpRequestTransferCacheConfig } from './http-request';\nimport { AnyNewQuery, PathParamsType, Query, QueryArgs, RawResponseType, ResponseType, createQuery } from './query';\nimport { AnyCreateQueryClientResult } from './query-client';\nimport { QueryFeature } from './query-features';\nimport { ShouldRetryRequestFn } from './query-retry-utils';\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 BaseQueryCreatorOptionsSubtle = {\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\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport type BaseQueryCreatorOptions<TArgs extends QueryArgs = QueryArgs> = {\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 /**\n * Custom retry function for this specific query creator.\n * If provided, overrides the retry function configured at the client level.\n *\n * @default Client's retryFn or shouldRetryRequest()\n */\n retryFn?: ShouldRetryRequestFn;\n\n /**\n * How long (in ms) this query's cache entry is kept after its last consumer was destroyed.\n * Overrides the client level `keepUnusedFor`. Use `0` for responses that should never outlive their\n * consumer (very large payloads, or data that must not be shown stale).\n *\n * @default Client's keepUnusedFor (5 minutes)\n */\n keepUnusedFor?: number;\n\n /** Advanced query creator features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle?: BaseQueryCreatorOptionsSubtle;\n};\n\ntype HasKey<T, K extends PropertyKey> = K extends keyof T\n ? undefined extends T[K]\n ? K extends keyof Required<T>\n ? true\n : false\n : true\n : false;\n\n/**\n * Determines if rawResponse type differs from response type.\n * Returns true if rawResponse is explicitly defined and differs from response.\n */\nexport type RequiresTransform<TArgs extends QueryArgs> =\n HasKey<TArgs, 'rawResponse'> extends false\n ? false\n : RawResponseType<TArgs> extends ResponseType<TArgs>\n ? ResponseType<TArgs> extends RawResponseType<TArgs>\n ? false\n : true\n : true;\n\nexport type CreateQueryCreatorOptions<TArgs extends QueryArgs = QueryArgs> = BaseQueryCreatorOptions<TArgs> &\n (RequiresTransform<TArgs> extends true\n ? {\n /**\n * Transforms the raw HTTP response to the final response type.\n * **Required** because rawResponse type differs from response type.\n *\n * @example\n * ```ts\n * transformResponse: (raw) => raw.data\n * ```\n */\n transformResponse: (rawResponse: RawResponseType<TArgs>) => ResponseType<TArgs>;\n }\n : {\n /**\n * Transforms the raw HTTP response to the final response type.\n * Useful for unwrapping response wrappers (e.g., GraphQL's `{ data: ... }` format).\n *\n * @example\n * ```ts\n * transformResponse: (raw) => raw.data\n * ```\n */\n transformResponse?: (rawResponse: RawResponseType<TArgs>) => ResponseType<TArgs>;\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 * Creates a new query creator with merged options.\n * The new creator inherits all options from the original and overrides them with the provided options.\n *\n * @example\n * ```ts\n * const originalCreator = myApiPost('/api/data');\n * const creatorWithRetry = originalCreator.clone({ retryFn: customRetryFn });\n * ```\n */\n clone: (additionalOptions: Partial<BaseQueryCreatorOptions<TArgs>>) => QueryCreator<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 | AnyNewQuery> =\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: AnyCreateQueryClientResult;\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 /**\n * If true, the query will not throw an error because a \"withArgs()\" feature is missing.\n */\n silenceMissingWithArgsFeatureError?: boolean;\n\n /**\n * A custom injector to use for this query.\n */\n injector?: Injector;\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 createBaseQueryCreator({\n options,\n internals,\n queryFactory: createQuery,\n });\n","import { Query, QueryArgs } from './query';\nimport { BaseQueryCreatorOptions, QueryConfig, QueryCreator, splitQueryConfig } from './query-creator';\nimport { QueryFeature } from './query-features';\n\nexport type BaseQueryCreatorFactoryOptions<TArgs extends QueryArgs, TOptions, TInternals> = {\n /** Creator-specific options (e.g., CreateQueryCreatorOptions or CreateGqlQueryCreatorOptions) */\n options: TOptions | undefined;\n\n /** Creator-specific internals (e.g., InternalCreateQueryCreatorOptions or InternalCreateGqlQueryCreatorOptions) */\n internals: TInternals;\n\n /** Factory function that creates the actual query */\n queryFactory: (config: {\n creator: TOptions | undefined;\n creatorInternals: TInternals;\n features: QueryFeature<TArgs>[];\n queryConfig: QueryConfig;\n }) => Query<TArgs>;\n};\n\nexport const createBaseQueryCreator = <TArgs extends QueryArgs, TOptions, TInternals>(\n config: BaseQueryCreatorFactoryOptions<TArgs, TOptions, TInternals>,\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 config.queryFactory({\n creator: config.options,\n creatorInternals: config.internals,\n features,\n queryConfig,\n });\n }\n\n // Add clone method to create a new creator with merged options\n // Cast to match QueryCreator's expected signature while preserving TOptions internally\n queryCreator.clone = (additionalOptions: Partial<BaseQueryCreatorOptions>) => {\n return createBaseQueryCreator({\n ...config,\n options: { ...config.options, ...additionalOptions } as TOptions,\n });\n };\n\n return queryCreator;\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 { isSymfonyPagerfantaOutOfRangeError } from '../../http/query-error-response-utils';\nimport { invalidBaseRouteError, invalidRouteError, pathParamsMissingInRouteFunctionError } from '../logger';\nimport { AnyRoute } from '../query';\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;\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 (config?.objectNotation === 'json-stringify') {\n if (value === undefined) {\n return false;\n }\n\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\n const val = typeof value === 'object' ? JSON.stringify(value) : value;\n\n const encodedValue = encodeURIComponent(val as string | number | boolean);\n\n queryParams.push(`${encodedKey}=${encodedValue}`);\n\n return true;\n } else 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 v2ExtractExpiresInSeconds = (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 v2ShouldRetryRequest: 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 === 408 || status === 425) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 429 errors\n if (status === 429) {\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 { HttpErrorResponse } from '@angular/common/http';\nimport { Observable, Observer } from 'rxjs';\nimport { PartialXhrState, RequestConfig, RequestError, RequestEvent } from './request.types';\nimport {\n buildTimestampFromSeconds,\n detectContentTypeHeader,\n forEachHeader,\n getResponseUrl,\n hasHeader,\n parseAllXhrResponseHeaders,\n serializeBody,\n v2ExtractExpiresInSeconds,\n v2ShouldRetryRequest,\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 || v2ShouldRetryRequest;\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 !== 204) {\n body = typeof xhr.response === 'undefined' ? xhr.responseText : xhr.response;\n }\n\n if (status === 0) {\n status = body ? 200 : 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 {\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) ?? v2ExtractExpiresInSeconds(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 httpErrorResponse: new HttpErrorResponse({\n error: body,\n status,\n statusText,\n url,\n }),\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 httpErrorResponse: new HttpErrorResponse({\n error: error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n url,\n }),\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 { HttpHeaders } from '@angular/common/http';\nimport { QueryArgs, RequestArgs } from './query';\nimport { QueryMethod } from './query-creator';\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 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 } from '@angular/common/http';\nimport { clamp } from '@ethlete/core';\nimport { isSymfonyPagerfantaOutOfRangeError } from './query-error-response-utils';\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 = clamp(1000 + 1000 * retryCount, 1000, 5000);\n const { status, error: detail, headers } = error;\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 // We will retry in this case until the connection is back.\n if (status === 0) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Don't retry if we already retried 3 times\n if (retryCount > 3) {\n return { retry: false };\n }\n\n // Don't retry if it's not an http error\n if (!(error instanceof HttpErrorResponse)) {\n return { retry: false };\n }\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 === 408 || status === 425) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 429 errors\n if (status === 429) {\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 return { retry: false };\n};\n","import { HttpErrorResponse } from '@angular/common/http';\nimport {\n isClassValidatorError,\n isSymfonyFormViolationListError,\n isSymfonyListError,\n} from './query-error-response-utils';\nimport { shouldRetryRequest, ShouldRetryRequestResult } from './query-retry-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: number;\n} & (QueryErrorResponseList | QueryErrorResponseSingle);\n\nexport type QueryErrorResponseItem = {\n message: string;\n};\n\nexport const isQueryErrorResponse = (error: unknown): error is QueryErrorResponse => {\n return typeof error === 'object' && error !== null && 'raw' in error && 'retryState' in error && 'isList' in error;\n};\n\n/**\n * Every message carried by an error, flattened into a plain list — one entry for a single error,\n * one per violation for a list (a form response with several field violations), empty for `null`.\n *\n * The single/list split exists because that is how APIs answer; UI almost never wants to branch on\n * it. Reach for this when rendering, and keep {@link QueryErrorResponse} for anything that needs\n * the status code or the raw response.\n *\n * @example\n * ```html\n * @for (message of queryErrorMessages(myQuery.error()); track message) {\n * <p class=\"error\">{{ message }}</p>\n * }\n * ```\n */\nexport const queryErrorMessages = (error: QueryErrorResponse | null | undefined): string[] => {\n if (!error) return [];\n\n return error.isList ? error.errors.map((item) => item.message) : [error.error.message];\n};\n\n/**\n * The first message of an error, or `null` when there is none — the single-line counterpart to\n * {@link queryErrorMessages}, for a toast or a form-field hint.\n */\nexport const queryErrorMessage = (error: QueryErrorResponse | null | undefined): string | null =>\n queryErrorMessages(error)[0] ?? null;\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, HttpEvent, HttpEventType, HttpHeaders, HttpProgressEvent } from '@angular/common/http';\nimport { ErrorHandler, Signal, signal } from '@angular/core';\nimport { Observable, Subject, Subscription, catchError, retry, tap, throwError, timer } from 'rxjs';\nimport { buildTimestampFromSeconds } from '../legacy/request';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { extractExpiresInSeconds } from './query-cache-utils';\nimport { CacheAdapterFn } from './query-client';\nimport { CreateQueryCreatorOptions, QueryMethod } from './query-creator';\nimport { QueryErrorResponse, createQueryErrorResponse } from './query-error-response';\nimport { QueryRepositoryDependencies } from './query-repository';\nimport { ShouldRetryRequestFn, ShouldRetryRequestOptions, shouldRetryRequest } from './query-retry-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 /** The error handler instance to use for the request */\n ngErrorHandler: ErrorHandler;\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: QueryRepositoryDependencies;\n\n /** The client options of the request */\n clientOptions?: CreateQueryCreatorOptions;\n\n /**\n * Headers configured on the query client, applied to every request it makes. Per-request\n * `args.headers` are merged on top and win per header name.\n *\n * @see CreateQueryClientConfigOptions.headers\n */\n clientHeaders?: HttpHeaders | (() => HttpHeaders);\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 /** The HTTP method of the request. */\n method: QueryMethod;\n\n /** The full URL of the request (base + path + query params). */\n url: string;\n\n /**\n * Executes the request.\n *\n * `force` runs it even when one is already in flight (the in-flight one is cancelled) or the\n * cached response is still fresh — used by `refreshQueriesInUse` after something outside the\n * request changed, such as a client-level header.\n */\n execute: (options?: { allowCache?: boolean; force?: 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<RequestHttpEvent<TArgs> | null>;\n\n /**\n * A discrete stream of every event of this request, emitted synchronously at the moment the\n * event is processed (including the terminal Response / error event). Unlike the `currentEvent`\n * signal, this never coalesces or gets reset, so consumers cannot miss a transition. Completes\n * when the request is destroyed.\n */\n events$: Observable<RequestHttpEvent<TArgs>>;\n\n /**\n * Whether the request is stale or not aka the cache header has expired.\n *\n * This is a plain getter function (evaluated on each call), not a reactive signal, because\n * staleness depends on wall-clock time rather than on any tracked signal.\n */\n isStale: () => boolean;\n\n /**\n * The timestamp (ms) at which the cached response goes stale, or `null` when the request is not\n * cacheable / has no freshness window. Exposed for devtools freshness countdowns.\n */\n expiresAt: Signal<number | null>;\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 type RequestHttpEvent<TArgs extends QueryArgs> = HttpEvent<ResponseType<TArgs>> | HttpErrorEvent;\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<RequestHttpEvent<TArgs> | null>(null);\n const event$ = new Subject<RequestHttpEvent<TArgs>>();\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 // NOTE: This must be a plain function, not a `computed`. The freshness check compares against\n // `Date.now()`, which is not reactive, so a memoized computed would only ever recompute when\n // `expiresIn` changes — once it evaluated to `false` (fresh) it would stay `false` forever, even\n // after the window elapsed, turning every `allowCache` execute into a permanent cache hit.\n const isStale = () => {\n const expiresInTs = expiresIn();\n\n return expiresInTs === null || expiresInTs < Date.now();\n };\n\n // Resolved per execution rather than once at creation, so a client whose headers are a function\n // reading a signal (a preview token, a tenant id) sees the current value on every re-run.\n const resolveHeaders = () => {\n const clientHeaders = typeof options.clientHeaders === 'function' ? options.clientHeaders() : options.clientHeaders;\n const argHeaders = typeof args?.headers === 'function' ? args.headers() : args?.headers;\n\n if (!clientHeaders) return argHeaders;\n if (!argHeaders) return clientHeaders;\n\n // `set` replaces every value of that name, so a per-request header fully overrides the\n // client-level one instead of being appended next to it.\n return argHeaders.keys().reduce((merged, key) => merged.set(key, argHeaders.getAll(key) ?? []), clientHeaders);\n };\n\n const createStream = () => {\n const headers = resolveHeaders();\n\n return 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 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\n const execute = (options?: { allowCache?: boolean; force?: boolean }) => {\n if (!options?.force && (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 const stream = createStream();\n\n currentStreamSubscription = stream.subscribe({\n error: () => {\n // Errors are already handled in updateErrorState via catchError\n // This empty handler prevents \"unhandled error\" warnings in tests\n },\n });\n\n return true;\n };\n\n const destroy = () => {\n const wasActive = !currentStreamSubscription.closed;\n\n currentStreamSubscription.unsubscribe();\n event$.complete();\n\n return wasActive;\n };\n\n const updateState = (event: HttpEvent<ResponseType<TArgs>>) => {\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 currentEvent.set(event);\n event$.next(event);\n };\n\n const updateErrorState = (errorResponse: unknown) => {\n const errorRes = createQueryErrorResponse(errorResponse);\n\n error.set(errorRes);\n loading.set(null);\n\n const errorEvent: HttpErrorEvent = { type: 'error', error: errorRes };\n currentEvent.set(errorEvent);\n event$.next(errorEvent);\n\n options.dependencies.ngErrorHandler.handleError(errorRes.raw);\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 method: options.method,\n url: options.fullPath,\n execute,\n destroy,\n loading: loading.asReadonly(),\n error: error.asReadonly(),\n response: response.asReadonly(),\n currentEvent: currentEvent.asReadonly(),\n events$: event$.asObservable(),\n isStale,\n expiresAt: expiresIn.asReadonly(),\n };\n\n return httpRequest;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n runInInjectionContext,\n Signal,\n signal,\n untracked,\n} from '@angular/core';\nimport { consumeSuppressQueryStackDevtools, isQueryDevtoolsEnabled, registerQueryDevtoolsEntry } from '../devtools';\nimport { AnyNewQuery, 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 QueryStackSubtle<TCreator extends AnyQueryCreator, TQuery extends AnyNewQuery> = {\n /** Create a new query with the given arguments. You should always prefer the `args` option instead of this. */\n runWithArgs: (\n args: RequestArgs<QueryArgsOf<TCreator>> | RequestArgs<QueryArgsOf<TCreator>>[] | null,\n ) => TQuery | null;\n};\n\nexport type QueryStack<TQuery extends AnyNewQuery, TCreator extends AnyQueryCreator, TTransform> = {\n /** Contains all queries in the stack. */\n queries: Signal<TQuery[]>;\n\n /** Contains the first query in the stack. */\n firstQuery: Signal<TQuery | null>;\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 anyLoading: Signal<boolean>;\n\n /** Count of queries currently loading */\n loadingCount: Signal<number>;\n\n /** True if ALL queries are loading */\n allLoading: Signal<boolean>;\n\n /** Progress tracking */\n loadingProgress: Signal<{ loaded: number; total: number }>;\n\n /** Contains the first error that occurred in the stack. */\n anyError: Signal<QueryErrorResponse | null>;\n\n /** All errors from all queries */\n errors: Signal<QueryErrorResponse[]>;\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 /** Retry all queries that have errors */\n retryFailed: () => void;\n\n /** Advanced query stack features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle: QueryStackSubtle<TCreator, TQuery>;\n};\n\nexport type AnyQueryStack = QueryStack<AnyNewQuery, AnyQueryCreator, 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 * If true, prevents creating queries with identical args.\n * Useful for append mode to avoid duplicate data fetching.\n * @default true\n */\n deduplicateArgs?: boolean;\n\n /**\n * Custom function to generate a unique key from args for deduplication.\n * If not provided, uses JSON.stringify.\n */\n argsKeyFn?: (args: RequestArgs<QueryArgsOf<TCreator>> | null) => string;\n\n /**\n * Maximum number of queries to keep when append is true.\n * When limit is reached, queries will be removed based on removeStrategy.\n * @default Infinity\n */\n maxQueries?: number;\n\n /**\n * Strategy for removing queries when maxQueries is reached.\n * - 'oldest': Remove oldest queries first (FIFO)\n * - 'newest': Remove newest queries first (LIFO)\n * @default 'oldest'\n */\n removeStrategy?: 'oldest' | 'newest';\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 argsKeyFn,\n deduplicateArgs,\n maxQueries = Infinity,\n removeStrategy = 'oldest',\n } = options ?? {};\n\n const injector = inject(Injector);\n\n const queries = signal<QueryType[]>([]);\n const lastQuery = signal<QueryType | null>(null);\n const firstQuery = computed(() => queries()[0] ?? null);\n\n const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WITH_ARGS);\n const hasWithOptimisticUpdateFeature = features.some((f) => f.type == QueryFeatureType.WITH_RESPONSE_UPDATE);\n\n if (hasWithArgsFeature) {\n throw queryStackWithArgsUsed();\n }\n\n if (hasWithOptimisticUpdateFeature) {\n throw queryStackWithResponseUpdateUsed();\n }\n\n const runWithArgs = (args: RequestArgs<QueryArgsOf<TCreator>> | RequestArgs<QueryArgsOf<TCreator>>[] | null) => {\n if (args === null) return null;\n\n return untracked(() => {\n const newArgsArray = Array.isArray(args) ? args : [args];\n\n let filteredArgs = newArgsArray;\n if (deduplicateArgs !== false && append) {\n const keyFn = argsKeyFn ?? ((a) => JSON.stringify(a));\n const existingKeys = new Set(\n queries().map((q) => keyFn(q.args() as RequestArgs<QueryArgsOf<TCreator>> | null)),\n );\n\n filteredArgs = newArgsArray.filter((a) => {\n const key = keyFn(a);\n if (existingKeys.has(key)) return false;\n existingKeys.add(key);\n return true;\n });\n }\n\n const newQueries = runInInjectionContext(injector, () =>\n filteredArgs.map(\n (newArgsEntry) =>\n queryCreator(\n withArgs(() => newArgsEntry),\n ...features,\n ) as QueryType,\n ),\n );\n\n const oldQueries = queries();\n\n if (append) {\n const { queries: appendedQueries, lastQuery: lastAppendedQuery } = appendFn(oldQueries, newQueries);\n\n let finalQueries = appendedQueries;\n if (maxQueries && finalQueries.length > maxQueries) {\n const excessCount = finalQueries.length - maxQueries;\n\n const queriesToRemove =\n removeStrategy === 'newest' ? finalQueries.slice(-excessCount) : finalQueries.slice(0, excessCount);\n\n queriesToRemove.forEach((q) => q.subtle.destroy());\n\n finalQueries =\n removeStrategy === 'newest' ? finalQueries.slice(0, maxQueries) : finalQueries.slice(-maxQueries);\n }\n\n queries.set(finalQueries);\n lastQuery.set(lastAppendedQuery);\n return lastAppendedQuery;\n } else {\n const keyFn = argsKeyFn ?? ((a) => JSON.stringify(a));\n const newArgsKeys = new Set(newArgsArray.map((a) => keyFn(a)));\n\n const preservedQueries = oldQueries.filter((oldQuery) => {\n const oldKey = keyFn(oldQuery.args() as RequestArgs<QueryArgsOf<TCreator>> | null);\n return newArgsKeys.has(oldKey);\n });\n\n const preservedMap = new Map(\n preservedQueries.map((q) => [keyFn(q.args() as RequestArgs<QueryArgsOf<TCreator>> | null), q]),\n );\n\n const finalQueries = newArgsArray.map((newArgsEntry) => {\n const key = keyFn(newArgsEntry);\n const preserved = preservedMap.get(key);\n\n if (preserved) {\n return preserved;\n }\n\n return runInInjectionContext(\n injector,\n () =>\n queryCreator(\n withArgs(() => newArgsEntry),\n ...features,\n ) as QueryType,\n );\n });\n\n for (const oldQuery of oldQueries) {\n if (!finalQueries.includes(oldQuery)) {\n oldQuery.subtle.destroy();\n }\n }\n\n queries.set(finalQueries);\n\n const last = finalQueries[finalQueries.length - 1] ?? null;\n\n lastQuery.set(last);\n\n return last;\n }\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 effect(() => {\n dependencies?.();\n\n untracked(() => clear());\n });\n\n effect(() => runWithArgs(args(dependencies?.())));\n\n const anyLoading = computed(() => queries().some((q) => q.loading()));\n\n const loadingCount = computed(() => queries().filter((q) => q.loading()).length);\n\n const allLoading = computed(() => {\n const qs = queries();\n return qs.length > 0 && qs.every((q) => q.loading());\n });\n\n const loadingProgress = computed(() => {\n const total = queries().length;\n const loaded = queries().filter((q) => !q.loading()).length;\n return { loaded, total };\n });\n\n const anyError = computed(\n () =>\n queries()\n .map((q) => q.error())\n .find((e) => e !== null) ?? null,\n );\n\n const errors = computed(() =>\n queries()\n .map((q) => q.error())\n .filter((e): e is QueryErrorResponse => e !== 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 retryFailed = () => {\n for (const query of queries()) {\n if (query.error()) {\n query.execute({ options: { allowCache: false } });\n }\n }\n };\n\n const stack: QueryStack<QueryType, TCreator, TTransform> = {\n queries: queries.asReadonly(),\n lastQuery: lastQuery.asReadonly(),\n firstQuery,\n anyLoading,\n loadingCount,\n allLoading,\n loadingProgress,\n anyError,\n errors,\n response,\n execute,\n clear,\n retryFailed,\n subtle: {\n runWithArgs,\n },\n };\n\n const skipDevtools = consumeSuppressQueryStackDevtools();\n\n if (isQueryDevtoolsEnabled() && !skipDevtools) {\n const unregister = registerQueryDevtoolsEntry({\n kind: 'query-stack',\n handle: stack,\n meta: {\n featureTypes: features.map((f) => f.type),\n },\n });\n\n inject(DestroyRef).onDestroy(unregister);\n }\n\n return stack;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, DestroyRef, effect, inject, isDevMode, Signal, signal, untracked } from '@angular/core';\nimport { isQueryDevtoolsEnabled, registerQueryDevtoolsEntry, suppressNextQueryStackDevtools } from '../devtools';\nimport {\n ContentfulGqlLikePaginated,\n DynLikePaginated,\n GgLikePaginated,\n NormalizedPagination,\n Paginated,\n} from '@ethlete/types';\nimport { AnyNewQuery, 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 queryStackTotalQueriesAndExpectedQueriesMismatch,\n} from './query-errors';\nimport { QueryFeature } from './query-features';\nimport { shouldRetryRequest } from './query-retry-utils';\nimport { createQueryStack, transformArrayResponse } from './query-stack';\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 /**\n * If true, no queries will be executed while the paged query is loading.\n * This is useful if you need the current response to be used in the next query.\n */\n blockExecutionDuringLoading?: boolean;\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<AnyNewQuery, NormalizedPagination<unknown>>;\n\nexport type PagedQueryStack<TQuery extends AnyNewQuery, TNormPagination extends NormalizedPagination<unknown>> = {\n /**\n * The pagination of the last executed query in the paged query.\n */\n maxPagination: Signal<TNormPagination | null>;\n\n /**\n * The pagination of the first executed query in the paged query.\n */\n minPagination: Signal<TNormPagination | null>;\n\n /**\n * Whether the last page of the paged query is loaded or not.\n */\n isLastPageLoaded: Signal<boolean>;\n\n /**\n * Whether the first page of the paged query is loaded or not.\n */\n isFirstPageLoaded: Signal<boolean>;\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: () => TQuery | null;\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: () => TQuery | null;\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 resetTrigger = signal(0);\n\n const pageDirection = signal<PagedQueryStackDirection>('next');\n\n suppressNextQueryStackDevtools();\n const stack = createQueryStack({\n args: () => null,\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 resetTrigger();\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 stack.subtle.runWithArgs(args);\n });\n });\n\n const maxPagination = 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 minPagination = computed(() => {\n const res = stack.firstQuery()?.response();\n const all = stack.response();\n\n if (!res) return null;\n\n return responseNormalizer(res, all);\n });\n\n const isFirstPageLoaded = computed(() => {\n const min = minPagination();\n\n return min ? loadedMinPage() === min.currentPage : false;\n });\n\n const isLastPageLoaded = computed(() => {\n const max = maxPagination();\n\n return max ? loadedMaxPage() === max.totalPages : false;\n });\n\n const fetchPreviousPage = () => {\n const page = loadedMinPage() - 1;\n const allResponses = stack.response();\n\n if (!canFetchNewPage(page)) {\n return null;\n }\n\n if (page < 1) {\n if (isDevMode()) {\n throw pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage();\n }\n\n return null;\n }\n\n currentPageArgs.set(options.args(page, allResponses));\n loadedMinPage.set(page);\n pageDirection.set('previous');\n\n return stack.subtle.runWithArgs(currentPageArgs());\n };\n\n const fetchNextPage = () => {\n const page = loadedMaxPage() + 1;\n const currentPagination = maxPagination();\n const allResponses = stack.response();\n\n if (!canFetchNewPage(page)) {\n return null;\n }\n\n if (!currentPagination) {\n if (isDevMode()) {\n throw pagedQueryStackNextPageCalledWithoutPreviousPage();\n }\n\n return null;\n }\n\n if (page > currentPagination.totalPages) {\n if (isDevMode()) {\n throw pagedQueryStackPageBiggerThanTotalPages(page, currentPagination.totalPages);\n }\n\n return null;\n }\n\n currentPageArgs.set(options.args(page, allResponses));\n loadedMaxPage.set(page);\n pageDirection.set('next');\n\n return stack.subtle.runWithArgs(currentPageArgs());\n };\n\n const canFetchNewPage = (pageToLoad: number) => {\n const currentMaxPagination = maxPagination();\n const currentMinPagination = minPagination();\n\n if (!currentMaxPagination || !currentMinPagination) {\n return true;\n }\n\n const isOneMinusMinPagination = pageToLoad === currentMinPagination.currentPage - 1;\n const isOnePlusMaxPagination = pageToLoad === currentMaxPagination.currentPage + 1;\n\n if (!options.blockExecutionDuringLoading) {\n const totalQueries = stack.queries().length;\n const expectedQueries = Math.abs(loadedMaxPage() - loadedMinPage()) + 1;\n\n if (totalQueries !== expectedQueries) {\n if (isDevMode()) {\n throw queryStackTotalQueriesAndExpectedQueriesMismatch(totalQueries, expectedQueries);\n }\n }\n\n return true;\n }\n\n if (stack.anyLoading()) {\n return false;\n }\n\n return isOneMinusMinPagination || isOnePlusMaxPagination;\n };\n\n const reset = (resetOptions?: PagedQueryStackResetOptions) => {\n const page = resetOptions?.initialPage ?? initialPage();\n\n initialPage.set(page);\n pageDirection.set('next');\n resetTrigger.update((v) => v + 1);\n };\n\n const canFetchPreviousPage = computed(() => {\n const currentMinPagination = minPagination();\n\n if (!currentMinPagination) return false;\n\n return loadedMinPage() > 1;\n });\n const canFetchNextPage = computed(() => {\n const currentMaxPagination = maxPagination();\n\n return currentMaxPagination ? loadedMaxPage() < currentMaxPagination.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 maxPagination,\n minPagination,\n fetchPreviousPage,\n fetchNextPage,\n canFetchPreviousPage,\n canFetchNextPage,\n items,\n direction: pageDirection.asReadonly(),\n loading: stack.anyLoading,\n error: stack.anyError,\n lastQuery: stack.lastQuery,\n isFirstLoad,\n queries: stack.queries,\n isLastPageLoaded,\n isFirstPageLoaded,\n reset,\n execute,\n };\n\n if (isQueryDevtoolsEnabled()) {\n const unregister = registerQueryDevtoolsEntry({\n kind: 'paged-query-stack',\n handle: pagedQuery,\n meta: {\n featureTypes: features?.map((f) => f.type),\n },\n });\n\n inject(DestroyRef).onDestroy(unregister);\n }\n\n return pagedQuery;\n};\n","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","import {\n CreateComputedOptions,\n Injector,\n Signal,\n assertInInjectionContext,\n computed,\n effect,\n inject,\n linkedSignal,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport { ToObservableOptions, ToSignalOptions, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { computedTillTruthy, createDestroy } from '@ethlete/core';\nimport { Observable, Subscribable, of, pairwise, startWith, switchMap, takeUntil, tap } from 'rxjs';\nimport { AnyLegacyQuery } from '../interop';\nimport {\n AnyQueryCollection,\n AnyV2Query,\n QueryOf,\n QueryStateType,\n V2QueryState,\n extractQuery,\n filterQueryStates,\n isQuery,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n} from '../query';\nimport { QueryDataOf } from '../query-creator';\n\nexport type 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 type 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<AnyV2Query | AnyV2Query[] | AnyLegacyQuery | AnyLegacyQuery[] | null>,\n valueFn: () => AnyV2Query | AnyV2Query[] | AnyLegacyQuery | AnyLegacyQuery[] | 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: AnyV2Query | AnyLegacyQuery | 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 (q as unknown as AnyLegacyQuery)?.destroy?.();\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: AnyV2Query | AnyLegacyQuery | null | undefined) => {\n q?._removeDependent(componentId);\n\n if (!q?._hasDependents() && ((q?.canBeCached && abortOnDestroy === undefined) || abortOnDestroy)) {\n q?.abort();\n (q as unknown as AnyLegacyQuery)?.destroy?.();\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 AnyV2Query | AnyLegacyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n): Signal<T | undefined>;\nexport function toQuerySignal<T extends AnyV2Query | AnyLegacyQuery | 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 AnyV2Query | AnyLegacyQuery | 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 AnyV2Query | AnyLegacyQuery | 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 AnyV2Query | AnyLegacyQuery | 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 AnyV2Query | AnyLegacyQuery | 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 effectComputed<T extends AnyV2Query | AnyLegacyQuery | AnyV2Query[] | AnyLegacyQuery[] | null>(\n computation: () => T,\n injector: Injector,\n) {\n let initialData = null;\n\n try {\n initialData = runInInjectionContext(injector, () => computation());\n } catch {\n // Ignore errors in the initial computation\n // Angular might throw an error if required inputs are read but not available yet\n }\n\n const lastResult = signal<T>(initialData as T);\n\n effect(() => {\n const data = runInInjectionContext(injector, () => computation());\n\n untracked(() => {\n if (data === lastResult()) return;\n\n lastResult.set(data);\n });\n });\n\n return lastResult.asReadonly();\n}\n\nexport function queryComputed<T extends AnyV2Query | AnyLegacyQuery | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T> {\n const injector = inject(Injector);\n\n const c = effectComputed(computation, injector);\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 AnyV2Query | AnyLegacyQuery | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T | null> {\n const injector = inject(Injector);\n\n const c = computedTillTruthy(effectComputed(computation, injector));\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\nexport function queryArrayComputed<T extends AnyV2Query[] | AnyLegacyQuery[] | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T> {\n const injector = inject(Injector);\n\n const c = effectComputed(computation, injector);\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\nexport function toQuerySubject<T extends AnyV2Query | AnyLegacyQuery | 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<AnyV2Query | AnyLegacyQuery | 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<V2QueryState<QueryDataOf<QueryOf<ReturnType<T>>>> | null>;\n\n const rwSignal = linkedSignal<V2QueryState<QueryDataOf<QueryOf<ReturnType<T>>>> | null>(roSignal);\n\n return rwSignal;\n}\n\nexport type QueryStateSignal<T extends Signal<AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>> =\n Signal<QueryDataOf<QueryOf<ReturnType<T>>> | null> & { reset: () => void };\n\nexport function queryStateResponseSignal<T extends Signal<AnyV2Query | AnyLegacyQuery | 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<AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>>(\n source: T,\n) {\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<AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>>(\n source: T,\n) {\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 { V2Query, computeQueryQueryParams } from '../query';\nimport { V2QueryClient, v2BuildQueryCacheKey, v2ShouldCacheQuery } from '../query-client';\nimport { QueryStore } from '../query-store';\nimport {\n AnyRoute,\n BaseArguments,\n GqlQueryConfig,\n RestQueryConfig,\n V2RouteType,\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 V2QueryCreator<\n Arguments extends BaseArguments | undefined,\n Response,\n Route extends V2RouteType<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: V2QueryClient,\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 ?? '') + v2BuildQueryCacheKey(route as string, args);\n\n if (v2ShouldCacheQuery(this._queryConfig.method) && !args?.config?.skipQueryStore) {\n const existingQuery = this._store.get<V2Query<Response, Arguments, Route, Store, Data, Id>>(cacheKey);\n\n if (existingQuery) {\n return existingQuery;\n }\n }\n\n const query = new V2Query<Response, Arguments, Route, Store, Data, Id>(\n this._client,\n this._queryConfig,\n route,\n args ?? ({} as Arguments),\n cacheKey,\n );\n\n if (v2ShouldCacheQuery(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 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 { AnyV2Query } from '../query';\n\nexport class QueryStore {\n /**\n * @internal\n */\n readonly _store = new Map<string, AnyV2Query>();\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<AnyV2Query>();\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: AnyV2Query) {\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 AnyV2Query>(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: AnyV2Query, 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: AnyV2Query) {\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: AnyV2Query | null, operation: string) {\n if (!this._config?.enableChangeLogging) return;\n\n const stateAsJson: Record<string, AnyV2Query> = {};\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 V2RouteType,\n} from '../query';\nimport { V2QueryCreator } from '../query-creator';\nimport { QueryStore } from '../query-store';\nimport { RequestHeaders, RequestHeadersMethodMap } from '../request';\nimport { V2QueryClientConfig } from './query-client.types';\n\nexport class V2QueryClient {\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: V2QueryClientConfig) {\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 V2RouteType<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 V2RouteType<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 V2RouteType<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 V2RouteType<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 V2RouteType<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 V2RouteType<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 V2RouteType<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 V2RouteType<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 V2QueryCreator<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 v2ShouldCacheQuery = (method: Method) => {\n return method === 'GET' || method === 'OPTIONS' || method === 'HEAD' || method === 'GQL_QUERY';\n};\n\nexport const v2BuildQueryCacheKey = (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","import {\n AnyCreateQueryClientResult,\n createBaseQueryCreator,\n CreateQueryCreatorOptions,\n gqlDataPropertyMissingInResponse,\n QueryCreator,\n RouteType,\n} from '../http';\nimport { createGqlQuery, GqlQueryArgs } from './gql-query';\n\nexport type CreateGqlQueryCreatorOptions<TArgs extends GqlQueryArgs> = Omit<\n CreateQueryCreatorOptions<TArgs>,\n 'route' | 'transformResponse'\n> & {\n route?: RouteType<TArgs>;\n\n /**\n * Optional custom transform function for GQL responses.\n * If not provided, the default { data: ... } unwrapping will be used.\n */\n transformResponse?: CreateQueryCreatorOptions<TArgs>['transformResponse'];\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyCreateGqlQueryCreatorOptions = CreateGqlQueryCreatorOptions<any>;\n\nexport type GqlQueryMethod = 'QUERY' | 'MUTATE';\nexport type GqlQueryTransport = 'GET' | 'POST';\n\nexport type InternalCreateGqlQueryCreatorOptions = {\n method: GqlQueryMethod;\n transport: GqlQueryTransport;\n client: AnyCreateQueryClientResult;\n query: string;\n};\n\nexport const createGqlQueryCreator = <TArgs extends GqlQueryArgs>(\n options: CreateGqlQueryCreatorOptions<TArgs> | undefined,\n internals: InternalCreateGqlQueryCreatorOptions,\n): QueryCreator<TArgs> =>\n createBaseQueryCreator({\n options: {\n ...options,\n // Use custom transformResponse if provided, otherwise use default GQL unwrapping\n transformResponse:\n options?.transformResponse ??\n ((rawResponse: unknown) => {\n if (rawResponse && typeof rawResponse === 'object' && 'data' in rawResponse) {\n return (rawResponse as { data: unknown }).data;\n }\n\n throw gqlDataPropertyMissingInResponse();\n }),\n } as CreateQueryCreatorOptions<TArgs>,\n internals,\n queryFactory: createGqlQuery,\n });\n","import { HttpHeaders } from '@angular/common/http';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, of, Subscription, switchMap, take, tap } from 'rxjs';\nimport { AnyBearerAuthProvider } from '../auth';\nimport { AnyQuerySnapshot, QueryArgs, RequestArgs } from './query';\nimport { QueryDependencies } from './query-dependencies';\nimport { invalidStateInsideSecureExecuteFactory, tokensNotAvailableInsideAuthAndExec } from './query-errors';\nimport { InternalQueryExecute, QueryExecuteArgs } from './query-execute';\nimport { circularQueryDependencyChecker, resetExecuteState, setupQueryExecuteState } from './query-execute-utils';\nimport { QueryState } from './query-state';\n\nconst AUTH_HEADER = 'Authorization';\n\nexport type SecureExecuteFactoryOptions<TArgs extends QueryArgs> = {\n authProvider: AnyBearerAuthProvider;\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n transformAuthAndExec: (\n executeArgs: QueryExecuteArgs<TArgs> | undefined,\n tokens: { accessToken: string },\n headers: HttpHeaders,\n executeState: ReturnType<typeof setupQueryExecuteState>,\n ) => void;\n};\n\nexport const createSecureExecuteFactory = <TArgs extends QueryArgs>(\n options: SecureExecuteFactoryOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n const circularChecker = circularQueryDependencyChecker();\n\n let authQuerySubscription = Subscription.EMPTY;\n let tokenRefreshSubscription = Subscription.EMPTY;\n let tokenWaitSubscription = Subscription.EMPTY;\n\n const reset = () => {\n authQuerySubscription.unsubscribe();\n authQuerySubscription = Subscription.EMPTY;\n tokenRefreshSubscription.unsubscribe();\n tokenRefreshSubscription = Subscription.EMPTY;\n tokenWaitSubscription.unsubscribe();\n tokenWaitSubscription = Subscription.EMPTY;\n resetExecuteState({\n executeState,\n executeOptions: { deps: options.deps, state: options.state },\n });\n };\n\n // A logout tears down the secure entries in the repository, but the query object holding one keeps\n // its own `response`/`error` signals — so without this a component still mounted after logout goes\n // on rendering the previous user's data until something calls `reset()` by hand.\n options.deps.client.repository.events$\n .pipe(\n filter((event) => event.type === 'unbind-all-secure'),\n takeUntilDestroyed(options.deps.destroyRef),\n )\n .subscribe(() => reset());\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.rawResponse.set(null);\n state.latestHttpEvent.set(null);\n state.args.set(null);\n };\n\n const authAndExec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n const args = executeArgs?.args;\n\n const headerProvider = () => {\n const accessToken = options.authProvider.accessToken();\n const baseHeaders = typeof args?.headers === 'function' ? args.headers() : args?.headers || new HttpHeaders();\n\n if (!accessToken) {\n throw tokensNotAvailableInsideAuthAndExec();\n }\n\n if (!baseHeaders.has(AUTH_HEADER)) {\n return baseHeaders.set(AUTH_HEADER, `Bearer ${accessToken}`);\n }\n\n return baseHeaders;\n };\n\n const accessToken = options.authProvider.accessToken();\n if (!accessToken) {\n throw tokensNotAvailableInsideAuthAndExec();\n }\n\n const tokens = { accessToken, refreshToken: options.authProvider.refreshToken() ?? '' };\n const headers = headerProvider();\n\n options.transformAuthAndExec(\n {\n ...executeArgs,\n args: {\n ...(args ?? {}),\n headers: headerProvider, // Pass header provider instead of static headers\n } as RequestArgs<TArgs>,\n },\n tokens,\n headers,\n executeState,\n );\n };\n\n // The auth query completing and the access token being populated happen on two\n // different reactive timelines: the token is set by a separate token-extraction\n // effect (see `setupBearerQueryRegistry`), and for cross-client / secure auth\n // queries the completion is delivered through several nested `toObservable` hops.\n // Calling `authAndExec` purely because the auth query is \"done\" therefore races\n // the token and can run while it is still null. Gate on the token signal instead:\n // execute immediately if it is already available, otherwise wait for it.\n const authAndExecWhenTokenReady = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n if (options.authProvider.accessToken()) {\n authAndExec(executeArgs);\n return;\n }\n\n tokenWaitSubscription.unsubscribe();\n tokenWaitSubscription = toObservable(options.authProvider.accessToken, {\n injector: options.deps.injector,\n })\n .pipe(\n filter(Boolean),\n take(1),\n tap(() => authAndExec(executeArgs)),\n )\n .subscribe();\n };\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n circularChecker.check();\n\n const execArgsWithDefaults: QueryExecuteArgs<TArgs> = {\n args: executeArgs?.args ?? options.state.args(),\n options: executeArgs?.options,\n };\n\n authQuerySubscription.unsubscribe();\n authQuerySubscription = Subscription.EMPTY;\n tokenRefreshSubscription.unsubscribe();\n tokenRefreshSubscription = Subscription.EMPTY;\n tokenWaitSubscription.unsubscribe();\n tokenWaitSubscription = Subscription.EMPTY;\n\n tokenRefreshSubscription = options.authProvider.afterTokenRefresh$\n .pipe(\n filter(() => {\n const currentError = options.state.error();\n return currentError?.code === 401;\n }),\n take(1),\n tap(() => exec(execArgsWithDefaults)),\n )\n .subscribe();\n\n const latestQuery = options.authProvider.latestExecutedQuery();\n const authQuery = latestQuery?.snapshot;\n\n // This might happen if a secure query gets executed while the auth query has just been created.\n // This is due to the fact that the query state is being synced with the state inside the http request using effect.\n const isAuthQueryFreshlyExecuted = authQuery?.lastTimeExecutedAt() === null;\n\n if (!authQuery || authQuery.loading() || isAuthQueryFreshlyExecuted) {\n options.state.loading.set({ executeTime: Date.now(), progress: null });\n\n authQuerySubscription = toObservable(options.authProvider.latestExecutedQuery, {\n injector: options.deps.injector,\n })\n .pipe(\n switchMap((latestQuery) => {\n if (!latestQuery) return of(null);\n const query = latestQuery.snapshot;\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 authAndExecWhenTokenReady(execArgsWithDefaults);\n }\n }),\n );\n }),\n )\n .subscribe();\n } else if (authQuery.response()) {\n authAndExecWhenTokenReady(execArgsWithDefaults);\n } else if (authQuery.error()) {\n error(authQuery);\n } else {\n throw invalidStateInsideSecureExecuteFactory();\n }\n };\n\n exec['reset'] = reset;\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","import {\n CreateQueryExecuteOptions,\n InternalQueryExecute,\n QueryConfig,\n QueryDependencies,\n queryExecute,\n QueryState,\n RequestArgs,\n RouteType,\n} from '../http';\nimport { createSecureExecuteFactory } from '../http/secure-query-execute-factory';\nimport { GqlQueryArgs } from './gql-query';\nimport { AnyCreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { transformGql } from './gql-transformer';\nimport { InternalSecureCreateGqlQueryCreatorOptions } from './secure-gql-query-creator';\n\nexport type CreateSecureGqlQueryExecuteOptions<TArgs extends GqlQueryArgs> = {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: AnyCreateGqlQueryCreatorOptions;\n creatorInternals: InternalSecureCreateGqlQueryCreatorOptions;\n queryConfig: QueryConfig;\n};\n\nexport const createSecureGqlExecuteFn = <TArgs extends GqlQueryArgs>(\n executeOptions: CreateSecureGqlQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const [, injectAuthProvider] = executeOptions.creatorInternals.authProvider;\n const authProvider = injectAuthProvider();\n\n return createSecureExecuteFactory({\n authProvider,\n deps: executeOptions.deps,\n state: executeOptions.state,\n transformAuthAndExec: (executeArgs, _tokens, headers, executeState) => {\n const { args, options: runOptions } = executeArgs ?? {};\n\n const query = transformGql(executeOptions.creatorInternals.query);\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>)), headers };\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 ...executeOptions,\n creatorInternals: {\n client: executeOptions.creatorInternals.client,\n method: executeOptions.creatorInternals.method === 'QUERY' ? 'GET' : 'POST',\n route: (executeOptions.creator?.route ?? '') as RouteType<TArgs>,\n },\n };\n\n queryExecute({\n executeOptions: normalizedOpts,\n executeState,\n args: computedArgs,\n options: runOptions,\n isSecure: true,\n });\n },\n });\n};\n","import { createBaseQuery, CreateQueryOptions } from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport { InternalSecureCreateGqlQueryCreatorOptions } from './secure-gql-query-creator';\nimport { createSecureGqlExecuteFn } from './secure-gql-query-execute';\n\nexport type CreateSecureGqlQueryOptions<TArgs extends GqlQueryArgs> = Omit<\n CreateQueryOptions<TArgs>,\n 'creatorInternals'\n> & {\n creatorInternals: InternalSecureCreateGqlQueryCreatorOptions;\n};\n\nexport const createSecureGqlQuery = <TArgs extends GqlQueryArgs>(options: CreateSecureGqlQueryOptions<TArgs>) =>\n createBaseQuery({\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n features: options.features,\n queryConfig: options.queryConfig,\n executeFactory: createSecureGqlExecuteFn,\n });\n","import { AnyCreateBearerAuthProviderResult } from '../auth';\nimport { AnyCreateQueryClientResult, createBaseQueryCreator, QueryCreator } from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport { CreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { createSecureGqlQuery } from './secure-gql-query';\n\nexport type InternalSecureCreateGqlQueryCreatorOptions = {\n method: 'QUERY' | 'MUTATE';\n transport: 'GET' | 'POST';\n client: AnyCreateQueryClientResult;\n query: string;\n authProvider: AnyCreateBearerAuthProviderResult;\n};\n\nexport const createSecureGqlQueryCreator = <TArgs extends GqlQueryArgs>(\n options: CreateGqlQueryCreatorOptions<TArgs> | undefined,\n internals: InternalSecureCreateGqlQueryCreatorOptions,\n): QueryCreator<TArgs> =>\n createBaseQueryCreator({\n options: {\n ...options,\n // Use custom transformResponse if provided, otherwise use default GQL unwrapping\n transformResponse:\n options?.transformResponse ??\n ((rawResponse: unknown) => {\n if (rawResponse && typeof rawResponse === 'object' && 'data' in rawResponse) {\n return (rawResponse as { data: unknown }).data;\n }\n return rawResponse;\n }),\n },\n internals,\n queryFactory: createSecureGqlQuery,\n });\n","import { AnyCreateBearerAuthProviderResult } from '../auth';\nimport { AnyCreateQueryClientResult } from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport {\n createGqlQueryCreator,\n CreateGqlQueryCreatorOptions,\n GqlQueryMethod,\n GqlQueryTransport,\n} from './gql-query-creator';\nimport { GQL } from './gql-transformer';\nimport { createSecureGqlQueryCreator } from './secure-gql-query-creator';\n\nconst createGqlCreatorTemplate = (method: GqlQueryMethod, transport: GqlQueryTransport) => {\n return (client: AnyCreateQueryClientResult) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createGqlQueryCreator<TArgs>(creatorOptions, {\n method,\n client,\n transport,\n query,\n });\n };\n};\n\nconst createSecureGqlCreatorTemplate = (method: GqlQueryMethod, transport: GqlQueryTransport) => {\n return (client: AnyCreateQueryClientResult, authProvider: AnyCreateBearerAuthProviderResult) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createSecureGqlQueryCreator<TArgs>(creatorOptions, {\n method,\n client,\n transport,\n query,\n authProvider,\n });\n };\n};\n\n/** A query creator that creates a GQL query where the payload is sent via GET (query params) */\nexport const createGqlQueryViaGet = createGqlCreatorTemplate('QUERY', 'GET');\n\n/** A query creator that creates a secure GQL query where the payload is sent via GET (query params) */\nexport const createSecureGqlQueryViaGet = createSecureGqlCreatorTemplate('QUERY', 'GET');\n\n/** A query creator that creates a GQL query where the payload is sent via POST (body) */\nexport const createGqlQueryViaPost = createGqlCreatorTemplate('QUERY', 'POST');\n\n/** A query creator that creates a secure GQL query where the payload is sent via POST (body) */\nexport const createSecureGqlQueryViaPost = createSecureGqlCreatorTemplate('QUERY', 'POST');\n\n/** A query creator that creates a GQL mutation where the payload is sent via GET (query params) */\nexport const createGqlMutationViaGet = createGqlCreatorTemplate('MUTATE', 'GET');\n\n/** A query creator that creates a secure GQL mutation where the payload is sent via GET (query params) */\nexport const createSecureGqlMutationViaGet = createSecureGqlCreatorTemplate('MUTATE', 'GET');\n\n/** A query creator that creates a GQL mutation where the payload is sent via POST (body) */\nexport const createGqlMutationViaPost = createGqlCreatorTemplate('MUTATE', 'POST');\n\n/** A query creator that creates a secure GQL mutation where the payload is sent via POST (body) */\nexport const createSecureGqlMutationViaPost = createSecureGqlCreatorTemplate('MUTATE', 'POST');\n","import { EffectRef, effect, untracked } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport {\n filter,\n interval,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n skip,\n Subscription,\n switchMap,\n takeUntil,\n takeWhile,\n} from 'rxjs';\nimport { AnyNewQuery, Query, QueryArgs, QueryArgsOf, QueryExecutionState, RequestArgs, ResponseType } from '../../http';\nimport { EntityStore } from '../entity';\nimport {\n BaseArguments,\n ExecuteQueryOptions,\n Failure,\n filterFailure,\n filterSuccess,\n isQueryStateLoading,\n isQueryStateSuccess,\n Loading,\n PollConfig,\n Prepared,\n QueryAutoRefreshConfig,\n QueryEntityConfig,\n QueryStateMeta,\n QueryStateType,\n Success,\n takeUntilResponse,\n V2QueryState,\n V2RouteType,\n} from '../query';\nimport { RequestError } from '../request';\n\nexport type CreateLegacyQueryOptions<TArgs extends QueryArgs> = {\n query: Query<TArgs>;\n};\n\nexport const transformExecStateToQueryState = <TArgs extends QueryArgs>(\n execState: QueryExecutionState<TArgs> | null,\n): V2QueryState<ResponseType<TArgs>> => {\n const meta: QueryStateMeta = { id: -1, triggeredVia: 'program' };\n\n switch (execState?.type) {\n case 'loading': {\n const loading: Loading = {\n meta,\n type: QueryStateType.Loading,\n ...(execState.loading.progress\n ? {\n progress: {\n current: execState.loading.progress.loaded,\n percentage: execState.loading.progress.percentage,\n total: execState.loading.progress.total,\n },\n }\n : {}),\n };\n\n return loading;\n }\n case 'success': {\n const success: Success<ResponseType<TArgs>> = {\n headers: {},\n meta,\n response: execState.response,\n type: QueryStateType.Success,\n };\n\n return success;\n }\n case 'failure': {\n const error: Failure = {\n error: {\n detail: execState.error.raw.error,\n httpErrorResponse: execState.error.raw,\n status: execState.error.raw.status,\n statusText: execState.error.raw.statusText,\n url: execState.error.raw.url || '',\n },\n meta,\n type: QueryStateType.Failure,\n };\n\n return error;\n }\n default: {\n const prepared: Prepared = {\n meta,\n type: QueryStateType.Prepared,\n };\n\n return prepared;\n }\n }\n};\n\nexport const isLegacyQuery = <T extends AnyLegacyQuery>(query: unknown): query is T => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n\n if (!('newQuery' in query)) {\n return false;\n }\n\n return true;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyLegacyQuery = LegacyQuery<any, any, any, any, any, any, any>;\n\nexport class LegacyQuery<\n Response,\n Arguments extends BaseArguments | undefined,\n // Positional public-API generic slot — consumers infer it via `LegacyQuery<…, infer Route, …>`,\n // so it must stay even though the class body never references it.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Route extends V2RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n TNewQuery extends AnyNewQuery,\n> {\n /**\n * @internal\n */\n _pollingSubscription: Subscription | null = null;\n /**\n * @internal\n */\n _currentPollConfig: PollConfig | null = null;\n\n /**\n * `null` for an inert query — there is no live injector to own an effect.\n *\n * @internal\n */\n storeSyncEffect: EffectRef | null = null;\n\n /**\n * @internal\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 _isDestroyed = false;\n\n state$: Observable<V2QueryState<Data>>;\n\n get rawState() {\n return transformExecStateToQueryState(this.newQuery.executionState());\n }\n\n get isExpired() {\n return this.newQuery.subtle.request()?.isStale();\n }\n\n get isInUse() {\n return true;\n }\n\n /**\n * @internal\n */\n get _subscriberCount() {\n return 0;\n }\n\n get isPolling() {\n return !!this._pollingSubscription;\n }\n\n get autoRefreshOnConfig() {\n const transformed: Readonly<QueryAutoRefreshConfig> = {\n queryClientDefaultHeadersChange: false,\n windowFocus: false,\n };\n\n return transformed;\n }\n\n /**\n * @internal\n */\n get _enableSmartPolling() {\n return false;\n }\n\n get store() {\n return null;\n }\n\n get canBeCached() {\n return false;\n }\n\n get _isInMockMode() {\n return false;\n }\n\n constructor(\n public newQuery: TNewQuery,\n public _arguments: RequestArgs<QueryArgsOf<TNewQuery>>,\n public entity?: QueryEntityConfig<Store, Data, Response, Arguments, Id>,\n\n /**\n * Wraps an inert query — see `createInertQuery`. Skips everything that needs a live injector,\n * so the wrapper is safe to build during teardown.\n *\n * @internal\n */\n private _isInert = false,\n ) {\n if (this._isInert) {\n this.state$ = of(transformExecStateToQueryState(null)) as Observable<V2QueryState<Data>>;\n this._isDestroyed = true;\n return;\n }\n\n this.state$ = toObservable(this.newQuery.executionState, { injector: this.newQuery.subtle.injector }).pipe(\n map((execState) => transformExecStateToQueryState(execState)),\n switchMap((s) => this._transformState(s)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n this.storeSyncEffect = effect(() => {\n const res = this.newQuery.response();\n\n untracked(() => {\n if (this.entity?.set) {\n const id = this.entity.id({ args: this._arguments, response: res });\n\n this.entity.set({\n args: this._arguments,\n response: res,\n id,\n store: this.entity.store,\n });\n }\n });\n });\n\n // Tear down only what this wrapper owns. The underlying query is already being destroyed when this fires, so\n // destroying it again would call `R3Injector.destroy()` on an injector that is mid-teardown, which throws\n // NG0205 (\"Injector has already been destroyed\") from inside the view's cleanup phase.\n this.newQuery.subtle.destroyRef.onDestroy(() => this._teardown());\n }\n\n private _teardown() {\n if (this._isDestroyed) {\n return;\n }\n\n this._isDestroyed = true;\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._dependentsChanged$.complete();\n this.storeSyncEffect?.destroy();\n }\n\n destroy() {\n if (this._isDestroyed) {\n return;\n }\n\n this._teardown();\n\n // Re-enters `_teardown` through the query's `destroyRef`, which the `_isDestroyed` guard absorbs.\n this.newQuery.subtle.destroy();\n }\n\n execute(options: ExecuteQueryOptions = {}) {\n untracked(() =>\n this.newQuery.execute({ args: this._arguments, options: { allowCache: options.skipCache !== true } }),\n );\n\n return this;\n }\n\n abort() {\n if (!isQueryStateLoading(this.rawState)) {\n return this;\n }\n\n this.newQuery.reset();\n\n return this;\n }\n\n poll(config: PollConfig) {\n // An inert or already destroyed query has nothing to poll, and the interval would outlive it.\n if (this._pollingSubscription || this._isDestroyed) {\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.rawState)),\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 /**\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 /**\n * @internal\n */\n _transformState(s: V2QueryState<Response>): Observable<V2QueryState<Data>> {\n if (!isQueryStateSuccess(s) || !this.entity?.get) {\n return of(s) as Observable<V2QueryState<Data>>;\n }\n\n const id = this.entity.id({ args: this._arguments, response: s.response });\n\n return this.entity\n .get({ args: this._arguments, id, response: s.response, store: this.entity.store })\n .pipe(map((v) => ({ ...s, response: v })));\n }\n}\n","import { DestroyRef, Injector, Signal, signal } from '@angular/core';\nimport { of } from 'rxjs';\nimport { ObservableSignal, Query, QueryArgs, QuerySnapshot, RequestArgs, ResponseType } from '../../http';\n\n/**\n * A query that never executes and never leaves its initial state.\n *\n * `LegacyQueryCreator.prepare()` hands one back when the injector it was given is already destroyed\n * — the shape v2 call sites still fire into during teardown (a debounced search resolving after the\n * user navigated away, an RxJS callback on a stream that has not been unsubscribed yet). v2 had no\n * injector at all there, so the same code used to be harmless; building a real query would now\n * throw NG0205 from inside the view's cleanup phase, with no hint about which query caused it.\n *\n * Everything reads as \"prepared but never executed\": `execute()` and friends are no-ops, signals\n * stay `null`, observables complete immediately. Nothing here touches Angular's DI, which is the\n * point — there is no live injector left to bind to.\n */\nexport const createInertQuery = <TArgs extends QueryArgs>(): Query<TArgs> => {\n const inertSignal = <T>(value: T): ObservableSignal<T> =>\n Object.assign(signal(value) as Signal<T>, { asObservable: () => of(value) });\n\n const noop = () => {\n /* the query is inert — there is nothing to execute, reset or destroy */\n };\n\n const base = {\n args: inertSignal<RequestArgs<TArgs> | null>(null),\n response: inertSignal<ResponseType<TArgs> | null>(null),\n latestHttpEvent: inertSignal(null),\n loading: inertSignal(null),\n error: inertSignal(null),\n lastTimeExecutedAt: inertSignal<number | null>(null),\n triggeredBy: inertSignal<string | null>(null),\n id: inertSignal<string | null>(null),\n executionState: inertSignal(null),\n } as unknown as QuerySnapshot<TArgs>;\n\n const createSnapshot = (): QuerySnapshot<TArgs> => ({ ...base, isAlive: inertSignal(false) });\n\n // A DestroyRef that is already destroyed: callbacks registered on it are dropped rather than\n // stored, so nothing keeps this object (or its registrant) alive.\n const destroyRef = {\n destroyed: true,\n onDestroy: () => noop,\n } as unknown as DestroyRef;\n\n return {\n ...base,\n execute: noop,\n createSnapshot,\n reset: noop,\n asReadonly: () => ({ ...base, createSnapshot }),\n subtle: {\n destroy: noop,\n setResponse: noop,\n setLoading: noop,\n setError: noop,\n request: inertSignal(null),\n destroyRef,\n injector: Injector.NULL,\n },\n } as unknown as Query<TArgs>;\n};\n","import { HttpHeaders } from '@angular/common/http';\nimport {\n DestroyRef,\n effect,\n inject,\n Injector,\n isDevMode,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n AnyNewQuery,\n legacyPrepareWithoutInjectionContext,\n Query,\n QueryArgs,\n QueryCreator,\n RequestArgs,\n ResponseType,\n} from '../../http';\nimport { EntityStore } from '../entity';\nimport { BaseArguments, QueryEntityConfig, V2QueryConfig, V2RouteType, WithHeaders, WithInjector } from '../query';\nimport { addQueryContainerHandling, QueryContainerConfig } from '../utils';\nimport { createInertQuery } from './inert-query';\nimport { LegacyQuery } from './legacy-query';\n\n/**\n * Whether an injector can still be used. A destroyed `R3Injector` throws on `get()` rather than\n * answering, so the throw itself is the answer; a node injector hands back a `DestroyRef` that\n * reports its own state.\n */\nconst isInjectorUsable = (injector: Injector) => {\n try {\n return injector.get(DestroyRef, null, { optional: true })?.destroyed !== true;\n } catch {\n return false;\n }\n};\n\nexport type LegacyArgumentsOfQueryArgs<T extends QueryArgs> = Omit<T, 'response' | 'headers'> & WithHeaders;\nexport type QueryArgsOfLegacyArguments<T extends BaseArguments | undefined, J> = Omit<T, 'mock' | 'headers'> & {\n headers?: HttpHeaders;\n response?: J;\n};\n\nexport type CreateLegacyQueryCreatorOptions<\n TArgs extends QueryArgs,\n Response,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> = {\n creator: QueryCreator<TArgs>;\n\n /**\n * Object containing the query's entity store information.\n */\n entity?: QueryEntityConfig<Store, Data, Response, LegacyArgumentsOfQueryArgs<TArgs>, Id>;\n\n /**\n * The name this creator is exported under, used to name it in error messages. Emitted by the\n * `migrate-to-query-v3` generator; worth passing by hand too, since without it a `prepare()`\n * called outside an injection context can only be located by bisection.\n */\n name?: string;\n};\n\nexport type WithLegacyConfig = {\n /**\n * Additional configuration for this query.\n */\n config?: V2QueryConfig & {\n /**\n * If set to true, the query will be destroyed when it either succeeds or fails.\n */\n destroyOnResponse?: boolean;\n };\n};\n\nexport type LegacyQueryPrepareFn<\n Arguments extends BaseArguments | undefined,\n Response,\n Route extends V2RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n TNewQuery extends AnyNewQuery,\n> = (\n args: Arguments & WithHeaders & WithLegacyConfig & WithInjector,\n) => LegacyQuery<Response, Arguments, Route, Store, Data, Id, TNewQuery>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyLegacyQueryCreator = LegacyQueryCreator<any, any, any, any, any>;\n\nexport class LegacyQueryCreator<\n TArgs extends QueryArgs,\n Response extends ResponseType<TArgs>,\n Store extends EntityStore<unknown>,\n Id,\n Data = Response,\n> {\n constructor(public options: CreateLegacyQueryCreatorOptions<TArgs, Response, Store, Data, Id>) {}\n\n prepare: LegacyQueryPrepareFn<\n LegacyArgumentsOfQueryArgs<TArgs>,\n Response,\n V2RouteType<LegacyArgumentsOfQueryArgs<TArgs>>,\n Store,\n Data,\n Id,\n Query<TArgs>\n > = (args: LegacyArgumentsOfQueryArgs<TArgs> & WithHeaders & WithLegacyConfig & WithInjector) => {\n // v2's `prepare()` needed no injection context, so plenty of call sites are plain callbacks.\n // Angular's raw NG0203 names neither the query nor the call site, which makes those a bisection\n // exercise — replace it with an error that does.\n const injector =\n args?.injector ??\n (() => {\n try {\n return inject(Injector);\n } catch {\n throw legacyPrepareWithoutInjectionContext(this.options.name);\n }\n })();\n\n let headers = new HttpHeaders();\n\n if (args?.headers) {\n Object.entries(args.headers).forEach(([key, value]) => {\n if (value) {\n headers = headers.set(key, value);\n }\n });\n }\n\n const queryArgs = {\n ...(args?.body ? { body: args.body } : {}),\n ...(args?.pathParams ? { pathParams: args.pathParams } : {}),\n ...(args?.queryParams ? { queryParams: args.queryParams } : {}),\n headers,\n } as RequestArgs<TArgs>;\n\n // A captured component injector routinely outlives its component here: a debounced search\n // resolving after navigation, an RxJS callback on a stream torn down a tick later. That is not\n // a programming error the way it would be in new code — v2 had no injector to destroy — so it\n // yields a query that does nothing instead of an NG0205 raised from the view's cleanup phase.\n if (!isInjectorUsable(injector)) {\n if (isDevMode()) {\n console.warn(\n `${this.options.name ? `\"${this.options.name}\"` : 'A legacy query'}.prepare() was called with a destroyed injector, so an inert query was returned. ` +\n `This usually means a callback outlived the component whose injector it captured — guard the call site with DestroyRef.onDestroy, or pass an injector that outlives it.`,\n );\n }\n\n return new LegacyQuery<\n Response,\n LegacyArgumentsOfQueryArgs<TArgs>,\n V2RouteType<LegacyArgumentsOfQueryArgs<TArgs>>,\n Store,\n Data,\n Id,\n Query<TArgs>\n >(createInertQuery<TArgs>(), queryArgs, this.options.entity, true);\n }\n\n return runInInjectionContext(injector, () => {\n return untracked(() => {\n const newQuery = this.options.creator({\n onlyManualExecution: true,\n injector,\n silenceMissingWithArgsFeatureError: true,\n });\n\n const legacyQuery = new LegacyQuery<\n Response,\n LegacyArgumentsOfQueryArgs<TArgs>,\n V2RouteType<LegacyArgumentsOfQueryArgs<TArgs>>,\n Store,\n Data,\n Id,\n Query<TArgs>\n >(newQuery, queryArgs, this.options.entity);\n\n if (args?.config?.destroyOnResponse) {\n const destroyEffect = effect(() => {\n if (newQuery.executionState()?.type === 'success' || newQuery.executionState()?.type === 'failure') {\n legacyQuery.destroy();\n destroyEffect.destroy();\n }\n });\n }\n\n return legacyQuery;\n });\n });\n };\n createSubject = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\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 createSignal = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\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 behaviorSubject = this.createSubject;\n}\n\n/**\n * Creates a legacy query creator.\n *\n * **NOTE**: This is a temporary solution to support legacy queries. It will be removed in the future.\n *\n * **DO NOT TURN NEW QUERY CREATORS INTO LEGACY ONES MANUALLY. THIS IS ONLY NEEDED FOR MIGRATION PURPOSES.**\n */\nexport const createLegacyQueryCreator = <\n TArgs extends QueryArgs,\n Response extends ResponseType<TArgs>,\n Store extends EntityStore<unknown>,\n Id,\n Data = Response,\n>(\n options: CreateLegacyQueryCreatorOptions<TArgs, Response, Store, Data, Id>,\n): LegacyQueryCreator<TArgs, Response, Store, Id, Data> => {\n return new LegacyQueryCreator<TArgs, Response, Store, Id, Data>(options);\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { assertInInjectionContext, isDevMode, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Paginated } from '@ethlete/types';\nimport { BehaviorSubject, Observable, filter, map, of, switchMap, takeWhile, tap } from 'rxjs';\nimport { transformGql } from '../../gql';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../../http';\nimport { QueryForm } from '../../query-form';\nimport { EntityStore } from '../entity';\nimport { AnyLegacyQuery, isLegacyQuery } from '../interop';\nimport { V2QueryClient } from '../query-client';\nimport {\n AnyV2QueryCreator,\n QueryDataOf,\n QueryResponseOf,\n QueryStoreIdOf,\n QueryStoreOf,\n V2QueryArgsOf,\n V2QueryCreator,\n} from '../query-creator';\nimport { Method, RequestHeaders, RequestHeadersMethodMap, transformMethod } from '../request';\nimport { QueryContainerConfig, addQueryContainerHandling } from '../utils';\nimport {\n AnyGqlQueryConfig,\n AnyQueryCollection,\n AnyQueryCollectionData,\n AnyQueryCreatorCollection,\n AnyRestQueryConfig,\n AnyV2Query,\n BaseArguments,\n Cancelled,\n Failure,\n GqlQueryConfig,\n Loading,\n Prepared,\n QueryCollectionOf,\n QueryStateResponseOf,\n QueryStateType,\n ResetPageOnErrorOperatorConfig,\n Success,\n V2QueryState,\n V2RouteType,\n} from './query.types';\n\ntype OmitNull<T> = T extends null ? never : T;\n\nexport function filterSuccess() {\n return function <T extends V2QueryState | 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 V2QueryState | 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 V2QueryState | 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 V2QueryState | 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 V2QueryState | 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 AnyV2Query | AnyLegacyQuery | null, Data extends QueryDataOf<T>>(source: Observable<T>) {\n return source.pipe(switchMap((value) => value?.state$ ?? of(null))) as Observable<V2QueryState<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<V2QueryState<Data> | null>;\n };\n}\n\nexport const resetPageOnError =\n <T extends AnyV2Query | AnyLegacyQuery | null | undefined, J extends QueryForm<any>>(\n config: ResetPageOnErrorOperatorConfig<J>,\n ) =>\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 416:\n queryForm.form.controls[pageControlKey]?.patchValue(1);\n break;\n\n // The page might be invalid (in dev mode, code is 500)\n case 500:\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: V2QueryState | null | undefined): state is Loading =>\n state?.type === QueryStateType.Loading;\n\nexport const isQueryStateSuccess = (state: V2QueryState | null | undefined): state is Success =>\n state?.type === QueryStateType.Success;\n\nexport const isQueryStateFailure = (state: V2QueryState | null | undefined): state is Failure =>\n state?.type === QueryStateType.Failure;\n\nexport const isQueryStateCancelled = (state: V2QueryState | null | undefined): state is Cancelled =>\n state?.type === QueryStateType.Cancelled;\n\nexport const isQueryStatePrepared = (state: V2QueryState | null | undefined): state is Prepared =>\n state?.type === QueryStateType.Prepared;\n\nexport const isAutoRefresh = (state: V2QueryState | 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 V2RouteType<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 AnyV2Query | AnyLegacyQuery>(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\nexport const createQueryCollection = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n) => new BehaviorSubject<R | null>(null);\n\nexport const createQueryCollectionSubject = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(createQueryCollectionSubject);\n\n const subject = new BehaviorSubject<R | null>(null);\n\n addQueryContainerHandling(\n subject.pipe(map((s) => s?.query ?? null)),\n () => subject.getValue()?.query ?? null,\n config,\n );\n\n return subject;\n};\n\nexport const createQueryCollectionSignal = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(createQueryCollectionSignal);\n\n const _signal = signal<R | null>(null);\n\n addQueryContainerHandling(\n toObservable(_signal).pipe(map((s) => s?.query ?? null)),\n () => _signal()?.query ?? null,\n config,\n );\n\n return _signal;\n};\n\nexport const extractQuery = <T extends AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>(v: T) =>\n (isQuery(v) ? v : isLegacyQuery(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 AnyV2QueryCreator,\n Arguments extends V2QueryArgsOf<QC>,\n Response extends QueryResponseOf<QC>,\n Store extends QueryStoreOf<QC>,\n Data extends QueryDataOf<QC>,\n Route extends V2RouteType<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 V2QueryCreator<OverrideArguments, OverrideResponse, Route, Store, Data, Id>;\n};\n\nexport const computeQueryMethod = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: V2QueryClient;\n}) => {\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: V2QueryClient;\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: V2QueryClient;\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: V2QueryClient;\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: V2QueryClient;\n args?: BaseArguments;\n}) => {\n if (\n isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia))\n ) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n\n let params = query(config.args?.variables);\n\n if (config.args?.queryParams) {\n params = { ...params, ...config.args?.queryParams };\n }\n\n return params;\n }\n\n return config.args?.queryParams;\n};\n\nexport const paginatedEntityValueUpdater =\n <\n T extends Paginated<unknown>,\n Args extends BaseArguments,\n Entity,\n J extends (T extends Paginated<infer X> ? X : never),\n >(\n findFn: (val: J, entity: Entity) => boolean,\n ) =>\n ({ response, rawResponse, entity }: { rawResponse: T; response: T; args: Args; entity: Entity }) => {\n const indexOfEntityRaw = rawResponse.items.findIndex((item) => findFn(item as J, entity));\n const indexOfEntity = response.items.findIndex((item) => findFn(item as J, entity));\n\n if (indexOfEntity === -1 || indexOfEntityRaw === -1) {\n return null;\n }\n\n const newRawResponse = {\n ...rawResponse,\n items: [\n ...rawResponse.items.slice(0, indexOfEntityRaw),\n entity,\n ...rawResponse.items.slice(indexOfEntityRaw + 1),\n ],\n };\n\n const newResponse = {\n ...response,\n items: [...response.items.slice(0, indexOfEntity), entity, ...response.items.slice(indexOfEntity + 1)],\n };\n\n return {\n response: newResponse,\n rawResponse: newRawResponse,\n };\n };\n","import { untracked } from '@angular/core';\nimport {\n BehaviorSubject,\n combineLatest,\n EMPTY,\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 { V2QueryClient, v2ShouldCacheQuery } from '../query-client';\nimport { request, RequestError, RequestEvent, RequestHeaders } from '../request';\nimport {\n BaseArguments,\n ExecuteQueryOptions,\n GqlQueryConfig,\n PollConfig,\n QueryAutoRefreshConfig,\n QueryStateMeta,\n QueryStateType,\n RestQueryConfig,\n V2QueryState,\n V2RouteType,\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 V2Query<\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends V2RouteType<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 _memoizedState$: Observable<V2QueryState<Data>> | null = null;\n\n private readonly _state$ = new BehaviorSubject<V2QueryState<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<V2QueryState<Data>> {\n if (!this._memoizedState$) {\n this._memoizedState$ = 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 return this._memoizedState$;\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 v2ShouldCacheQuery(this._queryConfig.method);\n }\n\n get _isInMockMode() {\n return !!this._arguments?.mock;\n }\n\n constructor(\n private readonly _client: V2QueryClient,\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 switchMap(([state, tokens]) => {\n if (state && isQueryStateLoading(state)) {\n return EMPTY;\n }\n\n if (isQueryStateFailure(state)) {\n this._updateEntityState({ type: 'failure', error: state.error, headers: {} }, meta, options);\n return EMPTY;\n }\n\n if (!state && !(tokens?.token || tokens?.refreshToken)) {\n return EMPTY;\n }\n\n return of(true as const);\n }),\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 !== 401 ||\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: V2QueryState<Response>): Observable<V2QueryState<Data>> {\n if (!isQueryStateSuccess(s) || !this._queryConfig.entity?.get) {\n return of(s) as Observable<V2QueryState<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: V2QueryState<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 { AnyV2QueryCreator } from '../query-creator';\nimport { AuthProvider } from './auth-provider.types';\nimport { BasicAuthProvider } from './basic-auth-provider';\nimport { V2BearerAuthProvider } 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 AnyV2QueryCreator>(\n authProvider: AuthProvider,\n): authProvider is V2BearerAuthProvider<T> => authProvider instanceof V2BearerAuthProvider;\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 { AnyV2QueryCreator, 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 V2BearerAuthProvider<T extends AnyV2QueryCreator> 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 forceRefresh() {\n return this._refreshQuery();\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\n .prepare(args)\n .execute({ skipCache: true, _isUnauthorizedRetry: 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 { signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { createProvider } from '@ethlete/core';\n\nexport const [provideInfinityQueryResponseDelay, injectInfinityQueryResponseDelay] = createProvider(\n () => {\n const enabled = signal(false);\n const enabled$ = toObservable(enabled);\n\n return {\n enabled,\n enabled$,\n };\n },\n { name: 'Infinity Query Response Delay' },\n);\n","import { BehaviorSubject, Observable, combineLatest, map, of, shareReplay, switchMap, tap } from 'rxjs';\nimport { AnyLegacyQueryCreator } from '../interop';\nimport { filterSuccess } from '../query';\nimport { AnyV2QueryCreator, ConstructQuery, QueryDataOf, V2QueryArgsOf } from '../query-creator';\nimport { InfinityQueryConfig, InfinityQueryParamLocation } from './infinity-query.types';\n\nexport class InfinityQuery<\n QueryCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator,\n Query extends ConstructQuery<QueryCreator>,\n Args extends V2QueryArgsOf<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 { AnyLegacyQueryCreator } from '../interop';\nimport { AnyV2QueryCreator, QueryDataOf, V2QueryArgsOf } from '../query-creator';\nimport { InfinityQueryConfig, PageParamCalculatorOptions } from './infinity-query.types';\n\nexport const createInfinityQueryConfig = <\n QueryCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator,\n Args extends V2QueryArgsOf<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 } from '@ethlete/core';\nimport { BehaviorSubject, combineLatest, Subject, takeUntil, tap, withLatestFrom } from 'rxjs';\nimport { InfinityQuery, InfinityQueryConfig, InfinityQueryOf } from '../infinite-query';\nimport { AnyLegacyQueryCreator, isLegacyQuery } from '../interop';\nimport {\n BaseArguments,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n switchQueryState,\n} from '../query';\nimport { AnyV2QueryCreator, ConstructQuery } from '../query-creator';\nimport { RequestError } from '../request';\nimport {\n injectInfinityQueryResponseDelay,\n provideInfinityQueryResponseDelay,\n} from './infinity-query-response-delay-provider';\n\ntype InfinityQueryContext<\n Q extends InfinityQueryConfig<DirectiveQueryCreator, 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\ntype DirectiveQueryCreator = AnyV2QueryCreator | AnyLegacyQueryCreator;\n\n@Directive({\n selector: '[etInfinityQuery]',\n exportAs: 'etInfinityQuery',\n\n providers: [\n { provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective },\n provideInfinityQueryResponseDelay(),\n ],\n})\nexport class InfinityQueryDirective<\n Q extends InfinityQueryConfig<DirectiveQueryCreator, 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 _infinityQueryResponseDelay = injectInfinityQueryResponseDelay({ host: true });\n\n private readonly _data$ = new BehaviorSubject<Q['response']['arrayType']>([]);\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('etInfinityQuery')\n get infinityQuery(): Q {\n return this._infinityQuery;\n }\n set infinityQuery(v: Q) {\n this._cleanup();\n\n if (v.enabled === false) {\n this._infinityQuery = v;\n this._infinityQueryInstance = null;\n return;\n }\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<DirectiveQueryCreator, BaseArguments | undefined, any, unknown[]>,\n >(_dir: InfinityQueryDirective<Q>, _ctx: unknown): _ctx is InfinityQueryContext<Q> {\n return true;\n }\n\n constructor() {\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);\n }\n\n private _setupInfinityQuery(config: Q) {\n const instance = new InfinityQuery(config as any, this._destroy$) as InfinityQueryOf<Q>;\n\n combineLatest([\n instance.currentQuery$.pipe(switchQueryState(), withLatestFrom(instance.currentQuery$)),\n this._infinityQueryResponseDelay.enabled$,\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\n if (isLegacyQuery(currentQuery)) {\n this._errorHandler.handleError(state.error.httpErrorResponse);\n }\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 { computed, Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { fromEvent, Subject, takeUntil } from 'rxjs';\nimport { INFINITY_QUERY_TOKEN, InfinityQueryDirective } from './infinity-query.directive';\n\n@Directive({\n selector: '[etInfinityQueryTrigger], et-infinity-query-trigger',\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 readonly scrollContainerSelector = input<string | null>(null);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n infinityQueryOverride = input<InfinityQueryDirective<any> | null>(null);\n\n infinityQuery = computed(() => this.infinityQueryOverride() ?? this._infinityQuery);\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 const scrollContainerSelector = this.scrollContainerSelector();\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: scrollContainerSelector ? document.querySelector(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 {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n TemplateRef,\n ViewContainerRef,\n effect,\n inject,\n input,\n untracked,\n} from '@angular/core';\nimport { AnyLegacyQuery, isLegacyQuery } from '../interop';\nimport {\n AnyQueryCollection,\n AnyV2Query,\n QueryCollectionKeysOf,\n QueryOf,\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';\nimport { queryStateSignal } from '../utils';\n\nexport type QueryDirectiveContext<Q extends QueryDirectiveType | 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\nexport type QueryDirectiveType = AnyV2Query | AnyLegacyQuery | AnyQueryCollection;\n\n@Directive({\n selector: '[etQuery]',\n})\nexport class QueryDirective<Q extends QueryDirectiveType | null> {\n private errorHandler = inject(ErrorHandler);\n private cdr = inject(ChangeDetectorRef);\n\n private readonly _viewContext: QueryDirectiveContext<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 query = input.required<Q>({ alias: 'etQuery' });\n\n cache = input(false, { alias: 'etQueryCache' });\n\n queryState = queryStateSignal(this.query);\n\n static ngTemplateContextGuard<Q extends QueryDirectiveType | null>(\n _dir: QueryDirective<Q>,\n _ctx: unknown,\n ): _ctx is QueryDirectiveContext<Q> {\n return true;\n }\n\n constructor() {\n inject(ViewContainerRef).createEmbeddedView(inject(TemplateRef), this._viewContext);\n\n effect(() => {\n const query = extractQuery(this.query());\n\n untracked(() => {\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 this._viewContext.scope = isQueryCollection(query) ? (query.type as QueryCollectionKeysOf<Q>) : null;\n this._viewContext.query = query as QueryOf<Q>;\n });\n });\n\n effect(() => {\n const state = this.queryState();\n const cache = this.cache();\n\n untracked(() => {\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 (!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 if (isLegacyQuery(extractQuery(this.query()))) {\n this.errorHandler.handleError(state.error.httpErrorResponse);\n }\n } else {\n this._viewContext.error = null;\n }\n\n this.cdr.markForCheck();\n });\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AnyV2Query } from '../../query';\n\n@Pipe({ name: 'queryShortName' })\nexport class QueryShortNamePipe implements PipeTransform {\n transform(value: AnyV2Query) {\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 { V2QueryClient } from '../../query-client';\n\nexport type QueryClientDevtoolsOptions = {\n displayName?: string;\n client: V2QueryClient;\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 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 { AnyV2Query, 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 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 const configs = this.queryClientConfigs;\n const index = configs.length === 1 ? 0 : (this.selectedClientId() ?? 0);\n const config = configs[index] ?? configs[0];\n\n if (!config) {\n throw new Error('QueryDevtools: no query client configs registered');\n }\n\n return config;\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<AnyV2Query[]>([]);\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<AnyV2Query[]>([]);\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<AnyV2Query> = (_, { _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: AnyV2Query) {\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>{{ $safeNavigationMigration(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 { HttpErrorResponse } from '@angular/common/http';\nimport { FieldTree, ReadonlyFieldTree, ValidationError } from '@angular/forms/signals';\nimport { FormViolationView } from '@ethlete/types';\nimport { createQueryErrorResponse, isQueryErrorResponse } from './query-error-response';\nimport { isSymfonyFormViolationListError, isSymfonyListError } from './query-error-response-utils';\n\n/** `kind` of a `ValidationError` created from a single server violation. */\nexport const SERVER_VIOLATION_ERROR_KIND = 'etServerViolation';\n\n/** `kind` of the form-level fallback error created when a failed request carries no violations. */\nexport const SERVER_ERROR_KIND = 'etServerError';\n\n/** A signal-forms validation error created from a single server violation. */\nexport type ServerViolationValidationError = ValidationError.WithOptionalFieldTree & {\n kind: typeof SERVER_VIOLATION_ERROR_KIND;\n message: string;\n /** The violation this error was created from. */\n violation: FormViolationView;\n};\n\n/** The form-level fallback error for a failed request that carries no violations. */\nexport type ServerValidationError = ValidationError.WithOptionalFieldTree & {\n kind: typeof SERVER_ERROR_KIND;\n message: string;\n};\n\n/**\n * Extracts the violation list from a failed request in any of the shapes it may reach you:\n * a `QueryErrorResponse` (from `query.error()` or a settled snapshot), a raw `HttpErrorResponse`,\n * an already-unwrapped error body, or a plain violation array. Returns `[]` when the error\n * carries no violations.\n */\nexport const extractFormViolations = (error: unknown): FormViolationView[] => {\n if (!error) return [];\n\n const body = isQueryErrorResponse(error) ? error.raw.error : error instanceof HttpErrorResponse ? error.error : error;\n\n if (isSymfonyFormViolationListError(body)) {\n return body.violations;\n }\n\n if (isSymfonyListError(body)) {\n return body;\n }\n\n return [];\n};\n\nexport type MapViolationsToFormErrorsOptions<TModel> = {\n /**\n * The field tree the violation property paths are resolved against — usually the form root\n * (or the `field` passed to a signal-forms `submit()` action).\n */\n fieldTree: FieldTree<TModel>;\n\n /**\n * The failed request's error in any shape `extractFormViolations` accepts: a\n * `QueryErrorResponse`, a raw `HttpErrorResponse`, an error body, or a violation array.\n */\n error: unknown;\n\n /**\n * Rewrites a violation's property path before it is resolved against the field tree — use it\n * when the API's payload shape differs from the form model. Return `null` to treat the\n * violation as unmapped.\n */\n rewritePath?: (path: string, violation: FormViolationView) => string | null;\n\n /**\n * Overrides how a violation whose path doesn't resolve to a field is turned into an error.\n * Return `null` to drop the violation. By default an unmapped violation becomes a form-level\n * error (no `fieldTree`), which signal forms attaches to the submitted field.\n */\n onUnmappedViolation?: (violation: FormViolationView) => ValidationError.WithOptionalFieldTree | null;\n};\n\n/**\n * Maps a failed request's violations onto a signal-forms field tree as validation errors —\n * the bridge between an API's violation list (`@ethlete/types` `FormViolationView`) and\n * signal forms.\n *\n * Each violation's `propertyPath` (e.g. `items[2].name`) is resolved against `fieldTree`; a\n * resolved violation becomes a `ServerViolationValidationError` bound to that field, an\n * unresolved one becomes a form-level error (customizable via `onUnmappedViolation`). A failed\n * request that carries no violations at all degrades to form-level `ServerValidationError`s\n * built from the normalized error message — so returning this function's result from a\n * `submit()` action never silently succeeds on failure.\n *\n * ```ts\n * await submit(this.form, async (field) => {\n * const snapshot = await executeUntilSettled(this.createPost, { args: { body: field().value() } });\n * const error = snapshot.error();\n *\n * if (!error) return;\n *\n * return mapViolationsToFormErrors({ fieldTree: field, error });\n * });\n * ```\n */\nexport const mapViolationsToFormErrors = <TModel>(\n options: MapViolationsToFormErrorsOptions<TModel>,\n): ValidationError.WithOptionalFieldTree[] => {\n const { fieldTree, error, rewritePath, onUnmappedViolation } = options;\n\n if (error === null || error === undefined) return [];\n\n const violations = extractFormViolations(error);\n\n if (!violations.length) {\n // An empty violation array is an explicit \"nothing to map\" — only unrecognized error\n // shapes degrade to the form-level fallback.\n if (Array.isArray(error) && !error.length) return [];\n\n return createFallbackErrors(error);\n }\n\n const errors: ValidationError.WithOptionalFieldTree[] = [];\n\n for (const violation of violations) {\n const rawPath = violation.propertyPath;\n const path = rawPath && rewritePath ? rewritePath(rawPath, violation) : rawPath;\n const resolvedFieldTree = path ? resolveFieldTreePath(fieldTree, path) : null;\n\n if (resolvedFieldTree) {\n const mappedError: ServerViolationValidationError = {\n kind: SERVER_VIOLATION_ERROR_KIND,\n message: violation.message,\n fieldTree: resolvedFieldTree,\n violation,\n };\n\n errors.push(mappedError);\n } else if (onUnmappedViolation) {\n const customError = onUnmappedViolation(violation);\n\n if (customError) {\n errors.push(customError);\n }\n } else {\n const unmappedError: ServerViolationValidationError = {\n kind: SERVER_VIOLATION_ERROR_KIND,\n message: violation.message,\n violation,\n };\n\n errors.push(unmappedError);\n }\n }\n\n return errors;\n};\n\nconst createFallbackErrors = (error: unknown): ServerValidationError[] => {\n const queryError = isQueryErrorResponse(error) ? error : createQueryErrorResponse(error);\n\n if (queryError.isList) {\n return queryError.errors.map((item) => ({ kind: SERVER_ERROR_KIND, message: item.message }));\n }\n\n return [{ kind: SERVER_ERROR_KIND, message: queryError.error.message }];\n};\n\n/** Splits a property path like `items[2].name` or `translations['de'].title` into its segments. */\nconst parsePropertyPath = (path: string) => {\n return path\n .replace(/\\[(['\"]?)([^\\]]*?)\\1\\]/g, '.$2')\n .split('.')\n .filter((segment) => segment.length > 0);\n};\n\nconst resolveFieldTreePath = <TModel>(\n fieldTree: FieldTree<TModel>,\n path: string,\n): ReadonlyFieldTree<unknown> | null => {\n let current: unknown = fieldTree;\n\n for (const segment of parsePropertyPath(path)) {\n if (current === null || (typeof current !== 'object' && typeof current !== 'function')) {\n return null;\n }\n\n current = (current as Record<string, unknown>)[segment];\n }\n\n // A field tree node is callable (calling it returns the field state) — anything else means the\n // path left the tree (e.g. an index past the array's current length).\n return typeof current === 'function' ? (current as ReadonlyFieldTree<unknown>) : null;\n};\n","import { Resource, Signal } from '@angular/core';\nimport {\n FieldContext,\n FieldTree,\n LogicFn,\n PathKind,\n SchemaPath,\n SchemaPathRules,\n TreeValidationResult,\n validateAsync,\n} from '@angular/forms/signals';\nimport { FormViolationView } from '@ethlete/types';\nimport { extractFormViolations, mapViolationsToFormErrors } from './query-signal-forms';\n\n// Shared core for the query-backed async validators (`validateWithQuery` /\n// `validateWithV2Query`). Everything except how the query is executed — the `factory` that turns\n// the debounced params into a `Resource` — is identical between the v2 and v3 variants, so it is\n// factored here and imported by both. This module is intentionally NOT part of the `http` barrel;\n// it is internal plumbing consumed by direct path (the legacy variant already imports from `http`).\n\n/** Default debounce (ms) applied before a validate request runs, mirroring `selectOptionsFrom*Query`. */\nexport const DEFAULT_QUERY_VALIDATION_DEBOUNCE = 300;\n\n/**\n * Turns a failed validate request into field errors — the default `onError` mapping shared by both\n * validators. Reuses the existing `mapViolationsToFormErrors` bridge: a `422` violation list is\n * resolved onto the child fields by `propertyPath`, while a network / non-violation error degrades\n * to a non-swallowed form-level error. A caller-supplied `mapViolations` overrides only the\n * violation → error step (it receives the already-extracted violations).\n */\nexport const mapQueryValidationError = <TValue, TPathKind extends PathKind>(\n error: unknown,\n ctx: FieldContext<TValue, TPathKind>,\n mapViolations?: (violations: FormViolationView[], ctx: FieldContext<TValue, TPathKind>) => TreeValidationResult,\n): TreeValidationResult => {\n // Angular's `resource()` wraps a thrown non-`Error` (our `QueryErrorResponse` / `HttpErrorResponse`)\n // into an `Error` and stashes the original on `.cause`, so unwrap it before extraction.\n const cause = error instanceof Error && error.cause !== undefined ? error.cause : error;\n\n if (mapViolations) {\n return mapViolations(extractFormViolations(cause), ctx);\n }\n\n // `ctx.fieldTree` is the (read-only) tree of the validated field; `propertyPath`s resolve against\n // it. The cast bridges `ReadonlyFieldTree` → `FieldTree` — `mapViolationsToFormErrors` only walks\n // and reads the tree, never mutates it.\n return mapViolationsToFormErrors({ fieldTree: ctx.fieldTree as unknown as FieldTree<TValue>, error: cause });\n};\n\n/** Config shared by both validators, minus the query engine specifics each variant layers on top. */\nexport type QueryValidatorCoreConfig<TValue, TParams, TResult, TPathKind extends PathKind> = {\n /** Builds the request params from the field context — runs reactively on the field value. */\n params: (ctx: FieldContext<TValue, TPathKind>) => TParams;\n /**\n * Creates the `Resource` that runs the query for the current (debounced) params. The only piece\n * that differs between the v2 and v3 variants.\n */\n factory: (params: Signal<TParams | undefined>) => Resource<TResult | undefined>;\n /** Debounce before the request runs, in ms. @default {@link DEFAULT_QUERY_VALIDATION_DEBOUNCE} */\n debounce?: number;\n /** Gate the validation — return `false` to skip the request (e.g. an empty or invalid value). */\n when?: LogicFn<TValue, boolean, TPathKind>;\n /** Override the default violation → error mapping. Receives the extracted violation list. */\n mapViolations?: (violations: FormViolationView[], ctx: FieldContext<TValue, TPathKind>) => TreeValidationResult;\n};\n\n/**\n * Binds a query-backed async validator to `path` via `validateAsync`. Success (`204` / any `2xx`\n * with no violation body) reports no errors; a failed request is mapped by\n * {@link mapQueryValidationError}. Async validation only runs once the field's synchronous\n * validators pass and while `when` holds — signal forms feeds the `factory` `undefined` params when\n * the request shouldn't run, so the resource stays idle.\n */\nexport const applyQueryAsyncValidator = <TValue, TParams, TResult, TPathKind extends PathKind = PathKind.Root>(\n path: SchemaPath<TValue, SchemaPathRules.Supported, TPathKind>,\n config: QueryValidatorCoreConfig<TValue, TParams, TResult, TPathKind>,\n): void => {\n validateAsync<TValue, TParams, TResult, TPathKind>(path, {\n params: config.params,\n debounce: config.debounce ?? DEFAULT_QUERY_VALIDATION_DEBOUNCE,\n factory: config.factory,\n when: config.when,\n onSuccess: () => null,\n onError: (error, ctx) => mapQueryValidationError(error, ctx, config.mapViolations),\n });\n};\n","import { Resource, resource } from '@angular/core';\nimport { FieldContext, PathKind, SchemaPath, SchemaPathRules, TreeValidationResult } from '@angular/forms/signals';\nimport { FormViolationView } from '@ethlete/types';\nimport { Observable, filter, firstValueFrom, take } from 'rxjs';\nimport { applyQueryAsyncValidator } from '../http/query-validator-core';\nimport { AnyLegacyQueryCreator } from './interop';\nimport { AnyV2QueryCreator, QueryDataOf } from './query-creator';\nimport { V2QueryState, isQueryStateFailure, isQueryStateSuccess } from './query';\n\n// The legacy twin of `../http/validate-with-query.ts` for apps still on the class-based\n// `V2QueryClient`. Same signature and behavior; only the query engine differs — it prepares and\n// executes a v2/legacy query and awaits its settled `state$`, where the v3 variant awaits a query\n// snapshot. The shared error-mapping and `validateAsync` wiring live in `query-validator-core`.\n\n/** The args accepted by the creator's `prepare()` — includes `mock`/`config` extras. */\nexport type V2PrepareArgsOf<TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator> = Parameters<\n TCreator['prepare']\n>[0];\n\n/** Config for {@link validateWithV2Query}. */\nexport type ValidateWithV2QueryConfig<\n TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator,\n TValue,\n TPathKind extends PathKind,\n> = {\n /**\n * The legacy query creator to run (from `V2QueryClient`'s `post`/`get`, or a\n * `createLegacyQueryCreator` interop wrapper). A fresh query is prepared and executed for each\n * validate request. Running it through the client is the point: auth, base route, caching and\n * error normalization all apply, unlike a raw `httpResource`.\n */\n queryCreator: TCreator;\n /**\n * Builds the `prepare()` args from the field context. Runs reactively on the field value\n * (debounced), exactly like `validateAsync`'s `params` — e.g.\n * `(ctx) => ({ pathParams: { id }, body: { ...ctx.value() } })`.\n */\n args: (ctx: FieldContext<TValue, TPathKind>) => V2PrepareArgsOf<TCreator>;\n /** Debounce before the request runs, in ms. @default 300 */\n debounce?: number;\n /** Gate the validation — return `false` to skip the request (e.g. an empty or invalid value). */\n when?: (ctx: FieldContext<TValue, TPathKind>) => boolean;\n /**\n * Override the default violation → error mapping. Receives the violations extracted from the\n * failed request; return the errors to report (targeting child fields via their `fieldTree`).\n * Defaults to `mapViolationsToFormErrors`, resolving each violation's `propertyPath` against the\n * validated field.\n */\n mapViolations?: (violations: FormViolationView[], ctx: FieldContext<TValue, TPathKind>) => TreeValidationResult;\n};\n\n/** The subset of the v2/legacy query surface the validator drives. */\ntype PreparedV2Query<TData> = {\n execute: () => void;\n abort: () => void;\n state$: Observable<V2QueryState<TData>>;\n};\n\n/**\n * Binds a query-backed async validator to a signal-forms field, adapting a **legacy v2**\n * `@ethlete/query` query into what `validateAsync` consumes — the `V2QueryClient` counterpart of\n * {@link validateWithQuery}, so apps that haven't migrated yet can still validate against the\n * server. The query runs through the client (bearer auth, base route, caching, Symfony error\n * normalization), where a raw `httpResource` would fire unauthenticated and bypass the pipeline.\n *\n * The query is prepared and executed (debounced) as the field value changes, only after the\n * field's synchronous validators pass. A `204` / successful response reports no errors; a\n * `422 FormViolationListView` maps each violation onto its child field by `propertyPath`; a\n * network / other error degrades to a non-swallowed form-level error.\n *\n * Call it from a schema definition, the same place you'd call `validateAsync`:\n *\n * ```ts\n * const schema = schema<OpportunityEmail>((p) => {\n * validateWithV2Query(p, {\n * queryCreator: postOpportunityEmailValidate, // hubApiClient.post({ ... })\n * args: (ctx) => ({ pathParams: { opportunityId }, body: { ...ctx.value() } }),\n * });\n * });\n * ```\n */\nexport const validateWithV2Query = <\n TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator,\n TValue,\n TPathKind extends PathKind = PathKind.Root,\n>(\n path: SchemaPath<TValue, SchemaPathRules.Supported, TPathKind>,\n config: ValidateWithV2QueryConfig<TCreator, TValue, TPathKind>,\n): void => {\n type TParams = V2PrepareArgsOf<TCreator>;\n type TResult = QueryDataOf<TCreator>;\n\n applyQueryAsyncValidator<TValue, TParams, TResult, TPathKind>(path, {\n params: config.args,\n debounce: config.debounce,\n when: config.when,\n mapViolations: config.mapViolations,\n factory: (params) =>\n resource<TResult | undefined, TParams | undefined>({\n params: () => params(),\n loader: ({ params: prepareArgs, abortSignal }) => {\n // Prepared per request — v2 caches by the prepared args, so a fresh `prepare()` is the\n // legacy idiom (the sibling `selectOptionsFromV2Query` does the same via `queryComputed`).\n const query = config.queryCreator.prepare(prepareArgs) as unknown as PreparedV2Query<TResult>;\n\n abortSignal.addEventListener('abort', () => query.abort());\n query.execute();\n\n // Resolve once the query settles. A failure is thrown so it lands in `onError`, where the\n // violations are mapped onto the fields; the underlying `HttpErrorResponse` is thrown so\n // `extractFormViolations` can unwrap the 422 body.\n return firstValueFrom(\n query.state$.pipe(\n filter((state) => isQueryStateSuccess(state) || isQueryStateFailure(state)),\n take(1),\n ),\n ).then((state) => {\n if (isQueryStateFailure(state)) {\n throw state.error.httpErrorResponse;\n }\n\n return state.response;\n });\n },\n }) as Resource<TResult | undefined>,\n });\n};\n","import { randomId } from '@ethlete/core';\nimport { HttpClient, HttpErrorResponse, HttpEventType } from '@angular/common/http';\nimport { DestroyRef, ErrorHandler, Injector, Signal, signal } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { buildRoute } from '../legacy';\nimport { createHttpRequest, HttpRequest } from './http-request';\nimport { QueryArgs, RequestArgs } from './query';\nimport { buildQueryCacheKey, shouldCacheQuery } from './query-cache-utils';\nimport { CreateQueryClientConfigOptions } from './query-client';\nimport { CreateQueryCreatorOptions, QueryMethod, RouteType } from './query-creator';\nimport { uncacheableRequestHasAllowCacheParam, uncacheableRequestHasCacheKeyParam } from './query-errors';\nimport { RunQueryExecuteOptions } from './query-execute-utils';\nimport { ShouldRetryRequestFn } from './query-retry-utils';\n\nexport type QueryRepositoryEvent =\n | {\n type: 'request-error';\n error: HttpErrorResponse;\n key: QueryKey;\n isSecure: boolean;\n request: HttpRequest<QueryArgs>;\n }\n | {\n type: 'request-success';\n key: QueryKey;\n isSecure: boolean;\n request: HttpRequest<QueryArgs>;\n }\n | {\n /**\n * Every secure entry was torn down at once — a logout. Emitted after the cache is cleared so\n * secure queries can drop the state they hold themselves; the repository only owns the\n * requests, not the `response` signal of the query objects bound to them.\n */\n type: 'unbind-all-secure';\n };\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 /** If the request is secure (needs authentication) */\n isSecure?: boolean;\n\n /** The data of the request */\n args?: RequestArgs<TArgs> | null;\n\n /** The query creator options of the request */\n creatorOptions?: CreateQueryCreatorOptions;\n\n /** Custom retry function for this specific request */\n retryFn?: ShouldRetryRequestFn;\n\n /** If set, this request's cache key will be prefixed with this key */\n key?: string;\n\n /** The previous tracking key of the request */\n previousKey?: QueryKey | null;\n\n /** The destroy ref to bind the request to. If the destroy ref is destroyed, the request will be destroyed as well. */\n consumerDestroyRef: DestroyRef;\n\n /** Configuration on how to run the query */\n runQueryOptions?: RunQueryExecuteOptions;\n};\n\nexport type QueryRepositoryItem<TArgs extends QueryArgs> = {\n /** The key of the request (either a cache key for cacheable requests or a UUID for uncacheable requests) */\n key: QueryKey;\n\n /** The request object */\n request: HttpRequest<TArgs>;\n};\n\n/**\n * A read-only snapshot of a single cache entry, exposed via {@link QueryRepositorySubtle.cacheEntries}\n * for devtools inspection. The raw cache `Map` is never exposed.\n */\nexport type QueryRepositoryCacheEntry = {\n /** The cache key of the entry. */\n key: QueryKey;\n\n /** Whether the entry belongs to a secure (authenticated) request. */\n isSecure: boolean;\n\n /** How many consumers currently hold a binding to the entry. */\n consumerCount: number;\n\n /**\n * Whether the entry has no consumers left and is only being kept around for its\n * `keepUnusedFor` window. Such an entry is not a leak — it is waiting to be reused by a\n * consumer that comes back.\n */\n isUnused: boolean;\n\n /** The underlying HTTP request. */\n request: HttpRequest<QueryArgs>;\n};\n\n/**\n * Advanced repository internals used by the query devtools. **Not part of the general public\n * contract** — do not build application logic on top of these.\n */\nexport type QueryRepositorySubtle = {\n /** Returns a read-only snapshot of every entry currently held in the cache. */\n cacheEntries: () => QueryRepositoryCacheEntry[];\n\n /** A version counter bumped whenever the cache changes (bind / unbind / unbindAllSecure). */\n cacheVersion: Signal<number>;\n\n /**\n * Destroys and removes a single cache entry by key, regardless of its consumers. Intended for\n * devtools cache management — consumers still holding the query will get a fresh request on their\n * next execution.\n */\n evict: (key: QueryKey) => void;\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: QueryKey | null, consumerDestroyRef: DestroyRef) => boolean;\n\n /** Removes all secure requests and their consumers */\n unbindAllSecure: () => void;\n\n /**\n * Re-executes every cacheable entry that still has consumers, bypassing the cache and restarting\n * in-flight requests. Entries kept only for their `keepUnusedFor` window are skipped — nobody is\n * looking at them, and they revalidate on their own when a consumer binds again.\n *\n * @see QueryClient.refreshQueriesInUse\n */\n refreshInUse: () => void;\n\n /** Observable stream of repository events (errors, successes, etc.) */\n events$: Observable<QueryRepositoryEvent>;\n\n /** Advanced repository internals used by the query devtools. */\n subtle: QueryRepositorySubtle;\n};\n\n/** The key of a query (either a cache key for cacheable requests or a UUID for uncacheable requests) */\nexport type QueryKey = string;\n\n/** Runs .unbind() if the DestroyRef.onDestroy() gets called */\nexport type DestroyCleanupCallback = () => void;\n\n/**\n * Keeps track of all places where the request gets used. Once the last consumer is gone the entry is\n * either destroyed right away or kept for `keepUnusedFor` milliseconds so a consumer that comes back\n * (e.g. via browser back navigation) finds its data already there.\n */\ntype DestroyListenerMapItem = {\n consumers: Map<DestroyRef, DestroyCleanupCallback>;\n request: HttpRequest<QueryArgs>;\n isSecure: boolean;\n eventSubscription?: { unsubscribe: () => void };\n\n /** How long this entry survives without consumers. `0` destroys it immediately. */\n keepUnusedFor: number;\n\n /** When the entry lost its last consumer — drives the eviction order of the unused-entry cap. */\n unusedSince?: number;\n\n /** Pending eviction of an unused entry, cancelled as soon as a consumer binds again. */\n evictTimer?: ReturnType<typeof setTimeout>;\n};\n\nexport type QueryRepositoryDependencies = {\n /** The HTTP client to use for the requests */\n httpClient: HttpClient;\n\n /** The error handler to use for the requests */\n ngErrorHandler: ErrorHandler;\n\n /** The injector to use for reactive operations like signal->observable conversions */\n injector: Injector;\n};\n\nexport type CreateQueryRepositoryConfig = CreateQueryClientConfigOptions & {\n /** The dependencies of the query repository */\n dependencies: QueryRepositoryDependencies;\n\n /**\n * Whether unused entries may be retained at all. `false` forces `keepUnusedFor` to `0` everywhere,\n * regardless of client or creator configuration — used to disable retention on the server, where a\n * per-request injector must not hold response bodies (and a pending timer) for minutes.\n * @default true\n */\n retentionEnabled?: boolean;\n};\n\nconst generateUuid = () => randomId();\n\n/** @see CreateQueryClientConfigOptions.keepUnusedFor */\nexport const DEFAULT_KEEP_UNUSED_FOR = 300_000;\n\n/**\n * Hard cap on entries kept without consumers, per client. Retention is opportunistic, so a runaway\n * count (a search-as-you-type query produces a new cache key per keystroke, and each one goes through\n * `unbind`) must never grow unbounded — the least recently orphaned entries are dropped first.\n */\nexport const MAX_UNUSED_ENTRIES = 50;\n\nexport const createQueryRepository = (config: CreateQueryRepositoryConfig): QueryRepository => {\n const cache = new Map<QueryKey, DestroyListenerMapItem>();\n const eventsSubject = new Subject<QueryRepositoryEvent>();\n\n // Bumped on every cache mutation so the devtools cache view can react. Cheap enough to keep\n // unconditional — it is a single integer signal with no readers unless the devtools are open.\n const cacheVersion = signal(0);\n const bumpCacheVersion = () => cacheVersion.update((v) => v + 1);\n\n const resolveKeepUnusedFor = (creatorOptions: CreateQueryCreatorOptions | undefined, shouldCache: boolean) => {\n if (config.retentionEnabled === false || !shouldCache) return 0;\n\n return Math.max(0, creatorOptions?.keepUnusedFor ?? config.keepUnusedFor ?? DEFAULT_KEEP_UNUSED_FOR);\n };\n\n const request = <TArgs extends QueryArgs>(options: QueryRepositoryRequestOptions<TArgs>) => {\n const { args, creatorOptions, runQueryOptions } = options;\n const shouldCache =\n creatorOptions?.subtle?.useQueryRepositoryCache === false\n ? false\n : shouldCacheQuery(options.method) || creatorOptions?.subtle?.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 cacheKey = 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 : false;\n\n const trackingKey = cacheKey || generateUuid();\n const keepUnusedFor = resolveKeepUnusedFor(creatorOptions, shouldCache);\n\n const previousKey = options.previousKey;\n\n if (cacheKey !== previousKey && previousKey) {\n unbind(previousKey, options.consumerDestroyRef);\n }\n\n if (shouldCache && cacheKey) {\n const cacheEntry = cache.get(cacheKey);\n\n if (cacheEntry) {\n // The entry may have been sitting out its `keepUnusedFor` window — a consumer binding again\n // makes it live, so the pending eviction must go.\n cancelEviction(cacheEntry);\n\n bind(cacheKey, options.consumerDestroyRef, cacheEntry.request, options.isSecure ?? false, true, keepUnusedFor);\n\n if (!runQueryOptions?.allowCache || cacheEntry.request.isStale()) {\n cacheEntry.request.execute({ allowCache: runQueryOptions?.allowCache });\n }\n\n return { key: cacheKey, 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: config.dependencies,\n clientOptions: creatorOptions,\n clientHeaders: config.headers,\n cacheAdapter: config.cacheAdapter,\n retryFn: options.retryFn ?? config.retryFn,\n });\n\n request.execute();\n\n bind(trackingKey, options.consumerDestroyRef, request, options.isSecure ?? false, shouldCache, keepUnusedFor);\n\n return { key: trackingKey, request };\n };\n\n /** Tears an entry down for good, whether it currently has consumers or not. */\n const destroyEntry = (key: QueryKey, cacheEntry: DestroyListenerMapItem) => {\n clearTimeout(cacheEntry.evictTimer);\n cacheEntry.request.destroy();\n cacheEntry.eventSubscription?.unsubscribe();\n cache.delete(key);\n };\n\n const cancelEviction = (cacheEntry: DestroyListenerMapItem) => {\n if (cacheEntry.evictTimer === undefined) return;\n\n clearTimeout(cacheEntry.evictTimer);\n cacheEntry.evictTimer = undefined;\n cacheEntry.unusedSince = undefined;\n };\n\n /** Drops the least recently orphaned unused entries until the cap is respected again. */\n const enforceUnusedEntryLimit = () => {\n const unused = Array.from(cache.entries()).filter(([, entry]) => entry.consumers.size === 0);\n\n if (unused.length <= MAX_UNUSED_ENTRIES) return;\n\n unused.sort(([, a], [, b]) => (a.unusedSince ?? 0) - (b.unusedSince ?? 0));\n\n for (const [key, entry] of unused.slice(0, unused.length - MAX_UNUSED_ENTRIES)) {\n destroyEntry(key, entry);\n }\n };\n\n const retain = (key: QueryKey, cacheEntry: DestroyListenerMapItem) => {\n cacheEntry.unusedSince = Date.now();\n cacheEntry.evictTimer = setTimeout(() => evict(key), cacheEntry.keepUnusedFor);\n\n enforceUnusedEntryLimit();\n };\n\n const unbind = (key: QueryKey | null, consumerDestroyRef: DestroyRef) => {\n if (key === null) return false;\n\n const cacheEntry = cache.get(key);\n\n if (!cacheEntry) return false;\n\n cacheEntry.consumers.delete(consumerDestroyRef);\n\n if (cacheEntry.consumers.size === 0) {\n // Only data is worth keeping around: an entry that never produced a response has nothing to\n // hand back to a returning consumer, so it is aborted immediately as it always was.\n if (cacheEntry.keepUnusedFor > 0 && cacheEntry.request.response() !== null) {\n retain(key, cacheEntry);\n } else {\n destroyEntry(key, cacheEntry);\n }\n }\n\n bumpCacheVersion();\n\n return true;\n };\n\n const unbindAllSecure = () => {\n for (const [key, cacheEntry] of cache.entries()) {\n if (!cacheEntry.isSecure) continue;\n\n // Force the teardown instead of routing through `unbind`: a logged out session must not leave a\n // retained response body behind waiting out its `keepUnusedFor` window.\n cacheEntry.consumers.clear();\n destroyEntry(key, cacheEntry);\n }\n\n bumpCacheVersion();\n eventsSubject.next({ type: 'unbind-all-secure' });\n };\n\n const refreshInUse = () => {\n for (const cacheEntry of cache.values()) {\n if (cacheEntry.consumers.size === 0) continue;\n\n // Re-firing a mutation would be a side effect nobody asked for, so only reads are refreshed.\n if (!shouldCacheQuery(cacheEntry.request.method)) continue;\n\n cacheEntry.request.execute({ force: true });\n }\n };\n\n const bind = (\n key: QueryKey,\n consumerDestroyRef: DestroyRef,\n request: HttpRequest<QueryArgs>,\n isSecure: boolean,\n allowReuse: boolean,\n keepUnusedFor: number,\n ) => {\n const destroyListener = consumerDestroyRef.onDestroy(() => unbind(key, consumerDestroyRef));\n\n const cacheEntry = cache.get(key);\n\n if (cacheEntry && allowReuse) {\n cacheEntry.consumers.set(consumerDestroyRef, destroyListener);\n } else {\n const consumers: Map<DestroyRef, DestroyCleanupCallback> = new Map([]);\n\n consumers.set(consumerDestroyRef, destroyListener);\n\n // Drive repository events off the request's discrete, terminal event stream rather than\n // recombining the `error` + `response` signals via combineLatest (which could observe stale\n // pairings). Each settle emits exactly one terminal event.\n const eventSubscription = request.events$.subscribe((event) => {\n if (event.type === 'error') {\n if (event.error.raw instanceof HttpErrorResponse) {\n eventsSubject.next({ type: 'request-error', error: event.error.raw, key, isSecure, request });\n }\n } else if (event.type === HttpEventType.Response) {\n eventsSubject.next({ type: 'request-success', key, isSecure, request });\n }\n });\n\n cache.set(key, {\n consumers,\n request,\n isSecure,\n eventSubscription,\n keepUnusedFor,\n });\n }\n\n bumpCacheVersion();\n };\n\n const cacheEntries = (): QueryRepositoryCacheEntry[] =>\n Array.from(cache.entries()).map(([key, entry]) => ({\n key,\n isSecure: entry.isSecure,\n consumerCount: entry.consumers.size,\n isUnused: entry.consumers.size === 0,\n request: entry.request,\n }));\n\n const evict = (key: QueryKey) => {\n const entry = cache.get(key);\n\n if (!entry) return;\n\n destroyEntry(key, entry);\n bumpCacheVersion();\n };\n\n const repository: QueryRepository = {\n request,\n unbind,\n unbindAllSecure,\n refreshInUse,\n events$: eventsSubject.asObservable(),\n subtle: {\n cacheEntries,\n cacheVersion: cacheVersion.asReadonly(),\n evict,\n },\n };\n\n return repository;\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { ErrorHandler, inject, Injector, PLATFORM_ID } from '@angular/core';\nimport { createRootProvider, ProviderResult } from '@ethlete/core';\nimport { BuildQueryStringConfig } from '../legacy';\nimport { createQueryRepository, QueryRepository } from './query-repository';\nimport { ShouldRetryRequestFn } from './query-retry-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 /**\n * Headers sent with every request of this client — an API token, a tenant id, a preview\n * credential. Per-query `args.headers` are merged on top and win per header name.\n *\n * Pass a function to make them dynamic: it is called on every execution, so reading a signal\n * inside means later requests pick the new value up on their own.\n *\n * Client headers are deliberately **not** part of the cache key: they are the same for every\n * query of the client, so including them would only ever churn the whole cache at once. That\n * means already-resolved queries keep their response when the headers change — call\n * {@link QueryClient.refreshQueriesInUse} to re-run them (the v3 equivalent of v2's\n * `setDefaultHeaders({ refreshQueriesInUse: true })`).\n *\n * @example\n * const previewToken = signal<string | null>(null);\n *\n * export const [provideMyClient, injectMyClient] = createQueryClient({\n * name: 'my-api',\n * baseUrl: 'https://api.example.com',\n * headers: () => {\n * const token = previewToken();\n * return token ? new HttpHeaders({ 'X-Preview-Token': token }) : new HttpHeaders();\n * },\n * });\n */\n headers?: HttpHeaders | (() => HttpHeaders);\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 /**\n * How long (in ms) a cache entry is kept after its last consumer was destroyed.\n *\n * Within that window a query that mounts again — a list page reached via browser back navigation,\n * for instance — binds to the existing entry and renders its previous response immediately while it\n * revalidates in the background, instead of starting from a loading state. Unlike the header derived\n * freshness TTL (`cacheAdapter`) this is independent of `cache-control`, so it also applies to\n * private/authenticated responses.\n *\n * Set to `0` to destroy entries as soon as their last consumer goes away. Only entries that\n * actually hold a response are retained, and at most 50 unused entries are kept per client\n * (least recently orphaned dropped first). Always `0` on the server.\n *\n * Can be overridden per query creator.\n *\n * @default 300000 (5 minutes)\n */\n keepUnusedFor?: number;\n};\n\nexport type QueryClient = {\n repository: QueryRepository;\n\n /** The base URL the client was configured with. */\n baseUrl: string;\n\n /**\n * Re-executes every cacheable request this client currently has consumers for, bypassing the\n * cache and restarting the ones still in flight.\n *\n * The case this exists for is a change to something every request carries but nothing tracks —\n * typically a client-level header (see {@link CreateQueryClientConfigOptions.headers}). Setting\n * the new value only affects *subsequent* requests, so anything already resolved keeps data\n * fetched under the old one until this is called.\n *\n * Only GET / HEAD / OPTIONS requests are refreshed: re-firing a mutation nobody asked for would\n * be a far worse surprise than a stale read.\n */\n refreshQueriesInUse: () => void;\n};\n\nexport type QueryClientRef = ProviderResult<QueryClient>;\nexport type AnyCreateQueryClientResult = QueryClientRef;\nexport type AnyQueryClient = NonNullable<ReturnType<AnyCreateQueryClientResult[1]>>;\n\nexport const createQueryClient = (options: CreateQueryClientConfigOptions): QueryClientRef =>\n createRootProvider(\n () => {\n const httpClient = inject(HttpClient);\n const ngErrorHandler = inject(ErrorHandler);\n const injector = inject(Injector);\n\n const repository = createQueryRepository({\n ...options,\n // Retaining unused entries on the server would pin response bodies (and a pending timer) inside\n // a per-request injector for the whole window, so retention is browser only.\n retentionEnabled: isPlatformBrowser(inject(PLATFORM_ID)),\n dependencies: { httpClient, ngErrorHandler, injector },\n });\n\n const client: QueryClient = {\n repository,\n baseUrl: options.baseUrl,\n refreshQueriesInUse: () => repository.refreshInUse(),\n };\n\n return client;\n },\n {\n name: `QueryClient_${options.name}`,\n },\n );\n","import { QueryArgs, RequestArgs } from './query';\nimport { CreateQueryExecuteOptions, InternalQueryExecute } from './query-execute';\nimport { queryExecute } from './query-execute-utils';\nimport { InternalSecureCreateQueryCreatorOptions } from './secure-query-creator';\nimport { createSecureExecuteFactory } from './secure-query-execute-factory';\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 executeOptions: CreateSecureQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const [, injectAuthProvider] = executeOptions.creatorInternals.authProvider;\n const authProvider = injectAuthProvider();\n\n return createSecureExecuteFactory({\n authProvider,\n deps: executeOptions.deps,\n state: executeOptions.state,\n transformAuthAndExec: (executeArgs, _tokens, headers, executeState) => {\n const { options: runOptions } = executeArgs ?? {};\n const updatedArgs = { ...(executeArgs?.args ?? ({} as RequestArgs<TArgs>)), headers };\n\n queryExecute({\n executeOptions: executeOptions,\n executeState,\n args: updatedArgs,\n options: runOptions,\n isSecure: true,\n });\n },\n });\n};\n","import { createBaseQuery } from './base-query-factory';\nimport { CreateQueryOptions, QueryArgs } from './query';\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 createBaseQuery({\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n features: options.features,\n queryConfig: options.queryConfig,\n executeFactory: createSecureExecuteFn,\n });\n","import { AnyCreateBearerAuthProviderResult } from '../auth';\nimport { createBaseQueryCreator } from './base-query-creator-factory';\nimport { QueryArgs } from './query';\nimport { CreateQueryCreatorOptions, InternalCreateQueryCreatorOptions, QueryCreator } from './query-creator';\nimport { createSecureQuery } from './secure-query';\n\nexport type InternalSecureCreateQueryCreatorOptions<TArgs extends QueryArgs> =\n InternalCreateQueryCreatorOptions<TArgs> & {\n authProvider: AnyCreateBearerAuthProviderResult;\n };\n\nexport const createSecureQueryCreator = <TArgs extends QueryArgs>(\n options: CreateQueryCreatorOptions | undefined,\n internals: InternalSecureCreateQueryCreatorOptions<TArgs>,\n): QueryCreator<TArgs> =>\n createBaseQueryCreator({\n options,\n internals,\n queryFactory: createSecureQuery,\n });\n","import { AnyCreateBearerAuthProviderResult } from '../auth';\nimport { QueryArgs } from './query';\nimport { AnyCreateQueryClientResult } from './query-client';\nimport {\n CreateQueryCreatorOptions,\n QueryCreator,\n QueryMethod,\n RequiresTransform,\n RouteType,\n createQueryCreator,\n} from './query-creator';\nimport { createSecureQueryCreator } from './secure-query-creator';\n\n// Conditional parameter type: when RequiresTransform is true, options must be provided; otherwise optional\ntype ConditionalOptions<TArgs extends QueryArgs> =\n RequiresTransform<TArgs> extends true\n ? [options: CreateQueryCreatorOptions<TArgs>]\n : [options?: CreateQueryCreatorOptions<TArgs>];\n\nconst createQueryTemplate = (method: QueryMethod) => {\n return (client: AnyCreateQueryClientResult) =>\n <TArgs extends QueryArgs>(route: RouteType<TArgs>, ...args: ConditionalOptions<TArgs>): QueryCreator<TArgs> =>\n createQueryCreator<TArgs>(args[0], { method, client, route });\n};\n\nconst createSecureQueryTemplate = (method: QueryMethod) => {\n return (client: AnyCreateQueryClientResult, authProvider: AnyCreateBearerAuthProviderResult) =>\n <TArgs extends QueryArgs>(route: RouteType<TArgs>, ...args: ConditionalOptions<TArgs>): QueryCreator<TArgs> =>\n createSecureQueryCreator<TArgs>(args[0], { method, client, authProvider, route });\n};\n\n/** A query creator that creates a GET query */\nexport const createGetQuery = createQueryTemplate('GET');\n\n/** A query creator that creates a secure GET query (requires authentication) */\nexport const createSecureGetQuery = createSecureQueryTemplate('GET');\n\n/** A query creator that creates a POST query */\nexport const createPostQuery = createQueryTemplate('POST');\n\n/** A query creator that creates a secure POST query (requires authentication) */\nexport const createSecurePostQuery = createSecureQueryTemplate('POST');\n\n/** A query creator that creates a PUT query */\nexport const createPutQuery = createQueryTemplate('PUT');\n\n/** A query creator that creates a secure PUT query (requires authentication) */\nexport const createSecurePutQuery = createSecureQueryTemplate('PUT');\n\n/** A query creator that creates a DELETE query */\nexport const createDeleteQuery = createQueryTemplate('DELETE');\n\n/** A query creator that creates a secure DELETE query (requires authentication) */\nexport const createSecureDeleteQuery = createSecureQueryTemplate('DELETE');\n\n/** A query creator that creates a PATCH query */\nexport const createPatchQuery = createQueryTemplate('PATCH');\n\n/** A query creator that creates a secure PATCH query (requires authentication) */\nexport const createSecurePatchQuery = createSecureQueryTemplate('PATCH');\n","import { filter, firstValueFrom } from 'rxjs';\nimport { Query, QueryArgs, QuerySnapshot } from './query';\nimport { QueryExecuteArgs } from './query-execute';\n\n/**\n * Executes the query and resolves once that execution has settled (response or error received).\n * The returned snapshot is frozen to the awaited execution, so a later execution can't swap the\n * `response()` / `error()` you read from it.\n *\n * Designed for imperative flows that need a mutation's outcome in place — e.g. a signal-forms\n * `submit()` action mapping server violations onto the form via `mapViolationsToFormErrors`.\n *\n * The promise stays pending if the execution is cancelled (e.g. `reset()`) and the query is never\n * executed again — the snapshot settles with whichever execution completes next.\n */\nexport const executeUntilSettled = async <TArgs extends QueryArgs>(\n query: Query<TArgs>,\n executeArgs?: QueryExecuteArgs<TArgs>,\n): Promise<QuerySnapshot<TArgs>> => {\n query.execute(executeArgs);\n\n const snapshot = query.createSnapshot();\n\n await firstValueFrom(snapshot.isAlive.asObservable().pipe(filter((isAlive) => !isAlive)));\n\n return snapshot;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { DestroyRef, inject, Signal, signal, WritableSignal } from '@angular/core';\nimport { isQueryDevtoolsEnabled, registerQueryDevtoolsEntry } from '../devtools';\nimport { AnyNewQuery, AnyQuerySnapshot, Query, QueryArgs, RequestArgs, ResponseType } from './query';\nimport { QueryErrorResponse } from './query-error-response';\nimport { querySequenceAlreadyRunning } from './query-errors';\nimport { executeUntilSettled } from './query-snapshot-utils';\n\n/** The last element of a tuple type — the response of the step a `.then()` callback follows. */\ntype LastOf<T extends unknown[]> = T extends [...unknown[], infer L] ? L : never;\n\n/** The current lifecycle phase of a query sequence. */\nexport type QuerySequenceStatus = 'idle' | 'running' | 'success' | 'error';\n\n/** The args a sequence step supplies to its query — the same `{ args }` shape `query.execute()` takes. */\nexport type QuerySequenceStepArgs<TArgs extends QueryArgs> = {\n args: RequestArgs<TArgs>;\n};\n\n/**\n * The outcome of a settled {@link QuerySequence.run}.\n *\n * A discriminated union: on success `responses` is the fully-typed tuple of every step's response;\n * on failure `failedAt` is the zero-based index of the step that errored and `error` is its\n * normalized {@link QueryErrorResponse}. `snapshots` always holds the settled snapshots of every\n * step that ran — up to and including the failing one.\n */\nexport type QuerySequenceResult<TResponses extends unknown[]> =\n | { ok: true; responses: TResponses; snapshots: AnyQuerySnapshot[] }\n | { ok: false; failedAt: number; error: QueryErrorResponse; snapshots: AnyQuerySnapshot[] };\n\n/**\n * An imperative waterfall of dependent queries — usually mutations (`POST`/`PUT`/`PATCH`/`DELETE`)\n * where each call needs the previous call's response.\n *\n * Build the chain once (e.g. as a component field) with {@link querySequence} and `.then()`, then\n * trigger it with {@link run}. Each step runs via `executeUntilSettled`, threading the previous\n * step's response into the next; the first error aborts the rest. The progress signals mirror\n * `createQueryStack`, so a template can drive a stepper without manual bookkeeping.\n */\nexport type QuerySequence<TResponses extends unknown[]> = {\n /**\n * Appends a dependent step. `mapArgs` runs at {@link run} time and receives the previous step's\n * (unwrapped, non-null on success) response plus the typed tuple of all responses so far, so a\n * later step can still reach an earlier one's data.\n */\n then: <TArgs extends QueryArgs>(\n query: Query<TArgs>,\n mapArgs: (previousResponse: LastOf<TResponses>, responses: TResponses) => QuerySequenceStepArgs<TArgs>,\n ) => QuerySequence<[...TResponses, ResponseType<TArgs>]>;\n\n /** The current lifecycle phase — `idle` before the first run, then `running` → `success` | `error`. */\n status: Signal<QuerySequenceStatus>;\n\n /** `true` while a run is in flight. */\n running: Signal<boolean>;\n\n /** The 1-based index of the in-flight step, or `0` when idle. */\n currentStep: Signal<number>;\n\n /** The static number of steps in the sequence. */\n total: number;\n\n /** The query objects backing each step, in order. Useful for devtools / advanced introspection. */\n queries: AnyNewQuery[];\n\n /** The error of the step that failed, or `null` while running / on success. */\n error: Signal<QueryErrorResponse | null>;\n\n /** The zero-based index of the step that failed, or `null` while running / on success. */\n failedAt: Signal<number | null>;\n\n /** The settled snapshots of every step that has run, grows as the waterfall progresses. */\n snapshots: Signal<AnyQuerySnapshot[]>;\n\n /**\n * The resolved input args each step was run with, grows as the waterfall progresses. The value at\n * index `i` is what {@link QuerySequence.then}'s `mapArgs` produced for step `i` at run time.\n */\n stepArgs: Signal<unknown[]>;\n\n /** The responses of every step that has succeeded, grows as the waterfall progresses. */\n responses: Signal<Partial<TResponses>>;\n\n /**\n * Runs every step in order, resolving once the waterfall settles.\n *\n * Resets the progress signals, then awaits each step in turn — stopping at the first error and\n * resolving with `{ ok: false, failedAt, error }`, or `{ ok: true, responses }` when all steps\n * succeed. Re-runnable (e.g. behind a retry button); throws {@link querySequenceAlreadyRunning}\n * if a run is already in flight.\n *\n * Cancellation caveat (inherited from `executeUntilSettled`): if the host scope is destroyed\n * mid-flight the in-flight query is torn down and this promise never settles.\n */\n run: () => Promise<QuerySequenceResult<TResponses>>;\n};\n\ntype InternalStep = {\n query: AnyNewQuery;\n produceArgs: (previousResponse: unknown, responses: unknown[]) => QuerySequenceStepArgs<QueryArgs>;\n};\n\ntype SequenceState = {\n status: WritableSignal<QuerySequenceStatus>;\n running: WritableSignal<boolean>;\n currentStep: WritableSignal<number>;\n error: WritableSignal<QueryErrorResponse | null>;\n failedAt: WritableSignal<number | null>;\n snapshots: WritableSignal<AnyQuerySnapshot[]>;\n stepArgs: WritableSignal<unknown[]>;\n responses: WritableSignal<unknown[]>;\n};\n\nconst createSequenceState = (): SequenceState => ({\n status: signal<QuerySequenceStatus>('idle'),\n running: signal(false),\n currentStep: signal(0),\n error: signal<QueryErrorResponse | null>(null),\n failedAt: signal<number | null>(null),\n snapshots: signal<AnyQuerySnapshot[]>([]),\n stepArgs: signal<unknown[]>([]),\n responses: signal<unknown[]>([]),\n});\n\n/**\n * A stable holder the devtools registry keeps as a sequence entry's handle. Because `.then()`\n * returns a fresh {@link QuerySequence} object per link (all sharing one {@link SequenceState}),\n * `current` is updated to the latest link so the UI always reads the fully-built sequence.\n * @internal\n */\nexport type QuerySequenceDevtoolsHandle = { current: QuerySequence<any> };\n\nconst buildSequence = <TResponses extends unknown[]>(\n steps: InternalStep[],\n state: SequenceState,\n devtoolsHandle?: QuerySequenceDevtoolsHandle,\n): QuerySequence<TResponses> => {\n const run = async (): Promise<QuerySequenceResult<TResponses>> => {\n if (state.running()) throw querySequenceAlreadyRunning();\n\n state.status.set('running');\n state.running.set(true);\n state.currentStep.set(0);\n state.error.set(null);\n state.failedAt.set(null);\n state.snapshots.set([]);\n state.stepArgs.set([]);\n state.responses.set([]);\n\n const snapshots: AnyQuerySnapshot[] = [];\n const stepArgs: unknown[] = [];\n const responses: unknown[] = [];\n let previousResponse: unknown = undefined;\n\n for (const [i, step] of steps.entries()) {\n state.currentStep.set(i + 1);\n\n const { args } = step.produceArgs(previousResponse, responses);\n stepArgs.push(args);\n state.stepArgs.set([...stepArgs]);\n const snapshot = await executeUntilSettled(step.query, { args });\n\n snapshots.push(snapshot);\n state.snapshots.set([...snapshots]);\n\n const error = snapshot.error();\n\n if (error) {\n state.status.set('error');\n state.error.set(error);\n state.failedAt.set(i);\n state.running.set(false);\n\n return { ok: false, failedAt: i, error, snapshots };\n }\n\n const response = snapshot.response();\n responses.push(response);\n state.responses.set([...responses]);\n previousResponse = response;\n }\n\n state.status.set('success');\n state.running.set(false);\n\n return { ok: true, responses: responses as TResponses, snapshots };\n };\n\n const sequence: QuerySequence<TResponses> = {\n then: (query, mapArgs) =>\n buildSequence(\n [\n ...steps,\n { query, produceArgs: (previousResponse, responses) => mapArgs(previousResponse as any, responses as any) },\n ],\n state,\n devtoolsHandle,\n ) as any,\n status: state.status.asReadonly(),\n running: state.running.asReadonly(),\n currentStep: state.currentStep.asReadonly(),\n total: steps.length,\n queries: steps.map((s) => s.query),\n error: state.error.asReadonly(),\n failedAt: state.failedAt.asReadonly(),\n snapshots: state.snapshots.asReadonly(),\n stepArgs: state.stepArgs.asReadonly(),\n responses: state.responses.asReadonly() as Signal<Partial<TResponses>>,\n run,\n };\n\n if (devtoolsHandle) devtoolsHandle.current = sequence;\n\n return sequence;\n};\n\n/**\n * Starts an imperative waterfall of dependent queries. Chain the remaining steps with `.then()`\n * and trigger it with `.run()` — see {@link QuerySequence}.\n *\n * The seed step's `args` are produced lazily (at `run()` time), so the sequence can safely live as\n * a component field while still reading current signal values on each run.\n *\n * @example\n * ```ts\n * readonly checkout = querySequence(this.createOrder, () => ({ args: { body: this.order() } }))\n * .then(this.createPayment, (order) => ({ args: { body: { orderId: order.id } } }))\n * .then(this.confirmOrder, (payment, [order]) => ({\n * args: { pathParams: { paymentId: payment.id }, body: { orderRef: order.id } },\n * }));\n *\n * async submit() {\n * const result = await this.checkout.run();\n * if (!result.ok) return this.handle(result.error);\n * const [order, payment, confirmation] = result.responses;\n * }\n * ```\n */\nexport const querySequence = <TArgs extends QueryArgs>(\n query: Query<TArgs>,\n seedArgs: () => QuerySequenceStepArgs<TArgs>,\n): QuerySequence<[ResponseType<TArgs>]> => {\n const devtoolsHandle: QuerySequenceDevtoolsHandle | undefined = isQueryDevtoolsEnabled()\n ? { current: null as unknown as QuerySequence<any> }\n : undefined;\n\n const seed = buildSequence<[ResponseType<TArgs>]>(\n [{ query, produceArgs: () => seedArgs() }],\n createSequenceState(),\n devtoolsHandle,\n );\n\n if (devtoolsHandle) {\n const unregister = registerQueryDevtoolsEntry({\n kind: 'query-sequence',\n handle: devtoolsHandle,\n meta: {},\n });\n\n // Sequences have no destroy hook; tie cleanup to the creating scope when there is one.\n try {\n inject(DestroyRef).onDestroy(unregister);\n } catch {\n // Created outside an injection context — the entry lives for the app's lifetime.\n }\n }\n\n return seed;\n};\n","import { Resource, resource } from '@angular/core';\nimport { FieldContext, PathKind, SchemaPath, SchemaPathRules, TreeValidationResult } from '@angular/forms/signals';\nimport { FormViolationView } from '@ethlete/types';\nimport { AnyQueryCreator, QueryArgsOf } from './query-creator';\nimport { RequestArgs, ResponseType } from './query';\nimport { executeUntilSettled } from './query-snapshot-utils';\nimport { applyQueryAsyncValidator } from './query-validator-core';\n\n/** Config for {@link validateWithQuery}. */\nexport type ValidateWithQueryConfig<TCreator extends AnyQueryCreator, TValue, TPathKind extends PathKind> = {\n /**\n * The query creator to run (e.g. a secure `createPostQuery` validate route). Like a query stack,\n * the query is created **once** and re-executes reactively — never per keystroke. Running it\n * through the query client is the point: auth, base route, caching and error normalization all\n * apply, unlike a raw `httpResource`.\n */\n queryCreator: TCreator;\n /**\n * Builds the request args from the field context. Runs reactively on the field value (debounced),\n * exactly like `validateAsync`'s `params` — e.g.\n * `(ctx) => ({ pathParams: { id }, body: { ...ctx.value() } })`.\n */\n args: (ctx: FieldContext<TValue, TPathKind>) => RequestArgs<QueryArgsOf<TCreator>>;\n /** Debounce before the request runs, in ms. @default 300 */\n debounce?: number;\n /** Gate the validation — return `false` to skip the request (e.g. an empty or invalid value). */\n when?: (ctx: FieldContext<TValue, TPathKind>) => boolean;\n /**\n * Override the default violation → error mapping. Receives the violations extracted from the\n * failed request; return the errors to report (targeting child fields via their `fieldTree`).\n * Defaults to `mapViolationsToFormErrors`, resolving each violation's `propertyPath` against the\n * validated field.\n */\n mapViolations?: (violations: FormViolationView[], ctx: FieldContext<TValue, TPathKind>) => TreeValidationResult;\n};\n\n/**\n * Binds a query-backed async validator to a signal-forms field, adapting an `@ethlete/query` v3\n * query into what `validateAsync` consumes. The query runs through the query client — so bearer\n * auth, base route, caching and Symfony error normalization all apply — where a raw `httpResource`\n * would fire unauthenticated and bypass the pipeline.\n *\n * On the current v3 `QueryClient` / `createPostQuery` creators; the `validateWithV2Query` twin\n * covers the legacy `V2QueryClient`. The query is created once and re-executed (debounced) as the\n * field value changes, only after the field's synchronous validators pass. A `204` / successful\n * response reports no errors; a `422 FormViolationListView` maps each violation onto its child\n * field by `propertyPath`; a network / other error degrades to a non-swallowed form-level error.\n *\n * Call it from a schema definition, the same place you'd call `validateAsync`:\n *\n * ```ts\n * const schema = schema<OpportunityEmail>((p) => {\n * validateWithQuery(p, {\n * queryCreator: postOpportunityEmailValidate,\n * args: (ctx) => ({ pathParams: { opportunityId }, body: { ...ctx.value() } }),\n * });\n * });\n * ```\n */\nexport const validateWithQuery = <TCreator extends AnyQueryCreator, TValue, TPathKind extends PathKind = PathKind.Root>(\n path: SchemaPath<TValue, SchemaPathRules.Supported, TPathKind>,\n config: ValidateWithQueryConfig<TCreator, TValue, TPathKind>,\n): void => {\n type TArgs = QueryArgsOf<TCreator>;\n type TParams = RequestArgs<TArgs>;\n type TResult = ResponseType<TArgs>;\n\n applyQueryAsyncValidator<TValue, TParams, TResult, TPathKind>(path, {\n params: config.args,\n debounce: config.debounce,\n when: config.when,\n mapViolations: config.mapViolations,\n factory: (params) => {\n // Created once, exactly like a query stack. A POST validate route doesn't auto-execute, so\n // the resource loader drives it — each params change re-executes with the new args.\n const query = config.queryCreator();\n\n return resource<TResult | undefined, TParams | undefined>({\n params: () => params(),\n loader: async ({ params: requestArgs }) => {\n const snapshot = await executeUntilSettled(query, { args: requestArgs as TParams });\n const error = snapshot.error();\n\n // A failed request (e.g. 422) is thrown so it lands in `onError`, where the violations are\n // mapped onto the fields. A `204` / success settles with no error and no violations.\n if (error) {\n throw error;\n }\n\n return snapshot.response() ?? undefined;\n },\n }) as Resource<TResult | undefined>;\n },\n });\n};\n","import { DestroyRef, inject, isDevMode, signal, Signal } from '@angular/core';\n\ntype LeaderMessage =\n | {\n type: 'heartbeat';\n tabId: string;\n }\n | {\n type: 'tab-heartbeat';\n tabId: string;\n }\n | {\n type: 'leader-claim';\n tabId: string;\n }\n | {\n type: 'leader-release';\n tabId: string;\n }\n | {\n type: 'instance-register';\n tabId: string;\n }\n | {\n type: 'instance-unregister';\n tabId: string;\n };\n\nexport type InternalLeaderElection = {\n isLeader: Signal<boolean>;\n instanceCount: Signal<number>;\n becomeLeader: () => void;\n cleanup: () => void;\n};\n\nexport const setupLeaderElection = (): InternalLeaderElection => {\n const destroyRef = inject(DestroyRef);\n\n const channelName = 'ethlete-auth-leader';\n const heartbeatInterval = 1000;\n const leaderTimeout = 3000;\n const storageKey = 'ethlete-auth-leader-heartbeat';\n\n const tabId = `tab-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n const isLeader = signal(false);\n const instanceCount = signal(1);\n const knownTabs = new Map<string, number>();\n knownTabs.set(tabId, Date.now());\n\n let channel: BroadcastChannel | null = null;\n let heartbeatIntervalId: ReturnType<typeof setInterval> | null = null;\n let leaderCheckIntervalId: ReturnType<typeof setInterval> | null = null;\n\n if (typeof BroadcastChannel === 'undefined' || typeof localStorage === 'undefined') {\n isLeader.set(true);\n return {\n isLeader: isLeader.asReadonly(),\n instanceCount: instanceCount.asReadonly(),\n becomeLeader: () => {\n /* no-op */\n },\n cleanup: () => {\n /* no-op */\n },\n };\n }\n\n channel = new BroadcastChannel(channelName);\n\n channel.postMessage({ type: 'instance-register', tabId } as LeaderMessage);\n\n const updateLeaderHeartbeat = (newTabId: string = tabId) => {\n try {\n localStorage.setItem(storageKey, JSON.stringify({ tabId: newTabId, timestamp: Date.now() }));\n } catch (error) {\n if (isDevMode()) {\n console.error('Failed to update leader heartbeat:', error);\n }\n }\n };\n\n const getLeaderHeartbeat = (): { tabId: string; timestamp: number } | null => {\n try {\n const stored = localStorage.getItem(storageKey);\n if (!stored) return null;\n return JSON.parse(stored);\n } catch {\n return null;\n }\n };\n\n const becomeLeader = () => {\n if (isLeader()) return;\n\n isLeader.set(true);\n updateLeaderHeartbeat();\n\n const message: LeaderMessage = {\n type: 'leader-claim',\n tabId,\n };\n channel?.postMessage(message);\n };\n\n const releaseLeadership = () => {\n if (!isLeader()) return;\n\n isLeader.set(false);\n\n const message: LeaderMessage = {\n type: 'leader-release',\n tabId,\n };\n channel?.postMessage(message);\n };\n\n const checkLeaderStatus = () => {\n const heartbeat = getLeaderHeartbeat();\n const now = Date.now();\n\n if (!heartbeat || now - heartbeat.timestamp > leaderTimeout) {\n if (!isLeader()) {\n becomeLeader();\n }\n } else if (heartbeat.tabId === tabId) {\n if (!isLeader()) {\n isLeader.set(true);\n }\n updateLeaderHeartbeat();\n } else {\n if (isLeader()) {\n isLeader.set(false);\n }\n }\n };\n\n channel.onmessage = (event: MessageEvent<LeaderMessage>) => {\n const message = event.data;\n\n if (message.type === 'heartbeat') {\n if (message.tabId !== tabId) {\n knownTabs.set(message.tabId, Date.now());\n }\n if (message.tabId !== tabId && isLeader()) {\n const heartbeat = getLeaderHeartbeat();\n if (heartbeat && heartbeat.tabId === message.tabId) {\n releaseLeadership();\n }\n }\n } else if (message.type === 'tab-heartbeat') {\n if (message.tabId !== tabId) {\n knownTabs.set(message.tabId, Date.now());\n }\n } else if (message.type === 'instance-register') {\n if (message.tabId !== tabId) {\n knownTabs.set(message.tabId, Date.now());\n instanceCount.set(knownTabs.size);\n channel?.postMessage({ type: 'tab-heartbeat', tabId } as LeaderMessage);\n }\n } else if (message.type === 'instance-unregister') {\n if (message.tabId !== tabId) {\n knownTabs.delete(message.tabId);\n instanceCount.set(knownTabs.size);\n }\n } else if (message.type === 'leader-claim') {\n if (message.tabId !== tabId && isLeader()) {\n const heartbeat = getLeaderHeartbeat();\n if (heartbeat && heartbeat.tabId === message.tabId) {\n releaseLeadership();\n } else {\n const assertMessage: LeaderMessage = {\n type: 'heartbeat',\n tabId,\n };\n channel?.postMessage(assertMessage);\n }\n }\n } else if (message.type === 'leader-release') {\n if (message.tabId !== tabId) {\n setTimeout(() => checkLeaderStatus(), 100);\n }\n }\n };\n\n checkLeaderStatus();\n\n heartbeatIntervalId = setInterval(() => {\n knownTabs.set(tabId, Date.now());\n\n if (isLeader()) {\n updateLeaderHeartbeat();\n channel?.postMessage({ type: 'heartbeat', tabId } as LeaderMessage);\n } else {\n channel?.postMessage({ type: 'tab-heartbeat', tabId } as LeaderMessage);\n }\n\n const now = Date.now();\n let changed = false;\n for (const [id, lastSeen] of knownTabs) {\n if (id !== tabId && now - lastSeen > leaderTimeout) {\n knownTabs.delete(id);\n changed = true;\n }\n }\n if (changed) {\n instanceCount.set(knownTabs.size);\n }\n }, heartbeatInterval);\n\n leaderCheckIntervalId = setInterval(() => {\n checkLeaderStatus();\n }, heartbeatInterval);\n\n const handleVisibilityChange = () => {\n if (document.hidden && isLeader()) {\n // Tab is hidden but we're leader - keep leadership but other tabs will take over if we die\n } else if (!document.hidden && !isLeader()) {\n checkLeaderStatus();\n }\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n const cleanup = () => {\n if (heartbeatIntervalId) {\n clearInterval(heartbeatIntervalId);\n }\n if (leaderCheckIntervalId) {\n clearInterval(leaderCheckIntervalId);\n }\n\n channel?.postMessage({ type: 'instance-unregister', tabId } as LeaderMessage);\n\n releaseLeadership();\n\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n channel?.close();\n\n const heartbeat = getLeaderHeartbeat();\n if (heartbeat?.tabId === tabId) {\n try {\n localStorage.removeItem(storageKey);\n } catch {\n // Ignore\n }\n }\n };\n\n destroyRef.onDestroy(cleanup);\n\n return {\n isLeader: isLeader.asReadonly(),\n instanceCount: instanceCount.asReadonly(),\n becomeLeader,\n cleanup,\n };\n};\n","const ENCRYPTION_KEY_STORAGE = '__eth_ek';\n\nconst generateEncryptionKey = (): string => {\n const navigatorInfo =\n typeof navigator !== 'undefined'\n ? `${navigator.userAgent}${navigator.language}${screen.width}${screen.height}${screen.colorDepth}`\n : 'server';\n\n const random = Math.random().toString(36).substring(2, 15);\n\n return btoa(`${navigatorInfo}${random}`);\n};\n\nlet cachedKey: string | null = null;\n\nconst getEncryptionKey = (): string => {\n if (cachedKey) return cachedKey;\n\n if (typeof localStorage !== 'undefined') {\n const stored = localStorage.getItem(ENCRYPTION_KEY_STORAGE);\n if (stored) {\n cachedKey = stored;\n return stored;\n }\n\n const newKey = generateEncryptionKey();\n localStorage.setItem(ENCRYPTION_KEY_STORAGE, newKey);\n cachedKey = newKey;\n return newKey;\n }\n\n if (!cachedKey) {\n cachedKey = generateEncryptionKey();\n }\n return cachedKey;\n};\n\nconst xorCipher = (text: string, key: string): string => {\n let result = '';\n for (let i = 0; i < text.length; i++) {\n result += String.fromCharCode(text.charCodeAt(i) ^ key.charCodeAt(i % key.length));\n }\n return result;\n};\n\nexport const encryptToken = (token: string): string => {\n if (!token) return token;\n\n try {\n const key = getEncryptionKey();\n const encrypted = xorCipher(token, key);\n return btoa(encrypted);\n } catch {\n return token;\n }\n};\n\nexport const decryptToken = (encryptedToken: string): string => {\n if (!encryptedToken) return encryptedToken;\n\n try {\n const key = getEncryptionKey();\n const encrypted = atob(encryptedToken);\n return xorCipher(encrypted, key);\n } catch {\n return encryptedToken;\n }\n};\n\nexport const isEncrypted = (value: string): boolean => {\n if (!value) return false;\n\n const base64Regex = /^[A-Za-z0-9+/]+=*$/;\n if (!base64Regex.test(value)) return false;\n\n try {\n atob(value);\n return value.length > 20;\n } catch {\n return false;\n }\n};\n\nexport const resetEncryptionKey = (): void => {\n cachedKey = null;\n if (typeof localStorage !== 'undefined') {\n localStorage.removeItem(ENCRYPTION_KEY_STORAGE);\n }\n};\n","import { DestroyRef, effect, inject, isDevMode, WritableSignal } from '@angular/core';\nimport { QueryClient } from '../../http';\nimport { decryptToken, encryptToken } from '../utils';\n\ntype SyncMessage =\n | {\n type: 'tokens-updated';\n accessToken: string;\n refreshToken: string;\n }\n | {\n type: 'logout';\n };\n\nexport type MultiTabSyncConfig = {\n channelName?: string;\n syncTokens?: boolean;\n syncLogout?: boolean;\n};\n\nexport type InternalMultiTabSync = {\n cleanup: () => void;\n};\n\nexport const setupMultiTabSync = (\n config: MultiTabSyncConfig,\n accessToken: WritableSignal<string | null>,\n refreshToken: WritableSignal<string | null>,\n queryClient: QueryClient,\n): InternalMultiTabSync => {\n const destroyRef = inject(DestroyRef);\n\n const channelName = config.channelName ?? 'ethlete-auth-sync';\n const syncTokens = config.syncTokens ?? true;\n const syncLogout = config.syncLogout ?? true;\n\n let channel: BroadcastChannel | null = null;\n let isProcessingExternalUpdate = false;\n\n if (typeof BroadcastChannel === 'undefined') {\n if (isDevMode()) {\n console.warn('BroadcastChannel is not supported in this environment. Multi-tab sync will be disabled.');\n }\n return {\n cleanup: () => {\n // No cleanup needed when BroadcastChannel is not available\n },\n };\n }\n\n channel = new BroadcastChannel(channelName);\n\n channel.onmessage = (event: MessageEvent<SyncMessage>) => {\n const message = event.data;\n\n // Prevent infinite loops\n if (isProcessingExternalUpdate) return;\n\n isProcessingExternalUpdate = true;\n\n try {\n if (message.type === 'logout' && syncLogout) {\n accessToken.set(null);\n refreshToken.set(null);\n queryClient.repository.unbindAllSecure();\n } else if (message.type === 'tokens-updated' && syncTokens) {\n accessToken.set(decryptToken(message.accessToken));\n refreshToken.set(decryptToken(message.refreshToken));\n }\n } finally {\n isProcessingExternalUpdate = false;\n }\n };\n\n const cleanup = () => {\n channel?.close();\n };\n\n destroyRef.onDestroy(cleanup);\n\n if (syncTokens) {\n effect(() => {\n const access = accessToken();\n const refresh = refreshToken();\n\n if (access && refresh && !isProcessingExternalUpdate && channel) {\n const message: SyncMessage = {\n type: 'tokens-updated',\n accessToken: encryptToken(access),\n refreshToken: encryptToken(refresh),\n };\n channel.postMessage(message);\n }\n });\n }\n\n if (syncLogout) {\n let hadTokens = false;\n\n effect(() => {\n const access = accessToken();\n\n if (access) {\n hadTokens = true;\n } else if (hadTokens && !isProcessingExternalUpdate && channel) {\n const message: SyncMessage = {\n type: 'logout',\n };\n channel.postMessage(message);\n hadTokens = false;\n }\n });\n }\n\n return { cleanup };\n};\n","import {\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n isDevMode,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { createRootProvider, isObject, ProviderResult } from '@ethlete/core';\nimport { Observable, Subject } from 'rxjs';\nimport { getQueryClientName, isQueryDevtoolsEnabled, registerQueryDevtoolsEntry } from '../devtools';\nimport {\n AnyCreateQueryClientResult,\n authExtractTokensResponseMissingAccessToken,\n authExtractTokensResponseMissingRefreshToken,\n authExtractTokensResponseNotObject,\n authProviderFeatureUsedMultipleTimes,\n QueryArgs,\n QueryClient,\n QueryErrorResponse,\n QueryRepository,\n QuerySnapshot,\n RequestArgs,\n RunQueryExecuteOptions,\n} from '../http';\nimport { decryptBearer } from '../legacy';\nimport {\n AnyQueryBuilder,\n AuthQueryBuilder,\n BearerAuthProviderTokens,\n TokenRefreshQueryBuilder,\n} from './bearer-auth-query-builders';\nimport {\n InactivityLogoutFeature,\n PersistentAuthFeature,\n TokenExpirationWarningFeature,\n TrackingFeature,\n} from './features';\nimport { setupLeaderElection, setupMultiTabSync } from './internal';\n\nexport { AnyQueryBuilder } from './bearer-auth-query-builders';\n\nexport type BearerAuthExecutionStateLoading<TType extends string = string> = {\n type: TType;\n state: 'loading';\n};\n\nexport type BearerAuthExecutionStateSuccess<TType extends string = string> = {\n type: TType;\n state: 'success';\n response: unknown;\n};\n\nexport type BearerAuthExecutionStateError<TType extends string = string> = {\n type: TType;\n state: 'error';\n error: QueryErrorResponse;\n};\n\nexport type BearerAuthExecutionStateLogout = {\n type: 'logout';\n state: 'success';\n};\n\nexport type BearerAuthExecutionState<TType extends string = string> =\n | BearerAuthExecutionStateLoading<TType>\n | BearerAuthExecutionStateSuccess<TType>\n | BearerAuthExecutionStateError<TType>\n | BearerAuthExecutionStateLogout;\n\nexport const BearerAuthFeatureType = {\n PERSISTENT_AUTH: 'PERSISTENT_AUTH',\n TOKEN_EXPIRATION_WARNING: 'TOKEN_EXPIRATION_WARNING',\n INACTIVITY_LOGOUT: 'INACTIVITY_LOGOUT',\n TOKEN_REVOCATION: 'TOKEN_REVOCATION',\n TRACKING: 'TRACKING',\n} as const;\n\nexport type BearerAuthFeatureType = (typeof BearerAuthFeatureType)[keyof typeof BearerAuthFeatureType];\n\nexport type BearerAuthFeature<TBuilders extends readonly AnyQueryBuilder[], TBearerData> = {\n type: BearerAuthFeatureType;\n setup: (context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown;\n};\n\nexport type ExtractQueryKey<T> =\n T extends AuthQueryBuilder<infer K, any> // eslint-disable-line @typescript-eslint/no-explicit-any\n ? K\n : T extends TokenRefreshQueryBuilder<infer K, any> // eslint-disable-line @typescript-eslint/no-explicit-any\n ? K\n : never;\n\nexport type ExtractQueryArgs<T> =\n T extends AuthQueryBuilder<string, infer TArgs>\n ? TArgs\n : T extends TokenRefreshQueryBuilder<string, infer TArgs>\n ? TArgs\n : never;\n\nexport type QueryRegistryEntry<TArgs extends QueryArgs> = {\n /**\n * Executes the auth query. `args` may be omitted for a query that takes none — its\n * `RequestArgs` is `{}`, which generic helper code cannot produce without a cast.\n */\n execute: (args?: RequestArgs<TArgs>, options?: RunQueryExecuteOptions) => QuerySnapshot<TArgs>;\n snapshot: Signal<QuerySnapshot<TArgs> | null>;\n};\n\nexport type QueryRegistry<TBuilders extends readonly AnyQueryBuilder[]> = {\n [K in ExtractQueryKey<TBuilders[number]>]: QueryRegistryEntry<\n ExtractQueryArgs<Extract<TBuilders[number], { key: K }>>\n >;\n};\n\ntype HasFeatureType<\n TFeatures extends readonly unknown[],\n TType extends BearerAuthFeatureType,\n> = TFeatures extends readonly ((context: any) => any)[] // eslint-disable-line @typescript-eslint/no-explicit-any\n ? Extract<ReturnType<TFeatures[number]>, { type: TType }> extends never\n ? false\n : true\n : false;\n\ntype ExtractFeatureInstance<\n TFeatures extends readonly unknown[],\n TType extends BearerAuthFeatureType,\n> = TFeatures extends readonly ((context: any) => any)[] // eslint-disable-line @typescript-eslint/no-explicit-any\n ? Extract<ReturnType<TFeatures[number]>, { type: TType }> extends { type: TType; instance: infer TInstance }\n ? TInstance\n : never\n : never;\n\nexport type FeatureRegistry<\n TFeatures extends readonly unknown[],\n TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[],\n> = (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.PERSISTENT_AUTH> extends true\n ? { persistentAuth: PersistentAuthFeature }\n : unknown) &\n (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.TOKEN_EXPIRATION_WARNING> extends true\n ? { tokenExpirationWarning: TokenExpirationWarningFeature }\n : unknown) &\n (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.INACTIVITY_LOGOUT> extends true\n ? { inactivityLogout: InactivityLogoutFeature }\n : unknown) &\n (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.TOKEN_REVOCATION> extends true\n ? { tokenRevocation: ExtractFeatureInstance<TFeatures, typeof BearerAuthFeatureType.TOKEN_REVOCATION> }\n : unknown) &\n (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.TRACKING> extends true\n ? { tracking: TrackingFeature<TBuilders> }\n : unknown);\n\nexport type CreateBearerAuthProviderConfig<\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData,\n> = {\n /**\n * The name of the auth provider\n */\n name: string;\n\n /**\n * The query client tuple from createQueryClient\n */\n queryClientRef: AnyCreateQueryClientResult;\n\n /**\n * Query builders\n */\n queries: TBuilders;\n\n /**\n * Feature builders\n */\n features?: TFeatures;\n\n /**\n * A function that decrypts the bearer token\n * @default decryptBearer()\n */\n bearerDecryptFn?: (token: string) => TBearerData;\n\n /**\n * Multi-tab sync configuration\n * Set to false to disable\n * Leader election is automatically enabled when multiTabSync is enabled\n * @default { enabled: true, channelName: 'ethlete-auth-sync', syncTokens: true, syncLogout: true, leaderElection: true }\n */\n multiTabSync?:\n | false\n | {\n /**\n * Whether multi-tab sync is enabled\n * @default true\n */\n enabled?: boolean;\n\n /**\n * Channel name for BroadcastChannel\n * @default 'ethlete-auth-sync'\n */\n channelName?: string;\n\n /**\n * Whether to sync token updates across tabs\n * @default true\n */\n syncTokens?: boolean;\n\n /**\n * Whether to sync logout across tabs\n * @default true\n */\n syncLogout?: boolean;\n\n /**\n * Whether to use leader election for token refresh\n * When enabled, only one tab (the leader) will perform automatic token refreshes\n * @default true\n */\n leaderElection?: boolean;\n };\n};\n\nexport type BearerAuthProvider<\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData,\n> = {\n /**\n * Registry of all configured auth queries\n */\n queries: QueryRegistry<TBuilders>;\n\n /**\n * Registry of all configured features\n */\n features: FeatureRegistry<TFeatures, TBuilders>;\n\n /**\n * The current access token\n */\n accessToken: Signal<string | null>;\n\n /**\n * The current refresh token\n */\n refreshToken: Signal<string | null>;\n\n /**\n * The decrypted bearer data\n */\n bearerData: Signal<TBearerData | null>;\n\n /**\n * Whether the user is currently authenticated\n */\n isAuthenticated: Signal<boolean>;\n\n /**\n * The latest executed query (including internal triggers like auto-refresh)\n */\n latestExecutedQuery: Signal<{ key: ExtractQueryKey<TBuilders[number]>; snapshot: QuerySnapshot<QueryArgs> } | null>;\n\n /**\n * The latest non-internal query (user-triggered only)\n */\n latestNonInternalQuery: Signal<{\n key: ExtractQueryKey<TBuilders[number]>;\n snapshot: QuerySnapshot<QueryArgs>;\n } | null>;\n\n /**\n * The current execution state of the auth provider.\n * Tracks the latest auth operation (login, autoLogin, tokenRefresh, logout, revocation) with its state and payload.\n */\n executionState: Signal<BearerAuthExecutionState<\n ExtractQueryKey<TBuilders[number]> | 'autoLogin' | 'tokenRefresh' | 'logout' | 'revocation'\n > | null>;\n\n /**\n * Seeds the provider with tokens that were issued outside of it — an SSO/OIDC callback that\n * arrives with both tokens in the URL, a token handed over by a native shell, a test harness.\n *\n * Behaves exactly like a successful auth query: the tokens are applied, `bearerData` /\n * `isAuthenticated` update, `afterTokenRefresh$` emits so waiting secure queries run, and (unless\n * disabled) other tabs are synced. Without it the only way in is to execute the refresh query with\n * the refresh token and throw the access token away.\n *\n * Does **not** persist anything by itself — `withPersistentAuth` picks the tokens up through the\n * same signals it watches for query-issued ones.\n */\n setTokens: (accessToken: string, refreshToken: string) => void;\n\n /**\n * Logout the user (clears all tokens and unbinds secure queries)\n */\n logout: () => void;\n\n /**\n * Observable that emits after a successful token refresh.\n * Secure queries can subscribe to this to re-execute themselves with the new token.\n */\n afterTokenRefresh$: Observable<void>;\n};\n\nexport type BearerAuthProviderFeatureContext<\n TBearerData = unknown,\n TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[],\n> = {\n refreshToken: WritableSignal<string | null>;\n afterTokenRefresh$: Observable<void>;\n accessToken: WritableSignal<string | null>;\n bearerData: Signal<TBearerData | null>;\n logout: () => void;\n injector: Injector;\n destroyRef: DestroyRef;\n setTokens: (access: string, refresh: string) => void;\n isLeader: () => boolean;\n leaderElection?: { isLeader: Signal<boolean>; instanceCount: Signal<number> };\n queries: QueryRegistry<TBuilders>;\n executionState: WritableSignal<BearerAuthExecutionState | null>;\n};\n\nexport type BearerAuthProviderQueryContext<\n TBearerData = unknown,\n TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[],\n> = {\n accessToken: WritableSignal<string | null>;\n refreshToken: WritableSignal<string | null>;\n bearerDecryptFn: ((token: string) => TBearerData) | undefined;\n queryClient: QueryClient;\n repository: QueryRepository;\n afterTokenRefresh$: Observable<void>;\n isLeader: () => boolean;\n queries: QueryRegistry<TBuilders>;\n};\n\nconst defaultExtractTokens = (response: unknown): BearerAuthProviderTokens => {\n if (!isObject(response)) {\n throw authExtractTokensResponseNotObject();\n }\n if (!('accessToken' in response) || typeof response['accessToken'] !== 'string') {\n throw authExtractTokensResponseMissingAccessToken();\n }\n if (!('refreshToken' in response) || typeof response['refreshToken'] !== 'string') {\n throw authExtractTokensResponseMissingRefreshToken();\n }\n return { accessToken: response['accessToken'], refreshToken: response['refreshToken'] };\n};\n\nconst deriveExecutionStateType = (builder: AnyQueryBuilder, triggeredBy: string | undefined): string => {\n if (triggeredBy === 'persistent-auth') return 'autoLogin';\n if (builder._type === 'tokenRefreshQuery') return 'tokenRefresh';\n if (triggeredBy === 'token-revocation') return 'revocation';\n return builder.key;\n};\n\nconst setupBearerQueryRegistry = <TBuilders extends readonly AnyQueryBuilder[]>(\n builders: TBuilders,\n injector: Injector,\n latestExecutedQuery: WritableSignal<{ key: string; snapshot: QuerySnapshot<QueryArgs> } | null>,\n latestNonInternalQuery: WritableSignal<{ key: string; snapshot: QuerySnapshot<QueryArgs> } | null>,\n setTokens: (access: string, refresh: string) => void,\n executionState: WritableSignal<BearerAuthExecutionState | null>,\n) => {\n const queries = {} as QueryRegistry<TBuilders>;\n const querySnapshots = new Map<string, Signal<QuerySnapshot<QueryArgs> | null>>();\n\n for (const builder of builders) {\n const querySnapshot = signal<QuerySnapshot<QueryArgs> | null>(null);\n querySnapshots.set(builder.key, querySnapshot);\n\n const extractTokens = builder.config.extractTokens ?? defaultExtractTokens;\n\n effect(() => {\n const snapshot = querySnapshot();\n if (!snapshot) return;\n\n const response = snapshot.response();\n const loading = snapshot.loading();\n const error = snapshot.error();\n\n if (response && !loading && !error) {\n try {\n const tokens = extractTokens(response);\n setTokens(tokens.accessToken, tokens.refreshToken);\n } catch (extractError) {\n if (isDevMode()) {\n console.error(`Failed to extract tokens from ${builder.key} response:`, extractError);\n }\n }\n }\n });\n\n const execute = (args?: RequestArgs<QueryArgs>, options?: { triggeredBy?: string }) => {\n const query = builder.config.queryCreator({\n onlyManualExecution: true,\n injector,\n });\n query.execute({ args, options });\n const snapshot = query.createSnapshot();\n\n const stateType = deriveExecutionStateType(builder, options?.triggeredBy);\n\n if (stateType !== 'revocation') {\n latestExecutedQuery.set({ key: builder.key, snapshot });\n if (!snapshot.triggeredBy()) {\n latestNonInternalQuery.set({ key: builder.key, snapshot });\n }\n }\n executionState.set({ type: stateType, state: 'loading' });\n\n effect(\n () => {\n const response = snapshot.response();\n const loading = snapshot.loading();\n const error = snapshot.error();\n\n if (loading) return;\n\n if (error) {\n executionState.set({ type: stateType, state: 'error', error });\n } else if (response) {\n executionState.set({ type: stateType, state: 'success', response });\n }\n },\n { injector },\n );\n\n querySnapshot.set(snapshot);\n return snapshot;\n };\n\n queries[builder.key as ExtractQueryKey<TBuilders[number]>] = {\n execute,\n snapshot: querySnapshot.asReadonly(),\n } as unknown as QueryRegistry<TBuilders>[ExtractQueryKey<TBuilders[number]>];\n }\n\n return { queries, querySnapshots };\n};\n\nconst setupFeatures = <\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData,\n>(\n featureBuilders: TFeatures | undefined,\n context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>,\n) => {\n const features: Record<string, unknown> = {};\n\n if (!featureBuilders?.length) {\n return features;\n }\n\n const featureTypes = new Set<BearerAuthFeatureType>();\n\n for (const featureSetup of featureBuilders) {\n const feature = featureSetup(context) as BearerAuthFeature<TBuilders, TBearerData> & { instance: unknown };\n\n if (featureTypes.has(feature.type)) {\n throw authProviderFeatureUsedMultipleTimes(feature.type);\n }\n\n featureTypes.add(feature.type);\n const featureName = feature.type\n .toLowerCase()\n .split('_')\n .map((word, index) => (index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)))\n .join('');\n features[featureName] = feature.instance;\n }\n\n return features;\n};\n\nconst setupMultiTabSyncIfEnabled = (\n config: CreateBearerAuthProviderConfig<any, any, any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n accessToken: WritableSignal<string | null>,\n refreshToken: WritableSignal<string | null>,\n queryClient: QueryClient,\n) => {\n const multiTabSyncConfig = config.multiTabSync;\n const multiTabSyncEnabled = multiTabSyncConfig !== false && (multiTabSyncConfig?.enabled ?? true);\n\n if (multiTabSyncEnabled) {\n setupMultiTabSync(\n {\n channelName: typeof multiTabSyncConfig === 'object' ? multiTabSyncConfig?.channelName : undefined,\n syncTokens: typeof multiTabSyncConfig === 'object' ? multiTabSyncConfig?.syncTokens : undefined,\n syncLogout: typeof multiTabSyncConfig === 'object' ? multiTabSyncConfig?.syncLogout : undefined,\n },\n accessToken,\n refreshToken,\n queryClient,\n );\n }\n};\n\nconst createLeaderElection = (\n config: CreateBearerAuthProviderConfig<any, any, any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n) => {\n const multiTabSyncConfig = config.multiTabSync;\n const multiTabSyncEnabled = multiTabSyncConfig !== false && (multiTabSyncConfig?.enabled ?? true);\n const leaderElectionEnabled =\n multiTabSyncEnabled &&\n (typeof multiTabSyncConfig === 'object' ? (multiTabSyncConfig?.leaderElection ?? true) : true);\n const leaderElection = leaderElectionEnabled ? setupLeaderElection() : null;\n const isLeaderFn = () => (leaderElectionEnabled ? (leaderElection?.isLeader() ?? true) : true);\n const leaderElectionContext = leaderElection\n ? { isLeader: leaderElection.isLeader, instanceCount: leaderElection.instanceCount }\n : undefined;\n return { isLeaderFn, leaderElectionContext };\n};\n\nconst createBearerAuthProviderImpl = <\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData,\n>(\n config: CreateBearerAuthProviderConfig<TBuilders, TFeatures, TBearerData>,\n) => {\n const injector = inject(Injector);\n const destroyRef = inject(DestroyRef);\n const queryClient = config.queryClientRef[1]();\n\n const accessToken = signal<string | null>(null);\n const refreshToken = signal<string | null>(null);\n const afterTokenRefresh$ = new Subject<void>();\n\n const bearerData = computed<TBearerData | null>(() => {\n const token = accessToken();\n if (!token) return null;\n\n try {\n return config.bearerDecryptFn?.(token) ?? decryptBearer<TBearerData>(token);\n } catch (error) {\n if (isDevMode()) {\n console.error('Failed to decrypt bearer token:', error);\n }\n return null;\n }\n });\n\n const isAuthenticated = computed(() => !!accessToken());\n const latestExecutedQuery = signal<{ key: string; snapshot: QuerySnapshot<QueryArgs> } | null>(null);\n const latestNonInternalQuery = signal<{ key: string; snapshot: QuerySnapshot<QueryArgs> } | null>(null);\n const executionState = signal<BearerAuthExecutionState | null>(null);\n\n const setTokens = (access: string, refresh: string) => {\n accessToken.set(access);\n refreshToken.set(refresh);\n afterTokenRefresh$.next();\n };\n\n const { queries } = setupBearerQueryRegistry(\n config.queries,\n injector,\n latestExecutedQuery,\n latestNonInternalQuery,\n setTokens,\n executionState,\n );\n\n const logout = () => {\n accessToken.set(null);\n refreshToken.set(null);\n queryClient.repository.unbindAllSecure();\n latestExecutedQuery.set(null);\n latestNonInternalQuery.set(null);\n executionState.set({ type: 'logout', state: 'success' });\n };\n\n const isLeader = createLeaderElection(config);\n\n const querySetupContext: BearerAuthProviderQueryContext<TBearerData, TBuilders> = {\n accessToken,\n refreshToken,\n bearerDecryptFn: config.bearerDecryptFn,\n queryClient,\n repository: queryClient.repository,\n isLeader: isLeader.isLeaderFn,\n afterTokenRefresh$,\n queries: queries as unknown as QueryRegistry<TBuilders>,\n };\n\n for (const builder of config.queries) {\n builder.setup?.(querySetupContext);\n }\n\n const featureSetupContext: BearerAuthProviderFeatureContext<TBearerData, TBuilders> = {\n refreshToken,\n accessToken,\n bearerData,\n logout,\n injector,\n destroyRef,\n setTokens,\n isLeader: isLeader.isLeaderFn,\n leaderElection: isLeader.leaderElectionContext,\n afterTokenRefresh$,\n queries: queries as unknown as QueryRegistry<TBuilders>,\n executionState,\n };\n\n const features = setupFeatures(config.features, featureSetupContext);\n\n setupMultiTabSyncIfEnabled(config, accessToken, refreshToken, queryClient);\n\n const provider = {\n queries,\n features: features as FeatureRegistry<TFeatures, TBuilders>,\n accessToken: accessToken.asReadonly(),\n refreshToken: refreshToken.asReadonly(),\n bearerData,\n isAuthenticated,\n latestExecutedQuery: latestExecutedQuery.asReadonly(),\n latestNonInternalQuery: latestNonInternalQuery.asReadonly(),\n executionState: executionState.asReadonly(),\n setTokens,\n logout,\n afterTokenRefresh$,\n } as BearerAuthProvider<TBuilders, TFeatures, TBearerData>;\n\n if (isQueryDevtoolsEnabled()) {\n const unregister = registerQueryDevtoolsEntry({\n kind: 'auth-provider',\n handle: provider,\n meta: {\n name: config.name,\n clientName: getQueryClientName(config.queryClientRef),\n clientBaseUrl: queryClient.baseUrl,\n repository: queryClient.repository,\n },\n });\n\n destroyRef.onDestroy(unregister);\n }\n\n return provider;\n};\n\nexport const createBearerAuthProvider = <\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData = unknown,\n>(\n config: CreateBearerAuthProviderConfig<TBuilders, TFeatures, TBearerData>,\n) => createRootProvider(() => createBearerAuthProviderImpl(config), { name: `BearerAuthProvider_${config.name}` });\n\nexport type BearerAuthProviderRef<\n TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[] =\n readonly ((context: BearerAuthProviderFeatureContext<unknown, readonly AnyQueryBuilder[]>) => unknown)[],\n TBearerData = unknown,\n> = ProviderResult<BearerAuthProvider<TBuilders, TFeatures, TBearerData>>;\n\nexport type AnyCreateBearerAuthProviderResult = BearerAuthProviderRef<any, any, any>; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n/**\n * The exact provider type behind a `createBearerAuthProvider` result — query keys, feature registry\n * and bearer data all preserved.\n *\n * Prefer this over {@link AnyBearerAuthProvider} whenever the provider is reachable as a value, e.g.\n * when passing one into a helper:\n *\n * ```ts\n * export const myApiAuthProviderRef = createBearerAuthProvider({ ... });\n * export type MyApiAuthProvider = BearerAuthProviderOf<typeof myApiAuthProviderRef>;\n *\n * const doLogin = (provider: MyApiAuthProvider) => provider.queries.login({ body: { ... } });\n * ```\n */\nexport type BearerAuthProviderOf<TRef extends AnyCreateBearerAuthProviderResult> = NonNullable<ReturnType<TRef[1]>>;\n\nexport type AnyBearerAuthProvider = Omit<NonNullable<ReturnType<AnyCreateBearerAuthProviderResult[1]>>, 'queries'> & {\n /**\n * Registry of all configured auth queries.\n *\n * Deliberately untyped here: with unknown builders the mapped type degrades to an index\n * signature, and `noPropertyAccessFromIndexSignature` then rejects `provider.queries.login`\n * (TS4111) — forcing every call site into bracket access or a hand-written structural contract.\n * Use {@link BearerAuthProviderOf} where the concrete provider is reachable and the keys survive.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n queries: any;\n};\n","import { isDevMode } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, of, switchMap, tap, timer } from 'rxjs';\nimport { QueryArgs, QueryCreator, RequestArgs, ResponseType } from '../http';\nimport { ShouldRetryRequestFn } from '../http/query-retry-utils';\nimport { decryptBearer } from '../legacy/auth';\nimport { BearerAuthProviderQueryContext } from './bearer-auth-provider';\n\nexport type BearerAuthProviderTokens = {\n accessToken: string;\n refreshToken: string;\n};\n\nexport type AuthQueryConfig<TArgs extends QueryArgs> = {\n queryCreator: QueryCreator<TArgs>;\n /**\n * Extracts tokens from the response.\n * @default (response) => response (assumes response has accessToken and refreshToken properties)\n */\n extractTokens?: (response: ResponseType<TArgs>) => BearerAuthProviderTokens;\n /**\n * Custom retry function for HTTP requests.\n * @internal Used internally by token refresh queries\n */\n retryFn?: ShouldRetryRequestFn;\n};\n\nexport type TokenRefreshQueryConfig<TArgs extends QueryArgs> = AuthQueryConfig<TArgs> & {\n /**\n * The property name in the decoded JWT that contains the expiration time (in seconds).\n * @default 'exp'\n */\n expiresInPropertyName?: string;\n\n /**\n * Strategy for determining when to refresh the token.\n * Can be either:\n * - A percentage (0-1) of the token's lifetime (e.g., 0.75 = refresh at 75% of lifetime)\n * - A fixed time in milliseconds before expiration\n * - An object with both percentage and min/max constraints\n * @default { percentage: 0.75, minBufferMs: 60000, maxBufferMs: 600000 }\n */\n refreshStrategy?:\n | number\n | {\n /**\n * Percentage of token lifetime before refresh (0-1)\n * @default 0.75\n */\n percentage?: number;\n /**\n * Minimum buffer time in ms (prevents too-early refresh for short-lived tokens)\n * @default 60000 (1 minute)\n */\n minBufferMs?: number;\n /**\n * Maximum buffer time in ms (prevents too-late refresh for long-lived tokens)\n * @default 600000 (10 minutes)\n */\n maxBufferMs?: number;\n };\n\n /**\n * Minimum interval between refresh attempts in milliseconds.\n * Prevents rapid refresh loops in case of issues.\n * @default 30000 (30 seconds)\n */\n minRefreshInterval?: number;\n\n /**\n * Whether to immediately refresh if token is already expired on startup.\n * @default true\n */\n refreshIfExpired?: boolean;\n\n /**\n * Configuration for retry behavior on failed refresh attempts.\n * @default { retryableStatusCodes: [0, 408, 425, 429, 500, 502, 503, 504], maxRetryDelayMs: 30000 }\n */\n retryConfig?: {\n /**\n * HTTP status codes that should trigger a retry.\n * Code 0 means network error (no internet).\n * @default [0, 408, 425, 429, 500, 502, 503, 504]\n */\n retryableStatusCodes?: number[];\n /**\n * Maximum delay between retries in milliseconds.\n * Uses exponential backoff up to this limit, then stays constant.\n * @default 30000 (30 seconds)\n */\n maxRetryDelayMs?: number;\n /**\n * Maximum number of retry attempts.\n * Set to 0 for unlimited retries.\n * @default 0 (unlimited)\n */\n maxAttempts?: number;\n };\n\n /**\n * Whether to automatically retry failed requests with 401 status after refreshing tokens.\n * @default true\n */\n autoRetryOn401?: boolean;\n};\n\nexport type AuthQueryBuilder<TKey extends string, TArgs extends QueryArgs> = {\n _type: 'authQuery';\n key: TKey;\n config: AuthQueryConfig<TArgs>;\n setup?: (context: BearerAuthProviderQueryContext) => void;\n};\n\nexport type TokenRefreshQueryBuilder<TKey extends string, TArgs extends QueryArgs> = {\n _type: 'tokenRefreshQuery';\n key: TKey;\n config: TokenRefreshQueryConfig<TArgs>;\n setup?: (context: BearerAuthProviderQueryContext) => void;\n};\n\nexport type AnyQueryBuilder =\n | AuthQueryBuilder<string, any> // eslint-disable-line @typescript-eslint/no-explicit-any\n | TokenRefreshQueryBuilder<string, any>; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nexport const withAuthenticationQuery = <TKey extends string, TArgs extends QueryArgs>(\n key: TKey,\n config: AuthQueryConfig<TArgs>,\n setup?: (context: BearerAuthProviderQueryContext) => void,\n): AuthQueryBuilder<TKey, TArgs> => ({\n _type: 'authQuery',\n key,\n config: {\n ...config,\n queryCreator: config.queryCreator.clone({ subtle: { useQueryRepositoryCache: true } }),\n },\n setup,\n});\n\nexport const withRefreshQuery = <TKey extends string, TArgs extends QueryArgs>(\n key: TKey,\n config: TokenRefreshQueryConfig<TArgs>,\n): TokenRefreshQueryBuilder<TKey, TArgs> => {\n const retryableStatusCodes = config.retryConfig?.retryableStatusCodes ?? [0, 408, 425, 429, 500, 502, 503, 504];\n const maxRetryDelayMs = config.retryConfig?.maxRetryDelayMs ?? 30000; // 30 seconds\n const maxAttempts = config.retryConfig?.maxAttempts ?? 0; // 0 = unlimited\n\n const refreshRetryFn: ShouldRetryRequestFn = ({ error, retryCount }) => {\n const { status } = error;\n\n if (maxAttempts > 0 && retryCount >= maxAttempts) {\n return { retry: false };\n }\n\n if (!retryableStatusCodes.includes(status)) {\n return { retry: false };\n }\n\n if (status === 429) {\n const retryAfter = error.headers.get('retry-after') || error.headers.get('x-retry-after');\n if (retryAfter) {\n const delay = parseInt(retryAfter) * 1000;\n if (!Number.isNaN(delay)) {\n return { retry: true, delay: Math.min(delay, maxRetryDelayMs) };\n }\n }\n }\n\n const exponentialDelay = 1000 * Math.pow(2, retryCount);\n const delay = Math.min(exponentialDelay, maxRetryDelayMs);\n\n return { retry: true, delay };\n };\n\n const setup = (context: BearerAuthProviderQueryContext) => {\n const expiresInPropertyName = config.expiresInPropertyName ?? 'exp';\n const minRefreshInterval = config.minRefreshInterval ?? 30000; // 30 seconds default\n const refreshIfExpired = config.refreshIfExpired ?? true;\n\n let lastRefreshTime = 0;\n\n const executeRefresh = (triggeredInternally = true) => {\n const currentRefreshToken = context.refreshToken();\n if (!currentRefreshToken || !context.isLeader()) return;\n\n const now = Date.now();\n const timeSinceLastRefresh = now - lastRefreshTime;\n\n // Prevent too-frequent refreshes\n if (timeSinceLastRefresh < minRefreshInterval) return;\n\n lastRefreshTime = now;\n const refreshArgs = { body: { token: currentRefreshToken } } as RequestArgs<QueryArgs>;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n context.queries[key]!.execute(refreshArgs, {\n triggeredBy: triggeredInternally ? 'token-refresh' : undefined,\n });\n };\n\n const calculateRefreshBuffer = (tokenLifetimeMs: number): number => {\n if (typeof config.refreshStrategy === 'number') {\n return config.refreshStrategy;\n }\n\n const percentage = config.refreshStrategy?.percentage ?? 0.75;\n const minBufferMs = config.refreshStrategy?.minBufferMs ?? 60000; // 1 minute\n const maxBufferMs = config.refreshStrategy?.maxBufferMs ?? 600000; // 10 minutes\n\n const calculatedBuffer = tokenLifetimeMs * (1 - percentage);\n\n return Math.max(minBufferMs, Math.min(maxBufferMs, calculatedBuffer));\n };\n\n // Auto-refresh based on token expiration\n toObservable(context.accessToken)\n .pipe(\n switchMap((token) => {\n if (!token) return of(null);\n\n try {\n const bearerDataValue = context.bearerDecryptFn ? context.bearerDecryptFn(token) : decryptBearer(token);\n const expiresIn = (bearerDataValue as Record<string, unknown>)?.[expiresInPropertyName];\n\n if (typeof expiresIn !== 'number') {\n if (isDevMode()) {\n console.warn(`Token does not contain valid ${expiresInPropertyName} property for auto-refresh`);\n }\n return of(null);\n }\n\n const expiresAtMs = expiresIn * 1000;\n const now = Date.now();\n const tokenLifetimeMs = expiresAtMs - now;\n\n if (tokenLifetimeMs <= 0) {\n if (refreshIfExpired) {\n if (isDevMode()) {\n console.warn('Token is already expired, triggering immediate refresh');\n }\n return of(true);\n }\n return of(null);\n }\n\n const refreshBufferMs = calculateRefreshBuffer(tokenLifetimeMs);\n const timeUntilRefresh = tokenLifetimeMs - refreshBufferMs;\n\n if (timeUntilRefresh <= 0) {\n return of(true);\n }\n\n return timer(timeUntilRefresh).pipe(tap(() => true));\n } catch {\n return of(null);\n }\n }),\n takeUntilDestroyed(),\n )\n .subscribe((shouldRefresh) => {\n if (shouldRefresh) {\n executeRefresh(true);\n }\n });\n\n // Auto-retry on 401: Listen to repository events and trigger refresh on 401 errors\n const autoRetryOn401 = config.autoRetryOn401 ?? true;\n if (autoRetryOn401) {\n context.repository.events$\n .pipe(\n filter((event) => {\n // Only handle 401 errors for secure queries\n if (event.type !== 'request-error') return false;\n if (!event.isSecure) return false;\n if (event.error?.status !== 401) return false;\n\n return true;\n }),\n takeUntilDestroyed(),\n )\n .subscribe(() => {\n executeRefresh(true);\n });\n }\n };\n\n return {\n _type: 'tokenRefreshQuery',\n key,\n config: {\n ...config,\n queryCreator: config.queryCreator.clone({ retryFn: refreshRetryFn, subtle: { useQueryRepositoryCache: true } }),\n },\n setup,\n };\n};\n","import { DestroyRef, DOCUMENT, effect, inject, Signal, signal } from '@angular/core';\nimport { filter, fromEvent, interval, merge, switchMap, throttleTime, timer } from 'rxjs';\nimport { AnyQueryBuilder, BearerAuthFeatureType, BearerAuthProviderFeatureContext } from '../bearer-auth-provider';\n\nexport type InactivityLogoutConfig = {\n /**\n * Time in milliseconds of inactivity before auto-logout\n * @default 15 * 60 * 1000 (15 minutes)\n */\n inactivityTimeout?: number;\n /**\n * Events to track for activity detection\n * @default ['mousedown', 'keydown', 'scroll', 'touchstart']\n */\n activityEvents?: string[];\n /**\n * Custom activity check function (called periodically)\n * Return true if user is active\n */\n customActivityCheck?: () => boolean;\n};\n\nexport type InactivityLogoutFeature = {\n /**\n * Enable inactivity tracking\n */\n enable: () => void;\n /**\n * Disable inactivity tracking\n */\n disable: () => void;\n /**\n * Reset the inactivity timer (mark user as active)\n */\n resetTimer: () => void;\n /**\n * Whether inactivity tracking is enabled\n */\n enabled: Signal<boolean>;\n /**\n * Milliseconds until auto-logout (null if disabled or no token)\n */\n calculateTimeUntilLogout: () => number | null;\n};\n\nexport const withInactivityLogout = <TBuilders extends readonly AnyQueryBuilder[]>(\n config: InactivityLogoutConfig = {},\n) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n const inactivityTimeout = config.inactivityTimeout ?? 15 * 60 * 1000;\n const activityEvents = config.activityEvents ?? ['mousedown', 'keydown', 'scroll', 'touchstart'];\n const destroyRef = inject(DestroyRef);\n const document = inject(DOCUMENT);\n const enabled = signal(true);\n const lastActivityTime = signal(Date.now());\n\n const resetTimer = () => {\n lastActivityTime.set(Date.now());\n };\n\n const activityFromEvents$ = merge(...activityEvents.map((event) => fromEvent(document, event))).pipe(\n throttleTime(1000),\n );\n\n const activityFromCustomCheck$ = config.customActivityCheck\n ? interval(1000).pipe(filter(() => config.customActivityCheck?.() ?? false))\n : merge();\n\n const activity$ = merge(activityFromEvents$, activityFromCustomCheck$);\n\n const activitySubscription = activity$.subscribe(() => {\n if (enabled() && context.accessToken()) {\n resetTimer();\n }\n });\n\n const inactivityLogout$ = activity$.pipe(\n switchMap(() => timer(inactivityTimeout)),\n filter(() => enabled() && !!context.accessToken()),\n );\n\n const logoutSubscription = inactivityLogout$.subscribe(() => {\n context.logout();\n });\n\n effect(() => {\n const token = context.accessToken();\n if (token && enabled()) {\n resetTimer();\n }\n });\n\n const enable = () => {\n enabled.set(true);\n resetTimer();\n };\n\n const disable = () => {\n enabled.set(false);\n };\n\n const calculateTimeUntilLogout = () => {\n if (!enabled() || !context.accessToken()) {\n return null;\n }\n\n const elapsed = Date.now() - lastActivityTime();\n const remaining = inactivityTimeout - elapsed;\n\n return remaining > 0 ? remaining : 0;\n };\n\n resetTimer();\n\n destroyRef.onDestroy(() => {\n activitySubscription.unsubscribe();\n logoutSubscription.unsubscribe();\n });\n\n const instance: InactivityLogoutFeature = {\n enable,\n disable,\n resetTimer,\n enabled: enabled.asReadonly(),\n calculateTimeUntilLogout,\n };\n\n return {\n type: BearerAuthFeatureType.INACTIVITY_LOGOUT,\n instance,\n };\n };\n};\n","import { Signal, effect, signal } from '@angular/core';\nimport { deleteCookie as coreDeleteCookie, getCookie, getDomain, injectRoute, setCookie } from '@ethlete/core';\nimport { RequestArgs } from '../../http';\nimport {\n AnyQueryBuilder,\n BearerAuthFeatureType,\n BearerAuthProviderFeatureContext,\n ExtractQueryArgs,\n ExtractQueryKey,\n} from '../bearer-auth-provider';\nimport { decryptToken, encryptToken } from '../utils';\n\nexport type PersistentAuthConfig<\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n> = {\n /**\n * Default remember me state when no user preference is stored.\n * @default false\n */\n defaultRememberMe?: boolean;\n\n /**\n * Cookie configuration\n */\n cookie?: {\n /**\n * The cookie name where the refresh token is stored\n * @default 'etAuth'\n */\n name?: string;\n /**\n * The domain of the cookie. If not set, the current origin will be used.\n */\n domain?: string;\n /**\n * The days until the cookie expires (only used when rememberMe is true)\n * @default 30\n */\n expiresInDays?: number;\n /**\n * The path of the cookie\n * @default '/'\n */\n path?: string;\n /**\n * The same site property of the cookie\n * @default 'lax'\n */\n sameSite?: 'strict' | 'none' | 'lax';\n };\n\n /**\n * Auto-login configuration\n */\n autoLogin: {\n /**\n * The query key to use for auto-login (must reference a registered query)\n */\n queryKey: TKey;\n /**\n * A function that turns the token gotten from the cookie into the body for the auto-login request\n * @default (token) => ({ body: { token } })\n */\n buildArgs: (token: string) => RequestArgs<ExtractQueryArgs<Extract<TBuilders[number], { key: TKey }>>>;\n /**\n * An array of routes where the auto login via cookie should not be triggered.\n *\n * @default []\n */\n excludeRoutes?: string[];\n };\n};\n\nexport type PersistentAuthFeature = {\n /**\n * Current remember me state (session cookie vs persistent cookie)\n */\n rememberMe: Signal<boolean>;\n /**\n * Set remember me preference.\n * - true: Creates persistent cookie with expiresInDays\n * - false: Creates session cookie (deleted on browser close)\n */\n setRememberMe: (enabled: boolean) => void;\n /**\n * Try to login using stored cookie\n */\n tryLogin: () => void;\n};\n\nexport const withPersistentAuth = <\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n>(\n config: PersistentAuthConfig<TBuilders, TKey>,\n) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n const instance = createPersistentAuthFeature(config, context);\n return {\n type: BearerAuthFeatureType.PERSISTENT_AUTH,\n instance,\n };\n };\n};\n\nexport const createPersistentAuthFeature = <\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n>(\n config: PersistentAuthConfig<TBuilders, TKey>,\n context: BearerAuthProviderFeatureContext<unknown, TBuilders>,\n): PersistentAuthFeature => {\n const { refreshToken } = context;\n const cookieName = config.cookie?.name ?? 'etAuth';\n const rememberMeStorageKey = `${cookieName}-rememberMe`;\n const route = injectRoute();\n\n const initializeRememberMe = (): boolean => {\n const storedPreference = typeof localStorage !== 'undefined' ? localStorage.getItem(rememberMeStorageKey) : null;\n if (storedPreference !== null) {\n return storedPreference === 'true';\n }\n\n const existingCookie = getCookie(cookieName);\n if (existingCookie) {\n return true;\n }\n\n return config.defaultRememberMe ?? false;\n };\n\n const rememberMeSignal = signal(initializeRememberMe());\n\n effect(() => {\n const token = refreshToken();\n const rememberMe = rememberMeSignal();\n const domain = config.cookie?.domain ?? getDomain() ?? 'localhost';\n const path = config.cookie?.path ?? '/';\n const sameSite = config.cookie?.sameSite ?? 'lax';\n\n if (token) {\n const encryptedToken = encryptToken(token);\n if (rememberMe) {\n const expiresInDays = config.cookie?.expiresInDays ?? 30;\n setCookie(cookieName, encryptedToken, expiresInDays, domain, path, sameSite);\n } else {\n setCookie(cookieName, encryptedToken, null, domain, path, sameSite);\n }\n } else {\n coreDeleteCookie(cookieName, path, domain);\n }\n });\n\n const tryLogin = () => {\n const currentRoute = route();\n const excludeRoutes = config.autoLogin.excludeRoutes ?? [];\n const shouldExclude = excludeRoutes.some((r) => currentRoute.startsWith(r));\n\n if (shouldExclude) {\n return;\n }\n\n const storedToken = getCookie(cookieName);\n if (storedToken) {\n const decryptedToken = decryptToken(storedToken);\n const args = config.autoLogin.buildArgs(decryptedToken);\n context.queries[config.autoLogin.queryKey].execute(args, { triggeredBy: 'persistent-auth' });\n }\n };\n\n const setRememberMe = (enabled: boolean) => {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(rememberMeStorageKey, String(enabled));\n }\n rememberMeSignal.set(enabled);\n };\n\n tryLogin();\n\n return {\n rememberMe: rememberMeSignal.asReadonly(),\n setRememberMe,\n tryLogin,\n };\n};\n","import { Signal, computed } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { combineLatest, interval, map } from 'rxjs';\nimport { AnyQueryBuilder, BearerAuthFeatureType, BearerAuthProviderFeatureContext } from '../bearer-auth-provider';\n\nexport type TokenExpirationWarningConfig = {\n /**\n * Time in milliseconds before token expiration to emit warning\n * @default 5 * 60 * 1000 (5 minutes)\n */\n warningThreshold?: number;\n /**\n * Interval in milliseconds to check for token expiration\n * @default 1000 (1 second)\n */\n checkInterval?: number;\n};\n\nexport type TokenExpirationWarningFeature = {\n /**\n * Signal that emits true when token is about to expire\n */\n isExpiringSoon: Signal<boolean>;\n /**\n * Time in milliseconds until token expires (null if no token or expired)\n */\n expiresIn: Signal<number | null>;\n /**\n * Timestamp when token expires (null if no token)\n */\n expiresAt: Signal<Date | null>;\n};\n\nexport const withTokenExpirationWarning = <TBuilders extends readonly AnyQueryBuilder[]>(\n config: NoInfer<TokenExpirationWarningConfig> = {},\n) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n const warningThreshold = config.warningThreshold ?? 5 * 60 * 1000;\n const checkInterval = config.checkInterval ?? 1000;\n const expiresAt = computed<Date | null>(() => {\n const decoded = context.bearerData() as { exp?: number; [key: string]: unknown } | null;\n if (!decoded) return null;\n\n const exp = decoded.exp;\n\n if (typeof exp !== 'number') return null;\n\n return new Date(exp * 1000);\n });\n\n const expiresIn$ = combineLatest([interval(checkInterval), toObservable(context.bearerData)]).pipe(\n map(() => {\n const expiry = expiresAt();\n if (!expiry) return null;\n\n const now = Date.now();\n const msUntilExpiry = expiry.getTime() - now;\n\n return msUntilExpiry > 0 ? msUntilExpiry : null;\n }),\n );\n\n const isExpiringSoon$ = expiresIn$.pipe(\n map((msUntilExpiry) => {\n if (msUntilExpiry === null) return false;\n return msUntilExpiry <= warningThreshold && msUntilExpiry > 0;\n }),\n );\n\n const expiresIn = toSignal(expiresIn$, { initialValue: null });\n const isExpiringSoon = toSignal(isExpiringSoon$, { initialValue: false });\n\n const instance: TokenExpirationWarningFeature = {\n expiresAt,\n expiresIn,\n isExpiringSoon,\n };\n\n return {\n type: BearerAuthFeatureType.TOKEN_EXPIRATION_WARNING,\n instance,\n };\n };\n};\n","import { effect, Signal, signal, untracked } from '@angular/core';\nimport { AnyQuerySnapshot, QuerySnapshot, RequestArgs } from '../../http';\nimport {\n AnyQueryBuilder,\n BearerAuthFeatureType,\n BearerAuthProviderFeatureContext,\n ExtractQueryArgs,\n ExtractQueryKey,\n} from '../bearer-auth-provider';\n\nexport type TokenRevocationConfig<\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n> = {\n /**\n * The query key to use for token revocation (must reference a registered query)\n */\n queryKey: TKey;\n /**\n * Function to build the revocation request args from tokens\n */\n buildArgs: (tokens: {\n accessToken: string | null;\n refreshToken: string | null;\n }) => RequestArgs<ExtractQueryArgs<Extract<TBuilders[number], { key: TKey }>>>;\n /**\n * Whether to revoke on logout\n * @default true\n */\n revokeOnLogout?: boolean;\n};\n\nexport type TokenRevocationFeature<TQuerySnapshot extends AnyQuerySnapshot> = {\n /**\n * Manually revoke the current tokens.\n * Returns `null` if there are no tokens to revoke\n * Returns the revocation query snapshot if revocation was attempted\n */\n revoke: () => TQuerySnapshot | null;\n /**\n * Enable automatic revocation on logout\n */\n enable: () => void;\n /**\n * Disable automatic revocation on logout\n */\n disable: () => void;\n /**\n * Whether automatic revocation is enabled\n */\n enabled: Signal<boolean>;\n};\n\nexport const withTokenRevocation = <\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n>(\n config: TokenRevocationConfig<TBuilders, TKey>,\n) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n type RevocationSnapshot = QuerySnapshot<ExtractQueryArgs<Extract<TBuilders[number], { key: TKey }>>>;\n\n const revokeOnLogout = config.revokeOnLogout ?? true;\n\n const enabled = signal(true);\n let previousAccessToken: string | null = null;\n let previousRefreshToken: string | null = null;\n let currentRevocationSnapshot: RevocationSnapshot | null = null;\n\n const revokeWithTokens = (accessToken: string | null, refreshToken: string | null) => {\n if (currentRevocationSnapshot?.isAlive()) return currentRevocationSnapshot;\n\n if (!accessToken && !refreshToken) {\n return null;\n }\n\n const args = config.buildArgs({ accessToken, refreshToken });\n\n context.executionState.set({ type: 'revocation', state: 'loading' });\n\n currentRevocationSnapshot = context.queries[config.queryKey].execute(args, {\n triggeredBy: 'token-revocation',\n });\n\n return currentRevocationSnapshot;\n };\n\n const revoke = () => {\n return revokeWithTokens(context.accessToken(), context.refreshToken());\n };\n\n const enable = () => {\n enabled.set(true);\n };\n\n const disable = () => {\n enabled.set(false);\n };\n\n if (revokeOnLogout) {\n effect(\n () => {\n const currentToken = context.accessToken();\n const currentRefreshToken = context.refreshToken();\n\n if (previousAccessToken && !currentToken && enabled()) {\n untracked(() => revokeWithTokens(previousAccessToken, previousRefreshToken));\n }\n\n previousAccessToken = currentToken;\n previousRefreshToken = currentRefreshToken;\n },\n { injector: context.injector },\n );\n }\n\n const instance: TokenRevocationFeature<RevocationSnapshot> = {\n revoke,\n enable,\n disable,\n enabled: enabled.asReadonly(),\n };\n\n return {\n type: BearerAuthFeatureType.TOKEN_REVOCATION,\n instance,\n };\n };\n};\n","import { effect, Signal } from '@angular/core';\nimport { QueryArgs, QueryErrorResponse, QuerySnapshot } from '../../http';\nimport {\n AnyQueryBuilder,\n BearerAuthFeatureType,\n BearerAuthProviderFeatureContext,\n ExtractQueryArgs,\n ExtractQueryKey,\n} from '../bearer-auth-provider';\n\nexport type TrackingEventName<TBuilders extends readonly AnyQueryBuilder[]> =\n | `${ExtractQueryKey<TBuilders[number]>}Execute`\n | `${ExtractQueryKey<TBuilders[number]>}Success`\n | `${ExtractQueryKey<TBuilders[number]>}Failure`\n | 'tokenRefreshSuccess'\n | 'logout'\n | 'leaderStatusChange'\n | 'leaderInstanceCountChange';\n\ntype ExtractKeyFromEventName<TEventName extends string> = TEventName extends `${infer K}Execute`\n ? K\n : TEventName extends `${infer K}Success`\n ? K\n : TEventName extends `${infer K}Failure`\n ? K\n : never;\n\ntype ExtractArgsForEvent<TBuilders extends readonly AnyQueryBuilder[], TEventName extends string> = ExtractQueryArgs<\n Extract<TBuilders[number], { key: ExtractKeyFromEventName<TEventName> }>\n>;\n\nexport type QueryExecuteEventData<TArgs extends QueryArgs = QueryArgs> = {\n queryKey: string;\n args: TArgs;\n};\n\nexport type QuerySuccessEventData<TArgs extends QueryArgs = QueryArgs> = {\n snapshot: QuerySnapshot<TArgs>;\n};\n\nexport type QueryFailureEventData = {\n error: QueryErrorResponse;\n};\n\nexport type TokenRefreshEventData = {\n automatic: boolean;\n};\n\nexport type LeaderStatusChangeEventData = {\n isLeader: boolean;\n};\n\nexport type LeaderInstanceCountChangeEventData = {\n count: number;\n};\n\nexport type TrackingEventDataMap<TBuilders extends readonly AnyQueryBuilder[]> = {\n [K in TrackingEventName<TBuilders>]: K extends `${string}Execute`\n ? QueryExecuteEventData<ExtractArgsForEvent<TBuilders, K>>\n : K extends `${string}Success`\n ? QuerySuccessEventData<ExtractArgsForEvent<TBuilders, K>>\n : K extends `${string}Failure`\n ? QueryFailureEventData\n : K extends 'tokenRefreshSuccess'\n ? TokenRefreshEventData\n : K extends 'logout'\n ? void\n : K extends 'leaderStatusChange'\n ? LeaderStatusChangeEventData\n : K extends 'leaderInstanceCountChange'\n ? LeaderInstanceCountChangeEventData\n : never;\n};\n\nexport type TrackingEventHandler<TData> = (data: TData) => void;\n\nexport type TrackingConfig<TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[]> = {\n /**\n * Whether to track internal events (auto token refresh, etc.)\n * @default true\n */\n trackInternalEvents?: boolean;\n\n /**\n * Event handlers to register immediately\n */\n on?: {\n [K in TrackingEventName<TBuilders>]?: TrackingEventHandler<TrackingEventDataMap<TBuilders>[K]>;\n };\n};\n\nexport type TrackingFeature<TBuilders extends readonly AnyQueryBuilder[]> = {\n /**\n * Register an event handler for a specific event\n * @returns Unsubscribe function\n */\n on<TEvent extends TrackingEventName<TBuilders>>(\n event: TEvent,\n handler: TrackingEventHandler<TrackingEventDataMap<TBuilders>[TEvent]>,\n ): () => void;\n\n /**\n * Unregister an event handler\n */\n off<TEvent extends TrackingEventName<TBuilders>>(\n event: TEvent,\n handler: TrackingEventHandler<TrackingEventDataMap<TBuilders>[TEvent]>,\n ): void;\n};\n\nexport const withTracking = <TBuilders extends readonly AnyQueryBuilder[]>(config?: TrackingConfig<TBuilders>) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n const instance = createTrackingFeature<TBuilders>(context, config);\n return {\n type: BearerAuthFeatureType.TRACKING,\n instance,\n };\n };\n};\n\nexport const createTrackingFeature = <TBuilders extends readonly AnyQueryBuilder[]>(\n context: BearerAuthProviderFeatureContext<unknown, TBuilders>,\n config?: TrackingConfig<TBuilders>,\n): TrackingFeature<TBuilders> => {\n const handlers = new Map<string, Set<TrackingEventHandler<any>>>(); // eslint-disable-line @typescript-eslint/no-explicit-any\n\n const on = <TEvent extends TrackingEventName<TBuilders>>(\n event: TEvent,\n handler: TrackingEventHandler<TrackingEventDataMap<TBuilders>[TEvent]>,\n ): (() => void) => {\n if (!handlers.has(event)) {\n handlers.set(event, new Set());\n }\n const eventHandlers = handlers.get(event);\n if (eventHandlers) {\n eventHandlers.add(handler);\n }\n\n return () => off(event, handler);\n };\n\n const off = <TEvent extends TrackingEventName<TBuilders>>(\n event: TEvent,\n handler: TrackingEventHandler<TrackingEventDataMap<TBuilders>[TEvent]>,\n ): void => {\n const eventHandlers = handlers.get(event);\n if (eventHandlers) {\n eventHandlers.delete(handler);\n if (eventHandlers.size === 0) {\n handlers.delete(event);\n }\n }\n };\n\n const fireHandlers = (event: string, data: unknown): void => {\n const eventHandlers = handlers.get(event);\n if (eventHandlers) {\n eventHandlers.forEach((handler) => {\n try {\n handler(data);\n } catch (error) {\n console.error(`Error in tracking event handler for \"${event}\":`, error);\n }\n });\n }\n };\n\n type ForwardedMessage = { event: string; data: unknown };\n const forwardingChannel =\n context.leaderElection && typeof BroadcastChannel !== 'undefined'\n ? new BroadcastChannel('ethlete-auth-tracking')\n : null;\n\n if (forwardingChannel) {\n forwardingChannel.onmessage = (messageEvent: MessageEvent<ForwardedMessage>) => {\n if (context.isLeader()) {\n fireHandlers(messageEvent.data.event, messageEvent.data.data);\n }\n };\n context.destroyRef.onDestroy(() => forwardingChannel.close());\n }\n\n const emit = (event: string, data: unknown): void => {\n if (forwardingChannel && !context.isLeader()) {\n forwardingChannel.postMessage({ event, data } satisfies ForwardedMessage);\n return;\n }\n fireHandlers(event, data);\n };\n\n const emitDirect = (event: string, data: unknown): void => {\n fireHandlers(event, data);\n };\n\n const trackedQueries = new Map<string, { loading: boolean; lastResult: 'success' | 'error' | null }>();\n\n Object.entries(context.queries).forEach(([key, queryEntry]) => {\n const query = queryEntry as { snapshot: Signal<any>; execute: (...args: any[]) => any }; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n effect(() => {\n const snapshot = query.snapshot();\n if (!snapshot) return;\n\n const triggeredBy = snapshot.triggeredBy();\n if (triggeredBy) return;\n\n const loading = snapshot.loading();\n const error = snapshot.error();\n const response = snapshot.response();\n\n const prevState = trackedQueries.get(key);\n\n if (response && !loading && !error && prevState?.lastResult !== 'success') {\n trackedQueries.set(key, { loading: false, lastResult: 'success' });\n emit(`${key}Success`, { snapshot });\n }\n\n if (error && !loading && prevState?.lastResult !== 'error') {\n trackedQueries.set(key, { loading: false, lastResult: 'error' });\n emit(`${key}Failure`, { error });\n }\n\n if (loading) {\n trackedQueries.set(key, { loading: true, lastResult: null });\n }\n });\n });\n\n let hadTokens = false;\n effect(() => {\n const accessToken = context.accessToken();\n const refreshToken = context.refreshToken();\n const hasTokens = !!(accessToken || refreshToken);\n\n if (hadTokens && !hasTokens) {\n emit('logout', undefined);\n }\n\n hadTokens = hasTokens;\n });\n\n context.afterTokenRefresh$.subscribe(() => {\n emit('tokenRefreshSuccess', {\n queryKey: 'refresh',\n snapshot: undefined,\n });\n });\n\n if (config?.on) {\n Object.entries(config.on).forEach(([event, handler]) => {\n if (handler) {\n on(event as TrackingEventName<TBuilders>, handler);\n }\n });\n }\n\n if (context.leaderElection) {\n const { isLeader: isLeaderSignal, instanceCount: instanceCountSignal } = context.leaderElection;\n\n effect(() => {\n emitDirect('leaderStatusChange', { isLeader: isLeaderSignal() } satisfies LeaderStatusChangeEventData);\n });\n\n effect(() => {\n emitDirect('leaderInstanceCountChange', {\n count: instanceCountSignal(),\n } satisfies LeaderInstanceCountChangeEventData);\n });\n }\n\n return {\n on,\n off,\n };\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})\nexport class ParseHttpErrorCodeToTitleDePipe implements PipeTransform {\n transform = parseHttpErrorCodeToTitleDe;\n}\n\n@Pipe({\n name: 'parseHttpErrorCodeToMessageDe',\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})\nexport class ParseHttpErrorCodeToTitleEnPipe implements PipeTransform {\n transform = parseHttpErrorCodeToTitleEn;\n}\n\n@Pipe({\n name: 'parseHttpErrorCodeToMessageEn',\n})\nexport class ParseHttpErrorCodeToMessageEnPipe implements PipeTransform {\n transform = parseHttpErrorCodeToMessageEn;\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 type SortDirection = 'asc' | 'desc' | '';\n\nexport type Sort = {\n active: string;\n direction: SortDirection;\n};\n\nexport const transformToSort = (value: unknown): Sort | null => {\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 { FormControl, 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 OptionalQueryFieldOptions,\n QueryFieldOptions,\n QueryFormGroup,\n QueryFormGroupControls,\n QueryFormObserveOptions,\n QueryFormValue,\n QueryFormValueEvent,\n QueryFormWriteOptions,\n} from './query-form.types';\nimport {\n Sort,\n transformToBoolean,\n transformToBooleanArray,\n transformToDate,\n transformToDateArray,\n transformToNumber,\n transformToNumberArray,\n transformToSort,\n transformToSortQueryParam,\n transformToStringArray,\n} from './query-form.utils';\n\nconst ET_ARR_PREFIX = 'ET_ARR__';\nconst ET_OBJ_PREFIX = 'ET_OBJ__';\nconst ET_PROP_NULL_VALUE = 'ET_NULL__';\n\nexport class QueryField<T> {\n get control() {\n return this.data.control;\n }\n\n constructor(public data: QueryFieldOptions<T>) {}\n}\n\nexport class SearchQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<string | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<string | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<string | null>(null),\n debounce: 300,\n disableDebounceIfFalsy: true,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class SortQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<Sort | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<Sort | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<Sort | null>(null),\n queryParamToValueTransformFn: transformToSort,\n valueToQueryParamTransformFn: transformToSortQueryParam,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class StringArrayQueryField<T extends string[]> {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<T | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<T | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<T | null>(null),\n queryParamToValueTransformFn: transformToStringArray as (val: unknown) => T | null,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class BooleanArrayQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<boolean[] | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<boolean[] | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<boolean[] | null>(null),\n queryParamToValueTransformFn: transformToBooleanArray,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class NumberArrayQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<number[] | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<number[] | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<number[] | null>(null),\n queryParamToValueTransformFn: transformToNumberArray,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class DateQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<Date | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<Date | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<Date | null>(null),\n queryParamToValueTransformFn: transformToDate,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class DateArrayQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<Date[] | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<Date[] | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<Date[] | null>(null),\n queryParamToValueTransformFn: transformToDateArray,\n ...(_data ?? {}),\n };\n }\n}\n\nconst IGNORED_FILTER_COUNT_FIELDS = ['page', 'skip', 'take', 'limit', 'sort', 'sortBy', 'sortOrder', 'query', 'search'];\n\nexport type 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 const defaultValue = this._getDefaultValue(key);\n if (!equal(field.control.value, defaultValue)) {\n field.control.setValue(defaultValue, { emitEvent: false });\n didValueChanges = true;\n }\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 = typeof 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 (value === ET_PROP_NULL_VALUE) {\n deserializedValue = null;\n } else if (\n defaultIsNum ||\n (valueIsNum && !valueContainsWhitespace && !valueHasLeadingZero && !valueEndsWithDot)\n ) {\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 === 'string' && val.startsWith(ET_OBJ_PREFIX)) {\n return JSON.parse(val.slice(ET_OBJ_PREFIX.length));\n } else if (typeof val === 'function') {\n return val();\n } else if (val === ET_PROP_NULL_VALUE) {\n return null;\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)\n ? `${ET_ARR_PREFIX}${JSON.stringify(value)}`\n : typeof value === 'object' && value !== null\n ? `${ET_OBJ_PREFIX}${JSON.stringify(value)}`\n : value === null\n ? ET_PROP_NULL_VALUE\n : value;\n\n return this._defaultValues[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 if (typeof value === 'object' && value !== null) {\n defaultValues[key] = `${ET_OBJ_PREFIX}${JSON.stringify(value)}`;\n } else if (value === null) {\n defaultValues[key] = ET_PROP_NULL_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 === null\n ? ET_PROP_NULL_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 // Normalize values that have a valueToQueryParamTransformFn returning null/undefined to their\n // field default before capturing the new value. This prevents intermediate \"empty object\" states\n // (e.g. Sort emitting { active: '', direction: '' } when cleared) from being\n // emitted as distinct form values.\n for (const [key, field] of Object.entries(this._fields)) {\n if (!field.data.valueToQueryParamTransformFn) continue;\n const rawValue = (this._formValue as Record<string, unknown>)[key];\n if (this._isDefaultValue(key, rawValue)) continue;\n const serialized = field.data.valueToQueryParamTransformFn(rawValue);\n if (serialized !== null && serialized !== undefined) continue;\n this.form.controls[key]?.setValue(this._getDefaultValue(key), { emitEvent: false });\n }\n\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 if (!this._isObserving) return;\n\n this._isObserving = false;\n\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","import {\n DestroyRef,\n Injector,\n Signal,\n assertInInjectionContext,\n computed,\n effect,\n inject,\n isDevMode,\n signal,\n untracked,\n} from '@angular/core';\nimport { FieldTree, form } from '@angular/forms/signals';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ET_PROPERTY_REMOVED, clone, equal, injectQueryParamChanges } from '@ethlete/core';\nimport { transformToBoolean, transformToNumber } from '../query-form/query-form.utils';\nimport {\n QueryFieldDef,\n QueryFormChange,\n QueryFormFields,\n QueryFormModel,\n QueryFormSignalsObserveOptions,\n QueryFormSignalsWriteOptions,\n} from './query-form-signals.types';\n\n/** URL sentinel for an explicit `null` value (a bare empty param would be ambiguous). */\nconst ET_NULL_VALUE = 'ET_NULL__';\n\n/**\n * Fields excluded from `activeFilterCount` by default — pagination, sorting and\n * search are navigation state, not filters.\n */\nexport const IGNORED_FILTER_COUNT_FIELDS: readonly string[] = [\n 'page',\n 'skip',\n 'take',\n 'limit',\n 'sort',\n 'sortBy',\n 'sortOrder',\n 'query',\n 'search',\n];\n\ntype Dict = Record<string, unknown>;\n\nconst resolveDefault = (def: QueryFieldDef<unknown>): unknown => {\n const { defaultValue } = def;\n\n return typeof defaultValue === 'function' ? (defaultValue as () => unknown)() : (defaultValue ?? null);\n};\n\nconst buildDefaults = (fields: QueryFormFields): Dict => {\n const out: Dict = {};\n\n for (const [key, def] of Object.entries(fields)) {\n out[key] = resolveDefault(def);\n }\n\n return out;\n};\n\nconst changedKeysBetween = (previous: Dict | null, current: Dict): string[] =>\n Object.keys(current).filter((key) => !equal(previous?.[key], current[key]));\n\n/** Best-effort URL string → value coercion, mirroring the auto-transform of the legacy QueryForm. */\nconst autoCoerce = (raw: unknown, defaultValue: unknown): unknown => {\n if (raw === ET_NULL_VALUE) return null;\n\n if (typeof raw !== 'string') return raw;\n\n const defaultIsNumber = typeof defaultValue === 'number';\n const looksNumeric = raw.trim() === raw && !raw.startsWith('0') && !raw.endsWith('.') && !isNaN(Number(raw));\n\n if (defaultIsNumber || (looksNumeric && raw !== '')) {\n return transformToNumber(raw);\n }\n\n if (raw === 'true' || raw === 'false') {\n return transformToBoolean(raw);\n }\n\n return raw;\n};\n\nconst computeFilterCount = (fields: QueryFormFields, value: Dict, defaults: Dict): number => {\n let count = 0;\n\n for (const [key, def] of Object.entries(fields)) {\n if (IGNORED_FILTER_COUNT_FIELDS.includes(key) || def.skipInFilterCount) continue;\n if (!equal(value[key], defaults[key])) count++;\n }\n\n return count;\n};\n\n/**\n * A detached editor over the same fields — its own signal-forms form and value,\n * with no URL sync and no reset graph. Written back to the source form via\n * `source.setValue(branch.value())`. Powers the filter-overlay \"edit then apply\"\n * pattern (see `10-filter.md`).\n */\nexport type QueryFormBranch<TFields extends QueryFormFields> = {\n /** The bindable signal-forms field tree (`branch.fields.search`). */\n readonly fields: FieldTree<QueryFormModel<TFields>>;\n /** The live (undebounced) value of the branch. */\n readonly value: Signal<QueryFormModel<TFields>>;\n /** The number of active (non-default) filters in the branch. */\n readonly activeFilterCount: Signal<number>;\n setValue(value: QueryFormModel<TFields>): void;\n patchValue(value: Partial<QueryFormModel<TFields>>): void;\n resetFieldToDefault(key: keyof QueryFormModel<TFields>): void;\n resetAllFieldsToDefault(): void;\n};\n\nconst createBranch = <TFields extends QueryFormFields>(\n fields: TFields,\n initial: QueryFormModel<TFields>,\n injector: Injector,\n): QueryFormBranch<TFields> => {\n const defaults = buildDefaults(fields);\n const model = signal<QueryFormModel<TFields>>(clone(initial));\n const tree = form(model, { injector });\n\n return {\n fields: tree,\n value: model.asReadonly(),\n activeFilterCount: computed(() => computeFilterCount(fields, model() as Dict, defaults)),\n setValue: (value) => model.set(clone(value)),\n patchValue: (value) => model.update((cur) => ({ ...cur, ...value })),\n resetFieldToDefault: (key) => model.update((cur) => ({ ...cur, [key]: defaults[key as string] })),\n resetAllFieldsToDefault: () => model.set(clone(defaults) as QueryFormModel<TFields>),\n };\n};\n\nexport type CreateQueryFormConfig<TFields extends QueryFormFields> = {\n readonly fields: TFields;\n\n /**\n * A prefix for every query-param key, so multiple query forms can coexist on\n * one route (e.g. prefix `'users'` maps the `page` field to `users-page`).\n * A function is evaluated every time a key is built.\n */\n readonly queryParamPrefix?: string | (() => string);\n};\n\n/**\n * A signals-first query form: binds on-screen controls to typed fields, keeps a\n * debounced committed value, syncs to the URL query params, and resets dependent\n * fields via the `isResetBy` graph — all as signals.\n *\n * @example\n * const qf = createQueryForm({\n * fields: {\n * search: searchQueryField(),\n * sort: sortQueryField(),\n * page: queryField<number>({ defaultValue: 1, isResetBy: ['search', 'sort'] }),\n * },\n * }).observe();\n * // template: <input etInput [formField]=\"qf.fields.search\" />\n */\nexport class QueryFormSignals<TFields extends QueryFormFields> {\n private readonly _router = inject(Router);\n private readonly _route = inject(ActivatedRoute);\n private readonly _injector = inject(Injector);\n\n private readonly _fields: TFields;\n private readonly _prefix: string | (() => string) | undefined;\n private readonly _defaults: Dict;\n\n /** Live field values (updated immediately by bound controls). */\n private readonly _model: ReturnType<typeof signal<QueryFormModel<TFields>>>;\n\n /** The committed (debounced) value that drives `value`, the URL and the filter count. */\n private readonly _committed: ReturnType<typeof signal<QueryFormModel<TFields>>>;\n private readonly _previous = signal<QueryFormModel<TFields> | null>(null);\n\n private readonly _observing = signal(false);\n private readonly _queryParamChanges = injectQueryParamChanges();\n\n private _observeOptions: QueryFormSignalsObserveOptions | undefined;\n private _pendingTimer: ReturnType<typeof setTimeout> | null = null;\n private _skipNextResets = false;\n\n /**\n * The bindable signal-forms field tree — bind a field with `[formField]`, e.g.\n * `<input etInput [formField]=\"qf.fields.search\" />`.\n */\n public readonly fields: FieldTree<QueryFormModel<TFields>>;\n\n /** The committed value of the form. */\n public readonly value: Signal<QueryFormModel<TFields>>;\n\n /** The committed value before the most recent change. */\n public readonly previousValue: Signal<QueryFormModel<TFields> | null>;\n\n /** The previous/current value pair of the most recent committed change. */\n public readonly changes: Signal<QueryFormChange<TFields>>;\n\n /**\n * The number of active filters. Excludes the pagination/sort/search keys and\n * any field created with `skipInFilterCount`.\n */\n public readonly activeFilterCount: Signal<number>;\n\n /** The default value of the whole form. */\n public readonly defaultValue: QueryFormModel<TFields>;\n\n public constructor(config: CreateQueryFormConfig<TFields>) {\n assertInInjectionContext(QueryFormSignals);\n\n this._fields = config.fields;\n this._prefix = config.queryParamPrefix;\n this._defaults = buildDefaults(config.fields);\n this.defaultValue = clone(this._defaults) as QueryFormModel<TFields>;\n\n const initial = clone(this._defaults) as QueryFormModel<TFields>;\n this._model = signal(initial);\n this._committed = signal(clone(initial) as QueryFormModel<TFields>);\n this.fields = form(this._model);\n\n this.value = this._committed.asReadonly();\n this.previousValue = this._previous.asReadonly();\n this.changes = computed(() => ({ previousValue: this._previous(), currentValue: this._committed() }));\n this.activeFilterCount = computed(() =>\n computeFilterCount(this._fields, this._committed() as Dict, this._defaults),\n );\n\n // React to live control edits: schedule a debounced commit.\n effect(() => {\n const live = this._model();\n\n untracked(() => this._onLiveChange(live as Dict));\n });\n\n // React to navigation (back/forward, external links): apply URL → form immediately.\n effect(() => {\n const changes = this._queryParamChanges();\n\n untracked(() => {\n if (!this._observing() || this._observeOptions?.syncOnNavigation === false) return;\n\n this._applyFromUrl(changes as Dict);\n });\n });\n\n inject(DestroyRef).onDestroy(() => this._cleanup());\n }\n\n public observe(options?: QueryFormSignalsObserveOptions): this {\n if (this._observing()) {\n if (isDevMode()) {\n console.warn('QueryFormSignals.observe() was called more than once. Ignoring the extra call.');\n }\n\n return this;\n }\n\n this._observeOptions = options;\n this._observing.set(true);\n\n if (options?.syncOnNavigation !== false) {\n this._applyFromUrl(this._route.snapshot.queryParams as Dict);\n }\n\n // Commit whatever the model holds now (URL-restored or programmatic defaults).\n this._flush();\n\n return this;\n }\n\n public unobserve(): void {\n this._cleanup();\n }\n\n public setValue(value: QueryFormModel<TFields>, options?: QueryFormSignalsWriteOptions): void {\n if (options?.skipResets) this._skipNextResets = true;\n\n this._model.set(clone(value));\n }\n\n public patchValue(value: Partial<QueryFormModel<TFields>>, options?: QueryFormSignalsWriteOptions): void {\n if (options?.skipResets) this._skipNextResets = true;\n\n this._model.update((cur) => ({ ...cur, ...value }));\n }\n\n public resetFieldToDefault(key: keyof QueryFormModel<TFields>, options?: QueryFormSignalsWriteOptions): void {\n if (options?.skipResets) this._skipNextResets = true;\n\n this._model.update((cur) => ({ ...cur, [key]: this._defaults[key as string] }));\n }\n\n public resetFieldsToDefault(keys: (keyof QueryFormModel<TFields>)[], options?: QueryFormSignalsWriteOptions): void {\n if (options?.skipResets) this._skipNextResets = true;\n\n this._model.update((cur) => {\n const next = { ...cur } as Dict;\n\n for (const key of keys) {\n next[key as string] = this._defaults[key as string];\n }\n\n return next as QueryFormModel<TFields>;\n });\n }\n\n public resetAllFieldsToDefault(\n options?: QueryFormSignalsWriteOptions & { skipFields?: (keyof QueryFormModel<TFields>)[] },\n ): void {\n const skip = new Set((options?.skipFields ?? []).map((key) => key as string));\n const keys = Object.keys(this._fields).filter((key) => !skip.has(key)) as (keyof QueryFormModel<TFields>)[];\n\n this.resetFieldsToDefault(keys, options);\n }\n\n /** Create a detached editor over the same fields, seeded from the current committed value. */\n public branch(): QueryFormBranch<TFields> {\n return createBranch(this._fields, clone(this._committed()), this._injector);\n }\n\n private _onLiveChange(live: Dict): void {\n if (!this._observing()) return;\n if (equal(live, this._committed())) return;\n\n const changedKeys = changedKeysBetween(this._committed() as Dict, live);\n const debounceMs = this._resolveDebounce(changedKeys, live);\n\n this._clearTimer();\n\n if (debounceMs === null) {\n this._flush();\n } else {\n this._pendingTimer = setTimeout(() => {\n this._pendingTimer = null;\n this._flush();\n }, debounceMs);\n }\n }\n\n /** Shortest-debounce-wins; `null` means commit immediately. */\n private _resolveDebounce(changedKeys: string[], live: Dict): number | null {\n if (!changedKeys.length) return null;\n\n const times: number[] = [];\n\n for (const key of changedKeys) {\n const def = this._fields[key];\n\n if (!def) return null;\n if (def.disableDebounceIfFalsy && !live[key]) return null;\n if (def.debounce === undefined) return null;\n\n times.push(def.debounce);\n }\n\n return Math.min(...times);\n }\n\n private _flush(): void {\n this._clearTimer();\n\n const live = this._model() as Dict;\n const previous = this._committed() as Dict;\n\n if (equal(live, previous)) {\n this._skipNextResets = false;\n\n return;\n }\n\n const changedKeys = changedKeysBetween(previous, live);\n const next = this._skipNextResets ? { ...live } : this._applyResets(live, changedKeys);\n\n this._skipNextResets = false;\n\n this._previous.set(clone(previous) as QueryFormModel<TFields>);\n this._committed.set(clone(next) as QueryFormModel<TFields>);\n\n // Reflect any reset overrides back into the bound controls. The effect re-runs\n // but no-ops because the model now equals the committed value.\n if (!equal(next, live)) {\n this._model.set(clone(next) as QueryFormModel<TFields>);\n }\n\n if (this._observing() && this._observeOptions?.writeToQueryParams !== false) {\n this._writeToUrl(next);\n }\n }\n\n private _applyResets(live: Dict, changedKeys: string[]): Dict {\n const next = { ...live };\n\n for (const [key, def] of Object.entries(this._fields)) {\n const resets = def.isResetBy;\n\n if (!resets?.length) continue;\n\n const triggered = resets.some((resetKey) => {\n if (!(resetKey in this._fields)) {\n if (isDevMode()) {\n console.warn(`QueryFormSignals: isResetBy references unknown field \"${resetKey}\". Is it a typo?`);\n }\n\n return false;\n }\n\n return changedKeys.includes(resetKey);\n });\n\n if (!triggered) continue;\n\n const defaultValue = this._defaults[key];\n\n if (!equal(next[key], defaultValue)) {\n next[key] = defaultValue;\n }\n }\n\n return next;\n }\n\n private _applyFromUrl(params: Dict): void {\n const current = { ...(this._committed() as Dict) };\n let changed = false;\n\n for (const [key, def] of Object.entries(this._fields)) {\n const raw = params[this._paramKey(key)];\n\n if (raw === undefined) continue;\n\n const value = raw === ET_PROPERTY_REMOVED ? this._defaults[key] : this._deserialize(def, raw);\n\n if (!equal(current[key], value)) {\n current[key] = value;\n changed = true;\n }\n }\n\n if (!changed) return;\n\n this._commitFromUrl(current);\n }\n\n private _commitFromUrl(next: Dict): void {\n this._clearTimer();\n this._previous.set(clone(this._committed()) as QueryFormModel<TFields>);\n this._committed.set(clone(next) as QueryFormModel<TFields>);\n // Feed the URL value into the live model & bound controls; the effect no-ops (model === committed).\n this._model.set(clone(next) as QueryFormModel<TFields>);\n }\n\n private _deserialize(def: QueryFieldDef<unknown>, raw: unknown): unknown {\n if (def.queryParamToValue) return def.queryParamToValue(raw);\n if (def.skipAutoTransform) return raw;\n\n return autoCoerce(raw, resolveDefault(def));\n }\n\n private _writeToUrl(value: Dict): void {\n const queryParams: Dict = {};\n\n for (const [key, def] of Object.entries(this._fields)) {\n const paramKey = this._paramKey(key);\n const fieldValue = value[key];\n\n const isDefault = equal(fieldValue, this._defaults[key]);\n const writeToUrl = def.appendToUrl !== false;\n const writeDefault = def.appendDefaultValueToUrl === true;\n\n if (!writeToUrl || (isDefault && !writeDefault)) {\n queryParams[paramKey] = undefined;\n } else if (def.valueToQueryParam) {\n queryParams[paramKey] = def.valueToQueryParam(fieldValue);\n } else {\n queryParams[paramKey] = fieldValue === null ? ET_NULL_VALUE : fieldValue;\n }\n }\n\n queueMicrotask(() => {\n this._router.navigate([], {\n queryParams,\n queryParamsHandling: 'merge',\n replaceUrl: this._observeOptions?.replaceUrl,\n });\n });\n }\n\n private _paramKey(key: string): string {\n const prefix = this._prefix;\n\n if (!prefix) return key;\n\n return `${typeof prefix === 'string' ? prefix : prefix()}-${key}`;\n }\n\n private _clearTimer(): void {\n if (this._pendingTimer !== null) {\n clearTimeout(this._pendingTimer);\n this._pendingTimer = null;\n }\n }\n\n private _cleanup(): void {\n if (!this._observing()) return;\n\n this._observing.set(false);\n this._clearTimer();\n\n if (this._observeOptions?.writeToQueryParams === false) return;\n\n const queryParams: Dict = {};\n\n for (const key of Object.keys(this._fields)) {\n queryParams[this._paramKey(key)] = undefined;\n }\n\n queueMicrotask(() => {\n this._router.navigate([], { queryParams, queryParamsHandling: 'merge', replaceUrl: true });\n });\n }\n}\n\n/**\n * Create a {@link QueryFormSignals}. Call `.observe()` to start syncing with the\n * URL. Must be called in an injection context.\n */\nexport const createQueryForm = <TFields extends QueryFormFields>(\n config: CreateQueryFormConfig<TFields>,\n): QueryFormSignals<TFields> => new QueryFormSignals(config);\n","import {\n Sort,\n transformToBooleanArray,\n transformToDate,\n transformToDateArray,\n transformToNumberArray,\n transformToSort,\n transformToSortQueryParam,\n transformToStringArray,\n} from '../query-form/query-form.utils';\nimport { QueryFieldConfig, QueryFieldDef } from './query-form-signals.types';\n\nconst normalizeConfig = <T>(config: QueryFieldConfig<T> | undefined): Partial<QueryFieldDef<T>> => {\n if (!config) return {};\n\n const { isResetBy, ...rest } = config;\n\n return {\n ...rest,\n isResetBy: isResetBy === undefined ? undefined : Array.isArray(isResetBy) ? isResetBy : [isResetBy],\n };\n};\n\n/**\n * A generic query-form field. Defaults to `null` and, unless a transform is\n * given, relies on the auto-coercion when reading back from the URL.\n *\n * @example\n * queryField<number>({ defaultValue: 1, isResetBy: ['search'] })\n */\nexport const queryField = <T = string>(config?: QueryFieldConfig<T | null>): QueryFieldDef<T | null> => ({\n defaultValue: null,\n ...normalizeConfig(config),\n});\n\n/**\n * A debounced free-text search field. Debounces typing by 300ms but applies\n * clearing immediately (`disableDebounceIfFalsy`).\n */\nexport const searchQueryField = (config?: QueryFieldConfig<string | null>): QueryFieldDef<string | null> => ({\n defaultValue: null,\n debounce: 300,\n disableDebounceIfFalsy: true,\n ...normalizeConfig(config),\n});\n\n/**\n * A sort field serialized as `\"active:direction\"` (e.g. `\"name:asc\"`). Matches\n * the wire format the table system's URL adapter uses, so the two interoperate.\n */\nexport const sortQueryField = (config?: QueryFieldConfig<Sort | null>): QueryFieldDef<Sort | null> => ({\n defaultValue: null,\n queryParamToValue: transformToSort,\n valueToQueryParam: transformToSortQueryParam,\n ...normalizeConfig(config),\n});\n\n/** A field holding a list of strings. */\nexport const stringArrayQueryField = (config?: QueryFieldConfig<string[] | null>): QueryFieldDef<string[] | null> => ({\n defaultValue: null,\n queryParamToValue: transformToStringArray,\n ...normalizeConfig(config),\n});\n\n/** A field holding a list of numbers. */\nexport const numberArrayQueryField = (config?: QueryFieldConfig<number[] | null>): QueryFieldDef<number[] | null> => ({\n defaultValue: null,\n queryParamToValue: transformToNumberArray,\n ...normalizeConfig(config),\n});\n\n/** A field holding a list of booleans. */\nexport const booleanArrayQueryField = (\n config?: QueryFieldConfig<boolean[] | null>,\n): QueryFieldDef<boolean[] | null> => ({\n defaultValue: null,\n queryParamToValue: transformToBooleanArray,\n ...normalizeConfig(config),\n});\n\n/** A single date field (expects an ISO/`Date`-parseable string in the URL). */\nexport const dateQueryField = (config?: QueryFieldConfig<Date | null>): QueryFieldDef<Date | null> => ({\n defaultValue: null,\n queryParamToValue: transformToDate,\n ...normalizeConfig(config),\n});\n\n/** A field holding a list of dates. */\nexport const dateArrayQueryField = (config?: QueryFieldConfig<Date[] | null>): QueryFieldDef<Date[] | null> => ({\n defaultValue: null,\n queryParamToValue: transformToDateArray,\n ...normalizeConfig(config),\n});\n","import { RuntimeError } from '@ethlete/core';\n\n// codes 1000-1999\nexport const WebSocketRuntimeErrorCode = {\n // Web Socket Client\n ROOM_NOT_JOINED: 1000,\n MESSAGE_MALFORMED: 1001,\n} as const;\n\nexport type WebSocketRuntimeErrorCode = (typeof WebSocketRuntimeErrorCode)[keyof typeof WebSocketRuntimeErrorCode];\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 { createRootProvider, previousSignalValue, ProviderResult } from '@ethlete/core';\nimport { io } from 'socket.io-client';\nimport { isQueryDevtoolsEnabled, registerQueryDevtoolsEntry } from '../devtools';\nimport { messageMalformed, roomNotJoined } from './web-socket-errors';\n\n/** A single message captured for the devtools web socket inspector. */\nexport type WebSocketDevtoolsMessage = {\n id: number;\n timestamp: number;\n room: string;\n event: string;\n data: unknown;\n};\n\n/**\n * The live handle a web socket client registers with the devtools. Read by the `<et-query-devtools>`\n * Sockets tab. Not part of the general public contract.\n */\nexport type WebSocketDevtoolsHandle = {\n connected: Signal<boolean>;\n rooms: Signal<string[]>;\n messages: Signal<WebSocketDevtoolsMessage[]>;\n};\n\nconst MAX_DEVTOOLS_MESSAGES = 100;\n\nexport type CreateWebSocketClientTransport = 'polling' | 'websocket' | 'webtransport';\n\nexport type CreateWebSocketClientConfigOptions = {\n /** A unique name for the client */\n name: string;\n\n /** The URL of the socket io server */\n url: string;\n\n /** A list of transports to try (in order). Engine.io always attempts to connect directly with the first one, provided the feature detection test for it passes. */\n transports?: CreateWebSocketClientTransport[];\n};\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 type WebSocketClientResult<TMessageData extends SocketMessageView = SocketMessageView> = ProviderResult<\n WebSocketClient<TMessageData>\n>;\n\nexport type AnyWebSocketClient<TMessageData extends SocketMessageView = SocketMessageView> =\n WebSocketClientResult<TMessageData>;\n\nexport const createWebSocketClient = <TMessageData extends SocketMessageView = SocketMessageView>(\n options: CreateWebSocketClientConfigOptions,\n): WebSocketClientResult<TMessageData> => {\n return createRootProvider(\n () => {\n const socket = io(options.url, {\n withCredentials: true,\n autoConnect: false,\n transports: options.transports,\n });\n\n const rooms = new Map<string, InternalWebSocketRoom<TMessageData>>();\n const isConnected = signal(false);\n\n // Devtools instrumentation (no-op unless provideQueryDevtools() was called).\n const devtoolsEnabled = isQueryDevtoolsEnabled();\n const devtoolsRooms = signal<string[]>([]);\n const devtoolsMessages = signal<WebSocketDevtoolsMessage[]>([]);\n let devtoolsMessageId = 0;\n const syncDevtoolsRooms = () => {\n if (devtoolsEnabled) devtoolsRooms.set([...rooms.keys()]);\n };\n\n const joinRoom = (room: string | (() => string | null)) => {\n const roomFn = typeof room === 'function' ? room : () => room;\n const pre = previousSignalValue(computed(() => roomFn()));\n const roomData = signal<InternalWebSocketRoom<TMessageData> | null>(null);\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 syncDevtoolsRooms();\n\n return newRoom;\n };\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 syncDevtoolsRooms();\n };\n\n const setupWebSocketConnectionListener = () => {\n socket.on('connect', () => {\n isConnected.set(true);\n\n for (const room of rooms.keys()) {\n socket.emit('join-room', 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 if (devtoolsEnabled) {\n const message: WebSocketDevtoolsMessage = {\n id: devtoolsMessageId++,\n timestamp: Date.now(),\n room: json.room,\n event: json.event,\n data: json.data,\n };\n devtoolsMessages.update((log) => [message, ...log].slice(0, MAX_DEVTOOLS_MESSAGES));\n }\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 if (devtoolsEnabled) {\n const handle: WebSocketDevtoolsHandle = {\n connected: isConnected.asReadonly(),\n rooms: devtoolsRooms.asReadonly(),\n messages: devtoolsMessages.asReadonly(),\n };\n\n const unregister = registerQueryDevtoolsEntry({\n kind: 'ws-client',\n handle,\n meta: { name: options.name, url: options.url },\n });\n\n inject(DestroyRef).onDestroy(unregister);\n }\n\n return client;\n },\n {\n name: `WebSocketClient_${options.name}`,\n },\n );\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isNaN","coreDeleteCookie","IGNORED_FILTER_COUNT_FIELDS"],"mappings":"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"}
1
+ {"version":3,"file":"ethlete-query.mjs","sources":["../../../../libs/query/src/lib/devtools/query-devtools-registry.ts","../../../../libs/query/src/lib/gql/gql-transformer.ts","../../../../libs/query/src/lib/gql/gql-query-execute.ts","../../../../libs/query/src/lib/gql/gql-query.ts","../../../../libs/query/src/lib/http/observable-signal.ts","../../../../libs/query/src/lib/http/query-context.ts","../../../../libs/query/src/lib/http/query-dependencies.ts","../../../../libs/query/src/lib/http/query-errors.ts","../../../../libs/query/src/lib/http/query-error-response-utils.ts","../../../../libs/query/src/lib/http/query-features.ts","../../../../libs/query/src/lib/http/query-state.ts","../../../../libs/query/src/lib/http/query-snapshot.ts","../../../../libs/query/src/lib/http/base-query-factory.ts","../../../../libs/query/src/lib/http/query-execute-utils.ts","../../../../libs/query/src/lib/http/query-execute.ts","../../../../libs/query/src/lib/http/query.ts","../../../../libs/query/src/lib/http/query-creator.ts","../../../../libs/query/src/lib/http/base-query-creator-factory.ts","../../../../libs/query/src/lib/legacy/logger/logger.ts","../../../../libs/query/src/lib/legacy/request/request.util.ts","../../../../libs/query/src/lib/legacy/request/request.ts","../../../../libs/query/src/lib/http/query-cache-utils.ts","../../../../libs/query/src/lib/http/query-error-html-utils.ts","../../../../libs/query/src/lib/http/query-retry-utils.ts","../../../../libs/query/src/lib/http/query-error-response.ts","../../../../libs/query/src/lib/http/http-request.ts","../../../../libs/query/src/lib/http/query-stack.ts","../../../../libs/query/src/lib/http/paged-query-stack.ts","../../../../libs/query/src/lib/legacy/auth/custom-header-auth-provider.ts","../../../../libs/query/src/lib/legacy/auth/basic-auth-provider.ts","../../../../libs/query/src/lib/legacy/utils/data.utils.ts","../../../../libs/query/src/lib/legacy/utils/deep-freeze.util.ts","../../../../libs/query/src/lib/legacy/utils/def.util.ts","../../../../libs/query/src/lib/legacy/query-creator/query-creator.ts","../../../../libs/query/src/lib/legacy/query-store/query-store.ts","../../../../libs/query/src/lib/legacy/query-client/query-client.ts","../../../../libs/query/src/lib/legacy/query-client/query-client.utils.ts","../../../../libs/query/src/lib/gql/gql-query-creator.ts","../../../../libs/query/src/lib/http/secure-query-execute-factory.ts","../../../../libs/query/src/lib/gql/secure-gql-query-execute.ts","../../../../libs/query/src/lib/gql/secure-gql-query.ts","../../../../libs/query/src/lib/gql/secure-gql-query-creator.ts","../../../../libs/query/src/lib/gql/gql-query-creator-templates.ts","../../../../libs/query/src/lib/legacy/interop/legacy-query.ts","../../../../libs/query/src/lib/legacy/interop/inert-query.ts","../../../../libs/query/src/lib/legacy/interop/legacy-query-creator.ts","../../../../libs/query/src/lib/legacy/query/query.utils.ts","../../../../libs/query/src/lib/legacy/query/query.ts","../../../../libs/query/src/lib/legacy/auth/auth-provider.utils.ts","../../../../libs/query/src/lib/legacy/auth/bearer-auth-provider.ts","../../../../libs/query/src/lib/legacy/directives/infinity-query-response-delay-provider.ts","../../../../libs/query/src/lib/legacy/infinite-query/infinity-query.ts","../../../../libs/query/src/lib/legacy/infinite-query/infinity-query.utils.ts","../../../../libs/query/src/lib/legacy/directives/infinity-query.directive.ts","../../../../libs/query/src/lib/legacy/directives/infinity-query-trigger.directive.ts","../../../../libs/query/src/lib/legacy/directives/query.directive.ts","../../../../libs/query/src/lib/legacy/devtools/pipes/query-short-name.pipe.ts","../../../../libs/query/src/lib/legacy/devtools/utils/query-client.utils.ts","../../../../libs/query/src/lib/legacy/devtools/components/query-devtools/query-devtools.component.ts","../../../../libs/query/src/lib/legacy/devtools/components/query-devtools/query-devtools.component.html","../../../../libs/query/src/lib/legacy/entity/entity-store.ts","../../../../libs/query/src/lib/legacy/entity/entity.utils.ts","../../../../libs/query/src/lib/http/query-signal-forms.ts","../../../../libs/query/src/lib/http/query-validator-core.ts","../../../../libs/query/src/lib/legacy/validate-with-v2-query.ts","../../../../libs/query/src/lib/http/query-repository.ts","../../../../libs/query/src/lib/http/query-client.ts","../../../../libs/query/src/lib/http/secure-query-execute.ts","../../../../libs/query/src/lib/http/secure-query.ts","../../../../libs/query/src/lib/http/secure-query-creator.ts","../../../../libs/query/src/lib/http/query-creator-templates.ts","../../../../libs/query/src/lib/http/query-snapshot-utils.ts","../../../../libs/query/src/lib/http/query-sequence.ts","../../../../libs/query/src/lib/http/validate-with-query.ts","../../../../libs/query/src/lib/auth/internal/leader-election.ts","../../../../libs/query/src/lib/auth/utils/token-encryption.ts","../../../../libs/query/src/lib/auth/internal/multi-tab-sync.ts","../../../../libs/query/src/lib/auth/bearer-auth-provider.ts","../../../../libs/query/src/lib/auth/bearer-auth-query-builders.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-inactivity-logout.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-persistent-auth.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-token-expiration-warning.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-token-revocation.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-tracking.ts","../../../../libs/query/src/lib/pipes/parse-http-error-code-de.ts","../../../../libs/query/src/lib/pipes/parse-http-error-code-de.pipe.ts","../../../../libs/query/src/lib/pipes/parse-http-error-code-en.ts","../../../../libs/query/src/lib/pipes/parse-http-error-code-en.pipe.ts","../../../../libs/query/src/lib/query-form/query-form.utils.ts","../../../../libs/query/src/lib/query-form/query-form.ts","../../../../libs/query/src/lib/query-form-signals/query-form-signals.ts","../../../../libs/query/src/lib/query-form-signals/query-form-signals.fields.ts","../../../../libs/query/src/lib/ws/web-socket-errors.ts","../../../../libs/query/src/lib/ws/web-socket-client.ts","../../../../libs/query/src/ethlete-query.ts"],"sourcesContent":["import { EnvironmentProviders, isDevMode, makeEnvironmentProviders, Signal, signal } from '@angular/core';\nimport type { AnyCreateQueryClientResult } from '../http/query-client';\nimport type { CreateQueryCreatorOptions, QueryConfig } from '../http/query-creator';\nimport type { QueryFeatureType } from '../http/query-features';\nimport type { QueryRepository } from '../http/query-repository';\n\n/**\n * The kind of object a {@link QueryDevtoolsEntry} describes. Part of the devtools contract consumed\n * by `<et-query-devtools>` — not a general-purpose query API.\n */\nexport type QueryDevtoolsEntryKind =\n 'query' | 'query-stack' | 'paged-query-stack' | 'query-sequence' | 'auth-provider' | 'ws-client';\n\n/**\n * Descriptive, mostly-static metadata about a registered devtools entry. The live, reactive state\n * is read from the entry's {@link QueryDevtoolsEntry.handle} instead.\n */\nexport type QueryDevtoolsEntryMeta = {\n /** Display name of the owning query client, where known. */\n clientName?: string;\n\n /** Base URL of the owning query client, where known. */\n clientBaseUrl?: string;\n\n /** Human readable display name (e.g. an auth provider or web socket client name). */\n name?: string;\n\n /** The connection URL, for web socket clients. */\n url?: string;\n\n /** The GraphQL document string, for GraphQL queries. */\n gqlQuery?: string;\n\n /** Stringified route with path params rendered as `:param`, for queries. */\n route?: string;\n\n /** Human readable HTTP/GQL method, for queries (e.g. `GET`, `GQL QUERY`). */\n method?: string;\n\n /** The feature types applied at creation, for queries. */\n featureTypes?: QueryFeatureType[];\n\n /** The query config passed at creation, for queries. */\n queryConfig?: QueryConfig;\n\n /** The creator options passed at creation, for queries. */\n creator?: CreateQueryCreatorOptions;\n\n /** The owning client's repository, where known (queries and auth providers). */\n repository?: QueryRepository;\n\n /**\n * The DOM element of the component/directive that created a query, when available. Used by the\n * devtools \"inspect\" tool to map a query back to its place in the live UI.\n */\n element?: HTMLElement | null;\n};\n\n/**\n * A single entry in the {@link queryDevtoolsEntries} registry. The `handle` is the live object\n * (query, stack, sequence or auth provider) so its signals stay reactive when read by the UI.\n */\nexport type QueryDevtoolsEntry = {\n id: string;\n kind: QueryDevtoolsEntryKind;\n meta: QueryDevtoolsEntryMeta;\n handle: unknown;\n createdAt: number;\n};\n\nconst noop = () => undefined;\n\nlet devtoolsEnabled = false;\n\n/**\n * Whether {@link provideQueryDevtools} has been called. When `false`, every `register*` call is a\n * no-op so the devtools instrumentation retains no references and adds no overhead in production.\n * @internal\n */\nexport const isQueryDevtoolsEnabled = () => devtoolsEnabled;\n\nconst entries = signal<QueryDevtoolsEntry[]>([]);\n\n/**\n * The reactive list of every registered devtools entry, consumed by the `<et-query-devtools>` UI.\n */\nexport const queryDevtoolsEntries: Signal<QueryDevtoolsEntry[]> = entries.asReadonly();\n\n// Per-descriptor counter used to derive stable, reload-deterministic ids. Reset on page load (module\n// re-eval), so the same queries created in the same order get the same ids across reloads — which is\n// what lets the devtools restore the selected query after a reload.\nconst idCounters = new Map<string, number>();\n\nconst descriptorOf = (entry: Omit<QueryDevtoolsEntry, 'id' | 'createdAt'>): string => {\n const { kind, meta } = entry;\n\n if (kind === 'query') return `query|${meta.clientName ?? ''}|${meta.method ?? ''}|${meta.route ?? ''}`;\n if (kind === 'auth-provider') return `auth-provider|${meta.name ?? ''}`;\n if (kind === 'ws-client') return `ws-client|${meta.name ?? ''}`;\n\n return kind;\n};\n\n/**\n * Registers an entry with the devtools registry. Returns an unregister callback. A no-op (returning\n * a no-op callback) unless {@link provideQueryDevtools} has been called.\n *\n * Ids are derived deterministically from a stable descriptor + a per-descriptor sequence number, so\n * they survive a page reload (letting the UI restore the selected entry) instead of being random.\n * @internal\n */\nexport const registerQueryDevtoolsEntry = (\n entry: Omit<QueryDevtoolsEntry, 'id' | 'createdAt'> & { id?: string },\n): (() => void) => {\n if (!devtoolsEnabled) return noop;\n\n let id = entry.id;\n\n if (!id) {\n const descriptor = descriptorOf(entry);\n const seq = idCounters.get(descriptor) ?? 0;\n idCounters.set(descriptor, seq + 1);\n id = `${descriptor}#${seq}`;\n }\n\n const fullEntry: QueryDevtoolsEntry = { ...entry, id, createdAt: Date.now() };\n\n entries.update((list) => [...list, fullEntry]);\n\n return () => entries.update((list) => list.filter((e) => e.id !== fullEntry.id));\n};\n\nlet suppressStackRegistration = false;\n\n/**\n * Suppresses devtools registration for the next {@link createQueryStack} call. Used by\n * `createPagedQueryStack` so its backing stack is not registered as a separate `query-stack` entry.\n * @internal\n */\nexport const suppressNextQueryStackDevtools = () => {\n suppressStackRegistration = true;\n};\n\n/**\n * Reads and clears the suppress-next-stack flag. Always call this from `createQueryStack` (even when\n * devtools are disabled) so a suppression request never leaks into a later stack.\n * @internal\n */\nexport const consumeSuppressQueryStackDevtools = () => {\n const value = suppressStackRegistration;\n suppressStackRegistration = false;\n\n return value;\n};\n\n/**\n * Stringifies a query creator route. Function routes are invoked with an empty args object and any\n * resulting `undefined` path segments are rendered as `:param`, matching the legacy devtools.\n * @internal\n */\nexport const stringifyQueryRoute = (route: unknown): string => {\n if (route === undefined || route === null) return '';\n\n try {\n if (typeof route === 'function') {\n return (route as (args: unknown) => string)({}).replace(/undefined/g, ':param');\n }\n\n return String(route);\n } catch {\n return typeof route === 'function' ? '(dynamic route)' : String(route);\n }\n};\n\n/**\n * Extracts the human readable client name from a query client tuple. The client's DI token is named\n * `QueryClient_<name>`, so we strip the prefix to recover the original name.\n * @internal\n */\nexport const getQueryClientName = (client: AnyCreateQueryClientResult): string => {\n const token = client[2];\n const desc = token?.toString?.() ?? '';\n\n return desc.replace('InjectionToken ', '').replace('QueryClient_', '') || 'unknown';\n};\n\n/**\n * Enables the `@ethlete/query` devtools. Add this to your application providers (e.g. in\n * `bootstrapApplication`) to make query clients, queries, stacks, sequences and auth providers\n * appear in the `<et-query-devtools>` panel.\n *\n * When omitted, all devtools instrumentation is a no-op — no references are retained and there is no\n * runtime overhead — so it is safe to leave out of production builds.\n *\n * @example\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideQueryDevtools()],\n * });\n * ```\n */\nexport const provideQueryDevtools = (): EnvironmentProviders => {\n devtoolsEnabled = true;\n\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 makeEnvironmentProviders([]);\n};\n","import { isDevMode } from '@angular/core';\n\nconst getOpName = /(query|mutation) ?([\\w\\d-_]+)? ?\\(.*?\\)? \\{/;\n\nexport type TransformedGqlQuery = {\n query: string;\n variables?: string;\n operationName?: string;\n};\n\nexport type GqlTransformer = (variables: Record<string, unknown> | null | undefined) => TransformedGqlQuery;\n\nexport const transformGql = (str: string | string[]): GqlTransformer => {\n const normalizedStr = Array.isArray(str) ? str.join('') : str;\n\n const name = getOpName.exec(normalizedStr);\n\n return (variables: Record<string, unknown> | null | undefined): TransformedGqlQuery => {\n const data: TransformedGqlQuery = { query: normalizedStr };\n\n if (variables) {\n data['variables'] = JSON.stringify(variables);\n }\n\n if (name && name.length) {\n const operationName = name[2];\n if (operationName) {\n data['operationName'] = operationName;\n }\n }\n\n if (!isDevMode()) {\n // minify the query\n data.query = data.query.replace(/\\s+/g, ' ').trim();\n }\n\n return data;\n };\n};\n\nexport type GQL = string & { readonly __gql: unique symbol };\n\nexport const gql = (strings: TemplateStringsArray, ...values: unknown[]): GQL => {\n const str = strings.reduce((acc, cur, i) => {\n return acc + cur + (values[i] ?? '');\n }, '');\n return str as GQL;\n};\n","import {\n circularQueryDependencyChecker,\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 { AnyCreateGqlQueryCreatorOptions, InternalCreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { transformGql } from './gql-transformer';\n\nexport type CreateGqlQueryExecuteOptions<TArgs extends QueryArgs> = {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: AnyCreateGqlQueryCreatorOptions;\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 const circularChecker = circularQueryDependencyChecker();\n\n const reset = () => resetExecuteState({ executeState, executeOptions });\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n circularChecker.check();\n\n const { args = executeOptions.state.args(), options } = executeArgs ?? {};\n\n const query = transformGql(executeOptions.creatorInternals.query);\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: {\n ...(executeOptions.creator ?? {}),\n subtle: {\n ...(executeOptions.creator?.subtle ?? {}),\n useQueryRepositoryCache:\n executeOptions.creator?.subtle?.useQueryRepositoryCache ??\n executeOptions.creatorInternals.method === 'QUERY',\n },\n },\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 });\n };\n\n exec['reset'] = reset;\n\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","import { createBaseQuery, CreateQueryOptions, QueryArgs } from '../http';\nimport { CreateGqlQueryCreatorOptions, InternalCreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { createGqlExecuteFn } from './gql-query-execute';\n\nexport type GqlQueryArgs<TResponse = unknown> = QueryArgs & {\n response: TResponse;\n rawResponse?: { data: TResponse };\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n options: CreateQueryOptions<TArgs> | CreateGqlQueryOptions<any>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): options is CreateGqlQueryOptions<any> => {\n return 'transport' in options.creatorInternals;\n};\n\nexport const createGqlQuery = <TArgs extends GqlQueryArgs>(options: CreateGqlQueryOptions<TArgs>) =>\n createBaseQuery({\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n features: options.features,\n queryConfig: options.queryConfig,\n executeFactory: createGqlExecuteFn,\n });\n","import { DestroyRef, Injector, Signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { Observable } from 'rxjs';\n\nexport type ObservableSignal<T> = Signal<T> & {\n /**\n * Converts this signal to an Observable.\n *\n * The observable lifetime is bounded by the signal owner's injector by default.\n * When an override injector is provided, the observable is bounded by whichever lifetime ends\n * first: `min(override injector lifetime, signal owner injector lifetime)`.\n */\n asObservable(options?: { injector?: Injector }): Observable<T>;\n};\n\nexport const wrapAsObservableSignal = <T>(source: Signal<T>, defaultInjector: Injector): ObservableSignal<T> => {\n const asObservable = (options?: { injector?: Injector }): Observable<T> => {\n const effectiveInjector = options?.injector ?? defaultInjector;\n const base$ = toObservable(source, { injector: effectiveInjector });\n\n if (options?.injector) {\n return base$.pipe(takeUntilDestroyed(defaultInjector.get(DestroyRef)));\n }\n\n return base$;\n };\n\n return Object.assign(source, { asObservable }) as unknown as ObservableSignal<T>;\n};\n","import { inject, InjectionToken } from '@angular/core';\nimport { createStaticProvider } from '@ethlete/core';\nimport { QueryDependencies } from './query-dependencies';\n\nexport type QueryContext = {\n /** All query dependencies (client, injector, destroy refs, etc.) */\n deps: QueryDependencies;\n};\n\nconst QUERY_CONTEXT_TOKEN = new InjectionToken<QueryContext>('QUERY_CONTEXT');\n\nexport const createQueryContext = (context: QueryContext) =>\n createStaticProvider(context, {\n name: 'Query Context',\n extraInjectionToken: QUERY_CONTEXT_TOKEN,\n });\n\nexport const injectQueryContext = () => inject(QUERY_CONTEXT_TOKEN);\n","import { HttpClient } from '@angular/common/http';\nimport {\n createEnvironmentInjector,\n DestroyRef,\n ElementRef,\n EnvironmentInjector,\n ErrorHandler,\n inject,\n Injector,\n} from '@angular/core';\nimport { AnyCreateQueryClientResult, QueryClient } from './query-client';\nimport { createQueryContext, QueryContext } from './query-context';\nimport { QueryConfig } from './query-creator';\n\nexport type SetupQueryDependenciesOptions = {\n /** The query client tuple from createQueryClient */\n client: AnyCreateQueryClientResult;\n\n /** Optional query configuration */\n queryConfig: QueryConfig | undefined;\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 /** The error handler */\n ngErrorHandler: ErrorHandler;\n\n /** The http client */\n httpClient: HttpClient;\n\n /**\n * The DOM element of the component/directive that created the query, when it was created in an\n * element (node) injection context. `null` for queries created in a root/environment context.\n * Used only by the devtools \"inspect\" tool.\n */\n hostElement: HTMLElement | null;\n};\n\nexport const setupQueryDependencies = (options: SetupQueryDependenciesOptions) => {\n const hostInjector = options.queryConfig?.injector ?? inject(Injector);\n const environmentInjector =\n options.queryConfig?.injector?.get(EnvironmentInjector) ?? hostInjector.get(EnvironmentInjector);\n\n const [, , clientToken] = options.client;\n\n const dependencies: QueryDependencies = {\n destroyRef: undefined as unknown as DestroyRef, // Will be set after injector creation\n scopeDestroyRef: hostInjector.get(DestroyRef),\n client: hostInjector.get<QueryClient>(clientToken),\n injector: undefined as unknown as EnvironmentInjector, // Will be set after injector creation\n ngErrorHandler: hostInjector.get(ErrorHandler),\n httpClient: hostInjector.get(HttpClient),\n hostElement: hostInjector.get(ElementRef, null, { optional: true })?.nativeElement ?? null,\n };\n\n const queryContext: QueryContext = {\n deps: dependencies,\n };\n\n const [provideQueryContext] = createQueryContext(queryContext);\n\n const queryEnvironmentInjector = createEnvironmentInjector([provideQueryContext()], environmentInjector);\n\n dependencies.destroyRef = queryEnvironmentInjector.get(DestroyRef);\n dependencies.injector = queryEnvironmentInjector;\n\n // cleanup the environment injector when the scope (e.g. the component the query is in) is destroyed\n const scopeDestroyListener = dependencies.scopeDestroyRef.onDestroy(() => {\n try {\n queryEnvironmentInjector.destroy();\n } catch {\n // ignore\n }\n });\n\n dependencies.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 { RuntimeError } from '@ethlete/core';\nimport { QueryFeatureType } from './query-features';\n\n// codes 0-999\nexport const 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 SILENCE_MISSING_WITH_ARGS_FEATURE_ERROR_USED_BUT_WITH_ARGS_PRESENT: 104,\n\n // Auth provider\n AUTH_EXTRACT_TOKENS_RESPONSE_NOT_OBJECT: 200,\n AUTH_EXTRACT_TOKENS_RESPONSE_MISSING_ACCESS_TOKEN: 201,\n AUTH_EXTRACT_TOKENS_RESPONSE_MISSING_REFRESH_TOKEN: 202,\n AUTH_PROVIDER_FEATURE_USED_MULTIPLE_TIMES: 203,\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 QUERY_STACK_TOTAL_QUERIES_AND_EXPECTED_QUERIES_MISMATCH: 502,\n\n // GQL\n GQL_DATA_PROPERTY_MISSING_IN_RESPONSE: 600,\n\n // Secure Execute\n TOKENS_NOT_AVAILABLE_INSIDE_AUTH_AND_EXEC: 700,\n INVALID_STATE_INSIDE_SECURE_EXECUTE_FACTORY: 701,\n\n // Query Execution\n CIRCULAR_QUERY_DEPENDENCY: 800,\n\n // Query Sequence\n QUERY_SEQUENCE_ALREADY_RUNNING: 900,\n\n // Legacy interop\n LEGACY_PREPARE_WITHOUT_INJECTION_CONTEXT: 950,\n} as const;\n\nexport type QueryRuntimeErrorCode = (typeof QueryRuntimeErrorCode)[keyof typeof QueryRuntimeErrorCode];\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 silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.SILENCE_MISSING_WITH_ARGS_FEATURE_ERROR_USED_BUT_WITH_ARGS_PRESENT,\n `The \"silenceMissingWithArgsFeatureError\" config is set to true, but a \"withArgs()\" feature is present.`,\n );\n};\n\nexport const authExtractTokensResponseNotObject = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.AUTH_EXTRACT_TOKENS_RESPONSE_NOT_OBJECT,\n `The auth token extractor expects the response to be an object.`,\n );\n};\n\nexport const authExtractTokensResponseMissingAccessToken = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.AUTH_EXTRACT_TOKENS_RESPONSE_MISSING_ACCESS_TOKEN,\n `The auth token extractor expects the response to contain a string \"accessToken\" property.`,\n );\n};\n\nexport const authExtractTokensResponseMissingRefreshToken = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.AUTH_EXTRACT_TOKENS_RESPONSE_MISSING_REFRESH_TOKEN,\n `The auth token extractor expects the response to contain a string \"refreshToken\" property.`,\n );\n};\n\nexport const authProviderFeatureUsedMultipleTimes = (type: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.AUTH_PROVIDER_FEATURE_USED_MULTIPLE_TIMES,\n `Bearer auth feature \"${type}\" was used multiple times.`,\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\nexport const queryStackTotalQueriesAndExpectedQueriesMismatch = (totalQueries: number, expectedQueries: number) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_STACK_TOTAL_QUERIES_AND_EXPECTED_QUERIES_MISMATCH,\n `The total queries \"${totalQueries}\" and the expected queries \"${expectedQueries}\" do not match. This usually happens if a query depends on the response of the previous query to calculate its pagination values. Set blockExecutionDuringLoading to true to prevent this.`,\n );\n};\n\nexport const gqlDataPropertyMissingInResponse = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.GQL_DATA_PROPERTY_MISSING_IN_RESPONSE,\n `The GraphQL response is missing the required \"data\" property. Please add a custom transformResponse param to the query creator to handle this response format.`,\n );\n};\n\nexport const tokensNotAvailableInsideAuthAndExec = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.TOKENS_NOT_AVAILABLE_INSIDE_AUTH_AND_EXEC,\n `Tokens are not available inside authAndExec.`,\n );\n};\n\nexport const invalidStateInsideSecureExecuteFactory = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.INVALID_STATE_INSIDE_SECURE_EXECUTE_FACTORY,\n `An invalid state occurred inside the secure execute factory.`,\n );\n};\n\nexport const circularQueryDependency = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.CIRCULAR_QUERY_DEPENDENCY,\n `Query was executed more than 5 times in less than 100ms. This is usually a sign of a circular dependency.`,\n );\n};\n\nexport const legacyPrepareWithoutInjectionContext = (creatorName: string | undefined) => {\n const label = creatorName ? `\"${creatorName}\"` : 'A legacy query creator';\n\n return new RuntimeError(\n QueryRuntimeErrorCode.LEGACY_PREPARE_WITHOUT_INJECTION_CONTEXT,\n `${label}.prepare() was called outside of an injection context. Unlike the v2 client, the legacy interop layer needs an injector to build the underlying query.\\n\\n` +\n `Capture one where a context does exist (field initializer, constructor) and pass it along:\\n\\n` +\n ` private injector = inject(Injector);\\n` +\n ` search = (term: string) => myQuery.prepare({ queryParams: { term }, injector: this.injector });\\n\\n` +\n `Prefer an injector that outlives the call site. A component injector passed from a callback that can still fire after the component is gone leaves prepare() with a destroyed injector, which returns an inert query instead of executing.`,\n );\n};\n\nexport const querySequenceAlreadyRunning = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_SEQUENCE_ALREADY_RUNNING,\n `run() was called on a query sequence that is already running. Wait for the current run to settle before starting another.`,\n );\n};\n","import { FormViolationListView, FormViolationView } from '@ethlete/types';\n\nexport type ClassValidatorError = {\n statusCode: number;\n message: string[];\n error: string;\n};\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\nexport type SymfonyErrorTrace = {\n args: string[];\n class: string;\n file: string;\n function: string;\n line: number;\n namespace: string;\n short_class: string;\n type: string;\n};\n\nexport type SymfonyError = {\n class: string;\n detail: string;\n status: number;\n title: string;\n trace: SymfonyErrorTrace[];\n type: string;\n};\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 { HttpEventType } from '@angular/common/http';\nimport { CreateEffectOptions, effect, Signal, untracked, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { getActiveConsumer, setActiveConsumer } from '@angular/core/primitives/signals';\nimport { filter } from 'rxjs';\nimport { HttpErrorEvent, RequestHttpEvent } from './http-request';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { QueryDependencies } from './query-dependencies';\nimport { QueryErrorResponse } from './query-error-response';\nimport { isSymfonyPagerfantaOutOfRangeError } from './query-error-response-utils';\nimport {\n withAutoRefreshUsedInManualQuery,\n withAutoRefreshUsedOnUnsupportedHttpMethod,\n withPollingUsedOnUnsupportedHttpMethod,\n} from './query-errors';\nimport { InternalQueryExecute } from './query-execute';\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\n/** A angular effect that can be nested inside another effect */\nexport const nestedEffect = (fn: () => void, options?: CreateEffectOptions) => {\n const activeConsumer = getActiveConsumer();\n\n setActiveConsumer(null);\n\n const eff = effect(() => {\n fn();\n }, options);\n\n setActiveConsumer(activeConsumer);\n\n return eff;\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 QueryFeatureType = {\n WITH_ARGS: 'WITH_ARGS',\n WITH_LOGGING: 'WITH_LOGGING',\n WITH_ERROR_HANDLING: 'WITH_ERROR_HANDLING',\n WITH_SUCCESS_HANDLING: 'WITH_SUCCESS_HANDLING',\n WITH_POLLING: 'WITH_POLLING',\n WITH_AUTO_REFRESH: 'WITH_AUTO_REFRESH',\n WITH_RESPONSE_UPDATE: 'WITH_RESPONSE_UPDATE',\n WITH_PAGE_RESET_ON_ERROR: 'WITH_PAGE_RESET_ON_ERROR',\n} as const;\nexport type QueryFeatureType = (typeof QueryFeatureType)[keyof typeof QueryFeatureType];\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\nexport const createQueryFeature = <TArgs extends QueryArgs>(config: {\n type: QueryFeatureType;\n fn: QueryFeatureFn<TArgs>;\n}) => {\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.WITH_ARGS,\n fn: (context) => {\n // `state.args` is reactively backed by this source, so every reader (exec, polling,\n // auto-refresh) always sees the latest value with no pending-effect window. Sentinels are\n // resolved here: CLEAR -> null, `null` (\"don't change\") -> keep the previous value.\n let previous: RequestArgs<TArgs> | null = null;\n context.state.subtle.setArgsSource(() => {\n const value = args();\n\n if (value === CLEAR_QUERY_ARGS) {\n previous = null;\n return null;\n }\n\n if (value === null) return previous;\n\n previous = value;\n return value;\n });\n\n // Trigger (auto-)execution whenever the resolved args change.\n nestedEffect(\n () => {\n const currArgsNow = context.state.args();\n\n if (currArgsNow === null) return;\n\n untracked(() => {\n if (context.flags.shouldAutoExecute) context.execute({ args: currArgsNow });\n });\n },\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.WITH_POLLING,\n fn: (context) => {\n if (!context.flags.shouldAutoExecuteMethod) {\n throw withPollingUsedOnUnsupportedHttpMethod(context.flags.method);\n }\n\n let intervalId: number | null = null;\n\n nestedEffect(\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 { 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: RequestHttpEvent<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.WITH_LOGGING,\n fn: (context) => {\n context.state.events$.pipe(takeUntilDestroyed(context.deps.destroyRef)).subscribe((event) => {\n options.logFn(event);\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.WITH_ERROR_HANDLING,\n fn: (context) => {\n context.state.events$\n .pipe(\n filter((event): event is HttpErrorEvent => event.type === 'error'),\n takeUntilDestroyed(context.deps.destroyRef),\n )\n .subscribe((event) => {\n options.handler(event.error);\n });\n },\n });\n};\n\nexport type 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.WITH_SUCCESS_HANDLING,\n fn: (context) => {\n context.state.events$\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n takeUntilDestroyed(context.deps.destroyRef),\n )\n .subscribe(() => {\n options.handler(context.state.response() as NonNullable<ResponseType<TArgs>>);\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.WITH_AUTO_REFRESH,\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 nestedEffect(\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 { 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.WITH_RESPONSE_UPDATE,\n fn: (context) => {\n nestedEffect(\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.rawResponse.set(response);\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\n/**\n * Whether an error means the requested page is out of range: HTTP `416`, or a\n * `500` carrying a Symfony/Pagerfanta out-of-range detail (the dev-mode shape).\n * Exported so it can also be used as the predicate of a `withErrorHandling` handler.\n */\nexport const isPageOutOfRangeError = (error: QueryErrorResponse): boolean => {\n if (error.code === 416) return true;\n\n return error.code === 500 && isSymfonyPagerfantaOutOfRangeError(error.raw.error);\n};\n\nexport type WithPageResetOnErrorFeatureOptions = {\n /**\n * Which errors trigger the reset.\n * @default isPageOutOfRangeError (HTTP 416, or a dev-mode 500 Pagerfanta out-of-range error)\n */\n when?: (error: QueryErrorResponse) => boolean;\n} & (\n | {\n /** The writable page signal to reset. */\n page: WritableSignal<number>;\n /**\n * The value to reset the page to.\n * @default 1\n */\n resetTo?: number;\n reset?: never;\n }\n | {\n /**\n * Called when a matching error occurs. Reset whatever drives the page here —\n * a signal (`() => page.set(1)`) or a query form (`() => qf.resetFieldToDefault('page')`).\n */\n reset: () => void;\n page?: never;\n resetTo?: never;\n }\n);\n\n/**\n * A query feature that resets the page when the current page becomes out of range\n * — e.g. after a filter shrinks the result set below the current page. It reacts\n * to the query's error events and resets the page source; the normal reactive\n * re-execution then runs with the corrected page.\n *\n * Because query args are reactively sourced, this fixes the *source* (a signal or\n * query form field) rather than patching args directly — so the change sticks.\n *\n * @example\n * // signal-driven page\n * const users = getUsers(\n * withArgs(() => ({ queryParams: { page: page() } })),\n * withPageResetOnError({ page }),\n * );\n *\n * @example\n * // query-form-driven page\n * const users = getUsers(\n * withArgs(() => ({ queryParams: qf.value() })),\n * withPageResetOnError({ reset: () => qf.resetFieldToDefault('page') }),\n * );\n */\nexport const withPageResetOnError = <TArgs extends QueryArgs>(options: WithPageResetOnErrorFeatureOptions) => {\n const matches = options.when ?? isPageOutOfRangeError;\n\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WITH_PAGE_RESET_ON_ERROR,\n fn: (context) => {\n context.state.events$\n .pipe(\n filter((event): event is HttpErrorEvent => event.type === 'error'),\n takeUntilDestroyed(context.deps.destroyRef),\n )\n .subscribe((event) => {\n if (!matches(event.error)) return;\n\n if (options.reset) {\n options.reset();\n } else {\n options.page.set(options.resetTo ?? 1);\n }\n });\n },\n });\n};\n","import { Signal, WritableSignal, computed, linkedSignal, signal } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { HttpRequest, HttpRequestLoadingState, RequestHttpEvent } from './http-request';\nimport { QueryArgs, RawResponseType, RequestArgs, ResponseType } from './query';\nimport { QueryErrorResponse } from './query-error-response';\n\nexport type SetupQueryStateOptions<TArgs extends QueryArgs> = {\n transformResponse?: (rawResponse: RawResponseType<TArgs>) => ResponseType<TArgs>;\n};\n\nexport type QueryStateSubtle<TArgs extends QueryArgs> = {\n request: WritableSignal<HttpRequest<TArgs> | null>;\n rawResponse: WritableSignal<RawResponseType<TArgs> | null>;\n\n /**\n * Forwards the given request's discrete event stream onto the query-level `events$`.\n * Called by `queryExecute` whenever a request is (re-)executed.\n */\n bindRequestEvents: (request: HttpRequest<TArgs>) => void;\n\n /**\n * Installs the reactive source that backs `state.args`. The `withArgs` feature uses this so that\n * `state.args` always reflects the latest args (pulled from the reactive source on read) instead\n * of being push-updated by an effect that may not have run yet. Without a `withArgs` feature the\n * default source returns `null`.\n */\n setArgsSource: (source: () => RequestArgs<TArgs> | null) => void;\n};\n\nexport type QueryState<TArgs extends QueryArgs> = {\n rawResponse: WritableSignal<RawResponseType<TArgs> | null>;\n response: Signal<ResponseType<TArgs> | null>;\n args: WritableSignal<RequestArgs<TArgs> | null>;\n latestHttpEvent: WritableSignal<RequestHttpEvent<TArgs> | null>;\n loading: WritableSignal<HttpRequestLoadingState | null>;\n error: WritableSignal<QueryErrorResponse | null>;\n lastTimeExecutedAt: WritableSignal<number | null>;\n lastTriggeredBy: WritableSignal<string | null>;\n executionState: Signal<QueryExecutionState<TArgs> | null>;\n\n /**\n * A discrete, query-level stream of every request event, fed synchronously from the current\n * request's `events$` at the moment each event occurs. Side-effect features\n * (success/error/logging) subscribe to this instead of edge-detecting on the shared, resettable\n * `response`/`error`/`latestHttpEvent` signals — so they cannot miss a transition when the next\n * execution swaps the underlying request.\n */\n events$: Observable<RequestHttpEvent<TArgs>>;\n\n subtle: QueryStateSubtle<TArgs>;\n};\n\nexport type QueryExecutionStateSuccess<TArgs extends QueryArgs> = {\n type: 'success';\n response: ResponseType<TArgs>;\n};\n\nexport type QueryExecutionStateFailure = {\n type: 'failure';\n error: QueryErrorResponse;\n};\n\nexport type QueryExecutionStateLoadingWithNoResponse = {\n type: 'loading';\n hasCachedResponse: false;\n loading: HttpRequestLoadingState;\n};\n\nexport type QueryExecutionStateLoadingWithCachedResponse<TArgs extends QueryArgs> = {\n type: 'loading';\n hasCachedResponse: true;\n loading: HttpRequestLoadingState;\n cachedResponse: ResponseType<TArgs>;\n};\n\nexport type QueryExecutionStateLoading<TArgs extends QueryArgs> =\n QueryExecutionStateLoadingWithNoResponse | QueryExecutionStateLoadingWithCachedResponse<TArgs>;\n\nexport type QueryExecutionState<TArgs extends QueryArgs> =\n QueryExecutionStateSuccess<TArgs> | QueryExecutionStateFailure | QueryExecutionStateLoading<TArgs>;\n\nexport const setupQueryState = <TArgs extends QueryArgs>(options: SetupQueryStateOptions<TArgs>) => {\n const request = signal<HttpRequest<TArgs> | null>(null);\n\n const rawResponse = linkedSignal(() => request()?.response() ?? null);\n const response = computed(() => {\n const raw = rawResponse();\n if (raw === null) return null;\n return options.transformResponse ? options.transformResponse(raw) : (raw as ResponseType<TArgs>);\n });\n const loading = linkedSignal(() => request()?.loading() ?? null);\n const error = linkedSignal(() => request()?.error() ?? null);\n const latestHttpEvent = linkedSignal(() => request()?.currentEvent() ?? null);\n\n // `args` is reactively sourced: reads always reflect the latest value from the installed source\n // (e.g. the `withArgs` feature), so there is no stale window between a source change and an\n // effect writing it. It stays writable (reset / auth-error clear it via `.set(null)`); a manual\n // set is overridden again the next time the source's dependencies change.\n const argsSource = signal<() => RequestArgs<TArgs> | null>(() => null);\n const args = linkedSignal(() => argsSource()());\n const setArgsSource = (source: () => RequestArgs<TArgs> | null) => argsSource.set(source);\n\n const lastTimeExecutedAt = signal<number | null>(null);\n const lastTriggeredBy = signal<string | null>(null);\n\n const requestEvents$ = new Subject<RequestHttpEvent<TArgs>>();\n let requestEventsSubscription = Subscription.EMPTY;\n const bindRequestEvents = (request: HttpRequest<TArgs>) => {\n requestEventsSubscription.unsubscribe();\n requestEventsSubscription = request.events$.subscribe((event) => requestEvents$.next(event));\n };\n\n const executionState = computed<QueryExecutionState<TArgs> | null>(() => {\n const currentResponse = response();\n const currentError = error();\n const currentLoading = loading();\n\n if (currentLoading) {\n if (currentResponse) {\n return {\n type: 'loading',\n hasCachedResponse: true,\n loading: currentLoading,\n cachedResponse: currentResponse,\n };\n }\n\n return {\n type: 'loading',\n hasCachedResponse: false,\n loading: currentLoading,\n };\n } else if (currentError) {\n return {\n type: 'failure',\n error: currentError,\n };\n } else if (currentResponse) {\n return {\n type: 'success',\n response: currentResponse,\n };\n } else {\n return null;\n }\n });\n\n const state: QueryState<TArgs> = {\n rawResponse,\n response,\n args,\n latestHttpEvent,\n loading,\n error,\n lastTimeExecutedAt,\n lastTriggeredBy,\n executionState,\n events$: requestEvents$.asObservable(),\n subtle: {\n request,\n rawResponse,\n bindRequestEvents,\n setArgsSource,\n },\n };\n\n return state;\n};\n","import { HttpEventType } from '@angular/common/http';\nimport { effect, signal, untracked } from '@angular/core';\nimport { wrapAsObservableSignal } from './observable-signal';\nimport { QueryArgs, QuerySnapshot } from './query';\nimport { injectQueryContext } from './query-context';\nimport { QueryDependencies } from './query-dependencies';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryState, setupQueryState } from './query-state';\n\nexport type CreateQuerySnapshotOptions<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n execute: InternalQueryExecute<TArgs>;\n deps: QueryDependencies;\n};\n\nexport const createQuerySnapshotFn = <TArgs extends QueryArgs>(options: CreateQuerySnapshotOptions<TArgs>) => {\n const { state } = options;\n const context = injectQueryContext();\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 const currentLastTriggeredBy = state.lastTriggeredBy();\n\n untracked(() => {\n snapshotState.args.set(currentArgs);\n snapshotState.error.set(currentError);\n snapshotState.lastTimeExecutedAt.set(currentLastTimeExecutedAt);\n snapshotState.lastTriggeredBy.set(currentLastTriggeredBy);\n snapshotState.latestHttpEvent.set(currentLatestHttpEvent);\n snapshotState.loading.set(currentLoading);\n snapshotState.rawResponse.set(currentResponse);\n\n if (currentLoading) return;\n\n const hasCompletedResponse = currentLatestHttpEvent?.type === HttpEventType.Response;\n if (!hasCompletedResponse && !currentError) return;\n\n // kill the effect once loading is done and we either have a response or an error\n killEffectRef.destroy();\n isAlive.set(false);\n });\n },\n { injector: context.deps.injector },\n );\n\n const snapshot: QuerySnapshot<TArgs> = {\n args: wrapAsObservableSignal(snapshotState.args.asReadonly(), context.deps.injector),\n response: wrapAsObservableSignal(snapshotState.response, context.deps.injector),\n latestHttpEvent: wrapAsObservableSignal(snapshotState.latestHttpEvent.asReadonly(), context.deps.injector),\n loading: wrapAsObservableSignal(snapshotState.loading.asReadonly(), context.deps.injector),\n error: wrapAsObservableSignal(snapshotState.error.asReadonly(), context.deps.injector),\n lastTimeExecutedAt: wrapAsObservableSignal(snapshotState.lastTimeExecutedAt.asReadonly(), context.deps.injector),\n triggeredBy: wrapAsObservableSignal(snapshotState.lastTriggeredBy.asReadonly(), context.deps.injector),\n isAlive: wrapAsObservableSignal(isAlive.asReadonly(), context.deps.injector),\n id: wrapAsObservableSignal(options.execute.currentRepositoryKey, context.deps.injector),\n executionState: wrapAsObservableSignal(snapshotState.executionState, context.deps.injector),\n };\n\n return snapshot;\n };\n\n return snapshotFn;\n};\n","import { runInInjectionContext } from '@angular/core';\nimport {\n getQueryClientName,\n isQueryDevtoolsEnabled,\n registerQueryDevtoolsEntry,\n stringifyQueryRoute,\n} from '../devtools';\nimport { CreateGqlQueryOptions, isCreateGqlQueryOptions } from '../gql/gql-query';\nimport { AnyCreateGqlQueryCreatorOptions, GqlQueryMethod } from '../gql/gql-query-creator';\nimport { HttpRequestLoadingState } from './http-request';\nimport { wrapAsObservableSignal } from './observable-signal';\nimport { CreateQueryOptions, Query, QueryArgs, RawResponseType, ReadonlyQuery, ResponseType } from './query';\nimport { QueryErrorResponse } from './query-error-response';\nimport { AnyCreateQueryClientResult } from './query-client';\nimport {\n CreateQueryCreatorOptions,\n InternalCreateQueryCreatorOptions,\n QueryConfig,\n QueryMethod,\n} from './query-creator';\nimport { QueryDependencies, setupQueryDependencies } from './query-dependencies';\nimport {\n queryFeatureUsedMultipleTimes,\n silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent,\n withArgsQueryFeatureMissingButRouteIsFunction,\n} from './query-errors';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryFeature, QueryFeatureContext, QueryFeatureFlags, QueryFeatureType } from './query-features';\nimport { createQuerySnapshotFn } from './query-snapshot';\nimport { QueryState, setupQueryState } from './query-state';\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 getQueryFeatureUsage = <TArgs extends QueryArgs>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n options: CreateQueryOptions<TArgs> | CreateGqlQueryOptions<any>,\n) => {\n const { creator, features, queryConfig, creatorInternals } = options;\n\n const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WITH_ARGS);\n const shouldAutoExecuteMethod = isCreateGqlQueryOptions(options)\n ? shouldAutoExecuteGqlQuery(options.creatorInternals.method)\n : shouldAutoExecuteQuery(options.creatorInternals.method);\n const hasRouteFunction =\n typeof (creatorInternals as InternalCreateQueryCreatorOptions<TArgs>)?.route === 'function' ||\n typeof (creator as AnyCreateGqlQueryCreatorOptions)?.route === 'function';\n const shouldAutoExecute = shouldAutoExecuteMethod && !queryConfig.onlyManualExecution;\n\n if (hasRouteFunction && !hasWithArgsFeature && !queryConfig.silenceMissingWithArgsFeatureError) {\n throw withArgsQueryFeatureMissingButRouteIsFunction();\n }\n\n if (hasWithArgsFeature && queryConfig.silenceMissingWithArgsFeatureError) {\n throw silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent();\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.rawResponse.set(response as RawResponseType<TArgs>);\n const setLoading = (loading: HttpRequestLoadingState | null) => state.loading.set(loading);\n const setError = (error: QueryErrorResponse | null) => state.error.set(error);\n const createSnapshot = createQuerySnapshotFn({ state, execute, deps });\n\n // Pre-wrap all public signals once so both `query` and `roQuery` share the same instances.\n const wrappedArgs = wrapAsObservableSignal(state.args.asReadonly(), deps.injector);\n const wrappedResponse = wrapAsObservableSignal(state.response, deps.injector);\n const wrappedLatestHttpEvent = wrapAsObservableSignal(state.latestHttpEvent.asReadonly(), deps.injector);\n const wrappedLoading = wrapAsObservableSignal(state.loading.asReadonly(), deps.injector);\n const wrappedError = wrapAsObservableSignal(state.error.asReadonly(), deps.injector);\n const wrappedLastTimeExecutedAt = wrapAsObservableSignal(state.lastTimeExecutedAt.asReadonly(), deps.injector);\n const wrappedTriggeredBy = wrapAsObservableSignal(state.lastTriggeredBy.asReadonly(), deps.injector);\n const wrappedId = wrapAsObservableSignal(execute.currentRepositoryKey, deps.injector);\n const wrappedExecutionState = wrapAsObservableSignal(state.executionState, deps.injector);\n const wrappedRequest = wrapAsObservableSignal(state.subtle.request.asReadonly(), deps.injector);\n\n const asReadonly = () => {\n const roQuery: ReadonlyQuery<TArgs> = {\n args: wrappedArgs,\n response: wrappedResponse,\n latestHttpEvent: wrappedLatestHttpEvent,\n loading: wrappedLoading,\n error: wrappedError,\n lastTimeExecutedAt: wrappedLastTimeExecutedAt,\n triggeredBy: wrappedTriggeredBy,\n id: wrappedId,\n createSnapshot,\n executionState: wrappedExecutionState,\n };\n\n return roQuery;\n };\n\n const query: Query<TArgs> = {\n execute,\n args: wrappedArgs,\n response: wrappedResponse,\n latestHttpEvent: wrappedLatestHttpEvent,\n loading: wrappedLoading,\n error: wrappedError,\n lastTimeExecutedAt: wrappedLastTimeExecutedAt,\n triggeredBy: wrappedTriggeredBy,\n id: wrappedId,\n createSnapshot,\n reset: execute.reset,\n asReadonly,\n executionState: wrappedExecutionState,\n subtle: {\n destroy,\n setResponse,\n setLoading,\n setError,\n request: wrappedRequest,\n destroyRef: deps.scopeDestroyRef,\n injector: deps.injector,\n },\n };\n\n return query;\n};\n\nexport type ExecuteFactory<TArgs extends QueryArgs, TInternals> = (options: {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: CreateQueryCreatorOptions;\n creatorInternals: TInternals;\n queryConfig: QueryConfig;\n}) => InternalQueryExecute<TArgs>;\n\nexport type CreateBaseQueryOptions<TArgs extends QueryArgs, TInternals> = {\n creator?: CreateQueryCreatorOptions;\n creatorInternals: TInternals;\n features: QueryFeature<TArgs>[];\n queryConfig: QueryConfig;\n executeFactory: ExecuteFactory<TArgs, TInternals>;\n};\n\nexport const createBaseQuery = <TArgs extends QueryArgs, TInternals extends { client: AnyCreateQueryClientResult }>(\n options: CreateBaseQueryOptions<TArgs, TInternals>,\n) => {\n const client = options.creatorInternals.client;\n\n const deps = setupQueryDependencies({\n client,\n queryConfig: options.queryConfig,\n });\n\n return runInInjectionContext(deps.injector, () => {\n const state = setupQueryState<TArgs>({\n transformResponse: options.creator?.transformResponse,\n });\n const flags = getQueryFeatureUsage(options as unknown as Parameters<typeof getQueryFeatureUsage>[0]);\n\n const execute = options.executeFactory({\n deps,\n state,\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n queryConfig: options.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 const query = createQueryObject({ state, execute, deps });\n\n if (isQueryDevtoolsEnabled()) {\n const unregister = registerQueryDevtoolsEntry({\n kind: 'query',\n handle: query,\n meta: {\n clientName: getQueryClientName(client),\n clientBaseUrl: deps.client.baseUrl,\n route: stringifyQueryRoute(\n (options.creatorInternals as { route?: unknown }).route ??\n (options.creator as { route?: unknown } | undefined)?.route,\n ),\n method: flags.method,\n featureTypes: options.features.map((f) => f.type),\n queryConfig: options.queryConfig,\n creator: options.creator,\n repository: deps.client.repository,\n element: deps.hostElement,\n gqlQuery: (options.creatorInternals as { query?: string }).query,\n },\n });\n\n deps.destroyRef.onDestroy(unregister);\n }\n\n return query;\n });\n};\n","import { signal, WritableSignal } from '@angular/core';\nimport { QueryArgs, RequestArgs } from './query';\nimport { circularQueryDependency } from './query-errors';\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 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.rawResponse.set(null);\n state.lastTimeExecutedAt.set(null);\n state.lastTriggeredBy.set(null);\n};\n\nexport type QueryExecuteState = {\n previousKey: WritableSignal<string | null>;\n};\n\nexport const setupQueryExecuteState = (): QueryExecuteState => {\n return {\n previousKey: signal(null),\n };\n};\n\nexport type RunQueryExecuteOptions = {\n allowCache?: boolean;\n triggeredBy?: string;\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\n isSecure?: boolean;\n};\n\nexport const queryExecute = <TArgs extends QueryArgs>(options: QueryExecuteOptions<TArgs>) => {\n const { executeOptions, args, executeState, options: runQueryOptions, isSecure } = 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 creatorOptions: creator,\n retryFn: creator?.retryFn,\n consumerDestroyRef: deps.destroyRef,\n key: queryConfig.key,\n previousKey: executeState.previousKey(),\n runQueryOptions,\n isSecure,\n silenceUncacheableAllowCacheError: queryConfig.silenceUncacheableAllowCacheError,\n });\n\n executeState.previousKey.set(key);\n state.lastTimeExecutedAt.set(Date.now());\n state.lastTriggeredBy.set(runQueryOptions?.triggeredBy ?? null);\n state.subtle.request.set(request);\n state.subtle.bindRequestEvents(request);\n};\n\nexport const circularQueryDependencyChecker = () => {\n let lastTriggerTs = 0;\n let illegalWrites = 0;\n\n // Typing this as number will throw an type error during testing since it is of type Timeout in a node env.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let timeout: any = null;\n\n const check = () => {\n const now = performance.now();\n\n if (now - lastTriggerTs < 100) {\n illegalWrites++;\n\n if (illegalWrites > 5) {\n throw circularQueryDependency();\n }\n }\n\n lastTriggerTs = now;\n\n if (timeout) clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n illegalWrites = 0;\n }, 100);\n };\n\n return {\n check,\n };\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 circularQueryDependencyChecker,\n queryExecute,\n resetExecuteState,\n RunQueryExecuteOptions,\n setupQueryExecuteState,\n} from './query-execute-utils';\nimport { QueryKey } 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<QueryKey | null>;\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 const circularChecker = circularQueryDependencyChecker();\n\n const reset = () => resetExecuteState({ executeState, executeOptions });\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n circularChecker.check();\n\n const { args = executeOptions.state.args(), options } = executeArgs ?? {};\n\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 { HttpHeaders } from '@angular/common/http';\nimport { DestroyRef, Injector } from '@angular/core';\nimport { createBaseQuery } from './base-query-factory';\nimport { HttpRequest, HttpRequestLoadingState, RequestHttpEvent } from './http-request';\nimport { ObservableSignal } from './observable-signal';\nimport { CreateQueryCreatorOptions, InternalCreateQueryCreatorOptions, QueryConfig } from './query-creator';\nimport { QueryErrorResponse } from './query-error-response';\nimport { createExecuteFn, QueryExecute } from './query-execute';\nimport { QueryFeature } from './query-features';\nimport { QueryExecutionState } from './query-state';\n\nexport type QueryArgs = {\n response?: any;\n rawResponse?: any;\n pathParams?: Record<string, string | number>;\n queryParams?: any;\n body?: any;\n headers?: HttpHeaders | (() => HttpHeaders);\n};\n\nexport type ResponseType<T extends QueryArgs | null> = T extends QueryArgs ? T['response'] : never;\nexport type RawResponseType<T extends QueryArgs | null> = T extends QueryArgs\n ? T['rawResponse'] extends undefined\n ? T['response']\n : T['rawResponse']\n : 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\n/**\n * The empty request-args object, typed to satisfy `RequestArgs<TArgs>` for a query that takes no\n * arguments — its `QueryArgs` is just `{ response: T }`, so `RequestArgs` resolves to `{}`.\n *\n * Only needed in generic code, where `TArgs` is still a type parameter and TS therefore cannot see\n * that `{}` is the whole of it. Against a concrete query, omit the argument instead: both\n * `query.execute()` and the auth registry's `execute()` already take none.\n *\n * @example\n * const runAnything = <TArgs extends QueryArgs>(query: Query<TArgs>) =>\n * query.execute({ args: emptyQueryArgs<TArgs>() });\n */\nexport const emptyQueryArgs = <TArgs extends QueryArgs>() => ({}) as RequestArgs<TArgs>;\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: ObservableSignal<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: ObservableSignal<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: ObservableSignal<RequestHttpEvent<TArgs> | null>;\n\n /** The loading state of the query. Will be `null` if the query currently isn't loading. */\n loading: ObservableSignal<HttpRequestLoadingState | null>;\n\n /** The error that occurred during the last execution of the query. Will be `null` if no error occurred. */\n error: ObservableSignal<QueryErrorResponse | null>;\n\n /** The time the query was last executed at. Will be `null` if the query has never been executed. */\n lastTimeExecutedAt: ObservableSignal<number | null>;\n\n /** Who or what triggered the last execution. Will be `null` for user-triggered executions. */\n triggeredBy: ObservableSignal<string | null>;\n\n /** The id of the query */\n id: ObservableSignal<string | null>;\n\n /** The current state of the query. Will be `null` if the query has never been executed. */\n executionState: ObservableSignal<QueryExecutionState<TArgs> | null>;\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: ObservableSignal<boolean>;\n};\n\nexport type AnyQuerySnapshot = QuerySnapshot<any>;\nexport type AnyNewQuery = 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 /**\n * Manually forces the loading state of the query. Overridden on the next execution. Intended for\n * devtools / testing UI states — not for application logic.\n */\n setLoading: (loading: HttpRequestLoadingState | null) => void;\n\n /**\n * Manually forces the error state of the query. Overridden on the next execution. Intended for\n * devtools / testing UI states — not for application logic.\n */\n setError: (error: QueryErrorResponse | null) => void;\n\n /** The currently underlying HTTP request of the query. Will be `null` if the query has never been executed. */\n request: ObservableSignal<HttpRequest<TArgs> | null>;\n\n /** The destroy reference used to clean up the query when it is no longer needed */\n destroyRef: DestroyRef;\n\n /** The Angular injector used to resolve dependencies for the query */\n injector: Injector;\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 createBaseQuery({\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n features: options.features,\n queryConfig: options.queryConfig,\n executeFactory: createExecuteFn,\n });\n","import { Injector } from '@angular/core';\nimport { createBaseQueryCreator } from './base-query-creator-factory';\nimport { HttpRequestResponseType, HttpRequestTransferCacheConfig } from './http-request';\nimport { AnyNewQuery, PathParamsType, Query, QueryArgs, RawResponseType, ResponseType, createQuery } from './query';\nimport { AnyCreateQueryClientResult } from './query-client';\nimport { QueryFeature } from './query-features';\nimport { ShouldRetryRequestFn } from './query-retry-utils';\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 BaseQueryCreatorOptionsSubtle = {\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\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport type BaseQueryCreatorOptions<TArgs extends QueryArgs = QueryArgs> = {\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 /**\n * Custom retry function for this specific query creator.\n * If provided, overrides the retry function configured at the client level.\n *\n * @default Client's retryFn or shouldRetryRequest()\n */\n retryFn?: ShouldRetryRequestFn;\n\n /**\n * How long (in ms) this query's cache entry is kept after its last consumer was destroyed.\n * Overrides the client level `keepUnusedFor`. Use `0` for responses that should never outlive their\n * consumer (very large payloads, or data that must not be shown stale).\n *\n * @default Client's keepUnusedFor (5 minutes)\n */\n keepUnusedFor?: number;\n\n /** Advanced query creator features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle?: BaseQueryCreatorOptionsSubtle;\n};\n\ntype HasKey<T, K extends PropertyKey> = K extends keyof T\n ? undefined extends T[K]\n ? K extends keyof Required<T>\n ? true\n : false\n : true\n : false;\n\n/**\n * Determines if rawResponse type differs from response type.\n * Returns true if rawResponse is explicitly defined and differs from response.\n */\nexport type RequiresTransform<TArgs extends QueryArgs> =\n HasKey<TArgs, 'rawResponse'> extends false\n ? false\n : RawResponseType<TArgs> extends ResponseType<TArgs>\n ? ResponseType<TArgs> extends RawResponseType<TArgs>\n ? false\n : true\n : true;\n\nexport type CreateQueryCreatorOptions<TArgs extends QueryArgs = QueryArgs> = BaseQueryCreatorOptions<TArgs> &\n (RequiresTransform<TArgs> extends true\n ? {\n /**\n * Transforms the raw HTTP response to the final response type.\n * **Required** because rawResponse type differs from response type.\n *\n * @example\n * ```ts\n * transformResponse: (raw) => raw.data\n * ```\n */\n transformResponse: (rawResponse: RawResponseType<TArgs>) => ResponseType<TArgs>;\n }\n : {\n /**\n * Transforms the raw HTTP response to the final response type.\n * Useful for unwrapping response wrappers (e.g., GraphQL's `{ data: ... }` format).\n *\n * @example\n * ```ts\n * transformResponse: (raw) => raw.data\n * ```\n */\n transformResponse?: (rawResponse: RawResponseType<TArgs>) => ResponseType<TArgs>;\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 * Creates a new query creator with merged options.\n * The new creator inherits all options from the original and overrides them with the provided options.\n *\n * @example\n * ```ts\n * const originalCreator = myApiPost('/api/data');\n * const creatorWithRetry = originalCreator.clone({ retryFn: customRetryFn });\n * ```\n */\n clone: (additionalOptions: Partial<BaseQueryCreatorOptions<TArgs>>) => QueryCreator<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 | AnyNewQuery> =\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: AnyCreateQueryClientResult;\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 /**\n * If true, the query will not throw an error because a \"withArgs()\" feature is missing.\n */\n silenceMissingWithArgsFeatureError?: boolean;\n\n /**\n * If true, executing with `allowCache` on a request that cannot be cached is ignored instead of throwing\n * `ET301`.\n *\n * For the legacy interop layer: v2 had a single `skipCache` for every method, so it forwards `allowCache`\n * without being able to tell a cacheable request from an uncacheable one. Application code should not set\n * this — on a hand-written `execute()` the error it silences is a real mistake.\n */\n silenceUncacheableAllowCacheError?: boolean;\n\n /**\n * A custom injector to use for this query.\n */\n injector?: Injector;\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 createBaseQueryCreator({\n options,\n internals,\n queryFactory: createQuery,\n });\n","import { Query, QueryArgs } from './query';\nimport { BaseQueryCreatorOptions, QueryConfig, QueryCreator, splitQueryConfig } from './query-creator';\nimport { QueryFeature } from './query-features';\n\nexport type BaseQueryCreatorFactoryOptions<TArgs extends QueryArgs, TOptions, TInternals> = {\n /** Creator-specific options (e.g., CreateQueryCreatorOptions or CreateGqlQueryCreatorOptions) */\n options: TOptions | undefined;\n\n /** Creator-specific internals (e.g., InternalCreateQueryCreatorOptions or InternalCreateGqlQueryCreatorOptions) */\n internals: TInternals;\n\n /** Factory function that creates the actual query */\n queryFactory: (config: {\n creator: TOptions | undefined;\n creatorInternals: TInternals;\n features: QueryFeature<TArgs>[];\n queryConfig: QueryConfig;\n }) => Query<TArgs>;\n};\n\nexport const createBaseQueryCreator = <TArgs extends QueryArgs, TOptions, TInternals>(\n config: BaseQueryCreatorFactoryOptions<TArgs, TOptions, TInternals>,\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 config.queryFactory({\n creator: config.options,\n creatorInternals: config.internals,\n features,\n queryConfig,\n });\n }\n\n // Add clone method to create a new creator with merged options\n // Cast to match QueryCreator's expected signature while preserving TOptions internally\n queryCreator.clone = (additionalOptions: Partial<BaseQueryCreatorOptions>) => {\n return createBaseQueryCreator({\n ...config,\n options: { ...config.options, ...additionalOptions } as TOptions,\n });\n };\n\n return queryCreator;\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 { isSymfonyPagerfantaOutOfRangeError } from '../../http/query-error-response-utils';\nimport { invalidBaseRouteError, invalidRouteError, pathParamsMissingInRouteFunctionError } from '../logger';\nimport { AnyRoute } from '../query';\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;\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 (config?.objectNotation === 'json-stringify') {\n if (value === undefined) {\n return false;\n }\n\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\n const val = typeof value === 'object' ? JSON.stringify(value) : value;\n\n const encodedValue = encodeURIComponent(val as string | number | boolean);\n\n queryParams.push(`${encodedKey}=${encodedValue}`);\n\n return true;\n } else 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 v2ExtractExpiresInSeconds = (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 v2ShouldRetryRequest: 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 === 408 || status === 425) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 429 errors\n if (status === 429) {\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 { HttpErrorResponse } from '@angular/common/http';\nimport { Observable, Observer } from 'rxjs';\nimport { PartialXhrState, RequestConfig, RequestError, RequestEvent } from './request.types';\nimport {\n buildTimestampFromSeconds,\n detectContentTypeHeader,\n forEachHeader,\n getResponseUrl,\n hasHeader,\n parseAllXhrResponseHeaders,\n serializeBody,\n v2ExtractExpiresInSeconds,\n v2ShouldRetryRequest,\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 || v2ShouldRetryRequest;\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 !== 204) {\n body = typeof xhr.response === 'undefined' ? xhr.responseText : xhr.response;\n }\n\n if (status === 0) {\n status = body ? 200 : 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 {\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) ?? v2ExtractExpiresInSeconds(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 httpErrorResponse: new HttpErrorResponse({\n error: body,\n status,\n statusText,\n url,\n }),\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 httpErrorResponse: new HttpErrorResponse({\n error: error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n url,\n }),\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 { HttpHeaders } from '@angular/common/http';\nimport { QueryArgs, RequestArgs } from './query';\nimport { QueryMethod } from './query-creator';\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 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","/**\n * An error body can be an HTML page instead of JSON: a proxy's 502, a load balancer's maintenance page, a\n * platform's \"service temporarily unavailable\". The markup is never worth showing, but the sentence inside it\n * usually is — this file pulls that sentence out.\n *\n * Parsing is done with string matching rather than `DOMParser` on purpose: it must work during SSR, and the\n * markup must never reach a DOM. What comes back is plain text, so a template can bind it as text like any\n * other error message.\n */\n\n/** A full document, however sloppily written. */\nconst HTML_DOCUMENT_PATTERN = /<!doctype\\s+html|<html[\\s>]|<head[\\s>]|<body[\\s>]/i;\n\n/** A fragment — matched only as a balanced pair, so a message that merely mentions `<p>` is not markup. */\nconst HTML_ELEMENT_PATTERN = /<(h[1-6]|p|div|title|pre)\\b[^>]*>[\\s\\S]*<\\/\\1>/i;\n\n/** Carries no readable text, and `<style>` in particular would otherwise flood the fallback. */\nconst HTML_NOISE_PATTERN = /<(script|style|noscript|svg|iframe|template)\\b[^>]*>[\\s\\S]*?<\\/\\1>/gi;\n\nconst HTML_COMMENT_PATTERN = /<!--[\\s\\S]*?-->/g;\n\nconst HTML_TAG_PATTERN = /<[^>]*>/g;\n\nconst HTML_ENTITY_PATTERN = /&(#x[0-9a-f]+|#[0-9]+|[a-z][a-z0-9]*);/gi;\n\nconst HTML_BODY_PATTERN = /<body\\b[^>]*>([\\s\\S]*?)<\\/body>/i;\n\nconst HTML_HEADING_PATTERN = /<h([1-6])\\b[^>]*>([\\s\\S]*?)<\\/h\\1>/i;\n\nconst HTML_TITLE_PATTERN = /<title\\b[^>]*>([\\s\\S]*?)<\\/title>/i;\n\nconst HTML_PARAGRAPH_PATTERN = /<p\\b[^>]*>([\\s\\S]*?)<\\/p>/gi;\n\n/**\n * The entities an error page actually uses. A complete table would be kilobytes for no gain — anything missing\n * is left as written, which is still readable.\n */\nconst HTML_ENTITIES: Record<string, string> = {\n amp: '&',\n lt: '<',\n gt: '>',\n quot: '\"',\n apos: \"'\",\n nbsp: ' ',\n ensp: ' ',\n emsp: ' ',\n thinsp: ' ',\n shy: '',\n ndash: '–',\n mdash: '—',\n hellip: '…',\n lsquo: '‘',\n rsquo: '’',\n ldquo: '“',\n rdquo: '”',\n laquo: '«',\n raquo: '»',\n bull: '•',\n middot: '·',\n deg: '°',\n copy: '©',\n reg: '®',\n trade: '™',\n euro: '€',\n pound: '£',\n auml: 'ä',\n ouml: 'ö',\n uuml: 'ü',\n Auml: 'Ä',\n Ouml: 'Ö',\n Uuml: 'Ü',\n szlig: 'ß',\n};\n\n/** Long enough for a real explanation, short enough that a dumped stack trace can't become the message. */\nconst MAX_MESSAGE_LENGTH = 300;\n\nconst MAX_CODE_POINT = 0x10ffff;\n\nconst decodeHtmlEntities = (value: string) =>\n value.replace(HTML_ENTITY_PATTERN, (match, entity: string) => {\n if (entity.startsWith('#')) {\n const isHex = entity[1] === 'x' || entity[1] === 'X';\n const codePoint = Number.parseInt(isHex ? entity.slice(2) : entity.slice(1), isHex ? 16 : 10);\n\n // `String.fromCodePoint` throws on anything out of range, and a malformed page is exactly where that shows up.\n return Number.isInteger(codePoint) && codePoint > 0 && codePoint <= MAX_CODE_POINT\n ? String.fromCodePoint(codePoint)\n : match;\n }\n\n return HTML_ENTITIES[entity] ?? HTML_ENTITIES[entity.toLowerCase()] ?? match;\n });\n\n/**\n * Tags are dropped before entities are decoded, so an escaped `&lt;script&gt;` in the page's text can never\n * turn back into markup on the way out.\n */\nconst toPlainText = (html: string) =>\n decodeHtmlEntities(html.replace(HTML_TAG_PATTERN, ' ')).replace(/\\s+/g, ' ').trim();\n\nconst truncate = (value: string) =>\n value.length <= MAX_MESSAGE_LENGTH ? value : `${value.slice(0, MAX_MESSAGE_LENGTH - 1).trimEnd()}…`;\n\nconst matchText = (html: string, pattern: RegExp, group: number) => {\n const text = pattern.exec(html)?.[group];\n\n return text ? toPlainText(text) || null : null;\n};\n\nconst paragraphTexts = (html: string) => {\n const texts: string[] = [];\n\n for (const match of html.matchAll(HTML_PARAGRAPH_PATTERN)) {\n const text = toPlainText(match[1] ?? '');\n\n if (text) texts.push(text);\n }\n\n return texts;\n};\n\n/**\n * Whether a value is an HTML error page rather than a message meant to be read as-is.\n *\n * Deliberately strict: a document marker, or a balanced element pair. A message containing a stray `<` or a\n * lone `<br>` stays a message.\n */\nexport const isHtmlErrorPayload = (value: unknown): value is string =>\n typeof value === 'string' && (HTML_DOCUMENT_PATTERN.test(value) || HTML_ELEMENT_PATTERN.test(value));\n\n/**\n * The HTML of an error body, or `null` when the body isn't an error page.\n *\n * Two shapes carry one: the raw string body of any failed response, and the `{ error, text }` wrapper\n * Angular's XHR backend produces when a `200` response fails to parse as JSON — which is how a proxy handing\n * back an HTML page with a success status arrives.\n */\nexport const htmlErrorPayload = (body: unknown): string | null => {\n if (isHtmlErrorPayload(body)) return body;\n\n if (typeof body === 'object' && !!body && 'text' in body && isHtmlErrorPayload(body.text)) {\n return body.text;\n }\n\n return null;\n};\n\n/**\n * The readable message inside an HTML error page, or `null` when it has none.\n *\n * Prefers what a page puts its message in: the first heading (or the `<title>` when there is no heading),\n * followed by the first paragraph that says something new. Falls back to the page's flattened text, so an\n * unusually structured page still yields something. The result is always plain text, and always short enough\n * to sit in a toast.\n *\n * @example\n * extractHtmlErrorMessage('<h1>Service Unavailable</h1><p>The server is restarting.</p>');\n * // 'Service Unavailable: The server is restarting.'\n */\nexport const extractHtmlErrorMessage = (html: string): string | null => {\n const document = html.replace(HTML_COMMENT_PATTERN, ' ').replace(HTML_NOISE_PATTERN, ' ');\n const body = HTML_BODY_PATTERN.exec(document)?.[1] ?? document;\n\n const headline = matchText(body, HTML_HEADING_PATTERN, 2) ?? matchText(document, HTML_TITLE_PATTERN, 1);\n const detail = paragraphTexts(body).find((text) => text !== headline) ?? null;\n\n if (headline && detail) {\n // A headline that already ends in punctuation is a sentence, not a label.\n const separator = /[.!?:]$/.test(headline) ? ' ' : ': ';\n\n return truncate(`${headline}${separator}${detail}`);\n }\n\n const message = headline ?? detail ?? toPlainText(body);\n\n return message ? truncate(message) : null;\n};\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { clamp } from '@ethlete/core';\nimport { isSymfonyPagerfantaOutOfRangeError } from './query-error-response-utils';\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 = clamp(1000 + 1000 * retryCount, 1000, 5000);\n const { status, error: detail, headers } = error;\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 // We will retry in this case until the connection is back.\n if (status === 0) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Don't retry if we already retried 3 times\n if (retryCount > 3) {\n return { retry: false };\n }\n\n // Don't retry if it's not an http error\n if (!(error instanceof HttpErrorResponse)) {\n return { retry: false };\n }\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 === 408 || status === 425) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 429 errors\n if (status === 429) {\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 return { retry: false };\n};\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { extractHtmlErrorMessage, htmlErrorPayload } from './query-error-html-utils';\nimport {\n isClassValidatorError,\n isSymfonyFormViolationListError,\n isSymfonyListError,\n} from './query-error-response-utils';\nimport { shouldRetryRequest, ShouldRetryRequestResult } from './query-retry-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: number;\n} & (QueryErrorResponseList | QueryErrorResponseSingle);\n\nexport type QueryErrorResponseItem = {\n message: string;\n};\n\nexport const isQueryErrorResponse = (error: unknown): error is QueryErrorResponse => {\n return typeof error === 'object' && error !== null && 'raw' in error && 'retryState' in error && 'isList' in error;\n};\n\n/**\n * Every message carried by an error, flattened into a plain list — one entry for a single error,\n * one per violation for a list (a form response with several field violations), empty for `null`.\n *\n * The single/list split exists because that is how APIs answer; UI almost never wants to branch on\n * it. Reach for this when rendering, and keep {@link QueryErrorResponse} for anything that needs\n * the status code or the raw response.\n *\n * @example\n * ```html\n * @for (message of queryErrorMessages(myQuery.error()); track message) {\n * <p class=\"error\">{{ message }}</p>\n * }\n * ```\n */\nexport const queryErrorMessages = (error: QueryErrorResponse | null | undefined): string[] => {\n if (!error) return [];\n\n return error.isList ? error.errors.map((item) => item.message) : [error.error.message];\n};\n\n/**\n * The first message of an error, or `null` when there is none — the single-line counterpart to\n * {@link queryErrorMessages}, for a toast or a form-field hint.\n */\nexport const queryErrorMessage = (error: QueryErrorResponse | null | undefined): string | null =>\n queryErrorMessages(error)[0] ?? null;\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 const html = htmlErrorPayload(detail);\n\n if (html) {\n // An HTML error page (a proxy's 502, a maintenance page) is never shown as-is: keep the sentence inside it\n // and drop the markup. A page with no readable text leaves the list empty, which falls back to the\n // HttpErrorResponse's own message below — still better than a wall of tags.\n const message = extractHtmlErrorMessage(html);\n\n if (message) {\n errorList.push({ message });\n }\n } else 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, HttpEvent, HttpEventType, HttpHeaders, HttpProgressEvent } from '@angular/common/http';\nimport { ErrorHandler, Signal, signal } from '@angular/core';\nimport { Observable, Subject, Subscription, catchError, retry, tap, throwError, timer } from 'rxjs';\nimport { buildTimestampFromSeconds } from '../legacy/request';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { extractExpiresInSeconds } from './query-cache-utils';\nimport { CacheAdapterFn } from './query-client';\nimport { CreateQueryCreatorOptions, QueryMethod } from './query-creator';\nimport { QueryErrorResponse, createQueryErrorResponse } from './query-error-response';\nimport { QueryRepositoryDependencies } from './query-repository';\nimport { ShouldRetryRequestFn, ShouldRetryRequestOptions, shouldRetryRequest } from './query-retry-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 /** The error handler instance to use for the request */\n ngErrorHandler: ErrorHandler;\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: QueryRepositoryDependencies;\n\n /** The client options of the request */\n clientOptions?: CreateQueryCreatorOptions;\n\n /**\n * Headers configured on the query client, applied to every request it makes. Per-request\n * `args.headers` are merged on top and win per header name.\n *\n * @see CreateQueryClientConfigOptions.headers\n */\n clientHeaders?: HttpHeaders | (() => HttpHeaders);\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 /** The HTTP method of the request. */\n method: QueryMethod;\n\n /** The full URL of the request (base + path + query params). */\n url: string;\n\n /**\n * Executes the request.\n *\n * `force` runs it even when one is already in flight (the in-flight one is cancelled) or the\n * cached response is still fresh — used by `refreshQueriesInUse` after something outside the\n * request changed, such as a client-level header.\n */\n execute: (options?: { allowCache?: boolean; force?: 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<RequestHttpEvent<TArgs> | null>;\n\n /**\n * A discrete stream of every event of this request, emitted synchronously at the moment the\n * event is processed (including the terminal Response / error event). Unlike the `currentEvent`\n * signal, this never coalesces or gets reset, so consumers cannot miss a transition. Completes\n * when the request is destroyed.\n */\n events$: Observable<RequestHttpEvent<TArgs>>;\n\n /**\n * Whether the request is stale or not aka the cache header has expired.\n *\n * This is a plain getter function (evaluated on each call), not a reactive signal, because\n * staleness depends on wall-clock time rather than on any tracked signal.\n */\n isStale: () => boolean;\n\n /**\n * The timestamp (ms) at which the cached response goes stale, or `null` when the request is not\n * cacheable / has no freshness window. Exposed for devtools freshness countdowns.\n */\n expiresAt: Signal<number | null>;\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 type RequestHttpEvent<TArgs extends QueryArgs> = HttpEvent<ResponseType<TArgs>> | HttpErrorEvent;\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<RequestHttpEvent<TArgs> | null>(null);\n const event$ = new Subject<RequestHttpEvent<TArgs>>();\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 // NOTE: This must be a plain function, not a `computed`. The freshness check compares against\n // `Date.now()`, which is not reactive, so a memoized computed would only ever recompute when\n // `expiresIn` changes — once it evaluated to `false` (fresh) it would stay `false` forever, even\n // after the window elapsed, turning every `allowCache` execute into a permanent cache hit.\n const isStale = () => {\n const expiresInTs = expiresIn();\n\n return expiresInTs === null || expiresInTs < Date.now();\n };\n\n // Resolved per execution rather than once at creation, so a client whose headers are a function\n // reading a signal (a preview token, a tenant id) sees the current value on every re-run.\n const resolveHeaders = () => {\n const clientHeaders = typeof options.clientHeaders === 'function' ? options.clientHeaders() : options.clientHeaders;\n const argHeaders = typeof args?.headers === 'function' ? args.headers() : args?.headers;\n\n if (!clientHeaders) return argHeaders;\n if (!argHeaders) return clientHeaders;\n\n // `set` replaces every value of that name, so a per-request header fully overrides the\n // client-level one instead of being appended next to it.\n return argHeaders.keys().reduce((merged, key) => merged.set(key, argHeaders.getAll(key) ?? []), clientHeaders);\n };\n\n const createStream = () => {\n const headers = resolveHeaders();\n\n return 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 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\n const execute = (options?: { allowCache?: boolean; force?: boolean }) => {\n if (!options?.force && (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 const stream = createStream();\n\n currentStreamSubscription = stream.subscribe({\n error: () => {\n // Errors are already handled in updateErrorState via catchError\n // This empty handler prevents \"unhandled error\" warnings in tests\n },\n });\n\n return true;\n };\n\n const destroy = () => {\n const wasActive = !currentStreamSubscription.closed;\n\n currentStreamSubscription.unsubscribe();\n event$.complete();\n\n return wasActive;\n };\n\n const updateState = (event: HttpEvent<ResponseType<TArgs>>) => {\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 currentEvent.set(event);\n event$.next(event);\n };\n\n const updateErrorState = (errorResponse: unknown) => {\n const errorRes = createQueryErrorResponse(errorResponse);\n\n error.set(errorRes);\n loading.set(null);\n\n const errorEvent: HttpErrorEvent = { type: 'error', error: errorRes };\n currentEvent.set(errorEvent);\n event$.next(errorEvent);\n\n options.dependencies.ngErrorHandler.handleError(errorRes.raw);\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 method: options.method,\n url: options.fullPath,\n execute,\n destroy,\n loading: loading.asReadonly(),\n error: error.asReadonly(),\n response: response.asReadonly(),\n currentEvent: currentEvent.asReadonly(),\n events$: event$.asObservable(),\n isStale,\n expiresAt: expiresIn.asReadonly(),\n };\n\n return httpRequest;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n runInInjectionContext,\n Signal,\n signal,\n untracked,\n} from '@angular/core';\nimport { consumeSuppressQueryStackDevtools, isQueryDevtoolsEnabled, registerQueryDevtoolsEntry } from '../devtools';\nimport { AnyNewQuery, 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 QueryStackSubtle<TCreator extends AnyQueryCreator, TQuery extends AnyNewQuery> = {\n /** Create a new query with the given arguments. You should always prefer the `args` option instead of this. */\n runWithArgs: (\n args: RequestArgs<QueryArgsOf<TCreator>> | RequestArgs<QueryArgsOf<TCreator>>[] | null,\n ) => TQuery | null;\n};\n\nexport type QueryStack<TQuery extends AnyNewQuery, TCreator extends AnyQueryCreator, TTransform> = {\n /** Contains all queries in the stack. */\n queries: Signal<TQuery[]>;\n\n /** Contains the first query in the stack. */\n firstQuery: Signal<TQuery | null>;\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 anyLoading: Signal<boolean>;\n\n /** Count of queries currently loading */\n loadingCount: Signal<number>;\n\n /** True if ALL queries are loading */\n allLoading: Signal<boolean>;\n\n /** Progress tracking */\n loadingProgress: Signal<{ loaded: number; total: number }>;\n\n /** Contains the first error that occurred in the stack. */\n anyError: Signal<QueryErrorResponse | null>;\n\n /** All errors from all queries */\n errors: Signal<QueryErrorResponse[]>;\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 /** Retry all queries that have errors */\n retryFailed: () => void;\n\n /** Advanced query stack features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle: QueryStackSubtle<TCreator, TQuery>;\n};\n\nexport type AnyQueryStack = QueryStack<AnyNewQuery, AnyQueryCreator, 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 * If true, prevents creating queries with identical args.\n * Useful for append mode to avoid duplicate data fetching.\n * @default true\n */\n deduplicateArgs?: boolean;\n\n /**\n * Custom function to generate a unique key from args for deduplication.\n * If not provided, uses JSON.stringify.\n */\n argsKeyFn?: (args: RequestArgs<QueryArgsOf<TCreator>> | null) => string;\n\n /**\n * Maximum number of queries to keep when append is true.\n * When limit is reached, queries will be removed based on removeStrategy.\n * @default Infinity\n */\n maxQueries?: number;\n\n /**\n * Strategy for removing queries when maxQueries is reached.\n * - 'oldest': Remove oldest queries first (FIFO)\n * - 'newest': Remove newest queries first (LIFO)\n * @default 'oldest'\n */\n removeStrategy?: 'oldest' | 'newest';\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 argsKeyFn,\n deduplicateArgs,\n maxQueries = Infinity,\n removeStrategy = 'oldest',\n } = options ?? {};\n\n const injector = inject(Injector);\n\n const queries = signal<QueryType[]>([]);\n const lastQuery = signal<QueryType | null>(null);\n const firstQuery = computed(() => queries()[0] ?? null);\n\n const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WITH_ARGS);\n const hasWithOptimisticUpdateFeature = features.some((f) => f.type == QueryFeatureType.WITH_RESPONSE_UPDATE);\n\n if (hasWithArgsFeature) {\n throw queryStackWithArgsUsed();\n }\n\n if (hasWithOptimisticUpdateFeature) {\n throw queryStackWithResponseUpdateUsed();\n }\n\n const runWithArgs = (args: RequestArgs<QueryArgsOf<TCreator>> | RequestArgs<QueryArgsOf<TCreator>>[] | null) => {\n if (args === null) return null;\n\n return untracked(() => {\n const newArgsArray = Array.isArray(args) ? args : [args];\n\n let filteredArgs = newArgsArray;\n if (deduplicateArgs !== false && append) {\n const keyFn = argsKeyFn ?? ((a) => JSON.stringify(a));\n const existingKeys = new Set(\n queries().map((q) => keyFn(q.args() as RequestArgs<QueryArgsOf<TCreator>> | null)),\n );\n\n filteredArgs = newArgsArray.filter((a) => {\n const key = keyFn(a);\n if (existingKeys.has(key)) return false;\n existingKeys.add(key);\n return true;\n });\n }\n\n const newQueries = runInInjectionContext(injector, () =>\n filteredArgs.map(\n (newArgsEntry) =>\n queryCreator(\n withArgs(() => newArgsEntry),\n ...features,\n ) as QueryType,\n ),\n );\n\n const oldQueries = queries();\n\n if (append) {\n const { queries: appendedQueries, lastQuery: lastAppendedQuery } = appendFn(oldQueries, newQueries);\n\n let finalQueries = appendedQueries;\n if (maxQueries && finalQueries.length > maxQueries) {\n const excessCount = finalQueries.length - maxQueries;\n\n const queriesToRemove =\n removeStrategy === 'newest' ? finalQueries.slice(-excessCount) : finalQueries.slice(0, excessCount);\n\n queriesToRemove.forEach((q) => q.subtle.destroy());\n\n finalQueries =\n removeStrategy === 'newest' ? finalQueries.slice(0, maxQueries) : finalQueries.slice(-maxQueries);\n }\n\n queries.set(finalQueries);\n lastQuery.set(lastAppendedQuery);\n return lastAppendedQuery;\n } else {\n const keyFn = argsKeyFn ?? ((a) => JSON.stringify(a));\n const newArgsKeys = new Set(newArgsArray.map((a) => keyFn(a)));\n\n const preservedQueries = oldQueries.filter((oldQuery) => {\n const oldKey = keyFn(oldQuery.args() as RequestArgs<QueryArgsOf<TCreator>> | null);\n return newArgsKeys.has(oldKey);\n });\n\n const preservedMap = new Map(\n preservedQueries.map((q) => [keyFn(q.args() as RequestArgs<QueryArgsOf<TCreator>> | null), q]),\n );\n\n const finalQueries = newArgsArray.map((newArgsEntry) => {\n const key = keyFn(newArgsEntry);\n const preserved = preservedMap.get(key);\n\n if (preserved) {\n return preserved;\n }\n\n return runInInjectionContext(\n injector,\n () =>\n queryCreator(\n withArgs(() => newArgsEntry),\n ...features,\n ) as QueryType,\n );\n });\n\n for (const oldQuery of oldQueries) {\n if (!finalQueries.includes(oldQuery)) {\n oldQuery.subtle.destroy();\n }\n }\n\n queries.set(finalQueries);\n\n const last = finalQueries[finalQueries.length - 1] ?? null;\n\n lastQuery.set(last);\n\n return last;\n }\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 effect(() => {\n dependencies?.();\n\n untracked(() => clear());\n });\n\n effect(() => runWithArgs(args(dependencies?.())));\n\n const anyLoading = computed(() => queries().some((q) => q.loading()));\n\n const loadingCount = computed(() => queries().filter((q) => q.loading()).length);\n\n const allLoading = computed(() => {\n const qs = queries();\n return qs.length > 0 && qs.every((q) => q.loading());\n });\n\n const loadingProgress = computed(() => {\n const total = queries().length;\n const loaded = queries().filter((q) => !q.loading()).length;\n return { loaded, total };\n });\n\n const anyError = computed(\n () =>\n queries()\n .map((q) => q.error())\n .find((e) => e !== null) ?? null,\n );\n\n const errors = computed(() =>\n queries()\n .map((q) => q.error())\n .filter((e): e is QueryErrorResponse => e !== 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 retryFailed = () => {\n for (const query of queries()) {\n if (query.error()) {\n query.execute({ options: { allowCache: false } });\n }\n }\n };\n\n const stack: QueryStack<QueryType, TCreator, TTransform> = {\n queries: queries.asReadonly(),\n lastQuery: lastQuery.asReadonly(),\n firstQuery,\n anyLoading,\n loadingCount,\n allLoading,\n loadingProgress,\n anyError,\n errors,\n response,\n execute,\n clear,\n retryFailed,\n subtle: {\n runWithArgs,\n },\n };\n\n const skipDevtools = consumeSuppressQueryStackDevtools();\n\n if (isQueryDevtoolsEnabled() && !skipDevtools) {\n const unregister = registerQueryDevtoolsEntry({\n kind: 'query-stack',\n handle: stack,\n meta: {\n featureTypes: features.map((f) => f.type),\n },\n });\n\n inject(DestroyRef).onDestroy(unregister);\n }\n\n return stack;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, DestroyRef, effect, inject, isDevMode, Signal, signal, untracked } from '@angular/core';\nimport { isQueryDevtoolsEnabled, registerQueryDevtoolsEntry, suppressNextQueryStackDevtools } from '../devtools';\nimport {\n ContentfulGqlLikePaginated,\n DynLikePaginated,\n GgLikePaginated,\n NormalizedPagination,\n Paginated,\n} from '@ethlete/types';\nimport { AnyNewQuery, 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 queryStackTotalQueriesAndExpectedQueriesMismatch,\n} from './query-errors';\nimport { QueryFeature } from './query-features';\nimport { shouldRetryRequest } from './query-retry-utils';\nimport { createQueryStack, transformArrayResponse } from './query-stack';\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 /**\n * If true, no queries will be executed while the paged query is loading.\n * This is useful if you need the current response to be used in the next query.\n */\n blockExecutionDuringLoading?: boolean;\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<AnyNewQuery, NormalizedPagination<unknown>>;\n\nexport type PagedQueryStack<TQuery extends AnyNewQuery, TNormPagination extends NormalizedPagination<unknown>> = {\n /**\n * The pagination of the last executed query in the paged query.\n */\n maxPagination: Signal<TNormPagination | null>;\n\n /**\n * The pagination of the first executed query in the paged query.\n */\n minPagination: Signal<TNormPagination | null>;\n\n /**\n * Whether the last page of the paged query is loaded or not.\n */\n isLastPageLoaded: Signal<boolean>;\n\n /**\n * Whether the first page of the paged query is loaded or not.\n */\n isFirstPageLoaded: Signal<boolean>;\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: () => TQuery | null;\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: () => TQuery | null;\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 resetTrigger = signal(0);\n\n const pageDirection = signal<PagedQueryStackDirection>('next');\n\n suppressNextQueryStackDevtools();\n const stack = createQueryStack({\n args: () => null,\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 resetTrigger();\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 stack.subtle.runWithArgs(args);\n });\n });\n\n const maxPagination = 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 minPagination = computed(() => {\n const res = stack.firstQuery()?.response();\n const all = stack.response();\n\n if (!res) return null;\n\n return responseNormalizer(res, all);\n });\n\n const isFirstPageLoaded = computed(() => {\n const min = minPagination();\n\n return min ? loadedMinPage() === min.currentPage : false;\n });\n\n const isLastPageLoaded = computed(() => {\n const max = maxPagination();\n\n return max ? loadedMaxPage() === max.totalPages : false;\n });\n\n const fetchPreviousPage = () => {\n const page = loadedMinPage() - 1;\n const allResponses = stack.response();\n\n if (!canFetchNewPage(page)) {\n return null;\n }\n\n if (page < 1) {\n if (isDevMode()) {\n throw pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage();\n }\n\n return null;\n }\n\n currentPageArgs.set(options.args(page, allResponses));\n loadedMinPage.set(page);\n pageDirection.set('previous');\n\n return stack.subtle.runWithArgs(currentPageArgs());\n };\n\n const fetchNextPage = () => {\n const page = loadedMaxPage() + 1;\n const currentPagination = maxPagination();\n const allResponses = stack.response();\n\n if (!canFetchNewPage(page)) {\n return null;\n }\n\n if (!currentPagination) {\n if (isDevMode()) {\n throw pagedQueryStackNextPageCalledWithoutPreviousPage();\n }\n\n return null;\n }\n\n if (page > currentPagination.totalPages) {\n if (isDevMode()) {\n throw pagedQueryStackPageBiggerThanTotalPages(page, currentPagination.totalPages);\n }\n\n return null;\n }\n\n currentPageArgs.set(options.args(page, allResponses));\n loadedMaxPage.set(page);\n pageDirection.set('next');\n\n return stack.subtle.runWithArgs(currentPageArgs());\n };\n\n const canFetchNewPage = (pageToLoad: number) => {\n const currentMaxPagination = maxPagination();\n const currentMinPagination = minPagination();\n\n if (!currentMaxPagination || !currentMinPagination) {\n return true;\n }\n\n const isOneMinusMinPagination = pageToLoad === currentMinPagination.currentPage - 1;\n const isOnePlusMaxPagination = pageToLoad === currentMaxPagination.currentPage + 1;\n\n if (!options.blockExecutionDuringLoading) {\n const totalQueries = stack.queries().length;\n const expectedQueries = Math.abs(loadedMaxPage() - loadedMinPage()) + 1;\n\n if (totalQueries !== expectedQueries) {\n if (isDevMode()) {\n throw queryStackTotalQueriesAndExpectedQueriesMismatch(totalQueries, expectedQueries);\n }\n }\n\n return true;\n }\n\n if (stack.anyLoading()) {\n return false;\n }\n\n return isOneMinusMinPagination || isOnePlusMaxPagination;\n };\n\n const reset = (resetOptions?: PagedQueryStackResetOptions) => {\n const page = resetOptions?.initialPage ?? initialPage();\n\n initialPage.set(page);\n pageDirection.set('next');\n resetTrigger.update((v) => v + 1);\n };\n\n const canFetchPreviousPage = computed(() => {\n const currentMinPagination = minPagination();\n\n if (!currentMinPagination) return false;\n\n return loadedMinPage() > 1;\n });\n const canFetchNextPage = computed(() => {\n const currentMaxPagination = maxPagination();\n\n return currentMaxPagination ? loadedMaxPage() < currentMaxPagination.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 maxPagination,\n minPagination,\n fetchPreviousPage,\n fetchNextPage,\n canFetchPreviousPage,\n canFetchNextPage,\n items,\n direction: pageDirection.asReadonly(),\n loading: stack.anyLoading,\n error: stack.anyError,\n lastQuery: stack.lastQuery,\n isFirstLoad,\n queries: stack.queries,\n isLastPageLoaded,\n isFirstPageLoaded,\n reset,\n execute,\n };\n\n if (isQueryDevtoolsEnabled()) {\n const unregister = registerQueryDevtoolsEntry({\n kind: 'paged-query-stack',\n handle: pagedQuery,\n meta: {\n featureTypes: features?.map((f) => f.type),\n },\n });\n\n inject(DestroyRef).onDestroy(unregister);\n }\n\n return pagedQuery;\n};\n","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","import {\n CreateComputedOptions,\n Injector,\n Signal,\n assertInInjectionContext,\n computed,\n effect,\n inject,\n linkedSignal,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport { ToObservableOptions, ToSignalOptions, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { computedTillTruthy, createDestroy } from '@ethlete/core';\nimport { Observable, Subscribable, of, pairwise, startWith, switchMap, takeUntil, tap } from 'rxjs';\nimport { AnyLegacyQuery } from '../interop';\nimport {\n AnyQueryCollection,\n AnyV2Query,\n QueryOf,\n QueryStateType,\n V2QueryState,\n extractQuery,\n filterQueryStates,\n isQuery,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n} from '../query';\nimport { QueryDataOf } from '../query-creator';\n\nexport type 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 type 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<AnyV2Query | AnyV2Query[] | AnyLegacyQuery | AnyLegacyQuery[] | null>,\n valueFn: () => AnyV2Query | AnyV2Query[] | AnyLegacyQuery | AnyLegacyQuery[] | 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: AnyV2Query | AnyLegacyQuery | 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 (q as unknown as AnyLegacyQuery)?.destroy?.();\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: AnyV2Query | AnyLegacyQuery | null | undefined) => {\n q?._removeDependent(componentId);\n\n if (!q?._hasDependents() && ((q?.canBeCached && abortOnDestroy === undefined) || abortOnDestroy)) {\n q?.abort();\n (q as unknown as AnyLegacyQuery)?.destroy?.();\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 AnyV2Query | AnyLegacyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n): Signal<T | undefined>;\nexport function toQuerySignal<T extends AnyV2Query | AnyLegacyQuery | 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 AnyV2Query | AnyLegacyQuery | 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 AnyV2Query | AnyLegacyQuery | 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 AnyV2Query | AnyLegacyQuery | 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 AnyV2Query | AnyLegacyQuery | 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 effectComputed<T extends AnyV2Query | AnyLegacyQuery | AnyV2Query[] | AnyLegacyQuery[] | null>(\n computation: () => T,\n injector: Injector,\n) {\n let initialData = null;\n\n try {\n initialData = runInInjectionContext(injector, () => computation());\n } catch {\n // Ignore errors in the initial computation\n // Angular might throw an error if required inputs are read but not available yet\n }\n\n const lastResult = signal<T>(initialData as T);\n\n effect(() => {\n const data = runInInjectionContext(injector, () => computation());\n\n untracked(() => {\n if (data === lastResult()) return;\n\n lastResult.set(data);\n });\n });\n\n return lastResult.asReadonly();\n}\n\nexport function queryComputed<T extends AnyV2Query | AnyLegacyQuery | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T> {\n const injector = inject(Injector);\n\n const c = effectComputed(computation, injector);\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 AnyV2Query | AnyLegacyQuery | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T | null> {\n const injector = inject(Injector);\n\n const c = computedTillTruthy(effectComputed(computation, injector));\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\nexport function queryArrayComputed<T extends AnyV2Query[] | AnyLegacyQuery[] | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T> {\n const injector = inject(Injector);\n\n const c = effectComputed(computation, injector);\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\nexport function toQuerySubject<T extends AnyV2Query | AnyLegacyQuery | 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<AnyV2Query | AnyLegacyQuery | 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<V2QueryState<QueryDataOf<QueryOf<ReturnType<T>>>> | null>;\n\n const rwSignal = linkedSignal<V2QueryState<QueryDataOf<QueryOf<ReturnType<T>>>> | null>(roSignal);\n\n return rwSignal;\n}\n\nexport type QueryStateSignal<T extends Signal<AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>> =\n Signal<QueryDataOf<QueryOf<ReturnType<T>>> | null> & { reset: () => void };\n\nexport function queryStateResponseSignal<T extends Signal<AnyV2Query | AnyLegacyQuery | 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<AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>>(\n source: T,\n) {\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<AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>>(\n source: T,\n) {\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 { V2Query, computeQueryQueryParams } from '../query';\nimport { V2QueryClient, v2BuildQueryCacheKey, v2ShouldCacheQuery } from '../query-client';\nimport { QueryStore } from '../query-store';\nimport {\n AnyRoute,\n BaseArguments,\n GqlQueryConfig,\n RestQueryConfig,\n V2RouteType,\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 V2QueryCreator<\n Arguments extends BaseArguments | undefined,\n Response,\n Route extends V2RouteType<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: V2QueryClient,\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 ?? '') + v2BuildQueryCacheKey(route as string, args);\n\n if (v2ShouldCacheQuery(this._queryConfig.method) && !args?.config?.skipQueryStore) {\n const existingQuery = this._store.get<V2Query<Response, Arguments, Route, Store, Data, Id>>(cacheKey);\n\n if (existingQuery) {\n return existingQuery;\n }\n }\n\n const query = new V2Query<Response, Arguments, Route, Store, Data, Id>(\n this._client,\n this._queryConfig,\n route,\n args ?? ({} as Arguments),\n cacheKey,\n );\n\n if (v2ShouldCacheQuery(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 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 { AnyV2Query } from '../query';\n\nexport class QueryStore {\n /**\n * @internal\n */\n readonly _store = new Map<string, AnyV2Query>();\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<AnyV2Query>();\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: AnyV2Query) {\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 AnyV2Query>(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: AnyV2Query, 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: AnyV2Query) {\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: AnyV2Query | null, operation: string) {\n if (!this._config?.enableChangeLogging) return;\n\n const stateAsJson: Record<string, AnyV2Query> = {};\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 V2RouteType,\n} from '../query';\nimport { V2QueryCreator } from '../query-creator';\nimport { QueryStore } from '../query-store';\nimport { RequestHeaders, RequestHeadersMethodMap } from '../request';\nimport { V2QueryClientConfig } from './query-client.types';\n\nexport class V2QueryClient {\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: V2QueryClientConfig) {\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 V2RouteType<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 V2RouteType<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 V2RouteType<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 V2RouteType<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 V2RouteType<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 V2RouteType<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 V2RouteType<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 V2RouteType<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 V2QueryCreator<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 v2ShouldCacheQuery = (method: Method) => {\n return method === 'GET' || method === 'OPTIONS' || method === 'HEAD' || method === 'GQL_QUERY';\n};\n\nexport const v2BuildQueryCacheKey = (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","import {\n AnyCreateQueryClientResult,\n createBaseQueryCreator,\n CreateQueryCreatorOptions,\n gqlDataPropertyMissingInResponse,\n QueryCreator,\n RouteType,\n} from '../http';\nimport { createGqlQuery, GqlQueryArgs } from './gql-query';\n\nexport type CreateGqlQueryCreatorOptions<TArgs extends GqlQueryArgs> = Omit<\n CreateQueryCreatorOptions<TArgs>,\n 'route' | 'transformResponse'\n> & {\n route?: RouteType<TArgs>;\n\n /**\n * Optional custom transform function for GQL responses.\n * If not provided, the default { data: ... } unwrapping will be used.\n */\n transformResponse?: CreateQueryCreatorOptions<TArgs>['transformResponse'];\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyCreateGqlQueryCreatorOptions = CreateGqlQueryCreatorOptions<any>;\n\nexport type GqlQueryMethod = 'QUERY' | 'MUTATE';\nexport type GqlQueryTransport = 'GET' | 'POST';\n\nexport type InternalCreateGqlQueryCreatorOptions = {\n method: GqlQueryMethod;\n transport: GqlQueryTransport;\n client: AnyCreateQueryClientResult;\n query: string;\n};\n\nexport const createGqlQueryCreator = <TArgs extends GqlQueryArgs>(\n options: CreateGqlQueryCreatorOptions<TArgs> | undefined,\n internals: InternalCreateGqlQueryCreatorOptions,\n): QueryCreator<TArgs> =>\n createBaseQueryCreator({\n options: {\n ...options,\n // Use custom transformResponse if provided, otherwise use default GQL unwrapping\n transformResponse:\n options?.transformResponse ??\n ((rawResponse: unknown) => {\n if (rawResponse && typeof rawResponse === 'object' && 'data' in rawResponse) {\n return (rawResponse as { data: unknown }).data;\n }\n\n throw gqlDataPropertyMissingInResponse();\n }),\n } as CreateQueryCreatorOptions<TArgs>,\n internals,\n queryFactory: createGqlQuery,\n });\n","import { HttpHeaders } from '@angular/common/http';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, of, Subscription, switchMap, take, tap } from 'rxjs';\nimport { AnyBearerAuthProvider } from '../auth';\nimport { AnyQuerySnapshot, QueryArgs, RequestArgs } from './query';\nimport { QueryDependencies } from './query-dependencies';\nimport { invalidStateInsideSecureExecuteFactory, tokensNotAvailableInsideAuthAndExec } from './query-errors';\nimport { InternalQueryExecute, QueryExecuteArgs } from './query-execute';\nimport { circularQueryDependencyChecker, resetExecuteState, setupQueryExecuteState } from './query-execute-utils';\nimport { QueryState } from './query-state';\n\nconst AUTH_HEADER = 'Authorization';\n\nexport type SecureExecuteFactoryOptions<TArgs extends QueryArgs> = {\n authProvider: AnyBearerAuthProvider;\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n transformAuthAndExec: (\n executeArgs: QueryExecuteArgs<TArgs> | undefined,\n tokens: { accessToken: string },\n headers: HttpHeaders,\n executeState: ReturnType<typeof setupQueryExecuteState>,\n ) => void;\n};\n\nexport const createSecureExecuteFactory = <TArgs extends QueryArgs>(\n options: SecureExecuteFactoryOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n const circularChecker = circularQueryDependencyChecker();\n\n let authQuerySubscription = Subscription.EMPTY;\n let tokenRefreshSubscription = Subscription.EMPTY;\n let tokenWaitSubscription = Subscription.EMPTY;\n\n const reset = () => {\n authQuerySubscription.unsubscribe();\n authQuerySubscription = Subscription.EMPTY;\n tokenRefreshSubscription.unsubscribe();\n tokenRefreshSubscription = Subscription.EMPTY;\n tokenWaitSubscription.unsubscribe();\n tokenWaitSubscription = Subscription.EMPTY;\n resetExecuteState({\n executeState,\n executeOptions: { deps: options.deps, state: options.state },\n });\n };\n\n // A logout tears down the secure entries in the repository, but the query object holding one keeps\n // its own `response`/`error` signals — so without this a component still mounted after logout goes\n // on rendering the previous user's data until something calls `reset()` by hand.\n options.deps.client.repository.events$\n .pipe(\n filter((event) => event.type === 'unbind-all-secure'),\n takeUntilDestroyed(options.deps.destroyRef),\n )\n .subscribe(() => reset());\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.rawResponse.set(null);\n state.latestHttpEvent.set(null);\n state.args.set(null);\n };\n\n const authAndExec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n const args = executeArgs?.args;\n\n const headerProvider = () => {\n const accessToken = options.authProvider.accessToken();\n const baseHeaders = typeof args?.headers === 'function' ? args.headers() : args?.headers || new HttpHeaders();\n\n if (!accessToken) {\n throw tokensNotAvailableInsideAuthAndExec();\n }\n\n if (!baseHeaders.has(AUTH_HEADER)) {\n return baseHeaders.set(AUTH_HEADER, `Bearer ${accessToken}`);\n }\n\n return baseHeaders;\n };\n\n const accessToken = options.authProvider.accessToken();\n if (!accessToken) {\n throw tokensNotAvailableInsideAuthAndExec();\n }\n\n const tokens = { accessToken, refreshToken: options.authProvider.refreshToken() ?? '' };\n const headers = headerProvider();\n\n options.transformAuthAndExec(\n {\n ...executeArgs,\n args: {\n ...(args ?? {}),\n headers: headerProvider, // Pass header provider instead of static headers\n } as RequestArgs<TArgs>,\n },\n tokens,\n headers,\n executeState,\n );\n };\n\n // The auth query completing and the access token being populated happen on two\n // different reactive timelines: the token is set by a separate token-extraction\n // effect (see `setupBearerQueryRegistry`), and for cross-client / secure auth\n // queries the completion is delivered through several nested `toObservable` hops.\n // Calling `authAndExec` purely because the auth query is \"done\" therefore races\n // the token and can run while it is still null. Gate on the token signal instead:\n // execute immediately if it is already available, otherwise wait for it.\n const authAndExecWhenTokenReady = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n if (options.authProvider.accessToken()) {\n authAndExec(executeArgs);\n return;\n }\n\n tokenWaitSubscription.unsubscribe();\n tokenWaitSubscription = toObservable(options.authProvider.accessToken, {\n injector: options.deps.injector,\n })\n .pipe(\n filter(Boolean),\n take(1),\n tap(() => authAndExec(executeArgs)),\n )\n .subscribe();\n };\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n circularChecker.check();\n\n const execArgsWithDefaults: QueryExecuteArgs<TArgs> = {\n args: executeArgs?.args ?? options.state.args(),\n options: executeArgs?.options,\n };\n\n authQuerySubscription.unsubscribe();\n authQuerySubscription = Subscription.EMPTY;\n tokenRefreshSubscription.unsubscribe();\n tokenRefreshSubscription = Subscription.EMPTY;\n tokenWaitSubscription.unsubscribe();\n tokenWaitSubscription = Subscription.EMPTY;\n\n tokenRefreshSubscription = options.authProvider.afterTokenRefresh$\n .pipe(\n filter(() => {\n const currentError = options.state.error();\n return currentError?.code === 401;\n }),\n take(1),\n tap(() => exec(execArgsWithDefaults)),\n )\n .subscribe();\n\n const latestQuery = options.authProvider.latestExecutedQuery();\n const authQuery = latestQuery?.snapshot;\n\n // This might happen if a secure query gets executed while the auth query has just been created.\n // This is due to the fact that the query state is being synced with the state inside the http request using effect.\n const isAuthQueryFreshlyExecuted = authQuery?.lastTimeExecutedAt() === null;\n\n if (!authQuery || authQuery.loading() || isAuthQueryFreshlyExecuted) {\n options.state.loading.set({ executeTime: Date.now(), progress: null });\n\n authQuerySubscription = toObservable(options.authProvider.latestExecutedQuery, {\n injector: options.deps.injector,\n })\n .pipe(\n switchMap((latestQuery) => {\n if (!latestQuery) return of(null);\n const query = latestQuery.snapshot;\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 authAndExecWhenTokenReady(execArgsWithDefaults);\n }\n }),\n );\n }),\n )\n .subscribe();\n } else if (authQuery.response()) {\n authAndExecWhenTokenReady(execArgsWithDefaults);\n } else if (authQuery.error()) {\n error(authQuery);\n } else {\n throw invalidStateInsideSecureExecuteFactory();\n }\n };\n\n exec['reset'] = reset;\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","import {\n CreateQueryExecuteOptions,\n InternalQueryExecute,\n QueryConfig,\n QueryDependencies,\n queryExecute,\n QueryState,\n RequestArgs,\n RouteType,\n} from '../http';\nimport { createSecureExecuteFactory } from '../http/secure-query-execute-factory';\nimport { GqlQueryArgs } from './gql-query';\nimport { AnyCreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { transformGql } from './gql-transformer';\nimport { InternalSecureCreateGqlQueryCreatorOptions } from './secure-gql-query-creator';\n\nexport type CreateSecureGqlQueryExecuteOptions<TArgs extends GqlQueryArgs> = {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: AnyCreateGqlQueryCreatorOptions;\n creatorInternals: InternalSecureCreateGqlQueryCreatorOptions;\n queryConfig: QueryConfig;\n};\n\nexport const createSecureGqlExecuteFn = <TArgs extends GqlQueryArgs>(\n executeOptions: CreateSecureGqlQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const [, injectAuthProvider] = executeOptions.creatorInternals.authProvider;\n const authProvider = injectAuthProvider();\n\n return createSecureExecuteFactory({\n authProvider,\n deps: executeOptions.deps,\n state: executeOptions.state,\n transformAuthAndExec: (executeArgs, _tokens, headers, executeState) => {\n const { args, options: runOptions } = executeArgs ?? {};\n\n const query = transformGql(executeOptions.creatorInternals.query);\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>)), headers };\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 ...executeOptions,\n creatorInternals: {\n client: executeOptions.creatorInternals.client,\n method: executeOptions.creatorInternals.method === 'QUERY' ? 'GET' : 'POST',\n route: (executeOptions.creator?.route ?? '') as RouteType<TArgs>,\n },\n };\n\n queryExecute({\n executeOptions: normalizedOpts,\n executeState,\n args: computedArgs,\n options: runOptions,\n isSecure: true,\n });\n },\n });\n};\n","import { createBaseQuery, CreateQueryOptions } from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport { InternalSecureCreateGqlQueryCreatorOptions } from './secure-gql-query-creator';\nimport { createSecureGqlExecuteFn } from './secure-gql-query-execute';\n\nexport type CreateSecureGqlQueryOptions<TArgs extends GqlQueryArgs> = Omit<\n CreateQueryOptions<TArgs>,\n 'creatorInternals'\n> & {\n creatorInternals: InternalSecureCreateGqlQueryCreatorOptions;\n};\n\nexport const createSecureGqlQuery = <TArgs extends GqlQueryArgs>(options: CreateSecureGqlQueryOptions<TArgs>) =>\n createBaseQuery({\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n features: options.features,\n queryConfig: options.queryConfig,\n executeFactory: createSecureGqlExecuteFn,\n });\n","import { AnyCreateBearerAuthProviderResult } from '../auth';\nimport { AnyCreateQueryClientResult, createBaseQueryCreator, QueryCreator } from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport { CreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { createSecureGqlQuery } from './secure-gql-query';\n\nexport type InternalSecureCreateGqlQueryCreatorOptions = {\n method: 'QUERY' | 'MUTATE';\n transport: 'GET' | 'POST';\n client: AnyCreateQueryClientResult;\n query: string;\n authProvider: AnyCreateBearerAuthProviderResult;\n};\n\nexport const createSecureGqlQueryCreator = <TArgs extends GqlQueryArgs>(\n options: CreateGqlQueryCreatorOptions<TArgs> | undefined,\n internals: InternalSecureCreateGqlQueryCreatorOptions,\n): QueryCreator<TArgs> =>\n createBaseQueryCreator({\n options: {\n ...options,\n // Use custom transformResponse if provided, otherwise use default GQL unwrapping\n transformResponse:\n options?.transformResponse ??\n ((rawResponse: unknown) => {\n if (rawResponse && typeof rawResponse === 'object' && 'data' in rawResponse) {\n return (rawResponse as { data: unknown }).data;\n }\n return rawResponse;\n }),\n },\n internals,\n queryFactory: createSecureGqlQuery,\n });\n","import { AnyCreateBearerAuthProviderResult } from '../auth';\nimport { AnyCreateQueryClientResult } from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport {\n createGqlQueryCreator,\n CreateGqlQueryCreatorOptions,\n GqlQueryMethod,\n GqlQueryTransport,\n} from './gql-query-creator';\nimport { GQL } from './gql-transformer';\nimport { createSecureGqlQueryCreator } from './secure-gql-query-creator';\n\nconst createGqlCreatorTemplate = (method: GqlQueryMethod, transport: GqlQueryTransport) => {\n return (client: AnyCreateQueryClientResult) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createGqlQueryCreator<TArgs>(creatorOptions, {\n method,\n client,\n transport,\n query,\n });\n };\n};\n\nconst createSecureGqlCreatorTemplate = (method: GqlQueryMethod, transport: GqlQueryTransport) => {\n return (client: AnyCreateQueryClientResult, authProvider: AnyCreateBearerAuthProviderResult) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createSecureGqlQueryCreator<TArgs>(creatorOptions, {\n method,\n client,\n transport,\n query,\n authProvider,\n });\n };\n};\n\n/** A query creator that creates a GQL query where the payload is sent via GET (query params) */\nexport const createGqlQueryViaGet = createGqlCreatorTemplate('QUERY', 'GET');\n\n/** A query creator that creates a secure GQL query where the payload is sent via GET (query params) */\nexport const createSecureGqlQueryViaGet = createSecureGqlCreatorTemplate('QUERY', 'GET');\n\n/** A query creator that creates a GQL query where the payload is sent via POST (body) */\nexport const createGqlQueryViaPost = createGqlCreatorTemplate('QUERY', 'POST');\n\n/** A query creator that creates a secure GQL query where the payload is sent via POST (body) */\nexport const createSecureGqlQueryViaPost = createSecureGqlCreatorTemplate('QUERY', 'POST');\n\n/** A query creator that creates a GQL mutation where the payload is sent via GET (query params) */\nexport const createGqlMutationViaGet = createGqlCreatorTemplate('MUTATE', 'GET');\n\n/** A query creator that creates a secure GQL mutation where the payload is sent via GET (query params) */\nexport const createSecureGqlMutationViaGet = createSecureGqlCreatorTemplate('MUTATE', 'GET');\n\n/** A query creator that creates a GQL mutation where the payload is sent via POST (body) */\nexport const createGqlMutationViaPost = createGqlCreatorTemplate('MUTATE', 'POST');\n\n/** A query creator that creates a secure GQL mutation where the payload is sent via POST (body) */\nexport const createSecureGqlMutationViaPost = createSecureGqlCreatorTemplate('MUTATE', 'POST');\n","import { EffectRef, effect, untracked } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport {\n filter,\n interval,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n skip,\n Subscription,\n switchMap,\n takeUntil,\n takeWhile,\n} from 'rxjs';\nimport { AnyNewQuery, Query, QueryArgs, QueryArgsOf, QueryExecutionState, RequestArgs, ResponseType } from '../../http';\nimport { EntityStore } from '../entity';\nimport {\n BaseArguments,\n ExecuteQueryOptions,\n Failure,\n filterFailure,\n filterSuccess,\n isQueryStateLoading,\n isQueryStateSuccess,\n Loading,\n PollConfig,\n Prepared,\n QueryAutoRefreshConfig,\n QueryEntityConfig,\n QueryStateMeta,\n QueryStateType,\n Success,\n takeUntilResponse,\n V2QueryState,\n V2RouteType,\n} from '../query';\nimport { RequestError } from '../request';\n\nexport type CreateLegacyQueryOptions<TArgs extends QueryArgs> = {\n query: Query<TArgs>;\n};\n\nexport const transformExecStateToQueryState = <TArgs extends QueryArgs>(\n execState: QueryExecutionState<TArgs> | null,\n): V2QueryState<ResponseType<TArgs>> => {\n const meta: QueryStateMeta = { id: -1, triggeredVia: 'program' };\n\n switch (execState?.type) {\n case 'loading': {\n const loading: Loading = {\n meta,\n type: QueryStateType.Loading,\n ...(execState.loading.progress\n ? {\n progress: {\n current: execState.loading.progress.loaded,\n percentage: execState.loading.progress.percentage,\n total: execState.loading.progress.total,\n },\n }\n : {}),\n };\n\n return loading;\n }\n case 'success': {\n const success: Success<ResponseType<TArgs>> = {\n headers: {},\n meta,\n response: execState.response,\n type: QueryStateType.Success,\n };\n\n return success;\n }\n case 'failure': {\n const error: Failure = {\n error: {\n detail: execState.error.raw.error,\n httpErrorResponse: execState.error.raw,\n status: execState.error.raw.status,\n statusText: execState.error.raw.statusText,\n url: execState.error.raw.url || '',\n },\n meta,\n type: QueryStateType.Failure,\n };\n\n return error;\n }\n default: {\n const prepared: Prepared = {\n meta,\n type: QueryStateType.Prepared,\n };\n\n return prepared;\n }\n }\n};\n\nexport const isLegacyQuery = <T extends AnyLegacyQuery>(query: unknown): query is T => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n\n if (!('newQuery' in query)) {\n return false;\n }\n\n return true;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyLegacyQuery = LegacyQuery<any, any, any, any, any, any, any>;\n\nexport class LegacyQuery<\n Response,\n Arguments extends BaseArguments | undefined,\n // Positional public-API generic slot — consumers infer it via `LegacyQuery<…, infer Route, …>`,\n // so it must stay even though the class body never references it.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Route extends V2RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n TNewQuery extends AnyNewQuery,\n> {\n /**\n * @internal\n */\n _pollingSubscription: Subscription | null = null;\n /**\n * @internal\n */\n _currentPollConfig: PollConfig | null = null;\n\n /**\n * `null` for an inert query — there is no live injector to own an effect.\n *\n * @internal\n */\n storeSyncEffect: EffectRef | null = null;\n\n /**\n * @internal\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 _isDestroyed = false;\n\n state$: Observable<V2QueryState<Data>>;\n\n get rawState() {\n return transformExecStateToQueryState(this.newQuery.executionState());\n }\n\n get isExpired() {\n return this.newQuery.subtle.request()?.isStale();\n }\n\n get isInUse() {\n return true;\n }\n\n /**\n * @internal\n */\n get _subscriberCount() {\n return 0;\n }\n\n get isPolling() {\n return !!this._pollingSubscription;\n }\n\n get autoRefreshOnConfig() {\n const transformed: Readonly<QueryAutoRefreshConfig> = {\n queryClientDefaultHeadersChange: false,\n windowFocus: false,\n };\n\n return transformed;\n }\n\n /**\n * @internal\n */\n get _enableSmartPolling() {\n return false;\n }\n\n get store() {\n return null;\n }\n\n get canBeCached() {\n return false;\n }\n\n get _isInMockMode() {\n return false;\n }\n\n constructor(\n public newQuery: TNewQuery,\n public _arguments: RequestArgs<QueryArgsOf<TNewQuery>>,\n public entity?: QueryEntityConfig<Store, Data, Response, Arguments, Id>,\n\n /**\n * Wraps an inert query — see `createInertQuery`. Skips everything that needs a live injector,\n * so the wrapper is safe to build during teardown.\n *\n * @internal\n */\n private _isInert = false,\n ) {\n if (this._isInert) {\n this.state$ = of(transformExecStateToQueryState(null)) as Observable<V2QueryState<Data>>;\n this._isDestroyed = true;\n return;\n }\n\n this.state$ = toObservable(this.newQuery.executionState, { injector: this.newQuery.subtle.injector }).pipe(\n map((execState) => transformExecStateToQueryState(execState)),\n switchMap((s) => this._transformState(s)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n this.storeSyncEffect = effect(() => {\n const res = this.newQuery.response();\n\n untracked(() => {\n if (this.entity?.set) {\n const id = this.entity.id({ args: this._arguments, response: res });\n\n this.entity.set({\n args: this._arguments,\n response: res,\n id,\n store: this.entity.store,\n });\n }\n });\n });\n\n // Tear down only what this wrapper owns. The underlying query is already being destroyed when this fires, so\n // destroying it again would call `R3Injector.destroy()` on an injector that is mid-teardown, which throws\n // NG0205 (\"Injector has already been destroyed\") from inside the view's cleanup phase.\n this.newQuery.subtle.destroyRef.onDestroy(() => this._teardown());\n }\n\n private _teardown() {\n if (this._isDestroyed) {\n return;\n }\n\n this._isDestroyed = true;\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._dependentsChanged$.complete();\n this.storeSyncEffect?.destroy();\n }\n\n destroy() {\n if (this._isDestroyed) {\n return;\n }\n\n this._teardown();\n\n // Re-enters `_teardown` through the query's `destroyRef`, which the `_isDestroyed` guard absorbs.\n this.newQuery.subtle.destroy();\n }\n\n execute(options: ExecuteQueryOptions = {}) {\n untracked(() =>\n // v2 had a single `skipCache` for every method, so this cannot tell whether the underlying request is\n // cacheable. The creator is built with `silenceUncacheableAllowCacheError`, which makes `allowCache` inert\n // on a mutation instead of throwing ET301.\n this.newQuery.execute({ args: this._arguments, options: { allowCache: options.skipCache !== true } }),\n );\n\n return this;\n }\n\n abort() {\n if (!isQueryStateLoading(this.rawState)) {\n return this;\n }\n\n this.newQuery.reset();\n\n return this;\n }\n\n poll(config: PollConfig) {\n // An inert or already destroyed query has nothing to poll, and the interval would outlive it.\n if (this._pollingSubscription || this._isDestroyed) {\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.rawState)),\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 /**\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 /**\n * @internal\n */\n _transformState(s: V2QueryState<Response>): Observable<V2QueryState<Data>> {\n if (!isQueryStateSuccess(s) || !this.entity?.get) {\n return of(s) as Observable<V2QueryState<Data>>;\n }\n\n const id = this.entity.id({ args: this._arguments, response: s.response });\n\n return this.entity\n .get({ args: this._arguments, id, response: s.response, store: this.entity.store })\n .pipe(map((v) => ({ ...s, response: v })));\n }\n}\n","import { DestroyRef, Injector, Signal, signal } from '@angular/core';\nimport { of } from 'rxjs';\nimport { ObservableSignal, Query, QueryArgs, QuerySnapshot, RequestArgs, ResponseType } from '../../http';\n\n/**\n * A query that never executes and never leaves its initial state.\n *\n * `LegacyQueryCreator.prepare()` hands one back when the injector it was given is already destroyed\n * — the shape v2 call sites still fire into during teardown (a debounced search resolving after the\n * user navigated away, an RxJS callback on a stream that has not been unsubscribed yet). v2 had no\n * injector at all there, so the same code used to be harmless; building a real query would now\n * throw NG0205 from inside the view's cleanup phase, with no hint about which query caused it.\n *\n * Everything reads as \"prepared but never executed\": `execute()` and friends are no-ops, signals\n * stay `null`, observables complete immediately. Nothing here touches Angular's DI, which is the\n * point — there is no live injector left to bind to.\n */\nexport const createInertQuery = <TArgs extends QueryArgs>(): Query<TArgs> => {\n const inertSignal = <T>(value: T): ObservableSignal<T> =>\n Object.assign(signal(value) as Signal<T>, { asObservable: () => of(value) });\n\n const noop = () => {\n /* the query is inert — there is nothing to execute, reset or destroy */\n };\n\n const base = {\n args: inertSignal<RequestArgs<TArgs> | null>(null),\n response: inertSignal<ResponseType<TArgs> | null>(null),\n latestHttpEvent: inertSignal(null),\n loading: inertSignal(null),\n error: inertSignal(null),\n lastTimeExecutedAt: inertSignal<number | null>(null),\n triggeredBy: inertSignal<string | null>(null),\n id: inertSignal<string | null>(null),\n executionState: inertSignal(null),\n } as unknown as QuerySnapshot<TArgs>;\n\n const createSnapshot = (): QuerySnapshot<TArgs> => ({ ...base, isAlive: inertSignal(false) });\n\n // A DestroyRef that is already destroyed: callbacks registered on it are dropped rather than\n // stored, so nothing keeps this object (or its registrant) alive.\n const destroyRef = {\n destroyed: true,\n onDestroy: () => noop,\n } as unknown as DestroyRef;\n\n return {\n ...base,\n execute: noop,\n createSnapshot,\n reset: noop,\n asReadonly: () => ({ ...base, createSnapshot }),\n subtle: {\n destroy: noop,\n setResponse: noop,\n setLoading: noop,\n setError: noop,\n request: inertSignal(null),\n destroyRef,\n injector: Injector.NULL,\n },\n } as unknown as Query<TArgs>;\n};\n","import { HttpHeaders } from '@angular/common/http';\nimport {\n DestroyRef,\n effect,\n inject,\n Injector,\n isDevMode,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n AnyNewQuery,\n legacyPrepareWithoutInjectionContext,\n Query,\n QueryArgs,\n QueryCreator,\n RequestArgs,\n ResponseType,\n} from '../../http';\nimport { EntityStore } from '../entity';\nimport { BaseArguments, QueryEntityConfig, V2QueryConfig, V2RouteType, WithHeaders, WithInjector } from '../query';\nimport { addQueryContainerHandling, QueryContainerConfig } from '../utils';\nimport { createInertQuery } from './inert-query';\nimport { LegacyQuery } from './legacy-query';\n\n/**\n * Whether an injector can still be used. A destroyed `R3Injector` throws on `get()` rather than\n * answering, so the throw itself is the answer; a node injector hands back a `DestroyRef` that\n * reports its own state.\n */\nconst isInjectorUsable = (injector: Injector) => {\n try {\n return injector.get(DestroyRef, null, { optional: true })?.destroyed !== true;\n } catch {\n return false;\n }\n};\n\nexport type LegacyArgumentsOfQueryArgs<T extends QueryArgs> = Omit<T, 'response' | 'headers'> & WithHeaders;\nexport type QueryArgsOfLegacyArguments<T extends BaseArguments | undefined, J> = Omit<T, 'mock' | 'headers'> & {\n headers?: HttpHeaders;\n response?: J;\n};\n\nexport type CreateLegacyQueryCreatorOptions<\n TArgs extends QueryArgs,\n Response,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> = {\n creator: QueryCreator<TArgs>;\n\n /**\n * Object containing the query's entity store information.\n */\n entity?: QueryEntityConfig<Store, Data, Response, LegacyArgumentsOfQueryArgs<TArgs>, Id>;\n\n /**\n * The name this creator is exported under, used to name it in error messages. Emitted by the\n * `migrate-to-query-v3` generator; worth passing by hand too, since without it a `prepare()`\n * called outside an injection context can only be located by bisection.\n */\n name?: string;\n};\n\nexport type WithLegacyConfig = {\n /**\n * Additional configuration for this query.\n */\n config?: V2QueryConfig & {\n /**\n * If set to true, the query will be destroyed when it either succeeds or fails.\n */\n destroyOnResponse?: boolean;\n };\n};\n\nexport type LegacyQueryPrepareFn<\n Arguments extends BaseArguments | undefined,\n Response,\n Route extends V2RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n TNewQuery extends AnyNewQuery,\n> = (\n args: Arguments & WithHeaders & WithLegacyConfig & WithInjector,\n) => LegacyQuery<Response, Arguments, Route, Store, Data, Id, TNewQuery>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyLegacyQueryCreator = LegacyQueryCreator<any, any, any, any, any>;\n\nexport class LegacyQueryCreator<\n TArgs extends QueryArgs,\n Response extends ResponseType<TArgs>,\n Store extends EntityStore<unknown>,\n Id,\n Data = Response,\n> {\n constructor(public options: CreateLegacyQueryCreatorOptions<TArgs, Response, Store, Data, Id>) {}\n\n prepare: LegacyQueryPrepareFn<\n LegacyArgumentsOfQueryArgs<TArgs>,\n Response,\n V2RouteType<LegacyArgumentsOfQueryArgs<TArgs>>,\n Store,\n Data,\n Id,\n Query<TArgs>\n > = (args: LegacyArgumentsOfQueryArgs<TArgs> & WithHeaders & WithLegacyConfig & WithInjector) => {\n // v2's `prepare()` needed no injection context, so plenty of call sites are plain callbacks.\n // Angular's raw NG0203 names neither the query nor the call site, which makes those a bisection\n // exercise — replace it with an error that does.\n const injector =\n args?.injector ??\n (() => {\n try {\n return inject(Injector);\n } catch {\n throw legacyPrepareWithoutInjectionContext(this.options.name);\n }\n })();\n\n let headers = new HttpHeaders();\n\n if (args?.headers) {\n Object.entries(args.headers).forEach(([key, value]) => {\n if (value) {\n headers = headers.set(key, value);\n }\n });\n }\n\n const queryArgs = {\n ...(args?.body ? { body: args.body } : {}),\n ...(args?.pathParams ? { pathParams: args.pathParams } : {}),\n ...(args?.queryParams ? { queryParams: args.queryParams } : {}),\n headers,\n } as RequestArgs<TArgs>;\n\n // A captured component injector routinely outlives its component here: a debounced search\n // resolving after navigation, an RxJS callback on a stream torn down a tick later. That is not\n // a programming error the way it would be in new code — v2 had no injector to destroy — so it\n // yields a query that does nothing instead of an NG0205 raised from the view's cleanup phase.\n if (!isInjectorUsable(injector)) {\n if (isDevMode()) {\n console.warn(\n `${this.options.name ? `\"${this.options.name}\"` : 'A legacy query'}.prepare() was called with a destroyed injector, so an inert query was returned. ` +\n `This usually means a callback outlived the component whose injector it captured — guard the call site with DestroyRef.onDestroy, or pass an injector that outlives it.`,\n );\n }\n\n return new LegacyQuery<\n Response,\n LegacyArgumentsOfQueryArgs<TArgs>,\n V2RouteType<LegacyArgumentsOfQueryArgs<TArgs>>,\n Store,\n Data,\n Id,\n Query<TArgs>\n >(createInertQuery<TArgs>(), queryArgs, this.options.entity, true);\n }\n\n return runInInjectionContext(injector, () => {\n return untracked(() => {\n const newQuery = this.options.creator({\n onlyManualExecution: true,\n injector,\n silenceMissingWithArgsFeatureError: true,\n // `LegacyQuery.execute()` forwards v2's `skipCache` as `allowCache` for every method, cacheable or not.\n silenceUncacheableAllowCacheError: true,\n });\n\n const legacyQuery = new LegacyQuery<\n Response,\n LegacyArgumentsOfQueryArgs<TArgs>,\n V2RouteType<LegacyArgumentsOfQueryArgs<TArgs>>,\n Store,\n Data,\n Id,\n Query<TArgs>\n >(newQuery, queryArgs, this.options.entity);\n\n if (args?.config?.destroyOnResponse) {\n const destroyEffect = effect(() => {\n if (newQuery.executionState()?.type === 'success' || newQuery.executionState()?.type === 'failure') {\n legacyQuery.destroy();\n destroyEffect.destroy();\n }\n });\n }\n\n return legacyQuery;\n });\n });\n };\n createSubject = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\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 createSignal = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\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 behaviorSubject = this.createSubject;\n}\n\n/**\n * Creates a legacy query creator.\n *\n * **NOTE**: This is a temporary solution to support legacy queries. It will be removed in the future.\n *\n * **DO NOT TURN NEW QUERY CREATORS INTO LEGACY ONES MANUALLY. THIS IS ONLY NEEDED FOR MIGRATION PURPOSES.**\n */\nexport const createLegacyQueryCreator = <\n TArgs extends QueryArgs,\n Response extends ResponseType<TArgs>,\n Store extends EntityStore<unknown>,\n Id,\n Data = Response,\n>(\n options: CreateLegacyQueryCreatorOptions<TArgs, Response, Store, Data, Id>,\n): LegacyQueryCreator<TArgs, Response, Store, Id, Data> => {\n return new LegacyQueryCreator<TArgs, Response, Store, Id, Data>(options);\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { assertInInjectionContext, isDevMode, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Paginated } from '@ethlete/types';\nimport { BehaviorSubject, Observable, filter, map, of, switchMap, takeWhile, tap } from 'rxjs';\nimport { transformGql } from '../../gql';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../../http';\nimport { QueryForm } from '../../query-form';\nimport { EntityStore } from '../entity';\nimport { AnyLegacyQuery, isLegacyQuery } from '../interop';\nimport { V2QueryClient } from '../query-client';\nimport {\n AnyV2QueryCreator,\n QueryDataOf,\n QueryResponseOf,\n QueryStoreIdOf,\n QueryStoreOf,\n V2QueryArgsOf,\n V2QueryCreator,\n} from '../query-creator';\nimport { Method, RequestHeaders, RequestHeadersMethodMap, transformMethod } from '../request';\nimport { QueryContainerConfig, addQueryContainerHandling } from '../utils';\nimport {\n AnyGqlQueryConfig,\n AnyQueryCollection,\n AnyQueryCollectionData,\n AnyQueryCreatorCollection,\n AnyRestQueryConfig,\n AnyV2Query,\n BaseArguments,\n Cancelled,\n Failure,\n GqlQueryConfig,\n Loading,\n Prepared,\n QueryCollectionOf,\n QueryStateResponseOf,\n QueryStateType,\n ResetPageOnErrorOperatorConfig,\n Success,\n V2QueryState,\n V2RouteType,\n} from './query.types';\n\ntype OmitNull<T> = T extends null ? never : T;\n\nexport function filterSuccess() {\n return function <T extends V2QueryState | 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 V2QueryState | 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 V2QueryState | 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 V2QueryState | 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 V2QueryState | 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 AnyV2Query | AnyLegacyQuery | null, Data extends QueryDataOf<T>>(source: Observable<T>) {\n return source.pipe(switchMap((value) => value?.state$ ?? of(null))) as Observable<V2QueryState<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<V2QueryState<Data> | null>;\n };\n}\n\nexport const resetPageOnError =\n <T extends AnyV2Query | AnyLegacyQuery | null | undefined, J extends QueryForm<any>>(\n config: ResetPageOnErrorOperatorConfig<J>,\n ) =>\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 416:\n queryForm.form.controls[pageControlKey]?.patchValue(1);\n break;\n\n // The page might be invalid (in dev mode, code is 500)\n case 500:\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: V2QueryState | null | undefined): state is Loading =>\n state?.type === QueryStateType.Loading;\n\nexport const isQueryStateSuccess = (state: V2QueryState | null | undefined): state is Success =>\n state?.type === QueryStateType.Success;\n\nexport const isQueryStateFailure = (state: V2QueryState | null | undefined): state is Failure =>\n state?.type === QueryStateType.Failure;\n\nexport const isQueryStateCancelled = (state: V2QueryState | null | undefined): state is Cancelled =>\n state?.type === QueryStateType.Cancelled;\n\nexport const isQueryStatePrepared = (state: V2QueryState | null | undefined): state is Prepared =>\n state?.type === QueryStateType.Prepared;\n\nexport const isAutoRefresh = (state: V2QueryState | 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 V2RouteType<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 AnyV2Query | AnyLegacyQuery>(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\nexport const createQueryCollection = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n) => new BehaviorSubject<R | null>(null);\n\nexport const createQueryCollectionSubject = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(createQueryCollectionSubject);\n\n const subject = new BehaviorSubject<R | null>(null);\n\n addQueryContainerHandling(\n subject.pipe(map((s) => s?.query ?? null)),\n () => subject.getValue()?.query ?? null,\n config,\n );\n\n return subject;\n};\n\nexport const createQueryCollectionSignal = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(createQueryCollectionSignal);\n\n const _signal = signal<R | null>(null);\n\n addQueryContainerHandling(\n toObservable(_signal).pipe(map((s) => s?.query ?? null)),\n () => _signal()?.query ?? null,\n config,\n );\n\n return _signal;\n};\n\nexport const extractQuery = <T extends AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>(v: T) =>\n (isQuery(v) ? v : isLegacyQuery(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 AnyV2QueryCreator,\n Arguments extends V2QueryArgsOf<QC>,\n Response extends QueryResponseOf<QC>,\n Store extends QueryStoreOf<QC>,\n Data extends QueryDataOf<QC>,\n Route extends V2RouteType<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 V2QueryCreator<OverrideArguments, OverrideResponse, Route, Store, Data, Id>;\n};\n\nexport const computeQueryMethod = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: V2QueryClient;\n}) => {\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: V2QueryClient;\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: V2QueryClient;\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: V2QueryClient;\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: V2QueryClient;\n args?: BaseArguments;\n}) => {\n if (\n isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia))\n ) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n\n let params = query(config.args?.variables);\n\n if (config.args?.queryParams) {\n params = { ...params, ...config.args?.queryParams };\n }\n\n return params;\n }\n\n return config.args?.queryParams;\n};\n\nexport const paginatedEntityValueUpdater =\n <\n T extends Paginated<unknown>,\n Args extends BaseArguments,\n Entity,\n J extends (T extends Paginated<infer X> ? X : never),\n >(\n findFn: (val: J, entity: Entity) => boolean,\n ) =>\n ({ response, rawResponse, entity }: { rawResponse: T; response: T; args: Args; entity: Entity }) => {\n const indexOfEntityRaw = rawResponse.items.findIndex((item) => findFn(item as J, entity));\n const indexOfEntity = response.items.findIndex((item) => findFn(item as J, entity));\n\n if (indexOfEntity === -1 || indexOfEntityRaw === -1) {\n return null;\n }\n\n const newRawResponse = {\n ...rawResponse,\n items: [\n ...rawResponse.items.slice(0, indexOfEntityRaw),\n entity,\n ...rawResponse.items.slice(indexOfEntityRaw + 1),\n ],\n };\n\n const newResponse = {\n ...response,\n items: [...response.items.slice(0, indexOfEntity), entity, ...response.items.slice(indexOfEntity + 1)],\n };\n\n return {\n response: newResponse,\n rawResponse: newRawResponse,\n };\n };\n","import { untracked } from '@angular/core';\nimport {\n BehaviorSubject,\n combineLatest,\n EMPTY,\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 { V2QueryClient, v2ShouldCacheQuery } from '../query-client';\nimport { request, RequestError, RequestEvent, RequestHeaders } from '../request';\nimport {\n BaseArguments,\n ExecuteQueryOptions,\n GqlQueryConfig,\n PollConfig,\n QueryAutoRefreshConfig,\n QueryStateMeta,\n QueryStateType,\n RestQueryConfig,\n V2QueryState,\n V2RouteType,\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 V2Query<\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends V2RouteType<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 _memoizedState$: Observable<V2QueryState<Data>> | null = null;\n\n private readonly _state$ = new BehaviorSubject<V2QueryState<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<V2QueryState<Data>> {\n if (!this._memoizedState$) {\n this._memoizedState$ = 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 return this._memoizedState$;\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 v2ShouldCacheQuery(this._queryConfig.method);\n }\n\n get _isInMockMode() {\n return !!this._arguments?.mock;\n }\n\n constructor(\n private readonly _client: V2QueryClient,\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 switchMap(([state, tokens]) => {\n if (state && isQueryStateLoading(state)) {\n return EMPTY;\n }\n\n if (isQueryStateFailure(state)) {\n this._updateEntityState({ type: 'failure', error: state.error, headers: {} }, meta, options);\n return EMPTY;\n }\n\n if (!state && !(tokens?.token || tokens?.refreshToken)) {\n return EMPTY;\n }\n\n return of(true as const);\n }),\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 !== 401 ||\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: V2QueryState<Response>): Observable<V2QueryState<Data>> {\n if (!isQueryStateSuccess(s) || !this._queryConfig.entity?.get) {\n return of(s) as Observable<V2QueryState<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: V2QueryState<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 { AnyV2QueryCreator } from '../query-creator';\nimport { AuthProvider } from './auth-provider.types';\nimport { BasicAuthProvider } from './basic-auth-provider';\nimport { V2BearerAuthProvider } 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 AnyV2QueryCreator>(\n authProvider: AuthProvider,\n): authProvider is V2BearerAuthProvider<T> => authProvider instanceof V2BearerAuthProvider;\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 { AnyV2QueryCreator, 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 V2BearerAuthProvider<T extends AnyV2QueryCreator> 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 forceRefresh() {\n return this._refreshQuery();\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\n .prepare(args)\n .execute({ skipCache: true, _isUnauthorizedRetry: 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 { signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { createProvider } from '@ethlete/core';\n\nexport const [provideInfinityQueryResponseDelay, injectInfinityQueryResponseDelay] = createProvider(\n () => {\n const enabled = signal(false);\n const enabled$ = toObservable(enabled);\n\n return {\n enabled,\n enabled$,\n };\n },\n { name: 'Infinity Query Response Delay' },\n);\n","import { BehaviorSubject, Observable, combineLatest, map, of, shareReplay, switchMap, tap } from 'rxjs';\nimport { AnyLegacyQueryCreator } from '../interop';\nimport { filterSuccess } from '../query';\nimport { AnyV2QueryCreator, ConstructQuery, QueryDataOf, V2QueryArgsOf } from '../query-creator';\nimport { InfinityQueryConfig, InfinityQueryParamLocation } from './infinity-query.types';\n\nexport class InfinityQuery<\n QueryCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator,\n Query extends ConstructQuery<QueryCreator>,\n Args extends V2QueryArgsOf<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 { AnyLegacyQueryCreator } from '../interop';\nimport { AnyV2QueryCreator, QueryDataOf, V2QueryArgsOf } from '../query-creator';\nimport { InfinityQueryConfig, PageParamCalculatorOptions } from './infinity-query.types';\n\nexport const createInfinityQueryConfig = <\n QueryCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator,\n Args extends V2QueryArgsOf<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 } from '@ethlete/core';\nimport { BehaviorSubject, combineLatest, Subject, takeUntil, tap, withLatestFrom } from 'rxjs';\nimport { InfinityQuery, InfinityQueryConfig, InfinityQueryOf } from '../infinite-query';\nimport { AnyLegacyQueryCreator, isLegacyQuery } from '../interop';\nimport {\n BaseArguments,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n switchQueryState,\n} from '../query';\nimport { AnyV2QueryCreator, ConstructQuery } from '../query-creator';\nimport { RequestError } from '../request';\nimport {\n injectInfinityQueryResponseDelay,\n provideInfinityQueryResponseDelay,\n} from './infinity-query-response-delay-provider';\n\ntype InfinityQueryContext<\n Q extends InfinityQueryConfig<DirectiveQueryCreator, 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\ntype DirectiveQueryCreator = AnyV2QueryCreator | AnyLegacyQueryCreator;\n\n@Directive({\n selector: '[etInfinityQuery]',\n exportAs: 'etInfinityQuery',\n\n providers: [\n { provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective },\n provideInfinityQueryResponseDelay(),\n ],\n})\nexport class InfinityQueryDirective<\n Q extends InfinityQueryConfig<DirectiveQueryCreator, 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 _infinityQueryResponseDelay = injectInfinityQueryResponseDelay({ host: true });\n\n private readonly _data$ = new BehaviorSubject<Q['response']['arrayType']>([]);\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('etInfinityQuery')\n get infinityQuery(): Q {\n return this._infinityQuery;\n }\n set infinityQuery(v: Q) {\n this._cleanup();\n\n if (v.enabled === false) {\n this._infinityQuery = v;\n this._infinityQueryInstance = null;\n return;\n }\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<DirectiveQueryCreator, BaseArguments | undefined, any, unknown[]>,\n >(_dir: InfinityQueryDirective<Q>, _ctx: unknown): _ctx is InfinityQueryContext<Q> {\n return true;\n }\n\n constructor() {\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);\n }\n\n private _setupInfinityQuery(config: Q) {\n const instance = new InfinityQuery(config as any, this._destroy$) as InfinityQueryOf<Q>;\n\n combineLatest([\n instance.currentQuery$.pipe(switchQueryState(), withLatestFrom(instance.currentQuery$)),\n this._infinityQueryResponseDelay.enabled$,\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\n if (isLegacyQuery(currentQuery)) {\n this._errorHandler.handleError(state.error.httpErrorResponse);\n }\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 { computed, Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { fromEvent, Subject, takeUntil } from 'rxjs';\nimport { INFINITY_QUERY_TOKEN, InfinityQueryDirective } from './infinity-query.directive';\n\n@Directive({\n selector: '[etInfinityQueryTrigger], et-infinity-query-trigger',\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 readonly scrollContainerSelector = input<string | null>(null);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n infinityQueryOverride = input<InfinityQueryDirective<any> | null>(null);\n\n infinityQuery = computed(() => this.infinityQueryOverride() ?? this._infinityQuery);\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 const scrollContainerSelector = this.scrollContainerSelector();\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: scrollContainerSelector ? document.querySelector(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 {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n TemplateRef,\n ViewContainerRef,\n effect,\n inject,\n input,\n untracked,\n} from '@angular/core';\nimport { AnyLegacyQuery, isLegacyQuery } from '../interop';\nimport {\n AnyQueryCollection,\n AnyV2Query,\n QueryCollectionKeysOf,\n QueryOf,\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';\nimport { queryStateSignal } from '../utils';\n\nexport type QueryDirectiveContext<Q extends QueryDirectiveType | 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\nexport type QueryDirectiveType = AnyV2Query | AnyLegacyQuery | AnyQueryCollection;\n\n@Directive({\n selector: '[etQuery]',\n})\nexport class QueryDirective<Q extends QueryDirectiveType | null> {\n private errorHandler = inject(ErrorHandler);\n private cdr = inject(ChangeDetectorRef);\n\n private readonly _viewContext: QueryDirectiveContext<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 query = input.required<Q>({ alias: 'etQuery' });\n\n cache = input(false, { alias: 'etQueryCache' });\n\n queryState = queryStateSignal(this.query);\n\n static ngTemplateContextGuard<Q extends QueryDirectiveType | null>(\n _dir: QueryDirective<Q>,\n _ctx: unknown,\n ): _ctx is QueryDirectiveContext<Q> {\n return true;\n }\n\n constructor() {\n inject(ViewContainerRef).createEmbeddedView(inject(TemplateRef), this._viewContext);\n\n effect(() => {\n const query = extractQuery(this.query());\n\n untracked(() => {\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 this._viewContext.scope = isQueryCollection(query) ? (query.type as QueryCollectionKeysOf<Q>) : null;\n this._viewContext.query = query as QueryOf<Q>;\n });\n });\n\n effect(() => {\n const state = this.queryState();\n const cache = this.cache();\n\n untracked(() => {\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 (!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 if (isLegacyQuery(extractQuery(this.query()))) {\n this.errorHandler.handleError(state.error.httpErrorResponse);\n }\n } else {\n this._viewContext.error = null;\n }\n\n this.cdr.markForCheck();\n });\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AnyV2Query } from '../../query';\n\n@Pipe({ name: 'queryShortName' })\nexport class QueryShortNamePipe implements PipeTransform {\n transform(value: AnyV2Query) {\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 { V2QueryClient } from '../../query-client';\n\nexport type QueryClientDevtoolsOptions = {\n displayName?: string;\n client: V2QueryClient;\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 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 { AnyV2Query, 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 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 const configs = this.queryClientConfigs;\n const index = configs.length === 1 ? 0 : (this.selectedClientId() ?? 0);\n const config = configs[index] ?? configs[0];\n\n if (!config) {\n throw new Error('QueryDevtools: no query client configs registered');\n }\n\n return config;\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<AnyV2Query[]>([]);\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<AnyV2Query[]>([]);\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<AnyV2Query> = (_, { _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: AnyV2Query) {\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>{{ $safeNavigationMigration(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 { HttpErrorResponse } from '@angular/common/http';\nimport { FieldTree, ReadonlyFieldTree, ValidationError } from '@angular/forms/signals';\nimport { FormViolationView } from '@ethlete/types';\nimport { createQueryErrorResponse, isQueryErrorResponse } from './query-error-response';\nimport { isSymfonyFormViolationListError, isSymfonyListError } from './query-error-response-utils';\n\n/** `kind` of a `ValidationError` created from a single server violation. */\nexport const SERVER_VIOLATION_ERROR_KIND = 'etServerViolation';\n\n/** `kind` of the form-level fallback error created when a failed request carries no violations. */\nexport const SERVER_ERROR_KIND = 'etServerError';\n\n/** A signal-forms validation error created from a single server violation. */\nexport type ServerViolationValidationError = ValidationError.WithOptionalFieldTree & {\n kind: typeof SERVER_VIOLATION_ERROR_KIND;\n message: string;\n /** The violation this error was created from. */\n violation: FormViolationView;\n};\n\n/** The form-level fallback error for a failed request that carries no violations. */\nexport type ServerValidationError = ValidationError.WithOptionalFieldTree & {\n kind: typeof SERVER_ERROR_KIND;\n message: string;\n};\n\n/**\n * Extracts the violation list from a failed request in any of the shapes it may reach you:\n * a `QueryErrorResponse` (from `query.error()` or a settled snapshot), a raw `HttpErrorResponse`,\n * an already-unwrapped error body, or a plain violation array. Returns `[]` when the error\n * carries no violations.\n */\nexport const extractFormViolations = (error: unknown): FormViolationView[] => {\n if (!error) return [];\n\n const body = isQueryErrorResponse(error) ? error.raw.error : error instanceof HttpErrorResponse ? error.error : error;\n\n if (isSymfonyFormViolationListError(body)) {\n return body.violations;\n }\n\n if (isSymfonyListError(body)) {\n return body;\n }\n\n return [];\n};\n\nexport type MapViolationsToFormErrorsOptions<TModel> = {\n /**\n * The field tree the violation property paths are resolved against — usually the form root\n * (or the `field` passed to a signal-forms `submit()` action).\n */\n fieldTree: FieldTree<TModel>;\n\n /**\n * The failed request's error in any shape `extractFormViolations` accepts: a\n * `QueryErrorResponse`, a raw `HttpErrorResponse`, an error body, or a violation array.\n */\n error: unknown;\n\n /**\n * Rewrites a violation's property path before it is resolved against the field tree — use it\n * when the API's payload shape differs from the form model. Return `null` to treat the\n * violation as unmapped.\n */\n rewritePath?: (path: string, violation: FormViolationView) => string | null;\n\n /**\n * Overrides how a violation whose path doesn't resolve to a field is turned into an error.\n * Return `null` to drop the violation. By default an unmapped violation becomes a form-level\n * error (no `fieldTree`), which signal forms attaches to the submitted field.\n */\n onUnmappedViolation?: (violation: FormViolationView) => ValidationError.WithOptionalFieldTree | null;\n};\n\n/**\n * Maps a failed request's violations onto a signal-forms field tree as validation errors —\n * the bridge between an API's violation list (`@ethlete/types` `FormViolationView`) and\n * signal forms.\n *\n * Each violation's `propertyPath` (e.g. `items[2].name`) is resolved against `fieldTree`; a\n * resolved violation becomes a `ServerViolationValidationError` bound to that field, an\n * unresolved one becomes a form-level error (customizable via `onUnmappedViolation`). A failed\n * request that carries no violations at all degrades to form-level `ServerValidationError`s\n * built from the normalized error message — so returning this function's result from a\n * `submit()` action never silently succeeds on failure.\n *\n * ```ts\n * await submit(this.form, async (field) => {\n * const snapshot = await executeUntilSettled(this.createPost, { args: { body: field().value() } });\n * const error = snapshot.error();\n *\n * if (!error) return;\n *\n * return mapViolationsToFormErrors({ fieldTree: field, error });\n * });\n * ```\n */\nexport const mapViolationsToFormErrors = <TModel>(\n options: MapViolationsToFormErrorsOptions<TModel>,\n): ValidationError.WithOptionalFieldTree[] => {\n const { fieldTree, error, rewritePath, onUnmappedViolation } = options;\n\n if (error === null || error === undefined) return [];\n\n const violations = extractFormViolations(error);\n\n if (!violations.length) {\n // An empty violation array is an explicit \"nothing to map\" — only unrecognized error\n // shapes degrade to the form-level fallback.\n if (Array.isArray(error) && !error.length) return [];\n\n return createFallbackErrors(error);\n }\n\n const errors: ValidationError.WithOptionalFieldTree[] = [];\n\n for (const violation of violations) {\n const rawPath = violation.propertyPath;\n const path = rawPath && rewritePath ? rewritePath(rawPath, violation) : rawPath;\n const resolvedFieldTree = path ? resolveFieldTreePath(fieldTree, path) : null;\n\n if (resolvedFieldTree) {\n const mappedError: ServerViolationValidationError = {\n kind: SERVER_VIOLATION_ERROR_KIND,\n message: violation.message,\n fieldTree: resolvedFieldTree,\n violation,\n };\n\n errors.push(mappedError);\n } else if (onUnmappedViolation) {\n const customError = onUnmappedViolation(violation);\n\n if (customError) {\n errors.push(customError);\n }\n } else {\n const unmappedError: ServerViolationValidationError = {\n kind: SERVER_VIOLATION_ERROR_KIND,\n message: violation.message,\n violation,\n };\n\n errors.push(unmappedError);\n }\n }\n\n return errors;\n};\n\nconst createFallbackErrors = (error: unknown): ServerValidationError[] => {\n const queryError = isQueryErrorResponse(error) ? error : createQueryErrorResponse(error);\n\n if (queryError.isList) {\n return queryError.errors.map((item) => ({ kind: SERVER_ERROR_KIND, message: item.message }));\n }\n\n return [{ kind: SERVER_ERROR_KIND, message: queryError.error.message }];\n};\n\n/** Splits a property path like `items[2].name` or `translations['de'].title` into its segments. */\nconst parsePropertyPath = (path: string) => {\n return path\n .replace(/\\[(['\"]?)([^\\]]*?)\\1\\]/g, '.$2')\n .split('.')\n .filter((segment) => segment.length > 0);\n};\n\nconst resolveFieldTreePath = <TModel>(\n fieldTree: FieldTree<TModel>,\n path: string,\n): ReadonlyFieldTree<unknown> | null => {\n let current: unknown = fieldTree;\n\n for (const segment of parsePropertyPath(path)) {\n if (current === null || (typeof current !== 'object' && typeof current !== 'function')) {\n return null;\n }\n\n current = (current as Record<string, unknown>)[segment];\n }\n\n // A field tree node is callable (calling it returns the field state) — anything else means the\n // path left the tree (e.g. an index past the array's current length).\n return typeof current === 'function' ? (current as ReadonlyFieldTree<unknown>) : null;\n};\n","import { Resource, Signal } from '@angular/core';\nimport {\n FieldContext,\n FieldTree,\n LogicFn,\n PathKind,\n SchemaPath,\n SchemaPathRules,\n TreeValidationResult,\n validateAsync,\n} from '@angular/forms/signals';\nimport { FormViolationView } from '@ethlete/types';\nimport { extractFormViolations, mapViolationsToFormErrors } from './query-signal-forms';\n\n// Shared core for the query-backed async validators (`validateWithQuery` /\n// `validateWithV2Query`). Everything except how the query is executed — the `factory` that turns\n// the debounced params into a `Resource` — is identical between the v2 and v3 variants, so it is\n// factored here and imported by both. This module is intentionally NOT part of the `http` barrel;\n// it is internal plumbing consumed by direct path (the legacy variant already imports from `http`).\n\n/** Default debounce (ms) applied before a validate request runs, mirroring `selectOptionsFrom*Query`. */\nexport const DEFAULT_QUERY_VALIDATION_DEBOUNCE = 300;\n\n/**\n * Turns a failed validate request into field errors — the default `onError` mapping shared by both\n * validators. Reuses the existing `mapViolationsToFormErrors` bridge: a `422` violation list is\n * resolved onto the child fields by `propertyPath`, while a network / non-violation error degrades\n * to a non-swallowed form-level error. A caller-supplied `mapViolations` overrides only the\n * violation → error step (it receives the already-extracted violations).\n */\nexport const mapQueryValidationError = <TValue, TPathKind extends PathKind>(\n error: unknown,\n ctx: FieldContext<TValue, TPathKind>,\n mapViolations?: (violations: FormViolationView[], ctx: FieldContext<TValue, TPathKind>) => TreeValidationResult,\n): TreeValidationResult => {\n // Angular's `resource()` wraps a thrown non-`Error` (our `QueryErrorResponse` / `HttpErrorResponse`)\n // into an `Error` and stashes the original on `.cause`, so unwrap it before extraction.\n const cause = error instanceof Error && error.cause !== undefined ? error.cause : error;\n\n if (mapViolations) {\n return mapViolations(extractFormViolations(cause), ctx);\n }\n\n // `ctx.fieldTree` is the (read-only) tree of the validated field; `propertyPath`s resolve against\n // it. The cast bridges `ReadonlyFieldTree` → `FieldTree` — `mapViolationsToFormErrors` only walks\n // and reads the tree, never mutates it.\n return mapViolationsToFormErrors({ fieldTree: ctx.fieldTree as unknown as FieldTree<TValue>, error: cause });\n};\n\n/** Config shared by both validators, minus the query engine specifics each variant layers on top. */\nexport type QueryValidatorCoreConfig<TValue, TParams, TResult, TPathKind extends PathKind> = {\n /** Builds the request params from the field context — runs reactively on the field value. */\n params: (ctx: FieldContext<TValue, TPathKind>) => TParams;\n /**\n * Creates the `Resource` that runs the query for the current (debounced) params. The only piece\n * that differs between the v2 and v3 variants.\n */\n factory: (params: Signal<TParams | undefined>) => Resource<TResult | undefined>;\n /** Debounce before the request runs, in ms. @default {@link DEFAULT_QUERY_VALIDATION_DEBOUNCE} */\n debounce?: number;\n /** Gate the validation — return `false` to skip the request (e.g. an empty or invalid value). */\n when?: LogicFn<TValue, boolean, TPathKind>;\n /** Override the default violation → error mapping. Receives the extracted violation list. */\n mapViolations?: (violations: FormViolationView[], ctx: FieldContext<TValue, TPathKind>) => TreeValidationResult;\n};\n\n/**\n * Binds a query-backed async validator to `path` via `validateAsync`. Success (`204` / any `2xx`\n * with no violation body) reports no errors; a failed request is mapped by\n * {@link mapQueryValidationError}. Async validation only runs once the field's synchronous\n * validators pass and while `when` holds — signal forms feeds the `factory` `undefined` params when\n * the request shouldn't run, so the resource stays idle.\n */\nexport const applyQueryAsyncValidator = <TValue, TParams, TResult, TPathKind extends PathKind = PathKind.Root>(\n path: SchemaPath<TValue, SchemaPathRules.Supported, TPathKind>,\n config: QueryValidatorCoreConfig<TValue, TParams, TResult, TPathKind>,\n): void => {\n validateAsync<TValue, TParams, TResult, TPathKind>(path, {\n params: config.params,\n debounce: config.debounce ?? DEFAULT_QUERY_VALIDATION_DEBOUNCE,\n factory: config.factory,\n when: config.when,\n onSuccess: () => null,\n onError: (error, ctx) => mapQueryValidationError(error, ctx, config.mapViolations),\n });\n};\n","import { Resource, resource } from '@angular/core';\nimport { FieldContext, PathKind, SchemaPath, SchemaPathRules, TreeValidationResult } from '@angular/forms/signals';\nimport { FormViolationView } from '@ethlete/types';\nimport { Observable, filter, firstValueFrom, take } from 'rxjs';\nimport { applyQueryAsyncValidator } from '../http/query-validator-core';\nimport { AnyLegacyQueryCreator } from './interop';\nimport { AnyV2QueryCreator, QueryDataOf } from './query-creator';\nimport { V2QueryState, isQueryStateFailure, isQueryStateSuccess } from './query';\n\n// The legacy twin of `../http/validate-with-query.ts` for apps still on the class-based\n// `V2QueryClient`. Same signature and behavior; only the query engine differs — it prepares and\n// executes a v2/legacy query and awaits its settled `state$`, where the v3 variant awaits a query\n// snapshot. The shared error-mapping and `validateAsync` wiring live in `query-validator-core`.\n\n/** The args accepted by the creator's `prepare()` — includes `mock`/`config` extras. */\nexport type V2PrepareArgsOf<TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator> = Parameters<\n TCreator['prepare']\n>[0];\n\n/** Config for {@link validateWithV2Query}. */\nexport type ValidateWithV2QueryConfig<\n TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator,\n TValue,\n TPathKind extends PathKind,\n> = {\n /**\n * The legacy query creator to run (from `V2QueryClient`'s `post`/`get`, or a\n * `createLegacyQueryCreator` interop wrapper). A fresh query is prepared and executed for each\n * validate request. Running it through the client is the point: auth, base route, caching and\n * error normalization all apply, unlike a raw `httpResource`.\n */\n queryCreator: TCreator;\n /**\n * Builds the `prepare()` args from the field context. Runs reactively on the field value\n * (debounced), exactly like `validateAsync`'s `params` — e.g.\n * `(ctx) => ({ pathParams: { id }, body: { ...ctx.value() } })`.\n */\n args: (ctx: FieldContext<TValue, TPathKind>) => V2PrepareArgsOf<TCreator>;\n /** Debounce before the request runs, in ms. @default 300 */\n debounce?: number;\n /** Gate the validation — return `false` to skip the request (e.g. an empty or invalid value). */\n when?: (ctx: FieldContext<TValue, TPathKind>) => boolean;\n /**\n * Override the default violation → error mapping. Receives the violations extracted from the\n * failed request; return the errors to report (targeting child fields via their `fieldTree`).\n * Defaults to `mapViolationsToFormErrors`, resolving each violation's `propertyPath` against the\n * validated field.\n */\n mapViolations?: (violations: FormViolationView[], ctx: FieldContext<TValue, TPathKind>) => TreeValidationResult;\n};\n\n/** The subset of the v2/legacy query surface the validator drives. */\ntype PreparedV2Query<TData> = {\n execute: () => void;\n abort: () => void;\n state$: Observable<V2QueryState<TData>>;\n};\n\n/**\n * Binds a query-backed async validator to a signal-forms field, adapting a **legacy v2**\n * `@ethlete/query` query into what `validateAsync` consumes — the `V2QueryClient` counterpart of\n * {@link validateWithQuery}, so apps that haven't migrated yet can still validate against the\n * server. The query runs through the client (bearer auth, base route, caching, Symfony error\n * normalization), where a raw `httpResource` would fire unauthenticated and bypass the pipeline.\n *\n * The query is prepared and executed (debounced) as the field value changes, only after the\n * field's synchronous validators pass. A `204` / successful response reports no errors; a\n * `422 FormViolationListView` maps each violation onto its child field by `propertyPath`; a\n * network / other error degrades to a non-swallowed form-level error.\n *\n * Call it from a schema definition, the same place you'd call `validateAsync`:\n *\n * ```ts\n * const schema = schema<OpportunityEmail>((p) => {\n * validateWithV2Query(p, {\n * queryCreator: postOpportunityEmailValidate, // hubApiClient.post({ ... })\n * args: (ctx) => ({ pathParams: { opportunityId }, body: { ...ctx.value() } }),\n * });\n * });\n * ```\n */\nexport const validateWithV2Query = <\n TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator,\n TValue,\n TPathKind extends PathKind = PathKind.Root,\n>(\n path: SchemaPath<TValue, SchemaPathRules.Supported, TPathKind>,\n config: ValidateWithV2QueryConfig<TCreator, TValue, TPathKind>,\n): void => {\n type TParams = V2PrepareArgsOf<TCreator>;\n type TResult = QueryDataOf<TCreator>;\n\n applyQueryAsyncValidator<TValue, TParams, TResult, TPathKind>(path, {\n params: config.args,\n debounce: config.debounce,\n when: config.when,\n mapViolations: config.mapViolations,\n factory: (params) =>\n resource<TResult | undefined, TParams | undefined>({\n params: () => params(),\n loader: ({ params: prepareArgs, abortSignal }) => {\n // Prepared per request — v2 caches by the prepared args, so a fresh `prepare()` is the\n // legacy idiom (the sibling `selectOptionsFromV2Query` does the same via `queryComputed`).\n const query = config.queryCreator.prepare(prepareArgs) as unknown as PreparedV2Query<TResult>;\n\n abortSignal.addEventListener('abort', () => query.abort());\n query.execute();\n\n // Resolve once the query settles. A failure is thrown so it lands in `onError`, where the\n // violations are mapped onto the fields; the underlying `HttpErrorResponse` is thrown so\n // `extractFormViolations` can unwrap the 422 body.\n return firstValueFrom(\n query.state$.pipe(\n filter((state) => isQueryStateSuccess(state) || isQueryStateFailure(state)),\n take(1),\n ),\n ).then((state) => {\n if (isQueryStateFailure(state)) {\n throw state.error.httpErrorResponse;\n }\n\n return state.response;\n });\n },\n }) as Resource<TResult | undefined>,\n });\n};\n","import { randomId } from '@ethlete/core';\nimport { HttpClient, HttpErrorResponse, HttpEventType } from '@angular/common/http';\nimport { DestroyRef, ErrorHandler, Injector, Signal, signal } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { buildRoute } from '../legacy';\nimport { createHttpRequest, HttpRequest } from './http-request';\nimport { QueryArgs, RequestArgs } from './query';\nimport { buildQueryCacheKey, shouldCacheQuery } from './query-cache-utils';\nimport { CreateQueryClientConfigOptions } from './query-client';\nimport { CreateQueryCreatorOptions, QueryMethod, RouteType } from './query-creator';\nimport { uncacheableRequestHasAllowCacheParam, uncacheableRequestHasCacheKeyParam } from './query-errors';\nimport { RunQueryExecuteOptions } from './query-execute-utils';\nimport { ShouldRetryRequestFn } from './query-retry-utils';\n\nexport type QueryRepositoryEvent =\n | {\n type: 'request-error';\n error: HttpErrorResponse;\n key: QueryKey;\n isSecure: boolean;\n request: HttpRequest<QueryArgs>;\n }\n | {\n type: 'request-success';\n key: QueryKey;\n isSecure: boolean;\n request: HttpRequest<QueryArgs>;\n }\n | {\n /**\n * Every secure entry was torn down at once — a logout. Emitted after the cache is cleared so\n * secure queries can drop the state they hold themselves; the repository only owns the\n * requests, not the `response` signal of the query objects bound to them.\n */\n type: 'unbind-all-secure';\n };\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 /** If the request is secure (needs authentication) */\n isSecure?: boolean;\n\n /** The data of the request */\n args?: RequestArgs<TArgs> | null;\n\n /** The query creator options of the request */\n creatorOptions?: CreateQueryCreatorOptions;\n\n /** Custom retry function for this specific request */\n retryFn?: ShouldRetryRequestFn;\n\n /** If set, this request's cache key will be prefixed with this key */\n key?: string;\n\n /** The previous tracking key of the request */\n previousKey?: QueryKey | null;\n\n /** The destroy ref to bind the request to. If the destroy ref is destroyed, the request will be destroyed as well. */\n consumerDestroyRef: DestroyRef;\n\n /** Configuration on how to run the query */\n runQueryOptions?: RunQueryExecuteOptions;\n\n /** @see QueryConfig.silenceUncacheableAllowCacheError */\n silenceUncacheableAllowCacheError?: boolean;\n};\n\nexport type QueryRepositoryItem<TArgs extends QueryArgs> = {\n /** The key of the request (either a cache key for cacheable requests or a UUID for uncacheable requests) */\n key: QueryKey;\n\n /** The request object */\n request: HttpRequest<TArgs>;\n};\n\n/**\n * A read-only snapshot of a single cache entry, exposed via {@link QueryRepositorySubtle.cacheEntries}\n * for devtools inspection. The raw cache `Map` is never exposed.\n */\nexport type QueryRepositoryCacheEntry = {\n /** The cache key of the entry. */\n key: QueryKey;\n\n /** Whether the entry belongs to a secure (authenticated) request. */\n isSecure: boolean;\n\n /** How many consumers currently hold a binding to the entry. */\n consumerCount: number;\n\n /**\n * Whether the entry has no consumers left and is only being kept around for its\n * `keepUnusedFor` window. Such an entry is not a leak — it is waiting to be reused by a\n * consumer that comes back.\n */\n isUnused: boolean;\n\n /** The underlying HTTP request. */\n request: HttpRequest<QueryArgs>;\n};\n\n/**\n * Advanced repository internals used by the query devtools. **Not part of the general public\n * contract** — do not build application logic on top of these.\n */\nexport type QueryRepositorySubtle = {\n /** Returns a read-only snapshot of every entry currently held in the cache. */\n cacheEntries: () => QueryRepositoryCacheEntry[];\n\n /** A version counter bumped whenever the cache changes (bind / unbind / unbindAllSecure). */\n cacheVersion: Signal<number>;\n\n /**\n * Destroys and removes a single cache entry by key, regardless of its consumers. Intended for\n * devtools cache management — consumers still holding the query will get a fresh request on their\n * next execution.\n */\n evict: (key: QueryKey) => void;\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: QueryKey | null, consumerDestroyRef: DestroyRef) => boolean;\n\n /** Removes all secure requests and their consumers */\n unbindAllSecure: () => void;\n\n /**\n * Re-executes every cacheable entry that still has consumers, bypassing the cache and restarting\n * in-flight requests. Entries kept only for their `keepUnusedFor` window are skipped — nobody is\n * looking at them, and they revalidate on their own when a consumer binds again.\n *\n * @see QueryClient.refreshQueriesInUse\n */\n refreshInUse: () => void;\n\n /** Observable stream of repository events (errors, successes, etc.) */\n events$: Observable<QueryRepositoryEvent>;\n\n /** Advanced repository internals used by the query devtools. */\n subtle: QueryRepositorySubtle;\n};\n\n/** The key of a query (either a cache key for cacheable requests or a UUID for uncacheable requests) */\nexport type QueryKey = string;\n\n/** Runs .unbind() if the DestroyRef.onDestroy() gets called */\nexport type DestroyCleanupCallback = () => void;\n\n/**\n * Keeps track of all places where the request gets used. Once the last consumer is gone the entry is\n * either destroyed right away or kept for `keepUnusedFor` milliseconds so a consumer that comes back\n * (e.g. via browser back navigation) finds its data already there.\n */\ntype DestroyListenerMapItem = {\n consumers: Map<DestroyRef, DestroyCleanupCallback>;\n request: HttpRequest<QueryArgs>;\n isSecure: boolean;\n eventSubscription?: { unsubscribe: () => void };\n\n /** How long this entry survives without consumers. `0` destroys it immediately. */\n keepUnusedFor: number;\n\n /** When the entry lost its last consumer — drives the eviction order of the unused-entry cap. */\n unusedSince?: number;\n\n /** Pending eviction of an unused entry, cancelled as soon as a consumer binds again. */\n evictTimer?: ReturnType<typeof setTimeout>;\n};\n\nexport type QueryRepositoryDependencies = {\n /** The HTTP client to use for the requests */\n httpClient: HttpClient;\n\n /** The error handler to use for the requests */\n ngErrorHandler: ErrorHandler;\n\n /** The injector to use for reactive operations like signal->observable conversions */\n injector: Injector;\n};\n\nexport type CreateQueryRepositoryConfig = CreateQueryClientConfigOptions & {\n /** The dependencies of the query repository */\n dependencies: QueryRepositoryDependencies;\n\n /**\n * Whether unused entries may be retained at all. `false` forces `keepUnusedFor` to `0` everywhere,\n * regardless of client or creator configuration — used to disable retention on the server, where a\n * per-request injector must not hold response bodies (and a pending timer) for minutes.\n * @default true\n */\n retentionEnabled?: boolean;\n};\n\nconst generateUuid = () => randomId();\n\n/** @see CreateQueryClientConfigOptions.keepUnusedFor */\nexport const DEFAULT_KEEP_UNUSED_FOR = 300_000;\n\n/**\n * Hard cap on entries kept without consumers, per client. Retention is opportunistic, so a runaway\n * count (a search-as-you-type query produces a new cache key per keystroke, and each one goes through\n * `unbind`) must never grow unbounded — the least recently orphaned entries are dropped first.\n */\nexport const MAX_UNUSED_ENTRIES = 50;\n\nexport const createQueryRepository = (config: CreateQueryRepositoryConfig): QueryRepository => {\n const cache = new Map<QueryKey, DestroyListenerMapItem>();\n const eventsSubject = new Subject<QueryRepositoryEvent>();\n\n // Bumped on every cache mutation so the devtools cache view can react. Cheap enough to keep\n // unconditional — it is a single integer signal with no readers unless the devtools are open.\n const cacheVersion = signal(0);\n const bumpCacheVersion = () => cacheVersion.update((v) => v + 1);\n\n const resolveKeepUnusedFor = (creatorOptions: CreateQueryCreatorOptions | undefined, shouldCache: boolean) => {\n if (config.retentionEnabled === false || !shouldCache) return 0;\n\n return Math.max(0, creatorOptions?.keepUnusedFor ?? config.keepUnusedFor ?? DEFAULT_KEEP_UNUSED_FOR);\n };\n\n const request = <TArgs extends QueryArgs>(options: QueryRepositoryRequestOptions<TArgs>) => {\n const { args, creatorOptions, runQueryOptions } = options;\n const shouldCache =\n creatorOptions?.subtle?.useQueryRepositoryCache === false\n ? false\n : shouldCacheQuery(options.method) || creatorOptions?.subtle?.useQueryRepositoryCache === true;\n\n if (!shouldCache && options.key) throw uncacheableRequestHasCacheKeyParam(options.key);\n\n // `allowCache` is never read on the uncacheable path below — there is no cache entry to reuse — so this throw\n // is purely a guard against a mistake in hand-written code. The legacy interop opts out of it.\n if (!shouldCache && runQueryOptions?.allowCache && !options.silenceUncacheableAllowCacheError) {\n throw uncacheableRequestHasAllowCacheParam();\n }\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 cacheKey = 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 : false;\n\n const trackingKey = cacheKey || generateUuid();\n const keepUnusedFor = resolveKeepUnusedFor(creatorOptions, shouldCache);\n\n const previousKey = options.previousKey;\n\n if (cacheKey !== previousKey && previousKey) {\n unbind(previousKey, options.consumerDestroyRef);\n }\n\n if (shouldCache && cacheKey) {\n const cacheEntry = cache.get(cacheKey);\n\n if (cacheEntry) {\n // The entry may have been sitting out its `keepUnusedFor` window — a consumer binding again\n // makes it live, so the pending eviction must go.\n cancelEviction(cacheEntry);\n\n bind(cacheKey, options.consumerDestroyRef, cacheEntry.request, options.isSecure ?? false, true, keepUnusedFor);\n\n if (!runQueryOptions?.allowCache || cacheEntry.request.isStale()) {\n cacheEntry.request.execute({ allowCache: runQueryOptions?.allowCache });\n }\n\n return { key: cacheKey, 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: config.dependencies,\n clientOptions: creatorOptions,\n clientHeaders: config.headers,\n cacheAdapter: config.cacheAdapter,\n retryFn: options.retryFn ?? config.retryFn,\n });\n\n request.execute();\n\n bind(trackingKey, options.consumerDestroyRef, request, options.isSecure ?? false, shouldCache, keepUnusedFor);\n\n return { key: trackingKey, request };\n };\n\n /** Tears an entry down for good, whether it currently has consumers or not. */\n const destroyEntry = (key: QueryKey, cacheEntry: DestroyListenerMapItem) => {\n clearTimeout(cacheEntry.evictTimer);\n cacheEntry.request.destroy();\n cacheEntry.eventSubscription?.unsubscribe();\n cache.delete(key);\n };\n\n const cancelEviction = (cacheEntry: DestroyListenerMapItem) => {\n if (cacheEntry.evictTimer === undefined) return;\n\n clearTimeout(cacheEntry.evictTimer);\n cacheEntry.evictTimer = undefined;\n cacheEntry.unusedSince = undefined;\n };\n\n /** Drops the least recently orphaned unused entries until the cap is respected again. */\n const enforceUnusedEntryLimit = () => {\n const unused = Array.from(cache.entries()).filter(([, entry]) => entry.consumers.size === 0);\n\n if (unused.length <= MAX_UNUSED_ENTRIES) return;\n\n unused.sort(([, a], [, b]) => (a.unusedSince ?? 0) - (b.unusedSince ?? 0));\n\n for (const [key, entry] of unused.slice(0, unused.length - MAX_UNUSED_ENTRIES)) {\n destroyEntry(key, entry);\n }\n };\n\n const retain = (key: QueryKey, cacheEntry: DestroyListenerMapItem) => {\n cacheEntry.unusedSince = Date.now();\n cacheEntry.evictTimer = setTimeout(() => evict(key), cacheEntry.keepUnusedFor);\n\n enforceUnusedEntryLimit();\n };\n\n const unbind = (key: QueryKey | null, consumerDestroyRef: DestroyRef) => {\n if (key === null) return false;\n\n const cacheEntry = cache.get(key);\n\n if (!cacheEntry) return false;\n\n cacheEntry.consumers.delete(consumerDestroyRef);\n\n if (cacheEntry.consumers.size === 0) {\n // Only data is worth keeping around: an entry that never produced a response has nothing to\n // hand back to a returning consumer, so it is aborted immediately as it always was.\n if (cacheEntry.keepUnusedFor > 0 && cacheEntry.request.response() !== null) {\n retain(key, cacheEntry);\n } else {\n destroyEntry(key, cacheEntry);\n }\n }\n\n bumpCacheVersion();\n\n return true;\n };\n\n const unbindAllSecure = () => {\n for (const [key, cacheEntry] of cache.entries()) {\n if (!cacheEntry.isSecure) continue;\n\n // Force the teardown instead of routing through `unbind`: a logged out session must not leave a\n // retained response body behind waiting out its `keepUnusedFor` window.\n cacheEntry.consumers.clear();\n destroyEntry(key, cacheEntry);\n }\n\n bumpCacheVersion();\n eventsSubject.next({ type: 'unbind-all-secure' });\n };\n\n const refreshInUse = () => {\n for (const cacheEntry of cache.values()) {\n if (cacheEntry.consumers.size === 0) continue;\n\n // Re-firing a mutation would be a side effect nobody asked for, so only reads are refreshed.\n if (!shouldCacheQuery(cacheEntry.request.method)) continue;\n\n cacheEntry.request.execute({ force: true });\n }\n };\n\n const bind = (\n key: QueryKey,\n consumerDestroyRef: DestroyRef,\n request: HttpRequest<QueryArgs>,\n isSecure: boolean,\n allowReuse: boolean,\n keepUnusedFor: number,\n ) => {\n const destroyListener = consumerDestroyRef.onDestroy(() => unbind(key, consumerDestroyRef));\n\n const cacheEntry = cache.get(key);\n\n if (cacheEntry && allowReuse) {\n cacheEntry.consumers.set(consumerDestroyRef, destroyListener);\n } else {\n const consumers: Map<DestroyRef, DestroyCleanupCallback> = new Map([]);\n\n consumers.set(consumerDestroyRef, destroyListener);\n\n // Drive repository events off the request's discrete, terminal event stream rather than\n // recombining the `error` + `response` signals via combineLatest (which could observe stale\n // pairings). Each settle emits exactly one terminal event.\n const eventSubscription = request.events$.subscribe((event) => {\n if (event.type === 'error') {\n if (event.error.raw instanceof HttpErrorResponse) {\n eventsSubject.next({ type: 'request-error', error: event.error.raw, key, isSecure, request });\n }\n } else if (event.type === HttpEventType.Response) {\n eventsSubject.next({ type: 'request-success', key, isSecure, request });\n }\n });\n\n cache.set(key, {\n consumers,\n request,\n isSecure,\n eventSubscription,\n keepUnusedFor,\n });\n }\n\n bumpCacheVersion();\n };\n\n const cacheEntries = (): QueryRepositoryCacheEntry[] =>\n Array.from(cache.entries()).map(([key, entry]) => ({\n key,\n isSecure: entry.isSecure,\n consumerCount: entry.consumers.size,\n isUnused: entry.consumers.size === 0,\n request: entry.request,\n }));\n\n const evict = (key: QueryKey) => {\n const entry = cache.get(key);\n\n if (!entry) return;\n\n destroyEntry(key, entry);\n bumpCacheVersion();\n };\n\n const repository: QueryRepository = {\n request,\n unbind,\n unbindAllSecure,\n refreshInUse,\n events$: eventsSubject.asObservable(),\n subtle: {\n cacheEntries,\n cacheVersion: cacheVersion.asReadonly(),\n evict,\n },\n };\n\n return repository;\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { ErrorHandler, inject, Injector, PLATFORM_ID } from '@angular/core';\nimport { createRootProvider, ProviderResult } from '@ethlete/core';\nimport { BuildQueryStringConfig } from '../legacy';\nimport { createQueryRepository, QueryRepository } from './query-repository';\nimport { ShouldRetryRequestFn } from './query-retry-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 /**\n * Headers sent with every request of this client — an API token, a tenant id, a preview\n * credential. Per-query `args.headers` are merged on top and win per header name.\n *\n * Pass a function to make them dynamic: it is called on every execution, so reading a signal\n * inside means later requests pick the new value up on their own.\n *\n * Client headers are deliberately **not** part of the cache key: they are the same for every\n * query of the client, so including them would only ever churn the whole cache at once. That\n * means already-resolved queries keep their response when the headers change — call\n * {@link QueryClient.refreshQueriesInUse} to re-run them (the v3 equivalent of v2's\n * `setDefaultHeaders({ refreshQueriesInUse: true })`).\n *\n * @example\n * const previewToken = signal<string | null>(null);\n *\n * export const [provideMyClient, injectMyClient] = createQueryClient({\n * name: 'my-api',\n * baseUrl: 'https://api.example.com',\n * headers: () => {\n * const token = previewToken();\n * return token ? new HttpHeaders({ 'X-Preview-Token': token }) : new HttpHeaders();\n * },\n * });\n */\n headers?: HttpHeaders | (() => HttpHeaders);\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 /**\n * How long (in ms) a cache entry is kept after its last consumer was destroyed.\n *\n * Within that window a query that mounts again — a list page reached via browser back navigation,\n * for instance — binds to the existing entry and renders its previous response immediately while it\n * revalidates in the background, instead of starting from a loading state. Unlike the header derived\n * freshness TTL (`cacheAdapter`) this is independent of `cache-control`, so it also applies to\n * private/authenticated responses.\n *\n * Set to `0` to destroy entries as soon as their last consumer goes away. Only entries that\n * actually hold a response are retained, and at most 50 unused entries are kept per client\n * (least recently orphaned dropped first). Always `0` on the server.\n *\n * Can be overridden per query creator.\n *\n * @default 300000 (5 minutes)\n */\n keepUnusedFor?: number;\n};\n\nexport type QueryClient = {\n repository: QueryRepository;\n\n /** The base URL the client was configured with. */\n baseUrl: string;\n\n /**\n * Re-executes every cacheable request this client currently has consumers for, bypassing the\n * cache and restarting the ones still in flight.\n *\n * The case this exists for is a change to something every request carries but nothing tracks —\n * typically a client-level header (see {@link CreateQueryClientConfigOptions.headers}). Setting\n * the new value only affects *subsequent* requests, so anything already resolved keeps data\n * fetched under the old one until this is called.\n *\n * Only GET / HEAD / OPTIONS requests are refreshed: re-firing a mutation nobody asked for would\n * be a far worse surprise than a stale read.\n */\n refreshQueriesInUse: () => void;\n};\n\nexport type QueryClientRef = ProviderResult<QueryClient>;\nexport type AnyCreateQueryClientResult = QueryClientRef;\nexport type AnyQueryClient = NonNullable<ReturnType<AnyCreateQueryClientResult[1]>>;\n\nexport const createQueryClient = (options: CreateQueryClientConfigOptions): QueryClientRef =>\n createRootProvider(\n () => {\n const httpClient = inject(HttpClient);\n const ngErrorHandler = inject(ErrorHandler);\n const injector = inject(Injector);\n\n const repository = createQueryRepository({\n ...options,\n // Retaining unused entries on the server would pin response bodies (and a pending timer) inside\n // a per-request injector for the whole window, so retention is browser only.\n retentionEnabled: isPlatformBrowser(inject(PLATFORM_ID)),\n dependencies: { httpClient, ngErrorHandler, injector },\n });\n\n const client: QueryClient = {\n repository,\n baseUrl: options.baseUrl,\n refreshQueriesInUse: () => repository.refreshInUse(),\n };\n\n return client;\n },\n {\n name: `QueryClient_${options.name}`,\n },\n );\n","import { QueryArgs, RequestArgs } from './query';\nimport { CreateQueryExecuteOptions, InternalQueryExecute } from './query-execute';\nimport { queryExecute } from './query-execute-utils';\nimport { InternalSecureCreateQueryCreatorOptions } from './secure-query-creator';\nimport { createSecureExecuteFactory } from './secure-query-execute-factory';\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 executeOptions: CreateSecureQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const [, injectAuthProvider] = executeOptions.creatorInternals.authProvider;\n const authProvider = injectAuthProvider();\n\n return createSecureExecuteFactory({\n authProvider,\n deps: executeOptions.deps,\n state: executeOptions.state,\n transformAuthAndExec: (executeArgs, _tokens, headers, executeState) => {\n const { options: runOptions } = executeArgs ?? {};\n const updatedArgs = { ...(executeArgs?.args ?? ({} as RequestArgs<TArgs>)), headers };\n\n queryExecute({\n executeOptions: executeOptions,\n executeState,\n args: updatedArgs,\n options: runOptions,\n isSecure: true,\n });\n },\n });\n};\n","import { createBaseQuery } from './base-query-factory';\nimport { CreateQueryOptions, QueryArgs } from './query';\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 createBaseQuery({\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n features: options.features,\n queryConfig: options.queryConfig,\n executeFactory: createSecureExecuteFn,\n });\n","import { AnyCreateBearerAuthProviderResult } from '../auth';\nimport { createBaseQueryCreator } from './base-query-creator-factory';\nimport { QueryArgs } from './query';\nimport { CreateQueryCreatorOptions, InternalCreateQueryCreatorOptions, QueryCreator } from './query-creator';\nimport { createSecureQuery } from './secure-query';\n\nexport type InternalSecureCreateQueryCreatorOptions<TArgs extends QueryArgs> =\n InternalCreateQueryCreatorOptions<TArgs> & {\n authProvider: AnyCreateBearerAuthProviderResult;\n };\n\nexport const createSecureQueryCreator = <TArgs extends QueryArgs>(\n options: CreateQueryCreatorOptions | undefined,\n internals: InternalSecureCreateQueryCreatorOptions<TArgs>,\n): QueryCreator<TArgs> =>\n createBaseQueryCreator({\n options,\n internals,\n queryFactory: createSecureQuery,\n });\n","import { AnyCreateBearerAuthProviderResult } from '../auth';\nimport { QueryArgs } from './query';\nimport { AnyCreateQueryClientResult } from './query-client';\nimport {\n CreateQueryCreatorOptions,\n QueryCreator,\n QueryMethod,\n RequiresTransform,\n RouteType,\n createQueryCreator,\n} from './query-creator';\nimport { createSecureQueryCreator } from './secure-query-creator';\n\n// Conditional parameter type: when RequiresTransform is true, options must be provided; otherwise optional\ntype ConditionalOptions<TArgs extends QueryArgs> =\n RequiresTransform<TArgs> extends true\n ? [options: CreateQueryCreatorOptions<TArgs>]\n : [options?: CreateQueryCreatorOptions<TArgs>];\n\nconst createQueryTemplate = (method: QueryMethod) => {\n return (client: AnyCreateQueryClientResult) =>\n <TArgs extends QueryArgs>(route: RouteType<TArgs>, ...args: ConditionalOptions<TArgs>): QueryCreator<TArgs> =>\n createQueryCreator<TArgs>(args[0], { method, client, route });\n};\n\nconst createSecureQueryTemplate = (method: QueryMethod) => {\n return (client: AnyCreateQueryClientResult, authProvider: AnyCreateBearerAuthProviderResult) =>\n <TArgs extends QueryArgs>(route: RouteType<TArgs>, ...args: ConditionalOptions<TArgs>): QueryCreator<TArgs> =>\n createSecureQueryCreator<TArgs>(args[0], { method, client, authProvider, route });\n};\n\n/** A query creator that creates a GET query */\nexport const createGetQuery = createQueryTemplate('GET');\n\n/** A query creator that creates a secure GET query (requires authentication) */\nexport const createSecureGetQuery = createSecureQueryTemplate('GET');\n\n/** A query creator that creates a POST query */\nexport const createPostQuery = createQueryTemplate('POST');\n\n/** A query creator that creates a secure POST query (requires authentication) */\nexport const createSecurePostQuery = createSecureQueryTemplate('POST');\n\n/** A query creator that creates a PUT query */\nexport const createPutQuery = createQueryTemplate('PUT');\n\n/** A query creator that creates a secure PUT query (requires authentication) */\nexport const createSecurePutQuery = createSecureQueryTemplate('PUT');\n\n/** A query creator that creates a DELETE query */\nexport const createDeleteQuery = createQueryTemplate('DELETE');\n\n/** A query creator that creates a secure DELETE query (requires authentication) */\nexport const createSecureDeleteQuery = createSecureQueryTemplate('DELETE');\n\n/** A query creator that creates a PATCH query */\nexport const createPatchQuery = createQueryTemplate('PATCH');\n\n/** A query creator that creates a secure PATCH query (requires authentication) */\nexport const createSecurePatchQuery = createSecureQueryTemplate('PATCH');\n","import { filter, firstValueFrom } from 'rxjs';\nimport { Query, QueryArgs, QuerySnapshot } from './query';\nimport { QueryExecuteArgs } from './query-execute';\n\n/**\n * Executes the query and resolves once that execution has settled (response or error received).\n * The returned snapshot is frozen to the awaited execution, so a later execution can't swap the\n * `response()` / `error()` you read from it.\n *\n * Designed for imperative flows that need a mutation's outcome in place — e.g. a signal-forms\n * `submit()` action mapping server violations onto the form via `mapViolationsToFormErrors`.\n *\n * The promise stays pending if the execution is cancelled (e.g. `reset()`) and the query is never\n * executed again — the snapshot settles with whichever execution completes next.\n */\nexport const executeUntilSettled = async <TArgs extends QueryArgs>(\n query: Query<TArgs>,\n executeArgs?: QueryExecuteArgs<TArgs>,\n): Promise<QuerySnapshot<TArgs>> => {\n query.execute(executeArgs);\n\n const snapshot = query.createSnapshot();\n\n await firstValueFrom(snapshot.isAlive.asObservable().pipe(filter((isAlive) => !isAlive)));\n\n return snapshot;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { DestroyRef, inject, Signal, signal, WritableSignal } from '@angular/core';\nimport { isQueryDevtoolsEnabled, registerQueryDevtoolsEntry } from '../devtools';\nimport { AnyNewQuery, AnyQuerySnapshot, Query, QueryArgs, RequestArgs, ResponseType } from './query';\nimport { QueryErrorResponse } from './query-error-response';\nimport { querySequenceAlreadyRunning } from './query-errors';\nimport { executeUntilSettled } from './query-snapshot-utils';\n\n/** The last element of a tuple type — the response of the step a `.then()` callback follows. */\ntype LastOf<T extends unknown[]> = T extends [...unknown[], infer L] ? L : never;\n\n/** The current lifecycle phase of a query sequence. */\nexport type QuerySequenceStatus = 'idle' | 'running' | 'success' | 'error';\n\n/** The args a sequence step supplies to its query — the same `{ args }` shape `query.execute()` takes. */\nexport type QuerySequenceStepArgs<TArgs extends QueryArgs> = {\n args: RequestArgs<TArgs>;\n};\n\n/**\n * The outcome of a settled {@link QuerySequence.run}.\n *\n * A discriminated union: on success `responses` is the fully-typed tuple of every step's response;\n * on failure `failedAt` is the zero-based index of the step that errored and `error` is its\n * normalized {@link QueryErrorResponse}. `snapshots` always holds the settled snapshots of every\n * step that ran — up to and including the failing one.\n */\nexport type QuerySequenceResult<TResponses extends unknown[]> =\n | { ok: true; responses: TResponses; snapshots: AnyQuerySnapshot[] }\n | { ok: false; failedAt: number; error: QueryErrorResponse; snapshots: AnyQuerySnapshot[] };\n\n/**\n * An imperative waterfall of dependent queries — usually mutations (`POST`/`PUT`/`PATCH`/`DELETE`)\n * where each call needs the previous call's response.\n *\n * Build the chain once (e.g. as a component field) with {@link querySequence} and `.then()`, then\n * trigger it with {@link run}. Each step runs via `executeUntilSettled`, threading the previous\n * step's response into the next; the first error aborts the rest. The progress signals mirror\n * `createQueryStack`, so a template can drive a stepper without manual bookkeeping.\n */\nexport type QuerySequence<TResponses extends unknown[]> = {\n /**\n * Appends a dependent step. `mapArgs` runs at {@link run} time and receives the previous step's\n * (unwrapped, non-null on success) response plus the typed tuple of all responses so far, so a\n * later step can still reach an earlier one's data.\n */\n then: <TArgs extends QueryArgs>(\n query: Query<TArgs>,\n mapArgs: (previousResponse: LastOf<TResponses>, responses: TResponses) => QuerySequenceStepArgs<TArgs>,\n ) => QuerySequence<[...TResponses, ResponseType<TArgs>]>;\n\n /** The current lifecycle phase — `idle` before the first run, then `running` → `success` | `error`. */\n status: Signal<QuerySequenceStatus>;\n\n /** `true` while a run is in flight. */\n running: Signal<boolean>;\n\n /** The 1-based index of the in-flight step, or `0` when idle. */\n currentStep: Signal<number>;\n\n /** The static number of steps in the sequence. */\n total: number;\n\n /** The query objects backing each step, in order. Useful for devtools / advanced introspection. */\n queries: AnyNewQuery[];\n\n /** The error of the step that failed, or `null` while running / on success. */\n error: Signal<QueryErrorResponse | null>;\n\n /** The zero-based index of the step that failed, or `null` while running / on success. */\n failedAt: Signal<number | null>;\n\n /** The settled snapshots of every step that has run, grows as the waterfall progresses. */\n snapshots: Signal<AnyQuerySnapshot[]>;\n\n /**\n * The resolved input args each step was run with, grows as the waterfall progresses. The value at\n * index `i` is what {@link QuerySequence.then}'s `mapArgs` produced for step `i` at run time.\n */\n stepArgs: Signal<unknown[]>;\n\n /** The responses of every step that has succeeded, grows as the waterfall progresses. */\n responses: Signal<Partial<TResponses>>;\n\n /**\n * Runs every step in order, resolving once the waterfall settles.\n *\n * Resets the progress signals, then awaits each step in turn — stopping at the first error and\n * resolving with `{ ok: false, failedAt, error }`, or `{ ok: true, responses }` when all steps\n * succeed. Re-runnable (e.g. behind a retry button); throws {@link querySequenceAlreadyRunning}\n * if a run is already in flight.\n *\n * Cancellation caveat (inherited from `executeUntilSettled`): if the host scope is destroyed\n * mid-flight the in-flight query is torn down and this promise never settles.\n */\n run: () => Promise<QuerySequenceResult<TResponses>>;\n};\n\ntype InternalStep = {\n query: AnyNewQuery;\n produceArgs: (previousResponse: unknown, responses: unknown[]) => QuerySequenceStepArgs<QueryArgs>;\n};\n\ntype SequenceState = {\n status: WritableSignal<QuerySequenceStatus>;\n running: WritableSignal<boolean>;\n currentStep: WritableSignal<number>;\n error: WritableSignal<QueryErrorResponse | null>;\n failedAt: WritableSignal<number | null>;\n snapshots: WritableSignal<AnyQuerySnapshot[]>;\n stepArgs: WritableSignal<unknown[]>;\n responses: WritableSignal<unknown[]>;\n};\n\nconst createSequenceState = (): SequenceState => ({\n status: signal<QuerySequenceStatus>('idle'),\n running: signal(false),\n currentStep: signal(0),\n error: signal<QueryErrorResponse | null>(null),\n failedAt: signal<number | null>(null),\n snapshots: signal<AnyQuerySnapshot[]>([]),\n stepArgs: signal<unknown[]>([]),\n responses: signal<unknown[]>([]),\n});\n\n/**\n * A stable holder the devtools registry keeps as a sequence entry's handle. Because `.then()`\n * returns a fresh {@link QuerySequence} object per link (all sharing one {@link SequenceState}),\n * `current` is updated to the latest link so the UI always reads the fully-built sequence.\n * @internal\n */\nexport type QuerySequenceDevtoolsHandle = { current: QuerySequence<any> };\n\nconst buildSequence = <TResponses extends unknown[]>(\n steps: InternalStep[],\n state: SequenceState,\n devtoolsHandle?: QuerySequenceDevtoolsHandle,\n): QuerySequence<TResponses> => {\n const run = async (): Promise<QuerySequenceResult<TResponses>> => {\n if (state.running()) throw querySequenceAlreadyRunning();\n\n state.status.set('running');\n state.running.set(true);\n state.currentStep.set(0);\n state.error.set(null);\n state.failedAt.set(null);\n state.snapshots.set([]);\n state.stepArgs.set([]);\n state.responses.set([]);\n\n const snapshots: AnyQuerySnapshot[] = [];\n const stepArgs: unknown[] = [];\n const responses: unknown[] = [];\n let previousResponse: unknown = undefined;\n\n for (const [i, step] of steps.entries()) {\n state.currentStep.set(i + 1);\n\n const { args } = step.produceArgs(previousResponse, responses);\n stepArgs.push(args);\n state.stepArgs.set([...stepArgs]);\n const snapshot = await executeUntilSettled(step.query, { args });\n\n snapshots.push(snapshot);\n state.snapshots.set([...snapshots]);\n\n const error = snapshot.error();\n\n if (error) {\n state.status.set('error');\n state.error.set(error);\n state.failedAt.set(i);\n state.running.set(false);\n\n return { ok: false, failedAt: i, error, snapshots };\n }\n\n const response = snapshot.response();\n responses.push(response);\n state.responses.set([...responses]);\n previousResponse = response;\n }\n\n state.status.set('success');\n state.running.set(false);\n\n return { ok: true, responses: responses as TResponses, snapshots };\n };\n\n const sequence: QuerySequence<TResponses> = {\n then: (query, mapArgs) =>\n buildSequence(\n [\n ...steps,\n { query, produceArgs: (previousResponse, responses) => mapArgs(previousResponse as any, responses as any) },\n ],\n state,\n devtoolsHandle,\n ) as any,\n status: state.status.asReadonly(),\n running: state.running.asReadonly(),\n currentStep: state.currentStep.asReadonly(),\n total: steps.length,\n queries: steps.map((s) => s.query),\n error: state.error.asReadonly(),\n failedAt: state.failedAt.asReadonly(),\n snapshots: state.snapshots.asReadonly(),\n stepArgs: state.stepArgs.asReadonly(),\n responses: state.responses.asReadonly() as Signal<Partial<TResponses>>,\n run,\n };\n\n if (devtoolsHandle) devtoolsHandle.current = sequence;\n\n return sequence;\n};\n\n/**\n * Starts an imperative waterfall of dependent queries. Chain the remaining steps with `.then()`\n * and trigger it with `.run()` — see {@link QuerySequence}.\n *\n * The seed step's `args` are produced lazily (at `run()` time), so the sequence can safely live as\n * a component field while still reading current signal values on each run.\n *\n * @example\n * ```ts\n * readonly checkout = querySequence(this.createOrder, () => ({ args: { body: this.order() } }))\n * .then(this.createPayment, (order) => ({ args: { body: { orderId: order.id } } }))\n * .then(this.confirmOrder, (payment, [order]) => ({\n * args: { pathParams: { paymentId: payment.id }, body: { orderRef: order.id } },\n * }));\n *\n * async submit() {\n * const result = await this.checkout.run();\n * if (!result.ok) return this.handle(result.error);\n * const [order, payment, confirmation] = result.responses;\n * }\n * ```\n */\nexport const querySequence = <TArgs extends QueryArgs>(\n query: Query<TArgs>,\n seedArgs: () => QuerySequenceStepArgs<TArgs>,\n): QuerySequence<[ResponseType<TArgs>]> => {\n const devtoolsHandle: QuerySequenceDevtoolsHandle | undefined = isQueryDevtoolsEnabled()\n ? { current: null as unknown as QuerySequence<any> }\n : undefined;\n\n const seed = buildSequence<[ResponseType<TArgs>]>(\n [{ query, produceArgs: () => seedArgs() }],\n createSequenceState(),\n devtoolsHandle,\n );\n\n if (devtoolsHandle) {\n const unregister = registerQueryDevtoolsEntry({\n kind: 'query-sequence',\n handle: devtoolsHandle,\n meta: {},\n });\n\n // Sequences have no destroy hook; tie cleanup to the creating scope when there is one.\n try {\n inject(DestroyRef).onDestroy(unregister);\n } catch {\n // Created outside an injection context — the entry lives for the app's lifetime.\n }\n }\n\n return seed;\n};\n","import { Resource, resource } from '@angular/core';\nimport { FieldContext, PathKind, SchemaPath, SchemaPathRules, TreeValidationResult } from '@angular/forms/signals';\nimport { FormViolationView } from '@ethlete/types';\nimport { AnyQueryCreator, QueryArgsOf } from './query-creator';\nimport { RequestArgs, ResponseType } from './query';\nimport { executeUntilSettled } from './query-snapshot-utils';\nimport { applyQueryAsyncValidator } from './query-validator-core';\n\n/** Config for {@link validateWithQuery}. */\nexport type ValidateWithQueryConfig<TCreator extends AnyQueryCreator, TValue, TPathKind extends PathKind> = {\n /**\n * The query creator to run (e.g. a secure `createPostQuery` validate route). Like a query stack,\n * the query is created **once** and re-executes reactively — never per keystroke. Running it\n * through the query client is the point: auth, base route, caching and error normalization all\n * apply, unlike a raw `httpResource`.\n */\n queryCreator: TCreator;\n /**\n * Builds the request args from the field context. Runs reactively on the field value (debounced),\n * exactly like `validateAsync`'s `params` — e.g.\n * `(ctx) => ({ pathParams: { id }, body: { ...ctx.value() } })`.\n */\n args: (ctx: FieldContext<TValue, TPathKind>) => RequestArgs<QueryArgsOf<TCreator>>;\n /** Debounce before the request runs, in ms. @default 300 */\n debounce?: number;\n /** Gate the validation — return `false` to skip the request (e.g. an empty or invalid value). */\n when?: (ctx: FieldContext<TValue, TPathKind>) => boolean;\n /**\n * Override the default violation → error mapping. Receives the violations extracted from the\n * failed request; return the errors to report (targeting child fields via their `fieldTree`).\n * Defaults to `mapViolationsToFormErrors`, resolving each violation's `propertyPath` against the\n * validated field.\n */\n mapViolations?: (violations: FormViolationView[], ctx: FieldContext<TValue, TPathKind>) => TreeValidationResult;\n};\n\n/**\n * Binds a query-backed async validator to a signal-forms field, adapting an `@ethlete/query` v3\n * query into what `validateAsync` consumes. The query runs through the query client — so bearer\n * auth, base route, caching and Symfony error normalization all apply — where a raw `httpResource`\n * would fire unauthenticated and bypass the pipeline.\n *\n * On the current v3 `QueryClient` / `createPostQuery` creators; the `validateWithV2Query` twin\n * covers the legacy `V2QueryClient`. The query is created once and re-executed (debounced) as the\n * field value changes, only after the field's synchronous validators pass. A `204` / successful\n * response reports no errors; a `422 FormViolationListView` maps each violation onto its child\n * field by `propertyPath`; a network / other error degrades to a non-swallowed form-level error.\n *\n * Call it from a schema definition, the same place you'd call `validateAsync`:\n *\n * ```ts\n * const schema = schema<OpportunityEmail>((p) => {\n * validateWithQuery(p, {\n * queryCreator: postOpportunityEmailValidate,\n * args: (ctx) => ({ pathParams: { opportunityId }, body: { ...ctx.value() } }),\n * });\n * });\n * ```\n */\nexport const validateWithQuery = <TCreator extends AnyQueryCreator, TValue, TPathKind extends PathKind = PathKind.Root>(\n path: SchemaPath<TValue, SchemaPathRules.Supported, TPathKind>,\n config: ValidateWithQueryConfig<TCreator, TValue, TPathKind>,\n): void => {\n type TArgs = QueryArgsOf<TCreator>;\n type TParams = RequestArgs<TArgs>;\n type TResult = ResponseType<TArgs>;\n\n applyQueryAsyncValidator<TValue, TParams, TResult, TPathKind>(path, {\n params: config.args,\n debounce: config.debounce,\n when: config.when,\n mapViolations: config.mapViolations,\n factory: (params) => {\n // Created once, exactly like a query stack. A POST validate route doesn't auto-execute, so\n // the resource loader drives it — each params change re-executes with the new args.\n const query = config.queryCreator();\n\n return resource<TResult | undefined, TParams | undefined>({\n params: () => params(),\n loader: async ({ params: requestArgs }) => {\n const snapshot = await executeUntilSettled(query, { args: requestArgs as TParams });\n const error = snapshot.error();\n\n // A failed request (e.g. 422) is thrown so it lands in `onError`, where the violations are\n // mapped onto the fields. A `204` / success settles with no error and no violations.\n if (error) {\n throw error;\n }\n\n return snapshot.response() ?? undefined;\n },\n }) as Resource<TResult | undefined>;\n },\n });\n};\n","import { DestroyRef, inject, isDevMode, signal, Signal } from '@angular/core';\n\ntype LeaderMessage =\n | {\n type: 'heartbeat';\n tabId: string;\n }\n | {\n type: 'tab-heartbeat';\n tabId: string;\n }\n | {\n type: 'leader-claim';\n tabId: string;\n }\n | {\n type: 'leader-release';\n tabId: string;\n }\n | {\n type: 'instance-register';\n tabId: string;\n }\n | {\n type: 'instance-unregister';\n tabId: string;\n };\n\nexport type InternalLeaderElection = {\n isLeader: Signal<boolean>;\n instanceCount: Signal<number>;\n becomeLeader: () => void;\n cleanup: () => void;\n};\n\nexport const setupLeaderElection = (): InternalLeaderElection => {\n const destroyRef = inject(DestroyRef);\n\n const channelName = 'ethlete-auth-leader';\n const heartbeatInterval = 1000;\n const leaderTimeout = 3000;\n const storageKey = 'ethlete-auth-leader-heartbeat';\n\n const tabId = `tab-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n const isLeader = signal(false);\n const instanceCount = signal(1);\n const knownTabs = new Map<string, number>();\n knownTabs.set(tabId, Date.now());\n\n let channel: BroadcastChannel | null = null;\n let heartbeatIntervalId: ReturnType<typeof setInterval> | null = null;\n let leaderCheckIntervalId: ReturnType<typeof setInterval> | null = null;\n\n if (typeof BroadcastChannel === 'undefined' || typeof localStorage === 'undefined') {\n isLeader.set(true);\n return {\n isLeader: isLeader.asReadonly(),\n instanceCount: instanceCount.asReadonly(),\n becomeLeader: () => {\n /* no-op */\n },\n cleanup: () => {\n /* no-op */\n },\n };\n }\n\n channel = new BroadcastChannel(channelName);\n\n channel.postMessage({ type: 'instance-register', tabId } as LeaderMessage);\n\n const updateLeaderHeartbeat = (newTabId: string = tabId) => {\n try {\n localStorage.setItem(storageKey, JSON.stringify({ tabId: newTabId, timestamp: Date.now() }));\n } catch (error) {\n if (isDevMode()) {\n console.error('Failed to update leader heartbeat:', error);\n }\n }\n };\n\n const getLeaderHeartbeat = (): { tabId: string; timestamp: number } | null => {\n try {\n const stored = localStorage.getItem(storageKey);\n if (!stored) return null;\n return JSON.parse(stored);\n } catch {\n return null;\n }\n };\n\n const becomeLeader = () => {\n if (isLeader()) return;\n\n isLeader.set(true);\n updateLeaderHeartbeat();\n\n const message: LeaderMessage = {\n type: 'leader-claim',\n tabId,\n };\n channel?.postMessage(message);\n };\n\n const releaseLeadership = () => {\n if (!isLeader()) return;\n\n isLeader.set(false);\n\n const message: LeaderMessage = {\n type: 'leader-release',\n tabId,\n };\n channel?.postMessage(message);\n };\n\n const checkLeaderStatus = () => {\n const heartbeat = getLeaderHeartbeat();\n const now = Date.now();\n\n if (!heartbeat || now - heartbeat.timestamp > leaderTimeout) {\n if (!isLeader()) {\n becomeLeader();\n }\n } else if (heartbeat.tabId === tabId) {\n if (!isLeader()) {\n isLeader.set(true);\n }\n updateLeaderHeartbeat();\n } else {\n if (isLeader()) {\n isLeader.set(false);\n }\n }\n };\n\n channel.onmessage = (event: MessageEvent<LeaderMessage>) => {\n const message = event.data;\n\n if (message.type === 'heartbeat') {\n if (message.tabId !== tabId) {\n knownTabs.set(message.tabId, Date.now());\n }\n if (message.tabId !== tabId && isLeader()) {\n const heartbeat = getLeaderHeartbeat();\n if (heartbeat && heartbeat.tabId === message.tabId) {\n releaseLeadership();\n }\n }\n } else if (message.type === 'tab-heartbeat') {\n if (message.tabId !== tabId) {\n knownTabs.set(message.tabId, Date.now());\n }\n } else if (message.type === 'instance-register') {\n if (message.tabId !== tabId) {\n knownTabs.set(message.tabId, Date.now());\n instanceCount.set(knownTabs.size);\n channel?.postMessage({ type: 'tab-heartbeat', tabId } as LeaderMessage);\n }\n } else if (message.type === 'instance-unregister') {\n if (message.tabId !== tabId) {\n knownTabs.delete(message.tabId);\n instanceCount.set(knownTabs.size);\n }\n } else if (message.type === 'leader-claim') {\n if (message.tabId !== tabId && isLeader()) {\n const heartbeat = getLeaderHeartbeat();\n if (heartbeat && heartbeat.tabId === message.tabId) {\n releaseLeadership();\n } else {\n const assertMessage: LeaderMessage = {\n type: 'heartbeat',\n tabId,\n };\n channel?.postMessage(assertMessage);\n }\n }\n } else if (message.type === 'leader-release') {\n if (message.tabId !== tabId) {\n setTimeout(() => checkLeaderStatus(), 100);\n }\n }\n };\n\n checkLeaderStatus();\n\n heartbeatIntervalId = setInterval(() => {\n knownTabs.set(tabId, Date.now());\n\n if (isLeader()) {\n updateLeaderHeartbeat();\n channel?.postMessage({ type: 'heartbeat', tabId } as LeaderMessage);\n } else {\n channel?.postMessage({ type: 'tab-heartbeat', tabId } as LeaderMessage);\n }\n\n const now = Date.now();\n let changed = false;\n for (const [id, lastSeen] of knownTabs) {\n if (id !== tabId && now - lastSeen > leaderTimeout) {\n knownTabs.delete(id);\n changed = true;\n }\n }\n if (changed) {\n instanceCount.set(knownTabs.size);\n }\n }, heartbeatInterval);\n\n leaderCheckIntervalId = setInterval(() => {\n checkLeaderStatus();\n }, heartbeatInterval);\n\n const handleVisibilityChange = () => {\n if (document.hidden && isLeader()) {\n // Tab is hidden but we're leader - keep leadership but other tabs will take over if we die\n } else if (!document.hidden && !isLeader()) {\n checkLeaderStatus();\n }\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n const cleanup = () => {\n if (heartbeatIntervalId) {\n clearInterval(heartbeatIntervalId);\n }\n if (leaderCheckIntervalId) {\n clearInterval(leaderCheckIntervalId);\n }\n\n channel?.postMessage({ type: 'instance-unregister', tabId } as LeaderMessage);\n\n releaseLeadership();\n\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n channel?.close();\n\n const heartbeat = getLeaderHeartbeat();\n if (heartbeat?.tabId === tabId) {\n try {\n localStorage.removeItem(storageKey);\n } catch {\n // Ignore\n }\n }\n };\n\n destroyRef.onDestroy(cleanup);\n\n return {\n isLeader: isLeader.asReadonly(),\n instanceCount: instanceCount.asReadonly(),\n becomeLeader,\n cleanup,\n };\n};\n","const ENCRYPTION_KEY_STORAGE = '__eth_ek';\n\nconst generateEncryptionKey = (): string => {\n const navigatorInfo =\n typeof navigator !== 'undefined'\n ? `${navigator.userAgent}${navigator.language}${screen.width}${screen.height}${screen.colorDepth}`\n : 'server';\n\n const random = Math.random().toString(36).substring(2, 15);\n\n return btoa(`${navigatorInfo}${random}`);\n};\n\nlet cachedKey: string | null = null;\n\nconst getEncryptionKey = (): string => {\n if (cachedKey) return cachedKey;\n\n if (typeof localStorage !== 'undefined') {\n const stored = localStorage.getItem(ENCRYPTION_KEY_STORAGE);\n if (stored) {\n cachedKey = stored;\n return stored;\n }\n\n const newKey = generateEncryptionKey();\n localStorage.setItem(ENCRYPTION_KEY_STORAGE, newKey);\n cachedKey = newKey;\n return newKey;\n }\n\n if (!cachedKey) {\n cachedKey = generateEncryptionKey();\n }\n return cachedKey;\n};\n\nconst xorCipher = (text: string, key: string): string => {\n let result = '';\n for (let i = 0; i < text.length; i++) {\n result += String.fromCharCode(text.charCodeAt(i) ^ key.charCodeAt(i % key.length));\n }\n return result;\n};\n\nexport const encryptToken = (token: string): string => {\n if (!token) return token;\n\n try {\n const key = getEncryptionKey();\n const encrypted = xorCipher(token, key);\n return btoa(encrypted);\n } catch {\n return token;\n }\n};\n\nexport const decryptToken = (encryptedToken: string): string => {\n if (!encryptedToken) return encryptedToken;\n\n try {\n const key = getEncryptionKey();\n const encrypted = atob(encryptedToken);\n return xorCipher(encrypted, key);\n } catch {\n return encryptedToken;\n }\n};\n\nexport const isEncrypted = (value: string): boolean => {\n if (!value) return false;\n\n const base64Regex = /^[A-Za-z0-9+/]+=*$/;\n if (!base64Regex.test(value)) return false;\n\n try {\n atob(value);\n return value.length > 20;\n } catch {\n return false;\n }\n};\n\nexport const resetEncryptionKey = (): void => {\n cachedKey = null;\n if (typeof localStorage !== 'undefined') {\n localStorage.removeItem(ENCRYPTION_KEY_STORAGE);\n }\n};\n","import { DestroyRef, effect, inject, isDevMode, WritableSignal } from '@angular/core';\nimport { QueryClient } from '../../http';\nimport { decryptToken, encryptToken } from '../utils';\n\ntype SyncMessage =\n | {\n type: 'tokens-updated';\n accessToken: string;\n refreshToken: string;\n }\n | {\n type: 'logout';\n };\n\nexport type MultiTabSyncConfig = {\n channelName?: string;\n syncTokens?: boolean;\n syncLogout?: boolean;\n};\n\nexport type InternalMultiTabSync = {\n cleanup: () => void;\n};\n\nexport const setupMultiTabSync = (\n config: MultiTabSyncConfig,\n accessToken: WritableSignal<string | null>,\n refreshToken: WritableSignal<string | null>,\n queryClient: QueryClient,\n): InternalMultiTabSync => {\n const destroyRef = inject(DestroyRef);\n\n const channelName = config.channelName ?? 'ethlete-auth-sync';\n const syncTokens = config.syncTokens ?? true;\n const syncLogout = config.syncLogout ?? true;\n\n let channel: BroadcastChannel | null = null;\n let isProcessingExternalUpdate = false;\n\n if (typeof BroadcastChannel === 'undefined') {\n if (isDevMode()) {\n console.warn('BroadcastChannel is not supported in this environment. Multi-tab sync will be disabled.');\n }\n return {\n cleanup: () => {\n // No cleanup needed when BroadcastChannel is not available\n },\n };\n }\n\n channel = new BroadcastChannel(channelName);\n\n channel.onmessage = (event: MessageEvent<SyncMessage>) => {\n const message = event.data;\n\n // Prevent infinite loops\n if (isProcessingExternalUpdate) return;\n\n isProcessingExternalUpdate = true;\n\n try {\n if (message.type === 'logout' && syncLogout) {\n accessToken.set(null);\n refreshToken.set(null);\n queryClient.repository.unbindAllSecure();\n } else if (message.type === 'tokens-updated' && syncTokens) {\n accessToken.set(decryptToken(message.accessToken));\n refreshToken.set(decryptToken(message.refreshToken));\n }\n } finally {\n isProcessingExternalUpdate = false;\n }\n };\n\n const cleanup = () => {\n channel?.close();\n };\n\n destroyRef.onDestroy(cleanup);\n\n if (syncTokens) {\n effect(() => {\n const access = accessToken();\n const refresh = refreshToken();\n\n if (access && refresh && !isProcessingExternalUpdate && channel) {\n const message: SyncMessage = {\n type: 'tokens-updated',\n accessToken: encryptToken(access),\n refreshToken: encryptToken(refresh),\n };\n channel.postMessage(message);\n }\n });\n }\n\n if (syncLogout) {\n let hadTokens = false;\n\n effect(() => {\n const access = accessToken();\n\n if (access) {\n hadTokens = true;\n } else if (hadTokens && !isProcessingExternalUpdate && channel) {\n const message: SyncMessage = {\n type: 'logout',\n };\n channel.postMessage(message);\n hadTokens = false;\n }\n });\n }\n\n return { cleanup };\n};\n","import {\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n isDevMode,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { createRootProvider, isObject, ProviderResult } from '@ethlete/core';\nimport { Observable, Subject } from 'rxjs';\nimport { getQueryClientName, isQueryDevtoolsEnabled, registerQueryDevtoolsEntry } from '../devtools';\nimport {\n AnyCreateQueryClientResult,\n authExtractTokensResponseMissingAccessToken,\n authExtractTokensResponseMissingRefreshToken,\n authExtractTokensResponseNotObject,\n authProviderFeatureUsedMultipleTimes,\n QueryArgs,\n QueryClient,\n QueryErrorResponse,\n QueryRepository,\n QuerySnapshot,\n RequestArgs,\n RunQueryExecuteOptions,\n} from '../http';\nimport { decryptBearer } from '../legacy';\nimport {\n AnyQueryBuilder,\n AuthQueryBuilder,\n BearerAuthProviderTokens,\n TokenRefreshQueryBuilder,\n} from './bearer-auth-query-builders';\nimport {\n InactivityLogoutFeature,\n PersistentAuthFeature,\n TokenExpirationWarningFeature,\n TrackingFeature,\n} from './features';\nimport { setupLeaderElection, setupMultiTabSync } from './internal';\n\nexport { AnyQueryBuilder } from './bearer-auth-query-builders';\n\nexport type BearerAuthExecutionStateLoading<TType extends string = string> = {\n type: TType;\n state: 'loading';\n};\n\nexport type BearerAuthExecutionStateSuccess<TType extends string = string> = {\n type: TType;\n state: 'success';\n response: unknown;\n};\n\nexport type BearerAuthExecutionStateError<TType extends string = string> = {\n type: TType;\n state: 'error';\n error: QueryErrorResponse;\n};\n\nexport type BearerAuthExecutionStateLogout = {\n type: 'logout';\n state: 'success';\n};\n\nexport type BearerAuthExecutionState<TType extends string = string> =\n | BearerAuthExecutionStateLoading<TType>\n | BearerAuthExecutionStateSuccess<TType>\n | BearerAuthExecutionStateError<TType>\n | BearerAuthExecutionStateLogout;\n\nexport const BearerAuthFeatureType = {\n PERSISTENT_AUTH: 'PERSISTENT_AUTH',\n TOKEN_EXPIRATION_WARNING: 'TOKEN_EXPIRATION_WARNING',\n INACTIVITY_LOGOUT: 'INACTIVITY_LOGOUT',\n TOKEN_REVOCATION: 'TOKEN_REVOCATION',\n TRACKING: 'TRACKING',\n} as const;\n\nexport type BearerAuthFeatureType = (typeof BearerAuthFeatureType)[keyof typeof BearerAuthFeatureType];\n\nexport type BearerAuthFeature<TBuilders extends readonly AnyQueryBuilder[], TBearerData> = {\n type: BearerAuthFeatureType;\n setup: (context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown;\n};\n\nexport type ExtractQueryKey<T> =\n T extends AuthQueryBuilder<infer K, any> // eslint-disable-line @typescript-eslint/no-explicit-any\n ? K\n : T extends TokenRefreshQueryBuilder<infer K, any> // eslint-disable-line @typescript-eslint/no-explicit-any\n ? K\n : never;\n\nexport type ExtractQueryArgs<T> =\n T extends AuthQueryBuilder<string, infer TArgs>\n ? TArgs\n : T extends TokenRefreshQueryBuilder<string, infer TArgs>\n ? TArgs\n : never;\n\nexport type QueryRegistryEntry<TArgs extends QueryArgs> = {\n /**\n * Executes the auth query. `args` may be omitted for a query that takes none — its\n * `RequestArgs` is `{}`, which generic helper code cannot produce without a cast.\n */\n execute: (args?: RequestArgs<TArgs>, options?: RunQueryExecuteOptions) => QuerySnapshot<TArgs>;\n snapshot: Signal<QuerySnapshot<TArgs> | null>;\n};\n\nexport type QueryRegistry<TBuilders extends readonly AnyQueryBuilder[]> = {\n [K in ExtractQueryKey<TBuilders[number]>]: QueryRegistryEntry<\n ExtractQueryArgs<Extract<TBuilders[number], { key: K }>>\n >;\n};\n\ntype HasFeatureType<\n TFeatures extends readonly unknown[],\n TType extends BearerAuthFeatureType,\n> = TFeatures extends readonly ((context: any) => any)[] // eslint-disable-line @typescript-eslint/no-explicit-any\n ? Extract<ReturnType<TFeatures[number]>, { type: TType }> extends never\n ? false\n : true\n : false;\n\ntype ExtractFeatureInstance<\n TFeatures extends readonly unknown[],\n TType extends BearerAuthFeatureType,\n> = TFeatures extends readonly ((context: any) => any)[] // eslint-disable-line @typescript-eslint/no-explicit-any\n ? Extract<ReturnType<TFeatures[number]>, { type: TType }> extends { type: TType; instance: infer TInstance }\n ? TInstance\n : never\n : never;\n\nexport type FeatureRegistry<\n TFeatures extends readonly unknown[],\n TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[],\n> = (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.PERSISTENT_AUTH> extends true\n ? { persistentAuth: PersistentAuthFeature }\n : unknown) &\n (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.TOKEN_EXPIRATION_WARNING> extends true\n ? { tokenExpirationWarning: TokenExpirationWarningFeature }\n : unknown) &\n (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.INACTIVITY_LOGOUT> extends true\n ? { inactivityLogout: InactivityLogoutFeature }\n : unknown) &\n (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.TOKEN_REVOCATION> extends true\n ? { tokenRevocation: ExtractFeatureInstance<TFeatures, typeof BearerAuthFeatureType.TOKEN_REVOCATION> }\n : unknown) &\n (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.TRACKING> extends true\n ? { tracking: TrackingFeature<TBuilders> }\n : unknown);\n\nexport type CreateBearerAuthProviderConfig<\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData,\n> = {\n /**\n * The name of the auth provider\n */\n name: string;\n\n /**\n * The query client tuple from createQueryClient\n */\n queryClientRef: AnyCreateQueryClientResult;\n\n /**\n * Query builders\n */\n queries: TBuilders;\n\n /**\n * Feature builders\n */\n features?: TFeatures;\n\n /**\n * A function that decrypts the bearer token\n * @default decryptBearer()\n */\n bearerDecryptFn?: (token: string) => TBearerData;\n\n /**\n * Multi-tab sync configuration\n * Set to false to disable\n * Leader election is automatically enabled when multiTabSync is enabled\n * @default { enabled: true, channelName: 'ethlete-auth-sync', syncTokens: true, syncLogout: true, leaderElection: true }\n */\n multiTabSync?:\n | false\n | {\n /**\n * Whether multi-tab sync is enabled\n * @default true\n */\n enabled?: boolean;\n\n /**\n * Channel name for BroadcastChannel\n * @default 'ethlete-auth-sync'\n */\n channelName?: string;\n\n /**\n * Whether to sync token updates across tabs\n * @default true\n */\n syncTokens?: boolean;\n\n /**\n * Whether to sync logout across tabs\n * @default true\n */\n syncLogout?: boolean;\n\n /**\n * Whether to use leader election for token refresh\n * When enabled, only one tab (the leader) will perform automatic token refreshes\n * @default true\n */\n leaderElection?: boolean;\n };\n};\n\nexport type BearerAuthProvider<\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData,\n> = {\n /**\n * Registry of all configured auth queries\n */\n queries: QueryRegistry<TBuilders>;\n\n /**\n * Registry of all configured features\n */\n features: FeatureRegistry<TFeatures, TBuilders>;\n\n /**\n * The current access token\n */\n accessToken: Signal<string | null>;\n\n /**\n * The current refresh token\n */\n refreshToken: Signal<string | null>;\n\n /**\n * The decrypted bearer data\n */\n bearerData: Signal<TBearerData | null>;\n\n /**\n * Whether the user is currently authenticated\n */\n isAuthenticated: Signal<boolean>;\n\n /**\n * The latest executed query (including internal triggers like auto-refresh)\n */\n latestExecutedQuery: Signal<{ key: ExtractQueryKey<TBuilders[number]>; snapshot: QuerySnapshot<QueryArgs> } | null>;\n\n /**\n * The latest non-internal query (user-triggered only)\n */\n latestNonInternalQuery: Signal<{\n key: ExtractQueryKey<TBuilders[number]>;\n snapshot: QuerySnapshot<QueryArgs>;\n } | null>;\n\n /**\n * The current execution state of the auth provider.\n * Tracks the latest auth operation (login, autoLogin, tokenRefresh, logout, revocation) with its state and payload.\n */\n executionState: Signal<BearerAuthExecutionState<\n ExtractQueryKey<TBuilders[number]> | 'autoLogin' | 'tokenRefresh' | 'logout' | 'revocation'\n > | null>;\n\n /**\n * Seeds the provider with tokens that were issued outside of it — an SSO/OIDC callback that\n * arrives with both tokens in the URL, a token handed over by a native shell, a test harness.\n *\n * Behaves exactly like a successful auth query: the tokens are applied, `bearerData` /\n * `isAuthenticated` update, `afterTokenRefresh$` emits so waiting secure queries run, and (unless\n * disabled) other tabs are synced. Without it the only way in is to execute the refresh query with\n * the refresh token and throw the access token away.\n *\n * Does **not** persist anything by itself — `withPersistentAuth` picks the tokens up through the\n * same signals it watches for query-issued ones.\n */\n setTokens: (accessToken: string, refreshToken: string) => void;\n\n /**\n * Logout the user (clears all tokens and unbinds secure queries)\n */\n logout: () => void;\n\n /**\n * Observable that emits after a successful token refresh.\n * Secure queries can subscribe to this to re-execute themselves with the new token.\n */\n afterTokenRefresh$: Observable<void>;\n};\n\nexport type BearerAuthProviderFeatureContext<\n TBearerData = unknown,\n TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[],\n> = {\n refreshToken: WritableSignal<string | null>;\n afterTokenRefresh$: Observable<void>;\n accessToken: WritableSignal<string | null>;\n bearerData: Signal<TBearerData | null>;\n logout: () => void;\n injector: Injector;\n destroyRef: DestroyRef;\n setTokens: (access: string, refresh: string) => void;\n isLeader: () => boolean;\n leaderElection?: { isLeader: Signal<boolean>; instanceCount: Signal<number> };\n queries: QueryRegistry<TBuilders>;\n executionState: WritableSignal<BearerAuthExecutionState | null>;\n};\n\nexport type BearerAuthProviderQueryContext<\n TBearerData = unknown,\n TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[],\n> = {\n accessToken: WritableSignal<string | null>;\n refreshToken: WritableSignal<string | null>;\n bearerDecryptFn: ((token: string) => TBearerData) | undefined;\n queryClient: QueryClient;\n repository: QueryRepository;\n afterTokenRefresh$: Observable<void>;\n isLeader: () => boolean;\n queries: QueryRegistry<TBuilders>;\n};\n\nconst defaultExtractTokens = (response: unknown): BearerAuthProviderTokens => {\n if (!isObject(response)) {\n throw authExtractTokensResponseNotObject();\n }\n if (!('accessToken' in response) || typeof response['accessToken'] !== 'string') {\n throw authExtractTokensResponseMissingAccessToken();\n }\n if (!('refreshToken' in response) || typeof response['refreshToken'] !== 'string') {\n throw authExtractTokensResponseMissingRefreshToken();\n }\n return { accessToken: response['accessToken'], refreshToken: response['refreshToken'] };\n};\n\nconst deriveExecutionStateType = (builder: AnyQueryBuilder, triggeredBy: string | undefined): string => {\n if (triggeredBy === 'persistent-auth') return 'autoLogin';\n if (builder._type === 'tokenRefreshQuery') return 'tokenRefresh';\n if (triggeredBy === 'token-revocation') return 'revocation';\n return builder.key;\n};\n\nconst setupBearerQueryRegistry = <TBuilders extends readonly AnyQueryBuilder[]>(\n builders: TBuilders,\n injector: Injector,\n latestExecutedQuery: WritableSignal<{ key: string; snapshot: QuerySnapshot<QueryArgs> } | null>,\n latestNonInternalQuery: WritableSignal<{ key: string; snapshot: QuerySnapshot<QueryArgs> } | null>,\n setTokens: (access: string, refresh: string) => void,\n executionState: WritableSignal<BearerAuthExecutionState | null>,\n) => {\n const queries = {} as QueryRegistry<TBuilders>;\n const querySnapshots = new Map<string, Signal<QuerySnapshot<QueryArgs> | null>>();\n\n for (const builder of builders) {\n const querySnapshot = signal<QuerySnapshot<QueryArgs> | null>(null);\n querySnapshots.set(builder.key, querySnapshot);\n\n const extractTokens = builder.config.extractTokens ?? defaultExtractTokens;\n\n effect(() => {\n const snapshot = querySnapshot();\n if (!snapshot) return;\n\n const response = snapshot.response();\n const loading = snapshot.loading();\n const error = snapshot.error();\n\n if (response && !loading && !error) {\n try {\n const tokens = extractTokens(response);\n setTokens(tokens.accessToken, tokens.refreshToken);\n } catch (extractError) {\n if (isDevMode()) {\n console.error(`Failed to extract tokens from ${builder.key} response:`, extractError);\n }\n }\n }\n });\n\n const execute = (args?: RequestArgs<QueryArgs>, options?: { triggeredBy?: string }) => {\n const query = builder.config.queryCreator({\n onlyManualExecution: true,\n injector,\n });\n query.execute({ args, options });\n const snapshot = query.createSnapshot();\n\n const stateType = deriveExecutionStateType(builder, options?.triggeredBy);\n\n if (stateType !== 'revocation') {\n latestExecutedQuery.set({ key: builder.key, snapshot });\n if (!snapshot.triggeredBy()) {\n latestNonInternalQuery.set({ key: builder.key, snapshot });\n }\n }\n executionState.set({ type: stateType, state: 'loading' });\n\n effect(\n () => {\n const response = snapshot.response();\n const loading = snapshot.loading();\n const error = snapshot.error();\n\n if (loading) return;\n\n if (error) {\n executionState.set({ type: stateType, state: 'error', error });\n } else if (response) {\n executionState.set({ type: stateType, state: 'success', response });\n }\n },\n { injector },\n );\n\n querySnapshot.set(snapshot);\n return snapshot;\n };\n\n queries[builder.key as ExtractQueryKey<TBuilders[number]>] = {\n execute,\n snapshot: querySnapshot.asReadonly(),\n } as unknown as QueryRegistry<TBuilders>[ExtractQueryKey<TBuilders[number]>];\n }\n\n return { queries, querySnapshots };\n};\n\nconst setupFeatures = <\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData,\n>(\n featureBuilders: TFeatures | undefined,\n context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>,\n) => {\n const features: Record<string, unknown> = {};\n\n if (!featureBuilders?.length) {\n return features;\n }\n\n const featureTypes = new Set<BearerAuthFeatureType>();\n\n for (const featureSetup of featureBuilders) {\n const feature = featureSetup(context) as BearerAuthFeature<TBuilders, TBearerData> & { instance: unknown };\n\n if (featureTypes.has(feature.type)) {\n throw authProviderFeatureUsedMultipleTimes(feature.type);\n }\n\n featureTypes.add(feature.type);\n const featureName = feature.type\n .toLowerCase()\n .split('_')\n .map((word, index) => (index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)))\n .join('');\n features[featureName] = feature.instance;\n }\n\n return features;\n};\n\nconst setupMultiTabSyncIfEnabled = (\n config: CreateBearerAuthProviderConfig<any, any, any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n accessToken: WritableSignal<string | null>,\n refreshToken: WritableSignal<string | null>,\n queryClient: QueryClient,\n) => {\n const multiTabSyncConfig = config.multiTabSync;\n const multiTabSyncEnabled = multiTabSyncConfig !== false && (multiTabSyncConfig?.enabled ?? true);\n\n if (multiTabSyncEnabled) {\n setupMultiTabSync(\n {\n channelName: typeof multiTabSyncConfig === 'object' ? multiTabSyncConfig?.channelName : undefined,\n syncTokens: typeof multiTabSyncConfig === 'object' ? multiTabSyncConfig?.syncTokens : undefined,\n syncLogout: typeof multiTabSyncConfig === 'object' ? multiTabSyncConfig?.syncLogout : undefined,\n },\n accessToken,\n refreshToken,\n queryClient,\n );\n }\n};\n\nconst createLeaderElection = (\n config: CreateBearerAuthProviderConfig<any, any, any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n) => {\n const multiTabSyncConfig = config.multiTabSync;\n const multiTabSyncEnabled = multiTabSyncConfig !== false && (multiTabSyncConfig?.enabled ?? true);\n const leaderElectionEnabled =\n multiTabSyncEnabled &&\n (typeof multiTabSyncConfig === 'object' ? (multiTabSyncConfig?.leaderElection ?? true) : true);\n const leaderElection = leaderElectionEnabled ? setupLeaderElection() : null;\n const isLeaderFn = () => (leaderElectionEnabled ? (leaderElection?.isLeader() ?? true) : true);\n const leaderElectionContext = leaderElection\n ? { isLeader: leaderElection.isLeader, instanceCount: leaderElection.instanceCount }\n : undefined;\n return { isLeaderFn, leaderElectionContext };\n};\n\nconst createBearerAuthProviderImpl = <\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData,\n>(\n config: CreateBearerAuthProviderConfig<TBuilders, TFeatures, TBearerData>,\n) => {\n const injector = inject(Injector);\n const destroyRef = inject(DestroyRef);\n const queryClient = config.queryClientRef[1]();\n\n const accessToken = signal<string | null>(null);\n const refreshToken = signal<string | null>(null);\n const afterTokenRefresh$ = new Subject<void>();\n\n const bearerData = computed<TBearerData | null>(() => {\n const token = accessToken();\n if (!token) return null;\n\n try {\n return config.bearerDecryptFn?.(token) ?? decryptBearer<TBearerData>(token);\n } catch (error) {\n if (isDevMode()) {\n console.error('Failed to decrypt bearer token:', error);\n }\n return null;\n }\n });\n\n const isAuthenticated = computed(() => !!accessToken());\n const latestExecutedQuery = signal<{ key: string; snapshot: QuerySnapshot<QueryArgs> } | null>(null);\n const latestNonInternalQuery = signal<{ key: string; snapshot: QuerySnapshot<QueryArgs> } | null>(null);\n const executionState = signal<BearerAuthExecutionState | null>(null);\n\n const setTokens = (access: string, refresh: string) => {\n accessToken.set(access);\n refreshToken.set(refresh);\n afterTokenRefresh$.next();\n };\n\n const { queries } = setupBearerQueryRegistry(\n config.queries,\n injector,\n latestExecutedQuery,\n latestNonInternalQuery,\n setTokens,\n executionState,\n );\n\n const logout = () => {\n accessToken.set(null);\n refreshToken.set(null);\n queryClient.repository.unbindAllSecure();\n latestExecutedQuery.set(null);\n latestNonInternalQuery.set(null);\n executionState.set({ type: 'logout', state: 'success' });\n };\n\n const isLeader = createLeaderElection(config);\n\n const querySetupContext: BearerAuthProviderQueryContext<TBearerData, TBuilders> = {\n accessToken,\n refreshToken,\n bearerDecryptFn: config.bearerDecryptFn,\n queryClient,\n repository: queryClient.repository,\n isLeader: isLeader.isLeaderFn,\n afterTokenRefresh$,\n queries: queries as unknown as QueryRegistry<TBuilders>,\n };\n\n for (const builder of config.queries) {\n builder.setup?.(querySetupContext);\n }\n\n const featureSetupContext: BearerAuthProviderFeatureContext<TBearerData, TBuilders> = {\n refreshToken,\n accessToken,\n bearerData,\n logout,\n injector,\n destroyRef,\n setTokens,\n isLeader: isLeader.isLeaderFn,\n leaderElection: isLeader.leaderElectionContext,\n afterTokenRefresh$,\n queries: queries as unknown as QueryRegistry<TBuilders>,\n executionState,\n };\n\n const features = setupFeatures(config.features, featureSetupContext);\n\n setupMultiTabSyncIfEnabled(config, accessToken, refreshToken, queryClient);\n\n const provider = {\n queries,\n features: features as FeatureRegistry<TFeatures, TBuilders>,\n accessToken: accessToken.asReadonly(),\n refreshToken: refreshToken.asReadonly(),\n bearerData,\n isAuthenticated,\n latestExecutedQuery: latestExecutedQuery.asReadonly(),\n latestNonInternalQuery: latestNonInternalQuery.asReadonly(),\n executionState: executionState.asReadonly(),\n setTokens,\n logout,\n afterTokenRefresh$,\n } as BearerAuthProvider<TBuilders, TFeatures, TBearerData>;\n\n if (isQueryDevtoolsEnabled()) {\n const unregister = registerQueryDevtoolsEntry({\n kind: 'auth-provider',\n handle: provider,\n meta: {\n name: config.name,\n clientName: getQueryClientName(config.queryClientRef),\n clientBaseUrl: queryClient.baseUrl,\n repository: queryClient.repository,\n },\n });\n\n destroyRef.onDestroy(unregister);\n }\n\n return provider;\n};\n\nexport const createBearerAuthProvider = <\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData = unknown,\n>(\n config: CreateBearerAuthProviderConfig<TBuilders, TFeatures, TBearerData>,\n) => createRootProvider(() => createBearerAuthProviderImpl(config), { name: `BearerAuthProvider_${config.name}` });\n\nexport type BearerAuthProviderRef<\n TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[] =\n readonly ((context: BearerAuthProviderFeatureContext<unknown, readonly AnyQueryBuilder[]>) => unknown)[],\n TBearerData = unknown,\n> = ProviderResult<BearerAuthProvider<TBuilders, TFeatures, TBearerData>>;\n\nexport type AnyCreateBearerAuthProviderResult = BearerAuthProviderRef<any, any, any>; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n/**\n * The exact provider type behind a `createBearerAuthProvider` result — query keys, feature registry\n * and bearer data all preserved.\n *\n * Prefer this over {@link AnyBearerAuthProvider} whenever the provider is reachable as a value, e.g.\n * when passing one into a helper:\n *\n * ```ts\n * export const myApiAuthProviderRef = createBearerAuthProvider({ ... });\n * export type MyApiAuthProvider = BearerAuthProviderOf<typeof myApiAuthProviderRef>;\n *\n * const doLogin = (provider: MyApiAuthProvider) => provider.queries.login({ body: { ... } });\n * ```\n */\nexport type BearerAuthProviderOf<TRef extends AnyCreateBearerAuthProviderResult> = NonNullable<ReturnType<TRef[1]>>;\n\nexport type AnyBearerAuthProvider = Omit<NonNullable<ReturnType<AnyCreateBearerAuthProviderResult[1]>>, 'queries'> & {\n /**\n * Registry of all configured auth queries.\n *\n * Deliberately untyped here: with unknown builders the mapped type degrades to an index\n * signature, and `noPropertyAccessFromIndexSignature` then rejects `provider.queries.login`\n * (TS4111) — forcing every call site into bracket access or a hand-written structural contract.\n * Use {@link BearerAuthProviderOf} where the concrete provider is reachable and the keys survive.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n queries: any;\n};\n","import { isDevMode } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, of, switchMap, tap, timer } from 'rxjs';\nimport { QueryArgs, QueryCreator, RequestArgs, ResponseType } from '../http';\nimport { ShouldRetryRequestFn } from '../http/query-retry-utils';\nimport { decryptBearer } from '../legacy/auth';\nimport { BearerAuthProviderQueryContext } from './bearer-auth-provider';\n\nexport type BearerAuthProviderTokens = {\n accessToken: string;\n refreshToken: string;\n};\n\nexport type AuthQueryConfig<TArgs extends QueryArgs> = {\n queryCreator: QueryCreator<TArgs>;\n /**\n * Extracts tokens from the response.\n * @default (response) => response (assumes response has accessToken and refreshToken properties)\n */\n extractTokens?: (response: ResponseType<TArgs>) => BearerAuthProviderTokens;\n /**\n * Custom retry function for HTTP requests.\n * @internal Used internally by token refresh queries\n */\n retryFn?: ShouldRetryRequestFn;\n};\n\nexport type TokenRefreshQueryConfig<TArgs extends QueryArgs> = AuthQueryConfig<TArgs> & {\n /**\n * The property name in the decoded JWT that contains the expiration time (in seconds).\n * @default 'exp'\n */\n expiresInPropertyName?: string;\n\n /**\n * Strategy for determining when to refresh the token.\n * Can be either:\n * - A percentage (0-1) of the token's lifetime (e.g., 0.75 = refresh at 75% of lifetime)\n * - A fixed time in milliseconds before expiration\n * - An object with both percentage and min/max constraints\n * @default { percentage: 0.75, minBufferMs: 60000, maxBufferMs: 600000 }\n */\n refreshStrategy?:\n | number\n | {\n /**\n * Percentage of token lifetime before refresh (0-1)\n * @default 0.75\n */\n percentage?: number;\n /**\n * Minimum buffer time in ms (prevents too-early refresh for short-lived tokens)\n * @default 60000 (1 minute)\n */\n minBufferMs?: number;\n /**\n * Maximum buffer time in ms (prevents too-late refresh for long-lived tokens)\n * @default 600000 (10 minutes)\n */\n maxBufferMs?: number;\n };\n\n /**\n * Minimum interval between refresh attempts in milliseconds.\n * Prevents rapid refresh loops in case of issues.\n * @default 30000 (30 seconds)\n */\n minRefreshInterval?: number;\n\n /**\n * Whether to immediately refresh if token is already expired on startup.\n * @default true\n */\n refreshIfExpired?: boolean;\n\n /**\n * Configuration for retry behavior on failed refresh attempts.\n * @default { retryableStatusCodes: [0, 408, 425, 429, 500, 502, 503, 504], maxRetryDelayMs: 30000 }\n */\n retryConfig?: {\n /**\n * HTTP status codes that should trigger a retry.\n * Code 0 means network error (no internet).\n * @default [0, 408, 425, 429, 500, 502, 503, 504]\n */\n retryableStatusCodes?: number[];\n /**\n * Maximum delay between retries in milliseconds.\n * Uses exponential backoff up to this limit, then stays constant.\n * @default 30000 (30 seconds)\n */\n maxRetryDelayMs?: number;\n /**\n * Maximum number of retry attempts.\n * Set to 0 for unlimited retries.\n * @default 0 (unlimited)\n */\n maxAttempts?: number;\n };\n\n /**\n * Whether to automatically retry failed requests with 401 status after refreshing tokens.\n * @default true\n */\n autoRetryOn401?: boolean;\n};\n\nexport type AuthQueryBuilder<TKey extends string, TArgs extends QueryArgs> = {\n _type: 'authQuery';\n key: TKey;\n config: AuthQueryConfig<TArgs>;\n setup?: (context: BearerAuthProviderQueryContext) => void;\n};\n\nexport type TokenRefreshQueryBuilder<TKey extends string, TArgs extends QueryArgs> = {\n _type: 'tokenRefreshQuery';\n key: TKey;\n config: TokenRefreshQueryConfig<TArgs>;\n setup?: (context: BearerAuthProviderQueryContext) => void;\n};\n\nexport type AnyQueryBuilder =\n | AuthQueryBuilder<string, any> // eslint-disable-line @typescript-eslint/no-explicit-any\n | TokenRefreshQueryBuilder<string, any>; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nexport const withAuthenticationQuery = <TKey extends string, TArgs extends QueryArgs>(\n key: TKey,\n config: AuthQueryConfig<TArgs>,\n setup?: (context: BearerAuthProviderQueryContext) => void,\n): AuthQueryBuilder<TKey, TArgs> => ({\n _type: 'authQuery',\n key,\n config: {\n ...config,\n queryCreator: config.queryCreator.clone({ subtle: { useQueryRepositoryCache: true } }),\n },\n setup,\n});\n\nexport const withRefreshQuery = <TKey extends string, TArgs extends QueryArgs>(\n key: TKey,\n config: TokenRefreshQueryConfig<TArgs>,\n): TokenRefreshQueryBuilder<TKey, TArgs> => {\n const retryableStatusCodes = config.retryConfig?.retryableStatusCodes ?? [0, 408, 425, 429, 500, 502, 503, 504];\n const maxRetryDelayMs = config.retryConfig?.maxRetryDelayMs ?? 30000; // 30 seconds\n const maxAttempts = config.retryConfig?.maxAttempts ?? 0; // 0 = unlimited\n\n const refreshRetryFn: ShouldRetryRequestFn = ({ error, retryCount }) => {\n const { status } = error;\n\n if (maxAttempts > 0 && retryCount >= maxAttempts) {\n return { retry: false };\n }\n\n if (!retryableStatusCodes.includes(status)) {\n return { retry: false };\n }\n\n if (status === 429) {\n const retryAfter = error.headers.get('retry-after') || error.headers.get('x-retry-after');\n if (retryAfter) {\n const delay = parseInt(retryAfter) * 1000;\n if (!Number.isNaN(delay)) {\n return { retry: true, delay: Math.min(delay, maxRetryDelayMs) };\n }\n }\n }\n\n const exponentialDelay = 1000 * Math.pow(2, retryCount);\n const delay = Math.min(exponentialDelay, maxRetryDelayMs);\n\n return { retry: true, delay };\n };\n\n const setup = (context: BearerAuthProviderQueryContext) => {\n const expiresInPropertyName = config.expiresInPropertyName ?? 'exp';\n const minRefreshInterval = config.minRefreshInterval ?? 30000; // 30 seconds default\n const refreshIfExpired = config.refreshIfExpired ?? true;\n\n let lastRefreshTime = 0;\n\n const executeRefresh = (triggeredInternally = true) => {\n const currentRefreshToken = context.refreshToken();\n if (!currentRefreshToken || !context.isLeader()) return;\n\n const now = Date.now();\n const timeSinceLastRefresh = now - lastRefreshTime;\n\n // Prevent too-frequent refreshes\n if (timeSinceLastRefresh < minRefreshInterval) return;\n\n lastRefreshTime = now;\n const refreshArgs = { body: { token: currentRefreshToken } } as RequestArgs<QueryArgs>;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n context.queries[key]!.execute(refreshArgs, {\n triggeredBy: triggeredInternally ? 'token-refresh' : undefined,\n });\n };\n\n const calculateRefreshBuffer = (tokenLifetimeMs: number): number => {\n if (typeof config.refreshStrategy === 'number') {\n return config.refreshStrategy;\n }\n\n const percentage = config.refreshStrategy?.percentage ?? 0.75;\n const minBufferMs = config.refreshStrategy?.minBufferMs ?? 60000; // 1 minute\n const maxBufferMs = config.refreshStrategy?.maxBufferMs ?? 600000; // 10 minutes\n\n const calculatedBuffer = tokenLifetimeMs * (1 - percentage);\n\n return Math.max(minBufferMs, Math.min(maxBufferMs, calculatedBuffer));\n };\n\n // Auto-refresh based on token expiration\n toObservable(context.accessToken)\n .pipe(\n switchMap((token) => {\n if (!token) return of(null);\n\n try {\n const bearerDataValue = context.bearerDecryptFn ? context.bearerDecryptFn(token) : decryptBearer(token);\n const expiresIn = (bearerDataValue as Record<string, unknown>)?.[expiresInPropertyName];\n\n if (typeof expiresIn !== 'number') {\n if (isDevMode()) {\n console.warn(`Token does not contain valid ${expiresInPropertyName} property for auto-refresh`);\n }\n return of(null);\n }\n\n const expiresAtMs = expiresIn * 1000;\n const now = Date.now();\n const tokenLifetimeMs = expiresAtMs - now;\n\n if (tokenLifetimeMs <= 0) {\n if (refreshIfExpired) {\n if (isDevMode()) {\n console.warn('Token is already expired, triggering immediate refresh');\n }\n return of(true);\n }\n return of(null);\n }\n\n const refreshBufferMs = calculateRefreshBuffer(tokenLifetimeMs);\n const timeUntilRefresh = tokenLifetimeMs - refreshBufferMs;\n\n if (timeUntilRefresh <= 0) {\n return of(true);\n }\n\n return timer(timeUntilRefresh).pipe(tap(() => true));\n } catch {\n return of(null);\n }\n }),\n takeUntilDestroyed(),\n )\n .subscribe((shouldRefresh) => {\n if (shouldRefresh) {\n executeRefresh(true);\n }\n });\n\n // Auto-retry on 401: Listen to repository events and trigger refresh on 401 errors\n const autoRetryOn401 = config.autoRetryOn401 ?? true;\n if (autoRetryOn401) {\n context.repository.events$\n .pipe(\n filter((event) => {\n // Only handle 401 errors for secure queries\n if (event.type !== 'request-error') return false;\n if (!event.isSecure) return false;\n if (event.error?.status !== 401) return false;\n\n return true;\n }),\n takeUntilDestroyed(),\n )\n .subscribe(() => {\n executeRefresh(true);\n });\n }\n };\n\n return {\n _type: 'tokenRefreshQuery',\n key,\n config: {\n ...config,\n queryCreator: config.queryCreator.clone({ retryFn: refreshRetryFn, subtle: { useQueryRepositoryCache: true } }),\n },\n setup,\n };\n};\n","import { DestroyRef, DOCUMENT, effect, inject, Signal, signal } from '@angular/core';\nimport { filter, fromEvent, interval, merge, switchMap, throttleTime, timer } from 'rxjs';\nimport { AnyQueryBuilder, BearerAuthFeatureType, BearerAuthProviderFeatureContext } from '../bearer-auth-provider';\n\nexport type InactivityLogoutConfig = {\n /**\n * Time in milliseconds of inactivity before auto-logout\n * @default 15 * 60 * 1000 (15 minutes)\n */\n inactivityTimeout?: number;\n /**\n * Events to track for activity detection\n * @default ['mousedown', 'keydown', 'scroll', 'touchstart']\n */\n activityEvents?: string[];\n /**\n * Custom activity check function (called periodically)\n * Return true if user is active\n */\n customActivityCheck?: () => boolean;\n};\n\nexport type InactivityLogoutFeature = {\n /**\n * Enable inactivity tracking\n */\n enable: () => void;\n /**\n * Disable inactivity tracking\n */\n disable: () => void;\n /**\n * Reset the inactivity timer (mark user as active)\n */\n resetTimer: () => void;\n /**\n * Whether inactivity tracking is enabled\n */\n enabled: Signal<boolean>;\n /**\n * Milliseconds until auto-logout (null if disabled or no token)\n */\n calculateTimeUntilLogout: () => number | null;\n};\n\nexport const withInactivityLogout = <TBuilders extends readonly AnyQueryBuilder[]>(\n config: InactivityLogoutConfig = {},\n) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n const inactivityTimeout = config.inactivityTimeout ?? 15 * 60 * 1000;\n const activityEvents = config.activityEvents ?? ['mousedown', 'keydown', 'scroll', 'touchstart'];\n const destroyRef = inject(DestroyRef);\n const document = inject(DOCUMENT);\n const enabled = signal(true);\n const lastActivityTime = signal(Date.now());\n\n const resetTimer = () => {\n lastActivityTime.set(Date.now());\n };\n\n const activityFromEvents$ = merge(...activityEvents.map((event) => fromEvent(document, event))).pipe(\n throttleTime(1000),\n );\n\n const activityFromCustomCheck$ = config.customActivityCheck\n ? interval(1000).pipe(filter(() => config.customActivityCheck?.() ?? false))\n : merge();\n\n const activity$ = merge(activityFromEvents$, activityFromCustomCheck$);\n\n const activitySubscription = activity$.subscribe(() => {\n if (enabled() && context.accessToken()) {\n resetTimer();\n }\n });\n\n const inactivityLogout$ = activity$.pipe(\n switchMap(() => timer(inactivityTimeout)),\n filter(() => enabled() && !!context.accessToken()),\n );\n\n const logoutSubscription = inactivityLogout$.subscribe(() => {\n context.logout();\n });\n\n effect(() => {\n const token = context.accessToken();\n if (token && enabled()) {\n resetTimer();\n }\n });\n\n const enable = () => {\n enabled.set(true);\n resetTimer();\n };\n\n const disable = () => {\n enabled.set(false);\n };\n\n const calculateTimeUntilLogout = () => {\n if (!enabled() || !context.accessToken()) {\n return null;\n }\n\n const elapsed = Date.now() - lastActivityTime();\n const remaining = inactivityTimeout - elapsed;\n\n return remaining > 0 ? remaining : 0;\n };\n\n resetTimer();\n\n destroyRef.onDestroy(() => {\n activitySubscription.unsubscribe();\n logoutSubscription.unsubscribe();\n });\n\n const instance: InactivityLogoutFeature = {\n enable,\n disable,\n resetTimer,\n enabled: enabled.asReadonly(),\n calculateTimeUntilLogout,\n };\n\n return {\n type: BearerAuthFeatureType.INACTIVITY_LOGOUT,\n instance,\n };\n };\n};\n","import { Signal, effect, signal } from '@angular/core';\nimport { deleteCookie as coreDeleteCookie, getCookie, getDomain, injectRoute, setCookie } from '@ethlete/core';\nimport { RequestArgs } from '../../http';\nimport {\n AnyQueryBuilder,\n BearerAuthFeatureType,\n BearerAuthProviderFeatureContext,\n ExtractQueryArgs,\n ExtractQueryKey,\n} from '../bearer-auth-provider';\nimport { decryptToken, encryptToken } from '../utils';\n\nexport type PersistentAuthConfig<\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n> = {\n /**\n * Default remember me state when no user preference is stored.\n * @default false\n */\n defaultRememberMe?: boolean;\n\n /**\n * Cookie configuration\n */\n cookie?: {\n /**\n * The cookie name where the refresh token is stored\n * @default 'etAuth'\n */\n name?: string;\n /**\n * The domain of the cookie. If not set, the current origin will be used.\n */\n domain?: string;\n /**\n * The days until the cookie expires (only used when rememberMe is true)\n * @default 30\n */\n expiresInDays?: number;\n /**\n * The path of the cookie\n * @default '/'\n */\n path?: string;\n /**\n * The same site property of the cookie\n * @default 'lax'\n */\n sameSite?: 'strict' | 'none' | 'lax';\n };\n\n /**\n * Auto-login configuration\n */\n autoLogin: {\n /**\n * The query key to use for auto-login (must reference a registered query)\n */\n queryKey: TKey;\n /**\n * A function that turns the token gotten from the cookie into the body for the auto-login request\n * @default (token) => ({ body: { token } })\n */\n buildArgs: (token: string) => RequestArgs<ExtractQueryArgs<Extract<TBuilders[number], { key: TKey }>>>;\n /**\n * An array of routes where the auto login via cookie should not be triggered.\n *\n * @default []\n */\n excludeRoutes?: string[];\n };\n};\n\nexport type PersistentAuthFeature = {\n /**\n * Current remember me state (session cookie vs persistent cookie)\n */\n rememberMe: Signal<boolean>;\n /**\n * Set remember me preference.\n * - true: Creates persistent cookie with expiresInDays\n * - false: Creates session cookie (deleted on browser close)\n */\n setRememberMe: (enabled: boolean) => void;\n /**\n * Try to login using stored cookie\n */\n tryLogin: () => void;\n};\n\nexport const withPersistentAuth = <\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n>(\n config: PersistentAuthConfig<TBuilders, TKey>,\n) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n const instance = createPersistentAuthFeature(config, context);\n return {\n type: BearerAuthFeatureType.PERSISTENT_AUTH,\n instance,\n };\n };\n};\n\nexport const createPersistentAuthFeature = <\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n>(\n config: PersistentAuthConfig<TBuilders, TKey>,\n context: BearerAuthProviderFeatureContext<unknown, TBuilders>,\n): PersistentAuthFeature => {\n const { refreshToken } = context;\n const cookieName = config.cookie?.name ?? 'etAuth';\n const rememberMeStorageKey = `${cookieName}-rememberMe`;\n const route = injectRoute();\n\n const initializeRememberMe = (): boolean => {\n const storedPreference = typeof localStorage !== 'undefined' ? localStorage.getItem(rememberMeStorageKey) : null;\n if (storedPreference !== null) {\n return storedPreference === 'true';\n }\n\n const existingCookie = getCookie(cookieName);\n if (existingCookie) {\n return true;\n }\n\n return config.defaultRememberMe ?? false;\n };\n\n const rememberMeSignal = signal(initializeRememberMe());\n\n effect(() => {\n const token = refreshToken();\n const rememberMe = rememberMeSignal();\n const domain = config.cookie?.domain ?? getDomain() ?? 'localhost';\n const path = config.cookie?.path ?? '/';\n const sameSite = config.cookie?.sameSite ?? 'lax';\n\n if (token) {\n const encryptedToken = encryptToken(token);\n if (rememberMe) {\n const expiresInDays = config.cookie?.expiresInDays ?? 30;\n setCookie(cookieName, encryptedToken, expiresInDays, domain, path, sameSite);\n } else {\n setCookie(cookieName, encryptedToken, null, domain, path, sameSite);\n }\n } else {\n coreDeleteCookie(cookieName, path, domain);\n }\n });\n\n const tryLogin = () => {\n const currentRoute = route();\n const excludeRoutes = config.autoLogin.excludeRoutes ?? [];\n const shouldExclude = excludeRoutes.some((r) => currentRoute.startsWith(r));\n\n if (shouldExclude) {\n return;\n }\n\n const storedToken = getCookie(cookieName);\n if (storedToken) {\n const decryptedToken = decryptToken(storedToken);\n const args = config.autoLogin.buildArgs(decryptedToken);\n context.queries[config.autoLogin.queryKey].execute(args, { triggeredBy: 'persistent-auth' });\n }\n };\n\n const setRememberMe = (enabled: boolean) => {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(rememberMeStorageKey, String(enabled));\n }\n rememberMeSignal.set(enabled);\n };\n\n tryLogin();\n\n return {\n rememberMe: rememberMeSignal.asReadonly(),\n setRememberMe,\n tryLogin,\n };\n};\n","import { Signal, computed } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { combineLatest, interval, map } from 'rxjs';\nimport { AnyQueryBuilder, BearerAuthFeatureType, BearerAuthProviderFeatureContext } from '../bearer-auth-provider';\n\nexport type TokenExpirationWarningConfig = {\n /**\n * Time in milliseconds before token expiration to emit warning\n * @default 5 * 60 * 1000 (5 minutes)\n */\n warningThreshold?: number;\n /**\n * Interval in milliseconds to check for token expiration\n * @default 1000 (1 second)\n */\n checkInterval?: number;\n};\n\nexport type TokenExpirationWarningFeature = {\n /**\n * Signal that emits true when token is about to expire\n */\n isExpiringSoon: Signal<boolean>;\n /**\n * Time in milliseconds until token expires (null if no token or expired)\n */\n expiresIn: Signal<number | null>;\n /**\n * Timestamp when token expires (null if no token)\n */\n expiresAt: Signal<Date | null>;\n};\n\nexport const withTokenExpirationWarning = <TBuilders extends readonly AnyQueryBuilder[]>(\n config: NoInfer<TokenExpirationWarningConfig> = {},\n) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n const warningThreshold = config.warningThreshold ?? 5 * 60 * 1000;\n const checkInterval = config.checkInterval ?? 1000;\n const expiresAt = computed<Date | null>(() => {\n const decoded = context.bearerData() as { exp?: number; [key: string]: unknown } | null;\n if (!decoded) return null;\n\n const exp = decoded.exp;\n\n if (typeof exp !== 'number') return null;\n\n return new Date(exp * 1000);\n });\n\n const expiresIn$ = combineLatest([interval(checkInterval), toObservable(context.bearerData)]).pipe(\n map(() => {\n const expiry = expiresAt();\n if (!expiry) return null;\n\n const now = Date.now();\n const msUntilExpiry = expiry.getTime() - now;\n\n return msUntilExpiry > 0 ? msUntilExpiry : null;\n }),\n );\n\n const isExpiringSoon$ = expiresIn$.pipe(\n map((msUntilExpiry) => {\n if (msUntilExpiry === null) return false;\n return msUntilExpiry <= warningThreshold && msUntilExpiry > 0;\n }),\n );\n\n const expiresIn = toSignal(expiresIn$, { initialValue: null });\n const isExpiringSoon = toSignal(isExpiringSoon$, { initialValue: false });\n\n const instance: TokenExpirationWarningFeature = {\n expiresAt,\n expiresIn,\n isExpiringSoon,\n };\n\n return {\n type: BearerAuthFeatureType.TOKEN_EXPIRATION_WARNING,\n instance,\n };\n };\n};\n","import { effect, Signal, signal, untracked } from '@angular/core';\nimport { AnyQuerySnapshot, QuerySnapshot, RequestArgs } from '../../http';\nimport {\n AnyQueryBuilder,\n BearerAuthFeatureType,\n BearerAuthProviderFeatureContext,\n ExtractQueryArgs,\n ExtractQueryKey,\n} from '../bearer-auth-provider';\n\nexport type TokenRevocationConfig<\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n> = {\n /**\n * The query key to use for token revocation (must reference a registered query)\n */\n queryKey: TKey;\n /**\n * Function to build the revocation request args from tokens\n */\n buildArgs: (tokens: {\n accessToken: string | null;\n refreshToken: string | null;\n }) => RequestArgs<ExtractQueryArgs<Extract<TBuilders[number], { key: TKey }>>>;\n /**\n * Whether to revoke on logout\n * @default true\n */\n revokeOnLogout?: boolean;\n};\n\nexport type TokenRevocationFeature<TQuerySnapshot extends AnyQuerySnapshot> = {\n /**\n * Manually revoke the current tokens.\n * Returns `null` if there are no tokens to revoke\n * Returns the revocation query snapshot if revocation was attempted\n */\n revoke: () => TQuerySnapshot | null;\n /**\n * Enable automatic revocation on logout\n */\n enable: () => void;\n /**\n * Disable automatic revocation on logout\n */\n disable: () => void;\n /**\n * Whether automatic revocation is enabled\n */\n enabled: Signal<boolean>;\n};\n\nexport const withTokenRevocation = <\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n>(\n config: TokenRevocationConfig<TBuilders, TKey>,\n) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n type RevocationSnapshot = QuerySnapshot<ExtractQueryArgs<Extract<TBuilders[number], { key: TKey }>>>;\n\n const revokeOnLogout = config.revokeOnLogout ?? true;\n\n const enabled = signal(true);\n let previousAccessToken: string | null = null;\n let previousRefreshToken: string | null = null;\n let currentRevocationSnapshot: RevocationSnapshot | null = null;\n\n const revokeWithTokens = (accessToken: string | null, refreshToken: string | null) => {\n if (currentRevocationSnapshot?.isAlive()) return currentRevocationSnapshot;\n\n if (!accessToken && !refreshToken) {\n return null;\n }\n\n const args = config.buildArgs({ accessToken, refreshToken });\n\n context.executionState.set({ type: 'revocation', state: 'loading' });\n\n currentRevocationSnapshot = context.queries[config.queryKey].execute(args, {\n triggeredBy: 'token-revocation',\n });\n\n return currentRevocationSnapshot;\n };\n\n const revoke = () => {\n return revokeWithTokens(context.accessToken(), context.refreshToken());\n };\n\n const enable = () => {\n enabled.set(true);\n };\n\n const disable = () => {\n enabled.set(false);\n };\n\n if (revokeOnLogout) {\n effect(\n () => {\n const currentToken = context.accessToken();\n const currentRefreshToken = context.refreshToken();\n\n if (previousAccessToken && !currentToken && enabled()) {\n untracked(() => revokeWithTokens(previousAccessToken, previousRefreshToken));\n }\n\n previousAccessToken = currentToken;\n previousRefreshToken = currentRefreshToken;\n },\n { injector: context.injector },\n );\n }\n\n const instance: TokenRevocationFeature<RevocationSnapshot> = {\n revoke,\n enable,\n disable,\n enabled: enabled.asReadonly(),\n };\n\n return {\n type: BearerAuthFeatureType.TOKEN_REVOCATION,\n instance,\n };\n };\n};\n","import { effect, Signal } from '@angular/core';\nimport { QueryArgs, QueryErrorResponse, QuerySnapshot } from '../../http';\nimport {\n AnyQueryBuilder,\n BearerAuthFeatureType,\n BearerAuthProviderFeatureContext,\n ExtractQueryArgs,\n ExtractQueryKey,\n} from '../bearer-auth-provider';\n\nexport type TrackingEventName<TBuilders extends readonly AnyQueryBuilder[]> =\n | `${ExtractQueryKey<TBuilders[number]>}Execute`\n | `${ExtractQueryKey<TBuilders[number]>}Success`\n | `${ExtractQueryKey<TBuilders[number]>}Failure`\n | 'tokenRefreshSuccess'\n | 'logout'\n | 'leaderStatusChange'\n | 'leaderInstanceCountChange';\n\ntype ExtractKeyFromEventName<TEventName extends string> = TEventName extends `${infer K}Execute`\n ? K\n : TEventName extends `${infer K}Success`\n ? K\n : TEventName extends `${infer K}Failure`\n ? K\n : never;\n\ntype ExtractArgsForEvent<TBuilders extends readonly AnyQueryBuilder[], TEventName extends string> = ExtractQueryArgs<\n Extract<TBuilders[number], { key: ExtractKeyFromEventName<TEventName> }>\n>;\n\nexport type QueryExecuteEventData<TArgs extends QueryArgs = QueryArgs> = {\n queryKey: string;\n args: TArgs;\n};\n\nexport type QuerySuccessEventData<TArgs extends QueryArgs = QueryArgs> = {\n snapshot: QuerySnapshot<TArgs>;\n};\n\nexport type QueryFailureEventData = {\n error: QueryErrorResponse;\n};\n\nexport type TokenRefreshEventData = {\n automatic: boolean;\n};\n\nexport type LeaderStatusChangeEventData = {\n isLeader: boolean;\n};\n\nexport type LeaderInstanceCountChangeEventData = {\n count: number;\n};\n\nexport type TrackingEventDataMap<TBuilders extends readonly AnyQueryBuilder[]> = {\n [K in TrackingEventName<TBuilders>]: K extends `${string}Execute`\n ? QueryExecuteEventData<ExtractArgsForEvent<TBuilders, K>>\n : K extends `${string}Success`\n ? QuerySuccessEventData<ExtractArgsForEvent<TBuilders, K>>\n : K extends `${string}Failure`\n ? QueryFailureEventData\n : K extends 'tokenRefreshSuccess'\n ? TokenRefreshEventData\n : K extends 'logout'\n ? void\n : K extends 'leaderStatusChange'\n ? LeaderStatusChangeEventData\n : K extends 'leaderInstanceCountChange'\n ? LeaderInstanceCountChangeEventData\n : never;\n};\n\nexport type TrackingEventHandler<TData> = (data: TData) => void;\n\nexport type TrackingConfig<TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[]> = {\n /**\n * Whether to track internal events (auto token refresh, etc.)\n * @default true\n */\n trackInternalEvents?: boolean;\n\n /**\n * Event handlers to register immediately\n */\n on?: {\n [K in TrackingEventName<TBuilders>]?: TrackingEventHandler<TrackingEventDataMap<TBuilders>[K]>;\n };\n};\n\nexport type TrackingFeature<TBuilders extends readonly AnyQueryBuilder[]> = {\n /**\n * Register an event handler for a specific event\n * @returns Unsubscribe function\n */\n on<TEvent extends TrackingEventName<TBuilders>>(\n event: TEvent,\n handler: TrackingEventHandler<TrackingEventDataMap<TBuilders>[TEvent]>,\n ): () => void;\n\n /**\n * Unregister an event handler\n */\n off<TEvent extends TrackingEventName<TBuilders>>(\n event: TEvent,\n handler: TrackingEventHandler<TrackingEventDataMap<TBuilders>[TEvent]>,\n ): void;\n};\n\nexport const withTracking = <TBuilders extends readonly AnyQueryBuilder[]>(config?: TrackingConfig<TBuilders>) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n const instance = createTrackingFeature<TBuilders>(context, config);\n return {\n type: BearerAuthFeatureType.TRACKING,\n instance,\n };\n };\n};\n\nexport const createTrackingFeature = <TBuilders extends readonly AnyQueryBuilder[]>(\n context: BearerAuthProviderFeatureContext<unknown, TBuilders>,\n config?: TrackingConfig<TBuilders>,\n): TrackingFeature<TBuilders> => {\n const handlers = new Map<string, Set<TrackingEventHandler<any>>>(); // eslint-disable-line @typescript-eslint/no-explicit-any\n\n const on = <TEvent extends TrackingEventName<TBuilders>>(\n event: TEvent,\n handler: TrackingEventHandler<TrackingEventDataMap<TBuilders>[TEvent]>,\n ): (() => void) => {\n if (!handlers.has(event)) {\n handlers.set(event, new Set());\n }\n const eventHandlers = handlers.get(event);\n if (eventHandlers) {\n eventHandlers.add(handler);\n }\n\n return () => off(event, handler);\n };\n\n const off = <TEvent extends TrackingEventName<TBuilders>>(\n event: TEvent,\n handler: TrackingEventHandler<TrackingEventDataMap<TBuilders>[TEvent]>,\n ): void => {\n const eventHandlers = handlers.get(event);\n if (eventHandlers) {\n eventHandlers.delete(handler);\n if (eventHandlers.size === 0) {\n handlers.delete(event);\n }\n }\n };\n\n const fireHandlers = (event: string, data: unknown): void => {\n const eventHandlers = handlers.get(event);\n if (eventHandlers) {\n eventHandlers.forEach((handler) => {\n try {\n handler(data);\n } catch (error) {\n console.error(`Error in tracking event handler for \"${event}\":`, error);\n }\n });\n }\n };\n\n type ForwardedMessage = { event: string; data: unknown };\n const forwardingChannel =\n context.leaderElection && typeof BroadcastChannel !== 'undefined'\n ? new BroadcastChannel('ethlete-auth-tracking')\n : null;\n\n if (forwardingChannel) {\n forwardingChannel.onmessage = (messageEvent: MessageEvent<ForwardedMessage>) => {\n if (context.isLeader()) {\n fireHandlers(messageEvent.data.event, messageEvent.data.data);\n }\n };\n context.destroyRef.onDestroy(() => forwardingChannel.close());\n }\n\n const emit = (event: string, data: unknown): void => {\n if (forwardingChannel && !context.isLeader()) {\n forwardingChannel.postMessage({ event, data } satisfies ForwardedMessage);\n return;\n }\n fireHandlers(event, data);\n };\n\n const emitDirect = (event: string, data: unknown): void => {\n fireHandlers(event, data);\n };\n\n const trackedQueries = new Map<string, { loading: boolean; lastResult: 'success' | 'error' | null }>();\n\n Object.entries(context.queries).forEach(([key, queryEntry]) => {\n const query = queryEntry as { snapshot: Signal<any>; execute: (...args: any[]) => any }; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n effect(() => {\n const snapshot = query.snapshot();\n if (!snapshot) return;\n\n const triggeredBy = snapshot.triggeredBy();\n if (triggeredBy) return;\n\n const loading = snapshot.loading();\n const error = snapshot.error();\n const response = snapshot.response();\n\n const prevState = trackedQueries.get(key);\n\n if (response && !loading && !error && prevState?.lastResult !== 'success') {\n trackedQueries.set(key, { loading: false, lastResult: 'success' });\n emit(`${key}Success`, { snapshot });\n }\n\n if (error && !loading && prevState?.lastResult !== 'error') {\n trackedQueries.set(key, { loading: false, lastResult: 'error' });\n emit(`${key}Failure`, { error });\n }\n\n if (loading) {\n trackedQueries.set(key, { loading: true, lastResult: null });\n }\n });\n });\n\n let hadTokens = false;\n effect(() => {\n const accessToken = context.accessToken();\n const refreshToken = context.refreshToken();\n const hasTokens = !!(accessToken || refreshToken);\n\n if (hadTokens && !hasTokens) {\n emit('logout', undefined);\n }\n\n hadTokens = hasTokens;\n });\n\n context.afterTokenRefresh$.subscribe(() => {\n emit('tokenRefreshSuccess', {\n queryKey: 'refresh',\n snapshot: undefined,\n });\n });\n\n if (config?.on) {\n Object.entries(config.on).forEach(([event, handler]) => {\n if (handler) {\n on(event as TrackingEventName<TBuilders>, handler);\n }\n });\n }\n\n if (context.leaderElection) {\n const { isLeader: isLeaderSignal, instanceCount: instanceCountSignal } = context.leaderElection;\n\n effect(() => {\n emitDirect('leaderStatusChange', { isLeader: isLeaderSignal() } satisfies LeaderStatusChangeEventData);\n });\n\n effect(() => {\n emitDirect('leaderInstanceCountChange', {\n count: instanceCountSignal(),\n } satisfies LeaderInstanceCountChangeEventData);\n });\n }\n\n return {\n on,\n off,\n };\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})\nexport class ParseHttpErrorCodeToTitleDePipe implements PipeTransform {\n transform = parseHttpErrorCodeToTitleDe;\n}\n\n@Pipe({\n name: 'parseHttpErrorCodeToMessageDe',\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})\nexport class ParseHttpErrorCodeToTitleEnPipe implements PipeTransform {\n transform = parseHttpErrorCodeToTitleEn;\n}\n\n@Pipe({\n name: 'parseHttpErrorCodeToMessageEn',\n})\nexport class ParseHttpErrorCodeToMessageEnPipe implements PipeTransform {\n transform = parseHttpErrorCodeToMessageEn;\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 type SortDirection = 'asc' | 'desc' | '';\n\nexport type Sort = {\n active: string;\n direction: SortDirection;\n};\n\nexport const transformToSort = (value: unknown): Sort | null => {\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 { FormControl, 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 OptionalQueryFieldOptions,\n QueryFieldOptions,\n QueryFormGroup,\n QueryFormGroupControls,\n QueryFormObserveOptions,\n QueryFormValue,\n QueryFormValueEvent,\n QueryFormWriteOptions,\n} from './query-form.types';\nimport {\n Sort,\n transformToBoolean,\n transformToBooleanArray,\n transformToDate,\n transformToDateArray,\n transformToNumber,\n transformToNumberArray,\n transformToSort,\n transformToSortQueryParam,\n transformToStringArray,\n} from './query-form.utils';\n\nconst ET_ARR_PREFIX = 'ET_ARR__';\nconst ET_OBJ_PREFIX = 'ET_OBJ__';\nconst ET_PROP_NULL_VALUE = 'ET_NULL__';\n\nexport class QueryField<T> {\n get control() {\n return this.data.control;\n }\n\n constructor(public data: QueryFieldOptions<T>) {}\n}\n\nexport class SearchQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<string | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<string | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<string | null>(null),\n debounce: 300,\n disableDebounceIfFalsy: true,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class SortQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<Sort | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<Sort | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<Sort | null>(null),\n queryParamToValueTransformFn: transformToSort,\n valueToQueryParamTransformFn: transformToSortQueryParam,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class StringArrayQueryField<T extends string[]> {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<T | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<T | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<T | null>(null),\n queryParamToValueTransformFn: transformToStringArray as (val: unknown) => T | null,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class BooleanArrayQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<boolean[] | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<boolean[] | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<boolean[] | null>(null),\n queryParamToValueTransformFn: transformToBooleanArray,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class NumberArrayQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<number[] | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<number[] | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<number[] | null>(null),\n queryParamToValueTransformFn: transformToNumberArray,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class DateQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<Date | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<Date | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<Date | null>(null),\n queryParamToValueTransformFn: transformToDate,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class DateArrayQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<Date[] | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<Date[] | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<Date[] | null>(null),\n queryParamToValueTransformFn: transformToDateArray,\n ...(_data ?? {}),\n };\n }\n}\n\nconst IGNORED_FILTER_COUNT_FIELDS = ['page', 'skip', 'take', 'limit', 'sort', 'sortBy', 'sortOrder', 'query', 'search'];\n\nexport type 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 const defaultValue = this._getDefaultValue(key);\n if (!equal(field.control.value, defaultValue)) {\n field.control.setValue(defaultValue, { emitEvent: false });\n didValueChanges = true;\n }\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 = typeof 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 (value === ET_PROP_NULL_VALUE) {\n deserializedValue = null;\n } else if (\n defaultIsNum ||\n (valueIsNum && !valueContainsWhitespace && !valueHasLeadingZero && !valueEndsWithDot)\n ) {\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 === 'string' && val.startsWith(ET_OBJ_PREFIX)) {\n return JSON.parse(val.slice(ET_OBJ_PREFIX.length));\n } else if (typeof val === 'function') {\n return val();\n } else if (val === ET_PROP_NULL_VALUE) {\n return null;\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)\n ? `${ET_ARR_PREFIX}${JSON.stringify(value)}`\n : typeof value === 'object' && value !== null\n ? `${ET_OBJ_PREFIX}${JSON.stringify(value)}`\n : value === null\n ? ET_PROP_NULL_VALUE\n : value;\n\n return this._defaultValues[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 if (typeof value === 'object' && value !== null) {\n defaultValues[key] = `${ET_OBJ_PREFIX}${JSON.stringify(value)}`;\n } else if (value === null) {\n defaultValues[key] = ET_PROP_NULL_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 === null\n ? ET_PROP_NULL_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 // Normalize values that have a valueToQueryParamTransformFn returning null/undefined to their\n // field default before capturing the new value. This prevents intermediate \"empty object\" states\n // (e.g. Sort emitting { active: '', direction: '' } when cleared) from being\n // emitted as distinct form values.\n for (const [key, field] of Object.entries(this._fields)) {\n if (!field.data.valueToQueryParamTransformFn) continue;\n const rawValue = (this._formValue as Record<string, unknown>)[key];\n if (this._isDefaultValue(key, rawValue)) continue;\n const serialized = field.data.valueToQueryParamTransformFn(rawValue);\n if (serialized !== null && serialized !== undefined) continue;\n this.form.controls[key]?.setValue(this._getDefaultValue(key), { emitEvent: false });\n }\n\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 if (!this._isObserving) return;\n\n this._isObserving = false;\n\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","import {\n DestroyRef,\n Injector,\n Signal,\n assertInInjectionContext,\n computed,\n effect,\n inject,\n isDevMode,\n signal,\n untracked,\n} from '@angular/core';\nimport { FieldTree, form } from '@angular/forms/signals';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ET_PROPERTY_REMOVED, clone, equal, injectQueryParamChanges } from '@ethlete/core';\nimport { transformToBoolean, transformToNumber } from '../query-form/query-form.utils';\nimport {\n QueryFieldDef,\n QueryFormChange,\n QueryFormFields,\n QueryFormModel,\n QueryFormSignalsObserveOptions,\n QueryFormSignalsWriteOptions,\n} from './query-form-signals.types';\n\n/** URL sentinel for an explicit `null` value (a bare empty param would be ambiguous). */\nconst ET_NULL_VALUE = 'ET_NULL__';\n\n/**\n * Fields excluded from `activeFilterCount` by default — pagination, sorting and\n * search are navigation state, not filters.\n */\nexport const IGNORED_FILTER_COUNT_FIELDS: readonly string[] = [\n 'page',\n 'skip',\n 'take',\n 'limit',\n 'sort',\n 'sortBy',\n 'sortOrder',\n 'query',\n 'search',\n];\n\ntype Dict = Record<string, unknown>;\n\nconst resolveDefault = (def: QueryFieldDef<unknown>): unknown => {\n const { defaultValue } = def;\n\n return typeof defaultValue === 'function' ? (defaultValue as () => unknown)() : (defaultValue ?? null);\n};\n\nconst buildDefaults = (fields: QueryFormFields): Dict => {\n const out: Dict = {};\n\n for (const [key, def] of Object.entries(fields)) {\n out[key] = resolveDefault(def);\n }\n\n return out;\n};\n\nconst changedKeysBetween = (previous: Dict | null, current: Dict): string[] =>\n Object.keys(current).filter((key) => !equal(previous?.[key], current[key]));\n\n/** Best-effort URL string → value coercion, mirroring the auto-transform of the legacy QueryForm. */\nconst autoCoerce = (raw: unknown, defaultValue: unknown): unknown => {\n if (raw === ET_NULL_VALUE) return null;\n\n if (typeof raw !== 'string') return raw;\n\n const defaultIsNumber = typeof defaultValue === 'number';\n const looksNumeric = raw.trim() === raw && !raw.startsWith('0') && !raw.endsWith('.') && !isNaN(Number(raw));\n\n if (defaultIsNumber || (looksNumeric && raw !== '')) {\n return transformToNumber(raw);\n }\n\n if (raw === 'true' || raw === 'false') {\n return transformToBoolean(raw);\n }\n\n return raw;\n};\n\nconst computeFilterCount = (fields: QueryFormFields, value: Dict, defaults: Dict): number => {\n let count = 0;\n\n for (const [key, def] of Object.entries(fields)) {\n if (IGNORED_FILTER_COUNT_FIELDS.includes(key) || def.skipInFilterCount) continue;\n if (!equal(value[key], defaults[key])) count++;\n }\n\n return count;\n};\n\n/**\n * A detached editor over the same fields — its own signal-forms form and value,\n * with no URL sync and no reset graph. Written back to the source form via\n * `source.setValue(branch.value())`. Powers the filter-overlay \"edit then apply\"\n * pattern (see `10-filter.md`).\n */\nexport type QueryFormBranch<TFields extends QueryFormFields> = {\n /** The bindable signal-forms field tree (`branch.fields.search`). */\n readonly fields: FieldTree<QueryFormModel<TFields>>;\n /** The live (undebounced) value of the branch. */\n readonly value: Signal<QueryFormModel<TFields>>;\n /** The number of active (non-default) filters in the branch. */\n readonly activeFilterCount: Signal<number>;\n setValue(value: QueryFormModel<TFields>): void;\n patchValue(value: Partial<QueryFormModel<TFields>>): void;\n resetFieldToDefault(key: keyof QueryFormModel<TFields>): void;\n resetAllFieldsToDefault(): void;\n};\n\nconst createBranch = <TFields extends QueryFormFields>(\n fields: TFields,\n initial: QueryFormModel<TFields>,\n injector: Injector,\n): QueryFormBranch<TFields> => {\n const defaults = buildDefaults(fields);\n const model = signal<QueryFormModel<TFields>>(clone(initial));\n const tree = form(model, { injector });\n\n return {\n fields: tree,\n value: model.asReadonly(),\n activeFilterCount: computed(() => computeFilterCount(fields, model() as Dict, defaults)),\n setValue: (value) => model.set(clone(value)),\n patchValue: (value) => model.update((cur) => ({ ...cur, ...value })),\n resetFieldToDefault: (key) => model.update((cur) => ({ ...cur, [key]: defaults[key as string] })),\n resetAllFieldsToDefault: () => model.set(clone(defaults) as QueryFormModel<TFields>),\n };\n};\n\nexport type CreateQueryFormConfig<TFields extends QueryFormFields> = {\n readonly fields: TFields;\n\n /**\n * A prefix for every query-param key, so multiple query forms can coexist on\n * one route (e.g. prefix `'users'` maps the `page` field to `users-page`).\n * A function is evaluated every time a key is built.\n */\n readonly queryParamPrefix?: string | (() => string);\n};\n\n/**\n * A signals-first query form: binds on-screen controls to typed fields, keeps a\n * debounced committed value, syncs to the URL query params, and resets dependent\n * fields via the `isResetBy` graph — all as signals.\n *\n * @example\n * const qf = createQueryForm({\n * fields: {\n * search: searchQueryField(),\n * sort: sortQueryField(),\n * page: queryField<number>({ defaultValue: 1, isResetBy: ['search', 'sort'] }),\n * },\n * }).observe();\n * // template: <input etInput [formField]=\"qf.fields.search\" />\n */\nexport class QueryFormSignals<TFields extends QueryFormFields> {\n private readonly _router = inject(Router);\n private readonly _route = inject(ActivatedRoute);\n private readonly _injector = inject(Injector);\n\n private readonly _fields: TFields;\n private readonly _prefix: string | (() => string) | undefined;\n private readonly _defaults: Dict;\n\n /** Live field values (updated immediately by bound controls). */\n private readonly _model: ReturnType<typeof signal<QueryFormModel<TFields>>>;\n\n /** The committed (debounced) value that drives `value`, the URL and the filter count. */\n private readonly _committed: ReturnType<typeof signal<QueryFormModel<TFields>>>;\n private readonly _previous = signal<QueryFormModel<TFields> | null>(null);\n\n private readonly _observing = signal(false);\n private readonly _queryParamChanges = injectQueryParamChanges();\n\n private _observeOptions: QueryFormSignalsObserveOptions | undefined;\n private _pendingTimer: ReturnType<typeof setTimeout> | null = null;\n private _skipNextResets = false;\n\n /**\n * The bindable signal-forms field tree — bind a field with `[formField]`, e.g.\n * `<input etInput [formField]=\"qf.fields.search\" />`.\n */\n public readonly fields: FieldTree<QueryFormModel<TFields>>;\n\n /** The committed value of the form. */\n public readonly value: Signal<QueryFormModel<TFields>>;\n\n /** The committed value before the most recent change. */\n public readonly previousValue: Signal<QueryFormModel<TFields> | null>;\n\n /** The previous/current value pair of the most recent committed change. */\n public readonly changes: Signal<QueryFormChange<TFields>>;\n\n /**\n * The number of active filters. Excludes the pagination/sort/search keys and\n * any field created with `skipInFilterCount`.\n */\n public readonly activeFilterCount: Signal<number>;\n\n /** The default value of the whole form. */\n public readonly defaultValue: QueryFormModel<TFields>;\n\n public constructor(config: CreateQueryFormConfig<TFields>) {\n assertInInjectionContext(QueryFormSignals);\n\n this._fields = config.fields;\n this._prefix = config.queryParamPrefix;\n this._defaults = buildDefaults(config.fields);\n this.defaultValue = clone(this._defaults) as QueryFormModel<TFields>;\n\n const initial = clone(this._defaults) as QueryFormModel<TFields>;\n this._model = signal(initial);\n this._committed = signal(clone(initial) as QueryFormModel<TFields>);\n this.fields = form(this._model);\n\n this.value = this._committed.asReadonly();\n this.previousValue = this._previous.asReadonly();\n this.changes = computed(() => ({ previousValue: this._previous(), currentValue: this._committed() }));\n this.activeFilterCount = computed(() =>\n computeFilterCount(this._fields, this._committed() as Dict, this._defaults),\n );\n\n // React to live control edits: schedule a debounced commit.\n effect(() => {\n const live = this._model();\n\n untracked(() => this._onLiveChange(live as Dict));\n });\n\n // React to navigation (back/forward, external links): apply URL → form immediately.\n effect(() => {\n const changes = this._queryParamChanges();\n\n untracked(() => {\n if (!this._observing() || this._observeOptions?.syncOnNavigation === false) return;\n\n this._applyFromUrl(changes as Dict);\n });\n });\n\n inject(DestroyRef).onDestroy(() => this._cleanup());\n }\n\n public observe(options?: QueryFormSignalsObserveOptions): this {\n if (this._observing()) {\n if (isDevMode()) {\n console.warn('QueryFormSignals.observe() was called more than once. Ignoring the extra call.');\n }\n\n return this;\n }\n\n this._observeOptions = options;\n this._observing.set(true);\n\n if (options?.syncOnNavigation !== false) {\n this._applyFromUrl(this._route.snapshot.queryParams as Dict);\n }\n\n // Commit whatever the model holds now (URL-restored or programmatic defaults).\n this._flush();\n\n return this;\n }\n\n public unobserve(): void {\n this._cleanup();\n }\n\n public setValue(value: QueryFormModel<TFields>, options?: QueryFormSignalsWriteOptions): void {\n if (options?.skipResets) this._skipNextResets = true;\n\n this._model.set(clone(value));\n }\n\n public patchValue(value: Partial<QueryFormModel<TFields>>, options?: QueryFormSignalsWriteOptions): void {\n if (options?.skipResets) this._skipNextResets = true;\n\n this._model.update((cur) => ({ ...cur, ...value }));\n }\n\n public resetFieldToDefault(key: keyof QueryFormModel<TFields>, options?: QueryFormSignalsWriteOptions): void {\n if (options?.skipResets) this._skipNextResets = true;\n\n this._model.update((cur) => ({ ...cur, [key]: this._defaults[key as string] }));\n }\n\n public resetFieldsToDefault(keys: (keyof QueryFormModel<TFields>)[], options?: QueryFormSignalsWriteOptions): void {\n if (options?.skipResets) this._skipNextResets = true;\n\n this._model.update((cur) => {\n const next = { ...cur } as Dict;\n\n for (const key of keys) {\n next[key as string] = this._defaults[key as string];\n }\n\n return next as QueryFormModel<TFields>;\n });\n }\n\n public resetAllFieldsToDefault(\n options?: QueryFormSignalsWriteOptions & { skipFields?: (keyof QueryFormModel<TFields>)[] },\n ): void {\n const skip = new Set((options?.skipFields ?? []).map((key) => key as string));\n const keys = Object.keys(this._fields).filter((key) => !skip.has(key)) as (keyof QueryFormModel<TFields>)[];\n\n this.resetFieldsToDefault(keys, options);\n }\n\n /** Create a detached editor over the same fields, seeded from the current committed value. */\n public branch(): QueryFormBranch<TFields> {\n return createBranch(this._fields, clone(this._committed()), this._injector);\n }\n\n private _onLiveChange(live: Dict): void {\n if (!this._observing()) return;\n if (equal(live, this._committed())) return;\n\n const changedKeys = changedKeysBetween(this._committed() as Dict, live);\n const debounceMs = this._resolveDebounce(changedKeys, live);\n\n this._clearTimer();\n\n if (debounceMs === null) {\n this._flush();\n } else {\n this._pendingTimer = setTimeout(() => {\n this._pendingTimer = null;\n this._flush();\n }, debounceMs);\n }\n }\n\n /** Shortest-debounce-wins; `null` means commit immediately. */\n private _resolveDebounce(changedKeys: string[], live: Dict): number | null {\n if (!changedKeys.length) return null;\n\n const times: number[] = [];\n\n for (const key of changedKeys) {\n const def = this._fields[key];\n\n if (!def) return null;\n if (def.disableDebounceIfFalsy && !live[key]) return null;\n if (def.debounce === undefined) return null;\n\n times.push(def.debounce);\n }\n\n return Math.min(...times);\n }\n\n private _flush(): void {\n this._clearTimer();\n\n const live = this._model() as Dict;\n const previous = this._committed() as Dict;\n\n if (equal(live, previous)) {\n this._skipNextResets = false;\n\n return;\n }\n\n const changedKeys = changedKeysBetween(previous, live);\n const next = this._skipNextResets ? { ...live } : this._applyResets(live, changedKeys);\n\n this._skipNextResets = false;\n\n this._previous.set(clone(previous) as QueryFormModel<TFields>);\n this._committed.set(clone(next) as QueryFormModel<TFields>);\n\n // Reflect any reset overrides back into the bound controls. The effect re-runs\n // but no-ops because the model now equals the committed value.\n if (!equal(next, live)) {\n this._model.set(clone(next) as QueryFormModel<TFields>);\n }\n\n if (this._observing() && this._observeOptions?.writeToQueryParams !== false) {\n this._writeToUrl(next);\n }\n }\n\n private _applyResets(live: Dict, changedKeys: string[]): Dict {\n const next = { ...live };\n\n for (const [key, def] of Object.entries(this._fields)) {\n const resets = def.isResetBy;\n\n if (!resets?.length) continue;\n\n const triggered = resets.some((resetKey) => {\n if (!(resetKey in this._fields)) {\n if (isDevMode()) {\n console.warn(`QueryFormSignals: isResetBy references unknown field \"${resetKey}\". Is it a typo?`);\n }\n\n return false;\n }\n\n return changedKeys.includes(resetKey);\n });\n\n if (!triggered) continue;\n\n const defaultValue = this._defaults[key];\n\n if (!equal(next[key], defaultValue)) {\n next[key] = defaultValue;\n }\n }\n\n return next;\n }\n\n private _applyFromUrl(params: Dict): void {\n const current = { ...(this._committed() as Dict) };\n let changed = false;\n\n for (const [key, def] of Object.entries(this._fields)) {\n const raw = params[this._paramKey(key)];\n\n if (raw === undefined) continue;\n\n const value = raw === ET_PROPERTY_REMOVED ? this._defaults[key] : this._deserialize(def, raw);\n\n if (!equal(current[key], value)) {\n current[key] = value;\n changed = true;\n }\n }\n\n if (!changed) return;\n\n this._commitFromUrl(current);\n }\n\n private _commitFromUrl(next: Dict): void {\n this._clearTimer();\n this._previous.set(clone(this._committed()) as QueryFormModel<TFields>);\n this._committed.set(clone(next) as QueryFormModel<TFields>);\n // Feed the URL value into the live model & bound controls; the effect no-ops (model === committed).\n this._model.set(clone(next) as QueryFormModel<TFields>);\n }\n\n private _deserialize(def: QueryFieldDef<unknown>, raw: unknown): unknown {\n if (def.queryParamToValue) return def.queryParamToValue(raw);\n if (def.skipAutoTransform) return raw;\n\n return autoCoerce(raw, resolveDefault(def));\n }\n\n private _writeToUrl(value: Dict): void {\n const queryParams: Dict = {};\n\n for (const [key, def] of Object.entries(this._fields)) {\n const paramKey = this._paramKey(key);\n const fieldValue = value[key];\n\n const isDefault = equal(fieldValue, this._defaults[key]);\n const writeToUrl = def.appendToUrl !== false;\n const writeDefault = def.appendDefaultValueToUrl === true;\n\n if (!writeToUrl || (isDefault && !writeDefault)) {\n queryParams[paramKey] = undefined;\n } else if (def.valueToQueryParam) {\n queryParams[paramKey] = def.valueToQueryParam(fieldValue);\n } else {\n queryParams[paramKey] = fieldValue === null ? ET_NULL_VALUE : fieldValue;\n }\n }\n\n queueMicrotask(() => {\n this._router.navigate([], {\n queryParams,\n queryParamsHandling: 'merge',\n replaceUrl: this._observeOptions?.replaceUrl,\n });\n });\n }\n\n private _paramKey(key: string): string {\n const prefix = this._prefix;\n\n if (!prefix) return key;\n\n return `${typeof prefix === 'string' ? prefix : prefix()}-${key}`;\n }\n\n private _clearTimer(): void {\n if (this._pendingTimer !== null) {\n clearTimeout(this._pendingTimer);\n this._pendingTimer = null;\n }\n }\n\n private _cleanup(): void {\n if (!this._observing()) return;\n\n this._observing.set(false);\n this._clearTimer();\n\n if (this._observeOptions?.writeToQueryParams === false) return;\n\n const queryParams: Dict = {};\n\n for (const key of Object.keys(this._fields)) {\n queryParams[this._paramKey(key)] = undefined;\n }\n\n queueMicrotask(() => {\n this._router.navigate([], { queryParams, queryParamsHandling: 'merge', replaceUrl: true });\n });\n }\n}\n\n/**\n * Create a {@link QueryFormSignals}. Call `.observe()` to start syncing with the\n * URL. Must be called in an injection context.\n */\nexport const createQueryForm = <TFields extends QueryFormFields>(\n config: CreateQueryFormConfig<TFields>,\n): QueryFormSignals<TFields> => new QueryFormSignals(config);\n","import {\n Sort,\n transformToBooleanArray,\n transformToDate,\n transformToDateArray,\n transformToNumberArray,\n transformToSort,\n transformToSortQueryParam,\n transformToStringArray,\n} from '../query-form/query-form.utils';\nimport { QueryFieldConfig, QueryFieldDef } from './query-form-signals.types';\n\nconst normalizeConfig = <T>(config: QueryFieldConfig<T> | undefined): Partial<QueryFieldDef<T>> => {\n if (!config) return {};\n\n const { isResetBy, ...rest } = config;\n\n return {\n ...rest,\n isResetBy: isResetBy === undefined ? undefined : Array.isArray(isResetBy) ? isResetBy : [isResetBy],\n };\n};\n\n/**\n * A generic query-form field. Defaults to `null` and, unless a transform is\n * given, relies on the auto-coercion when reading back from the URL.\n *\n * @example\n * queryField<number>({ defaultValue: 1, isResetBy: ['search'] })\n */\nexport const queryField = <T = string>(config?: QueryFieldConfig<T | null>): QueryFieldDef<T | null> => ({\n defaultValue: null,\n ...normalizeConfig(config),\n});\n\n/**\n * A debounced free-text search field. Debounces typing by 300ms but applies\n * clearing immediately (`disableDebounceIfFalsy`).\n */\nexport const searchQueryField = (config?: QueryFieldConfig<string | null>): QueryFieldDef<string | null> => ({\n defaultValue: null,\n debounce: 300,\n disableDebounceIfFalsy: true,\n ...normalizeConfig(config),\n});\n\n/**\n * A sort field serialized as `\"active:direction\"` (e.g. `\"name:asc\"`). Matches\n * the wire format the table system's URL adapter uses, so the two interoperate.\n */\nexport const sortQueryField = (config?: QueryFieldConfig<Sort | null>): QueryFieldDef<Sort | null> => ({\n defaultValue: null,\n queryParamToValue: transformToSort,\n valueToQueryParam: transformToSortQueryParam,\n ...normalizeConfig(config),\n});\n\n/** A field holding a list of strings. */\nexport const stringArrayQueryField = (config?: QueryFieldConfig<string[] | null>): QueryFieldDef<string[] | null> => ({\n defaultValue: null,\n queryParamToValue: transformToStringArray,\n ...normalizeConfig(config),\n});\n\n/** A field holding a list of numbers. */\nexport const numberArrayQueryField = (config?: QueryFieldConfig<number[] | null>): QueryFieldDef<number[] | null> => ({\n defaultValue: null,\n queryParamToValue: transformToNumberArray,\n ...normalizeConfig(config),\n});\n\n/** A field holding a list of booleans. */\nexport const booleanArrayQueryField = (\n config?: QueryFieldConfig<boolean[] | null>,\n): QueryFieldDef<boolean[] | null> => ({\n defaultValue: null,\n queryParamToValue: transformToBooleanArray,\n ...normalizeConfig(config),\n});\n\n/** A single date field (expects an ISO/`Date`-parseable string in the URL). */\nexport const dateQueryField = (config?: QueryFieldConfig<Date | null>): QueryFieldDef<Date | null> => ({\n defaultValue: null,\n queryParamToValue: transformToDate,\n ...normalizeConfig(config),\n});\n\n/** A field holding a list of dates. */\nexport const dateArrayQueryField = (config?: QueryFieldConfig<Date[] | null>): QueryFieldDef<Date[] | null> => ({\n defaultValue: null,\n queryParamToValue: transformToDateArray,\n ...normalizeConfig(config),\n});\n","import { RuntimeError } from '@ethlete/core';\n\n// codes 1000-1999\nexport const WebSocketRuntimeErrorCode = {\n // Web Socket Client\n ROOM_NOT_JOINED: 1000,\n MESSAGE_MALFORMED: 1001,\n} as const;\n\nexport type WebSocketRuntimeErrorCode = (typeof WebSocketRuntimeErrorCode)[keyof typeof WebSocketRuntimeErrorCode];\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 { createRootProvider, previousSignalValue, ProviderResult } from '@ethlete/core';\nimport { io } from 'socket.io-client';\nimport { isQueryDevtoolsEnabled, registerQueryDevtoolsEntry } from '../devtools';\nimport { messageMalformed, roomNotJoined } from './web-socket-errors';\n\n/** A single message captured for the devtools web socket inspector. */\nexport type WebSocketDevtoolsMessage = {\n id: number;\n timestamp: number;\n room: string;\n event: string;\n data: unknown;\n};\n\n/**\n * The live handle a web socket client registers with the devtools. Read by the `<et-query-devtools>`\n * Sockets tab. Not part of the general public contract.\n */\nexport type WebSocketDevtoolsHandle = {\n connected: Signal<boolean>;\n rooms: Signal<string[]>;\n messages: Signal<WebSocketDevtoolsMessage[]>;\n};\n\nconst MAX_DEVTOOLS_MESSAGES = 100;\n\nexport type CreateWebSocketClientTransport = 'polling' | 'websocket' | 'webtransport';\n\nexport type CreateWebSocketClientConfigOptions = {\n /** A unique name for the client */\n name: string;\n\n /** The URL of the socket io server */\n url: string;\n\n /** A list of transports to try (in order). Engine.io always attempts to connect directly with the first one, provided the feature detection test for it passes. */\n transports?: CreateWebSocketClientTransport[];\n};\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 type WebSocketClientResult<TMessageData extends SocketMessageView = SocketMessageView> = ProviderResult<\n WebSocketClient<TMessageData>\n>;\n\nexport type AnyWebSocketClient<TMessageData extends SocketMessageView = SocketMessageView> =\n WebSocketClientResult<TMessageData>;\n\nexport const createWebSocketClient = <TMessageData extends SocketMessageView = SocketMessageView>(\n options: CreateWebSocketClientConfigOptions,\n): WebSocketClientResult<TMessageData> => {\n return createRootProvider(\n () => {\n const socket = io(options.url, {\n withCredentials: true,\n autoConnect: false,\n transports: options.transports,\n });\n\n const rooms = new Map<string, InternalWebSocketRoom<TMessageData>>();\n const isConnected = signal(false);\n\n // Devtools instrumentation (no-op unless provideQueryDevtools() was called).\n const devtoolsEnabled = isQueryDevtoolsEnabled();\n const devtoolsRooms = signal<string[]>([]);\n const devtoolsMessages = signal<WebSocketDevtoolsMessage[]>([]);\n let devtoolsMessageId = 0;\n const syncDevtoolsRooms = () => {\n if (devtoolsEnabled) devtoolsRooms.set([...rooms.keys()]);\n };\n\n const joinRoom = (room: string | (() => string | null)) => {\n const roomFn = typeof room === 'function' ? room : () => room;\n const pre = previousSignalValue(computed(() => roomFn()));\n const roomData = signal<InternalWebSocketRoom<TMessageData> | null>(null);\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 syncDevtoolsRooms();\n\n return newRoom;\n };\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 syncDevtoolsRooms();\n };\n\n const setupWebSocketConnectionListener = () => {\n socket.on('connect', () => {\n isConnected.set(true);\n\n for (const room of rooms.keys()) {\n socket.emit('join-room', 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 if (devtoolsEnabled) {\n const message: WebSocketDevtoolsMessage = {\n id: devtoolsMessageId++,\n timestamp: Date.now(),\n room: json.room,\n event: json.event,\n data: json.data,\n };\n devtoolsMessages.update((log) => [message, ...log].slice(0, MAX_DEVTOOLS_MESSAGES));\n }\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 if (devtoolsEnabled) {\n const handle: WebSocketDevtoolsHandle = {\n connected: isConnected.asReadonly(),\n rooms: devtoolsRooms.asReadonly(),\n messages: devtoolsMessages.asReadonly(),\n };\n\n const unregister = registerQueryDevtoolsEntry({\n kind: 'ws-client',\n handle,\n meta: { name: options.name, url: options.url },\n });\n\n inject(DestroyRef).onDestroy(unregister);\n }\n\n return client;\n },\n {\n name: `WebSocketClient_${options.name}`,\n },\n );\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isNaN","coreDeleteCookie","IGNORED_FILTER_COUNT_FIELDS"],"mappings":";;;;;;;;;;;;;;AAsEA,MAAM,IAAI,GAAG,MAAM,SAAS;AAE5B,IAAI,eAAe,GAAG,KAAK;AAE3B;;;;AAIG;MACU,sBAAsB,GAAG,MAAM;AAE5C,MAAM,OAAO,GAAG,MAAM,CAAuB,EAAE;4EAAC;AAEhD;;AAEG;MACU,oBAAoB,GAAiC,OAAO,CAAC,UAAU;AAEpF;AACA;AACA;AACA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB;AAE5C,MAAM,YAAY,GAAG,CAAC,KAAmD,KAAY;AACnF,IAAA,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK;IAE5B,IAAI,IAAI,KAAK,OAAO;AAAE,QAAA,OAAO,SAAS,IAAI,CAAC,UAAU,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE;IACtG,IAAI,IAAI,KAAK,eAAe;AAAE,QAAA,OAAO,iBAAiB,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;IACvE,IAAI,IAAI,KAAK,WAAW;AAAE,QAAA,OAAO,aAAa,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AAE/D,IAAA,OAAO,IAAI;AACb,CAAC;AAED;;;;;;;AAOG;AACI,MAAM,0BAA0B,GAAG,CACxC,KAAqE,KACrD;AAChB,IAAA,IAAI,CAAC,eAAe;AAAE,QAAA,OAAO,IAAI;AAEjC,IAAA,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE;IAEjB,IAAI,CAAC,EAAE,EAAE;AACP,QAAA,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QAC3C,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,GAAG,CAAC,CAAC;AACnC,QAAA,EAAE,GAAG,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,GAAG,EAAE;IAC7B;AAEA,IAAA,MAAM,SAAS,GAAuB,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE;AAE7E,IAAA,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC;AAE9C,IAAA,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC;AAClF;AAEA,IAAI,yBAAyB,GAAG,KAAK;AAErC;;;;AAIG;AACI,MAAM,8BAA8B,GAAG,MAAK;IACjD,yBAAyB,GAAG,IAAI;AAClC;AAEA;;;;AAIG;AACI,MAAM,iCAAiC,GAAG,MAAK;IACpD,MAAM,KAAK,GAAG,yBAAyB;IACvC,yBAAyB,GAAG,KAAK;AAEjC,IAAA,OAAO,KAAK;AACd;AAEA;;;;AAIG;AACI,MAAM,mBAAmB,GAAG,CAAC,KAAc,KAAY;AAC5D,IAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;AAAE,QAAA,OAAO,EAAE;AAEpD,IAAA,IAAI;AACF,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC/B,OAAQ,KAAmC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC;QACjF;AAEA,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,OAAO,KAAK,KAAK,UAAU,GAAG,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC;IACxE;AACF;AAEA;;;;AAIG;AACI,MAAM,kBAAkB,GAAG,CAAC,MAAkC,KAAY;AAC/E,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,KAAK,EAAE,QAAQ,IAAI,IAAI,EAAE;AAEtC,IAAA,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,IAAI,SAAS;AACrF;AAEA;;;;;;;;;;;;;;AAcG;AACI,MAAM,oBAAoB,GAAG,MAA2B;IAC7D,eAAe,GAAG,IAAI;AAEtB,IAAA,IAAI,CAAC,SAAS,EAAE,EAAE;AAChB,QAAA,OAAO,CAAC,IAAI,CACV,+IAA+I,CAChJ;IACH;AAEA,IAAA,OAAO,wBAAwB,CAAC,EAAE,CAAC;AACrC;;ACjNA,MAAM,SAAS,GAAG,6CAA6C;AAUxD,MAAM,YAAY,GAAG,CAAC,GAAsB,KAAoB;IACrE,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG;IAE7D,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;IAE1C,OAAO,CAAC,SAAqD,KAAyB;AACpF,QAAA,MAAM,IAAI,GAAwB,EAAE,KAAK,EAAE,aAAa,EAAE;QAE1D,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QAC/C;AAEA,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACvB,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC;YAC7B,IAAI,aAAa,EAAE;AACjB,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,aAAa;YACvC;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,EAAE,EAAE;;AAEhB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;QACrD;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AACH;AAIO,MAAM,GAAG,GAAG,CAAC,OAA6B,EAAE,GAAG,MAAiB,KAAS;AAC9E,IAAA,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAI;AACzC,QAAA,OAAO,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC,EAAE,EAAE,CAAC;AACN,IAAA,OAAO,GAAU;AACnB;;ACpBO,MAAM,kBAAkB,GAAG,CAChC,cAAmD,KACpB;AAC/B,IAAA,MAAM,YAAY,GAAG,sBAAsB,EAAE;AAC7C,IAAA,MAAM,eAAe,GAAG,8BAA8B,EAAE;AAExD,IAAA,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAEvE,IAAA,MAAM,IAAI,GAAG,CAAC,WAAqC,KAAI;QACrD,eAAe,CAAC,KAAK,EAAE;AAEvB,QAAA,MAAM,EAAE,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,WAAW,IAAI,EAAE;QAEzE,MAAM,KAAK,GAAG,YAAY,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC;QACjE,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;AAEtC,QAAA,IAAI,IAAI,EAAE,WAAW,IAAI,cAAc,CAAC,gBAAgB,CAAC,SAAS,KAAK,KAAK,EAAE;YAC5E,SAAS,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;QACnD;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,IAAK,EAAyB;QAEvD,IAAI,cAAc,CAAC,gBAAgB,CAAC,SAAS,KAAK,KAAK,EAAE;AACvD,YAAA,YAAY,CAAC,WAAW,GAAG,SAAS;QACtC;aAAO;AACL,YAAA,YAAY,CAAC,IAAI,GAAG,SAAS;QAC/B;AAEA,QAAA,MAAM,cAAc,GAAqC;AACvD,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,cAAc,CAAC,OAAO,IAAI,EAAE,CAAC;AACjC,gBAAA,MAAM,EAAE;oBACN,IAAI,cAAc,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;AACzC,oBAAA,uBAAuB,EACrB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,uBAAuB;AACvD,wBAAA,cAAc,CAAC,gBAAgB,CAAC,MAAM,KAAK,OAAO;AACrD,iBAAA;AACF,aAAA;AACD,YAAA,gBAAgB,EAAE;AAChB,gBAAA,MAAM,EAAE,cAAc,CAAC,gBAAgB,CAAC,MAAM;AAC9C,gBAAA,MAAM,EAAE,cAAc,CAAC,gBAAgB,CAAC,SAAS;gBACjD,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAqB;AACjE,aAAA;YACD,IAAI,EAAE,cAAc,CAAC,IAAI;YACzB,WAAW,EAAE,cAAc,CAAC,WAAW;YACvC,KAAK,EAAE,cAAc,CAAC,KAAK;SAC5B;AAED,QAAA,YAAY,CAAC;AACX,YAAA,cAAc,EAAE,cAAc;YAC9B,YAAY;AACZ,YAAA,IAAI,EAAE,YAAY;YAClB,OAAO;AACR,SAAA,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK;IAErB,IAAI,CAAC,sBAAsB,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE;AAEpE,IAAA,OAAO,IAAI;AACb;;ACpEO,MAAM,uBAAuB,GAAG;AACrC;AACA,OAA+D,KAEtB;AACzC,IAAA,OAAO,WAAW,IAAI,OAAO,CAAC,gBAAgB;AAChD;AAEO,MAAM,cAAc,GAAG,CAA6B,OAAqC,KAC9F,eAAe,CAAC;IACd,OAAO,EAAE,OAAO,CAAC,OAAO;IACxB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;IAC1C,QAAQ,EAAE,OAAO,CAAC,QAAQ;IAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;AAChC,IAAA,cAAc,EAAE,kBAAkB;AACnC,CAAA;;MCpBU,sBAAsB,GAAG,CAAI,MAAiB,EAAE,eAAyB,KAAyB;AAC7G,IAAA,MAAM,YAAY,GAAG,CAAC,OAAiC,KAAmB;AACxE,QAAA,MAAM,iBAAiB,GAAG,OAAO,EAAE,QAAQ,IAAI,eAAe;AAC9D,QAAA,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;AAEnE,QAAA,IAAI,OAAO,EAAE,QAAQ,EAAE;AACrB,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QACxE;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,CAAmC;AAClF;;ACnBA,MAAM,mBAAmB,GAAG,IAAI,cAAc,CAAe,eAAe,CAAC;AAEtE,MAAM,kBAAkB,GAAG,CAAC,OAAqB,KACtD,oBAAoB,CAAC,OAAO,EAAE;AAC5B,IAAA,IAAI,EAAE,eAAe;AACrB,IAAA,mBAAmB,EAAE,mBAAmB;AACzC,CAAA;AAEI,MAAM,kBAAkB,GAAG,MAAM,MAAM,CAAC,mBAAmB;;ACgC3D,MAAM,sBAAsB,GAAG,CAAC,OAAsC,KAAI;AAC/E,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;AACtE,IAAA,MAAM,mBAAmB,GACvB,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,mBAAmB,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAElG,MAAM,KAAK,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM;AAExC,IAAA,MAAM,YAAY,GAAsB;QACtC,UAAU,EAAE,SAAkC;AAC9C,QAAA,eAAe,EAAE,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;AAC7C,QAAA,MAAM,EAAE,YAAY,CAAC,GAAG,CAAc,WAAW,CAAC;QAClD,QAAQ,EAAE,SAA2C;AACrD,QAAA,cAAc,EAAE,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;AAC9C,QAAA,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;AACxC,QAAA,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,IAAI,IAAI;KAC3F;AAED,IAAA,MAAM,YAAY,GAAiB;AACjC,QAAA,IAAI,EAAE,YAAY;KACnB;IAED,MAAM,CAAC,mBAAmB,CAAC,GAAG,kBAAkB,CAAC,YAAY,CAAC;IAE9D,MAAM,wBAAwB,GAAG,yBAAyB,CAAC,CAAC,mBAAmB,EAAE,CAAC,EAAE,mBAAmB,CAAC;IAExG,YAAY,CAAC,UAAU,GAAG,wBAAwB,CAAC,GAAG,CAAC,UAAU,CAAC;AAClE,IAAA,YAAY,CAAC,QAAQ,GAAG,wBAAwB;;IAGhD,MAAM,oBAAoB,GAAG,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,MAAK;AACvE,QAAA,IAAI;YACF,wBAAwB,CAAC,OAAO,EAAE;QACpC;AAAE,QAAA,MAAM;;QAER;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;;AAErC,QAAA,IAAI;AACF,YAAA,oBAAoB,EAAE;QACxB;AAAE,QAAA,MAAM;;QAER;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,YAAY;AACrB;;AC7FA;AACO,MAAM,qBAAqB,GAAG;;AAEnC,IAAA,iCAAiC,EAAE,CAAC;;AAGpC,IAAA,qDAAqD,EAAE,GAAG;AAC1D,IAAA,4CAA4C,EAAE,GAAG;AACjD,IAAA,iDAAiD,EAAE,GAAG;AACtD,IAAA,sCAAsC,EAAE,GAAG;AAC3C,IAAA,kEAAkE,EAAE,GAAG;;AAGvE,IAAA,uCAAuC,EAAE,GAAG;AAC5C,IAAA,iDAAiD,EAAE,GAAG;AACtD,IAAA,kDAAkD,EAAE,GAAG;AACvD,IAAA,yCAAyC,EAAE,GAAG;;AAG9C,IAAA,uCAAuC,EAAE,GAAG;AAC5C,IAAA,yCAAyC,EAAE,GAAG;;AAG9C,IAAA,8CAA8C,EAAE,GAAG;AACnD,IAAA,wDAAwD,EAAE,GAAG;AAC7D,IAAA,gEAAgE,EAAE,GAAG;;AAGrE,IAAA,0BAA0B,EAAE,GAAG;AAC/B,IAAA,qCAAqC,EAAE,GAAG;AAC1C,IAAA,uDAAuD,EAAE,GAAG;;AAG5D,IAAA,qCAAqC,EAAE,GAAG;;AAG1C,IAAA,yCAAyC,EAAE,GAAG;AAC9C,IAAA,2CAA2C,EAAE,GAAG;;AAGhD,IAAA,yBAAyB,EAAE,GAAG;;AAG9B,IAAA,8BAA8B,EAAE,GAAG;;AAGnC,IAAA,wCAAwC,EAAE,GAAG;;AAKxC,MAAM,6BAA6B,GAAG,CAAC,IAAsB,KAAI;IACtE,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,iCAAiC,EACvD,CAAA,mBAAA,EAAsB,IAAI,CAAA,4BAAA,CAA8B,CACzD;AACH;AAEO,MAAM,6CAA6C,GAAG,MAAK;IAChE,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,qDAAqD,EAC3E,CAAA,wEAAA,CAA0E,CAC3E;AACH;AAEO,MAAM,sCAAsC,GAAG,CAAC,MAAc,KAAI;IACvE,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,4CAA4C,EAClE,CAAA,WAAA,EAAc,MAAM,CAAA,6FAAA,CAA+F,CACpH;AACH;AAEO,MAAM,0CAA0C,GAAG,CAAC,MAAc,KAAI;IAC3E,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,iDAAiD,EACvE,CAAA,WAAA,EAAc,MAAM,CAAA,iGAAA,CAAmG,CACxH;AACH;AAEO,MAAM,gCAAgC,GAAG,MAAK;AACnD,IAAA,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,sCAAsC,EAC5D,CAAA,4FAAA,CAA8F;AAC5F,QAAA,CAAA,gGAAA,CAAkG,CACrG;AACH;AAEO,MAAM,wDAAwD,GAAG,MAAK;IAC3E,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,kEAAkE,EACxF,CAAA,sGAAA,CAAwG,CACzG;AACH;AAEO,MAAM,kCAAkC,GAAG,MAAK;IACrD,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,uCAAuC,EAC7D,CAAA,8DAAA,CAAgE,CACjE;AACH;AAEO,MAAM,2CAA2C,GAAG,MAAK;IAC9D,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,iDAAiD,EACvE,CAAA,yFAAA,CAA2F,CAC5F;AACH;AAEO,MAAM,4CAA4C,GAAG,MAAK;IAC/D,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,kDAAkD,EACxE,CAAA,0FAAA,CAA4F,CAC7F;AACH;AAEO,MAAM,oCAAoC,GAAG,CAAC,IAAY,KAAI;IACnE,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,yCAAyC,EAC/D,CAAA,qBAAA,EAAwB,IAAI,CAAA,0BAAA,CAA4B,CACzD;AACH;AAEO,MAAM,kCAAkC,GAAG,CAAC,GAAW,KAAI;IAChE,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,uCAAuC,EAC7D,CAAA,2DAAA,EAA8D,GAAG,CAAA,mBAAA,CAAqB,CACvF;AACH;AAEO,MAAM,oCAAoC,GAAG,MAAK;IACvD,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,yCAAyC,EAC/D,CAAA,6EAAA,CAA+E,CAChF;AACH;MAEa,uCAAuC,GAAG,CAAC,IAAY,EAAE,UAAkB,KAAI;AAC1F,IAAA,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,8CAA8C,EACpE,CAAA,UAAA,EAAa,IAAI,CAAA,kCAAA,EAAqC,UAAU,CAAA,EAAA,CAAI,CACrE;AACH;AAEO,MAAM,gDAAgD,GAAG,MAAK;IACnE,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,wDAAwD,EAC9E,CAAA,+HAAA,CAAiI,CAClI;AACH;AAEO,MAAM,sDAAsD,GAAG,MAAK;IACzE,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,gEAAgE,EACtF,CAAA,mFAAA,CAAqF,CACtF;AACH;AAEO,MAAM,sBAAsB,GAAG,MAAK;IACzC,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,0BAA0B,EAChD,CAAA,wFAAA,CAA0F,CAC3F;AACH;AAEO,MAAM,gCAAgC,GAAG,MAAK;IACnD,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,qCAAqC,EAC3D,CAAA,kGAAA,CAAoG,CACrG;AACH;MAEa,gDAAgD,GAAG,CAAC,YAAoB,EAAE,eAAuB,KAAI;AAChH,IAAA,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,uDAAuD,EAC7E,CAAA,mBAAA,EAAsB,YAAY,CAAA,4BAAA,EAA+B,eAAe,CAAA,0LAAA,CAA4L,CAC7Q;AACH;AAEO,MAAM,gCAAgC,GAAG,MAAK;IACnD,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,qCAAqC,EAC3D,CAAA,8JAAA,CAAgK,CACjK;AACH;AAEO,MAAM,mCAAmC,GAAG,MAAK;IACtD,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,yCAAyC,EAC/D,CAAA,4CAAA,CAA8C,CAC/C;AACH;AAEO,MAAM,sCAAsC,GAAG,MAAK;IACzD,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,2CAA2C,EACjE,CAAA,4DAAA,CAA8D,CAC/D;AACH;AAEO,MAAM,uBAAuB,GAAG,MAAK;IAC1C,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,yBAAyB,EAC/C,CAAA,yGAAA,CAA2G,CAC5G;AACH;AAEO,MAAM,oCAAoC,GAAG,CAAC,WAA+B,KAAI;AACtF,IAAA,MAAM,KAAK,GAAG,WAAW,GAAG,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,CAAG,GAAG,wBAAwB;IAEzE,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,wCAAwC,EAC9D,CAAA,EAAG,KAAK,CAAA,0JAAA,CAA4J;QAClK,CAAA,8FAAA,CAAgG;QAChG,CAAA,wCAAA,CAA0C;QAC1C,CAAA,qGAAA,CAAuG;AACvG,QAAA,CAAA,0OAAA,CAA4O,CAC/O;AACH;AAEO,MAAM,2BAA2B,GAAG,MAAK;IAC9C,OAAO,IAAI,YAAY,CACrB,qBAAqB,CAAC,8BAA8B,EACpD,CAAA,yHAAA,CAA2H,CAC5H;AACH;;AC3NO,MAAM,qBAAqB,GAAG,CAAC,KAAc,KAAkC;IACpF,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,YAAY,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK;AACvH;AAsBO,MAAM,cAAc,GAAG,CAAC,KAAc,KAA2B;IACtE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvC,QAAA,OAAO,KAAK;IACd;IAEA,MAAM,YAAY,GAAG,KAAqB;AAE1C,IAAA,QACE,YAAY,CAAC,KAAK,KAAK,SAAS;QAChC,YAAY,CAAC,MAAM,KAAK,SAAS;QACjC,YAAY,CAAC,MAAM,KAAK,SAAS;QACjC,YAAY,CAAC,KAAK,KAAK,SAAS;QAChC,YAAY,CAAC,KAAK,KAAK,SAAS;AAChC,QAAA,YAAY,CAAC,IAAI,KAAK,SAAS;AAEnC;AAEO,MAAM,kCAAkC,GAAG,CAAC,KAAc,KAA2B;AAC1F,IAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;AAC1B,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,gCAAgC,CAAC;AACvG;AAEO,MAAM,+BAA+B,GAAG,CAAC,KAAc,KAAoC;AAChG,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,YAAY,IAAI,KAAK;AAC7E;AAEO,MAAM,kBAAkB,GAAG,CAAC,KAAc,KAAkC;IACjF,QACE,CAAC,CAAC,KAAK;QACP,OAAO,KAAK,KAAK,QAAQ;AACzB,QAAA,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,CAAC,CAAC,KAAK,CAAC,MAAM;AACd,QAAA,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;AAC5B,QAAA,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;AACrB,QAAA,cAAc,IAAI,KAAK,CAAC,CAAC,CAAC;AAC1B,QAAA,cAAc,IAAI,KAAK,CAAC,CAAC,CAAC;AAE9B;;ACtDA;;;AAGG;MACU,gBAAgB,GAAG,MAAM,CAAC,kBAAkB;AAGzD;MACa,YAAY,GAAG,CAAC,EAAc,EAAE,OAA6B,KAAI;AAC5E,IAAA,MAAM,cAAc,GAAG,iBAAiB,EAAE;IAE1C,iBAAiB,CAAC,IAAI,CAAC;AAEvB,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAK;AACtB,QAAA,EAAE,EAAE;IACN,CAAC,EAAE,OAAO,CAAC;IAEX,iBAAiB,CAAC,cAAc,CAAC;AAEjC,IAAA,OAAO,GAAG;AACZ;AAaO,MAAM,gBAAgB,GAAG;AAC9B,IAAA,SAAS,EAAE,WAAW;AACtB,IAAA,YAAY,EAAE,cAAc;AAC5B,IAAA,mBAAmB,EAAE,qBAAqB;AAC1C,IAAA,qBAAqB,EAAE,uBAAuB;AAC9C,IAAA,YAAY,EAAE,cAAc;AAC5B,IAAA,iBAAiB,EAAE,mBAAmB;AACtC,IAAA,oBAAoB,EAAE,sBAAsB;AAC5C,IAAA,wBAAwB,EAAE,0BAA0B;;AAkB/C,MAAM,kBAAkB,GAAG,CAA0B,MAG3D,KAAI;AACH,IAAA,OAAO,MAA6B;AACtC;AAEA;;;;;;;;AAQG;AACI,MAAM,QAAQ,GAAG,CAA0B,IAA+D,KAAI;AACnH,IAAA,OAAO,kBAAkB,CAAQ;QAC/B,IAAI,EAAE,gBAAgB,CAAC,SAAS;AAChC,QAAA,EAAE,EAAE,CAAC,OAAO,KAAI;;;;YAId,IAAI,QAAQ,GAA8B,IAAI;YAC9C,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,MAAK;AACtC,gBAAA,MAAM,KAAK,GAAG,IAAI,EAAE;AAEpB,gBAAA,IAAI,KAAK,KAAK,gBAAgB,EAAE;oBAC9B,QAAQ,GAAG,IAAI;AACf,oBAAA,OAAO,IAAI;gBACb;gBAEA,IAAI,KAAK,KAAK,IAAI;AAAE,oBAAA,OAAO,QAAQ;gBAEnC,QAAQ,GAAG,KAAK;AAChB,gBAAA,OAAO,KAAK;AACd,YAAA,CAAC,CAAC;;YAGF,YAAY,CACV,MAAK;gBACH,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;gBAExC,IAAI,WAAW,KAAK,IAAI;oBAAE;gBAE1B,SAAS,CAAC,MAAK;AACb,oBAAA,IAAI,OAAO,CAAC,KAAK,CAAC,iBAAiB;wBAAE,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC7E,gBAAA,CAAC,CAAC;YACJ,CAAC,EACD,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CACpC;QACH,CAAC;AACF,KAAA,CAAC;AACJ;AAcA;;;;;;AAMG;AACI,MAAM,WAAW,GAAG,CAA0B,OAAkC,KAAI;AACzF,IAAA,OAAO,kBAAkB,CAAQ;QAC/B,IAAI,EAAE,gBAAgB,CAAC,YAAY;AACnC,QAAA,EAAE,EAAE,CAAC,OAAO,KAAI;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE;gBAC1C,MAAM,sCAAsC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YACpE;YAEA,IAAI,UAAU,GAAkB,IAAI;YAEpC,YAAY,CACV,MAAK;gBACH,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;gBAEjC,SAAS,CAAC,MAAK;oBACb,IAAI,UAAU,KAAK,IAAI;wBAAE,aAAa,CAAC,UAAU,CAAC;;;oBAIlD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,kBAAkB;wBAAE;AAEvD,oBAAA,IAAI,OAAO,CAAC,gBAAgB,EAAE;AAC5B,wBAAA,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC;oBAC3B;AAEA,oBAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,MAAK;AACnC,wBAAA,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC;AAC3B,oBAAA,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC;AACtB,gBAAA,CAAC,CAAC;YACJ,CAAC,EACD,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CACpC;AAED,YAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,UAAU,KAAK,IAAI,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC;QAC3F,CAAC;AACF,KAAA,CAAC;AACJ;AAOA;AACO,MAAM,WAAW,GAAG,CAA0B,OAAyC,KAAI;AAChG,IAAA,OAAO,kBAAkB,CAAQ;QAC/B,IAAI,EAAE,gBAAgB,CAAC,YAAY;AACnC,QAAA,EAAE,EAAE,CAAC,OAAO,KAAI;YACd,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC1F,gBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AACtB,YAAA,CAAC,CAAC;QACJ,CAAC;AACF,KAAA,CAAC;AACJ;AAOA;AACO,MAAM,iBAAiB,GAAG,CAA0B,OAAwC,KAAI;AACrG,IAAA,OAAO,kBAAkB,CAAQ;QAC/B,IAAI,EAAE,gBAAgB,CAAC,mBAAmB;AAC1C,QAAA,EAAE,EAAE,CAAC,OAAO,KAAI;YACd,OAAO,CAAC,KAAK,CAAC;iBACX,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAA8B,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,EAClE,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;AAE5C,iBAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,gBAAA,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AAC9B,YAAA,CAAC,CAAC;QACN,CAAC;AACF,KAAA,CAAC;AACJ;AAOA;AACO,MAAM,mBAAmB,GAAG,CAA0B,OAAiD,KAAI;AAChH,IAAA,OAAO,kBAAkB,CAAQ;QAC/B,IAAI,EAAE,gBAAgB,CAAC,qBAAqB;AAC5C,QAAA,EAAE,EAAE,CAAC,OAAO,KAAI;YACd,OAAO,CAAC,KAAK,CAAC;iBACX,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,CAAC,EACxD,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;iBAE5C,SAAS,CAAC,MAAK;gBACd,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAsC,CAAC;AAC/E,YAAA,CAAC,CAAC;QACN,CAAC;AACF,KAAA,CAAC;AACJ;AAUA;;;;AAIG;AACI,MAAM,eAAe,GAAG,CAA0B,OAAsC,KAAI;AACjG,IAAA,OAAO,kBAAkB,CAAQ;QAC/B,IAAI,EAAE,gBAAgB,CAAC,iBAAiB;AACxC,QAAA,EAAE,EAAE,CAAC,OAAO,KAAI;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE;gBAC1C,MAAM,0CAA0C,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YACxE;YAEA,IAAI,OAAO,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE;gBAC3E,MAAM,gCAAgC,EAAE;YAC1C;YAEA,YAAY,CACV,MAAK;AACH,gBAAA,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,eAAe,EAAE;AAC5C,oBAAA,MAAM,EAAE;gBACV;gBAEA,SAAS,CAAC,MAAK;oBACb,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;;;oBAIjC,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,kBAAkB;wBAAE;AAEvD,oBAAA,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC;AAC3B,gBAAA,CAAC,CAAC;YACJ,CAAC,EACD,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CACpC;QACH,CAAC;AACF,KAAA,CAAC;AACJ;AAqCO,MAAM,kBAAkB,GAAG,CAA0B,OAAgD,KAAI;AAC9G,IAAA,OAAO,kBAAkB,CAAQ;QAC/B,IAAI,EAAE,gBAAgB,CAAC,oBAAoB;AAC3C,QAAA,EAAE,EAAE,CAAC,OAAO,KAAI;YACd,YAAY,CACV,MAAK;AACH,gBAAA,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;gBAErD,IAAI,QAAQ,KAAK,IAAI;oBAAE;gBAEvB,SAAS,CAAC,MAAK;oBACb,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;AACzC,gBAAA,CAAC,CAAC;YACJ,CAAC,EACD,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CACpC;QACH,CAAC;AACF,KAAA,CAAC;AACJ;AAEA;;;;AAIG;AACI,MAAM,qBAAqB,GAAG,CAAC,KAAyB,KAAa;AAC1E,IAAA,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG;AAAE,QAAA,OAAO,IAAI;AAEnC,IAAA,OAAO,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,kCAAkC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AAClF;AA8BA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACI,MAAM,oBAAoB,GAAG,CAA0B,OAA2C,KAAI;AAC3G,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,qBAAqB;AAErD,IAAA,OAAO,kBAAkB,CAAQ;QAC/B,IAAI,EAAE,gBAAgB,CAAC,wBAAwB;AAC/C,QAAA,EAAE,EAAE,CAAC,OAAO,KAAI;YACd,OAAO,CAAC,KAAK,CAAC;iBACX,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAA8B,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,EAClE,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;AAE5C,iBAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;oBAAE;AAE3B,gBAAA,IAAI,OAAO,CAAC,KAAK,EAAE;oBACjB,OAAO,CAAC,KAAK,EAAE;gBACjB;qBAAO;oBACL,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;gBACxC;AACF,YAAA,CAAC,CAAC;QACN,CAAC;AACF,KAAA,CAAC;AACJ;;ACpWO,MAAM,eAAe,GAAG,CAA0B,OAAsC,KAAI;AACjG,IAAA,MAAM,OAAO,GAAG,MAAM,CAA4B,IAAI;gFAAC;AAEvD,IAAA,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,IAAI;oFAAC;AACrE,IAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,MAAM,GAAG,GAAG,WAAW,EAAE;QACzB,IAAI,GAAG,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;AAC7B,QAAA,OAAO,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAI,GAA2B;IAClG,CAAC;iFAAC;AACF,IAAA,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,IAAI;gFAAC;AAChE,IAAA,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI;8EAAC;AAC5D,IAAA,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,IAAI;wFAAC;;;;;AAM7E,IAAA,MAAM,UAAU,GAAG,MAAM,CAAkC,MAAM,IAAI;mFAAC;IACtE,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,UAAU,EAAE,EAAE;6EAAC;AAC/C,IAAA,MAAM,aAAa,GAAG,CAAC,MAAuC,KAAK,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;AAEzF,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAgB,IAAI;2FAAC;AACtD,IAAA,MAAM,eAAe,GAAG,MAAM,CAAgB,IAAI;wFAAC;AAEnD,IAAA,MAAM,cAAc,GAAG,IAAI,OAAO,EAA2B;AAC7D,IAAA,IAAI,yBAAyB,GAAG,YAAY,CAAC,KAAK;AAClD,IAAA,MAAM,iBAAiB,GAAG,CAAC,OAA2B,KAAI;QACxD,yBAAyB,CAAC,WAAW,EAAE;AACvC,QAAA,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9F,IAAA,CAAC;AAED,IAAA,MAAM,cAAc,GAAG,QAAQ,CAAoC,MAAK;AACtE,QAAA,MAAM,eAAe,GAAG,QAAQ,EAAE;AAClC,QAAA,MAAM,YAAY,GAAG,KAAK,EAAE;AAC5B,QAAA,MAAM,cAAc,GAAG,OAAO,EAAE;QAEhC,IAAI,cAAc,EAAE;YAClB,IAAI,eAAe,EAAE;gBACnB,OAAO;AACL,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,iBAAiB,EAAE,IAAI;AACvB,oBAAA,OAAO,EAAE,cAAc;AACvB,oBAAA,cAAc,EAAE,eAAe;iBAChC;YACH;YAEA,OAAO;AACL,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,iBAAiB,EAAE,KAAK;AACxB,gBAAA,OAAO,EAAE,cAAc;aACxB;QACH;aAAO,IAAI,YAAY,EAAE;YACvB,OAAO;AACL,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,KAAK,EAAE,YAAY;aACpB;QACH;aAAO,IAAI,eAAe,EAAE;YAC1B,OAAO;AACL,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,QAAQ,EAAE,eAAe;aAC1B;QACH;aAAO;AACL,YAAA,OAAO,IAAI;QACb;IACF,CAAC;uFAAC;AAEF,IAAA,MAAM,KAAK,GAAsB;QAC/B,WAAW;QACX,QAAQ;QACR,IAAI;QACJ,eAAe;QACf,OAAO;QACP,KAAK;QACL,kBAAkB;QAClB,eAAe;QACf,cAAc;AACd,QAAA,OAAO,EAAE,cAAc,CAAC,YAAY,EAAE;AACtC,QAAA,MAAM,EAAE;YACN,OAAO;YACP,WAAW;YACX,iBAAiB;YACjB,aAAa;AACd,SAAA;KACF;AAED,IAAA,OAAO,KAAK;AACd;;ACxJO,MAAM,qBAAqB,GAAG,CAA0B,OAA0C,KAAI;AAC3G,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO;AACzB,IAAA,MAAM,OAAO,GAAG,kBAAkB,EAAE;IAEpC,MAAM,UAAU,GAAG,MAAK;AACtB,QAAA,MAAM,aAAa,GAAG,eAAe,CAAQ,EAAE,CAAC;AAChD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI;oFAAC;AAE5B,QAAA,MAAM,aAAa,GAAG,MAAM,CAC1B,MAAK;AACH,YAAA,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,EAAE;AACtC,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE;AAClC,YAAA,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,EAAE;AACxC,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE;AAChC,YAAA,MAAM,sBAAsB,GAAG,KAAK,CAAC,eAAe,EAAE;AACtD,YAAA,MAAM,yBAAyB,GAAG,KAAK,CAAC,kBAAkB,EAAE;AAC5D,YAAA,MAAM,sBAAsB,GAAG,KAAK,CAAC,eAAe,EAAE;YAEtD,SAAS,CAAC,MAAK;AACb,gBAAA,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;AACnC,gBAAA,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AACrC,gBAAA,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,yBAAyB,CAAC;AAC/D,gBAAA,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,sBAAsB,CAAC;AACzD,gBAAA,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,sBAAsB,CAAC;AACzD,gBAAA,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AACzC,gBAAA,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC;AAE9C,gBAAA,IAAI,cAAc;oBAAE;gBAEpB,MAAM,oBAAoB,GAAG,sBAAsB,EAAE,IAAI,KAAK,aAAa,CAAC,QAAQ;AACpF,gBAAA,IAAI,CAAC,oBAAoB,IAAI,CAAC,YAAY;oBAAE;;gBAG5C,aAAa,CAAC,OAAO,EAAE;AACvB,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,YAAA,CAAC,CAAC;QACJ,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,CAAA,EACC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAA,CAClC;AAED,QAAA,MAAM,QAAQ,GAAyB;AACrC,YAAA,IAAI,EAAE,sBAAsB,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpF,YAAA,QAAQ,EAAE,sBAAsB,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC/E,YAAA,eAAe,EAAE,sBAAsB,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC1G,YAAA,OAAO,EAAE,sBAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC1F,YAAA,KAAK,EAAE,sBAAsB,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtF,YAAA,kBAAkB,EAAE,sBAAsB,CAAC,aAAa,CAAC,kBAAkB,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChH,YAAA,WAAW,EAAE,sBAAsB,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtG,YAAA,OAAO,EAAE,sBAAsB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC5E,YAAA,EAAE,EAAE,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvF,YAAA,cAAc,EAAE,sBAAsB,CAAC,aAAa,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;SAC5F;AAED,QAAA,OAAO,QAAQ;AACjB,IAAA,CAAC;AAED,IAAA,OAAO,UAAU;AACnB;;ACzCO,MAAM,sBAAsB,GAAG,CAAC,MAAmB,KAAI;IAC5D,OAAO,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,SAAS;AACtE;AAEO,MAAM,yBAAyB,GAAG,CAAC,MAAsB,KAAI;IAClE,OAAO,MAAM,KAAK,OAAO;AAC3B;AAEO,MAAM,oBAAoB,GAAG;AAClC;AACA,OAA+D,KAC7D;IACF,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,OAAO;AAEpE,IAAA,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,gBAAgB,CAAC,SAAS,CAAC;AACrF,IAAA,MAAM,uBAAuB,GAAG,uBAAuB,CAAC,OAAO;UAC3D,yBAAyB,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM;UACzD,sBAAsB,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAC3D,IAAA,MAAM,gBAAgB,GACpB,OAAQ,gBAA6D,EAAE,KAAK,KAAK,UAAU;AAC3F,QAAA,OAAQ,OAA2C,EAAE,KAAK,KAAK,UAAU;IAC3E,MAAM,iBAAiB,GAAG,uBAAuB,IAAI,CAAC,WAAW,CAAC,mBAAmB;IAErF,IAAI,gBAAgB,IAAI,CAAC,kBAAkB,IAAI,CAAC,WAAW,CAAC,kCAAkC,EAAE;QAC9F,MAAM,6CAA6C,EAAE;IACvD;AAEA,IAAA,IAAI,kBAAkB,IAAI,WAAW,CAAC,kCAAkC,EAAE;QACxE,MAAM,wDAAwD,EAAE;IAClE;AAEA,IAAA,MAAM,gBAAgB,GAAsB;QAC1C,kBAAkB;QAClB,uBAAuB;QACvB,iBAAiB;QACjB,gBAAgB;QAChB,mBAAmB,EAAE,WAAW,CAAC,mBAAmB;AACpD,QAAA,MAAM,EAAE,uBAAuB,CAAC,OAAO;AACrC,cAAE,CAAA,IAAA,EAAO,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAA;AACxC,cAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM;KACpC;AAED,IAAA,OAAO,gBAAgB;AACzB;MAEa,kBAAkB,GAAG,CAChC,QAA+B,EAC/B,OAAmC,KACjC;AACF,IAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB;AAEhD,IAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC9B,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAClC,YAAA,MAAM,6BAA6B,CAAC,OAAO,CAAC,IAAI,CAAC;QACnD;AAEA,QAAA,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;AAC9B,QAAA,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC;IACrB;AACF;AAEA;AACO,MAAM,YAAY,GAAG,CAAC,OAAyE,KAAI;IACxG,IAAI,OAAO,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE;QAC3G,OAAO,CAAC,OAAO,EAAE;IACnB;AACF;AAQO,MAAM,iBAAiB,GAAG,CAA0B,OAAwC,KAAI;IACrG,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO;IAExC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC7C,IAAA,MAAM,WAAW,GAAG,CAAC,QAA6B,KAAK,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,QAAkC,CAAC;AAChH,IAAA,MAAM,UAAU,GAAG,CAAC,OAAuC,KAAK,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AAC1F,IAAA,MAAM,QAAQ,GAAG,CAAC,KAAgC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7E,IAAA,MAAM,cAAc,GAAG,qBAAqB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;AAGtE,IAAA,MAAM,WAAW,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;AAClF,IAAA,MAAM,eAAe,GAAG,sBAAsB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC7E,IAAA,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;AACxG,IAAA,MAAM,cAAc,GAAG,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;AACxF,IAAA,MAAM,YAAY,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;AACpF,IAAA,MAAM,yBAAyB,GAAG,sBAAsB,CAAC,KAAK,CAAC,kBAAkB,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC9G,IAAA,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;AACpG,IAAA,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC;AACrF,IAAA,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC;AACzF,IAAA,MAAM,cAAc,GAAG,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;IAE/F,MAAM,UAAU,GAAG,MAAK;AACtB,QAAA,MAAM,OAAO,GAAyB;AACpC,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,eAAe,EAAE,sBAAsB;AACvC,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,kBAAkB,EAAE,yBAAyB;AAC7C,YAAA,WAAW,EAAE,kBAAkB;AAC/B,YAAA,EAAE,EAAE,SAAS;YACb,cAAc;AACd,YAAA,cAAc,EAAE,qBAAqB;SACtC;AAED,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC;AAED,IAAA,MAAM,KAAK,GAAiB;QAC1B,OAAO;AACP,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,QAAQ,EAAE,eAAe;AACzB,QAAA,eAAe,EAAE,sBAAsB;AACvC,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,KAAK,EAAE,YAAY;AACnB,QAAA,kBAAkB,EAAE,yBAAyB;AAC7C,QAAA,WAAW,EAAE,kBAAkB;AAC/B,QAAA,EAAE,EAAE,SAAS;QACb,cAAc;QACd,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,UAAU;AACV,QAAA,cAAc,EAAE,qBAAqB;AACrC,QAAA,MAAM,EAAE;YACN,OAAO;YACP,WAAW;YACX,UAAU;YACV,QAAQ;AACR,YAAA,OAAO,EAAE,cAAc;YACvB,UAAU,EAAE,IAAI,CAAC,eAAe;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,SAAA;KACF;AAED,IAAA,OAAO,KAAK;AACd;AAkBO,MAAM,eAAe,GAAG,CAC7B,OAAkD,KAChD;AACF,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,MAAM;IAE9C,MAAM,IAAI,GAAG,sBAAsB,CAAC;QAClC,MAAM;QACN,WAAW,EAAE,OAAO,CAAC,WAAW;AACjC,KAAA,CAAC;AAEF,IAAA,OAAO,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAK;QAC/C,MAAM,KAAK,GAAG,eAAe,CAAQ;AACnC,YAAA,iBAAiB,EAAE,OAAO,CAAC,OAAO,EAAE,iBAAiB;AACtD,SAAA,CAAC;AACF,QAAA,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAgE,CAAC;AAEpG,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;YACrC,IAAI;YACJ,KAAK;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,WAAW,EAAE,OAAO,CAAC,WAAW;AACjC,SAAA,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAA+B;YACnD,KAAK;YACL,OAAO;YACP,KAAK;YACL,IAAI;SACL;AAED,QAAA,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,gBAAgB,CAAC;AAEtD,QAAA,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAEhC,QAAA,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAEzD,IAAI,sBAAsB,EAAE,EAAE;YAC5B,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAC5C,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,IAAI,EAAE;AACJ,oBAAA,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC;AACtC,oBAAA,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAClC,oBAAA,KAAK,EAAE,mBAAmB,CACvB,OAAO,CAAC,gBAAwC,CAAC,KAAK;AACpD,wBAAA,OAAO,CAAC,OAA2C,EAAE,KAAK,CAC9D;oBACD,MAAM,EAAE,KAAK,CAAC,MAAM;AACpB,oBAAA,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;oBACjD,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,OAAO,EAAE,OAAO,CAAC,OAAO;AACxB,oBAAA,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;oBAClC,OAAO,EAAE,IAAI,CAAC,WAAW;AACzB,oBAAA,QAAQ,EAAG,OAAO,CAAC,gBAAuC,CAAC,KAAK;AACjE,iBAAA;AACF,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC;QACvC;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,CAAC;AACJ;;AChPO,MAAM,iBAAiB,GAAG,CAA0B,OAAwC,KAAI;IACrG,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,OAAO;AACtD,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;IAEtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAEpF,IAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,IAAA,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,IAAA,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,IAAA,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,IAAA,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,IAAA,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,IAAA,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC;AAMO,MAAM,sBAAsB,GAAG,MAAwB;IAC5D,OAAO;AACL,QAAA,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC;KAC1B;AACH;AAiBO,MAAM,YAAY,GAAG,CAA0B,OAAmC,KAAI;AAC3F,IAAA,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,OAAO;AAC1F,IAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,cAAc;AAE9E,IAAA,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;QACtD,KAAK,EAAE,gBAAgB,CAAC,KAAK;QAC7B,MAAM,EAAE,gBAAgB,CAAC,MAAM;QAC/B,IAAI;AACJ,QAAA,cAAc,EAAE,OAAO;QACvB,OAAO,EAAE,OAAO,EAAE,OAAO;QACzB,kBAAkB,EAAE,IAAI,CAAC,UAAU;QACnC,GAAG,EAAE,WAAW,CAAC,GAAG;AACpB,QAAA,WAAW,EAAE,YAAY,CAAC,WAAW,EAAE;QACvC,eAAe;QACf,QAAQ;QACR,iCAAiC,EAAE,WAAW,CAAC,iCAAiC;AACjF,KAAA,CAAC;AAEF,IAAA,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;IACjC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACxC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,IAAI,IAAI,CAAC;IAC/D,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACjC,IAAA,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC;AACzC;AAEO,MAAM,8BAA8B,GAAG,MAAK;IACjD,IAAI,aAAa,GAAG,CAAC;IACrB,IAAI,aAAa,GAAG,CAAC;;;IAIrB,IAAI,OAAO,GAAQ,IAAI;IAEvB,MAAM,KAAK,GAAG,MAAK;AACjB,QAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE;AAE7B,QAAA,IAAI,GAAG,GAAG,aAAa,GAAG,GAAG,EAAE;AAC7B,YAAA,aAAa,EAAE;AAEf,YAAA,IAAI,aAAa,GAAG,CAAC,EAAE;gBACrB,MAAM,uBAAuB,EAAE;YACjC;QACF;QAEA,aAAa,GAAG,GAAG;AAEnB,QAAA,IAAI,OAAO;YAAE,YAAY,CAAC,OAAO,CAAC;AAElC,QAAA,OAAO,GAAG,UAAU,CAAC,MAAK;YACxB,aAAa,GAAG,CAAC;QACnB,CAAC,EAAE,GAAG,CAAC;AACT,IAAA,CAAC;IAED,OAAO;QACL,KAAK;KACN;AACH;;ACvEO,MAAM,eAAe,GAAG,CAC7B,cAAgD,KACjB;AAC/B,IAAA,MAAM,YAAY,GAAG,sBAAsB,EAAE;AAC7C,IAAA,MAAM,eAAe,GAAG,8BAA8B,EAAE;AAExD,IAAA,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAEvE,IAAA,MAAM,IAAI,GAAG,CAAC,WAAqC,KAAI;QACrD,eAAe,CAAC,KAAK,EAAE;AAEvB,QAAA,MAAM,EAAE,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,WAAW,IAAI,EAAE;QAEzE,YAAY,CAAC,EAAE,cAAc,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC/D,IAAA,CAAC;AAED,IAAA,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK;IAErB,IAAI,CAAC,sBAAsB,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE;AAEpE,IAAA,OAAO,IAAI;AACb;;ACxDA;AAkCA;;;;;;;;;;;AAWG;AACI,MAAM,cAAc,GAAG,OAAgC,EAAE;AAmGzD,MAAM,WAAW,GAAG,CAA0B,OAAkC,KACrF,eAAe,CAAC;IACd,OAAO,EAAE,OAAO,CAAC,OAAO;IACxB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;IAC1C,QAAQ,EAAE,OAAO,CAAC,QAAQ;IAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;AAChC,IAAA,cAAc,EAAE,eAAe;AAChC,CAAA;;ACiDI,MAAM,gBAAgB,GAAG,CAA0B,IAA2C,KAAI;IACvG,IAAI,WAAW,GAAgB,EAAE;IACjC,IAAI,QAAQ,GAA0B,EAAE;AAExC,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IAErB,IAAI,KAAK,EAAE;AACT,QAAA,IAAI,MAAM,IAAI,KAAK,EAAE;YACnB,QAAQ,GAAG,IAA6B;QAC1C;aAAO;AACL,YAAA,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,GAAG,IAA+C;QAC9E;IACF;AACA,IAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE;AAClC;AAEO,MAAM,kBAAkB,GAAG,CAChC,OAA8C,EAC9C,SAAmD,KAEnD,sBAAsB,CAAC;IACrB,OAAO;IACP,SAAS;AACT,IAAA,YAAY,EAAE,WAAW;AAC1B,CAAA;;AC7MI,MAAM,sBAAsB,GAAG,CACpC,MAAmE,KAC5C;IAIvB,SAAS,YAAY,CAAC,GAAG,IAA2C,EAAA;QAClE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,gBAAgB,CAAQ,IAAI,CAAC;QAE/D,OAAO,MAAM,CAAC,YAAY,CAAC;YACzB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,gBAAgB,EAAE,MAAM,CAAC,SAAS;YAClC,QAAQ;YACR,WAAW;AACZ,SAAA,CAAC;IACJ;;;AAIA,IAAA,YAAY,CAAC,KAAK,GAAG,CAAC,iBAAmD,KAAI;AAC3E,QAAA,OAAO,sBAAsB,CAAC;AAC5B,YAAA,GAAG,MAAM;YACT,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,iBAAiB,EAAc;AACjE,SAAA,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,OAAO,YAAY;AACrB;;AC/CO,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,OAAe,KAAK,CAAA,iBAAA,EAAoB,IAAI,CAAA,EAAA,EAAK,OAAO;AAElG,MAAO,UAAW,SAAQ,KAAK,CAAA;AAGnC,IAAA,WAAA,CAAY,IAAY,EAAE,OAAe,EAAE,IAAc,EAAA;QACvD,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,IAAI,GAAG,YAAY;AACxB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;IAClB;AACD;AAEM,MAAM,qBAAqB,GAAG,CAAC,IAAa,KACjD,IAAI,UAAU,CAAC,KAAK,EAAE,yCAAyC,EAAE,IAAI;AAEhE,MAAM,iBAAiB,GAAG,CAAC,IAAa,KAAK,IAAI,UAAU,CAAC,KAAK,EAAE,mCAAmC,EAAE,IAAI;AAE5G,MAAM,qCAAqC,GAAG,CAAC,IAAa,KACjE,IAAI,UAAU,CAAC,KAAK,EAAE,oDAAoD,EAAE,IAAI;AAE3E,MAAM,4BAA4B,GAAG,CAAC,IAAa,KACxD,IAAI,UAAU,CAAC,KAAK,EAAE,mDAAmD,EAAE,IAAI;AAE1E,MAAM,gCAAgC,GAAG,CAAC,IAAa,KAC5D,IAAI,UAAU,CAAC,KAAK,EAAE,mDAAmD,EAAE,IAAI;AAE1E,MAAM,8BAA8B,GAAG,CAAC,IAAa,KAC1D,IAAI,UAAU,CAAC,KAAK,EAAE,iEAAiE,EAAE,IAAI;AAExF,MAAM,gBAAgB,GAAG,CAAC,IAAa,KAAK,IAAI,UAAU,CAAC,KAAK,EAAE,sCAAsC,EAAE,IAAI;;MChBxGA,OAAK,GAAG,CAAC,KAAc,KAAc,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK;MACpF,aAAa,GAAG,CAAC,KAAc,KAAc,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK;AAEjG,MAAM,cAAc,GAAG,CAAc,KAAc,KACxD,KAAK,YAAY,MAAM,IAAI,QAAQ,IAAI,KAAK,IAAI,YAAY,IAAI,KAAK,IAAI,KAAK,IAAI;AAE7E,MAAM,UAAU,GAAG,CAAC,OAM1B,KAAI;IACH,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC9B,QAAA,MAAM,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3C;AAEA,IAAA,IAAI,KAAoB;AAExB,IAAA,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE;AACvC,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YACvB,MAAM,qCAAqC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChE;QAEA,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;IAC3C;SAAO;AACL,QAAA,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI;IAC/B;IAEA,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACnC,QAAA,MAAM,iBAAiB,CAAC,KAAK,CAAC;IAChC;AAEA,IAAA,IAAI,OAAO,CAAC,WAAW,EAAE;AACvB,QAAA,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,gBAAgB,CAAC;QAEnF,IAAI,WAAW,EAAE;AACf,YAAA,KAAK,GAAG,KAAK,GAAG,GAAG,KAAK,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,GAAG,CAAA,EAAA,EAAK,WAAW,EAAE;QAChE;IACF;IAEA,OAAO,CAAA,EAAG,OAAO,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAA,CAAE;AACxC;MAEa,gBAAgB,GAAG,CAAC,MAAmB,EAAE,MAA+B,KAAmB;AACtG,IAAA,MAAM,cAAc,GAAG,MAAM,EAAE,cAAc,IAAI,SAAS;AAC1D,IAAA,MAAM,iBAAiB,GAAG,MAAM,EAAE,iBAAiB,IAAI,KAAK;AAC5D,IAAA,MAAM,aAAa,GAAG,MAAM,EAAE,aAAa,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC;IACrF,MAAM,gBAAgB,GAAG,MAAM,EAAE,gBAAgB,IAAI,CAACA,OAAK,EAAE,aAAa,CAAC;IAE3E,MAAM,WAAW,GAAa,EAAE;AAEhC,IAAA,SAAS,YAAY,CAAC,GAAW,EAAE,KAAc,EAAA;AAC/C,QAAA,IAAI,MAAM,EAAE,cAAc,KAAK,gBAAgB,EAAE;AAC/C,YAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACjC,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;AAC5C,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC;AAE1C,YAAA,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK;AAErE,YAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAgC,CAAC;YAEzE,WAAW,CAAC,IAAI,CAAC,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,CAAC;AAEjD,YAAA,OAAO,IAAI;QACb;AAAO,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC/B,IAAI,oBAAoB,GAAG,CAAC;AAC5B,YAAA,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE;AAC9B,gBAAA,MAAM,SAAS,GAAG,iBAAiB,GAAG,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,oBAAoB,GAAG,GAAG,CAAA,EAAG,GAAG,IAAI;gBAEpF,MAAM,WAAW,GAAG,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC;gBAEvD,IAAI,WAAW,EAAE;AACf,oBAAA,oBAAoB,EAAE;gBACxB;YACF;AAEA,YAAA,OAAO,IAAI;QACb;aAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AACtD,YAAA,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACjD,MAAM,SAAS,GAAG,cAAc,KAAK,KAAK,GAAG,CAAA,EAAG,GAAG,IAAI,MAAM,CAAA,CAAE,GAAG,GAAG,GAAG,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAG;AACrF,gBAAA,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;YAC9B;AAEA,YAAA,OAAO,IAAI;QACb;aAAO;AACL,YAAA,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACjC,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;AAC5C,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC;AAC1C,YAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAe,CAAC;YAExD,WAAW,CAAC,IAAI,CAAC,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,CAAC;AAEjD,YAAA,OAAO,IAAI;QACb;IACF;AAEA,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC/C,QAAA,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB;AAEA,IAAA,OAAO,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;AAC1D;AAEO,MAAM,yBAAyB,GAAG,CAAC,OAAuB,KAAI;AACnE,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;AAC7C,IAAA,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;AAC1B,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC;;IAGlC,IAAI,SAAS,GAAkB,IAAI;IACnC,IAAI,MAAM,GAAkB,IAAI;AAEhC,IAAA,IAAI,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE;AACtC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE;QACrC,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAE3C,IAAI,CAAC,EAAE;AACL,YAAA,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;QACtB;IACF;AAAO,SAAA,IAAI,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE;QAC7C,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAE5C,IAAI,CAAC,EAAE;AACL,YAAA,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;QACtB;IACF;AAEA,IAAA,IAAI,MAAM,IAAI,GAAG,EAAE;AACjB,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC;AAEhC,QAAA,SAAS,GAAG,MAAM,GAAG,UAAU;IACjC;SAAO,IAAI,MAAM,EAAE;AACjB,QAAA,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;IACzB;SAAO,IAAI,OAAO,EAAE;;;AAGlB,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;YACpB,SAAS,GAAG,IAAI;QAClB;aAAO;AACL,YAAA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC;;AAGrC,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,KAAK,cAAc,EAAE;AAC7C,gBAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;YACrE;QACF;IACF;AAEA,IAAA,OAAO,SAAS;AAClB;AAEO,MAAM,yBAAyB,GAAG,CAAC,OAAsB,KAAI;AAClE,IAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AACpB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE;AACxD;AAEO,MAAM,aAAa,GAAG,CAAC,IAAa,KAAqE;IAC9G,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;AACvC,QAAA,OAAO,IAAI;IACb;IAEA,IACE,IAAI,YAAY,WAAW;AAC3B,QAAA,IAAI,YAAY,IAAI;AACpB,QAAA,IAAI,YAAY,QAAQ;AACxB,QAAA,IAAI,YAAY,eAAe;AAC/B,QAAA,OAAO,IAAI,KAAK,QAAQ,EACxB;AACA,QAAA,OAAO,IAAgE;IACzE;AAEA,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAChF,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;;AAGA,IAAA,OAAQ,IAAY,CAAC,QAAQ,EAAE;AACjC;AAEO,MAAM,eAAe,GAAG,CAAC,MAAwD,KAAI;AAC1F,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE;AACnE,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AACvB,YAAA,OAAO,MAAM;QACf;QAEA,OAAO,MAAM,CAAC,WAAW;IAC3B;IAEA,OAAO,MAAM,CAAC,MAAM;AACtB;AAEO,MAAM,uBAAuB,GAAG,CAAC,IAAa,KAAI;;AAEvD,IAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,QAAA,OAAO,IAAI;IACb;;AAEA,IAAA,IAAI,IAAI,YAAY,QAAQ,EAAE;AAC5B,QAAA,OAAO,IAAI;IACb;;;AAGA,IAAA,IAAI,IAAI,YAAY,IAAI,EAAE;AACxB,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI;IAC1B;;AAEA,IAAA,IAAI,IAAI,YAAY,WAAW,EAAE;AAC/B,QAAA,OAAO,IAAI;IACb;;;AAGA,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,QAAA,OAAO,YAAY;IACrB;;AAGA,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,SAAS,EAAE;AACrF,QAAA,OAAO,kBAAkB;IAC3B;;AAEA,IAAA,OAAO,IAAI;AACb;MAEa,SAAS,GAAG,CAAC,OAAuB,EAAE,MAAc,KAAI;IACnE,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;AACvF;MAEa,aAAa,GAAG,CAAC,OAAuB,EAAE,QAA8C,KAAI;AACvG,IAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AAC/C,QAAA,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC;AACtB,IAAA,CAAC,CAAC;AACJ;AAEO,MAAM,0BAA0B,GAAG,CAAC,GAAmB,KAAI;AAChE,IAAA,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,EAAE;IAC3C,MAAM,aAAa,GAAmB,EAAE;IAExC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC/B,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;YACb,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;AACjC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;AAE1C,YAAA,aAAa,CAAC,GAAG,CAAC,GAAG,KAAK;QAC5B;IACF;AAEA,IAAA,OAAO,aAAa;AACtB;AAEO,MAAM,cAAc,GAAG,CAAC,GAAmB,KAAmB;IACnE,IAAI,aAAa,IAAI,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE;QAC3C,OAAO,GAAG,CAAC,WAAW;IACxB;IACA,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,EAAE;AACxD,QAAA,OAAO,GAAG,CAAC,iBAAiB,CAAC,eAAe,CAAC;IAC/C;AACA,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,oBAAoB,GAAmB,CAAC,MAAM,KAAI;IAC7D,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,iBAAiB;AAEhE,IAAA,IAAI,MAAM,CAAC,iBAAiB,GAAG,CAAC,EAAE;AAChC,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;IACzB;IAEA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACjC,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;IACzB;IAEA,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK;;AAGvC,IAAA,IAAI,MAAM,IAAI,GAAG,EAAE;;AAEjB,QAAA,IAAI,kCAAkC,CAAC,MAAM,CAAC,EAAE;AAC9C,YAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;QACzB;QAEA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAClD;;IAGA,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE;QACpC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAClD;;AAGA,IAAA,IAAI,MAAM,KAAK,GAAG,EAAE;AAClB,QAAA,MAAM,UAAU,GACd,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;AAC7B,YAAA,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;AAC7B,YAAA,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;AAC/B,YAAA,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;QAEjC,IAAI,UAAU,EAAE;YACd,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI;YACzC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,iBAAiB,GAAG,KAAK,EAAE;QAChF;QAEA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAClD;;;AAIA,IAAA,IAAK,MAAiB,KAAK,CAAC,EAAE;QAC5B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAClD;AAEA,IAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;AACzB;;AC7UA,MAAM,WAAW,GAAG,cAAc;AAE3B,MAAM,OAAO,GAAG,CAAqB,MAAqB,KAAwC;AACvG,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE;AACpC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM;AAClD,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI;AAChC,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACpD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,oBAAoB;IACtD,IAAI,iBAAiB,GAAG,CAAC;IACzB,IAAI,YAAY,GAAkB,IAAI;AAEtC,IAAA,OAAO,IAAI,UAAU,CAAC,CAAC,QAA0C,KAAI;AACnE,QAAA,MAAM,GAAG,GAAG,IAAI,cAAc,EAAE;AAChC,QAAA,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC;QAEnC,MAAM,QAAQ,GAAG,MAAK;YACpB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;AAC7C,YAAA,IAAI,MAAM,CAAC,eAAe,EAAE;AAC1B,gBAAA,GAAG,CAAC,eAAe,GAAG,IAAI;YAC5B;AAEA,YAAA,aAAa,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAE1E,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;AACjC,gBAAA,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,mCAAmC,CAAC;YACrE;YAEA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE;AACvC,gBAAA,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC;gBAElD,IAAI,YAAY,EAAE;AAChB,oBAAA,GAAG,CAAC,gBAAgB,CAAC,cAAc,EAAE,YAAY,CAAC;gBACpD;YACF;AAEA,YAAA,GAAG,CAAC,YAAY,GAAG,YAAY,KAAK,MAAM,GAAG,YAAY,GAAG,MAAM;AACpE,QAAA,CAAC;AAED,QAAA,QAAQ,EAAE;QAEV,MAAM,cAAc,GAAG,MAAsB;AAC3C,YAAA,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,IAAI;AACzC,YAAA,MAAM,OAAO,GAAG,0BAA0B,CAAC,GAAG,CAAC;YAC/C,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,GAAG;AAEvC,YAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE;AAC/D,QAAA,CAAC;AAED,QAAA,MAAM,WAAW,GAAG,CAAC,KAAmB,KAAI;AAC1C,YAAA,MAAM,aAAa,GAAG,iBAAiB,GAAG,CAAC;AAC3C,YAAA,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE;AACpC,YAAA,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,EAAE,iBAAiB,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAEtF,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;gBAClD,QAAQ,CAAC,QAAQ,EAAE;gBACnB;YACF;AAEA,YAAA,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI;AAC5B,YAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAE/F,YAAA,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;AACpC,gBAAA,QAAQ,EAAE;AACV,gBAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;gBACjB,iBAAiB,GAAG,aAAa;gBACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;YAC9G,CAAC,EAAE,MAAM,CAAC;AACZ,QAAA,CAAC;AAED,QAAA,MAAM,MAAM,GAAG,YAAW;YACxB,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE;AAErD,YAAA,IAAI,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE;YAEjC,IAAI,IAAI,GAAmB,IAAI;AAE/B,YAAA,IAAI,MAAM,KAAK,GAAG,EAAE;AAClB,gBAAA,IAAI,GAAG,OAAO,GAAG,CAAC,QAAQ,KAAK,WAAW,GAAG,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,QAAQ;YAC9E;AAEA,YAAA,IAAI,MAAM,KAAK,CAAC,EAAE;gBAChB,MAAM,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;YACzB;YAEA,IAAI,EAAE,GAAG,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;YAEtC,IAAI,YAAY,KAAK,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBACvD,MAAM,YAAY,GAAG,IAAI;gBACzB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;AACpC,gBAAA,IAAI;AACF,oBAAA,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,GAAG,IAAI;gBACxD;gBAAE,OAAO,KAAK,EAAE;oBACd,IAAI,GAAG,YAAY;oBAEnB,IAAI,EAAE,EAAE;wBACN,EAAE,GAAG,KAAK;wBACV,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;oBAC9B;gBACF;YACF;AAAO,iBAAA,IAAI,CAAC,EAAE,IAAI,IAAI,YAAY,IAAI,EAAE;AACtC,gBAAA,IAAI;AACF,oBAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE;AAE9B,oBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE;AACpC,wBAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;oBACzB;yBAAO;wBACL,IAAI,GAAG,IAAI;oBACb;gBACF;AAAE,gBAAA,MAAM;;gBAER;YACF;YAEA,IAAI,EAAE,EAAE;AACN,gBAAA,MAAM,YAAY,GAA2B;AAC3C,oBAAA,IAAI,EAAE,SAAS;oBACf,OAAO;AACP,oBAAA,QAAQ,EAAE,IAAgB;iBAC3B;AAED,gBAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,IAAI,yBAAyB,CAAC,OAAO,CAAC;AAC7F,gBAAA,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,gBAAgB,CAAC;gBAEtE,IAAI,kBAAkB,EAAE;AACtB,oBAAA,YAAY,CAAC,kBAAkB,GAAG,kBAAkB;gBACtD;AAEA,gBAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;gBAE3B,QAAQ,CAAC,QAAQ,EAAE;YACrB;iBAAO;AACL,gBAAA,WAAW,CAAC;oBACV,GAAG;AACH,oBAAA,MAAM,EAAE,IAAI;oBACZ,MAAM;oBACN,UAAU;oBACV,iBAAiB,EAAE,IAAI,iBAAiB,CAAC;AACvC,wBAAA,KAAK,EAAE,IAAI;wBACX,MAAM;wBACN,UAAU;wBACV,GAAG;qBACJ,CAAC;AACH,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC;AAED,QAAA,MAAM,OAAO,GAAG,CAAC,KAAY,KAAI;AAC/B,YAAA,MAAM,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE;AAEhC,YAAA,WAAW,CAAC;gBACV,GAAG;AACH,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC;AACvB,gBAAA,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,eAAe;gBAC7C,iBAAiB,EAAE,IAAI,iBAAiB,CAAC;AACvC,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC;AACvB,oBAAA,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,eAAe;oBAC7C,GAAG;iBACJ,CAAC;AACH,aAAA,CAAC;AACJ,QAAA,CAAC;AAED,QAAA,MAAM,cAAc,GAAG,CAAC,KAAoB,KAAI;AAC9C,YAAA,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE;AAEpC,YAAA,MAAM,QAAQ,GAAiB;AAC7B,gBAAA,IAAI,EAAE,mBAAmB;gBACzB,OAAO;AACP,gBAAA,QAAQ,EAAE;oBACR,OAAO,EAAE,KAAK,CAAC,MAAM;AACtB,iBAAA;aACF;AAED,YAAA,IAAI,KAAK,CAAC,gBAAgB,EAAE;AAC1B,gBAAA,MAAM,eAAe,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG;AAC1D,gBAAA,QAAQ,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,GAAG;gBACtE,QAAQ,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;YACvC;YAEA,IAAI,YAAY,KAAK,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE;AACjD,gBAAA,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC,YAAY;YACzC;AAEA,YAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzB,QAAA,CAAC;AAED,QAAA,MAAM,YAAY,GAAG,CAAC,KAAoB,KAAI;AAC5C,YAAA,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE;AAEpC,YAAA,MAAM,QAAQ,GAAiB;AAC7B,gBAAA,IAAI,EAAE,iBAAiB;gBACvB,OAAO;AACP,gBAAA,QAAQ,EAAE;oBACR,OAAO,EAAE,KAAK,CAAC,MAAM;AACtB,iBAAA;aACF;AAED,YAAA,IAAI,KAAK,CAAC,gBAAgB,EAAE;AAC1B,gBAAA,MAAM,eAAe,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG;AAC1D,gBAAA,QAAQ,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,GAAG;gBACtE,QAAQ,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;YACvC;AAEA,YAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzB,QAAA,CAAC;AAED,QAAA,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC;AACpC,QAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;AACtC,QAAA,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC;AACxC,QAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;AAEtC,QAAA,IAAI,MAAM,CAAC,cAAc,EAAE;AACzB,YAAA,GAAG,CAAC,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC;YAEhD,IAAI,OAAO,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE;gBAClC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,CAAC;YACvD;QACF;AAEA,QAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAEzC,QAAA,OAAO,MAAK;AACV,YAAA,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;AACzC,YAAA,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;AACzC,YAAA,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC;AACvC,YAAA,GAAG,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC;YAE3C,IAAI,YAAY,EAAE;AAChB,gBAAA,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC;YACnC;AAEA,YAAA,IAAI,MAAM,CAAC,cAAc,EAAE;AACzB,gBAAA,GAAG,CAAC,mBAAmB,CAAC,UAAU,EAAE,cAAc,CAAC;gBAEnD,IAAI,OAAO,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE;oBAClC,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC;gBAC1D;YACF;YAEA,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,IAAI,EAAE;gBAC/B,GAAG,CAAC,KAAK,EAAE;YACb;YAEA,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC5C,QAAA,CAAC;AACH,IAAA,CAAC,CAAC;AACJ;;ACpQO,MAAM,uBAAuB,GAAG,CAAC,OAAoB,KAAI;IAC9D,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;;IAGtC,IAAI,SAAS,GAAkB,IAAI;IACnC,IAAI,MAAM,GAAkB,IAAI;AAEhC,IAAA,IAAI,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE;AACtC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE;QACrC,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAE3C,IAAI,CAAC,EAAE;AACL,YAAA,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;QACtB;IACF;AAAO,SAAA,IAAI,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE;QAC7C,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAE5C,IAAI,CAAC,EAAE;AACL,YAAA,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;QACtB;IACF;AAEA,IAAA,IAAI,MAAM,IAAI,GAAG,EAAE;AACjB,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC;AAEhC,QAAA,SAAS,GAAG,MAAM,GAAG,UAAU;IACjC;SAAO,IAAI,MAAM,EAAE;AACjB,QAAA,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;IACzB;SAAO,IAAI,OAAO,EAAE;;;AAGlB,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;YACpB,SAAS,GAAG,IAAI;QAClB;aAAO;AACL,YAAA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC;;AAGrC,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,KAAK,cAAc,EAAE;AAC7C,gBAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;YACrE;QACF;IACF;AAEA,IAAA,OAAO,SAAS;AAClB;AAEO,MAAM,gBAAgB,GAAG,CAAC,MAAmB,KAAI;IACtD,OAAO,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,MAAM;AACtE;MAEa,kBAAkB,GAAG,CAAC,KAAa,EAAE,IAAwC,KAAI;;IAE5F,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE;;AAEzC,SAAA,OAAO,CAAC,MAAM,EAAE,EAAE;;AAElB,SAAA,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAErB,IAAA,MAAM,IAAI,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,EAAE;IAE/B,IAAI,IAAI,GAAG,CAAC;AAEZ,IAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACvB,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;IACxD;;;AAIA,IAAA,IAAI,IAAI,UAAU,GAAG,CAAC;AAEtB,IAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;AACxB;;AChFA;;;;;;;;AAQG;AAEH;AACA,MAAM,qBAAqB,GAAG,oDAAoD;AAElF;AACA,MAAM,oBAAoB,GAAG,iDAAiD;AAE9E;AACA,MAAM,kBAAkB,GAAG,sEAAsE;AAEjG,MAAM,oBAAoB,GAAG,kBAAkB;AAE/C,MAAM,gBAAgB,GAAG,UAAU;AAEnC,MAAM,mBAAmB,GAAG,0CAA0C;AAEtE,MAAM,iBAAiB,GAAG,kCAAkC;AAE5D,MAAM,oBAAoB,GAAG,qCAAqC;AAElE,MAAM,kBAAkB,GAAG,oCAAoC;AAE/D,MAAM,sBAAsB,GAAG,6BAA6B;AAE5D;;;AAGG;AACH,MAAM,aAAa,GAA2B;AAC5C,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,KAAK,EAAE,GAAG;CACX;AAED;AACA,MAAM,kBAAkB,GAAG,GAAG;AAE9B,MAAM,cAAc,GAAG,QAAQ;AAE/B,MAAM,kBAAkB,GAAG,CAAC,KAAa,KACvC,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAc,KAAI;AAC3D,IAAA,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAC1B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;AACpD,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;;AAG7F,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,IAAI;AAClE,cAAE,MAAM,CAAC,aAAa,CAAC,SAAS;cAC9B,KAAK;IACX;AAEA,IAAA,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,KAAK;AAC9E,CAAC,CAAC;AAEJ;;;AAGG;AACH,MAAM,WAAW,GAAG,CAAC,IAAY,KAC/B,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;AAErF,MAAM,QAAQ,GAAG,CAAC,KAAa,KAC7B,KAAK,CAAC,MAAM,IAAI,kBAAkB,GAAG,KAAK,GAAG,CAAA,EAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG;AAErG,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,KAAa,KAAI;AACjE,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAExC,IAAA,OAAO,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI;AAChD,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,IAAY,KAAI;IACtC,MAAM,KAAK,GAAa,EAAE;IAE1B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE;QACzD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAExC,QAAA,IAAI,IAAI;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;AAEA,IAAA,OAAO,KAAK;AACd,CAAC;AAED;;;;;AAKG;AACI,MAAM,kBAAkB,GAAG,CAAC,KAAc,KAC/C,OAAO,KAAK,KAAK,QAAQ,KAAK,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;AAErG;;;;;;AAMG;AACI,MAAM,gBAAgB,GAAG,CAAC,IAAa,KAAmB;IAC/D,IAAI,kBAAkB,CAAC,IAAI,CAAC;AAAE,QAAA,OAAO,IAAI;IAEzC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACzF,OAAO,IAAI,CAAC,IAAI;IAClB;AAEA,IAAA,OAAO,IAAI;AACb;AAEA;;;;;;;;;;;AAWG;AACI,MAAM,uBAAuB,GAAG,CAAC,IAAY,KAAmB;AACrE,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;AACzF,IAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ;AAE9D,IAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACvG,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI;AAE7E,IAAA,IAAI,QAAQ,IAAI,MAAM,EAAE;;AAEtB,QAAA,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,IAAI;QAEvD,OAAO,QAAQ,CAAC,CAAA,EAAG,QAAQ,CAAA,EAAG,SAAS,CAAA,EAAG,MAAM,CAAA,CAAE,CAAC;IACrD;IAEA,MAAM,OAAO,GAAG,QAAQ,IAAI,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC;AAEvD,IAAA,OAAO,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI;AAC3C;;AC7JO,MAAM,kBAAkB,GAAG,CAChC,OAAsD,KAC1B;IAC5B,MAAM,iBAAiB,GACrB,OAAO,YAAY,iBAAiB,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAI,OAAqC;AACnH,IAAA,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,iBAAiB;AAC/C,IAAA,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC;IACrE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK;;;;AAKhD,IAAA,IAAI,MAAM,KAAK,CAAC,EAAE;QAChB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAClD;;AAGA,IAAA,IAAI,UAAU,GAAG,CAAC,EAAE;AAClB,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;IACzB;;AAGA,IAAA,IAAI,EAAE,KAAK,YAAY,iBAAiB,CAAC,EAAE;AACzC,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;IACzB;;AAGA,IAAA,IAAI,MAAM,IAAI,GAAG,EAAE;;AAEjB,QAAA,IAAI,kCAAkC,CAAC,MAAM,CAAC,EAAE;AAC9C,YAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;QACzB;QAEA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAClD;;IAGA,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE;QACpC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAClD;;AAGA,IAAA,IAAI,MAAM,KAAK,GAAG,EAAE;AAClB,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAE7E,IAAI,UAAU,EAAE;YACd,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI;YACzC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,iBAAiB,GAAG,KAAK,EAAE;QAChF;QAEA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAClD;AAEA,IAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;AACzB;;AC7CO,MAAM,oBAAoB,GAAG,CAAC,KAAc,KAAiC;IAClF,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,YAAY,IAAI,KAAK,IAAI,QAAQ,IAAI,KAAK;AACpH;AAEA;;;;;;;;;;;;;;AAcG;AACI,MAAM,kBAAkB,GAAG,CAAC,KAA4C,KAAc;AAC3F,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,EAAE;AAErB,IAAA,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AACxF;AAEA;;;AAGG;AACI,MAAM,iBAAiB,GAAG,CAAC,KAA4C,KAC5E,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;AAE3B,MAAM,wBAAwB,GAAG,CAAC,KAAc,KAAwB;AAC7E,IAAA,IAAI,GAAG,GAAG,KAAK,YAAY,iBAAiB,GAAG,KAAK,GAAG,IAAI;IAE3D,IAAI,CAAC,GAAG,EAAE;QACR,GAAG,GAAG,IAAI,iBAAiB,CAAC;AAC1B,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,UAAU,EAAE,eAAe;AAC5B,SAAA,CAAC;IACJ;AACA,IAAA,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC;AAE1C,IAAA,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK;IACxB,MAAM,SAAS,GAA6B,EAAE;AAC9C,IAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAErC,IAAI,IAAI,EAAE;;;;AAIR,QAAA,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC;QAE7C,IAAI,OAAO,EAAE;AACX,YAAA,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;QAC7B;IACF;AAAO,SAAA,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE;AACxC,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE;YAClC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACpC;IACF;AAAO,SAAA,IAAI,+BAA+B,CAAC,MAAM,CAAC,EAAE;AAClD,QAAA,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE;YACzC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;QAChD;IACF;AAAO,SAAA,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE;AACrC,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAC5C;IACF;SAAO,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,SAAS,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE;QAC9G,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAC7C;SAAO,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;;QAE5G,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC5C;AAAO,SAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QACrC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IACrC;SAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;AACtF,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACpC;IACF;AAEA,IAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;QACxB,OAAO;AACL,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,GAAG,EAAE,GAAG;YACR,UAAU;YACV,IAAI,EAAE,GAAG,CAAC,MAAM;SACjB;IACH;SAAO;AACL,QAAA,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;QAE5D,OAAO;AACL,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,GAAG,EAAE,GAAG;YACR,UAAU;YACV,IAAI,EAAE,GAAG,CAAC,MAAM;SACjB;IACH;AACF;;ACtHO,MAAM,uBAAuB,GAAG;AAiJhC,MAAM,iBAAiB,GAAG,CAA0B,OAAwC,KAAI;AACrG,IAAA,IAAI,yBAAyB,GAAG,YAAY,CAAC,KAAK;IAElD,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,OAAO;AAErD,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiC,IAAI;qFAAC;AACjE,IAAA,MAAM,MAAM,GAAG,IAAI,OAAO,EAA2B;AACrD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAiC,IAAI;gFAAC;AAC5D,IAAA,MAAM,KAAK,GAAG,MAAM,CAA4B,IAAI;8EAAC;AACrD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAA6B,IAAI;iFAAC;AAEzD,IAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC;0FAAC;AACnC,IAAA,MAAM,mBAAmB,GAAG,MAAM,CAAC,CAAC;4FAAC;AACrC,IAAA,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC;wFAAC;AACjC,IAAA,MAAM,SAAS,GAAG,MAAM,CAAgB,IAAI;kFAAC;;;;;IAM7C,MAAM,OAAO,GAAG,MAAK;AACnB,QAAA,MAAM,WAAW,GAAG,SAAS,EAAE;QAE/B,OAAO,WAAW,KAAK,IAAI,IAAI,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE;AACzD,IAAA,CAAC;;;IAID,MAAM,cAAc,GAAG,MAAK;QAC1B,MAAM,aAAa,GAAG,OAAO,OAAO,CAAC,aAAa,KAAK,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,GAAG,OAAO,CAAC,aAAa;QACnH,MAAM,UAAU,GAAG,OAAO,IAAI,EAAE,OAAO,KAAK,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO;AAEvF,QAAA,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,UAAU;AACrC,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,aAAa;;;AAIrC,QAAA,OAAO,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,aAAa,CAAC;AAChH,IAAA,CAAC;IAED,MAAM,YAAY,GAAG,MAAK;AACxB,QAAA,MAAM,OAAO,GAAG,cAAc,EAAE;QAEhC,OAAO,YAAY,CAAC;aACjB,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE;AACzC,YAAA,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,IAAI,EAAE,IAAI;YAChB,cAAc,EAAE,aAAa,EAAE,cAAc;YAC7C,eAAe,EAAE,aAAa,EAAE,eAAe;YAC/C,aAAa,EAAE,aAAa,EAAE,aAAa;AAC3C,YAAA,YAAY,EAAE,aAAa,EAAE,YAAY,IAAI,MAAM;YACnD,OAAO;SACR;AACA,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC,EAClC,KAAK,CAAC;AACJ,YAAA,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAI;AAC3B,gBAAA,MAAM,YAAY,GAA8B,EAAE,KAAK,EAAE,UAAU,EAAE;AAErE,gBAAA,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,kBAAkB,CAAC,YAAY,CAAC;AAEvF,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACtB,oBAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;gBAChC;AAEA,gBAAA,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;YACjC,CAAC;AACF,SAAA,CAAC,EACF,UAAU,CAAC,CAAC,CAAC,KAAI;YACf,gBAAgB,CAAC,CAAC,CAAC;AAEnB,YAAA,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CACH;AACL,IAAA,CAAC;AAED,IAAA,MAAM,OAAO,GAAG,CAAC,OAAmD,KAAI;QACtE,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,OAAO,EAAE,UAAU,CAAC,CAAC,EAAE;;AAEzE,YAAA,OAAO,KAAK;QACd;QAEA,yBAAyB,CAAC,WAAW,EAAE;QAEvC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC/B,QAAA,iBAAiB,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAExC,OAAO,CAAC,GAAG,CAAC;YACV,WAAW,EAAE,eAAe,EAAE;AAC9B,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;AACF,QAAA,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACf,QAAA,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAEnB,QAAA,MAAM,MAAM,GAAG,YAAY,EAAE;AAE7B,QAAA,yBAAyB,GAAG,MAAM,CAAC,SAAS,CAAC;YAC3C,KAAK,EAAE,MAAK;;;YAGZ,CAAC;AACF,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;IAED,MAAM,OAAO,GAAG,MAAK;AACnB,QAAA,MAAM,SAAS,GAAG,CAAC,yBAAyB,CAAC,MAAM;QAEnD,yBAAyB,CAAC,WAAW,EAAE;QACvC,MAAM,CAAC,QAAQ,EAAE;AAEjB,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC;AAED,IAAA,MAAM,WAAW,GAAG,CAAC,KAAqC,KAAI;AAC5D,QAAA,QAAQ,KAAK,CAAC,IAAI;YAChB,KAAK,aAAa,CAAC,QAAQ;gBACzB;AACE,oBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACjB,oBAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AAExB,oBAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC;0BAC7B,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO;AACpC,0BAAE,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC;AAC1C,oBAAA,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,gBAAgB,CAAC;AACtE,oBAAA,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;gBACnC;gBACA;YAEF,KAAK,aAAa,CAAC,cAAc;YACjC,KAAK,aAAa,CAAC,gBAAgB;gBACjC;oBACE,kBAAkB,CAAC,KAAK,CAAC;gBAC3B;gBACA;YAEF,KAAK,aAAa,CAAC,IAAI;YACvB,KAAK,aAAa,CAAC,cAAc;YACjC,KAAK,aAAa,CAAC,IAAI;gBACrB;;gBAEA;gBACA;;AAGJ,QAAA,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,QAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACpB,IAAA,CAAC;AAED,IAAA,MAAM,gBAAgB,GAAG,CAAC,aAAsB,KAAI;AAClD,QAAA,MAAM,QAAQ,GAAG,wBAAwB,CAAC,aAAa,CAAC;AAExD,QAAA,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACnB,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAEjB,MAAM,UAAU,GAAmB,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrE,QAAA,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;AAC5B,QAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;QAEvB,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC/D,IAAA,CAAC;AAED,IAAA,MAAM,kBAAkB,GAAG,CAAC,KAAwB,KAAI;AACtD,QAAA,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE;YAC7B;QACF;AAEA,QAAA,MAAM,QAAQ,GAAoC;YAChD,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG;AAC9C,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,aAAa,EAAE,IAAI;SACpB;AAED,QAAA,MAAM,KAAK,GAA4B;YACrC,WAAW,EAAE,eAAe,EAAE;YAC9B,QAAQ;SACT;AAED,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE;AAC9B,QAAA,MAAM,yBAAyB,GAAG,WAAW,GAAG,iBAAiB,EAAE;AACnE,QAAA,MAAM,2BAA2B,GAAG,WAAW,GAAG,eAAe,EAAE;QACnE,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,mBAAmB,EAAE;;;AAIzD,QAAA,IAAI,2BAA2B,GAAG,uBAAuB,EAAE;YACzD,MAAM,KAAK,GAAG,CAAC,YAAY,GAAG,yBAAyB,IAAI,IAAI;AAE/D,YAAA,QAAQ,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI;YAC7B,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI;QAClF;AAEA,QAAA,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC;AAClC,QAAA,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;AAErC,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,IAAA,CAAC;AAED,IAAA,MAAM,WAAW,GAAuB;QACtC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,EAAE,OAAO,CAAC,QAAQ;QACrB,OAAO;QACP,OAAO;AACP,QAAA,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;AAC7B,QAAA,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE;AACzB,QAAA,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE;AAC/B,QAAA,YAAY,EAAE,YAAY,CAAC,UAAU,EAAE;AACvC,QAAA,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE;QAC9B,OAAO;AACP,QAAA,SAAS,EAAE,SAAS,CAAC,UAAU,EAAE;KAClC;AAED,IAAA,OAAO,WAAW;AACpB;;ACrXA;AAyLA;AACO,MAAM,sBAAsB,GAAG,CAA+B,SAAY,KAC/E,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AAE/C;AACO,MAAM,0BAA0B,GAAG,CAA4C,SAAY,KAChG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK;AAE9C,MAAM,gBAAgB,GAAG,CAM9B,OAA6D,KAC3D;IAGF,MAAM,EACJ,IAAI,EACJ,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,QAAQ,GAAG,EAAE,EACb,QAAQ,GAAG,CAAC,UAAuB,EAAE,UAAuB,KAAI;QAC9D,MAAM,OAAO,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,UAAU,CAAC;QAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI;AAEhG,QAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE;AAC/B,IAAA,CAAC,EACD,SAAS,EACT,SAAS,EACT,eAAe,EACf,UAAU,GAAG,QAAQ,EACrB,cAAc,GAAG,QAAQ,GAC1B,GAAG,OAAO,IAAI,EAAE;AAEjB,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAEjC,IAAA,MAAM,OAAO,GAAG,MAAM,CAAc,EAAE;gFAAC;AACvC,IAAA,MAAM,SAAS,GAAG,MAAM,CAAmB,IAAI;kFAAC;AAChD,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI;mFAAC;AAEvD,IAAA,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,gBAAgB,CAAC,SAAS,CAAC;AACrF,IAAA,MAAM,8BAA8B,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,gBAAgB,CAAC,oBAAoB,CAAC;IAE5G,IAAI,kBAAkB,EAAE;QACtB,MAAM,sBAAsB,EAAE;IAChC;IAEA,IAAI,8BAA8B,EAAE;QAClC,MAAM,gCAAgC,EAAE;IAC1C;AAEA,IAAA,MAAM,WAAW,GAAG,CAAC,IAAsF,KAAI;QAC7G,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;QAE9B,OAAO,SAAS,CAAC,MAAK;AACpB,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;YAExD,IAAI,YAAY,GAAG,YAAY;AAC/B,YAAA,IAAI,eAAe,KAAK,KAAK,IAAI,MAAM,EAAE;AACvC,gBAAA,MAAM,KAAK,GAAG,SAAS,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACrD,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,EAA+C,CAAC,CAAC,CACnF;gBAED,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AACvC,oBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AACpB,oBAAA,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,wBAAA,OAAO,KAAK;AACvC,oBAAA,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,oBAAA,OAAO,IAAI;AACb,gBAAA,CAAC,CAAC;YACJ;AAEA,YAAA,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,EAAE,MACjD,YAAY,CAAC,GAAG,CACd,CAAC,YAAY,KACX,YAAY,CACV,QAAQ,CAAC,MAAM,YAAY,CAAC,EAC5B,GAAG,QAAQ,CACC,CACjB,CACF;AAED,YAAA,MAAM,UAAU,GAAG,OAAO,EAAE;YAE5B,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;gBAEnG,IAAI,YAAY,GAAG,eAAe;gBAClC,IAAI,UAAU,IAAI,YAAY,CAAC,MAAM,GAAG,UAAU,EAAE;AAClD,oBAAA,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,GAAG,UAAU;oBAEpD,MAAM,eAAe,GACnB,cAAc,KAAK,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;AAErG,oBAAA,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAElD,YAAY;wBACV,cAAc,KAAK,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;gBACrG;AAEA,gBAAA,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AACzB,gBAAA,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAChC,gBAAA,OAAO,iBAAiB;YAC1B;iBAAO;AACL,gBAAA,MAAM,KAAK,GAAG,SAAS,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACrD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE9D,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAI;oBACtD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAA+C,CAAC;AAClF,oBAAA,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;AAChC,gBAAA,CAAC,CAAC;gBAEF,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAA+C,CAAC,EAAE,CAAC,CAAC,CAAC,CAC/F;gBAED,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,YAAY,KAAI;AACrD,oBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC;oBAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;oBAEvC,IAAI,SAAS,EAAE;AACb,wBAAA,OAAO,SAAS;oBAClB;oBAEA,OAAO,qBAAqB,CAC1B,QAAQ,EACR,MACE,YAAY,CACV,QAAQ,CAAC,MAAM,YAAY,CAAC,EAC5B,GAAG,QAAQ,CACC,CACjB;AACH,gBAAA,CAAC,CAAC;AAEF,gBAAA,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;oBACjC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACpC,wBAAA,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE;oBAC3B;gBACF;AAEA,gBAAA,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AAEzB,gBAAA,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI;AAE1D,gBAAA,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAEnB,gBAAA,OAAO,IAAI;YACb;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;IAED,MAAM,KAAK,GAAG,MAAK;AACjB,QAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,EAAE;AAC7B,YAAA,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;QACxB;AAEA,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACf,QAAA,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,IAAA,CAAC;IAED,MAAM,CAAC,MAAK;QACV,YAAY,IAAI;AAEhB,QAAA,SAAS,CAAC,MAAM,KAAK,EAAE,CAAC;AAC1B,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;IAEjD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;mFAAC;IAErE,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM;qFAAC;AAEhF,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,MAAM,EAAE,GAAG,OAAO,EAAE;QACpB,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC;mFAAC;AAEF,IAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC,MAAM;QAC9B,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM;AAC3D,QAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;IAC1B,CAAC;wFAAC;IAEF,MAAM,QAAQ,GAAG,QAAQ,CACvB,MACE,OAAO;SACJ,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE;SACpB,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI;iFACrC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MACtB,OAAO;SACJ,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE;SACpB,MAAM,CAAC,CAAC,CAAC,KAA8B,CAAC,KAAK,IAAI,CAAC;+EACtD;AAED,IAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,MAAM,SAAS,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;AACpD,QAAA,OAAO,SAAS,GAAG,SAAS,CAAC,IAAI,SAAS;AAC5C,IAAA,CAAC,CAAuB;AAExB,IAAA,MAAM,OAAO,GAAG,CAAC,OAAkC,KAAI;AACrD,QAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,EAAE;AAC7B,YAAA,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC;QACjE;AACF,IAAA,CAAC;IAED,MAAM,WAAW,GAAG,MAAK;AACvB,QAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,EAAE;AAC7B,YAAA,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE;AACjB,gBAAA,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC;YACnD;QACF;AACF,IAAA,CAAC;AAED,IAAA,MAAM,KAAK,GAAgD;AACzD,QAAA,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;AAC7B,QAAA,SAAS,EAAE,SAAS,CAAC,UAAU,EAAE;QACjC,UAAU;QACV,UAAU;QACV,YAAY;QACZ,UAAU;QACV,eAAe;QACf,QAAQ;QACR,MAAM;QACN,QAAQ;QACR,OAAO;QACP,KAAK;QACL,WAAW;AACX,QAAA,MAAM,EAAE;YACN,WAAW;AACZ,SAAA;KACF;AAED,IAAA,MAAM,YAAY,GAAG,iCAAiC,EAAE;AAExD,IAAA,IAAI,sBAAsB,EAAE,IAAI,CAAC,YAAY,EAAE;QAC7C,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAC5C,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE;AACJ,gBAAA,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AAC1C,aAAA;AACF,SAAA,CAAC;QAEF,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC;IAC1C;AAEA,IAAA,OAAO,KAAK;AACd;;ACrbA;AAuBO,MAAM,wBAAwB,GAAG,CAAI,QAAsB,KAAI;AACpE,IAAA,MAAM,UAAU,GAA4B;QAC1C,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,UAAU,EAAE,QAAQ,CAAC,cAAc;QACnC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC9B;AAED,IAAA,OAAO,UAAU;AACnB;AAEO,MAAM,uBAAuB,GAAG,CAAI,QAA4B,KAAI;AACzE,IAAA,MAAM,UAAU,GAA4B;QAC1C,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,UAAU,EAAE,QAAQ,CAAC,cAAc;QACnC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC9B;AAED,IAAA,OAAO,UAAU;AACnB;AAEO,MAAM,wBAAwB,GAAG,CAAI,QAA6B,KAAI;AAC3E,IAAA,MAAM,UAAU,GAA4B;QAC1C,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,YAAY,EAAE,QAAQ,CAAC,KAAK;QAC5B,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC9B;AAED,IAAA,OAAO,UAAU;AACnB;AAEO,MAAM,kCAAkC,GAAG,CAAI,QAAuC,KAAI;IAC/F,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAE9E,IAAA,MAAM,UAAU,GAA4B;QAC1C,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,UAAU;QACV,WAAW;QACX,YAAY,EAAE,QAAQ,CAAC,KAAK;QAC5B,SAAS,EAAE,QAAQ,CAAC,KAAK;KAC1B;AAED,IAAA,OAAO,UAAU;AACnB;MAEa,qBAAqB,GAAG,CAAC,SAAS,GAAG,EAAE,KAAI;IACtD,OAAO,CAAI,QAAW,KAAI;AACxB,QAAA,MAAM,UAAU,GAA4B;YAC1C,KAAK,EAAE,CAAC,QAAQ,CAAC;AACjB,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,YAAY,EAAE,CAAC;YACf,SAAS;SACV;AAED,QAAA,OAAO,UAAU;AACnB,IAAA,CAAC;AACH;AAoMO,MAAM,qBAAqB,GAAG,CAKnC,OAA6D,KAC3D;IACF,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO;AAE9D,IAAA,MAAM,eAAe,GAAG,MAAM,CAA4B,IAAI;wFAAC;IAC/D,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC;oFAAC;AACpD,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,EAAE;sFAAC;AAC3C,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,EAAE;sFAAC;AAC3C,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC;qFAAC;AAE9B,IAAA,MAAM,aAAa,GAAG,MAAM,CAA2B,MAAM;sFAAC;AAE9D,IAAA,8BAA8B,EAAE;IAChC,MAAM,KAAK,GAAG,gBAAgB,CAAC;AAC7B,QAAA,IAAI,EAAE,MAAM,IAAI;QAChB,YAAY;AACZ,QAAA,MAAM,EAAE,IAAI;QACZ,QAAQ;AACR,QAAA,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,KAAI;AACnC,YAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC;AAC9B,YAAA,MAAM,GAAG,GAAG,aAAa,EAAE;YAE3B,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI;AAC3D,gBAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE;YAC3C;AAAO,iBAAA,IAAI,GAAG,KAAK,UAAU,EAAE;AAC7B,gBAAA,OAAO,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;YACpE;iBAAO;AACL,gBAAA,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,UAAU,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE;YACpE;QACF,CAAC;AACD,QAAA,SAAS,EAAE,sBAAsB;AAClC,KAAA,CAAC;IAEF,MAAM,CAAC,MAAK;AACV,QAAA,YAAY,EAAE;QAEd,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC;QAE5C,SAAS,CAAC,MAAK;YACb,KAAK,CAAC,KAAK,EAAE;AACb,YAAA,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;AAChC,YAAA,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;AAChC,YAAA,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;AAChC,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAK;QAClC,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE;AACzC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE;AAE5B,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI;AAErB,QAAA,OAAO,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;IACrC,CAAC;sFAAC;AAEF,IAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAK;QAClC,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE;AAC1C,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE;AAE5B,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI;AAErB,QAAA,OAAO,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;IACrC,CAAC;sFAAC;AAEF,IAAA,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AACtC,QAAA,MAAM,GAAG,GAAG,aAAa,EAAE;AAE3B,QAAA,OAAO,GAAG,GAAG,aAAa,EAAE,KAAK,GAAG,CAAC,WAAW,GAAG,KAAK;IAC1D,CAAC;0FAAC;AAEF,IAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,MAAM,GAAG,GAAG,aAAa,EAAE;AAE3B,QAAA,OAAO,GAAG,GAAG,aAAa,EAAE,KAAK,GAAG,CAAC,UAAU,GAAG,KAAK;IACzD,CAAC;yFAAC;IAEF,MAAM,iBAAiB,GAAG,MAAK;AAC7B,QAAA,MAAM,IAAI,GAAG,aAAa,EAAE,GAAG,CAAC;AAChC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE;AAErC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;AAC1B,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,IAAI,GAAG,CAAC,EAAE;YACZ,IAAI,SAAS,EAAE,EAAE;gBACf,MAAM,sDAAsD,EAAE;YAChE;AAEA,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACrD,QAAA,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC;QAE7B,OAAO,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;AACpD,IAAA,CAAC;IAED,MAAM,aAAa,GAAG,MAAK;AACzB,QAAA,MAAM,IAAI,GAAG,aAAa,EAAE,GAAG,CAAC;AAChC,QAAA,MAAM,iBAAiB,GAAG,aAAa,EAAE;AACzC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE;AAErC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;AAC1B,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,CAAC,iBAAiB,EAAE;YACtB,IAAI,SAAS,EAAE,EAAE;gBACf,MAAM,gDAAgD,EAAE;YAC1D;AAEA,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,IAAI,GAAG,iBAAiB,CAAC,UAAU,EAAE;YACvC,IAAI,SAAS,EAAE,EAAE;gBACf,MAAM,uCAAuC,CAAC,IAAI,EAAE,iBAAiB,CAAC,UAAU,CAAC;YACnF;AAEA,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACrD,QAAA,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;QAEzB,OAAO,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;AACpD,IAAA,CAAC;AAED,IAAA,MAAM,eAAe,GAAG,CAAC,UAAkB,KAAI;AAC7C,QAAA,MAAM,oBAAoB,GAAG,aAAa,EAAE;AAC5C,QAAA,MAAM,oBAAoB,GAAG,aAAa,EAAE;AAE5C,QAAA,IAAI,CAAC,oBAAoB,IAAI,CAAC,oBAAoB,EAAE;AAClD,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,uBAAuB,GAAG,UAAU,KAAK,oBAAoB,CAAC,WAAW,GAAG,CAAC;QACnF,MAAM,sBAAsB,GAAG,UAAU,KAAK,oBAAoB,CAAC,WAAW,GAAG,CAAC;AAElF,QAAA,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE;YACxC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM;AAC3C,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,aAAa,EAAE,CAAC,GAAG,CAAC;AAEvE,YAAA,IAAI,YAAY,KAAK,eAAe,EAAE;gBACpC,IAAI,SAAS,EAAE,EAAE;AACf,oBAAA,MAAM,gDAAgD,CAAC,YAAY,EAAE,eAAe,CAAC;gBACvF;YACF;AAEA,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE,EAAE;AACtB,YAAA,OAAO,KAAK;QACd;QAEA,OAAO,uBAAuB,IAAI,sBAAsB;AAC1D,IAAA,CAAC;AAED,IAAA,MAAM,KAAK,GAAG,CAAC,YAA0C,KAAI;QAC3D,MAAM,IAAI,GAAG,YAAY,EAAE,WAAW,IAAI,WAAW,EAAE;AAEvD,QAAA,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;AACzB,QAAA,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnC,IAAA,CAAC;AAED,IAAA,MAAM,oBAAoB,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,MAAM,oBAAoB,GAAG,aAAa,EAAE;AAE5C,QAAA,IAAI,CAAC,oBAAoB;AAAE,YAAA,OAAO,KAAK;AAEvC,QAAA,OAAO,aAAa,EAAE,GAAG,CAAC;IAC5B,CAAC;6FAAC;AACF,IAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,MAAM,oBAAoB,GAAG,aAAa,EAAE;AAE5C,QAAA,OAAO,oBAAoB,GAAG,aAAa,EAAE,GAAG,oBAAoB,CAAC,UAAU,GAAG,KAAK;IACzF,CAAC;yFAAC;AAEF,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAK;AAC1B,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE;QAC5B,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;IAChE,CAAC;8EAAC;AAEF,IAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAK;AAChC,QAAA,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE;IACvE,CAAC;oFAAC;AAEF,IAAA,MAAM,OAAO,GAAG,CAAC,OAA8C,KAAI;AACjE,QAAA,MAAM,OAAO,GAAG,OAAO,EAAE,KAAK;QAE9B,IAAI,OAAO,EAAE;AACX,YAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAgB;AAChD,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE;AAE5B,YAAA,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE;AACtD,gBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC5B,gBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE;gBACzB,MAAM,wBAAwB,GAAG,GAAG,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC;gBAEnE,IAAI,wBAAwB,EAAE;AAC5B,oBAAA,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC7B;qBAAO,IAAI,GAAG,EAAE;AACd,oBAAA,IAAI,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AAChF,wBAAA,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;;AAI3B,wBAAA,IAAI,KAAK,KAAK,CAAC,EAAE;4BACf,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;4BAE5C,IAAI,SAAS,EAAE;AACb,gCAAA,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;4BACjC;wBACF;wBAEA,IAAI,KAAK,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;4BACxC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;4BAE5C,IAAI,SAAS,EAAE;AACb,gCAAA,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;4BACjC;wBACF;oBACF;gBACF;YACF;AAEA,YAAA,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE;AACpC,gBAAA,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;YAChE;QACF;aAAO;YACL,KAAK,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;QACpD;AACF,IAAA,CAAC;AAED,IAAA,MAAM,UAAU,GAAmD;QACjE,aAAa;QACb,aAAa;QACb,iBAAiB;QACjB,aAAa;QACb,oBAAoB;QACpB,gBAAgB;QAChB,KAAK;AACL,QAAA,SAAS,EAAE,aAAa,CAAC,UAAU,EAAE;QACrC,OAAO,EAAE,KAAK,CAAC,UAAU;QACzB,KAAK,EAAE,KAAK,CAAC,QAAQ;QACrB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,WAAW;QACX,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,gBAAgB;QAChB,iBAAiB;QACjB,KAAK;QACL,OAAO;KACR;IAED,IAAI,sBAAsB,EAAE,EAAE;QAC5B,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAC5C,YAAA,IAAI,EAAE,mBAAmB;AACzB,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,IAAI,EAAE;AACJ,gBAAA,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AAC3C,aAAA;AACF,SAAA,CAAC;QAEF,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC;IAC1C;AAEA,IAAA,OAAO,UAAU;AACnB;;MC/iBa,wBAAwB,CAAA;AACnC,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IACpD;AAEA,IAAA,WAAA,CAAmB,OAAuC,EAAA;QAAvC,IAAA,CAAA,OAAO,GAAP,OAAO;IAAmC;IAE7D,OAAO,GAAA;;IAEP;AACD;;MCVY,iBAAiB,CAAA;AAC5B,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,EAAE,aAAa,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,gBAAgB,CAAA,CAAE,EAAE;IAC5D;AAEA,IAAA,IAAY,gBAAgB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA,CAAE,CAAC;IAClE;AAEA,IAAA,WAAA,CAAmB,OAAgC,EAAA;QAAhC,IAAA,CAAA,OAAO,GAAP,OAAO;IAA4B;IAEtD,OAAO,GAAA;;IAEP;AACD;;AC4CM,MAAM,yBAAyB,GAAG,CACvC,GAAqF,EACrF,OAA+F,EAC/F,MAA6B,KAC3B;IACF,wBAAwB,CAAC,yBAAyB,CAAC;IAEnD,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,GAAG,MAAM,IAAI,EAAE;AAE3E,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,MAAM,QAAQ,GAAG,aAAa,EAAE;;AAGhC,IAAA,MAAM,KAAK,GAAI,QAAgB,CAAC,MAAM;IACtC,MAAM,WAAW,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC;IAEtC;SACG,IAAI,CACH,SAAS,CAAC,QAAQ,CAAC,EACnB,SAAS,CAAC,IAAI,CAAC,EACf,QAAQ,EAAE,EACV,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,KAAI;AAC7B,QAAA,MAAM,UAAU,GAAG,CAAC,CAAiD,KAAI;YACvE,IAAI,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,EAAE,WAAW,KAAK,aAAa,CAAC,EAAE;gBAC9F,CAAC,EAAE,KAAK,EAAE;YACZ;AAEA,YAAA,IACE,CAAC,CAAC,EAAE,cAAc,EAAE;iBACnB,CAAC,mBAAmB,KAAK,SAAS,IAAI,CAAC,EAAE,WAAW,KAAK,mBAAmB,CAAC;gBAC9E,CAAC,EAAE,SAAS,EACZ;gBACA,CAAC,EAAE,WAAW,EAAE;YAClB;AAEC,YAAA,CAA+B,EAAE,OAAO,IAAI;AAC/C,QAAA,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,KAAK,IAAI,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,KAAK,IAAI,CAAC,EAAE;AAC5F,YAAA,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC;AACxC,YAAA,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC;YAErC,UAAU,CAAC,SAAS,CAAC;QACvB;aAAO,IACL,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,KAAK,IAAI;AAC/C,aAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,KAAK,IAAI,CAAC,EAChD;YACA,IAAI,SAAS,EAAE;AACb,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACzC,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC;gBAC7C;YACF;YAEA,IAAI,SAAS,EAAE;AACb,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACzC,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC;gBAC1C;YACF;YAEA,IAAI,SAAS,EAAE;AACb,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,oBAAA,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC1B;YACF;QACF;AAAO,aAAA,IACL,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;AAC/C,aAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,EAChD;AACA,YAAA,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC;QAC1F;AACF,IAAA,CAAC,CAAC;AAEH,SAAA,SAAS,EAAE;AAEd,IAAA,QAAQ,CAAC,SAAS,CAAC,MAAK;AACtB,QAAA,MAAM,KAAK,GAAG,OAAO,EAAE;AAEvB,QAAA,MAAM,WAAW,GAAG,CAAC,CAAiD,KAAI;AACxE,YAAA,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC;YAEhC,IAAI,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,EAAE,WAAW,IAAI,cAAc,KAAK,SAAS,KAAK,cAAc,CAAC,EAAE;gBAChG,CAAC,EAAE,KAAK,EAAE;AACT,gBAAA,CAA+B,EAAE,OAAO,IAAI;YAC/C;AACF,QAAA,CAAC;AAED,QAAA,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;YAClB,WAAW,CAAC,KAAK,CAAC;QACpB;AAAO,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC/B,YAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;gBACrB,WAAW,CAAC,CAAC,CAAC;YAChB;QACF;AACF,IAAA,CAAC,CAAC;AACJ;AAkCM,SAAU,aAAa,CAC3B,MAAuC,EACvC,OAA8E,EAAA;;IAG9E,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,OAAc,CAAC;IAE1C,yBAAyB,CAAC,MAAuB,EAAE,MAAM,CAAC,EAAO,EAAE,OAAO,CAAC;AAE3E,IAAA,OAAO,CAAkB;AAC3B;AAEM,SAAU,cAAc,CAC5B,WAAoB,EACpB,QAAkB,EAAA;IAElB,IAAI,WAAW,GAAG,IAAI;AAEtB,IAAA,IAAI;QACF,WAAW,GAAG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,WAAW,EAAE,CAAC;IACpE;AAAE,IAAA,MAAM;;;IAGR;AAEA,IAAA,MAAM,UAAU,GAAG,MAAM,CAAI,WAAgB;mFAAC;IAE9C,MAAM,CAAC,MAAK;AACV,QAAA,MAAM,IAAI,GAAG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,WAAW,EAAE,CAAC;QAEjE,SAAS,CAAC,MAAK;YACb,IAAI,IAAI,KAAK,UAAU,EAAE;gBAAE;AAE3B,YAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,UAAU,CAAC,UAAU,EAAE;AAChC;AAEM,SAAU,aAAa,CAC3B,WAAoB,EACpB,OAA+E,EAAA;AAE/E,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEjC,MAAM,CAAC,GAAG,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC;IAC/C,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC;IAEpC,yBAAyB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC;AAElD,IAAA,OAAO,CAAC;AACV;AAEA;;;AAGG;AACG,SAAU,uBAAuB,CACrC,WAAoB,EACpB,OAA+E,EAAA;AAE/E,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEjC,MAAM,CAAC,GAAG,kBAAkB,CAAC,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACnE,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC;IAEpC,yBAAyB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC;AAElD,IAAA,OAAO,CAAC;AACV;AAEM,SAAU,kBAAkB,CAChC,WAAoB,EACpB,OAA+E,EAAA;AAE/E,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEjC,MAAM,CAAC,GAAG,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC;IAC/C,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC;IAEpC,yBAAyB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC;AAElD,IAAA,OAAO,CAAC;AACV;AAEM,SAAU,cAAc,CAC5B,MAAiB,EACjB,OAAoD,EAAA;IAEpD,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzC,yBAAyB,CAAC,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,OAAO,CAAC;AAEvD,IAAA,OAAO,GAAG;AACZ;AAEM,SAAU,gBAAgB,CAC9B,MAAS,EACT,OAA2B,EAAA;AAE3B,IAAA,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,IAAI,EAAE;AAEvC,IAAA,MAAM,QAAQ,GAAG,QAAQ,CACvB,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CACvB,SAAS,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EACrD,SAAS,CAAC,CAAC,KAAK,KAAI;QAClB,IAAI,aAAa,EAAE;AACjB,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA,SAAA,+BAAA,SAAA,8BAAgD,CAAC,CAAC;QAC5F;AAEA,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC;IAClB,CAAC,CAAC,CACH,EACD;AACE,QAAA,YAAY,EAAE,IAAI;AACnB,KAAA,CACkE;AAErE,IAAA,MAAM,QAAQ,GAAG,YAAY,CAA2D,QAAQ;iFAAC;AAEjG,IAAA,OAAO,QAAQ;AACjB;AAKM,SAAU,wBAAwB,CACtC,MAAS,EACT,OAA2B,EAAA;IAE3B,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;AAE3C,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,MAAM,KAAK,GAAG,CAAC,EAAE;AAEjB,QAAA,OAAO,mBAAmB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI;IAC3D,CAAC;mFAAC;AAED,IAAA,UAAkC,CAAC,OAAO,CAAC,GAAG,MAAK;AAClD,QAAA,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACb,IAAA,CAAC;AAED,IAAA,OAAO,UAAiC;AAC1C;AAEM,SAAU,qBAAqB,CACnC,MAAS,EAAA;AAET,IAAA,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAElC,OAAO,QAAQ,CAAC,MAAK;AACnB,QAAA,MAAM,KAAK,GAAG,CAAC,EAAE;AAEjB,QAAA,OAAO,mBAAmB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI;AACxD,IAAA,CAAC,CAAC;AACJ;AAEM,SAAU,uBAAuB,CACrC,MAAS,EAAA;AAET,IAAA,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAElC,OAAO,QAAQ,CAAC,MAAK;AACnB,QAAA,MAAM,KAAK,GAAG,CAAC,EAAE;AAEjB,QAAA,OAAO,mBAAmB,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI;AAClD,IAAA,CAAC,CAAC;AACJ;;ACpWO,MAAM,UAAU,GAAG,CAAoC,MAAS,KAAI;;AAEzE,IAAA,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpE,QAAA,OAAO,MAAM;IACf;;IAGA,MAAM,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC;;AAIpD,IAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;AAC5B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;AAE1B,QAAA,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACtC,UAAU,CAAC,KAAU,CAAC;QACxB;IACF;AAEA,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9B;;ACpBA;;;;;AAKG;MACU,GAAG,GAAG,MAAY;;MCelB,cAAc,CAAA;AAQzB,IAAA,WAAA,CACU,YAEuD,EACvD,OAAsB,EACtB,MAAkB,EAAA;QAJlB,IAAA,CAAA,YAAY,GAAZ,YAAY;QAGZ,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,MAAM,GAAN,MAAM;;;AAKhB,QAAA,IAAA,CAAA,OAAO,GAAgE,CACrE,IAAgE,KAC9D;YACF,MAAM,KAAK,GAAG,UAAU,CAAC;AACvB,gBAAA,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS;AACnC,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAiB;gBAC1C,UAAU,EAAE,IAAI,EAAE,UAAU;AAC5B,gBAAA,WAAW,EAAE,uBAAuB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;gBAC/F,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW;AAC3D,aAAA,CAAU;AAEX,YAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,kBAAkB,IAAI,EAAE,IAAI,oBAAoB,CAAC,KAAe,EAAE,IAAI,CAAC;AAEvG,YAAA,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE;gBACjF,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAuD,QAAQ,CAAC;gBAErG,IAAI,aAAa,EAAE;AACjB,oBAAA,OAAO,aAAa;gBACtB;YACF;YAEA,MAAM,KAAK,GAAG,IAAI,OAAO,CACvB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,YAAY,EACjB,KAAK,EACL,IAAI,IAAK,EAAgB,EACzB,QAAQ,CACT;AAED,YAAA,IAAI,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE;gBACjF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC;YAClC;AAEA,YAAA,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAExC,YAAA,OAAO,KAAK;AACd,QAAA,CAAC;AAED,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,YAAqD,EAAE,MAA6B,KAAI;AACvG,YAAA,wBAAwB,CAAC,IAAI,CAAC,aAAa,CAAC;YAE5C,MAAM,OAAO,GAAG,IAAI,eAAe,CAAyC,YAAY,IAAI,IAAI,CAAC;AAEjG,YAAA,yBAAyB,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC;AAEpE,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC;AAED,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,YAAqD,EAAE,MAA6B,KAAI;AACtG,YAAA,wBAAwB,CAAC,IAAI,CAAC,YAAY,CAAC;AAE3C,YAAA,MAAM,OAAO,GAAG,MAAM,CAAyC,YAAY,IAAI,IAAI;wFAAC;AAEpF,YAAA,yBAAyB,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,OAAO,EAAE,EAAE,MAAM,CAAC;AAEzE,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC;AAED,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,YAAqD,KACtE,IAAI,eAAe,CAAyC,YAAY,IAAI,IAAI,CAAC;IA/DhF;AAgEJ;;MChGY,UAAU,CAAA;AAgBrB,IAAA,WAAA,CACU,OAKP,EAAA;QALO,IAAA,CAAA,OAAO,GAAP,OAAO;AAhBjB;;AAEG;AACM,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAsB;QAEvC,IAAA,CAAA,iBAAiB,GAAkB,IAAI;QACvC,IAAA,CAAA,oBAAoB,GAAG,KAAK;AAC5B,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE;AAE/B,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAU;AACrC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAc;AAEzC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AAChD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;QAUzD,IAAI,CAAC,uBAAuB,EAAE;IAChC;IAEA,GAAG,CAAC,EAAU,EAAE,KAAiB,EAAA;QAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC;QAE1B,IAAI,CAAC,qBAAqB,EAAE;QAE5B,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC;AAEhC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7B;AAEA,IAAA,GAAG,CAAuB,EAAU,EAAA;QAClC,OAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAO,IAAI,IAAI;IAC3C;AAEA,IAAA,MAAM,CAAC,EAAU,EAAA;AACf,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAEtB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC;AAElC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7B;AAEA,IAAA,OAAO,CAAC,QAAkD,EAAA;QACxD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;AACtC,YAAA,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;QACtB;IACF;AAEA,IAAA,mBAAmB,CAAC,MAAiE,EAAA;QACnF,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,EAAE;QAEzD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;YACtC,IACE,KAAK,CAAC,OAAO;AACb,iBAAC,KAAK,CAAC,SAAS,IAAI,mBAAmB,CAAC;AACxC,gBAAA,KAAK,CAAC,mBAAmB,CAAC,+BAA+B,EACzD;AACA,gBAAA,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;YAC3D;AAAO,iBAAA,IAAI,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACxC,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAClB;QACF;IACF;AAEA;;AAEG;AACH,IAAA,qBAAqB,CAAC,KAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;IAEQ,uBAAuB,GAAA;QAC7B,MAAM,WAAW,GAAG,SAAS,CAAQ,MAAM,EAAE,MAAM,CAAC;QACpD,MAAM,YAAY,GAAG,SAAS,CAAQ,MAAM,EAAE,OAAO,CAAC;AAEtD,QAAA,WAAW,CAAC,SAAS,CAAC,MAAK;YACzB,KAAK,CAAC,IAAI;iBACP,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;iBACrC,SAAS,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE;AACpC,gBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;gBAChC,IAAI,CAAC,qBAAqB,EAAE;AAE5B,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE;AACpC,oBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;wBACrB,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE;4BAClD;wBACF;wBAEA,KAAK,CAAC,YAAY,EAAE;AACtB,oBAAA,CAAC,CAAC;gBACJ;AACF,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,YAAY,CAAC,SAAS,CAAC,MAAK;AAC1B,YAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBAC9B;YACF;AAEA,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AAEjC,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE,kBAAkB,IAAI,IAAI,CAAC,OAAO,EAAE,+BAA+B,EAAE;AACrF,gBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;oBACrB,IAAI,IAAI,CAAC,OAAO,EAAE,kBAAkB,IAAI,KAAK,CAAC,gBAAgB,EAAE;wBAC9D,KAAK,CAAC,aAAa,EAAE;oBACvB;oBAEA,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,kBAAkB,GAAG,KAAK,EAAE;AAChD,wBAAA,IACE,IAAI,CAAC,OAAO,EAAE,+BAA+B;AAC7C,4BAAA,KAAK,CAAC,SAAS;AACf,4BAAA,KAAK,CAAC,OAAO;AACb,4BAAA,KAAK,CAAC,mBAAmB,CAAC,WAAW,EACrC;AACA,4BAAA,KAAK,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;wBAC3D;oBACF;AACF,gBAAA,CAAC,CAAC;YACJ;YAEA,IAAI,CAAC,qBAAqB,EAAE;AAC9B,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,SAAS,CAAC,GAAkB,EAAE,IAAuB,EAAE,SAAiB,EAAA;AAC9E,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB;YAAE;QAExC,MAAM,WAAW,GAA+B,EAAE;QAElD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;AACjC,YAAA,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK;AAC1B,QAAA,CAAC,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,CAAA,GAAA,EAAM,SAAS,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,EAAE,mBAAmB,CAAC;QAE3D,OAAO,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACrC,QAAA,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAC1B;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE;YACnC;QACF;AAEA,QAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;QAElC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC,MAAK;YAC/C,IAAI,CAAC,oBAAoB,EAAE;QAC7B,CAAC,EAAE,KAAK,CAAC;IACX;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE;AACnC,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC5C,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;QACnC;IACF;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC;QAE1C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,KAAI;YAChC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACnC,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAClB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;AAE5C,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YACrB,IAAI,CAAC,qBAAqB,EAAE;QAC9B;IACF;AAEQ,IAAA,oBAAoB,CAAC,MAAc,EAAA;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,6BAA6B;YAAE;QAElD,OAAO,CAAC,GAAG,CAAC,CAAA,MAAA,EAAS,MAAM,CAAA,CAAE,EAAE,kCAAkC,CAAC;IACpE;AACD;;MC/KY,aAAa,CAAA;AAMxB,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,aAAa;IAC3B;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,EAAE,IAAI,IAAI;IACvG;AACA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,YAAY,EAAE,IAAI,IAAI;IAC/G;AAGA,IAAA,WAAA,CAAoB,aAAkC,EAAA;QAAlC,IAAA,CAAA,aAAa,GAAb,aAAa;AAFhB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAsB,IAAI,CAAC;QAWhF,IAAA,CAAA,GAAG,GAAG,CAQJ,WAAkF,KAElF,IAAI,CAAC,KAAK,CAA8C;AACtD,YAAA,GAAG,WAAW;AACd,YAAA,MAAM,EAAE,KAAK;AACd,SAAA,CAAC;QAEJ,IAAA,CAAA,IAAI,GAAG,CAQL,WAAkF,KAElF,IAAI,CAAC,KAAK,CAA8C;AACtD,YAAA,GAAG,WAAW;AACd,YAAA,MAAM,EAAE,MAAM;AACf,SAAA,CAAC;QAEJ,IAAA,CAAA,GAAG,GAAG,CAQJ,WAAkF,KAElF,IAAI,CAAC,KAAK,CAA8C;AACtD,YAAA,GAAG,WAAW;AACd,YAAA,MAAM,EAAE,KAAK;AACd,SAAA,CAAC;QAEJ,IAAA,CAAA,KAAK,GAAG,CAQN,WAAkF,KAElF,IAAI,CAAC,KAAK,CAA8C;AACtD,YAAA,GAAG,WAAW;AACd,YAAA,MAAM,EAAE,OAAO;AAChB,SAAA,CAAC;QAEJ,IAAA,CAAA,MAAM,GAAG,CAQP,WAAkF,KAElF,IAAI,CAAC,KAAK,CAA8C;AACtD,YAAA,GAAG,WAAW;AACd,YAAA,MAAM,EAAE,QAAQ;AACjB,SAAA,CAAC;QAEJ,IAAA,CAAA,QAAQ,GAAG,CAQT,WAAqF,KAErF,IAAI,CAAC,KAAK,CAA8C;AACtD,YAAA,GAAG,WAAW;AACd,YAAA,MAAM,EAAE,WAAW;AACpB,SAAA,CAAC;QAEJ,IAAA,CAAA,SAAS,GAAG,CAQV,WAAqF,KAErF,IAAI,CAAC,KAAK,CAA8C;AACtD,YAAA,GAAG,WAAW;AACd,YAAA,MAAM,EAAE,YAAY;AACrB,SAAA,CAAC;AAEJ,QAAA,IAAA,CAAA,KAAK,GAAG,CAQN,WAE+D,KAC5D,IAAI,cAAc,CAA8C,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;AAEpG,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,YAA0B,KAAI;AAC/C,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,gBAAA,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE;YAC9B;AAEA,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;AACxC,QAAA,CAAC;AAED,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,MAGpB,KAAI;AACH,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAC/B,gBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG;AAC3B,oBAAA,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,SAAS;iBACrC;YACH;iBAAO;AACL,gBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,SAAS;YAClE;AAEA,YAAA,IAAI,MAAM,CAAC,mBAAmB,EAAE;AAC9B,gBAAA,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;YACnF;AACF,QAAA,CAAC;QAED,IAAA,CAAA,iBAAiB,GAAG,MAAK;AACvB,YAAA,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,QAAA,CAAC;AAED,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,KAAa,KAAI;AACnC,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,KAAK;AACtC,QAAA,CAAC;AA9JC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC;AAC3B,YAAA,mBAAmB,EAAE,aAAa,CAAC,OAAO,EAAE,iBAAiB;AAC7D,YAAA,6BAA6B,EAAE,aAAa,CAAC,OAAO,EAAE,0BAA0B;AAChF,YAAA,+BAA+B,EAAE,aAAa,CAAC,OAAO,EAAE,+BAA+B,IAAI,IAAI;AAC/F,YAAA,kBAAkB,EAAE,aAAa,CAAC,OAAO,EAAE,kBAAkB,IAAI,IAAI;AACtE,SAAA,CAAC;IACJ;AAyJD;;AC/LM,MAAM,kBAAkB,GAAG,CAAC,MAAc,KAAI;AACnD,IAAA,OAAO,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,WAAW;AAChG;MAEa,oBAAoB,GAAG,CAAC,KAAa,EAAE,IAA+B,KAAI;IACrF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE;;AAEnD,SAAA,OAAO,CAAC,MAAM,EAAE,EAAE;;AAElB,SAAA,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAErB,IAAA,MAAM,IAAI,GAAG,CAAA,EAAG,KAAK,CAAA,GAAA,EAAM,SAAS,EAAE;IAEtC,IAAI,IAAI,GAAG,CAAC;AAEZ,IAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACvB,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;IACxD;;;AAIA,IAAA,IAAI,IAAI,UAAU,GAAG,CAAC;AAEtB,IAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;AACxB;;ACSO,MAAM,qBAAqB,GAAG,CACnC,OAAwD,EACxD,SAA+C,KAE/C,sBAAsB,CAAC;AACrB,IAAA,OAAO,EAAE;AACP,QAAA,GAAG,OAAO;;QAEV,iBAAiB,EACf,OAAO,EAAE,iBAAiB;aACzB,CAAC,WAAoB,KAAI;gBACxB,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,MAAM,IAAI,WAAW,EAAE;oBAC3E,OAAQ,WAAiC,CAAC,IAAI;gBAChD;gBAEA,MAAM,gCAAgC,EAAE;AAC1C,YAAA,CAAC,CAAC;AAC+B,KAAA;IACrC,SAAS;AACT,IAAA,YAAY,EAAE,cAAc;AAC7B,CAAA;;AC7CH,MAAM,WAAW,GAAG,eAAe;AAc5B,MAAM,0BAA0B,GAAG,CACxC,OAA2C,KACZ;AAC/B,IAAA,MAAM,YAAY,GAAG,sBAAsB,EAAE;AAC7C,IAAA,MAAM,eAAe,GAAG,8BAA8B,EAAE;AAExD,IAAA,IAAI,qBAAqB,GAAG,YAAY,CAAC,KAAK;AAC9C,IAAA,IAAI,wBAAwB,GAAG,YAAY,CAAC,KAAK;AACjD,IAAA,IAAI,qBAAqB,GAAG,YAAY,CAAC,KAAK;IAE9C,MAAM,KAAK,GAAG,MAAK;QACjB,qBAAqB,CAAC,WAAW,EAAE;AACnC,QAAA,qBAAqB,GAAG,YAAY,CAAC,KAAK;QAC1C,wBAAwB,CAAC,WAAW,EAAE;AACtC,QAAA,wBAAwB,GAAG,YAAY,CAAC,KAAK;QAC7C,qBAAqB,CAAC,WAAW,EAAE;AACnC,QAAA,qBAAqB,GAAG,YAAY,CAAC,KAAK;AAC1C,QAAA,iBAAiB,CAAC;YAChB,YAAY;AACZ,YAAA,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;AAC7D,SAAA,CAAC;AACJ,IAAA,CAAC;;;;AAKD,IAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;SAC5B,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,mBAAmB,CAAC,EACrD,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;AAE5C,SAAA,SAAS,CAAC,MAAM,KAAK,EAAE,CAAC;AAE3B,IAAA,MAAM,KAAK,GAAG,CAAC,KAAuB,KAAI;AACxC,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK;QAE3B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AAC9B,QAAA,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,IAAA,CAAC;AAED,IAAA,MAAM,WAAW,GAAG,CAAC,WAAqC,KAAI;AAC5D,QAAA,MAAM,IAAI,GAAG,WAAW,EAAE,IAAI;QAE9B,MAAM,cAAc,GAAG,MAAK;YAC1B,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE;YACtD,MAAM,WAAW,GAAG,OAAO,IAAI,EAAE,OAAO,KAAK,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI,WAAW,EAAE;YAE7G,IAAI,CAAC,WAAW,EAAE;gBAChB,MAAM,mCAAmC,EAAE;YAC7C;YAEA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;gBACjC,OAAO,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,CAAA,OAAA,EAAU,WAAW,CAAA,CAAE,CAAC;YAC9D;AAEA,YAAA,OAAO,WAAW;AACpB,QAAA,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE;QACtD,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,mCAAmC,EAAE;QAC7C;AAEA,QAAA,MAAM,MAAM,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE;AACvF,QAAA,MAAM,OAAO,GAAG,cAAc,EAAE;QAEhC,OAAO,CAAC,oBAAoB,CAC1B;AACE,YAAA,GAAG,WAAW;AACd,YAAA,IAAI,EAAE;AACJ,gBAAA,IAAI,IAAI,IAAI,EAAE,CAAC;gBACf,OAAO,EAAE,cAAc;AACF,aAAA;AACxB,SAAA,EACD,MAAM,EACN,OAAO,EACP,YAAY,CACb;AACH,IAAA,CAAC;;;;;;;;AASD,IAAA,MAAM,yBAAyB,GAAG,CAAC,WAAqC,KAAI;AAC1E,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE;YACtC,WAAW,CAAC,WAAW,CAAC;YACxB;QACF;QAEA,qBAAqB,CAAC,WAAW,EAAE;QACnC,qBAAqB,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE;AACrE,YAAA,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ;SAChC;aACE,IAAI,CACH,MAAM,CAAC,OAAO,CAAC,EACf,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;AAEpC,aAAA,SAAS,EAAE;AAChB,IAAA,CAAC;AAED,IAAA,MAAM,IAAI,GAAG,CAAC,WAAqC,KAAI;QACrD,eAAe,CAAC,KAAK,EAAE;AAEvB,QAAA,MAAM,oBAAoB,GAA4B;YACpD,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;YAC/C,OAAO,EAAE,WAAW,EAAE,OAAO;SAC9B;QAED,qBAAqB,CAAC,WAAW,EAAE;AACnC,QAAA,qBAAqB,GAAG,YAAY,CAAC,KAAK;QAC1C,wBAAwB,CAAC,WAAW,EAAE;AACtC,QAAA,wBAAwB,GAAG,YAAY,CAAC,KAAK;QAC7C,qBAAqB,CAAC,WAAW,EAAE;AACnC,QAAA,qBAAqB,GAAG,YAAY,CAAC,KAAK;AAE1C,QAAA,wBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC;AAC7C,aAAA,IAAI,CACH,MAAM,CAAC,MAAK;YACV,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE;AAC1C,YAAA,OAAO,YAAY,EAAE,IAAI,KAAK,GAAG;AACnC,QAAA,CAAC,CAAC,EACF,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAEtC,aAAA,SAAS,EAAE;QAEd,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,mBAAmB,EAAE;AAC9D,QAAA,MAAM,SAAS,GAAG,WAAW,EAAE,QAAQ;;;QAIvC,MAAM,0BAA0B,GAAG,SAAS,EAAE,kBAAkB,EAAE,KAAK,IAAI;QAE3E,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,EAAE,IAAI,0BAA0B,EAAE;YACnE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAEtE,qBAAqB,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,mBAAmB,EAAE;AAC7E,gBAAA,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ;aAChC;AACE,iBAAA,IAAI,CACH,SAAS,CAAC,CAAC,WAAW,KAAI;AACxB,gBAAA,IAAI,CAAC,WAAW;AAAE,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjC,gBAAA,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ;gBAElC,OAAO,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAC1E,GAAG,CAAC,CAAC,OAAO,KAAI;AACd,oBAAA,IAAI,OAAO;wBAAE;AAEb,oBAAA,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE;wBACjB,KAAK,CAAC,KAAK,CAAC;oBACd;AAAO,yBAAA,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE;wBAC3B,yBAAyB,CAAC,oBAAoB,CAAC;oBACjD;gBACF,CAAC,CAAC,CACH;AACH,YAAA,CAAC,CAAC;AAEH,iBAAA,SAAS,EAAE;QAChB;AAAO,aAAA,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAE;YAC/B,yBAAyB,CAAC,oBAAoB,CAAC;QACjD;AAAO,aAAA,IAAI,SAAS,CAAC,KAAK,EAAE,EAAE;YAC5B,KAAK,CAAC,SAAS,CAAC;QAClB;aAAO;YACL,MAAM,sCAAsC,EAAE;QAChD;AACF,IAAA,CAAC;AAED,IAAA,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK;IACrB,IAAI,CAAC,sBAAsB,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE;AAEpE,IAAA,OAAO,IAAI;AACb;;ACpLO,MAAM,wBAAwB,GAAG,CACtC,cAAyD,KAC1B;IAC/B,MAAM,GAAG,kBAAkB,CAAC,GAAG,cAAc,CAAC,gBAAgB,CAAC,YAAY;AAC3E,IAAA,MAAM,YAAY,GAAG,kBAAkB,EAAE;AAEzC,IAAA,OAAO,0BAA0B,CAAC;QAChC,YAAY;QACZ,IAAI,EAAE,cAAc,CAAC,IAAI;QACzB,KAAK,EAAE,cAAc,CAAC,KAAK;QAC3B,oBAAoB,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,KAAI;YACpE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,WAAW,IAAI,EAAE;YAEvD,MAAM,KAAK,GAAG,YAAY,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC;YACjE,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;AAEtC,YAAA,IAAI,IAAI,EAAE,WAAW,IAAI,cAAc,CAAC,gBAAgB,CAAC,SAAS,KAAK,KAAK,EAAE;gBAC5E,SAAS,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;YACnD;AAEA,YAAA,MAAM,YAAY,GAAG,EAAE,IAAI,IAAI,IAAK,EAAyB,CAAC,EAAE,OAAO,EAAE;YAEzE,IAAI,cAAc,CAAC,gBAAgB,CAAC,SAAS,KAAK,KAAK,EAAE;AACvD,gBAAA,YAAY,CAAC,WAAW,GAAG,SAAS;YACtC;iBAAO;AACL,gBAAA,YAAY,CAAC,IAAI,GAAG,SAAS;YAC/B;AAEA,YAAA,MAAM,cAAc,GAAqC;AACvD,gBAAA,GAAG,cAAc;AACjB,gBAAA,gBAAgB,EAAE;AAChB,oBAAA,MAAM,EAAE,cAAc,CAAC,gBAAgB,CAAC,MAAM;AAC9C,oBAAA,MAAM,EAAE,cAAc,CAAC,gBAAgB,CAAC,MAAM,KAAK,OAAO,GAAG,KAAK,GAAG,MAAM;oBAC3E,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAqB;AACjE,iBAAA;aACF;AAED,YAAA,YAAY,CAAC;AACX,gBAAA,cAAc,EAAE,cAAc;gBAC9B,YAAY;AACZ,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA,CAAC;QACJ,CAAC;AACF,KAAA,CAAC;AACJ;;AC1DO,MAAM,oBAAoB,GAAG,CAA6B,OAA2C,KAC1G,eAAe,CAAC;IACd,OAAO,EAAE,OAAO,CAAC,OAAO;IACxB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;IAC1C,QAAQ,EAAE,OAAO,CAAC,QAAQ;IAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;AAChC,IAAA,cAAc,EAAE,wBAAwB;AACzC,CAAA;;ACLI,MAAM,2BAA2B,GAAG,CACzC,OAAwD,EACxD,SAAqD,KAErD,sBAAsB,CAAC;AACrB,IAAA,OAAO,EAAE;AACP,QAAA,GAAG,OAAO;;QAEV,iBAAiB,EACf,OAAO,EAAE,iBAAiB;aACzB,CAAC,WAAoB,KAAI;gBACxB,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,MAAM,IAAI,WAAW,EAAE;oBAC3E,OAAQ,WAAiC,CAAC,IAAI;gBAChD;AACA,gBAAA,OAAO,WAAW;AACpB,YAAA,CAAC,CAAC;AACL,KAAA;IACD,SAAS;AACT,IAAA,YAAY,EAAE,oBAAoB;AACnC,CAAA;;ACrBH,MAAM,wBAAwB,GAAG,CAAC,MAAsB,EAAE,SAA4B,KAAI;IACxF,OAAO,CAAC,MAAkC,KAAI;QAC5C,OAAO,CAA6B,KAAU,EAAE,cAAoD,KAClG,qBAAqB,CAAQ,cAAc,EAAE;YAC3C,MAAM;YACN,MAAM;YACN,SAAS;YACT,KAAK;AACN,SAAA,CAAC;AACN,IAAA,CAAC;AACH,CAAC;AAED,MAAM,8BAA8B,GAAG,CAAC,MAAsB,EAAE,SAA4B,KAAI;AAC9F,IAAA,OAAO,CAAC,MAAkC,EAAE,YAA+C,KAAI;QAC7F,OAAO,CAA6B,KAAU,EAAE,cAAoD,KAClG,2BAA2B,CAAQ,cAAc,EAAE;YACjD,MAAM;YACN,MAAM;YACN,SAAS;YACT,KAAK;YACL,YAAY;AACb,SAAA,CAAC;AACN,IAAA,CAAC;AACH,CAAC;AAED;AACO,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,OAAO,EAAE,KAAK;AAE3E;AACO,MAAM,0BAA0B,GAAG,8BAA8B,CAAC,OAAO,EAAE,KAAK;AAEvF;AACO,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,OAAO,EAAE,MAAM;AAE7E;AACO,MAAM,2BAA2B,GAAG,8BAA8B,CAAC,OAAO,EAAE,MAAM;AAEzF;AACO,MAAM,uBAAuB,GAAG,wBAAwB,CAAC,QAAQ,EAAE,KAAK;AAE/E;AACO,MAAM,6BAA6B,GAAG,8BAA8B,CAAC,QAAQ,EAAE,KAAK;AAE3F;AACO,MAAM,wBAAwB,GAAG,wBAAwB,CAAC,QAAQ,EAAE,MAAM;AAEjF;AACO,MAAM,8BAA8B,GAAG,8BAA8B,CAAC,QAAQ,EAAE,MAAM;;ACftF,MAAM,8BAA8B,GAAG,CAC5C,SAA4C,KACP;AACrC,IAAA,MAAM,IAAI,GAAmB,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE;AAEhE,IAAA,QAAQ,SAAS,EAAE,IAAI;QACrB,KAAK,SAAS,EAAE;AACd,YAAA,MAAM,OAAO,GAAY;gBACvB,IAAI;AACJ,gBAAA,IAAI,EAAA,SAAA;AACJ,gBAAA,IAAI,SAAS,CAAC,OAAO,CAAC;AACpB,sBAAE;AACE,wBAAA,QAAQ,EAAE;AACR,4BAAA,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM;AAC1C,4BAAA,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU;AACjD,4BAAA,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK;AACxC,yBAAA;AACF;sBACD,EAAE,CAAC;aACR;AAED,YAAA,OAAO,OAAO;QAChB;QACA,KAAK,SAAS,EAAE;AACd,YAAA,MAAM,OAAO,GAAiC;AAC5C,gBAAA,OAAO,EAAE,EAAE;gBACX,IAAI;gBACJ,QAAQ,EAAE,SAAS,CAAC,QAAQ;AAC5B,gBAAA,IAAI,EAAA,SAAA;aACL;AAED,YAAA,OAAO,OAAO;QAChB;QACA,KAAK,SAAS,EAAE;AACd,YAAA,MAAM,KAAK,GAAY;AACrB,gBAAA,KAAK,EAAE;AACL,oBAAA,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK;AACjC,oBAAA,iBAAiB,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG;AACtC,oBAAA,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM;AAClC,oBAAA,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU;oBAC1C,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AACnC,iBAAA;gBACD,IAAI;AACJ,gBAAA,IAAI,EAAA,SAAA;aACL;AAED,YAAA,OAAO,KAAK;QACd;QACA,SAAS;AACP,YAAA,MAAM,QAAQ,GAAa;gBACzB,IAAI;AACJ,gBAAA,IAAI,EAAA,UAAA;aACL;AAED,YAAA,OAAO,QAAQ;QACjB;;AAEJ;AAEO,MAAM,aAAa,GAAG,CAA2B,KAAc,KAAgB;AACpF,IAAA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC/D,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,EAAE,UAAU,IAAI,KAAK,CAAC,EAAE;AAC1B,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,IAAI;AACb;MAKa,WAAW,CAAA;AA+CtB,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,8BAA8B,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;IACvE;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE;IAClD;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACH,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,CAAC;IACV;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB;IACpC;AAEA,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,MAAM,WAAW,GAAqC;AACpD,YAAA,+BAA+B,EAAE,KAAK;AACtC,YAAA,WAAW,EAAE,KAAK;SACnB;AAED,QAAA,OAAO,WAAW;IACpB;AAEA;;AAEG;AACH,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,WAAA,CACS,QAAmB,EACnB,UAA+C,EAC/C,MAAgE;AAEvE;;;;;AAKG;AACK,IAAA,QAAA,GAAW,KAAK,EAAA;QAVjB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,MAAM,GAAN,MAAM;QAQL,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAjGlB;;AAEG;QACH,IAAA,CAAA,oBAAoB,GAAwB,IAAI;AAChD;;AAEG;QACH,IAAA,CAAA,kBAAkB,GAAsB,IAAI;AAE5C;;;;AAIG;QACH,IAAA,CAAA,eAAe,GAAqB,IAAI;AAExC;;AAEG;QACH,IAAA,CAAA,WAAW,GAA2B,EAAE;AAExC;;AAEG;AACH,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,aAAa,EAA0B;AAEjE;;AAEG;QACH,IAAA,CAAA,gBAAgB,GAAG,KAAK;QAEhB,IAAA,CAAA,YAAY,GAAG,KAAK;AAoE1B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAmC;AACxF,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YACxB;QACF;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CACxG,GAAG,CAAC,CAAC,SAAS,KAAK,8BAA8B,CAAC,SAAS,CAAC,CAAC,EAC7D,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EACzC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C;AAED,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,MAAK;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAEpC,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;oBACpB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAEnE,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;wBACd,IAAI,EAAE,IAAI,CAAC,UAAU;AACrB,wBAAA,QAAQ,EAAE,GAAG;wBACb,EAAE;AACF,wBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;AACzB,qBAAA,CAAC;gBACJ;AACF,YAAA,CAAC,CAAC;QACJ,CAAC;4FAAC;;;;AAKF,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;IACnE;IAEQ,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB;QACF;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;AACxC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE;AACnC,QAAA,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE;IACjC;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB;QACF;QAEA,IAAI,CAAC,SAAS,EAAE;;AAGhB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE;IAChC;IAEA,OAAO,CAAC,UAA+B,EAAE,EAAA;QACvC,SAAS,CAAC;;;;QAIR,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI,EAAE,EAAE,CAAC,CACtG;AAED,QAAA,OAAO,IAAI;IACb;IAEA,KAAK,GAAA;QACH,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACvC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AAErB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,CAAC,MAAkB,EAAA;;QAErB,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,YAAY,EAAE;AAClD,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM;QAEhC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAC1B,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,GAAG,CAAC,CAAC,EACvC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAC3B,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,EACvC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAClD;AAED,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,SAAS,CAAC;AAC1C,YAAA,IAAI,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;AACpE,YAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE;AACnC,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;AACxC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAE9B,QAAA,OAAO,IAAI;IACb;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;AACxC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAEhC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAE5B,QAAA,OAAO,IAAI;IACb;IAEA,aAAa,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AACtD,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAE7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;IAC5E;AAEA,IAAA,SAAS,CAAC,QAAkC,EAAA;QAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACrG,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,SAAS,CAAC,QAAgD,EAAA;QACxD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClG,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,UAAkB,EAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC;QAClC;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;QAE9B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IACjD;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,UAAkB,EAAA;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AAC1C,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB;QACF;QAEA,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE;AAC9C,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;QAChC;AAEA,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;QACrC;QAEA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IACjD;AAEA;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;IACjD;AAEA;;AAEG;AACH,IAAA,eAAe,CAAC,CAAyB,EAAA;AACvC,QAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;AAChD,YAAA,OAAO,EAAE,CAAC,CAAC,CAAmC;QAChD;QAEA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE1E,OAAO,IAAI,CAAC;aACT,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;aACjF,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C;AACD;;ACnaD;;;;;;;;;;;;AAYG;AACI,MAAM,gBAAgB,GAAG,MAA4C;AAC1E,IAAA,MAAM,WAAW,GAAG,CAAI,KAAQ,KAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAc,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IAE9E,MAAM,IAAI,GAAG,MAAK;;AAElB,IAAA,CAAC;AAED,IAAA,MAAM,IAAI,GAAG;AACX,QAAA,IAAI,EAAE,WAAW,CAA4B,IAAI,CAAC;AAClD,QAAA,QAAQ,EAAE,WAAW,CAA6B,IAAI,CAAC;AACvD,QAAA,eAAe,EAAE,WAAW,CAAC,IAAI,CAAC;AAClC,QAAA,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC;AAC1B,QAAA,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC;AACxB,QAAA,kBAAkB,EAAE,WAAW,CAAgB,IAAI,CAAC;AACpD,QAAA,WAAW,EAAE,WAAW,CAAgB,IAAI,CAAC;AAC7C,QAAA,EAAE,EAAE,WAAW,CAAgB,IAAI,CAAC;AACpC,QAAA,cAAc,EAAE,WAAW,CAAC,IAAI,CAAC;KACC;AAEpC,IAAA,MAAM,cAAc,GAAG,OAA6B,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;;;AAI7F,IAAA,MAAM,UAAU,GAAG;AACjB,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,SAAS,EAAE,MAAM,IAAI;KACG;IAE1B,OAAO;AACL,QAAA,GAAG,IAAI;AACP,QAAA,OAAO,EAAE,IAAI;QACb,cAAc;AACd,QAAA,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,CAAC;AAC/C,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC;YAC1B,UAAU;YACV,QAAQ,EAAE,QAAQ,CAAC,IAAI;AACxB,SAAA;KACyB;AAC9B,CAAC;;AClCD;;;;AAIG;AACH,MAAM,gBAAgB,GAAG,CAAC,QAAkB,KAAI;AAC9C,IAAA,IAAI;AACF,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,KAAK,IAAI;IAC/E;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,KAAK;IACd;AACF,CAAC;MAyDY,kBAAkB,CAAA;AAO7B,IAAA,WAAA,CAAmB,OAA0E,EAAA;QAA1E,IAAA,CAAA,OAAO,GAAP,OAAO;AAE1B,QAAA,IAAA,CAAA,OAAO,GAQH,CAAC,IAAuF,KAAI;;;;AAI9F,YAAA,MAAM,QAAQ,GACZ,IAAI,EAAE,QAAQ;AACd,gBAAA,CAAC,MAAK;AACJ,oBAAA,IAAI;AACF,wBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC;oBACzB;AAAE,oBAAA,MAAM;wBACN,MAAM,oCAAoC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBAC/D;gBACF,CAAC,GAAG;AAEN,YAAA,IAAI,OAAO,GAAG,IAAI,WAAW,EAAE;AAE/B,YAAA,IAAI,IAAI,EAAE,OAAO,EAAE;AACjB,gBAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;oBACpD,IAAI,KAAK,EAAE;wBACT,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;oBACnC;AACF,gBAAA,CAAC,CAAC;YACJ;AAEA,YAAA,MAAM,SAAS,GAAG;AAChB,gBAAA,IAAI,IAAI,EAAE,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;AAC1C,gBAAA,IAAI,IAAI,EAAE,UAAU,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC;AAC5D,gBAAA,IAAI,IAAI,EAAE,WAAW,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC;gBAC/D,OAAO;aACc;;;;;AAMvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE;gBAC/B,IAAI,SAAS,EAAE,EAAE;oBACf,OAAO,CAAC,IAAI,CACV,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,gBAAgB,CAAA,iFAAA,CAAmF;AACnJ,wBAAA,CAAA,sKAAA,CAAwK,CAC3K;gBACH;AAEA,gBAAA,OAAO,IAAI,WAAW,CAQpB,gBAAgB,EAAS,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;YACpE;AAEA,YAAA,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAK;gBAC1C,OAAO,SAAS,CAAC,MAAK;AACpB,oBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AACpC,wBAAA,mBAAmB,EAAE,IAAI;wBACzB,QAAQ;AACR,wBAAA,kCAAkC,EAAE,IAAI;;AAExC,wBAAA,iCAAiC,EAAE,IAAI;AACxC,qBAAA,CAAC;AAEF,oBAAA,MAAM,WAAW,GAAG,IAAI,WAAW,CAQjC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAE3C,oBAAA,IAAI,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE;AACnC,wBAAA,MAAM,aAAa,GAAG,MAAM,CAAC,MAAK;AAChC,4BAAA,IAAI,QAAQ,CAAC,cAAc,EAAE,EAAE,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,cAAc,EAAE,EAAE,IAAI,KAAK,SAAS,EAAE;gCAClG,WAAW,CAAC,OAAO,EAAE;gCACrB,aAAa,CAAC,OAAO,EAAE;4BACzB;wBACF,CAAC;0GAAC;oBACJ;AAEA,oBAAA,OAAO,WAAW;AACpB,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AACD,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,YAAqD,EAAE,MAA6B,KAAI;YACvG,MAAM,OAAO,GAAG,IAAI,eAAe,CAAyC,YAAY,IAAI,IAAI,CAAC;AAEjG,YAAA,yBAAyB,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC;AAEpE,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC;AACD,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,YAAqD,EAAE,MAA6B,KAAI;AACtG,YAAA,MAAM,OAAO,GAAG,MAAM,CAAyC,YAAY,IAAI,IAAI;wFAAC;AAEpF,YAAA,yBAAyB,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,OAAO,EAAE,EAAE,MAAM,CAAC;AAEzE,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC;AAED,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,aAAa;IAhH4D;AAiHjG;AAED;;;;;;AAMG;AACI,MAAM,wBAAwB,GAAG,CAOtC,OAA0E,KAClB;AACxD,IAAA,OAAO,IAAI,kBAAkB,CAAmC,OAAO,CAAC;AAC1E;;AC3OA;SA8CgB,aAAa,GAAA;AAC3B,IAAA,OAAO,UACL,MAAqB,EAAA;AAErB,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAkC;AACpG,IAAA,CAAC;AACH;SAEgB,iBAAiB,GAAA;AAC/B,IAAA,OAAO,UAAyC,MAAqB,EAAA;AACnE,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAkB;AAC/E,IAAA,CAAC;AACH;SAEgB,aAAa,GAAA;AAC3B,IAAA,OAAO,UAAyC,MAAqB,EAAA;AACnE,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAwB;AAC1F,IAAA,CAAC;AACH;AAEM,SAAU,iBAAiB,CAAC,aAA+B,EAAA;AAC/D,IAAA,OAAO,UAAyC,MAAqB,EAAA;QACnE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAkB;AACrG,IAAA,CAAC;AACH;AAEM,SAAU,iBAAiB,CAAC,MAAkC,EAAA;AAClE,IAAA,OAAO,UAAyC,MAAqB,EAAA;QACnE,OAAO,MAAM,CAAC,IAAI,CAChB,SAAS,CAAC,CAAC,KAAK,KAAI;YAClB,IAAI,MAAM,EAAE,WAAW,IAAI,KAAK,KAAK,IAAI,EAAE;AACzC,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,OAAO,mBAAmB,CAAC,KAAK,CAAC,IAAI,oBAAoB,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI;AACpF,QAAA,CAAC,EAAE,IAAI,CAAC,CACT;AACH,IAAA,CAAC;AACH;SAEgB,UAAU,GAAA;AACxB,IAAA,OAAO,UAAa,MAAqB,EAAA;AACvC,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAA2B,KAAK,KAAK,IAAI,CAAC,CAAC;AAC7E,IAAA,CAAC;AACH;SAEgB,gBAAgB,GAAA;AAC9B,IAAA,OAAO,UAAqF,MAAqB,EAAA;QAC/G,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAA0C;AAC9G,IAAA,CAAC;AACH;SAEgB,0BAA0B,GAAA;AACxC,IAAA,OAAO,UACL,MAAqB,EAAA;QAErB,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAA0C;AACpH,IAAA,CAAC;AACH;AAEO,MAAM,gBAAgB,GAC3B,CACE,MAAyC,KAE3C,CAAC,MAAqB,KAAI;IACxB,MAAM,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,EAAE,GAAG,MAAM;AAErD,IAAA,IAAI,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AAC3D,QAAA,OAAO,CAAC,IAAI,CAAC,8CAA8C,cAAc,CAAA,eAAA,CAAiB,CAAC;IAC7F;IAEA,OAAO,MAAM,CAAC,IAAI,CAChB,SAAS,CAAC,CAAC,CAAC,KAAI;QACd,IAAI,CAAC,CAAC,EAAE;AACN,YAAA,OAAO,EAAE,CAAC,CAAC,CAAC;QACd;QAEA,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAClB,GAAG,CAAC,CAAC,KAAK,KAAI;AACZ,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;gBAC/B;YACF;AAEA,YAAA,QAAQ,KAAK,CAAC,KAAK,CAAC,MAAM;;AAExB,gBAAA,KAAK,GAAG;AACN,oBAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;oBACtD;;AAGF,gBAAA,KAAK,GAAG;oBACN,IAAI,kCAAkC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAC1D,wBAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;oBACvD;oBACA;;AAEN,QAAA,CAAC,CAAC,EACF,iBAAiB,EAAE,CACpB;IACH,CAAC,CAAC,CACH;AACH;AAEK,MAAM,mBAAmB,GAAG,CAAC,KAAsC,KACxE,KAAK,EAAE,IAAI;AAEN,MAAM,mBAAmB,GAAG,CAAC,KAAsC,KACxE,KAAK,EAAE,IAAI;AAEN,MAAM,mBAAmB,GAAG,CAAC,KAAsC,KACxE,KAAK,EAAE,IAAI;AAEN,MAAM,qBAAqB,GAAG,CAAC,KAAsC,KAC1E,KAAK,EAAE,IAAI;AAEN,MAAM,oBAAoB,GAAG,CAAC,KAAsC,KACzE,KAAK,EAAE,IAAI;AAEN,MAAM,aAAa,GAAG,CAAC,KAAsC,KAAc,KAAK,EAAE,IAAI,CAAC,YAAY,KAAK;MAElG,YAAY,GAAG,CAAC,GAAG,OAAiD,KAAI;IACnF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,KAAI;QACrC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,GAAG;QACZ;QAEA,OAAO;AACL,YAAA,GAAG,GAAG;AACN,YAAA,GAAG,OAAO;SACX;IACH,CAAC,EAAE,EAAE,CAAC;AACR;AAEO,MAAM,gBAAgB,GAAG,CAQ9B,MAAe,KAC0D;AACzE,IAAA,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAClE,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,EAAE,OAAO,IAAI,MAAM,CAAC,EAAE;AACxB,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,OAAO,GAAG,CAAwC,KAAc,KAAgB;AAC3F,IAAA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC/D,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,EAAE,QAAQ,IAAI,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,iBAAiB,GAAG,CAA+B,KAAc,KAAgB;AAC5F,IAAA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC/D,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,EAAE;AACvB,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,qBAAqB,GAAG;AACnC;AACA,QAAW,KACR,IAAI,eAAe,CAAW,IAAI;AAEhC,MAAM,4BAA4B,GAAG;AAC1C;AACA,QAAW,EACX,MAA6B,KAC3B;IACF,wBAAwB,CAAC,4BAA4B,CAAC;AAEtD,IAAA,MAAM,OAAO,GAAG,IAAI,eAAe,CAAW,IAAI,CAAC;AAEnD,IAAA,yBAAyB,CACvB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,EAC1C,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,KAAK,IAAI,IAAI,EACvC,MAAM,CACP;AAED,IAAA,OAAO,OAAO;AAChB;AAEO,MAAM,2BAA2B,GAAG;AACzC;AACA,QAAW,EACX,MAA6B,KAC3B;IACF,wBAAwB,CAAC,2BAA2B,CAAC;AAErD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAW,IAAI;gFAAC;AAEtC,IAAA,yBAAyB,CACvB,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,EACxD,MAAM,OAAO,EAAE,EAAE,KAAK,IAAI,IAAI,EAC9B,MAAM,CACP;AAED,IAAA,OAAO,OAAO;AAChB;AAEO,MAAM,YAAY,GAAG,CAAoE,CAAI,KAClG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK;MAE3C,iBAAiB,GAAG,CAC/B,OAAoE,EACpE,MAAc,KACZ;IACF,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAI,MAAM,IAAI,OAAO,EAAE;QACrB,QAAQ,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;IAC/B;AAEA,IAAA,OAAO,OAAyB;AAClC;AAEO,MAAM,qBAAqB,GAAG,CAUnC,MAID,KAAI;AACH,IAAA,IAAI,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE;AAC3B,QAAA,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;AAErB,QAAA,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC;IACnH;IAEA,OAAO,MAAM,CAAC,OAAiG;AACjH;AAEO,MAAM,kBAAkB,GAAG,CAAC,MAGlC,KAAI;AACH,IAAA,IAAI,MAAc;AAElB,IAAA,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AACnC,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW;AAC/F,QAAA,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;IACzE;SAAO;AACL,QAAA,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAC5D;AAEA,IAAA,OAAO,MAAM;AACf;AAEO,MAAM,gBAAgB,GAAG,CAAC,MAKhC,KAAI;AACH,IAAA,IAAI,IAAa;AAEjB,IAAA,IACE,MAAM,CAAC,MAAM,KAAK,KAAK;QACvB,MAAM,CAAC,MAAM,KAAK,MAAM;QACxB,MAAM,CAAC,MAAM,KAAK,SAAS;AAC3B,SAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9B,aAAC,MAAM,CAAC,MAAM,CAAC,WAAW,KAAK,KAAK;iBACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAC9F;AACA,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AACnC,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK;AACzC,QAAA,MAAM,KAAK,GAAG,YAAY,CAAC,aAAa,CAAC;QAEzC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC;IACtC;SAAO;AACL,QAAA,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI;IAC1B;AAEA,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,sBAAsB,GAAG,CAAC,MAGtC,KAAI;IACH,IAAI,UAAU,GAAkC,IAAI;AAEpD,IAAA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QACxB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM;QAEjD,IAAI,MAAM,EAAE;YACV,UAAU,GAAG,MAAM;QACrB;IACF;SAAO,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE;AAC7C,QAAA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;YAC9D,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM;QAChD;IACF;AAEA,IAAA,OAAO,UAAU;AACnB;AAEO,MAAM,mBAAmB,GAAG,CAAC,MAInC,KAAI;AACH,IAAA,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,CAAC;AAEjD,IAAA,MAAM,aAAa,GACjB,YAAY,CACV,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAC9E,UAAU,EACV,MAAM,CAAC,IAAI,EAAE,OAAO,CACrB,IAAI,SAAS;AAEhB,IAAA,OAAO,aAAa;AACtB;AAEO,MAAM,uBAAuB,GAAG,CAAC,MAIvC,KAAI;AACH,IAAA,IACE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;AAC/B,SAAC,MAAM,CAAC,MAAM,CAAC,WAAW,KAAK,KAAK;aACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAC3F;AACA,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK;AACzC,QAAA,MAAM,KAAK,GAAG,YAAY,CAAC,aAAa,CAAC;QAEzC,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC;AAE1C,QAAA,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE;AAC5B,YAAA,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE;QACrD;AAEA,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,OAAO,MAAM,CAAC,IAAI,EAAE,WAAW;AACjC;AAEO,MAAM,2BAA2B,GACtC,CAME,MAA2C,KAE7C,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAA+D,KAAI;IACjG,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAS,EAAE,MAAM,CAAC,CAAC;IACzF,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAS,EAAE,MAAM,CAAC,CAAC;IAEnF,IAAI,aAAa,KAAK,CAAC,CAAC,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE;AACnD,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,cAAc,GAAG;AACrB,QAAA,GAAG,WAAW;AACd,QAAA,KAAK,EAAE;YACL,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC;YAC/C,MAAM;YACN,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC;AACjD,SAAA;KACF;AAED,IAAA,MAAM,WAAW,GAAG;AAClB,QAAA,GAAG,QAAQ;QACX,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;KACvG;IAED,OAAO;AACL,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,WAAW,EAAE,cAAc;KAC5B;AACH;;AC9YF,IAAI,YAAY,GAAG,CAAC;MAEP,OAAO,CAAA;AAyClB,IAAA,IAAY,OAAO,GAAA;AACjB,QAAA,OAAO,EAAE,IAAI,CAAC,eAAe;IAC/B;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACzB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CACtC,GAAG,CAAC,CAAC,CAAC,KAAI;gBACR,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,0BAA0B;oBAAE;AAE9D,gBAAA,IAAI,oBAAoB,CAAC,CAAC,CAAC,EAAE;oBAC3B,OAAO,CAAC,IAAI,CACV,CAAA,MAAA,EAAS,IAAI,CAAC,gBAAgB,CAAA,4EAAA,CAA8E,CAC7G;gBACH;AACF,YAAA,CAAC,CAAC,EACF,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EACzC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C;QACH;QACA,OAAO,IAAI,CAAC,eAAe;IAC7B;AAEA;;;;;AAKG;AACH,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;IAC3B;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACtC,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IACE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnC,YAAA,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpC,YAAA,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAClC;AACA,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS;QAEvC,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;IACxB;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;IAC1E;AAEA;;AAEG;AACH,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM;IACtC;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB;IACpC;AAEA,IAAA,IAAI,mBAAmB,GAAA;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,IAAI,EAAE;AAElD,QAAA,MAAM,WAAW,GAAqC;AACpD,YAAA,+BAA+B,EAAE,IAAI,CAAC,+BAA+B,IAAI,IAAI;AAC7E,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;SACtC;AAED,QAAA,OAAO,WAAW;IACpB;AAEA;;AAEG;AACH,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,IAAI,IAAI;IACrD;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI;IAChD;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IACrD;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI;IAChC;AAEA,IAAA,WAAA,CACmB,OAAsB;AAEvC;;AAEG;IACa,YAE+C;AAE/D;;AAEG;IACa,gBAAuB;AAEvC;;AAEG;IACa,UAAqB;AAErC;;AAEG;IACa,cAAsB,EAAA;QAtBrB,IAAA,CAAA,OAAO,GAAP,OAAO;QAKR,IAAA,CAAA,YAAY,GAAZ,YAAY;QAOZ,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAKhB,IAAA,CAAA,UAAU,GAAV,UAAU;QAKV,IAAA,CAAA,cAAc,GAAd,cAAc;QA5JvB,IAAA,CAAA,GAAG,GAAG,YAAY,EAAE;QAErB,IAAA,CAAA,eAAe,GAAG,CAAC;QACnB,IAAA,CAAA,oBAAoB,GAAwB,IAAI;AAChD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;QAC/B,IAAA,CAAA,kBAAkB,GAAsB,IAAI;AAEpD;;;;;;AAMG;QACH,IAAA,CAAA,WAAW,GAA2B,EAAE;AAExC;;AAEG;AACH,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,aAAa,EAA0B;AAEjE;;AAEG;QACH,IAAA,CAAA,gBAAgB,GAAG,KAAK;QAEhB,IAAA,CAAA,eAAe,GAA0C,IAAI;QAEpD,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAyB;AACrE,YAAA,IAAI,EAAA,UAAA;YACJ,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE;AAC5D,SAAA,CAAC;IA8HC;IAEH,OAAO,CAAC,UAA+B,EAAE,EAAA;AACvC,QAAA,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,aAAa,EAAE,YAAY,GAAG,SAAS,EAAE,cAAc,GAAG,KAAK,EAAE,GAAG,OAAO;AACtG,QAAA,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,OAAO;AACrC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY;AAErC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,IAAI,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACvE,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC9D,YAAA,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC;QACtE;AAEA,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO;AACvB,QAAA,MAAM,IAAI,GAAmB,EAAE,EAAE,EAAE,YAAY,EAAE;AAEjD,QAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACtC,IAAI,cAAc,EAAE;gBAClB,IAAI,CAAC,KAAK,EAAE;YACd;iBAAO;AACL,gBAAA,OAAO,IAAI;YACb;QACF;QAEA,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,0CAA0B,IAAI,EAAE,CAAC;AAEzD,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC;QACtC;aAAO;AACL,YAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC;AAEvB,YAAA,IACE,YAAY;gBACZ,oBAAoB,CAAC,YAAY,CAAC;AAClC,gBAAA,WAAW,CAAC,MAAM;gBAClB,CAAC,mBAAmB,CAAC,YAAY,CAAC,mBAAmB,EAAE,QAAQ,CAAC,EAChE;;;gBAGA,QAAQ,GAAG,aAAa,CAAC;;oBAEvB,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,iBAAiB,EAAE,CAAC;oBAC/E,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,iBAAA,CAAC,CAAC,IAAI,CACL,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EACzB,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAI;AAC5B,oBAAA,IAAI,KAAK,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE;AACvC,wBAAA,OAAO,KAAK;oBACd;AAEA,oBAAA,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE;wBAC9B,IAAI,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC;AAC5F,wBAAA,OAAO,KAAK;oBACd;AAEA,oBAAA,IAAI,CAAC,KAAK,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,YAAY,CAAC,EAAE;AACtD,wBAAA,OAAO,KAAK;oBACd;AAEA,oBAAA,OAAO,EAAE,CAAC,IAAa,CAAC;AAC1B,gBAAA,CAAC,CAAC,EACF,IAAI,CAAC,CAAC,CAAC,CACR;YACH;YAEA;AACG,iBAAA,IAAI,CACH,SAAS,CAAC,MAAK;AACb,gBAAA,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;gBAChF,MAAM,IAAI,GAAG,gBAAgB,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;gBAC3G,MAAM,OAAO,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAEzG,gBAAA,OAAO,OAAO,CAAW;oBACvB,aAAa,EAAE,IAAI,CAAC,gBAA0B;oBAC9C,MAAM;oBACN,IAAI;oBACJ,OAAO;oBACP,cAAc,EAAE,WAAW,CAAC,cAAc;oBAC1C,YAAY,EAAE,WAAW,CAAC,YAAY;oBACtC,eAAe,EAAE,WAAW,CAAC,eAAe;oBAC5C,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY;oBACvD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO;AAC9C,iBAAA,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAC7D,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B;AACH,YAAA,CAAC,CAAC;AAGH,iBAAA,SAAS,EAAE;QAChB;AAEA,QAAA,OAAO,IAAI;IACb;IAEA,KAAK,GAAA;QACH,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACvC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QAErB,IAAI,CAAC,YAAY,CAAC;AAChB,YAAA,IAAI,EAAA,WAAA;YACJ,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE;AACnF,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,CAAC,MAAkB,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM;QAEhC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAC1B,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,GAAG,CAAC,CAAC,EACvC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAC3B,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,EACvC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CACvD;AAED,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,SAAS,CAAC;AAC1C,YAAA,IAAI,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;AACpE,YAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE;AACnC,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;AACxC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAE9B,QAAA,OAAO,IAAI;IACb;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;AACxC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAEhC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAE5B,QAAA,OAAO,IAAI;IACb;IAEA,aAAa,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AACtD,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAE7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;IAC5E;AAEA,IAAA,SAAS,CAAC,QAAkC,EAAA;QAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACrG,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,SAAS,CAAC,QAAgD,EAAA;QACxD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClG,QAAA,OAAO,IAAI;IACb;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY;AAE9C,QAAA,IAAI,YAAY,IAAI,oBAAoB,CAAC,YAAY,CAAC,EAAE;AACtD,YAAA,OAAO,YAAY;QACrB;AAEA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,kBAAkB,CACxB,YAAoC,EACpC,IAAoB,EACpB,OAA6B,EAAA;AAE7B,QAAA,QAAQ,YAAY,CAAC,IAAI;AACvB,YAAA,KAAK,OAAO;YACZ,KAAK,aAAa,EAAE;gBAClB,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,YAAY;AACtD,gBAAA,MAAM,OAAO,GAAmB,EAAE,GAAG,IAAI,EAAE,iBAAiB,EAAE,IAAI,KAAK,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE;gBAE/G,IAAI,CAAC,YAAY,CAAC;AAChB,oBAAA,IAAI,EAAA,SAAA;AACJ,oBAAA,IAAI,EAAE,OAAO;AACd,iBAAA,CAAC;gBACF;YACF;AAEA,YAAA,KAAK,iBAAiB;YACtB,KAAK,mBAAmB,EAAE;gBACxB,IAAI,CAAC,YAAY,CAAC;AAChB,oBAAA,IAAI,EAAA,SAAA;oBACJ,QAAQ,EAAE,YAAY,CAAC,QAAQ;AAC/B,oBAAA,WAAW,EAAE,aAAa,IAAI,YAAY,GAAG,YAAY,CAAC,WAAW,GAAG,SAAS;oBACjF,IAAI;AACL,iBAAA,CAAC;gBAEF;YACF;YAEA,KAAK,SAAS,EAAE;gBACd,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG,YAAY;gBAC9D,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC;AACjD,gBAAA,MAAM,YAAY,GAChB,KAAK,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,MAAM,IAAI;AAC/D,sBAAG,QAAQ,CAAC,MAAM;sBACf,QAAqB;AAE5B,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE;oBAC5D,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AAE1F,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC;wBAC5B,IAAI,EAAE,IAAI,CAAC,UAAU;AACrB,wBAAA,QAAQ,EAAE,YAAY;wBACtB,EAAE;AACF,wBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK;AACtC,qBAAA,CAAC;gBACJ;gBAEA,IAAI,CAAC,YAAY,CAAC;AAChB,oBAAA,IAAI,EAAA,SAAA;AACJ,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,OAAO,EAAE,OAAO;oBAChB,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,kBAAkB,EAAE;AACjD,iBAAA,CAAC;gBAEF;YACF;YAEA,KAAK,SAAS,EAAE;AACd,gBAAA,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY;AAC9B,gBAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,0CAA0B,KAAK,EAAE,IAAI,EAAE,CAAC;AACtF,gBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,EAAE;AAExD,gBAAA,IACE,CAAC,kBAAkB;AACnB,oBAAA,OAAO,EAAE,oBAAoB;oBAC7B,KAAK,CAAC,MAAM,KAAK,GAAG;AACpB,oBAAA,CAAC,kBAAkB,CAAC,mCAAmC,EACvD;oBACA,OAAO,OAAO,EAAE;gBAClB;AAEA,gBAAA,MAAM,KAAK,GAAG,kBAAkB,CAAC,aAAa,EAAE;AAChD,gBAAA,IAAI,CAAC,KAAK;oBAAE,OAAO,OAAO,EAAE;AAE5B,gBAAA,KAAK,CAAC;qBACH,IAAI,CACH,iBAAiB,EAAE,EACnB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EACzB,GAAG,CAAC,CAAC,KAAK,KACR,mBAAmB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,EAAE,CAClG;AAEF,qBAAA,SAAS,EAAE;gBAEd;YACF;YAEA,KAAK,QAAQ,EAAE;gBACb,IAAI,CAAC,YAAY,CAAC;AAChB,oBAAA,IAAI,EAAA,WAAA;oBACJ,IAAI;AACL,iBAAA,CAAC;gBAEF;YACF;;IAEJ;AAEQ,IAAA,eAAe,CAAC,CAAyB,EAAA;AAC/C,QAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE;AAC7D,YAAA,OAAO,EAAE,CAAC,CAAC,CAAmC;QAChD;QAEA,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AAEvF,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC;aACtB,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE;aAC9F,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C;AAEQ,IAAA,YAAY,CAAC,CAAyB,EAAA;;AAE5C,QAAA,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvC;AAEQ,IAAA,YAAY,CAAC,OAAmC,EAAE,IAAoB,EAAE,OAA4B,EAAA;AAC1G,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI;YAAE;QAE5B,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB,GAAG,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI;AAClG,QAAA,MAAM,gBAAgB,GAAG,QAAQ,EAAE,QAAQ,IAAI,OAAO;AACtD,QAAA,MAAM,iBAAiB,GAAG,QAAQ,EAAE,SAAS,IAAI,QAAQ;AACzD,QAAA,MAAM,kBAAkB,GAAG,QAAQ,EAAE,UAAU,IAAI,CAAC;AACpD,QAAA,MAAM,iBAAiB,GAAG,QAAQ,EAAE,SAAS,IAAI,KAAK;AACtD,QAAA,MAAM,eAAe,GAAG,QAAQ,EAAE,eAAe,IAAI,KAAK;QAE1D,MAAM,gBAAgB,GAAG,MAAK;YAC5B,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC;gBAC1F;YACF;YAEA,IAAI,CAAC,kBAAkB,CACrB,EAAE,QAAQ,EAAE,QAAoB,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAC3E,IAAI,EACJ,OAAO,CACR;AACH,QAAA,CAAC;QAED,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,KAAK;AACX,iBAAA,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,gBAAA,IAAI,CAAC,KAAK,kBAAkB,GAAG,CAAC,EAAE;AAChC,oBAAA,gBAAgB,EAAE;gBACpB;qBAAO;AACL,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,EAAE,gBAAgB,GAAG,kBAAkB,CAAC;AACrF,oBAAA,MAAM,UAAU,GAAG,CAAC,OAAO,IAAI,gBAAgB,GAAG,kBAAkB,CAAC,IAAI,GAAG;oBAE5E,IAAI,CAAC,kBAAkB,CACrB;wBACE,IAAI,EAAE,iBAAiB,KAAK,QAAQ,GAAG,iBAAiB,GAAG,mBAAmB;wBAC9E,OAAO,EAAE,OAAO,IAAI,EAAE;wBACtB,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,iBAAiB,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,EAAE;wBAC5F,WAAW,EAAE,eAAe,GAAG,SAAS,GAAG,CAAA,aAAA,EAAgB,CAAC,CAAA,CAAE;AAC/D,qBAAA,EACD,IAAI,EACJ,OAAO,CACR;gBACH;YACF,CAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EACzB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,kBAAkB,GAAG,CAAC,EAAE,IAAI,CAAC;AAEnD,iBAAA,SAAS,EAAE;QAChB;aAAO,IAAI,iBAAiB,EAAE;YAC5B,QAAQ,CAAC,KAAK;AACX,iBAAA,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,gBAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,oBAAA,gBAAgB,EAAE;gBACpB;qBAAO;AACL,oBAAA,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC;oBACvB,IAAI,CAAC,kBAAkB,CACrB;AACE,wBAAA,IAAI,EAAE,aAAa;wBACnB,OAAO,EAAE,OAAO,IAAI,EAAE;AACtB,wBAAA,UAAU,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS;AACnC,wBAAA,WAAW,EAAE,SAAS;AACvB,qBAAA,EACD,IAAI,EACJ,OAAO,CACR;gBACH;YACF,CAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EACzB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;AAE9B,iBAAA,SAAS,EAAE;QAChB;aAAO;YACL,KAAK,CAAC,KAAK;AACR,iBAAA,IAAI,CACH,GAAG,CAAC,MAAM,gBAAgB,EAAE,CAAC,EAC7B,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAE1B,iBAAA,SAAS,EAAE;QAChB;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,UAAkB,EAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC;QAClC;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;QAE9B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IACjD;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,UAAkB,EAAA;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AAC1C,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB;QACF;QAEA,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE;AAC9C,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;QAChC;AAEA,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;QACrC;QAEA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IACjD;AAEA;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;IACjD;AACD;;AC5nBM,MAAM,mBAAmB,GAAG,CAAC,YAA0B,KAC5D,YAAY,YAAY;AAEnB,MAAM,oBAAoB,GAAG,CAClC,YAA0B,KACkB,YAAY,YAAY;AAE/D,MAAM,0BAA0B,GAAG,CAAC,YAA0B,KACnE,YAAY,YAAY;AAEnB,MAAM,aAAa,GAAG,CAAmC,KAAa,KAAI;AAC/E,IAAA,IAAI;QACF,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAErC,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AAC9D,QAAA,MAAM,WAAW,GAAG,kBAAkB,CACpC,IAAI,CAAC,MAAM;aACR,KAAK,CAAC,EAAE;AACR,aAAA,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAChE,aAAA,IAAI,CAAC,EAAE,CAAC,CACZ;AAED,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAW;IAC1C;IAAE,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,CAAA,sBAAA,EAAyB,KAAK,CAAA,CAAE,EAAE,KAAK,CAAC;AAEtD,QAAA,OAAO,IAAI;IACb;AACF;;MCpBa,oBAAoB,CAAA;AAS/B,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,EAAE,aAAa,EAAE,CAAA,OAAA,EAAU,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAA,CAAE,EAAE;IACtE;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;IACrC;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IACjC;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE;IAClD;AAEA,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE;IAC9C;AAEA,IAAA,IAAI,mCAAmC,GAAA;AACrC,QAAA,QACE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;aAC3B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,6BAA6B,KAAK,SAAS;gBACrE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,6BAA6B,CAAC;IAE/D;AAEA,IAAA,WAAA,CAAmB,OAAoC,EAAA;QAApC,IAAA,CAAA,OAAO,GAAP,OAAO;AApCT,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAW;AAClC,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,eAAe,CAA2B,IAAI,CAAC;QAE3E,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAgB;AAC7D,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,YAAY,EAAE,IAAI;AACnB,SAAA,CAAC;QA+BA,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,aAAa,IAAI,IAAI;AAClE,QAAA,MAAM,WAAW,GACf,OAAO,CAAC,aAAa,EAAE,UAAU,IAAI,aAAa,IAAI,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,IAAI;AAEnH,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjB,YAAA,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;YAC5B,YAAY,EAAE,OAAO,CAAC,aAAa,EAAE,KAAK,IAAI,WAAW,IAAI,IAAI;AAClE,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AACnD,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,EAAE;AACtC,gBAAA,OAAO,CAAC,KAAK,CACX,oJAAoJ,CACrJ;YACH;YAEA;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACrB,IAAI,CAAC,kBAAkB,EAAE;AAEzB,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,IAAI,aAAa,EAAE;gBACvF,IAAI,CAAC,UAAU,EAAE;YACnB;QACF;AAAO,aAAA,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YACnC,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;AAC5B,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;QAErC,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,EAAE;YAC1C,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;IAEA,YAAY,GAAA;QACV,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,EAAE;AAC3C,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;QAChD;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AAC7B,YAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC;QAClD;QAEA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI;QAE/C,IAAI,CAAC,UAAU,EAAE;IACnB;IAEA,aAAa,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,EAAE;AAC3C,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;QAChD;QAEA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,GAAG,KAAK;QAEhD,IAAI,CAAC,aAAa,EAAE;IACtB;IAEA,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE;IAC7B;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY;YAAE;QAE1E,SAAS,CACP,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,EACrC,IAAI,CAAC,MAAM,CAAC,YAAY,EACxB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,mBAAmB,EAC9C,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,EACvC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,EACrC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,cAAc,CAC1C;IACH;IAEQ,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU;YAAE;QAE7C,YAAY,CACV,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,EACrC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,EACrC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CACxC;IACH;IAEQ,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;YACrD;QACF;QAEA,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAE/C,IAAI,CAAC,MAAM,EAAE;YACX;QACF;QAEA,MAAM,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,qBAAqB,IAAI,KAAK;AACvF,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,qBAAqB,CAAuB;AACrE,QAAA,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI;QACjC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,IAAI,WAAW;AAE7E,QAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AAC3B,YAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,qBAAqB,CAAA,UAAA,CAAY,CAAC;QACzF;QAEA,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;QAEjG,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,IAAA,kBAAA;QAEpD,QAAQ,QAAQ;AACd,YAAA,KAAA,kBAAA;gBACE,KAAK,CAAC,aAAa;AAChB,qBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;qBAC9B,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxC;;IAEN;AAEA;;AAEG;IACH,aAAa,GAAA;QACX,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE;AAE1D,QAAA,IAAI,mBAAmB,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE;AAC/C,YAAA,OAAO,YAAY;QACrB;AAEA,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY;QAEpD,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;YACvD;QACF;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,kBAAkB,GAAG;AAC3D,YAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;AACxB,YAAA,YAAY,EAAE,mBAAmB;AAClC,SAAA,CAAC,IAAI;AACJ,YAAA,IAAI,EAAE,EAAE,YAAY,EAAE,mBAAmB,EAAE;SAC5C;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;aACtC,OAAO,CAAC,IAAI;aACZ,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;AAE3D,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAA0B,CAAC;AAE3D,QAAA,IAAI,CAAC;aACF,IAAI,CACH,gBAAgB,EAAE,EAClB,GAAG,CAAC,CAAC,KAAK,KAAI;AACZ,YAAA,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE;gBAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,EAAE;AAC/C,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,QAA8B,CAAC;AAE/F,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC5B;qBAAO;AACL,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;AAEjB,wBAAA,KAAK,EAAG,KAAK,CAAC,QAAgB,CAAC,OAAO,CAAC;;AAEvC,wBAAA,YAAY,EAAG,KAAK,CAAC,QAAgB,CAAC,cAAc,CAAC;AACtD,qBAAA,CAAC;gBACJ;gBACA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,IAAI,IAAI;AAEvE,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,aAAa,EAAE;oBACvF,IAAI,CAAC,UAAU,EAAE;gBACnB;gBAEA,IAAI,CAAC,kBAAkB,EAAE;YAC3B;AAAO,iBAAA,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE;AACrC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;gBAEvD,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,EAAE;oBAC1C,IAAI,CAAC,aAAa,EAAE;gBACtB;YACF;QACF,CAAC,CAAC,EACF,iBAAiB,EAAE,EACnB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAE1B,aAAA,SAAS,EAAE;AAEd,QAAA,OAAO,KAAK;IACd;AACD;;ACpPM,MAAM,CAAC,iCAAiC,EAAE,gCAAgC,CAAC,GAAG,cAAc,CACjG,MAAK;AACH,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK;gFAAC;AAC7B,IAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC;IAEtC,OAAO;QACL,OAAO;QACP,QAAQ;KACT;AACH,CAAC,EACD,EAAE,IAAI,EAAE,+BAA+B,EAAE;;MCR9B,aAAa,CAAA;AAqFxB,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IAC1C;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;IACtC;AAEA,IAAA,IAAI,sBAAsB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE;IACpD;AAEA,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE;IAChD;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;IACzC;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;IACrC;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IAC3C;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;IACvC;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,WAAW;IACzB;IAEA,WAAA,CACU,OAAiF,EACjF,SAA8B,EAAA;QAD9B,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,SAAS,GAAT,SAAS;AAxHF,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAU,EAAE,CAAC;AAC5C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;AACxD,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;AAClE,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;AACvD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;AAEhD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAC3C,SAAS,CAAC,CAAC,OAAO,KAAI;AACpB,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,gBAAA,OAAO,EAAE,CAAC,EAAE,CAAC;YACf;AAEA,YAAA,OAAO,aAAa,CAClB,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAChB,KAAK,CAAC,MAAM,CAAC,IAAI,CACf,aAAa,EAAE,EACf,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CACnC,CACF,CACF;AACH,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,SAAS,KAAI;AAChB,YAAA,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK;AACxD,YAAA,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK;AAExD,YAAA,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;gBAC5B;YACF;YAEA,MAAM,UAAU,GACd,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,GAAG;gBAC1C,QAAQ,EAAE,SAAS,CAAC,QAAyB;gBAC7C,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,IAAI,EAAE,SAAS,CAAC,UAAU;aAC3B,CAAC;;gBAED,SAAS,CAAC,QAAgB,EAAE,UAAU;AACvC,gBAAA,IAAI;AAEN,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AACpC,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,SAAS,KAAI;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACrB,gBAAA,OAAO,IAAI;YACb;YAEA,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAC/B,CAAC,GAAG,EAAE,QAAQ,KAAI;gBAChB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc;gBAC3D,IAAI,IAAI,GAAG;sBACP,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAyB;AACzD,sBAAG,QAAQ,CAAC,KAAK,CAAC,QAA6B;gBAEjD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE;oBACjC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,EAAsB;gBAChD;gBAEA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,KAAK,OAAO,EAAE;AACnD,oBAAA,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;gBACtB;qBAAO;AACL,oBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;gBACnB;AACA,gBAAA,OAAO,GAAG;YACZ,CAAC;;AAED,YAAA,EAA6B,CAC9B;AAED,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC,CAAC,EACF,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C;AAEgB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAChD,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,EACrD,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C;AA8CC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC;IAChE;IAEA,QAAQ,GAAA;AACN,QAAA,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC;QACnD,MAAM,cAAc,GAClB,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,eAAe,GAAG;AACzC,YAAA,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,IAAI,OAAO;AAEf,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACzD,YAAA,OAAO,CAAC,KAAK,CACX,wHAAwH,CACzH;YACD;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;AAE5D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAW;AAExE,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;AAChC,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QACnF;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAErD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;AAChC,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,cAAc,CAAC;IACnD;AAEA,IAAA,KAAK,CACH,SAGC,EAAA;AAED,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,SAAS,IAAI,EAAE,CAAC,EAAE;AAExD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC;AAC9D,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAEvB,IAAI,CAAC,QAAQ,EAAE;IACjB;IAEQ,YAAY,CAAC,MAAgF,EAAE,IAAY,EAAA;AACjH,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC;AAEjF,QAAA,MAAM,QAAQ,GAAG;YACf,CAAC,iBAAiB,GAAG;gBACnB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,MAAM,GAAG,IAAI;AACzC,aAAA;SACF;AAED,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;AAEnF,QAAA,MAAM,SAAS,GAAG;YAChB,CAAC,kBAAkB,GAAG;AACpB,gBAAA,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,OAAO,GAAG,MAAM,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE;AACtE,aAAA;SACF;AAED,QAAA,MAAM,aAAa,GAAG,MAAM,EAAE,WAAW,IAAI,EAAE;AAE/C,QAAA,MAAM,UAAU,GACd,iBAAiB,KAAK;AACpB,cAAE;AACE,gBAAA,GAAG,aAAa;gBAChB,CAAC,iBAAiB,GAAG;oBACnB,IAAI,MAAM,EAAE,WAAW,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC;oBACnD,GAAG,QAAQ,CAAC,kBAAkB,CAAC;oBAC/B,GAAG,SAAS,CAAC,kBAAkB,CAAC;AACjC,iBAAA;AACF;AACH,cAAE;AACE,gBAAA,GAAG,aAAa;gBAChB,CAAC,iBAAiB,GAAG;oBACnB,IAAI,MAAM,EAAE,WAAW,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC;oBACnD,GAAG,QAAQ,CAAC,iBAAiB,CAAC;AAC/B,iBAAA;gBACD,CAAC,kBAAkB,GAAG;oBACpB,IAAI,MAAM,EAAE,WAAW,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC;oBACpD,GAAG,SAAS,CAAC,kBAAkB,CAAC;AACjC,iBAAA;aACF;AAEP,QAAA,OAAO,UAAU;IACnB;AAEQ,IAAA,qBAAqB,CAAC,QAAgD,EAAA;AAC5E,QAAA,MAAM,GAAG,GAAG,QAAQ,IAAI,OAAO;QAE/B,QAAQ,GAAG;AACT,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,YAAY;AACrB,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,aAAa;AACtB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,MAAM;AACf,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,SAAS;AAClB,YAAA,KAAK,UAAU;AACb,gBAAA,OAAO,WAAW;AACpB,YAAA;AACE,gBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,CAAA,CAAE,CAAC;;IAE1D;AACD;;ACnPM,MAAM,yBAAyB,GAAG,CAMvC,MAAgF,KAC7E;MAEQ,iCAAiC,GAAG,CAAC,EAAE,IAAI,EAAE,YAAY,EAA8B,KAClG,YAAY,IAAI,IAAI,GAAG,CAAC;;ACd1B;MAgDa,oBAAoB,GAAG,IAAI,cAAc,CAA8B,sBAAsB;MAa7F,sBAAsB,CAAA;;;AAgCjC,IAAA,IACI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,cAAc;IAC5B;IACA,IAAI,aAAa,CAAC,CAAI,EAAA;QACpB,IAAI,CAAC,QAAQ,EAAE;AAEf,QAAA,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC;AACvB,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;YAClC;QACF;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC;QACvB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE;IACxC;AAGA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,sBAAsB;IACpC;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;IACnC;AAIA,IAAA,OAAO,sBAAsB,CAE3B,IAA+B,EAAE,IAAa,EAAA;AAC9C,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,WAAA,GAAA;AApEiB,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAAW;AAC7C,QAAA,IAAA,CAAA,YAAY,GAA4B;AACvD,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,KAAK,EAAE,IAAI;AAEX,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,qBAAqB,EAAE,IAAI;AAC3B,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,YAAY,EAAE,IAAI;AAElB,YAAA,YAAY,EAAE,IAAI;SACnB;QACO,IAAA,CAAA,sBAAsB,GAA8B,IAAI;QAE/C,IAAA,CAAA,SAAS,GAAG,aAAa,EAAE;AAC3B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAChC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC5C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,EAAC,WAAoC,EAAC;AAC/D,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;QACpC,IAAA,CAAA,2BAA2B,GAAG,gCAAgC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAE9E,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAA6B,EAAE,CAAC;AAmC7E,QAAA,IAAA,CAAA,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AASjD,QAAA,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC;IACrF;AAEQ,IAAA,mBAAmB,CAAC,MAAS,EAAA;QACnC,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,MAAa,EAAE,IAAI,CAAC,SAAS,CAAuB;AAEvF,QAAA,aAAa,CAAC;AACZ,YAAA,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YACvF,IAAI,CAAC,2BAA2B,CAAC,QAAQ;AACzC,YAAA,QAAQ,CAAC,KAAK;SACf;AACE,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,KAAI;YACxD,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW;YACpD,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU;YAClD,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY;YACtD,IAAI,CAAC,YAAY,CAAC,WAAW;AAC3B,gBAAA,CAAC,QAAQ,CAAC,UAAU,KAAK,IAAI;oBAC3B,QAAQ,CAAC,WAAW,KAAK,IAAI;AAC7B,oBAAA,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,WAAW;AAC5C,oBAAA,KAAK;YACP,IAAI,CAAC,YAAY,CAAC,qBAAqB,GAAG,QAAQ,CAAC,qBAAqB;AACxE,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,YAAY;YAE7C,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,SAAS,IAAI,CAAC,aAAa,EAAE;gBAC7D,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,MAAM,GAAG,IAAI;AAC7E,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI;AAC9B,gBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,IAAI;YACvE;AAAO,iBAAA,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE;AACrC,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,KAAK;gBACjC,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;AACrC,gBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,KAAK;AAErC,gBAAA,IAAI,aAAa,CAAC,YAAY,CAAC,EAAE;oBAC/B,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC;gBAC/D;YACF;AAAO,iBAAA,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE;AACrC,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,KAAK;AACjC,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI;AAC9B,gBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,KAAK;gBACrC,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS;AAC7D,oBAAA,aAA2C;AAC7C,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;YACjC;AAEA,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC1B,QAAA,CAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EACzB,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAErC,aAAA,SAAS,EAAE;AAEd,QAAA,OAAO,QAAQ;IACjB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAChC;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;YAC7B;QACF;AAEA,QAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE;IACxC;AAEA,IAAA,KAAK,CAAC,SAAgD,EAAA;AACpD,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAChC;QACF;AAEA,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,SAAgB,CAAC;IACrD;IAEQ,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;AAEpC,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,KAAK;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,IAAI;AACxC,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI;AAElC,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,KAAK;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,KAAK;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI;AAEnC,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI;AAErC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACtB;8GApKW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,SAAA,EALtB;AACT,YAAA,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,sBAAsB,EAAE;AACtE,YAAA,iCAAiC,EAAE;AACpC,SAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBATlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE,iBAAiB;AAE3B,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,wBAAwB,EAAE;AACtE,wBAAA,iCAAiC,EAAE;AACpC,qBAAA;AACF,iBAAA;;sBAiCE,KAAK;uBAAC,iBAAiB;;;MCtFb,6BAA6B,CAAA;AAH1C,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,EAAC,UAAuB,EAAC;AAC7C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAE7C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAW;QACjC,IAAA,CAAA,SAAS,GAAgC,IAAI;QAErD,IAAA,CAAA,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC;QAElD,IAAA,CAAA,uBAAuB,GAAG,KAAK,CAAgB,IAAI;oGAAC;;QAG7D,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAqC,IAAI;kGAAC;AAEvE,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,IAAI,IAAI,CAAC,cAAc;0FAAC;AAuCpF,IAAA;IArCC,QAAQ,GAAA;QACN,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,KAAK,QAAQ;QAEzE,IAAI,aAAa,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,YAAY,EAAE,CAAC;QACjG;aAAO;YACL,IAAI,CAAC,0BAA0B,EAAE;QACnC;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AAC3B,QAAA,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE;IAC9B;IAEQ,0BAA0B,GAAA;AAChC,QAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,EAAE;QAC9D,IAAI,CAAC,SAAS,GAAG,IAAI,oBAAoB,CACvC,CAAC,OAAO,KAAI;AACV,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;AAExB,YAAA,IAAI,CAAC,KAAK;gBAAE;AAEZ,YAAA,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;AACjE,gBAAA,IAAI,CAAC,aAAa,EAAE,CAAC,YAAY,EAAE;YACrC;AACF,QAAA,CAAC,EACD;AACE,YAAA,IAAI,EAAE,uBAAuB,GAAG,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC,GAAG,IAAI;AACtF,YAAA,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;AAChC,SAAA,CACF;QAED,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;IACxD;8GApDW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qDAAqD;AAChE,iBAAA;;;MCsEY,cAAc,CAAA;AAqBzB,IAAA,OAAO,sBAAsB,CAC3B,IAAuB,EACvB,IAAa,EAAA;AAEb,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,WAAA,GAAA;AA3BQ,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEtB,QAAA,IAAA,CAAA,YAAY,GAA6B;AACxD,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE,IAAI;SACZ;QAED,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,4EAAM,KAAK,EAAE,SAAS,EAAA,CAAG;QAE/C,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,KAAK,6EAAI,KAAK,EAAE,cAAc,EAAA,CAAG;AAE/C,QAAA,IAAA,CAAA,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;AAUvC,QAAA,MAAM,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;QAEnF,MAAM,CAAC,MAAK;YACV,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAExC,SAAS,CAAC,MAAK;gBACb,IAAI,CAAC,KAAK,EAAE;AACV,oBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI;AAClC,oBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI;AAChC,oBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,KAAK;AACjC,oBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,KAAK;AACpC,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI;AAC9B,oBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI;AACjC,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI;AAC9B,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI;oBAC9B;gBACF;AAEA,gBAAA,IAAI,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;oBACjF,KAAK,CAAC,OAAO,EAAE;gBACjB;AAEA,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAI,KAAK,CAAC,IAAiC,GAAG,IAAI;AACpG,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,KAAmB;AAC/C,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAC/B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;YAE1B,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE;oBAC9B,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,IAAI;oBACnD,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,MAAM;AAEvG,oBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AACjC,wBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI;oBAClC;gBACF;qBAAO;AACL,oBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,KAAK;AACjC,oBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,KAAK;AACpC,oBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI;gBACnC;AAEA,gBAAA,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE;oBAC9B,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC,QAAmC;oBACrE,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,KAAK,CAAC,QAAmC;gBACzE;qBAAO,IAAI,CAAC,KAAK,EAAE;AACjB,oBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI;AAChC,oBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI;gBACpC;AAEA,gBAAA,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE;oBAC9B,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;oBAErC,IAAI,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;wBAC7C,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC;oBAC9D;gBACF;qBAAO;AACL,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI;gBAChC;AAEA,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;8GA/FW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACtB,iBAAA;;;MCvEY,kBAAkB,CAAA;AAC7B,IAAA,SAAS,CAAC,KAAiB,EAAA;AACzB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB;AAEpC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;;;YAI7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAE9B,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,gBAAA,OAAO,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACzD;AAEA,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,KAAe;IACxB;8GAlBW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,IAAI;mBAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;;;MCKnB,2BAA2B,GAAG,IAAI,cAAc,CAC3D,6BAA6B;AAGxB,MAAM,6BAA6B,GAAG,CAAC,WAAuC,KAAI;AACvF,IAAA,IAAI,CAAC,SAAS,EAAE,EAAE;AAChB,QAAA,OAAO,CAAC,IAAI,CACV,+IAA+I,CAChJ;IACH;IAEA,OAAO;AACL,QAAA,OAAO,EAAE,2BAA2B;AACpC,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,KAAK,EAAE,IAAI;KACZ;AACH;;MCaa,sBAAsB,CAAA;AAoMjC,IAAA,WAAA,GAAA;AAnMiB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAC9B,IAAA,CAAA,SAAS,GAAG,aAAa,EAAE;AAE3B,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,2BAA2B,CAAC;QAExD,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,KAAK;mFAAC;QACtB,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,KAAK;0FAAC;QAC7B,IAAA,CAAA,UAAU,GAAG,MAAM,CAA0B,MAAM;uFAAC;QACpD,IAAA,CAAA,aAAa,GAAG,MAAM,CAAgB,MAAM;0FAAC;QAC7C,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAgB,OAAO;qFAAC;QAElD,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK;yFAAC;QAC5B,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,KAAK;4FAAC;QAC/B,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,KAAK;4FAAC;QAC/B,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,KAAK;iGAAC;QACpC,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,KAAK;0FAAC;AAE7B,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;QAEhC,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAC5C,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CACxF;QACkB,IAAA,CAAA,eAAe,GAAG,MAAM,CAAgB,IAAI;4FAAC;AAE7C,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;AACtD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB;YACvC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YACvE,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;YAE3C,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC;YACtE;AAEA,YAAA,OAAO,MAAM;QACf,CAAC;iGAAC;AAEiB,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC5C,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAE1C,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM;QAC7B,CAAC;uFAAC;AAEiB,QAAA,IAAA,CAAA,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAE7C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAe,EAAE,CAAC;AAC/C,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AAElC,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC/C,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE;AACjC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;AAEjC,YAAA,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;AACxB,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,IAAI,IAAI,KAAK,MAAM,EAAE;gBACnB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,IAAI;YAC1D;YAEA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,IAAI;QACzE,CAAC;0FAAC;AAEiB,QAAA,IAAA,CAAA,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AAE1D,QAAA,IAAA,CAAA,wBAAwB,GAAG,QAAQ,CAAC,MAAK;AACjD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAElC,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,IAAI;YAEvB,OAAO,KAAK,CAAC,KAAoC;QACnD,CAAC;qGAAC;AAEiB,QAAA,IAAA,CAAA,yBAAyB,GAAG,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC;AAEvE,QAAA,IAAA,CAAA,8BAA8B,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CACrF,SAAS,CACP,CAAC,CAAC,KACA,CAAC,EAAE,QAAQ,CAAC,IAAI,CACd,SAAS,CAAC,EAAE,CAAC,EACb,GAAG,CAAC,MAAK;YACP,IAAI,CAAC,CAAC,CAAC,WAAW;AAAE,gBAAA,OAAO,IAAI;YAE/B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CACrC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACpB,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK;AAChB,gBAAA,OAAO,GAAG;YACZ,CAAC,EACD,EAA6B,CAC9B;QACH,CAAC,CAAC,CACH,IAAI,EAAE,CAAC,IAAI,CAAC,CAChB,CACF;AAEkB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAe,EAAE,CAAC;AAErD,QAAA,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAAC,MAAK;AACxD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAElC,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,IAAI;AAEvB,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY;AAC9B,YAAA,MAAM,KAAK,GACT,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,IAAI;AAE9G,YAAA,MAAM,SAAS,GAAG;gBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,KAAK;gBACL,cAAc,EAAE,GAAG,CAAC,cAAc;gBAClC,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,eAAe,EAAE,GAAG,CAAC,eAAe;gBACpC,aAAa,EAAE,GAAG,CAAC,aAAa;gBAChC,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;AAC1C,gBAAA,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM;aAC7B;AAED,YAAA,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE;gBACzB,OAAO;AACL,oBAAA,GAAG,SAAS;oBACZ,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,WAAW,EAAE,GAAG,CAAC,WAAW;iBAC7B;YACH;YAEA,OAAO;AACL,gBAAA,GAAG,SAAS;aACb;QACH,CAAC;mGAAC;QAEiB,IAAA,CAAA,YAAY,GAAG,QAAQ,CACxC,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CACvF;AAEkB,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AACrD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;AAEpC,YAAA,IAAI,CAAC,QAAQ;AAAE,gBAAA,OAAO,IAAI;AAE1B,YAAA,IAAI,QAAQ,YAAY,wBAAwB,EAAE;gBAChD,OAAO;AACL,oBAAA,IAAI,EAAE,0BAA0B;AAChC,oBAAA,MAAM,EAAE,MAAM,QAAQ,CAAC,MAAM;AAC7B,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,MAAM,EAAE;AACN,wBAAA,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI;AAC3B,wBAAA,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK;AAC9B,qBAAA;iBACO;YACZ;AAAO,iBAAA,IAAI,QAAQ,YAAY,iBAAiB,EAAE;gBAChD,OAAO;AACL,oBAAA,IAAI,EAAE,mBAAmB;AACzB,oBAAA,MAAM,EAAE,MAAM,QAAQ,CAAC,MAAM;AAC7B,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,MAAM,EAAE;AACN,wBAAA,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ;AACnC,wBAAA,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ;AACpC,qBAAA;iBACO;YACZ;AAAO,iBAAA,IAAI,oBAAoB,CAAC,QAAQ,CAAC,EAAE;AACzC,gBAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa;gBAEjD,OAAO;AACL,oBAAA,IAAI,EAAE,oBAAoB;AAC1B,oBAAA,MAAM,EAAE,MAAM,QAAQ,CAAC,MAAM;AAC7B,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,MAAM,EAAE;AACN,wBAAA,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK;AAC7B,wBAAA,aAAa,EAAE;AACb,4BAAA,6BAA6B,EAAE,UAAU,EAAE,6BAA6B,IAAI,gBAAgB;4BAC5F,KAAK,EAAE,UAAU,EAAE,KAAK;4BACxB,UAAU,EAAE,UAAU,EAAE,UAAU;AAClC,4BAAA,YAAY,EAAE,UAAU,EAAE,YAAY,IAAI,0BAA0B;AACpE,4BAAA,mBAAmB,EAAE,UAAU,EAAE,mBAAmB,IAAI,cAAc;AACtE,4BAAA,UAAU,EAAE,UAAU,EAAE,UAAU,IAAI,aAAa;AACnD,4BAAA,aAAa,EAAE,UAAU,EAAE,aAAa,IAAI,gBAAgB;AAC5D,4BAAA,cAAc,EAAE,UAAU,EAAE,cAAc,IAAI,eAAe;AAC7D,4BAAA,aAAa,EAAE,UAAU,EAAE,aAAa,IAAI,iBAAiB;AAC7D,4BAAA,qBAAqB,EAAE,UAAU,EAAE,qBAAqB,IAAI,eAAe;AAC3E,4BAAA,QAAQ,EAAE,UAAU,EAAE,QAAQ,IAAI,sDAAsD;4BACxF,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,GAAG,QAAQ,GAAG,SAAS;4BACzE,eAAe,EAAE,UAAU,EAAE,eAAe,GAAG,QAAQ,GAAG,SAAS;AACpE,yBAAA;AACF,qBAAA;iBACO;YACZ;iBAAO;gBACL,OAAO;AACL,oBAAA,IAAI,EAAE,qBAAqB;AAC3B,oBAAA,MAAM,EAAE,MAAM,QAAQ,CAAC,MAAM;AAC7B,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,MAAM,EAAE,EAAE;iBACF;YACZ;QACF,CAAC;gGAAC;AAkIQ,QAAA,IAAA,CAAA,aAAa,GAAgD,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS;QACvG,IAAA,CAAA,YAAY,GAAgC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,GAAG;QAhIvE,IAAI,CAAC,oBAAoB,CAAC;AACvB,aAAA,IAAI,CACH,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,EACnC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAE1B,aAAA,SAAS,EAAE;AAEd,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,mBAAmB,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EACpD,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EACnC,kBAAkB,EAAE;AAErB,aAAA,SAAS,EAAE;AAEd,QAAA,YAAY,CAAC,IAAI,CAAC,mBAAmB;AAClC,aAAA,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,KAAK,oBAAoB,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5F,aAAA,IAAI,CACH,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EACnC,kBAAkB,EAAE;AAErB,aAAA,SAAS,EAAE;AAEd,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,CAAC,KACV,CAAC,CAAC,YAAY,CAAC,IAAI,CACjB,SAAS,CAAC,EAAE,CAAC,EACb,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EACnB,GAAG,CAAC,CAAC,CAAC,KAAI;YACR,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7C,YAAA,CAAC,CAAC;QACJ,CAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B,CACF;AAEF,aAAA,SAAS,EAAE;AAEd,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,CAAC,KACV,CAAC,CAAC,aAAa,CAAC,IAAI,CAClB,GAAG,CAAC,CAAC,KAAK,KAAI;YACZ,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAEpD,YAAA,IAAI,CAAC,cAAc;gBAAE;AAErB,YAAA,MAAM,mBAAmB,GAAG,CAAC,GAAG,cAAc,CAAC;AAE/C,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE;AACpD,gBAAA,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC;YACpC;AAEA,YAAA,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;AAE9B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAC9C,CAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B,CACF;AAEF,aAAA,SAAS,EAAE;AAEd,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,OAAO,KAAI;YACd,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAEpD,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,cAAc;gBAAE;AAEjC,YAAA,MAAM,mBAAmB,GAAG,CAAC,GAAG,cAAc,CAAC;AAE/C,YAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AAC3B,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE;AACzD,oBAAA,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC;gBACpC;YACF;AAEA,YAAA,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;AAE9B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAC9C,CAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAE1B,aAAA,SAAS,EAAE;QAEd,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,aAAa,GAAG;AACpB,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,gBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;AACnC,gBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,gBAAA,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;AACjC,gBAAA,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;AACvC,gBAAA,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;AACvC,gBAAA,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,EAAE;AACjD,gBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;AACnC,gBAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACzC,gBAAA,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAAE;AACzC,gBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;AACnC,gBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;aAC1B;AAED,YAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;AACtF,QAAA,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,wBAAwB,CAAC;QAE3E,IAAI,aAAa,EAAE;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YAExC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC;YACvC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC;YACrD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC;YAChD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,KAAK,CAAC;YACnD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,KAAK,CAAC;YACzD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,KAAK,CAAC;YACzD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,oBAAoB,IAAI,KAAK,CAAC;YACnE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC;YACrD,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;YAChE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,IAAI,IAAI,CAAC;YAC1D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC;YACtD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC;QAC/C;IACF;IAKU,UAAU,GAAA;QAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACjC;IAEU,iBAAiB,GAAA;QACzB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC/C;IAEU,kBAAkB,GAAA;QAC1B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAE3C,SAAS,CAAC,MAAK;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC1B,QAAA,CAAC,CAAC;IACJ;IAEU,qBAAqB,GAAA;QAC7B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IACnD;IAEU,qBAAqB,GAAA;QAC7B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IACnD;IAEU,0BAA0B,GAAA;QAClC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC7D;IAEU,mBAAmB,GAAA;QAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC/C;AAEU,IAAA,gBAAgB,CAAC,MAA+B,EAAA;AACxD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;IAC7B;AAEU,IAAA,mBAAmB,CAAC,IAAmB,EAAA;AAC/C,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9B;AAEU,IAAA,cAAc,CAAC,IAAmB,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IACzB;AAEU,IAAA,WAAW,CAAC,KAAiB,EAAA;QACrC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;IACrC;IAEU,iBAAiB,GAAA;AACzB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7B;8GAzXW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrCnC,6wfAkZA,EAAA,MAAA,EAAA,CAAA,o1KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/WiC,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,0JAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAsB,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAArF,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,QAAQ,wCAAgC,kBAAkB,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA,CAAA;;2FAEpE,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAVlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,aAAA,EAGd,iBAAiB,CAAC,SAAS,EAAA,IAAA,EACpC;AACJ,wBAAA,KAAK,EAAE,mBAAmB;AAC3B,qBAAA,EAAA,OAAA,EACQ,CAAC,SAAS,EAAE,QAAQ,EAAE,mBAAmB,EAAE,OAAO,EAAE,kBAAkB,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,6wfAAA,EAAA,MAAA,EAAA,CAAA,o1KAAA,CAAA,EAAA;;;AEhClG,MAAM,gBAAiB,SAAQ,KAAK,CAAA;IAClC,WAAA,CACE,OAAe,EACR,MAAgB,EAAA;QAEvB,KAAK,CAAC,OAAO,CAAC;QAFP,IAAA,CAAA,MAAM,GAAN,MAAM;AAGb,QAAA,IAAI,CAAC,IAAI,GAAG,kBAAkB;IAChC;AACD;AAED,SAAS,OAAO,CAAI,GAAU,EAAA;IAC5B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;AACtD;MAEa,WAAW,CAAA;AAWtB,IAAA,WAAA,CAA6B,OAA0B,EAAA;QAA1B,IAAA,CAAA,OAAO,GAAP,OAAO;AAVpC;;AAEG;AACM,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAAgB;AAE9C;;AAEG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAA2B;IAEA;AAK1D,IAAA,MAAM,CAAC,SAAkD,EAAA;AACvD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;AAC5C,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAoB,CAAC;QAC/C;AAEA,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IAChC;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,SAAgC,EAAA;QAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvB,SAAS,CAAC,IAAI,CAAC,EACf,YAAY,CAAC,CAAC,CAAC,EACf,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAClE,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C;IACH;IAKA,GAAG,CAAC,SAAkD,EAAE,aAA8B,EAAA;QACpF,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;AAE5C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AACjC,gBAAA,MAAM,IAAI,gBAAgB,CAAC,qDAAqD,EAAE;AAChF,oBAAA,WAAW,EAAE,KAAK;oBAClB,aAAa;AACd,iBAAA,CAAC;YACJ;YAEA,MAAM,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,aAAsB,CAAC,GAAG,aAAa,CAAQ;AAE1G,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAClB,gBAAA,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AAEpB,gBAAA,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;oBAAE;AAExC,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YACjB;QACF;aAAO;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,aAAkB,CAAC;QACtC;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;AAKA,IAAA,MAAM,CAAC,SAAkD,EAAA;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;AAE5C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;AACvB,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YACnB;QACF;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;IAEA,QAAQ,GAAA;QACN,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAC7C,UAAU,EAAE,IAAI,CAAC,WAAW;AAC7B,SAAA,CAAC;IACJ;AAEQ,IAAA,OAAO,CAAC,GAAc,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAC3B,YAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;QAC5D;AAEA,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvB,SAAS,CAAC,IAAI,CAAC,EACf,MAAM,CAAC,CAAC,CAAC,KAAI;AACX,YAAA,IAAI,CAAC,KAAK,IAAI,EAAE;AACd,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACpB,gBAAA,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YACxB;YAEA,OAAO,CAAC,KAAK,GAAG;AAClB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAC7C;IACH;AAEQ,IAAA,WAAW,CAAC,IAAiB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAC3B,YAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;QACjE;AAEA,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvB,SAAS,CAAC,IAAI,CAAC,EACf,MAAM,CAAC,CAAC,CAAC,KAAI;AACX,YAAA,IAAI,CAAC,KAAK,IAAI,EAAE;AACd,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACpB,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC5C;AAEA,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,KAAiB,KAAK,KAAK,SAAS,CAAC,CAAC,CAC3G;IACH;IAEQ,IAAI,CAAC,GAAc,EAAE,KAAQ,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAC3B,YAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC;QAChE;QAEA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;IAClC;AAEQ,IAAA,OAAO,CAAC,GAAc,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAC3B,YAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;QAC5D;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC;IAC9B;AAEQ,IAAA,cAAc,CAAC,IAA6C,EAAA;AAClE,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAC1B,gBAAA,OAAO,OAAO,CAAC,IAAqB,CAAC;YACvC;AAEA,YAAA,OAAO,IAAmB;QAC5B;AAEA,QAAA,OAAO,IAAI;IACb;AACD;;AC9KK,SAAU,cAAc,CAAI,QAAsB,EAAA;AACtD,IAAA,OAAO,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAiB,CAAC;AACjE;AAEA;AACA;;AAEG;MACU,UAAU,GAAG,CAWxB,KAAgC,EAChC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAuD,KAErE,SAAS,CAAC,CAAC,KAAsB,KAAI;AACnC,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AAE3B,IAAA,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC;AAErB,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAuB,CAAC,CAAC;IACjG;SAAO;AACL,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAuB,CAAC,CAAC;IACjG;AACF,CAAC;AAEH;;AAEG;AACI,MAAM,UAAU,GAAG,CAAI,KAAqB,EAAE,EAAE,KAAK,EAAE,EAAE,EAAuB,KAAI;IACzF;SACG,WAAW,CAAC,KAAK;SACjB,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EACjD,IAAI,CAAC,CAAC,CAAC;AAER,SAAA,SAAS,EAAE;AAChB;;AC5CA;AACO,MAAM,2BAA2B,GAAG;AAE3C;AACO,MAAM,iBAAiB,GAAG;AAgBjC;;;;;AAKG;AACI,MAAM,qBAAqB,GAAG,CAAC,KAAc,KAAyB;AAC3E,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,EAAE;AAErB,IAAA,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,YAAY,iBAAiB,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK;AAErH,IAAA,IAAI,+BAA+B,CAAC,IAAI,CAAC,EAAE;QACzC,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA,IAAA,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE;AAC5B,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,OAAO,EAAE;AACX;AA8BA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACI,MAAM,yBAAyB,GAAG,CACvC,OAAiD,KACN;IAC3C,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,GAAG,OAAO;AAEtE,IAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAAE,QAAA,OAAO,EAAE;AAEpD,IAAA,MAAM,UAAU,GAAG,qBAAqB,CAAC,KAAK,CAAC;AAE/C,IAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;;;QAGtB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AAEpD,QAAA,OAAO,oBAAoB,CAAC,KAAK,CAAC;IACpC;IAEA,MAAM,MAAM,GAA4C,EAAE;AAE1D,IAAA,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;AAClC,QAAA,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY;AACtC,QAAA,MAAM,IAAI,GAAG,OAAO,IAAI,WAAW,GAAG,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,OAAO;AAC/E,QAAA,MAAM,iBAAiB,GAAG,IAAI,GAAG,oBAAoB,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,IAAI;QAE7E,IAAI,iBAAiB,EAAE;AACrB,YAAA,MAAM,WAAW,GAAmC;AAClD,gBAAA,IAAI,EAAE,2BAA2B;gBACjC,OAAO,EAAE,SAAS,CAAC,OAAO;AAC1B,gBAAA,SAAS,EAAE,iBAAiB;gBAC5B,SAAS;aACV;AAED,YAAA,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;QAC1B;aAAO,IAAI,mBAAmB,EAAE;AAC9B,YAAA,MAAM,WAAW,GAAG,mBAAmB,CAAC,SAAS,CAAC;YAElD,IAAI,WAAW,EAAE;AACf,gBAAA,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;YAC1B;QACF;aAAO;AACL,YAAA,MAAM,aAAa,GAAmC;AACpD,gBAAA,IAAI,EAAE,2BAA2B;gBACjC,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,SAAS;aACV;AAED,YAAA,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;QAC5B;IACF;AAEA,IAAA,OAAO,MAAM;AACf;AAEA,MAAM,oBAAoB,GAAG,CAAC,KAAc,KAA6B;AACvE,IAAA,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,wBAAwB,CAAC,KAAK,CAAC;AAExF,IAAA,IAAI,UAAU,CAAC,MAAM,EAAE;QACrB,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9F;AAEA,IAAA,OAAO,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACzE,CAAC;AAED;AACA,MAAM,iBAAiB,GAAG,CAAC,IAAY,KAAI;AACzC,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,yBAAyB,EAAE,KAAK;SACxC,KAAK,CAAC,GAAG;AACT,SAAA,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,oBAAoB,GAAG,CAC3B,SAA4B,EAC5B,IAAY,KACyB;IACrC,IAAI,OAAO,GAAY,SAAS;IAEhC,KAAK,MAAM,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE;AAC7C,QAAA,IAAI,OAAO,KAAK,IAAI,KAAK,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,UAAU,CAAC,EAAE;AACtF,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,GAAI,OAAmC,CAAC,OAAO,CAAC;IACzD;;;AAIA,IAAA,OAAO,OAAO,OAAO,KAAK,UAAU,GAAI,OAAsC,GAAG,IAAI;AACvF,CAAC;;AC7KD;AACA;AACA;AACA;AACA;AAEA;AACO,MAAM,iCAAiC,GAAG,GAAG;AAEpD;;;;;;AAMG;AACI,MAAM,uBAAuB,GAAG,CACrC,KAAc,EACd,GAAoC,EACpC,aAA+G,KACvF;;;IAGxB,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK;IAEvF,IAAI,aAAa,EAAE;QACjB,OAAO,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IACzD;;;;AAKA,IAAA,OAAO,yBAAyB,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAyC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC9G,CAAC;AAmBD;;;;;;AAMG;AACI,MAAM,wBAAwB,GAAG,CACtC,IAA8D,EAC9D,MAAqE,KAC7D;IACR,aAAa,CAAsC,IAAI,EAAE;QACvD,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,QAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,iCAAiC;QAC9D,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,QAAA,SAAS,EAAE,MAAM,IAAI;AACrB,QAAA,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,uBAAuB,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,aAAa,CAAC;AACnF,KAAA,CAAC;AACJ,CAAC;;AC3BD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MACU,mBAAmB,GAAG,CAKjC,IAA8D,EAC9D,MAA8D,KACtD;IAIR,wBAAwB,CAAsC,IAAI,EAAE;QAClE,MAAM,EAAE,MAAM,CAAC,IAAI;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,aAAa,EAAE,MAAM,CAAC,aAAa;AACnC,QAAA,OAAO,EAAE,CAAC,MAAM,KACd,QAAQ,CAA2C;AACjD,YAAA,MAAM,EAAE,MAAM,MAAM,EAAE;YACtB,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,KAAI;;;gBAG/C,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAwC;AAE7F,gBAAA,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC1D,KAAK,CAAC,OAAO,EAAE;;;;AAKf,gBAAA,OAAO,cAAc,CACnB,KAAK,CAAC,MAAM,CAAC,IAAI,CACf,MAAM,CAAC,CAAC,KAAK,KAAK,mBAAmB,CAAC,KAAK,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAC3E,IAAI,CAAC,CAAC,CAAC,CACR,CACF,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AACf,oBAAA,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE;AAC9B,wBAAA,MAAM,KAAK,CAAC,KAAK,CAAC,iBAAiB;oBACrC;oBAEA,OAAO,KAAK,CAAC,QAAQ;AACvB,gBAAA,CAAC,CAAC;YACJ,CAAC;SACF,CAAkC;AACtC,KAAA,CAAC;AACJ;;ACoFA,MAAM,YAAY,GAAG,MAAM,QAAQ,EAAE;AAErC;AACO,MAAM,uBAAuB,GAAG;AAEvC;;;;AAIG;AACI,MAAM,kBAAkB,GAAG;AAE3B,MAAM,qBAAqB,GAAG,CAAC,MAAmC,KAAqB;AAC5F,IAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoC;AACzD,IAAA,MAAM,aAAa,GAAG,IAAI,OAAO,EAAwB;;;AAIzD,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC;qFAAC;AAC9B,IAAA,MAAM,gBAAgB,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAEhE,IAAA,MAAM,oBAAoB,GAAG,CAAC,cAAqD,EAAE,WAAoB,KAAI;AAC3G,QAAA,IAAI,MAAM,CAAC,gBAAgB,KAAK,KAAK,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,CAAC;AAE/D,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,EAAE,aAAa,IAAI,MAAM,CAAC,aAAa,IAAI,uBAAuB,CAAC;AACtG,IAAA,CAAC;AAED,IAAA,MAAM,OAAO,GAAG,CAA0B,OAA6C,KAAI;QACzF,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,OAAO;QACzD,MAAM,WAAW,GACf,cAAc,EAAE,MAAM,EAAE,uBAAuB,KAAK;AAClD,cAAE;AACF,cAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,cAAc,EAAE,MAAM,EAAE,uBAAuB,KAAK,IAAI;AAElG,QAAA,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG;AAAE,YAAA,MAAM,kCAAkC,CAAC,OAAO,CAAC,GAAG,CAAC;;;AAItF,QAAA,IAAI,CAAC,WAAW,IAAI,eAAe,EAAE,UAAU,IAAI,CAAC,OAAO,CAAC,iCAAiC,EAAE;YAC7F,MAAM,oCAAoC,EAAE;QAC9C;QAEA,MAAM,KAAK,GAAG,UAAU,CAAC;YACvB,IAAI,EAAE,MAAM,CAAC,OAAO;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,IAAI,EAAE,UAAU;YAC5B,WAAW,EAAE,IAAI,EAAE,WAAW;YAC9B,gBAAgB,EAAE,MAAM,CAAC,WAAW;AACrC,SAAA,CAAC;QAEF,MAAM,QAAQ,GAAG;cACb,kBAAkB,CAAC,CAAA,EAAG,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,CAAA,EAAG,KAAK,CAAA,CAAE,EAAE;gBACpE,IAAI,EAAE,IAAI,EAAE,IAAI;gBAChB,WAAW,EAAE,IAAI,EAAE,WAAW;gBAC9B,UAAU,EAAE,IAAI,EAAE,UAAU;gBAC5B,OAAO,EAAE,IAAI,EAAE,OAAO;aACvB;cACD,KAAK;AAET,QAAA,MAAM,WAAW,GAAG,QAAQ,IAAI,YAAY,EAAE;QAC9C,MAAM,aAAa,GAAG,oBAAoB,CAAC,cAAc,EAAE,WAAW,CAAC;AAEvE,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW;AAEvC,QAAA,IAAI,QAAQ,KAAK,WAAW,IAAI,WAAW,EAAE;AAC3C,YAAA,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,kBAAkB,CAAC;QACjD;AAEA,QAAA,IAAI,WAAW,IAAI,QAAQ,EAAE;YAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;YAEtC,IAAI,UAAU,EAAE;;;gBAGd,cAAc,CAAC,UAAU,CAAC;gBAE1B,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,kBAAkB,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC;AAE9G,gBAAA,IAAI,CAAC,eAAe,EAAE,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE;AAChE,oBAAA,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;gBACzE;gBAEA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,OAA6B,EAAE;YAC7E;QACF;QAEA,MAAM,OAAO,GAAG,iBAAiB,CAAQ;AACvC,YAAA,QAAQ,EAAE,KAAK;YACf,IAAI;YACJ,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,YAAY,EAAE,MAAM,CAAC,YAAY;AACjC,YAAA,aAAa,EAAE,cAAc;YAC7B,aAAa,EAAE,MAAM,CAAC,OAAO;YAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;AACjC,YAAA,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO;AAC3C,SAAA,CAAC;QAEF,OAAO,CAAC,OAAO,EAAE;AAEjB,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,kBAAkB,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK,EAAE,WAAW,EAAE,aAAa,CAAC;AAE7G,QAAA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE;AACtC,IAAA,CAAC;;AAGD,IAAA,MAAM,YAAY,GAAG,CAAC,GAAa,EAAE,UAAkC,KAAI;AACzE,QAAA,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC;AACnC,QAAA,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE;AAC5B,QAAA,UAAU,CAAC,iBAAiB,EAAE,WAAW,EAAE;AAC3C,QAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;AACnB,IAAA,CAAC;AAED,IAAA,MAAM,cAAc,GAAG,CAAC,UAAkC,KAAI;AAC5D,QAAA,IAAI,UAAU,CAAC,UAAU,KAAK,SAAS;YAAE;AAEzC,QAAA,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC;AACnC,QAAA,UAAU,CAAC,UAAU,GAAG,SAAS;AACjC,QAAA,UAAU,CAAC,WAAW,GAAG,SAAS;AACpC,IAAA,CAAC;;IAGD,MAAM,uBAAuB,GAAG,MAAK;AACnC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC;AAE5F,QAAA,IAAI,MAAM,CAAC,MAAM,IAAI,kBAAkB;YAAE;AAEzC,QAAA,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;QAE1E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,kBAAkB,CAAC,EAAE;AAC9E,YAAA,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;QAC1B;AACF,IAAA,CAAC;AAED,IAAA,MAAM,MAAM,GAAG,CAAC,GAAa,EAAE,UAAkC,KAAI;AACnE,QAAA,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE;AACnC,QAAA,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC;AAE9E,QAAA,uBAAuB,EAAE;AAC3B,IAAA,CAAC;AAED,IAAA,MAAM,MAAM,GAAG,CAAC,GAAoB,EAAE,kBAA8B,KAAI;QACtE,IAAI,GAAG,KAAK,IAAI;AAAE,YAAA,OAAO,KAAK;QAE9B,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AAEjC,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK;AAE7B,QAAA,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC;QAE/C,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE;;;AAGnC,YAAA,IAAI,UAAU,CAAC,aAAa,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;AAC1E,gBAAA,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC;YACzB;iBAAO;AACL,gBAAA,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC;YAC/B;QACF;AAEA,QAAA,gBAAgB,EAAE;AAElB,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;IAED,MAAM,eAAe,GAAG,MAAK;AAC3B,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;YAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ;gBAAE;;;AAI1B,YAAA,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE;AAC5B,YAAA,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC;QAC/B;AAEA,QAAA,gBAAgB,EAAE;QAClB,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;AACnD,IAAA,CAAC;IAED,MAAM,YAAY,GAAG,MAAK;QACxB,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;AACvC,YAAA,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;gBAAE;;YAGrC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE;YAElD,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC7C;AACF,IAAA,CAAC;AAED,IAAA,MAAM,IAAI,GAAG,CACX,GAAa,EACb,kBAA8B,EAC9B,OAA+B,EAC/B,QAAiB,EACjB,UAAmB,EACnB,aAAqB,KACnB;AACF,QAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAE3F,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AAEjC,QAAA,IAAI,UAAU,IAAI,UAAU,EAAE;YAC5B,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,EAAE,eAAe,CAAC;QAC/D;aAAO;AACL,YAAA,MAAM,SAAS,GAA4C,IAAI,GAAG,CAAC,EAAE,CAAC;AAEtE,YAAA,SAAS,CAAC,GAAG,CAAC,kBAAkB,EAAE,eAAe,CAAC;;;;YAKlD,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC5D,gBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;oBAC1B,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,YAAY,iBAAiB,EAAE;wBAChD,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;oBAC/F;gBACF;qBAAO,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,EAAE;AAChD,oBAAA,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;gBACzE;AACF,YAAA,CAAC,CAAC;AAEF,YAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;gBACb,SAAS;gBACT,OAAO;gBACP,QAAQ;gBACR,iBAAiB;gBACjB,aAAa;AACd,aAAA,CAAC;QACJ;AAEA,QAAA,gBAAgB,EAAE;AACpB,IAAA,CAAC;IAED,MAAM,YAAY,GAAG,MACnB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM;QACjD,GAAG;QACH,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACxB,QAAA,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI;AACnC,QAAA,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;QACpC,OAAO,EAAE,KAAK,CAAC,OAAO;AACvB,KAAA,CAAC,CAAC;AAEL,IAAA,MAAM,KAAK,GAAG,CAAC,GAAa,KAAI;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AAE5B,QAAA,IAAI,CAAC,KAAK;YAAE;AAEZ,QAAA,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;AACxB,QAAA,gBAAgB,EAAE;AACpB,IAAA,CAAC;AAED,IAAA,MAAM,UAAU,GAAoB;QAClC,OAAO;QACP,MAAM;QACN,eAAe;QACf,YAAY;AACZ,QAAA,OAAO,EAAE,aAAa,CAAC,YAAY,EAAE;AACrC,QAAA,MAAM,EAAE;YACN,YAAY;AACZ,YAAA,YAAY,EAAE,YAAY,CAAC,UAAU,EAAE;YACvC,KAAK;AACN,SAAA;KACF;AAED,IAAA,OAAO,UAAU;AACnB;;AC5WO,MAAM,iBAAiB,GAAG,CAAC,OAAuC,KACvE,kBAAkB,CAChB,MAAK;AACH,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AACrC,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC;AAC3C,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEjC,MAAM,UAAU,GAAG,qBAAqB,CAAC;AACvC,QAAA,GAAG,OAAO;;;AAGV,QAAA,gBAAgB,EAAE,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACxD,QAAA,YAAY,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE;AACvD,KAAA,CAAC;AAEF,IAAA,MAAM,MAAM,GAAgB;QAC1B,UAAU;QACV,OAAO,EAAE,OAAO,CAAC,OAAO;AACxB,QAAA,mBAAmB,EAAE,MAAM,UAAU,CAAC,YAAY,EAAE;KACrD;AAED,IAAA,OAAO,MAAM;AACf,CAAC,EACD;AACE,IAAA,IAAI,EAAE,CAAA,YAAA,EAAe,OAAO,CAAC,IAAI,CAAA,CAAE;AACpC,CAAA;;AC3HE,MAAM,qBAAqB,GAAG,CACnC,cAAsD,KACvB;IAC/B,MAAM,GAAG,kBAAkB,CAAC,GAAG,cAAc,CAAC,gBAAgB,CAAC,YAAY;AAC3E,IAAA,MAAM,YAAY,GAAG,kBAAkB,EAAE;AAEzC,IAAA,OAAO,0BAA0B,CAAC;QAChC,YAAY;QACZ,IAAI,EAAE,cAAc,CAAC,IAAI;QACzB,KAAK,EAAE,cAAc,CAAC,KAAK;QAC3B,oBAAoB,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,KAAI;YACpE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,WAAW,IAAI,EAAE;AACjD,YAAA,MAAM,WAAW,GAAG,EAAE,IAAI,WAAW,EAAE,IAAI,IAAK,EAAyB,CAAC,EAAE,OAAO,EAAE;AAErF,YAAA,YAAY,CAAC;AACX,gBAAA,cAAc,EAAE,cAAc;gBAC9B,YAAY;AACZ,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA,CAAC;QACJ,CAAC;AACF,KAAA,CAAC;AACJ;;AC3BO,MAAM,iBAAiB,GAAG,CAA0B,OAAwC,KACjG,eAAe,CAAC;IACd,OAAO,EAAE,OAAO,CAAC,OAAO;IACxB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;IAC1C,QAAQ,EAAE,OAAO,CAAC,QAAQ;IAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;AAChC,IAAA,cAAc,EAAE,qBAAqB;AACtC,CAAA;;ACLI,MAAM,wBAAwB,GAAG,CACtC,OAA8C,EAC9C,SAAyD,KAEzD,sBAAsB,CAAC;IACrB,OAAO;IACP,SAAS;AACT,IAAA,YAAY,EAAE,iBAAiB;AAChC,CAAA;;ACAH,MAAM,mBAAmB,GAAG,CAAC,MAAmB,KAAI;AAClD,IAAA,OAAO,CAAC,MAAkC,KACxC,CAA0B,KAAuB,EAAE,GAAG,IAA+B,KACnF,kBAAkB,CAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,yBAAyB,GAAG,CAAC,MAAmB,KAAI;AACxD,IAAA,OAAO,CAAC,MAAkC,EAAE,YAA+C,KACzF,CAA0B,KAAuB,EAAE,GAAG,IAA+B,KACnF,wBAAwB,CAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AACvF,CAAC;AAED;MACa,cAAc,GAAG,mBAAmB,CAAC,KAAK;AAEvD;MACa,oBAAoB,GAAG,yBAAyB,CAAC,KAAK;AAEnE;MACa,eAAe,GAAG,mBAAmB,CAAC,MAAM;AAEzD;MACa,qBAAqB,GAAG,yBAAyB,CAAC,MAAM;AAErE;MACa,cAAc,GAAG,mBAAmB,CAAC,KAAK;AAEvD;MACa,oBAAoB,GAAG,yBAAyB,CAAC,KAAK;AAEnE;MACa,iBAAiB,GAAG,mBAAmB,CAAC,QAAQ;AAE7D;MACa,uBAAuB,GAAG,yBAAyB,CAAC,QAAQ;AAEzE;MACa,gBAAgB,GAAG,mBAAmB,CAAC,OAAO;AAE3D;MACa,sBAAsB,GAAG,yBAAyB,CAAC,OAAO;;ACvDvE;;;;;;;;;;AAUG;AACI,MAAM,mBAAmB,GAAG,OACjC,KAAmB,EACnB,WAAqC,KACJ;AACjC,IAAA,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;AAE1B,IAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,EAAE;IAEvC,MAAM,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAEzF,IAAA,OAAO,QAAQ;AACjB;;AC1BA;AAmHA,MAAM,mBAAmB,GAAG,OAAsB;AAChD,IAAA,MAAM,EAAE,MAAM,CAAsB,MAAM,CAAC;AAC3C,IAAA,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;AACtB,IAAA,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;AACtB,IAAA,KAAK,EAAE,MAAM,CAA4B,IAAI,CAAC;AAC9C,IAAA,QAAQ,EAAE,MAAM,CAAgB,IAAI,CAAC;AACrC,IAAA,SAAS,EAAE,MAAM,CAAqB,EAAE,CAAC;AACzC,IAAA,QAAQ,EAAE,MAAM,CAAY,EAAE,CAAC;AAC/B,IAAA,SAAS,EAAE,MAAM,CAAY,EAAE,CAAC;AACjC,CAAA,CAAC;AAUF,MAAM,aAAa,GAAG,CACpB,KAAqB,EACrB,KAAoB,EACpB,cAA4C,KACf;AAC7B,IAAA,MAAM,GAAG,GAAG,YAAqD;QAC/D,IAAI,KAAK,CAAC,OAAO,EAAE;YAAE,MAAM,2BAA2B,EAAE;AAExD,QAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3B,QAAA,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AACxB,QAAA,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,QAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AACtB,QAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QAEvB,MAAM,SAAS,GAAuB,EAAE;QACxC,MAAM,QAAQ,GAAc,EAAE;QAC9B,MAAM,SAAS,GAAc,EAAE;QAC/B,IAAI,gBAAgB,GAAY,SAAS;AAEzC,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;YACvC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAE5B,YAAA,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,SAAS,CAAC;AAC9D,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACnB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AACjC,YAAA,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC;AAEhE,YAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxB,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;AAEnC,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE;YAE9B,IAAI,KAAK,EAAE;AACT,gBAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;AACzB,gBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,gBAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACrB,gBAAA,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAExB,gBAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;YACrD;AAEA,YAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE;AACpC,YAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxB,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;YACnC,gBAAgB,GAAG,QAAQ;QAC7B;AAEA,QAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3B,QAAA,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAExB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAuB,EAAE,SAAS,EAAE;AACpE,IAAA,CAAC;AAED,IAAA,MAAM,QAAQ,GAA8B;QAC1C,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,KACnB,aAAa,CACX;AACE,YAAA,GAAG,KAAK;AACR,YAAA,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,gBAAgB,EAAE,SAAS,KAAK,OAAO,CAAC,gBAAuB,EAAE,SAAgB,CAAC,EAAE;SAC5G,EACD,KAAK,EACL,cAAc,CACR;AACV,QAAA,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE;AACjC,QAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE;AACnC,QAAA,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE;QAC3C,KAAK,EAAE,KAAK,CAAC,MAAM;AACnB,QAAA,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AAClC,QAAA,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE;AAC/B,QAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE;AACrC,QAAA,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE;AACvC,QAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE;AACrC,QAAA,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,UAAU,EAAiC;QACtE,GAAG;KACJ;AAED,IAAA,IAAI,cAAc;AAAE,QAAA,cAAc,CAAC,OAAO,GAAG,QAAQ;AAErD,IAAA,OAAO,QAAQ;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;AAqBG;MACU,aAAa,GAAG,CAC3B,KAAmB,EACnB,QAA4C,KACJ;IACxC,MAAM,cAAc,GAA4C,sBAAsB;AACpF,UAAE,EAAE,OAAO,EAAE,IAAqC;UAChD,SAAS;IAEb,MAAM,IAAI,GAAG,aAAa,CACxB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,EAAE,EAAE,CAAC,EAC1C,mBAAmB,EAAE,EACrB,cAAc,CACf;IAED,IAAI,cAAc,EAAE;QAClB,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAC5C,YAAA,IAAI,EAAE,gBAAgB;AACtB,YAAA,MAAM,EAAE,cAAc;AACtB,YAAA,IAAI,EAAE,EAAE;AACT,SAAA,CAAC;;AAGF,QAAA,IAAI;YACF,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC;QAC1C;AAAE,QAAA,MAAM;;QAER;IACF;AAEA,IAAA,OAAO,IAAI;AACb;;AC1OA;;;;;;;;;;;;;;;;;;;;;;AAsBG;MACU,iBAAiB,GAAG,CAC/B,IAA8D,EAC9D,MAA4D,KACpD;IAKR,wBAAwB,CAAsC,IAAI,EAAE;QAClE,MAAM,EAAE,MAAM,CAAC,IAAI;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,aAAa,EAAE,MAAM,CAAC,aAAa;AACnC,QAAA,OAAO,EAAE,CAAC,MAAM,KAAI;;;AAGlB,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,EAAE;AAEnC,YAAA,OAAO,QAAQ,CAA2C;AACxD,gBAAA,MAAM,EAAE,MAAM,MAAM,EAAE;gBACtB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAI;AACxC,oBAAA,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,WAAsB,EAAE,CAAC;AACnF,oBAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE;;;oBAI9B,IAAI,KAAK,EAAE;AACT,wBAAA,MAAM,KAAK;oBACb;AAEA,oBAAA,OAAO,QAAQ,CAAC,QAAQ,EAAE,IAAI,SAAS;gBACzC,CAAC;AACF,aAAA,CAAkC;QACrC,CAAC;AACF,KAAA,CAAC;AACJ;;AC3DO,MAAM,mBAAmB,GAAG,MAA6B;AAC9D,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAErC,MAAM,WAAW,GAAG,qBAAqB;IACzC,MAAM,iBAAiB,GAAG,IAAI;IAC9B,MAAM,aAAa,GAAG,IAAI;IAC1B,MAAM,UAAU,GAAG,+BAA+B;IAElD,MAAM,KAAK,GAAG,CAAA,IAAA,EAAO,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;AAC/E,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK;iFAAC;AAC9B,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC;sFAAC;AAC/B,IAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB;IAC3C,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IAEhC,IAAI,OAAO,GAA4B,IAAI;IAC3C,IAAI,mBAAmB,GAA0C,IAAI;IACrE,IAAI,qBAAqB,GAA0C,IAAI;IAEvE,IAAI,OAAO,gBAAgB,KAAK,WAAW,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;AAClF,QAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAClB,OAAO;AACL,YAAA,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE;AAC/B,YAAA,aAAa,EAAE,aAAa,CAAC,UAAU,EAAE;YACzC,YAAY,EAAE,MAAK;;YAEnB,CAAC;YACD,OAAO,EAAE,MAAK;;YAEd,CAAC;SACF;IACH;AAEA,IAAA,OAAO,GAAG,IAAI,gBAAgB,CAAC,WAAW,CAAC;IAE3C,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAmB,CAAC;AAE1E,IAAA,MAAM,qBAAqB,GAAG,CAAC,QAAA,GAAmB,KAAK,KAAI;AACzD,QAAA,IAAI;YACF,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9F;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,SAAS,EAAE,EAAE;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC;YAC5D;QACF;AACF,IAAA,CAAC;IAED,MAAM,kBAAkB,GAAG,MAAkD;AAC3E,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;AAC/C,YAAA,IAAI,CAAC,MAAM;AAAE,gBAAA,OAAO,IAAI;AACxB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3B;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;QACb;AACF,IAAA,CAAC;IAED,MAAM,YAAY,GAAG,MAAK;AACxB,QAAA,IAAI,QAAQ,EAAE;YAAE;AAEhB,QAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AAClB,QAAA,qBAAqB,EAAE;AAEvB,QAAA,MAAM,OAAO,GAAkB;AAC7B,YAAA,IAAI,EAAE,cAAc;YACpB,KAAK;SACN;AACD,QAAA,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC;AAC/B,IAAA,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAK;QAC7B,IAAI,CAAC,QAAQ,EAAE;YAAE;AAEjB,QAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AAEnB,QAAA,MAAM,OAAO,GAAkB;AAC7B,YAAA,IAAI,EAAE,gBAAgB;YACtB,KAAK;SACN;AACD,QAAA,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC;AAC/B,IAAA,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAK;AAC7B,QAAA,MAAM,SAAS,GAAG,kBAAkB,EAAE;AACtC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QAEtB,IAAI,CAAC,SAAS,IAAI,GAAG,GAAG,SAAS,CAAC,SAAS,GAAG,aAAa,EAAE;AAC3D,YAAA,IAAI,CAAC,QAAQ,EAAE,EAAE;AACf,gBAAA,YAAY,EAAE;YAChB;QACF;AAAO,aAAA,IAAI,SAAS,CAAC,KAAK,KAAK,KAAK,EAAE;AACpC,YAAA,IAAI,CAAC,QAAQ,EAAE,EAAE;AACf,gBAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YACpB;AACA,YAAA,qBAAqB,EAAE;QACzB;aAAO;YACL,IAAI,QAAQ,EAAE,EAAE;AACd,gBAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YACrB;QACF;AACF,IAAA,CAAC;AAED,IAAA,OAAO,CAAC,SAAS,GAAG,CAAC,KAAkC,KAAI;AACzD,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI;AAE1B,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE;AAChC,YAAA,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE;AAC3B,gBAAA,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YAC1C;YACA,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,IAAI,QAAQ,EAAE,EAAE;AACzC,gBAAA,MAAM,SAAS,GAAG,kBAAkB,EAAE;gBACtC,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE;AAClD,oBAAA,iBAAiB,EAAE;gBACrB;YACF;QACF;AAAO,aAAA,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,EAAE;AAC3C,YAAA,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE;AAC3B,gBAAA,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YAC1C;QACF;AAAO,aAAA,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAmB,EAAE;AAC/C,YAAA,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE;AAC3B,gBAAA,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACxC,gBAAA,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;gBACjC,OAAO,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAmB,CAAC;YACzE;QACF;AAAO,aAAA,IAAI,OAAO,CAAC,IAAI,KAAK,qBAAqB,EAAE;AACjD,YAAA,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE;AAC3B,gBAAA,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AAC/B,gBAAA,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;YACnC;QACF;AAAO,aAAA,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc,EAAE;YAC1C,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,IAAI,QAAQ,EAAE,EAAE;AACzC,gBAAA,MAAM,SAAS,GAAG,kBAAkB,EAAE;gBACtC,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE;AAClD,oBAAA,iBAAiB,EAAE;gBACrB;qBAAO;AACL,oBAAA,MAAM,aAAa,GAAkB;AACnC,wBAAA,IAAI,EAAE,WAAW;wBACjB,KAAK;qBACN;AACD,oBAAA,OAAO,EAAE,WAAW,CAAC,aAAa,CAAC;gBACrC;YACF;QACF;AAAO,aAAA,IAAI,OAAO,CAAC,IAAI,KAAK,gBAAgB,EAAE;AAC5C,YAAA,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE;gBAC3B,UAAU,CAAC,MAAM,iBAAiB,EAAE,EAAE,GAAG,CAAC;YAC5C;QACF;AACF,IAAA,CAAC;AAED,IAAA,iBAAiB,EAAE;AAEnB,IAAA,mBAAmB,GAAG,WAAW,CAAC,MAAK;QACrC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAEhC,IAAI,QAAQ,EAAE,EAAE;AACd,YAAA,qBAAqB,EAAE;YACvB,OAAO,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAmB,CAAC;QACrE;aAAO;YACL,OAAO,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAmB,CAAC;QACzE;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,IAAI,OAAO,GAAG,KAAK;QACnB,KAAK,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,SAAS,EAAE;YACtC,IAAI,EAAE,KAAK,KAAK,IAAI,GAAG,GAAG,QAAQ,GAAG,aAAa,EAAE;AAClD,gBAAA,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpB,OAAO,GAAG,IAAI;YAChB;QACF;QACA,IAAI,OAAO,EAAE;AACX,YAAA,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;QACnC;IACF,CAAC,EAAE,iBAAiB,CAAC;AAErB,IAAA,qBAAqB,GAAG,WAAW,CAAC,MAAK;AACvC,QAAA,iBAAiB,EAAE;IACrB,CAAC,EAAE,iBAAiB,CAAC;IAErB,MAAM,sBAAsB,GAAG,MAAK;AAClC,QAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,EAAE,EAAE;;QAEnC;aAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE;AAC1C,YAAA,iBAAiB,EAAE;QACrB;AACF,IAAA,CAAC;AAED,IAAA,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;IAErE,MAAM,OAAO,GAAG,MAAK;QACnB,IAAI,mBAAmB,EAAE;YACvB,aAAa,CAAC,mBAAmB,CAAC;QACpC;QACA,IAAI,qBAAqB,EAAE;YACzB,aAAa,CAAC,qBAAqB,CAAC;QACtC;QAEA,OAAO,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAmB,CAAC;AAE7E,QAAA,iBAAiB,EAAE;AAEnB,QAAA,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;QACxE,OAAO,EAAE,KAAK,EAAE;AAEhB,QAAA,MAAM,SAAS,GAAG,kBAAkB,EAAE;AACtC,QAAA,IAAI,SAAS,EAAE,KAAK,KAAK,KAAK,EAAE;AAC9B,YAAA,IAAI;AACF,gBAAA,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC;YACrC;AAAE,YAAA,MAAM;;YAER;QACF;AACF,IAAA,CAAC;AAED,IAAA,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC;IAE7B,OAAO;AACL,QAAA,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE;AAC/B,QAAA,aAAa,EAAE,aAAa,CAAC,UAAU,EAAE;QACzC,YAAY;QACZ,OAAO;KACR;AACH,CAAC;;AChQD,MAAM,sBAAsB,GAAG,UAAU;AAEzC,MAAM,qBAAqB,GAAG,MAAa;AACzC,IAAA,MAAM,aAAa,GACjB,OAAO,SAAS,KAAK;UACjB,GAAG,SAAS,CAAC,SAAS,CAAA,EAAG,SAAS,CAAC,QAAQ,CAAA,EAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAA,EAAG,MAAM,CAAC,UAAU,CAAA;UAC9F,QAAQ;AAEd,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;IAE1D,OAAO,IAAI,CAAC,CAAA,EAAG,aAAa,GAAG,MAAM,CAAA,CAAE,CAAC;AAC1C,CAAC;AAED,IAAI,SAAS,GAAkB,IAAI;AAEnC,MAAM,gBAAgB,GAAG,MAAa;AACpC,IAAA,IAAI,SAAS;AAAE,QAAA,OAAO,SAAS;AAE/B,IAAA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;QACvC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,sBAAsB,CAAC;QAC3D,IAAI,MAAM,EAAE;YACV,SAAS,GAAG,MAAM;AAClB,YAAA,OAAO,MAAM;QACf;AAEA,QAAA,MAAM,MAAM,GAAG,qBAAqB,EAAE;AACtC,QAAA,YAAY,CAAC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC;QACpD,SAAS,GAAG,MAAM;AAClB,QAAA,OAAO,MAAM;IACf;IAEA,IAAI,CAAC,SAAS,EAAE;QACd,SAAS,GAAG,qBAAqB,EAAE;IACrC;AACA,IAAA,OAAO,SAAS;AAClB,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,GAAW,KAAY;IACtD,IAAI,MAAM,GAAG,EAAE;AACf,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IACpF;AACA,IAAA,OAAO,MAAM;AACf,CAAC;AAEM,MAAM,YAAY,GAAG,CAAC,KAAa,KAAY;AACpD,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,KAAK;AAExB,IAAA,IAAI;AACF,QAAA,MAAM,GAAG,GAAG,gBAAgB,EAAE;QAC9B,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC;AACvC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,KAAK;IACd;AACF,CAAC;AAEM,MAAM,YAAY,GAAG,CAAC,cAAsB,KAAY;AAC7D,IAAA,IAAI,CAAC,cAAc;AAAE,QAAA,OAAO,cAAc;AAE1C,IAAA,IAAI;AACF,QAAA,MAAM,GAAG,GAAG,gBAAgB,EAAE;AAC9B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;AACtC,QAAA,OAAO,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC;IAClC;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,cAAc;IACvB;AACF,CAAC;AAEM,MAAM,WAAW,GAAG,CAAC,KAAa,KAAa;AACpD,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,KAAK;IAExB,MAAM,WAAW,GAAG,oBAAoB;AACxC,IAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,KAAK;AAE1C,IAAA,IAAI;QACF,IAAI,CAAC,KAAK,CAAC;AACX,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,EAAE;IAC1B;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,KAAK;IACd;AACF,CAAC;AAEM,MAAM,kBAAkB,GAAG,MAAW;IAC3C,SAAS,GAAG,IAAI;AAChB,IAAA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;AACvC,QAAA,YAAY,CAAC,UAAU,CAAC,sBAAsB,CAAC;IACjD;AACF,CAAC;;AChEM,MAAM,iBAAiB,GAAG,CAC/B,MAA0B,EAC1B,WAA0C,EAC1C,YAA2C,EAC3C,WAAwB,KACA;AACxB,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAErC,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,mBAAmB;AAC7D,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI;AAC5C,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI;IAE5C,IAAI,OAAO,GAA4B,IAAI;IAC3C,IAAI,0BAA0B,GAAG,KAAK;AAEtC,IAAA,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE;QAC3C,IAAI,SAAS,EAAE,EAAE;AACf,YAAA,OAAO,CAAC,IAAI,CAAC,yFAAyF,CAAC;QACzG;QACA,OAAO;YACL,OAAO,EAAE,MAAK;;YAEd,CAAC;SACF;IACH;AAEA,IAAA,OAAO,GAAG,IAAI,gBAAgB,CAAC,WAAW,CAAC;AAE3C,IAAA,OAAO,CAAC,SAAS,GAAG,CAAC,KAAgC,KAAI;AACvD,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI;;AAG1B,QAAA,IAAI,0BAA0B;YAAE;QAEhC,0BAA0B,GAAG,IAAI;AAEjC,QAAA,IAAI;YACF,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,EAAE;AAC3C,gBAAA,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,gBAAA,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,gBAAA,WAAW,CAAC,UAAU,CAAC,eAAe,EAAE;YAC1C;iBAAO,IAAI,OAAO,CAAC,IAAI,KAAK,gBAAgB,IAAI,UAAU,EAAE;gBAC1D,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAClD,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACtD;QACF;gBAAU;YACR,0BAA0B,GAAG,KAAK;QACpC;AACF,IAAA,CAAC;IAED,MAAM,OAAO,GAAG,MAAK;QACnB,OAAO,EAAE,KAAK,EAAE;AAClB,IAAA,CAAC;AAED,IAAA,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC;IAE7B,IAAI,UAAU,EAAE;QACd,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,WAAW,EAAE;AAC5B,YAAA,MAAM,OAAO,GAAG,YAAY,EAAE;YAE9B,IAAI,MAAM,IAAI,OAAO,IAAI,CAAC,0BAA0B,IAAI,OAAO,EAAE;AAC/D,gBAAA,MAAM,OAAO,GAAgB;AAC3B,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC;AACjC,oBAAA,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC;iBACpC;AACD,gBAAA,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;YAC9B;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,IAAI,UAAU,EAAE;QACd,IAAI,SAAS,GAAG,KAAK;QAErB,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,WAAW,EAAE;YAE5B,IAAI,MAAM,EAAE;gBACV,SAAS,GAAG,IAAI;YAClB;AAAO,iBAAA,IAAI,SAAS,IAAI,CAAC,0BAA0B,IAAI,OAAO,EAAE;AAC9D,gBAAA,MAAM,OAAO,GAAgB;AAC3B,oBAAA,IAAI,EAAE,QAAQ;iBACf;AACD,gBAAA,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;gBAC5B,SAAS,GAAG,KAAK;YACnB;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,OAAO,EAAE,OAAO,EAAE;AACpB,CAAC;;AC1CM,MAAM,qBAAqB,GAAG;AACnC,IAAA,eAAe,EAAE,iBAAiB;AAClC,IAAA,wBAAwB,EAAE,0BAA0B;AACpD,IAAA,iBAAiB,EAAE,mBAAmB;AACtC,IAAA,gBAAgB,EAAE,kBAAkB;AACpC,IAAA,QAAQ,EAAE,UAAU;;AAuQtB,MAAM,oBAAoB,GAAG,CAAC,QAAiB,KAA8B;AAC3E,IAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACvB,MAAM,kCAAkC,EAAE;IAC5C;AACA,IAAA,IAAI,EAAE,aAAa,IAAI,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,aAAa,CAAC,KAAK,QAAQ,EAAE;QAC/E,MAAM,2CAA2C,EAAE;IACrD;AACA,IAAA,IAAI,EAAE,cAAc,IAAI,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,cAAc,CAAC,KAAK,QAAQ,EAAE;QACjF,MAAM,4CAA4C,EAAE;IACtD;AACA,IAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE;AACzF,CAAC;AAED,MAAM,wBAAwB,GAAG,CAAC,OAAwB,EAAE,WAA+B,KAAY;IACrG,IAAI,WAAW,KAAK,iBAAiB;AAAE,QAAA,OAAO,WAAW;AACzD,IAAA,IAAI,OAAO,CAAC,KAAK,KAAK,mBAAmB;AAAE,QAAA,OAAO,cAAc;IAChE,IAAI,WAAW,KAAK,kBAAkB;AAAE,QAAA,OAAO,YAAY;IAC3D,OAAO,OAAO,CAAC,GAAG;AACpB,CAAC;AAED,MAAM,wBAAwB,GAAG,CAC/B,QAAmB,EACnB,QAAkB,EAClB,mBAA+F,EAC/F,sBAAkG,EAClG,SAAoD,EACpD,cAA+D,KAC7D;IACF,MAAM,OAAO,GAAG,EAA8B;AAC9C,IAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAmD;AAEjF,IAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC9B,QAAA,MAAM,aAAa,GAAG,MAAM,CAAkC,IAAI;0FAAC;QACnE,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC;QAE9C,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,IAAI,oBAAoB;QAE1E,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,QAAQ,GAAG,aAAa,EAAE;AAChC,YAAA,IAAI,CAAC,QAAQ;gBAAE;AAEf,YAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE;AACpC,YAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE;AAClC,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE;YAE9B,IAAI,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE;AAClC,gBAAA,IAAI;AACF,oBAAA,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;oBACtC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC;gBACpD;gBAAE,OAAO,YAAY,EAAE;oBACrB,IAAI,SAAS,EAAE,EAAE;wBACf,OAAO,CAAC,KAAK,CAAC,CAAA,8BAAA,EAAiC,OAAO,CAAC,GAAG,CAAA,UAAA,CAAY,EAAE,YAAY,CAAC;oBACvF;gBACF;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,OAAO,GAAG,CAAC,IAA6B,EAAE,OAAkC,KAAI;AACpF,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;AACxC,gBAAA,mBAAmB,EAAE,IAAI;gBACzB,QAAQ;AACT,aAAA,CAAC;YACF,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAChC,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,EAAE;YAEvC,MAAM,SAAS,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC;AAEzE,YAAA,IAAI,SAAS,KAAK,YAAY,EAAE;AAC9B,gBAAA,mBAAmB,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC;AACvD,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE;AAC3B,oBAAA,sBAAsB,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC;gBAC5D;YACF;AACA,YAAA,cAAc,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;YAEzD,MAAM,CACJ,MAAK;AACH,gBAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE;AACpC,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE;AAClC,gBAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE;AAE9B,gBAAA,IAAI,OAAO;oBAAE;gBAEb,IAAI,KAAK,EAAE;AACT,oBAAA,cAAc,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;gBAChE;qBAAO,IAAI,QAAQ,EAAE;AACnB,oBAAA,cAAc,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;gBACrE;AACF,YAAA,CAAC,EACD,EAAE,QAAQ,EAAE,CACb;AAED,YAAA,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3B,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC;AAED,QAAA,OAAO,CAAC,OAAO,CAAC,GAAyC,CAAC,GAAG;YAC3D,OAAO;AACP,YAAA,QAAQ,EAAE,aAAa,CAAC,UAAU,EAAE;SACsC;IAC9E;AAEA,IAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE;AACpC,CAAC;AAED,MAAM,aAAa,GAAG,CAKpB,eAAsC,EACtC,OAAiE,KAC/D;IACF,MAAM,QAAQ,GAA4B,EAAE;AAE5C,IAAA,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE;AAC5B,QAAA,OAAO,QAAQ;IACjB;AAEA,IAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAyB;AAErD,IAAA,KAAK,MAAM,YAAY,IAAI,eAAe,EAAE;AAC1C,QAAA,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAsE;QAE1G,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAClC,YAAA,MAAM,oCAAoC,CAAC,OAAO,CAAC,IAAI,CAAC;QAC1D;AAEA,QAAA,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;AAC9B,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC;AACzB,aAAA,WAAW;aACX,KAAK,CAAC,GAAG;AACT,aAAA,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACxF,IAAI,CAAC,EAAE,CAAC;AACX,QAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,QAAQ;IAC1C;AAEA,IAAA,OAAO,QAAQ;AACjB,CAAC;AAED,MAAM,0BAA0B,GAAG,CACjC,MAAqD;AACrD,WAA0C,EAC1C,YAA2C,EAC3C,WAAwB,KACtB;AACF,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,YAAY;AAC9C,IAAA,MAAM,mBAAmB,GAAG,kBAAkB,KAAK,KAAK,KAAK,kBAAkB,EAAE,OAAO,IAAI,IAAI,CAAC;IAEjG,IAAI,mBAAmB,EAAE;AACvB,QAAA,iBAAiB,CACf;AACE,YAAA,WAAW,EAAE,OAAO,kBAAkB,KAAK,QAAQ,GAAG,kBAAkB,EAAE,WAAW,GAAG,SAAS;AACjG,YAAA,UAAU,EAAE,OAAO,kBAAkB,KAAK,QAAQ,GAAG,kBAAkB,EAAE,UAAU,GAAG,SAAS;AAC/F,YAAA,UAAU,EAAE,OAAO,kBAAkB,KAAK,QAAQ,GAAG,kBAAkB,EAAE,UAAU,GAAG,SAAS;AAChG,SAAA,EACD,WAAW,EACX,YAAY,EACZ,WAAW,CACZ;IACH;AACF,CAAC;AAED,MAAM,oBAAoB,GAAG,CAC3B,MAAqD,KACnD;AACF,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,YAAY;AAC9C,IAAA,MAAM,mBAAmB,GAAG,kBAAkB,KAAK,KAAK,KAAK,kBAAkB,EAAE,OAAO,IAAI,IAAI,CAAC;IACjG,MAAM,qBAAqB,GACzB,mBAAmB;AACnB,SAAC,OAAO,kBAAkB,KAAK,QAAQ,IAAI,kBAAkB,EAAE,cAAc,IAAI,IAAI,IAAI,IAAI,CAAC;AAChG,IAAA,MAAM,cAAc,GAAG,qBAAqB,GAAG,mBAAmB,EAAE,GAAG,IAAI;IAC3E,MAAM,UAAU,GAAG,OAAO,qBAAqB,IAAI,cAAc,EAAE,QAAQ,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC;IAC9F,MAAM,qBAAqB,GAAG;AAC5B,UAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,cAAc,CAAC,aAAa;UAChF,SAAS;AACb,IAAA,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE;AAC9C,CAAC;AAED,MAAM,4BAA4B,GAAG,CAKnC,MAAyE,KACvE;AACF,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACrC,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;AAE9C,IAAA,MAAM,WAAW,GAAG,MAAM,CAAgB,IAAI;oFAAC;AAC/C,IAAA,MAAM,YAAY,GAAG,MAAM,CAAgB,IAAI;qFAAC;AAChD,IAAA,MAAM,kBAAkB,GAAG,IAAI,OAAO,EAAQ;AAE9C,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAqB,MAAK;AACnD,QAAA,MAAM,KAAK,GAAG,WAAW,EAAE;AAC3B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;AAEvB,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,aAAa,CAAc,KAAK,CAAC;QAC7E;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,SAAS,EAAE,EAAE;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;YACzD;AACA,YAAA,OAAO,IAAI;QACb;IACF,CAAC;mFAAC;IAEF,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;wFAAC;AACvD,IAAA,MAAM,mBAAmB,GAAG,MAAM,CAA6D,IAAI;4FAAC;AACpG,IAAA,MAAM,sBAAsB,GAAG,MAAM,CAA6D,IAAI;+FAAC;AACvG,IAAA,MAAM,cAAc,GAAG,MAAM,CAAkC,IAAI;uFAAC;AAEpE,IAAA,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,OAAe,KAAI;AACpD,QAAA,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;AACvB,QAAA,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;QACzB,kBAAkB,CAAC,IAAI,EAAE;AAC3B,IAAA,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,GAAG,wBAAwB,CAC1C,MAAM,CAAC,OAAO,EACd,QAAQ,EACR,mBAAmB,EACnB,sBAAsB,EACtB,SAAS,EACT,cAAc,CACf;IAED,MAAM,MAAM,GAAG,MAAK;AAClB,QAAA,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,WAAW,CAAC,UAAU,CAAC,eAAe,EAAE;AACxC,QAAA,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,QAAA,cAAc,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC1D,IAAA,CAAC;AAED,IAAA,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC;AAE7C,IAAA,MAAM,iBAAiB,GAA2D;QAChF,WAAW;QACX,YAAY;QACZ,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,WAAW;QACX,UAAU,EAAE,WAAW,CAAC,UAAU;QAClC,QAAQ,EAAE,QAAQ,CAAC,UAAU;QAC7B,kBAAkB;AAClB,QAAA,OAAO,EAAE,OAA8C;KACxD;AAED,IAAA,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE;AACpC,QAAA,OAAO,CAAC,KAAK,GAAG,iBAAiB,CAAC;IACpC;AAEA,IAAA,MAAM,mBAAmB,GAA6D;QACpF,YAAY;QACZ,WAAW;QACX,UAAU;QACV,MAAM;QACN,QAAQ;QACR,UAAU;QACV,SAAS;QACT,QAAQ,EAAE,QAAQ,CAAC,UAAU;QAC7B,cAAc,EAAE,QAAQ,CAAC,qBAAqB;QAC9C,kBAAkB;AAClB,QAAA,OAAO,EAAE,OAA8C;QACvD,cAAc;KACf;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IAEpE,0BAA0B,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC;AAE1E,IAAA,MAAM,QAAQ,GAAG;QACf,OAAO;AACP,QAAA,QAAQ,EAAE,QAAiD;AAC3D,QAAA,WAAW,EAAE,WAAW,CAAC,UAAU,EAAE;AACrC,QAAA,YAAY,EAAE,YAAY,CAAC,UAAU,EAAE;QACvC,UAAU;QACV,eAAe;AACf,QAAA,mBAAmB,EAAE,mBAAmB,CAAC,UAAU,EAAE;AACrD,QAAA,sBAAsB,EAAE,sBAAsB,CAAC,UAAU,EAAE;AAC3D,QAAA,cAAc,EAAE,cAAc,CAAC,UAAU,EAAE;QAC3C,SAAS;QACT,MAAM;QACN,kBAAkB;KACsC;IAE1D,IAAI,sBAAsB,EAAE,EAAE;QAC5B,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAC5C,YAAA,IAAI,EAAE,eAAe;AACrB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,IAAI,EAAE;gBACJ,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,gBAAA,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,cAAc,CAAC;gBACrD,aAAa,EAAE,WAAW,CAAC,OAAO;gBAClC,UAAU,EAAE,WAAW,CAAC,UAAU;AACnC,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC;IAClC;AAEA,IAAA,OAAO,QAAQ;AACjB,CAAC;AAEM,MAAM,wBAAwB,GAAG,CAKtC,MAAyE,KACtE,kBAAkB,CAAC,MAAM,4BAA4B,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,CAAA,mBAAA,EAAsB,MAAM,CAAC,IAAI,CAAA,CAAE,EAAE;;AChhB1G,MAAM,uBAAuB,GAAG,CACrC,GAAS,EACT,MAA8B,EAC9B,KAAyD,MACtB;AACnC,IAAA,KAAK,EAAE,WAAW;IAClB,GAAG;AACH,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,MAAM;AACT,QAAA,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,EAAE,CAAC;AACvF,KAAA;IACD,KAAK;AACN,CAAA;MAEY,gBAAgB,GAAG,CAC9B,GAAS,EACT,MAAsC,KACG;IACzC,MAAM,oBAAoB,GAAG,MAAM,CAAC,WAAW,EAAE,oBAAoB,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC/G,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,EAAE,eAAe,IAAI,KAAK,CAAC;IACrE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,WAAW,IAAI,CAAC,CAAC;IAEzD,MAAM,cAAc,GAAyB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAI;AACrE,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK;QAExB,IAAI,WAAW,GAAG,CAAC,IAAI,UAAU,IAAI,WAAW,EAAE;AAChD,YAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;QACzB;QAEA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC1C,YAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;QACzB;AAEA,QAAA,IAAI,MAAM,KAAK,GAAG,EAAE;AAClB,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YACzF,IAAI,UAAU,EAAE;gBACd,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI;gBACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACxB,oBAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE;gBACjE;YACF;QACF;AAEA,QAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,eAAe,CAAC;AAEzD,QAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;AAC/B,IAAA,CAAC;AAED,IAAA,MAAM,KAAK,GAAG,CAAC,OAAuC,KAAI;AACxD,QAAA,MAAM,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,IAAI,KAAK;QACnE,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,IAAI,KAAK,CAAC;AAC9D,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,IAAI;QAExD,IAAI,eAAe,GAAG,CAAC;AAEvB,QAAA,MAAM,cAAc,GAAG,CAAC,mBAAmB,GAAG,IAAI,KAAI;AACpD,YAAA,MAAM,mBAAmB,GAAG,OAAO,CAAC,YAAY,EAAE;AAClD,YAAA,IAAI,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;gBAAE;AAEjD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,YAAA,MAAM,oBAAoB,GAAG,GAAG,GAAG,eAAe;;YAGlD,IAAI,oBAAoB,GAAG,kBAAkB;gBAAE;YAE/C,eAAe,GAAG,GAAG;YACrB,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAA4B;;YAEtF,OAAO,CAAC,OAAO,CAAC,GAAG,CAAE,CAAC,OAAO,CAAC,WAAW,EAAE;gBACzC,WAAW,EAAE,mBAAmB,GAAG,eAAe,GAAG,SAAS;AAC/D,aAAA,CAAC;AACJ,QAAA,CAAC;AAED,QAAA,MAAM,sBAAsB,GAAG,CAAC,eAAuB,KAAY;AACjE,YAAA,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ,EAAE;gBAC9C,OAAO,MAAM,CAAC,eAAe;YAC/B;YAEA,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,EAAE,UAAU,IAAI,IAAI;YAC7D,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,WAAW,IAAI,KAAK,CAAC;YACjE,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,WAAW,IAAI,MAAM,CAAC;YAElE,MAAM,gBAAgB,GAAG,eAAe,IAAI,CAAC,GAAG,UAAU,CAAC;AAE3D,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;AACvE,QAAA,CAAC;;AAGD,QAAA,YAAY,CAAC,OAAO,CAAC,WAAW;AAC7B,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,KAAK,KAAI;AAClB,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AAE3B,YAAA,IAAI;gBACF,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC;AACvG,gBAAA,MAAM,SAAS,GAAI,eAA2C,GAAG,qBAAqB,CAAC;AAEvF,gBAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;oBACjC,IAAI,SAAS,EAAE,EAAE;AACf,wBAAA,OAAO,CAAC,IAAI,CAAC,gCAAgC,qBAAqB,CAAA,0BAAA,CAA4B,CAAC;oBACjG;AACA,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;gBACjB;AAEA,gBAAA,MAAM,WAAW,GAAG,SAAS,GAAG,IAAI;AACpC,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,gBAAA,MAAM,eAAe,GAAG,WAAW,GAAG,GAAG;AAEzC,gBAAA,IAAI,eAAe,IAAI,CAAC,EAAE;oBACxB,IAAI,gBAAgB,EAAE;wBACpB,IAAI,SAAS,EAAE,EAAE;AACf,4BAAA,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC;wBACxE;AACA,wBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;oBACjB;AACA,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;gBACjB;AAEA,gBAAA,MAAM,eAAe,GAAG,sBAAsB,CAAC,eAAe,CAAC;AAC/D,gBAAA,MAAM,gBAAgB,GAAG,eAAe,GAAG,eAAe;AAE1D,gBAAA,IAAI,gBAAgB,IAAI,CAAC,EAAE;AACzB,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;gBACjB;AAEA,gBAAA,OAAO,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;YACtD;AAAE,YAAA,MAAM;AACN,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;YACjB;AACF,QAAA,CAAC,CAAC,EACF,kBAAkB,EAAE;AAErB,aAAA,SAAS,CAAC,CAAC,aAAa,KAAI;YAC3B,IAAI,aAAa,EAAE;gBACjB,cAAc,CAAC,IAAI,CAAC;YACtB;AACF,QAAA,CAAC,CAAC;;AAGJ,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,IAAI;QACpD,IAAI,cAAc,EAAE;YAClB,OAAO,CAAC,UAAU,CAAC;AAChB,iBAAA,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAAI;;AAEf,gBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe;AAAE,oBAAA,OAAO,KAAK;gBAChD,IAAI,CAAC,KAAK,CAAC,QAAQ;AAAE,oBAAA,OAAO,KAAK;AACjC,gBAAA,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG;AAAE,oBAAA,OAAO,KAAK;AAE7C,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC,CAAC,EACF,kBAAkB,EAAE;iBAErB,SAAS,CAAC,MAAK;gBACd,cAAc,CAAC,IAAI,CAAC;AACtB,YAAA,CAAC,CAAC;QACN;AACF,IAAA,CAAC;IAED,OAAO;AACL,QAAA,KAAK,EAAE,mBAAmB;QAC1B,GAAG;AACH,QAAA,MAAM,EAAE;AACN,YAAA,GAAG,MAAM;YACT,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,EAAE,CAAC;AAChH,SAAA;QACD,KAAK;KACN;AACH;;MCzPa,oBAAoB,GAAG,CAClC,MAAA,GAAiC,EAAE,KACjC;IACF,OAAO,CAAC,OAA6D,KAAI;QACvE,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;AACpE,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC;AAChG,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AACrC,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI;oFAAC;AAC5B,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;6FAAC;QAE3C,MAAM,UAAU,GAAG,MAAK;YACtB,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAClC,QAAA,CAAC;AAED,QAAA,MAAM,mBAAmB,GAAG,KAAK,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAClG,YAAY,CAAC,IAAI,CAAC,CACnB;AAED,QAAA,MAAM,wBAAwB,GAAG,MAAM,CAAC;cACpC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,mBAAmB,IAAI,IAAI,KAAK,CAAC;cACzE,KAAK,EAAE;QAEX,MAAM,SAAS,GAAG,KAAK,CAAC,mBAAmB,EAAE,wBAAwB,CAAC;AAEtE,QAAA,MAAM,oBAAoB,GAAG,SAAS,CAAC,SAAS,CAAC,MAAK;YACpD,IAAI,OAAO,EAAE,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE;AACtC,gBAAA,UAAU,EAAE;YACd;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CACtC,SAAS,CAAC,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC,EACzC,MAAM,CAAC,MAAM,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CACnD;AAED,QAAA,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,SAAS,CAAC,MAAK;YAC1D,OAAO,CAAC,MAAM,EAAE;AAClB,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE;AACnC,YAAA,IAAI,KAAK,IAAI,OAAO,EAAE,EAAE;AACtB,gBAAA,UAAU,EAAE;YACd;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,MAAK;AAClB,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACjB,YAAA,UAAU,EAAE;AACd,QAAA,CAAC;QAED,MAAM,OAAO,GAAG,MAAK;AACnB,YAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,QAAA,CAAC;QAED,MAAM,wBAAwB,GAAG,MAAK;YACpC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;AACxC,gBAAA,OAAO,IAAI;YACb;YAEA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,EAAE;AAC/C,YAAA,MAAM,SAAS,GAAG,iBAAiB,GAAG,OAAO;YAE7C,OAAO,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC;AACtC,QAAA,CAAC;AAED,QAAA,UAAU,EAAE;AAEZ,QAAA,UAAU,CAAC,SAAS,CAAC,MAAK;YACxB,oBAAoB,CAAC,WAAW,EAAE;YAClC,kBAAkB,CAAC,WAAW,EAAE;AAClC,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,QAAQ,GAA4B;YACxC,MAAM;YACN,OAAO;YACP,UAAU;AACV,YAAA,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;YAC7B,wBAAwB;SACzB;QAED,OAAO;YACL,IAAI,EAAE,qBAAqB,CAAC,iBAAiB;YAC7C,QAAQ;SACT;AACH,IAAA,CAAC;AACH;;ACzCO,MAAM,kBAAkB,GAAG,CAIhC,MAA6C,KAC3C;IACF,OAAO,CAAC,OAA6D,KAAI;QACvE,MAAM,QAAQ,GAAG,2BAA2B,CAAC,MAAM,EAAE,OAAO,CAAC;QAC7D,OAAO;YACL,IAAI,EAAE,qBAAqB,CAAC,eAAe;YAC3C,QAAQ;SACT;AACH,IAAA,CAAC;AACH;MAEa,2BAA2B,GAAG,CAIzC,MAA6C,EAC7C,OAA6D,KACpC;AACzB,IAAA,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO;IAChC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,QAAQ;AAClD,IAAA,MAAM,oBAAoB,GAAG,CAAA,EAAG,UAAU,aAAa;AACvD,IAAA,MAAM,KAAK,GAAG,WAAW,EAAE;IAE3B,MAAM,oBAAoB,GAAG,MAAc;AACzC,QAAA,MAAM,gBAAgB,GAAG,OAAO,YAAY,KAAK,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;AAChH,QAAA,IAAI,gBAAgB,KAAK,IAAI,EAAE;YAC7B,OAAO,gBAAgB,KAAK,MAAM;QACpC;AAEA,QAAA,MAAM,cAAc,GAAG,SAAS,CAAC,UAAU,CAAC;QAC5C,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,MAAM,CAAC,iBAAiB,IAAI,KAAK;AAC1C,IAAA,CAAC;AAED,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,EAAE;yFAAC;IAEvD,MAAM,CAAC,MAAK;AACV,QAAA,MAAM,KAAK,GAAG,YAAY,EAAE;AAC5B,QAAA,MAAM,UAAU,GAAG,gBAAgB,EAAE;AACrC,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,SAAS,EAAE,IAAI,WAAW;QAClE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,GAAG;QACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,IAAI,KAAK;QAEjD,IAAI,KAAK,EAAE;AACT,YAAA,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC;YAC1C,IAAI,UAAU,EAAE;gBACd,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,IAAI,EAAE;AACxD,gBAAA,SAAS,CAAC,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;YAC9E;iBAAO;AACL,gBAAA,SAAS,CAAC,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;YACrE;QACF;aAAO;AACL,YAAAC,YAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC;QAC5C;AACF,IAAA,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAK;AACpB,QAAA,MAAM,YAAY,GAAG,KAAK,EAAE;QAC5B,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa,IAAI,EAAE;AAC1D,QAAA,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAE3E,IAAI,aAAa,EAAE;YACjB;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC;QACzC,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,cAAc,GAAG,YAAY,CAAC,WAAW,CAAC;YAChD,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC;YACvD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;QAC9F;AACF,IAAA,CAAC;AAED,IAAA,MAAM,aAAa,GAAG,CAAC,OAAgB,KAAI;AACzC,QAAA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;YACvC,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7D;AACA,QAAA,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/B,IAAA,CAAC;AAED,IAAA,QAAQ,EAAE;IAEV,OAAO;AACL,QAAA,UAAU,EAAE,gBAAgB,CAAC,UAAU,EAAE;QACzC,aAAa;QACb,QAAQ;KACT;AACH;;MCxJa,0BAA0B,GAAG,CACxC,MAAA,GAAgD,EAAE,KAChD;IACF,OAAO,CAAC,OAA6D,KAAI;QACvE,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;AACjE,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,IAAI;AAClD,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAc,MAAK;AAC3C,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAqD;AACvF,YAAA,IAAI,CAAC,OAAO;AAAE,gBAAA,OAAO,IAAI;AAEzB,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG;YAEvB,IAAI,OAAO,GAAG,KAAK,QAAQ;AAAE,gBAAA,OAAO,IAAI;AAExC,YAAA,OAAO,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;QAC7B,CAAC;sFAAC;QAEF,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAChG,GAAG,CAAC,MAAK;AACP,YAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,YAAA,IAAI,CAAC,MAAM;AAAE,gBAAA,OAAO,IAAI;AAExB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;YACtB,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,GAAG;YAE5C,OAAO,aAAa,GAAG,CAAC,GAAG,aAAa,GAAG,IAAI;QACjD,CAAC,CAAC,CACH;QAED,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CACrC,GAAG,CAAC,CAAC,aAAa,KAAI;YACpB,IAAI,aAAa,KAAK,IAAI;AAAE,gBAAA,OAAO,KAAK;AACxC,YAAA,OAAO,aAAa,IAAI,gBAAgB,IAAI,aAAa,GAAG,CAAC;QAC/D,CAAC,CAAC,CACH;AAED,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AAC9D,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AAEzE,QAAA,MAAM,QAAQ,GAAkC;YAC9C,SAAS;YACT,SAAS;YACT,cAAc;SACf;QAED,OAAO;YACL,IAAI,EAAE,qBAAqB,CAAC,wBAAwB;YACpD,QAAQ;SACT;AACH,IAAA,CAAC;AACH;;AC9BO,MAAM,mBAAmB,GAAG,CAIjC,MAA8C,KAC5C;IACF,OAAO,CAAC,OAA6D,KAAI;AAGvE,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,IAAI;AAEpD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI;oFAAC;QAC5B,IAAI,mBAAmB,GAAkB,IAAI;QAC7C,IAAI,oBAAoB,GAAkB,IAAI;QAC9C,IAAI,yBAAyB,GAA8B,IAAI;AAE/D,QAAA,MAAM,gBAAgB,GAAG,CAAC,WAA0B,EAAE,YAA2B,KAAI;YACnF,IAAI,yBAAyB,EAAE,OAAO,EAAE;AAAE,gBAAA,OAAO,yBAAyB;AAE1E,YAAA,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,EAAE;AACjC,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AAE5D,YAAA,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAEpE,YAAA,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE;AACzE,gBAAA,WAAW,EAAE,kBAAkB;AAChC,aAAA,CAAC;AAEF,YAAA,OAAO,yBAAyB;AAClC,QAAA,CAAC;QAED,MAAM,MAAM,GAAG,MAAK;AAClB,YAAA,OAAO,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;AACxE,QAAA,CAAC;QAED,MAAM,MAAM,GAAG,MAAK;AAClB,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,QAAA,CAAC;QAED,MAAM,OAAO,GAAG,MAAK;AACnB,YAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,QAAA,CAAC;QAED,IAAI,cAAc,EAAE;YAClB,MAAM,CACJ,MAAK;AACH,gBAAA,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE;AAC1C,gBAAA,MAAM,mBAAmB,GAAG,OAAO,CAAC,YAAY,EAAE;gBAElD,IAAI,mBAAmB,IAAI,CAAC,YAAY,IAAI,OAAO,EAAE,EAAE;oBACrD,SAAS,CAAC,MAAM,gBAAgB,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAAC;gBAC9E;gBAEA,mBAAmB,GAAG,YAAY;gBAClC,oBAAoB,GAAG,mBAAmB;YAC5C,CAAC,EACD,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAC/B;QACH;AAEA,QAAA,MAAM,QAAQ,GAA+C;YAC3D,MAAM;YACN,MAAM;YACN,OAAO;AACP,YAAA,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;SAC9B;QAED,OAAO;YACL,IAAI,EAAE,qBAAqB,CAAC,gBAAgB;YAC5C,QAAQ;SACT;AACH,IAAA,CAAC;AACH;;AClBO,MAAM,YAAY,GAAG,CAA+C,MAAkC,KAAI;IAC/G,OAAO,CAAC,OAA6D,KAAI;QACvE,MAAM,QAAQ,GAAG,qBAAqB,CAAY,OAAO,EAAE,MAAM,CAAC;QAClE,OAAO;YACL,IAAI,EAAE,qBAAqB,CAAC,QAAQ;YACpC,QAAQ;SACT;AACH,IAAA,CAAC;AACH;MAEa,qBAAqB,GAAG,CACnC,OAA6D,EAC7D,MAAkC,KACJ;AAC9B,IAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0C,CAAC;AAEnE,IAAA,MAAM,EAAE,GAAG,CACT,KAAa,EACb,OAAsE,KACtD;QAChB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACxB,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC;QAChC;QACA,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QACzC,IAAI,aAAa,EAAE;AACjB,YAAA,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;QAC5B;QAEA,OAAO,MAAM,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;AAClC,IAAA,CAAC;AAED,IAAA,MAAM,GAAG,GAAG,CACV,KAAa,EACb,OAAsE,KAC9D;QACR,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QACzC,IAAI,aAAa,EAAE;AACjB,YAAA,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7B,YAAA,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC,EAAE;AAC5B,gBAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;YACxB;QACF;AACF,IAAA,CAAC;AAED,IAAA,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,IAAa,KAAU;QAC1D,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QACzC,IAAI,aAAa,EAAE;AACjB,YAAA,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAChC,gBAAA,IAAI;oBACF,OAAO,CAAC,IAAI,CAAC;gBACf;gBAAE,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,KAAK,CAAC,CAAA,qCAAA,EAAwC,KAAK,CAAA,EAAA,CAAI,EAAE,KAAK,CAAC;gBACzE;AACF,YAAA,CAAC,CAAC;QACJ;AACF,IAAA,CAAC;IAGD,MAAM,iBAAiB,GACrB,OAAO,CAAC,cAAc,IAAI,OAAO,gBAAgB,KAAK;AACpD,UAAE,IAAI,gBAAgB,CAAC,uBAAuB;UAC5C,IAAI;IAEV,IAAI,iBAAiB,EAAE;AACrB,QAAA,iBAAiB,CAAC,SAAS,GAAG,CAAC,YAA4C,KAAI;AAC7E,YAAA,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE;AACtB,gBAAA,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/D;AACF,QAAA,CAAC;AACD,QAAA,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,iBAAiB,CAAC,KAAK,EAAE,CAAC;IAC/D;AAEA,IAAA,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,IAAa,KAAU;QAClD,IAAI,iBAAiB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE;YAC5C,iBAAiB,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAA6B,CAAC;YACzE;QACF;AACA,QAAA,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC;AAC3B,IAAA,CAAC;AAED,IAAA,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,IAAa,KAAU;AACxD,QAAA,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC;AAC3B,IAAA,CAAC;AAED,IAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAwE;AAEtG,IAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,KAAI;AAC5D,QAAA,MAAM,KAAK,GAAG,UAAyE,CAAC;QAExF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE;AACjC,YAAA,IAAI,CAAC,QAAQ;gBAAE;AAEf,YAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,EAAE;AAC1C,YAAA,IAAI,WAAW;gBAAE;AAEjB,YAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE;AAClC,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE;AAC9B,YAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE;YAEpC,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;AAEzC,YAAA,IAAI,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,UAAU,KAAK,SAAS,EAAE;AACzE,gBAAA,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;gBAClE,IAAI,CAAC,GAAG,GAAG,CAAA,OAAA,CAAS,EAAE,EAAE,QAAQ,EAAE,CAAC;YACrC;YAEA,IAAI,KAAK,IAAI,CAAC,OAAO,IAAI,SAAS,EAAE,UAAU,KAAK,OAAO,EAAE;AAC1D,gBAAA,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;gBAChE,IAAI,CAAC,GAAG,GAAG,CAAA,OAAA,CAAS,EAAE,EAAE,KAAK,EAAE,CAAC;YAClC;YAEA,IAAI,OAAO,EAAE;AACX,gBAAA,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YAC9D;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;IAEF,IAAI,SAAS,GAAG,KAAK;IACrB,MAAM,CAAC,MAAK;AACV,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE;AACzC,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE;QAC3C,MAAM,SAAS,GAAG,CAAC,EAAE,WAAW,IAAI,YAAY,CAAC;AAEjD,QAAA,IAAI,SAAS,IAAI,CAAC,SAAS,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;QAC3B;QAEA,SAAS,GAAG,SAAS;AACvB,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAK;QACxC,IAAI,CAAC,qBAAqB,EAAE;AAC1B,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,QAAQ,EAAE,SAAS;AACpB,SAAA,CAAC;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,IAAI,MAAM,EAAE,EAAE,EAAE;AACd,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,KAAI;YACrD,IAAI,OAAO,EAAE;AACX,gBAAA,EAAE,CAAC,KAAqC,EAAE,OAAO,CAAC;YACpD;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,OAAO,CAAC,cAAc,EAAE;AAC1B,QAAA,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,cAAc;QAE/F,MAAM,CAAC,MAAK;YACV,UAAU,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAwC,CAAC;AACxG,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,UAAU,CAAC,2BAA2B,EAAE;gBACtC,KAAK,EAAE,mBAAmB,EAAE;AACgB,aAAA,CAAC;AACjD,QAAA,CAAC,CAAC;IACJ;IAEA,OAAO;QACL,EAAE;QACF,GAAG;KACJ;AACH;;AChRO,MAAM,2BAA2B,GAAG,CAAC,UAA0B,KAAI;IACxE,QAAQ,UAAU;QAChB,KAAK,cAAc,CAAC,UAAU;AAC5B,YAAA,OAAO,mBAAmB;QAC5B,KAAK,cAAc,CAAC,YAAY;AAC9B,YAAA,OAAO,mBAAmB;QAC5B,KAAK,cAAc,CAAC,eAAe;AACjC,YAAA,OAAO,sBAAsB;QAC/B,KAAK,cAAc,CAAC,SAAS;AAC3B,YAAA,OAAO,UAAU;QACnB,KAAK,cAAc,CAAC,QAAQ;AAC1B,YAAA,OAAO,gBAAgB;QACzB,KAAK,cAAc,CAAC,gBAAgB;AAClC,YAAA,OAAO,uBAAuB;QAChC,KAAK,cAAc,CAAC,aAAa;AAC/B,YAAA,OAAO,kBAAkB;QAC3B,KAAK,cAAc,CAAC,2BAA2B;AAC7C,YAAA,OAAO,sCAAsC;QAC/C,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,OAAO,gCAAgC;QACzC,KAAK,cAAc,CAAC,QAAQ;AAC1B,YAAA,OAAO,UAAU;QACnB,KAAK,cAAc,CAAC,IAAI;AACtB,YAAA,OAAO,KAAK;QACd,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,OAAO,oBAAoB;QAC7B,KAAK,cAAc,CAAC,kBAAkB;AACpC,YAAA,OAAO,6BAA6B;QACtC,KAAK,cAAc,CAAC,eAAe;AACjC,YAAA,OAAO,kBAAkB;QAC3B,KAAK,cAAc,CAAC,UAAU;AAC5B,YAAA,OAAO,aAAa;QACtB,KAAK,cAAc,CAAC,oBAAoB;AACtC,YAAA,OAAO,+BAA+B;QACxC,KAAK,cAAc,CAAC,mBAAmB;AACrC,YAAA,OAAO,iCAAiC;QAC1C,KAAK,cAAc,CAAC,iBAAiB;AACnC,YAAA,OAAO,0BAA0B;QACnC,KAAK,cAAc,CAAC,SAAS;AAC3B,YAAA,OAAO,uBAAuB;QAChC,KAAK,cAAc,CAAC,kBAAkB;AACpC,YAAA,OAAO,uBAAuB;QAChC,KAAK,cAAc,CAAC,mBAAmB;AACrC,YAAA,OAAO,yBAAyB;QAClC,KAAK,cAAc,CAAC,MAAM;AACxB,YAAA,OAAO,UAAU;QACnB,KAAK,cAAc,CAAC,gBAAgB;AAClC,YAAA,OAAO,8BAA8B;QACvC,KAAK,cAAc,CAAC,QAAQ;AAC1B,YAAA,OAAO,SAAS;QAClB,KAAK,cAAc,CAAC,eAAe;AACjC,YAAA,OAAO,sBAAsB;QAC/B,KAAK,cAAc,CAAC,oBAAoB;AACtC,YAAA,OAAO,2BAA2B;QACpC,KAAK,cAAc,CAAC,eAAe;AACjC,YAAA,OAAO,mBAAmB;QAC5B,KAAK,cAAc,CAAC,2BAA2B;AAC7C,YAAA,OAAO,gCAAgC;QACzC,KAAK,cAAc,CAAC,0BAA0B;AAC5C,YAAA,OAAO,yCAAyC;QAClD,KAAK,cAAc,CAAC,mBAAmB;AACrC,YAAA,OAAO,uBAAuB;QAChC,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,OAAO,qBAAqB;QAC9B,KAAK,cAAc,CAAC,UAAU;AAC5B,YAAA,OAAO,oBAAoB;QAC7B,KAAK,cAAc,CAAC,kBAAkB;AACpC,YAAA,OAAO,wBAAwB;QACjC,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,OAAO,4BAA4B;QACrC,KAAK,cAAc,CAAC,uBAAuB;AACzC,YAAA,OAAO,gCAAgC;QACzC,KAAK,cAAc,CAAC,qBAAqB;AACvC,YAAA,OAAO,0BAA0B;QACnC,KAAK,cAAc,CAAC,mBAAmB;AACrC,YAAA,OAAO,yBAAyB;QAClC,KAAK,cAAc,CAAC,YAAY;AAC9B,YAAA,OAAO,oBAAoB;QAC7B,KAAK,cAAc,CAAC,WAAW;AAC7B,YAAA,OAAO,iBAAiB;QAC1B,KAAK,cAAc,CAAC,6BAA6B;AAC/C,YAAA,OAAO,wCAAwC;AACjD,QAAA;AACE,YAAA,OAAO,2BAA2B;;AAExC;AAEO,MAAM,6BAA6B,GAAG,CAAC,UAA0B,KAAI;IAC1E,QAAQ,UAAU;QAChB,KAAK,cAAc,CAAC,UAAU;AAC5B,YAAA,OAAO,kGAAkG;QAC3G,KAAK,cAAc,CAAC,YAAY;AAC9B,YAAA,OAAO,iGAAiG;QAC1G,KAAK,cAAc,CAAC,eAAe;AACjC,YAAA,OAAO,6DAA6D;QACtE,KAAK,cAAc,CAAC,SAAS;AAC3B,YAAA,OAAO,yDAAyD;QAClE,KAAK,cAAc,CAAC,QAAQ;AAC1B,YAAA,OAAO,kDAAkD;QAC3D,KAAK,cAAc,CAAC,gBAAgB;AAClC,YAAA,OAAO,kEAAkE;QAC3E,KAAK,cAAc,CAAC,aAAa;AAC/B,YAAA,OAAO,+HAA+H;QACxI,KAAK,cAAc,CAAC,2BAA2B;AAC7C,YAAA,OAAO,6EAA6E;QACtF,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,OAAO,8CAA8C;QACvD,KAAK,cAAc,CAAC,QAAQ;AAC1B,YAAA,OAAO,2EAA2E;QACpF,KAAK,cAAc,CAAC,IAAI;AACtB,YAAA,OAAO,8FAA8F;QACvG,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,OAAO,iHAAiH;QAC1H,KAAK,cAAc,CAAC,kBAAkB;AACpC,YAAA,OAAO,wGAAwG;QACjH,KAAK,cAAc,CAAC,eAAe;AACjC,YAAA,OAAO,wFAAwF;QACjG,KAAK,cAAc,CAAC,UAAU;AAC5B,YAAA,OAAO,4EAA4E;QACrF,KAAK,cAAc,CAAC,oBAAoB;AACtC,YAAA,OAAO,mGAAmG;QAC5G,KAAK,cAAc,CAAC,mBAAmB;AACrC,YAAA,OAAO,kGAAkG;QAC3G,KAAK,cAAc,CAAC,iBAAiB;AACnC,YAAA,OAAO,uFAAuF;QAChG,KAAK,cAAc,CAAC,SAAS;AAC3B,YAAA,OAAO,wBAAwB;QACjC,KAAK,cAAc,CAAC,kBAAkB;AACpC,YAAA,OAAO,yGAAyG;QAClH,KAAK,cAAc,CAAC,mBAAmB;AACrC,YAAA,OAAO,oGAAoG;QAC7G,KAAK,cAAc,CAAC,MAAM;AACxB,YAAA,OAAO,wDAAwD;QACjE,KAAK,cAAc,CAAC,gBAAgB;AAClC,YAAA,OAAO,yFAAyF;QAClG,KAAK,cAAc,CAAC,QAAQ;AAC1B,YAAA,OAAO,6GAA6G;QACtH,KAAK,cAAc,CAAC,eAAe;AACjC,YAAA,OAAO,uHAAuH;QAChI,KAAK,cAAc,CAAC,oBAAoB;AACtC,YAAA,OAAO,kEAAkE;QAC3E,KAAK,cAAc,CAAC,eAAe;AACjC,YAAA,OAAO,sGAAsG;QAC/G,KAAK,cAAc,CAAC,2BAA2B;AAC7C,YAAA,OAAO,kGAAkG;QAC3G,KAAK,cAAc,CAAC,0BAA0B;AAC5C,YAAA,OAAO,yEAAyE;QAClF,KAAK,cAAc,CAAC,mBAAmB;AACrC,YAAA,OAAO,kEAAkE;QAC3E,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,OAAO,8FAA8F;QACvG,KAAK,cAAc,CAAC,UAAU;AAC5B,YAAA,OAAO,kEAAkE;QAC3E,KAAK,cAAc,CAAC,kBAAkB;AACpC,YAAA,OAAO,8GAA8G;QACvH,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,OAAO,6GAA6G;QACtH,KAAK,cAAc,CAAC,uBAAuB;AACzC,YAAA,OAAO,uFAAuF;QAChG,KAAK,cAAc,CAAC,qBAAqB;AACvC,YAAA,OAAO,mPAAmP;QAC5P,KAAK,cAAc,CAAC,mBAAmB;AACrC,YAAA,OAAO,kMAAkM;QAC3M,KAAK,cAAc,CAAC,YAAY;AAC9B,YAAA,OAAO,qFAAqF;QAC9F,KAAK,cAAc,CAAC,WAAW;AAC7B,YAAA,OAAO,8FAA8F;QACvG,KAAK,cAAc,CAAC,6BAA6B;AAC/C,YAAA,OAAO,uEAAuE;AAChF,QAAA;AACE,YAAA,OAAO,uGAAuG;;AAEpH;;MCxKa,+BAA+B,CAAA;AAH5C,IAAA,WAAA,GAAA;QAIE,IAAA,CAAA,SAAS,GAAG,2BAA2B;AACxC,IAAA;8GAFY,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,6BAAA,EAAA,CAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAH3C,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,6BAA6B;AACpC,iBAAA;;MAQY,iCAAiC,CAAA;AAH9C,IAAA,WAAA,GAAA;QAIE,IAAA,CAAA,SAAS,GAAG,6BAA6B;AAC1C,IAAA;8GAFY,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,+BAAA,EAAA,CAAA,CAAA;;2FAAjC,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAH7C,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,+BAA+B;AACtC,iBAAA;;;ACVM,MAAM,2BAA2B,GAAG,CAAC,UAA0B,KAAI;IACxE,QAAQ,UAAU;QAChB,KAAK,cAAc,CAAC,UAAU;AAC5B,YAAA,OAAO,aAAa;QACtB,KAAK,cAAc,CAAC,YAAY;AAC9B,YAAA,OAAO,cAAc;QACvB,KAAK,cAAc,CAAC,eAAe;AACjC,YAAA,OAAO,kBAAkB;QAC3B,KAAK,cAAc,CAAC,SAAS;AAC3B,YAAA,OAAO,WAAW;QACpB,KAAK,cAAc,CAAC,QAAQ;AAC1B,YAAA,OAAO,WAAW;QACpB,KAAK,cAAc,CAAC,gBAAgB;AAClC,YAAA,OAAO,oBAAoB;QAC7B,KAAK,cAAc,CAAC,aAAa;AAC/B,YAAA,OAAO,gBAAgB;QACzB,KAAK,cAAc,CAAC,2BAA2B;AAC7C,YAAA,OAAO,+BAA+B;QACxC,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,OAAO,iBAAiB;QAC1B,KAAK,cAAc,CAAC,QAAQ;AAC1B,YAAA,OAAO,UAAU;QACnB,KAAK,cAAc,CAAC,IAAI;AACtB,YAAA,OAAO,MAAM;QACf,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,OAAO,iBAAiB;QAC1B,KAAK,cAAc,CAAC,kBAAkB;AACpC,YAAA,OAAO,qBAAqB;QAC9B,KAAK,cAAc,CAAC,eAAe;AACjC,YAAA,OAAO,mBAAmB;QAC5B,KAAK,cAAc,CAAC,UAAU;AAC5B,YAAA,OAAO,cAAc;QACvB,KAAK,cAAc,CAAC,oBAAoB;AACtC,YAAA,OAAO,wBAAwB;QACjC,KAAK,cAAc,CAAC,mBAAmB;AACrC,YAAA,OAAO,uBAAuB;QAChC,KAAK,cAAc,CAAC,iBAAiB;AACnC,YAAA,OAAO,oBAAoB;QAC7B,KAAK,cAAc,CAAC,SAAS;AAC3B,YAAA,OAAO,eAAe;QACxB,KAAK,cAAc,CAAC,kBAAkB;AACpC,YAAA,OAAO,qBAAqB;QAC9B,KAAK,cAAc,CAAC,mBAAmB;AACrC,YAAA,OAAO,sBAAsB;QAC/B,KAAK,cAAc,CAAC,MAAM;AACxB,YAAA,OAAO,QAAQ;QACjB,KAAK,cAAc,CAAC,gBAAgB;AAClC,YAAA,OAAO,mBAAmB;QAC5B,KAAK,cAAc,CAAC,QAAQ;AAC1B,YAAA,OAAO,WAAW;QACpB,KAAK,cAAc,CAAC,eAAe;AACjC,YAAA,OAAO,kBAAkB;QAC3B,KAAK,cAAc,CAAC,oBAAoB;AACtC,YAAA,OAAO,uBAAuB;QAChC,KAAK,cAAc,CAAC,eAAe;AACjC,YAAA,OAAO,mBAAmB;QAC5B,KAAK,cAAc,CAAC,2BAA2B;AAC7C,YAAA,OAAO,iCAAiC;QAC1C,KAAK,cAAc,CAAC,0BAA0B;AAC5C,YAAA,OAAO,+BAA+B;QACxC,KAAK,cAAc,CAAC,mBAAmB;AACrC,YAAA,OAAO,uBAAuB;QAChC,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,OAAO,iBAAiB;QAC1B,KAAK,cAAc,CAAC,UAAU;AAC5B,YAAA,OAAO,aAAa;QACtB,KAAK,cAAc,CAAC,kBAAkB;AACpC,YAAA,OAAO,qBAAqB;QAC9B,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,OAAO,iBAAiB;QAC1B,KAAK,cAAc,CAAC,uBAAuB;AACzC,YAAA,OAAO,4BAA4B;QACrC,KAAK,cAAc,CAAC,qBAAqB;AACvC,YAAA,OAAO,yBAAyB;QAClC,KAAK,cAAc,CAAC,mBAAmB;AACrC,YAAA,OAAO,sBAAsB;QAC/B,KAAK,cAAc,CAAC,YAAY;AAC9B,YAAA,OAAO,eAAe;QACxB,KAAK,cAAc,CAAC,WAAW;AAC7B,YAAA,OAAO,cAAc;QACvB,KAAK,cAAc,CAAC,6BAA6B;AAC/C,YAAA,OAAO,iCAAiC;AAC1C,QAAA;AACE,YAAA,OAAO,sBAAsB;;AAEnC;AAEO,MAAM,6BAA6B,GAAG,CAAC,UAA0B,KAAI;IAC1E,QAAQ,UAAU;QAChB,KAAK,cAAc,CAAC,UAAU;AAC5B,YAAA,OAAO,mEAAmE;QAC5E,KAAK,cAAc,CAAC,YAAY;AAC9B,YAAA,OAAO,2EAA2E;QACpF,KAAK,cAAc,CAAC,eAAe;AACjC,YAAA,OAAO,8CAA8C;QACvD,KAAK,cAAc,CAAC,SAAS;AAC3B,YAAA,OAAO,oDAAoD;QAC7D,KAAK,cAAc,CAAC,QAAQ;AAC1B,YAAA,OAAO,uCAAuC;QAChD,KAAK,cAAc,CAAC,gBAAgB;AAClC,YAAA,OAAO,wDAAwD;QACjE,KAAK,cAAc,CAAC,aAAa;AAC/B,YAAA,OAAO,wGAAwG;QACjH,KAAK,cAAc,CAAC,2BAA2B;AAC7C,YAAA,OAAO,2DAA2D;QACpE,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,OAAO,+CAA+C;QACxD,KAAK,cAAc,CAAC,QAAQ;AAC1B,YAAA,OAAO,+DAA+D;QACxE,KAAK,cAAc,CAAC,IAAI;AACtB,YAAA,OAAO,gFAAgF;QACzF,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,OAAO,qGAAqG;QAC9G,KAAK,cAAc,CAAC,kBAAkB;AACpC,YAAA,OAAO,0FAA0F;QACnG,KAAK,cAAc,CAAC,eAAe;AACjC,YAAA,OAAO,sEAAsE;QAC/E,KAAK,cAAc,CAAC,UAAU;AAC5B,YAAA,OAAO,0DAA0D;QACnE,KAAK,cAAc,CAAC,oBAAoB;AACtC,YAAA,OAAO,oFAAoF;QAC7F,KAAK,cAAc,CAAC,mBAAmB;AACrC,YAAA,OAAO,4FAA4F;QACrG,KAAK,cAAc,CAAC,iBAAiB;AACnC,YAAA,OAAO,6EAA6E;QACtF,KAAK,cAAc,CAAC,SAAS;AAC3B,YAAA,OAAO,gBAAgB;QACzB,KAAK,cAAc,CAAC,kBAAkB;AACpC,YAAA,OAAO,8EAA8E;QACvF,KAAK,cAAc,CAAC,mBAAmB;AACrC,YAAA,OAAO,mFAAmF;QAC5F,KAAK,cAAc,CAAC,MAAM;AACxB,YAAA,OAAO,gDAAgD;QACzD,KAAK,cAAc,CAAC,gBAAgB;AAClC,YAAA,OAAO,0DAA0D;QACnE,KAAK,cAAc,CAAC,QAAQ;AAC1B,YAAA,OAAO,6FAA6F;QACtG,KAAK,cAAc,CAAC,eAAe;AACjC,YAAA,OAAO,sGAAsG;QAC/G,KAAK,cAAc,CAAC,oBAAoB;AACtC,YAAA,OAAO,2DAA2D;QACpE,KAAK,cAAc,CAAC,eAAe;AACjC,YAAA,OAAO,oFAAoF;QAC7F,KAAK,cAAc,CAAC,2BAA2B;AAC7C,YAAA,OAAO,yFAAyF;QAClG,KAAK,cAAc,CAAC,0BAA0B;AAC5C,YAAA,OAAO,oDAAoD;QAC7D,KAAK,cAAc,CAAC,mBAAmB;AACrC,YAAA,OAAO,0DAA0D;QACnE,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,OAAO,gFAAgF;QACzF,KAAK,cAAc,CAAC,UAAU;AAC5B,YAAA,OAAO,0DAA0D;QACnE,KAAK,cAAc,CAAC,kBAAkB;AACpC,YAAA,OAAO,gHAAgH;QACzH,KAAK,cAAc,CAAC,cAAc;AAChC,YAAA,OAAO,2NAA2N;QACpO,KAAK,cAAc,CAAC,uBAAuB;AACzC,YAAA,OAAO,4EAA4E;QACrF,KAAK,cAAc,CAAC,qBAAqB;AACvC,YAAA,OAAO,oNAAoN;QAC7N,KAAK,cAAc,CAAC,mBAAmB;AACrC,YAAA,OAAO,yJAAyJ;QAClK,KAAK,cAAc,CAAC,YAAY;AAC9B,YAAA,OAAO,oEAAoE;QAC7E,KAAK,cAAc,CAAC,WAAW;AAC7B,YAAA,OAAO,8EAA8E;QACvF,KAAK,cAAc,CAAC,6BAA6B;AAC/C,YAAA,OAAO,kDAAkD;AAC3D,QAAA;AACE,YAAA,OAAO,2EAA2E;;AAExF;;MCxKa,+BAA+B,CAAA;AAH5C,IAAA,WAAA,GAAA;QAIE,IAAA,CAAA,SAAS,GAAG,2BAA2B;AACxC,IAAA;8GAFY,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,6BAAA,EAAA,CAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAH3C,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,6BAA6B;AACpC,iBAAA;;MAQY,iCAAiC,CAAA;AAH9C,IAAA,WAAA,GAAA;QAIE,IAAA,CAAA,SAAS,GAAG,6BAA6B;AAC1C,IAAA;8GAFY,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,+BAAA,EAAA,CAAA,CAAA;;2FAAjC,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAH7C,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,+BAA+B;AACtC,iBAAA;;;ACZM,MAAM,iBAAiB,GAAG,CAAC,KAAc,KAAI;AAClD,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,sBAAsB,GAAG,CAAC,KAAc,KAAI;AACvD,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa;IACjE;AAAO,SAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACpC,QAAA,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAa;IAC/C;AAEA,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,iBAAiB,GAAG,CAAC,KAAc,KAAI;AAClD,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;AACA,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,sBAAsB,GAAG,CAAC,KAAc,KAAI;AACvD,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAa;IACjF;AAAO,SAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACpC,OAAO,CAAC,KAAK,CAAa;IAC5B;AAEA,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,kBAAkB,GAAG,CAAC,KAAc,KAAI;AACnD,IAAA,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;AAC9B,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG;IAC1C;AACA,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,uBAAuB,GAAG,CAAC,KAAc,KAAI;AACxD,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAc;IACnF;SAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;AAClE,QAAA,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAc;IACjD;AAEA,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,eAAe,GAAG,CAAC,KAAc,KAAI;AAChD,IAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AACzB,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;QAE5B,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;AACzB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,oBAAoB,GAAG,CAAC,KAAc,KAAI;AACrD,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAW;IAC7E;SAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,IAAI,EAAE;AAC7D,QAAA,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAW;IAC3C;AAEA,IAAA,OAAO,IAAI;AACb;AASO,MAAM,eAAe,GAAG,CAAC,KAAc,KAAiB;AAC7D,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;QAE5C,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,IAAI;QACb;QAEA,OAAO;YACL,MAAM;AACN,YAAA,SAAS,EAAE,SAA2B;SACvC;IACH;AAEA,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,yBAAyB,GAAG,CAAC,KAAc,KAAI;AAC1D,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,IAAI,WAAW,IAAI,KAAK,EAAE;QACnF,MAAM,SAAS,GAAG,KAGjB;AAED,QAAA,OAAO,SAAS,CAAC,SAAS,GAAG,GAAG,SAAS,CAAC,MAAM,CAAA,CAAA,EAAI,SAAS,CAAC,SAAS,CAAA,CAAE,GAAG,IAAI;IAClF;AAEA,IAAA,OAAO,IAAI;AACb;;ACtFA,MAAM,aAAa,GAAG,UAAU;AAChC,MAAM,aAAa,GAAG,UAAU;AAChC,MAAM,kBAAkB,GAAG,WAAW;MAEzB,UAAU,CAAA;AACrB,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO;IAC1B;AAEA,IAAA,WAAA,CAAmB,IAA0B,EAAA;QAA1B,IAAA,CAAA,IAAI,GAAJ,IAAI;IAAyB;AACjD;MAEY,gBAAgB,CAAA;AAC3B,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO;IAC1B;AAIA,IAAA,WAAA,CAAmB,KAAgD,EAAA;QAAhD,IAAA,CAAA,KAAK,GAAL,KAAK;QACtB,IAAI,CAAC,IAAI,GAAG;YACV,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,IAAI,WAAW,CAAgB,IAAI,CAAC;AAC/D,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,sBAAsB,EAAE,IAAI;AAC5B,YAAA,IAAI,KAAK,IAAI,EAAE,CAAC;SACjB;IACH;AACD;MAEY,cAAc,CAAA;AACzB,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO;IAC1B;AAIA,IAAA,WAAA,CAAmB,KAA8C,EAAA;QAA9C,IAAA,CAAA,KAAK,GAAL,KAAK;QACtB,IAAI,CAAC,IAAI,GAAG;YACV,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,IAAI,WAAW,CAAc,IAAI,CAAC;AAC7D,YAAA,4BAA4B,EAAE,eAAe;AAC7C,YAAA,4BAA4B,EAAE,yBAAyB;AACvD,YAAA,IAAI,KAAK,IAAI,EAAE,CAAC;SACjB;IACH;AACD;MAEY,qBAAqB,CAAA;AAChC,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO;IAC1B;AAIA,IAAA,WAAA,CAAmB,KAA2C,EAAA;QAA3C,IAAA,CAAA,KAAK,GAAL,KAAK;QACtB,IAAI,CAAC,IAAI,GAAG;YACV,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,IAAI,WAAW,CAAW,IAAI,CAAC;AAC1D,YAAA,4BAA4B,EAAE,sBAAoD;AAClF,YAAA,IAAI,KAAK,IAAI,EAAE,CAAC;SACjB;IACH;AACD;MAEY,sBAAsB,CAAA;AACjC,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO;IAC1B;AAIA,IAAA,WAAA,CAAmB,KAAmD,EAAA;QAAnD,IAAA,CAAA,KAAK,GAAL,KAAK;QACtB,IAAI,CAAC,IAAI,GAAG;YACV,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,IAAI,WAAW,CAAmB,IAAI,CAAC;AAClE,YAAA,4BAA4B,EAAE,uBAAuB;AACrD,YAAA,IAAI,KAAK,IAAI,EAAE,CAAC;SACjB;IACH;AACD;MAEY,qBAAqB,CAAA;AAChC,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO;IAC1B;AAIA,IAAA,WAAA,CAAmB,KAAkD,EAAA;QAAlD,IAAA,CAAA,KAAK,GAAL,KAAK;QACtB,IAAI,CAAC,IAAI,GAAG;YACV,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,IAAI,WAAW,CAAkB,IAAI,CAAC;AACjE,YAAA,4BAA4B,EAAE,sBAAsB;AACpD,YAAA,IAAI,KAAK,IAAI,EAAE,CAAC;SACjB;IACH;AACD;MAEY,cAAc,CAAA;AACzB,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO;IAC1B;AAIA,IAAA,WAAA,CAAmB,KAA8C,EAAA;QAA9C,IAAA,CAAA,KAAK,GAAL,KAAK;QACtB,IAAI,CAAC,IAAI,GAAG;YACV,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,IAAI,WAAW,CAAc,IAAI,CAAC;AAC7D,YAAA,4BAA4B,EAAE,eAAe;AAC7C,YAAA,IAAI,KAAK,IAAI,EAAE,CAAC;SACjB;IACH;AACD;MAEY,mBAAmB,CAAA;AAC9B,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO;IAC1B;AAIA,IAAA,WAAA,CAAmB,KAAgD,EAAA;QAAhD,IAAA,CAAA,KAAK,GAAL,KAAK;QACtB,IAAI,CAAC,IAAI,GAAG;YACV,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,IAAI,WAAW,CAAgB,IAAI,CAAC;AAC/D,YAAA,4BAA4B,EAAE,oBAAoB;AAClD,YAAA,IAAI,KAAK,IAAI,EAAE,CAAC;SACjB;IACH;AACD;AAED,MAAMC,6BAA2B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC;AAYvH;MACa,SAAS,CAAA;AA8BpB,IAAA,IAAY,UAAU,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAuB;IACrD;AAEA,IAAA,IAAY,KAAK,GAAA;QACf,OAAO,IAAI,CAAC,IAAiC;IAC/C;AA4CA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ;IAC3B;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY;IAC1C;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAI;YAC/D,GAAG,CAAC,GAA8B,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAEhE,YAAA,OAAO,GAAG;QACZ,CAAC,EAAE,EAAuB,CAAC;IAC7B;;IAGA,WAAA,CACU,OAAU,EACV,QAA2B,EAAA;QAD3B,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAlGD,IAAA,CAAA,SAAS,GAAG,aAAa,EAAE;AAC3B,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,OAAO,EAAW;AAC3C,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AACxB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC;AACxC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAC7C,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;AACtB,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAW;QAEnD,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,eAAe,GAAG,KAAK;AAEvB,QAAA,IAAA,CAAA,mBAAmB,GAAG,YAAY,CAAC,uBAAuB,EAAE,CAAC;QAC7D,IAAA,CAAA,YAAY,GAAG,iBAAiB,EAAE;AAE1C;;;;;;;;;AASG;AACM,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE;AAErB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAA2B,IAAI,CAAC;QACrE,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAoB,IAAI,CAAC,UAAU,CAAC;QAU5E,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAyB;AACvE,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAuB;AAC3D,SAAA,CAAC;AAEO,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;AACxC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,YAAY,CAAC,CAAC;AAC5E,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,aAAa,CAAC,CAAC;AAE/E,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACjC,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3C,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;AAEtD;;;;;;;;;;;;;AAaG;QACM,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAC9C,GAAG,CACD,CAAC,EAAE,YAAY,EAAE,KACf,MAAM,CAAC,OAAO,CAAC,YAAY;aACxB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACpB,YAAA,IAAIA,6BAA2B,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE;AAC1F,gBAAA,OAAO,IAAI;YACb;YAEA,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC;AACzC,QAAA,CAAC;AACA,aAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,CACvC,CACF;QAuBC,wBAAwB,CAAC,SAAS,CAAC;AAEnC,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IACrD;AAEA,IAAA,OAAO,CAAC,OAAiC,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,SAAS,EAAE,EAAE;AACf,gBAAA,OAAO,CAAC,IAAI,CAAC,uEAAuE,CAAC;YACvF;AACA,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AAExB,QAAA,IAAI,OAAO,EAAE,gBAAgB,KAAK,KAAK,EAAE;AACvC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,8BAA8B,CAAC;AACrD,gBAAA,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE;AACjC,aAAA,CAAC;YAEF,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC9B;QACF;AAEA,QAAA,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,iBAAiB;aACpG,IAAI,CACH,YAAY,CAAC,CAAC,CAAC,EACf,GAAG,CAAC,MAAK;YACP,IAAI,CAAC,iBAAiB,EAAE;AAC1B,QAAA,CAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EACzB,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAEnC,aAAA,SAAS,EAAE;QAEd,IAAI,4BAA4B,GAAa,EAAE;QAC/C,IAAI,0BAA0B,GAAa,EAAE;AAE7C,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,YAAY,KAAI;YACnB,OAAO;gBACL,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAChD,gBAAA,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC;aAClC;QACH,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,KAAI;AACtC,YAAA,IAAI,OAAO,EAAE,kBAAkB,KAAK,KAAK,EAAE;gBACzC,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC;YAChE;AAEA,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC;AAC1B,kBAAE;kBACA,IAAI,CAAC,sBAAsB,CAAC,aAAa,IAAI,IAAI,EAAE,YAAY,CAAC;AAEpE,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAE5B,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CACpD,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CACzD;AAED,YAAA,IAAI,4BAA4B,CAAC,MAAM,EAAE;AACvC,gBAAA,aAAa,CAAC,IAAI,CAAC,GAAG,4BAA4B,CAAC;gBACnD,4BAA4B,GAAG,EAAE;YACnC;YAEA,IAAI,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjC,4BAA4B,GAAG,aAAa;YAC9C;YAEA,0BAA0B,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;QAC1D,CAAC,CAAC,EACF,SAAS,CAAC,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,KAAI;YAC5C,IAAI,4BAA4B,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;YAE3G,MAAM,cAAc,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;gBAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAE/B,gBAAA,IAAI,CAAC,KAAK;AAAE,oBAAA,OAAO,IAAI;AAEvB,gBAAA,IAAI,KAAK,CAAC,IAAI,CAAC,sBAAsB,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;AACpE,oBAAA,OAAO,IAAI;gBACb;AAEA,gBAAA,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI;AACpC,YAAA,CAAC,CAAC;YAEF,0BAA0B,GAAG,EAAE;AAE/B,YAAA,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;gBACpE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;YACpE;YAEA,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAkB,CAAC,KAAK,IAAI,CAAC,CAAC;YAE/F,OAAO,KAAK,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QACvF,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,KAAI;YACtC,IAAI,4BAA4B,CAAC,MAAM;gBAAE;AAEzC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAClB,aAAa,EAAE,aAAa,IAAI,IAAI;AACpC,gBAAA,YAAY,EAAE,YAAY;AAC3B,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EACzB,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAEnC,aAAA,SAAS,EAAE;AAEd,QAAA,IAAI,OAAO,EAAE,gBAAgB,KAAK,KAAK,EAAE;AACvC,YAAA,IAAI,CAAC;iBACF,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EACzB,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAClC,GAAG,CAAC,CAAC,OAAO,KAAI;AACd,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,8BAA8B,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;gBAErF,IAAI,eAAe,EAAE;AACnB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;gBACnC;AACF,YAAA,CAAC,CAAC;AAEH,iBAAA,SAAS,EAAE;QAChB;AAEA,QAAA,OAAO,IAAI;IACb;IAEQ,sBAAsB,CAAC,aAAuC,EAAE,YAA+B,EAAA;QACrG,IAAI,cAAc,GAAG,KAAK;AAE1B,QAAA,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AAExC,YAAA,IAAI,CAAC,KAAK;gBAAE;AAEZ,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS;AAEnC,YAAA,IAAI,CAAC,MAAM;gBAAE;AAEb,YAAA,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC;AAEpE,YAAA,KAAK,MAAM,iBAAiB,IAAI,kBAAkB,EAAE;gBAClD,IAAI,EAAE,iBAAiB,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE;oBACxC,IAAI,SAAS,EAAE,EAAE;wBACf,OAAO,CAAC,IAAI,CAAC,CAAA,WAAA,EAAc,iBAAiB,CAAA,gDAAA,CAAkD,EAAE,IAAI,CAAC;oBACvG;oBAEA;gBACF;AAEA,gBAAA,IACE,aAAa;oBACb,YAAY;AACZ,oBAAA,CAAC,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC,EACzE;oBACA,MAAM,yBAAyB,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;AACrE,oBAAA,MAAM,yBAAyB,GAAG,YAAY,CAAC,YAAY,CAAC;AAE5D,oBAAA,IAAI,KAAK,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,EAAE;wBAC/D;oBACF;AAEA,oBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;oBAEpE,cAAc,GAAG,IAAI;oBAErB;gBACF;YACF;QACF;AAEA,QAAA,OAAO,cAAc;IACvB;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,QAAQ,EAAE;IACjB;AAEA,IAAA,8BAA8B,CAAC,OAAiD,EAAA;QAC9E,IAAI,eAAe,GAAG,KAAK;AAE3B,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACvD,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC;AAEtE,YAAA,MAAM,iBAAiB,GAAG,KAAK,KAAK,SAAS;AAE7C,YAAA,IAAI,iBAAiB;gBAAE;AAEvB,YAAA,MAAM,eAAe,GAAG,KAAK,KAAK,mBAAmB;YAErD,IAAI,eAAe,EAAE;gBACnB,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC/C,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE;AAC7C,oBAAA,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;oBAC1D,eAAe,GAAG,IAAI;gBACxB;gBAEA;YACF;YACA,IAAI,iBAAiB,GAAG,KAAK;AAE7B,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,4BAA4B,EAAE;gBAC3C,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC;YACpE;AAAO,iBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACxC,MAAM,YAAY,GAAG,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,QAAQ;gBACnE,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxC,gBAAA,MAAM,uBAAuB,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,KAAK;AACnF,gBAAA,MAAM,mBAAmB,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;AAC9E,gBAAA,MAAM,gBAAgB,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAEzE,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,SAAS;gBAC9D,MAAM,WAAW,GAAG,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO;AAEzD,gBAAA,IAAI,KAAK,KAAK,kBAAkB,EAAE;oBAChC,iBAAiB,GAAG,IAAI;gBAC1B;AAAO,qBAAA,IACL,YAAY;AACZ,qBAAC,UAAU,IAAI,CAAC,uBAAuB,IAAI,CAAC,mBAAmB,IAAI,CAAC,gBAAgB,CAAC,EACrF;AACA,oBAAA,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,CAAC;gBAC9C;AAAO,qBAAA,IAAI,aAAa,IAAI,WAAW,EAAE;AACvC,oBAAA,iBAAiB,GAAG,kBAAkB,CAAC,KAAK,CAAC;gBAC/C;YACF;AAEA,YAAA,MAAM,qBAAqB,GAAG,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAE3E,YAAA,IAAI,qBAAqB;gBAAE;AAE3B,YAAA,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAC/D,eAAe,GAAG,IAAI;QACxB;AAEA,QAAA,OAAO,eAAe;IACxB;IAEA,QAAQ,CAAC,KAAwB,EAAE,OAA+B,EAAA;QAChE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;AAEpC,QAAA,IAAI,OAAO,EAAE,UAAU,EAAE;AACvB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC7B;IACF;IAEA,UAAU,CAAC,KAAiC,EAAE,OAA+B,EAAA;QAC3E,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;AAEtC,QAAA,IAAI,OAAO,EAAE,UAAU,EAAE;AACvB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC7B;IACF;IAEA,mBAAmB,CAAC,GAA4B,EAAE,OAA+B,EAAA;QAC/E,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAa,CAAC;AAEzD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;AAE9C,QAAA,IAAI,OAAO,EAAE,UAAU,EAAE;AACvB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC7B;IACF;IAEA,oBAAoB,CAAC,IAAiC,EAAE,OAA+B,EAAA;QACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAC1B,CAAC,GAAG,EAAE,GAAG,KAAI;YACX,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAa,CAAC;AAE/C,YAAA,OAAO,GAAG;QACZ,CAAC,EACD,EAAgC,CACjC;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AAEzB,QAAA,IAAI,OAAO,EAAE,UAAU,EAAE;AACvB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC7B;IACF;AAEA,IAAA,uBAAuB,CAAC,OAA8E,EAAA;QACpG,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAgC;AAErE,QAAA,IAAI,OAAO,EAAE,UAAU,EAAE;AACvB,YAAA,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE;gBACpC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAE/B,gBAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBACvB;YACF;QACF;AAEA,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC;IAC1C;AAEQ,IAAA,gBAAgB,CAAC,GAAW,EAAA;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AAEpC,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;AAC5D,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACpD;AAAO,aAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;AACnE,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACpD;AAAO,aAAA,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;YACpC,OAAO,GAAG,EAAE;QACd;AAAO,aAAA,IAAI,GAAG,KAAK,kBAAkB,EAAE;AACrC,YAAA,OAAO,IAAI;QACb;QAEA,OAAO,GAAG,IAAI,IAAI;IACpB;AAEQ,IAAA,yBAAyB,CAAC,GAAW,EAAA;AAC3C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB;AAAE,YAAA,OAAO,GAAG;QAEhD,MAAM,MAAM,GACV,OAAO,IAAI,CAAC,QAAQ,EAAE,gBAAgB,KAAK;AACzC,cAAE,IAAI,CAAC,QAAQ,CAAC;AAChB,cAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;AAEtC,QAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,EAAE;IAC3B;IAEQ,eAAe,CAAC,GAAW,EAAE,KAAc,EAAA;AACjD,QAAA,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK;cACvC,CAAA,EAAG,aAAa,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;cACxC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK;kBACrC,CAAA,EAAG,aAAa,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;kBACxC,KAAK,KAAK;AACV,sBAAE;sBACA,KAAK;QAEb,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,eAAe;IACrD;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,EAA+B,CAA8B;AAEzF,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACvD,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;QACtC;AAEA,QAAA,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU;AACpC,QAAA,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ;QAEhC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7C,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAEzC,QAAA,OAAO,KAAwD;IACjE;IAEQ,qBAAqB,GAAA;QAC3B,MAAM,aAAa,GAA4B,EAAE;AAEjD,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACvD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK;AAEnG,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,gBAAA,aAAa,CAAC,GAAG,CAAC,GAAG,GAAG,aAAa,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACjE;iBAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AACtD,gBAAA,aAAa,CAAC,GAAG,CAAC,GAAG,GAAG,aAAa,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACjE;AAAO,iBAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AACzB,gBAAA,aAAa,CAAC,GAAG,CAAC,GAAG,kBAAkB;YACzC;iBAAO;AACL,gBAAA,aAAa,CAAC,GAAG,CAAC,GAAG,KAAK;YAC5B;QACF;AAEA,QAAA,OAAO,aAAa;IACtB;IAEQ,sBAAsB,CAAC,MAAyB,EAAE,UAAoB,EAAA;AAC5E,QAAA,MAAM,WAAW,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AAE3E,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACjD,MAAM,aAAa,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;YACzD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YAE/B,IAAI,CAAC,KAAK,EAAE;gBACV;YACF;YAEA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC;YAClD,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,uBAAuB,KAAK,IAAI;YACrE,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,KAAK;YAEnD,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,iBAAiB,CAAC,EAAE;AACpD,gBAAA,WAAW,CAAC,aAAa,CAAC,GAAG,SAAS;YACxC;iBAAO;gBACL,WAAW,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;sBACpC,KAAK,CAAC,IAAI,CAAC,4BAA4B,GAAG,KAAK;sBAC/C,KAAK,KAAK;AACV,0BAAE;0BACA,KAAK;YACb;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAK;YAClB,cAAc,CAAC,MAAK;AAClB,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE;oBACxB,WAAW;oBACX,UAAU;AACV,oBAAA,mBAAmB,EAAE,OAAO;AAC7B,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,iBAAiB,CAAC,cAAc,GAAG,KAAK,EAAA;;;;;AAK9C,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACvD,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B;gBAAE;YAC9C,MAAM,QAAQ,GAAI,IAAI,CAAC,UAAsC,CAAC,GAAG,CAAC;AAClE,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC;gBAAE;YACzC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC;AACpE,YAAA,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS;gBAAE;YACrD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACrF;QAEA,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;QACvD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;AAErC,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE;YAC7B;QACF;QAEA,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;QACnC;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;QACvC;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;IACtC;IAEQ,QAAQ,GAAA;QACd,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE;AAExB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QAEzB,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAChD,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CACvC,CAAC,GAAG,EAAE,GAAG,KAAI;YACX,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS;AACpD,YAAA,OAAO,GAAG;QACZ,CAAC,EACD,EAA6B,CAC9B;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAK;YAClB,cAAc,CAAC,MAAK;AAClB,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE;oBACxB,WAAW;AACX,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,mBAAmB,EAAE,OAAO;AAC7B,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AACD;;AC5sBD;AACA,MAAM,aAAa,GAAG,WAAW;AAEjC;;;AAGG;AACI,MAAM,2BAA2B,GAAsB;IAC5D,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,QAAQ;IACR,WAAW;IACX,OAAO;IACP,QAAQ;;AAKV,MAAM,cAAc,GAAG,CAAC,GAA2B,KAAa;AAC9D,IAAA,MAAM,EAAE,YAAY,EAAE,GAAG,GAAG;AAE5B,IAAA,OAAO,OAAO,YAAY,KAAK,UAAU,GAAI,YAA8B,EAAE,IAAI,YAAY,IAAI,IAAI,CAAC;AACxG,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,MAAuB,KAAU;IACtD,MAAM,GAAG,GAAS,EAAE;AAEpB,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAC/C,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC;IAChC;AAEA,IAAA,OAAO,GAAG;AACZ,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,QAAqB,EAAE,OAAa,KAC9D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAE7E;AACA,MAAM,UAAU,GAAG,CAAC,GAAY,EAAE,YAAqB,KAAa;IAClE,IAAI,GAAG,KAAK,aAAa;AAAE,QAAA,OAAO,IAAI;IAEtC,IAAI,OAAO,GAAG,KAAK,QAAQ;AAAE,QAAA,OAAO,GAAG;AAEvC,IAAA,MAAM,eAAe,GAAG,OAAO,YAAY,KAAK,QAAQ;AACxD,IAAA,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE5G,IAAI,eAAe,KAAK,YAAY,IAAI,GAAG,KAAK,EAAE,CAAC,EAAE;AACnD,QAAA,OAAO,iBAAiB,CAAC,GAAG,CAAC;IAC/B;IAEA,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO,EAAE;AACrC,QAAA,OAAO,kBAAkB,CAAC,GAAG,CAAC;IAChC;AAEA,IAAA,OAAO,GAAG;AACZ,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,MAAuB,EAAE,KAAW,EAAE,QAAc,KAAY;IAC1F,IAAI,KAAK,GAAG,CAAC;AAEb,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAC/C,IAAI,2BAA2B,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,iBAAiB;YAAE;AACxE,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAAE,YAAA,KAAK,EAAE;IAChD;AAEA,IAAA,OAAO,KAAK;AACd,CAAC;AAqBD,MAAM,YAAY,GAAG,CACnB,MAAe,EACf,OAAgC,EAChC,QAAkB,KACU;AAC5B,IAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC;AACtC,IAAA,MAAM,KAAK,GAAG,MAAM,CAA0B,KAAK,CAAC,OAAO,CAAC;8EAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC;IAEtC,OAAO;AACL,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE;AACzB,QAAA,iBAAiB,EAAE,QAAQ,CAAC,MAAM,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAU,EAAE,QAAQ,CAAC,CAAC;AACxF,QAAA,QAAQ,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,UAAU,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;AACpE,QAAA,mBAAmB,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAa,CAAC,EAAE,CAAC,CAAC;AACjG,QAAA,uBAAuB,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAA4B,CAAC;KACrF;AACH,CAAC;AAaD;;;;;;;;;;;;;;AAcG;MACU,gBAAgB,CAAA;AA+C3B,IAAA,WAAA,CAAmB,MAAsC,EAAA;AA9CxC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AACxB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;QAW5B,IAAA,CAAA,SAAS,GAAG,MAAM,CAAiC,IAAI;sFAAC;QAExD,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK;uFAAC;QAC1B,IAAA,CAAA,kBAAkB,GAAG,uBAAuB,EAAE;QAGvD,IAAA,CAAA,aAAa,GAAyC,IAAI;QAC1D,IAAA,CAAA,eAAe,GAAG,KAAK;QA2B7B,wBAAwB,CAAC,gBAAgB,CAAC;AAE1C,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,gBAAgB;QACtC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAA4B;QAEpE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAA4B;AAChE,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO;mFAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAA4B;uFAAC;QACnE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAE/B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;QACzC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;QAChD,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;oFAAC;QACrG,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,MAChC,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAU,EAAE,IAAI,CAAC,SAAS,CAAC;8FAC5E;;QAGD,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE;YAE1B,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAY,CAAC,CAAC;AACnD,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE;YAEzC,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,gBAAgB,KAAK,KAAK;oBAAE;AAE5E,gBAAA,IAAI,CAAC,aAAa,CAAC,OAAe,CAAC;AACrC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IACrD;AAEO,IAAA,OAAO,CAAC,OAAwC,EAAA;AACrD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACrB,IAAI,SAAS,EAAE,EAAE;AACf,gBAAA,OAAO,CAAC,IAAI,CAAC,gFAAgF,CAAC;YAChG;AAEA,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AAEzB,QAAA,IAAI,OAAO,EAAE,gBAAgB,KAAK,KAAK,EAAE;YACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAmB,CAAC;QAC9D;;QAGA,IAAI,CAAC,MAAM,EAAE;AAEb,QAAA,OAAO,IAAI;IACb;IAEO,SAAS,GAAA;QACd,IAAI,CAAC,QAAQ,EAAE;IACjB;IAEO,QAAQ,CAAC,KAA8B,EAAE,OAAsC,EAAA;QACpF,IAAI,OAAO,EAAE,UAAU;AAAE,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAEpD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B;IAEO,UAAU,CAAC,KAAuC,EAAE,OAAsC,EAAA;QAC/F,IAAI,OAAO,EAAE,UAAU;AAAE,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAEpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IACrD;IAEO,mBAAmB,CAAC,GAAkC,EAAE,OAAsC,EAAA;QACnG,IAAI,OAAO,EAAE,UAAU;AAAE,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAEpD,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAa,CAAC,EAAE,CAAC,CAAC;IACjF;IAEO,oBAAoB,CAAC,IAAuC,EAAE,OAAsC,EAAA;QACzG,IAAI,OAAO,EAAE,UAAU;AAAE,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAEpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AACzB,YAAA,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,EAAU;AAE/B,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;gBACtB,IAAI,CAAC,GAAa,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAa,CAAC;YACrD;AAEA,YAAA,OAAO,IAA+B;AACxC,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,uBAAuB,CAC5B,OAA2F,EAAA;QAE3F,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,GAAa,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAsC;AAE3G,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC;IAC1C;;IAGO,MAAM,GAAA;AACX,QAAA,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;IAC7E;AAEQ,IAAA,aAAa,CAAC,IAAU,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE;QACxB,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YAAE;QAEpC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAU,EAAE,IAAI,CAAC;QACvE,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC;QAE3D,IAAI,CAAC,WAAW,EAAE;AAElB,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;YACvB,IAAI,CAAC,MAAM,EAAE;QACf;aAAO;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAK;AACnC,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;gBACzB,IAAI,CAAC,MAAM,EAAE;YACf,CAAC,EAAE,UAAU,CAAC;QAChB;IACF;;IAGQ,gBAAgB,CAAC,WAAqB,EAAE,IAAU,EAAA;QACxD,IAAI,CAAC,WAAW,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QAEpC,MAAM,KAAK,GAAa,EAAE;AAE1B,QAAA,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAE7B,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,IAAI;YACrB,IAAI,GAAG,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAAE,gBAAA,OAAO,IAAI;AACzD,YAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS;AAAE,gBAAA,OAAO,IAAI;AAE3C,YAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC1B;AAEA,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC3B;IAEQ,MAAM,GAAA;QACZ,IAAI,CAAC,WAAW,EAAE;AAElB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAU;AAClC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAU;AAE1C,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAE5B;QACF;QAEA,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC;AAEtF,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAE5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAA4B,CAAC;QAC9D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;;;QAI3D,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;QACzD;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,kBAAkB,KAAK,KAAK,EAAE;AAC3E,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QACxB;IACF;IAEQ,YAAY,CAAC,IAAU,EAAE,WAAqB,EAAA;AACpD,QAAA,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE;AAExB,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACrD,YAAA,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS;YAE5B,IAAI,CAAC,MAAM,EAAE,MAAM;gBAAE;YAErB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAI;gBACzC,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE;oBAC/B,IAAI,SAAS,EAAE,EAAE;AACf,wBAAA,OAAO,CAAC,IAAI,CAAC,yDAAyD,QAAQ,CAAA,gBAAA,CAAkB,CAAC;oBACnG;AAEA,oBAAA,OAAO,KAAK;gBACd;AAEA,gBAAA,OAAO,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,CAAC,SAAS;gBAAE;YAEhB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YAExC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,EAAE;AACnC,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY;YAC1B;QACF;AAEA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,aAAa,CAAC,MAAY,EAAA;QAChC,MAAM,OAAO,GAAG,EAAE,GAAI,IAAI,CAAC,UAAU,EAAW,EAAE;QAClD,IAAI,OAAO,GAAG,KAAK;AAEnB,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACrD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAEvC,IAAI,GAAG,KAAK,SAAS;gBAAE;YAEvB,MAAM,KAAK,GAAG,GAAG,KAAK,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;YAE7F,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE;AAC/B,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK;gBACpB,OAAO,GAAG,IAAI;YAChB;QACF;AAEA,QAAA,IAAI,CAAC,OAAO;YAAE;AAEd,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;IAC9B;AAEQ,IAAA,cAAc,CAAC,IAAU,EAAA;QAC/B,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAA4B,CAAC;QACvE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;;QAE3D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;IACzD;IAEQ,YAAY,CAAC,GAA2B,EAAE,GAAY,EAAA;QAC5D,IAAI,GAAG,CAAC,iBAAiB;AAAE,YAAA,OAAO,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC;QAC5D,IAAI,GAAG,CAAC,iBAAiB;AAAE,YAAA,OAAO,GAAG;QAErC,OAAO,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC7C;AAEQ,IAAA,WAAW,CAAC,KAAW,EAAA;QAC7B,MAAM,WAAW,GAAS,EAAE;AAE5B,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACpC,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC;AAE7B,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACxD,YAAA,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,KAAK,KAAK;AAC5C,YAAA,MAAM,YAAY,GAAG,GAAG,CAAC,uBAAuB,KAAK,IAAI;YAEzD,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,EAAE;AAC/C,gBAAA,WAAW,CAAC,QAAQ,CAAC,GAAG,SAAS;YACnC;AAAO,iBAAA,IAAI,GAAG,CAAC,iBAAiB,EAAE;gBAChC,WAAW,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,iBAAiB,CAAC,UAAU,CAAC;YAC3D;iBAAO;AACL,gBAAA,WAAW,CAAC,QAAQ,CAAC,GAAG,UAAU,KAAK,IAAI,GAAG,aAAa,GAAG,UAAU;YAC1E;QACF;QAEA,cAAc,CAAC,MAAK;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE;gBACxB,WAAW;AACX,gBAAA,mBAAmB,EAAE,OAAO;AAC5B,gBAAA,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU;AAC7C,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,SAAS,CAAC,GAAW,EAAA;AAC3B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO;AAE3B,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,GAAG;AAEvB,QAAA,OAAO,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,MAAM,EAAE,CAAA,CAAA,EAAI,GAAG,EAAE;IACnE;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;AAC/B,YAAA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AAChC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QAC3B;IACF;IAEQ,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE;AAExB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE;AAElB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,kBAAkB,KAAK,KAAK;YAAE;QAExD,MAAM,WAAW,GAAS,EAAE;AAE5B,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC3C,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS;QAC9C;QAEA,cAAc,CAAC,MAAK;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,mBAAmB,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC5F,QAAA,CAAC,CAAC;IACJ;AACD;AAED;;;AAGG;AACI,MAAM,eAAe,GAAG,CAC7B,MAAsC,KACR,IAAI,gBAAgB,CAAC,MAAM;;ACrgB3D,MAAM,eAAe,GAAG,CAAI,MAAuC,KAA+B;AAChG,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,EAAE;IAEtB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM;IAErC,OAAO;AACL,QAAA,GAAG,IAAI;QACP,SAAS,EAAE,SAAS,KAAK,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC;KACpG;AACH,CAAC;AAED;;;;;;AAMG;MACU,UAAU,GAAG,CAAa,MAAmC,MAA+B;AACvG,IAAA,YAAY,EAAE,IAAI;IAClB,GAAG,eAAe,CAAC,MAAM,CAAC;AAC3B,CAAA;AAED;;;AAGG;MACU,gBAAgB,GAAG,CAAC,MAAwC,MAAoC;AAC3G,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,sBAAsB,EAAE,IAAI;IAC5B,GAAG,eAAe,CAAC,MAAM,CAAC;AAC3B,CAAA;AAED;;;AAGG;MACU,cAAc,GAAG,CAAC,MAAsC,MAAkC;AACrG,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,iBAAiB,EAAE,eAAe;AAClC,IAAA,iBAAiB,EAAE,yBAAyB;IAC5C,GAAG,eAAe,CAAC,MAAM,CAAC;AAC3B,CAAA;AAED;MACa,qBAAqB,GAAG,CAAC,MAA0C,MAAsC;AACpH,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,iBAAiB,EAAE,sBAAsB;IACzC,GAAG,eAAe,CAAC,MAAM,CAAC;AAC3B,CAAA;AAED;MACa,qBAAqB,GAAG,CAAC,MAA0C,MAAsC;AACpH,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,iBAAiB,EAAE,sBAAsB;IACzC,GAAG,eAAe,CAAC,MAAM,CAAC;AAC3B,CAAA;AAED;MACa,sBAAsB,GAAG,CACpC,MAA2C,MACN;AACrC,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,iBAAiB,EAAE,uBAAuB;IAC1C,GAAG,eAAe,CAAC,MAAM,CAAC;AAC3B,CAAA;AAED;MACa,cAAc,GAAG,CAAC,MAAsC,MAAkC;AACrG,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,iBAAiB,EAAE,eAAe;IAClC,GAAG,eAAe,CAAC,MAAM,CAAC;AAC3B,CAAA;AAED;MACa,mBAAmB,GAAG,CAAC,MAAwC,MAAoC;AAC9G,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,iBAAiB,EAAE,oBAAoB;IACvC,GAAG,eAAe,CAAC,MAAM,CAAC;AAC3B,CAAA;;AC1FD;AACO,MAAM,yBAAyB,GAAG;;AAEvC,IAAA,eAAe,EAAE,IAAI;AACrB,IAAA,iBAAiB,EAAE,IAAI;CACf;AAIH,MAAM,aAAa,GAAG,CAAC,IAAY,KAAI;IAC5C,OAAO,IAAI,YAAY,CACrB,yBAAyB,CAAC,eAAe,EACzC,CAAA,wBAAA,EAA2B,IAAI,CAAA,6BAAA,CAA+B,CAC/D;AACH,CAAC;AAEM,MAAM,gBAAgB,GAAG,MAAK;IACnC,OAAO,IAAI,YAAY,CACrB,yBAAyB,CAAC,iBAAiB,EAC3C,6EAA6E,CAC9E;AACH,CAAC;;ACYD,MAAM,qBAAqB,GAAG,GAAG;AA2D1B,MAAM,qBAAqB,GAAG,CACnC,OAA2C,KACJ;IACvC,OAAO,kBAAkB,CACvB,MAAK;AACH,QAAA,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;AAC7B,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,OAAO,CAAC,UAAU;AAC/B,SAAA,CAAC;AAEF,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAA+C;AACpE,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK;wFAAC;;AAGjC,QAAA,MAAM,eAAe,GAAG,sBAAsB,EAAE;AAChD,QAAA,MAAM,aAAa,GAAG,MAAM,CAAW,EAAE;0FAAC;AAC1C,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAA6B,EAAE;6FAAC;QAC/D,IAAI,iBAAiB,GAAG,CAAC;QACzB,MAAM,iBAAiB,GAAG,MAAK;AAC7B,YAAA,IAAI,eAAe;gBAAE,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3D,QAAA,CAAC;AAED,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAoC,KAAI;AACxD,YAAA,MAAM,MAAM,GAAG,OAAO,IAAI,KAAK,UAAU,GAAG,IAAI,GAAG,MAAM,IAAI;AAC7D,YAAA,MAAM,GAAG,GAAG,mBAAmB,CAAC,QAAQ,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC;AACzD,YAAA,MAAM,QAAQ,GAAG,MAAM,CAA6C,IAAI;yFAAC;AAEzE,YAAA,MAAM,IAAI,GAAG,CAAC,IAAY,KAAI;AAC5B,gBAAA,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;gBAE9B,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEpC,gBAAA,IAAI,YAAY;AAAE,oBAAA,OAAO,YAAY;AAErC,gBAAA,MAAM,OAAO,GAAG,MAAM,CAAsB,IAAI;4FAAC;AAEjD,gBAAA,MAAM,OAAO,GAAwC;AACnD,oBAAA,aAAa,EAAE,OAAO;iBACvB;AAED,gBAAA,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;AACxB,gBAAA,iBAAiB,EAAE;AAEnB,gBAAA,OAAO,OAAO;AAChB,YAAA,CAAC;YAED,MAAM,CAAC,MAAK;AACV,gBAAA,MAAM,OAAO,GAAG,MAAM,EAAE;gBAExB,SAAS,CAAC,MAAK;AACb,oBAAA,MAAM,QAAQ,GAAG,GAAG,EAAE;oBAEtB,IAAI,QAAQ,KAAK,OAAO;wBAAE;AAE1B,oBAAA,IAAI,QAAQ;wBAAE,SAAS,CAAC,QAAQ,CAAC;oBAEjC,IAAI,OAAO,EAAE;AACX,wBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;AAChC,wBAAA,IAAI,UAAU;AAAE,4BAAA,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;oBAC1C;yBAAO;AACL,wBAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;oBACpB;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;AAChC,gBAAA,MAAM,OAAO,GAAG,MAAM,EAAE;gBAExB,IAAI,OAAO,EAAE;oBACX,SAAS,CAAC,OAAO,CAAC;AAClB,oBAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBACpB;AACF,YAAA,CAAC,CAAC;AAEF,YAAA,OAAO,QAAQ,CAAC,UAAU,EAAgD;AAC5E,QAAA,CAAC;AAED,QAAA,MAAM,SAAS,GAAG,CAAC,IAAY,KAAI;YACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACpB,gBAAA,IAAI,SAAS,EAAE;AAAE,oBAAA,MAAM,aAAa,CAAC,IAAI,CAAC;YAC5C;AAEA,YAAA,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;AAE/B,YAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AAClB,YAAA,iBAAiB,EAAE;AACrB,QAAA,CAAC;QAED,MAAM,gCAAgC,GAAG,MAAK;AAC5C,YAAA,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAK;AACxB,gBAAA,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;gBAErB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE;AAC/B,oBAAA,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;gBAChC;AACF,YAAA,CAAC,CAAC;AACF,YAAA,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACvD,QAAA,CAAC;QAED,MAAM,sBAAsB,GAAG,MAAK;AAClC,YAAA,MAAM,CAAC,KAAK,CAAC,CAAC,IAAY,KAAI;AAC5B,gBAAA,IAAI;oBACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiB;oBAE7C,IAAI,eAAe,EAAE;AACnB,wBAAA,MAAM,OAAO,GAA6B;4BACxC,EAAE,EAAE,iBAAiB,EAAE;AACvB,4BAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;4BACrB,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,KAAK,EAAE,IAAI,CAAC,KAAK;4BACjB,IAAI,EAAE,IAAI,CAAC,IAAI;yBAChB;wBACD,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;oBACrF;oBAEA,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAEjC,oBAAA,IAAI,IAAI;AAAE,wBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;gBACxC;gBAAE,OAAO,KAAK,EAAE;AACd,oBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AACpB,oBAAA,IAAI,SAAS,EAAE;wBAAE,MAAM,gBAAgB,EAAE;gBAC3C;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AAED,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;AAEvD,QAAA,gCAAgC,EAAE;AAClC,QAAA,sBAAsB,EAAE;QACxB,MAAM,CAAC,OAAO,EAAE;AAEhB,QAAA,MAAM,MAAM,GAAkC;YAC5C,QAAQ;AACR,YAAA,WAAW,EAAE,WAAW,CAAC,UAAU,EAAE;AACrC,YAAA,MAAM,EAAE;gBACN,SAAS;AACV,aAAA;SACF;QAED,IAAI,eAAe,EAAE;AACnB,YAAA,MAAM,MAAM,GAA4B;AACtC,gBAAA,SAAS,EAAE,WAAW,CAAC,UAAU,EAAE;AACnC,gBAAA,KAAK,EAAE,aAAa,CAAC,UAAU,EAAE;AACjC,gBAAA,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE;aACxC;YAED,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAC5C,gBAAA,IAAI,EAAE,WAAW;gBACjB,MAAM;AACN,gBAAA,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;AAC/C,aAAA,CAAC;YAEF,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC;QAC1C;AAEA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,EACD;AACE,QAAA,IAAI,EAAE,CAAA,gBAAA,EAAmB,OAAO,CAAC,IAAI,CAAA,CAAE;AACxC,KAAA,CACF;AACH;;AChQA;;AAEG;;;;"}