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

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.56';
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)
@@ -19107,7 +19188,7 @@ const createWebSocketClient = (options) => {
19107
19188
  auth: auth ? (cb) => cb(typeof auth === 'function' ? auth() : auth) : undefined,
19108
19189
  });
19109
19190
  const rooms = new Map();
19110
- const endedRoomHolders = new Map();
19191
+ const holds = new Set();
19111
19192
  const joinsDeliveredThisConnection = new Set();
19112
19193
  const joinsDeliveredToClosedConnection = new Set();
19113
19194
  const isConnected = signal(false, /* @ts-ignore */
@@ -19157,57 +19238,45 @@ const createWebSocketClient = (options) => {
19157
19238
  syncDevtoolsRooms();
19158
19239
  return newRoom;
19159
19240
  };
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);
19241
+ const holdRoom = (hold, name) => {
19242
+ if (name === hold.name)
19243
+ return;
19244
+ if (hold.name !== null && !hold.parked)
19245
+ leaveRoom(hold.name);
19246
+ hold.name = name;
19247
+ if (name === null)
19248
+ hold.parked = false;
19249
+ if (hold.parked)
19250
+ return;
19251
+ hold.room.set(name === null ? null : join(name));
19252
+ };
19253
+ const createHold = () => {
19254
+ const hold = { name: null, parked: false, room: signal(null) };
19255
+ holds.add(hold);
19256
+ inject(DestroyRef).onDestroy(() => {
19257
+ holdRoom(hold, null);
19258
+ holds.delete(hold);
19167
19259
  });
19168
- return roomData.asReadonly();
19260
+ return hold;
19169
19261
  };
19170
19262
  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
- }
19263
+ const hold = createHold();
19264
+ if (typeof room === 'string') {
19265
+ holdRoom(hold, room);
19266
+ }
19267
+ else {
19268
+ effect(() => {
19269
+ const current = room() || null;
19270
+ untracked(() => holdRoom(hold, current));
19193
19271
  });
19194
- });
19195
- inject(DestroyRef).onDestroy(() => {
19196
- if (joinedRoomName) {
19197
- leaveRoom(joinedRoomName);
19198
- joinedRoomName = null;
19199
- roomData.set(null);
19200
- }
19201
- });
19202
- return roomData.asReadonly();
19272
+ }
19273
+ return hold.room.asReadonly();
19203
19274
  };
19204
19275
  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);
19276
+ const parkedHold = [...holds].find((hold) => hold.parked && hold.name === room);
19277
+ if (parkedHold) {
19278
+ parkedHold.name = null;
19279
+ parkedHold.parked = false;
19211
19280
  return;
19212
19281
  }
19213
19282
  const joinedRoom = rooms.get(room);
