@ethlete/query 5.41.4 → 5.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import * as i1 from '@ethlete/core';
2
- import { createDestroy, computedTillTruthy, syncSignal as syncSignal$1, RuntimeError, isObject, injectRoute, getDomain, getCookie, setCookie, deleteCookie, clamp, previousSignalValue, DelayableDirective, nextFrame, injectQueryParamChanges, injectQueryParams, clone, equal, ET_PROPERTY_REMOVED } from '@ethlete/core';
2
+ import { createDestroy, computedTillTruthy, syncSignal, RuntimeError, isObject, injectRoute, getDomain, getCookie, setCookie, deleteCookie, clamp, previousSignalValue, DelayableDirective, nextFrame, injectQueryParamChanges, injectQueryParams, clone, equal, ET_PROPERTY_REMOVED } from '@ethlete/core';
3
3
  import { Observable, takeUntil, startWith, pairwise, tap, switchMap, of, BehaviorSubject, Subject, fromEvent, timer, take, Subscription, retry, throwError, catchError, ReplaySubject, map, shareReplay, interval, skip, takeWhile, filter, combineLatest, withLatestFrom, debounceTime, merge } from 'rxjs';
4
4
  import { HttpStatusCode, HttpErrorResponse, HttpEventType, HttpClient, HttpHeaders } from '@angular/common/http';
5
5
  import * as i0 from '@angular/core';
