@ethlete/query 6.0.0-next.29 → 6.0.0-next.30

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @ethlete/query
2
2
 
3
+ ## 6.0.0-next.30
4
+
5
+ ### Minor Changes
6
+
7
+ - [`70a0602`](https://github.com/ethlete-io/ethdk/commit/70a06025c2f919bd1582b2d0adbf80b21a25696a) Thanks [@TomTomB](https://github.com/TomTomB)! - `withBearerAuthMultiTabSync` exposes `leadership` (`election` / `off` / `unsupported`), so a tab reading `isLeader: true` can tell a won election from one that never ran.
8
+
9
+ - [#3050](https://github.com/ethlete-io/ethdk/pull/3050) [`cab3d1a`](https://github.com/ethlete-io/ethdk/commit/cab3d1ae2f3ef37df63663b62edb842e8e4a8f9b) Thanks [@github-actions](https://github.com/apps/github-actions)! - Auth: add `createAuthGuard(providerRef, config)` - route guards that wait out a session restore, redirect to your login URL with the attempted URL attached, and navigate back afterwards.
10
+
11
+ - [`33e705b`](https://github.com/ethlete-io/ethdk/commit/33e705bfb989ec80e245b4bd9e2091c57cd337b8) Thanks [@TomTomB](https://github.com/TomTomB)! - Query devtools: **Forget** shows only while the **Gone** chip is lit, drops exactly the tombstones the list is showing, and is styled as the destructive action it is instead of as a filter clear. `clearQueryDevtoolsTombstones()` takes optional ids.
12
+
13
+ ### Patch Changes
14
+
15
+ - [#3050](https://github.com/ethlete-io/ethdk/pull/3050) [`e7ffcfc`](https://github.com/ethlete-io/ethdk/commit/e7ffcfc5049e81f27732bda7d71ba4e467778fed) Thanks [@github-actions](https://github.com/apps/github-actions)! - Query persistence: a logout purge or `clearPersistedQueries()` can no longer be undone by a write that was already on its way to disk, and `maxEntries` is applied at startup as well.
16
+
17
+ - [`4b8499d`](https://github.com/ethlete-io/ethdk/commit/4b8499dbd099b81a593ced27bd6df63b4047e173) Thanks [@TomTomB](https://github.com/TomTomB)! - `validateWithQuery` no longer throws `ET100` when the creator's route is a function - its args reach
18
+ the query at execute time, which the created query now declares.
19
+
3
20
  ## 6.0.0-next.29
4
21
 
5
22
  ### Minor Changes
@@ -1,15 +1,102 @@
1
1
  import * as i0 from '@angular/core';
2
- import { DestroyRef, InjectionToken, inject, Injector, EnvironmentInjector, ElementRef, ErrorHandler, createEnvironmentInjector, effect, untracked, signal, linkedSignal, computed, runInInjectionContext, isDevMode, PLATFORM_ID, resource, DOCUMENT, makeEnvironmentProviders, assertInInjectionContext, provideEnvironmentInitializer, ChangeDetectorRef, ViewContainerRef, TemplateRef, Input, Directive, input, Pipe, ViewEncapsulation, Component, NgZone } from '@angular/core';
2
+ import { inject, computed, DestroyRef, InjectionToken, Injector, EnvironmentInjector, ElementRef, ErrorHandler, createEnvironmentInjector, effect, untracked, signal, linkedSignal, runInInjectionContext, isDevMode, PLATFORM_ID, resource, DOCUMENT, makeEnvironmentProviders, assertInInjectionContext, provideEnvironmentInitializer, ChangeDetectorRef, ViewContainerRef, TemplateRef, Input, Directive, input, Pipe, ViewEncapsulation, Component, NgZone } from '@angular/core';
3
+ import { toObservable, takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
4
+ import { UrlTree, Router, RedirectCommand, ActivatedRoute } from '@angular/router';
5
+ import { filter, take, map, defer, from, Subject, Subscription, throwError, timer, switchMap, tap, retry, catchError, of, merge, firstValueFrom, fromEvent, throttleTime, interval, combineLatest, Observable, takeUntil, startWith, pairwise, BehaviorSubject, ReplaySubject, shareReplay, skip, takeWhile, EMPTY, withLatestFrom, debounceTime } from 'rxjs';
3
6
  import { defineStaticProvider, RuntimeError, clamp, randomId, defineRootProvider, isObject, injectUnsavedChangesCoordinator, injectRoute, getCookie, getDomain, deleteCookie, setCookie, createDestroy, computedTillTruthy, defineProvider, toProvideFn, toInjectFn, nextFrame, injectQueryParams, injectQueryParamChanges, clone, equal, ET_PROPERTY_REMOVED, previousSignalValue } from '@ethlete/core';
4
- import { filter, Subject, Subscription, defer, throwError, timer, switchMap, tap, retry, catchError, take, of, merge, firstValueFrom, fromEvent, throttleTime, interval, combineLatest, map, Observable, takeUntil, startWith, pairwise, BehaviorSubject, ReplaySubject, shareReplay, skip, takeWhile, EMPTY, withLatestFrom, debounceTime } from 'rxjs';
5
7
  import { HttpClient, HttpEventType, HttpErrorResponse, HttpHeaders, HttpStatusCode } from '@angular/common/http';
6
- import { toObservable, takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
7
8
  import { getActiveConsumer, setActiveConsumer } from '@angular/core/primitives/signals';
8
9
  import { isPlatformBrowser, NgClass, AsyncPipe, JsonPipe } from '@angular/common';
9
10
  import { validateAsync, form } from '@angular/forms/signals';
10
11
  import * as i1 from '@angular/forms';
11
12
  import { FormControl, ReactiveFormsModule, FormGroup } from '@angular/forms';
12
- import { Router, ActivatedRoute } from '@angular/router';
13
+
14
+ const DEFAULT_RETURN_URL_PARAM = 'returnUrl';
15
+ const DEFAULT_URL = '/';
16
+ const resolveTarget = (router, target) => {
17
+ if (target instanceof UrlTree)
18
+ return target;
19
+ if (typeof target === 'function')
20
+ return target(router);
21
+ if (typeof target === 'string')
22
+ return router.parseUrl(target);
23
+ return router.createUrlTree([...target]);
24
+ };
25
+ const withQueryParam = (tree, param, value) => new UrlTree(tree.root, { ...tree.queryParams, [param]: value }, tree.fragment);
26
+ // A return URL arrives in the query string, so it is only followed when it points back into this
27
+ // app: a leading `//` is a protocol-relative URL to another origin, and anything not starting with
28
+ // `/` would resolve against wherever the login page happens to sit.
29
+ const readReturnUrl = (router, url, param) => {
30
+ if (!param)
31
+ return null;
32
+ const value = router.parseUrl(url).queryParams[param];
33
+ return typeof value === 'string' && value.startsWith('/') && !value.startsWith('//') ? value : null;
34
+ };
35
+ /**
36
+ * The route guards for a {@link createBearerAuthProvider} session, and the redirect back once the
37
+ * visitor signs in. Both halves share the return-URL param, so the two cannot drift apart.
38
+ *
39
+ * ```ts
40
+ * export const authGuard = createAuthGuard(authProviderRef, { loginUrl: '/login' });
41
+ *
42
+ * export const ROUTES: Routes = [
43
+ * { path: 'login', canMatch: [authGuard.canMatchAnonymous], loadComponent: … },
44
+ * { path: 'app', canMatch: [authGuard.canMatch], loadChildren: … },
45
+ * ];
46
+ * ```
47
+ *
48
+ * A guard pends while a session restore is in flight rather than redirecting against a session that
49
+ * is about to exist, so a hard reload of a protected URL stays on that URL.
50
+ */
51
+ const createAuthGuard = (providerRef, config) => {
52
+ const param = config.returnUrlParam === false ? null : (config.returnUrlParam ?? DEFAULT_RETURN_URL_PARAM);
53
+ const behavior = config.navigationBehaviorOptions ?? { replaceUrl: true };
54
+ const guardFor = (requiresSession) => () => {
55
+ const router = inject(Router);
56
+ const provider = providerRef.inject();
57
+ // Captured before the wait below: once the session settles the router has moved on, and the URL
58
+ // the visitor actually asked for is no longer reachable from it.
59
+ const attemptedUrl = router.currentNavigation()?.extractedUrl.toString() ?? router.url;
60
+ const settled = computed(() => {
61
+ const status = provider.sessionStatus();
62
+ return status !== 'unknown' && status !== 'restoring';
63
+ }, /* @ts-ignore */
64
+ ...(ngDevMode ? [{ debugName: "settled" }] : /* istanbul ignore next */ []));
65
+ const decide = () => {
66
+ const authenticated = provider.sessionStatus() === 'authenticated';
67
+ if (authenticated === requiresSession)
68
+ return true;
69
+ if (requiresSession) {
70
+ const loginTree = resolveTarget(router, config.loginUrl);
71
+ return new RedirectCommand(param ? withQueryParam(loginTree, param, attemptedUrl) : loginTree, behavior);
72
+ }
73
+ const returnUrl = readReturnUrl(router, attemptedUrl, param);
74
+ return new RedirectCommand(returnUrl ? router.parseUrl(returnUrl) : resolveTarget(router, config.defaultUrl ?? DEFAULT_URL), behavior);
75
+ };
76
+ if (settled())
77
+ return decide();
78
+ return toObservable(settled).pipe(filter(Boolean), take(1), map(decide));
79
+ };
80
+ const requireSession = guardFor(true);
81
+ const requireAnonymous = guardFor(false);
82
+ return {
83
+ canMatch: requireSession,
84
+ canActivate: requireSession,
85
+ canMatchAnonymous: requireAnonymous,
86
+ canActivateAnonymous: requireAnonymous,
87
+ returnUrl: () => {
88
+ const router = inject(Router);
89
+ return readReturnUrl(router, router.url, param);
90
+ },
91
+ navigateAfterLogin: () => {
92
+ const router = inject(Router);
93
+ return defer(() => {
94
+ const returnUrl = readReturnUrl(router, router.url, param);
95
+ return from(router.navigateByUrl(returnUrl ?? resolveTarget(router, config.defaultUrl ?? DEFAULT_URL)));
96
+ });
97
+ },
98
+ };
99
+ };
13
100
 
14
101
  /**
15
102
  * Turns the features applied at creation into their devtools representation.
@@ -2316,6 +2403,17 @@ const createQueryPersistenceEngine = (options) => {
2316
2403
  let isSecurePurgeDeferred = false;
2317
2404
  let markReady;
2318
2405
  const whenReady = new Promise((resolve) => (markReady = resolve));
2406
+ /**
2407
+ * Every task that touches the store runs through here, one at a time. A flush is already async by
2408
+ * the time the batch leaves for disk, so a logout purge or a clear starting in that window would
2409
+ * otherwise have the write land behind it and put the data back.
2410
+ */
2411
+ let storeChain = Promise.resolve();
2412
+ const enqueue = (task) => {
2413
+ const run = storeChain.catch(() => undefined).then(task);
2414
+ storeChain = run.catch(() => undefined);
2415
+ return run;
2416
+ };
2319
2417
  const isExpired = (meta, now = Date.now()) => meta.persistedAt + maxAge <= now;
2320
2418
  const metaOf = ({ body: _body, ...meta }) => meta;
2321
2419
  const removeKeys = async (keys) => {
@@ -2336,17 +2434,20 @@ const createQueryPersistenceEngine = (options) => {
2336
2434
  const excess = byAge.slice(0, index.size - maxEntries).map((meta) => meta.key);
2337
2435
  await removeKeys(excess);
2338
2436
  };
2339
- const purgeSecure = async () => {
2340
- // A body queued for writing must go too: the logout tore the entry down, so flushing it afterwards
2341
- // would put the data back on disk moments after it was removed from memory.
2437
+ const purgeSecure = () => {
2438
+ // Dropping the queued bodies is not deferred like the disk half below: a flush scheduled before
2439
+ // the logout would otherwise still be holding them when it runs, and put the data back on disk
2440
+ // moments after it left memory.
2342
2441
  for (const [key, entry] of pendingWrites) {
2343
2442
  if (entry.isSecure)
2344
2443
  pendingWrites.delete(key);
2345
2444
  }
2346
- const secureKeys = Array.from(index.values())
2347
- .filter((meta) => meta.isSecure)
2348
- .map((meta) => meta.key);
2349
- await removeKeys(secureKeys);
2445
+ return enqueue(async () => {
2446
+ const secureKeys = Array.from(index.values())
2447
+ .filter((meta) => meta.isSecure)
2448
+ .map((meta) => meta.key);
2449
+ await removeKeys(secureKeys);
2450
+ });
2350
2451
  };
2351
2452
  const start = async () => {
2352
2453
  if (!adapter.isSupported) {
@@ -2372,11 +2473,15 @@ const createQueryPersistenceEngine = (options) => {
2372
2473
  // shapes changed. Emptying the store outright also collects anything the index does not know
2373
2474
  // about, which a key-by-key removal cannot.
2374
2475
  if (droppedKeys.length && !index.size) {
2375
- await adapter.clear();
2476
+ await enqueue(() => adapter.clear());
2376
2477
  }
2377
2478
  else if (droppedKeys.length) {
2378
- await removeKeys(droppedKeys);
2479
+ await enqueue(() => removeKeys(droppedKeys));
2379
2480
  }
2481
+ // The cap is otherwise only applied by a write, so a store left over the limit - by a deploy
2482
+ // that lowered `maxEntries`, or by several tabs writing against their own index - would stay
2483
+ // that way until this session happens to write something.
2484
+ await enqueue(enforceMaxEntries);
2380
2485
  }
2381
2486
  catch {
2382
2487
  // Pruning is opportunistic: `maxAge` is re-checked before every hydration, so a failure here
@@ -2452,10 +2557,7 @@ const createQueryPersistenceEngine = (options) => {
2452
2557
  }
2453
2558
  await enforceMaxEntries().catch(() => undefined);
2454
2559
  };
2455
- // Flushes are serialized: the write timer and the "tab is going away" flush can fire together, and
2456
- // two batches updating the index and the entry cap concurrently would race.
2457
- let flushChain = Promise.resolve();
2458
- const flush = () => (flushChain = flushChain.catch(() => undefined).then(runFlush));
2560
+ const flush = () => enqueue(runFlush);
2459
2561
  const scheduleFlush = () => {
2460
2562
  if (writeTimer !== undefined || areWritesDisabled || isDestroyed)
2461
2563
  return;
@@ -2513,12 +2615,14 @@ const createQueryPersistenceEngine = (options) => {
2513
2615
  queueWrite(event);
2514
2616
  };
2515
2617
  const eventSubscription = repository.events$.subscribe(handleEvent);
2516
- const clear = async () => {
2618
+ const clear = () => {
2517
2619
  clearTimeout(writeTimer);
2518
2620
  writeTimer = undefined;
2519
2621
  pendingWrites.clear();
2520
- index.clear();
2521
- await adapter.clear();
2622
+ return enqueue(async () => {
2623
+ index.clear();
2624
+ await adapter.clear();
2625
+ });
2522
2626
  };
2523
2627
  const destroy = () => {
2524
2628
  isDestroyed = true;
@@ -4262,8 +4366,10 @@ const validateWithQuery = (path, config) => {
4262
4366
  mapViolations: config.mapViolations,
4263
4367
  factory: (params) => {
4264
4368
  // Created once, exactly like a query stack. A POST validate route doesn't auto-execute, so
4265
- // the resource loader drives it - each params change re-executes with the new args.
4266
- const query = config.queryCreator();
4369
+ // the resource loader drives it - each params change re-executes with the new args. Those args
4370
+ // reach the query through `execute()`, never `withArgs()`, so a function route has to be told
4371
+ // the missing feature is intentional or creating the query throws ET100.
4372
+ const query = config.queryCreator({ silenceMissingWithArgsFeatureError: true });
4267
4373
  return resource({
4268
4374
  params: () => params(),
4269
4375
  loader: async ({ params: requestArgs }) => {
@@ -4924,6 +5030,7 @@ const setupLeaderElection = (options) => {
4924
5030
  return {
4925
5031
  isLeader: hold.isHolder,
4926
5032
  instanceCount: instanceCount.asReadonly(),
5033
+ isSupported: false,
4927
5034
  requestRefresh: noop,
4928
5035
  refreshRequests$: refreshRequests.asObservable(),
4929
5036
  cleanup: noop,
@@ -4978,6 +5085,7 @@ const setupLeaderElection = (options) => {
4978
5085
  return {
4979
5086
  isLeader: hold.isHolder,
4980
5087
  instanceCount: instanceCount.asReadonly(),
5088
+ isSupported: true,
4981
5089
  requestRefresh,
4982
5090
  refreshRequests$: refreshRequests.asObservable(),
4983
5091
  cleanup,
@@ -5156,7 +5264,7 @@ const setupMultiTabSync = (config, context) => {
5156
5264
  const SINGLE_TAB = /* @__PURE__ */ (() => {
5157
5265
  const isLeader = signal(true).asReadonly();
5158
5266
  const instanceCount = signal(1).asReadonly();
5159
- return { isLeader, instanceCount };
5267
+ return { isLeader, instanceCount, leadership: 'off' };
5160
5268
  })();
5161
5269
  /**
5162
5270
  * Keeps one browser session consistent across the user's tabs: a login in one tab logs the others in,
@@ -5209,7 +5317,11 @@ const withBearerAuthMultiTabSync = (config = {}) => {
5209
5317
  if (config.leaderElection === false)
5210
5318
  return {};
5211
5319
  const election = setupLeaderElection({ name: context.name });
5212
- instance = { isLeader: election.isLeader, instanceCount: election.instanceCount };
5320
+ instance = {
5321
+ isLeader: election.isLeader,
5322
+ instanceCount: election.instanceCount,
5323
+ leadership: election.isSupported ? 'election' : 'unsupported',
5324
+ };
5213
5325
  return {
5214
5326
  isLeader: () => election.isLeader(),
5215
5327
  leaderElection: instance,
@@ -6597,10 +6709,13 @@ const capTombstones = (list) => {
6597
6709
  return list.filter((e) => !doomed.has(e));
6598
6710
  };
6599
6711
  /**
6600
- * Forgets every destroyed entry the registry is holding - the panel's "clear gone" action. Live
6601
- * entries are untouched.
6712
+ * Forgets destroyed entries the registry is holding - the panel's "clear gone" action. Pass the ids to
6713
+ * drop to forget only those; with no argument every tombstone goes. Live entries are untouched.
6602
6714
  */
6603
- const clearQueryDevtoolsTombstones = () => entries.update((list) => list.filter((e) => !e.destroyedAt));
6715
+ const clearQueryDevtoolsTombstones = (ids) => {
6716
+ const doomed = ids ? new Set(ids) : null;
6717
+ entries.update((list) => list.filter((e) => !e.destroyedAt || (doomed ? !doomed.has(e.id) : false)));
6718
+ };
6604
6719
  /**
6605
6720
  * Enables the `@ethlete/query` devtools. Add this to your application providers (e.g. in
6606
6721
  * `bootstrapApplication`) to make query clients, queries, stacks, sequences and auth providers
@@ -12163,5 +12278,5 @@ const createWebSocketClient = (options) => {
12163
12278
  * Generated bundle index. Do not edit.
12164
12279
  */
12165
12280
 
12166
- export { BasicAuthProvider, BearerAuthFeatureType, BooleanArrayQueryField, CLEAR_QUERY_ARGS, CustomHeaderAuthProvider, DEFAULT_KEEP_UNUSED_FOR, DEFAULT_QUERY_PERSISTENCE_MAX_AGE, DEFAULT_QUERY_PERSISTENCE_MAX_ENTRIES, DEFAULT_QUERY_PERSISTENCE_VERSION, DEFAULT_QUERY_PERSISTENCE_WRITE_DELAY, DateArrayQueryField, DateQueryField, EMPTY_QUERY_DEVTOOLS_FAULT, EntityStore, IGNORED_FILTER_COUNT_FIELDS, INFINITY_QUERY_TOKEN, InfinityQuery, InfinityQueryDirective, InfinityQueryTriggerDirective, LegacyQuery, LegacyQueryCreator, MAX_QUERY_DEVTOOLS_TOMBSTONES, MAX_UNUSED_ENTRIES, NumberArrayQueryField, ParseHttpErrorCodeToMessageDePipe, ParseHttpErrorCodeToMessageEnPipe, ParseHttpErrorCodeToTitleDePipe, ParseHttpErrorCodeToTitleEnPipe, QUERY_CLIENT_DEVTOOLS_TOKEN, QUERY_DEVTOOLS_FAULT_STATUSES, QUERY_PERSISTENCE_STORE_VERSION, QUERY_SYNC_PROTOCOL_VERSION, QueryClientFeatureType, QueryDevtoolsComponent, QueryDirective, QueryFeatureType, QueryField, QueryForm, QueryRuntimeErrorCode, QueryShortNamePipe, QueryStore, SERVER_ERROR_KIND, SERVER_VIOLATION_ERROR_KIND, SPEED_BUFFER_TIME_IN_MS, SearchQueryField, SortQueryField, StringArrayQueryField, V2BearerAuthProvider, V2Query, V2QueryClient, V2QueryCreator, addQueryContainerHandling, applyQueryDevtoolsOverrides, applyQueryFeatures, authExtractTokensResponseMissingAccessToken, authExtractTokensResponseMissingRefreshToken, authExtractTokensResponseNotObject, authProviderFeatureUsedMultipleTimes, booleanArrayQueryField, buildQueryCacheKey, buildQueryString, buildRoute, buildTimestampFromSeconds, castQueryCreatorTypes, circularQueryDependency, circularQueryDependencyChecker, clearQueryDevtoolsFaults, clearQueryDevtoolsTombstones, collectLeafPaths, collectQueryFormLinks, computeQueryAuthHeader, computeQueryBody, computeQueryHeaders, computeQueryMethod, computeQueryQueryParams, consumeSuppressQueryStackDevtools, contentfulGqlLikePaginationAdapter, createBaseQuery, createBaseQueryCreator, createBearerAuthProvider, createDeleteQuery, createExecuteFn, createGetQuery, createGqlExecuteFn, createGqlMutationViaGet, createGqlMutationViaPost, createGqlQuery, createGqlQueryCreator, createGqlQueryViaGet, createGqlQueryViaPost, createHttpRequest, createIndexedDbQueryPersistenceAdapter, createInfinityQueryConfig, createLegacyQueryCreator, createNoopQueryPersistenceAdapter, createPagedQueryStack, createPatchQuery, createPersistentAuthFeature, createPostQuery, createPutQuery, createQuery, createQueryClient, createQueryCollection, createQueryCollectionSignal, createQueryCollectionSubject, createQueryContext, createQueryCreator, createQueryDevtoolsFormLinks, createQueryDevtoolsFormLinksRecorder, createQueryDevtoolsOverrides, createQueryDevtoolsOverridesRecorder, createQueryDevtoolsStats, createQueryDevtoolsStatsRecorder, createQueryErrorResponse, createQueryFeature, createQueryInvalidationFilter, createQueryKeyLockManager, createQueryObject, createQueryPersistenceEngine, createQueryRepository, createQuerySnapshotFn, createQueryStack, createQuerySyncEngine, createQuerySyncTransport, createSecureDeleteQuery, createSecureExecuteFactory, createSecureExecuteFn, createSecureGetQuery, createSecureGqlExecuteFn, createSecureGqlMutationViaGet, createSecureGqlMutationViaPost, createSecureGqlQuery, createSecureGqlQueryCreator, createSecureGqlQueryViaGet, createSecureGqlQueryViaPost, createSecurePatchQuery, createSecurePostQuery, createSecurePutQuery, createSecureQuery, createSecureQueryCreator, createTrackingFeature, createWebSocketClient, dateArrayQueryField, dateQueryField, decryptBearer, deepFreeze, def, defineQueryForm, describeQueryDevtoolsFeatures, detectContentTypeHeader, detectPaginationShape, dynLikePaginationAdapter, effectComputed, emptyQueryArgs, ethletePaginationAdapter, executeUntilSettled, extractExpiresInSeconds, extractFormViolations, extractHtmlErrorMessage, extractQuery, fakePaginationAdapter, filterFailure, filterNull, filterQueryStates, filterSuccess, forEachHeader, formatQueryDevtoolsDuration, generateQueryDevtoolsNumberPreset, generateQueryDevtoolsStringPreset, getBearerAuthProviderName, getDefaultHeaders, getQueryClientName, getQueryFeatureUsage, getResponseUrl, ggLikePaginationAdapter, gql, gqlDataPropertyMissingInResponse, hasHeader, hasQueryDevtoolsOverridesAtPath, htmlErrorPayload, htmlQueryErrorParser, ignoreAutoRefresh, injectInfinityQueryResponseDelay, injectQueryContext, insertFrom, invalidBaseRouteError, invalidBodyError, invalidRouteError, invalidStateInsideSecureExecuteFactory, isAutoRefresh, isBasicAuthProvider, isBearerAuthProvider, isClassValidatorError, isCreateGqlQueryOptions, isCustomHeaderAuthProvider, isDateShapedLeaf, isEmptyString, isGqlQueryConfig, isHtmlErrorPayload, isLegacyQuery, isNaN$1 as isNaN, isPageOutOfRangeError, isQuery, isQueryCollection, isQueryDevtoolsEnabled, isQueryDevtoolsFaultArmed, isQueryDevtoolsFaultInjectionEnabled, isQueryErrorResponse, isQueryStateCancelled, isQueryStateFailure, isQueryStateLoading, isQueryStatePrepared, isQueryStateSuccess, isRequestError, isSymfonyError, isSymfonyFormViolationListError, isSymfonyListError, isSymfonyPagerfantaOutOfRangeError, isUnderInvalidatedUrl, legacyPrepareFallbackInjector, legacyPrepareWithoutInjectionContext, mapToPaginated, mapViolationsToFormErrors, maybeExecute, measureQueryDevtoolsPayload, mergeHeaders, nestedEffect, noteQueryFormRead, numberArrayQueryField, pagedQueryStackNextPageCalledWithoutPreviousPage, pagedQueryStackPageBiggerThanTotalPages, pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage, paginatedEntityValueUpdater, parseAllXhrResponseHeaders, parseHttpErrorCodeToMessageDe, parseHttpErrorCodeToMessageEn, parseHttpErrorCodeToTitleDe, parseHttpErrorCodeToTitleEn, parseQueryRoute, pathParamsMissingInRouteFunctionError, provideInfinityQueryResponseDelay, provideLegacyPrepareFallback, provideQueryClientForDevtools, provideQueryDevtools, queryArrayComputed, queryClientFeatureUsedMultipleTimes, queryComputed, queryComputedTillTruthy, queryDevtoolsEntries, queryDevtoolsFaults, queryDevtoolsFnDetail, queryDevtoolsResponseHistory, queryErrorMessage, queryErrorMessages, queryExecute, queryFeatureUsedMultipleTimes, queryField, querySequence, querySequenceAlreadyRunning, queryStackTotalQueriesAndExpectedQueriesMismatch, queryStackWithArgsUsed, queryStackWithResponseUpdateUsed, queryStateAlreadyHasKeyError, queryStateCannotTransformError, queryStateDoesNotContainKeyError, queryStateErrorSignal, queryStateLoadingSignal, queryStateResponseSignal, queryStateSignal, registerQueryDevtoolsEntry, registerQueryErrorParser, removeFrom, request, resetExecuteState, resetPageOnError, resolveInvalidationUrl, resolveQueryDevtoolsFault, resolveQueryDevtoolsFaultForAttempt, runDefaultQueryRetry, runQueryErrorParsers, searchQueryField, serializeBody, setDefaultQueryRetryFn, setQueryDevtoolsFault, setQueryDevtoolsFaultResolver, setQueryDevtoolsFormLinksFactory, setQueryDevtoolsOverridesFactory, setQueryDevtoolsRegistrar, setQueryDevtoolsResponseHistory, setQueryDevtoolsStatsFactory, setupQueryDependencies, setupQueryExecuteState, setupQueryState, shouldAutoExecuteGqlQuery, shouldAutoExecuteQuery, shouldCacheQuery, shouldRetryRequest, silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent, skipPaginationPageParamCalculator, smartDuplicateArrayItem, snapshotQueryDevtoolsHandle, sortQueryField, splitQueryConfig, stringArrayQueryField, stringifyQueryRouteParts, sumQueryDevtoolsStats, suppressNextQueryStackDevtools, switchQueryCollectionState, switchQueryState, symfonyQueryErrorParser, takeUntilResponse, toQuerySignal, toQuerySubject, tokensNotAvailableInsideAuthAndExec, tombstoneOf, transformArrayResponse, transformExecStateToQueryState, transformGql, transformMethod, transformPaginatedResponse, transformToBoolean, transformToBooleanArray, transformToDate, transformToDateArray, transformToNumber, transformToNumberArray, transformToSort, transformToSortQueryParam, transformToString, transformToStringArray, uncacheableRequestHasAllowCacheParam, uncacheableRequestHasCacheKeyParam, unwrapQuerySyncMessage, v2BuildQueryCacheKey, v2ExtractExpiresInSeconds, v2ShouldCacheQuery, v2ShouldRetryRequest, validateWithQuery, validateWithV2Query, withArgs, withArgsQueryFeatureMissingButRouteIsFunction, withAuthenticationQuery, withAutoRefresh, withAutoRefreshUsedInManualQuery, withAutoRefreshUsedOnUnsupportedHttpMethod, withBearerAuthMultiTabSync, withDefaultRetry, withErrorHandling, withEthleteApiErrors, withHtmlErrorParsing, withInactivityLogout, withLogging, withMultiTabSync, withPageResetOnError, withPersistentAuth, withPolling, withPollingUsedOnUnsupportedHttpMethod, withQueryPersistence, withRefreshQuery, withResponseUpdate, withSuccessHandling, withSymfonyErrors, withTokenExpirationWarning, withTokenRevocation, withTracking, wrapAsObservableSignal, wrapQuerySyncMessage };
12281
+ export { BasicAuthProvider, BearerAuthFeatureType, BooleanArrayQueryField, CLEAR_QUERY_ARGS, CustomHeaderAuthProvider, DEFAULT_KEEP_UNUSED_FOR, DEFAULT_QUERY_PERSISTENCE_MAX_AGE, DEFAULT_QUERY_PERSISTENCE_MAX_ENTRIES, DEFAULT_QUERY_PERSISTENCE_VERSION, DEFAULT_QUERY_PERSISTENCE_WRITE_DELAY, DateArrayQueryField, DateQueryField, EMPTY_QUERY_DEVTOOLS_FAULT, EntityStore, IGNORED_FILTER_COUNT_FIELDS, INFINITY_QUERY_TOKEN, InfinityQuery, InfinityQueryDirective, InfinityQueryTriggerDirective, LegacyQuery, LegacyQueryCreator, MAX_QUERY_DEVTOOLS_TOMBSTONES, MAX_UNUSED_ENTRIES, NumberArrayQueryField, ParseHttpErrorCodeToMessageDePipe, ParseHttpErrorCodeToMessageEnPipe, ParseHttpErrorCodeToTitleDePipe, ParseHttpErrorCodeToTitleEnPipe, QUERY_CLIENT_DEVTOOLS_TOKEN, QUERY_DEVTOOLS_FAULT_STATUSES, QUERY_PERSISTENCE_STORE_VERSION, QUERY_SYNC_PROTOCOL_VERSION, QueryClientFeatureType, QueryDevtoolsComponent, QueryDirective, QueryFeatureType, QueryField, QueryForm, QueryRuntimeErrorCode, QueryShortNamePipe, QueryStore, SERVER_ERROR_KIND, SERVER_VIOLATION_ERROR_KIND, SPEED_BUFFER_TIME_IN_MS, SearchQueryField, SortQueryField, StringArrayQueryField, V2BearerAuthProvider, V2Query, V2QueryClient, V2QueryCreator, addQueryContainerHandling, applyQueryDevtoolsOverrides, applyQueryFeatures, authExtractTokensResponseMissingAccessToken, authExtractTokensResponseMissingRefreshToken, authExtractTokensResponseNotObject, authProviderFeatureUsedMultipleTimes, booleanArrayQueryField, buildQueryCacheKey, buildQueryString, buildRoute, buildTimestampFromSeconds, castQueryCreatorTypes, circularQueryDependency, circularQueryDependencyChecker, clearQueryDevtoolsFaults, clearQueryDevtoolsTombstones, collectLeafPaths, collectQueryFormLinks, computeQueryAuthHeader, computeQueryBody, computeQueryHeaders, computeQueryMethod, computeQueryQueryParams, consumeSuppressQueryStackDevtools, contentfulGqlLikePaginationAdapter, createAuthGuard, createBaseQuery, createBaseQueryCreator, createBearerAuthProvider, createDeleteQuery, createExecuteFn, createGetQuery, createGqlExecuteFn, createGqlMutationViaGet, createGqlMutationViaPost, createGqlQuery, createGqlQueryCreator, createGqlQueryViaGet, createGqlQueryViaPost, createHttpRequest, createIndexedDbQueryPersistenceAdapter, createInfinityQueryConfig, createLegacyQueryCreator, createNoopQueryPersistenceAdapter, createPagedQueryStack, createPatchQuery, createPersistentAuthFeature, createPostQuery, createPutQuery, createQuery, createQueryClient, createQueryCollection, createQueryCollectionSignal, createQueryCollectionSubject, createQueryContext, createQueryCreator, createQueryDevtoolsFormLinks, createQueryDevtoolsFormLinksRecorder, createQueryDevtoolsOverrides, createQueryDevtoolsOverridesRecorder, createQueryDevtoolsStats, createQueryDevtoolsStatsRecorder, createQueryErrorResponse, createQueryFeature, createQueryInvalidationFilter, createQueryKeyLockManager, createQueryObject, createQueryPersistenceEngine, createQueryRepository, createQuerySnapshotFn, createQueryStack, createQuerySyncEngine, createQuerySyncTransport, createSecureDeleteQuery, createSecureExecuteFactory, createSecureExecuteFn, createSecureGetQuery, createSecureGqlExecuteFn, createSecureGqlMutationViaGet, createSecureGqlMutationViaPost, createSecureGqlQuery, createSecureGqlQueryCreator, createSecureGqlQueryViaGet, createSecureGqlQueryViaPost, createSecurePatchQuery, createSecurePostQuery, createSecurePutQuery, createSecureQuery, createSecureQueryCreator, createTrackingFeature, createWebSocketClient, dateArrayQueryField, dateQueryField, decryptBearer, deepFreeze, def, defineQueryForm, describeQueryDevtoolsFeatures, detectContentTypeHeader, detectPaginationShape, dynLikePaginationAdapter, effectComputed, emptyQueryArgs, ethletePaginationAdapter, executeUntilSettled, extractExpiresInSeconds, extractFormViolations, extractHtmlErrorMessage, extractQuery, fakePaginationAdapter, filterFailure, filterNull, filterQueryStates, filterSuccess, forEachHeader, formatQueryDevtoolsDuration, generateQueryDevtoolsNumberPreset, generateQueryDevtoolsStringPreset, getBearerAuthProviderName, getDefaultHeaders, getQueryClientName, getQueryFeatureUsage, getResponseUrl, ggLikePaginationAdapter, gql, gqlDataPropertyMissingInResponse, hasHeader, hasQueryDevtoolsOverridesAtPath, htmlErrorPayload, htmlQueryErrorParser, ignoreAutoRefresh, injectInfinityQueryResponseDelay, injectQueryContext, insertFrom, invalidBaseRouteError, invalidBodyError, invalidRouteError, invalidStateInsideSecureExecuteFactory, isAutoRefresh, isBasicAuthProvider, isBearerAuthProvider, isClassValidatorError, isCreateGqlQueryOptions, isCustomHeaderAuthProvider, isDateShapedLeaf, isEmptyString, isGqlQueryConfig, isHtmlErrorPayload, isLegacyQuery, isNaN$1 as isNaN, isPageOutOfRangeError, isQuery, isQueryCollection, isQueryDevtoolsEnabled, isQueryDevtoolsFaultArmed, isQueryDevtoolsFaultInjectionEnabled, isQueryErrorResponse, isQueryStateCancelled, isQueryStateFailure, isQueryStateLoading, isQueryStatePrepared, isQueryStateSuccess, isRequestError, isSymfonyError, isSymfonyFormViolationListError, isSymfonyListError, isSymfonyPagerfantaOutOfRangeError, isUnderInvalidatedUrl, legacyPrepareFallbackInjector, legacyPrepareWithoutInjectionContext, mapToPaginated, mapViolationsToFormErrors, maybeExecute, measureQueryDevtoolsPayload, mergeHeaders, nestedEffect, noteQueryFormRead, numberArrayQueryField, pagedQueryStackNextPageCalledWithoutPreviousPage, pagedQueryStackPageBiggerThanTotalPages, pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage, paginatedEntityValueUpdater, parseAllXhrResponseHeaders, parseHttpErrorCodeToMessageDe, parseHttpErrorCodeToMessageEn, parseHttpErrorCodeToTitleDe, parseHttpErrorCodeToTitleEn, parseQueryRoute, pathParamsMissingInRouteFunctionError, provideInfinityQueryResponseDelay, provideLegacyPrepareFallback, provideQueryClientForDevtools, provideQueryDevtools, queryArrayComputed, queryClientFeatureUsedMultipleTimes, queryComputed, queryComputedTillTruthy, queryDevtoolsEntries, queryDevtoolsFaults, queryDevtoolsFnDetail, queryDevtoolsResponseHistory, queryErrorMessage, queryErrorMessages, queryExecute, queryFeatureUsedMultipleTimes, queryField, querySequence, querySequenceAlreadyRunning, queryStackTotalQueriesAndExpectedQueriesMismatch, queryStackWithArgsUsed, queryStackWithResponseUpdateUsed, queryStateAlreadyHasKeyError, queryStateCannotTransformError, queryStateDoesNotContainKeyError, queryStateErrorSignal, queryStateLoadingSignal, queryStateResponseSignal, queryStateSignal, registerQueryDevtoolsEntry, registerQueryErrorParser, removeFrom, request, resetExecuteState, resetPageOnError, resolveInvalidationUrl, resolveQueryDevtoolsFault, resolveQueryDevtoolsFaultForAttempt, runDefaultQueryRetry, runQueryErrorParsers, searchQueryField, serializeBody, setDefaultQueryRetryFn, setQueryDevtoolsFault, setQueryDevtoolsFaultResolver, setQueryDevtoolsFormLinksFactory, setQueryDevtoolsOverridesFactory, setQueryDevtoolsRegistrar, setQueryDevtoolsResponseHistory, setQueryDevtoolsStatsFactory, setupQueryDependencies, setupQueryExecuteState, setupQueryState, shouldAutoExecuteGqlQuery, shouldAutoExecuteQuery, shouldCacheQuery, shouldRetryRequest, silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent, skipPaginationPageParamCalculator, smartDuplicateArrayItem, snapshotQueryDevtoolsHandle, sortQueryField, splitQueryConfig, stringArrayQueryField, stringifyQueryRouteParts, sumQueryDevtoolsStats, suppressNextQueryStackDevtools, switchQueryCollectionState, switchQueryState, symfonyQueryErrorParser, takeUntilResponse, toQuerySignal, toQuerySubject, tokensNotAvailableInsideAuthAndExec, tombstoneOf, transformArrayResponse, transformExecStateToQueryState, transformGql, transformMethod, transformPaginatedResponse, transformToBoolean, transformToBooleanArray, transformToDate, transformToDateArray, transformToNumber, transformToNumberArray, transformToSort, transformToSortQueryParam, transformToString, transformToStringArray, uncacheableRequestHasAllowCacheParam, uncacheableRequestHasCacheKeyParam, unwrapQuerySyncMessage, v2BuildQueryCacheKey, v2ExtractExpiresInSeconds, v2ShouldCacheQuery, v2ShouldRetryRequest, validateWithQuery, validateWithV2Query, withArgs, withArgsQueryFeatureMissingButRouteIsFunction, withAuthenticationQuery, withAutoRefresh, withAutoRefreshUsedInManualQuery, withAutoRefreshUsedOnUnsupportedHttpMethod, withBearerAuthMultiTabSync, withDefaultRetry, withErrorHandling, withEthleteApiErrors, withHtmlErrorParsing, withInactivityLogout, withLogging, withMultiTabSync, withPageResetOnError, withPersistentAuth, withPolling, withPollingUsedOnUnsupportedHttpMethod, withQueryPersistence, withRefreshQuery, withResponseUpdate, withSuccessHandling, withSymfonyErrors, withTokenExpirationWarning, withTokenRevocation, withTracking, wrapAsObservableSignal, wrapQuerySyncMessage };
12167
12282
  //# sourceMappingURL=ethlete-query.mjs.map