@@ -19230,10 +19299,9 @@ const createWebSocketClient = (options) => {
19230
19299
  let reconnectTimer = null;
19231
19300
  let connectedAt = null;
19232
19301
  let destroyed = false;
19233
- let suspended = false;
19234
19302
  /** socket.io stops reconnecting after a server disconnect or a rejected handshake, so the client takes over. */
19235
19303
  const scheduleReconnect = () => {
19236
- if (reconnectTimer !== null || destroyed || suspended)
19304
+ if (reconnectTimer !== null || destroyed)
19237
19305
  return;
19238
19306
  const delay = Math.min(RECONNECT_BASE_DELAY * 2 ** reconnectAttempt, RECONNECT_MAX_DELAY);
19239
19307
  reconnectAttempt++;
@@ -19323,22 +19391,39 @@ const createWebSocketClient = (options) => {
19323
19391
  });
19324
19392
  setupWebSocketConnectionListener();
19325
19393
  setupWebSocketListener();
19394
+ const dropBufferedEmits = () => {
19395
+ if (socket.sendBuffer)
19396
+ socket.sendBuffer.length = 0;
19397
+ };
19326
19398
  const endSession = () => {
19327
- suspended = true;
19328
19399
  if (reconnectTimer !== null) {
19329
19400
  clearTimeout(reconnectTimer);
19330
19401
  reconnectTimer = null;
19331
19402
  }
19403
+ dropBufferedEmits();
19332
19404
  socket.disconnect();
19333
- for (const [name, room] of rooms) {
19334
- endedRoomHolders.set(name, (endedRoomHolders.get(name) ?? 0) + room.joinCount);
19335
- room.messages.complete();
19405
+ for (const hold of holds) {
19406
+ if (hold.name === null || hold.parked)
19407
+ continue;
19408
+ hold.parked = true;
19409
+ hold.room.set(null);
19336
19410
  }
19411
+ for (const room of rooms.values())
19412
+ room.messages.complete();
19337
19413
  rooms.clear();
19414
+ joinsDeliveredThisConnection.clear();
19415
+ joinsDeliveredToClosedConnection.clear();
19338
19416
  syncDevtoolsRooms();
19339
19417
  };
19418
+ const rejoinParkedRooms = () => {
19419
+ for (const hold of holds) {
19420
+ if (!hold.parked || hold.name === null)
19421
+ continue;
19422
+ hold.parked = false;
19423
+ hold.room.set(join(hold.name));
19424
+ }
19425
+ };
19340
19426
  const startConnection = () => {
19341
- suspended = false;
19342
19427
  reconnectAttempt = 0;
19343
19428
  socket.connect();
19344
19429
  };
@@ -19346,30 +19431,41 @@ const createWebSocketClient = (options) => {
19346
19431
  let hasConnected = false;
19347
19432
  let wasAuthenticated = false;
19348
19433
  let handledLogin = null;
19434
+ let handledSessionId = null;
19349
19435
  effect(() => {
19350
19436
  const status = authProvider.sessionStatus();
19351
19437
  const execution = authProvider.executionState();
19438
+ const sessionId = authProvider.sessionId();
19352
19439
  untracked(() => {
19353
19440
  if (destroyed || status === 'unknown' || status === 'restoring')
19354
19441
  return;
19355
19442
  if (status === 'anonymous') {
19356
- if (wasAuthenticated)
19443
+ if (wasAuthenticated) {
19357
19444
  endSession();
19358
- else if (!hasConnected)
19359
19445
  startConnection();
19446
+ }
19447
+ else if (!hasConnected) {
19448
+ startConnection();
19449
+ }
19360
19450
  wasAuthenticated = false;
19361
19451
  hasConnected = true;
19362
19452
  return;
19363
19453
  }
19364
- const login = execution?.type === 'login' && execution.state === 'success' ? execution : null;
19365
- const startedSession = !wasAuthenticated || (login !== null && login !== handledLogin);
19454
+ const login = (execution?.type === 'login' || execution?.type === 'tokenSeed') && execution.state === 'success'
19455
+ ? execution
19456
+ : null;
19457
+ const startedSession = !wasAuthenticated || sessionId !== handledSessionId || (login !== null && login !== handledLogin);
19366
19458
  if (login)
19367
19459
  handledLogin = login;
19460
+ handledSessionId = sessionId;
19368
19461
  wasAuthenticated = true;
19369
- if (!hasConnected)
19462
+ if (!hasConnected) {
19370
19463
  startConnection();
19464
+ }
19371
19465
  else if (startedSession) {
19466
+ dropBufferedEmits();
19372
19467
  socket.disconnect();
19468
+ rejoinParkedRooms();
19373
19469
  startConnection();
19374
19470
  }
19375
19471
  hasConnected = true;
@@ -19425,5 +19521,5 @@ const createServerWebSocketClient = () => {
19425
19521
  * Generated bundle index. Do not edit.
19426
19522
  */
19427
19523
 
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 };
19524
+ 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
19525
  //# sourceMappingURL=ethlete-query.mjs.map