@@ -7,7 +7,7 @@ import { assertInInjectionContext, inject, Injector, runInInjectionContext, sign
7
7
  import { toSignal, toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
8
  import { getActiveConsumer, setActiveConsumer } from '@angular/core/primitives/signals';
9
9
  import { io } from 'socket.io-client';
10
- import { AsyncPipe, JsonPipe, NgClass } from '@angular/common';
10
+ import { NgClass, AsyncPipe, JsonPipe } from '@angular/common';
11
11
  import * as i1$1 from '@angular/forms';
12
12
  import { FormControl, ReactiveFormsModule, FormGroup } from '@angular/forms';
13
13
  import { Router, ActivatedRoute } from '@angular/router';
@@ -643,7 +643,7 @@ function effectComputed(computation, injector) {
643
643
  // Ignore errors in the initial computation
644
644
  // Angular might throw an error if required inputs are read but not available yet
645
645
  }
646
- const lastResult = signal(initialData);
646
+ const lastResult = signal(initialData, ...(ngDevMode ? [{ debugName: "lastResult" }] : []));
647
647
  effect(() => {
648
648
  const data = runInInjectionContext(injector, () => computation());
649
649
  untracked(() => {
@@ -694,8 +694,8 @@ function queryStateSignal(source, options) {
694
694
  })), {
695
695
  initialValue: null,
696
696
  });
697
- const rwSignal = signal(roSignal());
698
- syncSignal$1(roSignal, rwSignal);
697
+ const rwSignal = signal(roSignal(), ...(ngDevMode ? [{ debugName: "rwSignal" }] : []));
698
+ syncSignal(roSignal, rwSignal);
699
699
  return rwSignal;
700
700
  }
701
701
  function queryStateResponseSignal(source, options) {
@@ -703,7 +703,7 @@ function queryStateResponseSignal(source, options) {
703
703
  const dataSignal = computed(() => {
704
704
  const state = s();
705
705
  return isQueryStateSuccess(state) ? state.response : null;
706
- });
706
+ }, ...(ngDevMode ? [{ debugName: "dataSignal" }] : []));
707
707
  dataSignal['reset'] = () => {
708
708
  s.set(null);
709
709
  };
@@ -786,7 +786,7 @@ class QueryCreator {
786
786
  };
787
787
  this.createSignal = (initialValue, config) => {
788
788
  assertInInjectionContext(this.createSignal);
789
- const _signal = signal(initialValue ?? null);
789
+ const _signal = signal(initialValue ?? null, ...(ngDevMode ? [{ debugName: "_signal" }] : []));
790
790
  addQueryContainerHandling(toObservable(_signal), () => _signal(), config);
791
791
  return _signal;
792
792
  };
@@ -1037,84 +1037,119 @@ const buildQueryCacheKey$1 = (route, args) => {
1037
1037
  return hash.toString();
1038
1038
  };
1039
1039
 
1040
+ // codes 0-999
1041
+ const QueryRuntimeErrorCode = {
1042
+ // Query
1043
+ QUERY_FEATURE_USED_MULTIPLE_TIMES: 0,
1044
+ // Query features
1045
+ WITH_ARGS_QUERY_FEATURE_MISSING_BUT_ROUTE_IS_FUNCTION: 100,
1046
+ WITH_POLLING_USED_ON_UNSUPPORTED_HTTP_METHOD: 101,
1047
+ WITH_AUTO_REFRESH_USED_ON_UNSUPPORTED_HTTP_METHOD: 102,
1048
+ WITH_AUTO_REFRESH_USED_IN_MANUAL_QUERY: 103,
1049
+ SILENCE_MISSING_WITH_ARGS_FEATURE_ERROR_USED_BUT_WITH_ARGS_PRESENT: 104,
1050
+ // Auth provider
1051
+ COOKIE_LOGIN_TRIED_BUT_COOKIE_DISABLED: 200,
1052
+ ENABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG: 201,
1053
+ DISABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG: 202,
1054
+ LOGIN_CALLED_WITHOUT_CONFIG: 203,
1055
+ LOGIN_WITH_TOKEN_CALLED_WITHOUT_CONFIG: 204,
1056
+ REFRESH_TOKEN_CALLED_WITHOUT_CONFIG: 205,
1057
+ SELECT_ROLE_CALLED_WITHOUT_CONFIG: 206,
1058
+ DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_OBJECT: 207,
1059
+ DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_ACCESS_TOKEN: 208,
1060
+ DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_REFRESH_TOKEN: 209,
1061
+ UNABLE_TO_DECRYPT_BEARER_TOKEN: 210,
1062
+ BEARER_EXPIRES_IN_PROPERTY_NOT_NUMBER: 211,
1063
+ // Query Repository
1064
+ UNCACHEABLE_REQUEST_HAS_CACHE_KEY_PARAM: 300,
1065
+ UNCACHEABLE_REQUEST_HAS_ALLOW_CACHE_PARAM: 301,
1066
+ // Paged Query Stack
1067
+ PAGED_QUERY_STACK_PAGE_BIGGER_THAN_TOTAL_PAGES: 400,
1068
+ PAGED_QUERY_STACK_NEXT_PAGE_CALLED_WITHOUT_PREVIOUS_PAGE: 401,
1069
+ PAGED_QUERY_STACK_PREVIOUS_PAGE_CALLED_BUT_ALREADY_AT_FIRST_PAGE: 402,
1070
+ // Query Stack
1071
+ QUERY_STACK_WITH_ARGS_USED: 500,
1072
+ QUERY_STACK_WITH_RESPONSE_UPDATE_USED: 501,
1073
+ QUERY_STACK_TOTAL_QUERIES_AND_EXPECTED_QUERIES_MISMATCH: 502,
1074
+ };
1040
1075
  const queryFeatureUsedMultipleTimes = (type) => {
1041
- return new RuntimeError(0 /* QueryRuntimeErrorCode.QUERY_FEATURE_USED_MULTIPLE_TIMES */, `The query feature "${type}()" was used multiple times.`);
1076
+ return new RuntimeError(QueryRuntimeErrorCode.QUERY_FEATURE_USED_MULTIPLE_TIMES, `The query feature "${type}()" was used multiple times.`);
1042
1077
  };
1043
1078
  const withArgsQueryFeatureMissingButRouteIsFunction = () => {
1044
- return new RuntimeError(100 /* QueryRuntimeErrorCode.WITH_ARGS_QUERY_FEATURE_MISSING_BUT_ROUTE_IS_FUNCTION */, `This queries route is a function, but a "withArgs()" feature is missing.`);
1079
+ return new RuntimeError(QueryRuntimeErrorCode.WITH_ARGS_QUERY_FEATURE_MISSING_BUT_ROUTE_IS_FUNCTION, `This queries route is a function, but a "withArgs()" feature is missing.`);
1045
1080
  };
1046
1081
  const withPollingUsedOnUnsupportedHttpMethod = (method) => {
1047
- return new RuntimeError(101 /* QueryRuntimeErrorCode.WITH_POLLING_USED_ON_UNSUPPORTED_HTTP_METHOD */, `This is a "${method}" request, "withPolling()" is only supported for GET, HEAD, OPTIONS requests and GQL queries.`);
1082
+ return new RuntimeError(QueryRuntimeErrorCode.WITH_POLLING_USED_ON_UNSUPPORTED_HTTP_METHOD, `This is a "${method}" request, "withPolling()" is only supported for GET, HEAD, OPTIONS requests and GQL queries.`);
1048
1083
  };
1049
1084
  const withAutoRefreshUsedOnUnsupportedHttpMethod = (method) => {
1050
- return new RuntimeError(102 /* QueryRuntimeErrorCode.WITH_AUTO_REFRESH_USED_ON_UNSUPPORTED_HTTP_METHOD */, `This is a "${method}" request, "withAutoRefresh()" is only supported for GET, HEAD, OPTIONS requests and GQL queries.`);
1085
+ return new RuntimeError(QueryRuntimeErrorCode.WITH_AUTO_REFRESH_USED_ON_UNSUPPORTED_HTTP_METHOD, `This is a "${method}" request, "withAutoRefresh()" is only supported for GET, HEAD, OPTIONS requests and GQL queries.`);
1051
1086
  };
1052
1087
  const withAutoRefreshUsedInManualQuery = () => {
1053
- return new RuntimeError(103 /* QueryRuntimeErrorCode.WITH_AUTO_REFRESH_USED_IN_MANUAL_QUERY */, `"withAutoRefresh()" has been used inside a query that has "onlyManualExecution" set to true.` +
1088
+ return new RuntimeError(QueryRuntimeErrorCode.WITH_AUTO_REFRESH_USED_IN_MANUAL_QUERY, `"withAutoRefresh()" has been used inside a query that has "onlyManualExecution" set to true.` +
1054
1089
  ` If this is intentional, set "ignoreOnlyManualExecution" to true inside the auto refresh config.`);
1055
1090
  };
1056
1091
  const silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent = () => {
1057
- return new RuntimeError(104 /* QueryRuntimeErrorCode.SILENCE_MISSING_WITH_ARGS_FEATURE_ERROR_USED_BUT_WITH_ARGS_PRESENT */, `The "silenceMissingWithArgsFeatureError" config is set to true, but a "withArgs()" feature is present.`);
1092
+ return new RuntimeError(QueryRuntimeErrorCode.SILENCE_MISSING_WITH_ARGS_FEATURE_ERROR_USED_BUT_WITH_ARGS_PRESENT, `The "silenceMissingWithArgsFeatureError" config is set to true, but a "withArgs()" feature is present.`);
1058
1093
  };
1059
1094
  const cookieLoginTriedButCookieDisabled = () => {
1060
- return new RuntimeError(200 /* QueryRuntimeErrorCode.COOKIE_LOGIN_TRIED_BUT_COOKIE_DISABLED */, `Cookie login has been tried, but the cookie is disabled.`);
1095
+ return new RuntimeError(QueryRuntimeErrorCode.COOKIE_LOGIN_TRIED_BUT_COOKIE_DISABLED, `Cookie login has been tried, but the cookie is disabled.`);
1061
1096
  };
1062
1097
  const enableCookieCalledWithoutCookieConfig = () => {
1063
- return new RuntimeError(201 /* QueryRuntimeErrorCode.ENABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG */, `enableCookie() has been called but there is no cookie config. Please set it during the auth provider creation.`);
1098
+ return new RuntimeError(QueryRuntimeErrorCode.ENABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG, `enableCookie() has been called but there is no cookie config. Please set it during the auth provider creation.`);
1064
1099
  };
1065
1100
  const disableCookieCalledWithoutCookieConfig = () => {
1066
- return new RuntimeError(202 /* QueryRuntimeErrorCode.DISABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG */, `disableCookie() has been called but there is no cookie config. Please set it during the auth provider creation.`);
1101
+ return new RuntimeError(QueryRuntimeErrorCode.DISABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG, `disableCookie() has been called but there is no cookie config. Please set it during the auth provider creation.`);
1067
1102
  };
1068
1103
  const loginCalledWithoutConfig = () => {
1069
- return new RuntimeError(203 /* QueryRuntimeErrorCode.LOGIN_CALLED_WITHOUT_CONFIG */, `login() has been called without a config. Please set it during the auth provider creation.`);
1104
+ return new RuntimeError(QueryRuntimeErrorCode.LOGIN_CALLED_WITHOUT_CONFIG, `login() has been called without a config. Please set it during the auth provider creation.`);
1070
1105
  };
1071
1106
  const loginWithTokenCalledWithoutConfig = () => {
1072
- return new RuntimeError(204 /* QueryRuntimeErrorCode.LOGIN_WITH_TOKEN_CALLED_WITHOUT_CONFIG */, `loginWithToken() has been called without a config. Please set it during the auth provider creation.`);
1107
+ return new RuntimeError(QueryRuntimeErrorCode.LOGIN_WITH_TOKEN_CALLED_WITHOUT_CONFIG, `loginWithToken() has been called without a config. Please set it during the auth provider creation.`);
1073
1108
  };
1074
1109
  const refreshTokenCalledWithoutConfig = () => {
1075
- return new RuntimeError(205 /* QueryRuntimeErrorCode.REFRESH_TOKEN_CALLED_WITHOUT_CONFIG */, `refreshToken() has been called without a config. Please set it during the auth provider creation.`);
1110
+ return new RuntimeError(QueryRuntimeErrorCode.REFRESH_TOKEN_CALLED_WITHOUT_CONFIG, `refreshToken() has been called without a config. Please set it during the auth provider creation.`);
1076
1111
  };
1077
1112
  const selectRoleCalledWithoutConfig = () => {
1078
- return new RuntimeError(206 /* QueryRuntimeErrorCode.SELECT_ROLE_CALLED_WITHOUT_CONFIG */, `selectRole() has been called without a config. Please set it during the auth provider creation.`);
1113
+ return new RuntimeError(QueryRuntimeErrorCode.SELECT_ROLE_CALLED_WITHOUT_CONFIG, `selectRole() has been called without a config. Please set it during the auth provider creation.`);
1079
1114
  };
1080
1115
  const defaultResponseTransformerResponseNotObject = (currentType) => {
1081
- return new RuntimeError(207 /* QueryRuntimeErrorCode.DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_OBJECT */, `The default response transformer expects the response to be an object, but it is a "${currentType}".`);
1116
+ return new RuntimeError(QueryRuntimeErrorCode.DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_OBJECT, `The default response transformer expects the response to be an object, but it is a "${currentType}".`);
1082
1117
  };
1083
1118
  const defaultResponseTransformerResponseNotContainingAccessToken = () => {
1084
- return new RuntimeError(208 /* QueryRuntimeErrorCode.DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_ACCESS_TOKEN */, `The default response transformer expects the response to contain an "accessToken" property.`);
1119
+ return new RuntimeError(QueryRuntimeErrorCode.DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_ACCESS_TOKEN, `The default response transformer expects the response to contain an "accessToken" property.`);
1085
1120
  };
1086
1121
  const defaultResponseTransformerResponseNotContainingRefreshToken = () => {
1087
- return new RuntimeError(209 /* QueryRuntimeErrorCode.DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_REFRESH_TOKEN */, `The default response transformer expects the response to contain a "refreshToken" property.`);
1122
+ return new RuntimeError(QueryRuntimeErrorCode.DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_REFRESH_TOKEN, `The default response transformer expects the response to contain a "refreshToken" property.`);
1088
1123
  };
1089
1124
  const unableToDecryptBearerToken = (token) => {
1090
- return new RuntimeError(210 /* QueryRuntimeErrorCode.UNABLE_TO_DECRYPT_BEARER_TOKEN */, `The bearer token could not be decrypted: ${token}`);
1125
+ return new RuntimeError(QueryRuntimeErrorCode.UNABLE_TO_DECRYPT_BEARER_TOKEN, `The bearer token could not be decrypted: ${token}`);
1091
1126
  };
1092
1127
  const bearerExpiresInPropertyNotNumber = (expiresIn) => {
1093
- return new RuntimeError(211 /* QueryRuntimeErrorCode.BEARER_EXPIRES_IN_PROPERTY_NOT_NUMBER */, `The expires in property is not a number: ${expiresIn}`);
1128
+ return new RuntimeError(QueryRuntimeErrorCode.BEARER_EXPIRES_IN_PROPERTY_NOT_NUMBER, `The expires in property is not a number: ${expiresIn}`);
1094
1129
  };
1095
1130
  const uncacheableRequestHasCacheKeyParam = (key) => {
1096
- return new RuntimeError(300 /* QueryRuntimeErrorCode.UNCACHEABLE_REQUEST_HAS_CACHE_KEY_PARAM */, `This request is uncacheable, but a cache key was provided: ${key}. Please remove it.`);
1131
+ return new RuntimeError(QueryRuntimeErrorCode.UNCACHEABLE_REQUEST_HAS_CACHE_KEY_PARAM, `This request is uncacheable, but a cache key was provided: ${key}. Please remove it.`);
1097
1132
  };
1098
1133
  const uncacheableRequestHasAllowCacheParam = () => {
1099
- return new RuntimeError(301 /* QueryRuntimeErrorCode.UNCACHEABLE_REQUEST_HAS_ALLOW_CACHE_PARAM */, `This request is uncacheable, but allowCache is set to true. Please remove it.`);
1134
+ return new RuntimeError(QueryRuntimeErrorCode.UNCACHEABLE_REQUEST_HAS_ALLOW_CACHE_PARAM, `This request is uncacheable, but allowCache is set to true. Please remove it.`);
1100
1135
  };
1101
1136
  const pagedQueryStackPageBiggerThanTotalPages = (page, totalPages) => {
1102
- return new RuntimeError(400 /* QueryRuntimeErrorCode.PAGED_QUERY_STACK_PAGE_BIGGER_THAN_TOTAL_PAGES */, `The page "${page}" is bigger than the total pages "${totalPages}".`);
1137
+ return new RuntimeError(QueryRuntimeErrorCode.PAGED_QUERY_STACK_PAGE_BIGGER_THAN_TOTAL_PAGES, `The page "${page}" is bigger than the total pages "${totalPages}".`);
1103
1138
  };
1104
1139
  const pagedQueryStackNextPageCalledWithoutPreviousPage = () => {
1105
- return new RuntimeError(401 /* QueryRuntimeErrorCode.PAGED_QUERY_STACK_NEXT_PAGE_CALLED_WITHOUT_PREVIOUS_PAGE */, `fetchNextPage() has been called but the current page is not yet loaded. Please call it after the previous page has been loaded.`);
1140
+ return new RuntimeError(QueryRuntimeErrorCode.PAGED_QUERY_STACK_NEXT_PAGE_CALLED_WITHOUT_PREVIOUS_PAGE, `fetchNextPage() has been called but the current page is not yet loaded. Please call it after the previous page has been loaded.`);
1106
1141
  };
1107
1142
  const pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage = () => {
1108
- return new RuntimeError(402 /* QueryRuntimeErrorCode.PAGED_QUERY_STACK_PREVIOUS_PAGE_CALLED_BUT_ALREADY_AT_FIRST_PAGE */, `fetchPreviousPage() has been called but the current page is already the first page.`);
1143
+ return new RuntimeError(QueryRuntimeErrorCode.PAGED_QUERY_STACK_PREVIOUS_PAGE_CALLED_BUT_ALREADY_AT_FIRST_PAGE, `fetchPreviousPage() has been called but the current page is already the first page.`);
1109
1144
  };
1110
1145
  const queryStackWithArgsUsed = () => {
1111
- return new RuntimeError(500 /* QueryRuntimeErrorCode.QUERY_STACK_WITH_ARGS_USED */, `withArgs() has been used in a query stack or a paged query stack. This is not supported.`);
1146
+ return new RuntimeError(QueryRuntimeErrorCode.QUERY_STACK_WITH_ARGS_USED, `withArgs() has been used in a query stack or a paged query stack. This is not supported.`);
1112
1147
  };
1113
1148
  const queryStackWithResponseUpdateUsed = () => {
1114
- return new RuntimeError(501 /* QueryRuntimeErrorCode.QUERY_STACK_WITH_RESPONSE_UPDATE_USED */, `withResponseUpdate() has been used in a query stack or a paged query stack. This is not supported.`);
1149
+ return new RuntimeError(QueryRuntimeErrorCode.QUERY_STACK_WITH_RESPONSE_UPDATE_USED, `withResponseUpdate() has been used in a query stack or a paged query stack. This is not supported.`);
1115
1150
  };
1116
1151
  const queryStackTotalQueriesAndExpectedQueriesMismatch = (totalQueries, expectedQueries) => {
1117
- return new RuntimeError(502 /* QueryRuntimeErrorCode.QUERY_STACK_TOTAL_QUERIES_AND_EXPECTED_QUERIES_MISMATCH */, `The total queries "${totalQueries}" and the expected queries "${expectedQueries}" do not match. This usually happens if a query depends on the response of the previous query to calculate its pagination values. Set blockExecutionDuringLoading to true to prevent this.`);
1152
+ return new RuntimeError(QueryRuntimeErrorCode.QUERY_STACK_TOTAL_QUERIES_AND_EXPECTED_QUERIES_MISMATCH, `The total queries "${totalQueries}" and the expected queries "${expectedQueries}" do not match. This usually happens if a query depends on the response of the previous query to calculate its pagination values. Set blockExecutionDuringLoading to true to prevent this.`);
1118
1153
  };
1119
1154
 
1120
1155
  const defaultResponseTransformer = (response) => {
@@ -1132,7 +1167,7 @@ const defaultResponseTransformer = (response) => {
1132
1167
  const FIVE_MINUTES = 5 * 60 * 1000;
1133
1168
  const createAuthProviderQuery = (config, authProviderConfig) => {
1134
1169
  const query = config.queryCreator({ onlyManualExecution: true });
1135
- const triggeredInternally = signal(false);
1170
+ const triggeredInternally = signal(false, ...(ngDevMode ? [{ debugName: "triggeredInternally" }] : []));
1136
1171
  const tokens = computed(() => {
1137
1172
  const res = query.response();
1138
1173
  if (!res)
@@ -1145,7 +1180,7 @@ const createAuthProviderQuery = (config, authProviderConfig) => {
1145
1180
  bearer: bearerValue,
1146
1181
  tokens: transformed,
1147
1182
  };
1148
- });
1183
+ }, ...(ngDevMode ? [{ debugName: "tokens" }] : []));
1149
1184
  const expiresIn = computed(() => {
1150
1185
  const res = tokens();
1151
1186
  if (!res)
@@ -1158,7 +1193,7 @@ const createAuthProviderQuery = (config, authProviderConfig) => {
1158
1193
  // const dummyRemainingTime = (query.lastTimeExecutedAt() ?? 0) + 5000 - new Date().getTime();
1159
1194
  const remainingTime = new Date(expiresIn * 1000).getTime() - refreshBuffer - new Date().getTime();
1160
1195
  return remainingTime;
1161
- });
1196
+ }, ...(ngDevMode ? [{ debugName: "expiresIn" }] : []));
1162
1197
  const execute = (newArgs, options) => {
1163
1198
  query.execute({ args: newArgs });
1164
1199
  triggeredInternally.set(options?.triggeredInternally ?? false);
@@ -1174,7 +1209,7 @@ const createAuthProviderQuery = (config, authProviderConfig) => {
1174
1209
  const createBearerAuthProvider = (options) => {
1175
1210
  const route = injectRoute();
1176
1211
  const client = inject(options.queryClientRef);
1177
- const cookieEnabled = signal(options.cookie === undefined ? false : (options.cookie.enabled ?? true));
1212
+ const cookieEnabled = signal(options.cookie === undefined ? false : (options.cookie.enabled ?? true), ...(ngDevMode ? [{ debugName: "cookieEnabled" }] : []));
1178
1213
  const cookieOptions = {
1179
1214
  expiresInDays: 30,
1180
1215
  name: 'etAuth',
@@ -1198,17 +1233,17 @@ const createBearerAuthProvider = (options) => {
1198
1233
  const latestExecutedQuery = computed(() => {
1199
1234
  const relevantQueries = queries.filter((q) => q.query && q.query.query.lastTimeExecutedAt() !== null);
1200
1235
  return findMostRecentQuery(relevantQueries);
1201
- });
1236
+ }, ...(ngDevMode ? [{ debugName: "latestExecutedQuery" }] : []));
1202
1237
  const tokens = computed(() => {
1203
1238
  const query = latestExecutedQuery();
1204
1239
  return query?.query?.tokens()?.tokens ?? null;
1205
- });
1240
+ }, ...(ngDevMode ? [{ debugName: "tokens" }] : []));
1206
1241
  const bearerData = computed(() => {
1207
1242
  const accessToken = tokens()?.accessToken;
1208
1243
  if (!accessToken)
1209
1244
  return null;
1210
1245
  return (options.bearerDecryptFn?.(accessToken) ?? decryptBearer(accessToken));
1211
- });
1246
+ }, ...(ngDevMode ? [{ debugName: "bearerData" }] : []));
1212
1247
  toObservable(computed(() => {
1213
1248
  const query = latestExecutedQuery();
1214
1249
  const expiresIn = query?.query?.expiresIn() ?? null;
@@ -1227,7 +1262,7 @@ const createBearerAuthProvider = (options) => {
1227
1262
  }, { triggeredInternally: true })));
1228
1263
  }), takeUntilDestroyed())
