@ethlete/query 6.0.0-next.55 → 6.0.0-next.57

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.
@@ -706,7 +706,7 @@ const readSessionEnd = (owner) => sessionEnds.get(owner) ?? null;
706
706
  const noop$2 = () => undefined;
707
707
  let registrar = null;
708
708
  /**
709
- * Installs the real registry. Called by `provideQueryDevtools()`; nothing else may call it.
709
+ * Installs the real registry, or removes it with `null`. Called by `provideQueryDevtools()` and its test reset only.
710
710
  * @internal
711
711
  */
712
712
  const setQueryDevtoolsRegistrar = (fn) => {
@@ -2703,6 +2703,19 @@ const createDestroyedSnapshot = (state, execute) => {
2703
2703
  executionState: frozenObservableSignal({ type: 'failure', error, hasCachedResponse: false }),
2704
2704
  };
2705
2705
  };
2706
+ /** @internal */
2707
+ const createSkippedSnapshot = (query) => ({
2708
+ args: frozenObservableSignal(query.args()),
2709
+ response: frozenObservableSignal(null),
2710
+ latestHttpEvent: frozenObservableSignal(CANCEL_EVENT),
2711
+ loading: frozenObservableSignal(null),
2712
+ error: frozenObservableSignal(null),
2713
+ lastTimeExecutedAt: frozenObservableSignal(query.lastTimeExecutedAt()),
2714
+ triggeredBy: frozenObservableSignal(query.triggeredBy()),
2715
+ isAlive: frozenObservableSignal(false),
2716
+ id: frozenObservableSignal(query.id()),
2717
+ executionState: frozenObservableSignal(null),
2718
+ });
2706
2719
  const createQuerySnapshotFn = (options) => {
2707
2720
  const { state } = options;
2708
2721
  const context = injectQueryContext();
@@ -3179,21 +3192,29 @@ const queryExecute = (options) => {
3179
3192
  const defaultRunOptions = state.subtle.defaultRunOptions();
3180
3193
  const runQueryOptions = defaultRunOptions || options.options ? { ...defaultRunOptions, ...options.options } : undefined;
3181
3194
  const onRequest = state.subtle.beforeExecute()?.(args);
3182
- const { key, request, executed } = deps.client.repository.request({
3183
- route: creatorInternals.route,
3184
- method: creatorInternals.method,
3185
- args,
3186
- creatorOptions: creator,
3187
- retryFn: creator?.retryFn,
3188
- consumerDestroyRef: deps.destroyRef,
3189
- key: queryConfig.key,
3190
- previousKey: executeState.previousKey(),
3191
- runQueryOptions,
3192
- isSecure,
3193
- isRefreshable,
3194
- silenceUncacheableAllowCacheError: queryConfig.silenceUncacheableAllowCacheError,
3195
- tags: creator?.tags ? resolveQueryTags(creator.tags, args) : undefined,
3196
- });
3195
+ let requestResult;
3196
+ try {
3197
+ requestResult = deps.client.repository.request({
3198
+ route: creatorInternals.route,
3199
+ method: creatorInternals.method,
3200
+ args,
3201
+ creatorOptions: creator,
3202
+ retryFn: creator?.retryFn,
3203
+ consumerDestroyRef: deps.destroyRef,
3204
+ key: queryConfig.key,
3205
+ previousKey: executeState.previousKey(),
3206
+ runQueryOptions,
3207
+ isSecure,
3208
+ isRefreshable,
3209
+ silenceUncacheableAllowCacheError: queryConfig.silenceUncacheableAllowCacheError,
3210
+ tags: creator?.tags ? resolveQueryTags(creator.tags, args) : undefined,
3211
+ });
3212
+ }
3213
+ catch (error) {
3214
+ onRequest?.(null);
3215
+ throw error;
3216
+ }
3217
+ const { key, request, executed } = requestResult;
3197
3218
  executeState.previousKey.set(key);
3198
3219
  state.lastTimeExecutedAt.set(Date.now());
3199
3220
  state.lastTriggeredBy.set(runQueryOptions?.triggeredBy ?? null);
@@ -3267,11 +3288,12 @@ const createExecuteFn = (executeOptions) => {
3267
3288
  const exec = (executeArgs) => untracked(() => {
3268
3289
  const { args = executeOptions.state.args(), options } = executeArgs ?? {};
3269
3290
  if (skipParkedExecution(executeOptions.state, args, executeOptions.creatorInternals.route))
3270
- return;
3291
+ return false;
3271
3292
  circularChecker.check(args);
3272
3293
  aborter.capture();
3273
3294
  recordExecutionArgs(executeOptions.state, args, options);
3274
3295
  queryExecute({ executeOptions, executeState, args, options });
3296
+ return true;
3275
3297
  });
3276
3298
  exec['reset'] = reset;
3277
3299
  exec['abort'] = () => aborter.abort();
@@ -5628,6 +5650,7 @@ const DEFAULT_KEEP_UNUSED_FOR = 300_000;
5628
5650
  * `unbind`) must never grow unbounded - the least recently orphaned entries are dropped first.
5629
5651
  */
5630
5652
  const MAX_UNUSED_ENTRIES = 50;
5653
+ const MAX_TIMEOUT_DELAY = 2 ** 31 - 1;
5631
5654
  const createQueryRepository = (config) => {
5632
5655
  const cache = new Map();
5633
5656
  const eventsSubject = new Subject();
@@ -5771,8 +5794,6 @@ const createQueryRepository = (config) => {
5771
5794
  eventsSubject.next({ type: 'entry-destroyed', key, isSecure: cacheEntry.isSecure, method, url, cause });
5772
5795
  };
5773
5796
  const cancelEviction = (cacheEntry) => {
5774
- if (cacheEntry.evictTimer === undefined)
5775
- return;
5776
5797
  clearTimeout(cacheEntry.evictTimer);
5777
5798
  cacheEntry.evictTimer = undefined;
5778
5799
  cacheEntry.unusedSince = undefined;
@@ -5790,7 +5811,9 @@ const createQueryRepository = (config) => {
5790
5811
  const retain = (key, cacheEntry) => {
5791
5812
  clearTimeout(cacheEntry.evictTimer);
5792
5813
  cacheEntry.unusedSince = Date.now();
5793
- cacheEntry.evictTimer = setTimeout(() => evict(key, 'expired'), cacheEntry.keepUnusedFor);
5814
+ cacheEntry.evictTimer = Number.isFinite(cacheEntry.keepUnusedFor)
5815
+ ? setTimeout(() => evict(key, 'expired'), Math.min(cacheEntry.keepUnusedFor, MAX_TIMEOUT_DELAY))
5816
+ : undefined;
5794
5817
  enforceUnusedEntryLimit();
5795
5818
  };
5796
5819
  /**
@@ -6272,8 +6295,6 @@ const createSecureExecuteFactory = (options) => {
6272
6295
  args: executeArgs?.args ?? options.state.args(),
6273
6296
  options: executeArgs?.options,
6274
6297
  };
6275
- if (skipParkedExecution(options.state, execArgsWithDefaults.args, options.route))
6276
- return;
6277
6298
  circularChecker.check(execArgsWithDefaults.args);
6278
6299
  hasExecuted = true;
6279
6300
  lastExecuteArgs = execArgsWithDefaults;
@@ -6349,7 +6370,12 @@ const createSecureExecuteFactory = (options) => {
6349
6370
  throw invalidStateInsideSecureExecuteFactory();
6350
6371
  }
6351
6372
  };
6352
- const untrackedExec = (executeArgs) => untracked(() => exec(executeArgs));
6373
+ const untrackedExec = (executeArgs) => untracked(() => {
6374
+ if (skipParkedExecution(options.state, executeArgs?.args ?? options.state.args(), options.route))
6375
+ return false;
6376
+ exec(executeArgs);
6377
+ return true;
6378
+ });
6353
6379
  untrackedExec['reset'] = () => untracked(reset);
6354
6380
  untrackedExec['abort'] = () => aborter.abort(cancelPending);
6355
6381
  untrackedExec['aborted$'] = aborter.aborted$;
@@ -6450,9 +6476,12 @@ const createQueryGroup = (members) => {
6450
6476
  key,
6451
6477
  query,
6452
6478
  execute: (executeArgs) => {
6453
- query.execute(executeArgs);
6479
+ const ran = query.execute(executeArgs);
6480
+ if (ran === false)
6481
+ return false;
6454
6482
  latestMember.set(member);
6455
6483
  executions.next(member);
6484
+ return true;
6456
6485
  },
6457
6486
  };
6458
6487
  return { ...query, execute: member.execute };
@@ -6573,7 +6602,7 @@ const withOptimisticUpdate = (options) => {
6573
6602
  settleOp(request, op, confirmed);
6574
6603
  };
6575
6604
  return (request) => {
6576
- if (!request.loading())
6605
+ if (!request?.loading())
6577
6606
  return settle(null);
6578
6607
  let settled = false;
6579
6608
  const subscription = request.events$.subscribe({
@@ -6603,8 +6632,9 @@ const withOptimisticUpdate = (options) => {
6603
6632
 
6604
6633
  const isAbortedSnapshot = (snapshot) => snapshot.latestHttpEvent()?.type === 'cancel' && snapshot.error() === null;
6605
6634
  const executeAndSettle$ = (query, executeArgs, emitAborted) => defer(() => {
6606
- query.execute(executeArgs);
6607
- const snapshot = query.createSnapshot();
6635
+ const ran = query.execute(executeArgs);
6636
+ // `false` means a parked query dropped the call: nothing runs, so a live snapshot would never settle.
6637
+ const snapshot = ran === false ? createSkippedSnapshot(query) : query.createSnapshot();
6608
6638
  return snapshot.isAlive.asObservable().pipe(filter((isAlive) => !isAlive), take(1),
6609
6639
  // The stream completes without emitting when the query's injector is torn down mid-execution.
6610
6640
  defaultIfEmpty(false), map(() => snapshot), filter((settled) => emitAborted || !untracked(() => isAbortedSnapshot(settled))), finalize(() => untracked(() => {
@@ -6619,7 +6649,7 @@ const executeAndSettle$ = (query, executeArgs, emitAborted) => defer(() => {
6619
6649
  *
6620
6650
  * Unsubscribing before it settles aborts the execution like `query.abort()`, the way unsubscribing
6621
6651
  * from `HttpClient` cancels its request. An execution stopped by `query.abort()` completes the stream
6622
- * without a value.
6652
+ * without a value, and so does a call a parked query (a `withArgs` source returning `null`) drops.
6623
6653
  *
6624
6654
  * A cancelled execution settles too - the entry was evicted, unbound by a logout, or the scope that
6625
6655
  * owns the query was destroyed. The snapshot then reports the execution as a failure whose error
@@ -6631,8 +6661,8 @@ const executeUntilSettled$ = (query, executeArgs) => executeAndSettle$(query, ex
6631
6661
  * signal-forms `submit()` action mapping server violations onto the form via
6632
6662
  * `mapViolationsToFormErrors`. Executes immediately. Prefer {@link executeUntilSettled$} in RxJS code.
6633
6663
  *
6634
- * An execution stopped by `query.abort()` resolves with a snapshot that has no response, no error, a
6635
- * `null` `executionState()` and `latestHttpEvent()` `{ type: 'cancel' }`.
6664
+ * An execution stopped by `query.abort()`, or dropped by a parked query, resolves with a snapshot that
6665
+ * has no response, no error, a `null` `executionState()` and `latestHttpEvent()` `{ type: 'cancel' }`.
6636
6666
  */
6637
6667
  const executeUntilSettled = (query, executeArgs) => firstValueFrom(executeAndSettle$(query, executeArgs, true));
6638
6668
 
@@ -7066,6 +7096,17 @@ const defaultExtractTokens = (response) => {
7066
7096
  }
7067
7097
  return { accessToken: response['accessToken'], refreshToken: response['refreshToken'] };
7068
7098
  };
7099
+ const subjectOf = (token) => {
7100
+ const payload = decryptBearer$1(token);
7101
+ return typeof payload?.sub === 'string' || typeof payload?.sub === 'number' ? payload.sub : null;
7102
+ };
7103
+ const isDifferentUser = (options) => {
7104
+ const previous = subjectOf(options.previous);
7105
+ const next = subjectOf(options.next);
7106
+ if (previous !== null && next !== null)
7107
+ return previous !== next;
7108
+ return options.source === 'session';
7109
+ };
7069
7110
  const deriveExecutionStateType = (builder, triggeredBy) => {
7070
7111
  if (triggeredBy === 'persistent-auth')
7071
7112
  return 'autoLogin';
@@ -7114,7 +7155,7 @@ const setupBearerQueryRegistry = (builders, context) => {
7114
7155
  const response = outcome.response;
7115
7156
  try {
7116
7157
  const tokens = extractTokens(response);
7117
- applyTokens(tokens.accessToken, tokens.refreshToken);
7158
+ applyTokens(tokens.accessToken, tokens.refreshToken, type === 'tokenRefresh' ? 'rotation' : 'session');
7118
7159
  executionState.set({ type, state: 'success', response });
7119
7160
  }
7120
7161
  catch (extractError) {
@@ -7276,11 +7317,22 @@ const createBearerAuthProviderImpl = (config) => {
7276
7317
  ...(ngDevMode ? [{ debugName: "sessionEndCause" }] : /* istanbul ignore next */ []));
7277
7318
  const sessionEnd = signal(null, /* @ts-ignore */
7278
7319
  ...(ngDevMode ? [{ debugName: "sessionEnd" }] : /* istanbul ignore next */ []));
7279
- const applyTokens = (access, refresh) => {
7320
+ const sessionId = signal(0, /* @ts-ignore */
7321
+ ...(ngDevMode ? [{ debugName: "sessionId" }] : /* istanbul ignore next */ []));
7322
+ const applyTokens = (access, refresh, source = 'rotation') => {
7323
+ const previousAccess = untracked(accessToken);
7324
+ const startsSession = previousAccess === null || isDifferentUser({ previous: previousAccess, next: access, source });
7280
7325
  accessToken.set(access);
7281
7326
  refreshToken.set(refresh);
7282
7327
  sessionStatus.set('authenticated');
7283
7328
  sessionEndCause.set(null);
7329
+ if (startsSession)
7330
+ sessionId.update((id) => id + 1);
7331
+ // After the new tokens are in force: unbindAllSecure re-arms every auto-executing secure query, which
7332
+ // would otherwise run again on the previous user's token.
7333
+ if (previousAccess !== null && startsSession) {
7334
+ untracked(() => queryClient.repository.unbindAllSecure());
7335
+ }
7284
7336
  // Emit on the next microtask so that synchronous reactive work triggered by applying
7285
7337
  // the tokens (signals/effects) has a chance to settle before subscribers react.
7286
7338
  // This avoids rare races where a subscriber reacting to the emission would run
@@ -7295,7 +7347,7 @@ const createBearerAuthProviderImpl = (config) => {
7295
7347
  // auto-login or a refresh still out with an older token can only report a failure that no longer
7296
7348
  // means anything - or apply the pair it comes back with over this one.
7297
7349
  invalidateTokenIssuingExecutions();
7298
- applyTokens(access, refresh);
7350
+ applyTokens(access, refresh, 'session');
7299
7351
  executionState.set({ type: 'tokenSeed', state: 'success' });
7300
7352
  };
7301
7353
  const { queries, hasTokenIssuingExecutionInFlight, invalidateTokenIssuingExecutions } = setupBearerQueryRegistry(config.queries, {
@@ -7443,6 +7495,7 @@ const createBearerAuthProviderImpl = (config) => {
7443
7495
  executionState: executionState.asReadonly(),
7444
7496
  sessionStatus: sessionStatus.asReadonly(),
7445
7497
  sessionEndCause: sessionEndCause.asReadonly(),
7498
+ sessionId: sessionId.asReadonly(),
7446
7499
  session: computed(() => ({
7447
7500
  status: sessionStatus(),
7448
7501
  endCause: sessionEndCause(),
@@ -8817,7 +8870,7 @@ const createTrackingFeature = (context, config) => runInInjectionContext(context
8817
8870
 
8818
8871
  // Generated from package.json by tools/scripts/generate-version.js - do not edit.
8819
8872
  /** The version of `@ethlete/query` this build was cut from. */
8820
- const QUERY_VERSION = '6.0.0-next.55';
8873
+ const QUERY_VERSION = '6.0.0-next.57';
8821
8874
 
8822
8875
  const ethlete = {};
8823
8876
  let app = null;
@@ -12852,6 +12905,14 @@ const warnAboutIgnoredOptions = (options) => {
12852
12905
  return;
12853
12906
  console.warn(`provideQueryDevtools() ran before on this page, so ${ignored.join(', ')} of this call ${ignored.length === 1 ? 'is' : 'are'} ignored. The devtools read these options once, from the first call. Declare them there.`);
12854
12907
  };
12908
+ /**
12909
+ * Undoes the latch `provideQueryDevtools()` sets, so a later spec in the same worker sees the devtools
12910
+ * disabled again. For specs only.
12911
+ */
12912
+ const ɵresetQueryDevtoolsForTesting = () => {
12913
+ queryDevtoolsInitialized = false;
12914
+ setQueryDevtoolsRegistrar(null);
12915
+ };
12855
12916
  /**
12856
12917
  * Enables the `@ethlete/query` devtools. Add this to your application providers (e.g. in
12857
12918
  * `bootstrapApplication`) to make query clients, queries, stacks, sequences and auth providers
@@ -12937,7 +12998,7 @@ const transformGql = (str) => {
12937
12998
  return (variables, transport = 'GET') => {
12938
12999
  const data = { query: isDevMode() ? normalizedStr : (minified ??= minifyGql(normalizedStr)) };
12939
13000
  if (variables) {
12940
- data['variables'] = transport === 'GET' ? JSON.stringify(variables) : variables;
13001
+ data['variables'] = transport === 'GET' ? JSON.stringify(sortQueryParamKeys(variables)) : variables;
12941
13002
  }
12942
13003
  if (operationName) {
12943
13004
  data['operationName'] = operationName;
@@ -12963,7 +13024,8 @@ const gqlTransformerFor = (creatorInternals) => {
12963
13024
  };
12964
13025
  const gql = (strings, ...values) => {
12965
13026
  const str = strings.reduce((acc, cur, i) => {
12966
- return acc + cur + (values[i] ?? '');
13027
+ const value = values[i];
13028
+ return acc + cur + (value === false || value === null || value === undefined ? '' : value);
12967
13029
  }, '');
12968
13030
  return str;
12969
13031
  };
@@ -12977,7 +13039,7 @@ const createGqlExecuteFn = (executeOptions) => {
12977
13039
  const exec = (executeArgs) => untracked(() => {
12978
13040
  const { args = executeOptions.state.args(), options } = executeArgs ?? {};
12979
13041
  if (skipParkedExecution(executeOptions.state, args, executeOptions.creator?.route))
12980
- return;
13042
+ return false;
12981
13043
  circularChecker.check(args);
12982
13044
  let gqlParams = gqlTransformerFor(executeOptions.creatorInternals)(args?.variables, executeOptions.creatorInternals.transport);
12983
13045
  if (args?.queryParams && executeOptions.creatorInternals.transport === 'GET') {
@@ -13017,6 +13079,7 @@ const createGqlExecuteFn = (executeOptions) => {
13017
13079
  options,
13018
13080
  isRefreshable: executeOptions.creatorInternals.method === 'QUERY',
13019
13081
  });
13082
+ return true;
13020
13083
  });
13021
13084
  exec['reset'] = reset;
13022
13085
  exec['abort'] = () => aborter.abort();
@@ -13233,7 +13296,7 @@ const v2ExtractExpiresInSeconds = (headers) => {
13233
13296
  // In seconds
13234
13297
  let expiresIn = null;
13235
13298
  let maxAge = null;
13236
- if (cacheControl?.includes('no-cache')) {
13299
+ if (cacheControl?.includes('no-cache') || cacheControl?.includes('no-store')) {
13237
13300
  return null;
13238
13301
  }
13239
13302
  if (cacheControl?.includes('max-age')) {
@@ -13248,11 +13311,11 @@ const v2ExtractExpiresInSeconds = (headers) => {
13248
13311
  maxAge = parseInt(m);
13249
13312
  }
13250
13313
  }
13251
- if (maxAge && age) {
13314
+ if (maxAge !== null && age) {
13252
13315
  const ageSeconds = parseInt(age);
13253
13316
  expiresIn = maxAge - ageSeconds;
13254
13317
  }
13255
- else if (maxAge) {
13318
+ else if (maxAge !== null) {
13256
13319
  expiresIn = maxAge / 2; // We assume the response is half way to its expiration
13257
13320
  }
13258
13321
  else if (expires) {
@@ -13278,6 +13341,9 @@ const serializeBody = (body) => {
13278
13341
  if (body === null || body === undefined) {
13279
13342
  return null;
13280
13343
  }
13344
+ if (ArrayBuffer.isView(body)) {
13345
+ return body;
13346
+ }
13281
13347
  if (body instanceof ArrayBuffer ||
13282
13348
  body instanceof Blob ||
13283
13349
  body instanceof FormData ||
@@ -13321,9 +13387,12 @@ const detectContentTypeHeader = (body) => {
13321
13387
  return body.type || null;
13322
13388
  }
13323
13389
  // Array buffers have unknown contents and thus no type can be inferred.
13324
- if (body instanceof ArrayBuffer) {
13390
+ if (body instanceof ArrayBuffer || ArrayBuffer.isView(body)) {
13325
13391
  return null;
13326
13392
  }
13393
+ if (body instanceof URLSearchParams) {
13394
+ return 'application/x-www-form-urlencoded;charset=UTF-8';
13395
+ }
13327
13396
  // Technically, strings could be a form of JSON data, but it's safe enough
13328
13397
  // to assume they're plain strings.
13329
13398
  if (typeof body === 'string') {
@@ -13433,9 +13502,9 @@ const request = (config) => {
13433
13502
  const body = config.body ?? null;
13434
13503
  const url = config.urlWithParams.split('?')[0] || '';
13435
13504
  const retryFn = config.retryFn || v2ShouldRetryRequest;
13436
- let currentRetryCount = 0;
13437
- let retryTimeout = null;
13438
13505
  return new Observable((observer) => {
13506
+ let currentRetryCount = 0;
13507
+ let retryTimeout = null;
13439
13508
  const xhr = new XMLHttpRequest();
13440
13509
  const reqBody = serializeBody(body);
13441
13510
  const setupXhr = () => {
@@ -18458,9 +18527,12 @@ const createBranch = (fields, initial, injector) => {
18458
18527
  ...(ngDevMode ? [{ debugName: "committed" }] : /* istanbul ignore next */ []));
18459
18528
  const tree = form(model, { injector });
18460
18529
  let pendingTimer = null;
18530
+ const defaultsRevision = signal(0, /* @ts-ignore */
18531
+ ...(ngDevMode ? [{ debugName: "defaultsRevision" }] : /* istanbul ignore next */ []));
18461
18532
  const defaultFor = (key) => {
18462
18533
  const value = resolveDefault(fields[key]);
18463
18534
  defaults[key] = value;
18535
+ defaultsRevision.update((revision) => revision + 1);
18464
18536
  return value;
18465
18537
  };
18466
18538
  const normalizedLive = computed(() => normalizeLive(fields, model(), defaults), /* @ts-ignore */
@@ -18509,7 +18581,10 @@ const createBranch = (fields, initial, injector) => {
18509
18581
  fields: tree,
18510
18582
  value: committed.asReadonly(),
18511
18583
  liveValue: model.asReadonly(),
18512
- activeFilterCount: computed(() => computeFilterCount(fields, committed(), defaults)),
18584
+ activeFilterCount: computed(() => {
18585
+ defaultsRevision();
18586
+ return computeFilterCount(fields, committed(), defaults);
18587
+ }),
18513
18588
  setValue: (value, options) => write(clone(value), options),
18514
18589
  patchValue: (value, options) => write({ ...model(), ...value }, options),
18515
18590
  resetFieldToDefault: (key, options) => write({ ...model(), [key]: defaultFor(key) }, options),
@@ -18555,9 +18630,12 @@ const defineQueryForm = (config) => {
18555
18630
  const prefix = config.queryParamPrefix;
18556
18631
  const defaults = buildDefaults(fieldDefs);
18557
18632
  const defaultValue = clone(defaults);
18633
+ const defaultsRevision = signal(0, /* @ts-ignore */
18634
+ ...(ngDevMode ? [{ debugName: "defaultsRevision" }] : /* istanbul ignore next */ []));
18558
18635
  const defaultFor = (key) => {
18559
18636
  const value = resolveDefault(fieldDefs[key]);
18560
18637
  defaults[key] = value;
18638
+ defaultsRevision.update((revision) => revision + 1);
18561
18639
  defaultValue[key] = clone(value);
18562
18640
  return value;
18563
18641
  };
@@ -18582,7 +18660,10 @@ const defineQueryForm = (config) => {
18582
18660
  const urlNavigationMarker = {};
18583
18661
  const pathOf = (tree) => router.serializeUrl(tree).split(/[?#]/)[0];
18584
18662
  const fields = form(model);
18585
- const activeFilterCount = computed(() => computeFilterCount(fieldDefs, committed(), defaults), /* @ts-ignore */
18663
+ const activeFilterCount = computed(() => {
18664
+ defaultsRevision();
18665
+ return computeFilterCount(fieldDefs, committed(), defaults);
18666
+ }, /* @ts-ignore */
18586
18667
  ...(ngDevMode ? [{ debugName: "activeFilterCount" }] : /* istanbul ignore next */ []));
18587
18668
  const paramKey = (key) => {
18588
18669
  if (!prefix)
@@ -18679,6 +18760,7 @@ const defineQueryForm = (config) => {
18679
18760
  writes.set(urlNavigationMarker, extras.version);
18680
18761
  const info = writes.size ? { queryFormWrites: writes } : undefined;
18681
18762
  router.navigate([], {
18763
+ ...observeOptions?.navigationExtras,
18682
18764
  queryParams,
18683
18765
  queryParamsHandling: 'replace',
18684
18766
  fragment: base.fragment ?? undefined,
@@ -19107,7 +19189,7 @@ const createWebSocketClient = (options) => {
19107
19189
  auth: auth ? (cb) => cb(typeof auth === 'function' ? auth() : auth) : undefined,
19108
19190
  });
19109
19191
  const rooms = new Map();
19110
- const endedRoomHolders = new Map();
19192
+ const holds = new Set();
19111
19193
  const joinsDeliveredThisConnection = new Set();
19112
19194
  const joinsDeliveredToClosedConnection = new Set();
19113
19195
  const isConnected = signal(false, /* @ts-ignore */
@@ -19157,57 +19239,45 @@ const createWebSocketClient = (options) => {
19157
19239
  syncDevtoolsRooms();
19158
19240
  return newRoom;
19159
19241
  };
19160
- const joinStaticRoom = (name) => {
19161
- const destroyRef = inject(DestroyRef);
19162
- const roomData = signal(join(name), /* @ts-ignore */
19163
- ...(ngDevMode ? [{ debugName: "roomData" }] : /* istanbul ignore next */ []));
19164
- destroyRef.onDestroy(() => {
19165
- leaveRoom(name);
19166
- roomData.set(null);
19242
+ const holdRoom = (hold, name) => {
19243
+ if (name === hold.name)
19244
+ return;
19245
+ if (hold.name !== null && !hold.parked)
19246
+ leaveRoom(hold.name);
19247
+ hold.name = name;
19248
+ if (name === null)
19249
+ hold.parked = false;
19250
+ if (hold.parked)
19251
+ return;
19252
+ hold.room.set(name === null ? null : join(name));
19253
+ };
19254
+ const createHold = () => {
19255
+ const hold = { name: null, parked: false, room: signal(null) };
19256
+ holds.add(hold);
19257
+ inject(DestroyRef).onDestroy(() => {
19258
+ holdRoom(hold, null);
19259
+ holds.delete(hold);
19167
19260
  });
19168
- return roomData.asReadonly();
19261
+ return hold;
19169
19262
  };
19170
19263
  const joinRoom = (room) => {
19171
- if (typeof room === 'string')
19172
- return joinStaticRoom(room);
19173
- const roomFn = room;
19174
- const roomData = signal(null, /* @ts-ignore */
19175
- ...(ngDevMode ? [{ debugName: "roomData" }] : /* istanbul ignore next */ []));
19176
- let joinedRoomName = null;
19177
- effect(() => {
19178
- const current = roomFn() || null;
19179
- untracked(() => {
19180
- if (current === joinedRoomName)
19181
- return;
19182
- if (joinedRoomName) {
19183
- leaveRoom(joinedRoomName);
19184
- joinedRoomName = null;
19185
- }
19186
- if (current) {
19187
- joinedRoomName = current;
19188
- roomData.set(join(current));
19189
- }
19190
- else {
19191
- roomData.set(null);
19192
- }
19264
+ const hold = createHold();
19265
+ if (typeof room === 'string') {
19266
+ holdRoom(hold, room);
19267
+ }
19268
+ else {
19269
+ effect(() => {
19270
+ const current = room() || null;
19271
+ untracked(() => holdRoom(hold, current));
19193
19272
  });
19194
- });
19195
- inject(DestroyRef).onDestroy(() => {
19196
- if (joinedRoomName) {
19197
- leaveRoom(joinedRoomName);
19198
- joinedRoomName = null;
19199
- roomData.set(null);
19200
- }
19201
- });
19202
- return roomData.asReadonly();
19273
+ }
19274
+ return hold.room.asReadonly();
19203
19275
  };
19204
19276
  const leaveRoom = (room) => {
19205
- const endedHolders = endedRoomHolders.get(room);
19206
- if (endedHolders !== undefined) {
19207
- if (endedHolders > 1)
19208
- endedRoomHolders.set(room, endedHolders - 1);
19209
- else
19210
- endedRoomHolders.delete(room);
19277
+ const parkedHold = [...holds].find((hold) => hold.parked && hold.name === room);
19278
+ if (parkedHold) {
19279
+ parkedHold.name = null;
19280
+ parkedHold.parked = false;
19211
19281
  return;
19212
19282
  }
19213
19283
  const joinedRoom = rooms.get(room);
@@ -19230,10 +19300,9 @@ const createWebSocketClient = (options) => {
19230
19300
  let reconnectTimer = null;
19231
19301
  let connectedAt = null;
19232
19302
  let destroyed = false;
19233
- let suspended = false;
19234
19303
  /** socket.io stops reconnecting after a server disconnect or a rejected handshake, so the client takes over. */
19235
19304
  const scheduleReconnect = () => {
19236
- if (reconnectTimer !== null || destroyed || suspended)
19305
+ if (reconnectTimer !== null || destroyed)
19237
19306
  return;
19238
19307
  const delay = Math.min(RECONNECT_BASE_DELAY * 2 ** reconnectAttempt, RECONNECT_MAX_DELAY);
19239
19308
  reconnectAttempt++;
@@ -19323,22 +19392,39 @@ const createWebSocketClient = (options) => {
19323
19392
  });
19324
19393
  setupWebSocketConnectionListener();
19325
19394
  setupWebSocketListener();
19395
+ const dropBufferedEmits = () => {
19396
+ if (socket.sendBuffer)
19397
+ socket.sendBuffer.length = 0;
19398
+ };
19326
19399
  const endSession = () => {
19327
- suspended = true;
19328
19400
  if (reconnectTimer !== null) {
19329
19401
  clearTimeout(reconnectTimer);
19330
19402
  reconnectTimer = null;
19331
19403
  }
19404
+ dropBufferedEmits();
19332
19405
  socket.disconnect();
19333
- for (const [name, room] of rooms) {
19334
- endedRoomHolders.set(name, (endedRoomHolders.get(name) ?? 0) + room.joinCount);
19335
- room.messages.complete();
19406
+ for (const hold of holds) {
19407
+ if (hold.name === null || hold.parked)
19408
+ continue;
19409
+ hold.parked = true;
19410
+ hold.room.set(null);
19336
19411
  }
19412
+ for (const room of rooms.values())
19413
+ room.messages.complete();
19337
19414
  rooms.clear();
19415
+ joinsDeliveredThisConnection.clear();
19416
+ joinsDeliveredToClosedConnection.clear();
19338
19417
  syncDevtoolsRooms();
19339
19418
  };
19419
+ const rejoinParkedRooms = () => {
19420
+ for (const hold of holds) {
19421
+ if (!hold.parked || hold.name === null)
19422
+ continue;
19423
+ hold.parked = false;
19424
+ hold.room.set(join(hold.name));
19425
+ }
19426
+ };
19340
19427
  const startConnection = () => {
19341
- suspended = false;
19342
19428
  reconnectAttempt = 0;
19343
19429
  socket.connect();
19344
19430
  };
@@ -19346,30 +19432,41 @@ const createWebSocketClient = (options) => {
19346
19432
  let hasConnected = false;
19347
19433
  let wasAuthenticated = false;
19348
19434
  let handledLogin = null;
19435
+ let handledSessionId = null;
19349
19436
  effect(() => {
19350
19437
  const status = authProvider.sessionStatus();
19351
19438
  const execution = authProvider.executionState();
19439
+ const sessionId = authProvider.sessionId();
19352
19440
  untracked(() => {
19353
19441
  if (destroyed || status === 'unknown' || status === 'restoring')
19354
19442
  return;
19355
19443
  if (status === 'anonymous') {
19356
- if (wasAuthenticated)
19444
+ if (wasAuthenticated) {
19357
19445
  endSession();
19358
- else if (!hasConnected)
19359
19446
  startConnection();
19447
+ }
19448
+ else if (!hasConnected) {
19449
+ startConnection();
19450
+ }
19360
19451
  wasAuthenticated = false;
19361
19452
  hasConnected = true;
19362
19453
  return;
19363
19454
  }
19364
- const login = execution?.type === 'login' && execution.state === 'success' ? execution : null;
19365
- const startedSession = !wasAuthenticated || (login !== null && login !== handledLogin);
19455
+ const login = (execution?.type === 'login' || execution?.type === 'tokenSeed') && execution.state === 'success'
19456
+ ? execution
19457
+ : null;
19458
+ const startedSession = !wasAuthenticated || sessionId !== handledSessionId || (login !== null && login !== handledLogin);
19366
19459
  if (login)
19367
19460
  handledLogin = login;
19461
+ handledSessionId = sessionId;
19368
19462
  wasAuthenticated = true;
19369
- if (!hasConnected)
19463
+ if (!hasConnected) {
19370
19464
  startConnection();
19465
+ }
19371
19466
  else if (startedSession) {
19467
+ dropBufferedEmits();
19372
19468
  socket.disconnect();
19469
+ rejoinParkedRooms();
19373
19470
  startConnection();
19374
19471
  }
19375
19472
  hasConnected = true;
@@ -19425,5 +19522,5 @@ const createServerWebSocketClient = () => {
19425
19522
  * Generated bundle index. Do not edit.
19426
19523
  */
19427
19524
 
19428
- export { AuthBearerRefreshStrategy, BasicAuthProvider, BearerAuthFeatureType, BooleanArrayQueryField, 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, EntityStore, IGNORED_FILTER_COUNT_FIELDS, INFINITY_QUERY_TOKEN, IS_QUERY_REQUEST, InfinityQuery, InfinityQueryDirective, InfinityQueryTriggerDirective, LegacyQuery, LegacyQueryCreator, MAX_UNUSED_ENTRIES, NumberArrayQueryField, ParseHttpErrorCodeToMessageDePipe, ParseHttpErrorCodeToMessageEnPipe, ParseHttpErrorCodeToTitleDePipe, ParseHttpErrorCodeToTitleEnPipe, QUERY_CLIENT_DEVTOOLS_TOKEN, QUERY_PERSISTENCE_STORE_VERSION, QUERY_SYNC_PROTOCOL_VERSION, QUERY_VERSION, QueryClientFeatureType, QueryDevtoolsComponent, QueryDirective, QueryFeatureType, QueryField, QueryForm, QueryRuntimeErrorCode, QueryShortNamePipe, QueryStateType, QueryStore, SERVER_ERROR_KIND, SERVER_VIOLATION_ERROR_KIND, SPEED_BUFFER_TIME_IN_MS, SearchQueryField, SortQueryField, StringArrayQueryField, V2BearerAuthProvider, V2Query, V2QueryClient, V2QueryCreator, addQueryContainerHandling, applyQueryFeatures, authAccessTokenExpiryUnreadable, authExtractTokensResponseMissingAccessToken, authExtractTokensResponseMissingRefreshToken, authExtractTokensResponseNotObject, authProviderFeatureUsedMultipleTimes, booleanArrayQueryField, buildQueryCacheKey, buildQueryString, buildRoute, buildTimestampFromSeconds, castQueryCreatorTypes, circularQueryDependency, circularQueryDependencyChecker, clearQueryDevtoolsTokenTtl, computeQueryAuthHeader, computeQueryBody, computeQueryHeaders, computeQueryMethod, computeQueryQueryParams, contentfulGqlLikePaginationAdapter, createAuthGuard, createBaseQuery, createBaseQueryCreator, createBearerAuthProvider, createDefaultRetryFn, createDeleteQuery, createExecuteFn, createGetQuery, createGqlExecuteFn, createGqlMutationViaGet, createGqlMutationViaPost, createGqlQuery, createGqlQueryCreator, createGqlQueryViaGet, createGqlQueryViaPost, createHeadQuery, createHttpRequest, createIndexedDbQueryPersistenceAdapter, createInfinityQueryConfig, createLegacyQueryCreator, createNoopQueryPersistenceAdapter, createOptionsQuery, createPagedQueryStack, createPatchQuery, createPersistentAuthFeature, createPostQuery, createPutQuery, createQuery, createQueryBatch, createQueryClient, createQueryCollection, createQueryCollectionSignal, createQueryCollectionSubject, createQueryContext, createQueryCreator, createQueryErrorResponse, createQueryFeature, createQueryGroup, createQueryInvalidationFilter, createQueryKeyLockManager, createQueryObject, createQueryPersistenceEngine, createQueryRepository, createQuerySnapshotFn, createQueryStack, createQuerySubmission, createQuerySyncEngine, createQuerySyncTransport, createSecureDeleteQuery, createSecureExecuteFactory, createSecureExecuteFn, createSecureGetQuery, createSecureGqlExecuteFn, createSecureGqlMutationViaGet, createSecureGqlMutationViaPost, createSecureGqlQuery, createSecureGqlQueryCreator, createSecureGqlQueryViaGet, createSecureGqlQueryViaPost, createSecureHeadQuery, createSecureOptionsQuery, createSecurePatchQuery, createSecurePostQuery, createSecurePutQuery, createSecureQuery, createSecureQueryCreator, createTrackingFeature, createWebSocketClient, dateArrayQueryField, dateQueryField, decryptBearer, deepFreeze, def, defineQueryForm, detectContentTypeHeader, dynLikePaginationAdapter, effectComputed, emptyQueryArgs, ethletePaginationAdapter, executeUntilSettled, executeUntilSettled$, extractExpiresInSeconds, extractFormViolations, extractHtmlErrorMessage, extractQuery, fakePaginationAdapter, filterFailure, filterNull, filterQueryStates, filterSuccess, forEachHeader, getDefaultHeaders, getQueryFeatureUsage, getResponseUrl, ggLikePaginationAdapter, gql, gqlDataPropertyMissingInResponse, gqlErrorsInResponse, gqlTransformerFor, hasDefaultQueryRetry, hasHeader, htmlErrorPayload, htmlQueryErrorParser, ignoreAutoRefresh, injectInfinityQueryResponseDelay, injectQueryContext, insertFrom, invalidBaseRouteError, invalidBodyError, invalidRouteError, invalidStateInsideSecureExecuteFactory, invalidateOnSuccess, invalidatesUsedOnRead, isAutoRefresh, isBasicAuthProvider, isBearerAuthProvider, isClassValidatorError, isCreateGqlQueryOptions, isCustomHeaderAuthProvider, isEmptyString, isGqlQueryConfig, isHtmlErrorPayload, isIdempotentQueryMethod, isLegacyQuery, isNaN$1 as isNaN, isPageOutOfRangeError, isQuery, isQueryCollection, isQueryErrorResponse, isQueryStateCancelled, isQueryStateFailure, isQueryStateLoading, isQueryStatePrepared, isQueryStateSuccess, isRequestError, isSymfonyError, isSymfonyFormViolationListError, isSymfonyListError, isSymfonyPagerfantaOutOfRangeError, isUnderInvalidatedUrl, legacyPrepareFallbackInjector, legacyPrepareWithoutInjectionContext, mapToPaginated, mapViolationsToFormErrors, maybeExecute, mergeHeaders, nestedEffect, numberArrayQueryField, pagedQueryStackNextPageCalledWithoutPreviousPage, pagedQueryStackPageBiggerThanTotalPages, pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage, paginatedEntityValueUpdater, parseAllXhrResponseHeaders, parseHttpErrorCodeToMessageDe, parseHttpErrorCodeToMessageEn, parseHttpErrorCodeToTitleDe, parseHttpErrorCodeToTitleEn, pathParamsMissingInRouteFunctionError, provideInfinityQueryResponseDelay, provideLegacyPrepareFallback, provideQueryClientForDevtools, provideQueryDevtools, queryArrayComputed, queryBatchAlreadyRunning, queryBatchWithArgsUsed, queryClientFeatureUsedMultipleTimes, queryComputed, queryComputedTillTruthy, queryCreatedInReactiveContext, queryErrorMessage, queryErrorMessages, queryExecute, queryExecutedAfterDestroyMessage, queryExecutedWhileParkedMessage, queryFeatureUsedMultipleTimes, queryField, querySequence, querySequenceAlreadyRunning, queryStackWithArgsUsed, queryStackWithResponseUpdateUsed, queryStateAlreadyHasKeyError, queryStateCannotTransformError, queryStateDoesNotContainKeyError, queryStateErrorSignal, queryStateLoadingSignal, queryStateResponseSignal, queryStateSignal, recordExecutionArgs, registerQueryErrorParser, removeFrom, request, resetExecuteState, resetPageOnError, resolveInvalidationUrl, resolveQueryHeaders, resolveQueryTags, runDefaultQueryRetry, runQueryErrorParsers, searchQueryField, serializeBody, setDefaultQueryRetryFn, setQueryDevtoolsTokenTtl, setQueryDevtoolsUiMounted, setupQueryDependencies, setupQueryExecuteState, setupQueryState, shouldAutoExecuteGqlQuery, shouldAutoExecuteQuery, shouldCacheQuery, shouldRetryRequest, silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent, skipPaginationPageParamCalculator, skipParkedExecution, sortQueryField, splitQueryConfig, stringArrayQueryField, switchQueryCollectionState, switchQueryState, symfonyQueryErrorParser, tableSortQueryField, takeUntilResponse, toQuerySignal, toQuerySubject, tokensNotAvailableInsideAuthAndExec, transformArrayResponse, transformExecStateToQueryState, transformGql, transformMethod, transformPaginatedResponse, transformToBoolean, transformToBooleanArray, transformToDate, transformToDateArray, transformToNumber, transformToNumberArray, transformToSort, transformToSortQueryParam, transformToString, transformToStringArray, transformToTableSort, transformToTableSortQueryParam, uncacheableRequestHasAllowCacheParam, uncacheableRequestHasCacheKeyParam, unwrapGqlResponseWithErrors, unwrapQuerySyncMessage, v2BuildQueryCacheKey, v2ExtractExpiresInSeconds, v2ShouldCacheQuery, v2ShouldRetryRequest, validateWithQuery, validateWithV2Query, withArgs, withArgsQueryFeatureMissingButRouteIsFunction, withAuthenticationQuery, withAutoRefresh, withAutoRefreshUsedInManualQuery, withAutoRefreshUsedOnUnsupportedHttpMethod, withBearerAuthMultiTabSync, withDefaultRetry, withErrorHandling, withEthleteApiErrors, withHtmlErrorParsing, withInactivityLogout, withLogging, withLongPolling, withLongPollingUsedOnUnsupportedHttpMethod, withLongPollingUsedWithPolling, withMultiTabSync, withOptimisticUpdate, withOptimisticUpdateUsedOnRead, withPageResetOnError, withPersistentAuth, withPolling, withPollingUsedOnUnsupportedHttpMethod, withQueryPersistence, withRefreshQuery, withResponseUpdate, withSuccessHandling, withSymfonyErrors, withTokenExpirationWarning, withTokenRevocation, withTracking, wrapAsObservableSignal, wrapQuerySyncMessage, EMPTY_QUERY_DEVTOOLS_FAULT as ɵEMPTY_QUERY_DEVTOOLS_FAULT, MAX_QUERY_BATCH_TOMBSTONES as ɵMAX_QUERY_BATCH_TOMBSTONES, MAX_QUERY_BATCH_TOMBSTONE_BUCKETS as ɵMAX_QUERY_BATCH_TOMBSTONE_BUCKETS, MAX_QUERY_DEVTOOLS_TOMBSTONES as ɵMAX_QUERY_DEVTOOLS_TOMBSTONES, QUERY_DEVTOOLS_FAULT_STATUSES as ɵQUERY_DEVTOOLS_FAULT_STATUSES, QUERY_DEVTOOLS_TOKEN_TTL_LIMIT as ɵQUERY_DEVTOOLS_TOKEN_TTL_LIMIT, addQueryDevtoolsAuthAccount as ɵaddQueryDevtoolsAuthAccount, applyQueryDevtoolsOverrides as ɵapplyQueryDevtoolsOverrides, applyQueryDevtoolsTokenTtl as ɵapplyQueryDevtoolsTokenTtl, armAllQueryDevtoolsMocks as ɵarmAllQueryDevtoolsMocks, armQueryDevtoolsMock as ɵarmQueryDevtoolsMock, armQueryDevtoolsOverrideTransfer as ɵarmQueryDevtoolsOverrideTransfer, canOverrideQueryDevtoolsTokenTtl as ɵcanOverrideQueryDevtoolsTokenTtl, clearQueryDevtoolsArmedMocks as ɵclearQueryDevtoolsArmedMocks, clearQueryDevtoolsAuthCredentials as ɵclearQueryDevtoolsAuthCredentials, clearQueryDevtoolsAuthSessions as ɵclearQueryDevtoolsAuthSessions, clearQueryDevtoolsFaults as ɵclearQueryDevtoolsFaults, clearQueryDevtoolsMockStore as ɵclearQueryDevtoolsMockStore, clearQueryDevtoolsOverrideStore as ɵclearQueryDevtoolsOverrideStore, clearQueryDevtoolsStore as ɵclearQueryDevtoolsStore, clearQueryDevtoolsTombstones as ɵclearQueryDevtoolsTombstones, clearRestoredQueryDevtoolsOverrides as ɵclearRestoredQueryDevtoolsOverrides, collectLeafPaths as ɵcollectLeafPaths, collectQueryDevtoolsSchemaComponents as ɵcollectQueryDevtoolsSchemaComponents, countUnresolvedQueryDevtoolsOverrides as ɵcountUnresolvedQueryDevtoolsOverrides, createQueryDevtoolsOverrides as ɵcreateQueryDevtoolsOverrides, deleteQueryDevtoolsMock as ɵdeleteQueryDevtoolsMock, detectPaginationShape as ɵdetectPaginationShape, forgetQueryDevtoolsAuthSession as ɵforgetQueryDevtoolsAuthSession, forgetQueryDevtoolsAuthSessionsFor as ɵforgetQueryDevtoolsAuthSessionsFor, generateQueryDevtoolsNumberPreset as ɵgenerateQueryDevtoolsNumberPreset, generateQueryDevtoolsSampleNumber as ɵgenerateQueryDevtoolsSampleNumber, generateQueryDevtoolsStringPreset as ɵgenerateQueryDevtoolsStringPreset, hasQueryDevtoolsOverridesAtPath as ɵhasQueryDevtoolsOverridesAtPath, isDateShapedLeaf as ɵisDateShapedLeaf, isQueryDevtoolsEnabled as ɵisQueryDevtoolsEnabled, isQueryDevtoolsFaultArmed as ɵisQueryDevtoolsFaultArmed, isQueryDevtoolsRepositoryLive as ɵisQueryDevtoolsRepositoryLive, loadQueryDevtoolsSchema as ɵloadQueryDevtoolsSchema, loginQueryDevtoolsAuthAccount as ɵloginQueryDevtoolsAuthAccount, logoutQueryDevtoolsAuthSession as ɵlogoutQueryDevtoolsAuthSession, matchesQueryDevtoolsMockPattern as ɵmatchesQueryDevtoolsMockPattern, matchesQueryDevtoolsMockQuery as ɵmatchesQueryDevtoolsMockQuery, measureQueryDevtoolsPayload as ɵmeasureQueryDevtoolsPayload, parseQueryDevtoolsOverrideTransfer as ɵparseQueryDevtoolsOverrideTransfer, queryDevtoolsAbout as ɵqueryDevtoolsAbout, queryDevtoolsAllowsLocalAuthSessions as ɵqueryDevtoolsAllowsLocalAuthSessions, queryDevtoolsApiEnvIds as ɵqueryDevtoolsApiEnvIds, queryDevtoolsApiEnvIsProduction as ɵqueryDevtoolsApiEnvIsProduction, queryDevtoolsApiEnvScope as ɵqueryDevtoolsApiEnvScope, queryDevtoolsApiEnvValues as ɵqueryDevtoolsApiEnvValues, queryDevtoolsApiEnvs as ɵqueryDevtoolsApiEnvs, queryDevtoolsArmedMocks as ɵqueryDevtoolsArmedMocks, queryDevtoolsArmedMocksRestored as ɵqueryDevtoolsArmedMocksRestored, queryDevtoolsAuthAccountsFor as ɵqueryDevtoolsAuthAccountsFor, queryDevtoolsAuthActive as ɵqueryDevtoolsAuthActive, queryDevtoolsAuthFieldsFor as ɵqueryDevtoolsAuthFieldsFor, queryDevtoolsAuthOtherScopeCount as ɵqueryDevtoolsAuthOtherScopeCount, queryDevtoolsAuthSessions as ɵqueryDevtoolsAuthSessions, queryDevtoolsAuthSessionsFor as ɵqueryDevtoolsAuthSessionsFor, queryDevtoolsAuthTabLocal as ɵqueryDevtoolsAuthTabLocal, queryDevtoolsEntries as ɵqueryDevtoolsEntries, queryDevtoolsFaults as ɵqueryDevtoolsFaults, queryDevtoolsFaultsRestored as ɵqueryDevtoolsFaultsRestored, queryDevtoolsMockId as ɵqueryDevtoolsMockId, queryDevtoolsMocks as ɵqueryDevtoolsMocks, queryDevtoolsOverridePersistence as ɵqueryDevtoolsOverridePersistence, queryDevtoolsRequestPath as ɵqueryDevtoolsRequestPath, queryDevtoolsResponseHistory as ɵqueryDevtoolsResponseHistory, queryDevtoolsRestoredOverridesScope as ɵqueryDevtoolsRestoredOverridesScope, queryDevtoolsSchemaNames as ɵqueryDevtoolsSchemaNames, queryDevtoolsSchemaRoutes as ɵqueryDevtoolsSchemaRoutes, queryDevtoolsSchemaState as ɵqueryDevtoolsSchemaState, queryDevtoolsSettings as ɵqueryDevtoolsSettings, queryDevtoolsStorage as ɵqueryDevtoolsStorage, queryDevtoolsTokenTtls as ɵqueryDevtoolsTokenTtls, readQueryDevtoolsStore as ɵreadQueryDevtoolsStore, registerEthleteVersion as ɵregisterEthleteVersion, removeQueryDevtoolsAuthAccount as ɵremoveQueryDevtoolsAuthAccount, renameQueryDevtoolsAuthSession as ɵrenameQueryDevtoolsAuthSession, restoredQueryDevtoolsOverrides as ɵrestoredQueryDevtoolsOverrides, saveQueryDevtoolsMock as ɵsaveQueryDevtoolsMock, seedQueryDevtoolsSchemaBody as ɵseedQueryDevtoolsSchemaBody, seedQueryDevtoolsSchemaRoute as ɵseedQueryDevtoolsSchemaRoute, serializeQueryDevtoolsOverrideTransfer as ɵserializeQueryDevtoolsOverrideTransfer, setQueryDevtoolsApiEnv as ɵsetQueryDevtoolsApiEnv, setQueryDevtoolsAppInfo as ɵsetQueryDevtoolsAppInfo, setQueryDevtoolsArmedMocksScope as ɵsetQueryDevtoolsArmedMocksScope, setQueryDevtoolsAuthCredentials as ɵsetQueryDevtoolsAuthCredentials, setQueryDevtoolsAuthTabLocal as ɵsetQueryDevtoolsAuthTabLocal, setQueryDevtoolsFault as ɵsetQueryDevtoolsFault, setQueryDevtoolsFaultsScope as ɵsetQueryDevtoolsFaultsScope, setQueryDevtoolsOverridePersistence as ɵsetQueryDevtoolsOverridePersistence, setQueryDevtoolsOverridesScope as ɵsetQueryDevtoolsOverridesScope, setQueryDevtoolsSettings as ɵsetQueryDevtoolsSettings, smartDuplicateArrayItem as ɵsmartDuplicateArrayItem, snapshotQueryDevtoolsHandle as ɵsnapshotQueryDevtoolsHandle, stringifyQueryRouteParts as ɵstringifyQueryRouteParts, sumQueryDevtoolsStats as ɵsumQueryDevtoolsStats, switchQueryDevtoolsAuthSession as ɵswitchQueryDevtoolsAuthSession, tombstoneOf as ɵtombstoneOf, writeQueryDevtoolsStore as ɵwriteQueryDevtoolsStore };
19525
+ export { AuthBearerRefreshStrategy, BasicAuthProvider, BearerAuthFeatureType, BooleanArrayQueryField, 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, EntityStore, IGNORED_FILTER_COUNT_FIELDS, INFINITY_QUERY_TOKEN, IS_QUERY_REQUEST, InfinityQuery, InfinityQueryDirective, InfinityQueryTriggerDirective, LegacyQuery, LegacyQueryCreator, MAX_UNUSED_ENTRIES, NumberArrayQueryField, ParseHttpErrorCodeToMessageDePipe, ParseHttpErrorCodeToMessageEnPipe, ParseHttpErrorCodeToTitleDePipe, ParseHttpErrorCodeToTitleEnPipe, QUERY_CLIENT_DEVTOOLS_TOKEN, QUERY_PERSISTENCE_STORE_VERSION, QUERY_SYNC_PROTOCOL_VERSION, QUERY_VERSION, QueryClientFeatureType, QueryDevtoolsComponent, QueryDirective, QueryFeatureType, QueryField, QueryForm, QueryRuntimeErrorCode, QueryShortNamePipe, QueryStateType, QueryStore, SERVER_ERROR_KIND, SERVER_VIOLATION_ERROR_KIND, SPEED_BUFFER_TIME_IN_MS, SearchQueryField, SortQueryField, StringArrayQueryField, V2BearerAuthProvider, V2Query, V2QueryClient, V2QueryCreator, addQueryContainerHandling, applyQueryFeatures, authAccessTokenExpiryUnreadable, authExtractTokensResponseMissingAccessToken, authExtractTokensResponseMissingRefreshToken, authExtractTokensResponseNotObject, authProviderFeatureUsedMultipleTimes, booleanArrayQueryField, buildQueryCacheKey, buildQueryString, buildRoute, buildTimestampFromSeconds, castQueryCreatorTypes, circularQueryDependency, circularQueryDependencyChecker, clearQueryDevtoolsTokenTtl, computeQueryAuthHeader, computeQueryBody, computeQueryHeaders, computeQueryMethod, computeQueryQueryParams, contentfulGqlLikePaginationAdapter, createAuthGuard, createBaseQuery, createBaseQueryCreator, createBearerAuthProvider, createDefaultRetryFn, createDeleteQuery, createExecuteFn, createGetQuery, createGqlExecuteFn, createGqlMutationViaGet, createGqlMutationViaPost, createGqlQuery, createGqlQueryCreator, createGqlQueryViaGet, createGqlQueryViaPost, createHeadQuery, createHttpRequest, createIndexedDbQueryPersistenceAdapter, createInfinityQueryConfig, createLegacyQueryCreator, createNoopQueryPersistenceAdapter, createOptionsQuery, createPagedQueryStack, createPatchQuery, createPersistentAuthFeature, createPostQuery, createPutQuery, createQuery, createQueryBatch, createQueryClient, createQueryCollection, createQueryCollectionSignal, createQueryCollectionSubject, createQueryContext, createQueryCreator, createQueryErrorResponse, createQueryFeature, createQueryGroup, createQueryInvalidationFilter, createQueryKeyLockManager, createQueryObject, createQueryPersistenceEngine, createQueryRepository, createQuerySnapshotFn, createQueryStack, createQuerySubmission, createQuerySyncEngine, createQuerySyncTransport, createSecureDeleteQuery, createSecureExecuteFactory, createSecureExecuteFn, createSecureGetQuery, createSecureGqlExecuteFn, createSecureGqlMutationViaGet, createSecureGqlMutationViaPost, createSecureGqlQuery, createSecureGqlQueryCreator, createSecureGqlQueryViaGet, createSecureGqlQueryViaPost, createSecureHeadQuery, createSecureOptionsQuery, createSecurePatchQuery, createSecurePostQuery, createSecurePutQuery, createSecureQuery, createSecureQueryCreator, createSkippedSnapshot, createTrackingFeature, createWebSocketClient, dateArrayQueryField, dateQueryField, decryptBearer, deepFreeze, def, defineQueryForm, detectContentTypeHeader, dynLikePaginationAdapter, effectComputed, emptyQueryArgs, ethletePaginationAdapter, executeUntilSettled, executeUntilSettled$, extractExpiresInSeconds, extractFormViolations, extractHtmlErrorMessage, extractQuery, fakePaginationAdapter, filterFailure, filterNull, filterQueryStates, filterSuccess, forEachHeader, getDefaultHeaders, getQueryFeatureUsage, getResponseUrl, ggLikePaginationAdapter, gql, gqlDataPropertyMissingInResponse, gqlErrorsInResponse, gqlTransformerFor, hasDefaultQueryRetry, hasHeader, htmlErrorPayload, htmlQueryErrorParser, ignoreAutoRefresh, injectInfinityQueryResponseDelay, injectQueryContext, insertFrom, invalidBaseRouteError, invalidBodyError, invalidRouteError, invalidStateInsideSecureExecuteFactory, invalidateOnSuccess, invalidatesUsedOnRead, isAutoRefresh, isBasicAuthProvider, isBearerAuthProvider, isClassValidatorError, isCreateGqlQueryOptions, isCustomHeaderAuthProvider, isEmptyString, isGqlQueryConfig, isHtmlErrorPayload, isIdempotentQueryMethod, isLegacyQuery, isNaN$1 as isNaN, isPageOutOfRangeError, isQuery, isQueryCollection, isQueryErrorResponse, isQueryStateCancelled, isQueryStateFailure, isQueryStateLoading, isQueryStatePrepared, isQueryStateSuccess, isRequestError, isSymfonyError, isSymfonyFormViolationListError, isSymfonyListError, isSymfonyPagerfantaOutOfRangeError, isUnderInvalidatedUrl, legacyPrepareFallbackInjector, legacyPrepareWithoutInjectionContext, mapToPaginated, mapViolationsToFormErrors, maybeExecute, mergeHeaders, nestedEffect, numberArrayQueryField, pagedQueryStackNextPageCalledWithoutPreviousPage, pagedQueryStackPageBiggerThanTotalPages, pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage, paginatedEntityValueUpdater, parseAllXhrResponseHeaders, parseHttpErrorCodeToMessageDe, parseHttpErrorCodeToMessageEn, parseHttpErrorCodeToTitleDe, parseHttpErrorCodeToTitleEn, pathParamsMissingInRouteFunctionError, provideInfinityQueryResponseDelay, provideLegacyPrepareFallback, provideQueryClientForDevtools, provideQueryDevtools, queryArrayComputed, queryBatchAlreadyRunning, queryBatchWithArgsUsed, queryClientFeatureUsedMultipleTimes, queryComputed, queryComputedTillTruthy, queryCreatedInReactiveContext, queryErrorMessage, queryErrorMessages, queryExecute, queryExecutedAfterDestroyMessage, queryExecutedWhileParkedMessage, queryFeatureUsedMultipleTimes, queryField, querySequence, querySequenceAlreadyRunning, queryStackWithArgsUsed, queryStackWithResponseUpdateUsed, queryStateAlreadyHasKeyError, queryStateCannotTransformError, queryStateDoesNotContainKeyError, queryStateErrorSignal, queryStateLoadingSignal, queryStateResponseSignal, queryStateSignal, recordExecutionArgs, registerQueryErrorParser, removeFrom, request, resetExecuteState, resetPageOnError, resolveInvalidationUrl, resolveQueryHeaders, resolveQueryTags, runDefaultQueryRetry, runQueryErrorParsers, searchQueryField, serializeBody, setDefaultQueryRetryFn, setQueryDevtoolsTokenTtl, setQueryDevtoolsUiMounted, setupQueryDependencies, setupQueryExecuteState, setupQueryState, shouldAutoExecuteGqlQuery, shouldAutoExecuteQuery, shouldCacheQuery, shouldRetryRequest, silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent, skipPaginationPageParamCalculator, skipParkedExecution, sortQueryField, splitQueryConfig, stringArrayQueryField, switchQueryCollectionState, switchQueryState, symfonyQueryErrorParser, tableSortQueryField, takeUntilResponse, toQuerySignal, toQuerySubject, tokensNotAvailableInsideAuthAndExec, transformArrayResponse, transformExecStateToQueryState, transformGql, transformMethod, transformPaginatedResponse, transformToBoolean, transformToBooleanArray, transformToDate, transformToDateArray, transformToNumber, transformToNumberArray, transformToSort, transformToSortQueryParam, transformToString, transformToStringArray, transformToTableSort, transformToTableSortQueryParam, uncacheableRequestHasAllowCacheParam, uncacheableRequestHasCacheKeyParam, unwrapGqlResponseWithErrors, unwrapQuerySyncMessage, v2BuildQueryCacheKey, v2ExtractExpiresInSeconds, v2ShouldCacheQuery, v2ShouldRetryRequest, validateWithQuery, validateWithV2Query, withArgs, withArgsQueryFeatureMissingButRouteIsFunction, withAuthenticationQuery, withAutoRefresh, withAutoRefreshUsedInManualQuery, withAutoRefreshUsedOnUnsupportedHttpMethod, withBearerAuthMultiTabSync, withDefaultRetry, withErrorHandling, withEthleteApiErrors, withHtmlErrorParsing, withInactivityLogout, withLogging, withLongPolling, withLongPollingUsedOnUnsupportedHttpMethod, withLongPollingUsedWithPolling, withMultiTabSync, withOptimisticUpdate, withOptimisticUpdateUsedOnRead, withPageResetOnError, withPersistentAuth, withPolling, withPollingUsedOnUnsupportedHttpMethod, withQueryPersistence, withRefreshQuery, withResponseUpdate, withSuccessHandling, withSymfonyErrors, withTokenExpirationWarning, withTokenRevocation, withTracking, wrapAsObservableSignal, wrapQuerySyncMessage, EMPTY_QUERY_DEVTOOLS_FAULT as ɵEMPTY_QUERY_DEVTOOLS_FAULT, MAX_QUERY_BATCH_TOMBSTONES as ɵMAX_QUERY_BATCH_TOMBSTONES, MAX_QUERY_BATCH_TOMBSTONE_BUCKETS as ɵMAX_QUERY_BATCH_TOMBSTONE_BUCKETS, MAX_QUERY_DEVTOOLS_TOMBSTONES as ɵMAX_QUERY_DEVTOOLS_TOMBSTONES, QUERY_DEVTOOLS_FAULT_STATUSES as ɵQUERY_DEVTOOLS_FAULT_STATUSES, QUERY_DEVTOOLS_TOKEN_TTL_LIMIT as ɵQUERY_DEVTOOLS_TOKEN_TTL_LIMIT, addQueryDevtoolsAuthAccount as ɵaddQueryDevtoolsAuthAccount, applyQueryDevtoolsOverrides as ɵapplyQueryDevtoolsOverrides, applyQueryDevtoolsTokenTtl as ɵapplyQueryDevtoolsTokenTtl, armAllQueryDevtoolsMocks as ɵarmAllQueryDevtoolsMocks, armQueryDevtoolsMock as ɵarmQueryDevtoolsMock, armQueryDevtoolsOverrideTransfer as ɵarmQueryDevtoolsOverrideTransfer, canOverrideQueryDevtoolsTokenTtl as ɵcanOverrideQueryDevtoolsTokenTtl, clearQueryDevtoolsArmedMocks as ɵclearQueryDevtoolsArmedMocks, clearQueryDevtoolsAuthCredentials as ɵclearQueryDevtoolsAuthCredentials, clearQueryDevtoolsAuthSessions as ɵclearQueryDevtoolsAuthSessions, clearQueryDevtoolsFaults as ɵclearQueryDevtoolsFaults, clearQueryDevtoolsMockStore as ɵclearQueryDevtoolsMockStore, clearQueryDevtoolsOverrideStore as ɵclearQueryDevtoolsOverrideStore, clearQueryDevtoolsStore as ɵclearQueryDevtoolsStore, clearQueryDevtoolsTombstones as ɵclearQueryDevtoolsTombstones, clearRestoredQueryDevtoolsOverrides as ɵclearRestoredQueryDevtoolsOverrides, collectLeafPaths as ɵcollectLeafPaths, collectQueryDevtoolsSchemaComponents as ɵcollectQueryDevtoolsSchemaComponents, countUnresolvedQueryDevtoolsOverrides as ɵcountUnresolvedQueryDevtoolsOverrides, createQueryDevtoolsOverrides as ɵcreateQueryDevtoolsOverrides, deleteQueryDevtoolsMock as ɵdeleteQueryDevtoolsMock, detectPaginationShape as ɵdetectPaginationShape, forgetQueryDevtoolsAuthSession as ɵforgetQueryDevtoolsAuthSession, forgetQueryDevtoolsAuthSessionsFor as ɵforgetQueryDevtoolsAuthSessionsFor, generateQueryDevtoolsNumberPreset as ɵgenerateQueryDevtoolsNumberPreset, generateQueryDevtoolsSampleNumber as ɵgenerateQueryDevtoolsSampleNumber, generateQueryDevtoolsStringPreset as ɵgenerateQueryDevtoolsStringPreset, hasQueryDevtoolsOverridesAtPath as ɵhasQueryDevtoolsOverridesAtPath, isDateShapedLeaf as ɵisDateShapedLeaf, isQueryDevtoolsEnabled as ɵisQueryDevtoolsEnabled, isQueryDevtoolsFaultArmed as ɵisQueryDevtoolsFaultArmed, isQueryDevtoolsRepositoryLive as ɵisQueryDevtoolsRepositoryLive, loadQueryDevtoolsSchema as ɵloadQueryDevtoolsSchema, loginQueryDevtoolsAuthAccount as ɵloginQueryDevtoolsAuthAccount, logoutQueryDevtoolsAuthSession as ɵlogoutQueryDevtoolsAuthSession, matchesQueryDevtoolsMockPattern as ɵmatchesQueryDevtoolsMockPattern, matchesQueryDevtoolsMockQuery as ɵmatchesQueryDevtoolsMockQuery, measureQueryDevtoolsPayload as ɵmeasureQueryDevtoolsPayload, parseQueryDevtoolsOverrideTransfer as ɵparseQueryDevtoolsOverrideTransfer, queryDevtoolsAbout as ɵqueryDevtoolsAbout, queryDevtoolsAllowsLocalAuthSessions as ɵqueryDevtoolsAllowsLocalAuthSessions, queryDevtoolsApiEnvIds as ɵqueryDevtoolsApiEnvIds, queryDevtoolsApiEnvIsProduction as ɵqueryDevtoolsApiEnvIsProduction, queryDevtoolsApiEnvScope as ɵqueryDevtoolsApiEnvScope, queryDevtoolsApiEnvValues as ɵqueryDevtoolsApiEnvValues, queryDevtoolsApiEnvs as ɵqueryDevtoolsApiEnvs, queryDevtoolsArmedMocks as ɵqueryDevtoolsArmedMocks, queryDevtoolsArmedMocksRestored as ɵqueryDevtoolsArmedMocksRestored, queryDevtoolsAuthAccountsFor as ɵqueryDevtoolsAuthAccountsFor, queryDevtoolsAuthActive as ɵqueryDevtoolsAuthActive, queryDevtoolsAuthFieldsFor as ɵqueryDevtoolsAuthFieldsFor, queryDevtoolsAuthOtherScopeCount as ɵqueryDevtoolsAuthOtherScopeCount, queryDevtoolsAuthSessions as ɵqueryDevtoolsAuthSessions, queryDevtoolsAuthSessionsFor as ɵqueryDevtoolsAuthSessionsFor, queryDevtoolsAuthTabLocal as ɵqueryDevtoolsAuthTabLocal, queryDevtoolsEntries as ɵqueryDevtoolsEntries, queryDevtoolsFaults as ɵqueryDevtoolsFaults, queryDevtoolsFaultsRestored as ɵqueryDevtoolsFaultsRestored, queryDevtoolsMockId as ɵqueryDevtoolsMockId, queryDevtoolsMocks as ɵqueryDevtoolsMocks, queryDevtoolsOverridePersistence as ɵqueryDevtoolsOverridePersistence, queryDevtoolsRequestPath as ɵqueryDevtoolsRequestPath, queryDevtoolsResponseHistory as ɵqueryDevtoolsResponseHistory, queryDevtoolsRestoredOverridesScope as ɵqueryDevtoolsRestoredOverridesScope, queryDevtoolsSchemaNames as ɵqueryDevtoolsSchemaNames, queryDevtoolsSchemaRoutes as ɵqueryDevtoolsSchemaRoutes, queryDevtoolsSchemaState as ɵqueryDevtoolsSchemaState, queryDevtoolsSettings as ɵqueryDevtoolsSettings, queryDevtoolsStorage as ɵqueryDevtoolsStorage, queryDevtoolsTokenTtls as ɵqueryDevtoolsTokenTtls, readQueryDevtoolsStore as ɵreadQueryDevtoolsStore, registerEthleteVersion as ɵregisterEthleteVersion, removeQueryDevtoolsAuthAccount as ɵremoveQueryDevtoolsAuthAccount, renameQueryDevtoolsAuthSession as ɵrenameQueryDevtoolsAuthSession, ɵresetQueryDevtoolsForTesting, restoredQueryDevtoolsOverrides as ɵrestoredQueryDevtoolsOverrides, saveQueryDevtoolsMock as ɵsaveQueryDevtoolsMock, seedQueryDevtoolsSchemaBody as ɵseedQueryDevtoolsSchemaBody, seedQueryDevtoolsSchemaRoute as ɵseedQueryDevtoolsSchemaRoute, serializeQueryDevtoolsOverrideTransfer as ɵserializeQueryDevtoolsOverrideTransfer, setQueryDevtoolsApiEnv as ɵsetQueryDevtoolsApiEnv, setQueryDevtoolsAppInfo as ɵsetQueryDevtoolsAppInfo, setQueryDevtoolsArmedMocksScope as ɵsetQueryDevtoolsArmedMocksScope, setQueryDevtoolsAuthCredentials as ɵsetQueryDevtoolsAuthCredentials, setQueryDevtoolsAuthTabLocal as ɵsetQueryDevtoolsAuthTabLocal, setQueryDevtoolsFault as ɵsetQueryDevtoolsFault, setQueryDevtoolsFaultsScope as ɵsetQueryDevtoolsFaultsScope, setQueryDevtoolsOverridePersistence as ɵsetQueryDevtoolsOverridePersistence, setQueryDevtoolsOverridesScope as ɵsetQueryDevtoolsOverridesScope, setQueryDevtoolsSettings as ɵsetQueryDevtoolsSettings, smartDuplicateArrayItem as ɵsmartDuplicateArrayItem, snapshotQueryDevtoolsHandle as ɵsnapshotQueryDevtoolsHandle, stringifyQueryRouteParts as ɵstringifyQueryRouteParts, sumQueryDevtoolsStats as ɵsumQueryDevtoolsStats, switchQueryDevtoolsAuthSession as ɵswitchQueryDevtoolsAuthSession, tombstoneOf as ɵtombstoneOf, writeQueryDevtoolsStore as ɵwriteQueryDevtoolsStore };
19429
19526
  //# sourceMappingURL=ethlete-query.mjs.map