1229
1264
  .subscribe();
1230
- const latestNonInternalQuery = signal(null);
1265
+ const latestNonInternalQuery = signal(null, ...(ngDevMode ? [{ debugName: "latestNonInternalQuery" }] : []));
1231
1266
  effect(() => {
1232
1267
  const relevantQueries = queries.filter((q) => q.query && !q.query.triggeredInternally() && q.query.query.lastTimeExecutedAt() !== null);
1233
1268
  const lastQuery = findMostRecentQuery(relevantQueries);
@@ -1395,14 +1430,189 @@ const isClassValidatorError = (error) => {
1395
1430
  return typeof error === 'object' && error !== null && 'statusCode' in error && 'message' in error && 'error' in error;
1396
1431
  };
1397
1432
 
1433
+ const QueryFeatureType = {
1434
+ WITH_ARGS: 'WITH_ARGS',
1435
+ WITH_LOGGING: 'WITH_LOGGING',
1436
+ WITH_ERROR_HANDLING: 'WITH_ERROR_HANDLING',
1437
+ WITH_SUCCESS_HANDLING: 'WITH_SUCCESS_HANDLING',
1438
+ WITH_POLLING: 'WITH_POLLING',
1439
+ WITH_AUTO_REFRESH: 'WITH_AUTO_REFRESH',
1440
+ WITH_RESPONSE_UPDATE: 'WITH_RESPONSE_UPDATE',
1441
+ };
1442
+ const createQueryFeature = (config) => {
1443
+ return config;
1444
+ };
1445
+ /**
1446
+ * A query feature that allows you to set the arguments of the query.
1447
+ * The arguments are read within a computed function, so you can use reactive values.
1448
+ *
1449
+ * To set the arguments to `null`, return the symbol `CLEAR_QUERY_ARGS`.
1450
+ * If you instead return `null`, the arguments won't change.
1451
+ *
1452
+ * Changing arguments will automatically trigger a new execution of the query if it is eligible for auto execution (e.g. a GET request).
1453
+ */
1454
+ const withArgs = (args) => {
1455
+ return createQueryFeature({
1456
+ type: QueryFeatureType.WITH_ARGS,
1457
+ fn: (context) => {
1458
+ const currArgs = computed(() => args(), ...(ngDevMode ? [{ debugName: "currArgs" }] : []));
1459
+ nestedEffect(() => {
1460
+ const currArgsNow = currArgs();
1461
+ if (currArgsNow === null)
1462
+ return;
1463
+ untracked(() => {
1464
+ if (currArgsNow === CLEAR_QUERY_ARGS) {
1465
+ context.state.args.set(null);
1466
+ return;
1467
+ }
1468
+ context.state.args.set(currArgsNow);
1469
+ if (context.flags.shouldAutoExecute)
1470
+ context.execute({ args: currArgsNow });
1471
+ });
1472
+ }, { injector: context.deps.injector });
1473
+ },
1474
+ });
1475
+ };
1476
+ /**
1477
+ * A query feature that will automatically execute the query at a given interval.
1478
+ * The interval will be cleared when the query is destroyed.
1479
+ * The interval will be reset when the arguments of the query change.
1480
+ *
1481
+ * @throws If the query is not eligible for auto execution (e.g. a POST request)
1482
+ */
1483
+ const withPolling = (options) => {
1484
+ return createQueryFeature({
1485
+ type: QueryFeatureType.WITH_POLLING,
1486
+ fn: (context) => {
1487
+ if (!context.flags.shouldAutoExecuteMethod) {
1488
+ throw withPollingUsedOnUnsupportedHttpMethod(context.flags.method);
1489
+ }
1490
+ let intervalId = null;
1491
+ nestedEffect(() => {
1492
+ const args = context.state.args();
1493
+ untracked(() => {
1494
+ if (intervalId !== null)
1495
+ clearInterval(intervalId);
1496
+ // Don't start polling if the query doesn't have args.
1497
+ // It should have args because a withArgs feature is present.
1498
+ if (args === null && context.flags.hasWithArgsFeature)
1499
+ return;
1500
+ if (options.executeInitially) {
1501
+ context.execute({ args });
1502
+ }
1503
+ intervalId = window.setInterval(() => {
1504
+ context.execute({ args });
1505
+ }, options.interval);
1506
+ });
1507
+ }, { injector: context.deps.injector });
1508
+ context.deps.destroyRef.onDestroy(() => intervalId !== null && clearInterval(intervalId));
1509
+ },
1510
+ });
1511
+ };
1512
+ /** A query feature that can be used to log the latest http event */
1513
+ const withLogging = (options) => {
1514
+ return createQueryFeature({
1515
+ type: QueryFeatureType.WITH_LOGGING,
1516
+ fn: (context) => {
1517
+ nestedEffect(() => {
1518
+ const event = context.state.latestHttpEvent();
1519
+ if (event === null)
1520
+ return;
1521
+ untracked(() => {
1522
+ options.logFn(event);
1523
+ });
1524
+ }, { injector: context.deps.injector });
1525
+ },
1526
+ });
1527
+ };
1528
+ /** A query feature that can be used to handle errors */
1529
+ const withErrorHandling = (options) => {
1530
+ return createQueryFeature({
1531
+ type: QueryFeatureType.WITH_ERROR_HANDLING,
1532
+ fn: (context) => {
1533
+ nestedEffect(() => {
1534
+ const error = context.state.error();
1535
+ if (error === null)
1536
+ return;
1537
+ untracked(() => {
1538
+ options.handler(error);
1539
+ });
1540
+ }, { injector: context.deps.injector });
1541
+ },
1542
+ });
1543
+ };
1544
+ /** A query feature that can be used to handle successful responses */
1545
+ const withSuccessHandling = (options) => {
1546
+ return createQueryFeature({
1547
+ type: QueryFeatureType.WITH_SUCCESS_HANDLING,
1548
+ fn: (context) => {
1549
+ nestedEffect(() => {
1550
+ const response = context.state.response();
1551
+ if (response === null)
1552
+ return;
1553
+ untracked(() => {
1554
+ options.handler(response);
1555
+ });
1556
+ }, { injector: context.deps.injector });
1557
+ },
1558
+ });
1559
+ };
1560
+ /**
1561
+ * A query feature that will automatically execute the query when any of the provided signals change
1562
+ * @throws If the query is not eligible for auto execution (e.g. a POST request)
1563
+ * @throws If the query has the `onlyManualExecution` query config flag set and `ignoreOnlyManualExecution` is not set
1564
+ */
1565
+ const withAutoRefresh = (options) => {
1566
+ return createQueryFeature({
1567
+ type: QueryFeatureType.WITH_AUTO_REFRESH,
1568
+ fn: (context) => {
1569
+ if (!context.flags.shouldAutoExecuteMethod) {
1570
+ throw withAutoRefreshUsedOnUnsupportedHttpMethod(context.flags.method);
1571
+ }
1572
+ if (context.flags.onlyManualExecution && !options.ignoreOnlyManualExecution) {
1573
+ throw withAutoRefreshUsedInManualQuery();
1574
+ }
1575
+ nestedEffect(() => {
1576
+ for (const signal of options.onSignalChanges) {
1577
+ signal();
1578
+ }
1579
+ untracked(() => {
1580
+ const args = context.state.args();
1581
+ // Don't start polling if the query doesn't have args.
1582
+ // It should have args because a withArgs feature is present.
1583
+ if (args === null && context.flags.hasWithArgsFeature)
1584
+ return;
1585
+ context.execute({ args });
1586
+ });
1587
+ }, { injector: context.deps.injector });
1588
+ },
1589
+ });
1590
+ };
1591
+ const withResponseUpdate = (options) => {
1592
+ return createQueryFeature({
1593
+ type: QueryFeatureType.WITH_RESPONSE_UPDATE,
1594
+ fn: (context) => {
1595
+ nestedEffect(() => {
1596
+ const currentResponse = untracked(() => context.state.response());
1597
+ const response = options.updater({ currentResponse });
1598
+ if (response === null)
1599
+ return;
1600
+ untracked(() => {
1601
+ context.state.response.set(response);
1602
+ });
1603
+ }, { injector: context.deps.injector });
1604
+ },
1605
+ });
1606
+ };
1607
+
1398
1608
  const setupQueryState = (options) => {
1399
- const response = signal(null);
1400
- const args = signal(null);
1401
- const latestHttpEvent = signal(null);
1402
- const error = signal(null);
1403
- const loading = signal(null);
1404
- const lastTimeExecutedAt = signal(null);
1405
- const request = signal(null);
1609
+ const response = signal(null, ...(ngDevMode ? [{ debugName: "response" }] : []));
1610
+ const args = signal(null, ...(ngDevMode ? [{ debugName: "args" }] : []));
1611
+ const latestHttpEvent = signal(null, ...(ngDevMode ? [{ debugName: "latestHttpEvent" }] : []));
1612
+ const error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
1613
+ const loading = signal(null, ...(ngDevMode ? [{ debugName: "loading" }] : []));
1614
+ const lastTimeExecutedAt = signal(null, ...(ngDevMode ? [{ debugName: "lastTimeExecutedAt" }] : []));
1615
+ const request = signal(null, ...(ngDevMode ? [{ debugName: "request" }] : []));
1406
1616
  const executionState = computed(() => {
1407
1617
  const currentResponse = response();
1408
1618
  const currentError = error();
@@ -1437,7 +1647,7 @@ const setupQueryState = (options) => {
1437
1647
  else {
1438
1648
  return null;
1439
1649
  }
1440
- });
1650
+ }, ...(ngDevMode ? [{ debugName: "executionState" }] : []));
1441
1651
  const state = {
1442
1652
  response,
1443
1653
  args,
@@ -1457,7 +1667,7 @@ const createQuerySnapshotFn = (options) => {
1457
1667
  const { state, deps } = options;
1458
1668
  const snapshotFn = () => {
1459
1669
  const snapshotState = setupQueryState({});
1460
- const isAlive = signal(true);
1670
+ const isAlive = signal(true, ...(ngDevMode ? [{ debugName: "isAlive" }] : []));
1461
1671
  const killEffectRef = effect(() => {
1462
1672
  const currentLoading = state.loading();
1463
1673
  const currentError = state.error();
@@ -1480,7 +1690,7 @@ const createQuerySnapshotFn = (options) => {
1480
1690
  killEffectRef.destroy();
1481
1691
  isAlive.set(false);
1482
1692
  });
1483
- }, { injector: deps.injector });
1693
+ }, ...(ngDevMode ? [{ debugName: "killEffectRef", injector: deps.injector }] : [{ injector: deps.injector }]));
1484
1694
  const snapshot = {
1485
1695
  args: snapshotState.args.asReadonly(),
1486
1696
  response: snapshotState.response.asReadonly(),
@@ -1633,7 +1843,7 @@ const shouldRetryRequest = (options) => {
1633
1843
  };
1634
1844
  const getQueryFeatureUsage = (options) => {
1635
1845
  const { creator, features, queryConfig, creatorInternals } = options;
1636
- const hasWithArgsFeature = features.some((f) => f.type == "withArgs" /* QueryFeatureType.WithArgs */);
1846
+ const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WITH_ARGS);
1637
1847
  const shouldAutoExecuteMethod = isCreateGqlQueryOptions(options)
1638
1848
  ? shouldAutoExecuteGqlQuery(options.creatorInternals.method)
1639
1849
  : shouldAutoExecuteQuery(options.creatorInternals.method);
@@ -1813,18 +2023,18 @@ const SPEED_BUFFER_TIME_IN_MS = 2000;
1813
2023
  const createHttpRequest = (options) => {
1814
2024
  let currentStreamSubscription = Subscription.EMPTY;
1815
2025
  const { args, clientOptions, dependencies } = options;
1816
- const currentEvent = signal(null);
1817
- const loading = signal(null);
1818
- const error = signal(null);
1819
- const response = signal(null);
1820
- const lastLoadEventTime = signal(0);
1821
- const lastLoadEventAmount = signal(0);
1822
- const lastExecuteTime = signal(0);
1823
- const expiresIn = signal(null);
2026
+ const currentEvent = signal(null, ...(ngDevMode ? [{ debugName: "currentEvent" }] : []));
2027
+ const loading = signal(null, ...(ngDevMode ? [{ debugName: "loading" }] : []));
2028
+ const error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
2029
+ const response = signal(null, ...(ngDevMode ? [{ debugName: "response" }] : []));
2030
+ const lastLoadEventTime = signal(0, ...(ngDevMode ? [{ debugName: "lastLoadEventTime" }] : []));
2031
+ const lastLoadEventAmount = signal(0, ...(ngDevMode ? [{ debugName: "lastLoadEventAmount" }] : []));
2032
+ const lastExecuteTime = signal(0, ...(ngDevMode ? [{ debugName: "lastExecuteTime" }] : []));
2033
+ const expiresIn = signal(null, ...(ngDevMode ? [{ debugName: "expiresIn" }] : []));
1824
2034
  const isStale = computed(() => {
1825
2035
  const expiresInTs = expiresIn();
1826
2036
  return expiresInTs === null || expiresInTs < Date.now();
1827
- });
2037
+ }, ...(ngDevMode ? [{ debugName: "isStale" }] : []));
1828
2038
  const stream = dependencies.httpClient
1829
2039
  .request(options.method, options.fullPath, {
1830
2040
  observe: 'events',
@@ -1951,172 +2161,6 @@ const createHttpRequest = (options) => {
1951
2161
  return httpRequest;
1952
2162
  };
1953
2163
 
1954
- const createQueryFeature = (config) => {
1955
- return config;
1956
- };
1957
- /**
1958
- * A query feature that allows you to set the arguments of the query.
1959
- * The arguments are read within a computed function, so you can use reactive values.
1960
- *
1961
- * To set the arguments to `null`, return the symbol `CLEAR_QUERY_ARGS`.
1962
- * If you instead return `null`, the arguments won't change.
1963
- *
1964
- * Changing arguments will automatically trigger a new execution of the query if it is eligible for auto execution (e.g. a GET request).
1965
- */
1966
- const withArgs = (args) => {
1967
- return createQueryFeature({
1968
- type: "withArgs" /* QueryFeatureType.WithArgs */,
1969
- fn: (context) => {
1970
- const currArgs = computed(() => args());
1971
- nestedEffect(() => {
1972
- const currArgsNow = currArgs();
1973
- if (currArgsNow === null)
1974
- return;
1975
- untracked(() => {
1976
- if (currArgsNow === CLEAR_QUERY_ARGS) {
1977
- context.state.args.set(null);
1978
- return;
1979
- }
1980
- context.state.args.set(currArgsNow);
1981
- if (context.flags.shouldAutoExecute)
1982
- context.execute({ args: currArgsNow });
1983
- });
1984
- }, { injector: context.deps.injector });
1985
- },
1986
- });
1987
- };
1988
- /**
1989
- * A query feature that will automatically execute the query at a given interval.
1990
- * The interval will be cleared when the query is destroyed.
1991
- * The interval will be reset when the arguments of the query change.
1992
- *
1993
- * @throws If the query is not eligible for auto execution (e.g. a POST request)
1994
- */
1995
- const withPolling = (options) => {
1996
- return createQueryFeature({
1997
- type: "withPolling" /* QueryFeatureType.WithPolling */,
1998
- fn: (context) => {
1999
- if (!context.flags.shouldAutoExecuteMethod) {
2000
- throw withPollingUsedOnUnsupportedHttpMethod(context.flags.method);
2001
- }
2002
- let intervalId = null;
2003
- nestedEffect(() => {
2004
- const args = context.state.args();
2005
- untracked(() => {
2006
- if (intervalId !== null)
2007
- clearInterval(intervalId);
2008
- // Don't start polling if the query doesn't have args.
2009
- // It should have args because a withArgs feature is present.
2010
- if (args === null && context.flags.hasWithArgsFeature)
2011
- return;
2012
- if (options.executeInitially) {
2013
- context.execute({ args });
2014
- }
2015
- intervalId = window.setInterval(() => {
2016
- context.execute({ args });
2017
- }, options.interval);
2018
- });
2019
- }, { injector: context.deps.injector });
2020
- context.deps.destroyRef.onDestroy(() => intervalId !== null && clearInterval(intervalId));
2021
- },
2022
- });
2023
- };
2024
- /** A query feature that can be used to log the latest http event */
2025
- const withLogging = (options) => {
2026
- return createQueryFeature({
2027
- type: "withLogging" /* QueryFeatureType.WithLogging */,
2028
- fn: (context) => {
2029
- nestedEffect(() => {
2030
- const event = context.state.latestHttpEvent();
2031
- if (event === null)
2032
- return;
2033
- untracked(() => {
2034
- options.logFn(event);
2035
- });
2036
- }, { injector: context.deps.injector });
2037
- },
2038
- });
2039
- };
2040
- /** A query feature that can be used to handle errors */
2041
- const withErrorHandling = (options) => {
2042
- return createQueryFeature({
2043
- type: "withErrorHandling" /* QueryFeatureType.WithErrorHandling */,
2044
- fn: (context) => {
2045
- nestedEffect(() => {
2046
- const error = context.state.error();
2047
- if (error === null)
2048
- return;
2049
- untracked(() => {
2050
- options.handler(error);
2051
- });
2052
- }, { injector: context.deps.injector });
2053
- },
2054
- });
2055
- };
2056
- /** A query feature that can be used to handle successful responses */
2057
- const withSuccessHandling = (options) => {
2058
- return createQueryFeature({
2059
- type: "withSuccessHandling" /* QueryFeatureType.WithSuccessHandling */,
2060
- fn: (context) => {
2061
- nestedEffect(() => {
2062
- const response = context.state.response();
2063
- if (response === null)
2064
- return;
2065
- untracked(() => {
2066
- options.handler(response);
2067
- });
2068
- }, { injector: context.deps.injector });
2069
- },
2070
- });
2071
- };
2072
- /**
2073
- * A query feature that will automatically execute the query when any of the provided signals change
2074
- * @throws If the query is not eligible for auto execution (e.g. a POST request)
2075
- * @throws If the query has the `onlyManualExecution` query config flag set and `ignoreOnlyManualExecution` is not set
2076
- */
2077
- const withAutoRefresh = (options) => {
2078
- return createQueryFeature({
2079
- type: "withAutoRefresh" /* QueryFeatureType.WithAutoRefresh */,
2080
- fn: (context) => {
2081
- if (!context.flags.shouldAutoExecuteMethod) {
2082
- throw withAutoRefreshUsedOnUnsupportedHttpMethod(context.flags.method);
2083
- }
2084
- if (context.flags.onlyManualExecution && !options.ignoreOnlyManualExecution) {
2085
- throw withAutoRefreshUsedInManualQuery();
2086
- }
2087
- nestedEffect(() => {
2088
- for (const signal of options.onSignalChanges) {
2089
- signal();
2090
- }
2091
- untracked(() => {
2092
- const args = context.state.args();
2093
- // Don't start polling if the query doesn't have args.
2094
- // It should have args because a withArgs feature is present.
2095
- if (args === null && context.flags.hasWithArgsFeature)
2096
- return;
2097
- context.execute({ args });
2098
- });
2099
- }, { injector: context.deps.injector });
2100
- },
2101
- });
2102
- };
2103
- const withResponseUpdate = (options) => {
2104
- return createQueryFeature({
2105
- type: "withResponseUpdate" /* QueryFeatureType.WithResponseUpdate */,
2106
- fn: (context) => {
2107
- nestedEffect(() => {
2108
- const currentResponse = untracked(() => context.state.response());
2109
- const response = options.updater({ currentResponse });
2110
- if (response === null)
2111
- return;
2112
- untracked(() => {
2113
- context.state.response.set(response);
2114
- });
2115
- }, { injector: context.deps.injector });
2116
- },
2117
- });
2118
- };
2119
-
2120
2164
  /* eslint-disable @typescript-eslint/no-explicit-any */
2121
2165
  /** Transforms an array of arrays into a single array and filters out `null` values. */
2122
2166
  const transformArrayResponse = (responses) => responses.filter((r) => !!r).flatMap((r) => r);
@@ -2129,11 +2173,11 @@ const createQueryStack = (options) => {
2129
2173
  return { queries, lastQuery };
2130
2174
  }, transform, } = options ?? {};
2131
2175
  const injector = inject(Injector);
2132
- const queries = signal([]);
2133
- const lastQuery = signal(null);
2134
- const firstQuery = computed(() => queries()[0] ?? null);
2135
- const hasWithArgsFeature = features.some((f) => f.type == "withArgs" /* QueryFeatureType.WithArgs */);
2136
- const hasWithOptimisticUpdateFeature = features.some((f) => f.type == "withResponseUpdate" /* QueryFeatureType.WithResponseUpdate */);
2176
+ const queries = signal([], ...(ngDevMode ? [{ debugName: "queries" }] : []));
2177
+ const lastQuery = signal(null, ...(ngDevMode ? [{ debugName: "lastQuery" }] : []));
2178
+ const firstQuery = computed(() => queries()[0] ?? null, ...(ngDevMode ? [{ debugName: "firstQuery" }] : []));
2179
+ const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WITH_ARGS);
2180
+ const hasWithOptimisticUpdateFeature = features.some((f) => f.type == QueryFeatureType.WITH_RESPONSE_UPDATE);
2137
2181
  if (hasWithArgsFeature) {
2138
2182
  throw queryStackWithArgsUsed();
2139
2183
  }
@@ -2173,10 +2217,10 @@ const createQueryStack = (options) => {
2173
2217
  });
2174
2218
  return result;
2175
2219
  };
2176
- const loading = computed(() => queries().some((q) => q.loading()));
2220
+ const loading = computed(() => queries().some((q) => q.loading()), ...(ngDevMode ? [{ debugName: "loading" }] : []));
2177
2221
  const error = computed(() => queries()
2178
2222
  .map((q) => q.error())
2179
- .find((e) => e !== null) ?? null);
2223
+ .find((e) => e !== null) ?? null, ...(ngDevMode ? [{ debugName: "error" }] : []));
2180
2224
  const response = computed(() => {
2181
2225
  const responses = queries().map((q) => q.response());
2182
2226
  return transform?.(responses) ?? responses;
@@ -2266,12 +2310,12 @@ const fakePaginationAdapter = (totalHits = 10) => {
2266
2310
  };
2267
2311
  const createPagedQueryStack = (options) => {
2268
2312
  const { responseNormalizer, queryCreator, features } = options;
2269
- const currentPageArgs = signal(null);
2270
- const initialPage = signal(options.initialPage ?? 1);
2271
- const loadedMinPage = signal(initialPage());
2272
- const loadedMaxPage = signal(initialPage());
2273
- const lastResetTimestamp = signal(Date.now());
2274
- const pageDirection = signal('next');
2313
+ const currentPageArgs = signal(null, ...(ngDevMode ? [{ debugName: "currentPageArgs" }] : []));
2314
+ const initialPage = signal(options.initialPage ?? 1, ...(ngDevMode ? [{ debugName: "initialPage" }] : []));
2315
+ const loadedMinPage = signal(initialPage(), ...(ngDevMode ? [{ debugName: "loadedMinPage" }] : []));
2316
+ const loadedMaxPage = signal(initialPage(), ...(ngDevMode ? [{ debugName: "loadedMaxPage" }] : []));
2317
+ const lastResetTimestamp = signal(Date.now(), ...(ngDevMode ? [{ debugName: "lastResetTimestamp" }] : []));
2318
+ const pageDirection = signal('next', ...(ngDevMode ? [{ debugName: "pageDirection" }] : []));
2275
2319
  const stack = createQueryStack({
2276
2320
  args: () => null,
2277
2321
  queryCreator,
@@ -2310,22 +2354,22 @@ const createPagedQueryStack = (options) => {
2310
2354
  if (!res)
2311
2355
  return null;
2312
2356
  return responseNormalizer(res, all);
2313
- });
2357
+ }, ...(ngDevMode ? [{ debugName: "maxPagination" }] : []));
2314
2358
  const minPagination = computed(() => {
2315
2359
  const res = stack.firstQuery()?.response();
2316
2360
  const all = stack.response();
2317
2361
  if (!res)
2318
2362
  return null;
2319
2363
  return responseNormalizer(res, all);
2320
- });
2364
+ }, ...(ngDevMode ? [{ debugName: "minPagination" }] : []));
2321
2365
  const isFirstPageLoaded = computed(() => {
2322
2366
  const min = minPagination();
2323
2367
  return min ? loadedMinPage() === min.currentPage : false;
2324
- });
2368
+ }, ...(ngDevMode ? [{ debugName: "isFirstPageLoaded" }] : []));
2325
2369
  const isLastPageLoaded = computed(() => {
2326
2370
  const max = maxPagination();
2327
2371
  return max ? loadedMaxPage() === max.totalPages : false;
2328
- });
2372
+ }, ...(ngDevMode ? [{ debugName: "isLastPageLoaded" }] : []));
2329
2373
  const fetchPreviousPage = () => {
2330
2374
  const page = loadedMinPage() - 1;
2331
2375
  const allResponses = stack.response();
@@ -2401,18 +2445,18 @@ const createPagedQueryStack = (options) => {
2401
2445
  if (!currentMinPagination)
2402
2446
  return false;
2403
2447
  return loadedMinPage() > 1;
2404
- });
2448
+ }, ...(ngDevMode ? [{ debugName: "canFetchPreviousPage" }] : []));
2405
2449
  const canFetchNextPage = computed(() => {
2406
2450
  const currentMaxPagination = maxPagination();
2407
2451
  return currentMaxPagination ? loadedMaxPage() < currentMaxPagination.totalPages : false;
2408
- });
2452
+ }, ...(ngDevMode ? [{ debugName: "canFetchNextPage" }] : []));
2409
2453
  const items = computed(() => {
2410
2454
  const res = stack.response();
2411
2455
  return res.map((r) => responseNormalizer(r, res).items).flat();
2412
- });
2456
+ }, ...(ngDevMode ? [{ debugName: "items" }] : []));
2413
2457
  const isFirstLoad = computed(() => {
2414
2458
  return stack.queries().length === 1 && !!stack.lastQuery()?.loading();
2415
- });
2459
+ }, ...(ngDevMode ? [{ debugName: "isFirstLoad" }] : []));
2416
2460
  const execute = (options) => {
2417
2461
  const whereFn = options?.where;
2418
2462
  if (whereFn) {
@@ -2532,7 +2576,7 @@ const setupQueryExecuteState = () => {
2532
2576
  previousKey: signal(false),
2533
2577
  };
2534
2578
  };
2535
- const syncSignal = (signal, target) => {
2579
+ const bindSignalToTarget = (signal, target) => {
2536
2580
  target.set(signal());
2537
2581
  return nestedEffect(() => {
2538
2582
  const val = signal();
@@ -2561,10 +2605,10 @@ const queryExecute = (options) => {
2561
2605
  executeState.previousKey.set(key);
2562
2606
  const responseSignal = transformResponse ? computed(() => transformResponse(request.response())) : request.response;
2563
2607
  runInInjectionContext(deps.injector, () => {
2564
- const responseRef = syncSignal(responseSignal, state.response);
2565
- const loadingRef = syncSignal(request.loading, state.loading);
2566
- const errorRef = syncSignal(request.error, state.error);
2567
- const latestHttpEventRef = syncSignal(request.currentEvent, state.latestHttpEvent);
2608
+ const responseRef = bindSignalToTarget(responseSignal, state.response);
2609
+ const loadingRef = bindSignalToTarget(request.loading, state.loading);
2610
+ const errorRef = bindSignalToTarget(request.error, state.error);
2611
+ const latestHttpEventRef = bindSignalToTarget(request.currentEvent, state.latestHttpEvent);
2568
2612
  executeState.effectRefs.push(responseRef, loadingRef, errorRef, latestHttpEventRef);
2569
2613
  });
2570
2614
  state.lastTimeExecutedAt.set(Date.now());
@@ -3217,7 +3261,7 @@ class LegacyQuery {
3217
3261
  });
3218
3262
  }
3219
3263
  });
3220
- });
3264
+ }, ...(ngDevMode ? [{ debugName: "storeSyncEffect" }] : []));
3221
3265
  /**
3222
3266
  * @internal
3223
3267
  */
@@ -3384,7 +3428,7 @@ class LegacyQueryCreator {
3384
3428
  legacyQuery.destroy();
3385
3429
  destroyEffect.destroy();
3386
3430
  }
3387
- });
3431
+ }, ...(ngDevMode ? [{ debugName: "destroyEffect" }] : []));
3388
3432
  }
3389
3433
  return legacyQuery;
3390
3434
  });
@@ -3396,7 +3440,7 @@ class LegacyQueryCreator {
3396
3440
  return subject;
3397
3441
  };
3398
3442
  this.createSignal = (initialValue, config) => {
3399
- const _signal = signal(initialValue ?? null);
3443
+ const _signal = signal(initialValue ?? null, ...(ngDevMode ? [{ debugName: "_signal" }] : []));
3400
3444
  addQueryContainerHandling(toObservable(_signal), () => _signal(), config);
3401
3445
  return _signal;
3402
3446
  };
@@ -3584,10 +3628,10 @@ class ParseHttpErrorCodeToTitleDePipe {
3584
3628
  constructor() {
3585
3629
  this.transform = parseHttpErrorCodeToTitleDe;
3586
3630
  }
3587
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ParseHttpErrorCodeToTitleDePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
3588
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.3", ngImport: i0, type: ParseHttpErrorCodeToTitleDePipe, isStandalone: true, name: "parseHttpErrorCodeToTitleDe" }); }
3631
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ParseHttpErrorCodeToTitleDePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
3632
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.4", ngImport: i0, type: ParseHttpErrorCodeToTitleDePipe, isStandalone: true, name: "parseHttpErrorCodeToTitleDe" }); }
3589
3633
  }
3590
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ParseHttpErrorCodeToTitleDePipe, decorators: [{
3634
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ParseHttpErrorCodeToTitleDePipe, decorators: [{
3591
3635
  type: Pipe,
3592
3636
  args: [{
3593
3637
  name: 'parseHttpErrorCodeToTitleDe',
@@ -3598,10 +3642,10 @@ class ParseHttpErrorCodeToMessageDePipe {
3598
3642
  constructor() {
3599
3643
  this.transform = parseHttpErrorCodeToMessageDe;
3600
3644
  }
3601
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ParseHttpErrorCodeToMessageDePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
3602
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.3", ngImport: i0, type: ParseHttpErrorCodeToMessageDePipe, isStandalone: true, name: "parseHttpErrorCodeToMessageDe" }); }
3645
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ParseHttpErrorCodeToMessageDePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
3646
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.4", ngImport: i0, type: ParseHttpErrorCodeToMessageDePipe, isStandalone: true, name: "parseHttpErrorCodeToMessageDe" }); }
3603
3647
  }
3604
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ParseHttpErrorCodeToMessageDePipe, decorators: [{
3648
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ParseHttpErrorCodeToMessageDePipe, decorators: [{
3605
3649
  type: Pipe,
3606
3650
  args: [{
3607
3651
  name: 'parseHttpErrorCodeToMessageDe',
@@ -3786,10 +3830,10 @@ class ParseHttpErrorCodeToTitleEnPipe {
3786
3830
  constructor() {
3787
3831
  this.transform = parseHttpErrorCodeToTitleEn;
3788
3832
  }
3789
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ParseHttpErrorCodeToTitleEnPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
3790
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.3", ngImport: i0, type: ParseHttpErrorCodeToTitleEnPipe, isStandalone: true, name: "parseHttpErrorCodeToTitleEn" }); }
3833
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ParseHttpErrorCodeToTitleEnPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
3834
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.4", ngImport: i0, type: ParseHttpErrorCodeToTitleEnPipe, isStandalone: true, name: "parseHttpErrorCodeToTitleEn" }); }
3791
3835
  }
3792
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ParseHttpErrorCodeToTitleEnPipe, decorators: [{
3836
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ParseHttpErrorCodeToTitleEnPipe, decorators: [{
3793
3837
  type: Pipe,
3794
3838
  args: [{
3795
3839
  name: 'parseHttpErrorCodeToTitleEn',
@@ -3800,10 +3844,10 @@ class ParseHttpErrorCodeToMessageEnPipe {
3800
3844
  constructor() {
3801
3845
  this.transform = parseHttpErrorCodeToMessageEn;
3802
3846
  }
3803
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ParseHttpErrorCodeToMessageEnPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
3804
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.3", ngImport: i0, type: ParseHttpErrorCodeToMessageEnPipe, isStandalone: true, name: "parseHttpErrorCodeToMessageEn" }); }
3847
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ParseHttpErrorCodeToMessageEnPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
3848
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.4", ngImport: i0, type: ParseHttpErrorCodeToMessageEnPipe, isStandalone: true, name: "parseHttpErrorCodeToMessageEn" }); }
3805
3849
  }
3806
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ParseHttpErrorCodeToMessageEnPipe, decorators: [{
3850
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ParseHttpErrorCodeToMessageEnPipe, decorators: [{
3807
3851
  type: Pipe,
3808
3852
  args: [{
3809
3853
  name: 'parseHttpErrorCodeToMessageEn',
@@ -3811,11 +3855,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
3811
3855
  }]
3812
3856
  }] });
3813
3857
 
3858
+ // codes 1000-1999
3859
+ const WebSocketRuntimeErrorCode = {
3860
+ // Web Socket Client
3861
+ ROOM_NOT_JOINED: 1000,
3862
+ MESSAGE_MALFORMED: 1001,
3863
+ };
3814
3864
  const roomNotJoined = (room) => {
3815
- return new RuntimeError(1000 /* WebSocketRuntimeErrorCode.ROOM_NOT_JOINED */, `Tried leaving the room "${room}" but it has not been joined.`);
3865
+ return new RuntimeError(WebSocketRuntimeErrorCode.ROOM_NOT_JOINED, `Tried leaving the room "${room}" but it has not been joined.`);
3816
3866
  };
3817
3867
  const messageMalformed = () => {
3818
- return new RuntimeError(1001 /* WebSocketRuntimeErrorCode.MESSAGE_MALFORMED */, 'A message has been received but it is malformed (cannot be parsed as JSON).');
3868
+ return new RuntimeError(WebSocketRuntimeErrorCode.MESSAGE_MALFORMED, 'A message has been received but it is malformed (cannot be parsed as JSON).');
3819
3869
  };
3820
3870
 
3821
3871
  const createWebSocketClient = (config) => {
@@ -3825,17 +3875,17 @@ const createWebSocketClient = (config) => {
3825
3875
  transports: config.transports,
3826
3876
  });
3827
3877
  const rooms = new Map();
3828
- const isConnected = signal(false);
3878
+ const isConnected = signal(false, ...(ngDevMode ? [{ debugName: "isConnected" }] : []));
3829
3879
  const joinRoom = (room) => {
3830
3880
  const roomFn = typeof room === 'function' ? room : () => room;
3831
3881
  const pre = previousSignalValue(computed(() => roomFn()));
3832
- const roomData = signal(null);
3882
+ const roomData = signal(null, ...(ngDevMode ? [{ debugName: "roomData" }] : []));
3833
3883
  const join = (name) => {
3834
3884
  socket.emit('join-room', name);
3835
3885
  const existingRoom = rooms.get(name);
3836
3886
  if (existingRoom)
3837
3887
  return existingRoom;
3838
- const message = signal(null);
3888
+ const message = signal(null, ...(ngDevMode ? [{ debugName: "message" }] : []));
3839
3889
  const newRoom = {
3840
3890
  latestMessage: message,
3841
3891
  };
@@ -3941,9 +3991,12 @@ var index = /*#__PURE__*/Object.freeze({
3941
3991
  ParseHttpErrorCodeToMessageEnPipe: ParseHttpErrorCodeToMessageEnPipe,
3942
3992
  ParseHttpErrorCodeToTitleDePipe: ParseHttpErrorCodeToTitleDePipe,
3943
3993
  ParseHttpErrorCodeToTitleEnPipe: ParseHttpErrorCodeToTitleEnPipe,
3994
+ QueryFeatureType: QueryFeatureType,
3995
+ QueryRuntimeErrorCode: QueryRuntimeErrorCode,
3944
3996
  SPEED_BUFFER_TIME_IN_MS: SPEED_BUFFER_TIME_IN_MS,
3945
3997
  applyQueryFeatures: applyQueryFeatures,
3946
3998
  bearerExpiresInPropertyNotNumber: bearerExpiresInPropertyNotNumber,
3999
+ bindSignalToTarget: bindSignalToTarget,
3947
4000
  buildQueryCacheKey: buildQueryCacheKey,
3948
4001
  circularQueryDependencyChecker: circularQueryDependencyChecker,
3949
4002
  cleanupPreviousExecute: cleanupPreviousExecute,
@@ -3972,6 +4025,7 @@ var index = /*#__PURE__*/Object.freeze({
3972
4025
  createQueryClientConfig: createQueryClientConfig,
3973
4026
  createQueryCreator: createQueryCreator,
3974
4027
  createQueryErrorResponse: createQueryErrorResponse,
4028
+ createQueryFeature: createQueryFeature,
3975
4029
  createQueryObject: createQueryObject,
3976
4030
  createQueryRepository: createQueryRepository,
3977
4031
  createQuerySnapshotFn: createQuerySnapshotFn,
@@ -4032,6 +4086,7 @@ var index = /*#__PURE__*/Object.freeze({
4032
4086
  silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent: silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent,
4033
4087
  splitQueryConfig: splitQueryConfig,
4034
4088
  transformArrayResponse: transformArrayResponse,
4089
+ transformExecStateToQueryState: transformExecStateToQueryState,
4035
4090
  transformPaginatedResponse: transformPaginatedResponse,
4036
4091
  unableToDecryptBearerToken: unableToDecryptBearerToken,
4037
4092
  uncacheableRequestHasAllowCacheParam: uncacheableRequestHasAllowCacheParam,
@@ -4181,7 +4236,7 @@ const createQueryCollectionSubject = (queryMap, config) => {
4181
4236
  };
4182
4237
  const createQueryCollectionSignal = (queryMap, config) => {
4183
4238
  assertInInjectionContext(createQueryCollectionSignal);
4184
- const _signal = signal(null);
4239
+ const _signal = signal(null, ...(ngDevMode ? [{ debugName: "_signal" }] : []));
4185
4240
  addQueryContainerHandling(toObservable(_signal).pipe(map((s) => s?.query ?? null)), () => _signal()?.query ?? null, config);
4186
4241
  return _signal;
4187
4242
  };
@@ -4814,6 +4869,9 @@ class BearerAuthProvider {
4814
4869
  this._config.refreshConfig.cookieEnabled = false;
4815
4870
  this._deleteCookie();
4816
4871
  }
4872
+ forceRefresh() {
4873
+ return this._refreshQuery();
4874
+ }
4817
4875
  _setCookie() {
4818
4876
  if (!this._config.refreshConfig?.cookieName || !this.tokens.refreshToken)
4819
4877
  return;
@@ -4919,8 +4977,8 @@ class QueryDirective {
4919
4977
  scope: null,
4920
4978
  query: null,
4921
4979
  };
4922
- this.query = input.required({ alias: 'etQuery' });
4923
- this.cache = input(false, { alias: 'etQueryCache' });
4980
+ this.query = input.required(...(ngDevMode ? [{ debugName: "query", alias: 'etQuery' }] : [{ alias: 'etQuery' }]));
4981
+ this.cache = input(false, ...(ngDevMode ? [{ debugName: "cache", alias: 'etQueryCache' }] : [{ alias: 'etQueryCache' }]));
4924
4982
  this.queryState = queryStateSignal(this.query);
4925
4983
  inject(ViewContainerRef).createEmbeddedView(inject(TemplateRef), this._viewContext);
4926
4984
  effect(() => {
@@ -4981,10 +5039,10 @@ class QueryDirective {
4981
5039
  });
4982
5040
  });
4983
5041
  }
4984
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: QueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
4985
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.3", type: QueryDirective, isStandalone: true, selector: "[etQuery]", inputs: { query: { classPropertyName: "query", publicName: "etQuery", isSignal: true, isRequired: true, transformFunction: null }, cache: { classPropertyName: "cache", publicName: "etQueryCache", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
5042
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: QueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5043
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.4", type: QueryDirective, isStandalone: true, selector: "[etQuery]", inputs: { query: { classPropertyName: "query", publicName: "etQuery", isSignal: true, isRequired: true, transformFunction: null }, cache: { classPropertyName: "cache", publicName: "etQueryCache", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
4986
5044
  }
4987
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: QueryDirective, decorators: [{
5045
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: QueryDirective, decorators: [{
4988
5046
  type: Directive,
4989
5047
  args: [{
4990
5048
  selector: '[etQuery]',
@@ -5288,10 +5346,10 @@ class InfinityQueryDirective {
5288
5346
  this._viewContext.currentQuery = null;
5289
5347
  this._data$.next([]);
5290
5348
  }
5291
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: InfinityQueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5292
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.3", type: InfinityQueryDirective, isStandalone: true, selector: "[etInfinityQuery]", inputs: { infinityQuery: ["etInfinityQuery", "infinityQuery"] }, providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }], exportAs: ["etInfinityQuery"], hostDirectives: [{ directive: i1.DelayableDirective }], ngImport: i0 }); }
5349
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: InfinityQueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5350
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.4", type: InfinityQueryDirective, isStandalone: true, selector: "[etInfinityQuery]", inputs: { infinityQuery: ["etInfinityQuery", "infinityQuery"] }, providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }], exportAs: ["etInfinityQuery"], hostDirectives: [{ directive: i1.DelayableDirective }], ngImport: i0 }); }
5293
5351
  }
5294
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: InfinityQueryDirective, decorators: [{
5352
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: InfinityQueryDirective, decorators: [{
5295
5353
  type: Directive,
5296
5354
  args: [{
5297
5355
  selector: '[etInfinityQuery]',
@@ -5343,10 +5401,10 @@ class InfinityQueryTriggerDirective {
5343
5401
  });
5344
5402
  this._observer.observe(this._elementRef.nativeElement);
5345
5403
  }
5346
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: InfinityQueryTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5347
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.3", type: InfinityQueryTriggerDirective, isStandalone: true, selector: "[etInfinityQueryTrigger], et-infinity-query-trigger", inputs: { scrollContainerSelector: "scrollContainerSelector" }, ngImport: i0 }); }
5404
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: InfinityQueryTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5405
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.4", type: InfinityQueryTriggerDirective, isStandalone: true, selector: "[etInfinityQueryTrigger], et-infinity-query-trigger", inputs: { scrollContainerSelector: "scrollContainerSelector" }, ngImport: i0 }); }
5348
5406
  }
5349
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: InfinityQueryTriggerDirective, decorators: [{
5407
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: InfinityQueryTriggerDirective, decorators: [{
5350
5408
  type: Directive,
5351
5409
  args: [{
5352
5410
  selector: '[etInfinityQueryTrigger], et-infinity-query-trigger',
@@ -5370,10 +5428,10 @@ class QueryShortNamePipe {
5370
5428
  }
5371
5429
  return route;
5372
5430
  }
5373
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: QueryShortNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
5374
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.3", ngImport: i0, type: QueryShortNamePipe, isStandalone: true, name: "queryShortName" }); }
5431
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: QueryShortNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
5432
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.4", ngImport: i0, type: QueryShortNamePipe, isStandalone: true, name: "queryShortName" }); }
5375
5433
  }
5376
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: QueryShortNamePipe, decorators: [{
5434
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: QueryShortNamePipe, decorators: [{
5377
5435
  type: Pipe,
5378
5436
  args: [{ name: 'queryShortName', standalone: true }]
5379
5437
  }] });
@@ -5395,19 +5453,19 @@ class QueryDevtoolsComponent {
5395
5453
  this._cdr = inject(ChangeDetectorRef);
5396
5454
  this._destroy$ = createDestroy();
5397
5455
  this.queryClientConfigs = inject(QUERY_CLIENT_DEVTOOLS_TOKEN);
5398
- this.isOpen = signal(false);
5399
- this.isTranslucent = signal(false);
5400
- this.snapLayout = signal('full');
5401
- this.queryListMode = signal('live');
5402
- this.viewMode = signal('query');
5403
- this.showResponse = signal(false);
5404
- this.showRawResponse = signal(false);
5405
- this.showQueryConfig = signal(false);
5406
- this.showEntityStoreValue = signal(false);
5407
- this.showArguments = signal(false);
5456
+ this.isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
5457
+ this.isTranslucent = signal(false, ...(ngDevMode ? [{ debugName: "isTranslucent" }] : []));
5458
+ this.snapLayout = signal('full', ...(ngDevMode ? [{ debugName: "snapLayout" }] : []));
5459
+ this.queryListMode = signal('live', ...(ngDevMode ? [{ debugName: "queryListMode" }] : []));
5460
+ this.viewMode = signal('query', ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
5461
+ this.showResponse = signal(false, ...(ngDevMode ? [{ debugName: "showResponse" }] : []));
5462
+ this.showRawResponse = signal(false, ...(ngDevMode ? [{ debugName: "showRawResponse" }] : []));
5463
+ this.showQueryConfig = signal(false, ...(ngDevMode ? [{ debugName: "showQueryConfig" }] : []));
5464
+ this.showEntityStoreValue = signal(false, ...(ngDevMode ? [{ debugName: "showEntityStoreValue" }] : []));
5465
+ this.showArguments = signal(false, ...(ngDevMode ? [{ debugName: "showArguments" }] : []));
5408
5466
  this.selectedClientIdCtrl = new FormControl(0);
5409
5467
  this.selectedClientId = toSignal(this.selectedClientIdCtrl.valueChanges.pipe(startWith(this.selectedClientIdCtrl.value)));
5410
- this.selectedQueryId = signal(null);
5468
+ this.selectedQueryId = signal(null, ...(ngDevMode ? [{ debugName: "selectedQueryId" }] : []));
5411
5469
  this.selectedClientConfig = computed(() => {
5412
5470
  if (this.queryClientConfigs.length === 1) {
5413
5471
  return this.queryClientConfigs[0];
@@ -5418,11 +5476,11 @@ class QueryDevtoolsComponent {
5418
5476
  return this.queryClientConfigs[0];
5419
5477
  }
5420
5478
  return cfg;
5421
- });
5479
+ }, ...(ngDevMode ? [{ debugName: "selectedClientConfig" }] : []));
5422
5480
  this.queryStore = computed(() => {
5423
5481
  const config = this.selectedClientConfig();
5424
5482
  return config.client._store;
5425
- });
5483
+ }, ...(ngDevMode ? [{ debugName: "queryStore" }] : []));
5426
5484
  this.queryStore$ = toObservable(this.queryStore);
5427
5485
  this._queries$ = new BehaviorSubject([]);
5428
5486
  this.queries = toSignal(this._queries$);
@@ -5436,14 +5494,14 @@ class QueryDevtoolsComponent {
5436
5494
  return this.queries()?.find((q) => q._id === id) ?? null;
5437
5495
  }
5438
5496
  return this.queryHistory$.getValue()?.find((q) => q._id === id) ?? null;
5439
- });
5497
+ }, ...(ngDevMode ? [{ debugName: "selectedQuery" }] : []));
5440
5498
  this.selectedQuery$ = toObservable(this.selectedQuery);
5441
5499
  this.selectedQueryEntityStore = computed(() => {
5442
5500
  const query = this.selectedQuery();
5443
5501
  if (!query)
5444
5502
  return null;
5445
5503
  return query.store;
5446
- });
5504
+ }, ...(ngDevMode ? [{ debugName: "selectedQueryEntityStore" }] : []));
5447
5505
  this.selectedQueryEntityStore$ = toObservable(this.selectedQueryEntityStore);
5448
5506
  this.selectedQueryEntityStoreValue$ = this.selectedQueryEntityStore$.pipe(switchMap((s) => s?._change$.pipe(startWith(''), map(() => {
5449
5507
  if (!s._dictionary)
@@ -5481,7 +5539,7 @@ class QueryDevtoolsComponent {
5481
5539
  return {
5482
5540
  ...sharedCfg,
5483
5541
  };
5484
- });
5542
+ }, ...(ngDevMode ? [{ debugName: "stringifiedQueryConfig" }] : []));
5485
5543
  this.authProvider = toSignal(toObservable(this.selectedClientConfig).pipe(switchMap((c) => c.client.authProvider$)));
5486
5544
  this.authProviderDetails = computed(() => {
5487
5545
  const provider = this.authProvider();
@@ -5543,7 +5601,7 @@ class QueryDevtoolsComponent {
5543
5601
  config: {},
5544
5602
  };
5545
5603
  }
5546
- });
5604
+ }, ...(ngDevMode ? [{ debugName: "authProviderDetails" }] : []));
5547
5605
  this.trackByClient = (_, { client }) => client.config.baseRoute;
5548
5606
  this.trackByQuery = (_, { _id }) => _id;
5549
5607
  this.selectedClientIdCtrl.valueChanges
@@ -5664,10 +5722,10 @@ class QueryDevtoolsComponent {
5664
5722
  clearQueryHistory() {
5665
5723
  this.queryHistory$.next([]);
5666
5724
  }
5667
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: QueryDevtoolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5668
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.3", type: QueryDevtoolsComponent, isStandalone: true, selector: "et-query-devtools", host: { classAttribute: "et-query-devtools" }, ngImport: i0, template: "@if (!isOpen()) {\n <button (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Query Devtools</button>\n}\n\n@if (isOpen()) {\n <div\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n >\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n @for (clientConfig of queryClientConfigs; track trackByClient(i, clientConfig); let i = $index) {\n <option [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n }\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n }\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Inspector</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' || viewMode() !== 'query' }\"\n (click)=\"selectQueryListMode('live'); selectViewMode('query')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live Queries ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' || viewMode() !== 'query' }\"\n (click)=\"selectQueryListMode('history'); selectViewMode('query')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Query History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)\n </button>\n @if (queryListMode() === 'history' && viewMode() === 'query') {\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n }\n\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': viewMode() !== 'authProvider' }\"\n (click)=\"selectViewMode('authProvider')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Auth Provider\n </button>\n </div>\n\n @if (viewMode() === 'query') {\n <div class=\"et-qd-queries__browser\">\n @if (queryListMode() === 'live') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queries(); track trackByQuery($index, query)) {\n <li>\n <button\n [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\"\n (click)=\"selectQuery(query)\"\n >\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n @if (queryListMode() === 'history') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queryHistory$ | async; track trackByQuery($index, query)) {\n <li>\n <button\n [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\"\n (click)=\"selectQuery(query)\"\n >\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n <div class=\"et-qd-queries__browser-detail\">\n @if (selectedQuery(); as query) {\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n @if (query.isPolling || query._isPollingPaused) {\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n }\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Dependents</p>\n <pre>{{ query._dependents | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query store key</p>\n <pre>{{ query._queryStoreKey }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showArguments()) {\n <pre>{{ query._arguments | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showResponse()) {\n <pre>{{ query.state$ | async | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showRawResponse()) {\n <pre>{{ query.rawState | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showQueryConfig()) {\n <pre>{{ stringifiedQueryConfig() | json }}</pre>\n }\n </div>\n\n @if (!!query._queryConfig.entity) {\n <div class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showEntityStoreValue()) {\n <pre>{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n } @else if (viewMode() === 'authProvider') {\n <div class=\"et-qd-auth-provider__viewer\">\n @if (authProviderDetails(); as details) {\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>Type</p>\n <pre>{{ details.type }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Header value</p>\n <pre>{{ details.header() | json }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Config</p>\n <pre>{{ details.config | json }}</pre>\n </div>\n\n @if (details.type === 'BearerAuthProvider') {\n <div class=\"et-qd-list-item\">\n <p>Tokens</p>\n <pre>{{ details.provider.tokens$ | async | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Should refresh on unauthorized response</p>\n <pre>{{ details.provider.shouldRefreshOnUnauthorizedResponse }}</pre>\n </div>\n\n <ng-container\n *etQuery=\"\n details.provider.currentRefreshQuery$ | async as response;\n loading as loading;\n error as error;\n query as query\n \"\n >\n <div class=\"et-qd-list-item\">\n <p>Refresh query response</p>\n\n <div>\n <button (click)=\"details.provider._refreshQuery()\" class=\"et-qd-chip et-qd-chip-bordered\">\n Refresh\n </button>\n </div>\n <pre>{{ response | json }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Refresh query loading</p>\n <pre>{{ loading }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Refresh query error</p>\n <pre>{{ error ?? 'null' }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <pre>{{ query?.state$ | async | json }}</pre>\n </div>\n </ng-container>\n }\n </div>\n } @else {\n <p>No auth provider set</p>\n }\n </div>\n }\n </div>\n }\n </div>\n}\n", styles: [":host{position:fixed;top:0;z-index:1000000;font-size:14px;color:#fff}.et-query-devtools-container{position:fixed;inset:0;background-color:#25292e;z-index:10000;overflow:auto;font-family:monospace;display:grid;grid-template-rows:auto auto auto minmax(0,1fr)}.et-query-devtools-container.et-query-devtools-container--transparent{opacity:.25;pointer-events:none}.et-query-devtools-container.et-query-devtools-container--transparent .et-query-devtools-translucent-btn{pointer-events:all}.et-query-devtools-container.et-query-devtools-container--snap-left{inset-inline-start:0;inset-block-start:0;inset-block-end:0;width:50%;border-right:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-right{inset-inline-start:unset;inset-inline-end:0;inset-block-start:0;inset-block-end:0;width:50%;border-left:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-top{inset-inline-start:0;inset-block-start:0;inset-inline-end:0;height:50%;border-bottom:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-bottom{inset-inline-start:0;inset-block-start:unset;inset-block-end:0;inset-inline-end:0;height:50%;border-top:1px solid rgb(37,41,46)}button.et-query-devtools-open-btn{position:fixed;inset-inline-end:20px;inset-block-end:0;z-index:9999;font-family:monospace;border-radius:3px 3px 0 0;line-height:14px;font-size:12px}.et-qd-header{background-color:#00ffa1;padding:12px;display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center}.et-qd-header__title{color:#25292e;margin:0;font-size:22px}.et-qd-header__select{display:grid;background-color:#25292e;border-radius:10px;overflow:hidden}.et-qd-header__select select{width:250px;color:#fff;padding:3px 10px 2px;border:none;background-color:#25292e;font-family:monospace}.et-qd-header__select label{padding:3px 10px;color:#25292e;font-size:12px;font-weight:700;color:#fff;border-bottom:1px solid gray}.et-qd-sub-header{background-color:#00b371;padding:12px;display:flex;gap:12px;flex-wrap:wrap}.et-qd-sub-header__divider{width:1px;background-color:#25292e}.et-qd-btn{background-color:#00ffa1;color:#25292e;border:none;padding:12px;cursor:pointer;font-size:14px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;width:100%;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-btn:hover{background-color:#00cc81}.et-qd-btn.et-qd-btn-secondary{background-color:#25292e;color:#00ffa1}.et-qd-btn.et-qd-btn-secondary:hover{background-color:#3c424a}.et-qd-chip{background-color:#00ffa1;color:#25292e;border:none;padding:4px 9px;cursor:pointer;font-size:12px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-chip:hover{background-color:#00cc81}.et-qd-chip.et-qd-chip-secondary{background-color:#25292e;color:#00ffa1}.et-qd-chip.et-qd-chip-secondary:hover{background-color:#3c424a}.et-qd-chip.et-qd-chip-bordered{border:1px solid rgb(0,255,161)}.et-qd-translucent-clickable{pointer-events:all}.et-qd-client{border-bottom:1px solid rgb(59.734939759,66.1927710843,74.265060241);padding:12px}.et-qd-client__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-client__actions{display:flex;gap:12px;margin-top:12px}.et-qd-queries{padding:12px;display:grid;grid-template-rows:auto auto minmax(0,1fr)}.et-qd-queries__actions{display:flex;gap:12px;margin-top:12px;margin-bottom:16px}.et-qd-queries__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-queries__divider{width:1px;background-color:#3c424a}.et-qd-queries__browser{display:grid;grid-template-columns:1fr minmax(0,3fr);margin-left:-12px;margin-right:-12px;border-top:1px solid rgb(59.734939759,66.1927710843,74.265060241);margin-bottom:-12px}.et-qd-queries__browser-list{border-right:1px solid rgb(59.734939759,66.1927710843,74.265060241);list-style:none;padding:0;margin:0;display:grid;grid-auto-flow:row;grid-auto-rows:55px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-list li{margin:0}.et-qd-queries__browser-list li button{all:unset;font-family:monospace;box-sizing:border-box;width:100%;border:none;border-bottom:1px solid rgb(59.734939759,66.1927710843,74.265060241);background-color:#25292e;color:#fff;text-align:left;padding:12px;height:100%;transition:all .3s ease-in-out;cursor:pointer;display:grid;grid-template-columns:auto minmax(0,1fr);gap:2px;display:block}.et-qd-queries__browser-list li button span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.et-qd-queries__browser-list li button span:first-of-type{font-weight:700}.et-qd-queries__browser-list li button:hover,.et-qd-queries__browser-list li button.et-qd-query--active{background-color:#30363c}.et-qd-queries__browser-detail{padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-detail__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-auth-provider__viewer{border-top:1px solid rgb(59.734939759,66.1927710843,74.265060241);margin-left:-12px;margin-right:-12px;margin-bottom:-12px;padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-list{display:grid;gap:12px}.et-qd-list-item{display:grid}.et-qd-list-item p{font-weight:700;margin:0;padding-bottom:8px}.et-qd-list-item p+p{margin-top:-8px}.et-qd-list-item div+pre{margin-top:8px}.et-qd-list-item pre{margin:0;padding:4px;background-color:#0e1012;border-radius:4px;max-height:450px;overflow:auto}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: QueryShortNamePipe, name: "queryShortName" }, { kind: "directive", type: QueryDirective, selector: "[etQuery]", inputs: ["etQuery", "etQueryCache"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom }); }
5725
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: QueryDevtoolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5726
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: QueryDevtoolsComponent, isStandalone: true, selector: "et-query-devtools", host: { classAttribute: "et-query-devtools" }, ngImport: i0, template: "@if (!isOpen()) {\n <button (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Query Devtools</button>\n}\n\n@if (isOpen()) {\n <div\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n >\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n @for (clientConfig of queryClientConfigs; track trackByClient(i, clientConfig); let i = $index) {\n <option [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n }\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n }\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Inspector</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' || viewMode() !== 'query' }\"\n (click)=\"selectQueryListMode('live'); selectViewMode('query')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live Queries ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' || viewMode() !== 'query' }\"\n (click)=\"selectQueryListMode('history'); selectViewMode('query')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Query History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)\n </button>\n @if (queryListMode() === 'history' && viewMode() === 'query') {\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n }\n\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': viewMode() !== 'authProvider' }\"\n (click)=\"selectViewMode('authProvider')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Auth Provider\n </button>\n </div>\n\n @if (viewMode() === 'query') {\n <div class=\"et-qd-queries__browser\">\n @if (queryListMode() === 'live') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queries(); track trackByQuery($index, query)) {\n <li>\n <button\n [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\"\n (click)=\"selectQuery(query)\"\n >\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n @if (queryListMode() === 'history') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queryHistory$ | async; track trackByQuery($index, query)) {\n <li>\n <button\n [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\"\n (click)=\"selectQuery(query)\"\n >\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n <div class=\"et-qd-queries__browser-detail\">\n @if (selectedQuery(); as query) {\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n @if (query.isPolling || query._isPollingPaused) {\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n }\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Dependents</p>\n <pre>{{ query._dependents | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query store key</p>\n <pre>{{ query._queryStoreKey }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showArguments()) {\n <pre>{{ query._arguments | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showResponse()) {\n <pre>{{ query.state$ | async | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showRawResponse()) {\n <pre>{{ query.rawState | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showQueryConfig()) {\n <pre>{{ stringifiedQueryConfig() | json }}</pre>\n }\n </div>\n\n @if (!!query._queryConfig.entity) {\n <div class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showEntityStoreValue()) {\n <pre>{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n } @else if (viewMode() === 'authProvider') {\n <div class=\"et-qd-auth-provider__viewer\">\n @if (authProviderDetails(); as details) {\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>Type</p>\n <pre>{{ details.type }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Header value</p>\n <pre>{{ details.header() | json }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Config</p>\n <pre>{{ details.config | json }}</pre>\n </div>\n\n @if (details.type === 'BearerAuthProvider') {\n <div class=\"et-qd-list-item\">\n <p>Tokens</p>\n <pre>{{ details.provider.tokens$ | async | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Should refresh on unauthorized response</p>\n <pre>{{ details.provider.shouldRefreshOnUnauthorizedResponse }}</pre>\n </div>\n\n <ng-container\n *etQuery=\"\n details.provider.currentRefreshQuery$ | async as response;\n loading as loading;\n error as error;\n query as query\n \"\n >\n <div class=\"et-qd-list-item\">\n <p>Refresh query response</p>\n\n <div>\n <button (click)=\"details.provider._refreshQuery()\" class=\"et-qd-chip et-qd-chip-bordered\">\n Refresh\n </button>\n </div>\n <pre>{{ response | json }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Refresh query loading</p>\n <pre>{{ loading }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Refresh query error</p>\n <pre>{{ error ?? 'null' }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <pre>{{ query?.state$ | async | json }}</pre>\n </div>\n </ng-container>\n }\n </div>\n } @else {\n <p>No auth provider set</p>\n }\n </div>\n }\n </div>\n }\n </div>\n}\n", styles: [":host{position:fixed;top:0;z-index:1000000;font-size:14px;color:#fff}.et-query-devtools-container{position:fixed;inset:0;background-color:#25292e;z-index:10000;overflow:auto;font-family:monospace;display:grid;grid-template-rows:auto auto auto minmax(0,1fr)}.et-query-devtools-container.et-query-devtools-container--transparent{opacity:.25;pointer-events:none}.et-query-devtools-container.et-query-devtools-container--transparent .et-query-devtools-translucent-btn{pointer-events:all}.et-query-devtools-container.et-query-devtools-container--snap-left{inset-inline-start:0;inset-block-start:0;inset-block-end:0;width:50%;border-right:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-right{inset-inline-start:unset;inset-inline-end:0;inset-block-start:0;inset-block-end:0;width:50%;border-left:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-top{inset-inline-start:0;inset-block-start:0;inset-inline-end:0;height:50%;border-bottom:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-bottom{inset-inline-start:0;inset-block-start:unset;inset-block-end:0;inset-inline-end:0;height:50%;border-top:1px solid rgb(37,41,46)}button.et-query-devtools-open-btn{position:fixed;inset-inline-end:20px;inset-block-end:0;z-index:9999;font-family:monospace;border-radius:3px 3px 0 0;line-height:14px;font-size:12px}.et-qd-header{background-color:#00ffa1;padding:12px;display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center}.et-qd-header__title{color:#25292e;margin:0;font-size:22px}.et-qd-header__select{display:grid;background-color:#25292e;border-radius:10px;overflow:hidden}.et-qd-header__select select{width:250px;color:#fff;padding:3px 10px 2px;border:none;background-color:#25292e;font-family:monospace}.et-qd-header__select label{padding:3px 10px;color:#25292e;font-size:12px;font-weight:700;color:#fff;border-bottom:1px solid gray}.et-qd-sub-header{background-color:#00b371;padding:12px;display:flex;gap:12px;flex-wrap:wrap}.et-qd-sub-header__divider{width:1px;background-color:#25292e}.et-qd-btn{background-color:#00ffa1;color:#25292e;border:none;padding:12px;cursor:pointer;font-size:14px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;width:100%;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-btn:hover{background-color:#00cc81}.et-qd-btn.et-qd-btn-secondary{background-color:#25292e;color:#00ffa1}.et-qd-btn.et-qd-btn-secondary:hover{background-color:#3c424a}.et-qd-chip{background-color:#00ffa1;color:#25292e;border:none;padding:4px 9px;cursor:pointer;font-size:12px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-chip:hover{background-color:#00cc81}.et-qd-chip.et-qd-chip-secondary{background-color:#25292e;color:#00ffa1}.et-qd-chip.et-qd-chip-secondary:hover{background-color:#3c424a}.et-qd-chip.et-qd-chip-bordered{border:1px solid rgb(0,255,161)}.et-qd-translucent-clickable{pointer-events:all}.et-qd-client{border-bottom:1px solid rgb(59.734939759,66.1927710843,74.265060241);padding:12px}.et-qd-client__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-client__actions{display:flex;gap:12px;margin-top:12px}.et-qd-queries{padding:12px;display:grid;grid-template-rows:auto auto minmax(0,1fr)}.et-qd-queries__actions{display:flex;gap:12px;margin-top:12px;margin-bottom:16px}.et-qd-queries__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-queries__divider{width:1px;background-color:#3c424a}.et-qd-queries__browser{display:grid;grid-template-columns:1fr minmax(0,3fr);margin-left:-12px;margin-right:-12px;border-top:1px solid rgb(59.734939759,66.1927710843,74.265060241);margin-bottom:-12px}.et-qd-queries__browser-list{border-right:1px solid rgb(59.734939759,66.1927710843,74.265060241);list-style:none;padding:0;margin:0;display:grid;grid-auto-flow:row;grid-auto-rows:55px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-list li{margin:0}.et-qd-queries__browser-list li button{all:unset;font-family:monospace;box-sizing:border-box;width:100%;border:none;border-bottom:1px solid rgb(59.734939759,66.1927710843,74.265060241);background-color:#25292e;color:#fff;text-align:left;padding:12px;height:100%;transition:all .3s ease-in-out;cursor:pointer;display:grid;grid-template-columns:auto minmax(0,1fr);gap:2px;display:block}.et-qd-queries__browser-list li button span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.et-qd-queries__browser-list li button span:first-of-type{font-weight:700}.et-qd-queries__browser-list li button:hover,.et-qd-queries__browser-list li button.et-qd-query--active{background-color:#30363c}.et-qd-queries__browser-detail{padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-detail__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-auth-provider__viewer{border-top:1px solid rgb(59.734939759,66.1927710843,74.265060241);margin-left:-12px;margin-right:-12px;margin-bottom:-12px;padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-list{display:grid;gap:12px}.et-qd-list-item{display:grid}.et-qd-list-item p{font-weight:700;margin:0;padding-bottom:8px}.et-qd-list-item p+p{margin-top:-8px}.et-qd-list-item div+pre{margin-top:8px}.et-qd-list-item pre{margin:0;padding:4px;background-color:#0e1012;border-radius:4px;max-height:450px;overflow:auto}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: QueryDirective, selector: "[etQuery]", inputs: ["etQuery", "etQueryCache"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "pipe", type: QueryShortNamePipe, name: "queryShortName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom }); }
5669
5727
  }
5670
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: QueryDevtoolsComponent, decorators: [{
5728
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: QueryDevtoolsComponent, decorators: [{
5671
5729
  type: Component,
5672
5730
  args: [{ selector: 'et-query-devtools', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.ShadowDom, host: {
5673
5731
  class: 'et-query-devtools',