@ethlete/query 5.40.1 → 5.41.1

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.
Files changed (107) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/fesm2022/ethlete-query.mjs +114 -138
  3. package/fesm2022/ethlete-query.mjs.map +1 -1
  4. package/index.d.ts +3591 -20
  5. package/package.json +5 -5
  6. package/lib/auth/auth-provider.types.d.ts +0 -133
  7. package/lib/auth/auth-provider.utils.d.ts +0 -9
  8. package/lib/auth/basic-auth-provider.d.ts +0 -10
  9. package/lib/auth/bearer-auth-provider.d.ts +0 -23
  10. package/lib/auth/custom-header-auth-provider.d.ts +0 -9
  11. package/lib/auth/index.d.ts +0 -5
  12. package/lib/class-validator/class-validator.types.d.ts +0 -6
  13. package/lib/class-validator/class-validator.utils.d.ts +0 -2
  14. package/lib/class-validator/index.d.ts +0 -2
  15. package/lib/devtools/components/query-devtools/index.d.ts +0 -1
  16. package/lib/devtools/components/query-devtools/query-devtools.component.d.ts +0 -151
  17. package/lib/devtools/pipes/index.d.ts +0 -1
  18. package/lib/devtools/pipes/query-short-name.pipe.d.ts +0 -8
  19. package/lib/devtools/utils/index.d.ts +0 -1
  20. package/lib/devtools/utils/query-client.utils.d.ts +0 -12
  21. package/lib/directives/index.d.ts +0 -3
  22. package/lib/directives/infinity-query-trigger.directive.d.ts +0 -15
  23. package/lib/directives/infinity-query.directive.d.ts +0 -49
  24. package/lib/directives/query.directive.d.ts +0 -64
  25. package/lib/entity/entity-store.d.ts +0 -25
  26. package/lib/entity/entity.types.d.ts +0 -25
  27. package/lib/entity/entity.utils.d.ts +0 -12
  28. package/lib/entity/index.d.ts +0 -3
  29. package/lib/experimental/auth/bearer-auth-provider-config.d.ts +0 -123
  30. package/lib/experimental/auth/bearer-auth-provider.d.ts +0 -69
  31. package/lib/experimental/auth/index.d.ts +0 -2
  32. package/lib/experimental/gql/gql-query-creator-templates.d.ts +0 -12
  33. package/lib/experimental/gql/gql-query-creator.d.ts +0 -14
  34. package/lib/experimental/gql/gql-query-execute.d.ts +0 -11
  35. package/lib/experimental/gql/gql-query.d.ts +0 -12
  36. package/lib/experimental/gql/index.d.ts +0 -4
  37. package/lib/experimental/http/http-request.d.ts +0 -119
  38. package/lib/experimental/http/index.d.ts +0 -21
  39. package/lib/experimental/http/paged-query-stack.d.ts +0 -172
  40. package/lib/experimental/http/query-client-config.d.ts +0 -45
  41. package/lib/experimental/http/query-client.d.ts +0 -10
  42. package/lib/experimental/http/query-creator-templates.d.ts +0 -24
  43. package/lib/experimental/http/query-creator.d.ts +0 -82
  44. package/lib/experimental/http/query-dependencies.d.ts +0 -26
  45. package/lib/experimental/http/query-error-response.d.ts +0 -19
  46. package/lib/experimental/http/query-errors.d.ts +0 -56
  47. package/lib/experimental/http/query-execute-utils.d.ts +0 -42
  48. package/lib/experimental/http/query-execute.d.ts +0 -25
  49. package/lib/experimental/http/query-features.d.ts +0 -121
  50. package/lib/experimental/http/query-repository.d.ts +0 -69
  51. package/lib/experimental/http/query-snapshot.d.ts +0 -10
  52. package/lib/experimental/http/query-stack.d.ts +0 -109
  53. package/lib/experimental/http/query-state.d.ts +0 -41
  54. package/lib/experimental/http/query-utils.d.ts +0 -61
  55. package/lib/experimental/http/query.d.ts +0 -75
  56. package/lib/experimental/http/secure-query-creator.d.ts +0 -7
  57. package/lib/experimental/http/secure-query-execute.d.ts +0 -7
  58. package/lib/experimental/http/secure-query.d.ts +0 -6
  59. package/lib/experimental/index.d.ts +0 -6
  60. package/lib/experimental/interop/index.d.ts +0 -2
  61. package/lib/experimental/interop/legacy-query-creator.d.ts +0 -45
  62. package/lib/experimental/interop/legacy-query.d.ts +0 -38
  63. package/lib/experimental/pipes/index.d.ts +0 -4
  64. package/lib/experimental/pipes/parse-http-error-code-de.d.ts +0 -3
  65. package/lib/experimental/pipes/parse-http-error-code-de.pipe.d.ts +0 -12
  66. package/lib/experimental/pipes/parse-http-error-code-en.d.ts +0 -3
  67. package/lib/experimental/pipes/parse-http-error-code-en.pipe.d.ts +0 -12
  68. package/lib/experimental/ws/index.d.ts +0 -2
  69. package/lib/experimental/ws/web-socket-client-config.d.ts +0 -17
  70. package/lib/experimental/ws/web-socket-client.d.ts +0 -37
  71. package/lib/experimental/ws/web-socket-errors.d.ts +0 -7
  72. package/lib/gql/gql.d.ts +0 -10
  73. package/lib/gql/index.d.ts +0 -1
  74. package/lib/infinite-query/index.d.ts +0 -3
  75. package/lib/infinite-query/infinity-query.d.ts +0 -30
  76. package/lib/infinite-query/infinity-query.types.d.ts +0 -105
  77. package/lib/infinite-query/infinity-query.utils.d.ts +0 -5
  78. package/lib/logger/index.d.ts +0 -1
  79. package/lib/logger/logger.d.ts +0 -12
  80. package/lib/query/index.d.ts +0 -3
  81. package/lib/query/query.d.ts +0 -60
  82. package/lib/query/query.types.d.ts +0 -397
  83. package/lib/query/query.utils.d.ts +0 -83
  84. package/lib/query-client/index.d.ts +0 -3
  85. package/lib/query-client/query-client.d.ts +0 -29
  86. package/lib/query-client/query-client.types.d.ts +0 -82
  87. package/lib/query-client/query-client.utils.d.ts +0 -4
  88. package/lib/query-creator/index.d.ts +0 -2
  89. package/lib/query-creator/query-creator.d.ts +0 -20
  90. package/lib/query-creator/query-creator.types.d.ts +0 -14
  91. package/lib/query-form/index.d.ts +0 -3
  92. package/lib/query-form/query-form.d.ts +0 -136
  93. package/lib/query-form/query-form.types.d.ts +0 -155
  94. package/lib/query-form/query-form.utils.d.ts +0 -15
  95. package/lib/query-store/index.d.ts +0 -1
  96. package/lib/query-store/query-store.d.ts +0 -31
  97. package/lib/request/index.d.ts +0 -3
  98. package/lib/request/request.d.ts +0 -3
  99. package/lib/request/request.types.d.ts +0 -131
  100. package/lib/request/request.util.d.ts +0 -26
  101. package/lib/symfony/index.d.ts +0 -2
  102. package/lib/symfony/symfony.types.d.ts +0 -19
  103. package/lib/symfony/symfony.utils.d.ts +0 -6
  104. package/lib/utils/data.utils.d.ts +0 -64
  105. package/lib/utils/deep-freeze.util.d.ts +0 -1
  106. package/lib/utils/def.util.d.ts +0 -7
  107. package/lib/utils/index.d.ts +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"ethlete-query.mjs","sources":["../../../../libs/query/src/lib/auth/custom-header-auth-provider.ts","../../../../libs/query/src/lib/auth/basic-auth-provider.ts","../../../../libs/query/src/lib/logger/logger.ts","../../../../libs/query/src/lib/symfony/symfony.utils.ts","../../../../libs/query/src/lib/request/request.util.ts","../../../../libs/query/src/lib/request/request.ts","../../../../libs/query/src/lib/utils/data.utils.ts","../../../../libs/query/src/lib/utils/deep-freeze.util.ts","../../../../libs/query/src/lib/utils/def.util.ts","../../../../libs/query/src/lib/query-creator/query-creator.ts","../../../../libs/query/src/lib/query-store/query-store.ts","../../../../libs/query/src/lib/query-client/query-client.ts","../../../../libs/query/src/lib/query-client/query-client.utils.ts","../../../../libs/query/src/lib/experimental/http/query-errors.ts","../../../../libs/query/src/lib/experimental/auth/bearer-auth-provider.ts","../../../../libs/query/src/lib/experimental/auth/bearer-auth-provider-config.ts","../../../../libs/query/src/lib/class-validator/class-validator.utils.ts","../../../../libs/query/src/lib/experimental/http/query-state.ts","../../../../libs/query/src/lib/experimental/http/query-snapshot.ts","../../../../libs/query/src/lib/experimental/http/query-utils.ts","../../../../libs/query/src/lib/experimental/http/query-error-response.ts","../../../../libs/query/src/lib/experimental/http/http-request.ts","../../../../libs/query/src/lib/experimental/http/query-features.ts","../../../../libs/query/src/lib/experimental/http/query-stack.ts","../../../../libs/query/src/lib/experimental/http/paged-query-stack.ts","../../../../libs/query/src/lib/experimental/http/query-dependencies.ts","../../../../libs/query/src/lib/experimental/http/query-execute-utils.ts","../../../../libs/query/src/lib/experimental/http/query-execute.ts","../../../../libs/query/src/lib/experimental/http/query.ts","../../../../libs/query/src/lib/experimental/http/query-repository.ts","../../../../libs/query/src/lib/experimental/http/query-client.ts","../../../../libs/query/src/lib/experimental/http/query-client-config.ts","../../../../libs/query/src/lib/experimental/http/query-creator.ts","../../../../libs/query/src/lib/experimental/http/secure-query-execute.ts","../../../../libs/query/src/lib/experimental/http/secure-query.ts","../../../../libs/query/src/lib/experimental/http/secure-query-creator.ts","../../../../libs/query/src/lib/experimental/http/query-creator-templates.ts","../../../../libs/query/src/lib/gql/gql.ts","../../../../libs/query/src/lib/experimental/gql/gql-query-execute.ts","../../../../libs/query/src/lib/experimental/gql/gql-query.ts","../../../../libs/query/src/lib/experimental/gql/gql-query-creator.ts","../../../../libs/query/src/lib/experimental/gql/gql-query-creator-templates.ts","../../../../libs/query/src/lib/experimental/interop/legacy-query.ts","../../../../libs/query/src/lib/experimental/interop/legacy-query-creator.ts","../../../../libs/query/src/lib/experimental/pipes/parse-http-error-code-de.ts","../../../../libs/query/src/lib/experimental/pipes/parse-http-error-code-de.pipe.ts","../../../../libs/query/src/lib/experimental/pipes/parse-http-error-code-en.ts","../../../../libs/query/src/lib/experimental/pipes/parse-http-error-code-en.pipe.ts","../../../../libs/query/src/lib/experimental/ws/web-socket-errors.ts","../../../../libs/query/src/lib/experimental/ws/web-socket-client.ts","../../../../libs/query/src/lib/experimental/ws/web-socket-client-config.ts","../../../../libs/query/src/lib/query/query.utils.ts","../../../../libs/query/src/lib/query/query.ts","../../../../libs/query/src/lib/auth/auth-provider.utils.ts","../../../../libs/query/src/lib/auth/bearer-auth-provider.ts","../../../../libs/query/src/lib/directives/query.directive.ts","../../../../libs/query/src/lib/infinite-query/infinity-query.ts","../../../../libs/query/src/lib/infinite-query/infinity-query.utils.ts","../../../../libs/query/src/lib/directives/infinity-query.directive.ts","../../../../libs/query/src/lib/directives/infinity-query-trigger.directive.ts","../../../../libs/query/src/lib/devtools/pipes/query-short-name.pipe.ts","../../../../libs/query/src/lib/devtools/utils/query-client.utils.ts","../../../../libs/query/src/lib/devtools/components/query-devtools/query-devtools.component.ts","../../../../libs/query/src/lib/devtools/components/query-devtools/query-devtools.component.html","../../../../libs/query/src/lib/entity/entity-store.ts","../../../../libs/query/src/lib/entity/entity.utils.ts","../../../../libs/query/src/lib/query-form/query-form.utils.ts","../../../../libs/query/src/lib/query-form/query-form.ts","../../../../libs/query/src/index.ts","../../../../libs/query/src/ethlete-query.ts"],"sourcesContent":["import { AuthProvider, AuthProviderCustomHeaderConfig } from './auth-provider.types';\n\nexport class CustomHeaderAuthProvider implements AuthProvider {\n get header() {\n return { [this._config.name]: this._config.value };\n }\n\n constructor(public _config: AuthProviderCustomHeaderConfig) {}\n\n cleanUp(): void {\n // noop\n }\n}\n","import { AuthProvider, AuthProviderBasicConfig } from './auth-provider.types';\n\nexport class BasicAuthProvider implements AuthProvider {\n get header() {\n return { Authorization: `Basic ${this._basicAuthString}` };\n }\n\n private get _basicAuthString() {\n return btoa(`${this._config.username}:${this._config.password}`);\n }\n\n constructor(public _config: AuthProviderBasicConfig) {}\n\n cleanUp(): void {\n // noop\n }\n}\n","export const buildErrorMessage = (code: string, message: string) => `[@ethlete\\\\query:${code}] ${message}`;\n\nexport class QueryError extends Error {\n data?: unknown;\n\n constructor(code: string, message: string, data?: unknown) {\n super(buildErrorMessage(code, message));\n this.name = 'QueryError';\n this.data = data;\n }\n}\n\nexport const invalidBaseRouteError = (data: unknown) =>\n new QueryError('001', 'The baseRoute must not end with a slash', data);\n\nexport const invalidRouteError = (data: unknown) => new QueryError('002', 'The route must start with a slash', data);\n\nexport const pathParamsMissingInRouteFunctionError = (data: unknown) =>\n new QueryError('003', 'The route is a function but pathParams are missing', data);\n\nexport const queryStateAlreadyHasKeyError = (data: unknown) =>\n new QueryError('004', 'The query state already contains the provided key', data);\n\nexport const queryStateDoesNotContainKeyError = (data: unknown) =>\n new QueryError('005', 'The query state does not contain the provided key', data);\n\nexport const queryStateCannotTransformError = (data: unknown) =>\n new QueryError('006', 'The query state cannot be transformed because it is not loading', data);\n\nexport const invalidBodyError = (data: unknown) => new QueryError('007', 'The body is not valid or upsupported', data);\n","import { FormViolationListView, FormViolationView } from '@ethlete/types';\nimport { SymfonyError } from './symfony.types';\n\nexport const isSymfonyError = (error: unknown): error is SymfonyError => {\n if (!error || typeof error !== 'object') {\n return false;\n }\n\n const symfonyError = error as SymfonyError;\n\n return (\n symfonyError.class !== undefined &&\n symfonyError.detail !== undefined &&\n symfonyError.status !== undefined &&\n symfonyError.title !== undefined &&\n symfonyError.trace !== undefined &&\n symfonyError.type !== undefined\n );\n};\n\nexport const isSymfonyPagerfantaOutOfRangeError = (error: unknown): error is SymfonyError => {\n if (!isSymfonyError(error)) {\n return false;\n }\n\n return error.class.startsWith('Pagerfanta') && error.class.endsWith('OutOfRangeCurrentPageException');\n};\n\nexport const isSymfonyFormViolationListError = (error: unknown): error is FormViolationListView => {\n return typeof error === 'object' && error !== null && 'violations' in error;\n};\n\nexport const isSymfonyListError = (error: unknown): error is FormViolationView[] => {\n return (\n !!error &&\n typeof error === 'object' &&\n Array.isArray(error) &&\n !!error.length &&\n typeof error[0] === 'object' &&\n 'message' in error[0] &&\n 'propertyPath' in error[0] &&\n 'invalidValue' in error[0]\n );\n};\n","import { HttpStatusCode } from '@angular/common/http';\nimport { invalidBaseRouteError, invalidRouteError, pathParamsMissingInRouteFunctionError } from '../logger';\nimport { AnyRoute } from '../query';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../symfony';\nimport {\n BuildQueryStringConfig,\n Method,\n PathParams,\n QueryParams,\n RequestError,\n RequestHeaders,\n RequestRetryFn,\n} from './request.types';\n\nexport const isNaN = (value: unknown): boolean => typeof value === 'number' && Number.isNaN(value);\nexport const isEmptyString = (value: unknown): boolean => typeof value === 'string' && value.trim() === '';\n\nexport const isRequestError = <T = unknown>(error: unknown): error is RequestError<T> =>\n error instanceof Object && 'status' in error && 'statusText' in error && 'url' in error;\n\nexport const buildRoute = (options: {\n base: string;\n route: AnyRoute | null | undefined;\n pathParams?: PathParams;\n queryParams?: QueryParams;\n queryParamConfig?: BuildQueryStringConfig;\n}) => {\n if (options.base.endsWith('/')) {\n throw invalidBaseRouteError(options.base);\n }\n\n let route: string | null = null;\n\n if (typeof options.route === 'function') {\n if (!options.pathParams) {\n throw pathParamsMissingInRouteFunctionError(options.route({}));\n }\n\n route = options.route(options.pathParams);\n } else {\n route = options.route ?? null;\n }\n\n if (route && !route.startsWith('/')) {\n throw invalidRouteError(route);\n }\n\n if (options.queryParams) {\n const queryString = buildQueryString(options.queryParams, options.queryParamConfig);\n\n if (queryString) {\n route = route ? `${route}?${queryString}` : `/?${queryString}`;\n }\n }\n\n return `${options.base}${route ?? ''}`;\n};\n\nexport const buildQueryString = (params: QueryParams, config?: BuildQueryStringConfig): string | null => {\n const objectNotation = config?.objectNotation ?? 'bracket';\n const writeArrayIndexes = config?.writeArrayIndexes ?? false;\n const ignoredValues = config?.ignoredValues ?? [undefined, null, Infinity, -Infinity];\n const ignoredValuesFns = config?.ignoredValuesFns ?? [isNaN, isEmptyString];\n\n const queryParams: string[] = [];\n\n function processValue(key: string, value: unknown) {\n if (config?.objectNotation === 'json-stringify') {\n if (value === undefined) {\n return false;\n }\n\n if (ignoredValues.includes(value)) {\n return false;\n }\n\n if (ignoredValuesFns.some((fn) => fn(value))) {\n return false;\n }\n\n const encodedKey = encodeURIComponent(key);\n\n const val = typeof value === 'object' ? JSON.stringify(value) : value;\n\n const encodedValue = encodeURIComponent(val as string | number | boolean);\n\n queryParams.push(`${encodedKey}=${encodedValue}`);\n\n return true;\n } else if (Array.isArray(value)) {\n let currentFilteredIndex = 0;\n for (const arrayValue of value) {\n const nestedKey = writeArrayIndexes ? `${key}[${currentFilteredIndex}]` : `${key}[]`;\n\n const didAddValue = processValue(nestedKey, arrayValue);\n\n if (didAddValue) {\n currentFilteredIndex++;\n }\n }\n\n return null;\n } else if (typeof value === 'object' && value !== null) {\n for (const [objKey, val] of Object.entries(value)) {\n const nestedKey = objectNotation === 'dot' ? `${key}.${objKey}` : `${key}[${objKey}]`;\n processValue(nestedKey, val);\n }\n\n return null;\n } else {\n if (ignoredValues.includes(value)) {\n return false;\n }\n\n if (ignoredValuesFns.some((fn) => fn(value))) {\n return false;\n }\n\n const encodedKey = encodeURIComponent(key);\n const encodedValue = encodeURIComponent(value as string);\n\n queryParams.push(`${encodedKey}=${encodedValue}`);\n\n return true;\n }\n }\n\n for (const [key, val] of Object.entries(params)) {\n processValue(key, val);\n }\n\n return queryParams.length ? queryParams.join('&') : null;\n};\n\nexport const extractExpiresInSeconds = (headers: RequestHeaders) => {\n const cacheControl = headers['cache-control'];\n const age = headers['age'];\n const expires = headers['expires'];\n\n // In seconds\n let expiresIn: number | null = null;\n let maxAge: number | null = null;\n\n if (cacheControl?.includes('no-cache')) {\n return null;\n }\n\n if (cacheControl?.includes('max-age')) {\n const m = cacheControl.split('max-age=')[1];\n\n if (m) {\n maxAge = parseInt(m);\n }\n } else if (cacheControl?.includes('s-maxage')) {\n const m = cacheControl.split('s-maxage=')[1];\n\n if (m) {\n maxAge = parseInt(m);\n }\n }\n\n if (maxAge && age) {\n const ageSeconds = parseInt(age);\n\n expiresIn = maxAge - ageSeconds;\n } else if (maxAge) {\n expiresIn = maxAge / 2; // We assume the response is half way to its expiration\n } else if (expires) {\n // Used by some apis to tell the response will never expire\n // In this case we let the response expire after 1 hour\n if (expires === '-1') {\n expiresIn = 3600;\n } else {\n const expiresDate = new Date(expires);\n\n // check if the date is valid\n if (expiresDate.toString() !== 'Invalid Date') {\n expiresIn = Math.floor((expiresDate.getTime() - Date.now()) / 1000);\n }\n }\n }\n\n return expiresIn;\n};\n\nexport const buildTimestampFromSeconds = (seconds: number | null) => {\n if (seconds === null) {\n return null;\n }\n\n return new Date(Date.now() + seconds * 1000).getTime();\n};\n\nexport const serializeBody = (body: unknown): ArrayBuffer | URLSearchParams | Blob | FormData | string | null => {\n if (body === null || body === undefined) {\n return null;\n }\n\n if (\n body instanceof ArrayBuffer ||\n body instanceof Blob ||\n body instanceof FormData ||\n body instanceof URLSearchParams ||\n typeof body === 'string'\n ) {\n return body as ArrayBuffer | URLSearchParams | Blob | FormData | string;\n }\n\n if (typeof body === 'object' || typeof body === 'boolean' || Array.isArray(body)) {\n return JSON.stringify(body);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (body as any).toString();\n};\n\nexport const transformMethod = (config: { method: Method; transferVia?: 'GET' | 'POST' }) => {\n if (config.method === 'GQL_QUERY' || config.method === 'GQL_MUTATE') {\n if (!config.transferVia) {\n return 'POST';\n }\n\n return config.transferVia;\n }\n\n return config.method;\n};\n\nexport const detectContentTypeHeader = (body: unknown) => {\n // An empty body has no content type.\n if (body === null) {\n return null;\n }\n // FormData bodies rely on the browser's content type assignment.\n if (body instanceof FormData) {\n return null;\n }\n // Blobs usually have their own content type. If it doesn't, then\n // no type can be inferred.\n if (body instanceof Blob) {\n return body.type || null;\n }\n // Array buffers have unknown contents and thus no type can be inferred.\n if (body instanceof ArrayBuffer) {\n return null;\n }\n // Technically, strings could be a form of JSON data, but it's safe enough\n // to assume they're plain strings.\n if (typeof body === 'string') {\n return 'text/plain';\n }\n\n // Arrays, objects, boolean and numbers will be encoded as JSON.\n if (typeof body === 'object' || typeof body === 'number' || typeof body === 'boolean') {\n return 'application/json';\n }\n // No type could be inferred.\n return null;\n};\n\nexport const hasHeader = (headers: RequestHeaders, header: string) => {\n return Object.keys(headers).some((key) => key.toLowerCase() === header.toLowerCase());\n};\n\nexport const forEachHeader = (headers: RequestHeaders, callback: (value: string, key: string) => void) => {\n Object.entries(headers).forEach(([key, value]) => {\n callback(key, value);\n });\n};\n\nexport const parseAllXhrResponseHeaders = (xhr: XMLHttpRequest) => {\n const headers = xhr.getAllResponseHeaders();\n const parsedHeaders: RequestHeaders = {};\n\n for (const line of headers.split('\\n')) {\n const index = line.indexOf(':');\n if (index > 0) {\n const name = line.slice(0, index);\n const key = name.toLowerCase();\n const value = line.slice(index + 1).trim();\n\n parsedHeaders[key] = value;\n }\n }\n\n return parsedHeaders;\n};\n\nexport const getResponseUrl = (xhr: XMLHttpRequest): string | null => {\n if ('responseURL' in xhr && xhr.responseURL) {\n return xhr.responseURL;\n }\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL');\n }\n return null;\n};\n\nexport const shouldRetryRequest: RequestRetryFn = (config) => {\n const defaultRetryDelay = 1000 + 1000 * config.currentRetryCount;\n\n if (config.currentRetryCount > 3) {\n return { retry: false };\n }\n\n if (!isRequestError(config.error)) {\n return { retry: false };\n }\n\n const { status, detail } = config.error;\n\n // Retry on 5xx errors\n if (status >= 500) {\n // Don't retry if a requested page is out of range\n if (isSymfonyPagerfantaOutOfRangeError(detail)) {\n return { retry: false };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 408 or 425 errors\n if (status === HttpStatusCode.RequestTimeout || status === HttpStatusCode.TooEarly) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 429 errors\n if (status === HttpStatusCode.TooManyRequests) {\n const retryAfter =\n config.headers['retry-after'] ||\n config.headers['Retry-After'] ||\n config.headers['x-retry-after'] ||\n config.headers['X-Retry-After'];\n\n if (retryAfter) {\n const delay = parseInt(retryAfter) * 1000;\n return { retry: true, delay: Number.isNaN(delay) ? defaultRetryDelay : delay };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Code 0 usually means the internet connection is down. We retry in this case.\n // It could also be a CORS issue but that should not be the case in production.\n if ((status as number) === 0) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n return { retry: false };\n};\n","import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http';\nimport { Observable, Observer } from 'rxjs';\nimport { PartialXhrState, RequestConfig, RequestError, RequestEvent } from './request.types';\nimport {\n buildTimestampFromSeconds,\n detectContentTypeHeader,\n extractExpiresInSeconds,\n forEachHeader,\n getResponseUrl,\n hasHeader,\n parseAllXhrResponseHeaders,\n serializeBody,\n shouldRetryRequest,\n} from './request.util';\n\nconst XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n\nexport const request = <Response = unknown>(config: RequestConfig): Observable<RequestEvent<Response>> => {\n const headers = config.headers || {};\n const responseType = config.responseType || 'json';\n const body = config.body || null;\n const url = config.urlWithParams.split('?')[0] || '';\n const retryFn = config.retryFn || shouldRetryRequest;\n let currentRetryCount = 0;\n let retryTimeout: number | null = null;\n\n return new Observable((observer: Observer<RequestEvent<Response>>) => {\n const xhr = new XMLHttpRequest();\n const reqBody = serializeBody(body);\n\n const setupXhr = () => {\n xhr.open(config.method, config.urlWithParams);\n if (config.withCredentials) {\n xhr.withCredentials = true;\n }\n\n forEachHeader(headers, (name, value) => xhr.setRequestHeader(name, value));\n\n if (!hasHeader(headers, 'Accept')) {\n xhr.setRequestHeader('Accept', 'application/json, text/plain, */*');\n }\n\n if (!hasHeader(headers, 'Content-Type')) {\n const detectedType = detectContentTypeHeader(body);\n\n if (detectedType) {\n xhr.setRequestHeader('Content-Type', detectedType);\n }\n }\n\n xhr.responseType = responseType !== 'json' ? responseType : 'text';\n };\n\n setupXhr();\n\n const partialFromXhr = (): PartialXhrState => {\n const statusText = xhr.statusText || 'OK';\n const headers = parseAllXhrResponseHeaders(xhr);\n const _url = getResponseUrl(xhr) || url;\n\n return { headers, status: xhr.status, statusText, url: _url };\n };\n\n const handleRetry = (error: RequestError) => {\n const newRetryCount = currentRetryCount + 1;\n const { headers } = partialFromXhr();\n const { retry, delay } = retryFn({ currentRetryCount: newRetryCount, headers, error });\n\n if (!retry) {\n observer.next({ type: 'failure', headers, error });\n observer.complete();\n return;\n }\n\n const _delay = delay ?? 1000;\n observer.next({ type: 'delay-retry', headers, retryNumber: newRetryCount, retryDelay: _delay });\n\n retryTimeout = window.setTimeout(() => {\n setupXhr();\n xhr.send(reqBody);\n currentRetryCount = newRetryCount;\n observer.next({ type: 'start', headers, isRetry: true, retryNumber: currentRetryCount, retryDelay: _delay });\n }, _delay);\n };\n\n const onLoad = async () => {\n const { headers, statusText, url } = partialFromXhr();\n\n let { status } = partialFromXhr();\n\n let body: unknown | null = null;\n\n if (status !== HttpStatusCode.NoContent) {\n body = typeof xhr.response === 'undefined' ? xhr.responseText : xhr.response;\n }\n\n if (status === 0) {\n status = body ? HttpStatusCode.Ok : 0;\n }\n\n let ok = status >= 200 && status < 300;\n\n if (responseType === 'json' && typeof body === 'string') {\n const originalBody = body;\n body = body.replace(XSSI_PREFIX, '');\n try {\n body = body !== '' ? JSON.parse(body as string) : null;\n } catch (error) {\n body = originalBody;\n\n if (ok) {\n ok = false;\n body = { error, text: body };\n }\n }\n } else if (!ok && body instanceof Blob) {\n try {\n const text = await body.text();\n\n if (body.type === 'application/json') {\n body = JSON.parse(text);\n } else {\n body = text;\n }\n } catch (error) {\n // Ignore the error.\n }\n }\n\n if (ok) {\n const successEvent: RequestEvent<Response> = {\n type: 'success',\n headers,\n response: body as Response,\n };\n\n const expiresInSeconds = config.cacheAdapter?.(headers) ?? extractExpiresInSeconds(headers);\n const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);\n\n if (expiresInTimestamp) {\n successEvent.expiresInTimestamp = expiresInTimestamp;\n }\n\n observer.next(successEvent);\n\n observer.complete();\n } else {\n handleRetry({\n url,\n detail: body,\n status,\n statusText,\n httpErrorResponse: new HttpErrorResponse({\n error: body,\n status,\n statusText,\n url,\n }),\n });\n }\n };\n\n const onError = (error: Event) => {\n const { url } = partialFromXhr();\n\n handleRetry({\n url,\n detail: error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n httpErrorResponse: new HttpErrorResponse({\n error: error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n url,\n }),\n });\n };\n\n const onDownProgress = (event: ProgressEvent) => {\n const { headers } = partialFromXhr();\n\n const progress: RequestEvent = {\n type: 'download-progress',\n headers,\n progress: {\n current: event.loaded,\n },\n };\n\n if (event.lengthComputable) {\n const progressPercent = (event.loaded / event.total) * 100;\n progress.progress.percentage = Math.round(progressPercent * 100) / 100;\n progress.progress.total = event.total;\n }\n\n if (responseType === 'text' && !!xhr.responseText) {\n progress.partialText = xhr.responseText;\n }\n\n observer.next(progress);\n };\n\n const onUpProgress = (event: ProgressEvent) => {\n const { headers } = partialFromXhr();\n\n const progress: RequestEvent = {\n type: 'upload-progress',\n headers,\n progress: {\n current: event.loaded,\n },\n };\n\n if (event.lengthComputable) {\n const progressPercent = (event.loaded / event.total) * 100;\n progress.progress.percentage = Math.round(progressPercent * 100) / 100;\n progress.progress.total = event.total;\n }\n\n observer.next(progress);\n };\n\n xhr.addEventListener('load', onLoad);\n xhr.addEventListener('error', onError);\n xhr.addEventListener('timeout', onError);\n xhr.addEventListener('abort', onError);\n\n if (config.reportProgress) {\n xhr.addEventListener('progress', onDownProgress);\n\n if (reqBody !== null && xhr.upload) {\n xhr.upload.addEventListener('progress', onUpProgress);\n }\n }\n\n xhr.send(reqBody);\n observer.next({ type: 'start', headers });\n\n return () => {\n xhr.removeEventListener('error', onError);\n xhr.removeEventListener('abort', onError);\n xhr.removeEventListener('load', onLoad);\n xhr.removeEventListener('timeout', onError);\n\n if (retryTimeout) {\n window.clearTimeout(retryTimeout);\n }\n\n if (config.reportProgress) {\n xhr.removeEventListener('progress', onDownProgress);\n\n if (reqBody !== null && xhr.upload) {\n xhr.upload.removeEventListener('progress', onUpProgress);\n }\n }\n\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n\n observer.next({ type: 'cancel', headers });\n };\n });\n};\n","import {\n CreateComputedOptions,\n Injector,\n Signal,\n assertInInjectionContext,\n computed,\n effect,\n inject,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport { ToObservableOptions, ToSignalOptions, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { computedTillTruthy, createDestroy, syncSignal } from '@ethlete/core';\nimport { Observable, Subscribable, of, pairwise, startWith, switchMap, takeUntil, tap } from 'rxjs';\nimport { AnyLegacyQuery } from '../experimental';\nimport {\n AnyQuery,\n AnyQueryCollection,\n QueryOf,\n QueryState,\n QueryStateType,\n extractQuery,\n filterQueryStates,\n isQuery,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n} from '../query';\nimport { QueryDataOf } from '../query-creator';\n\nexport interface QueryContainerConfig {\n /**\n * If `true`, the previous query will be aborted when a new query is pushed into the container.\n * @default true // Only if the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.\n */\n abortPrevious?: boolean;\n\n /**\n * If `true`, the query will be aborted when the container is destroyed.\n * @default true // Only if the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.\n */\n abortOnDestroy?: boolean;\n\n /**\n * If `true`, the previous polling will be stopped when a new query is pushed into the container.\n * @default true // Only if the query has no other dependents and the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.\n */\n stopPreviousPolling?: boolean;\n}\n\nexport interface QueryFilterConfig {\n /**\n * If `true`, the response will be cached until the next response is received or the query fails.\n * @default false\n */\n cacheResponse?: boolean;\n}\n\nexport const addQueryContainerHandling = (\n obs: Observable<AnyQuery | AnyQuery[] | AnyLegacyQuery | AnyLegacyQuery[] | null>,\n valueFn: () => AnyQuery | AnyQuery[] | AnyLegacyQuery | AnyLegacyQuery[] | null | undefined,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(addQueryContainerHandling);\n\n const { abortPrevious, abortOnDestroy, stopPreviousPolling } = config ?? {};\n\n const injector = inject(Injector);\n const destroy$ = createDestroy();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const tNode = (injector as any)._tNode;\n const componentId = tNode?.index ?? -1;\n\n obs\n .pipe(\n takeUntil(destroy$),\n startWith(null),\n pairwise(),\n tap(([prevQuery, currQuery]) => {\n const cleanQuery = (q: AnyQuery | AnyLegacyQuery | null | undefined) => {\n if (!q?._hasDependents() && ((abortPrevious === undefined && q?.canBeCached) || abortPrevious)) {\n q?.abort();\n }\n\n if (\n !q?._hasDependents() &&\n ((stopPreviousPolling === undefined && q?.canBeCached) || stopPreviousPolling) &&\n q?.isPolling\n ) {\n q?.stopPolling();\n }\n\n (q as unknown as AnyLegacyQuery)?.destroy?.();\n };\n\n if ((isQuery(prevQuery) || prevQuery === null) && (isQuery(currQuery) || currQuery === null)) {\n prevQuery?._removeDependent(componentId);\n currQuery?._addDependent(componentId);\n\n cleanQuery(prevQuery);\n } else if (\n (Array.isArray(prevQuery) || prevQuery === null) &&\n (Array.isArray(currQuery) || currQuery === null)\n ) {\n if (prevQuery) {\n for (let i = 0; i < prevQuery.length; i++) {\n prevQuery[i]?._removeDependent(componentId);\n }\n }\n\n if (currQuery) {\n for (let i = 0; i < currQuery.length; i++) {\n currQuery[i]?._addDependent(componentId);\n }\n }\n\n if (prevQuery) {\n for (let i = 0; i < prevQuery.length; i++) {\n cleanQuery(prevQuery[i]);\n }\n }\n } else if (\n (isQuery(prevQuery) && Array.isArray(currQuery)) ||\n (Array.isArray(prevQuery) && isQuery(currQuery))\n ) {\n throw new Error('Cannot mix queries and arrays of queries in the same query container.');\n }\n }),\n )\n .subscribe();\n\n destroy$.subscribe(() => {\n const query = valueFn();\n\n const handleQuery = (q: AnyQuery | AnyLegacyQuery | null | undefined) => {\n q?._removeDependent(componentId);\n\n if (!q?._hasDependents() && ((q?.canBeCached && abortOnDestroy === undefined) || abortOnDestroy)) {\n q?.abort();\n (q as unknown as AnyLegacyQuery)?.destroy?.();\n }\n };\n\n if (isQuery(query)) {\n handleQuery(query);\n } else if (Array.isArray(query)) {\n for (const q of query) {\n handleQuery(q);\n }\n }\n });\n};\n\nexport function toQuerySignal<T extends AnyQuery | AnyLegacyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n): Signal<T | undefined>;\nexport function toQuerySignal<T extends AnyQuery | AnyLegacyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T | undefined>> & {\n initialValue?: undefined;\n requireSync?: false;\n } & QueryContainerConfig,\n): Signal<T | undefined>;\nexport function toQuerySignal<T extends AnyQuery | AnyLegacyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T | null>> & {\n initialValue?: null;\n requireSync?: false;\n } & QueryContainerConfig,\n): Signal<T | null>;\nexport function toQuerySignal<T extends AnyQuery | AnyLegacyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T>> & {\n initialValue?: undefined;\n requireSync: true;\n } & QueryContainerConfig,\n): Signal<T>;\nexport function toQuerySignal<T extends AnyQuery | AnyLegacyQuery | null, const U extends T>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T | U>> & {\n initialValue: U;\n requireSync?: false;\n } & QueryContainerConfig,\n): Signal<T | U>;\n\nexport function toQuerySignal<T extends AnyQuery | AnyLegacyQuery | null, U = undefined>(\n source: Observable<T> | Subscribable<T>,\n options?: ToSignalOptions<T | U> & { initialValue?: U } & QueryContainerConfig,\n): Signal<T | U> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const s = toSignal(source, options as any);\n\n addQueryContainerHandling(source as Observable<T>, () => s() as T, options);\n\n return s as Signal<T | U>;\n}\n\nexport function effectComputed<T extends AnyQuery | AnyLegacyQuery | AnyQuery[] | AnyLegacyQuery[] | null>(\n computation: () => T,\n injector: Injector,\n) {\n let initialData = null;\n\n try {\n initialData = computation();\n } catch {\n // Ignore errors in the initial computation\n // Angular might throw an error if required inputs are read but not available yet\n }\n\n const lastResult = signal<T>(initialData as T);\n\n effect(() => {\n const data = runInInjectionContext(injector, () => computation());\n\n untracked(() => {\n if (data === lastResult()) return;\n\n lastResult.set(data);\n });\n });\n\n return lastResult.asReadonly();\n}\n\nexport function queryComputed<T extends AnyQuery | AnyLegacyQuery | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T> {\n const injector = inject(Injector);\n\n const c = effectComputed(computation, injector);\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\n/**\n * Creates a signal that will only be reactive until the first query is created.\n * All subsequent changes inside the computation will be ignored.\n */\nexport function queryComputedTillTruthy<T extends AnyQuery | AnyLegacyQuery | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T | null> {\n const injector = inject(Injector);\n\n const c = computedTillTruthy(effectComputed(computation, injector));\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\nexport function queryArrayComputed<T extends AnyQuery[] | AnyLegacyQuery[] | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T> {\n const injector = inject(Injector);\n\n const c = effectComputed(computation, injector);\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\nexport function toQuerySubject<T extends AnyQuery | AnyLegacyQuery | null>(\n source: Signal<T>,\n options?: ToObservableOptions & QueryContainerConfig,\n): Observable<T> {\n const obs = toObservable(source, options);\n\n addQueryContainerHandling(obs, () => source(), options);\n\n return obs;\n}\n\nexport function queryStateSignal<T extends Signal<AnyQuery | AnyLegacyQuery | AnyQueryCollection | null>>(\n source: T,\n options?: QueryFilterConfig,\n) {\n const { cacheResponse } = options ?? {};\n\n const roSignal = toSignal(\n toObservable(source).pipe(\n switchMap((q) => extractQuery(q)?.state$ ?? of(null)),\n switchMap((state) => {\n if (cacheResponse) {\n return of(state).pipe(filterQueryStates([QueryStateType.Success, QueryStateType.Failure]));\n }\n\n return of(state);\n }),\n ),\n {\n initialValue: null,\n },\n ) as Signal<QueryState<QueryDataOf<QueryOf<ReturnType<T>>>> | null>;\n\n const rwSignal = signal<QueryState<QueryDataOf<QueryOf<ReturnType<T>>>> | null>(roSignal());\n\n syncSignal(roSignal, rwSignal);\n\n return rwSignal;\n}\n\nexport type QueryStateSignal<T extends Signal<AnyQuery | AnyLegacyQuery | AnyQueryCollection | null>> =\n Signal<QueryDataOf<QueryOf<ReturnType<T>>> | null> & { reset: () => void };\n\nexport function queryStateResponseSignal<T extends Signal<AnyQuery | AnyLegacyQuery | AnyQueryCollection | null>>(\n source: T,\n options?: QueryFilterConfig,\n) {\n const s = queryStateSignal(source, options);\n\n const dataSignal = computed(() => {\n const state = s();\n\n return isQueryStateSuccess(state) ? state.response : null;\n });\n\n (dataSignal as QueryStateSignal<T>)['reset'] = () => {\n s.set(null);\n };\n\n return dataSignal as QueryStateSignal<T>;\n}\n\nexport function queryStateErrorSignal<T extends Signal<AnyQuery | AnyLegacyQuery | AnyQueryCollection | null>>(\n source: T,\n) {\n const s = queryStateSignal(source);\n\n return computed(() => {\n const state = s();\n\n return isQueryStateFailure(state) ? state.error : null;\n });\n}\n\nexport function queryStateLoadingSignal<T extends Signal<AnyQuery | AnyLegacyQuery | AnyQueryCollection | null>>(\n source: T,\n) {\n const s = queryStateSignal(source);\n\n return computed(() => {\n const state = s();\n\n return isQueryStateLoading(state) ? state : null;\n });\n}\n","export const deepFreeze = <T extends Record<string, unknown>>(object: T) => {\n // check if object is actually an object or frozen\n if (!object || typeof object !== 'object' || Object.isFrozen(object)) {\n return object;\n }\n\n // Retrieve the property names defined on object\n const propNames = Object.getOwnPropertyNames(object);\n\n // Freeze properties before freezing self\n\n for (const name of propNames) {\n const value = object[name];\n\n if (value && typeof value === 'object') {\n deepFreeze(value as T);\n }\n }\n\n return Object.freeze(object);\n};\n","/**\n * Dummy function for providing types while not breaking inference.\n * **This function always returns null.**\n * @see https://github.com/microsoft/TypeScript/issues/26242\n * @returns null\n */\nexport const def = <Data>() => null as unknown as Data;\n","import { assertInInjectionContext, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject } from 'rxjs';\nimport { EntityStore } from '../entity';\nimport { Query, computeQueryQueryParams } from '../query';\nimport { QueryClient, buildQueryCacheKey, shouldCacheQuery } from '../query-client';\nimport { QueryStore } from '../query-store';\nimport {\n AnyRoute,\n BaseArguments,\n GqlQueryConfig,\n RestQueryConfig,\n RouteType,\n WithConfig,\n WithHeaders,\n WithMock,\n} from '../query/query.types';\nimport { buildRoute } from '../request';\nimport { QueryContainerConfig, addQueryContainerHandling } from '../utils';\nimport { QueryPrepareFn } from './query-creator.types';\n\nexport class QueryCreator<\n Arguments extends BaseArguments | undefined,\n Response,\n Route extends RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> {\n constructor(\n private _queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n private _client: QueryClient,\n private _store: QueryStore,\n ) {}\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n prepare: QueryPrepareFn<Arguments, Response, Route, Store, Data, Id> = (\n args?: Arguments & WithHeaders & WithConfig & WithMock<Response>,\n ) => {\n const route = buildRoute({\n base: this._client.config.baseRoute,\n route: this._queryConfig.route as AnyRoute,\n pathParams: args?.pathParams,\n queryParams: computeQueryQueryParams({ config: this._queryConfig, client: this._client, args }),\n queryParamConfig: this._client.config.request?.queryParams,\n }) as Route;\n\n const cacheKey = (args?.config?.queryStoreCacheKey ?? '') + buildQueryCacheKey(route as string, args);\n\n if (shouldCacheQuery(this._queryConfig.method) && !args?.config?.skipQueryStore) {\n const existingQuery = this._store.get<Query<Response, Arguments, Route, Store, Data, Id>>(cacheKey);\n\n if (existingQuery) {\n return existingQuery;\n }\n }\n\n const query = new Query<Response, Arguments, Route, Store, Data, Id>(\n this._client,\n this._queryConfig,\n route,\n args ?? ({} as Arguments),\n cacheKey,\n );\n\n if (shouldCacheQuery(this._queryConfig.method) && !args?.config?.skipQueryStore) {\n this._store.add(cacheKey, query);\n }\n\n this._store._dispatchQueryCreated(query);\n\n return query;\n };\n\n createSubject = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\n assertInInjectionContext(this.createSubject);\n\n const subject = new BehaviorSubject<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n\n addQueryContainerHandling(subject, () => subject.getValue(), config);\n\n return subject;\n };\n\n createSignal = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\n assertInInjectionContext(this.createSignal);\n\n const _signal = signal<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n\n addQueryContainerHandling(toObservable(_signal), () => _signal(), config);\n\n return _signal;\n };\n\n /**\n * @deprecated Use `myQuery.createSubject()` or `myQuery.createSignal()` instead. Will be removed in v6.\n */\n behaviorSubject = (initialValue?: ReturnType<typeof this.prepare> | null) =>\n new BehaviorSubject<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n}\n","import { Subject, fromEvent, take, takeUntil, timer } from 'rxjs';\nimport { AnyQuery } from '../query';\n\nexport class QueryStore {\n /**\n * @internal\n */\n readonly _store = new Map<string, AnyQuery>();\n\n private _garbageCollector: number | null = null;\n private _isInLowResourceMode = false;\n private _lastBlurTimestamp = Date.now();\n\n private _storeChange$ = new Subject<string>();\n private _queryCreated$ = new Subject<AnyQuery>();\n\n readonly storeChange$ = this._storeChange$.asObservable();\n readonly queryCreated$ = this._queryCreated$.asObservable();\n\n constructor(\n private _config?: {\n enableChangeLogging?: boolean;\n enableGarbageCollectorLogging?: boolean;\n autoRefreshQueriesOnWindowFocus?: boolean;\n enableSmartPolling?: boolean;\n },\n ) {\n this._initSmartQueryHandling();\n }\n\n add(id: string, query: AnyQuery) {\n this._store.set(id, query);\n\n this._initGarbageCollector();\n\n this._logState(id, query, 'SET');\n\n this._storeChange$.next(id);\n }\n\n get<T extends AnyQuery>(id: string): T | null {\n return (this._store.get(id) as T) ?? null;\n }\n\n remove(id: string) {\n this._store.delete(id);\n\n this._logState(id, null, 'REMOVE');\n\n this._storeChange$.next(id);\n }\n\n forEach(callback: (value: AnyQuery, key: string) => void) {\n for (const [key, query] of this._store) {\n callback(query, key);\n }\n }\n\n refreshQueriesInUse(config?: { ignoreCacheValidity?: boolean; purgeUnused?: boolean }) {\n const { ignoreCacheValidity, purgeUnused } = config ?? {};\n\n for (const [key, query] of this._store) {\n if (\n query.isInUse &&\n (query.isExpired || ignoreCacheValidity) &&\n query.autoRefreshOnConfig.queryClientDefaultHeadersChange\n ) {\n query.execute({ skipCache: true, _triggeredVia: 'auto' });\n } else if (purgeUnused && !query.isInUse) {\n this.remove(key);\n }\n }\n }\n\n /**\n * @internal\n */\n _dispatchQueryCreated(query: AnyQuery) {\n this._queryCreated$.next(query);\n }\n\n private _initSmartQueryHandling() {\n const windowBlur$ = fromEvent<Event>(window, 'blur');\n const windowFocus$ = fromEvent<Event>(window, 'focus');\n\n windowBlur$.subscribe(() => {\n timer(5000)\n .pipe(takeUntil(windowFocus$), take(1))\n .subscribe(() => {\n this._lastBlurTimestamp = Date.now();\n this._isInLowResourceMode = true;\n this._stopGarbageCollector();\n\n if (this._config?.enableSmartPolling) {\n this.forEach((query) => {\n if (!query.isPolling || !query._enableSmartPolling) {\n return;\n }\n\n query.pausePolling();\n });\n }\n });\n });\n\n windowFocus$.subscribe(() => {\n if (!this._isInLowResourceMode) {\n return;\n }\n\n this._isInLowResourceMode = false;\n\n if (this._config?.enableSmartPolling || this._config?.autoRefreshQueriesOnWindowFocus) {\n this.forEach((query) => {\n if (this._config?.enableSmartPolling && query._isPollingPaused) {\n query.resumePolling();\n }\n\n if (Date.now() - this._lastBlurTimestamp > 15000) {\n if (\n this._config?.autoRefreshQueriesOnWindowFocus &&\n query.isExpired &&\n query.isInUse &&\n query.autoRefreshOnConfig.windowFocus\n ) {\n query.execute({ skipCache: true, _triggeredVia: 'auto' });\n }\n }\n });\n }\n\n this._initGarbageCollector();\n });\n }\n\n private _logState(key: string | null, item: AnyQuery | null, operation: string) {\n if (!this._config?.enableChangeLogging) return;\n\n const stateAsJson: Record<string, AnyQuery> = {};\n\n this._store.forEach((value, key) => {\n stateAsJson[key] = value;\n });\n\n console.log(`%c[${operation}] ${key}`, 'font-weight: bold');\n\n console.log({ operation, key, item });\n console.log(stateAsJson);\n }\n\n private _initGarbageCollector() {\n if (this._garbageCollector !== null) {\n return;\n }\n\n this._logGarbageCollector('Start');\n\n this._garbageCollector = window.setInterval(() => {\n this._runGarbageCollector();\n }, 15000);\n }\n\n private _stopGarbageCollector() {\n if (this._garbageCollector !== null) {\n window.clearInterval(this._garbageCollector);\n this._garbageCollector = null;\n this._logGarbageCollector('Stop');\n }\n }\n\n private _runGarbageCollector() {\n this._logGarbageCollector('Collecting...');\n\n this._store.forEach((item, key) => {\n if (item.isExpired && !item.isInUse) {\n this.remove(key);\n }\n });\n\n this._logGarbageCollector('Collection done');\n\n if (!this._store.size) {\n this._stopGarbageCollector();\n }\n }\n\n private _logGarbageCollector(action: string) {\n if (!this._config?.enableGarbageCollectorLogging) return;\n\n console.log(`%cGC: ${action}`, 'color: yellow; font-weight: bold');\n }\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { AuthProvider } from '../auth';\nimport { EntityStore } from '../entity';\nimport {\n BaseArguments,\n GqlQueryConfig,\n GqlQueryConfigWithoutMethod,\n QueryConfigWithoutMethod,\n RestQueryConfig,\n RouteType,\n} from '../query';\nimport { QueryCreator } from '../query-creator';\nimport { QueryStore } from '../query-store';\nimport { RequestHeaders, RequestHeadersMethodMap } from '../request';\nimport { QueryClientConfig } from './query-client.types';\n\nexport class QueryClient {\n /**\n * @internal\n */\n readonly _store: QueryStore;\n\n get config() {\n return this._clientConfig;\n }\n\n get authProvider() {\n return this._authProvider$.getValue() ?? this._clientConfig.parent?._authProvider$.getValue() ?? null;\n }\n get authProvider$() {\n return this._authProvider$.asObservable() ?? this._clientConfig.parent?._authProvider$.asObservable() ?? null;\n }\n private readonly _authProvider$ = new BehaviorSubject<AuthProvider | null>(null);\n\n constructor(private _clientConfig: QueryClientConfig) {\n this._store = new QueryStore({\n enableChangeLogging: _clientConfig.logging?.queryStateChanges,\n enableGarbageCollectorLogging: _clientConfig.logging?.queryStateGarbageCollector,\n autoRefreshQueriesOnWindowFocus: _clientConfig.request?.autoRefreshQueriesOnWindowFocus ?? true,\n enableSmartPolling: _clientConfig.request?.enableSmartPolling ?? true,\n });\n }\n\n get = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GET',\n });\n\n post = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'POST',\n });\n\n put = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'PUT',\n });\n\n patch = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'PATCH',\n });\n\n delete = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'DELETE',\n });\n\n gqlQuery = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GQL_QUERY',\n });\n\n gqlMutate = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GQL_MUTATE',\n });\n\n fetch = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined,\n Id,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n Data = Response,\n >(\n queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n ) => new QueryCreator<Arguments, Response, Route, Store, Data, Id>(queryConfig, this, this._store);\n\n setAuthProvider = (authProvider: AuthProvider) => {\n if (this.authProvider) {\n this.authProvider?.cleanUp();\n }\n\n this._authProvider$.next(authProvider);\n };\n\n setDefaultHeaders = (config: {\n headers: RequestHeaders | RequestHeadersMethodMap | null;\n refreshQueriesInUse?: boolean;\n }) => {\n if (!this._clientConfig.request) {\n this._clientConfig.request = {\n headers: config.headers ?? undefined,\n };\n } else {\n this._clientConfig.request.headers = config.headers ?? undefined;\n }\n\n if (config.refreshQueriesInUse) {\n this._store.refreshQueriesInUse({ purgeUnused: true, ignoreCacheValidity: true });\n }\n };\n\n clearAuthProvider = () => {\n this.authProvider?.cleanUp();\n this._authProvider$.next(null);\n };\n\n _updateBaseRoute = (route: string) => {\n this._clientConfig.baseRoute = route;\n };\n}\n","import { BaseArguments } from '../query/query.types';\nimport { Method } from '../request';\n\nexport const shouldCacheQuery = (method: Method) => {\n return method === 'GET' || method === 'OPTIONS' || method === 'HEAD' || method === 'GQL_QUERY';\n};\n\nexport const buildQueryCacheKey = (route: string, args: BaseArguments | undefined) => {\n const variables = JSON.stringify(args?.variables || {})\n // replace all curly braces with empty string\n .replace(/{|}/g, '')\n // replace new lines and whitespaces with empty string\n .replace(/\\s/g, '');\n\n const seed = `${route}...${variables}`;\n\n let hash = 0;\n\n for (const char of seed) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;\n }\n\n // Force positive number hash.\n // 2147483647 = equivalent of Integer.MAX_VALUE.\n hash += 2147483647 + 1;\n\n return hash.toString();\n};\n","import { RuntimeError } from '@ethlete/core';\nimport { QueryFeatureType } from './query-features';\n\n// codes 0-999\nexport const enum QueryRuntimeErrorCode {\n // Query\n QUERY_FEATURE_USED_MULTIPLE_TIMES = 0,\n\n // Query features\n WITH_ARGS_QUERY_FEATURE_MISSING_BUT_ROUTE_IS_FUNCTION = 100,\n WITH_POLLING_USED_ON_UNSUPPORTED_HTTP_METHOD = 101,\n WITH_AUTO_REFRESH_USED_ON_UNSUPPORTED_HTTP_METHOD = 102,\n WITH_AUTO_REFRESH_USED_IN_MANUAL_QUERY = 103,\n SILENCE_MISSING_WITH_ARGS_FEATURE_ERROR_USED_BUT_WITH_ARGS_PRESENT = 104,\n\n // Auth provider\n COOKIE_LOGIN_TRIED_BUT_COOKIE_DISABLED = 200,\n ENABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG = 201,\n DISABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG = 202,\n LOGIN_CALLED_WITHOUT_CONFIG = 203,\n LOGIN_WITH_TOKEN_CALLED_WITHOUT_CONFIG = 204,\n REFRESH_TOKEN_CALLED_WITHOUT_CONFIG = 205,\n SELECT_ROLE_CALLED_WITHOUT_CONFIG = 206,\n DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_OBJECT = 207,\n DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_ACCESS_TOKEN = 208,\n DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_REFRESH_TOKEN = 209,\n UNABLE_TO_DECRYPT_BEARER_TOKEN = 210,\n BEARER_EXPIRES_IN_PROPERTY_NOT_NUMBER = 211,\n\n // Query Repository\n UNCACHEABLE_REQUEST_HAS_CACHE_KEY_PARAM = 300,\n UNCACHEABLE_REQUEST_HAS_ALLOW_CACHE_PARAM = 301,\n\n // Paged Query Stack\n PAGED_QUERY_STACK_PAGE_BIGGER_THAN_TOTAL_PAGES = 400,\n PAGED_QUERY_STACK_NEXT_PAGE_CALLED_WITHOUT_PREVIOUS_PAGE = 401,\n PAGED_QUERY_STACK_PREVIOUS_PAGE_CALLED_BUT_ALREADY_AT_FIRST_PAGE = 402,\n\n // Query Stack\n QUERY_STACK_WITH_ARGS_USED = 500,\n QUERY_STACK_WITH_RESPONSE_UPDATE_USED = 501,\n QUERY_STACK_TOTAL_QUERIES_AND_EXPECTED_QUERIES_MISMATCH = 502,\n}\n\nexport const queryFeatureUsedMultipleTimes = (type: QueryFeatureType) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_FEATURE_USED_MULTIPLE_TIMES,\n `The query feature \"${type}()\" was used multiple times.`,\n );\n};\n\nexport const withArgsQueryFeatureMissingButRouteIsFunction = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_ARGS_QUERY_FEATURE_MISSING_BUT_ROUTE_IS_FUNCTION,\n `This queries route is a function, but a \"withArgs()\" feature is missing.`,\n );\n};\n\nexport const withPollingUsedOnUnsupportedHttpMethod = (method: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_POLLING_USED_ON_UNSUPPORTED_HTTP_METHOD,\n `This is a \"${method}\" request, \"withPolling()\" is only supported for GET, HEAD, OPTIONS requests and GQL queries.`,\n );\n};\n\nexport const withAutoRefreshUsedOnUnsupportedHttpMethod = (method: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_AUTO_REFRESH_USED_ON_UNSUPPORTED_HTTP_METHOD,\n `This is a \"${method}\" request, \"withAutoRefresh()\" is only supported for GET, HEAD, OPTIONS requests and GQL queries.`,\n );\n};\n\nexport const withAutoRefreshUsedInManualQuery = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_AUTO_REFRESH_USED_IN_MANUAL_QUERY,\n `\"withAutoRefresh()\" has been used inside a query that has \"onlyManualExecution\" set to true.` +\n ` If this is intentional, set \"ignoreOnlyManualExecution\" to true inside the auto refresh config.`,\n );\n};\n\nexport const silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.SILENCE_MISSING_WITH_ARGS_FEATURE_ERROR_USED_BUT_WITH_ARGS_PRESENT,\n `The \"silenceMissingWithArgsFeatureError\" config is set to true, but a \"withArgs()\" feature is present.`,\n );\n};\n\nexport const cookieLoginTriedButCookieDisabled = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.COOKIE_LOGIN_TRIED_BUT_COOKIE_DISABLED,\n `Cookie login has been tried, but the cookie is disabled.`,\n );\n};\n\nexport const enableCookieCalledWithoutCookieConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.ENABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG,\n `enableCookie() has been called but there is no cookie config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const disableCookieCalledWithoutCookieConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.DISABLE_COOKIE_CALLED_WITHOUT_COOKIE_CONFIG,\n `disableCookie() has been called but there is no cookie config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const loginCalledWithoutConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.LOGIN_CALLED_WITHOUT_CONFIG,\n `login() has been called without a config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const loginWithTokenCalledWithoutConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.LOGIN_WITH_TOKEN_CALLED_WITHOUT_CONFIG,\n `loginWithToken() has been called without a config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const refreshTokenCalledWithoutConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.REFRESH_TOKEN_CALLED_WITHOUT_CONFIG,\n `refreshToken() has been called without a config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const selectRoleCalledWithoutConfig = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.SELECT_ROLE_CALLED_WITHOUT_CONFIG,\n `selectRole() has been called without a config. Please set it during the auth provider creation.`,\n );\n};\n\nexport const defaultResponseTransformerResponseNotObject = (currentType: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_OBJECT,\n `The default response transformer expects the response to be an object, but it is a \"${currentType}\".`,\n );\n};\n\nexport const defaultResponseTransformerResponseNotContainingAccessToken = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_ACCESS_TOKEN,\n `The default response transformer expects the response to contain an \"accessToken\" property.`,\n );\n};\n\nexport const defaultResponseTransformerResponseNotContainingRefreshToken = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.DEFAULT_RESPONSE_TRANSFORMER_RESPONSE_NOT_CONTAINING_REFRESH_TOKEN,\n `The default response transformer expects the response to contain a \"refreshToken\" property.`,\n );\n};\n\nexport const unableToDecryptBearerToken = (token: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.UNABLE_TO_DECRYPT_BEARER_TOKEN,\n `The bearer token could not be decrypted: ${token}`,\n );\n};\n\nexport const bearerExpiresInPropertyNotNumber = (expiresIn: unknown) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.BEARER_EXPIRES_IN_PROPERTY_NOT_NUMBER,\n `The expires in property is not a number: ${expiresIn}`,\n );\n};\n\nexport const uncacheableRequestHasCacheKeyParam = (key: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.UNCACHEABLE_REQUEST_HAS_CACHE_KEY_PARAM,\n `This request is uncacheable, but a cache key was provided: ${key}. Please remove it.`,\n );\n};\n\nexport const uncacheableRequestHasAllowCacheParam = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.UNCACHEABLE_REQUEST_HAS_ALLOW_CACHE_PARAM,\n `This request is uncacheable, but allowCache is set to true. Please remove it.`,\n );\n};\n\nexport const pagedQueryStackPageBiggerThanTotalPages = (page: number, totalPages: number) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.PAGED_QUERY_STACK_PAGE_BIGGER_THAN_TOTAL_PAGES,\n `The page \"${page}\" is bigger than the total pages \"${totalPages}\".`,\n );\n};\n\nexport const pagedQueryStackNextPageCalledWithoutPreviousPage = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.PAGED_QUERY_STACK_NEXT_PAGE_CALLED_WITHOUT_PREVIOUS_PAGE,\n `fetchNextPage() has been called but the current page is not yet loaded. Please call it after the previous page has been loaded.`,\n );\n};\n\nexport const pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.PAGED_QUERY_STACK_PREVIOUS_PAGE_CALLED_BUT_ALREADY_AT_FIRST_PAGE,\n `fetchPreviousPage() has been called but the current page is already the first page.`,\n );\n};\n\nexport const queryStackWithArgsUsed = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_STACK_WITH_ARGS_USED,\n `withArgs() has been used in a query stack or a paged query stack. This is not supported.`,\n );\n};\n\nexport const queryStackWithResponseUpdateUsed = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_STACK_WITH_RESPONSE_UPDATE_USED,\n `withResponseUpdate() has been used in a query stack or a paged query stack. This is not supported.`,\n );\n};\n\nexport const queryStackTotalQueriesAndExpectedQueriesMismatch = (totalQueries: number, expectedQueries: number) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_STACK_TOTAL_QUERIES_AND_EXPECTED_QUERIES_MISMATCH,\n `The total queries \"${totalQueries}\" and the expected queries \"${expectedQueries}\" do not match. This usually happens if a query depends on the response of the previous query to calculate its pagination values. Set blockExecutionDuringLoading to true to prevent this.`,\n );\n};\n","import { computed, effect, inject, isDevMode, Signal, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport {\n deleteCookie as coreDeleteCookie,\n getCookie,\n getDomain,\n injectRoute,\n isObject,\n setCookie,\n} from '@ethlete/core';\nimport { of, switchMap, tap, timer } from 'rxjs';\nimport { decryptBearer } from '../../auth';\nimport { QueryArgs, QuerySnapshot, RequestArgs } from '../http';\nimport {\n bearerExpiresInPropertyNotNumber,\n cookieLoginTriedButCookieDisabled,\n defaultResponseTransformerResponseNotContainingAccessToken,\n defaultResponseTransformerResponseNotContainingRefreshToken,\n defaultResponseTransformerResponseNotObject,\n disableCookieCalledWithoutCookieConfig,\n enableCookieCalledWithoutCookieConfig,\n loginCalledWithoutConfig,\n loginWithTokenCalledWithoutConfig,\n refreshTokenCalledWithoutConfig,\n selectRoleCalledWithoutConfig,\n unableToDecryptBearerToken,\n} from '../http/query-errors';\nimport {\n BearerAuthProviderConfig,\n BearerAuthProviderCookieConfig,\n BearerAuthProviderRouteConfig,\n BearerAuthProviderTokens,\n} from './bearer-auth-provider-config';\n\ntype InternalQueryExecuteOptions = {\n triggeredInternally?: boolean;\n};\n\ntype AuthProviderQueryWithType<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n> =\n | {\n type: 'login';\n query: ReturnType<typeof createAuthProviderQuery<TLoginArgs>> | null;\n }\n | {\n type: 'tokenLogin';\n query: ReturnType<typeof createAuthProviderQuery<TTokenLoginArgs>> | null;\n }\n | {\n type: 'tokenRefresh';\n query: ReturnType<typeof createAuthProviderQuery<TTokenRefreshArgs>> | null;\n }\n | {\n type: 'selectRole';\n query: ReturnType<typeof createAuthProviderQuery<TSelectRoleArgs>> | null;\n };\n\ntype QuerySnapshotWithType<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n> =\n | ({\n type: 'login';\n } & QuerySnapshot<TLoginArgs>)\n | ({\n type: 'tokenLogin';\n } & QuerySnapshot<TTokenLoginArgs>)\n | ({\n type: 'tokenRefresh';\n } & QuerySnapshot<TTokenRefreshArgs>)\n | ({\n type: 'selectRole';\n } & QuerySnapshot<TSelectRoleArgs>);\n\nexport type BearerAuthProvider<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n TBearerData,\n> = {\n /**\n * Logs in the user with the given args.\n */\n login: (args: RequestArgs<TLoginArgs>) => QuerySnapshot<TLoginArgs>;\n\n /**\n * Logs in the user with the given token.\n */\n loginWithToken: (args: RequestArgs<TTokenLoginArgs>) => QuerySnapshot<TTokenLoginArgs>;\n\n /**\n * Refreshes the token with the given refresh token.\n */\n refreshToken: (args: RequestArgs<TTokenRefreshArgs>) => QuerySnapshot<TTokenRefreshArgs>;\n\n /**\n * Selects the role for the user.\n */\n selectRole: (args: RequestArgs<TSelectRoleArgs>) => QuerySnapshot<TSelectRoleArgs>;\n\n /**\n * Logs out the user and removes the cookie.\n */\n logout: () => void;\n\n /**\n * Enables cookie usage for the auth provider.\n */\n enableCookie: () => void;\n\n /**\n * Disables cookie usage for the auth provider and removes the cookie.\n */\n disableCookie: () => void;\n\n /**\n * Checks if the cookie is present.\n */\n isCookiePresent: () => boolean;\n\n /**\n * Tries to login with the given cookie config.\n * Returns `true` if a cookie was found, `false` otherwise.\n */\n tryLoginWithCookie: () => boolean;\n\n /**\n * The latest executed query that was not triggered internally.\n */\n latestExecutedQuery: Signal<QuerySnapshotWithType<\n TLoginArgs,\n TTokenLoginArgs,\n TTokenRefreshArgs,\n TSelectRoleArgs\n > | null>;\n\n /**\n * A signal that contains the current access and refresh tokens.\n */\n tokens: Signal<BearerAuthProviderTokens | null>;\n\n /**\n * The bearer data that was decrypted from the access token.\n */\n bearerData: Signal<TBearerData | null>;\n};\n\nconst defaultResponseTransformer = <T>(response: T) => {\n if (!isObject(response)) {\n throw defaultResponseTransformerResponseNotObject(typeof response);\n }\n\n if (!('accessToken' in response)) {\n throw defaultResponseTransformerResponseNotContainingAccessToken();\n }\n\n if (!('refreshToken' in response)) {\n throw defaultResponseTransformerResponseNotContainingRefreshToken();\n }\n\n return response as unknown as BearerAuthProviderTokens;\n};\n\nconst FIVE_MINUTES = 5 * 60 * 1000;\n\nconst createAuthProviderQuery = <T extends QueryArgs>(\n config: BearerAuthProviderRouteConfig<T>,\n authProviderConfig: {\n /**\n * The time in milliseconds before the token expires when the refresh should be triggered.\n * @default 300000 // (5 minutes)\n */\n refreshBuffer?: number;\n\n /**\n * The expires in property name inside the jwt body\n * @default 'exp'\n */\n expiresInPropertyName?: string;\n },\n) => {\n const query = config.queryCreator({ onlyManualExecution: true });\n\n const triggeredInternally = signal(false);\n\n const tokens = computed(() => {\n const res = query.response();\n\n if (!res) return null;\n\n const transformed = config.responseTransformer?.(res) ?? defaultResponseTransformer(res);\n\n const bearerValue = decryptBearer(transformed.accessToken);\n\n if (!bearerValue) throw unableToDecryptBearerToken(transformed.accessToken);\n\n return {\n bearer: bearerValue,\n tokens: transformed,\n };\n });\n\n const expiresIn = computed(() => {\n const res = tokens();\n\n if (!res) return null;\n\n const expiresIn = res.bearer[authProviderConfig.expiresInPropertyName ?? 'exp'];\n const refreshBuffer = authProviderConfig.refreshBuffer ?? FIVE_MINUTES;\n\n if (typeof expiresIn !== 'number') {\n throw bearerExpiresInPropertyNotNumber(expiresIn);\n }\n\n // const dummyRemainingTime = (query.lastTimeExecutedAt() ?? 0) + 5000 - new Date().getTime();\n const remainingTime = new Date(expiresIn * 1000).getTime() - refreshBuffer - new Date().getTime();\n\n return remainingTime;\n });\n\n const execute = (newArgs: RequestArgs<T>, options?: InternalQueryExecuteOptions) => {\n query.execute({ args: newArgs });\n triggeredInternally.set(options?.triggeredInternally ?? false);\n };\n\n return {\n execute,\n query,\n tokens,\n expiresIn,\n triggeredInternally: triggeredInternally.asReadonly(),\n };\n};\n\nexport const createBearerAuthProvider = <\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n TBearerData,\n>(\n options: BearerAuthProviderConfig<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs, TBearerData>,\n): BearerAuthProvider<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs, TBearerData> => {\n const route = injectRoute();\n const client = inject(options.queryClientRef);\n\n const cookieEnabled = signal(options.cookie === undefined ? false : (options.cookie.enabled ?? true));\n const cookieOptions: Required<Omit<BearerAuthProviderCookieConfig<TTokenRefreshArgs>, 'enabled'>> = {\n expiresInDays: 30,\n name: 'etAuth',\n path: '/',\n sameSite: 'lax',\n domain: getDomain() ?? 'localhost',\n refreshArgsTransformer: (token) => ({ body: { token } }) as RequestArgs<TTokenRefreshArgs>,\n autoLoginExcludeRoutes: [],\n ...(options.cookie ?? {}),\n };\n\n const loginQuery = options.login ? createAuthProviderQuery(options.login, options) : null;\n const tokenLoginQuery = options.tokenLogin ? createAuthProviderQuery(options.tokenLogin, options) : null;\n const tokenRefreshQuery = options.tokenRefresh ? createAuthProviderQuery(options.tokenRefresh, options) : null;\n const selectRoleQuery = options.selectRole ? createAuthProviderQuery(options.selectRole, options) : null;\n\n const queries: AuthProviderQueryWithType<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>[] = [\n { type: 'login', query: loginQuery },\n { type: 'tokenLogin', query: tokenLoginQuery },\n { type: 'tokenRefresh', query: tokenRefreshQuery },\n { type: 'selectRole', query: selectRoleQuery },\n ];\n\n const latestExecutedQuery = computed(() => {\n const relevantQueries = queries.filter((q) => q.query && q.query.query.lastTimeExecutedAt() !== null);\n\n return findMostRecentQuery(relevantQueries);\n });\n\n const tokens = computed(() => {\n const query = latestExecutedQuery();\n\n return query?.query?.tokens()?.tokens ?? null;\n });\n\n const bearerData = computed(() => {\n const accessToken = tokens()?.accessToken;\n\n if (!accessToken) return null;\n\n return (options.bearerDecryptFn?.(accessToken) ?? decryptBearer(accessToken)) as TBearerData | null;\n });\n\n toObservable(\n computed(() => {\n const query = latestExecutedQuery();\n const expiresIn = query?.query?.expiresIn() ?? null;\n const tokens = query?.query?.tokens() ?? null;\n\n return { expiresIn, tokens, query };\n }),\n )\n .pipe(\n switchMap((res) => {\n if (!res.tokens || res.expiresIn === null || !options.tokenRefresh) return of(null);\n\n const expIn = res.expiresIn;\n const tokens = res.tokens;\n\n if (!expIn || !tokens) return of(null);\n\n return timer(expIn).pipe(\n tap(() =>\n refreshToken(\n {\n ...cookieOptions.refreshArgsTransformer(tokens.tokens.refreshToken),\n },\n { triggeredInternally: true },\n ),\n ),\n );\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n const latestNonInternalQuery = signal<QuerySnapshotWithType<\n TLoginArgs,\n TTokenLoginArgs,\n TTokenRefreshArgs,\n TSelectRoleArgs\n > | null>(null);\n\n effect(() => {\n const relevantQueries = queries.filter(\n (q) => q.query && !q.query.triggeredInternally() && q.query.query.lastTimeExecutedAt() !== null,\n );\n\n const lastQuery = findMostRecentQuery(relevantQueries);\n\n untracked(() => {\n if (!lastQuery || !lastQuery.query?.query) return;\n\n latestNonInternalQuery.set({\n type: lastQuery.type,\n ...lastQuery.query.query.createSnapshot(),\n } as QuerySnapshotWithType<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>);\n });\n });\n\n // Cookie writing\n effect(() => {\n const isCookieEnabled = cookieEnabled();\n const res = latestExecutedQuery();\n const error = res?.query?.query.error();\n\n if (!isCookieEnabled || (error && error.code === 401)) {\n deleteCookie();\n return;\n }\n\n if (!res?.query) return;\n\n const { tokens } = res.query;\n\n const rt = tokens()?.tokens.refreshToken;\n\n if (!rt) return;\n\n writeCookie(rt);\n });\n\n const login = (args: RequestArgs<TLoginArgs>) => {\n if (!loginQuery) {\n throw loginCalledWithoutConfig();\n }\n\n loginQuery.execute(args);\n\n return loginQuery.query.createSnapshot();\n };\n\n const loginWithToken = (args: RequestArgs<TTokenLoginArgs>) => {\n if (!tokenLoginQuery) {\n throw loginWithTokenCalledWithoutConfig();\n }\n\n tokenLoginQuery.execute(args);\n\n return tokenLoginQuery.query.createSnapshot();\n };\n\n const refreshToken = (args: RequestArgs<TTokenRefreshArgs>, options?: InternalQueryExecuteOptions) => {\n if (!tokenRefreshQuery) {\n throw refreshTokenCalledWithoutConfig();\n }\n\n tokenRefreshQuery.execute(args, { triggeredInternally: options?.triggeredInternally });\n\n return tokenRefreshQuery.query.createSnapshot();\n };\n\n const selectRole = (args: RequestArgs<TSelectRoleArgs>) => {\n if (!selectRoleQuery) {\n throw selectRoleCalledWithoutConfig();\n }\n\n selectRoleQuery.execute(args);\n\n return selectRoleQuery.query.createSnapshot();\n };\n\n const logout = () => {\n deleteCookie();\n loginQuery?.query.reset();\n tokenLoginQuery?.query.reset();\n tokenRefreshQuery?.query.reset();\n selectRoleQuery?.query.reset();\n latestNonInternalQuery.set(null);\n\n client.repository.unbindAllSecure();\n };\n\n const enableCookie = () => {\n if (isDevMode() && !options.cookie) {\n throw enableCookieCalledWithoutCookieConfig();\n }\n\n cookieEnabled.set(true);\n };\n\n const disableCookie = () => {\n if (isDevMode() && !options.cookie) {\n throw disableCookieCalledWithoutCookieConfig();\n }\n\n cookieEnabled.set(false);\n deleteCookie();\n };\n\n const isCookiePresent = () => {\n return !!getCookie(cookieOptions.name);\n };\n\n const tryLoginWithCookie = () => {\n const isCookieEnabled = cookieEnabled();\n\n if (!isCookieEnabled) {\n if (isDevMode()) {\n throw cookieLoginTriedButCookieDisabled();\n }\n return false;\n }\n\n const cookie = getCookie(cookieOptions.name);\n\n if (!cookie) {\n return false;\n }\n\n refreshToken(cookieOptions.refreshArgsTransformer(cookie));\n\n return true;\n };\n\n const writeCookie = (refreshToken: string) => {\n const { name, expiresInDays, domain, path, sameSite } = cookieOptions;\n\n setCookie(name, refreshToken, expiresInDays, domain, path, sameSite);\n };\n\n const deleteCookie = () => {\n const { name, path, domain } = cookieOptions;\n\n coreDeleteCookie(name, path, domain);\n };\n\n const findMostRecentQuery = (\n queriesToSearch: AuthProviderQueryWithType<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs>[],\n ) => {\n return queriesToSearch.reduce(\n (acc, curr) => {\n if (!acc) return curr;\n\n const accExp = acc.query?.query.lastTimeExecutedAt() ?? null;\n const currExp = curr.query?.query.lastTimeExecutedAt() ?? null;\n\n if (currExp === null || accExp === null) return acc;\n\n return accExp > currExp ? acc : curr;\n },\n null as AuthProviderQueryWithType<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs> | null,\n );\n };\n\n const bearerAuthProvider: BearerAuthProvider<\n TLoginArgs,\n TTokenLoginArgs,\n TTokenRefreshArgs,\n TSelectRoleArgs,\n TBearerData\n > = {\n login,\n loginWithToken,\n refreshToken,\n selectRole,\n logout,\n enableCookie,\n disableCookie,\n isCookiePresent,\n tryLoginWithCookie,\n latestExecutedQuery: latestNonInternalQuery.asReadonly(),\n tokens,\n bearerData,\n };\n\n if (cookieEnabled()) {\n if (!cookieOptions.autoLoginExcludeRoutes.some((r) => route().startsWith(r))) {\n tryLoginWithCookie();\n }\n }\n\n return bearerAuthProvider;\n};\n\nexport const provideBearerAuthProvider = <\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n TBearerData,\n>(\n config: BearerAuthProviderConfig<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs, TBearerData>,\n) => {\n return {\n provide: config.token,\n useFactory: () => createBearerAuthProvider(config),\n };\n};\n","import { InjectionToken } from '@angular/core';\nimport { QueryArgs, QueryClientRef, QueryCreator, RequestArgs, ResponseType } from '../http';\nimport { BearerAuthProvider } from './bearer-auth-provider';\n\nexport type BearerAuthProviderTokens = {\n accessToken: string;\n refreshToken: string;\n};\n\nexport type BearerAuthProviderRouteConfig<TArgs extends QueryArgs> = {\n queryCreator: QueryCreator<TArgs>;\n\n /**\n * A function that transforms the response into the format that the auth provider expects\n *\n * The expected format is an object with the `accessToken` and `refreshToken` properties.\n *\n * @default (response) => response\n */\n responseTransformer?: (response: ResponseType<TArgs>) => BearerAuthProviderTokens;\n};\n\nexport type BearerAuthProviderCookieConfig<TTokenRefreshArgs extends QueryArgs> = {\n /**\n * The cookie name where the refresh token is stored\n * @default 'etAuth'\n */\n name?: string;\n\n /**\n * The domain of the cookie. If not set, the current origin will be used.\n *\n * @example\n * \"https://example.com\" -> \"example.com\"\n * \"https://sub.example.com\" -> \"example.com\"\n */\n domain?: string;\n\n /**\n * The days until the cookie expires\n * @default 30\n */\n expiresInDays?: number;\n\n /**\n * The path of the cookie\n * @default '/'\n */\n path?: string;\n\n /**\n * Enable or disable the cookie\n * @default true\n */\n enabled?: boolean;\n\n /**\n * The same site property of the cookie\n * @default 'lax'\n */\n sameSite?: 'strict' | 'none' | 'lax';\n\n /**\n * A function that turns the token gotten from the cookie into the body for the refresh token request\n * @default (token) => ({ token })\n */\n refreshArgsTransformer?: (token: string) => RequestArgs<TTokenRefreshArgs>;\n\n /**\n * An array of routes where the auto login via cookie should not be triggered.\n *\n * This checks the current route against the array of routes using the `startsWith` method.\n * Make sure to start each route with a `/`.\n *\n * @default []\n * @example ['/login', '/register']\n */\n autoLoginExcludeRoutes?: string[];\n};\n\nexport type CreateBearerAuthProviderConfigOptions<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n TBearerData,\n> = {\n /**\n * The name of the auth provider\n */\n name: string;\n\n /**\n * The query client reference\n */\n queryClientRef: QueryClientRef;\n\n /**\n * The login route configuration\n */\n login?: BearerAuthProviderRouteConfig<TLoginArgs>;\n\n /**\n * The token login route configuration\n */\n tokenLogin?: BearerAuthProviderRouteConfig<TTokenLoginArgs>;\n\n /**\n * The token refresh route configuration\n */\n tokenRefresh?: BearerAuthProviderRouteConfig<TTokenRefreshArgs>;\n\n /**\n * The select role route configuration\n */\n selectRole?: BearerAuthProviderRouteConfig<TSelectRoleArgs>;\n\n /**\n * The cookie configuration for the auth provider\n */\n cookie?: BearerAuthProviderCookieConfig<TTokenRefreshArgs>;\n\n /**\n * The time in milliseconds before the token expires when the refresh should be triggered.\n * @default 300000 // (5 minutes)\n */\n refreshBuffer?: number;\n\n /**\n * The expires in property name inside the jwt body\n * @default 'exp'\n */\n expiresInPropertyName?: string;\n\n /**\n * Determines if the token should be refreshed if **any** query returns a 401 response.\n * @default true\n */\n refreshOnUnauthorizedResponse?: boolean;\n\n /**\n * A function that decrypts the bearer token\n */\n bearerDecryptFn?: (token: string) => TBearerData;\n};\n\nexport type BearerAuthProviderConfig<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n TBearerData,\n> = CreateBearerAuthProviderConfigOptions<\n TLoginArgs,\n TTokenLoginArgs,\n TTokenRefreshArgs,\n TSelectRoleArgs,\n TBearerData\n> & {\n token: BearerAuthProviderRef<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs, TBearerData>;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyBearerAuthProviderConfig = BearerAuthProviderConfig<any, any, any, any, any>;\n\nexport type BearerAuthProviderRef<\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n TBearerData,\n> = InjectionToken<BearerAuthProvider<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs, TBearerData>>;\n\nexport const createBearerAuthProviderConfig = <\n TLoginArgs extends QueryArgs,\n TTokenLoginArgs extends QueryArgs,\n TTokenRefreshArgs extends QueryArgs,\n TSelectRoleArgs extends QueryArgs,\n TBearerData,\n>(\n options: CreateBearerAuthProviderConfigOptions<\n TLoginArgs,\n TTokenLoginArgs,\n TTokenRefreshArgs,\n TSelectRoleArgs,\n TBearerData\n >,\n) => {\n const token = new InjectionToken<\n BearerAuthProviderConfig<TLoginArgs, TTokenLoginArgs, TTokenRefreshArgs, TSelectRoleArgs, TBearerData>\n >(`BearerAuthProvider_${options.name}`);\n\n const bearerAuthProviderConfig: BearerAuthProviderConfig<\n TLoginArgs,\n TTokenLoginArgs,\n TTokenRefreshArgs,\n TSelectRoleArgs,\n TBearerData\n > = {\n name: options.name,\n queryClientRef: options.queryClientRef,\n token,\n cookie: options.cookie,\n expiresInPropertyName: options.expiresInPropertyName || 'exp',\n refreshBuffer: options.refreshBuffer ?? 300000,\n refreshOnUnauthorizedResponse: options.refreshOnUnauthorizedResponse ?? true,\n login: options.login,\n selectRole: options.selectRole,\n tokenLogin: options.tokenLogin,\n tokenRefresh: options.tokenRefresh,\n bearerDecryptFn: options.bearerDecryptFn,\n };\n\n return bearerAuthProviderConfig;\n};\n","import { ClassValidatorError } from './class-validator.types';\n\nexport const isClassValidatorError = (error: unknown): error is ClassValidatorError => {\n return typeof error === 'object' && error !== null && 'statusCode' in error && 'message' in error && 'error' in error;\n};\n","import { HttpEvent } from '@angular/common/http';\nimport { Signal, WritableSignal, computed, signal } from '@angular/core';\nimport { HttpRequest, HttpRequestLoadingState } from './http-request';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { QueryErrorResponse } from './query-error-response';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type SetupQueryStateOptions = {};\n\nexport type QueryStateSubtle<TArgs extends QueryArgs> = {\n request: WritableSignal<HttpRequest<TArgs> | null>;\n};\n\nexport type QueryState<TArgs extends QueryArgs> = {\n response: WritableSignal<ResponseType<TArgs> | null>;\n args: WritableSignal<RequestArgs<TArgs> | null>;\n latestHttpEvent: WritableSignal<HttpEvent<ResponseType<TArgs>> | null>;\n loading: WritableSignal<HttpRequestLoadingState | null>;\n error: WritableSignal<QueryErrorResponse | null>;\n lastTimeExecutedAt: WritableSignal<number | null>;\n executionState: Signal<QueryExecutionState<TArgs> | null>;\n subtle: QueryStateSubtle<TArgs>;\n};\n\nexport type QueryExecutionStateSuccess<TArgs extends QueryArgs> = {\n type: 'success';\n response: ResponseType<TArgs>;\n};\n\nexport type QueryExecutionStateFailure = {\n type: 'failure';\n error: QueryErrorResponse;\n};\n\nexport type QueryExecutionStateLoadingWithNoResponse = {\n type: 'loading';\n hasCachedResponse: false;\n loading: HttpRequestLoadingState;\n};\n\nexport type QueryExecutionStateLoadingWithCachedResponse<TArgs extends QueryArgs> = {\n type: 'loading';\n hasCachedResponse: true;\n loading: HttpRequestLoadingState;\n cachedResponse: ResponseType<TArgs>;\n};\n\nexport type QueryExecutionStateLoading<TArgs extends QueryArgs> =\n | QueryExecutionStateLoadingWithNoResponse\n | QueryExecutionStateLoadingWithCachedResponse<TArgs>;\n\nexport type QueryExecutionState<TArgs extends QueryArgs> =\n | QueryExecutionStateSuccess<TArgs>\n | QueryExecutionStateFailure\n | QueryExecutionStateLoading<TArgs>;\n\nexport const setupQueryState = <TArgs extends QueryArgs>(options: SetupQueryStateOptions) => {\n const response = signal<ResponseType<TArgs> | null>(null);\n const args = signal<RequestArgs<TArgs> | null>(null);\n const latestHttpEvent = signal<HttpEvent<ResponseType<TArgs>> | null>(null);\n const error = signal<QueryErrorResponse | null>(null);\n const loading = signal<HttpRequestLoadingState | null>(null);\n const lastTimeExecutedAt = signal<number | null>(null);\n const request = signal<HttpRequest<TArgs> | null>(null);\n\n const executionState = computed<QueryExecutionState<TArgs> | null>(() => {\n const currentResponse = response();\n const currentError = error();\n const currentLoading = loading();\n\n if (currentLoading) {\n if (currentResponse) {\n return {\n type: 'loading',\n hasCachedResponse: true,\n loading: currentLoading,\n cachedResponse: currentResponse,\n };\n }\n\n return {\n type: 'loading',\n hasCachedResponse: false,\n loading: currentLoading,\n };\n } else if (currentError) {\n return {\n type: 'failure',\n error: currentError,\n };\n } else if (currentResponse) {\n return {\n type: 'success',\n response: currentResponse,\n };\n } else {\n return null;\n }\n });\n\n const state: QueryState<TArgs> = {\n response,\n args,\n latestHttpEvent,\n loading,\n error,\n lastTimeExecutedAt,\n executionState,\n subtle: {\n request,\n },\n };\n\n return state;\n};\n","import { effect, signal, untracked } from '@angular/core';\nimport { QueryArgs, QuerySnapshot } from './query';\nimport { QueryDependencies } from './query-dependencies';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryState, setupQueryState } from './query-state';\nimport { normalizeQueryRepositoryKey } from './query-utils';\n\nexport type CreateQuerySnapshotOptions<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n deps: QueryDependencies;\n execute: InternalQueryExecute<TArgs>;\n};\n\nexport const createQuerySnapshotFn = <TArgs extends QueryArgs>(options: CreateQuerySnapshotOptions<TArgs>) => {\n const { state, deps } = options;\n\n const snapshotFn = () => {\n const snapshotState = setupQueryState<TArgs>({});\n const isAlive = signal(true);\n\n const killEffectRef = effect(\n () => {\n const currentLoading = state.loading();\n const currentError = state.error();\n const currentResponse = state.response();\n const currentArgs = state.args();\n const currentLatestHttpEvent = state.latestHttpEvent();\n const currentLastTimeExecutedAt = state.lastTimeExecutedAt();\n\n untracked(() => {\n snapshotState.args.set(currentArgs);\n snapshotState.error.set(currentError);\n snapshotState.lastTimeExecutedAt.set(currentLastTimeExecutedAt);\n snapshotState.latestHttpEvent.set(currentLatestHttpEvent);\n snapshotState.loading.set(currentLoading);\n snapshotState.response.set(currentResponse);\n\n if (currentLoading) return;\n\n if (!currentResponse && !currentError) return;\n\n // kill the effect once loading is done and we either have a response or an error\n killEffectRef.destroy();\n\n isAlive.set(false);\n });\n },\n { injector: deps.injector },\n );\n\n const snapshot: QuerySnapshot<TArgs> = {\n args: snapshotState.args.asReadonly(),\n response: snapshotState.response.asReadonly(),\n latestHttpEvent: snapshotState.latestHttpEvent.asReadonly(),\n loading: snapshotState.loading.asReadonly(),\n error: snapshotState.error.asReadonly(),\n lastTimeExecutedAt: snapshotState.lastTimeExecutedAt.asReadonly(),\n isAlive: isAlive.asReadonly(),\n id: normalizeQueryRepositoryKey(options.execute.currentRepositoryKey),\n executionState: snapshotState.executionState,\n };\n\n return snapshot;\n };\n\n return snapshotFn;\n};\n","import { HttpErrorResponse, HttpHeaders, HttpStatusCode } from '@angular/common/http';\nimport { computed, CreateEffectOptions, effect, Signal } from '@angular/core';\nimport { getActiveConsumer, setActiveConsumer } from '@angular/core/primitives/signals';\nimport { clamp } from '@ethlete/core';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../../symfony';\nimport { CreateGqlQueryOptions, isCreateGqlQueryOptions } from '../gql/gql-query';\nimport { CreateGqlQueryCreatorOptions, GqlQueryMethod } from '../gql/gql-query-creator';\nimport { CreateQueryOptions, Query, QueryArgs, ReadonlyQuery, RequestArgs, ResponseType } from './query';\nimport { InternalCreateQueryCreatorOptions, QueryMethod } from './query-creator';\nimport { QueryDependencies } from './query-dependencies';\nimport {\n queryFeatureUsedMultipleTimes,\n silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent,\n withArgsQueryFeatureMissingButRouteIsFunction,\n} from './query-errors';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryFeature, QueryFeatureContext, QueryFeatureType } from './query-features';\nimport { QueryKeyOrNone } from './query-repository';\nimport { createQuerySnapshotFn } from './query-snapshot';\nimport { QueryState } from './query-state';\n\n/**\n * Returning this inside a withArgs feature will reset the query args to null.\n * This will also pause polling and auto refresh until new args are set.\n */\nexport const CLEAR_QUERY_ARGS = Symbol('CLEAR_QUERY_ARGS');\nexport type ClearQueryArgs = typeof CLEAR_QUERY_ARGS;\n\n/** A angular effect that can be nested inside another effect */\nexport const nestedEffect = (fn: () => void, options?: CreateEffectOptions) => {\n const activeConsumer = getActiveConsumer();\n\n setActiveConsumer(null);\n\n const eff = effect(() => {\n fn();\n }, options);\n\n setActiveConsumer(activeConsumer);\n\n return eff;\n};\n\nconst CIRCULAR_QUERY_DEPENDENCY_ERROR_MESSAGE =\n 'Query was executed more than 5 times in less than 100ms. This is usually a sign of a circular dependency.';\n\nexport const circularQueryDependencyChecker = () => {\n let lastTriggerTs = 0;\n let illegalWrites = 0;\n\n // Typing this as number will throw an type error during testing since it is of type Timeout in a node env.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let timeout: any = null;\n\n const check = () => {\n const now = performance.now();\n\n if (now - lastTriggerTs < 100) {\n illegalWrites++;\n\n if (illegalWrites > 5) {\n throw new Error(CIRCULAR_QUERY_DEPENDENCY_ERROR_MESSAGE);\n }\n }\n\n lastTriggerTs = now;\n\n if (timeout) clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n illegalWrites = 0;\n }, 100);\n };\n\n return {\n check,\n };\n};\n\nexport const shouldAutoExecuteQuery = (method: QueryMethod) => {\n return method === 'GET' || method === 'HEAD' || method === 'OPTIONS';\n};\n\nexport const shouldAutoExecuteGqlQuery = (method: GqlQueryMethod) => {\n return method === 'QUERY';\n};\n\nexport const extractExpiresInSeconds = (headers: HttpHeaders) => {\n const cacheControl = headers.get('cache-control');\n const age = headers.get('age');\n const expires = headers.get('expires');\n\n // In seconds\n let expiresIn: number | null = null;\n let maxAge: number | null = null;\n\n if (cacheControl?.includes('no-cache')) {\n return null;\n }\n\n if (cacheControl?.includes('max-age')) {\n const m = cacheControl.split('max-age=')[1];\n\n if (m) {\n maxAge = parseInt(m);\n }\n } else if (cacheControl?.includes('s-maxage')) {\n const m = cacheControl.split('s-maxage=')[1];\n\n if (m) {\n maxAge = parseInt(m);\n }\n }\n\n if (maxAge && age) {\n const ageSeconds = parseInt(age);\n\n expiresIn = maxAge - ageSeconds;\n } else if (maxAge) {\n expiresIn = maxAge / 2; // We assume the response is half way to its expiration\n } else if (expires) {\n // Used by some apis to tell the response will never expire\n // In this case we let the response expire after 1 hour\n if (expires === '-1') {\n expiresIn = 3600;\n } else {\n const expiresDate = new Date(expires);\n\n // check if the date is valid\n if (expiresDate.toString() !== 'Invalid Date') {\n expiresIn = Math.floor((expiresDate.getTime() - Date.now()) / 1000);\n }\n }\n }\n\n return expiresIn;\n};\n\nexport type ShouldRetryRequestOptions = {\n retryCount: number;\n error: HttpErrorResponse;\n};\n\nexport type ShouldRetryRequestResult =\n | {\n retry: false;\n }\n | {\n retry: true;\n delay: number;\n };\n\nexport type ShouldRetryRequestFn = (options: ShouldRetryRequestOptions) => ShouldRetryRequestResult;\n\nexport const shouldRetryRequest = (\n options: ShouldRetryRequestOptions | HttpErrorResponse,\n): ShouldRetryRequestResult => {\n const normalizedOptions =\n options instanceof HttpErrorResponse ? { retryCount: 0, error: options } : (options as ShouldRetryRequestOptions);\n const { retryCount, error } = normalizedOptions;\n const defaultRetryDelay = clamp(1000 + 1000 * retryCount, 1000, 5000);\n const { status, error: detail, headers } = error;\n\n // Code 0 usually means the internet connection is down. We retry in this case.\n // It could also be a CORS issue but that should not be the case in production.\n // We will retry in this case until the connection is back.\n if (status === 0) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Don't retry if we already retried 3 times\n if (retryCount > 3) {\n return { retry: false };\n }\n\n // Don't retry if it's not an http error\n if (!(error instanceof HttpErrorResponse)) {\n return { retry: false };\n }\n\n // Retry on 5xx errors (except 500 internal server error since those are usually not recoverable)\n if (status >= 501) {\n // Don't retry if a requested page is out of range\n if (isSymfonyPagerfantaOutOfRangeError(detail)) {\n return { retry: false };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 408 or 425 errors\n if (status === HttpStatusCode.RequestTimeout || status === HttpStatusCode.TooEarly) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 429 errors\n if (status === HttpStatusCode.TooManyRequests) {\n const retryAfter = headers.get('retry-after') || headers.get('x-retry-after');\n\n if (retryAfter) {\n const delay = parseInt(retryAfter) * 1000;\n return { retry: true, delay: Number.isNaN(delay) ? defaultRetryDelay : delay };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n return { retry: false };\n};\n\nexport type QueryFeatureFlags = {\n hasWithArgsFeature: boolean;\n shouldAutoExecuteMethod: boolean;\n shouldAutoExecute: boolean;\n hasRouteFunction: boolean;\n onlyManualExecution?: boolean;\n\n /** Human readable method name */\n method: string;\n};\n\nexport const getQueryFeatureUsage = <TArgs extends QueryArgs>(\n options: CreateQueryOptions<TArgs> | CreateGqlQueryOptions<TArgs>,\n) => {\n const { creator, features, queryConfig, creatorInternals } = options;\n\n const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WithArgs);\n const shouldAutoExecuteMethod = isCreateGqlQueryOptions(options)\n ? shouldAutoExecuteGqlQuery(options.creatorInternals.method)\n : shouldAutoExecuteQuery(options.creatorInternals.method);\n const hasRouteFunction =\n typeof (creatorInternals as InternalCreateQueryCreatorOptions<TArgs>)?.route === 'function' ||\n typeof (creator as CreateGqlQueryCreatorOptions<TArgs>)?.route === 'function';\n const shouldAutoExecute = shouldAutoExecuteMethod && !queryConfig.onlyManualExecution;\n\n if (hasRouteFunction && !hasWithArgsFeature && !queryConfig.silenceMissingWithArgsFeatureError) {\n throw withArgsQueryFeatureMissingButRouteIsFunction();\n }\n\n if (hasWithArgsFeature && queryConfig.silenceMissingWithArgsFeatureError) {\n throw silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent();\n }\n\n const featureFnContext: QueryFeatureFlags = {\n hasWithArgsFeature,\n shouldAutoExecuteMethod,\n shouldAutoExecute,\n hasRouteFunction,\n onlyManualExecution: queryConfig.onlyManualExecution,\n method: isCreateGqlQueryOptions(options)\n ? `GQL ${options.creatorInternals.method}`\n : options.creatorInternals.method,\n };\n\n return featureFnContext;\n};\n\nexport const applyQueryFeatures = <TArgs extends QueryArgs>(\n features: QueryFeature<TArgs>[],\n context: QueryFeatureContext<TArgs>,\n) => {\n const featureTypes = new Set<QueryFeatureType>();\n\n for (const feature of features) {\n if (featureTypes.has(feature.type)) {\n throw queryFeatureUsedMultipleTimes(feature.type);\n }\n\n featureTypes.add(feature.type);\n feature.fn(context);\n }\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const maybeExecute = (options: { flags: QueryFeatureFlags; execute: InternalQueryExecute<any> }) => {\n if (options.flags.shouldAutoExecute && !options.flags.hasRouteFunction && !options.flags.hasWithArgsFeature) {\n options.execute();\n }\n};\n\nexport type CreateQueryObjectOptions<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n deps: QueryDependencies;\n execute: InternalQueryExecute<TArgs>;\n};\n\nexport const createQueryObject = <TArgs extends QueryArgs>(options: CreateQueryObjectOptions<TArgs>) => {\n const { state, execute, deps } = options;\n\n const destroy = () => deps.injector.destroy();\n const setResponse = (response: ResponseType<TArgs>) => state.response.set(response);\n const createSnapshot = createQuerySnapshotFn({ state, deps, execute });\n\n const asReadonly = () => {\n const roQuery: ReadonlyQuery<TArgs> = {\n args: state.args.asReadonly(),\n response: state.response.asReadonly(),\n latestHttpEvent: state.latestHttpEvent.asReadonly(),\n loading: state.loading.asReadonly(),\n error: state.error.asReadonly(),\n lastTimeExecutedAt: state.lastTimeExecutedAt.asReadonly(),\n id: normalizeQueryRepositoryKey(execute.currentRepositoryKey),\n createSnapshot,\n executionState: state.executionState,\n };\n\n return roQuery;\n };\n\n const query: Query<TArgs> = {\n execute,\n args: state.args.asReadonly(),\n response: state.response.asReadonly(),\n latestHttpEvent: state.latestHttpEvent.asReadonly(),\n loading: state.loading.asReadonly(),\n error: state.error.asReadonly(),\n lastTimeExecutedAt: state.lastTimeExecutedAt.asReadonly(),\n id: normalizeQueryRepositoryKey(execute.currentRepositoryKey),\n createSnapshot,\n reset: execute.reset,\n asReadonly,\n executionState: state.executionState,\n subtle: {\n destroy,\n setResponse,\n },\n };\n\n return query;\n};\n\nexport const normalizeQueryRepositoryKey = (key: Signal<QueryKeyOrNone>) =>\n computed(() => {\n const k = key();\n\n if (k === false) {\n // false means the query cannot be cached and thus it is not stored in the repository\n // We generate a random id in this case to avoid confusion\n return crypto.randomUUID();\n }\n\n return k;\n });\n\nexport const shouldCacheQuery = (method: QueryMethod) => {\n return method === 'GET' || method === 'OPTIONS' || method === 'HEAD';\n};\n\nexport const buildQueryCacheKey = (route: string, args: RequestArgs<QueryArgs> | undefined) => {\n // We need to hash the body in case it's a gql query and the query get's transported in the body\n const body = JSON.stringify(args?.body || {})\n // replace all curly braces with empty string\n .replace(/{|}/g, '')\n // replace new lines and whitespaces with empty string\n .replace(/\\s/g, '');\n\n const seed = `${route}_${body}`;\n\n let hash = 0;\n\n for (const char of seed) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;\n }\n\n // Force positive number hash.\n // 2147483647 = equivalent of Integer.MAX_VALUE.\n hash += 2147483647 + 1;\n\n return hash.toString();\n};\n","import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http';\nimport { isClassValidatorError } from '../../class-validator';\nimport { isSymfonyFormViolationListError, isSymfonyListError } from '../../symfony';\nimport { shouldRetryRequest, ShouldRetryRequestResult } from './query-utils';\n\nexport type QueryErrorResponseList = {\n isList: true;\n errors: QueryErrorResponseItem[];\n};\n\nexport type QueryErrorResponseSingle = {\n isList: false;\n error: QueryErrorResponseItem;\n};\n\nexport type QueryErrorResponse = {\n raw: HttpErrorResponse;\n retryState: ShouldRetryRequestResult;\n code: HttpStatusCode;\n} & (QueryErrorResponseList | QueryErrorResponseSingle);\n\nexport interface QueryErrorResponseItem {\n message: string;\n}\n\nexport const createQueryErrorResponse = (error: unknown): QueryErrorResponse => {\n let err = error instanceof HttpErrorResponse ? error : null;\n\n if (!err) {\n err = new HttpErrorResponse({\n error: error,\n status: 0,\n statusText: 'Unknown Error',\n });\n }\n const retryState = shouldRetryRequest(err);\n\n const detail = err.error;\n const errorList: QueryErrorResponseItem[] = [];\n\n if (isClassValidatorError(detail)) {\n for (const error of detail.message) {\n errorList.push({ message: error });\n }\n } else if (isSymfonyFormViolationListError(detail)) {\n for (const violation of detail.violations) {\n errorList.push({ message: violation.message });\n }\n } else if (isSymfonyListError(detail)) {\n for (const error of detail) {\n errorList.push({ message: error.message });\n }\n } else if (typeof detail === 'object' && !!detail && 'message' in detail && typeof detail.message === 'string') {\n errorList.push({ message: detail.message });\n } else if (typeof detail === 'object' && !!detail && 'detail' in detail && typeof detail.detail === 'string') {\n // Symfony error response (during development)\n errorList.push({ message: detail.detail });\n } else if (typeof detail === 'string') {\n errorList.push({ message: detail });\n } else if (Array.isArray(detail) && detail.length > 0 && typeof detail[0] === 'string') {\n for (const error of detail) {\n errorList.push({ message: error });\n }\n }\n\n if (errorList.length > 1) {\n return {\n isList: true,\n errors: errorList,\n raw: err,\n retryState,\n code: err.status,\n };\n } else {\n const singleError = errorList[0] ?? { message: err.message };\n\n return {\n isList: false,\n error: singleError,\n raw: err,\n retryState,\n code: err.status,\n };\n }\n};\n","import { HttpClient, HttpContext, HttpEvent, HttpEventType, HttpProgressEvent } from '@angular/common/http';\nimport { ErrorHandler, Signal, computed, signal } from '@angular/core';\nimport { Subscription, catchError, retry, tap, throwError, timer } from 'rxjs';\nimport { buildTimestampFromSeconds } from '../../request';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { CacheAdapterFn } from './query-client-config';\nimport { QueryMethod } from './query-creator';\nimport { QueryErrorResponse, createQueryErrorResponse } from './query-error-response';\nimport { QueryRepositoryDependencies } from './query-repository';\nimport {\n ShouldRetryRequestFn,\n ShouldRetryRequestOptions,\n extractExpiresInSeconds,\n shouldRetryRequest,\n} from './query-utils';\n\nexport const SPEED_BUFFER_TIME_IN_MS = 2000;\n\nexport type HttpRequestTransferCacheConfig =\n | boolean\n | {\n includeHeaders?: string[];\n };\n\nexport type HttpRequestResponseType = 'json' | 'text' | 'blob' | 'arraybuffer';\n\nexport type CreateHttpRequestDependencies = {\n /** The http client instance to use for the request */\n httpClient: HttpClient;\n\n /** The error handler instance to use for the request */\n ngErrorHandler: ErrorHandler;\n};\n\nexport type CreateHttpRequestClientOptions = {\n /**\n * Whether to report the progress of the request or not. If the fetch backend is used, this will only work for downloads.\n * @see https://angular.dev/guide/http/making-requests#receiving-raw-progress-events\n * @default false\n */\n reportProgress?: boolean;\n\n /**\n * Whether to include credentials in the request or not\n * @default false\n */\n withCredentials?: boolean;\n\n /**\n * This property accepts either a boolean to enable/disable transferring cache for eligible\n * requests performed using `HttpClient`, or an object, which allows to configure cache\n * parameters, such as which headers should be included (no headers are included by default).\n *\n * Setting this property will override the options passed to `provideClientHydration()` for this\n * particular request\n */\n transferCache?: HttpRequestTransferCacheConfig;\n\n /**\n * The response type of the request\n * @default 'json'\n */\n responseType?: HttpRequestResponseType;\n\n /**\n * The context of the request\n * @default undefined\n * @see https://angular.dev/guide/http/interceptors#request-and-response-metadata\n */\n context?: HttpContext;\n};\n\nexport type CreateHttpRequestOptions<TArgs extends QueryArgs> = {\n /** The HTTP method of the request */\n method: QueryMethod;\n\n /**\n * The full path of the request\n * @example 'https://api.example.com/v1/users'\n */\n fullPath: string;\n\n /** The data of the request */\n args?: RequestArgs<TArgs> | null;\n\n /** The dependencies of the request */\n dependencies: QueryRepositoryDependencies;\n\n /** The client options of the request */\n clientOptions?: CreateHttpRequestClientOptions;\n\n /**\n * The cache adapter function to use for the request\n * @default extractExpiresInSeconds()\n */\n cacheAdapter?: CacheAdapterFn;\n\n /**\n * The retry function to use for the request\n * @default shouldRetryRequest()\n */\n retryFn?: ShouldRetryRequestFn;\n};\n\nexport type HttpRequestLoadingState = {\n /** The time when the request was executed in ms */\n executeTime: number;\n\n /** The progress of the request. Null if reportProgress is false or progress is not available / unsupported */\n progress: HttpRequestLoadingProgressState | null;\n};\n\nexport type HttpRequestLoadingProgressState = {\n /** The total number of bytes to be transferred */\n total: number;\n\n /** The number of bytes transferred */\n loaded: number;\n\n /** The percentage of the transfer that is completed */\n percentage: number;\n\n /** The speed of the transfer in bytes per millisecond */\n speed: number | null;\n\n /** The estimated remaining time in milliseconds */\n remainingTime: number | null;\n};\n\nexport type HttpRequest<TArgs extends QueryArgs> = {\n /** Executes the request */\n execute: (options?: { allowCache?: boolean }) => boolean;\n\n /** Destroys the request (cancels it if in progress) */\n destroy: () => boolean;\n\n /** The loading state of the request */\n loading: Signal<HttpRequestLoadingState | null>;\n\n /** The error state of the request */\n error: Signal<QueryErrorResponse | null>;\n\n /** The response state of the request */\n response: Signal<ResponseType<TArgs> | null>;\n\n /** The current event of the request */\n currentEvent: Signal<HttpEvent<ResponseType<TArgs>> | HttpErrorEvent | null>;\n\n /** Whether the request is stale or not aka the cache header has expired */\n isStale: Signal<boolean>;\n};\n\n/** A custom error event since the Angular http client does not provide a specific event for errors */\nexport type HttpErrorEvent = {\n type: 'error';\n error: QueryErrorResponse;\n};\n\nexport const createHttpRequest = <TArgs extends QueryArgs>(options: CreateHttpRequestOptions<TArgs>) => {\n let currentStreamSubscription = Subscription.EMPTY;\n\n const { args, clientOptions, dependencies } = options;\n\n const currentEvent = signal<HttpEvent<ResponseType<TArgs>> | HttpErrorEvent | null>(null);\n const loading = signal<HttpRequestLoadingState | null>(null);\n const error = signal<QueryErrorResponse | null>(null);\n const response = signal<ResponseType<TArgs> | null>(null);\n\n const lastLoadEventTime = signal(0);\n const lastLoadEventAmount = signal(0);\n const lastExecuteTime = signal(0);\n const expiresIn = signal<number | null>(null);\n\n const isStale = computed(() => {\n const expiresInTs = expiresIn();\n\n return expiresInTs === null || expiresInTs < Date.now();\n });\n\n const stream = dependencies.httpClient\n .request(options.method, options.fullPath, {\n observe: 'events',\n body: args?.body,\n reportProgress: clientOptions?.reportProgress,\n withCredentials: clientOptions?.withCredentials,\n transferCache: clientOptions?.transferCache,\n responseType: clientOptions?.responseType || 'json',\n context: clientOptions?.context,\n headers: args?.headers,\n })\n .pipe(\n tap((event) => updateState(event)),\n retry({\n delay: (error, retryCount) => {\n const retryOptions: ShouldRetryRequestOptions = { error, retryCount };\n\n const retryResult = options.retryFn?.(retryOptions) || shouldRetryRequest(retryOptions);\n\n if (!retryResult.retry) {\n return throwError(() => error);\n }\n\n return timer(retryResult.delay);\n },\n }),\n catchError((e) => {\n updateErrorState(e);\n\n return throwError(() => e);\n }),\n );\n\n const execute = (options?: { allowCache?: boolean }) => {\n if (loading() || (!isStale() && options?.allowCache)) {\n // Do not execute if there is already a request in progress or caching is allowed\n return false;\n }\n\n currentStreamSubscription.unsubscribe();\n\n lastExecuteTime.set(Date.now());\n lastLoadEventTime.set(lastExecuteTime());\n\n loading.set({\n executeTime: lastExecuteTime(),\n progress: null,\n });\n error.set(null);\n expiresIn.set(null);\n\n currentStreamSubscription = stream.subscribe();\n\n return true;\n };\n\n const destroy = () => {\n if (currentStreamSubscription.closed) {\n return false;\n }\n\n currentStreamSubscription.unsubscribe();\n\n return true;\n };\n\n const updateState = (event: HttpEvent<ResponseType<TArgs>>) => {\n currentEvent.set(event);\n\n switch (event.type) {\n case HttpEventType.Response:\n {\n loading.set(null);\n response.set(event.body);\n\n const expiresInSeconds = options.cacheAdapter\n ? options.cacheAdapter(event.headers)\n : extractExpiresInSeconds(event.headers);\n const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);\n expiresIn.set(expiresInTimestamp);\n }\n break;\n\n case HttpEventType.UploadProgress:\n case HttpEventType.DownloadProgress:\n {\n updateLoadingState(event);\n }\n break;\n\n case HttpEventType.Sent:\n case HttpEventType.ResponseHeader:\n case HttpEventType.User:\n {\n // we don't care about these events\n }\n break;\n }\n };\n\n const updateErrorState = (errorResponse: unknown) => {\n const errorRes = createQueryErrorResponse(errorResponse);\n\n error.set(errorRes);\n loading.set(null);\n currentEvent.set({ type: 'error', error: errorRes });\n\n options.dependencies.ngErrorHandler.handleError(errorRes.raw);\n };\n\n const updateLoadingState = (event: HttpProgressEvent) => {\n if (event.total === undefined) {\n return;\n }\n\n const progress: HttpRequestLoadingProgressState = {\n total: event.total,\n loaded: event.loaded,\n percentage: (event.loaded / event.total) * 100,\n speed: null,\n remainingTime: null,\n };\n\n const state: HttpRequestLoadingState = {\n executeTime: lastExecuteTime(),\n progress,\n };\n\n const currentTime = Date.now();\n const elapsedTimeSinceLastEvent = currentTime - lastLoadEventTime();\n const elapsedTimeSinceLastExecute = currentTime - lastExecuteTime();\n const loadedAmount = event.loaded - lastLoadEventAmount();\n\n // We only want to calculate speed and remaining time after 2 seconds of the execution\n // This is to avoid showing incorrect speed and remaining time when the request is very fast\n if (elapsedTimeSinceLastExecute > SPEED_BUFFER_TIME_IN_MS) {\n const speed = (loadedAmount / elapsedTimeSinceLastEvent) * 1000;\n\n progress.speed = speed * 1000;\n progress.remainingTime = Math.round((event.total - event.loaded) / speed) * 1000;\n }\n\n lastLoadEventTime.set(currentTime);\n lastLoadEventAmount.set(event.loaded);\n\n loading.set(state);\n };\n\n const httpRequest: HttpRequest<TArgs> = {\n execute,\n destroy,\n loading: loading.asReadonly(),\n error: error.asReadonly(),\n response: response.asReadonly(),\n currentEvent: currentEvent.asReadonly(),\n isStale,\n };\n\n return httpRequest;\n};\n","import { HttpEvent } from '@angular/common/http';\nimport { computed, Signal, untracked } from '@angular/core';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { QueryDependencies } from './query-dependencies';\nimport { QueryErrorResponse } from './query-error-response';\nimport {\n withAutoRefreshUsedInManualQuery,\n withAutoRefreshUsedOnUnsupportedHttpMethod,\n withPollingUsedOnUnsupportedHttpMethod,\n} from './query-errors';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryState } from './query-state';\nimport { CLEAR_QUERY_ARGS, ClearQueryArgs, nestedEffect, QueryFeatureFlags } from './query-utils';\n\nexport const enum QueryFeatureType {\n WithArgs = 'withArgs',\n WithLogging = 'withLogging',\n WithErrorHandling = 'withErrorHandling',\n WithSuccessHandling = 'withSuccessHandling',\n WithPolling = 'withPolling',\n WithAutoRefresh = 'withAutoRefresh',\n WithResponseUpdate = 'withResponseUpdate',\n}\n\nexport type QueryFeatureContext<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n execute: InternalQueryExecute<TArgs>;\n deps: QueryDependencies;\n flags: QueryFeatureFlags;\n};\n\nexport type QueryFeatureFn<TArgs extends QueryArgs> = (context: QueryFeatureContext<TArgs>) => void;\n\nexport type QueryFeature<TArgs extends QueryArgs> = {\n type: QueryFeatureType;\n fn: (context: QueryFeatureContext<TArgs>) => void;\n};\n\nconst createQueryFeature = <TArgs extends QueryArgs>(config: { type: QueryFeatureType; fn: QueryFeatureFn<TArgs> }) => {\n return config as QueryFeature<TArgs>;\n};\n\n/**\n * A query feature that allows you to set the arguments of the query.\n * The arguments are read within a computed function, so you can use reactive values.\n *\n * To set the arguments to `null`, return the symbol `CLEAR_QUERY_ARGS`.\n * If you instead return `null`, the arguments won't change.\n *\n * Changing arguments will automatically trigger a new execution of the query if it is eligible for auto execution (e.g. a GET request).\n */\nexport const withArgs = <TArgs extends QueryArgs>(args: () => NoInfer<RequestArgs<TArgs>> | ClearQueryArgs | null) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithArgs,\n fn: (context) => {\n const currArgs = computed(() => args());\n\n nestedEffect(\n () => {\n const currArgsNow = currArgs();\n\n if (currArgsNow === null) return;\n\n untracked(() => {\n if (currArgsNow === CLEAR_QUERY_ARGS) {\n context.state.args.set(null);\n return;\n }\n\n context.state.args.set(currArgsNow);\n\n if (context.flags.shouldAutoExecute) context.execute({ args: currArgsNow });\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithPollingFeatureOptions = {\n /** The interval in milliseconds at which the query should be executed */\n interval: number;\n\n /**\n * Whether the query should be executed initially.\n * By default, the query will be executed after the first interval.\n * @default false\n */\n executeInitially?: boolean;\n};\n\n/**\n * A query feature that will automatically execute the query at a given interval.\n * The interval will be cleared when the query is destroyed.\n * The interval will be reset when the arguments of the query change.\n *\n * @throws If the query is not eligible for auto execution (e.g. a POST request)\n */\nexport const withPolling = <TArgs extends QueryArgs>(options: WithPollingFeatureOptions) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithPolling,\n fn: (context) => {\n if (!context.flags.shouldAutoExecuteMethod) {\n throw withPollingUsedOnUnsupportedHttpMethod(context.flags.method);\n }\n\n let intervalId: number | null = null;\n\n nestedEffect(\n () => {\n const args = context.state.args();\n\n untracked(() => {\n if (intervalId !== null) clearInterval(intervalId);\n\n // Don't start polling if the query doesn't have args.\n // It should have args because a withArgs feature is present.\n if (args === null && context.flags.hasWithArgsFeature) return;\n\n if (options.executeInitially) {\n context.execute({ args });\n }\n\n intervalId = window.setInterval(() => {\n context.execute({ args });\n }, options.interval);\n });\n },\n { injector: context.deps.injector },\n );\n\n context.deps.destroyRef.onDestroy(() => intervalId !== null && clearInterval(intervalId));\n },\n });\n};\n\nexport type WithLoggingFeatureOptions<TArgs extends QueryArgs> = {\n /** A function that will be called with the latest http event */\n logFn: (v: HttpEvent<ResponseType<TArgs>> | null) => void;\n};\n\n/** A query feature that can be used to log the latest http event */\nexport const withLogging = <TArgs extends QueryArgs>(options: WithLoggingFeatureOptions<TArgs>) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithLogging,\n fn: (context) => {\n nestedEffect(\n () => {\n const event = context.state.latestHttpEvent();\n\n if (event === null) return;\n\n untracked(() => {\n options.logFn(event);\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithErrorHandlingFeatureOptions = {\n /** A function that will be called with the latest error */\n handler: (e: QueryErrorResponse) => void;\n};\n\n/** A query feature that can be used to handle errors */\nexport const withErrorHandling = <TArgs extends QueryArgs>(options: WithErrorHandlingFeatureOptions) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithErrorHandling,\n fn: (context) => {\n nestedEffect(\n () => {\n const error = context.state.error();\n\n if (error === null) return;\n\n untracked(() => {\n options.handler(error);\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\ntype WithSuccessHandlingFeatureOptions<TArgs extends QueryArgs> = {\n /** A function that will be called with the latest response */\n handler: (data: NonNullable<ResponseType<TArgs>>) => void;\n};\n\n/** A query feature that can be used to handle successful responses */\nexport const withSuccessHandling = <TArgs extends QueryArgs>(options: WithSuccessHandlingFeatureOptions<TArgs>) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithSuccessHandling,\n fn: (context) => {\n nestedEffect(\n () => {\n const response = context.state.response();\n\n if (response === null) return;\n\n untracked(() => {\n options.handler(response as NonNullable<ResponseType<TArgs>>);\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithAutoRefreshFeatureOptions = {\n /** The signals that should trigger a refresh of the query */\n onSignalChanges: Signal<unknown>[];\n\n /** Whether to ignore the `onlyManualExecution` query config flag */\n ignoreOnlyManualExecution?: boolean;\n};\n\n/**\n * A query feature that will automatically execute the query when any of the provided signals change\n * @throws If the query is not eligible for auto execution (e.g. a POST request)\n * @throws If the query has the `onlyManualExecution` query config flag set and `ignoreOnlyManualExecution` is not set\n */\nexport const withAutoRefresh = <TArgs extends QueryArgs>(options: WithAutoRefreshFeatureOptions) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithAutoRefresh,\n fn: (context) => {\n if (!context.flags.shouldAutoExecuteMethod) {\n throw withAutoRefreshUsedOnUnsupportedHttpMethod(context.flags.method);\n }\n\n if (context.flags.onlyManualExecution && !options.ignoreOnlyManualExecution) {\n throw withAutoRefreshUsedInManualQuery();\n }\n\n nestedEffect(\n () => {\n for (const signal of options.onSignalChanges) {\n signal();\n }\n\n untracked(() => {\n const args = context.state.args();\n\n // Don't start polling if the query doesn't have args.\n // It should have args because a withArgs feature is present.\n if (args === null && context.flags.hasWithArgsFeature) return;\n\n context.execute({ args });\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithResponseUpdateFeatureFnData<TArgs extends QueryArgs> = {\n /** The current response of the query */\n currentResponse: ResponseType<TArgs> | null;\n};\n\nexport type WithResponseUpdateFeatureOptions<TArgs extends QueryArgs> = {\n /**\n * A function that will be called with the latest response\n * If the function returns `null`, the response will not be updated.\n * Otherwise, the response will be updated with the returned value.\n * The function will be called in a reactive signal context.\n * If the query get's executed after the response was updated, the response will be set the the fresh data received from the server.\n *\n * This feature is most useful in combination with web sockets where the data received from the socket might be more up-to-date than the data received previously.\n *\n * @example\n * const matchEvents = mySocket.joinRoom('match-events');\n *\n * const myMatchQuery = getMatch(\n * withArgs(() => ({ matchId: 1 })),\n * withResponseUpdate(({ currentResponse }) => {\n * const matchEvent = matchEvents();\n *\n * if (!matchEvent) return null;\n *\n * // Do some checks here. This is just a very simple example.\n * // To apply partial updates, you can use the spread operator in combination with the current response.\n *\n * return matchEvent;\n * })\n * )\n */\n updater: (data: WithResponseUpdateFeatureFnData<TArgs>) => ResponseType<TArgs> | null;\n};\n\nexport const withResponseUpdate = <TArgs extends QueryArgs>(options: WithResponseUpdateFeatureOptions<TArgs>) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WithResponseUpdate,\n fn: (context) => {\n nestedEffect(\n () => {\n const currentResponse = untracked(() => context.state.response());\n const response = options.updater({ currentResponse });\n\n if (response === null) return;\n\n untracked(() => {\n context.state.response.set(response);\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, effect, inject, Injector, runInInjectionContext, Signal, signal, untracked } from '@angular/core';\nimport { AnyQuery, RequestArgs, ResponseType } from './query';\nimport { AnyQueryCreator, QueryArgsOf, RunQueryCreator } from './query-creator';\nimport { QueryErrorResponse } from './query-error-response';\nimport { queryStackWithArgsUsed, queryStackWithResponseUpdateUsed } from './query-errors';\nimport { QueryFeature, QueryFeatureType, withArgs } from './query-features';\n\nexport type QueryStackSubtle<TCreator extends AnyQueryCreator, TQuery extends AnyQuery> = {\n /** Create a new query with the given arguments. You should always prefer the `args` option instead of this. */\n runWithArgs: (\n args: RequestArgs<QueryArgsOf<TCreator>> | RequestArgs<QueryArgsOf<TCreator>>[] | null,\n ) => TQuery | null;\n};\n\nexport type QueryStack<TQuery extends AnyQuery, TCreator extends AnyQueryCreator, TTransform> = {\n /** Contains all queries in the stack. */\n queries: Signal<TQuery[]>;\n\n /** Contains the first query in the stack. */\n firstQuery: Signal<TQuery | null>;\n\n /** Contains the last query in the stack. Useful for getting current pagination values. */\n lastQuery: Signal<TQuery | null>;\n\n /** True if any query in the stack is loading. */\n loading: Signal<boolean>;\n\n /** Contains the first error that occurred in the stack. */\n error: Signal<QueryErrorResponse | null>;\n\n /** Contains the responses of all queries in the stack. Will be `null` for queries that are loading or errored. */\n response: Signal<TTransform>;\n\n /** Executes all queries in the stack. */\n execute: (options?: { allowCache?: boolean }) => void;\n\n /** Destroys all queries in the stack and empties it. This should only be used if `append` is true. */\n clear: () => void;\n\n /** Advanced query stack features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle: QueryStackSubtle<TCreator, TQuery>;\n};\n\nexport type AnyQueryStack = QueryStack<AnyQuery, AnyQueryCreator, any>;\n\nexport type CreateQueryStackOptions<\n TCreator extends AnyQueryCreator,\n TDeps extends () => any,\n TTransform = (ResponseType<QueryArgsOf<TCreator>> | null)[],\n> = {\n /**\n * The query creator function that will be used to create the query stack.\n */\n queryCreator: TCreator;\n\n /**\n * The dependencies that should trigger a new query stack creation.\n * This function can be treated like a computed function. It reacts to signal changes.\n * The return value of this function will be passed to the `args` function.\n *\n * This option can be ignored if `append` is false.\n */\n dependencies?: TDeps;\n\n /**\n * The features that should be used for all queries in the stack.\n *\n * @throws If the `withArgs` feature is used. This feature is internally used.\n *\n * @example\n * // Due to limitations in TypeScript, you have to manually add the needed generic types if needed.\n * features: [E.withSuccessHandling<GetPostQueryArgs>({ handler: (post) => console.log(post.title) })]\n *\n * @example\n * // If typings are not needed, you can use the feature without generics.\n * features: [E.withPolling({ interval: 5000 })]\n */\n features?: QueryFeature<any>[];\n\n /**\n * The arguments to create queries with.\n * This function can be treated like a computed function. It reacts to signal changes.\n * If a signal changes, a new query will be created (and appended to the existing ones if `append` is true).\n * If this function returns `null`, the args will be ignored.\n * If this function returns an array, multiple queries will be created.\n *\n * @example\n * // One query\n * () => ({ queryParams: { postId: myId() } }),\n *\n * @example\n * // Multiple queries (these can of cause also be created using a loop)\n * () => [\n * { queryParams: { postId: myId() } },\n * { queryParams: { postId: myOtherId() } },\n * ],\n *\n * @example\n * // One query with dependencies\n * (deps) => ({ queryParams: { postId: myId(), limit: deps.limit } }),\n */\n args: (deps: ReturnType<TDeps>) => RequestArgs<QueryArgsOf<TCreator>> | RequestArgs<QueryArgsOf<TCreator>>[] | null;\n\n /**\n * If true, new queries will be appended to the existing ones. Otherwise, existing queries will be destroyed.\n * This should be used for things like infinite scrolling where already fetched queries should not be destroyed.\n */\n append?: boolean;\n\n /**\n * If append is true, this function will be called to merge the old and new queries.\n * Useful if you want to append the new queries in a specific order (e.g. at the beginning).\n */\n appendFn?: (\n oldQueries: RunQueryCreator<TCreator>[],\n newQueries: RunQueryCreator<TCreator>[],\n ) => {\n /** The new queries merged with the old ones. */\n queries: RunQueryCreator<TCreator>[];\n\n /** The last query in the new queries. */\n lastQuery: RunQueryCreator<TCreator> | null;\n };\n\n /**\n * Transforms the responses of all queries in the stack. Useful for merging or filtering responses.\n */\n transform?: (responses: ResponseType<QueryArgsOf<TCreator>>[]) => TTransform;\n};\n\n/** Transforms an array of arrays into a single array and filters out `null` values. */\nexport const transformArrayResponse = <T extends (unknown | null)[]>(responses: T) =>\n responses.filter((r) => !!r).flatMap((r) => r) as NonNullable<T[0]>[];\n\n/** Transforms an array of paginated responses into a single array and filters out `null` values. */\nexport const transformPaginatedResponse = <T extends ({ items: unknown[] } | null)[]>(responses: T) =>\n responses.filter((r) => !!r).flatMap((r) => r.items) as NonNullable<NonNullable<T[0]>['items']>;\n\nexport const createQueryStack = <\n TCreator extends AnyQueryCreator,\n TArgs extends QueryArgsOf<TCreator>,\n TDeps extends () => any,\n TTransform = (ResponseType<TArgs> | null)[],\n>(\n options: CreateQueryStackOptions<TCreator, TDeps, TTransform>,\n) => {\n type QueryType = RunQueryCreator<TCreator>;\n\n const {\n args,\n queryCreator,\n dependencies,\n append,\n features = [],\n appendFn = (oldQueries: QueryType[], newQueries: QueryType[]) => {\n const queries = [...oldQueries, ...newQueries];\n const lastQuery = newQueries[newQueries.length - 1] ?? oldQueries[oldQueries.length - 1] ?? null;\n\n return { queries, lastQuery };\n },\n transform,\n } = options ?? {};\n\n const injector = inject(Injector);\n\n const queries = signal<QueryType[]>([]);\n const lastQuery = signal<QueryType | null>(null);\n const firstQuery = computed(() => queries()[0] ?? null);\n\n const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WithArgs);\n const hasWithOptimisticUpdateFeature = features.some((f) => f.type == QueryFeatureType.WithResponseUpdate);\n\n if (hasWithArgsFeature) {\n throw queryStackWithArgsUsed();\n }\n\n if (hasWithOptimisticUpdateFeature) {\n throw queryStackWithResponseUpdateUsed();\n }\n\n effect(() => {\n // Clear the stack if dependencies change\n dependencies?.();\n\n untracked(() => clear());\n });\n\n effect(() => runWithArgs(args(dependencies?.())));\n\n const runWithArgs = (args: RequestArgs<QueryArgsOf<TCreator>> | RequestArgs<QueryArgsOf<TCreator>>[] | null) => {\n if (args === null) return null;\n\n const newArgsArray = Array.isArray(args) ? args : [args];\n\n const newQueries = runInInjectionContext(injector, () =>\n newArgsArray.map(\n (newArgsEntry) =>\n queryCreator(\n withArgs(() => newArgsEntry),\n ...features,\n ) as QueryType,\n ),\n );\n\n const result = untracked(() => {\n const oldQueries = queries();\n\n if (append) {\n const { queries: appendedQueries, lastQuery: lastAppendedQuery } = appendFn(oldQueries, newQueries);\n queries.set(appendedQueries);\n lastQuery.set(lastAppendedQuery);\n\n return lastAppendedQuery;\n } else {\n for (const oldQuery of oldQueries) {\n if (!newQueries.some((q) => q.id() === oldQuery.id())) {\n oldQuery.subtle.destroy();\n }\n }\n queries.set(newQueries);\n\n const last = newQueries[newQueries.length - 1] ?? null;\n\n lastQuery.set(last);\n\n return last;\n }\n });\n\n return result;\n };\n\n const loading = computed(() => queries().some((q) => q.loading()));\n\n const error = computed(\n () =>\n queries()\n .map((q) => q.error())\n .find((e) => e !== null) ?? null,\n );\n\n const response = computed(() => {\n const responses = queries().map((q) => q.response());\n return transform?.(responses) ?? responses;\n }) as Signal<TTransform>;\n\n const execute = (options?: { allowCache?: boolean }) => {\n for (const query of queries()) {\n query.execute({ options: { allowCache: options?.allowCache } });\n }\n };\n\n const clear = () => {\n for (const query of queries()) {\n query.subtle.destroy();\n }\n\n queries.set([]);\n lastQuery.set(null);\n };\n\n const stack: QueryStack<QueryType, TCreator, TTransform> = {\n queries: queries.asReadonly(),\n lastQuery: lastQuery.asReadonly(),\n firstQuery,\n loading,\n error,\n response,\n execute,\n clear,\n subtle: {\n runWithArgs,\n },\n };\n\n return stack;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, effect, isDevMode, Signal, signal, untracked } from '@angular/core';\nimport {\n ContentfulGqlLikePaginated,\n DynLikePaginated,\n GgLikePaginated,\n NormalizedPagination,\n Paginated,\n} from '@ethlete/types';\nimport { AnyQuery, Query, QueryArgs, RequestArgs, ResponseType } from './query';\nimport { AnyQueryCreator, QueryArgsOf, QueryCreator } from './query-creator';\nimport { QueryErrorResponse } from './query-error-response';\nimport {\n pagedQueryStackNextPageCalledWithoutPreviousPage,\n pagedQueryStackPageBiggerThanTotalPages,\n pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage,\n queryStackTotalQueriesAndExpectedQueriesMismatch,\n} from './query-errors';\nimport { QueryFeature } from './query-features';\nimport { createQueryStack, transformArrayResponse } from './query-stack';\nimport { shouldRetryRequest } from './query-utils';\n\nexport const ethletePaginationAdapter = <T>(response: Paginated<T>) => {\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages: response.totalPageCount,\n currentPage: response.currentPage,\n itemsPerPage: response.itemsPerPage,\n totalHits: response.totalHits,\n };\n\n return pagination;\n};\n\nexport const ggLikePaginationAdapter = <T>(response: GgLikePaginated<T>) => {\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages: response.totalPageCount,\n currentPage: response.currentPage,\n itemsPerPage: response.itemsPerPage,\n totalHits: response.totalHits,\n };\n\n return pagination;\n};\n\nexport const dynLikePaginationAdapter = <T>(response: DynLikePaginated<T>) => {\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages: response.totalPages,\n currentPage: response.currentPage,\n itemsPerPage: response.limit,\n totalHits: response.totalHits,\n };\n\n return pagination;\n};\n\nexport const contentfulGqlLikePaginationAdapter = <T>(response: ContentfulGqlLikePaginated<T>) => {\n const totalPages = Math.max(Math.ceil(response.total / response.limit), 1); // If there are no items, there is still one page\n const currentPage = Math.max(Math.ceil(response.skip / response.limit) + 1, 1);\n\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages,\n currentPage,\n itemsPerPage: response.limit,\n totalHits: response.total,\n };\n\n return pagination;\n};\n\nexport const fakePaginationAdapter = (totalHits = 10) => {\n return <T>(response: T) => {\n const pagination: NormalizedPagination<T> = {\n items: [response],\n totalPages: totalHits,\n currentPage: 1,\n itemsPerPage: 1,\n totalHits,\n };\n\n return pagination;\n };\n};\n\nexport type CreatePagedQueryStackOptions<\n TArgs extends QueryArgs,\n TNormPagination extends NormalizedPagination<unknown>,\n> = {\n /**\n * The normalizer function that will be used to normalize the response to a format that the paged query can understand.\n *\n * There are some built-in normalizers that can be used:\n * - `ethletePaginationAdapter`\n * - `ggLikePaginationAdapter`\n * - `dynLikePaginationAdapter`\n * - `contentfulGqlLikePaginationAdapter`\n * - `fakePaginationAdapter` (for testing purposes)\n *\n * @param currentResponse The current response that was fetched.\n * @param allResponses All responses that were fetched till now including the current response and pagination.\n */\n responseNormalizer: (\n currentResponse: ResponseType<TArgs>,\n allResponses: NonNullable<ResponseType<TArgs>>[],\n ) => TNormPagination;\n\n /**\n * The query creator function that will be used to create the paged query.\n */\n queryCreator: QueryCreator<TArgs>;\n\n /**\n * The arguments to create the query.\n * The current page will be passed as an argument.\n * This function can be treated like a computed function. It reacts to signal changes.\n * If a signal changes, the paged query will be reset to the initial page.\n *\n * @example (page) => ({ queryParams: { page, limit:20 } }),\n *\n * @param page The page to fetch next. **Do not modify this argument.**\n * @param allResponses All responses that were fetched till now including pagination.\n */\n args: (page: number, allResponses: NonNullable<ResponseType<TArgs>>[]) => RequestArgs<TArgs> | null;\n\n /**\n * The features that should be used for all queries in the stack.\n *\n * @throws If the `withArgs` feature is used. This feature is internally used.\n *\n * @example\n * // Due to limitations in TypeScript, you have to manually add the needed generic types if needed.\n * features: [E.withSuccessHandling<GetPostQueryArgs>({ handler: (post) => console.log(post.title) })]\n *\n * @example\n * // If typings are not needed, you can use the feature without generics.\n * features: [E.withPolling({ interval: 5000 })]\n */\n features?: QueryFeature<any>[];\n\n /**\n * The page to start this paged query from.\n * @default 1\n */\n initialPage?: number;\n\n /**\n * If true, no queries will be executed while the paged query is loading.\n * This is useful if you need the current response to be used in the next query.\n */\n blockExecutionDuringLoading?: boolean;\n};\n\nexport type PagedQueryStackResetOptions = {\n /**\n * The page to reset this paged query to.\n * This will clear everything and start from this page.\n * @default 1 // or the value passed in the `initialPage` option when creating the paged query.\n */\n initialPage?: number;\n};\n\nexport type PagedQueryStackExecuteOptions<TNormPagination extends NormalizedPagination<unknown>> = {\n /**\n * If provided, only the queries that match the condition will be executed.\n * This will also execute the previous and next query to the one that matched the condition.\n * If not provided, all queries will be executed.\n *\n * @example\n * myPagedQuery.execute({ where: (item) => item.id === 4 });\n */\n where?: (item: TNormPagination['items'][number], index: number, array: TNormPagination['items']) => boolean;\n\n /**\n * If true, the cache will be used (if not expired) and the request will not be made.\n * @default false\n */\n allowCache?: boolean;\n};\n\nexport type PagedQueryStackDirection = 'next' | 'previous';\n\nexport type AnyPagedQueryStack = PagedQueryStack<AnyQuery, NormalizedPagination<unknown>>;\n\nexport type PagedQueryStack<TQuery extends AnyQuery, TNormPagination extends NormalizedPagination<unknown>> = {\n /**\n * The pagination of the last executed query in the paged query.\n */\n maxPagination: Signal<TNormPagination | null>;\n\n /**\n * The pagination of the first executed query in the paged query.\n */\n minPagination: Signal<TNormPagination | null>;\n\n /**\n * Whether the last page of the paged query is loaded or not.\n */\n isLastPageLoaded: Signal<boolean>;\n\n /**\n * Whether the first page of the paged query is loaded or not.\n */\n isFirstPageLoaded: Signal<boolean>;\n\n /**\n * Fetches the previous page of the paged query.\n *\n * @throws If the paged query is already at the first page.\n */\n fetchPreviousPage: () => TQuery | null;\n\n /**\n * Fetches the next page of the paged query.\n *\n * @throws If the paged query is already at the last page.\n */\n fetchNextPage: () => TQuery | null;\n\n /**\n * Whether the previous page can be fetched or not.\n *\n * This will be false if the paged query is already at the first page or if the paged query is loading.\n */\n canFetchPreviousPage: Signal<boolean>;\n\n /**\n * Whether the next page can be fetched or not.\n *\n * This will be false if the paged query is already at the last page or if the paged query is loading.\n */\n canFetchNextPage: Signal<boolean>;\n\n /**\n * The items of the paged query.\n */\n items: Signal<TNormPagination['items']>;\n\n /**\n * Whether the paged query is loading or not.\n */\n loading: Signal<boolean>;\n\n /**\n * The error that occurred during the last execution of the paged query.\n */\n error: Signal<QueryErrorResponse | null>;\n\n /**\n * The last query executed in the paged query.\n */\n lastQuery: Signal<Query<QueryArgsOf<TQuery>> | null>;\n\n /**\n * Whether the paged query is on its first load or not.\n */\n isFirstLoad: Signal<boolean>;\n\n /**\n * The queries in the paged query stack.\n */\n queries: Signal<TQuery[]>;\n\n /**\n * Resets the paged query to the initial page.\n */\n reset: (resetOptions?: PagedQueryStackResetOptions) => void;\n\n /**\n * Executes the paged query.\n */\n execute: (options?: PagedQueryStackExecuteOptions<TNormPagination>) => void;\n\n /**\n * The current direction of the paged query.\n */\n direction: Signal<PagedQueryStackDirection>;\n};\n\nexport const createPagedQueryStack = <\n TCreator extends AnyQueryCreator,\n TArgs extends QueryArgsOf<TCreator>,\n TNormPagination extends NormalizedPagination<unknown>,\n>(\n options: CreatePagedQueryStackOptions<TArgs, TNormPagination>,\n) => {\n const { responseNormalizer, queryCreator, features } = options;\n\n const currentPageArgs = signal<RequestArgs<TArgs> | null>(null);\n const initialPage = signal(options.initialPage ?? 1);\n const loadedMinPage = signal(initialPage());\n const loadedMaxPage = signal(initialPage());\n const lastResetTimestamp = signal(Date.now());\n\n const pageDirection = signal<PagedQueryStackDirection>('next');\n\n const stack = createQueryStack({\n args: () => null,\n queryCreator,\n append: true,\n features,\n appendFn: (oldQueries, newQueries) => {\n const newQuery = newQueries[0];\n const dir = pageDirection();\n\n if (!newQuery) {\n const lastQuery = oldQueries[oldQueries.length - 1] ?? null;\n return { queries: oldQueries, lastQuery };\n } else if (dir === 'previous') {\n return { queries: [newQuery, ...oldQueries], lastQuery: newQuery };\n } else {\n return { queries: [...oldQueries, newQuery], lastQuery: newQuery };\n }\n },\n transform: transformArrayResponse,\n });\n\n effect(() => {\n lastResetTimestamp();\n\n const args = options.args(initialPage(), []);\n\n untracked(() => {\n stack.clear();\n currentPageArgs.set(args);\n loadedMinPage.set(initialPage());\n loadedMaxPage.set(initialPage());\n stack.subtle.runWithArgs(args);\n });\n });\n\n const maxPagination = computed(() => {\n const res = stack.lastQuery()?.response();\n const all = stack.response();\n\n if (!res) return null;\n\n return responseNormalizer(res, all);\n });\n\n const minPagination = computed(() => {\n const res = stack.firstQuery()?.response();\n const all = stack.response();\n\n if (!res) return null;\n\n return responseNormalizer(res, all);\n });\n\n const isFirstPageLoaded = computed(() => {\n const min = minPagination();\n\n return min ? loadedMinPage() === min.currentPage : false;\n });\n\n const isLastPageLoaded = computed(() => {\n const max = maxPagination();\n\n return max ? loadedMaxPage() === max.totalPages : false;\n });\n\n const fetchPreviousPage = () => {\n const page = loadedMinPage() - 1;\n const allResponses = stack.response();\n\n if (!canFetchNewPage(page)) {\n return null;\n }\n\n if (page < 1) {\n if (isDevMode()) {\n throw pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage();\n }\n\n return null;\n }\n\n currentPageArgs.set(options.args(page, allResponses));\n loadedMinPage.set(page);\n pageDirection.set('previous');\n\n return stack.subtle.runWithArgs(currentPageArgs());\n };\n\n const fetchNextPage = () => {\n const page = loadedMaxPage() + 1;\n const currentPagination = maxPagination();\n const allResponses = stack.response();\n\n if (!canFetchNewPage(page)) {\n return null;\n }\n\n if (!currentPagination) {\n if (isDevMode()) {\n throw pagedQueryStackNextPageCalledWithoutPreviousPage();\n }\n\n return null;\n }\n\n if (page > currentPagination.totalPages) {\n if (isDevMode()) {\n throw pagedQueryStackPageBiggerThanTotalPages(page, currentPagination.totalPages);\n }\n\n return null;\n }\n\n currentPageArgs.set(options.args(page, allResponses));\n loadedMaxPage.set(page);\n pageDirection.set('next');\n\n return stack.subtle.runWithArgs(currentPageArgs());\n };\n\n const canFetchNewPage = (pageToLoad: number) => {\n const currentMaxPagination = maxPagination();\n const currentMinPagination = minPagination();\n\n if (!currentMaxPagination || !currentMinPagination) {\n return true;\n }\n\n const isOneMinusMinPagination = pageToLoad === currentMinPagination.currentPage - 1;\n const isOnePlusMaxPagination = pageToLoad === currentMaxPagination.currentPage + 1;\n\n if (!options.blockExecutionDuringLoading) {\n const totalQueries = stack.queries().length;\n const expectedQueries = Math.abs(loadedMaxPage() - loadedMinPage()) + 1;\n\n if (totalQueries !== expectedQueries) {\n if (isDevMode()) {\n throw queryStackTotalQueriesAndExpectedQueriesMismatch(totalQueries, expectedQueries);\n }\n }\n\n return true;\n }\n\n if (stack.loading()) {\n return false;\n }\n\n return isOneMinusMinPagination || isOnePlusMaxPagination;\n };\n\n const reset = (resetOptions?: PagedQueryStackResetOptions) => {\n const page = resetOptions?.initialPage ?? initialPage();\n\n initialPage.set(page);\n pageDirection.set('next');\n lastResetTimestamp.set(Date.now());\n };\n\n const canFetchPreviousPage = computed(() => {\n const currentMinPagination = minPagination();\n\n if (!currentMinPagination) return false;\n\n return loadedMinPage() > 1;\n });\n const canFetchNextPage = computed(() => {\n const currentMaxPagination = maxPagination();\n\n return currentMaxPagination ? loadedMaxPage() < currentMaxPagination.totalPages : false;\n });\n\n const items = computed(() => {\n const res = stack.response();\n return res.map((r) => responseNormalizer(r, res).items).flat();\n });\n\n const isFirstLoad = computed(() => {\n return stack.queries().length === 1 && !!stack.lastQuery()?.loading();\n });\n\n const execute = (options?: PagedQueryStackExecuteOptions<TArgs>) => {\n const whereFn = options?.where;\n\n if (whereFn) {\n const queriesToExecute = new Set<Query<TArgs>>();\n const all = stack.response();\n\n for (const [index, query] of stack.queries().entries()) {\n const res = query.response();\n const err = query.error();\n const isErroredAndCanBeRetried = err && shouldRetryRequest(err.raw);\n\n if (isErroredAndCanBeRetried) {\n queriesToExecute.add(query);\n } else if (res) {\n if (responseNormalizer(res, all).items.some((item, i, a) => whereFn(item, i, a))) {\n queriesToExecute.add(query);\n\n // Also execute the previous and next query to the one that matched the condition.\n\n if (index !== 0) {\n const prevQuery = stack.queries()[index - 1];\n\n if (prevQuery) {\n queriesToExecute.add(prevQuery);\n }\n }\n\n if (index !== stack.queries().length - 1) {\n const nextQuery = stack.queries()[index + 1];\n\n if (nextQuery) {\n queriesToExecute.add(nextQuery);\n }\n }\n }\n }\n }\n\n for (const query of queriesToExecute) {\n query.execute({ options: { allowCache: options.allowCache } });\n }\n } else {\n stack.execute({ allowCache: options?.allowCache });\n }\n };\n\n const pagedQuery: PagedQueryStack<Query<TArgs>, TNormPagination> = {\n maxPagination,\n minPagination,\n fetchPreviousPage,\n fetchNextPage,\n canFetchPreviousPage,\n canFetchNextPage,\n items,\n direction: pageDirection.asReadonly(),\n loading: stack.loading,\n error: stack.error,\n lastQuery: stack.lastQuery,\n isFirstLoad,\n queries: stack.queries,\n isLastPageLoaded,\n isFirstPageLoaded,\n reset,\n execute,\n };\n\n return pagedQuery;\n};\n","import { HttpClient } from '@angular/common/http';\nimport {\n DestroyRef,\n EnvironmentInjector,\n ErrorHandler,\n Injector,\n createEnvironmentInjector,\n inject,\n ɵEffectScheduler,\n} from '@angular/core';\nimport { QueryClient } from './query-client';\nimport { QueryClientConfig } from './query-client-config';\nimport { QueryConfig } from './query-creator';\n\nexport type SetupQueryDependenciesOptions = {\n clientConfig: QueryClientConfig;\n queryConfig: QueryConfig | undefined;\n};\n\nexport type QueryDependencies = {\n /** The destroy ref of the query. */\n destroyRef: DestroyRef;\n\n /** The destroy ref of the scope the query is in (e.g. a component) */\n scopeDestroyRef: DestroyRef;\n\n /** The query client */\n client: QueryClient;\n\n /** The injector of the query */\n injector: EnvironmentInjector;\n\n /** The effect scheduler */\n effectScheduler: ɵEffectScheduler;\n\n /** The error handler */\n ngErrorHandler: ErrorHandler;\n\n /** The http client */\n httpClient: HttpClient;\n};\n\nexport const setupQueryDependencies = (options: SetupQueryDependenciesOptions) => {\n const hostInjector = options.queryConfig?.injector ?? inject(Injector);\n const environmentInjector =\n options.queryConfig?.injector?.get(EnvironmentInjector) ?? hostInjector.get(EnvironmentInjector);\n const queryEnvironmentInjector = createEnvironmentInjector([], environmentInjector);\n const destroyRef = queryEnvironmentInjector.get(DestroyRef);\n const scopeDestroyRef = hostInjector.get(DestroyRef);\n const client = hostInjector.get(options.clientConfig.token);\n const effectScheduler = hostInjector.get(ɵEffectScheduler);\n const ngErrorHandler = hostInjector.get(ErrorHandler);\n const httpClient = hostInjector.get(HttpClient);\n\n const dependencies: QueryDependencies = {\n destroyRef,\n scopeDestroyRef,\n client,\n injector: queryEnvironmentInjector,\n effectScheduler,\n ngErrorHandler,\n httpClient,\n };\n\n // cleanup the environment injector when the scope (e.g. the component the query is in) is destroyed\n const scopeDestroyListener = scopeDestroyRef.onDestroy(() => {\n try {\n queryEnvironmentInjector.destroy();\n } catch {\n // ignore\n }\n });\n\n destroyRef.onDestroy(() => {\n // cleanup the scope destroy listener\n try {\n scopeDestroyListener();\n } catch {\n // ignore\n }\n });\n\n return dependencies;\n};\n","import { computed, EffectRef, runInInjectionContext, Signal, signal, untracked, WritableSignal } from '@angular/core';\nimport { QueryArgs, RequestArgs } from './query';\nimport { CreateQueryExecuteOptions } from './query-execute';\nimport { nestedEffect } from './query-utils';\n\nexport type ResetExecuteStateOptions<TArgs extends QueryArgs> = {\n executeOptions: Pick<CreateQueryExecuteOptions<TArgs>, 'state' | 'deps'>;\n executeState: QueryExecuteState;\n};\n\nexport const resetExecuteState = <TArgs extends QueryArgs>(options: ResetExecuteStateOptions<TArgs>) => {\n const { executeState, executeOptions: opts } = options;\n const { state } = opts;\n\n cleanupPreviousExecute({ executeOptions: opts, executeState });\n\n opts.deps.client.repository.unbind(executeState.previousKey(), opts.deps.destroyRef);\n\n state.args.set(null);\n state.error.set(null);\n state.latestHttpEvent.set(null);\n state.loading.set(null);\n state.response.set(null);\n state.lastTimeExecutedAt.set(null);\n};\n\nexport type QueryExecuteState = {\n effectRefs: EffectRef[];\n previousKey: WritableSignal<string | false>;\n};\n\nexport const setupQueryExecuteState = (): QueryExecuteState => {\n return {\n effectRefs: [],\n previousKey: signal(false),\n };\n};\n\nexport type RunQueryExecuteOptions = {\n allowCache?: boolean;\n};\n\nexport type InternalRunQueryExecuteOptions = {\n /**\n * If true, the request will be forced to be cached (saved inside the query repository).\n * Can be used to e.g. cache GQL queries transported via POST\n *\n * - `true` means the request will always be cached\n * - `false` means the request will never be cached\n * - `undefined` means the request will be cached if the method is GET, OPTIONS or HEAD\n */\n useQueryRepositoryCache?: boolean;\n};\n\nexport type QueryExecuteOptions<TArgs extends QueryArgs> = {\n executeOptions: CreateQueryExecuteOptions<TArgs>;\n executeState: QueryExecuteState;\n\n args: RequestArgs<TArgs> | null;\n options?: RunQueryExecuteOptions;\n internalOptions?: InternalRunQueryExecuteOptions;\n\n // TODO: Typings\n transformResponse?: (response: any) => any;\n\n isSecure?: boolean;\n};\n\nconst syncSignal = <T>(signal: Signal<T>, target: WritableSignal<T>) => {\n target.set(signal());\n\n return nestedEffect(() => {\n const val = signal();\n\n untracked(() => {\n if (val === target()) return;\n\n target.set(val);\n console.log('Syncing signal', val);\n });\n });\n};\n\nexport const queryExecute = <TArgs extends QueryArgs>(options: QueryExecuteOptions<TArgs>) => {\n const {\n executeOptions,\n args,\n executeState,\n options: runQueryOptions,\n internalOptions: internalRunQueryOptions,\n transformResponse,\n isSecure,\n } = options;\n const { deps, state, creator, creatorInternals, queryConfig } = executeOptions;\n\n const { key, request } = deps.client.repository.request({\n route: creatorInternals.route,\n method: creatorInternals.method,\n args,\n clientOptions: creator,\n consumerDestroyRef: deps.destroyRef,\n key: queryConfig.key,\n previousKey: executeState.previousKey(),\n internalRunQueryOptions,\n runQueryOptions,\n isSecure,\n });\n\n executeState.previousKey.set(key);\n\n const responseSignal = transformResponse ? computed(() => transformResponse(request.response())) : request.response;\n\n runInInjectionContext(deps.injector, () => {\n const responseRef = syncSignal(responseSignal, state.response);\n const loadingRef = syncSignal(request.loading, state.loading);\n const errorRef = syncSignal(request.error, state.error);\n const latestHttpEventRef = syncSignal(request.currentEvent, state.latestHttpEvent);\n\n executeState.effectRefs.push(responseRef, loadingRef, errorRef, latestHttpEventRef);\n });\n\n state.lastTimeExecutedAt.set(Date.now());\n state.subtle.request.set(request);\n};\n\nexport type CleanupPreviousExecuteOptions<TArgs extends QueryArgs> = {\n executeOptions: Pick<CreateQueryExecuteOptions<TArgs>, 'state'>;\n executeState: QueryExecuteState;\n};\n\nexport const cleanupPreviousExecute = <TArgs extends QueryArgs>(options: CleanupPreviousExecuteOptions<TArgs>) => {\n const { executeState } = options;\n\n executeState.effectRefs.forEach((ref) => ref.destroy());\n executeState.effectRefs.length = 0;\n};\n","import { Signal } from '@angular/core';\nimport { QueryArgs, RequestArgs } from './query';\nimport { CreateQueryCreatorOptions, InternalCreateQueryCreatorOptions, QueryConfig } from './query-creator';\nimport { QueryDependencies } from './query-dependencies';\nimport {\n cleanupPreviousExecute,\n queryExecute,\n resetExecuteState,\n RunQueryExecuteOptions,\n setupQueryExecuteState,\n} from './query-execute-utils';\nimport { QueryKeyOrNone } from './query-repository';\nimport { QueryState } from './query-state';\nimport { circularQueryDependencyChecker } from './query-utils';\n\nexport type CreateQueryExecuteOptions<TArgs extends QueryArgs> = {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: CreateQueryCreatorOptions;\n creatorInternals: InternalCreateQueryCreatorOptions<TArgs>;\n queryConfig: QueryConfig;\n};\n\nexport type QueryExecuteArgs<TArgs extends QueryArgs> = {\n args?: RequestArgs<TArgs> | null;\n options?: RunQueryExecuteOptions;\n};\n\nexport type InternalQueryExecute<TArgs extends QueryArgs> = {\n (executeArgs?: QueryExecuteArgs<TArgs>): void;\n reset: () => void;\n currentRepositoryKey: Signal<QueryKeyOrNone>;\n};\n\nexport type QueryExecute<TArgs extends QueryArgs> = (executeArgs?: QueryExecuteArgs<TArgs>) => void;\n\nexport const createExecuteFn = <TArgs extends QueryArgs>(\n executeOptions: CreateQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n const circularChecker = circularQueryDependencyChecker();\n\n const reset = () => resetExecuteState({ executeState, executeOptions });\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n circularChecker.check();\n\n // Make sure all effects are flushed before reading the args.\n // A withArgs feature effect might still be pending otherwise resulting in the wrong args being read.\n executeOptions.deps.effectScheduler.flush();\n\n const { args = executeOptions.state.args(), options } = executeArgs ?? {};\n\n cleanupPreviousExecute({ executeOptions, executeState });\n queryExecute({ executeOptions, executeState, args, options });\n };\n\n exec['reset'] = reset;\n\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { HttpEvent, HttpHeaders } from '@angular/common/http';\nimport { Signal } from '@angular/core';\nimport { HttpRequestLoadingState } from './http-request';\nimport { CreateQueryCreatorOptions, InternalCreateQueryCreatorOptions, QueryConfig } from './query-creator';\nimport { setupQueryDependencies } from './query-dependencies';\nimport { QueryErrorResponse } from './query-error-response';\nimport { createExecuteFn, QueryExecute } from './query-execute';\nimport { QueryFeature, QueryFeatureContext } from './query-features';\nimport { QueryExecutionState, setupQueryState } from './query-state';\nimport { applyQueryFeatures, createQueryObject, getQueryFeatureUsage, maybeExecute } from './query-utils';\n\nexport type QueryArgs = {\n response?: any;\n pathParams?: Record<string, string | number>;\n queryParams?: any;\n body?: any;\n headers?: HttpHeaders;\n};\n\nexport type ResponseType<T extends QueryArgs | null> = T extends QueryArgs ? T['response'] : never;\nexport type PathParamsType<T extends QueryArgs | null> = T extends QueryArgs ? T['pathParams'] : never;\nexport type QueryParamsType<T extends QueryArgs | null> = T extends QueryArgs ? T['queryParams'] : never;\nexport type BodyType<T extends QueryArgs | null> = T extends QueryArgs ? T['body'] : never;\n\nexport type RequestArgs<T extends QueryArgs | null> = T extends QueryArgs ? Omit<T, 'response'> : never;\n\nexport type CreateQueryOptions<TArgs extends QueryArgs> = {\n creator?: CreateQueryCreatorOptions;\n creatorInternals: InternalCreateQueryCreatorOptions<TArgs>;\n features: QueryFeature<TArgs>[];\n queryConfig: QueryConfig;\n};\n\nexport type QueryBase<TArgs extends QueryArgs> = {\n /** The arguments of the last execution of the query. Will be `null` if the query has never been executed */\n args: Signal<RequestArgs<TArgs> | null>;\n\n /**\n * The latest response of the query. Will be `null` if the query has never been executed.\n * Responses are cached until a new response is received.\n * If a response is present but the next execution of the query fails, the response will be set to `null` again.\n */\n response: Signal<ResponseType<TArgs> | null>;\n\n /** The latest Angular HTTP client native http event that occurred during the last execution of the query. Will be `null` if no event occurred. */\n latestHttpEvent: Signal<HttpEvent<ResponseType<TArgs>> | null>;\n\n /** The loading state of the query. Will be `null` if the query currently isn't loading. */\n loading: Signal<HttpRequestLoadingState | null>;\n\n /** The error that occurred during the last execution of the query. Will be `null` if no error occurred. */\n error: Signal<QueryErrorResponse | null>;\n\n /** The time the query was last executed at. Will be `null` if the query has never been executed. */\n lastTimeExecutedAt: Signal<number | null>;\n\n /** The id of the query */\n id: Signal<string>;\n\n /** The current state of the query. Will be `null` if the query has never been executed. */\n executionState: Signal<QueryExecutionState<TArgs> | null>;\n};\n\n/** A snapshot of a query state at a specific point in time */\nexport type QuerySnapshot<TArgs extends QueryArgs> = QueryBase<TArgs> & {\n /** This signal is `true` until the latest execution of the query has completed in any way (success, error, or cancellation) */\n isAlive: Signal<boolean>;\n};\n\nexport type AnyQuerySnapshot = QuerySnapshot<any>;\nexport type AnyQuery = Query<any>;\n\nexport type QuerySubtle<TArgs extends QueryArgs> = {\n /** Destroys the query and cleans up all resources. The query should not be used after this method is called. */\n destroy: () => void;\n\n /** Manually sets the response of the query. This will not trigger a new execution of the query. */\n setResponse: (response: ResponseType<TArgs>) => void;\n};\n\nexport type Query<TArgs extends QueryArgs> = QueryBase<TArgs> & {\n /** Executes the query */\n execute: QueryExecute<TArgs>;\n\n /** Creates an immutable snapshot of the current query state */\n createSnapshot: () => QuerySnapshot<TArgs>;\n\n /** Resets the query state to its initial state */\n reset: () => void;\n\n /** Returns a readonly version of the query */\n asReadonly: () => ReadonlyQuery<TArgs>;\n\n /** Advanced query features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle: QuerySubtle<TArgs>;\n};\n\nexport type ReadonlyQuery<TArgs extends QueryArgs> = Omit<Query<TArgs>, 'execute' | 'subtle' | 'reset' | 'asReadonly'>;\n\nexport const createQuery = <TArgs extends QueryArgs>(options: CreateQueryOptions<TArgs>) => {\n const deps = setupQueryDependencies({\n clientConfig: options.creatorInternals.client,\n queryConfig: options.queryConfig,\n });\n const state = setupQueryState<TArgs>({});\n const { creator, creatorInternals, queryConfig } = options;\n const flags = getQueryFeatureUsage(options);\n\n const execute = createExecuteFn<TArgs>({ deps, state, creator, creatorInternals, queryConfig });\n\n const featureFnContext: QueryFeatureContext<TArgs> = {\n state,\n execute,\n flags,\n deps,\n };\n\n applyQueryFeatures(options.features, featureFnContext);\n\n maybeExecute({ execute, flags });\n\n return createQueryObject({ state, execute, deps });\n};\n","import { HttpClient } from '@angular/common/http';\nimport { DestroyRef, ErrorHandler } from '@angular/core';\nimport { buildRoute } from '../../request';\nimport { CreateHttpRequestClientOptions, HttpRequest, createHttpRequest } from './http-request';\nimport { QueryArgs, RequestArgs } from './query';\nimport { QueryClientConfig } from './query-client-config';\nimport { QueryMethod, RouteType } from './query-creator';\nimport { uncacheableRequestHasAllowCacheParam, uncacheableRequestHasCacheKeyParam } from './query-errors';\nimport { InternalRunQueryExecuteOptions, RunQueryExecuteOptions } from './query-execute-utils';\nimport { buildQueryCacheKey, shouldCacheQuery } from './query-utils';\n\nexport type QueryRepositoryRequestOptions<TArgs extends QueryArgs> = {\n /**\n * The route of the request.\n * @example '/users'\n * @example (args) => `/users/${args.userId}`\n */\n route: RouteType<TArgs>;\n\n /** The HTTP method of the request */\n method: QueryMethod;\n\n /** If the request is secure (needs authentication) */\n isSecure?: boolean;\n\n /** The data of the request */\n args?: RequestArgs<TArgs> | null;\n\n /** The client options of the request */\n clientOptions?: CreateHttpRequestClientOptions;\n\n /** If set, this request's cache key will be prefixed with this key */\n key?: string;\n\n /** The previous cache key of the request */\n previousKey?: string | false;\n\n /** The destroy ref to bind the request to. If the destroy ref is destroyed, the request will be destroyed as well. */\n consumerDestroyRef: DestroyRef;\n\n /** Configuration on how to run the query */\n runQueryOptions?: RunQueryExecuteOptions;\n\n /** Internal options for running the query */\n internalRunQueryOptions?: InternalRunQueryExecuteOptions;\n};\n\nexport type QueryRepositoryItem<TArgs extends QueryArgs> = {\n /** The key of the request. If the key is `false`, the request is not cached, otherwise it is. */\n key: QueryKeyOrNone;\n\n /** The request object */\n request: HttpRequest<TArgs>;\n};\n\n/**\n * The query repository is responsible for managing all requests and their consumers.\n * It will cache requests if they can be cached and reuse them if they are already cached.\n * It will also destroy requests if there are no more consumers left.\n */\nexport type QueryRepository = {\n /** Creates a new request. If the request is already cached, it will be reused. */\n request: <TArgs extends QueryArgs>(options: QueryRepositoryRequestOptions<TArgs>) => QueryRepositoryItem<TArgs>;\n\n /** Removes a consumer from a request by its key. Destroys the request if there are no more consumers left. */\n unbind: (key: QueryKeyOrNone, consumerDestroyRef: DestroyRef) => boolean;\n\n /** Removes all secure requests and their consumers */\n unbindAllSecure: () => void;\n};\n\n/** The key of a query */\nexport type QueryKey = string;\n\n/** A key that will not be cached */\nexport type QueryKeyNoCache = false;\n\n/** A key that may or may not be cached */\nexport type QueryKeyOrNone = QueryKey | QueryKeyNoCache;\n\n/** Runs .unbind() if the DestroyRef.onDestroy() gets called */\ntype DestroyCleanupCallback = () => void;\n\n/** Keeps track of all places where the request gets used. Will be cleaned up and removed if there are no more consumers. */\ntype DestroyListenerMapItem = {\n consumers: Map<DestroyRef, DestroyCleanupCallback>;\n request: HttpRequest<QueryArgs>;\n isSecure: boolean;\n};\n\nexport type QueryRepositoryDependencies = {\n /** The HTTP client to use for the requests */\n httpClient: HttpClient;\n\n /** The error handler to use for the requests */\n ngErrorHandler: ErrorHandler;\n};\n\nexport type CreateQueryRepositoryConfig = QueryClientConfig & {\n /** The dependencies of the query repository */\n dependencies: QueryRepositoryDependencies;\n};\n\nexport const createQueryRepository = (config: CreateQueryRepositoryConfig): QueryRepository => {\n const cache = new Map<QueryKey, DestroyListenerMapItem>();\n\n const request = <TArgs extends QueryArgs>(options: QueryRepositoryRequestOptions<TArgs>) => {\n const { args, clientOptions, runQueryOptions } = options;\n const shouldCache =\n options.internalRunQueryOptions?.useQueryRepositoryCache === false\n ? false\n : shouldCacheQuery(options.method) || options.internalRunQueryOptions?.useQueryRepositoryCache === true;\n\n if (!shouldCache && options.key) throw uncacheableRequestHasCacheKeyParam(options.key);\n if (!shouldCache && runQueryOptions?.allowCache) throw uncacheableRequestHasAllowCacheParam();\n\n const route = buildRoute({\n base: config.baseUrl,\n route: options.route,\n pathParams: args?.pathParams,\n queryParams: args?.queryParams,\n queryParamConfig: config.queryString,\n });\n\n const key =\n shouldCache &&\n buildQueryCacheKey(`${options.key ? options.key + '_' : ''}${route}`, {\n body: args?.body,\n queryParams: args?.queryParams,\n pathParams: args?.pathParams,\n headers: args?.headers,\n });\n\n const previousKey = options.previousKey;\n\n if (key !== previousKey && previousKey) {\n unbind(previousKey, options.consumerDestroyRef);\n }\n\n if (shouldCache && key) {\n const cacheEntry = cache.get(key);\n\n if (cacheEntry) {\n bind(key, options.consumerDestroyRef, cacheEntry.request, options.isSecure ?? false);\n\n if (!runQueryOptions?.allowCache || cacheEntry.request.isStale()) {\n cacheEntry.request.execute({ allowCache: runQueryOptions?.allowCache });\n }\n\n return { key, request: cacheEntry.request as HttpRequest<TArgs> };\n }\n }\n\n const request = createHttpRequest<TArgs>({\n fullPath: route,\n args,\n method: options.method,\n dependencies: config.dependencies,\n clientOptions,\n cacheAdapter: config.cacheAdapter,\n retryFn: config.retryFn,\n });\n\n request.execute();\n\n if (shouldCache && key) {\n bind(key, options.consumerDestroyRef, request, options.isSecure ?? false);\n }\n\n return { key, request };\n };\n\n const unbind = (key: QueryKeyOrNone, consumerDestroyRef: DestroyRef) => {\n if (!key) return false;\n\n const cacheEntry = cache.get(key);\n\n if (!cacheEntry) return false;\n\n cacheEntry.consumers.delete(consumerDestroyRef);\n\n if (cacheEntry.consumers.size === 0) {\n cacheEntry.request.destroy();\n cache.delete(key);\n }\n\n return true;\n };\n\n const unbindAllSecure = () => {\n for (const [key, cacheEntry] of cache.entries()) {\n if (cacheEntry.isSecure) {\n for (const consumerDestroyRef of cacheEntry.consumers.keys()) {\n unbind(key, consumerDestroyRef);\n }\n\n cache.delete(key);\n }\n }\n };\n\n const bind = (key: QueryKey, consumerDestroyRef: DestroyRef, request: HttpRequest<QueryArgs>, isSecure: boolean) => {\n const destroyListener = consumerDestroyRef.onDestroy(() => unbind(key, consumerDestroyRef));\n\n const cacheEntry = cache.get(key);\n\n if (cacheEntry) {\n cacheEntry.consumers.set(consumerDestroyRef, destroyListener);\n } else {\n const consumers: Map<DestroyRef, DestroyCleanupCallback> = new Map([]);\n\n consumers.set(consumerDestroyRef, destroyListener);\n\n cache.set(key, {\n consumers,\n request,\n isSecure,\n });\n }\n };\n\n const repository: QueryRepository = {\n request,\n unbind,\n unbindAllSecure,\n };\n\n return repository;\n};\n","import { HttpClient } from '@angular/common/http';\nimport { ErrorHandler, inject } from '@angular/core';\nimport { QueryClientConfig } from './query-client-config';\nimport { QueryRepository, createQueryRepository } from './query-repository';\n\nexport type QueryClient = {\n repository: QueryRepository;\n};\n\nexport const createQueryClient = (config: QueryClientConfig) => {\n const httpClient = inject(HttpClient);\n const ngErrorHandler = inject(ErrorHandler);\n\n const repository = createQueryRepository({ ...config, dependencies: { httpClient, ngErrorHandler } });\n\n const client: QueryClient = {\n repository,\n };\n\n return client;\n};\n\nexport const provideQueryClient = (config: QueryClientConfig) => {\n return {\n provide: config.token,\n useFactory: () => createQueryClient(config),\n };\n};\n","import { HttpHeaders } from '@angular/common/http';\nimport { InjectionToken } from '@angular/core';\nimport { BuildQueryStringConfig } from '../../request';\nimport { QueryClient } from './query-client';\nimport { ShouldRetryRequestFn } from './query-utils';\n\nexport type CacheAdapterFn = (headers: HttpHeaders) => number | null;\n\nexport type CreateQueryClientConfigOptions = {\n /**\n * The base URL of the client\n * @example 'https://api.example.com/v1'\n */\n baseUrl: string;\n\n /** Configuration for building query strings */\n queryString?: BuildQueryStringConfig;\n\n /** The name of the client */\n name: string;\n\n /**\n * The cache adapter function to use for the client.\n * It determines how long the response of a request can be cached.\n *\n * @default extractExpiresInSeconds()\n */\n cacheAdapter?: CacheAdapterFn;\n\n /**\n * The retry function to use for the client.\n * It determines if a request should be retried after it failed.\n *\n * @default shouldRetryRequest()\n */\n retryFn?: ShouldRetryRequestFn;\n};\n\nexport type QueryClientConfig = CreateQueryClientConfigOptions & {\n /** A generated token for dependency injection */\n token: QueryClientRef;\n};\n\n/**\n * A token for a query client.\n * This token can be used to inject a query client into a service.\n */\nexport type QueryClientRef = InjectionToken<QueryClient>;\n\n/**\n * This function creates a query client config.\n * The config is used to create a query client using the `provideQueryClient(myConfig)` function.\n */\nexport const createQueryClientConfig = (options: CreateQueryClientConfigOptions) => {\n const token = new InjectionToken<QueryClientConfig>(`QueryClient_${options.name}`);\n\n const clientConfig: QueryClientConfig = {\n baseUrl: options.baseUrl,\n token,\n name: options.name,\n queryString: options.queryString,\n\n // createHttpRequest will use fallbacks if these are not provided\n cacheAdapter: options.cacheAdapter,\n retryFn: options.retryFn,\n };\n\n return clientConfig;\n};\n","import { Injector } from '@angular/core';\nimport { HttpRequestResponseType, HttpRequestTransferCacheConfig } from './http-request';\nimport { AnyQuery, PathParamsType, Query, QueryArgs, createQuery } from './query';\nimport { QueryClientConfig } from './query-client-config';\nimport { QueryFeature } from './query-features';\n\nexport type RouteType<TArgs extends QueryArgs> =\n PathParamsType<TArgs> extends { [key: string]: unknown } ? (args: TArgs['pathParams']) => RouteString : RouteString;\n\nexport type RouteString = `/${string}`;\n\nexport type CreateQueryCreatorOptions = {\n /**\n * If true, the query loading state will include progress information.\n * This is useful for file uploads and downloads.\n *\n * **Warning**: Upload progress events are not supported by browsers when using the fetch API, such as with `provideHttpClient(withFetch())`.\n * In this case, you should use the older XHR implementation by omitting `withFetch()`. But take into account that XHR is not supported in server-side rendering environments.\n *\n * @see https://angular.dev/guide/http/making-requests#receiving-raw-progress-events\n *\n * @default false\n */\n reportProgress?: boolean;\n\n /**\n * The response type of the query.\n * @default 'json'\n */\n responseType?: HttpRequestResponseType;\n\n /**\n * Whether to include credentials (cookies) in the request or not.\n * @default false\n */\n withCredentials?: boolean;\n\n /**\n * This property accepts either a boolean to enable/disable transferring cache for eligible\n * requests performed using `HttpClient`, or an object, which allows to configure cache\n * parameters, such as which headers should be included (no headers are included by default).\n *\n * Setting this property will override the options passed to `provideClientHydration()` for this\n * particular request\n */\n transferCache?: HttpRequestTransferCacheConfig;\n};\n\nexport type QueryCreator<TArgs extends QueryArgs> = {\n (...features: QueryFeature<TArgs>[]): Query<TArgs>;\n (queryConfig: QueryConfig, ...features: QueryFeature<TArgs>[]): Query<TArgs>;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyQueryCreator = QueryCreator<any>;\n\nexport type QueryArgsOf<T extends AnyQueryCreator | AnyQuery> =\n T extends QueryCreator<infer TArgs> ? TArgs : T extends Query<infer TArgs> ? TArgs : never;\n\nexport type RunQueryCreator<TCreator extends AnyQueryCreator> = ReturnType<TCreator>;\n\nexport type QueryMethod = 'GET' | 'OPTIONS' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'TRACE' | 'CONNECT';\n\nexport type InternalCreateQueryCreatorOptions<TArgs extends QueryArgs> = {\n /**\n * The route of the query.\n * If the query has path params, the route should be a function that takes the path params as an argument.\n * Otherwise, it should be a string.\n */\n route: RouteType<TArgs>;\n\n method: QueryMethod;\n client: QueryClientConfig;\n};\n\nexport type QueryConfig = {\n /** A custom id to use for this query. Only affects queries that can be cached. */\n key?: string;\n\n /**\n * If true, the query will not be executed automatically.\n * Does not affect mutations such as POST, PUT etc. since those are never executed automatically.\n */\n onlyManualExecution?: boolean;\n\n /**\n * If true, the query will not throw an error because a \"withArgs()\" feature is missing.\n */\n silenceMissingWithArgsFeatureError?: boolean;\n\n /**\n * A custom injector to use for this query.\n */\n injector?: Injector;\n};\n\nexport const splitQueryConfig = <TArgs extends QueryArgs>(args: (QueryFeature<TArgs> | QueryConfig)[]) => {\n let queryConfig: QueryConfig = {};\n let features: QueryFeature<TArgs>[] = [];\n\n const first = args[0];\n\n if (first) {\n if ('type' in first) {\n features = args as QueryFeature<TArgs>[];\n } else {\n [queryConfig, ...features] = args as [QueryConfig, ...QueryFeature<TArgs>[]];\n }\n }\n return { features, queryConfig };\n};\n\nexport const createQueryCreator = <TArgs extends QueryArgs>(\n options: CreateQueryCreatorOptions | undefined,\n internals: InternalCreateQueryCreatorOptions<TArgs>,\n): QueryCreator<TArgs> => {\n function queryCreator(...features: QueryFeature<TArgs>[]): Query<TArgs>;\n function queryCreator(queryConfig: QueryConfig, ...features: QueryFeature<TArgs>[]): Query<TArgs>;\n\n function queryCreator(...args: (QueryFeature<TArgs> | QueryConfig)[]): Query<TArgs> {\n const { features, queryConfig } = splitQueryConfig<TArgs>(args);\n\n return createQuery<TArgs>({\n creator: options,\n creatorInternals: internals,\n features,\n queryConfig,\n });\n }\n\n return queryCreator;\n};\n","import { HttpHeaders } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { of, Subscription, switchMap, tap } from 'rxjs';\nimport { AnyQuerySnapshot, QueryArgs, RequestArgs } from './query';\nimport { CreateQueryExecuteOptions, InternalQueryExecute, QueryExecuteArgs } from './query-execute';\nimport { cleanupPreviousExecute, queryExecute, resetExecuteState, setupQueryExecuteState } from './query-execute-utils';\nimport { circularQueryDependencyChecker } from './query-utils';\nimport { InternalSecureCreateQueryCreatorOptions } from './secure-query-creator';\n\nconst AUTH_HEADER = 'Authorization';\n\nexport type CreateSecureQueryExecuteOptions<TArgs extends QueryArgs> = Omit<\n CreateQueryExecuteOptions<TArgs>,\n 'creatorInternals'\n> & {\n creatorInternals: InternalSecureCreateQueryCreatorOptions<TArgs>;\n};\n\nexport const createSecureExecuteFn = <TArgs extends QueryArgs>(\n executeOptions: CreateSecureQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n const authProvider = inject(executeOptions.creatorInternals.authProvider.token);\n const circularChecker = circularQueryDependencyChecker();\n\n let authQuerySubscription = Subscription.EMPTY;\n\n const reset = () => {\n authQuerySubscription.unsubscribe();\n authQuerySubscription = Subscription.EMPTY;\n resetExecuteState({ executeState, executeOptions: executeOptions });\n };\n\n const error = (query: AnyQuerySnapshot) => {\n const state = executeOptions.state;\n\n state.error.set(query.error());\n state.loading.set(null);\n state.response.set(null);\n state.latestHttpEvent.set(null);\n state.args.set(null);\n };\n\n const authAndExec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n const { args, options: runOptions } = executeArgs ?? {};\n\n const tokens = authProvider.tokens();\n let headers = args?.headers || new HttpHeaders();\n\n if (!tokens) {\n throw new Error('Tokens are not available inside authAndExec');\n }\n\n if (!headers.has(AUTH_HEADER)) {\n headers = headers.set(AUTH_HEADER, `Bearer ${tokens.accessToken}`);\n }\n\n const updatedArgs = { ...(args ?? ({} as RequestArgs<TArgs>)), headers };\n\n queryExecute({\n executeOptions: executeOptions,\n executeState,\n args: updatedArgs,\n options: runOptions,\n isSecure: true,\n });\n };\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n circularChecker.check();\n\n // Make sure all effects are flushed before reading the args.\n // A withArgs feature effect might still be pending otherwise resulting in the wrong args being read.\n executeOptions.deps.effectScheduler.flush();\n\n const execArgsWithDefaults: QueryExecuteArgs<TArgs> = {\n args: executeArgs?.args ?? executeOptions.state.args(),\n options: executeArgs?.options,\n };\n\n authQuerySubscription.unsubscribe();\n authQuerySubscription = Subscription.EMPTY;\n cleanupPreviousExecute({ executeOptions: executeOptions, executeState });\n\n const authQuery = authProvider.latestExecutedQuery();\n\n // This might happen if a secure query gets executed while the auth query has just been created.\n // This is due to the fact that the query state is being synced with the state inside the http request using effect.\n const isAuthQueryFreshlyExecuted = authQuery?.lastTimeExecutedAt() === null;\n\n if (!authQuery || authQuery.loading() || isAuthQueryFreshlyExecuted) {\n executeOptions.state.loading.set({ executeTime: Date.now(), progress: null });\n\n authQuerySubscription = toObservable(authProvider.latestExecutedQuery, { injector: executeOptions.deps.injector })\n .pipe(\n switchMap((query) => {\n if (!query) return of(null);\n\n return toObservable(query.isAlive, { injector: executeOptions.deps.injector }).pipe(\n tap((isAlive) => {\n if (isAlive) return;\n\n if (query.error()) {\n error(query);\n } else if (query.response()) {\n authAndExec(execArgsWithDefaults);\n }\n }),\n );\n }),\n )\n .subscribe();\n } else if (authQuery.response()) {\n authAndExec(execArgsWithDefaults);\n } else if (authQuery.error()) {\n error(authQuery);\n } else {\n throw new Error('Invalid state ocurred inside createSecureExecuteFn');\n }\n };\n\n exec['reset'] = reset;\n\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","import { CreateQueryOptions, QueryArgs } from './query';\nimport { setupQueryDependencies } from './query-dependencies';\nimport { QueryFeatureContext } from './query-features';\nimport { setupQueryState } from './query-state';\nimport { applyQueryFeatures, createQueryObject, getQueryFeatureUsage, maybeExecute } from './query-utils';\nimport { InternalSecureCreateQueryCreatorOptions } from './secure-query-creator';\nimport { createSecureExecuteFn } from './secure-query-execute';\n\nexport type CreateSecureQueryOptions<TArgs extends QueryArgs> = Omit<CreateQueryOptions<TArgs>, 'creatorInternals'> & {\n creatorInternals: InternalSecureCreateQueryCreatorOptions<TArgs>;\n};\n\nexport const createSecureQuery = <TArgs extends QueryArgs>(options: CreateSecureQueryOptions<TArgs>) => {\n const deps = setupQueryDependencies({\n clientConfig: options.creatorInternals.client,\n queryConfig: options.queryConfig,\n });\n const state = setupQueryState<TArgs>({});\n const { creator, creatorInternals, queryConfig } = options;\n const flags = getQueryFeatureUsage(options);\n\n const execute = createSecureExecuteFn<TArgs>({\n deps,\n state,\n creator,\n creatorInternals,\n queryConfig,\n });\n\n const featureFnContext: QueryFeatureContext<TArgs> = {\n deps,\n state,\n execute,\n flags,\n };\n\n applyQueryFeatures(options.features, featureFnContext);\n\n maybeExecute({ execute, flags });\n\n return createQueryObject({ state, execute, deps });\n};\n","import { AnyBearerAuthProviderConfig } from '../auth/bearer-auth-provider-config';\nimport { Query, QueryArgs } from './query';\nimport {\n CreateQueryCreatorOptions,\n InternalCreateQueryCreatorOptions,\n QueryConfig,\n QueryCreator,\n splitQueryConfig,\n} from './query-creator';\nimport { QueryFeature } from './query-features';\nimport { createSecureQuery } from './secure-query';\n\nexport type InternalSecureCreateQueryCreatorOptions<TArgs extends QueryArgs> =\n InternalCreateQueryCreatorOptions<TArgs> & {\n authProvider: AnyBearerAuthProviderConfig;\n };\n\nexport const createSecureQueryCreator = <TArgs extends QueryArgs>(\n options: CreateQueryCreatorOptions | undefined,\n internals: InternalSecureCreateQueryCreatorOptions<TArgs>,\n): QueryCreator<TArgs> => {\n function queryCreator(...features: QueryFeature<TArgs>[]): Query<TArgs>;\n function queryCreator(queryConfig: QueryConfig, ...features: QueryFeature<TArgs>[]): Query<TArgs>;\n\n function queryCreator(...args: (QueryFeature<TArgs> | QueryConfig)[]): Query<TArgs> {\n const { features, queryConfig } = splitQueryConfig<TArgs>(args);\n\n return createSecureQuery<TArgs>({\n creator: options,\n creatorInternals: internals,\n features,\n queryConfig,\n });\n }\n\n return queryCreator;\n};\n","import { AnyBearerAuthProviderConfig } from '../auth/bearer-auth-provider-config';\nimport { QueryArgs } from './query';\nimport { QueryClientConfig } from './query-client-config';\nimport { CreateQueryCreatorOptions, RouteType, createQueryCreator } from './query-creator';\nimport { createSecureQueryCreator } from './secure-query-creator';\n\n/** A query creator that creates a GET query */\nexport const createGetQuery = (client: QueryClientConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createQueryCreator<TArgs>(creatorOptions, { method: 'GET', client, route });\n};\n\n/** A query creator that creates a secure GET query (requires authentication) */\nexport const createSecureGetQuery = (client: QueryClientConfig, authProvider: AnyBearerAuthProviderConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createSecureQueryCreator<TArgs>(creatorOptions, { method: 'GET', client, authProvider, route });\n};\n\n/** A query creator that creates a POST query */\nexport const createPostQuery = (client: QueryClientConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createQueryCreator<TArgs>(creatorOptions, { method: 'POST', client, route });\n};\n\n/** A query creator that creates a secure POST query (requires authentication) */\nexport const createSecurePostQuery = (client: QueryClientConfig, authProvider: AnyBearerAuthProviderConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createSecureQueryCreator<TArgs>(creatorOptions, { method: 'POST', client, authProvider, route });\n};\n\n/** A query creator that creates a PUT query */\nexport const createPutQuery = (client: QueryClientConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createQueryCreator<TArgs>(creatorOptions, { method: 'PUT', client, route });\n};\n\n/** A query creator that creates a secure PUT query (requires authentication) */\nexport const createSecurePutQuery = (client: QueryClientConfig, authProvider: AnyBearerAuthProviderConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createSecureQueryCreator<TArgs>(creatorOptions, { method: 'PUT', client, authProvider, route });\n};\n\n/** A query creator that creates a DELETE query */\nexport const createDeleteQuery = (client: QueryClientConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createQueryCreator<TArgs>(creatorOptions, { method: 'DELETE', client, route });\n};\n\n/** A query creator that creates a secure DELETE query (requires authentication) */\nexport const createSecureDeleteQuery = (client: QueryClientConfig, authProvider: AnyBearerAuthProviderConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createSecureQueryCreator<TArgs>(creatorOptions, { method: 'DELETE', client, authProvider, route });\n};\n\n/** A query creator that creates a PATCH query */\nexport const createPatchQuery = (client: QueryClientConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createQueryCreator<TArgs>(creatorOptions, { method: 'PATCH', client, route });\n};\n\n/** A query creator that creates a secure PATCH query (requires authentication) */\nexport const createSecurePatchQuery = (client: QueryClientConfig, authProvider: AnyBearerAuthProviderConfig) => {\n return <TArgs extends QueryArgs>(route: RouteType<TArgs>, creatorOptions?: CreateQueryCreatorOptions) =>\n createSecureQueryCreator<TArgs>(creatorOptions, { method: 'PATCH', client, authProvider, route });\n};\n","import { isDevMode } from '@angular/core';\n\nconst getOpName = /(query|mutation) ?([\\w\\d-_]+)? ?\\(.*?\\)? \\{/;\n\nexport type TransformedGqlQuery = {\n query: string;\n variables?: string;\n operationName?: string;\n};\n\nexport const transformGql = (str: string) => {\n str = Array.isArray(str) ? str.join('') : str;\n\n const name = getOpName.exec(str);\n\n return (variables: Record<string, unknown> | null | undefined) => {\n const data: TransformedGqlQuery = { query: str };\n\n if (variables) data['variables'] = JSON.stringify(variables);\n\n if (name && name.length) {\n const operationName = name[2];\n if (operationName) data['operationName'] = name[2];\n }\n\n if (!isDevMode()) {\n // minify the query\n data.query = data.query.replace(/\\s+/g, ' ').trim();\n }\n\n return data as TransformedGqlQuery;\n };\n};\n\nexport type GQL = string & { gql: 'tag' };\n\nexport const gql = (strings: TemplateStringsArray, ...values: string[]) => {\n const str = strings.reduce((acc, cur, i) => {\n return acc + cur + (values[i] || '');\n }, '');\n return str as GQL;\n};\n","import { transformGql } from '../../gql';\nimport {\n circularQueryDependencyChecker,\n cleanupPreviousExecute,\n CreateQueryExecuteOptions,\n InternalQueryExecute,\n QueryArgs,\n QueryConfig,\n QueryDependencies,\n queryExecute,\n QueryExecuteArgs,\n QueryState,\n RequestArgs,\n resetExecuteState,\n RouteType,\n setupQueryExecuteState,\n} from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport { CreateGqlQueryCreatorOptions, InternalCreateGqlQueryCreatorOptions } from './gql-query-creator';\n\nexport type CreateGqlQueryExecuteOptions<TArgs extends QueryArgs> = {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: CreateGqlQueryCreatorOptions<TArgs>;\n creatorInternals: InternalCreateGqlQueryCreatorOptions;\n queryConfig: QueryConfig;\n};\n\nexport const createGqlExecuteFn = <TArgs extends GqlQueryArgs>(\n executeOptions: CreateGqlQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n const circularChecker = circularQueryDependencyChecker();\n\n const reset = () => resetExecuteState({ executeState, executeOptions });\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n circularChecker.check();\n\n // Make sure all effects are flushed before reading the args.\n // A withArgs feature effect might still be pending otherwise resulting in the wrong args being read.\n executeOptions.deps.effectScheduler.flush();\n\n const { args = executeOptions.state.args(), options } = executeArgs ?? {};\n\n cleanupPreviousExecute({ executeOptions, executeState });\n\n // TODO: This should get cleaned up\n const tpl = executeOptions.creatorInternals.query;\n const query = transformGql(tpl);\n let gqlParams = query(args?.variables);\n\n if (args?.queryParams && executeOptions.creatorInternals.transport === 'GET') {\n gqlParams = { ...gqlParams, ...args.queryParams };\n }\n\n const computedArgs = args ?? ({} as RequestArgs<TArgs>);\n\n if (executeOptions.creatorInternals.transport === 'GET') {\n computedArgs.queryParams = gqlParams;\n } else {\n computedArgs.body = gqlParams;\n }\n\n const normalizedOpts: CreateQueryExecuteOptions<TArgs> = {\n creator: executeOptions.creator ?? {},\n creatorInternals: {\n client: executeOptions.creatorInternals.client,\n method: executeOptions.creatorInternals.transport,\n route: (executeOptions.creator?.route ?? '') as RouteType<TArgs>,\n },\n deps: executeOptions.deps,\n queryConfig: executeOptions.queryConfig,\n state: executeOptions.state,\n };\n\n queryExecute({\n executeOptions: normalizedOpts,\n executeState,\n args: computedArgs,\n options,\n internalOptions: {\n useQueryRepositoryCache: executeOptions.creatorInternals.method === 'QUERY',\n },\n transformResponse: (originalResponse) => {\n if (originalResponse && 'data' in originalResponse) {\n return originalResponse.data;\n }\n\n return originalResponse;\n },\n });\n };\n\n exec['reset'] = reset;\n\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","import {\n applyQueryFeatures,\n createQueryObject,\n CreateQueryOptions,\n getQueryFeatureUsage,\n maybeExecute,\n QueryArgs,\n QueryFeatureContext,\n setupQueryDependencies,\n setupQueryState,\n} from '../http';\nimport { CreateGqlQueryCreatorOptions, InternalCreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { createGqlExecuteFn } from './gql-query-execute';\n\nexport type GqlQueryArgs = QueryArgs & {\n variables?: Record<string, unknown>;\n};\n\nexport type CreateGqlQueryOptions<TArgs extends GqlQueryArgs> = Omit<\n CreateQueryOptions<TArgs>,\n 'creator' | 'creatorInternals'\n> & {\n creator?: CreateGqlQueryCreatorOptions<TArgs>;\n creatorInternals: InternalCreateGqlQueryCreatorOptions;\n};\n\nexport type GqlVariablesType<T extends GqlQueryArgs | null> = T extends GqlQueryArgs ? T['variables'] : never;\n\nexport const isCreateGqlQueryOptions = <TArgs extends QueryArgs>(\n options: CreateQueryOptions<TArgs> | CreateGqlQueryOptions<TArgs>,\n): options is CreateGqlQueryOptions<TArgs> => {\n return 'transport' in options.creatorInternals;\n};\n\nexport const createGqlQuery = <TArgs extends GqlQueryArgs>(options: CreateGqlQueryOptions<TArgs>) => {\n const deps = setupQueryDependencies({\n clientConfig: options.creatorInternals.client,\n queryConfig: options.queryConfig,\n });\n const state = setupQueryState<TArgs>({});\n const { creator, creatorInternals, queryConfig } = options;\n const flags = getQueryFeatureUsage(options);\n\n const execute = createGqlExecuteFn<TArgs>({\n deps,\n state,\n creator,\n creatorInternals,\n queryConfig,\n });\n\n const featureFnContext: QueryFeatureContext<TArgs> = {\n state,\n execute,\n flags,\n deps,\n };\n\n applyQueryFeatures(options.features, featureFnContext);\n\n maybeExecute({ execute, flags });\n\n return createQueryObject({ state, execute, deps });\n};\n","import {\n CreateQueryCreatorOptions,\n Query,\n QueryClientConfig,\n QueryConfig,\n QueryCreator,\n QueryFeature,\n RouteType,\n splitQueryConfig,\n} from '../http';\nimport { createGqlQuery, GqlQueryArgs } from './gql-query';\n\nexport type CreateGqlQueryCreatorOptions<TArgs extends GqlQueryArgs> = Omit<CreateQueryCreatorOptions, 'route'> & {\n route?: RouteType<TArgs>;\n};\n\nexport type GqlQueryMethod = 'QUERY' | 'MUTATE';\nexport type GqlQueryTransport = 'GET' | 'POST';\n\nexport type InternalCreateGqlQueryCreatorOptions = {\n method: GqlQueryMethod;\n transport: GqlQueryTransport;\n client: QueryClientConfig;\n query: string;\n};\n\nexport const createGqlQueryCreator = <TArgs extends GqlQueryArgs>(\n options: CreateGqlQueryCreatorOptions<TArgs> | undefined,\n internals: InternalCreateGqlQueryCreatorOptions,\n): QueryCreator<TArgs> => {\n function queryCreator(...features: QueryFeature<TArgs>[]): Query<TArgs>;\n function queryCreator(queryConfig: QueryConfig, ...features: QueryFeature<TArgs>[]): Query<TArgs>;\n\n function queryCreator(...args: (QueryFeature<TArgs> | QueryConfig)[]): Query<TArgs> {\n const { features, queryConfig } = splitQueryConfig<TArgs>(args);\n\n return createGqlQuery<TArgs>({\n creator: options,\n creatorInternals: internals,\n features,\n queryConfig,\n });\n }\n\n return queryCreator;\n};\n","import { GQL } from '../../gql';\nimport { QueryClientConfig } from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport { CreateGqlQueryCreatorOptions, createGqlQueryCreator } from './gql-query-creator';\n\n/** A query creator that creates a GQL query where the payload is sent via GET (query params) */\nexport const createGqlQueryViaGet = (client: QueryClientConfig) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createGqlQueryCreator<TArgs>(creatorOptions, { method: 'QUERY', client, transport: 'GET', query });\n};\n\n/** A query creator that creates a GQL query where the payload is sent via POST (body) */\nexport const createGqlQueryViaPost = (client: QueryClientConfig) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createGqlQueryCreator<TArgs>(creatorOptions, { method: 'QUERY', client, transport: 'POST', query });\n};\n\n/** A query creator that creates a GQL mutation where the payload is sent via GET (query params) */\nexport const createGqlMutationViaGet = (client: QueryClientConfig) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createGqlQueryCreator<TArgs>(creatorOptions, { method: 'MUTATE', client, transport: 'GET', query });\n};\n\n/** A query creator that creates a GQL mutation where the payload is sent via POST (body) */\nexport const createGqlMutationViaPost = (client: QueryClientConfig) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createGqlQueryCreator<TArgs>(creatorOptions, { method: 'MUTATE', client, transport: 'POST', query });\n};\n","import { effect, untracked } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport {\n filter,\n interval,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n skip,\n Subscription,\n switchMap,\n takeUntil,\n takeWhile,\n} from 'rxjs';\nimport { EntityStore } from '../../entity';\nimport {\n BaseArguments,\n ExecuteQueryOptions,\n Failure,\n filterFailure,\n filterSuccess,\n isQueryStateCancelled,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStatePrepared,\n isQueryStateSuccess,\n Loading,\n PollConfig,\n Prepared,\n QueryAutoRefreshConfig,\n QueryEntityConfig,\n QueryState,\n QueryStateMeta,\n QueryStateType,\n RouteType,\n Success,\n takeUntilResponse,\n} from '../../query';\nimport { RequestError } from '../../request';\nimport { AnyQuery, Query, QueryArgs, QueryArgsOf, QueryExecutionState, RequestArgs, ResponseType } from '../http';\n\nexport type CreateLegacyQueryOptions<TArgs extends QueryArgs> = {\n query: Query<TArgs>;\n};\n\nconst transformExecStateToQueryState = <TArgs extends QueryArgs>(\n execState: QueryExecutionState<TArgs> | null,\n): QueryState<ResponseType<TArgs>> => {\n const meta: QueryStateMeta = { id: -1, triggeredVia: 'program' };\n\n switch (execState?.type) {\n case 'loading': {\n const loading: Loading = {\n meta,\n type: QueryStateType.Loading,\n ...(execState.loading.progress\n ? {\n progress: {\n current: execState.loading.progress.loaded,\n percentage: execState.loading.progress.percentage,\n total: execState.loading.progress.total,\n },\n }\n : {}),\n };\n\n return loading;\n }\n case 'success': {\n const success: Success<ResponseType<TArgs>> = {\n headers: {},\n meta,\n response: execState.response,\n type: QueryStateType.Success,\n };\n\n return success;\n }\n case 'failure': {\n const error: Failure = {\n error: {\n detail: execState.error.raw.error,\n httpErrorResponse: execState.error.raw,\n status: execState.error.raw.status,\n statusText: execState.error.raw.statusText,\n url: execState.error.raw.url || '',\n },\n meta,\n type: QueryStateType.Failure,\n };\n\n return error;\n }\n default: {\n const prepared: Prepared = {\n meta,\n type: QueryStateType.Prepared,\n };\n\n return prepared;\n }\n }\n};\n\nexport const isLegacyQuery = <T extends AnyLegacyQuery>(query: unknown): query is T => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n\n if (!('newQuery' in query)) {\n return false;\n }\n\n return true;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyLegacyQuery = LegacyQuery<any, any, any, any, any, any, any>;\n\nexport class LegacyQuery<\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n TNewQuery extends AnyQuery,\n> {\n private _pollingSubscription: Subscription | null = null;\n private _currentPollConfig: PollConfig | null = null;\n\n private storeSyncEffect = effect(() => {\n const res = this.newQuery.response();\n\n untracked(() => {\n if (this.entity?.set) {\n const id = this.entity.id({ args: this._arguments, response: res });\n\n this.entity.set({\n args: this._arguments,\n response: res,\n id,\n store: this.entity.store,\n });\n }\n });\n });\n\n /**\n * @internal\n */\n _dependents: Record<number, number> = {};\n\n /**\n * @internal\n */\n _dependentsChanged$ = new ReplaySubject<Record<number, number>>();\n\n /**\n * @internal\n */\n _isPollingPaused = false;\n\n state$: Observable<QueryState<Data>>;\n\n get rawState() {\n return transformExecStateToQueryState(this.newQuery.executionState());\n }\n\n get isExpired() {\n if (isQueryStateLoading(this.rawState)) {\n return false;\n }\n\n if (\n isQueryStatePrepared(this.rawState) ||\n isQueryStateCancelled(this.rawState) ||\n isQueryStateFailure(this.rawState)\n ) {\n return true;\n }\n\n console.warn('Query interop: isExpired is not supported for success state. Falling back to false.');\n\n return false;\n }\n\n get isInUse() {\n return true;\n }\n\n /**\n * @internal\n */\n get _subscriberCount() {\n return 0;\n }\n\n get isPolling() {\n return !!this._pollingSubscription;\n }\n\n get autoRefreshOnConfig() {\n const transformed: Readonly<QueryAutoRefreshConfig> = {\n queryClientDefaultHeadersChange: false,\n windowFocus: false,\n };\n\n return transformed;\n }\n\n /**\n * @internal\n */\n get _enableSmartPolling() {\n return false;\n }\n\n get store() {\n return null;\n }\n\n get canBeCached() {\n return false;\n }\n\n get _isInMockMode() {\n return false;\n }\n\n constructor(\n private newQuery: TNewQuery,\n public _arguments: RequestArgs<QueryArgsOf<TNewQuery>>,\n private entity?: QueryEntityConfig<Store, Data, Response, Arguments, Id>,\n ) {\n this.state$ = toObservable(this.newQuery.executionState).pipe(\n map((execState) => transformExecStateToQueryState(execState)),\n switchMap((s) => this._transformState(s)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n destroy() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._dependentsChanged$.complete();\n this.newQuery.subtle.destroy();\n this.storeSyncEffect.destroy();\n }\n\n execute(options: ExecuteQueryOptions = {}) {\n untracked(() =>\n this.newQuery.execute({ args: this._arguments, options: { allowCache: options.skipCache !== true } }),\n );\n\n return this;\n }\n\n abort() {\n if (!isQueryStateLoading(this.rawState)) {\n return this;\n }\n\n this.newQuery.reset();\n\n return this;\n }\n\n poll(config: PollConfig) {\n if (this._pollingSubscription) {\n return this;\n }\n\n this._currentPollConfig = config;\n\n const interval$ = interval(config.interval);\n const poll$ = interval$.pipe(\n skip(config.triggerImmediately ? 0 : 1),\n takeUntil(config.takeUntil),\n takeWhile(() => !this._isPollingPaused),\n filter(() => !isQueryStateLoading(this.rawState)),\n );\n\n this._pollingSubscription = poll$.subscribe({\n next: () => this.execute({ skipCache: true, _triggeredVia: 'poll' }),\n complete: () => this.stopPolling(),\n });\n\n return this;\n }\n\n stopPolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._currentPollConfig = null;\n\n return this;\n }\n\n pausePolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n\n this._isPollingPaused = true;\n\n return this;\n }\n\n resumePolling() {\n if (!this._isPollingPaused || !this._currentPollConfig) {\n return this;\n }\n\n this._isPollingPaused = false;\n\n return this.poll({ ...this._currentPollConfig, triggerImmediately: true });\n }\n\n onSuccess(callback: (response: Data) => void) {\n this.state$.pipe(takeUntilResponse(), filterSuccess()).subscribe((state) => callback(state.response));\n return this;\n }\n\n onFailure(callback: (error: RequestError<unknown>) => void) {\n this.state$.pipe(takeUntilResponse(), filterFailure()).subscribe((state) => callback(state.error));\n return this;\n }\n\n /**\n * @internal\n */\n _addDependent(tNodeIndex: number) {\n if (!this._dependents[tNodeIndex]) {\n this._dependents[tNodeIndex] = 0;\n }\n\n this._dependents[tNodeIndex]++;\n\n this._dependentsChanged$.next(this._dependents);\n }\n\n /**\n * @internal\n */\n _removeDependent(tNodeIndex: number) {\n const count = this._dependents[tNodeIndex];\n if (count === undefined) {\n return;\n }\n\n if (this._dependents[tNodeIndex] !== undefined) {\n this._dependents[tNodeIndex]--;\n }\n\n if (count <= 1) {\n delete this._dependents[tNodeIndex];\n }\n\n this._dependentsChanged$.next(this._dependents);\n }\n\n /**\n * @internal\n */\n _hasDependents() {\n return Object.keys(this._dependents).length > 0;\n }\n\n private _transformState(s: QueryState<Response>): Observable<QueryState<Data>> {\n if (!isQueryStateSuccess(s) || !this.entity?.get) {\n return of(s) as Observable<QueryState<Data>>;\n }\n\n const id = this.entity.id({ args: this._arguments, response: s.response });\n\n return this.entity\n .get({ args: this._arguments, id, response: s.response, store: this.entity.store })\n .pipe(map((v) => ({ ...s, response: v })));\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { effect, inject, Injector, runInInjectionContext, signal, untracked } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject } from 'rxjs';\nimport { EntityStore } from '../../entity';\nimport {\n BaseArguments,\n EmptyObject,\n QueryConfig,\n QueryEntityConfig,\n RouteType,\n WithHeaders,\n WithInjector,\n} from '../../query';\nimport { addQueryContainerHandling, QueryContainerConfig } from '../../utils';\nimport { AnyQuery, Query, QueryArgs, QueryCreator, RequestArgs, ResponseType } from '../http';\nimport { LegacyQuery } from './legacy-query';\n\nexport type LegacyArgumentsOfQueryArgs<T extends QueryArgs> = Omit<T, 'response' | 'headers'> & WithHeaders;\nexport type QueryArgsOfLegacyArguments<T extends BaseArguments | undefined, J> = Omit<T, 'mock' | 'headers'> & {\n headers?: HttpHeaders;\n response?: J;\n};\n\nexport type CreateLegacyQueryCreatorOptions<\n TArgs extends QueryArgs,\n Response,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> = {\n creator: QueryCreator<TArgs>;\n\n /**\n * Object containing the query's entity store information.\n */\n entity?: QueryEntityConfig<Store, Data, Response, LegacyArgumentsOfQueryArgs<TArgs>, Id>;\n};\n\nexport interface WithLegacyConfig {\n /**\n * Additional configuration for this query.\n */\n config?: QueryConfig & {\n /**\n * If set to true, the query will be destroyed when it either succeeds or fails.\n */\n destroyOnResponse?: boolean;\n };\n}\n\nexport type LegacyQueryPrepareFn<\n Arguments extends BaseArguments | undefined,\n Response,\n Route extends RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n TNewQuery extends AnyQuery,\n> = Arguments extends BaseArguments\n ? (\n args: Arguments & WithHeaders & WithLegacyConfig & WithInjector,\n ) => LegacyQuery<Response, Arguments, Route, Store, Data, Id, TNewQuery>\n : (\n args?: (Arguments extends EmptyObject ? Arguments : EmptyObject) & WithHeaders & WithLegacyConfig & WithInjector,\n ) => LegacyQuery<Response, Arguments, Route, Store, Data, Id, TNewQuery>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyLegacyQueryCreator = LegacyQueryCreator<any, any, any, any, any>;\n\n// TODO: Migrate to the new query creator\n// TODO: Create legacy query creator that uses the new query creator\n// TODO: In every component replace the new query creator with the legacy query creator\n// TODO: Inject the injector in every component that uses the legacy query creator\n// TODO: In every query add the injector to the prepare function args\n// TODO: If the created query is not pushed into a signal or subject set the self destroy on response prepare arg to true\n\n// TODO: Test with infinity query\n// TODO: Test with GQL. variables are currently not used\n\n/**\n * Creates a legacy query creator.\n * @deprecated This is a temporary solution to support legacy queries. It will be removed in the future.\n */\nexport class LegacyQueryCreator<\n TArgs extends QueryArgs,\n Response extends ResponseType<TArgs>,\n Store extends EntityStore<unknown>,\n Id,\n Data = Response,\n> {\n constructor(public options: CreateLegacyQueryCreatorOptions<TArgs, Response, Store, Data, Id>) {}\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n prepare: LegacyQueryPrepareFn<LegacyArgs, Response, Route, Store, Data, Id, Query<TArgs>> = (\n args?: LegacyArgumentsOfQueryArgs<TArgs> & WithHeaders & WithLegacyConfig & WithInjector,\n ) => {\n const injector = args?.injector ?? inject(Injector);\n\n let headers = new HttpHeaders();\n\n if (args?.headers) {\n Object.entries(args.headers).forEach(([key, value]) => {\n if (value) {\n headers = headers.set(key, value);\n }\n });\n }\n\n const queryArgs = {\n ...(args?.body ? { body: args.body } : {}),\n ...(args?.pathParams ? { pathParams: args.pathParams } : {}),\n ...(args?.queryParams ? { queryParams: args.queryParams } : {}),\n headers,\n } as RequestArgs<TArgs>;\n\n return runInInjectionContext(injector, () => {\n return untracked(() => {\n const newQuery = this.options.creator({\n onlyManualExecution: true,\n injector,\n silenceMissingWithArgsFeatureError: true,\n });\n\n const legacyQuery = new LegacyQuery<\n Response,\n LegacyArgumentsOfQueryArgs<TArgs>,\n RouteType<LegacyArgumentsOfQueryArgs<TArgs>>,\n Store,\n Data,\n Id,\n Query<TArgs>\n >(newQuery, queryArgs, this.options.entity);\n\n if (args?.config?.destroyOnResponse) {\n const destroyEffect = effect(() => {\n if (newQuery.executionState()?.type === 'success' || newQuery.executionState()?.type === 'failure') {\n legacyQuery.destroy();\n destroyEffect.destroy();\n }\n });\n }\n\n return legacyQuery;\n });\n });\n };\n createSubject = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\n const subject = new BehaviorSubject<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n\n addQueryContainerHandling(subject, () => subject.getValue(), config);\n\n return subject;\n };\n createSignal = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\n const _signal = signal<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n\n addQueryContainerHandling(toObservable(_signal), () => _signal(), config);\n\n return _signal;\n };\n\n behaviorSubject = this.createSubject;\n}\n\nexport const createLegacyQueryCreator = <\n TArgs extends QueryArgs,\n Response extends ResponseType<TArgs>,\n Store extends EntityStore<unknown>,\n Id,\n Data = Response,\n>(\n options: CreateLegacyQueryCreatorOptions<TArgs, Response, Store, Data, Id>,\n): LegacyQueryCreator<TArgs, Response, Store, Id, Data> => {\n return new LegacyQueryCreator<TArgs, Response, Store, Id, Data>(options);\n};\n","import { HttpStatusCode } from '@angular/common/http';\n\nexport const parseHttpErrorCodeToTitleDe = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Ungültige Anfrage';\n case HttpStatusCode.Unauthorized:\n return 'Nicht autorisiert';\n case HttpStatusCode.PaymentRequired:\n return 'Zahlung erforderlich';\n case HttpStatusCode.Forbidden:\n return 'Verboten';\n case HttpStatusCode.NotFound:\n return 'Nicht gefunden';\n case HttpStatusCode.MethodNotAllowed:\n return 'Methode nicht erlaubt';\n case HttpStatusCode.NotAcceptable:\n return 'Nicht akzeptabel';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy-Authentifizierung erforderlich';\n case HttpStatusCode.RequestTimeout:\n return 'Anforderungszeitüberschreitung';\n case HttpStatusCode.Conflict:\n return 'Konflikt';\n case HttpStatusCode.Gone:\n return 'Weg';\n case HttpStatusCode.LengthRequired:\n return 'Länge erforderlich';\n case HttpStatusCode.PreconditionFailed:\n return 'Vorbedingung fehlgeschlagen';\n case HttpStatusCode.PayloadTooLarge:\n return 'Nutzlast zu groß';\n case HttpStatusCode.UriTooLong:\n return 'URI zu lang';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Nicht unterstützter Medientyp';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Bereich nicht zufriedenstellend';\n case HttpStatusCode.ExpectationFailed:\n return 'Erwartung fehlgeschlagen';\n case HttpStatusCode.ImATeapot:\n return 'Ich bin eine Teekanne';\n case HttpStatusCode.MisdirectedRequest:\n return 'Fehlgeleitete Anfrage';\n case HttpStatusCode.UnprocessableEntity:\n return 'Unverarbeitbare Entität';\n case HttpStatusCode.Locked:\n return 'Gesperrt';\n case HttpStatusCode.FailedDependency:\n return 'Fehlgeschlagene Abhängigkeit';\n case HttpStatusCode.TooEarly:\n return 'Zu früh';\n case HttpStatusCode.UpgradeRequired:\n return 'Upgrade erforderlich';\n case HttpStatusCode.PreconditionRequired:\n return 'Vorbedingung erforderlich';\n case HttpStatusCode.TooManyRequests:\n return 'Zu viele Anfragen';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Anforderungskopffelder zu groß';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Aus rechtlichen Gründen nicht verfügbar';\n case HttpStatusCode.InternalServerError:\n return 'Interner Serverfehler';\n case HttpStatusCode.NotImplemented:\n return 'Nicht implementiert';\n case HttpStatusCode.BadGateway:\n return 'Schlechtes Gateway';\n case HttpStatusCode.ServiceUnavailable:\n return 'Dienst nicht verfügbar';\n case HttpStatusCode.GatewayTimeout:\n return 'Gateway-Zeitüberschreitung';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'HTTP-Version nicht unterstützt';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Variante verhandelt auch';\n case HttpStatusCode.InsufficientStorage:\n return 'Unzureichender Speicher';\n case HttpStatusCode.LoopDetected:\n return 'Schleifenerkennung';\n case HttpStatusCode.NotExtended:\n return 'Nicht erweitert';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Netzwerkauthentifizierung erforderlich';\n default:\n return 'Etwas ist schief gelaufen';\n }\n};\n\nexport const parseHttpErrorCodeToMessageDe = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Entschuldigung, wir konnten Ihre Anfrage nicht bearbeiten. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.Unauthorized:\n return 'Sie sind nicht berechtigt, diese Aktion auszuführen. Bitte melden Sie sich an, um fortzufahren.';\n case HttpStatusCode.PaymentRequired:\n return 'Zur Ausführung dieser Aktion ist eine Zahlung erforderlich.';\n case HttpStatusCode.Forbidden:\n return 'Sie haben keine Berechtigung, diese Aktion auszuführen.';\n case HttpStatusCode.NotFound:\n return 'Die angeforderte Ressource wurde nicht gefunden.';\n case HttpStatusCode.MethodNotAllowed:\n return 'Die angeforderte Methode ist für diese Ressource nicht zulässig.';\n case HttpStatusCode.NotAcceptable:\n return 'Die angeforderte Ressource ist nicht in der Lage, eine Antwort zu generieren, die der Liste der akzeptablen Werte entspricht.';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Zur Ausführung dieser Aktion ist eine Proxy-Authentifizierung erforderlich.';\n case HttpStatusCode.RequestTimeout:\n return 'Der Server hat auf die Anforderung gewartet.';\n case HttpStatusCode.Conflict:\n return 'Die Anforderung steht im Widerspruch zum aktuellen Zustand der Ressource.';\n case HttpStatusCode.Gone:\n return 'Die angeforderte Ressource ist nicht mehr verfügbar und wird auch nicht mehr verfügbar sein.';\n case HttpStatusCode.LengthRequired:\n return 'Die Anforderung hat die Länge ihres Inhalts nicht angegeben, die von der angeforderten Ressource benötigt wird.';\n case HttpStatusCode.PreconditionFailed:\n return 'Der Server erfüllt eine der Voraussetzungen nicht, die der Anforderer an die Anforderung gestellt hat.';\n case HttpStatusCode.PayloadTooLarge:\n return 'Die Anforderung ist größer als der Server bereit oder in der Lage ist, zu verarbeiten.';\n case HttpStatusCode.UriTooLong:\n return 'Die bereitgestellte URL war für den Server zu lang, um sie zu verarbeiten.';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Die Anforderungseinheit hat einen Medientyp, den der Server oder die Ressource nicht unterstützt.';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Der Client hat einen Teil der Datei angefordert, aber der Server kann diesen Teil nicht liefern.';\n case HttpStatusCode.ExpectationFailed:\n return 'Der Server kann die Anforderungen des Erwartung-Anforderungskopffelds nicht erfüllen.';\n case HttpStatusCode.ImATeapot:\n return 'Ich bin eine Teekanne.';\n case HttpStatusCode.MisdirectedRequest:\n return 'Die Anforderung wurde an einen Server gerichtet, der nicht in der Lage ist, eine Antwort zu generieren.';\n case HttpStatusCode.UnprocessableEntity:\n return 'Die Anforderung war gut formuliert, konnte aber aufgrund semantischer Fehler nicht befolgt werden.';\n case HttpStatusCode.Locked:\n return 'Die Ressource, auf die zugegriffen wird, ist gesperrt.';\n case HttpStatusCode.FailedDependency:\n return 'Die Anforderung ist aufgrund eines Fehlers einer vorherigen Anforderung fehlgeschlagen.';\n case HttpStatusCode.TooEarly:\n return 'Der Server ist nicht bereit, die Anforderung zu verarbeiten, weil der Benutzer nicht authentifiziert wurde.';\n case HttpStatusCode.UpgradeRequired:\n return 'Der Client sollte zu einem anderen Protokoll wie TLS/1.0 wechseln, das im Upgrade-Anforderungskopffeld angegeben ist.';\n case HttpStatusCode.PreconditionRequired:\n return 'Der Ursprungsserver erfordert, dass die Anforderung bedingt ist.';\n case HttpStatusCode.TooManyRequests:\n return 'Sie haben in einer bestimmten Zeit zu viele Anfragen gesendet. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Der Server ist nicht bereit, die Anforderung zu verarbeiten, weil seine Kopffelder zu groß sind.';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Die Ressource ist aufgrund einer rechtlichen Forderung nicht verfügbar.';\n case HttpStatusCode.InternalServerError:\n return 'Etwas ist schief gelaufen. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.NotImplemented:\n return 'Der Server unterstützt die zur Erfüllung der Anforderung erforderliche Funktionalität nicht.';\n case HttpStatusCode.BadGateway:\n return 'Etwas ist schief gelaufen. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.ServiceUnavailable:\n return 'Der Server kann die Anforderung derzeit nicht bearbeiten, da er vorübergehend überlastet oder gewartet wird.';\n case HttpStatusCode.GatewayTimeout:\n return 'Der Server hat beim Versuch, die Anforderung abzuschließen, keine rechtzeitige Antwort vom Server erhalten.';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'Der Server unterstützt die in der Anforderung verwendete HTTP-Protokollversion nicht.';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Der Server hat einen internen Konfigurationsfehler: Die ausgewählte Variantenressource ist so konfiguriert, dass sie sich selbst in die transparente Inhaltsverhandlung einbindet, und ist daher kein geeigneter Endpunkt im Verhandlungsprozess.';\n case HttpStatusCode.InsufficientStorage:\n return 'Die Methode konnte auf die Ressource nicht angewendet werden, weil der Server nicht in der Lage ist, die für die erfolgreiche Ausführung der Anforderung erforderliche Darstellung zu speichern.';\n case HttpStatusCode.LoopDetected:\n return 'Der Server hat eine Endlosschleife erkannt, während er die Anforderung verarbeitet.';\n case HttpStatusCode.NotExtended:\n return 'Weitere Erweiterungen der Anforderung sind erforderlich, damit der Server sie erfüllen kann.';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Sie müssen sich authentifizieren, um Zugang zum Netzwerk zu erhalten.';\n default:\n return 'Etwas ist schief gelaufen. Überprüfen Sie Ihre Internetverbindung und versuchen Sie es später erneut.';\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { parseHttpErrorCodeToMessageDe, parseHttpErrorCodeToTitleDe } from './parse-http-error-code-de';\n\n@Pipe({\n name: 'parseHttpErrorCodeToTitleDe',\n standalone: true,\n})\nexport class ParseHttpErrorCodeToTitleDePipe implements PipeTransform {\n transform = parseHttpErrorCodeToTitleDe;\n}\n\n@Pipe({\n name: 'parseHttpErrorCodeToMessageDe',\n standalone: true,\n})\nexport class ParseHttpErrorCodeToMessageDePipe implements PipeTransform {\n transform = parseHttpErrorCodeToMessageDe;\n}\n","import { HttpStatusCode } from '@angular/common/http';\n\nexport const parseHttpErrorCodeToTitleEn = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Bad request';\n case HttpStatusCode.Unauthorized:\n return 'Unauthorized';\n case HttpStatusCode.PaymentRequired:\n return 'Payment required';\n case HttpStatusCode.Forbidden:\n return 'Forbidden';\n case HttpStatusCode.NotFound:\n return 'Not found';\n case HttpStatusCode.MethodNotAllowed:\n return 'Method not allowed';\n case HttpStatusCode.NotAcceptable:\n return 'Not acceptable';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy authentication required';\n case HttpStatusCode.RequestTimeout:\n return 'Request timeout';\n case HttpStatusCode.Conflict:\n return 'Conflict';\n case HttpStatusCode.Gone:\n return 'Gone';\n case HttpStatusCode.LengthRequired:\n return 'Length required';\n case HttpStatusCode.PreconditionFailed:\n return 'Precondition failed';\n case HttpStatusCode.PayloadTooLarge:\n return 'Payload too large';\n case HttpStatusCode.UriTooLong:\n return 'URI too long';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Unsupported media type';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Range not satisfiable';\n case HttpStatusCode.ExpectationFailed:\n return 'Expectation failed';\n case HttpStatusCode.ImATeapot:\n return 'I am a teapot';\n case HttpStatusCode.MisdirectedRequest:\n return 'Misdirected request';\n case HttpStatusCode.UnprocessableEntity:\n return 'Unprocessable entity';\n case HttpStatusCode.Locked:\n return 'Locked';\n case HttpStatusCode.FailedDependency:\n return 'Failed dependency';\n case HttpStatusCode.TooEarly:\n return 'Too early';\n case HttpStatusCode.UpgradeRequired:\n return 'Upgrade required';\n case HttpStatusCode.PreconditionRequired:\n return 'Precondition required';\n case HttpStatusCode.TooManyRequests:\n return 'Too many requests';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Request header fields too large';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Unavailable for legal reasons';\n case HttpStatusCode.InternalServerError:\n return 'Internal server error';\n case HttpStatusCode.NotImplemented:\n return 'Not implemented';\n case HttpStatusCode.BadGateway:\n return 'Bad gateway';\n case HttpStatusCode.ServiceUnavailable:\n return 'Service unavailable';\n case HttpStatusCode.GatewayTimeout:\n return 'Gateway timeout';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'HTTP version not supported';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Variant also negotiates';\n case HttpStatusCode.InsufficientStorage:\n return 'Insufficient storage';\n case HttpStatusCode.LoopDetected:\n return 'Loop detected';\n case HttpStatusCode.NotExtended:\n return 'Not extended';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Network authentication required';\n default:\n return 'Something went wrong';\n }\n};\n\nexport const parseHttpErrorCodeToMessageEn = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Sorry, we could not process your request. Please try again later.';\n case HttpStatusCode.Unauthorized:\n return 'You are not authorized to perform this action. Please log in to continue.';\n case HttpStatusCode.PaymentRequired:\n return 'Payment is required to complete this action.';\n case HttpStatusCode.Forbidden:\n return 'You do not have permission to perform this action.';\n case HttpStatusCode.NotFound:\n return 'The requested resource was not found.';\n case HttpStatusCode.MethodNotAllowed:\n return 'The requested method is not allowed for this resource.';\n case HttpStatusCode.NotAcceptable:\n return 'The requested resource is not capable of generating a response matching the list of acceptable values.';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy authentication is required to complete this action.';\n case HttpStatusCode.RequestTimeout:\n return 'The server timed out waiting for the request.';\n case HttpStatusCode.Conflict:\n return 'The request conflicts with the current state of the resource.';\n case HttpStatusCode.Gone:\n return 'The requested resource is no longer available and will not be available again.';\n case HttpStatusCode.LengthRequired:\n return 'The request did not specify the length of its content, which is required by the requested resource.';\n case HttpStatusCode.PreconditionFailed:\n return 'The server does not meet one of the preconditions that the requester put on the request.';\n case HttpStatusCode.PayloadTooLarge:\n return 'The request is larger than the server is willing or able to process.';\n case HttpStatusCode.UriTooLong:\n return 'The URL provided was too long for the server to process.';\n case HttpStatusCode.UnsupportedMediaType:\n return 'The request entity has a media type which the server or resource does not support.';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'The client has asked for a portion of the file, but the server cannot supply that portion.';\n case HttpStatusCode.ExpectationFailed:\n return 'The server cannot meet the requirements of the Expect request-header field.';\n case HttpStatusCode.ImATeapot:\n return 'I am a teapot.';\n case HttpStatusCode.MisdirectedRequest:\n return 'The request was directed at a server that is not able to produce a response.';\n case HttpStatusCode.UnprocessableEntity:\n return 'The request was well-formed but was unable to be followed due to semantic errors.';\n case HttpStatusCode.Locked:\n return 'The resource that is being accessed is locked.';\n case HttpStatusCode.FailedDependency:\n return 'The request failed due to failure of a previous request.';\n case HttpStatusCode.TooEarly:\n return 'The server is unwilling to process the request because the user has not been authenticated.';\n case HttpStatusCode.UpgradeRequired:\n return 'The client should switch to a different protocol such as TLS/1.0, given in the Upgrade header field.';\n case HttpStatusCode.PreconditionRequired:\n return 'The origin server requires the request to be conditional.';\n case HttpStatusCode.TooManyRequests:\n return 'You have sent too many requests in a given amount of time. Please try again later.';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'The server is unwilling to process the request because its header fields are too large.';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'The resource is unavailable due to a legal demand.';\n case HttpStatusCode.InternalServerError:\n return 'Something went wrong on our end. Please try again later.';\n case HttpStatusCode.NotImplemented:\n return 'The server does not support the functionality required to fulfill the request.';\n case HttpStatusCode.BadGateway:\n return 'Something went wrong on our end. Please try again later.';\n case HttpStatusCode.ServiceUnavailable:\n return 'The server is currently unable to handle the request due to a temporary overload or maintenance of the server.';\n case HttpStatusCode.GatewayTimeout:\n return 'The server, while acting as a gateway or proxy, did not receive a timely response from the upstream server specified by the URL or some other auxiliary server it needed to access in attempting to complete the request.';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'The server does not support the HTTP protocol version used in the request.';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'The server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.';\n case HttpStatusCode.InsufficientStorage:\n return 'The method could not be performed on the resource because the server is unable to store the representation needed to successfully complete the request.';\n case HttpStatusCode.LoopDetected:\n return 'The server detected an infinite loop while processing the request.';\n case HttpStatusCode.NotExtended:\n return 'Further extensions to the request are required for the server to fulfill it.';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'You need to authenticate to gain network access.';\n default:\n return 'Something went wrong. Check your internet connection and try again later.';\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { parseHttpErrorCodeToMessageEn, parseHttpErrorCodeToTitleEn } from './parse-http-error-code-en';\n\n@Pipe({\n name: 'parseHttpErrorCodeToTitleEn',\n standalone: true,\n})\nexport class ParseHttpErrorCodeToTitleEnPipe implements PipeTransform {\n transform = parseHttpErrorCodeToTitleEn;\n}\n\n@Pipe({\n name: 'parseHttpErrorCodeToMessageEn',\n standalone: true,\n})\nexport class ParseHttpErrorCodeToMessageEnPipe implements PipeTransform {\n transform = parseHttpErrorCodeToMessageEn;\n}\n","import { RuntimeError } from '@ethlete/core';\n\n// codes 1000-1999\nexport const enum WebSocketRuntimeErrorCode {\n // Web Socket Client\n ROOM_NOT_JOINED = 1000,\n MESSAGE_MALFORMED = 1001,\n}\n\nexport const roomNotJoined = (room: string) => {\n return new RuntimeError(\n WebSocketRuntimeErrorCode.ROOM_NOT_JOINED,\n `Tried leaving the room \"${room}\" but it has not been joined.`,\n );\n};\n\nexport const messageMalformed = () => {\n return new RuntimeError(\n WebSocketRuntimeErrorCode.MESSAGE_MALFORMED,\n 'A message has been received but it is malformed (cannot be parsed as JSON).',\n );\n};\n","import {\n computed,\n DestroyRef,\n effect,\n inject,\n isDevMode,\n Signal,\n signal,\n untracked,\n WritableSignal,\n} from '@angular/core';\nimport { previousSignalValue } from '@ethlete/core';\nimport { io } from 'socket.io-client';\nimport { WebSocketClientConfig } from './web-socket-client-config';\nimport { messageMalformed, roomNotJoined } from './web-socket-errors';\n\n/** A default socket io message view */\nexport type SocketMessageView<TMessageData = unknown> = {\n room: string;\n event: string;\n data: TMessageData;\n};\n\nexport type WebSocketClientSubtle = {\n /** Leave a socket io room */\n leaveRoom: (room: string) => void;\n};\n\nexport type WebSocketClient<TMessageData extends SocketMessageView> = {\n /**\n * Join a socket io room\n * If a function is passed, it will be evaluated in a reactive signal context.\n * If the function returns null, no room will be joined.\n * If the function returns a string, the previous room will be left and the new room will be joined.\n */\n joinRoom: (room: string | (() => string | null)) => Signal<WebSocketRoom<TMessageData> | null>;\n\n /** Whether the client is connected to the server */\n isConnected: Signal<boolean>;\n\n /** Advanced web socket features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle: WebSocketClientSubtle;\n};\n\nexport type InternalWebSocketRoom<TMessageData extends SocketMessageView> = {\n latestMessage: WritableSignal<TMessageData | null>;\n};\n\nexport type WebSocketRoom<TMessageData extends SocketMessageView> = {\n /** The latest message received in the room */\n latestMessage: Signal<TMessageData | null>;\n};\n\nexport const createWebSocketClient = <TMessageData extends SocketMessageView>(config: WebSocketClientConfig) => {\n const socket = io(config.url, {\n withCredentials: true,\n autoConnect: false,\n transports: config.transports,\n });\n\n const rooms = new Map<string, InternalWebSocketRoom<TMessageData>>();\n const isConnected = signal(false);\n\n const joinRoom = (room: string | (() => string | null)) => {\n const roomFn = typeof room === 'function' ? room : () => room;\n const pre = previousSignalValue(computed(() => roomFn()));\n const roomData = signal<InternalWebSocketRoom<TMessageData> | null>(null);\n\n const join = (name: string) => {\n socket.emit('join-room', name);\n\n const existingRoom = rooms.get(name);\n\n if (existingRoom) return existingRoom;\n\n const message = signal<TMessageData | null>(null);\n\n const newRoom: InternalWebSocketRoom<TMessageData> = {\n latestMessage: message,\n };\n\n rooms.set(name, newRoom);\n\n return newRoom;\n };\n\n effect(() => {\n const current = roomFn();\n\n untracked(() => {\n const previous = pre();\n\n if (previous === current) return;\n\n if (previous) leaveRoom(previous);\n\n if (current) {\n const joinedRoom = join(current);\n if (joinedRoom) roomData.set(joinedRoom);\n } else {\n roomData.set(null);\n }\n });\n });\n\n inject(DestroyRef).onDestroy(() => {\n const current = roomFn();\n\n if (current) {\n leaveRoom(current);\n roomData.set(null);\n }\n });\n\n return roomData.asReadonly() as Signal<WebSocketRoom<TMessageData> | null>;\n };\n\n const leaveRoom = (room: string) => {\n if (!rooms.has(room)) {\n if (isDevMode()) throw roomNotJoined(room);\n }\n\n socket.emit('leave-room', room);\n\n rooms.delete(room);\n };\n\n const setupWebSocketConnectionListener = () => {\n socket.on('connect', () => {\n isConnected.set(true);\n\n for (const room of rooms.keys()) {\n socket.emit('join-room', room);\n }\n });\n socket.on('disconnect', () => isConnected.set(false));\n };\n\n const setupWebSocketListener = () => {\n socket.onAny((data: string) => {\n try {\n const json = JSON.parse(data) as TMessageData;\n\n const room = rooms.get(json.room);\n\n if (room) room.latestMessage.set(json);\n } catch (error) {\n console.error(error);\n if (isDevMode()) throw messageMalformed();\n }\n });\n };\n\n inject(DestroyRef).onDestroy(() => socket.disconnect());\n\n setupWebSocketConnectionListener();\n setupWebSocketListener();\n socket.connect();\n\n const client: WebSocketClient<TMessageData> = {\n joinRoom,\n isConnected: isConnected.asReadonly(),\n subtle: {\n leaveRoom,\n },\n };\n\n return client;\n};\n\nexport const provideWebSocketClient = (config: WebSocketClientConfig) => {\n return {\n provide: config.token,\n useFactory: () => createWebSocketClient(config),\n };\n};\n","import { InjectionToken } from '@angular/core';\nimport { SocketMessageView, WebSocketClient } from './web-socket-client';\n\nexport type CreateWebSocketClientTransport = 'polling' | 'websocket' | 'webtransport';\n\nexport type CreateWebSocketClientConfig = {\n /** A unique name for the client */\n name: string;\n\n /** The URL of the socket io server */\n url: string;\n\n /** A list of transports to try (in order). Engine.io always attempts to connect directly with the first one, provided the feature detection test for it passes. */\n transports?: CreateWebSocketClientTransport[];\n};\n\nexport type WebSocketClientRef<TMessageData extends SocketMessageView = SocketMessageView> = InjectionToken<\n WebSocketClient<TMessageData>\n>;\n\nexport type WebSocketClientConfig = CreateWebSocketClientConfig & {\n /** A generated token for dependency injection */\n token: WebSocketClientRef;\n};\n\nexport const createWebSocketClientConfig = (options: CreateWebSocketClientConfig) => {\n const token = new InjectionToken<WebSocketClientConfig>(`WebSocketClient_${options.name}`);\n\n const clientConfig: WebSocketClientConfig = {\n token,\n name: options.name,\n url: options.url,\n transports: options.transports,\n };\n\n return clientConfig;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpStatusCode } from '@angular/common/http';\nimport { assertInInjectionContext, isDevMode, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Paginated } from '@ethlete/types';\nimport { BehaviorSubject, Observable, filter, map, of, switchMap, takeWhile, tap } from 'rxjs';\nimport { EntityStore } from '../entity';\nimport { AnyLegacyQuery, isLegacyQuery } from '../experimental';\nimport { transformGql } from '../gql';\nimport { QueryClient } from '../query-client';\nimport {\n AnyQueryCreator,\n QueryArgsOf,\n QueryCreator,\n QueryDataOf,\n QueryResponseOf,\n QueryStoreIdOf,\n QueryStoreOf,\n} from '../query-creator';\nimport { QueryForm } from '../query-form';\nimport { Method, RequestHeaders, RequestHeadersMethodMap, transformMethod } from '../request';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../symfony';\nimport { QueryContainerConfig, addQueryContainerHandling } from '../utils';\nimport {\n AnyGqlQueryConfig,\n AnyQuery,\n AnyQueryCollection,\n AnyQueryCollectionData,\n AnyQueryCreatorCollection,\n AnyRestQueryConfig,\n BaseArguments,\n Cancelled,\n Failure,\n GqlQueryConfig,\n Loading,\n Prepared,\n QueryCollectionOf,\n QueryState,\n QueryStateResponseOf,\n QueryStateType,\n ResetPageOnErrorOperatorConfig,\n RouteType,\n Success,\n} from './query.types';\n\ntype OmitNull<T> = T extends null ? never : T;\n\nexport function filterSuccess() {\n return function <T extends QueryState | null, Response extends QueryStateResponseOf<OmitNull<T>>>(\n source: Observable<T>,\n ) {\n return source.pipe(filter((value) => isQueryStateSuccess(value))) as Observable<Success<Response>>;\n };\n}\n\nexport function ignoreAutoRefresh() {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => !isAutoRefresh(value))) as Observable<T>;\n };\n}\n\nexport function filterFailure() {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => isQueryStateFailure(value))) as Observable<Failure>;\n };\n}\n\nexport function filterQueryStates(allowedStates: QueryStateType[]) {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => value && allowedStates.includes(value.type))) as Observable<T>;\n };\n}\n\nexport function takeUntilResponse(config?: { excludeNull?: boolean }) {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(\n takeWhile((value) => {\n if (config?.excludeNull && value === null) {\n return false;\n }\n\n return isQueryStateLoading(value) || isQueryStatePrepared(value) || value === null;\n }, true),\n );\n };\n}\n\nexport function filterNull() {\n return function <T>(source: Observable<T>) {\n return source.pipe(filter((value): value is OmitNull<T> => value !== null));\n };\n}\n\nexport function switchQueryState() {\n return function <T extends AnyQuery | null, Data extends QueryDataOf<T>>(source: Observable<T>) {\n return source.pipe(switchMap((value) => value?.state$ ?? of(null))) as Observable<QueryState<Data> | null>;\n };\n}\n\nexport function switchQueryCollectionState() {\n return function <T extends AnyQueryCollection | null, Data extends AnyQueryCollectionData<OmitNull<T>>>(\n source: Observable<T>,\n ) {\n return source.pipe(switchMap((value) => value?.query.state$ ?? of(null))) as Observable<QueryState<Data> | null>;\n };\n}\n\nexport const resetPageOnError =\n <T extends AnyQuery | null | undefined, J extends QueryForm<any>>(config: ResetPageOnErrorOperatorConfig<J>) =>\n (source: Observable<T>) => {\n const { queryForm, pageControlKey = 'page' } = config;\n\n if (isDevMode() && !queryForm.form.controls[pageControlKey]) {\n console.warn(`resetPageOnError: queryForm.form.controls[\"${pageControlKey}\"] is undefined`);\n }\n\n return source.pipe(\n switchMap((q) => {\n if (!q) {\n return of(q);\n }\n\n return q.state$.pipe(\n tap((state) => {\n if (!isQueryStateFailure(state)) {\n return;\n }\n\n switch (state.error.status) {\n // The page is invalid (in prod mode, code is 416)\n case HttpStatusCode.RangeNotSatisfiable:\n queryForm.form.controls[pageControlKey]?.patchValue(1);\n break;\n\n // The page might be invalid (in dev mode, code is 500)\n case HttpStatusCode.InternalServerError:\n if (isSymfonyPagerfantaOutOfRangeError(state.error.detail)) {\n queryForm.form.controls[pageControlKey].patchValue(1);\n }\n break;\n }\n }),\n takeUntilResponse(),\n );\n }),\n );\n };\n\nexport const isQueryStateLoading = (state: QueryState | null | undefined): state is Loading =>\n state?.type === QueryStateType.Loading;\n\nexport const isQueryStateSuccess = (state: QueryState | null | undefined): state is Success =>\n state?.type === QueryStateType.Success;\n\nexport const isQueryStateFailure = (state: QueryState | null | undefined): state is Failure =>\n state?.type === QueryStateType.Failure;\n\nexport const isQueryStateCancelled = (state: QueryState | null | undefined): state is Cancelled =>\n state?.type === QueryStateType.Cancelled;\n\nexport const isQueryStatePrepared = (state: QueryState | null | undefined): state is Prepared =>\n state?.type === QueryStateType.Prepared;\n\nexport const isAutoRefresh = (state: QueryState | null | undefined): boolean => state?.meta.triggeredVia === 'auto';\n\nexport const mergeHeaders = (...headers: Array<RequestHeaders | null | undefined>) => {\n return headers.reduce((acc, headers) => {\n if (!headers) {\n return acc;\n }\n\n return {\n ...acc,\n ...headers,\n };\n }, {});\n};\n\nexport const isGqlQueryConfig = <\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends RouteType<Arguments> | undefined,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n>(\n config: unknown,\n): config is GqlQueryConfig<Route, Response, Arguments, Store, Data, Id> => {\n if (!config || typeof config !== 'object' || Array.isArray(config)) {\n return false;\n }\n\n if (!('query' in config)) {\n return false;\n }\n\n return true;\n};\n\nexport const isQuery = <T extends AnyQuery>(query: unknown): query is T => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n\n if (!('state$' in query)) {\n return false;\n }\n\n return true;\n};\n\nexport const isQueryCollection = <T extends AnyQueryCollection>(query: unknown): query is T => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n\n if (!('query' in query)) {\n return false;\n }\n\n return true;\n};\n\n/**\n * @deprecated Use `createQueryCollectionSubject` instead. Will be removed in v6.\n */\nexport const createQueryCollection = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n) => new BehaviorSubject<R | null>(null);\n\nexport const createQueryCollectionSubject = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n queryMap: T,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(createQueryCollectionSubject);\n\n const subject = new BehaviorSubject<R | null>(null);\n\n addQueryContainerHandling(\n subject.pipe(map((s) => s?.query ?? null)),\n () => subject.getValue()?.query ?? null,\n config,\n );\n\n return subject;\n};\n\nexport const createQueryCollectionSignal = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n queryMap: T,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(createQueryCollectionSignal);\n\n const _signal = signal<R | null>(null);\n\n addQueryContainerHandling(\n toObservable(_signal).pipe(map((s) => s?.query ?? null)),\n () => _signal()?.query ?? null,\n config,\n );\n\n return _signal;\n};\n\nexport const extractQuery = <T extends AnyQuery | AnyLegacyQuery | AnyQueryCollection | null>(v: T) =>\n (isQuery(v) ? v : isLegacyQuery(v) ? v : v?.query) ?? null;\n\nexport const getDefaultHeaders = (\n headers: RequestHeaders | RequestHeadersMethodMap | null | undefined,\n method: Method,\n) => {\n if (!headers) {\n return {};\n }\n\n if (method in headers) {\n return (headers[method] ?? {}) as RequestHeaders;\n }\n\n return headers as RequestHeaders;\n};\n\nexport const castQueryCreatorTypes = <\n QC extends AnyQueryCreator,\n Arguments extends QueryArgsOf<QC>,\n Response extends QueryResponseOf<QC>,\n Store extends QueryStoreOf<QC>,\n Data extends QueryDataOf<QC>,\n Route extends RouteType<Arguments>,\n Id extends QueryStoreIdOf<QC>,\n OverrideArguments extends BaseArguments | undefined,\n OverrideResponse extends Response | undefined,\n>(config: {\n creator: QC;\n args?: OverrideArguments;\n response?: OverrideResponse;\n}) => {\n if (config.args?.pathParams) {\n console.error(config);\n\n throw new Error('Path params cannot be overridden in castQueryCreatorTypes. Create a new query creator instead.');\n }\n\n return config.creator as unknown as QueryCreator<OverrideArguments, OverrideResponse, Route, Store, Data, Id>;\n};\n\nexport const computeQueryMethod = (config: { config: AnyRestQueryConfig | AnyGqlQueryConfig; client: QueryClient }) => {\n let method: Method;\n\n if (isGqlQueryConfig(config.config)) {\n const transferVia = config.config.transferVia ?? config.client.config.request?.gql?.transferVia;\n method = transformMethod({ method: config.config.method, transferVia });\n } else {\n method = transformMethod({ method: config.config.method });\n }\n\n return method;\n};\n\nexport const computeQueryBody = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n method: Method;\n args?: BaseArguments;\n}) => {\n let body: unknown;\n\n if (\n config.method === 'GET' ||\n config.method === 'HEAD' ||\n config.method === 'OPTIONS' ||\n (isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia)))\n ) {\n return undefined;\n }\n\n if (isGqlQueryConfig(config.config)) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n\n body = query(config.args?.variables);\n } else {\n body = config.args?.body;\n }\n\n return body;\n};\n\nexport const computeQueryAuthHeader = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n}) => {\n let authHeader: Record<string, string> | null = null;\n\n if (config.config.secure) {\n const header = config.client.authProvider?.header;\n\n if (header) {\n authHeader = header;\n }\n } else if (config.client.authProvider?.header) {\n if (config.config.secure === undefined || config.config.secure) {\n authHeader = config.client.authProvider.header;\n }\n }\n\n return authHeader;\n};\n\nexport const computeQueryHeaders = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n args?: BaseArguments;\n}) => {\n const authHeader = computeQueryAuthHeader(config);\n\n const mergedHeaders =\n mergeHeaders(\n getDefaultHeaders(config.client.config.request?.headers, config.config.method),\n authHeader,\n config.args?.headers,\n ) || undefined;\n\n return mergedHeaders;\n};\n\nexport const computeQueryQueryParams = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n args?: BaseArguments;\n}) => {\n if (\n isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia))\n ) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n\n let params = query(config.args?.variables);\n\n if (config.args?.queryParams) {\n params = { ...params, ...config.args?.queryParams };\n }\n\n return params;\n }\n\n return config.args?.queryParams;\n};\n\nexport const paginatedEntityValueUpdater =\n <\n T extends Paginated<unknown>,\n Args extends BaseArguments,\n Entity,\n J extends T extends Paginated<infer X> ? X : never,\n >(\n findFn: (val: J, entity: Entity) => boolean,\n ) =>\n ({ response, rawResponse, entity }: { rawResponse: T; response: T; args: Args; entity: Entity }) => {\n const indexOfEntityRaw = rawResponse.items.findIndex((item) => findFn(item as J, entity));\n const indexOfEntity = response.items.findIndex((item) => findFn(item as J, entity));\n\n if (indexOfEntity === -1 || indexOfEntityRaw === -1) {\n return null;\n }\n\n const newRawResponse = {\n ...rawResponse,\n items: [\n ...rawResponse.items.slice(0, indexOfEntityRaw),\n entity,\n ...rawResponse.items.slice(indexOfEntityRaw + 1),\n ],\n };\n\n const newResponse = {\n ...response,\n items: [...response.items.slice(0, indexOfEntity), entity, ...response.items.slice(indexOfEntity + 1)],\n };\n\n return {\n response: newResponse,\n rawResponse: newRawResponse,\n };\n };\n","import { HttpStatusCode } from '@angular/common/http';\nimport { untracked } from '@angular/core';\nimport {\n BehaviorSubject,\n combineLatest,\n filter,\n interval,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n skip,\n Subject,\n Subscription,\n switchMap,\n take,\n takeUntil,\n takeWhile,\n tap,\n timer,\n} from 'rxjs';\nimport { isBearerAuthProvider } from '../auth';\nimport { EntityStore } from '../entity';\nimport { QueryClient, shouldCacheQuery } from '../query-client';\nimport { request, RequestError, RequestEvent, RequestHeaders } from '../request';\nimport {\n BaseArguments,\n ExecuteQueryOptions,\n GqlQueryConfig,\n PollConfig,\n QueryAutoRefreshConfig,\n QueryState,\n QueryStateMeta,\n QueryStateType,\n RestQueryConfig,\n RouteType,\n} from './query.types';\nimport {\n computeQueryBody,\n computeQueryHeaders,\n computeQueryMethod,\n filterFailure,\n filterSuccess,\n isGqlQueryConfig,\n isQueryStateCancelled,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStatePrepared,\n isQueryStateSuccess,\n switchQueryState,\n takeUntilResponse,\n} from './query.utils';\n\nlet _nextQueryId = 0;\n\nexport class Query<\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> {\n readonly _id = _nextQueryId++;\n\n private _currentLocalId = 0;\n private _pollingSubscription: Subscription | null = null;\n private _onAbort$ = new Subject<void>();\n private _currentPollConfig: PollConfig | null = null;\n\n /**\n * @internal\n * Used to track which components depend on this query.\n * The key is the component's _tNode index.\n * The value is the number of times the component has subscribed to this query.\n * The value might increase since we cant distinguish between a component and a host directive applied to it.\n */\n _dependents: Record<number, number> = {};\n\n /**\n * @internal\n */\n _dependentsChanged$ = new ReplaySubject<Record<number, number>>();\n\n /**\n * @internal\n */\n _isPollingPaused = false;\n\n private readonly _state$ = new BehaviorSubject<QueryState<Response>>({\n type: QueryStateType.Prepared,\n meta: { id: this._currentLocalId, triggeredVia: 'program' },\n });\n\n private get _nextId() {\n return ++this._currentLocalId;\n }\n\n get state$(): Observable<QueryState<Data>> {\n return this._state$.pipe(\n tap((s) => {\n if (!this._client.config.logging?.preparedQuerySubscriptions) return;\n\n if (isQueryStatePrepared(s)) {\n console.warn(\n `Query ${this._routeWithParams} was subscribed to in the prepared state. Did you forget to call .execute()?`,\n );\n }\n }),\n switchMap((s) => this._transformState(s)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n /**\n * The current state of the query.\n *\n * **Warning!** This differs from the `state$` observable in that it does not use the query store. Thus, the response data might be outdated.\n * Use `state$` (or `firstValueFrom(state$)`) the most up-to-date data.\n */\n get rawState() {\n return this._state$.value;\n }\n\n get isExpired() {\n if (isQueryStateLoading(this.rawState)) {\n return false;\n }\n\n if (\n isQueryStatePrepared(this.rawState) ||\n isQueryStateCancelled(this.rawState) ||\n isQueryStateFailure(this.rawState)\n ) {\n return true;\n }\n\n const ts = this.rawState.meta.expiresAt;\n\n if (!ts) {\n return true;\n }\n\n return ts < Date.now();\n }\n\n get isInUse() {\n return this._state$.observed || Object.keys(this._dependents).length > 0;\n }\n\n /**\n * @internal\n */\n get _subscriberCount() {\n return this._state$.observers.length;\n }\n\n get isPolling() {\n return !!this._pollingSubscription;\n }\n\n get autoRefreshOnConfig() {\n const base = this._queryConfig.autoRefreshOn ?? {};\n\n const transformed: Readonly<QueryAutoRefreshConfig> = {\n queryClientDefaultHeadersChange: base.queryClientDefaultHeadersChange ?? true,\n windowFocus: base.windowFocus ?? true,\n };\n\n return transformed;\n }\n\n /**\n * @internal\n */\n get _enableSmartPolling() {\n return this._queryConfig.enableSmartPolling ?? true;\n }\n\n get store() {\n return this._queryConfig.entity?.store ?? null;\n }\n\n get canBeCached() {\n return shouldCacheQuery(this._queryConfig.method);\n }\n\n get _isInMockMode() {\n return !!this._arguments?.mock;\n }\n\n constructor(\n private readonly _client: QueryClient,\n\n /**\n * @internal\n */\n public readonly _queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n\n /**\n * @internal\n */\n public readonly _routeWithParams: Route,\n\n /**\n * @internal\n */\n public readonly _arguments: Arguments,\n\n /**\n * @internal\n */\n public readonly _queryStoreKey: string,\n ) {}\n\n execute(options: ExecuteQueryOptions = {}) {\n const { skipCache = false, _triggeredVia: triggeredVia = 'program', cancelPrevious = false } = options;\n const { authProvider } = this._client;\n const queryConfig = this._queryConfig;\n\n if (!this.isExpired && !skipCache && isQueryStateSuccess(this.rawState)) {\n return this;\n }\n\n if (queryConfig.secure && !authProvider && !this._isInMockMode) {\n throw new Error('Cannot execute secure query without auth provider');\n }\n\n const id = this._nextId;\n const meta: QueryStateMeta = { id, triggeredVia };\n\n if (isQueryStateLoading(this.rawState)) {\n if (cancelPrevious) {\n this.abort();\n } else {\n return this;\n }\n }\n\n this._updateState({ type: QueryStateType.Loading, meta });\n\n if (this._isInMockMode) {\n this._mockRequest({}, meta, options);\n } else {\n let goSignal = of(true);\n\n if (\n authProvider &&\n isBearerAuthProvider(authProvider) &&\n queryConfig.secure &&\n !isQueryStateSuccess(authProvider.currentRefreshQuery?.rawState)\n ) {\n // On page load the query might be executed before the auth provider has been initialized.\n // In this case we need to wait for the auth provider to be ready before we can execute the query.\n goSignal = combineLatest([\n // The tokens might get set without a refresh query being created (e.g.) directly after login.\n authProvider.currentRefreshQuery$.pipe(switchQueryState(), takeUntilResponse()),\n authProvider.tokens$.pipe(take(1)),\n ]).pipe(\n takeUntil(this._onAbort$),\n filter(([state, tokens]) => {\n if (state) {\n return !isQueryStateLoading(state);\n }\n\n return !!tokens;\n }),\n tap(([state]) => {\n if (isQueryStateFailure(state)) {\n this._updateEntityState({ type: 'failure', error: state.error, headers: {} }, meta, options);\n }\n }),\n map(() => true),\n take(1),\n );\n }\n\n goSignal\n .pipe(\n switchMap(() => {\n const method = computeQueryMethod({ config: queryConfig, client: this._client });\n const body = computeQueryBody({ config: queryConfig, client: this._client, args: this._arguments, method });\n const headers = computeQueryHeaders({ client: this._client, config: queryConfig, args: this._arguments });\n\n return request<Response>({\n urlWithParams: this._routeWithParams as string,\n method,\n body,\n headers,\n reportProgress: queryConfig.reportProgress,\n responseType: queryConfig.responseType,\n withCredentials: queryConfig.withCredentials,\n cacheAdapter: this._client.config.request?.cacheAdapter,\n retryFn: this._client.config.request?.retryFn,\n }).pipe(\n tap((state) => this._updateEntityState(state, meta, options)),\n takeUntil(this._onAbort$),\n );\n }),\n )\n\n .subscribe();\n }\n\n return this;\n }\n\n abort() {\n if (!isQueryStateLoading(this.rawState)) {\n return this;\n }\n\n this._onAbort$.next();\n\n this._updateState({\n type: QueryStateType.Cancelled,\n meta: { id: this.rawState.meta.id, triggeredVia: this.rawState.meta.triggeredVia },\n });\n\n return this;\n }\n\n poll(config: PollConfig) {\n if (this._pollingSubscription) {\n return this;\n }\n\n this._currentPollConfig = config;\n\n const interval$ = interval(config.interval);\n const poll$ = interval$.pipe(\n skip(config.triggerImmediately ? 0 : 1),\n takeUntil(config.takeUntil),\n takeWhile(() => !this._isPollingPaused),\n filter(() => !isQueryStateLoading(this._state$.value)),\n );\n\n this._pollingSubscription = poll$.subscribe({\n next: () => this.execute({ skipCache: true, _triggeredVia: 'poll' }),\n complete: () => this.stopPolling(),\n });\n\n return this;\n }\n\n stopPolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._currentPollConfig = null;\n\n return this;\n }\n\n pausePolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n\n this._isPollingPaused = true;\n\n return this;\n }\n\n resumePolling() {\n if (!this._isPollingPaused || !this._currentPollConfig) {\n return this;\n }\n\n this._isPollingPaused = false;\n\n return this.poll({ ...this._currentPollConfig, triggerImmediately: true });\n }\n\n onSuccess(callback: (response: Data) => void) {\n this.state$.pipe(takeUntilResponse(), filterSuccess()).subscribe((state) => callback(state.response));\n return this;\n }\n\n onFailure(callback: (error: RequestError<unknown>) => void) {\n this.state$.pipe(takeUntilResponse(), filterFailure()).subscribe((state) => callback(state.error));\n return this;\n }\n\n private _getBearerAuthProvider() {\n const authProvider = this._client.authProvider;\n\n if (authProvider && isBearerAuthProvider(authProvider)) {\n return authProvider;\n }\n\n return null;\n }\n\n private _updateEntityState(\n requestEvent: RequestEvent<Response>,\n meta: QueryStateMeta,\n options?: ExecuteQueryOptions,\n ) {\n switch (requestEvent.type) {\n case 'start':\n case 'delay-retry': {\n const { type, retryDelay, retryNumber } = requestEvent;\n const newMeta: QueryStateMeta = { ...meta, isWaitingForRetry: type === 'delay-retry', retryDelay, retryNumber };\n\n this._updateState({\n type: QueryStateType.Loading,\n meta: newMeta,\n });\n break;\n }\n\n case 'upload-progress':\n case 'download-progress': {\n this._updateState({\n type: QueryStateType.Loading,\n progress: requestEvent.progress,\n partialText: 'partialText' in requestEvent ? requestEvent.partialText : undefined,\n meta,\n });\n\n break;\n }\n\n case 'success': {\n const { response, expiresInTimestamp, headers } = requestEvent;\n const isGql = isGqlQueryConfig(this._queryConfig);\n const responseData =\n isGql && typeof response === 'object' && !!response && 'data' in response\n ? (response['data'] as Response)\n : (response as Response);\n\n if (this._queryConfig.entity && this._queryConfig.entity.set) {\n const id = this._queryConfig.entity?.id({ args: this._arguments, response: responseData });\n\n this._queryConfig.entity?.set({\n args: this._arguments,\n response: responseData,\n id,\n store: this._queryConfig.entity.store,\n });\n }\n\n this._updateState({\n type: QueryStateType.Success,\n response: responseData,\n headers: headers,\n meta: { ...meta, expiresAt: expiresInTimestamp },\n });\n\n break;\n }\n\n case 'failure': {\n const { error } = requestEvent;\n const failure = () => this._updateState({ type: QueryStateType.Failure, error, meta });\n const bearerAuthProvider = this._getBearerAuthProvider();\n\n if (\n !bearerAuthProvider ||\n options?._isUnauthorizedRetry ||\n error.status !== HttpStatusCode.Unauthorized ||\n !bearerAuthProvider.shouldRefreshOnUnauthorizedResponse\n ) {\n return failure();\n }\n\n const query = bearerAuthProvider._refreshQuery();\n if (!query) return failure();\n\n query.state$\n .pipe(\n takeUntilResponse(),\n takeUntil(this._onAbort$),\n tap((state) =>\n isQueryStateSuccess(state) ? this.execute({ ...options, _isUnauthorizedRetry: true }) : failure(),\n ),\n )\n .subscribe();\n\n break;\n }\n\n case 'cancel': {\n this._updateState({\n type: QueryStateType.Cancelled,\n meta,\n });\n\n break;\n }\n }\n }\n\n private _transformState(s: QueryState<Response>): Observable<QueryState<Data>> {\n if (!isQueryStateSuccess(s) || !this._queryConfig.entity?.get) {\n return of(s) as Observable<QueryState<Data>>;\n }\n\n const id = this._queryConfig.entity.id({ args: this._arguments, response: s.response });\n\n return this._queryConfig.entity\n .get({ args: this._arguments, id, response: s.response, store: this._queryConfig.entity.store })\n .pipe(map((v) => ({ ...s, response: v })));\n }\n\n private _updateState(s: QueryState<Response>) {\n // We need to use untracked here to avoid Angular's \"allowSignalWrites is false\" error when executing queries inside Angular's computed/effect signal functions.\n untracked(() => this._state$.next(s));\n }\n\n private _mockRequest(headers: RequestHeaders | undefined, meta: QueryStateMeta, options: ExecuteQueryOptions) {\n if (!this._arguments?.mock) return;\n\n const { delay = 200, error, response, retryIntoResponse = false, progress } = this._arguments.mock;\n const progressFileSize = progress?.fileSize ?? 1000000;\n const progressEventType = progress?.eventType ?? 'upload';\n const progressEventCount = progress?.eventCount ?? 5;\n const progressOmitTotal = progress?.omitTotal ?? false;\n const omitPartialText = progress?.omitPartialText ?? false;\n\n const finalResolveMock = () => {\n if (error) {\n this._updateEntityState({ error, headers: headers ?? {}, type: 'failure' }, meta, options);\n return;\n }\n\n this._updateEntityState(\n { response: response as Response, headers: headers ?? {}, type: 'success' },\n meta,\n options,\n );\n };\n\n if (progress) {\n interval(delay)\n .pipe(\n tap((a) => {\n if (a === progressEventCount + 1) {\n finalResolveMock();\n } else {\n const current = Math.min(progressFileSize * a, progressFileSize * progressEventCount);\n const percentage = (current / (progressFileSize * progressEventCount)) * 100;\n\n this._updateEntityState(\n {\n type: progressEventType === 'upload' ? 'upload-progress' : 'download-progress',\n headers: headers ?? {},\n progress: { current, ...(progressOmitTotal ? {} : { percentage, total: progressFileSize }) },\n partialText: omitPartialText ? undefined : `Partial text ${a}`,\n },\n meta,\n options,\n );\n }\n }),\n takeUntil(this._onAbort$),\n takeWhile((a) => a < progressEventCount + 1, true),\n )\n .subscribe();\n } else if (retryIntoResponse) {\n interval(delay)\n .pipe(\n tap((a) => {\n if (a === 3) {\n finalResolveMock();\n } else {\n const aModified = a + 1;\n this._updateEntityState(\n {\n type: 'delay-retry',\n headers: headers ?? {},\n retryDelay: 1000 + 1000 * aModified,\n retryNumber: aModified,\n },\n meta,\n options,\n );\n }\n }),\n takeUntil(this._onAbort$),\n takeWhile((a) => a < 3, true),\n )\n .subscribe();\n } else {\n timer(delay)\n .pipe(\n tap(() => finalResolveMock()),\n takeUntil(this._onAbort$),\n )\n .subscribe();\n }\n }\n\n /**\n * @internal\n */\n _addDependent(tNodeIndex: number) {\n if (!this._dependents[tNodeIndex]) {\n this._dependents[tNodeIndex] = 0;\n }\n\n this._dependents[tNodeIndex]++;\n\n this._dependentsChanged$.next(this._dependents);\n }\n\n /**\n * @internal\n */\n _removeDependent(tNodeIndex: number) {\n const count = this._dependents[tNodeIndex];\n if (count === undefined) {\n return;\n }\n\n if (this._dependents[tNodeIndex] !== undefined) {\n this._dependents[tNodeIndex]--;\n }\n\n if (count <= 1) {\n delete this._dependents[tNodeIndex];\n }\n\n this._dependentsChanged$.next(this._dependents);\n }\n\n /**\n * @internal\n */\n _hasDependents() {\n return Object.keys(this._dependents).length > 0;\n }\n}\n","import { AnyQueryCreator } from '../query-creator';\nimport { AuthProvider } from './auth-provider.types';\nimport { BasicAuthProvider } from './basic-auth-provider';\nimport { BearerAuthProvider } from './bearer-auth-provider';\nimport { CustomHeaderAuthProvider } from './custom-header-auth-provider';\n\nexport const isBasicAuthProvider = (authProvider: AuthProvider): authProvider is BasicAuthProvider =>\n authProvider instanceof BasicAuthProvider;\n\nexport const isBearerAuthProvider = <T extends AnyQueryCreator>(\n authProvider: AuthProvider,\n): authProvider is BearerAuthProvider<T> => authProvider instanceof BearerAuthProvider;\n\nexport const isCustomHeaderAuthProvider = (authProvider: AuthProvider): authProvider is CustomHeaderAuthProvider =>\n authProvider instanceof CustomHeaderAuthProvider;\n\nexport const decryptBearer = <Result = Record<string, unknown>>(token: string) => {\n try {\n const base64Url = token.split('.')[1];\n\n if (!base64Url) {\n return null;\n }\n\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n atob(base64)\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join(''),\n );\n\n return JSON.parse(jsonPayload) as Result;\n } catch (error) {\n console.error(`Invalid bearer token: ${token}`, error);\n\n return null;\n }\n};\n","import { deleteCookie, getCookie, setCookie } from '@ethlete/core';\nimport { BehaviorSubject, Subject, takeUntil, tap, timer } from 'rxjs';\nimport {\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n switchQueryState,\n takeUntilResponse,\n} from '../query';\nimport { AnyQueryCreator, ConstructQuery, QueryResponseOf } from '../query-creator';\nimport {\n AuthBearerRefreshStrategy,\n AuthProvider,\n AuthProviderBearerConfig,\n TokenResponse,\n} from './auth-provider.types';\nimport { decryptBearer } from './auth-provider.utils';\n\nexport class BearerAuthProvider<T extends AnyQueryCreator> implements AuthProvider {\n private readonly _destroy$ = new Subject<boolean>();\n private readonly _currentRefreshQuery$ = new BehaviorSubject<ConstructQuery<T> | null>(null);\n\n private readonly _tokens$ = new BehaviorSubject<TokenResponse>({\n token: null,\n refreshToken: null,\n });\n\n get header() {\n return { Authorization: `Bearer ${this._tokens$.getValue().token}` };\n }\n\n get tokens$() {\n return this._tokens$.asObservable();\n }\n\n get tokens() {\n return this._tokens$.getValue();\n }\n\n get currentRefreshQuery$() {\n return this._currentRefreshQuery$.asObservable();\n }\n\n get currentRefreshQuery() {\n return this._currentRefreshQuery$.getValue();\n }\n\n get shouldRefreshOnUnauthorizedResponse() {\n return (\n !!this._config.refreshConfig &&\n (this._config.refreshConfig.refreshOnUnauthorizedResponse === undefined ||\n this._config.refreshConfig.refreshOnUnauthorizedResponse)\n );\n }\n\n constructor(public _config: AuthProviderBearerConfig<T>) {\n const cookieEnabled = _config.refreshConfig?.cookieEnabled ?? true;\n const cookieToken =\n _config.refreshConfig?.cookieName && cookieEnabled ? (getCookie(_config.refreshConfig.cookieName) ?? null) : null;\n\n this._tokens$.next({\n token: _config.token || null,\n refreshToken: _config.refreshConfig?.token || cookieToken || null,\n });\n\n if (!this.tokens.token && !this.tokens.refreshToken) {\n if (!_config.refreshConfig?.cookieName) {\n console.error(\n 'A BearerAuthProvider was created without token or refresh token. You should provide at least a cookieName where the refresh token might be stored.',\n );\n }\n\n return;\n }\n\n if (this.tokens.token) {\n this._prepareForRefresh();\n\n if (this.tokens.refreshToken && this._config.refreshConfig?.cookieName && cookieEnabled) {\n this._setCookie();\n }\n } else if (this.tokens.refreshToken) {\n this._refreshQuery();\n }\n }\n\n cleanUp(): void {\n this._destroy$.next(true);\n this._destroy$.unsubscribe();\n this._currentRefreshQuery$.next(null);\n\n if (this._config.refreshConfig?.cookieName) {\n this._deleteCookie();\n }\n }\n\n enableCookie() {\n if (!this._config.refreshConfig?.cookieName) {\n throw new Error('No cookie name was provided');\n }\n\n if (!this.tokens.refreshToken) {\n throw new Error('No refresh token was provided');\n }\n\n this._config.refreshConfig.cookieEnabled = true;\n\n this._setCookie();\n }\n\n disableCookie() {\n if (!this._config.refreshConfig?.cookieName) {\n throw new Error('No cookie name was provided');\n }\n\n this._config.refreshConfig.cookieEnabled = false;\n\n this._deleteCookie();\n }\n\n private _setCookie() {\n if (!this._config.refreshConfig?.cookieName || !this.tokens.refreshToken) return;\n\n setCookie(\n this._config.refreshConfig.cookieName,\n this.tokens.refreshToken,\n this._config.refreshConfig.cookieExpiresInDays,\n this._config.refreshConfig.cookieDomain,\n this._config.refreshConfig.cookiePath,\n this._config.refreshConfig.cookieSameSite,\n );\n }\n\n private _deleteCookie() {\n if (!this._config.refreshConfig?.cookieName) return;\n\n deleteCookie(\n this._config.refreshConfig.cookieName,\n this._config.refreshConfig.cookiePath,\n this._config.refreshConfig.cookieDomain,\n );\n }\n\n private _prepareForRefresh() {\n if (!this.tokens.token || !this._config.refreshConfig) {\n return;\n }\n\n const bearer = decryptBearer(this.tokens.token);\n\n if (!bearer) {\n return;\n }\n\n const expiresInPropertyName = this._config.refreshConfig.expiresInPropertyName || 'exp';\n const expiresIn = bearer[expiresInPropertyName] as number | undefined;\n const fiveMinutes = 5 * 60 * 1000;\n const refreshBuffer = this._config.refreshConfig.refreshBuffer ?? fiveMinutes;\n\n if (expiresIn === undefined) {\n throw new Error(`Bearer token does not contain an '${expiresInPropertyName}' property`);\n }\n\n const remainingTime = new Date(expiresIn * 1000).getTime() - refreshBuffer - new Date().getTime();\n\n const strategy = this._config.refreshConfig.strategy ?? AuthBearerRefreshStrategy.BeforeExpiration;\n\n switch (strategy) {\n case AuthBearerRefreshStrategy.BeforeExpiration:\n timer(remainingTime)\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => this._refreshQuery());\n break;\n }\n }\n\n /**\n * @internal\n */\n _refreshQuery() {\n const currentQuery = this._currentRefreshQuery$.getValue();\n\n if (isQueryStateLoading(currentQuery?.rawState)) {\n return currentQuery;\n }\n\n const currentRefreshToken = this.tokens.refreshToken;\n\n if (!currentRefreshToken || !this._config.refreshConfig) {\n return;\n }\n\n const args = this._config.refreshConfig.requestArgsAdapter?.({\n token: this.tokens.token,\n refreshToken: currentRefreshToken,\n }) ?? {\n body: { refreshToken: currentRefreshToken },\n };\n\n const query = this._config.refreshConfig.queryCreator.prepare(args).execute({ skipCache: true });\n\n this._currentRefreshQuery$.next(query as ConstructQuery<T>);\n\n this._currentRefreshQuery$\n .pipe(\n switchQueryState(),\n tap((state) => {\n if (isQueryStateSuccess(state)) {\n if (this._config.refreshConfig?.responseAdapter) {\n const tokens = this._config.refreshConfig.responseAdapter(state.response as QueryResponseOf<T>);\n\n this._tokens$.next(tokens);\n } else {\n this._tokens$.next({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n token: (state.response as any)['token'],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n refreshToken: (state.response as any)['refreshToken'],\n });\n }\n const cookieEnabled = this._config.refreshConfig?.cookieEnabled ?? true;\n\n if (this._config.refreshConfig?.cookieName && this.tokens.refreshToken && cookieEnabled) {\n this._setCookie();\n }\n\n this._prepareForRefresh();\n } else if (isQueryStateFailure(state)) {\n this._tokens$.next({ token: null, refreshToken: null });\n\n if (this._config.refreshConfig?.cookieName) {\n this._deleteCookie();\n }\n }\n }),\n takeUntilResponse(),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n return query;\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n inject,\n} from '@angular/core';\nimport { Subscription, tap } from 'rxjs';\nimport { AnyLegacyQuery, isLegacyQuery } from '../experimental';\nimport {\n AnyQuery,\n AnyQueryCollection,\n QueryCollectionKeysOf,\n QueryOf,\n QueryState,\n extractQuery,\n isQueryCollection,\n isQueryStateCancelled,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStatePrepared,\n isQueryStateSuccess,\n} from '../query';\nimport { QueryDataOf } from '../query-creator';\nimport { RequestError, RequestProgress } from '../request';\n\ninterface QueryContext<Q extends AnyQuery | AnyLegacyQuery | AnyQueryCollection | null> {\n /**\n * The queries's response data.\n */\n $implicit: QueryDataOf<QueryOf<Q>> | null;\n\n /**\n * The queries's response data.\n */\n etQuery: QueryDataOf<QueryOf<Q>> | null;\n\n /**\n * The query used inside this directive. Useful if for instance the query gets unwrapped via async pipe inside the directive.\n */\n query: QueryOf<Q> | null;\n\n /**\n * Is true when the query is triggered by user interaction.\n */\n loading: boolean;\n\n /**\n * Is true when the query is triggered by either polling or auto refresh event.\n */\n refreshing: boolean;\n\n /**\n * The query's progress state.\n */\n progress: RequestProgress | null;\n\n /**\n * The query's error state.\n */\n error: RequestError<unknown> | null;\n\n /**\n * The query's scope (only available when the query is a collection)\n */\n scope: QueryCollectionKeysOf<Q> | null;\n}\n\n@Directive({\n selector: '[etQuery]',\n standalone: true,\n})\nexport class QueryDirective<Q extends AnyQuery | AnyLegacyQuery | AnyQueryCollection | null>\n implements OnInit, OnDestroy\n{\n private _mainTemplateRef = inject<TemplateRef<QueryContext<Q>>>(TemplateRef);\n private _viewContainerRef = inject(ViewContainerRef);\n private _errorHandler = inject(ErrorHandler);\n private _cdr = inject(ChangeDetectorRef);\n\n private _isMainViewCreated = false;\n private _subscription: Subscription | null = null;\n\n private readonly _viewContext: QueryContext<Q> = {\n $implicit: null,\n etQuery: null,\n loading: false,\n refreshing: false,\n error: null,\n progress: null,\n scope: null,\n query: null,\n };\n\n @Input('etQuery')\n get query(): Q {\n return this._query;\n }\n set query(v: Q) {\n this._query = v;\n\n this._subscribeToQuery();\n }\n private _query!: Q;\n\n @Input('etQueryCache')\n get cache(): boolean {\n return this._cache;\n }\n set cache(v: boolean) {\n this._cache = v;\n }\n private _cache = false;\n\n static ngTemplateContextGuard<Q extends AnyQuery | AnyLegacyQuery | AnyQueryCollection | null>(\n dir: QueryDirective<Q>,\n ctx: unknown,\n ): ctx is QueryContext<Q> {\n return true;\n }\n\n ngOnInit(): void {\n this._renderMainView();\n }\n\n ngOnDestroy(): void {\n this._subscription?.unsubscribe();\n }\n\n private _subscribeToQuery(): void {\n this._subscription?.unsubscribe();\n this._subscription = null;\n\n const query = extractQuery(this.query);\n\n if (!query) {\n this._viewContext.$implicit = null;\n this._viewContext.etQuery = null;\n this._viewContext.loading = false;\n this._viewContext.refreshing = false;\n this._viewContext.error = null;\n this._viewContext.progress = null;\n this._viewContext.scope = null;\n this._viewContext.query = null;\n return;\n }\n\n if (isQueryStatePrepared(query.rawState) || isQueryStateCancelled(query.rawState)) {\n query.execute();\n }\n\n const sub = query.state$.pipe(tap((state) => this._updateView(state))).subscribe();\n\n this._viewContext.scope = isQueryCollection(query) ? (query.type as QueryCollectionKeysOf<Q>) : null;\n this._viewContext.query = query as QueryOf<Q>;\n\n this._subscription = sub;\n }\n\n private _updateView(state: QueryState) {\n if (isQueryStateLoading(state)) {\n this._viewContext.progress = state.progress ?? null;\n this._viewContext.refreshing = state.meta.triggeredVia === 'auto' || state.meta.triggeredVia === 'poll';\n\n if (!this._viewContext.refreshing) {\n this._viewContext.loading = true;\n }\n } else {\n this._viewContext.loading = false;\n this._viewContext.refreshing = false;\n this._viewContext.progress = null;\n }\n\n if (isQueryStateSuccess(state)) {\n this._viewContext.etQuery = state.response as QueryDataOf<QueryOf<Q>>;\n this._viewContext.$implicit = state.response as QueryDataOf<QueryOf<Q>>;\n } else if (!this.cache) {\n this._viewContext.etQuery = null;\n this._viewContext.$implicit = null;\n }\n\n if (isQueryStateFailure(state)) {\n this._viewContext.error = state.error;\n\n if (isLegacyQuery(extractQuery(this.query))) {\n this._errorHandler.handleError(state.error.httpErrorResponse);\n }\n } else {\n this._viewContext.error = null;\n }\n\n this._cdr.markForCheck();\n }\n\n private _renderMainView(): void {\n if (!this._isMainViewCreated) {\n this._isMainViewCreated = true;\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);\n }\n }\n}\n","import { BehaviorSubject, Observable, combineLatest, map, of, shareReplay, switchMap, tap } from 'rxjs';\nimport { AnyLegacyQueryCreator } from '../experimental';\nimport { filterSuccess } from '../query';\nimport { AnyQueryCreator, ConstructQuery, QueryArgsOf, QueryDataOf } from '../query-creator';\nimport { InfinityQueryConfig, InfinityQueryParamLocation } from './infinity-query.types';\n\nexport class InfinityQuery<\n QueryCreator extends AnyQueryCreator | AnyLegacyQueryCreator,\n Query extends ConstructQuery<QueryCreator>,\n Args extends QueryArgsOf<QueryCreator>,\n QueryResponse extends QueryDataOf<QueryCreator>,\n InfinityResponse extends unknown[],\n> {\n private readonly _queries$ = new BehaviorSubject<Query[]>([]);\n private readonly _currentPage$ = new BehaviorSubject<number | null>(null);\n private readonly _currentCalculatedPage$ = new BehaviorSubject<number | null>(null);\n private readonly _totalPages$ = new BehaviorSubject<number | null>(null);\n private readonly _itemsPerPage$ = new BehaviorSubject<number>(10);\n\n private readonly _data$ = this._queries$.pipe(\n switchMap((queries) => {\n if (!queries.length) {\n return of([]);\n }\n\n return combineLatest(\n queries.map((query) =>\n query.state$.pipe(\n filterSuccess(),\n map((state) => ({ state, query })),\n ),\n ),\n );\n }),\n tap((stateMaps) => {\n const lastState = stateMaps[stateMaps.length - 1]?.state;\n const lastQuery = stateMaps[stateMaps.length - 1]?.query;\n\n if (!lastState || !lastQuery) {\n return;\n }\n\n const totalPages =\n this._config.response.totalPagesExtractor?.({\n response: lastState.response as QueryResponse,\n itemsPerPage: this.itemsPerPage,\n args: lastQuery._arguments,\n }) ??\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (lastState.response as any)?.totalPages ??\n null;\n\n this._totalPages$.next(totalPages);\n }),\n map((stateMaps) => {\n if (!stateMaps.length) {\n return null;\n }\n\n const fullData = stateMaps.reduce(\n (acc, stateMap) => {\n const valExtractFn = this._config?.response?.valueExtractor;\n let data = valExtractFn\n ? valExtractFn?.(stateMap.state.response as QueryResponse)\n : (stateMap.state.response as InfinityResponse);\n\n if (this._config.response.reverse) {\n data = [...data].reverse() as InfinityResponse;\n }\n\n if (this._config.response.appendItemsTo === 'start') {\n acc.unshift(...data);\n } else {\n acc.push(...data);\n }\n return acc;\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [] as any as InfinityResponse,\n );\n\n return fullData;\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n private readonly _lastQuery$ = this._queries$.pipe(\n map((queries) => queries[queries.length - 1] ?? null),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n get currentPage$() {\n return this._currentPage$.asObservable();\n }\n\n get currentPage() {\n return this._currentPage$.getValue();\n }\n\n get currentCalculatedPage$() {\n return this._currentCalculatedPage$.asObservable();\n }\n\n get currentCalculatedPage() {\n return this._currentCalculatedPage$.getValue();\n }\n\n get totalPages$() {\n return this._totalPages$.asObservable();\n }\n\n get totalPages() {\n return this._totalPages$.getValue();\n }\n\n get itemsPerPage$() {\n return this._itemsPerPage$.asObservable();\n }\n\n get itemsPerPage() {\n return this._itemsPerPage$.getValue();\n }\n\n get data$() {\n return this._data$;\n }\n\n get currentQuery$() {\n return this._lastQuery$;\n }\n\n constructor(\n private _config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n private _destroy$: Observable<boolean>,\n ) {\n this._itemsPerPage$.next(this._config.limitParam?.value ?? 10);\n }\n\n nextPage() {\n const newPage = (this._currentPage$.value ?? 0) + 1;\n const calculatedPage =\n this._config?.pageParam?.valueCalculator?.({\n page: newPage,\n totalPages: this.totalPages,\n itemsPerPage: this.itemsPerPage,\n }) ?? newPage;\n\n if (this.totalPages !== null && newPage > this.totalPages) {\n console.error(\n 'Cannot load more pages, already at the end. Make sure to not render the infinity query trigger using *ngIf canLoadMore',\n );\n return;\n }\n\n const args = this._prepareArgs(this._config, calculatedPage);\n\n const query = this._config.queryCreator.prepare(args).execute() as Query;\n\n if (this._config.pollingInterval) {\n query.poll({ interval: this._config.pollingInterval, takeUntil: this._destroy$ });\n }\n\n this._queries$.next([...this._queries$.value, query]);\n\n this._currentPage$.next(newPage);\n this._currentCalculatedPage$.next(calculatedPage);\n }\n\n reset(\n newConfig?: Omit<\n InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n 'queryCreator' | 'response'\n >,\n ) {\n this._config = { ...this._config, ...(newConfig ?? {}) };\n\n this._currentPage$.next(null);\n this._currentCalculatedPage$.next(null);\n this._totalPages$.next(null);\n this._itemsPerPage$.next(this._config.limitParam?.value ?? 10);\n this._queries$.next([]);\n\n this.nextPage();\n }\n\n private _prepareArgs(config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>, page: number) {\n const pageParamLocation = this._getPageParamLocation(config?.pageParam?.location);\n\n const pageArgs = {\n [pageParamLocation]: {\n [config?.pageParam?.key ?? 'page']: page,\n },\n };\n\n const limitParamLocation = this._getPageParamLocation(config?.limitParam?.location);\n\n const limitArgs = {\n [limitParamLocation]: {\n [config?.limitParam?.key ?? 'limit']: config?.limitParam?.value ?? 10,\n },\n };\n\n const defaultConfig = config?.defaultArgs ?? {};\n\n const mergedArgs =\n pageParamLocation === limitParamLocation\n ? {\n ...defaultConfig,\n [pageParamLocation]: {\n ...(config?.defaultArgs?.[pageParamLocation] ?? {}),\n ...pageArgs[limitParamLocation],\n ...limitArgs[limitParamLocation],\n },\n }\n : {\n ...defaultConfig,\n [pageParamLocation]: {\n ...(config?.defaultArgs?.[pageParamLocation] ?? {}),\n ...pageArgs[pageParamLocation],\n },\n [limitParamLocation]: {\n ...(config?.defaultArgs?.[limitParamLocation] ?? {}),\n ...limitArgs[limitParamLocation],\n },\n };\n\n return mergedArgs;\n }\n\n private _getPageParamLocation(location: InfinityQueryParamLocation | undefined) {\n const loc = location ?? 'query';\n\n switch (loc) {\n case 'path':\n return 'pathParams';\n case 'query':\n return 'queryParams';\n case 'body':\n return 'body';\n case 'header':\n return 'headers';\n case 'variable':\n return 'variables';\n default:\n throw new Error(`Invalid pageParamLocation: ${loc}`);\n }\n }\n}\n","import { AnyLegacyQueryCreator } from '../experimental';\nimport { AnyQueryCreator, QueryArgsOf, QueryDataOf } from '../query-creator';\nimport { InfinityQueryConfig, PageParamCalculatorOptions } from './infinity-query.types';\n\nexport const createInfinityQueryConfig = <\n QueryCreator extends AnyQueryCreator | AnyLegacyQueryCreator,\n Args extends QueryArgsOf<QueryCreator>,\n QueryResponse extends QueryDataOf<QueryCreator>,\n InfinityResponse extends unknown[],\n>(\n config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n) => config;\n\nexport const skipPaginationPageParamCalculator = ({ page, itemsPerPage }: PageParamCalculatorOptions) =>\n itemsPerPage * (page - 1);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n inject,\n InjectionToken,\n Input,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { createDestroy, DelayableDirective } from '@ethlete/core';\nimport { BehaviorSubject, combineLatest, Subject, takeUntil, tap, withLatestFrom } from 'rxjs';\nimport { isLegacyQuery } from '../experimental';\nimport { InfinityQuery, InfinityQueryConfig, InfinityQueryOf } from '../infinite-query';\nimport {\n BaseArguments,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n switchQueryState,\n} from '../query';\nimport { AnyQueryCreator, ConstructQuery } from '../query-creator';\nimport { RequestError } from '../request';\n\ninterface InfinityQueryContext<\n Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments | undefined, any, unknown[]>,\n> {\n $implicit: Q['response']['arrayType'] | null;\n etInfinityQuery: Q['response']['arrayType'] | null;\n loading: boolean;\n error: RequestError<unknown> | null;\n\n isFirstLoad: boolean;\n canLoadMore: boolean;\n currentPage: number | null;\n currentCalculatedPage: number | null;\n totalPages: number | null;\n itemsPerPage: number | null;\n\n currentQuery: ConstructQuery<Q['queryCreator']> | null;\n}\n\nexport const INFINITY_QUERY_TOKEN = new InjectionToken<InfinityQueryDirective<any>>('INFINITY_QUERY_TOKEN');\n\n@Directive({\n selector: '[etInfinityQuery]',\n exportAs: 'etInfinityQuery',\n standalone: true,\n providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }],\n hostDirectives: [DelayableDirective],\n})\nexport class InfinityQueryDirective<\n Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments | undefined, any, unknown[]>,\n> {\n private readonly _queryConfigChanged$ = new Subject<boolean>();\n private readonly _viewContext: InfinityQueryContext<Q> = {\n $implicit: null,\n etInfinityQuery: null,\n loading: false,\n error: null,\n\n isFirstLoad: false,\n canLoadMore: false,\n currentPage: null,\n currentCalculatedPage: null,\n totalPages: null,\n itemsPerPage: null,\n\n currentQuery: null,\n };\n private _infinityQueryInstance: InfinityQueryOf<Q> | null = null;\n\n private readonly _destroy$ = createDestroy();\n private readonly _cdr = inject(ChangeDetectorRef);\n private readonly _viewContainerRef = inject(ViewContainerRef);\n private readonly _mainTemplateRef = inject(TemplateRef<InfinityQueryContext<Q>>);\n private readonly _errorHandler = inject(ErrorHandler);\n private readonly _delayable = inject(DelayableDirective, { host: true });\n\n private readonly _data$ = new BehaviorSubject<Q['response']['arrayType']>([]);\n\n @Input('etInfinityQuery')\n get infinityQuery(): Q {\n return this._infinityQuery;\n }\n set infinityQuery(v: Q) {\n this._cleanup();\n\n this._infinityQuery = v;\n this._infinityQueryInstance = this._setupInfinityQuery(v);\n this._infinityQueryInstance.nextPage();\n }\n private _infinityQuery!: Q;\n\n get context() {\n return this._viewContext;\n }\n\n get instance() {\n return this._infinityQueryInstance;\n }\n\n get data$() {\n return this._data$.asObservable();\n }\n\n data = toSignal(this._data$, { requireSync: true });\n\n static ngTemplateContextGuard<\n Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments | undefined, any, unknown[]>,\n >(dir: InfinityQueryDirective<Q>, ctx: unknown): ctx is InfinityQueryContext<Q> {\n return true;\n }\n\n constructor() {\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);\n }\n\n private _setupInfinityQuery(config: Q) {\n const instance = new InfinityQuery(config, this._destroy$) as InfinityQueryOf<Q>;\n\n combineLatest([\n instance.currentQuery$.pipe(switchQueryState(), withLatestFrom(instance.currentQuery$)),\n this._delayable.isDelayed$,\n instance.data$,\n ])\n .pipe(\n tap(([[state, currentQuery], isDelayed, infinityArray]) => {\n this._viewContext.currentPage = instance.currentPage;\n this._viewContext.totalPages = instance.totalPages;\n this._viewContext.itemsPerPage = instance.itemsPerPage;\n this._viewContext.canLoadMore =\n (instance.totalPages !== null &&\n instance.currentPage !== null &&\n instance.totalPages > instance.currentPage) ||\n false;\n this._viewContext.currentCalculatedPage = instance.currentCalculatedPage;\n this._viewContext.currentQuery = currentQuery;\n\n if (isQueryStateLoading(state) || isDelayed || !infinityArray) {\n this._viewContext.loading = state ? state.meta.triggeredVia !== 'poll' : true;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = this.context.etInfinityQuery === null;\n } else if (isQueryStateFailure(state)) {\n this._viewContext.loading = false;\n this._viewContext.error = state.error;\n this._viewContext.isFirstLoad = false;\n\n if (isLegacyQuery(currentQuery)) {\n this._errorHandler.handleError(state.error.httpErrorResponse);\n }\n } else if (isQueryStateSuccess(state)) {\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = false;\n this._viewContext.etInfinityQuery = this._viewContext.$implicit =\n infinityArray as Q['response']['arrayType'];\n this._data$.next(infinityArray);\n }\n\n this._cdr.markForCheck();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._queryConfigChanged$),\n )\n .subscribe();\n\n return instance;\n }\n\n loadNextPage() {\n if (!this._infinityQueryInstance) {\n return;\n }\n\n if (this._viewContext.loading) {\n return;\n }\n\n this._infinityQueryInstance.nextPage();\n }\n\n reset(newConfig?: Omit<Q, 'queryCreator' | 'response'>) {\n if (!this._infinityQueryInstance) {\n return;\n }\n\n this._infinityQueryInstance.reset(newConfig as any);\n }\n\n private _cleanup() {\n this._queryConfigChanged$.next(true);\n\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.etInfinityQuery = null;\n this._viewContext.$implicit = null;\n\n this._viewContext.isFirstLoad = false;\n this._viewContext.canLoadMore = false;\n this._viewContext.currentPage = null;\n this._viewContext.itemsPerPage = null;\n this._viewContext.totalPages = null;\n\n this._viewContext.currentQuery = null;\n\n this._data$.next([]);\n }\n}\n","import { Directive, ElementRef, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { fromEvent, Subject, takeUntil } from 'rxjs';\nimport { INFINITY_QUERY_TOKEN } from './infinity-query.directive';\n\n@Directive({\n selector: '[etInfinityQueryTrigger], et-infinity-query-trigger',\n standalone: true,\n})\nexport class InfinityQueryTriggerDirective implements OnInit, OnDestroy {\n private _elementRef = inject(ElementRef<HTMLElement>);\n private _infinityQuery = inject(INFINITY_QUERY_TOKEN);\n\n private _destroy = new Subject<boolean>();\n private _observer: IntersectionObserver | null = null;\n\n click$ = fromEvent(this._elementRef.nativeElement, 'click');\n\n @Input()\n scrollContainerSelector: string | null = null;\n\n ngOnInit(): void {\n const isInteractive = this._elementRef.nativeElement.tagName === 'BUTTON';\n\n if (isInteractive) {\n this.click$.pipe(takeUntil(this._destroy)).subscribe(() => this._infinityQuery.loadNextPage());\n } else {\n this._setupIntersectionObserver();\n }\n }\n\n ngOnDestroy(): void {\n this._destroy.next(true);\n this._destroy.unsubscribe();\n this._observer?.disconnect();\n }\n\n private _setupIntersectionObserver(): void {\n this._observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n\n if (!entry) return;\n\n if (entry.isIntersecting && !this._infinityQuery.context.loading) {\n this._infinityQuery.loadNextPage();\n }\n },\n {\n root: this.scrollContainerSelector ? document.querySelector(this.scrollContainerSelector) : null,\n rootMargin: '0px',\n threshold: [0.25, 0.5, 0.75, 1],\n },\n );\n\n this._observer.observe(this._elementRef.nativeElement);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AnyQuery } from '../../query';\n\n@Pipe({ name: 'queryShortName', standalone: true })\nexport class QueryShortNamePipe implements PipeTransform {\n transform(value: AnyQuery) {\n const route = value._routeWithParams;\n\n if (typeof route === 'string') {\n // given an url that looks like this: https://api.github.com/repos/EladBezalel/etimo-achievements or https://api.github.com/repos/EladBezalel/etimo-achievements?test=1&test2=2\n // we want to extract the last 3 parts of the url, so we get: repos/EladBezalel/etimo-achievements\n\n const parts = route.split('/');\n\n if (parts.length > 3) {\n return `.../${parts.slice(parts.length - 3).join('/')}`;\n }\n\n return route;\n }\n\n return route as string;\n }\n}\n","import { InjectionToken, isDevMode } from '@angular/core';\nimport { QueryClient } from '../../query-client';\n\nexport interface QueryClientDevtoolsOptions {\n displayName?: string;\n client: QueryClient;\n}\n\nexport const QUERY_CLIENT_DEVTOOLS_TOKEN = new InjectionToken<QueryClientDevtoolsOptions[]>(\n 'QUERY_CLIENT_DEVTOOLS_TOKEN',\n);\n\nexport const provideQueryClientForDevtools = (queryClient: QueryClientDevtoolsOptions) => {\n if (!isDevMode()) {\n console.warn(\n 'You are using the Query Devtools in production mode. This increases the size of your bundle and should only be used for development purposes.',\n );\n }\n\n return {\n provide: QUERY_CLIENT_DEVTOOLS_TOKEN,\n useValue: queryClient,\n multi: true,\n };\n};\n","import { AsyncPipe, JsonPipe, NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n TrackByFunction,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n signal,\n untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { createDestroy, nextFrame } from '@ethlete/core';\nimport { BehaviorSubject, map, of, startWith, switchMap, takeUntil, tap } from 'rxjs';\nimport { BasicAuthProvider, CustomHeaderAuthProvider, isBearerAuthProvider } from '../../../auth';\nimport { QueryDirective } from '../../../directives';\nimport { EntityStore } from '../../../entity';\nimport { AnyQuery, isGqlQueryConfig } from '../../../query';\nimport { QueryShortNamePipe } from '../../pipes';\nimport { QUERY_CLIENT_DEVTOOLS_TOKEN, QueryClientDevtoolsOptions } from '../../utils';\n\ntype QueryDevtoolsSnapLayout = 'full' | 'left' | 'right' | 'bottom' | 'top';\ntype QueryListMode = 'live' | 'history';\ntype QueryViewMode = 'query' | 'authProvider';\n\n@Component({\n selector: 'et-query-devtools',\n templateUrl: './query-devtools.component.html',\n styleUrls: ['./query-devtools.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n host: {\n class: 'et-query-devtools',\n },\n imports: [AsyncPipe, JsonPipe, ReactiveFormsModule, NgClass, QueryShortNamePipe, QueryDirective],\n})\nexport class QueryDevtoolsComponent {\n private readonly _cdr = inject(ChangeDetectorRef);\n protected readonly _destroy$ = createDestroy();\n\n protected readonly queryClientConfigs = inject(QUERY_CLIENT_DEVTOOLS_TOKEN);\n\n protected readonly isOpen = signal(false);\n protected readonly isTranslucent = signal(false);\n protected readonly snapLayout = signal<QueryDevtoolsSnapLayout>('full');\n protected readonly queryListMode = signal<QueryListMode>('live');\n protected readonly viewMode = signal<QueryViewMode>('query');\n\n protected showResponse = signal(false);\n protected showRawResponse = signal(false);\n protected showQueryConfig = signal(false);\n protected showEntityStoreValue = signal(false);\n protected showArguments = signal(false);\n\n protected selectedClientIdCtrl = new FormControl(0);\n\n protected readonly selectedClientId = toSignal(\n this.selectedClientIdCtrl.valueChanges.pipe(startWith(this.selectedClientIdCtrl.value)),\n );\n protected readonly selectedQueryId = signal<number | null>(null);\n\n protected readonly selectedClientConfig = computed(() => {\n if (this.queryClientConfigs.length === 1) {\n return this.queryClientConfigs[0]!;\n }\n\n const index = this.selectedClientId() ?? 0;\n\n const cfg = this.queryClientConfigs[index];\n\n if (!cfg) {\n return this.queryClientConfigs[0]!;\n }\n\n return cfg;\n });\n\n protected readonly queryStore = computed(() => {\n const config = this.selectedClientConfig();\n\n return config.client._store;\n });\n\n protected readonly queryStore$ = toObservable(this.queryStore);\n\n private readonly _queries$ = new BehaviorSubject<AnyQuery[]>([]);\n protected readonly queries = toSignal(this._queries$);\n\n protected readonly selectedQuery = computed(() => {\n const id = this.selectedQueryId();\n const mode = this.queryListMode();\n\n if (id === null || !mode) {\n return null;\n }\n\n if (mode === 'live') {\n return this.queries()?.find((q) => q._id === id) ?? null;\n }\n\n return this.queryHistory$.getValue()?.find((q) => q._id === id) ?? null;\n });\n\n protected readonly selectedQuery$ = toObservable(this.selectedQuery);\n\n protected selectedQueryEntityStore = computed(() => {\n const query = this.selectedQuery();\n\n if (!query) return null;\n\n return query.store as EntityStore<unknown> | null;\n });\n\n protected readonly selectedQueryEntityStore$ = toObservable(this.selectedQueryEntityStore);\n\n protected readonly selectedQueryEntityStoreValue$ = this.selectedQueryEntityStore$.pipe(\n switchMap(\n (s) =>\n s?._change$.pipe(\n startWith(''),\n map(() => {\n if (!s._dictionary) return null;\n\n return Array.from(s._dictionary).reduce(\n (obj, [key, value]) => {\n obj[key] = value;\n return obj;\n },\n {} as Record<string, unknown>,\n );\n }),\n ) ?? of(null),\n ),\n );\n\n protected readonly queryHistory$ = new BehaviorSubject<AnyQuery[]>([]);\n\n protected readonly stringifiedQueryConfig = computed(() => {\n const query = this.selectedQuery();\n\n if (!query) return null;\n\n const cfg = query._queryConfig;\n const route =\n typeof cfg.route === 'string' ? cfg.route : cfg.route ? cfg.route({}).replace(/undefined/g, ':param') : null;\n\n const sharedCfg = {\n method: cfg.method,\n secure: cfg.secure,\n route,\n reportProgress: cfg.reportProgress,\n responseType: cfg.responseType,\n withCredentials: cfg.withCredentials,\n autoRefreshOn: cfg.autoRefreshOn,\n enableSmartPolling: cfg.enableSmartPolling,\n hasEntityStore: !!cfg.entity,\n };\n\n if (isGqlQueryConfig(cfg)) {\n return {\n ...sharedCfg,\n query: cfg.query,\n transferVia: cfg.transferVia,\n };\n }\n\n return {\n ...sharedCfg,\n };\n });\n\n protected readonly authProvider = toSignal(\n toObservable(this.selectedClientConfig).pipe(switchMap((c) => c.client.authProvider$)),\n );\n\n protected readonly authProviderDetails = computed(() => {\n const provider = this.authProvider();\n\n if (!provider) return null;\n\n if (provider instanceof CustomHeaderAuthProvider) {\n return {\n type: 'CustomHeaderAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {\n name: provider._config.name,\n value: provider._config.value,\n },\n } as const;\n } else if (provider instanceof BasicAuthProvider) {\n return {\n type: 'BasicAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {\n username: provider._config.username,\n password: provider._config.password,\n },\n } as const;\n } else if (isBearerAuthProvider(provider)) {\n const refreshCfg = provider._config.refreshConfig;\n\n return {\n type: 'BearerAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {\n token: provider._config.token,\n refreshConfig: {\n refreshOnUnauthorizedResponse: refreshCfg?.refreshOnUnauthorizedResponse ?? 'true (default)',\n token: refreshCfg?.token,\n cookieName: refreshCfg?.cookieName,\n cookieDomain: refreshCfg?.cookieDomain ?? 'current origin (default)',\n cookieExpiresInDays: refreshCfg?.cookieExpiresInDays ?? '30 (default)',\n cookiePath: refreshCfg?.cookiePath ?? '/ (default)',\n cookieEnabled: refreshCfg?.cookieEnabled ?? 'true (default)',\n cookieSameSite: refreshCfg?.cookieSameSite ?? 'lax (default)',\n refreshBuffer: refreshCfg?.refreshBuffer ?? '30000 (default)',\n expiresInPropertyName: refreshCfg?.expiresInPropertyName ?? 'exp (default)',\n strategy: refreshCfg?.strategy ?? 'AuthBearerRefreshStrategy.BeforeExpiration (default)',\n requestArgsAdapter: refreshCfg?.requestArgsAdapter ? 'custom' : 'default',\n responseAdapter: refreshCfg?.responseAdapter ? 'custom' : 'default',\n },\n },\n } as const;\n } else {\n return {\n type: 'UnknownAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {},\n } as const;\n }\n });\n\n constructor() {\n this.selectedClientIdCtrl.valueChanges\n .pipe(\n tap(() => this.clearQueryHistory()),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n this.selectedQuery$\n .pipe(\n switchMap((q) => q?._dependentsChanged$ ?? of(null)),\n tap(() => this._cdr.markForCheck()),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n toObservable(this.authProviderDetails)\n .pipe(switchMap((ap) => (ap?.type === 'BearerAuthProvider' ? ap.provider.tokens$ : of(null))))\n .pipe(\n tap(() => this._cdr.markForCheck()),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n this.queryStore$\n .pipe(\n switchMap((s) =>\n s.storeChange$.pipe(\n startWith(''),\n map(() => s._store),\n tap((s) => {\n untracked(() => {\n this._queries$.next(Array.from(s.values()));\n });\n }),\n takeUntil(this._destroy$),\n ),\n ),\n )\n .subscribe();\n\n this.queryStore$\n .pipe(\n switchMap((s) =>\n s.queryCreated$.pipe(\n tap((query) => {\n const currentHistory = this.queryHistory$.getValue();\n\n if (!currentHistory) return;\n\n const currentHistoryClone = [...currentHistory];\n\n if (!currentHistory.some((q) => q._id === query._id)) {\n currentHistoryClone.unshift(query);\n }\n\n currentHistoryClone.splice(50);\n\n this.queryHistory$.next(currentHistoryClone);\n }),\n takeUntil(this._destroy$),\n ),\n ),\n )\n .subscribe();\n\n this._queries$\n .pipe(\n tap((queries) => {\n const currentHistory = this.queryHistory$.getValue();\n\n if (!queries || !currentHistory) return;\n\n const currentHistoryClone = [...currentHistory];\n\n for (const query of queries) {\n if (!currentHistoryClone.some((q) => q._id === query._id)) {\n currentHistoryClone.unshift(query);\n }\n }\n\n currentHistoryClone.splice(50);\n\n this.queryHistory$.next(currentHistoryClone);\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n effect(() => {\n const devtoolConfig = {\n isOpen: this.isOpen(),\n isTranslucent: this.isTranslucent(),\n snapLayout: this.snapLayout(),\n showResponse: this.showResponse(),\n showRawResponse: this.showRawResponse(),\n showQueryConfig: this.showQueryConfig(),\n showEntityStoreValue: this.showEntityStoreValue(),\n showArguments: this.showArguments(),\n selectedClientId: this.selectedClientId(),\n selectedQueryPath: this.selectedQueryId(),\n queryListMode: this.queryListMode(),\n viewMode: this.viewMode(),\n };\n\n window.localStorage.setItem('ethlete:query:devtools', JSON.stringify(devtoolConfig));\n });\n\n const initialConfig = window.localStorage.getItem('ethlete:query:devtools');\n\n if (initialConfig) {\n const parsed = JSON.parse(initialConfig);\n\n this.isOpen.set(parsed.isOpen ?? false);\n this.isTranslucent.set(parsed.isTranslucent ?? false);\n this.snapLayout.set(parsed.snapLayout ?? 'full');\n this.showResponse.set(parsed.showResponse ?? false);\n this.showRawResponse.set(parsed.showRawResponse ?? false);\n this.showQueryConfig.set(parsed.showQueryConfig ?? false);\n this.showEntityStoreValue.set(parsed.showEntityStoreValue ?? false);\n this.showArguments.set(parsed.showArguments ?? false);\n this.selectedClientIdCtrl.setValue(parsed.selectedClientId ?? 0);\n this.selectedQueryId.set(parsed.selectedQueryPath ?? null);\n this.queryListMode.set(parsed.queryListMode ?? 'live');\n this.viewMode.set(parsed.viewMode ?? 'query');\n }\n }\n\n protected trackByClient: TrackByFunction<QueryClientDevtoolsOptions> = (_, { client }) => client.config.baseRoute;\n protected trackByQuery: TrackByFunction<AnyQuery> = (_, { _id }) => _id;\n\n protected toggleOpen() {\n this.isOpen.set(!this.isOpen());\n }\n\n protected toggleTranslucent() {\n this.isTranslucent.set(!this.isTranslucent());\n }\n\n protected toggleShowResponse() {\n this.showResponse.set(!this.showResponse());\n\n nextFrame(() => {\n this._cdr.markForCheck();\n });\n }\n\n protected toggleShowQueryConfig() {\n this.showQueryConfig.set(!this.showQueryConfig());\n }\n\n protected toggleShowRawResponse() {\n this.showRawResponse.set(!this.showRawResponse());\n }\n\n protected toggleShowEntityStoreValue() {\n this.showEntityStoreValue.set(!this.showEntityStoreValue());\n }\n\n protected toggleShowArguments() {\n this.showArguments.set(!this.showArguments());\n }\n\n protected selectSnapLayout(layout: QueryDevtoolsSnapLayout) {\n this.snapLayout.set(layout);\n }\n\n protected selectQueryListMode(mode: QueryListMode) {\n this.queryListMode.set(mode);\n }\n\n protected selectViewMode(mode: QueryViewMode) {\n this.viewMode.set(mode);\n }\n\n protected selectQuery(query: AnyQuery) {\n this.selectedQueryId.set(query._id);\n }\n\n protected clearQueryHistory() {\n this.queryHistory$.next([]);\n }\n}\n","@if (!isOpen()) {\n <button (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Query Devtools</button>\n}\n\n@if (isOpen()) {\n <div\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n >\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n @for (clientConfig of queryClientConfigs; track trackByClient(i, clientConfig); let i = $index) {\n <option [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n }\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n }\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Inspector</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' || viewMode() !== 'query' }\"\n (click)=\"selectQueryListMode('live'); selectViewMode('query')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live Queries ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' || viewMode() !== 'query' }\"\n (click)=\"selectQueryListMode('history'); selectViewMode('query')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Query History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)\n </button>\n @if (queryListMode() === 'history' && viewMode() === 'query') {\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n }\n\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': viewMode() !== 'authProvider' }\"\n (click)=\"selectViewMode('authProvider')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Auth Provider\n </button>\n </div>\n\n @if (viewMode() === 'query') {\n <div class=\"et-qd-queries__browser\">\n @if (queryListMode() === 'live') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queries(); track trackByQuery($index, query)) {\n <li>\n <button\n [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\"\n (click)=\"selectQuery(query)\"\n >\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n @if (queryListMode() === 'history') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queryHistory$ | async; track trackByQuery($index, query)) {\n <li>\n <button\n [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\"\n (click)=\"selectQuery(query)\"\n >\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n <div class=\"et-qd-queries__browser-detail\">\n @if (selectedQuery(); as query) {\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n @if (query.isPolling || query._isPollingPaused) {\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n }\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Dependents</p>\n <pre>{{ query._dependents | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query store key</p>\n <pre>{{ query._queryStoreKey }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showArguments()) {\n <pre>{{ query._arguments | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showResponse()) {\n <pre>{{ query.state$ | async | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showRawResponse()) {\n <pre>{{ query.rawState | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showQueryConfig()) {\n <pre>{{ stringifiedQueryConfig() | json }}</pre>\n }\n </div>\n\n @if (!!query._queryConfig.entity) {\n <div class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showEntityStoreValue()) {\n <pre>{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n } @else if (viewMode() === 'authProvider') {\n <div class=\"et-qd-auth-provider__viewer\">\n @if (authProviderDetails(); as details) {\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>Type</p>\n <pre>{{ details.type }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Header value</p>\n <pre>{{ details.header() | json }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Config</p>\n <pre>{{ details.config | json }}</pre>\n </div>\n\n @if (details.type === 'BearerAuthProvider') {\n <div class=\"et-qd-list-item\">\n <p>Tokens</p>\n <pre>{{ details.provider.tokens$ | async | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Should refresh on unauthorized response</p>\n <pre>{{ details.provider.shouldRefreshOnUnauthorizedResponse }}</pre>\n </div>\n\n <ng-container\n *etQuery=\"\n details.provider.currentRefreshQuery$ | async as response;\n loading as loading;\n error as error;\n query as query\n \"\n >\n <div class=\"et-qd-list-item\">\n <p>Refresh query response</p>\n\n <div>\n <button (click)=\"details.provider._refreshQuery()\" class=\"et-qd-chip et-qd-chip-bordered\">\n Refresh\n </button>\n </div>\n <pre>{{ response | json }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Refresh query loading</p>\n <pre>{{ loading }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Refresh query error</p>\n <pre>{{ error ?? 'null' }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <pre>{{ query?.state$ | async | json }}</pre>\n </div>\n </ng-container>\n }\n </div>\n } @else {\n <p>No auth provider set</p>\n }\n </div>\n }\n </div>\n }\n </div>\n}\n","import { Observable, Subject, debounceTime, filter, map, shareReplay, startWith } from 'rxjs';\nimport { EntityKey, EntityStoreConfig } from './entity.types';\n\nclass EntityStoreError extends Error {\n constructor(\n message: string,\n public detail?: unknown,\n ) {\n super(message);\n this.name = 'EntityStoreError';\n }\n}\n\nfunction flatten<T>(arr: T[][]): T[] {\n return arr.reduce((acc, val) => acc.concat(val), []);\n}\n\nexport class EntityStore<T> {\n /**\n * @internal\n */\n readonly _dictionary = new Map<EntityKey, T>();\n\n /**\n * @internal\n */\n readonly _change$ = new Subject<EntityKey | EntityKey[]>();\n\n constructor(private readonly _config: EntityStoreConfig) {}\n\n select(key: EntityKey): Observable<T | null>;\n select(keys: EntityKey[]): Observable<T[]>;\n select(keys: EntityKey[][]): Observable<T[]>;\n select(keyOrKeys: EntityKey | EntityKey[] | EntityKey[][]): Observable<T | null> | Observable<T[]> {\n if (Array.isArray(keyOrKeys)) {\n const _keys = this._normalizeKeys(keyOrKeys);\n return this._selectMany(_keys as EntityKey[]);\n }\n\n return this._select(keyOrKeys);\n }\n\n /**\n * **Note:** Prefer `select` over `selectWhere` when possible.\n */\n selectWhere(predicate: (value: T) => boolean): Observable<T[]> {\n return this._change$.pipe(\n startWith(null),\n debounceTime(0),\n map(() => Array.from(this._dictionary.values()).filter(predicate)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n set(key: EntityKey, value: T): void;\n set(keys: EntityKey[], values: T[]): void;\n set(keys: EntityKey[][], values: T[][]): void;\n set(keyOrKeys: EntityKey | EntityKey[] | EntityKey[][], valueOrValues: T | T[] | T[][]) {\n const _keys = this._normalizeKeys(keyOrKeys);\n\n if (Array.isArray(_keys)) {\n if (!Array.isArray(valueOrValues)) {\n throw new EntityStoreError('When setting multiple keys, values must be an array', {\n keyOrValues: _keys,\n valueOrValues,\n });\n }\n\n const _values = (Array.isArray(valueOrValues[0]) ? flatten(valueOrValues as T[][]) : valueOrValues) as T[];\n\n for (let i = 0; i < _keys.length; i++) {\n const k = _keys[i];\n const v = _values[i];\n\n if (k === undefined || v === undefined) continue;\n\n this._set(k, v);\n }\n } else {\n this._set(_keys, valueOrValues as T);\n }\n\n this._change$.next(_keys);\n }\n\n remove(key: EntityKey): void;\n remove(keys: EntityKey[]): void;\n remove(keys: EntityKey[][]): void;\n remove(keyOrKeys: EntityKey | EntityKey[] | EntityKey[][]) {\n const _keys = this._normalizeKeys(keyOrKeys);\n\n if (Array.isArray(_keys)) {\n for (const key of _keys) {\n this._remove(key);\n }\n } else {\n this._remove(_keys);\n }\n\n this._change$.next(_keys);\n }\n\n logState() {\n console.log('EntityStore:', this._config.name, {\n dictionary: this._dictionary,\n });\n }\n\n private _select(key: EntityKey): Observable<T | null> {\n if (this._config.logActions) {\n console.log('EntityStore: select', this._config.name, key);\n }\n\n return this._change$.pipe(\n startWith(null),\n filter((v) => {\n if (v === null) {\n return true;\n }\n\n if (Array.isArray(v)) {\n return v.includes(key);\n }\n\n return v === key;\n }),\n map(() => this._dictionary.get(key) ?? null),\n );\n }\n\n private _selectMany(keys: EntityKey[]): Observable<T[]> {\n if (this._config.logActions) {\n console.log('EntityStore: selectMany', this._config.name, keys);\n }\n\n return this._change$.pipe(\n startWith(null),\n filter((v) => {\n if (v === null) {\n return true;\n }\n\n if (Array.isArray(v)) {\n return keys.some((key) => v.includes(key));\n }\n\n return keys.includes(v);\n }),\n map(() => keys.map((key) => this._dictionary.get(key)).filter((value): value is T => value !== undefined)),\n );\n }\n\n private _set(key: EntityKey, value: T) {\n if (this._config.logActions) {\n console.log('EntityStore: set', this._config.name, key, value);\n }\n\n this._dictionary.set(key, value);\n }\n\n private _remove(key: EntityKey) {\n if (this._config.logActions) {\n console.log('EntityStore: remove', this._config.name, key);\n }\n\n this._dictionary.delete(key);\n }\n\n private _normalizeKeys(keys: EntityKey | EntityKey[] | EntityKey[][]): EntityKey | EntityKey[] {\n if (Array.isArray(keys)) {\n if (Array.isArray(keys[0])) {\n return flatten(keys as EntityKey[][]);\n }\n\n return keys as EntityKey[];\n }\n\n return keys;\n }\n}\n","import { Paginated } from '@ethlete/types';\nimport { map, of, switchMap, take, tap } from 'rxjs';\nimport { EntityStore } from './entity-store';\nimport { EntityKey, InsertFromConfig, RemoveFromConfig } from './entity.types';\n\nexport function mapToPaginated<T>(response: Paginated<T>) {\n return map((items) => ({ ...response, items }) as Paginated<T>);\n}\n\n// FIXME: This breaks if SubStoreType is an array\n/**\n * Use an other store to represent a property of the current entity.\n */\nexport const insertFrom = <\n OriginStoreType,\n OriginKeys extends keyof NonNullable<OriginStoreType>,\n SubStoreType extends NonNullable<OriginStoreType>[OriginKeys] extends Array<infer U>\n ? U\n : NonNullable<OriginStoreType>[OriginKeys],\n IdFn extends (value: NonNullable<OriginStoreType>) => EntityKey | EntityKey[],\n ComputedEntityType extends ReturnType<IdFn> extends Array<unknown>\n ? OriginStoreType\n : Omit<OriginStoreType, OriginKeys> & { [K in OriginKeys]: SubStoreType | null },\n>(\n store: EntityStore<SubStoreType>,\n { for: key, id }: InsertFromConfig<OriginStoreType, OriginKeys, IdFn>,\n) =>\n switchMap((value: OriginStoreType) => {\n if (!value) return of(null);\n\n const ids = id(value);\n\n if (Array.isArray(ids)) {\n return store.select(ids).pipe(map((data) => ({ ...value, [key]: data }) as ComputedEntityType));\n } else {\n return store.select(ids).pipe(map((data) => ({ ...value, [key]: data }) as ComputedEntityType));\n }\n });\n\n/**\n * Remove entities from a store based on a where function.\n */\nexport const removeFrom = <T>(store: EntityStore<T>, { where, id }: RemoveFromConfig<T>) => {\n store\n .selectWhere(where)\n .pipe(\n tap((entities) => store.remove(entities.map(id))),\n take(1),\n )\n .subscribe();\n};\n","export const transformToString = (value: unknown) => {\n if (typeof value === 'string') {\n return value;\n }\n\n return null;\n};\n\nexport const transformToStringArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToString).filter(Boolean) as string[];\n } else if (typeof value === 'string') {\n return [transformToString(value)] as string[];\n }\n\n return null;\n};\n\nexport const transformToNumber = (value: unknown) => {\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n return Number(value);\n }\n return null;\n};\n\nexport const transformToNumberArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToNumber).filter((item) => item !== null) as number[];\n } else if (typeof value === 'number') {\n return [value] as number[];\n }\n\n return null;\n};\n\nexport const transformToBoolean = (value: unknown) => {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n return value === 'true' || value === '1';\n }\n return null;\n};\n\nexport const transformToBooleanArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToBoolean).filter((item) => item !== null) as boolean[];\n } else if (typeof value === 'string' || typeof value === 'boolean') {\n return [transformToBoolean(value)] as boolean[];\n }\n\n return null;\n};\n\nexport const transformToDate = (value: unknown) => {\n if (value instanceof Date) {\n return value;\n }\n if (typeof value === 'string') {\n const date = new Date(value);\n\n if (isNaN(date.getTime())) {\n return null;\n }\n\n return date;\n }\n return null;\n};\n\nexport const transformToDateArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToDate).filter((item) => item !== null) as Date[];\n } else if (typeof value === 'string' || value instanceof Date) {\n return [transformToDate(value)] as Date[];\n }\n\n return null;\n};\n\nexport type SortDirection = 'asc' | 'desc' | '';\n\nexport interface Sort {\n active: string;\n direction: SortDirection;\n}\n\nexport const transformToSort = (value: unknown): Sort | null => {\n if (typeof value === 'string') {\n const [active, direction] = value.split(':');\n\n if (!active) {\n return null;\n }\n\n return {\n active,\n direction: direction as 'asc' | 'desc',\n };\n }\n\n return null;\n};\n\nexport const transformToSortQueryParam = (value: unknown) => {\n if (typeof value === 'string') {\n return value;\n }\n if (value && typeof value === 'object' && 'active' in value && 'direction' in value) {\n const valAsSort = value as {\n active: string;\n direction: 'asc' | 'desc';\n };\n\n return valAsSort.direction ? `${valAsSort.active}:${valAsSort.direction}` : null;\n }\n\n return null;\n};\n","import { DestroyRef, NgZone, assertInInjectionContext, inject, isDevMode } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n ET_PROPERTY_REMOVED,\n clone,\n createDestroy,\n equal,\n injectQueryParamChanges,\n injectQueryParams,\n} from '@ethlete/core';\nimport { BehaviorSubject, Subject, debounceTime, map, merge, of, switchMap, takeUntil, tap, timer } from 'rxjs';\nimport {\n OptionalQueryFieldOptions,\n QueryFieldOptions,\n QueryFormGroup,\n QueryFormGroupControls,\n QueryFormObserveOptions,\n QueryFormValue,\n QueryFormValueEvent,\n QueryFormWriteOptions,\n} from './query-form.types';\nimport {\n Sort,\n transformToBoolean,\n transformToBooleanArray,\n transformToDate,\n transformToDateArray,\n transformToNumber,\n transformToNumberArray,\n transformToSort,\n transformToSortQueryParam,\n transformToStringArray,\n} from './query-form.utils';\n\nconst ET_ARR_PREFIX = 'ET_ARR__';\n\nexport class QueryField<T> {\n get control() {\n return this.data.control;\n }\n\n constructor(public data: QueryFieldOptions<T>) {}\n}\n\nexport class SearchQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<string | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<string | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<string | null>(null),\n debounce: 300,\n disableDebounceIfFalsy: true,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class SortQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<Sort | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<Sort | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<Sort | null>(null),\n queryParamToValueTransformFn: transformToSort,\n valueToQueryParamTransformFn: transformToSortQueryParam,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class StringArrayQueryField<T extends string[]> {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<T | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<T | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<T | null>(null),\n queryParamToValueTransformFn: transformToStringArray as (val: unknown) => T | null,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class BooleanArrayQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<boolean[] | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<boolean[] | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<boolean[] | null>(null),\n queryParamToValueTransformFn: transformToBooleanArray,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class NumberArrayQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<number[] | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<number[] | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<number[] | null>(null),\n queryParamToValueTransformFn: transformToNumberArray,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class DateQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<Date | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<Date | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<Date | null>(null),\n queryParamToValueTransformFn: transformToDate,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class DateArrayQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<Date[] | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<Date[] | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<Date[] | null>(null),\n queryParamToValueTransformFn: transformToDateArray,\n ...(_data ?? {}),\n };\n }\n}\n\nconst IGNORED_FILTER_COUNT_FIELDS = ['page', 'skip', 'take', 'limit', 'sort', 'sortBy', 'sortOrder', 'query', 'search'];\n\nexport interface QueryFormOptions {\n /**\n * A prefix to use for the query parameters. This is useful when you have multiple query forms on the same page.\n */\n queryParamPrefix?: string | (() => string);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyQueryForm = QueryForm<any>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class QueryForm<T extends Record<string, QueryField<any>>> {\n private readonly _destroy$ = createDestroy();\n private readonly _unobserveTrigger$ = new Subject<boolean>();\n private readonly _router = inject(Router);\n private readonly _activatedRoute = inject(ActivatedRoute);\n private readonly _defaultValues = this._extractDefaultValues();\n private readonly _zone = inject(NgZone);\n private readonly _didValueChanges$ = new Subject<boolean>();\n\n private _isObserving = false;\n private _skipNextResets = false;\n\n private _queryParamChanges$ = toObservable(injectQueryParamChanges());\n private _queryParams = injectQueryParams();\n\n /**\n * The angular form group that contains all the fields.\n *\n * **Do not** use any of the following methods on this form group:\n * - `setValue`: Use `QueryForm.setValue` instead.\n * - `patchValue`: Use `QueryForm.patchValue` instead.\n * - `valueChanges`: Use `QueryForm.changes$` instead.\n * - `value`: Use `QueryForm.value` instead.\n * - `controls`: Use `QueryForm.controls` instead.\n */\n readonly form = this._setupFormGroup();\n\n private readonly _lastFormValue$ = new BehaviorSubject<QueryFormValue<T> | null>(null);\n private readonly _currentFormValue$ = new BehaviorSubject<QueryFormValue<T>>(this._formValue);\n\n private get _formValue() {\n return this.form.getRawValue() as QueryFormValue<T>;\n }\n\n private get _form() {\n return this.form as unknown as QueryFormGroup;\n }\n\n private readonly _changes$ = new BehaviorSubject<QueryFormValueEvent<T>>({\n previousValue: null,\n currentValue: this.form.getRawValue() as QueryFormValue<T>,\n });\n\n readonly changes$ = this._changes$.asObservable();\n readonly currentValue$ = this._changes$.pipe(map(({ currentValue }) => currentValue));\n readonly previousValue$ = this._changes$.pipe(map(({ previousValue }) => previousValue));\n\n readonly changes = toSignal(this.changes$);\n readonly currentValue = toSignal(this.currentValue$);\n readonly previousValue = toSignal(this.previousValue$);\n\n /**\n * The number of active filters.\n *\n * Excludes the following fields by default:\n * - `page`\n * - `skip`\n * - `take`\n * - `limit`\n * - `sort`\n * - `sortBy`\n * - `sortOrder`\n * - `query`\n * - `search`\n */\n readonly activeFilterCount$ = this.changes$.pipe(\n map(\n ({ currentValue }) =>\n Object.entries(currentValue)\n .map(([key, value]) => {\n if (IGNORED_FILTER_COUNT_FIELDS.includes(key) || this._fields[key]?.data.skipInFilterCount) {\n return true;\n }\n\n return this._isDefaultValue(key, value);\n })\n .filter((v) => v === false).length,\n ),\n );\n\n get controls() {\n return this.form.controls;\n }\n\n get value() {\n return this._changes$.value.currentValue;\n }\n\n get defaultFormValue() {\n return Object.entries(this._defaultValues).reduce((acc, [key]) => {\n acc[key as keyof QueryFormValue<T>] = this._getDefaultValue(key);\n\n return acc;\n }, {} as QueryFormValue<T>);\n }\n\n // with prefix eg. page should become ${prefix}-page\n constructor(\n private _fields: T,\n private _options?: QueryFormOptions,\n ) {\n assertInInjectionContext(QueryForm);\n\n inject(DestroyRef).onDestroy(() => this._cleanup());\n }\n\n observe(options?: QueryFormObserveOptions) {\n if (this._isObserving) {\n if (isDevMode()) {\n console.warn('QueryForm.observe() was called multiple times. This is not supported.');\n }\n return this;\n }\n\n this._isObserving = true;\n\n if (options?.syncOnNavigation !== false) {\n const didChanges = this.setFormValueFromUrlQueryParams({\n queryParams: this._queryParams(),\n });\n\n if (didChanges) {\n this._handleFormChange(true);\n }\n }\n\n merge(...Object.values(this._fields).map((field) => field.control.valueChanges), this._didValueChanges$)\n .pipe(\n debounceTime(0),\n tap(() => {\n this._handleFormChange();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n )\n .subscribe();\n\n let changedFieldsInLastResetLoop: string[] = [];\n let currentUniqueChangedFields: string[] = [];\n\n this._currentFormValue$\n .pipe(\n map((currentValue) => {\n return {\n previousValue: clone(this._lastFormValue$.value),\n currentValue: clone(currentValue),\n };\n }),\n tap(({ currentValue, previousValue }) => {\n if (options?.writeToQueryParams !== false) {\n this._syncViaUrlQueryParams(currentValue, options?.replaceUrl);\n }\n\n const didResetValues = this._skipNextResets\n ? false\n : this._handleQueryFormResets(previousValue ?? null, currentValue);\n\n this._skipNextResets = false;\n\n const changedFields = Object.keys(currentValue).filter(\n (key) => !equal(previousValue?.[key], currentValue[key]),\n );\n\n if (changedFieldsInLastResetLoop.length) {\n changedFields.push(...changedFieldsInLastResetLoop);\n changedFieldsInLastResetLoop = [];\n }\n\n if (didResetValues) {\n this._didValueChanges$.next(true);\n changedFieldsInLastResetLoop = changedFields;\n }\n\n currentUniqueChangedFields = [...new Set(changedFields)];\n }),\n switchMap(({ currentValue, previousValue }) => {\n if (changedFieldsInLastResetLoop.length) return of(null).pipe(map(() => ({ currentValue, previousValue })));\n\n const debounceValues = currentUniqueChangedFields.map((key) => {\n const field = this._fields[key];\n\n if (!field) return null;\n\n if (field.data.disableDebounceIfFalsy === true && !currentValue[key]) {\n return null;\n }\n\n return field.data.debounce ?? null;\n });\n\n currentUniqueChangedFields = [];\n\n if (debounceValues.some((v) => v === null) || !debounceValues.length) {\n return of(null).pipe(map(() => ({ currentValue, previousValue })));\n }\n\n const shortestDebounceTime = Math.min(...debounceValues.filter((v): v is number => v !== null));\n\n return timer(shortestDebounceTime).pipe(map(() => ({ currentValue, previousValue })));\n }),\n tap(({ currentValue, previousValue }) => {\n if (changedFieldsInLastResetLoop.length) return;\n\n this._changes$.next({\n previousValue: previousValue ?? null,\n currentValue: currentValue,\n });\n }),\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n )\n .subscribe();\n\n if (options?.syncOnNavigation !== false) {\n this._queryParamChanges$\n .pipe(\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n tap((changes) => {\n const didValueChanges = this.setFormValueFromUrlQueryParams({ queryParams: changes });\n\n if (didValueChanges) {\n this._didValueChanges$.next(true);\n }\n }),\n )\n .subscribe();\n }\n\n return this;\n }\n\n private _handleQueryFormResets(previousValue: QueryFormValue<T> | null, currentValue: QueryFormValue<T>) {\n let didResetValues = false;\n\n for (const formFieldKey in this._fields) {\n const field = this._fields[formFieldKey];\n\n if (!field) continue;\n\n const resets = field.data.isResetBy;\n\n if (!resets) continue;\n\n const resetConditionKeys = Array.isArray(resets) ? resets : [resets];\n\n for (const resetConditionKey of resetConditionKeys) {\n if (!(resetConditionKey in this._fields)) {\n if (isDevMode()) {\n console.warn(`The field \"${resetConditionKey}\" is not defined in the QueryForm. Is it a typo?`, this);\n }\n\n continue;\n }\n\n if (\n previousValue &&\n currentValue &&\n !equal(previousValue[resetConditionKey], currentValue[resetConditionKey])\n ) {\n const defaultValueForKeyToReset = this._getDefaultValue(formFieldKey);\n const currentValueForKeyToReset = currentValue[formFieldKey];\n\n if (equal(defaultValueForKeyToReset, currentValueForKeyToReset)) {\n continue;\n }\n\n this.form.controls[formFieldKey].setValue(defaultValueForKeyToReset);\n\n didResetValues = true;\n\n break;\n }\n }\n }\n\n return didResetValues;\n }\n\n unobserve() {\n this._unobserveTrigger$.next(true);\n this._cleanup();\n }\n\n setFormValueFromUrlQueryParams(options: { queryParams: Record<string, unknown> }) {\n let didValueChanges = false;\n\n for (const [key, field] of Object.entries(this._fields)) {\n const value = options.queryParams[this._transformKeyToQueryParam(key)];\n\n const valueDoesNotExist = value === undefined;\n\n if (valueDoesNotExist) continue;\n\n const valueGotRemoved = value === ET_PROPERTY_REMOVED;\n\n if (valueGotRemoved) {\n field.control.setValue(this._getDefaultValue(key), { emitEvent: false });\n didValueChanges = true;\n\n continue;\n }\n let deserializedValue = value;\n\n if (field.data.queryParamToValueTransformFn) {\n deserializedValue = field.data.queryParamToValueTransformFn(value);\n } else if (!field.data.skipAutoTransform) {\n const defaultIsNum = this._getDefaultValue(key) === 'number';\n const valueIsNum = !isNaN(Number(value));\n const valueContainsWhitespace = typeof value === 'string' && value.trim() !== value;\n const valueHasLeadingZero = typeof value === 'string' && value.startsWith('0');\n const valueEndsWithDot = typeof value === 'string' && value.endsWith('.');\n\n const defaultIsBool = this._getDefaultValue(key) === 'boolean';\n const valueIsBool = value === 'true' || value === 'false';\n\n if (defaultIsNum || (valueIsNum && !valueContainsWhitespace && !valueHasLeadingZero && !valueEndsWithDot)) {\n deserializedValue = transformToNumber(value);\n } else if (defaultIsBool || valueIsBool) {\n deserializedValue = transformToBoolean(value);\n }\n }\n\n const valueIsEqualToCurrent = equal(deserializedValue, field.control.value);\n\n if (valueIsEqualToCurrent) continue;\n\n field.control.setValue(deserializedValue, { emitEvent: false });\n didValueChanges = true;\n }\n\n return didValueChanges;\n }\n\n setValue(value: QueryFormValue<T>, options?: QueryFormWriteOptions) {\n this._form._setValue(value, options);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n patchValue(value: Partial<QueryFormValue<T>>, options?: QueryFormWriteOptions) {\n this._form._patchValue(value, options);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n resetFieldToDefault(key: keyof QueryFormValue<T>, options?: QueryFormWriteOptions) {\n const defaultValue = this._getDefaultValue(key as string);\n\n this.form.controls[key].setValue(defaultValue);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n resetFieldsToDefault(keys: (keyof QueryFormValue<T>)[], options?: QueryFormWriteOptions) {\n const defaults = keys.reduce(\n (acc, key) => {\n acc[key] = this._getDefaultValue(key as string);\n\n return acc;\n },\n {} as Partial<QueryFormValue<T>>,\n );\n\n this.patchValue(defaults);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n resetAllFieldsToDefault(options?: QueryFormWriteOptions & { skipFields?: (keyof QueryFormValue<T>)[] }) {\n const keys = Object.keys(this._fields) as (keyof QueryFormValue<T>)[];\n\n if (options?.skipFields) {\n for (const key of options.skipFields) {\n const index = keys.indexOf(key);\n\n if (index !== -1) {\n keys.splice(index, 1);\n }\n }\n }\n\n this.resetFieldsToDefault(keys, options);\n }\n\n private _getDefaultValue(key: string) {\n const val = this._defaultValues[key];\n\n if (typeof val === 'string' && val.startsWith(ET_ARR_PREFIX)) {\n return JSON.parse(val.slice(ET_ARR_PREFIX.length));\n } else if (typeof val === 'function') {\n return val();\n }\n\n return val ?? null;\n }\n\n private _transformKeyToQueryParam(key: string) {\n if (!this._options?.queryParamPrefix) return key;\n\n const prefix =\n typeof this._options?.queryParamPrefix === 'string'\n ? this._options.queryParamPrefix\n : this._options.queryParamPrefix();\n\n return `${prefix}-${key}`;\n }\n\n private _isDefaultValue(key: string, value: unknown) {\n const normalizedValue = Array.isArray(value) ? `${ET_ARR_PREFIX}${JSON.stringify(value)}` : value;\n\n return this._getDefaultValue(key) === normalizedValue;\n }\n\n private _setupFormGroup() {\n const group = new FormGroup({} as QueryFormGroupControls<T>) as unknown as QueryFormGroup;\n\n for (const [key, field] of Object.entries(this._fields)) {\n group.addControl(key, field.control);\n }\n\n group._patchValue = group.patchValue;\n group._setValue = group.setValue;\n\n group.patchValue = this.patchValue.bind(this);\n group.setValue = this.setValue.bind(this);\n\n return group as unknown as FormGroup<QueryFormGroupControls<T>>;\n }\n\n private _extractDefaultValues() {\n const defaultValues: Record<string, unknown> = {};\n\n for (const [key, field] of Object.entries(this._fields)) {\n const value = field.data.defaultValue !== undefined ? field.data.defaultValue : field.control.value;\n\n if (Array.isArray(value)) {\n defaultValues[key] = `${ET_ARR_PREFIX}${JSON.stringify(value)}`;\n } else {\n defaultValues[key] = value;\n }\n }\n\n return defaultValues;\n }\n\n private _syncViaUrlQueryParams(values: QueryFormValue<T>, replaceUrl?: boolean) {\n const queryParams = { ...clone(this._activatedRoute.snapshot.queryParams) };\n\n for (const [key, value] of Object.entries(values)) {\n const queryParamKey = this._transformKeyToQueryParam(key);\n const field = this._fields[key];\n\n if (!field) {\n continue;\n }\n\n const isDefault = this._isDefaultValue(key, value);\n const writeDefaultToUrl = field.data.appendDefaultValueToUrl === true;\n const writeToUrl = field.data.appendToUrl !== false;\n\n if (!writeToUrl || (isDefault && !writeDefaultToUrl)) {\n queryParams[queryParamKey] = undefined;\n } else {\n queryParams[queryParamKey] = field.data.valueToQueryParamTransformFn\n ? field.data.valueToQueryParamTransformFn?.(value)\n : value;\n }\n }\n\n this._zone.run(() => {\n queueMicrotask(() => {\n this._router.navigate([], {\n queryParams,\n replaceUrl,\n queryParamsHandling: 'merge',\n });\n });\n });\n }\n\n private _handleFormChange(forceOverwrite = false) {\n const currentVal = clone(this._currentFormValue$.value);\n const newVal = clone(this._formValue);\n\n if (equal(currentVal, newVal)) {\n return;\n }\n\n if (forceOverwrite) {\n this._lastFormValue$.next(newVal);\n } else {\n this._lastFormValue$.next(currentVal);\n }\n\n this._currentFormValue$.next(newVal);\n }\n\n private _cleanup() {\n if (!this._isObserving) return;\n\n this._isObserving = false;\n\n const queryParamKeys = Object.keys(this._fields);\n const queryParams = queryParamKeys.reduce(\n (acc, key) => {\n acc[this._transformKeyToQueryParam(key)] = undefined;\n return acc;\n },\n {} as Record<string, unknown>,\n );\n this._zone.run(() => {\n queueMicrotask(() => {\n this._router.navigate([], {\n queryParams,\n replaceUrl: true,\n queryParamsHandling: 'merge',\n });\n });\n });\n }\n}\n","export * from './lib/auth';\nexport * from './lib/class-validator';\nexport * from './lib/devtools/components/query-devtools';\nexport * from './lib/devtools/pipes';\nexport * from './lib/devtools/utils';\nexport * from './lib/directives';\nexport * from './lib/entity';\nexport * as ExperimentalQuery from './lib/experimental';\nexport * from './lib/experimental/pipes';\nexport * from './lib/gql';\nexport * from './lib/infinite-query';\nexport * from './lib/logger';\nexport * from './lib/query';\nexport * from './lib/query-client';\nexport * from './lib/query-creator';\nexport * from './lib/query-form';\nexport * from './lib/query-store';\nexport * from './lib/request';\nexport * from './lib/symfony';\nexport * from './lib/utils';\n\n// Burst cache\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isNaN","extractExpiresInSeconds","shouldRetryRequest","syncSignal","buildQueryCacheKey","shouldCacheQuery","deleteCookie","coreDeleteCookie","ɵEffectScheduler","i1"],"mappings":"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"}
1
+ {"version":3,"file":"ethlete-query.mjs","sources":["../tmp-esm2022/lib/auth/custom-header-auth-provider.js","../tmp-esm2022/lib/auth/basic-auth-provider.js","../tmp-esm2022/lib/logger/logger.js","../tmp-esm2022/lib/symfony/symfony.utils.js","../tmp-esm2022/lib/request/request.util.js","../tmp-esm2022/lib/request/request.js","../tmp-esm2022/lib/utils/data.utils.js","../tmp-esm2022/lib/utils/deep-freeze.util.js","../tmp-esm2022/lib/utils/def.util.js","../tmp-esm2022/lib/query-creator/query-creator.js","../tmp-esm2022/lib/query-store/query-store.js","../tmp-esm2022/lib/query-client/query-client.js","../tmp-esm2022/lib/query-client/query-client.utils.js","../tmp-esm2022/lib/experimental/http/query-errors.js","../tmp-esm2022/lib/experimental/auth/bearer-auth-provider.js","../tmp-esm2022/lib/experimental/auth/bearer-auth-provider-config.js","../tmp-esm2022/lib/class-validator/class-validator.utils.js","../tmp-esm2022/lib/experimental/http/query-state.js","../tmp-esm2022/lib/experimental/http/query-snapshot.js","../tmp-esm2022/lib/experimental/http/query-utils.js","../tmp-esm2022/lib/experimental/http/query-error-response.js","../tmp-esm2022/lib/experimental/http/http-request.js","../tmp-esm2022/lib/experimental/http/query-features.js","../tmp-esm2022/lib/experimental/http/query-stack.js","../tmp-esm2022/lib/experimental/http/paged-query-stack.js","../tmp-esm2022/lib/experimental/http/query-dependencies.js","../tmp-esm2022/lib/experimental/http/query-execute-utils.js","../tmp-esm2022/lib/experimental/http/query-execute.js","../tmp-esm2022/lib/experimental/http/query.js","../tmp-esm2022/lib/experimental/http/query-repository.js","../tmp-esm2022/lib/experimental/http/query-client.js","../tmp-esm2022/lib/experimental/http/query-client-config.js","../tmp-esm2022/lib/experimental/http/query-creator.js","../tmp-esm2022/lib/experimental/http/secure-query-execute.js","../tmp-esm2022/lib/experimental/http/secure-query.js","../tmp-esm2022/lib/experimental/http/secure-query-creator.js","../tmp-esm2022/lib/experimental/http/query-creator-templates.js","../tmp-esm2022/lib/gql/gql.js","../tmp-esm2022/lib/experimental/gql/gql-query-execute.js","../tmp-esm2022/lib/experimental/gql/gql-query.js","../tmp-esm2022/lib/experimental/gql/gql-query-creator.js","../tmp-esm2022/lib/experimental/gql/gql-query-creator-templates.js","../tmp-esm2022/lib/experimental/interop/legacy-query.js","../tmp-esm2022/lib/experimental/interop/legacy-query-creator.js","../tmp-esm2022/lib/experimental/pipes/parse-http-error-code-de.js","../tmp-esm2022/lib/experimental/pipes/parse-http-error-code-de.pipe.js","../tmp-esm2022/lib/experimental/pipes/parse-http-error-code-en.js","../tmp-esm2022/lib/experimental/pipes/parse-http-error-code-en.pipe.js","../tmp-esm2022/lib/experimental/ws/web-socket-errors.js","../tmp-esm2022/lib/experimental/ws/web-socket-client.js","../tmp-esm2022/lib/experimental/ws/web-socket-client-config.js","../tmp-esm2022/lib/query/query.utils.js","../tmp-esm2022/lib/query/query.js","../tmp-esm2022/lib/auth/auth-provider.utils.js","../tmp-esm2022/lib/auth/bearer-auth-provider.js","../tmp-esm2022/lib/directives/query.directive.js","../tmp-esm2022/lib/infinite-query/infinity-query.js","../tmp-esm2022/lib/infinite-query/infinity-query.utils.js","../tmp-esm2022/lib/directives/infinity-query.directive.js","../tmp-esm2022/lib/directives/infinity-query-trigger.directive.js","../tmp-esm2022/lib/devtools/pipes/query-short-name.pipe.js","../tmp-esm2022/lib/devtools/utils/query-client.utils.js","../tmp-esm2022/lib/devtools/components/query-devtools/query-devtools.component.js","../tmp-esm2022/lib/entity/entity-store.js","../tmp-esm2022/lib/entity/entity.utils.js","../tmp-esm2022/lib/query-form/query-form.utils.js","../tmp-esm2022/lib/query-form/query-form.js","../tmp-esm2022/index.js","../tmp-esm2022/ethlete-query.js"],"sourcesContent":["export class CustomHeaderAuthProvider {\n get header() {\n return { [this._config.name]: this._config.value };\n }\n constructor(_config) {\n this._config = _config;\n }\n cleanUp() {\n // noop\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWhlYWRlci1hdXRoLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2F1dGgvY3VzdG9tLWhlYWRlci1hdXRoLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsSUFBSSxNQUFNO1FBQ1IsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFFRCxZQUFtQixPQUF1QztRQUF2QyxZQUFPLEdBQVAsT0FBTyxDQUFnQztJQUFHLENBQUM7SUFFOUQsT0FBTztRQUNMLE9BQU87SUFDVCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoUHJvdmlkZXIsIEF1dGhQcm92aWRlckN1c3RvbUhlYWRlckNvbmZpZyB9IGZyb20gJy4vYXV0aC1wcm92aWRlci50eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDdXN0b21IZWFkZXJBdXRoUHJvdmlkZXIgaW1wbGVtZW50cyBBdXRoUHJvdmlkZXIge1xuICBnZXQgaGVhZGVyKCkge1xuICAgIHJldHVybiB7IFt0aGlzLl9jb25maWcubmFtZV06IHRoaXMuX2NvbmZpZy52YWx1ZSB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIF9jb25maWc6IEF1dGhQcm92aWRlckN1c3RvbUhlYWRlckNvbmZpZykge31cblxuICBjbGVhblVwKCk6IHZvaWQge1xuICAgIC8vIG5vb3BcbiAgfVxufVxuIl19","export class BasicAuthProvider {\n get header() {\n return { Authorization: `Basic ${this._basicAuthString}` };\n }\n get _basicAuthString() {\n return btoa(`${this._config.username}:${this._config.password}`);\n }\n constructor(_config) {\n this._config = _config;\n }\n cleanUp() {\n // noop\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtYXV0aC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9hdXRoL2Jhc2ljLWF1dGgtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixJQUFJLE1BQU07UUFDUixPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBRUQsSUFBWSxnQkFBZ0I7UUFDMUIsT0FBTyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELFlBQW1CLE9BQWdDO1FBQWhDLFlBQU8sR0FBUCxPQUFPLENBQXlCO0lBQUcsQ0FBQztJQUV2RCxPQUFPO1FBQ0wsT0FBTztJQUNULENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1dGhQcm92aWRlciwgQXV0aFByb3ZpZGVyQmFzaWNDb25maWcgfSBmcm9tICcuL2F1dGgtcHJvdmlkZXIudHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQmFzaWNBdXRoUHJvdmlkZXIgaW1wbGVtZW50cyBBdXRoUHJvdmlkZXIge1xuICBnZXQgaGVhZGVyKCkge1xuICAgIHJldHVybiB7IEF1dGhvcml6YXRpb246IGBCYXNpYyAke3RoaXMuX2Jhc2ljQXV0aFN0cmluZ31gIH07XG4gIH1cblxuICBwcml2YXRlIGdldCBfYmFzaWNBdXRoU3RyaW5nKCkge1xuICAgIHJldHVybiBidG9hKGAke3RoaXMuX2NvbmZpZy51c2VybmFtZX06JHt0aGlzLl9jb25maWcucGFzc3dvcmR9YCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgX2NvbmZpZzogQXV0aFByb3ZpZGVyQmFzaWNDb25maWcpIHt9XG5cbiAgY2xlYW5VcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG4gIH1cbn1cbiJdfQ==","export const buildErrorMessage = (code, message) => `[@ethlete\\\\query:${code}] ${message}`;\nexport class QueryError extends Error {\n constructor(code, message, data) {\n super(buildErrorMessage(code, message));\n this.name = 'QueryError';\n this.data = data;\n }\n}\nexport const invalidBaseRouteError = (data) => new QueryError('001', 'The baseRoute must not end with a slash', data);\nexport const invalidRouteError = (data) => new QueryError('002', 'The route must start with a slash', data);\nexport const pathParamsMissingInRouteFunctionError = (data) => new QueryError('003', 'The route is a function but pathParams are missing', data);\nexport const queryStateAlreadyHasKeyError = (data) => new QueryError('004', 'The query state already contains the provided key', data);\nexport const queryStateDoesNotContainKeyError = (data) => new QueryError('005', 'The query state does not contain the provided key', data);\nexport const queryStateCannotTransformError = (data) => new QueryError('006', 'The query state cannot be transformed because it is not loading', data);\nexport const invalidBodyError = (data) => new QueryError('007', 'The body is not valid or upsupported', data);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2xvZ2dlci9sb2dnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxJQUFZLEVBQUUsT0FBZSxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO0FBRTNHLE1BQU0sT0FBTyxVQUFXLFNBQVEsS0FBSztJQUduQyxZQUFZLElBQVksRUFBRSxPQUFlLEVBQUUsSUFBYztRQUN2RCxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUNyRCxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUseUNBQXlDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFekUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxtQ0FBbUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUVySCxNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQ3JFLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxvREFBb0QsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUVwRixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQzVELElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxtREFBbUQsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUVuRixNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQ2hFLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxtREFBbUQsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUVuRixNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQzlELElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxpRUFBaUUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUVqRyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLHNDQUFzQyxFQUFFLElBQUksQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGJ1aWxkRXJyb3JNZXNzYWdlID0gKGNvZGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSA9PiBgW0BldGhsZXRlXFxcXHF1ZXJ5OiR7Y29kZX1dICR7bWVzc2FnZX1gO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgZGF0YT86IHVua25vd247XG5cbiAgY29uc3RydWN0b3IoY29kZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSB7XG4gICAgc3VwZXIoYnVpbGRFcnJvck1lc3NhZ2UoY29kZSwgbWVzc2FnZSkpO1xuICAgIHRoaXMubmFtZSA9ICdRdWVyeUVycm9yJztcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBpbnZhbGlkQmFzZVJvdXRlRXJyb3IgPSAoZGF0YTogdW5rbm93bikgPT5cbiAgbmV3IFF1ZXJ5RXJyb3IoJzAwMScsICdUaGUgYmFzZVJvdXRlIG11c3Qgbm90IGVuZCB3aXRoIGEgc2xhc2gnLCBkYXRhKTtcblxuZXhwb3J0IGNvbnN0IGludmFsaWRSb3V0ZUVycm9yID0gKGRhdGE6IHVua25vd24pID0+IG5ldyBRdWVyeUVycm9yKCcwMDInLCAnVGhlIHJvdXRlIG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoJywgZGF0YSk7XG5cbmV4cG9ydCBjb25zdCBwYXRoUGFyYW1zTWlzc2luZ0luUm91dGVGdW5jdGlvbkVycm9yID0gKGRhdGE6IHVua25vd24pID0+XG4gIG5ldyBRdWVyeUVycm9yKCcwMDMnLCAnVGhlIHJvdXRlIGlzIGEgZnVuY3Rpb24gYnV0IHBhdGhQYXJhbXMgYXJlIG1pc3NpbmcnLCBkYXRhKTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5U3RhdGVBbHJlYWR5SGFzS2V5RXJyb3IgPSAoZGF0YTogdW5rbm93bikgPT5cbiAgbmV3IFF1ZXJ5RXJyb3IoJzAwNCcsICdUaGUgcXVlcnkgc3RhdGUgYWxyZWFkeSBjb250YWlucyB0aGUgcHJvdmlkZWQga2V5JywgZGF0YSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeVN0YXRlRG9lc05vdENvbnRhaW5LZXlFcnJvciA9IChkYXRhOiB1bmtub3duKSA9PlxuICBuZXcgUXVlcnlFcnJvcignMDA1JywgJ1RoZSBxdWVyeSBzdGF0ZSBkb2VzIG5vdCBjb250YWluIHRoZSBwcm92aWRlZCBrZXknLCBkYXRhKTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5U3RhdGVDYW5ub3RUcmFuc2Zvcm1FcnJvciA9IChkYXRhOiB1bmtub3duKSA9PlxuICBuZXcgUXVlcnlFcnJvcignMDA2JywgJ1RoZSBxdWVyeSBzdGF0ZSBjYW5ub3QgYmUgdHJhbnNmb3JtZWQgYmVjYXVzZSBpdCBpcyBub3QgbG9hZGluZycsIGRhdGEpO1xuXG5leHBvcnQgY29uc3QgaW52YWxpZEJvZHlFcnJvciA9IChkYXRhOiB1bmtub3duKSA9PiBuZXcgUXVlcnlFcnJvcignMDA3JywgJ1RoZSBib2R5IGlzIG5vdCB2YWxpZCBvciB1cHN1cHBvcnRlZCcsIGRhdGEpO1xuIl19","export const isSymfonyError = (error) => {\n if (!error || typeof error !== 'object') {\n return false;\n }\n const symfonyError = error;\n return (symfonyError.class !== undefined &&\n symfonyError.detail !== undefined &&\n symfonyError.status !== undefined &&\n symfonyError.title !== undefined &&\n symfonyError.trace !== undefined &&\n symfonyError.type !== undefined);\n};\nexport const isSymfonyPagerfantaOutOfRangeError = (error) => {\n if (!isSymfonyError(error)) {\n return false;\n }\n return error.class.startsWith('Pagerfanta') && error.class.endsWith('OutOfRangeCurrentPageException');\n};\nexport const isSymfonyFormViolationListError = (error) => {\n return typeof error === 'object' && error !== null && 'violations' in error;\n};\nexport const isSymfonyListError = (error) => {\n return (!!error &&\n typeof error === 'object' &&\n Array.isArray(error) &&\n !!error.length &&\n typeof error[0] === 'object' &&\n 'message' in error[0] &&\n 'propertyPath' in error[0] &&\n 'invalidValue' in error[0]);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltZm9ueS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9zeW1mb255L3N5bWZvbnkudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBYyxFQUF5QixFQUFFO0lBQ3RFLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsS0FBcUIsQ0FBQztJQUUzQyxPQUFPLENBQ0wsWUFBWSxDQUFDLEtBQUssS0FBSyxTQUFTO1FBQ2hDLFlBQVksQ0FBQyxNQUFNLEtBQUssU0FBUztRQUNqQyxZQUFZLENBQUMsTUFBTSxLQUFLLFNBQVM7UUFDakMsWUFBWSxDQUFDLEtBQUssS0FBSyxTQUFTO1FBQ2hDLFlBQVksQ0FBQyxLQUFLLEtBQUssU0FBUztRQUNoQyxZQUFZLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FDaEMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLENBQUMsS0FBYyxFQUF5QixFQUFFO0lBQzFGLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7QUFDeEcsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsQ0FBQyxLQUFjLEVBQWtDLEVBQUU7SUFDaEcsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDO0FBQzlFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBYyxFQUFnQyxFQUFFO0lBQ2pGLE9BQU8sQ0FDTCxDQUFDLENBQUMsS0FBSztRQUNQLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDcEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQ2QsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUTtRQUM1QixTQUFTLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNyQixjQUFjLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMxQixjQUFjLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUMzQixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybVZpb2xhdGlvbkxpc3RWaWV3LCBGb3JtVmlvbGF0aW9uVmlldyB9IGZyb20gJ0BldGhsZXRlL3R5cGVzJztcbmltcG9ydCB7IFN5bWZvbnlFcnJvciB9IGZyb20gJy4vc3ltZm9ueS50eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBpc1N5bWZvbnlFcnJvciA9IChlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIFN5bWZvbnlFcnJvciA9PiB7XG4gIGlmICghZXJyb3IgfHwgdHlwZW9mIGVycm9yICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN5bWZvbnlFcnJvciA9IGVycm9yIGFzIFN5bWZvbnlFcnJvcjtcblxuICByZXR1cm4gKFxuICAgIHN5bWZvbnlFcnJvci5jbGFzcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgc3ltZm9ueUVycm9yLmRldGFpbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgc3ltZm9ueUVycm9yLnN0YXR1cyAhPT0gdW5kZWZpbmVkICYmXG4gICAgc3ltZm9ueUVycm9yLnRpdGxlICE9PSB1bmRlZmluZWQgJiZcbiAgICBzeW1mb255RXJyb3IudHJhY2UgIT09IHVuZGVmaW5lZCAmJlxuICAgIHN5bWZvbnlFcnJvci50eXBlICE9PSB1bmRlZmluZWRcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1N5bWZvbnlQYWdlcmZhbnRhT3V0T2ZSYW5nZUVycm9yID0gKGVycm9yOiB1bmtub3duKTogZXJyb3IgaXMgU3ltZm9ueUVycm9yID0+IHtcbiAgaWYgKCFpc1N5bWZvbnlFcnJvcihlcnJvcikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZXJyb3IuY2xhc3Muc3RhcnRzV2l0aCgnUGFnZXJmYW50YScpICYmIGVycm9yLmNsYXNzLmVuZHNXaXRoKCdPdXRPZlJhbmdlQ3VycmVudFBhZ2VFeGNlcHRpb24nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1N5bWZvbnlGb3JtVmlvbGF0aW9uTGlzdEVycm9yID0gKGVycm9yOiB1bmtub3duKTogZXJyb3IgaXMgRm9ybVZpb2xhdGlvbkxpc3RWaWV3ID0+IHtcbiAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3IgIT09IG51bGwgJiYgJ3Zpb2xhdGlvbnMnIGluIGVycm9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU3ltZm9ueUxpc3RFcnJvciA9IChlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIEZvcm1WaW9sYXRpb25WaWV3W10gPT4ge1xuICByZXR1cm4gKFxuICAgICEhZXJyb3IgJiZcbiAgICB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmXG4gICAgQXJyYXkuaXNBcnJheShlcnJvcikgJiZcbiAgICAhIWVycm9yLmxlbmd0aCAmJlxuICAgIHR5cGVvZiBlcnJvclswXSA9PT0gJ29iamVjdCcgJiZcbiAgICAnbWVzc2FnZScgaW4gZXJyb3JbMF0gJiZcbiAgICAncHJvcGVydHlQYXRoJyBpbiBlcnJvclswXSAmJlxuICAgICdpbnZhbGlkVmFsdWUnIGluIGVycm9yWzBdXG4gICk7XG59O1xuIl19","import { HttpStatusCode } from '@angular/common/http';\nimport { invalidBaseRouteError, invalidRouteError, pathParamsMissingInRouteFunctionError } from '../logger';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../symfony';\nexport const isNaN = (value) => typeof value === 'number' && Number.isNaN(value);\nexport const isEmptyString = (value) => typeof value === 'string' && value.trim() === '';\nexport const isRequestError = (error) => error instanceof Object && 'status' in error && 'statusText' in error && 'url' in error;\nexport const buildRoute = (options) => {\n if (options.base.endsWith('/')) {\n throw invalidBaseRouteError(options.base);\n }\n let route = null;\n if (typeof options.route === 'function') {\n if (!options.pathParams) {\n throw pathParamsMissingInRouteFunctionError(options.route({}));\n }\n route = options.route(options.pathParams);\n }\n else {\n route = options.route ?? null;\n }\n if (route && !route.startsWith('/')) {\n throw invalidRouteError(route);\n }\n if (options.queryParams) {\n const queryString = buildQueryString(options.queryParams, options.queryParamConfig);\n if (queryString) {\n route = route ? `${route}?${queryString}` : `/?${queryString}`;\n }\n }\n return `${options.base}${route ?? ''}`;\n};\nexport const buildQueryString = (params, config) => {\n const objectNotation = config?.objectNotation ?? 'bracket';\n const writeArrayIndexes = config?.writeArrayIndexes ?? false;\n const ignoredValues = config?.ignoredValues ?? [undefined, null, Infinity, -Infinity];\n const ignoredValuesFns = config?.ignoredValuesFns ?? [isNaN, isEmptyString];\n const queryParams = [];\n function processValue(key, value) {\n if (config?.objectNotation === 'json-stringify') {\n if (value === undefined) {\n return false;\n }\n if (ignoredValues.includes(value)) {\n return false;\n }\n if (ignoredValuesFns.some((fn) => fn(value))) {\n return false;\n }\n const encodedKey = encodeURIComponent(key);\n const val = typeof value === 'object' ? JSON.stringify(value) : value;\n const encodedValue = encodeURIComponent(val);\n queryParams.push(`${encodedKey}=${encodedValue}`);\n return true;\n }\n else if (Array.isArray(value)) {\n let currentFilteredIndex = 0;\n for (const arrayValue of value) {\n const nestedKey = writeArrayIndexes ? `${key}[${currentFilteredIndex}]` : `${key}[]`;\n const didAddValue = processValue(nestedKey, arrayValue);\n if (didAddValue) {\n currentFilteredIndex++;\n }\n }\n return null;\n }\n else if (typeof value === 'object' && value !== null) {\n for (const [objKey, val] of Object.entries(value)) {\n const nestedKey = objectNotation === 'dot' ? `${key}.${objKey}` : `${key}[${objKey}]`;\n processValue(nestedKey, val);\n }\n return null;\n }\n else {\n if (ignoredValues.includes(value)) {\n return false;\n }\n if (ignoredValuesFns.some((fn) => fn(value))) {\n return false;\n }\n const encodedKey = encodeURIComponent(key);\n const encodedValue = encodeURIComponent(value);\n queryParams.push(`${encodedKey}=${encodedValue}`);\n return true;\n }\n }\n for (const [key, val] of Object.entries(params)) {\n processValue(key, val);\n }\n return queryParams.length ? queryParams.join('&') : null;\n};\nexport const extractExpiresInSeconds = (headers) => {\n const cacheControl = headers['cache-control'];\n const age = headers['age'];\n const expires = headers['expires'];\n // In seconds\n let expiresIn = null;\n let maxAge = null;\n if (cacheControl?.includes('no-cache')) {\n return null;\n }\n if (cacheControl?.includes('max-age')) {\n const m = cacheControl.split('max-age=')[1];\n if (m) {\n maxAge = parseInt(m);\n }\n }\n else if (cacheControl?.includes('s-maxage')) {\n const m = cacheControl.split('s-maxage=')[1];\n if (m) {\n maxAge = parseInt(m);\n }\n }\n if (maxAge && age) {\n const ageSeconds = parseInt(age);\n expiresIn = maxAge - ageSeconds;\n }\n else if (maxAge) {\n expiresIn = maxAge / 2; // We assume the response is half way to its expiration\n }\n else if (expires) {\n // Used by some apis to tell the response will never expire\n // In this case we let the response expire after 1 hour\n if (expires === '-1') {\n expiresIn = 3600;\n }\n else {\n const expiresDate = new Date(expires);\n // check if the date is valid\n if (expiresDate.toString() !== 'Invalid Date') {\n expiresIn = Math.floor((expiresDate.getTime() - Date.now()) / 1000);\n }\n }\n }\n return expiresIn;\n};\nexport const buildTimestampFromSeconds = (seconds) => {\n if (seconds === null) {\n return null;\n }\n return new Date(Date.now() + seconds * 1000).getTime();\n};\nexport const serializeBody = (body) => {\n if (body === null || body === undefined) {\n return null;\n }\n if (body instanceof ArrayBuffer ||\n body instanceof Blob ||\n body instanceof FormData ||\n body instanceof URLSearchParams ||\n typeof body === 'string') {\n return body;\n }\n if (typeof body === 'object' || typeof body === 'boolean' || Array.isArray(body)) {\n return JSON.stringify(body);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return body.toString();\n};\nexport const transformMethod = (config) => {\n if (config.method === 'GQL_QUERY' || config.method === 'GQL_MUTATE') {\n if (!config.transferVia) {\n return 'POST';\n }\n return config.transferVia;\n }\n return config.method;\n};\nexport const detectContentTypeHeader = (body) => {\n // An empty body has no content type.\n if (body === null) {\n return null;\n }\n // FormData bodies rely on the browser's content type assignment.\n if (body instanceof FormData) {\n return null;\n }\n // Blobs usually have their own content type. If it doesn't, then\n // no type can be inferred.\n if (body instanceof Blob) {\n return body.type || null;\n }\n // Array buffers have unknown contents and thus no type can be inferred.\n if (body instanceof ArrayBuffer) {\n return null;\n }\n // Technically, strings could be a form of JSON data, but it's safe enough\n // to assume they're plain strings.\n if (typeof body === 'string') {\n return 'text/plain';\n }\n // Arrays, objects, boolean and numbers will be encoded as JSON.\n if (typeof body === 'object' || typeof body === 'number' || typeof body === 'boolean') {\n return 'application/json';\n }\n // No type could be inferred.\n return null;\n};\nexport const hasHeader = (headers, header) => {\n return Object.keys(headers).some((key) => key.toLowerCase() === header.toLowerCase());\n};\nexport const forEachHeader = (headers, callback) => {\n Object.entries(headers).forEach(([key, value]) => {\n callback(key, value);\n });\n};\nexport const parseAllXhrResponseHeaders = (xhr) => {\n const headers = xhr.getAllResponseHeaders();\n const parsedHeaders = {};\n for (const line of headers.split('\\n')) {\n const index = line.indexOf(':');\n if (index > 0) {\n const name = line.slice(0, index);\n const key = name.toLowerCase();\n const value = line.slice(index + 1).trim();\n parsedHeaders[key] = value;\n }\n }\n return parsedHeaders;\n};\nexport const getResponseUrl = (xhr) => {\n if ('responseURL' in xhr && xhr.responseURL) {\n return xhr.responseURL;\n }\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL');\n }\n return null;\n};\nexport const shouldRetryRequest = (config) => {\n const defaultRetryDelay = 1000 + 1000 * config.currentRetryCount;\n if (config.currentRetryCount > 3) {\n return { retry: false };\n }\n if (!isRequestError(config.error)) {\n return { retry: false };\n }\n const { status, detail } = config.error;\n // Retry on 5xx errors\n if (status >= 500) {\n // Don't retry if a requested page is out of range\n if (isSymfonyPagerfantaOutOfRangeError(detail)) {\n return { retry: false };\n }\n return { retry: true, delay: defaultRetryDelay };\n }\n // Retry on 408 or 425 errors\n if (status === HttpStatusCode.RequestTimeout || status === HttpStatusCode.TooEarly) {\n return { retry: true, delay: defaultRetryDelay };\n }\n // Retry on 429 errors\n if (status === HttpStatusCode.TooManyRequests) {\n const retryAfter = config.headers['retry-after'] ||\n config.headers['Retry-After'] ||\n config.headers['x-retry-after'] ||\n config.headers['X-Retry-After'];\n if (retryAfter) {\n const delay = parseInt(retryAfter) * 1000;\n return { retry: true, delay: Number.isNaN(delay) ? defaultRetryDelay : delay };\n }\n return { retry: true, delay: defaultRetryDelay };\n }\n // Code 0 usually means the internet connection is down. We retry in this case.\n // It could also be a CORS issue but that should not be the case in production.\n if (status === 0) {\n return { retry: true, delay: defaultRetryDelay };\n }\n return { retry: false };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL3JlcXVlc3QvcmVxdWVzdC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFNUcsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBV2hFLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLEtBQWMsRUFBVyxFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkcsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBYyxFQUFXLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUUzRyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBYyxLQUFjLEVBQTRCLEVBQUUsQ0FDdEYsS0FBSyxZQUFZLE1BQU0sSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLFlBQVksSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQztBQUUxRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxPQU0xQixFQUFFLEVBQUU7SUFDSCxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDL0IsTUFBTSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksS0FBSyxHQUFrQixJQUFJLENBQUM7SUFFaEMsSUFBSSxPQUFPLE9BQU8sQ0FB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QUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDMUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFN0YXR1c0NvZGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbnZhbGlkQmFzZVJvdXRlRXJyb3IsIGludmFsaWRSb3V0ZUVycm9yLCBwYXRoUGFyYW1zTWlzc2luZ0luUm91dGVGdW5jdGlvbkVycm9yIH0gZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IEFueVJvdXRlIH0gZnJvbSAnLi4vcXVlcnknO1xuaW1wb3J0IHsgaXNTeW1mb255UGFnZXJmYW50YU91dE9mUmFuZ2VFcnJvciB9IGZyb20gJy4uL3N5bWZvbnknO1xuaW1wb3J0IHtcbiAgQnVpbGRRdWVyeVN0cmluZ0NvbmZpZyxcbiAgTWV0aG9kLFxuICBQYXRoUGFyYW1zLFxuICBRdWVyeVBhcmFtcyxcbiAgUmVxdWVzdEVycm9yLFxuICBSZXF1ZXN0SGVhZGVycyxcbiAgUmVxdWVzdFJldHJ5Rm4sXG59IGZyb20gJy4vcmVxdWVzdC50eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBpc05hTiA9ICh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4gPT4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNOYU4odmFsdWUpO1xuZXhwb3J0IGNvbnN0IGlzRW1wdHlTdHJpbmcgPSAodmFsdWU6IHVua25vd24pOiBib29sZWFuID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpID09PSAnJztcblxuZXhwb3J0IGNvbnN0IGlzUmVxdWVzdEVycm9yID0gPFQgPSB1bmtub3duPihlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIFJlcXVlc3RFcnJvcjxUPiA9PlxuICBlcnJvciBpbnN0YW5jZW9mIE9iamVjdCAmJiAnc3RhdHVzJyBpbiBlcnJvciAmJiAnc3RhdHVzVGV4dCcgaW4gZXJyb3IgJiYgJ3VybCcgaW4gZXJyb3I7XG5cbmV4cG9ydCBjb25zdCBidWlsZFJvdXRlID0gKG9wdGlvbnM6IHtcbiAgYmFzZTogc3RyaW5nO1xuICByb3V0ZTogQW55Um91dGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwYXRoUGFyYW1zPzogUGF0aFBhcmFtcztcbiAgcXVlcnlQYXJhbXM/OiBRdWVyeVBhcmFtcztcbiAgcXVlcnlQYXJhbUNvbmZpZz86IEJ1aWxkUXVlcnlTdHJpbmdDb25maWc7XG59KSA9PiB7XG4gIGlmIChvcHRpb25zLmJhc2UuZW5kc1dpdGgoJy8nKSkge1xuICAgIHRocm93IGludmFsaWRCYXNlUm91dGVFcnJvcihvcHRpb25zLmJhc2UpO1xuICB9XG5cbiAgbGV0IHJvdXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMucm91dGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoIW9wdGlvbnMucGF0aFBhcmFtcykge1xuICAgICAgdGhyb3cgcGF0aFBhcmFtc01pc3NpbmdJblJvdXRlRnVuY3Rpb25FcnJvcihvcHRpb25zLnJvdXRlKHt9KSk7XG4gICAgfVxuXG4gICAgcm91dGUgPSBvcHRpb25zLnJvdXRlKG9wdGlvbnMucGF0aFBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgcm91dGUgPSBvcHRpb25zLnJvdXRlID8/IG51bGw7XG4gIH1cblxuICBpZiAocm91dGUgJiYgIXJvdXRlLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHRocm93IGludmFsaWRSb3V0ZUVycm9yKHJvdXRlKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnF1ZXJ5UGFyYW1zKSB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBidWlsZFF1ZXJ5U3RyaW5nKG9wdGlvbnMucXVlcnlQYXJhbXMsIG9wdGlvbnMucXVlcnlQYXJhbUNvbmZpZyk7XG5cbiAgICBpZiAocXVlcnlTdHJpbmcpIHtcbiAgICAgIHJvdXRlID0gcm91dGUgPyBgJHtyb3V0ZX0/JHtxdWVyeVN0cmluZ31gIDogYC8/JHtxdWVyeVN0cmluZ31gO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBgJHtvcHRpb25zLmJhc2V9JHtyb3V0ZSA/PyAnJ31gO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkUXVlcnlTdHJpbmcgPSAocGFyYW1zOiBRdWVyeVBhcmFtcywgY29uZmlnPzogQnVpbGRRdWVyeVN0cmluZ0NvbmZpZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCBvYmplY3ROb3RhdGlvbiA9IGNvbmZpZz8ub2JqZWN0Tm90YXRpb24gPz8gJ2JyYWNrZXQnO1xuICBjb25zdCB3cml0ZUFycmF5SW5kZXhlcyA9IGNvbmZpZz8ud3JpdGVBcnJheUluZGV4ZXMgPz8gZmFsc2U7XG4gIGNvbnN0IGlnbm9yZWRWYWx1ZXMgPSBjb25maWc/Lmlnbm9yZWRWYWx1ZXMgPz8gW3VuZGVmaW5lZCwgbnVsbCwgSW5maW5pdHksIC1JbmZpbml0eV07XG4gIGNvbnN0IGlnbm9yZWRWYWx1ZXNGbnMgPSBjb25maWc/Lmlnbm9yZWRWYWx1ZXNGbnMgPz8gW2lzTmFOLCBpc0VtcHR5U3RyaW5nXTtcblxuICBjb25zdCBxdWVyeVBhcmFtczogc3RyaW5nW10gPSBbXTtcblxuICBmdW5jdGlvbiBwcm9jZXNzVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgaWYgKGNvbmZpZz8ub2JqZWN0Tm90YXRpb24gPT09ICdqc29uLXN0cmluZ2lmeScpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlnbm9yZWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlnbm9yZWRWYWx1ZXNGbnMuc29tZSgoZm4pID0+IGZuKHZhbHVlKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbmNvZGVkS2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSk7XG5cbiAgICAgIGNvbnN0IHZhbCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgICAgY29uc3QgZW5jb2RlZFZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCBhcyBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKTtcblxuICAgICAgcXVlcnlQYXJhbXMucHVzaChgJHtlbmNvZGVkS2V5fT0ke2VuY29kZWRWYWx1ZX1gKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgbGV0IGN1cnJlbnRGaWx0ZXJlZEluZGV4ID0gMDtcbiAgICAgIGZvciAoY29uc3QgYXJyYXlWYWx1ZSBvZiB2YWx1ZSkge1xuICAgICAgICBjb25zdCBuZXN0ZWRLZXkgPSB3cml0ZUFycmF5SW5kZXhlcyA/IGAke2tleX1bJHtjdXJyZW50RmlsdGVyZWRJbmRleH1dYCA6IGAke2tleX1bXWA7XG5cbiAgICAgICAgY29uc3QgZGlkQWRkVmFsdWUgPSBwcm9jZXNzVmFsdWUobmVzdGVkS2V5LCBhcnJheVZhbHVlKTtcblxuICAgICAgICBpZiAoZGlkQWRkVmFsdWUpIHtcbiAgICAgICAgICBjdXJyZW50RmlsdGVyZWRJbmRleCsrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgZm9yIChjb25zdCBbb2JqS2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgICBjb25zdCBuZXN0ZWRLZXkgPSBvYmplY3ROb3RhdGlvbiA9PT0gJ2RvdCcgPyBgJHtrZXl9LiR7b2JqS2V5fWAgOiBgJHtrZXl9WyR7b2JqS2V5fV1gO1xuICAgICAgICBwcm9jZXNzVmFsdWUobmVzdGVkS2V5LCB2YWwpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlnbm9yZWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlnbm9yZWRWYWx1ZXNGbnMuc29tZSgoZm4pID0+IGZuKHZhbHVlKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbmNvZGVkS2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSk7XG4gICAgICBjb25zdCBlbmNvZGVkVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUgYXMgc3RyaW5nKTtcblxuICAgICAgcXVlcnlQYXJhbXMucHVzaChgJHtlbmNvZGVkS2V5fT0ke2VuY29kZWRWYWx1ZX1gKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKHBhcmFtcykpIHtcbiAgICBwcm9jZXNzVmFsdWUoa2V5LCB2YWwpO1xuICB9XG5cbiAgcmV0dXJuIHF1ZXJ5UGFyYW1zLmxlbmd0aCA/IHF1ZXJ5UGFyYW1zLmpvaW4oJyYnKSA6IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdEV4cGlyZXNJblNlY29uZHMgPSAoaGVhZGVyczogUmVxdWVzdEhlYWRlcnMpID0+IHtcbiAgY29uc3QgY2FjaGVDb250cm9sID0gaGVhZGVyc1snY2FjaGUtY29udHJvbCddO1xuICBjb25zdCBhZ2UgPSBoZWFkZXJzWydhZ2UnXTtcbiAgY29uc3QgZXhwaXJlcyA9IGhlYWRlcnNbJ2V4cGlyZXMnXTtcblxuICAvLyBJbiBzZWNvbmRzXG4gIGxldCBleHBpcmVzSW46IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBsZXQgbWF4QWdlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBpZiAoY2FjaGVDb250cm9sPy5pbmNsdWRlcygnbm8tY2FjaGUnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNhY2hlQ29udHJvbD8uaW5jbHVkZXMoJ21heC1hZ2UnKSkge1xuICAgIGNvbnN0IG0gPSBjYWNoZUNvbnRyb2wuc3BsaXQoJ21heC1hZ2U9JylbMV07XG5cbiAgICBpZiAobSkge1xuICAgICAgbWF4QWdlID0gcGFyc2VJbnQobSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNhY2hlQ29udHJvbD8uaW5jbHVkZXMoJ3MtbWF4YWdlJykpIHtcbiAgICBjb25zdCBtID0gY2FjaGVDb250cm9sLnNwbGl0KCdzLW1heGFnZT0nKVsxXTtcblxuICAgIGlmIChtKSB7XG4gICAgICBtYXhBZ2UgPSBwYXJzZUludChtKTtcbiAgICB9XG4gIH1cblxuICBpZiAobWF4QWdlICYmIGFnZSkge1xuICAgIGNvbnN0IGFnZVNlY29uZHMgPSBwYXJzZUludChhZ2UpO1xuXG4gICAgZXhwaXJlc0luID0gbWF4QWdlIC0gYWdlU2Vjb25kcztcbiAgfSBlbHNlIGlmIChtYXhBZ2UpIHtcbiAgICBleHBpcmVzSW4gPSBtYXhBZ2UgLyAyOyAvLyBXZSBhc3N1bWUgdGhlIHJlc3BvbnNlIGlzIGhhbGYgd2F5IHRvIGl0cyBleHBpcmF0aW9uXG4gIH0gZWxzZSBpZiAoZXhwaXJlcykge1xuICAgIC8vIFVzZWQgYnkgc29tZSBhcGlzIHRvIHRlbGwgdGhlIHJlc3BvbnNlIHdpbGwgbmV2ZXIgZXhwaXJlXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGxldCB0aGUgcmVzcG9uc2UgZXhwaXJlIGFmdGVyIDEgaG91clxuICAgIGlmIChleHBpcmVzID09PSAnLTEnKSB7XG4gICAgICBleHBpcmVzSW4gPSAzNjAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBleHBpcmVzRGF0ZSA9IG5ldyBEYXRlKGV4cGlyZXMpO1xuXG4gICAgICAvLyBjaGVjayBpZiB0aGUgZGF0ZSBpcyB2YWxpZFxuICAgICAgaWYgKGV4cGlyZXNEYXRlLnRvU3RyaW5nKCkgIT09ICdJbnZhbGlkIERhdGUnKSB7XG4gICAgICAgIGV4cGlyZXNJbiA9IE1hdGguZmxvb3IoKGV4cGlyZXNEYXRlLmdldFRpbWUoKSAtIERhdGUubm93KCkpIC8gMTAwMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cGlyZXNJbjtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZFRpbWVzdGFtcEZyb21TZWNvbmRzID0gKHNlY29uZHM6IG51bWJlciB8IG51bGwpID0+IHtcbiAgaWYgKHNlY29uZHMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgRGF0ZShEYXRlLm5vdygpICsgc2Vjb25kcyAqIDEwMDApLmdldFRpbWUoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXJpYWxpemVCb2R5ID0gKGJvZHk6IHVua25vd24pOiBBcnJheUJ1ZmZlciB8IFVSTFNlYXJjaFBhcmFtcyB8IEJsb2IgfCBGb3JtRGF0YSB8IHN0cmluZyB8IG51bGwgPT4ge1xuICBpZiAoYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChcbiAgICBib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHxcbiAgICBib2R5IGluc3RhbmNlb2YgQmxvYiB8fFxuICAgIGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSB8fFxuICAgIGJvZHkgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMgfHxcbiAgICB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZydcbiAgKSB7XG4gICAgcmV0dXJuIGJvZHkgYXMgQXJyYXlCdWZmZXIgfCBVUkxTZWFyY2hQYXJhbXMgfCBCbG9iIHwgRm9ybURhdGEgfCBzdHJpbmc7XG4gIH1cblxuICBpZiAodHlwZW9mIGJvZHkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBib2R5ID09PSAnYm9vbGVhbicgfHwgQXJyYXkuaXNBcnJheShib2R5KSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShib2R5KTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHJldHVybiAoYm9keSBhcyBhbnkpLnRvU3RyaW5nKCk7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtTWV0aG9kID0gKGNvbmZpZzogeyBtZXRob2Q6IE1ldGhvZDsgdHJhbnNmZXJWaWE/OiAnR0VUJyB8ICdQT1NUJyB9KSA9PiB7XG4gIGlmIChjb25maWcubWV0aG9kID09PSAnR1FMX1FVRVJZJyB8fCBjb25maWcubWV0aG9kID09PSAnR1FMX01VVEFURScpIHtcbiAgICBpZiAoIWNvbmZpZy50cmFuc2ZlclZpYSkge1xuICAgICAgcmV0dXJuICdQT1NUJztcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnLnRyYW5zZmVyVmlhO1xuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5tZXRob2Q7XG59O1xuXG5leHBvcnQgY29uc3QgZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIgPSAoYm9keTogdW5rbm93bikgPT4ge1xuICAvLyBBbiBlbXB0eSBib2R5IGhhcyBubyBjb250ZW50IHR5cGUuXG4gIGlmIChib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gRm9ybURhdGEgYm9kaWVzIHJlbHkgb24gdGhlIGJyb3dzZXIncyBjb250ZW50IHR5cGUgYXNzaWdubWVudC5cbiAgaWYgKGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIEJsb2JzIHVzdWFsbHkgaGF2ZSB0aGVpciBvd24gY29udGVudCB0eXBlLiBJZiBpdCBkb2Vzbid0LCB0aGVuXG4gIC8vIG5vIHR5cGUgY2FuIGJlIGluZmVycmVkLlxuICBpZiAoYm9keSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICByZXR1cm4gYm9keS50eXBlIHx8IG51bGw7XG4gIH1cbiAgLy8gQXJyYXkgYnVmZmVycyBoYXZlIHVua25vd24gY29udGVudHMgYW5kIHRodXMgbm8gdHlwZSBjYW4gYmUgaW5mZXJyZWQuXG4gIGlmIChib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBUZWNobmljYWxseSwgc3RyaW5ncyBjb3VsZCBiZSBhIGZvcm0gb2YgSlNPTiBkYXRhLCBidXQgaXQncyBzYWZlIGVub3VnaFxuICAvLyB0byBhc3N1bWUgdGhleSdyZSBwbGFpbiBzdHJpbmdzLlxuICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuICd0ZXh0L3BsYWluJztcbiAgfVxuXG4gIC8vIEFycmF5cywgb2JqZWN0cywgYm9vbGVhbiBhbmQgbnVtYmVycyB3aWxsIGJlIGVuY29kZWQgYXMgSlNPTi5cbiAgaWYgKHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgYm9keSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGJvZHkgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiAnYXBwbGljYXRpb24vanNvbic7XG4gIH1cbiAgLy8gTm8gdHlwZSBjb3VsZCBiZSBpbmZlcnJlZC5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzSGVhZGVyID0gKGhlYWRlcnM6IFJlcXVlc3RIZWFkZXJzLCBoZWFkZXI6IHN0cmluZykgPT4ge1xuICByZXR1cm4gT2JqZWN0LmtleXMoaGVhZGVycykuc29tZSgoa2V5KSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gaGVhZGVyLnRvTG93ZXJDYXNlKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvckVhY2hIZWFkZXIgPSAoaGVhZGVyczogUmVxdWVzdEhlYWRlcnMsIGNhbGxiYWNrOiAodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcpID0+IHZvaWQpID0+IHtcbiAgT2JqZWN0LmVudHJpZXMoaGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgY2FsbGJhY2soa2V5LCB2YWx1ZSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQWxsWGhyUmVzcG9uc2VIZWFkZXJzID0gKHhocjogWE1MSHR0cFJlcXVlc3QpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTtcbiAgY29uc3QgcGFyc2VkSGVhZGVyczogUmVxdWVzdEhlYWRlcnMgPSB7fTtcblxuICBmb3IgKGNvbnN0IGxpbmUgb2YgaGVhZGVycy5zcGxpdCgnXFxuJykpIHtcbiAgICBjb25zdCBpbmRleCA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBsaW5lLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgIGNvbnN0IGtleSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gbGluZS5zbGljZShpbmRleCArIDEpLnRyaW0oKTtcblxuICAgICAgcGFyc2VkSGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnNlZEhlYWRlcnM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVzcG9uc2VVcmwgPSAoeGhyOiBYTUxIdHRwUmVxdWVzdCk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBpZiAoJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgJiYgeGhyLnJlc3BvbnNlVVJMKSB7XG4gICAgcmV0dXJuIHhoci5yZXNwb25zZVVSTDtcbiAgfVxuICBpZiAoL15YLVJlcXVlc3QtVVJMOi9tLnRlc3QoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSkge1xuICAgIHJldHVybiB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ1gtUmVxdWVzdC1VUkwnKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBzaG91bGRSZXRyeVJlcXVlc3Q6IFJlcXVlc3RSZXRyeUZuID0gKGNvbmZpZykgPT4ge1xuICBjb25zdCBkZWZhdWx0UmV0cnlEZWxheSA9IDEwMDAgKyAxMDAwICogY29uZmlnLmN1cnJlbnRSZXRyeUNvdW50O1xuXG4gIGlmIChjb25maWcuY3VycmVudFJldHJ5Q291bnQgPiAzKSB7XG4gICAgcmV0dXJuIHsgcmV0cnk6IGZhbHNlIH07XG4gIH1cblxuICBpZiAoIWlzUmVxdWVzdEVycm9yKGNvbmZpZy5lcnJvcikpIHtcbiAgICByZXR1cm4geyByZXRyeTogZmFsc2UgfTtcbiAgfVxuXG4gIGNvbnN0IHsgc3RhdHVzLCBkZXRhaWwgfSA9IGNvbmZpZy5lcnJvcjtcblxuICAvLyBSZXRyeSBvbiA1eHggZXJyb3JzXG4gIGlmIChzdGF0dXMgPj0gNTAwKSB7XG4gICAgLy8gRG9uJ3QgcmV0cnkgaWYgYSByZXF1ZXN0ZWQgcGFnZSBpcyBvdXQgb2YgcmFuZ2VcbiAgICBpZiAoaXNTeW1mb255UGFnZXJmYW50YU91dE9mUmFuZ2VFcnJvcihkZXRhaWwpKSB7XG4gICAgICByZXR1cm4geyByZXRyeTogZmFsc2UgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyByZXRyeTogdHJ1ZSwgZGVsYXk6IGRlZmF1bHRSZXRyeURlbGF5IH07XG4gIH1cblxuICAvLyBSZXRyeSBvbiA0MDggb3IgNDI1IGVycm9yc1xuICBpZiAoc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5SZXF1ZXN0VGltZW91dCB8fCBzdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLlRvb0Vhcmx5KSB7XG4gICAgcmV0dXJuIHsgcmV0cnk6IHRydWUsIGRlbGF5OiBkZWZhdWx0UmV0cnlEZWxheSB9O1xuICB9XG5cbiAgLy8gUmV0cnkgb24gNDI5IGVycm9yc1xuICBpZiAoc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5Ub29NYW55UmVxdWVzdHMpIHtcbiAgICBjb25zdCByZXRyeUFmdGVyID1cbiAgICAgIGNvbmZpZy5oZWFkZXJzWydyZXRyeS1hZnRlciddIHx8XG4gICAgICBjb25maWcuaGVhZGVyc1snUmV0cnktQWZ0ZXInXSB8fFxuICAgICAgY29uZmlnLmhlYWRlcnNbJ3gtcmV0cnktYWZ0ZXInXSB8fFxuICAgICAgY29uZmlnLmhlYWRlcnNbJ1gtUmV0cnktQWZ0ZXInXTtcblxuICAgIGlmIChyZXRyeUFmdGVyKSB7XG4gICAgICBjb25zdCBkZWxheSA9IHBhcnNlSW50KHJldHJ5QWZ0ZXIpICogMTAwMDtcbiAgICAgIHJldHVybiB7IHJldHJ5OiB0cnVlLCBkZWxheTogTnVtYmVyLmlzTmFOKGRlbGF5KSA/IGRlZmF1bHRSZXRyeURlbGF5IDogZGVsYXkgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyByZXRyeTogdHJ1ZSwgZGVsYXk6IGRlZmF1bHRSZXRyeURlbGF5IH07XG4gIH1cblxuICAvLyBDb2RlIDAgdXN1YWxseSBtZWFucyB0aGUgaW50ZXJuZXQgY29ubmVjdGlvbiBpcyBkb3duLiBXZSByZXRyeSBpbiB0aGlzIGNhc2UuXG4gIC8vIEl0IGNvdWxkIGFsc28gYmUgYSBDT1JTIGlzc3VlIGJ1dCB0aGF0IHNob3VsZCBub3QgYmUgdGhlIGNhc2UgaW4gcHJvZHVjdGlvbi5cbiAgaWYgKChzdGF0dXMgYXMgbnVtYmVyKSA9PT0gMCkge1xuICAgIHJldHVybiB7IHJldHJ5OiB0cnVlLCBkZWxheTogZGVmYXVsdFJldHJ5RGVsYXkgfTtcbiAgfVxuXG4gIHJldHVybiB7IHJldHJ5OiBmYWxzZSB9O1xufTtcbiJdfQ==","import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { buildTimestampFromSeconds, detectContentTypeHeader, extractExpiresInSeconds, forEachHeader, getResponseUrl, hasHeader, parseAllXhrResponseHeaders, serializeBody, shouldRetryRequest, } from './request.util';\nconst XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\nexport const request = (config) => {\n const headers = config.headers || {};\n const responseType = config.responseType || 'json';\n const body = config.body || null;\n const url = config.urlWithParams.split('?')[0] || '';\n const retryFn = config.retryFn || shouldRetryRequest;\n let currentRetryCount = 0;\n let retryTimeout = null;\n return new Observable((observer) => {\n const xhr = new XMLHttpRequest();\n const reqBody = serializeBody(body);\n const setupXhr = () => {\n xhr.open(config.method, config.urlWithParams);\n if (config.withCredentials) {\n xhr.withCredentials = true;\n }\n forEachHeader(headers, (name, value) => xhr.setRequestHeader(name, value));\n if (!hasHeader(headers, 'Accept')) {\n xhr.setRequestHeader('Accept', 'application/json, text/plain, */*');\n }\n if (!hasHeader(headers, 'Content-Type')) {\n const detectedType = detectContentTypeHeader(body);\n if (detectedType) {\n xhr.setRequestHeader('Content-Type', detectedType);\n }\n }\n xhr.responseType = responseType !== 'json' ? responseType : 'text';\n };\n setupXhr();\n const partialFromXhr = () => {\n const statusText = xhr.statusText || 'OK';\n const headers = parseAllXhrResponseHeaders(xhr);\n const _url = getResponseUrl(xhr) || url;\n return { headers, status: xhr.status, statusText, url: _url };\n };\n const handleRetry = (error) => {\n const newRetryCount = currentRetryCount + 1;\n const { headers } = partialFromXhr();\n const { retry, delay } = retryFn({ currentRetryCount: newRetryCount, headers, error });\n if (!retry) {\n observer.next({ type: 'failure', headers, error });\n observer.complete();\n return;\n }\n const _delay = delay ?? 1000;\n observer.next({ type: 'delay-retry', headers, retryNumber: newRetryCount, retryDelay: _delay });\n retryTimeout = window.setTimeout(() => {\n setupXhr();\n xhr.send(reqBody);\n currentRetryCount = newRetryCount;\n observer.next({ type: 'start', headers, isRetry: true, retryNumber: currentRetryCount, retryDelay: _delay });\n }, _delay);\n };\n const onLoad = async () => {\n const { headers, statusText, url } = partialFromXhr();\n let { status } = partialFromXhr();\n let body = null;\n if (status !== HttpStatusCode.NoContent) {\n body = typeof xhr.response === 'undefined' ? xhr.responseText : xhr.response;\n }\n if (status === 0) {\n status = body ? HttpStatusCode.Ok : 0;\n }\n let ok = status >= 200 && status < 300;\n if (responseType === 'json' && typeof body === 'string') {\n const originalBody = body;\n body = body.replace(XSSI_PREFIX, '');\n try {\n body = body !== '' ? JSON.parse(body) : null;\n }\n catch (error) {\n body = originalBody;\n if (ok) {\n ok = false;\n body = { error, text: body };\n }\n }\n }\n else if (!ok && body instanceof Blob) {\n try {\n const text = await body.text();\n if (body.type === 'application/json') {\n body = JSON.parse(text);\n }\n else {\n body = text;\n }\n }\n catch (error) {\n // Ignore the error.\n }\n }\n if (ok) {\n const successEvent = {\n type: 'success',\n headers,\n response: body,\n };\n const expiresInSeconds = config.cacheAdapter?.(headers) ?? extractExpiresInSeconds(headers);\n const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);\n if (expiresInTimestamp) {\n successEvent.expiresInTimestamp = expiresInTimestamp;\n }\n observer.next(successEvent);\n observer.complete();\n }\n else {\n handleRetry({\n url,\n detail: body,\n status,\n statusText,\n httpErrorResponse: new HttpErrorResponse({\n error: body,\n status,\n statusText,\n url,\n }),\n });\n }\n };\n const onError = (error) => {\n const { url } = partialFromXhr();\n handleRetry({\n url,\n detail: error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n httpErrorResponse: new HttpErrorResponse({\n error: error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n url,\n }),\n });\n };\n const onDownProgress = (event) => {\n const { headers } = partialFromXhr();\n const progress = {\n type: 'download-progress',\n headers,\n progress: {\n current: event.loaded,\n },\n };\n if (event.lengthComputable) {\n const progressPercent = (event.loaded / event.total) * 100;\n progress.progress.percentage = Math.round(progressPercent * 100) / 100;\n progress.progress.total = event.total;\n }\n if (responseType === 'text' && !!xhr.responseText) {\n progress.partialText = xhr.responseText;\n }\n observer.next(progress);\n };\n const onUpProgress = (event) => {\n const { headers } = partialFromXhr();\n const progress = {\n type: 'upload-progress',\n headers,\n progress: {\n current: event.loaded,\n },\n };\n if (event.lengthComputable) {\n const progressPercent = (event.loaded / event.total) * 100;\n progress.progress.percentage = Math.round(progressPercent * 100) / 100;\n progress.progress.total = event.total;\n }\n observer.next(progress);\n };\n xhr.addEventListener('load', onLoad);\n xhr.addEventListener('error', onError);\n xhr.addEventListener('timeout', onError);\n xhr.addEventListener('abort', onError);\n if (config.reportProgress) {\n xhr.addEventListener('progress', onDownProgress);\n if (reqBody !== null && xhr.upload) {\n xhr.upload.addEventListener('progress', onUpProgress);\n }\n }\n xhr.send(reqBody);\n observer.next({ type: 'start', headers });\n return () => {\n xhr.removeEventListener('error', onError);\n xhr.removeEventListener('abort', onError);\n xhr.removeEventListener('load', onLoad);\n xhr.removeEventListener('timeout', onError);\n if (retryTimeout) {\n window.clearTimeout(retryTimeout);\n }\n if (config.reportProgress) {\n xhr.removeEventListener('progress', onDownProgress);\n if (reqBody !== null && xhr.upload) {\n xhr.upload.removeEventListener('progress', onUpProgress);\n }\n }\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n observer.next({ type: 'cancel', headers });\n };\n });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9yZXF1ZXN0L3JlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxNQUFNLENBQUM7QUFFNUMsT0FBTyxFQUNMLHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDdkIsdUJBQXVCLEVBQ3ZCLGFBQWEsRUFDYixjQUFjLEVBQ2QsU0FBUyxFQUNULDBCQUEwQixFQUMxQixhQUFhLEVBQ2Isa0JBQWtCLEdBQ25CLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDO0FBRW5DLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFxQixNQUFxQixFQUFzQyxFQUFFO0lBQ3ZHLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ3JDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDO0lBQ25ELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLGtCQUFrQixDQUFDO0lBQ3JELElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLElBQUksWUFBWSxHQUFrQixJQUFJLENBQUM7SUFFdkMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFFBQTBDLEVBQUUsRUFBRTtRQUNuRSxNQUFNLEdBQUcsR0FBRyxJQUFJLGNBQWMs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QixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN4QyxHQUFHLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRTVDLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDcEMsQ0FBQztZQUVELElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUMxQixHQUFHLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUVwRCxJQUFJLE9BQU8sS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNuQyxHQUFHLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDM0QsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZCxDQUFDO1lBRUQsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwU3RhdHVzQ29kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQYXJ0aWFsWGhyU3RhdGUsIFJlcXVlc3RDb25maWcsIFJlcXVlc3RFcnJvciwgUmVxdWVzdEV2ZW50IH0gZnJvbSAnLi9yZXF1ZXN0LnR5cGVzJztcbmltcG9ydCB7XG4gIGJ1aWxkVGltZXN0YW1wRnJvbVNlY29uZHMsXG4gIGRldGVjdENvbnRlbnRUeXBlSGVhZGVyLFxuICBleHRyYWN0RXhwaXJlc0luU2Vjb25kcyxcbiAgZm9yRWFjaEhlYWRlcixcbiAgZ2V0UmVzcG9uc2VVcmwsXG4gIGhhc0hlYWRlcixcbiAgcGFyc2VBbGxYaHJSZXNwb25zZUhlYWRlcnMsXG4gIHNlcmlhbGl6ZUJvZHksXG4gIHNob3VsZFJldHJ5UmVxdWVzdCxcbn0gZnJvbSAnLi9yZXF1ZXN0LnV0aWwnO1xuXG5jb25zdCBYU1NJX1BSRUZJWCA9IC9eXFwpXFxdXFx9Jyw/XFxuLztcblxuZXhwb3J0IGNvbnN0IHJlcXVlc3QgPSA8UmVzcG9uc2UgPSB1bmtub3duPihjb25maWc6IFJlcXVlc3RDb25maWcpOiBPYnNlcnZhYmxlPFJlcXVlc3RFdmVudDxSZXNwb25zZT4+ID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzIHx8IHt9O1xuICBjb25zdCByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlIHx8ICdqc29uJztcbiAgY29uc3QgYm9keSA9IGNvbmZpZy5ib2R5IHx8IG51bGw7XG4gIGNvbnN0IHVybCA9IGNvbmZpZy51cmxXaXRoUGFyYW1zLnNwbGl0KCc/JylbMF0gfHwgJyc7XG4gIGNvbnN0IHJldHJ5Rm4gPSBjb25maWcucmV0cnlGbiB8fCBzaG91bGRSZXRyeVJlcXVlc3Q7XG4gIGxldCBjdXJyZW50UmV0cnlDb3VudCA9IDA7XG4gIGxldCByZXRyeVRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPFJlcXVlc3RFdmVudDxSZXNwb25zZT4+KSA9PiB7XG4gICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgY29uc3QgcmVxQm9keSA9IHNlcmlhbGl6ZUJvZHkoYm9keSk7XG5cbiAgICBjb25zdCBzZXR1cFhociA9ICgpID0+IHtcbiAgICAgIHhoci5vcGVuKGNvbmZpZy5tZXRob2QsIGNvbmZpZy51cmxXaXRoUGFyYW1zKTtcbiAgICAgIGlmIChjb25maWcud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBmb3JFYWNoSGVhZGVyKGhlYWRlcnMsIChuYW1lLCB2YWx1ZSkgPT4geGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpKTtcblxuICAgICAgaWYgKCFoYXNIZWFkZXIoaGVhZGVycywgJ0FjY2VwdCcpKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzSGVhZGVyKGhlYWRlcnMsICdDb250ZW50LVR5cGUnKSkge1xuICAgICAgICBjb25zdCBkZXRlY3RlZFR5cGUgPSBkZXRlY3RDb250ZW50VHlwZUhlYWRlcihib2R5KTtcblxuICAgICAgICBpZiAoZGV0ZWN0ZWRUeXBlKSB7XG4gICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsIGRldGVjdGVkVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nID8gcmVzcG9uc2VUeXBlIDogJ3RleHQnO1xuICAgIH07XG5cbiAgICBzZXR1cFhocigpO1xuXG4gICAgY29uc3QgcGFydGlhbEZyb21YaHIgPSAoKTogUGFydGlhbFhoclN0YXRlID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1c1RleHQgPSB4aHIuc3RhdHVzVGV4dCB8fCAnT0snO1xuICAgICAgY29uc3QgaGVhZGVycyA9IHBhcnNlQWxsWGhyUmVzcG9uc2VIZWFkZXJzKHhocik7XG4gICAgICBjb25zdCBfdXJsID0gZ2V0UmVzcG9uc2VVcmwoeGhyKSB8fCB1cmw7XG5cbiAgICAgIHJldHVybiB7IGhlYWRlcnMsIHN0YXR1czogeGhyLnN0YXR1cywgc3RhdHVzVGV4dCwgdXJsOiBfdXJsIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZVJldHJ5ID0gKGVycm9yOiBSZXF1ZXN0RXJyb3IpID0+IHtcbiAgICAgIGNvbnN0IG5ld1JldHJ5Q291bnQgPSBjdXJyZW50UmV0cnlDb3VudCArIDE7XG4gICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHBhcnRpYWxGcm9tWGhyKCk7XG4gICAgICBjb25zdCB7IHJldHJ5LCBkZWxheSB9ID0gcmV0cnlGbih7IGN1cnJlbnRSZXRyeUNvdW50OiBuZXdSZXRyeUNvdW50LCBoZWFkZXJzLCBlcnJvciB9KTtcblxuICAgICAgaWYgKCFyZXRyeSkge1xuICAgICAgICBvYnNlcnZlci5uZXh0KHsgdHlwZTogJ2ZhaWx1cmUnLCBoZWFkZXJzLCBlcnJvciB9KTtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBfZGVsYXkgPSBkZWxheSA/PyAxMDAwO1xuICAgICAgb2JzZXJ2ZXIubmV4dCh7IHR5cGU6ICdkZWxheS1yZXRyeScsIGhlYWRlcnMsIHJldHJ5TnVtYmVyOiBuZXdSZXRyeUNvdW50LCByZXRyeURlbGF5OiBfZGVsYXkgfSk7XG5cbiAgICAgIHJldHJ5VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc2V0dXBYaHIoKTtcbiAgICAgICAgeGhyLnNlbmQocmVxQm9keSk7XG4gICAgICAgIGN1cnJlbnRSZXRyeUNvdW50ID0gbmV3UmV0cnlDb3VudDtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dCh7IHR5cGU6ICdzdGFydCcsIGhlYWRlcnMsIGlzUmV0cnk6IHRydWUsIHJldHJ5TnVtYmVyOiBjdXJyZW50UmV0cnlDb3VudCwgcmV0cnlEZWxheTogX2RlbGF5IH0pO1xuICAgICAgfSwgX2RlbGF5KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25Mb2FkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgeyBoZWFkZXJzLCBzdGF0dXNUZXh0LCB1cmwgfSA9IHBhcnRpYWxGcm9tWGhyKCk7XG5cbiAgICAgIGxldCB7IHN0YXR1cyB9ID0gcGFydGlhbEZyb21YaHIoKTtcblxuICAgICAgbGV0IGJvZHk6IHVua25vd24gfCBudWxsID0gbnVsbDtcblxuICAgICAgaWYgKHN0YXR1cyAhPT0gSHR0cFN0YXR1c0NvZGUuTm9Db250ZW50KSB7XG4gICAgICAgIGJvZHkgPSB0eXBlb2YgeGhyLnJlc3BvbnNlID09PSAndW5kZWZpbmVkJyA/IHhoci5yZXNwb25zZVRleHQgOiB4aHIucmVzcG9uc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0dXMgPT09IDApIHtcbiAgICAgICAgc3RhdHVzID0gYm9keSA/IEh0dHBTdGF0dXNDb2RlLk9rIDogMDtcbiAgICAgIH1cblxuICAgICAgbGV0IG9rID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG5cbiAgICAgIGlmIChyZXNwb25zZVR5cGUgPT09ICdqc29uJyAmJiB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxCb2R5ID0gYm9keTtcbiAgICAgICAgYm9keSA9IGJvZHkucmVwbGFjZShYU1NJX1BSRUZJWCwgJycpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGJvZHkgPSBib2R5ICE9PSAnJyA/IEpTT04ucGFyc2UoYm9keSBhcyBzdHJpbmcpIDogbnVsbDtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBib2R5ID0gb3JpZ2luYWxCb2R5O1xuXG4gICAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgICBvayA9IGZhbHNlO1xuICAgICAgICAgICAgYm9keSA9IHsgZXJyb3IsIHRleHQ6IGJvZHkgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIW9rICYmIGJvZHkgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IGJvZHkudGV4dCgpO1xuXG4gICAgICAgICAgaWYgKGJvZHkudHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSB7XG4gICAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYm9keSA9IHRleHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIElnbm9yZSB0aGUgZXJyb3IuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9rKSB7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NFdmVudDogUmVxdWVzdEV2ZW50PFJlc3BvbnNlPiA9IHtcbiAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICByZXNwb25zZTogYm9keSBhcyBSZXNwb25zZSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBleHBpcmVzSW5TZWNvbmRzID0gY29uZmlnLmNhY2hlQWRhcHRlcj8uKGhlYWRlcnMpID8/IGV4dHJhY3RFeHBpcmVzSW5TZWNvbmRzKGhlYWRlcnMpO1xuICAgICAgICBjb25zdCBleHBpcmVzSW5UaW1lc3RhbXAgPSBidWlsZFRpbWVzdGFtcEZyb21TZWNvbmRzKGV4cGlyZXNJblNlY29uZHMpO1xuXG4gICAgICAgIGlmIChleHBpcmVzSW5UaW1lc3RhbXApIHtcbiAgICAgICAgICBzdWNjZXNzRXZlbnQuZXhwaXJlc0luVGltZXN0YW1wID0gZXhwaXJlc0luVGltZXN0YW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JzZXJ2ZXIubmV4dChzdWNjZXNzRXZlbnQpO1xuXG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVSZXRyeSh7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGRldGFpbDogYm9keSxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICBodHRwRXJyb3JSZXNwb25zZTogbmV3IEh0dHBFcnJvclJlc3BvbnNlKHtcbiAgICAgICAgICAgIGVycm9yOiBib2R5LFxuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyb3I6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IHVybCB9ID0gcGFydGlhbEZyb21YaHIoKTtcblxuICAgICAgaGFuZGxlUmV0cnkoe1xuICAgICAgICB1cmwsXG4gICAgICAgIGRldGFpbDogZXJyb3IsXG4gICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyB8fCAwLFxuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCB8fCAnVW5rbm93biBFcnJvcicsXG4gICAgICAgIGh0dHBFcnJvclJlc3BvbnNlOiBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe1xuICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMgfHwgMCxcbiAgICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCB8fCAnVW5rbm93biBFcnJvcicsXG4gICAgICAgICAgdXJsLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBvbkRvd25Qcm9ncmVzcyA9IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSBwYXJ0aWFsRnJvbVhocigpO1xuXG4gICAgICBjb25zdCBwcm9ncmVzczogUmVxdWVzdEV2ZW50ID0ge1xuICAgICAgICB0eXBlOiAnZG93bmxvYWQtcHJvZ3Jlc3MnLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBwcm9ncmVzczoge1xuICAgICAgICAgIGN1cnJlbnQ6IGV2ZW50LmxvYWRlZCxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIGNvbnN0IHByb2dyZXNzUGVyY2VudCA9IChldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCkgKiAxMDA7XG4gICAgICAgIHByb2dyZXNzLnByb2dyZXNzLnBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKHByb2dyZXNzUGVyY2VudCAqIDEwMCkgLyAxMDA7XG4gICAgICAgIHByb2dyZXNzLnByb2dyZXNzLnRvdGFsID0gZXZlbnQudG90YWw7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZVR5cGUgPT09ICd0ZXh0JyAmJiAhIXhoci5yZXNwb25zZVRleHQpIHtcbiAgICAgICAgcHJvZ3Jlc3MucGFydGlhbFRleHQgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgfVxuXG4gICAgICBvYnNlcnZlci5uZXh0KHByb2dyZXNzKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25VcFByb2dyZXNzID0gKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHBhcnRpYWxGcm9tWGhyKCk7XG5cbiAgICAgIGNvbnN0IHByb2dyZXNzOiBSZXF1ZXN0RXZlbnQgPSB7XG4gICAgICAgIHR5cGU6ICd1cGxvYWQtcHJvZ3Jlc3MnLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBwcm9ncmVzczoge1xuICAgICAgICAgIGN1cnJlbnQ6IGV2ZW50LmxvYWRlZCxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIGNvbnN0IHByb2dyZXNzUGVyY2VudCA9IChldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCkgKiAxMDA7XG4gICAgICAgIHByb2dyZXNzLnByb2dyZXNzLnBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKHByb2dyZXNzUGVyY2VudCAqIDEwMCkgLyAxMDA7XG4gICAgICAgIHByb2dyZXNzLnByb2dyZXNzLnRvdGFsID0gZXZlbnQudG90YWw7XG4gICAgICB9XG5cbiAgICAgIG9ic2VydmVyLm5leHQocHJvZ3Jlc3MpO1xuICAgIH07XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIG9uTG9hZCk7XG4gICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWVvdXQnLCBvbkVycm9yKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkVycm9yKTtcblxuICAgIGlmIChjb25maWcucmVwb3J0UHJvZ3Jlc3MpIHtcbiAgICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIG9uRG93blByb2dyZXNzKTtcblxuICAgICAgaWYgKHJlcUJvZHkgIT09IG51bGwgJiYgeGhyLnVwbG9hZCkge1xuICAgICAgICB4aHIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgb25VcFByb2dyZXNzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIuc2VuZChyZXFCb2R5KTtcbiAgICBvYnNlcnZlci5uZXh0KHsgdHlwZTogJ3N0YXJ0JywgaGVhZGVycyB9KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB4aHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgIHhoci5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uRXJyb3IpO1xuICAgICAgeGhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBvbkxvYWQpO1xuICAgICAgeGhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RpbWVvdXQnLCBvbkVycm9yKTtcblxuICAgICAgaWYgKHJldHJ5VGltZW91dCkge1xuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHJldHJ5VGltZW91dCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcucmVwb3J0UHJvZ3Jlc3MpIHtcbiAgICAgICAgeGhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgb25Eb3duUHJvZ3Jlc3MpO1xuXG4gICAgICAgIGlmIChyZXFCb2R5ICE9PSBudWxsICYmIHhoci51cGxvYWQpIHtcbiAgICAgICAgICB4aHIudXBsb2FkLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgb25VcFByb2dyZXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgIT09IHhoci5ET05FKSB7XG4gICAgICAgIHhoci5hYm9ydCgpO1xuICAgICAgfVxuXG4gICAgICBvYnNlcnZlci5uZXh0KHsgdHlwZTogJ2NhbmNlbCcsIGhlYWRlcnMgfSk7XG4gICAgfTtcbiAgfSk7XG59O1xuIl19","import { Injector, assertInInjectionContext, computed, effect, inject, runInInjectionContext, signal, untracked, } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { computedTillTruthy, createDestroy, syncSignal } from '@ethlete/core';\nimport { of, pairwise, startWith, switchMap, takeUntil, tap } from 'rxjs';\nimport { extractQuery, filterQueryStates, isQuery, isQueryStateFailure, isQueryStateLoading, isQueryStateSuccess, } from '../query';\nexport const addQueryContainerHandling = (obs, valueFn, config) => {\n assertInInjectionContext(addQueryContainerHandling);\n const { abortPrevious, abortOnDestroy, stopPreviousPolling } = config ?? {};\n const injector = inject(Injector);\n const destroy$ = createDestroy();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const tNode = injector._tNode;\n const componentId = tNode?.index ?? -1;\n obs\n .pipe(takeUntil(destroy$), startWith(null), pairwise(), tap(([prevQuery, currQuery]) => {\n const cleanQuery = (q) => {\n if (!q?._hasDependents() && ((abortPrevious === undefined && q?.canBeCached) || abortPrevious)) {\n q?.abort();\n }\n if (!q?._hasDependents() &&\n ((stopPreviousPolling === undefined && q?.canBeCached) || stopPreviousPolling) &&\n q?.isPolling) {\n q?.stopPolling();\n }\n q?.destroy?.();\n };\n if ((isQuery(prevQuery) || prevQuery === null) && (isQuery(currQuery) || currQuery === null)) {\n prevQuery?._removeDependent(componentId);\n currQuery?._addDependent(componentId);\n cleanQuery(prevQuery);\n }\n else if ((Array.isArray(prevQuery) || prevQuery === null) &&\n (Array.isArray(currQuery) || currQuery === null)) {\n if (prevQuery) {\n for (let i = 0; i < prevQuery.length; i++) {\n prevQuery[i]?._removeDependent(componentId);\n }\n }\n if (currQuery) {\n for (let i = 0; i < currQuery.length; i++) {\n currQuery[i]?._addDependent(componentId);\n }\n }\n if (prevQuery) {\n for (let i = 0; i < prevQuery.length; i++) {\n cleanQuery(prevQuery[i]);\n }\n }\n }\n else if ((isQuery(prevQuery) && Array.isArray(currQuery)) ||\n (Array.isArray(prevQuery) && isQuery(currQuery))) {\n throw new Error('Cannot mix queries and arrays of queries in the same query container.');\n }\n }))\n .subscribe();\n destroy$.subscribe(() => {\n const query = valueFn();\n const handleQuery = (q) => {\n q?._removeDependent(componentId);\n if (!q?._hasDependents() && ((q?.canBeCached && abortOnDestroy === undefined) || abortOnDestroy)) {\n q?.abort();\n q?.destroy?.();\n }\n };\n if (isQuery(query)) {\n handleQuery(query);\n }\n else if (Array.isArray(query)) {\n for (const q of query) {\n handleQuery(q);\n }\n }\n });\n};\nexport function toQuerySignal(source, options) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const s = toSignal(source, options);\n addQueryContainerHandling(source, () => s(), options);\n return s;\n}\nexport function effectComputed(computation, injector) {\n let initialData = null;\n try {\n initialData = runInInjectionContext(injector, () => computation());\n }\n catch {\n // Ignore errors in the initial computation\n // Angular might throw an error if required inputs are read but not available yet\n }\n const lastResult = signal(initialData);\n effect(() => {\n const data = runInInjectionContext(injector, () => computation());\n untracked(() => {\n if (data === lastResult())\n return;\n lastResult.set(data);\n });\n });\n return lastResult.asReadonly();\n}\nexport function queryComputed(computation, options) {\n const injector = inject(Injector);\n const c = effectComputed(computation, injector);\n const obs = toObservable(c, options);\n addQueryContainerHandling(obs, () => c(), options);\n return c;\n}\n/**\n * Creates a signal that will only be reactive until the first query is created.\n * All subsequent changes inside the computation will be ignored.\n */\nexport function queryComputedTillTruthy(computation, options) {\n const injector = inject(Injector);\n const c = computedTillTruthy(effectComputed(computation, injector));\n const obs = toObservable(c, options);\n addQueryContainerHandling(obs, () => c(), options);\n return c;\n}\nexport function queryArrayComputed(computation, options) {\n const injector = inject(Injector);\n const c = effectComputed(computation, injector);\n const obs = toObservable(c, options);\n addQueryContainerHandling(obs, () => c(), options);\n return c;\n}\nexport function toQuerySubject(source, options) {\n const obs = toObservable(source, options);\n addQueryContainerHandling(obs, () => source(), options);\n return obs;\n}\nexport function queryStateSignal(source, options) {\n const { cacheResponse } = options ?? {};\n const roSignal = toSignal(toObservable(source).pipe(switchMap((q) => extractQuery(q)?.state$ ?? of(null)), switchMap((state) => {\n if (cacheResponse) {\n return of(state).pipe(filterQueryStates([\"SUCCESS\" /* QueryStateType.Success */, \"FAILURE\" /* QueryStateType.Failure */]));\n }\n return of(state);\n })), {\n initialValue: null,\n });\n const rwSignal = signal(roSignal());\n syncSignal(roSignal, rwSignal);\n return rwSignal;\n}\nexport function queryStateResponseSignal(source, options) {\n const s = queryStateSignal(source, options);\n const dataSignal = computed(() => {\n const state = s();\n return isQueryStateSuccess(state) ? state.response : null;\n });\n dataSignal['reset'] = () => {\n s.set(null);\n };\n return dataSignal;\n}\nexport function queryStateErrorSignal(source) {\n const s = queryStateSignal(source);\n return computed(() => {\n const state = s();\n return isQueryStateFailure(state) ? state.error : null;\n });\n}\nexport function queryStateLoadingSignal(source) {\n const s = queryStateSignal(source);\n return computed(() => {\n const state = s();\n return isQueryStateLoading(state) ? state : null;\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi91dGlscy9kYXRhLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxRQUFRLEVBRVIsd0JBQXdCLEVBQ3hCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLHFCQUFxQixFQUNyQixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0MsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBNEIsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEcsT0FBTyxFQU1MLFlBQVksRUFDWixpQkFBaUIsRUFDakIsT0FBTyxFQUNQLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsbUJBQW1CLEdBQ3BCLE1BQU0sVUFBVSxDQUFDO0FBK0JsQixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUN2QyxHQUFpRixFQUNqRixPQUEyRixFQUMzRixNQUE2QixFQUM3QixFQUFFO0lBQ0Ysd0JBQXdCLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUVwRCxNQUFNLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFFNUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sUUFBUSxHQUFHLGFBQWEsRUFBRSxDQUFDO0lBRWpDLDhEQUE4RDtJQUM5RCxNQUFNLEtBQUssR0FBSSxRQUFnQixDQUFDLE1BQU0sQ0FBQztJ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LENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUYsT0FBTyxVQUFpQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLE1BQVM7SUFFVCxNQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVuQyxPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDbkIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFFbEIsT0FBTyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsTUFBUztJQUVULE1BQU0sQ0FBQyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRW5DLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNuQixNQUFNLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUVsQixPQUFPLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDcmVhdGVDb21wdXRlZE9wdGlvbnMsXG4gIEluamVjdG9yLFxuICBTaWduYWwsXG4gIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBydW5JbkluamVjdGlvbkNvbnRleHQsXG4gIHNpZ25hbCxcbiAgdW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRvT2JzZXJ2YWJsZU9wdGlvbnMsIFRvU2lnbmFsT3B0aW9ucywgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGNvbXB1dGVkVGlsbFRydXRoeSwgY3JlYXRlRGVzdHJveSwgc3luY1NpZ25hbCB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaWJhYmxlLCBvZiwgcGFpcndpc2UsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQW55TGVnYWN5UXVlcnkgfSBmcm9tICcuLi9leHBlcmltZW50YWwnO1xuaW1wb3J0IHtcbiAgQW55UXVlcnksXG4gIEFueVF1ZXJ5Q29sbGVjdGlvbixcbiAgUXVlcnlPZixcbiAgUXVlcnlTdGF0ZSxcbiAgUXVlcnlTdGF0ZVR5cGUsXG4gIGV4dHJhY3RRdWVyeSxcbiAgZmlsdGVyUXVlcnlTdGF0ZXMsXG4gIGlzUXVlcnksXG4gIGlzUXVlcnlTdGF0ZUZhaWx1cmUsXG4gIGlzUXVlcnlTdGF0ZUxvYWRpbmcsXG4gIGlzUXVlcnlTdGF0ZVN1Y2Nlc3MsXG59IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IFF1ZXJ5RGF0YU9mIH0gZnJvbSAnLi4vcXVlcnktY3JlYXRvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlDb250YWluZXJDb25maWcge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcHJldmlvdXMgcXVlcnkgd2lsbCBiZSBhYm9ydGVkIHdoZW4gYSBuZXcgcXVlcnkgaXMgcHVzaGVkIGludG8gdGhlIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgdHJ1ZSAvLyBPbmx5IGlmIHRoZSByZXF1ZXN0IGNhbiBiZSBjYWNoZWQgKEdFVCwgT1BUSU9OUywgSEVBRCBhbmQgR1FMX1FVRVJZKS4gT3RoZXJ3aXNlIGZhbHNlLlxuICAgKi9cbiAgYWJvcnRQcmV2aW91cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHF1ZXJ5IHdpbGwgYmUgYWJvcnRlZCB3aGVuIHRoZSBjb250YWluZXIgaXMgZGVzdHJveWVkLlxuICAgKiBAZGVmYXVsdCB0cnVlIC8vIE9ubHkgaWYgdGhlIHJlcXVlc3QgY2FuIGJlIGNhY2hlZCAoR0VULCBPUFRJT05TLCBIRUFEIGFuZCBHUUxfUVVFUlkpLiBPdGhlcndpc2UgZmFsc2UuXG4gICAqL1xuICBhYm9ydE9uRGVzdHJveT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHByZXZpb3VzIHBvbGxpbmcgd2lsbCBiZSBzdG9wcGVkIHdoZW4gYSBuZXcgcXVlcnkgaXMgcHVzaGVkIGludG8gdGhlIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgdHJ1ZSAvLyBPbmx5IGlmIHRoZSBxdWVyeSBoYXMgbm8gb3RoZXIgZGVwZW5kZW50cyBhbmQgdGhlIHJlcXVlc3QgY2FuIGJlIGNhY2hlZCAoR0VULCBPUFRJT05TLCBIRUFEIGFuZCBHUUxfUVVFUlkpLiBPdGhlcndpc2UgZmFsc2UuXG4gICAqL1xuICBzdG9wUHJldmlvdXNQb2xsaW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUZpbHRlckNvbmZpZyB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByZXNwb25zZSB3aWxsIGJlIGNhY2hlZCB1bnRpbCB0aGUgbmV4dCByZXNwb25zZSBpcyByZWNlaXZlZCBvciB0aGUgcXVlcnkgZmFpbHMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjYWNoZVJlc3BvbnNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGFkZFF1ZXJ5Q29udGFpbmVySGFuZGxpbmcgPSAoXG4gIG9iczogT2JzZXJ2YWJsZTxBbnlRdWVyeSB8IEFueVF1ZXJ5W10gfCBBbnlMZWdhY3lRdWVyeSB8IEFueUxlZ2FjeVF1ZXJ5W10gfCBudWxsPixcbiAgdmFsdWVGbjogKCkgPT4gQW55UXVlcnkgfCBBbnlRdWVyeVtdIHwgQW55TGVnYWN5UXVlcnkgfCBBbnlMZWdhY3lRdWVyeVtdIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgY29uZmlnPzogUXVlcnlDb250YWluZXJDb25maWcsXG4pID0+IHtcbiAgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGFkZFF1ZXJ5Q29udGFpbmVySGFuZGxpbmcpO1xuXG4gIGNvbnN0IHsgYWJvcnRQcmV2aW91cywgYWJvcnRPbkRlc3Ryb3ksIHN0b3BQcmV2aW91c1BvbGxpbmcgfSA9IGNvbmZpZyA/PyB7fTtcblxuICBjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIGNvbnN0IGRlc3Ryb3kkID0gY3JlYXRlRGVzdHJveSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0IHROb2RlID0gKGluamVjdG9yIGFzIGFueSkuX3ROb2RlO1xuICBjb25zdCBjb21wb25lbnRJZCA9IHROb2RlPy5pbmRleCA/PyAtMTtcblxuICBvYnNcbiAgICAucGlwZShcbiAgICAgIHRha2VVbnRpbChkZXN0cm95JCksXG4gICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICBwYWlyd2lzZSgpLFxuICAgICAgdGFwKChbcHJldlF1ZXJ5LCBjdXJyUXVlcnldKSA9PiB7XG4gICAgICAgIGNvbnN0IGNsZWFuUXVlcnkgPSAocTogQW55UXVlcnkgfCBBbnlMZWdhY3lRdWVyeSB8IG51bGwgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgICBpZiAoIXE/Ll9oYXNEZXBlbmRlbnRzKCkgJiYgKChhYm9ydFByZXZpb3VzID09PSB1bmRlZmluZWQgJiYgcT8uY2FuQmVDYWNoZWQpIHx8IGFib3J0UHJldmlvdXMpKSB7XG4gICAgICAgICAgICBxPy5hYm9ydCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFxPy5faGFzRGVwZW5kZW50cygpICYmXG4gICAgICAgICAgICAoKHN0b3BQcmV2aW91c1BvbGxpbmcgPT09IHVuZGVmaW5lZCAmJiBxPy5jYW5CZUNhY2hlZCkgfHwgc3RvcFByZXZpb3VzUG9sbGluZykgJiZcbiAgICAgICAgICAgIHE/LmlzUG9sbGluZ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcT8uc3RvcFBvbGxpbmcoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAocSBhcyB1bmtub3duIGFzIEFueUxlZ2FjeVF1ZXJ5KT8uZGVzdHJveT8uKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKChpc1F1ZXJ5KHByZXZRdWVyeSkgfHwgcHJldlF1ZXJ5ID09PSBudWxsKSAmJiAoaXNRdWVyeShjdXJyUXVlcnkpIHx8IGN1cnJRdWVyeSA9PT0gbnVsbCkpIHtcbiAgICAgICAgICBwcmV2UXVlcnk/Ll9yZW1vdmVEZXBlbmRlbnQoY29tcG9uZW50SWQpO1xuICAgICAgICAgIGN1cnJRdWVyeT8uX2FkZERlcGVuZGVudChjb21wb25lbnRJZCk7XG5cbiAgICAgICAgICBjbGVhblF1ZXJ5KHByZXZRdWVyeSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgKEFycmF5LmlzQXJyYXkocHJldlF1ZXJ5KSB8fCBwcmV2UXVlcnkgPT09IG51bGwpICYmXG4gICAgICAgICAgKEFycmF5LmlzQXJyYXkoY3VyclF1ZXJ5KSB8fCBjdXJyUXVlcnkgPT09IG51bGwpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChwcmV2UXVlcnkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldlF1ZXJ5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIHByZXZRdWVyeVtpXT8uX3JlbW92ZURlcGVuZGVudChjb21wb25lbnRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGN1cnJRdWVyeSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyUXVlcnkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgY3VyclF1ZXJ5W2ldPy5fYWRkRGVwZW5kZW50KGNvbXBvbmVudElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocHJldlF1ZXJ5KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZRdWVyeS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjbGVhblF1ZXJ5KHByZXZRdWVyeVtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIChpc1F1ZXJ5KHByZXZRdWVyeSkgJiYgQXJyYXkuaXNBcnJheShjdXJyUXVlcnkpKSB8fFxuICAgICAgICAgIChBcnJheS5pc0FycmF5KHByZXZRdWVyeSkgJiYgaXNRdWVyeShjdXJyUXVlcnkpKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBtaXggcXVlcmllcyBhbmQgYXJyYXlzIG9mIHF1ZXJpZXMgaW4gdGhlIHNhbWUgcXVlcnkgY29udGFpbmVyLicpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApXG4gICAgLnN1YnNjcmliZSgpO1xuXG4gIGRlc3Ryb3kkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgY29uc3QgcXVlcnkgPSB2YWx1ZUZuKCk7XG5cbiAgICBjb25zdCBoYW5kbGVRdWVyeSA9IChxOiBBbnlRdWVyeSB8IEFueUxlZ2FjeVF1ZXJ5IHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgcT8uX3JlbW92ZURlcGVuZGVudChjb21wb25lbnRJZCk7XG5cbiAgICAgIGlmICghcT8uX2hhc0RlcGVuZGVudHMoKSAmJiAoKHE/LmNhbkJlQ2FjaGVkICYmIGFib3J0T25EZXN0cm95ID09PSB1bmRlZmluZWQpIHx8IGFib3J0T25EZXN0cm95KSkge1xuICAgICAgICBxPy5hYm9ydCgpO1xuICAgICAgICAocSBhcyB1bmtub3duIGFzIEFueUxlZ2FjeVF1ZXJ5KT8uZGVzdHJveT8uKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChpc1F1ZXJ5KHF1ZXJ5KSkge1xuICAgICAgaGFuZGxlUXVlcnkocXVlcnkpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShxdWVyeSkpIHtcbiAgICAgIGZvciAoY29uc3QgcSBvZiBxdWVyeSkge1xuICAgICAgICBoYW5kbGVRdWVyeShxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRvUXVlcnlTaWduYWw8VCBleHRlbmRzIEFueVF1ZXJ5IHwgQW55TGVnYWN5UXVlcnkgfCBudWxsPihcbiAgc291cmNlOiBPYnNlcnZhYmxlPFQ+IHwgU3Vic2NyaWJhYmxlPFQ+LFxuKTogU2lnbmFsPFQgfCB1bmRlZmluZWQ+O1xuZXhwb3J0IGZ1bmN0aW9uIHRvUXVlcnlTaWduYWw8VCBleHRlbmRzIEFueVF1ZXJ5IHwgQW55TGVnYWN5UXVlcnkgfCBudWxsPihcbiAgc291cmNlOiBPYnNlcnZhYmxlPFQ+IHwgU3Vic2NyaWJhYmxlPFQ+LFxuICBvcHRpb25zOiBOb0luZmVyPFRvU2lnbmFsT3B0aW9uczxUIHwgdW5kZWZpbmVkPj4gJiB7XG4gICAgaW5pdGlhbFZhbHVlPzogdW5kZWZpbmVkO1xuICAgIHJlcXVpcmVTeW5jPzogZmFsc2U7XG4gIH0gJiBRdWVyeUNvbnRhaW5lckNvbmZpZyxcbik6IFNpZ25hbDxUIHwgdW5kZWZpbmVkPjtcbmV4cG9ydCBmdW5jdGlvbiB0b1F1ZXJ5U2lnbmFsPFQgZXh0ZW5kcyBBbnlRdWVyeSB8IEFueUxlZ2FjeVF1ZXJ5IHwgbnVsbD4oXG4gIHNvdXJjZTogT2JzZXJ2YWJsZTxUPiB8IFN1YnNjcmliYWJsZTxUPixcbiAgb3B0aW9uczogTm9JbmZlcjxUb1NpZ25hbE9wdGlvbnM8VCB8IG51bGw+PiAmIHtcbiAgICBpbml0aWFsVmFsdWU/OiBudWxsO1xuICAgIHJlcXVpcmVTeW5jPzogZmFsc2U7XG4gIH0gJiBRdWVyeUNvbnRhaW5lckNvbmZpZyxcbik6IFNpZ25hbDxUIHwgbnVsbD47XG5leHBvcnQgZnVuY3Rpb24gdG9RdWVyeVNpZ25hbDxUIGV4dGVuZHMgQW55UXVlcnkgfCBBbnlMZWdhY3lRdWVyeSB8IG51bGw+KFxuICBzb3VyY2U6IE9ic2VydmFibGU8VD4gfCBTdWJzY3JpYmFibGU8VD4sXG4gIG9wdGlvbnM6IE5vSW5mZXI8VG9TaWduYWxPcHRpb25zPFQ+PiAmIHtcbiAgICBpbml0aWFsVmFsdWU/OiB1bmRlZmluZWQ7XG4gICAgcmVxdWlyZVN5bmM6IHRydWU7XG4gIH0gJiBRdWVyeUNvbnRhaW5lckNvbmZpZyxcbik6IFNpZ25hbDxUPjtcbmV4cG9ydCBmdW5jdGlvbiB0b1F1ZXJ5U2lnbmFsPFQgZXh0ZW5kcyBBbnlRdWVyeSB8IEFueUxlZ2FjeVF1ZXJ5IHwgbnVsbCwgY29uc3QgVSBleHRlbmRzIFQ+KFxuICBzb3VyY2U6IE9ic2VydmFibGU8VD4gfCBTdWJzY3JpYmFibGU8VD4sXG4gIG9wdGlvbnM6IE5vSW5mZXI8VG9TaWduYWxPcHRpb25zPFQgfCBVPj4gJiB7XG4gICAgaW5pdGlhbFZhbHVlOiBVO1xuICAgIHJlcXVpcmVTeW5jPzogZmFsc2U7XG4gIH0gJiBRdWVyeUNvbnRhaW5lckNvbmZpZyxcbik6IFNpZ25hbDxUIHwgVT47XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1F1ZXJ5U2lnbmFsPFQgZXh0ZW5kcyBBbnlRdWVyeSB8IEFueUxlZ2FjeVF1ZXJ5IHwgbnVsbCwgVSA9IHVuZGVmaW5lZD4oXG4gIHNvdXJjZTogT2JzZXJ2YWJsZTxUPiB8IFN1YnNjcmliYWJsZTxUPixcbiAgb3B0aW9ucz86IFRvU2lnbmFsT3B0aW9uczxUIHwgVT4gJiB7IGluaXRpYWxWYWx1ZT86IFUgfSAmIFF1ZXJ5Q29udGFpbmVyQ29uZmlnLFxuKTogU2lnbmFsPFQgfCBVPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0IHMgPSB0b1NpZ25hbChzb3VyY2UsIG9wdGlvbnMgYXMgYW55KTtcblxuICBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nKHNvdXJjZSBhcyBPYnNlcnZhYmxlPFQ+LCAoKSA9PiBzKCkgYXMgVCwgb3B0aW9ucyk7XG5cbiAgcmV0dXJuIHMgYXMgU2lnbmFsPFQgfCBVPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVmZmVjdENvbXB1dGVkPFQgZXh0ZW5kcyBBbnlRdWVyeSB8IEFueUxlZ2FjeVF1ZXJ5IHwgQW55UXVlcnlbXSB8IEFueUxlZ2FjeVF1ZXJ5W10gfCBudWxsPihcbiAgY29tcHV0YXRpb246ICgpID0+IFQsXG4gIGluamVjdG9yOiBJbmplY3Rvcixcbikge1xuICBsZXQgaW5pdGlhbERhdGEgPSBudWxsO1xuXG4gIHRyeSB7XG4gICAgaW5pdGlhbERhdGEgPSBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IGNvbXB1dGF0aW9uKCkpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgZXJyb3JzIGluIHRoZSBpbml0aWFsIGNvbXB1dGF0aW9uXG4gICAgLy8gQW5ndWxhciBtaWdodCB0aHJvdyBhbiBlcnJvciBpZiByZXF1aXJlZCBpbnB1dHMgYXJlIHJlYWQgYnV0IG5vdCBhdmFpbGFibGUgeWV0XG4gIH1cblxuICBjb25zdCBsYXN0UmVzdWx0ID0gc2lnbmFsPFQ+KGluaXRpYWxEYXRhIGFzIFQpO1xuXG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4gY29tcHV0YXRpb24oKSk7XG5cbiAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgaWYgKGRhdGEgPT09IGxhc3RSZXN1bHQoKSkgcmV0dXJuO1xuXG4gICAgICBsYXN0UmVzdWx0LnNldChkYXRhKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhc3RSZXN1bHQuYXNSZWFkb25seSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlDb21wdXRlZDxUIGV4dGVuZHMgQW55UXVlcnkgfCBBbnlMZWdhY3lRdWVyeSB8IG51bGw+KFxuICBjb21wdXRhdGlvbjogKCkgPT4gVCxcbiAgb3B0aW9ucz86IENyZWF0ZUNvbXB1dGVkT3B0aW9uczxUPiAmIFF1ZXJ5Q29udGFpbmVyQ29uZmlnICYgVG9PYnNlcnZhYmxlT3B0aW9ucyxcbik6IFNpZ25hbDxUPiB7XG4gIGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICBjb25zdCBjID0gZWZmZWN0Q29tcHV0ZWQoY29tcHV0YXRpb24sIGluamVjdG9yKTtcbiAgY29uc3Qgb2JzID0gdG9PYnNlcnZhYmxlKGMsIG9wdGlvbnMpO1xuXG4gIGFkZFF1ZXJ5Q29udGFpbmVySGFuZGxpbmcob2JzLCAoKSA9PiBjKCksIG9wdGlvbnMpO1xuXG4gIHJldHVybiBjO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzaWduYWwgdGhhdCB3aWxsIG9ubHkgYmUgcmVhY3RpdmUgdW50aWwgdGhlIGZpcnN0IHF1ZXJ5IGlzIGNyZWF0ZWQuXG4gKiBBbGwgc3Vic2VxdWVudCBjaGFuZ2VzIGluc2lkZSB0aGUgY29tcHV0YXRpb24gd2lsbCBiZSBpZ25vcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlDb21wdXRlZFRpbGxUcnV0aHk8VCBleHRlbmRzIEFueVF1ZXJ5IHwgQW55TGVnYWN5UXVlcnkgfCBudWxsPihcbiAgY29tcHV0YXRpb246ICgpID0+IFQsXG4gIG9wdGlvbnM/OiBDcmVhdGVDb21wdXRlZE9wdGlvbnM8VD4gJiBRdWVyeUNvbnRhaW5lckNvbmZpZyAmIFRvT2JzZXJ2YWJsZU9wdGlvbnMsXG4pOiBTaWduYWw8VCB8IG51bGw+IHtcbiAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIGNvbnN0IGMgPSBjb21wdXRlZFRpbGxUcnV0aHkoZWZmZWN0Q29tcHV0ZWQoY29tcHV0YXRpb24sIGluamVjdG9yKSk7XG4gIGNvbnN0IG9icyA9IHRvT2JzZXJ2YWJsZShjLCBvcHRpb25zKTtcblxuICBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nKG9icywgKCkgPT4gYygpLCBvcHRpb25zKTtcblxuICByZXR1cm4gYztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QXJyYXlDb21wdXRlZDxUIGV4dGVuZHMgQW55UXVlcnlbXSB8IEFueUxlZ2FjeVF1ZXJ5W10gfCBudWxsPihcbiAgY29tcHV0YXRpb246ICgpID0+IFQsXG4gIG9wdGlvbnM/OiBDcmVhdGVDb21wdXRlZE9wdGlvbnM8VD4gJiBRdWVyeUNvbnRhaW5lckNvbmZpZyAmIFRvT2JzZXJ2YWJsZU9wdGlvbnMsXG4pOiBTaWduYWw8VD4ge1xuICBjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgY29uc3QgYyA9IGVmZmVjdENvbXB1dGVkKGNvbXB1dGF0aW9uLCBpbmplY3Rvcik7XG4gIGNvbnN0IG9icyA9IHRvT2JzZXJ2YWJsZShjLCBvcHRpb25zKTtcblxuICBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nKG9icywgKCkgPT4gYygpLCBvcHRpb25zKTtcblxuICByZXR1cm4gYztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvUXVlcnlTdWJqZWN0PFQgZXh0ZW5kcyBBbnlRdWVyeSB8IEFueUxlZ2FjeVF1ZXJ5IHwgbnVsbD4oXG4gIHNvdXJjZTogU2lnbmFsPFQ+LFxuICBvcHRpb25zPzogVG9PYnNlcnZhYmxlT3B0aW9ucyAmIFF1ZXJ5Q29udGFpbmVyQ29uZmlnLFxuKTogT2JzZXJ2YWJsZTxUPiB7XG4gIGNvbnN0IG9icyA9IHRvT2JzZXJ2YWJsZShzb3VyY2UsIG9wdGlvbnMpO1xuXG4gIGFkZFF1ZXJ5Q29udGFpbmVySGFuZGxpbmcob2JzLCAoKSA9PiBzb3VyY2UoKSwgb3B0aW9ucyk7XG5cbiAgcmV0dXJuIG9icztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5U3RhdGVTaWduYWw8VCBleHRlbmRzIFNpZ25hbDxBbnlRdWVyeSB8IEFueUxlZ2FjeVF1ZXJ5IHwgQW55UXVlcnlDb2xsZWN0aW9uIHwgbnVsbD4+KFxuICBzb3VyY2U6IFQsXG4gIG9wdGlvbnM/OiBRdWVyeUZpbHRlckNvbmZpZyxcbikge1xuICBjb25zdCB7IGNhY2hlUmVzcG9uc2UgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgY29uc3Qgcm9TaWduYWwgPSB0b1NpZ25hbChcbiAgICB0b09ic2VydmFibGUoc291cmNlKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChxKSA9PiBleHRyYWN0UXVlcnkocSk/LnN0YXRlJCA/PyBvZihudWxsKSksXG4gICAgICBzd2l0Y2hNYXAoKHN0YXRlKSA9PiB7XG4gICAgICAgIGlmIChjYWNoZVJlc3BvbnNlKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHN0YXRlKS5waXBlKGZpbHRlclF1ZXJ5U3RhdGVzKFtRdWVyeVN0YXRlVHlwZS5TdWNjZXNzLCBRdWVyeVN0YXRlVHlwZS5GYWlsdXJlXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9mKHN0YXRlKTtcbiAgICAgIH0pLFxuICAgICksXG4gICAge1xuICAgICAgaW5pdGlhbFZhbHVlOiBudWxsLFxuICAgIH0sXG4gICkgYXMgU2lnbmFsPFF1ZXJ5U3RhdGU8UXVlcnlEYXRhT2Y8UXVlcnlPZjxSZXR1cm5UeXBlPFQ+Pj4+IHwgbnVsbD47XG5cbiAgY29uc3QgcndTaWduYWwgPSBzaWduYWw8UXVlcnlTdGF0ZTxRdWVyeURhdGFPZjxRdWVyeU9mPFJldHVyblR5cGU8VD4+Pj4gfCBudWxsPihyb1NpZ25hbCgpKTtcblxuICBzeW5jU2lnbmFsKHJvU2lnbmFsLCByd1NpZ25hbCk7XG5cbiAgcmV0dXJuIHJ3U2lnbmFsO1xufVxuXG5leHBvcnQgdHlwZSBRdWVyeVN0YXRlU2lnbmFsPFQgZXh0ZW5kcyBTaWduYWw8QW55UXVlcnkgfCBBbnlMZWdhY3lRdWVyeSB8IEFueVF1ZXJ5Q29sbGVjdGlvbiB8IG51bGw+PiA9XG4gIFNpZ25hbDxRdWVyeURhdGFPZjxRdWVyeU9mPFJldHVyblR5cGU8VD4+PiB8IG51bGw+ICYgeyByZXNldDogKCkgPT4gdm9pZCB9O1xuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTdGF0ZVJlc3BvbnNlU2lnbmFsPFQgZXh0ZW5kcyBTaWduYWw8QW55UXVlcnkgfCBBbnlMZWdhY3lRdWVyeSB8IEFueVF1ZXJ5Q29sbGVjdGlvbiB8IG51bGw+PihcbiAgc291cmNlOiBULFxuICBvcHRpb25zPzogUXVlcnlGaWx0ZXJDb25maWcsXG4pIHtcbiAgY29uc3QgcyA9IHF1ZXJ5U3RhdGVTaWduYWwoc291cmNlLCBvcHRpb25zKTtcblxuICBjb25zdCBkYXRhU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gcygpO1xuXG4gICAgcmV0dXJuIGlzUXVlcnlTdGF0ZVN1Y2Nlc3Moc3RhdGUpID8gc3RhdGUucmVzcG9uc2UgOiBudWxsO1xuICB9KTtcblxuICAoZGF0YVNpZ25hbCBhcyBRdWVyeVN0YXRlU2lnbmFsPFQ+KVsncmVzZXQnXSA9ICgpID0+IHtcbiAgICBzLnNldChudWxsKTtcbiAgfTtcblxuICByZXR1cm4gZGF0YVNpZ25hbCBhcyBRdWVyeVN0YXRlU2lnbmFsPFQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTdGF0ZUVycm9yU2lnbmFsPFQgZXh0ZW5kcyBTaWduYWw8QW55UXVlcnkgfCBBbnlMZWdhY3lRdWVyeSB8IEFueVF1ZXJ5Q29sbGVjdGlvbiB8IG51bGw+PihcbiAgc291cmNlOiBULFxuKSB7XG4gIGNvbnN0IHMgPSBxdWVyeVN0YXRlU2lnbmFsKHNvdXJjZSk7XG5cbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IHMoKTtcblxuICAgIHJldHVybiBpc1F1ZXJ5U3RhdGVGYWlsdXJlKHN0YXRlKSA/IHN0YXRlLmVycm9yIDogbnVsbDtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVN0YXRlTG9hZGluZ1NpZ25hbDxUIGV4dGVuZHMgU2lnbmFsPEFueVF1ZXJ5IHwgQW55TGVnYWN5UXVlcnkgfCBBbnlRdWVyeUNvbGxlY3Rpb24gfCBudWxsPj4oXG4gIHNvdXJjZTogVCxcbikge1xuICBjb25zdCBzID0gcXVlcnlTdGF0ZVNpZ25hbChzb3VyY2UpO1xuXG4gIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBzKCk7XG5cbiAgICByZXR1cm4gaXNRdWVyeVN0YXRlTG9hZGluZyhzdGF0ZSkgPyBzdGF0ZSA6IG51bGw7XG4gIH0pO1xufVxuIl19","export const deepFreeze = (object) => {\n // check if object is actually an object or frozen\n if (!object || typeof object !== 'object' || Object.isFrozen(object)) {\n return object;\n }\n // Retrieve the property names defined on object\n const propNames = Object.getOwnPropertyNames(object);\n // Freeze properties before freezing self\n for (const name of propNames) {\n const value = object[name];\n if (value && typeof value === 'object') {\n deepFreeze(value);\n }\n }\n return Object.freeze(object);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcC1mcmVlemUudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi91dGlscy9kZWVwLWZyZWV6ZS51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFvQyxNQUFTLEVBQUUsRUFBRTtJQUN6RSxrREFBa0Q7SUFDbEQsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXJELHlDQUF5QztJQUV6QyxLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQzdCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQixJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxVQUFVLENBQUMsS0FBVSxDQUFDLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGRlZXBGcmVlemUgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihvYmplY3Q6IFQpID0+IHtcbiAgLy8gY2hlY2sgaWYgb2JqZWN0IGlzIGFjdHVhbGx5IGFuIG9iamVjdCBvciBmcm96ZW5cbiAgaWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcgfHwgT2JqZWN0LmlzRnJvemVuKG9iamVjdCkpIHtcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgLy8gUmV0cmlldmUgdGhlIHByb3BlcnR5IG5hbWVzIGRlZmluZWQgb24gb2JqZWN0XG4gIGNvbnN0IHByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG5cbiAgLy8gRnJlZXplIHByb3BlcnRpZXMgYmVmb3JlIGZyZWV6aW5nIHNlbGZcblxuICBmb3IgKGNvbnN0IG5hbWUgb2YgcHJvcE5hbWVzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvYmplY3RbbmFtZV07XG5cbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgZGVlcEZyZWV6ZSh2YWx1ZSBhcyBUKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShvYmplY3QpO1xufTtcbiJdfQ==","/**\n * Dummy function for providing types while not breaking inference.\n * **This function always returns null.**\n * @see https://github.com/microsoft/TypeScript/issues/26242\n * @returns null\n */\nexport const def = () => null;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvdXRpbHMvZGVmLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBUyxFQUFFLENBQUMsSUFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRHVtbXkgZnVuY3Rpb24gZm9yIHByb3ZpZGluZyB0eXBlcyB3aGlsZSBub3QgYnJlYWtpbmcgaW5mZXJlbmNlLlxuICogKipUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIG51bGwuKipcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNjI0MlxuICogQHJldHVybnMgbnVsbFxuICovXG5leHBvcnQgY29uc3QgZGVmID0gPERhdGE+KCkgPT4gbnVsbCBhcyB1bmtub3duIGFzIERhdGE7XG4iXX0=","import { assertInInjectionContext, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject } from 'rxjs';\nimport { Query, computeQueryQueryParams } from '../query';\nimport { buildQueryCacheKey, shouldCacheQuery } from '../query-client';\nimport { buildRoute } from '../request';\nimport { addQueryContainerHandling } from '../utils';\nexport class QueryCreator {\n constructor(_queryConfig, _client, _store) {\n this._queryConfig = _queryConfig;\n this._client = _client;\n this._store = _store;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.prepare = (args) => {\n const route = buildRoute({\n base: this._client.config.baseRoute,\n route: this._queryConfig.route,\n pathParams: args?.pathParams,\n queryParams: computeQueryQueryParams({ config: this._queryConfig, client: this._client, args }),\n queryParamConfig: this._client.config.request?.queryParams,\n });\n const cacheKey = (args?.config?.queryStoreCacheKey ?? '') + buildQueryCacheKey(route, args);\n if (shouldCacheQuery(this._queryConfig.method) && !args?.config?.skipQueryStore) {\n const existingQuery = this._store.get(cacheKey);\n if (existingQuery) {\n return existingQuery;\n }\n }\n const query = new Query(this._client, this._queryConfig, route, args ?? {}, cacheKey);\n if (shouldCacheQuery(this._queryConfig.method) && !args?.config?.skipQueryStore) {\n this._store.add(cacheKey, query);\n }\n this._store._dispatchQueryCreated(query);\n return query;\n };\n this.createSubject = (initialValue, config) => {\n assertInInjectionContext(this.createSubject);\n const subject = new BehaviorSubject(initialValue ?? null);\n addQueryContainerHandling(subject, () => subject.getValue(), config);\n return subject;\n };\n this.createSignal = (initialValue, config) => {\n assertInInjectionContext(this.createSignal);\n const _signal = signal(initialValue ?? null);\n addQueryContainerHandling(toObservable(_signal), () => _signal(), config);\n return _signal;\n };\n /**\n * @deprecated Use `myQuery.createSubject()` or `myQuery.createSignal()` instead. Will be removed in v6.\n */\n this.behaviorSubject = (initialValue) => new BehaviorSubject(initialValue ?? null);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY3JlYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1jcmVhdG9yL3F1ZXJ5LWNyZWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzFELE9BQU8sRUFBZSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBWXBGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUF3Qix5QkFBeUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUczRSxNQUFNLE9BQU8sWUFBWTtJQVF2QixZQUNVLFlBRXVELEVBQ3ZELE9BQW9CLEVBQ3BCLE1BQWtCO1FBSmxCLGlCQUFZLEdBQVosWUFBWSxDQUUyQztRQUN2RCxZQUFPLEdBQVAsT0FBTyxDQUFhO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQVk7UUFHNUIsNkRBQTZEO1FBQzdELGFBQWE7UUFDYixZQUFPLEdBQWdFLENBQ3JFLElBQWdFLEVBQ2hFLEVBQUU7WUFDRixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUM7Z0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFpQjtnQkFDMUMsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVO2dCQUM1QixXQUFXLEVBQUUsdUJBQXVCLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDL0YsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFdBQVc7YUFDM0QsQ0FBVSxDQUFDO1lBRVosTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEtBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUV0RyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDO2dCQUNoRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBcUQsUUFBUSxDQUFDLENBQUM7Z0JBRXBHLElBQUksYUFBYSxFQUFFLENBQUM7b0JBQ2xCLE9BQU8sYUFBYSxDQUFDO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUNyQixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxZQUFZLEVBQ2pCLEtBQUssRUFDTCxJQUFJLElBQUssRUFBZ0IsRUFDekIsUUFBUSxDQUNULENBQUM7WUFFRixJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDO2dCQUNoRixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUVELElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFekMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUM7UUFFRixrQkFBYSxHQUFHLENBQUMsWUFBcUQsRUFBRSxNQUE2QixFQUFFLEVBQUU7WUFDdkcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRTdDLE1BQU0sT0FBTyxHQUFHLElBQUksZUFBZSxDQUF5QyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUM7WUFFbEcseUJBQXlCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUVyRSxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUM7UUFFRixpQkFBWSxHQUFHLENBQUMsWUFBcUQsRUFBRSxNQUE2QixFQUFFLEVBQUU7WUFDdEcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRTVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBeUMsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDO1lBRXJGLHlCQUF5QixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUUxRSxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUM7UUFFRjs7V0FFRztRQUNILG9CQUFlLEdBQUcsQ0FBQyxZQUFxRCxFQUFFLEVBQUUsQ0FDMUUsSUFBSSxlQUFlLENBQXlDLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQztJQWxFakYsQ0FBQztDQW1FTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi4vZW50aXR5JztcbmltcG9ydCB7IFF1ZXJ5LCBjb21wdXRlUXVlcnlRdWVyeVBhcmFtcyB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBidWlsZFF1ZXJ5Q2FjaGVLZXksIHNob3VsZENhY2hlUXVlcnkgfSBmcm9tICcuLi9xdWVyeS1jbGllbnQnO1xuaW1wb3J0IHsgUXVlcnlTdG9yZSB9IGZyb20gJy4uL3F1ZXJ5LXN0b3JlJztcbmltcG9ydCB7XG4gIEFueVJvdXRlLFxuICBCYXNlQXJndW1lbnRzLFxuICBHcWxRdWVyeUNvbmZpZyxcbiAgUmVzdFF1ZXJ5Q29uZmlnLFxuICBSb3V0ZVR5cGUsXG4gIFdpdGhDb25maWcsXG4gIFdpdGhIZWFkZXJzLFxuICBXaXRoTW9jayxcbn0gZnJvbSAnLi4vcXVlcnkvcXVlcnkudHlwZXMnO1xuaW1wb3J0IHsgYnVpbGRSb3V0ZSB9IGZyb20gJy4uL3JlcXVlc3QnO1xuaW1wb3J0IHsgUXVlcnlDb250YWluZXJDb25maWcsIGFkZFF1ZXJ5Q29udGFpbmVySGFuZGxpbmcgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBRdWVyeVByZXBhcmVGbiB9IGZyb20gJy4vcXVlcnktY3JlYXRvci50eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeUNyZWF0b3I8XG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFJlc3BvbnNlLFxuICBSb3V0ZSBleHRlbmRzIFJvdXRlVHlwZTxBcmd1bWVudHM+LFxuICBTdG9yZSBleHRlbmRzIEVudGl0eVN0b3JlPHVua25vd24+LFxuICBEYXRhLFxuICBJZCxcbj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9xdWVyeUNvbmZpZzpcbiAgICAgIHwgUmVzdFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+XG4gICAgICB8IEdxbFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+LFxuICAgIHByaXZhdGUgX2NsaWVudDogUXVlcnlDbGllbnQsXG4gICAgcHJpdmF0ZSBfc3RvcmU6IFF1ZXJ5U3RvcmUsXG4gICkge31cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgcHJlcGFyZTogUXVlcnlQcmVwYXJlRm48QXJndW1lbnRzLCBSZXNwb25zZSwgUm91dGUsIFN0b3JlLCBEYXRhLCBJZD4gPSAoXG4gICAgYXJncz86IEFyZ3VtZW50cyAmIFdpdGhIZWFkZXJzICYgV2l0aENvbmZpZyAmIFdpdGhNb2NrPFJlc3BvbnNlPixcbiAgKSA9PiB7XG4gICAgY29uc3Qgcm91dGUgPSBidWlsZFJvdXRlKHtcbiAgICAgIGJhc2U6IHRoaXMuX2NsaWVudC5jb25maWcuYmFzZVJvdXRlLFxuICAgICAgcm91dGU6IHRoaXMuX3F1ZXJ5Q29uZmlnLnJvdXRlIGFzIEFueVJvdXRlLFxuICAgICAgcGF0aFBhcmFtczogYXJncz8ucGF0aFBhcmFtcyxcbiAgICAgIHF1ZXJ5UGFyYW1zOiBjb21wdXRlUXVlcnlRdWVyeVBhcmFtcyh7IGNvbmZpZzogdGhpcy5fcXVlcnlDb25maWcsIGNsaWVudDogdGhpcy5fY2xpZW50LCBhcmdzIH0pLFxuICAgICAgcXVlcnlQYXJhbUNvbmZpZzogdGhpcy5fY2xpZW50LmNvbmZpZy5yZXF1ZXN0Py5xdWVyeVBhcmFtcyxcbiAgICB9KSBhcyBSb3V0ZTtcblxuICAgIGNvbnN0IGNhY2hlS2V5ID0gKGFyZ3M/LmNvbmZpZz8ucXVlcnlTdG9yZUNhY2hlS2V5ID8/ICcnKSArIGJ1aWxkUXVlcnlDYWNoZUtleShyb3V0ZSBhcyBzdHJpbmcsIGFyZ3MpO1xuXG4gICAgaWYgKHNob3VsZENhY2hlUXVlcnkodGhpcy5fcXVlcnlDb25maWcubWV0aG9kKSAmJiAhYXJncz8uY29uZmlnPy5za2lwUXVlcnlTdG9yZSkge1xuICAgICAgY29uc3QgZXhpc3RpbmdRdWVyeSA9IHRoaXMuX3N0b3JlLmdldDxRdWVyeTxSZXNwb25zZSwgQXJndW1lbnRzLCBSb3V0ZSwgU3RvcmUsIERhdGEsIElkPj4oY2FjaGVLZXkpO1xuXG4gICAgICBpZiAoZXhpc3RpbmdRdWVyeSkge1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdRdWVyeTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeSA9IG5ldyBRdWVyeTxSZXNwb25zZSwgQXJndW1lbnRzLCBSb3V0ZSwgU3RvcmUsIERhdGEsIElkPihcbiAgICAgIHRoaXMuX2NsaWVudCxcbiAgICAgIHRoaXMuX3F1ZXJ5Q29uZmlnLFxuICAgICAgcm91dGUsXG4gICAgICBhcmdzID8/ICh7fSBhcyBBcmd1bWVudHMpLFxuICAgICAgY2FjaGVLZXksXG4gICAgKTtcblxuICAgIGlmIChzaG91bGRDYWNoZVF1ZXJ5KHRoaXMuX3F1ZXJ5Q29uZmlnLm1ldGhvZCkgJiYgIWFyZ3M/LmNvbmZpZz8uc2tpcFF1ZXJ5U3RvcmUpIHtcbiAgICAgIHRoaXMuX3N0b3JlLmFkZChjYWNoZUtleSwgcXVlcnkpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0b3JlLl9kaXNwYXRjaFF1ZXJ5Q3JlYXRlZChxdWVyeSk7XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH07XG5cbiAgY3JlYXRlU3ViamVjdCA9IChpbml0aWFsVmFsdWU/OiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLnByZXBhcmU+IHwgbnVsbCwgY29uZmlnPzogUXVlcnlDb250YWluZXJDb25maWcpID0+IHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQodGhpcy5jcmVhdGVTdWJqZWN0KTtcblxuICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJldHVyblR5cGU8dHlwZW9mIHRoaXMucHJlcGFyZT4gfCBudWxsPihpbml0aWFsVmFsdWUgPz8gbnVsbCk7XG5cbiAgICBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nKHN1YmplY3QsICgpID0+IHN1YmplY3QuZ2V0VmFsdWUoKSwgY29uZmlnKTtcblxuICAgIHJldHVybiBzdWJqZWN0O1xuICB9O1xuXG4gIGNyZWF0ZVNpZ25hbCA9IChpbml0aWFsVmFsdWU/OiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLnByZXBhcmU+IHwgbnVsbCwgY29uZmlnPzogUXVlcnlDb250YWluZXJDb25maWcpID0+IHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQodGhpcy5jcmVhdGVTaWduYWwpO1xuXG4gICAgY29uc3QgX3NpZ25hbCA9IHNpZ25hbDxSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLnByZXBhcmU+IHwgbnVsbD4oaW5pdGlhbFZhbHVlID8/IG51bGwpO1xuXG4gICAgYWRkUXVlcnlDb250YWluZXJIYW5kbGluZyh0b09ic2VydmFibGUoX3NpZ25hbCksICgpID0+IF9zaWduYWwoKSwgY29uZmlnKTtcblxuICAgIHJldHVybiBfc2lnbmFsO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYG15UXVlcnkuY3JlYXRlU3ViamVjdCgpYCBvciBgbXlRdWVyeS5jcmVhdGVTaWduYWwoKWAgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIHY2LlxuICAgKi9cbiAgYmVoYXZpb3JTdWJqZWN0ID0gKGluaXRpYWxWYWx1ZT86IFJldHVyblR5cGU8dHlwZW9mIHRoaXMucHJlcGFyZT4gfCBudWxsKSA9PlxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8UmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5wcmVwYXJlPiB8IG51bGw+KGluaXRpYWxWYWx1ZSA/PyBudWxsKTtcbn1cbiJdfQ==","import { Subject, fromEvent, take, takeUntil, timer } from 'rxjs';\nexport class QueryStore {\n constructor(_config) {\n this._config = _config;\n /**\n * @internal\n */\n this._store = new Map();\n this._garbageCollector = null;\n this._isInLowResourceMode = false;\n this._lastBlurTimestamp = Date.now();\n this._storeChange$ = new Subject();\n this._queryCreated$ = new Subject();\n this.storeChange$ = this._storeChange$.asObservable();\n this.queryCreated$ = this._queryCreated$.asObservable();\n this._initSmartQueryHandling();\n }\n add(id, query) {\n this._store.set(id, query);\n this._initGarbageCollector();\n this._logState(id, query, 'SET');\n this._storeChange$.next(id);\n }\n get(id) {\n return this._store.get(id) ?? null;\n }\n remove(id) {\n this._store.delete(id);\n this._logState(id, null, 'REMOVE');\n this._storeChange$.next(id);\n }\n forEach(callback) {\n for (const [key, query] of this._store) {\n callback(query, key);\n }\n }\n refreshQueriesInUse(config) {\n const { ignoreCacheValidity, purgeUnused } = config ?? {};\n for (const [key, query] of this._store) {\n if (query.isInUse &&\n (query.isExpired || ignoreCacheValidity) &&\n query.autoRefreshOnConfig.queryClientDefaultHeadersChange) {\n query.execute({ skipCache: true, _triggeredVia: 'auto' });\n }\n else if (purgeUnused && !query.isInUse) {\n this.remove(key);\n }\n }\n }\n /**\n * @internal\n */\n _dispatchQueryCreated(query) {\n this._queryCreated$.next(query);\n }\n _initSmartQueryHandling() {\n const windowBlur$ = fromEvent(window, 'blur');\n const windowFocus$ = fromEvent(window, 'focus');\n windowBlur$.subscribe(() => {\n timer(5000)\n .pipe(takeUntil(windowFocus$), take(1))\n .subscribe(() => {\n this._lastBlurTimestamp = Date.now();\n this._isInLowResourceMode = true;\n this._stopGarbageCollector();\n if (this._config?.enableSmartPolling) {\n this.forEach((query) => {\n if (!query.isPolling || !query._enableSmartPolling) {\n return;\n }\n query.pausePolling();\n });\n }\n });\n });\n windowFocus$.subscribe(() => {\n if (!this._isInLowResourceMode) {\n return;\n }\n this._isInLowResourceMode = false;\n if (this._config?.enableSmartPolling || this._config?.autoRefreshQueriesOnWindowFocus) {\n this.forEach((query) => {\n if (this._config?.enableSmartPolling && query._isPollingPaused) {\n query.resumePolling();\n }\n if (Date.now() - this._lastBlurTimestamp > 15000) {\n if (this._config?.autoRefreshQueriesOnWindowFocus &&\n query.isExpired &&\n query.isInUse &&\n query.autoRefreshOnConfig.windowFocus) {\n query.execute({ skipCache: true, _triggeredVia: 'auto' });\n }\n }\n });\n }\n this._initGarbageCollector();\n });\n }\n _logState(key, item, operation) {\n if (!this._config?.enableChangeLogging)\n return;\n const stateAsJson = {};\n this._store.forEach((value, key) => {\n stateAsJson[key] = value;\n });\n console.log(`%c[${operation}] ${key}`, 'font-weight: bold');\n console.log({ operation, key, item });\n console.log(stateAsJson);\n }\n _initGarbageCollector() {\n if (this._garbageCollector !== null) {\n return;\n }\n this._logGarbageCollector('Start');\n this._garbageCollector = window.setInterval(() => {\n this._runGarbageCollector();\n }, 15000);\n }\n _stopGarbageCollector() {\n if (this._garbageCollector !== null) {\n window.clearInterval(this._garbageCollector);\n this._garbageCollector = null;\n this._logGarbageCollector('Stop');\n }\n }\n _runGarbageCollector() {\n this._logGarbageCollector('Collecting...');\n this._store.forEach((item, key) => {\n if (item.isExpired && !item.isInUse) {\n this.remove(key);\n }\n });\n this._logGarbageCollector('Collection done');\n if (!this._store.size) {\n this._stopGarbageCollector();\n }\n }\n _logGarbageCollector(action) {\n if (!this._config?.enableGarbageCollectorLogging)\n return;\n console.log(`%cGC: ${action}`, 'color: yellow; font-weight: bold');\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnktc3RvcmUvcXVlcnktc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHbEUsTUFBTSxPQUFPLFVBQVU7SUFnQnJCLFlBQ1UsT0FLUDtRQUxPLFlBQU8sR0FBUCxPQUFPLENBS2Q7UUFyQkg7O1dBRUc7UUFDTSxXQUFNLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFFdEMsc0JBQWlCLEdBQWtCLElBQUksQ0FBQztRQUN4Qyx5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDN0IsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWhDLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUN0QyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFZLENBQUM7UUFFeEMsaUJBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2pELGtCQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQVUxRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsR0FBRyxDQUFDLEVBQVUsRUFBRSxLQUFlO1FBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUzQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUU3QixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELEdBQUcsQ0FBcUIsRUFBVTtRQUNoQyxPQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBTyxJQUFJLElBQUksQ0FBQztJQUM1QyxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQVU7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV2QixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELE9BQU8sQ0FBQyxRQUFnRDtRQUN0RCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUFpRTtRQUNuRixNQUFNLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUUxRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZDLElBQ0UsS0FBSyxDQUFDLE9BQU87Z0JBQ2IsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLG1CQUFtQixDQUFDO2dCQUN4QyxLQUFLLENBQUMsbUJBQW1CLENBQUMsK0JBQStCLEVBQ3pELENBQUM7Z0JBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDNUQsQ0FBQztpQkFBTSxJQUFJLFdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILHFCQUFxQixDQUFDLEtBQWU7UUFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixNQUFNLFdBQVcsR0FBRyxTQUFTLENBQVEsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBUSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFdkQsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDekIsS0FBSyxDQUFDLElBQUksQ0FBQztpQkFDUixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdEMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO2dCQUNqQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFFN0IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQzs0QkFDbkQsT0FBTzt3QkFDVCxDQUFDO3dCQUVELEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDdkIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFFSCxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQy9CLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztZQUVsQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxDQUFDO2dCQUN0RixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ3JCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDL0QsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUN4QixDQUFDO29CQUVELElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsQ0FBQzt3QkFDakQsSUFDRSxJQUFJLENBQUMsT0FBTyxFQUFFLCtCQUErQjs0QkFDN0MsS0FBSyxDQUFDLFNBQVM7NEJBQ2YsS0FBSyxDQUFDLE9BQU87NEJBQ2IsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFDckMsQ0FBQzs0QkFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQzt3QkFDNUQsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFNBQVMsQ0FBQyxHQUFrQixFQUFFLElBQXFCLEVBQUUsU0FBaUI7UUFDNUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsbUJBQW1CO1lBQUUsT0FBTztRQUUvQyxNQUFNLFdBQVcsR0FBNkIsRUFBRSxDQUFDO1FBRWpELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2pDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sU0FBUyxLQUFLLEdBQUcsRUFBRSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFFNUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQy9DLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQzlCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDaEMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsTUFBYztRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSw2QkFBNkI7WUFBRSxPQUFPO1FBRXpELE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxNQUFNLEVBQUUsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QsIGZyb21FdmVudCwgdGFrZSwgdGFrZVVudGlsLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQW55UXVlcnkgfSBmcm9tICcuLi9xdWVyeSc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeVN0b3JlIHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVhZG9ubHkgX3N0b3JlID0gbmV3IE1hcDxzdHJpbmcsIEFueVF1ZXJ5PigpO1xuXG4gIHByaXZhdGUgX2dhcmJhZ2VDb2xsZWN0b3I6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9pc0luTG93UmVzb3VyY2VNb2RlID0gZmFsc2U7XG4gIHByaXZhdGUgX2xhc3RCbHVyVGltZXN0YW1wID0gRGF0ZS5ub3coKTtcblxuICBwcml2YXRlIF9zdG9yZUNoYW5nZSQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgX3F1ZXJ5Q3JlYXRlZCQgPSBuZXcgU3ViamVjdDxBbnlRdWVyeT4oKTtcblxuICByZWFkb25seSBzdG9yZUNoYW5nZSQgPSB0aGlzLl9zdG9yZUNoYW5nZSQuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IHF1ZXJ5Q3JlYXRlZCQgPSB0aGlzLl9xdWVyeUNyZWF0ZWQkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2NvbmZpZz86IHtcbiAgICAgIGVuYWJsZUNoYW5nZUxvZ2dpbmc/OiBib29sZWFuO1xuICAgICAgZW5hYmxlR2FyYmFnZUNvbGxlY3RvckxvZ2dpbmc/OiBib29sZWFuO1xuICAgICAgYXV0b1JlZnJlc2hRdWVyaWVzT25XaW5kb3dGb2N1cz86IGJvb2xlYW47XG4gICAgICBlbmFibGVTbWFydFBvbGxpbmc/OiBib29sZWFuO1xuICAgIH0sXG4gICkge1xuICAgIHRoaXMuX2luaXRTbWFydFF1ZXJ5SGFuZGxpbmcoKTtcbiAgfVxuXG4gIGFkZChpZDogc3RyaW5nLCBxdWVyeTogQW55UXVlcnkpIHtcbiAgICB0aGlzLl9zdG9yZS5zZXQoaWQsIHF1ZXJ5KTtcblxuICAgIHRoaXMuX2luaXRHYXJiYWdlQ29sbGVjdG9yKCk7XG5cbiAgICB0aGlzLl9sb2dTdGF0ZShpZCwgcXVlcnksICdTRVQnKTtcblxuICAgIHRoaXMuX3N0b3JlQ2hhbmdlJC5uZXh0KGlkKTtcbiAgfVxuXG4gIGdldDxUIGV4dGVuZHMgQW55UXVlcnk+KGlkOiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuICh0aGlzLl9zdG9yZS5nZXQoaWQpIGFzIFQpID8/IG51bGw7XG4gIH1cblxuICByZW1vdmUoaWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3N0b3JlLmRlbGV0ZShpZCk7XG5cbiAgICB0aGlzLl9sb2dTdGF0ZShpZCwgbnVsbCwgJ1JFTU9WRScpO1xuXG4gICAgdGhpcy5fc3RvcmVDaGFuZ2UkLm5leHQoaWQpO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjazogKHZhbHVlOiBBbnlRdWVyeSwga2V5OiBzdHJpbmcpID0+IHZvaWQpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHF1ZXJ5XSBvZiB0aGlzLl9zdG9yZSkge1xuICAgICAgY2FsbGJhY2socXVlcnksIGtleSk7XG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaFF1ZXJpZXNJblVzZShjb25maWc/OiB7IGlnbm9yZUNhY2hlVmFsaWRpdHk/OiBib29sZWFuOyBwdXJnZVVudXNlZD86IGJvb2xlYW4gfSkge1xuICAgIGNvbnN0IHsgaWdub3JlQ2FjaGVWYWxpZGl0eSwgcHVyZ2VVbnVzZWQgfSA9IGNvbmZpZyA/PyB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgcXVlcnldIG9mIHRoaXMuX3N0b3JlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHF1ZXJ5LmlzSW5Vc2UgJiZcbiAgICAgICAgKHF1ZXJ5LmlzRXhwaXJlZCB8fCBpZ25vcmVDYWNoZVZhbGlkaXR5KSAmJlxuICAgICAgICBxdWVyeS5hdXRvUmVmcmVzaE9uQ29uZmlnLnF1ZXJ5Q2xpZW50RGVmYXVsdEhlYWRlcnNDaGFuZ2VcbiAgICAgICkge1xuICAgICAgICBxdWVyeS5leGVjdXRlKHsgc2tpcENhY2hlOiB0cnVlLCBfdHJpZ2dlcmVkVmlhOiAnYXV0bycgfSk7XG4gICAgICB9IGVsc2UgaWYgKHB1cmdlVW51c2VkICYmICFxdWVyeS5pc0luVXNlKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlKGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2Rpc3BhdGNoUXVlcnlDcmVhdGVkKHF1ZXJ5OiBBbnlRdWVyeSkge1xuICAgIHRoaXMuX3F1ZXJ5Q3JlYXRlZCQubmV4dChxdWVyeSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0U21hcnRRdWVyeUhhbmRsaW5nKCkge1xuICAgIGNvbnN0IHdpbmRvd0JsdXIkID0gZnJvbUV2ZW50PEV2ZW50Pih3aW5kb3csICdibHVyJyk7XG4gICAgY29uc3Qgd2luZG93Rm9jdXMkID0gZnJvbUV2ZW50PEV2ZW50Pih3aW5kb3csICdmb2N1cycpO1xuXG4gICAgd2luZG93Qmx1ciQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRpbWVyKDUwMDApXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh3aW5kb3dGb2N1cyQpLCB0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9sYXN0Qmx1clRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgICAgICAgdGhpcy5faXNJbkxvd1Jlc291cmNlTW9kZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fc3RvcEdhcmJhZ2VDb2xsZWN0b3IoKTtcblxuICAgICAgICAgIGlmICh0aGlzLl9jb25maWc/LmVuYWJsZVNtYXJ0UG9sbGluZykge1xuICAgICAgICAgICAgdGhpcy5mb3JFYWNoKChxdWVyeSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXF1ZXJ5LmlzUG9sbGluZyB8fCAhcXVlcnkuX2VuYWJsZVNtYXJ0UG9sbGluZykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHF1ZXJ5LnBhdXNlUG9sbGluZygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIHdpbmRvd0ZvY3VzJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9pc0luTG93UmVzb3VyY2VNb2RlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNJbkxvd1Jlc291cmNlTW9kZSA9IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy5fY29uZmlnPy5lbmFibGVTbWFydFBvbGxpbmcgfHwgdGhpcy5fY29uZmlnPy5hdXRvUmVmcmVzaFF1ZXJpZXNPbldpbmRvd0ZvY3VzKSB7XG4gICAgICAgIHRoaXMuZm9yRWFjaCgocXVlcnkpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY29uZmlnPy5lbmFibGVTbWFydFBvbGxpbmcgJiYgcXVlcnkuX2lzUG9sbGluZ1BhdXNlZCkge1xuICAgICAgICAgICAgcXVlcnkucmVzdW1lUG9sbGluZygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChEYXRlLm5vdygpIC0gdGhpcy5fbGFzdEJsdXJUaW1lc3RhbXAgPiAxNTAwMCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLl9jb25maWc/LmF1dG9SZWZyZXNoUXVlcmllc09uV2luZG93Rm9jdXMgJiZcbiAgICAgICAgICAgICAgcXVlcnkuaXNFeHBpcmVkICYmXG4gICAgICAgICAgICAgIHF1ZXJ5LmlzSW5Vc2UgJiZcbiAgICAgICAgICAgICAgcXVlcnkuYXV0b1JlZnJlc2hPbkNvbmZpZy53aW5kb3dGb2N1c1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHF1ZXJ5LmV4ZWN1dGUoeyBza2lwQ2FjaGU6IHRydWUsIF90cmlnZ2VyZWRWaWE6ICdhdXRvJyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbml0R2FyYmFnZUNvbGxlY3RvcigpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9nU3RhdGUoa2V5OiBzdHJpbmcgfCBudWxsLCBpdGVtOiBBbnlRdWVyeSB8IG51bGwsIG9wZXJhdGlvbjogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWc/LmVuYWJsZUNoYW5nZUxvZ2dpbmcpIHJldHVybjtcblxuICAgIGNvbnN0IHN0YXRlQXNKc29uOiBSZWNvcmQ8c3RyaW5nLCBBbnlRdWVyeT4gPSB7fTtcblxuICAgIHRoaXMuX3N0b3JlLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIHN0YXRlQXNKc29uW2tleV0gPSB2YWx1ZTtcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKGAlY1ske29wZXJhdGlvbn1dICR7a2V5fWAsICdmb250LXdlaWdodDogYm9sZCcpO1xuXG4gICAgY29uc29sZS5sb2coeyBvcGVyYXRpb24sIGtleSwgaXRlbSB9KTtcbiAgICBjb25zb2xlLmxvZyhzdGF0ZUFzSnNvbik7XG4gIH1cblxuICBwcml2YXRlIF9pbml0R2FyYmFnZUNvbGxlY3RvcigpIHtcbiAgICBpZiAodGhpcy5fZ2FyYmFnZUNvbGxlY3RvciAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ0dhcmJhZ2VDb2xsZWN0b3IoJ1N0YXJ0Jyk7XG5cbiAgICB0aGlzLl9nYXJiYWdlQ29sbGVjdG9yID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuX3J1bkdhcmJhZ2VDb2xsZWN0b3IoKTtcbiAgICB9LCAxNTAwMCk7XG4gIH1cblxuICBwcml2YXRlIF9zdG9wR2FyYmFnZUNvbGxlY3RvcigpIHtcbiAgICBpZiAodGhpcy5fZ2FyYmFnZUNvbGxlY3RvciAhPT0gbnVsbCkge1xuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fZ2FyYmFnZUNvbGxlY3Rvcik7XG4gICAgICB0aGlzLl9nYXJiYWdlQ29sbGVjdG9yID0gbnVsbDtcbiAgICAgIHRoaXMuX2xvZ0dhcmJhZ2VDb2xsZWN0b3IoJ1N0b3AnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9ydW5HYXJiYWdlQ29sbGVjdG9yKCkge1xuICAgIHRoaXMuX2xvZ0dhcmJhZ2VDb2xsZWN0b3IoJ0NvbGxlY3RpbmcuLi4nKTtcblxuICAgIHRoaXMuX3N0b3JlLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xuICAgICAgaWYgKGl0ZW0uaXNFeHBpcmVkICYmICFpdGVtLmlzSW5Vc2UpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ0dhcmJhZ2VDb2xsZWN0b3IoJ0NvbGxlY3Rpb24gZG9uZScpO1xuXG4gICAgaWYgKCF0aGlzLl9zdG9yZS5zaXplKSB7XG4gICAgICB0aGlzLl9zdG9wR2FyYmFnZUNvbGxlY3RvcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2xvZ0dhcmJhZ2VDb2xsZWN0b3IoYWN0aW9uOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZz8uZW5hYmxlR2FyYmFnZUNvbGxlY3RvckxvZ2dpbmcpIHJldHVybjtcblxuICAgIGNvbnNvbGUubG9nKGAlY0dDOiAke2FjdGlvbn1gLCAnY29sb3I6IHllbGxvdzsgZm9udC13ZWlnaHQ6IGJvbGQnKTtcbiAgfVxufVxuIl19","import { BehaviorSubject } from 'rxjs';\nimport { QueryCreator } from '../query-creator';\nimport { QueryStore } from '../query-store';\nexport class QueryClient {\n get config() {\n return this._clientConfig;\n }\n get authProvider() {\n return this._authProvider$.getValue() ?? this._clientConfig.parent?._authProvider$.getValue() ?? null;\n }\n get authProvider$() {\n return this._authProvider$.asObservable() ?? this._clientConfig.parent?._authProvider$.asObservable() ?? null;\n }\n constructor(_clientConfig) {\n this._clientConfig = _clientConfig;\n this._authProvider$ = new BehaviorSubject(null);\n this.get = (queryConfig) => this.fetch({\n ...queryConfig,\n method: 'GET',\n });\n this.post = (queryConfig) => this.fetch({\n ...queryConfig,\n method: 'POST',\n });\n this.put = (queryConfig) => this.fetch({\n ...queryConfig,\n method: 'PUT',\n });\n this.patch = (queryConfig) => this.fetch({\n ...queryConfig,\n method: 'PATCH',\n });\n this.delete = (queryConfig) => this.fetch({\n ...queryConfig,\n method: 'DELETE',\n });\n this.gqlQuery = (queryConfig) => this.fetch({\n ...queryConfig,\n method: 'GQL_QUERY',\n });\n this.gqlMutate = (queryConfig) => this.fetch({\n ...queryConfig,\n method: 'GQL_MUTATE',\n });\n this.fetch = (queryConfig) => new QueryCreator(queryConfig, this, this._store);\n this.setAuthProvider = (authProvider) => {\n if (this.authProvider) {\n this.authProvider?.cleanUp();\n }\n this._authProvider$.next(authProvider);\n };\n this.setDefaultHeaders = (config) => {\n if (!this._clientConfig.request) {\n this._clientConfig.request = {\n headers: config.headers ?? undefined,\n };\n }\n else {\n this._clientConfig.request.headers = config.headers ?? undefined;\n }\n if (config.refreshQueriesInUse) {\n this._store.refreshQueriesInUse({ purgeUnused: true, ignoreCacheValidity: true });\n }\n };\n this.clearAuthProvider = () => {\n this.authProvider?.cleanUp();\n this._authProvider$.next(null);\n };\n this._updateBaseRoute = (route) => {\n this._clientConfig.baseRoute = route;\n };\n this._store = new QueryStore({\n enableChangeLogging: _clientConfig.logging?.queryStateChanges,\n enableGarbageCollectorLogging: _clientConfig.logging?.queryStateGarbageCollector,\n autoRefreshQueriesOnWindowFocus: _clientConfig.request?.autoRefreshQueriesOnWindowFocus ?? true,\n enableSmartPolling: _clientConfig.request?.enableSmartPolling ?? true,\n });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL3F1ZXJ5LWNsaWVudC9xdWVyeS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVd2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTVDLE1BQU0sT0FBTyxXQUFXO0lBTXRCLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUM7SUFDeEcsQ0FBQztJQUNELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDO0lBQ2hILENBQUM7SUFHRCxZQUFvQixhQUFnQztRQUFoQyxrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7UUFGbkMsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBc0IsSUFBSSxDQUFDLENBQUM7UUFXakYsUUFBRyxHQUFHLENBUUosV0FBa0YsRUFDbEYsRUFBRSxDQUNGLElBQUksQ0FBQyxLQUFLLENBQThDO1lBQ3RELEdBQUcsV0FBVztZQUNkLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQyxDQUFDO1FBRUwsU0FBSSxHQUFHLENBUUwsV0FBa0YsRUFDbEYsRUFBRSxDQUNGLElBQUksQ0FBQyxLQUFLLENB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QWtCLEVBQUUsYUFBYSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsSUFBSSxJQUFJO1NBQ3RFLENBQUMsQ0FBQztJQUNMLENBQUM7Q0F5SkYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEF1dGhQcm92aWRlciB9IGZyb20gJy4uL2F1dGgnO1xuaW1wb3J0IHsgRW50aXR5U3RvcmUgfSBmcm9tICcuLi9lbnRpdHknO1xuaW1wb3J0IHtcbiAgQmFzZUFyZ3VtZW50cyxcbiAgR3FsUXVlcnlDb25maWcsXG4gIEdxbFF1ZXJ5Q29uZmlnV2l0aG91dE1ldGhvZCxcbiAgUXVlcnlDb25maWdXaXRob3V0TWV0aG9kLFxuICBSZXN0UXVlcnlDb25maWcsXG4gIFJvdXRlVHlwZSxcbn0gZnJvbSAnLi4vcXVlcnknO1xuaW1wb3J0IHsgUXVlcnlDcmVhdG9yIH0gZnJvbSAnLi4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBRdWVyeVN0b3JlIH0gZnJvbSAnLi4vcXVlcnktc3RvcmUnO1xuaW1wb3J0IHsgUmVxdWVzdEhlYWRlcnMsIFJlcXVlc3RIZWFkZXJzTWV0aG9kTWFwIH0gZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQgeyBRdWVyeUNsaWVudENvbmZpZyB9IGZyb20gJy4vcXVlcnktY2xpZW50LnR5cGVzJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5Q2xpZW50IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVhZG9ubHkgX3N0b3JlOiBRdWVyeVN0b3JlO1xuXG4gIGdldCBjb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudENvbmZpZztcbiAgfVxuXG4gIGdldCBhdXRoUHJvdmlkZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dGhQcm92aWRlciQuZ2V0VmFsdWUoKSA/PyB0aGlzLl9jbGllbnRDb25maWcucGFyZW50Py5fYXV0aFByb3ZpZGVyJC5nZXRWYWx1ZSgpID8/IG51bGw7XG4gIH1cbiAgZ2V0IGF1dGhQcm92aWRlciQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dGhQcm92aWRlciQuYXNPYnNlcnZhYmxlKCkgPz8gdGhpcy5fY2xpZW50Q29uZmlnLnBhcmVudD8uX2F1dGhQcm92aWRlciQuYXNPYnNlcnZhYmxlKCkgPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9hdXRoUHJvdmlkZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoUHJvdmlkZXIgfCBudWxsPihudWxsKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jbGllbnRDb25maWc6IFF1ZXJ5Q2xpZW50Q29uZmlnKSB7XG4gICAgdGhpcy5fc3RvcmUgPSBuZXcgUXVlcnlTdG9yZSh7XG4gICAgICBlbmFibGVDaGFuZ2VMb2dnaW5nOiBfY2xpZW50Q29uZmlnLmxvZ2dpbmc/LnF1ZXJ5U3RhdGVDaGFuZ2VzLFxuICAgICAgZW5hYmxlR2FyYmFnZUNvbGxlY3RvckxvZ2dpbmc6IF9jbGllbnRDb25maWcubG9nZ2luZz8ucXVlcnlTdGF0ZUdhcmJhZ2VDb2xsZWN0b3IsXG4gICAgICBhdXRvUmVmcmVzaFF1ZXJpZXNPbldpbmRvd0ZvY3VzOiBfY2xpZW50Q29uZmlnLnJlcXVlc3Q/LmF1dG9SZWZyZXNoUXVlcmllc09uV2luZG93Rm9jdXMgPz8gdHJ1ZSxcbiAgICAgIGVuYWJsZVNtYXJ0UG9sbGluZzogX2NsaWVudENvbmZpZy5yZXF1ZXN0Py5lbmFibGVTbWFydFBvbGxpbmcgPz8gdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldCA9IDxcbiAgICBSb3V0ZSBleHRlbmRzIFJvdXRlVHlwZTxBcmd1bWVudHM+LFxuICAgIFJlc3BvbnNlLFxuICAgIElkLFxuICAgIERhdGEgPSBSZXNwb25zZSxcbiAgICBBcmd1bWVudHMgZXh0ZW5kcyBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4gPSBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgPihcbiAgICBxdWVyeUNvbmZpZzogUXVlcnlDb25maWdXaXRob3V0TWV0aG9kPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+LFxuICApID0+XG4gICAgdGhpcy5mZXRjaDxSb3V0ZSwgUmVzcG9uc2UsIEFyZ3VtZW50cywgSWQsIFN0b3JlLCBEYXRhPih7XG4gICAgICAuLi5xdWVyeUNvbmZpZyxcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgfSk7XG5cbiAgcG9zdCA9IDxcbiAgICBSb3V0ZSBleHRlbmRzIFJvdXRlVHlwZTxBcmd1bWVudHM+LFxuICAgIFJlc3BvbnNlLFxuICAgIElkLFxuICAgIERhdGEgPSBSZXNwb25zZSxcbiAgICBBcmd1bWVudHMgZXh0ZW5kcyBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4gPSBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgPihcbiAgICBxdWVyeUNvbmZpZzogUXVlcnlDb25maWdXaXRob3V0TWV0aG9kPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+LFxuICApID0+XG4gICAgdGhpcy5mZXRjaDxSb3V0ZSwgUmVzcG9uc2UsIEFyZ3VtZW50cywgSWQsIFN0b3JlLCBEYXRhPih7XG4gICAgICAuLi5xdWVyeUNvbmZpZyxcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIH0pO1xuXG4gIHB1dCA9IDxcbiAgICBSb3V0ZSBleHRlbmRzIFJvdXRlVHlwZTxBcmd1bWVudHM+LFxuICAgIFJlc3BvbnNlLFxuICAgIElkLFxuICAgIERhdGEgPSBSZXNwb25zZSxcbiAgICBBcmd1bWVudHMgZXh0ZW5kcyBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4gPSBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgPihcbiAgICBxdWVyeUNvbmZpZzogUXVlcnlDb25maWdXaXRob3V0TWV0aG9kPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+LFxuICApID0+XG4gICAgdGhpcy5mZXRjaDxSb3V0ZSwgUmVzcG9uc2UsIEFyZ3VtZW50cywgSWQsIFN0b3JlLCBEYXRhPih7XG4gICAgICAuLi5xdWVyeUNvbmZpZyxcbiAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgfSk7XG5cbiAgcGF0Y2ggPSA8XG4gICAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPixcbiAgICBSZXNwb25zZSxcbiAgICBJZCxcbiAgICBEYXRhID0gUmVzcG9uc2UsXG4gICAgQXJndW1lbnRzIGV4dGVuZHMgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgICBTdG9yZSBleHRlbmRzIEVudGl0eVN0b3JlPHVua25vd24+ID0gRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gID4oXG4gICAgcXVlcnlDb25maWc6IFF1ZXJ5Q29uZmlnV2l0aG91dE1ldGhvZDxSb3V0ZSwgUmVzcG9uc2UsIEFyZ3VtZW50cywgU3RvcmUsIERhdGEsIElkPixcbiAgKSA9PlxuICAgIHRoaXMuZmV0Y2g8Um91dGUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIElkLCBTdG9yZSwgRGF0YT4oe1xuICAgICAgLi4ucXVlcnlDb25maWcsXG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgfSk7XG5cbiAgZGVsZXRlID0gPFxuICAgIFJvdXRlIGV4dGVuZHMgUm91dGVUeXBlPEFyZ3VtZW50cz4sXG4gICAgUmVzcG9uc2UsXG4gICAgSWQsXG4gICAgRGF0YSA9IFJlc3BvbnNlLFxuICAgIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgU3RvcmUgZXh0ZW5kcyBFbnRpdHlTdG9yZTx1bmtub3duPiA9IEVudGl0eVN0b3JlPHVua25vd24+LFxuICA+KFxuICAgIHF1ZXJ5Q29uZmlnOiBRdWVyeUNvbmZpZ1dpdGhvdXRNZXRob2Q8Um91dGUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIFN0b3JlLCBEYXRhLCBJZD4sXG4gICkgPT5cbiAgICB0aGlzLmZldGNoPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBJZCwgU3RvcmUsIERhdGE+KHtcbiAgICAgIC4uLnF1ZXJ5Q29uZmlnLFxuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICB9KTtcblxuICBncWxRdWVyeSA9IDxcbiAgICBSb3V0ZSBleHRlbmRzIFJvdXRlVHlwZTxBcmd1bWVudHM+LFxuICAgIFJlc3BvbnNlLFxuICAgIElkLFxuICAgIERhdGEgPSBSZXNwb25zZSxcbiAgICBBcmd1bWVudHMgZXh0ZW5kcyBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4gPSBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgPihcbiAgICBxdWVyeUNvbmZpZzogR3FsUXVlcnlDb25maWdXaXRob3V0TWV0aG9kPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+LFxuICApID0+XG4gICAgdGhpcy5mZXRjaDxSb3V0ZSwgUmVzcG9uc2UsIEFyZ3VtZW50cywgSWQsIFN0b3JlLCBEYXRhPih7XG4gICAgICAuLi5xdWVyeUNvbmZpZyxcbiAgICAgIG1ldGhvZDogJ0dRTF9RVUVSWScsXG4gICAgfSk7XG5cbiAgZ3FsTXV0YXRlID0gPFxuICAgIFJvdXRlIGV4dGVuZHMgUm91dGVUeXBlPEFyZ3VtZW50cz4sXG4gICAgUmVzcG9uc2UsXG4gICAgSWQsXG4gICAgRGF0YSA9IFJlc3BvbnNlLFxuICAgIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgU3RvcmUgZXh0ZW5kcyBFbnRpdHlTdG9yZTx1bmtub3duPiA9IEVudGl0eVN0b3JlPHVua25vd24+LFxuICA+KFxuICAgIHF1ZXJ5Q29uZmlnOiBHcWxRdWVyeUNvbmZpZ1dpdGhvdXRNZXRob2Q8Um91dGUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIFN0b3JlLCBEYXRhLCBJZD4sXG4gICkgPT5cbiAgICB0aGlzLmZldGNoPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBJZCwgU3RvcmUsIERhdGE+KHtcbiAgICAgIC4uLnF1ZXJ5Q29uZmlnLFxuICAgICAgbWV0aG9kOiAnR1FMX01VVEFURScsXG4gICAgfSk7XG5cbiAgZmV0Y2ggPSA8XG4gICAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPixcbiAgICBSZXNwb25zZSxcbiAgICBBcmd1bWVudHMgZXh0ZW5kcyBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkLFxuICAgIElkLFxuICAgIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4gPSBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgICBEYXRhID0gUmVzcG9uc2UsXG4gID4oXG4gICAgcXVlcnlDb25maWc6XG4gICAgICB8IFJlc3RRdWVyeUNvbmZpZzxSb3V0ZSwgUmVzcG9uc2UsIEFyZ3VtZW50cywgU3RvcmUsIERhdGEsIElkPlxuICAgICAgfCBHcWxRdWVyeUNvbmZpZzxSb3V0ZSwgUmVzcG9uc2UsIEFyZ3VtZW50cywgU3RvcmUsIERhdGEsIElkPixcbiAgKSA9PiBuZXcgUXVlcnlDcmVhdG9yPEFyZ3VtZW50cywgUmVzcG9uc2UsIFJvdXRlLCBTdG9yZSwgRGF0YSwgSWQ+KHF1ZXJ5Q29uZmlnLCB0aGlzLCB0aGlzLl9zdG9yZSk7XG5cbiAgc2V0QXV0aFByb3ZpZGVyID0gKGF1dGhQcm92aWRlcjogQXV0aFByb3ZpZGVyKSA9PiB7XG4gICAgaWYgKHRoaXMuYXV0aFByb3ZpZGVyKSB7XG4gICAgICB0aGlzLmF1dGhQcm92aWRlcj8uY2xlYW5VcCgpO1xuICAgIH1cblxuICAgIHRoaXMuX2F1dGhQcm92aWRlciQubmV4dChhdXRoUHJvdmlkZXIpO1xuICB9O1xuXG4gIHNldERlZmF1bHRIZWFkZXJzID0gKGNvbmZpZzoge1xuICAgIGhlYWRlcnM6IFJlcXVlc3RIZWFkZXJzIHwgUmVxdWVzdEhlYWRlcnNNZXRob2RNYXAgfCBudWxsO1xuICAgIHJlZnJlc2hRdWVyaWVzSW5Vc2U/OiBib29sZWFuO1xuICB9KSA9PiB7XG4gICAgaWYgKCF0aGlzLl9jbGllbnRDb25maWcucmVxdWVzdCkge1xuICAgICAgdGhpcy5fY2xpZW50Q29uZmlnLnJlcXVlc3QgPSB7XG4gICAgICAgIGhlYWRlcnM6IGNvbmZpZy5oZWFkZXJzID8/IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NsaWVudENvbmZpZy5yZXF1ZXN0LmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyA/PyB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5yZWZyZXNoUXVlcmllc0luVXNlKSB7XG4gICAgICB0aGlzLl9zdG9yZS5yZWZyZXNoUXVlcmllc0luVXNlKHsgcHVyZ2VVbnVzZWQ6IHRydWUsIGlnbm9yZUNhY2hlVmFsaWRpdHk6IHRydWUgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNsZWFyQXV0aFByb3ZpZGVyID0gKCkgPT4ge1xuICAgIHRoaXMuYXV0aFByb3ZpZGVyPy5jbGVhblVwKCk7XG4gICAgdGhpcy5fYXV0aFByb3ZpZGVyJC5uZXh0KG51bGwpO1xuICB9O1xuXG4gIF91cGRhdGVCYXNlUm91dGUgPSAocm91dGU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMuX2NsaWVudENvbmZpZy5iYXNlUm91dGUgPSByb3V0ZTtcbiAgfTtcbn1cbiJdfQ==","export const shouldCacheQuery = (method) => {\n return method === 'GET' || method === 'OPTIONS' || method === 'HEAD' || method === 'GQL_QUERY';\n};\nexport const buildQueryCacheKey = (route, args) => {\n const variables = JSON.stringify(args?.variables || {})\n // replace all curly braces with empty string\n .replace(/{|}/g, '')\n // replace new lines and whitespaces with empty string\n .replace(/\\s/g, '');\n const seed = `${route}...${variables}`;\n let hash = 0;\n for (const char of seed) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;\n }\n // Force positive number hash.\n // 2147483647 = equivalent of Integer.MAX_VALUE.\n hash += 2147483647 + 1;\n return hash.toString();\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY2xpZW50LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL3F1ZXJ5LWNsaWVudC9xdWVyeS1jbGllbnQudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtJQUNqRCxPQUFPLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUssTUFBTSxJQUFJLE1BQU0sS0FBSyxXQUFXLENBQUM7QUFDakcsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFhLEVBQUUsSUFBK0IsRUFBRSxFQUFFO0lBQ25GLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDckQsNkNBQTZDO1NBQzVDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ3BCLHNEQUFzRDtTQUNyRCxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXRCLE1BQU0sSUFBSSxHQUFHLEdBQUcsS0FBSyxNQUFNLFNBQVMsRUFBRSxDQUFDO0lBRXZDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUViLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDeEIsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLGdEQUFnRDtJQUNoRCxJQUFJLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUV2QixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN6QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQXJndW1lbnRzIH0gZnJvbSAnLi4vcXVlcnkvcXVlcnkudHlwZXMnO1xuaW1wb3J0IHsgTWV0aG9kIH0gZnJvbSAnLi4vcmVxdWVzdCc7XG5cbmV4cG9ydCBjb25zdCBzaG91bGRDYWNoZVF1ZXJ5ID0gKG1ldGhvZDogTWV0aG9kKSA9PiB7XG4gIHJldHVybiBtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ09QVElPTlMnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnIHx8IG1ldGhvZCA9PT0gJ0dRTF9RVUVSWSc7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRRdWVyeUNhY2hlS2V5ID0gKHJvdXRlOiBzdHJpbmcsIGFyZ3M6IEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQpID0+IHtcbiAgY29uc3QgdmFyaWFibGVzID0gSlNPTi5zdHJpbmdpZnkoYXJncz8udmFyaWFibGVzIHx8IHt9KVxuICAgIC8vIHJlcGxhY2UgYWxsIGN1cmx5IGJyYWNlcyB3aXRoIGVtcHR5IHN0cmluZ1xuICAgIC5yZXBsYWNlKC97fH0vZywgJycpXG4gICAgLy8gcmVwbGFjZSBuZXcgbGluZXMgYW5kIHdoaXRlc3BhY2VzIHdpdGggZW1wdHkgc3RyaW5nXG4gICAgLnJlcGxhY2UoL1xccy9nLCAnJyk7XG5cbiAgY29uc3Qgc2VlZCA9IGAke3JvdXRlfS4uLiR7dmFyaWFibGVzfWA7XG5cbiAgbGV0IGhhc2ggPSAwO1xuXG4gIGZvciAoY29uc3QgY2hhciBvZiBzZWVkKSB7XG4gICAgaGFzaCA9IChNYXRoLmltdWwoMzEsIGhhc2gpICsgY2hhci5jaGFyQ29kZUF0KDApKSA8PCAwO1xuICB9XG5cbiAgLy8gRm9yY2UgcG9zaXRpdmUgbnVtYmVyIGhhc2guXG4gIC8vIDIxNDc0ODM2NDcgPSBlcXVpdmFsZW50IG9mIEludGVnZXIuTUFYX1ZBTFVFLlxuICBoYXNoICs9IDIxNDc0ODM2NDcgKyAxO1xuXG4gIHJldHVybiBoYXNoLnRvU3RyaW5nKCk7XG59O1xuIl19","import { RuntimeError } from '@ethlete/core';\nexport const queryFeatureUsedMultipleTimes = (type) => {\n return new RuntimeError(0 /* QueryRuntimeErrorCode.QUERY_FEATURE_USED_MULTIPLE_TIMES */, `The query feature \"${type}()\" was used multiple times.`);\n};\nexport const withArgsQueryFeatureMissingButRouteIsFunction = () => {\n 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.`);\n};\nexport const withPollingUsedOnUnsupportedHttpMethod = (method) => {\n 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.`);\n};\nexport const withAutoRefreshUsedOnUnsupportedHttpMethod = (method) => {\n 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.`);\n};\nexport const withAutoRefreshUsedInManualQuery = () => {\n 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.` +\n ` If this is intentional, set \"ignoreOnlyManualExecution\" to true inside the auto refresh config.`);\n};\nexport const silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent = () => {\n 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.`);\n};\nexport const cookieLoginTriedButCookieDisabled = () => {\n return new RuntimeError(200 /* QueryRuntimeErrorCode.COOKIE_LOGIN_TRIED_BUT_COOKIE_DISABLED */, `Cookie login has been tried, but the cookie is disabled.`);\n};\nexport const enableCookieCalledWithoutCookieConfig = () => {\n 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.`);\n};\nexport const disableCookieCalledWithoutCookieConfig = () => {\n 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.`);\n};\nexport const loginCalledWithoutConfig = () => {\n return new RuntimeError(203 /* QueryRuntimeErrorCode.LOGIN_CALLED_WITHOUT_CONFIG */, `login() has been called without a config. Please set it during the auth provider creation.`);\n};\nexport const loginWithTokenCalledWithoutConfig = () => {\n 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.`);\n};\nexport const refreshTokenCalledWithoutConfig = () => {\n 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.`);\n};\nexport const selectRoleCalledWithoutConfig = () => {\n 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.`);\n};\nexport const defaultResponseTransformerResponseNotObject = (currentType) => {\n 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}\".`);\n};\nexport const defaultResponseTransformerResponseNotContainingAccessToken = () => {\n 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.`);\n};\nexport const defaultResponseTransformerResponseNotContainingRefreshToken = () => {\n 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.`);\n};\nexport const unableToDecryptBearerToken = (token) => {\n return new RuntimeError(210 /* QueryRuntimeErrorCode.UNABLE_TO_DECRYPT_BEARER_TOKEN */, `The bearer token could not be decrypted: ${token}`);\n};\nexport const bearerExpiresInPropertyNotNumber = (expiresIn) => {\n return new RuntimeError(211 /* QueryRuntimeErrorCode.BEARER_EXPIRES_IN_PROPERTY_NOT_NUMBER */, `The expires in property is not a number: ${expiresIn}`);\n};\nexport const uncacheableRequestHasCacheKeyParam = (key) => {\n 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.`);\n};\nexport const uncacheableRequestHasAllowCacheParam = () => {\n return new RuntimeError(301 /* QueryRuntimeErrorCode.UNCACHEABLE_REQUEST_HAS_ALLOW_CACHE_PARAM */, `This request is uncacheable, but allowCache is set to true. Please remove it.`);\n};\nexport const pagedQueryStackPageBiggerThanTotalPages = (page, totalPages) => {\n return new RuntimeError(400 /* QueryRuntimeErrorCode.PAGED_QUERY_STACK_PAGE_BIGGER_THAN_TOTAL_PAGES */, `The page \"${page}\" is bigger than the total pages \"${totalPages}\".`);\n};\nexport const pagedQueryStackNextPageCalledWithoutPreviousPage = () => {\n 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.`);\n};\nexport const pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage = () => {\n 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.`);\n};\nexport const queryStackWithArgsUsed = () => {\n 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.`);\n};\nexport const queryStackWithResponseUpdateUsed = () => {\n 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.`);\n};\nexport const queryStackTotalQueriesAndExpectedQueriesMismatch = (totalQueries, expectedQueries) => {\n 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.`);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9odHRwL3F1ZXJ5LWVycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBNEM3QyxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLElBQXNCLEVBQUUsRUFBRTtJQUN0RSxPQUFPLElBQUksWUFBWSxrRUFFckIsc0JBQXNCLElBQUksOEJBQThCLENBQ3pELENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSw2Q0FBNkMsR0FBRyxHQUFHLEVBQUU7SUFDaEUsT0FBTyxJQUFJLFlBQVksd0ZBRXJCLDBFQUEwRSxDQUMzRSxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sc0NBQXNDLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtJQUN2RSxPQUFPLElBQUksWUFBWSwrRUFFckIsY0FBYyxNQUFNLCtGQUErRixDQUNwSCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMENBQTBDLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtJQUMzRSxPQUFPLElBQUksWUFBWSxvRkFFckIsY0FBYyxNQUFNLG1HQUFtRyxDQUN4SCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsR0FBRyxFQUFFO0lBQ25ELE9BQU8sSUFBSSxZQUFZLHlFQUVyQiw4RkFBOEY7UUFDNUYsa0dBQWtHLENBQ3JHLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3REFBd0QsR0FBRyxHQUFHLEVBQUU7SUFDM0UsT0FBTyxJQUFJLFlBQVkscUdBRXJCLHdHQUF3RyxDQUN6RyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUcsR0FBRyxFQUFFO0lBQ3BELE9BQU8sSUFBSSxZQUFZLHlFQUVyQiwwREFBMEQsQ0FDM0QsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFDQUFxQyxHQUFHLEdBQUcsRUFBRTtJQUN4RCxPQUFPLElBQUksWUFBWSw2RUFFckIsZ0hBQWdILENBQ2pILENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQ0FBc0MsR0FBRyxHQUFHLEVBQUU7SUFDekQsT0FBTyxJQUFJLFlBQVksOEVBRXJCLGlIQUFpSCxDQUNsSCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxFQUFFO0lBQzNDLE9BQU8sSUFBSSxZQUFZLDhEQUVyQiw0RkFBNEYsQ0FDN0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLEdBQUcsRUFBRTtJQUNwRCxPQUFPLElBQUksWUFBWSx5RUFFckIscUdBQXFHLENBQ3RHLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyxHQUFHLEVBQUU7SUFDbEQsT0FBTyxJQUFJLFlBQVksc0VBRXJCLG1HQUFtRyxDQUNwRyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsR0FBRyxFQUFFO0lBQ2hELE9BQU8sSUFBSSxZQUFZLG9FQUVyQixpR0FBaUcsQ0FDbEcsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDJDQUEyQyxHQUFHLENBQUMsV0FBbUIsRUFBRSxFQUFFO0lBQ2pGLE9BQU8sSUFBSSxZQUFZLG1GQUVyQix1RkFBdUYsV0FBVyxJQUFJLENBQ3ZHLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwwREFBMEQsR0FBRyxHQUFHLEVBQUU7SUFDN0UsT0FBTyxJQUFJLFlBQVksb0dBRXJCLDZGQUE2RixDQUM5RixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMkRBQTJELEdBQUcsR0FBRyxFQUFFO0lBQzlFLE9BQU8sSUFBSSxZQUFZLHFHQUVyQiw2RkFBNkYsQ0FDOUYsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDMUQsT0FBTyxJQUFJLFlBQVksaUVBRXJCLDRDQUE0QyxLQUFLLEVBQUUsQ0FDcEQsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLENBQUMsU0FBa0IsRUFBRSxFQUFFO0lBQ3JFLE9BQU8sSUFBSSxZQUFZLHdFQUVyQiw0Q0FBNEMsU0FBUyxFQUFFLENBQ3hELENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFO0lBQ2hFLE9BQU8sSUFBSSxZQUFZLDBFQUVyQiw4REFBOEQsR0FBRyxxQkFBcUIsQ0FDdkYsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUFHLEdBQUcsRUFBRTtJQUN2RCxPQUFPLElBQUksWUFBWSw0RUFFckIsK0VBQStFLENBQ2hGLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FBRyxDQUFDLElBQVksRUFBRSxVQUFrQixFQUFFLEVBQUU7SUFDMUYsT0FBTyxJQUFJLFlBQVksaUZBRXJCLGFBQWEsSUFBSSxxQ0FBcUMsVUFBVSxJQUFJLENBQ3JFLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnREFBZ0QsR0FBRyxHQUFHLEVBQUU7SUFDbkUsT0FBTyxJQUFJLFlBQVksMkZBRXJCLGlJQUFpSSxDQUNsSSxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sc0RBQXNELEdBQUcsR0FBRyxFQUFFO0lBQ3pFLE9BQU8sSUFBSSxZQUFZLG1HQUVyQixxRkFBcUYsQ0FDdEYsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsRUFBRTtJQUN6QyxPQUFPLElBQUksWUFBWSw2REFFckIsMEZBQTBGLENBQzNGLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxHQUFHLEVBQUU7SUFDbkQsT0FBTyxJQUFJLFlBQVksd0VBRXJCLG9HQUFvRyxDQUNyRyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0RBQWdELEdBQUcsQ0FBQyxZQUFvQixFQUFFLGVBQXVCLEVBQUUsRUFBRTtJQUNoSCxPQUFPLElBQUksWUFBWSwwRkFFckIsc0JBQXNCLFlBQVksK0JBQStCLGVBQWUsNExBQTRMLENBQzdRLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSdW50aW1lRXJyb3IgfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IFF1ZXJ5RmVhdHVyZVR5cGUgfSBmcm9tICcuL3F1ZXJ5LWZlYXR1cmVzJztcblxuLy8gY29kZXMgMC05OTlcbmV4cG9ydCBjb25zdCBlbnVtIFF1ZXJ5UnVudGltZUVycm9yQ29kZSB7XG4gIC8vIFF1ZXJ5XG4gIFFVRVJZX0ZFQVRVUkVfVVNFRF9NVUxUSVBMRV9USU1FUyA9IDAsXG5cbiAgLy8gUXVlcnkgZmVhdHVyZXNcbiAgV0lUSF9BUkdTX1FVRVJZX0ZFQVRVUkVfTUlTU0lOR19CVVRfUk9VVEVfSVNfRlVOQ1RJT04gPSAxMDAsXG4gIFdJVEhfUE9MTElOR19VU0VEX09OX1VOU1VQUE9SVEVEX0hUVFBfTUVUSE9EID0gMTAxLFxuICBXSVRIX0FVVE9fUkVGUkVTSF9VU0VEX09OX1VOU1VQUE9SVEVEX0hUVFBfTUVUSE9EID0gMTAyLFxuICBXSVRIX0FVVE9fUkVGUkVTSF9VU0VEX0lOX01BTlVBTF9RVUVSWSA9IDEwMyxcbiAgU0lMRU5DRV9NSVNTSU5HX1dJVEhfQVJHU19GRUFUVVJFX0VSUk9SX1VTRURfQlVUX1dJVEhfQVJHU19QUkVTRU5UID0gMTA0LFxuXG4gIC8vIEF1dGggcHJvdmlkZXJcbiAgQ09PS0lFX0xPR0lOX1RSSUVEX0JVVF9DT09LSUVfRElTQUJMRUQgPSAyMDAsXG4gIEVOQUJMRV9DT09LSUVfQ0FMTEVEX1dJVEhPVVRfQ09PS0lFX0NPTkZJRyA9IDIwMSxcbiAgRElTQUJMRV9DT09LSUVfQ0FMTEVEX1dJVEhPVVRfQ09PS0lFX0NPTkZJRyA9IDIwMixcbiAgTE9HSU5fQ0FMTEVEX1dJVEhPVVRfQ09ORklHID0gMjAzLFxuICBMT0dJTl9XSVRIX1RPS0VOX0NBTExFRF9XSVRIT1VUX0NPTkZJRyA9IDIwNCxcbiAgUkVGUkVTSF9UT0tFTl9DQUxMRURfV0lUSE9VVF9DT05GSUcgPSAyMDUsXG4gIFNFTEVDVF9ST0xFX0NBTExFRF9XSVRIT1VUX0NPTkZJRyA9IDIwNixcbiAgREVGQVVMVF9SRVNQT05TRV9UUkFOU0ZPUk1FUl9SRVNQT05TRV9OT1RfT0JKRUNUID0gMjA3LFxuICBERUZBVUxUX1JFU1BPTlNFX1RSQU5TRk9STUVSX1JFU1BPTlNFX05PVF9DT05UQUlOSU5HX0FDQ0VTU19UT0tFTiA9IDIwOCxcbiAgREVGQVVMVF9SRVNQT05TRV9UUkFOU0ZPUk1FUl9SRVNQT05TRV9OT1RfQ09OVEFJTklOR19SRUZSRVNIX1RPS0VOID0gMjA5LFxuICBVTkFCTEVfVE9fREVDUllQVF9CRUFSRVJfVE9LRU4gPSAyMTAsXG4gIEJFQVJFUl9FWFBJUkVTX0lOX1BST1BFUlRZX05PVF9OVU1CRVIgPSAyMTEsXG5cbiAgLy8gUXVlcnkgUmVwb3NpdG9yeVxuICBVTkNBQ0hFQUJMRV9SRVFVRVNUX0hBU19DQUNIRV9LRVlfUEFSQU0gPSAzMDAsXG4gIFVOQ0FDSEVBQkxFX1JFUVVFU1RfSEFTX0FMTE9XX0NBQ0hFX1BBUkFNID0gMzAxLFxuXG4gIC8vIFBhZ2VkIFF1ZXJ5IFN0YWNrXG4gIFBBR0VEX1FVRVJZX1NUQUNLX1BBR0VfQklHR0VSX1RIQU5fVE9UQUxfUEFHRVMgPSA0MDAsXG4gIFBBR0VEX1FVRVJZX1NUQUNLX05FWFRfUEFHRV9DQUxMRURfV0lUSE9VVF9QUkVWSU9VU19QQUdFID0gNDAxLFxuICBQQUdFRF9RVUVSWV9TVEFDS19QUkVWSU9VU19QQUdFX0NBTExFRF9CVVRfQUxSRUFEWV9BVF9GSVJTVF9QQUdFID0gNDAyLFxuXG4gIC8vIFF1ZXJ5IFN0YWNrXG4gIFFVRVJZX1NUQUNLX1dJVEhfQVJHU19VU0VEID0gNTAwLFxuICBRVUVSWV9TVEFDS19XSVRIX1JFU1BPTlNFX1VQREFURV9VU0VEID0gNTAxLFxuICBRVUVSWV9TVEFDS19UT1RBTF9RVUVSSUVTX0FORF9FWFBFQ1RFRF9RVUVSSUVTX01JU01BVENIID0gNTAyLFxufVxuXG5leHBvcnQgY29uc3QgcXVlcnlGZWF0dXJlVXNlZE11bHRpcGxlVGltZXMgPSAodHlwZTogUXVlcnlGZWF0dXJlVHlwZSkgPT4ge1xuICByZXR1cm4gbmV3IFJ1bnRpbWVFcnJvcihcbiAgICBRdWVyeVJ1bnRpbWVFcnJvckNvZGUuUVVFUllfRkVBVFVSRV9VU0VEX01VTFRJUExFX1RJTUVTLFxuICAgIGBUaGUgcXVlcnkgZmVhdHVyZSBcIiR7dHlwZX0oKVwiIHdhcyB1c2VkIG11bHRpcGxlIHRpbWVzLmAsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgd2l0aEFyZ3NRdWVyeUZlYXR1cmVNaXNzaW5nQnV0Um91dGVJc0Z1bmN0aW9uID0gKCkgPT4ge1xuICByZXR1cm4gbmV3IFJ1bnRpbWVFcnJvcihcbiAgICBRdWVyeVJ1bnRpbWVFcnJvckNvZGUuV0lUSF9BUkdTX1FVRVJZX0ZFQVRVUkVfTUlTU0lOR19CVVRfUk9VVEVfSVNfRlVOQ1RJT04sXG4gICAgYFRoaXMgcXVlcmllcyByb3V0ZSBpcyBhIGZ1bmN0aW9uLCBidXQgYSBcIndpdGhBcmdzKClcIiBmZWF0dXJlIGlzIG1pc3NpbmcuYCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB3aXRoUG9sbGluZ1VzZWRPblVuc3VwcG9ydGVkSHR0cE1ldGhvZCA9IChtZXRob2Q6IHN0cmluZykgPT4ge1xuICByZXR1cm4gbmV3IFJ1bnRpbWVFcnJvcihcbiAgICBRdWVyeVJ1bnRpbWVFcnJvckNvZGUuV0lUSF9QT0xMSU5HX1VTRURfT05fVU5TVVBQT1JURURfSFRUUF9NRVRIT0QsXG4gICAgYFRoaXMgaXMgYSBcIiR7bWV0aG9kfVwiIHJlcXVlc3QsIFwid2l0aFBvbGxpbmcoKVwiIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBHRVQsIEhFQUQsIE9QVElPTlMgcmVxdWVzdHMgYW5kIEdRTCBxdWVyaWVzLmAsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgd2l0aEF1dG9SZWZyZXNoVXNlZE9uVW5zdXBwb3J0ZWRIdHRwTWV0aG9kID0gKG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBuZXcgUnVudGltZUVycm9yKFxuICAgIFF1ZXJ5UnVudGltZUVycm9yQ29kZS5XSVRIX0FVVE9fUkVGUkVTSF9VU0VEX09OX1VOU1VQUE9SVEVEX0hUVFBfTUVUSE9ELFxuICAgIGBUaGlzIGlzIGEgXCIke21ldGhvZH1cIiByZXF1ZXN0LCBcIndpdGhBdXRvUmVmcmVzaCgpXCIgaXMgb25seSBzdXBwb3J0ZWQgZm9yIEdFVCwgSEVBRCwgT1BUSU9OUyByZXF1ZXN0cyBhbmQgR1FMIHF1ZXJpZXMuYCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB3aXRoQXV0b1JlZnJlc2hVc2VkSW5NYW51YWxRdWVyeSA9ICgpID0+IHtcbiAgcmV0dXJuIG5ldyBSdW50aW1lRXJyb3IoXG4gICAgUXVlcnlSdW50aW1lRXJyb3JDb2RlLldJVEhfQVVUT19SRUZSRVNIX1VTRURfSU5fTUFOVUFMX1FVRVJZLFxuICAgIGBcIndpdGhBdXRvUmVmcmVzaCgpXCIgaGFzIGJlZW4gdXNlZCBpbnNpZGUgYSBxdWVyeSB0aGF0IGhhcyBcIm9ubHlNYW51YWxFeGVjdXRpb25cIiBzZXQgdG8gdHJ1ZS5gICtcbiAgICAgIGAgSWYgdGhpcyBpcyBpbnRlbnRpb25hbCwgc2V0IFwiaWdub3JlT25seU1hbnVhbEV4ZWN1dGlvblwiIHRvIHRydWUgaW5zaWRlIHRoZSBhdXRvIHJlZnJlc2ggY29uZmlnLmAsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lsZW5jZU1pc3NpbmdXaXRoQXJnc0ZlYXR1cmVFcnJvclVzZWRCdXRXaXRoQXJnc1ByZXNlbnQgPSAoKSA9PiB7XG4gIHJldHVybiBuZXcgUnVudGltZUVycm9yKFxuICAgIFF1ZXJ5UnVudGltZUVycm9yQ29kZS5TSUxFTkNFX01JU1NJTkdfV0lUSF9BUkdTX0ZFQVRVUkVfRVJST1JfVVNFRF9CVVRfV0lUSF9BUkdTX1BSRVNFTlQsXG4gICAgYFRoZSBcInNpbGVuY2VNaXNzaW5nV2l0aEFyZ3NGZWF0dXJlRXJyb3JcIiBjb25maWcgaXMgc2V0IHRvIHRydWUsIGJ1dCBhIFwid2l0aEFyZ3MoKVwiIGZlYXR1cmUgaXMgcHJlc2VudC5gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvb2tpZUxvZ2luVHJpZWRCdXRDb29raWVEaXNhYmxlZCA9ICgpID0+IHtcbiAgcmV0dXJuIG5ldyBSdW50aW1lRXJyb3IoXG4gICAgUXVlcnlSdW50aW1lRXJyb3JDb2RlLkNPT0tJRV9MT0dJTl9UUklFRF9CVVRfQ09PS0lFX0RJU0FCTEVELFxuICAgIGBDb29raWUgbG9naW4gaGFzIGJlZW4gdHJpZWQsIGJ1dCB0aGUgY29va2llIGlzIGRpc2FibGVkLmAsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgZW5hYmxlQ29va2llQ2FsbGVkV2l0aG91dENvb2tpZUNvbmZpZyA9ICgpID0+IHtcbiAgcmV0dXJuIG5ldyBSdW50aW1lRXJyb3IoXG4gICAgUXVlcnlSdW50aW1lRXJyb3JDb2RlLkVOQUJMRV9DT09LSUVfQ0FMTEVEX1dJVEhPVVRfQ09PS0lFX0NPTkZJRyxcbiAgICBgZW5hYmxlQ29va2llKCkgaGFzIGJlZW4gY2FsbGVkIGJ1dCB0aGVyZSBpcyBubyBjb29raWUgY29uZmlnLiBQbGVhc2Ugc2V0IGl0IGR1cmluZyB0aGUgYXV0aCBwcm92aWRlciBjcmVhdGlvbi5gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGRpc2FibGVDb29raWVDYWxsZWRXaXRob3V0Q29va2llQ29uZmlnID0gKCkgPT4ge1xuICByZXR1cm4gbmV3IFJ1bnRpbWVFcnJvcihcbiAgICBRdWVyeVJ1bnRpbWVFcnJvckNvZGUuRElTQUJMRV9DT09LSUVfQ0FMTEVEX1dJVEhPVVRfQ09PS0lFX0NPTkZJRyxcbiAgICBgZGlzYWJsZUNvb2tpZSgpIGhhcyBiZWVuIGNhbGxlZCBidXQgdGhlcmUgaXMgbm8gY29va2llIGNvbmZpZy4gUGxlYXNlIHNldCBpdCBkdXJpbmcgdGhlIGF1dGggcHJvdmlkZXIgY3JlYXRpb24uYCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBsb2dpbkNhbGxlZFdpdGhvdXRDb25maWcgPSAoKSA9PiB7XG4gIHJldHVybiBuZXcgUnVudGltZUVycm9yKFxuICAgIFF1ZXJ5UnVudGltZUVycm9yQ29kZS5MT0dJTl9DQUxMRURfV0lUSE9VVF9DT05GSUcsXG4gICAgYGxvZ2luKCkgaGFzIGJlZW4gY2FsbGVkIHdpdGhvdXQgYSBjb25maWcuIFBsZWFzZSBzZXQgaXQgZHVyaW5nIHRoZSBhdXRoIHByb3ZpZGVyIGNyZWF0aW9uLmAsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgbG9naW5XaXRoVG9rZW5DYWxsZWRXaXRob3V0Q29uZmlnID0gKCkgPT4ge1xuICByZXR1cm4gbmV3IFJ1bnRpbWVFcnJvcihcbiAgICBRdWVyeVJ1bnRpbWVFcnJvckNvZGUuTE9HSU5fV0lUSF9UT0tFTl9DQUxMRURfV0lUSE9VVF9DT05GSUcsXG4gICAgYGxvZ2luV2l0aFRva2VuKCkgaGFzIGJlZW4gY2FsbGVkIHdpdGhvdXQgYSBjb25maWcuIFBsZWFzZSBzZXQgaXQgZHVyaW5nIHRoZSBhdXRoIHByb3ZpZGVyIGNyZWF0aW9uLmAsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVmcmVzaFRva2VuQ2FsbGVkV2l0aG91dENvbmZpZyA9ICgpID0+IHtcbiAgcmV0dXJuIG5ldyBSdW50aW1lRXJyb3IoXG4gICAgUXVlcnlSdW50aW1lRXJyb3JDb2RlLlJFRlJFU0hfVE9LRU5fQ0FMTEVEX1dJVEhPVVRfQ09ORklHLFxuICAgIGByZWZyZXNoVG9rZW4oKSBoYXMgYmVlbiBjYWxsZWQgd2l0aG91dCBhIGNvbmZpZy4gUGxlYXNlIHNldCBpdCBkdXJpbmcgdGhlIGF1dGggcHJvdmlkZXIgY3JlYXRpb24uYCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RSb2xlQ2FsbGVkV2l0aG91dENvbmZpZyA9ICgpID0+IHtcbiAgcmV0dXJuIG5ldyBSdW50aW1lRXJyb3IoXG4gICAgUXVlcnlSdW50aW1lRXJyb3JDb2RlLlNFTEVDVF9ST0xFX0NBTExFRF9XSVRIT1VUX0NPTkZJRyxcbiAgICBgc2VsZWN0Um9sZSgpIGhhcyBiZWVuIGNhbGxlZCB3aXRob3V0IGEgY29uZmlnLiBQbGVhc2Ugc2V0IGl0IGR1cmluZyB0aGUgYXV0aCBwcm92aWRlciBjcmVhdGlvbi5gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZXNwb25zZVRyYW5zZm9ybWVyUmVzcG9uc2VOb3RPYmplY3QgPSAoY3VycmVudFR5cGU6IHN0cmluZykgPT4ge1xuICByZXR1cm4gbmV3IFJ1bnRpbWVFcnJvcihcbiAgICBRdWVyeVJ1bnRpbWVFcnJvckNvZGUuREVGQVVMVF9SRVNQT05TRV9UUkFOU0ZPUk1FUl9SRVNQT05TRV9OT1RfT0JKRUNULFxuICAgIGBUaGUgZGVmYXVsdCByZXNwb25zZSB0cmFuc2Zvcm1lciBleHBlY3RzIHRoZSByZXNwb25zZSB0byBiZSBhbiBvYmplY3QsIGJ1dCBpdCBpcyBhIFwiJHtjdXJyZW50VHlwZX1cIi5gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZXNwb25zZVRyYW5zZm9ybWVyUmVzcG9uc2VOb3RDb250YWluaW5nQWNjZXNzVG9rZW4gPSAoKSA9PiB7XG4gIHJldHVybiBuZXcgUnVudGltZUVycm9yKFxuICAgIFF1ZXJ5UnVudGltZUVycm9yQ29kZS5ERUZBVUxUX1JFU1BPTlNFX1RSQU5TRk9STUVSX1JFU1BPTlNFX05PVF9DT05UQUlOSU5HX0FDQ0VTU19UT0tFTixcbiAgICBgVGhlIGRlZmF1bHQgcmVzcG9uc2UgdHJhbnNmb3JtZXIgZXhwZWN0cyB0aGUgcmVzcG9uc2UgdG8gY29udGFpbiBhbiBcImFjY2Vzc1Rva2VuXCIgcHJvcGVydHkuYCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVzcG9uc2VUcmFuc2Zvcm1lclJlc3BvbnNlTm90Q29udGFpbmluZ1JlZnJlc2hUb2tlbiA9ICgpID0+IHtcbiAgcmV0dXJuIG5ldyBSdW50aW1lRXJyb3IoXG4gICAgUXVlcnlSdW50aW1lRXJyb3JDb2RlLkRFRkFVTFRfUkVTUE9OU0VfVFJBTlNGT1JNRVJfUkVTUE9OU0VfTk9UX0NPTlRBSU5JTkdfUkVGUkVTSF9UT0tFTixcbiAgICBgVGhlIGRlZmF1bHQgcmVzcG9uc2UgdHJhbnNmb3JtZXIgZXhwZWN0cyB0aGUgcmVzcG9uc2UgdG8gY29udGFpbiBhIFwicmVmcmVzaFRva2VuXCIgcHJvcGVydHkuYCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1bmFibGVUb0RlY3J5cHRCZWFyZXJUb2tlbiA9ICh0b2tlbjogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBuZXcgUnVudGltZUVycm9yKFxuICAgIFF1ZXJ5UnVudGltZUVycm9yQ29kZS5VTkFCTEVfVE9fREVDUllQVF9CRUFSRVJfVE9LRU4sXG4gICAgYFRoZSBiZWFyZXIgdG9rZW4gY291bGQgbm90IGJlIGRlY3J5cHRlZDogJHt0b2tlbn1gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGJlYXJlckV4cGlyZXNJblByb3BlcnR5Tm90TnVtYmVyID0gKGV4cGlyZXNJbjogdW5rbm93bikgPT4ge1xuICByZXR1cm4gbmV3IFJ1bnRpbWVFcnJvcihcbiAgICBRdWVyeVJ1bnRpbWVFcnJvckNvZGUuQkVBUkVSX0VYUElSRVNfSU5fUFJPUEVSVFlfTk9UX05VTUJFUixcbiAgICBgVGhlIGV4cGlyZXMgaW4gcHJvcGVydHkgaXMgbm90IGEgbnVtYmVyOiAke2V4cGlyZXNJbn1gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHVuY2FjaGVhYmxlUmVxdWVzdEhhc0NhY2hlS2V5UGFyYW0gPSAoa2V5OiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIG5ldyBSdW50aW1lRXJyb3IoXG4gICAgUXVlcnlSdW50aW1lRXJyb3JDb2RlLlVOQ0FDSEVBQkxFX1JFUVVFU1RfSEFTX0NBQ0hFX0tFWV9QQVJBTSxcbiAgICBgVGhpcyByZXF1ZXN0IGlzIHVuY2FjaGVhYmxlLCBidXQgYSBjYWNoZSBrZXkgd2FzIHByb3ZpZGVkOiAke2tleX0uIFBsZWFzZSByZW1vdmUgaXQuYCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1bmNhY2hlYWJsZVJlcXVlc3RIYXNBbGxvd0NhY2hlUGFyYW0gPSAoKSA9PiB7XG4gIHJldHVybiBuZXcgUnVudGltZUVycm9yKFxuICAgIFF1ZXJ5UnVudGltZUVycm9yQ29kZS5VTkNBQ0hFQUJMRV9SRVFVRVNUX0hBU19BTExPV19DQUNIRV9QQVJBTSxcbiAgICBgVGhpcyByZXF1ZXN0IGlzIHVuY2FjaGVhYmxlLCBidXQgYWxsb3dDYWNoZSBpcyBzZXQgdG8gdHJ1ZS4gUGxlYXNlIHJlbW92ZSBpdC5gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhZ2VkUXVlcnlTdGFja1BhZ2VCaWdnZXJUaGFuVG90YWxQYWdlcyA9IChwYWdlOiBudW1iZXIsIHRvdGFsUGFnZXM6IG51bWJlcikgPT4ge1xuICByZXR1cm4gbmV3IFJ1bnRpbWVFcnJvcihcbiAgICBRdWVyeVJ1bnRpbWVFcnJvckNvZGUuUEFHRURfUVVFUllfU1RBQ0tfUEFHRV9CSUdHRVJfVEhBTl9UT1RBTF9QQUdFUyxcbiAgICBgVGhlIHBhZ2UgXCIke3BhZ2V9XCIgaXMgYmlnZ2VyIHRoYW4gdGhlIHRvdGFsIHBhZ2VzIFwiJHt0b3RhbFBhZ2VzfVwiLmAsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFnZWRRdWVyeVN0YWNrTmV4dFBhZ2VDYWxsZWRXaXRob3V0UHJldmlvdXNQYWdlID0gKCkgPT4ge1xuICByZXR1cm4gbmV3IFJ1bnRpbWVFcnJvcihcbiAgICBRdWVyeVJ1bnRpbWVFcnJvckNvZGUuUEFHRURfUVVFUllfU1RBQ0tfTkVYVF9QQUdFX0NBTExFRF9XSVRIT1VUX1BSRVZJT1VTX1BBR0UsXG4gICAgYGZldGNoTmV4dFBhZ2UoKSBoYXMgYmVlbiBjYWxsZWQgYnV0IHRoZSBjdXJyZW50IHBhZ2UgaXMgbm90IHlldCBsb2FkZWQuIFBsZWFzZSBjYWxsIGl0IGFmdGVyIHRoZSBwcmV2aW91cyBwYWdlIGhhcyBiZWVuIGxvYWRlZC5gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhZ2VkUXVlcnlTdGFja1ByZXZpb3VzUGFnZUNhbGxlZEJ1dEFscmVhZHlBdEZpcnN0UGFnZSA9ICgpID0+IHtcbiAgcmV0dXJuIG5ldyBSdW50aW1lRXJyb3IoXG4gICAgUXVlcnlSdW50aW1lRXJyb3JDb2RlLlBBR0VEX1FVRVJZX1NUQUNLX1BSRVZJT1VTX1BBR0VfQ0FMTEVEX0JVVF9BTFJFQURZX0FUX0ZJUlNUX1BBR0UsXG4gICAgYGZldGNoUHJldmlvdXNQYWdlKCkgaGFzIGJlZW4gY2FsbGVkIGJ1dCB0aGUgY3VycmVudCBwYWdlIGlzIGFscmVhZHkgdGhlIGZpcnN0IHBhZ2UuYCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBxdWVyeVN0YWNrV2l0aEFyZ3NVc2VkID0gKCkgPT4ge1xuICByZXR1cm4gbmV3IFJ1bnRpbWVFcnJvcihcbiAgICBRdWVyeVJ1bnRpbWVFcnJvckNvZGUuUVVFUllfU1RBQ0tfV0lUSF9BUkdTX1VTRUQsXG4gICAgYHdpdGhBcmdzKCkgaGFzIGJlZW4gdXNlZCBpbiBhIHF1ZXJ5IHN0YWNrIG9yIGEgcGFnZWQgcXVlcnkgc3RhY2suIFRoaXMgaXMgbm90IHN1cHBvcnRlZC5gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5U3RhY2tXaXRoUmVzcG9uc2VVcGRhdGVVc2VkID0gKCkgPT4ge1xuICByZXR1cm4gbmV3IFJ1bnRpbWVFcnJvcihcbiAgICBRdWVyeVJ1bnRpbWVFcnJvckNvZGUuUVVFUllfU1RBQ0tfV0lUSF9SRVNQT05TRV9VUERBVEVfVVNFRCxcbiAgICBgd2l0aFJlc3BvbnNlVXBkYXRlKCkgaGFzIGJlZW4gdXNlZCBpbiBhIHF1ZXJ5IHN0YWNrIG9yIGEgcGFnZWQgcXVlcnkgc3RhY2suIFRoaXMgaXMgbm90IHN1cHBvcnRlZC5gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5U3RhY2tUb3RhbFF1ZXJpZXNBbmRFeHBlY3RlZFF1ZXJpZXNNaXNtYXRjaCA9ICh0b3RhbFF1ZXJpZXM6IG51bWJlciwgZXhwZWN0ZWRRdWVyaWVzOiBudW1iZXIpID0+IHtcbiAgcmV0dXJuIG5ldyBSdW50aW1lRXJyb3IoXG4gICAgUXVlcnlSdW50aW1lRXJyb3JDb2RlLlFVRVJZX1NUQUNLX1RPVEFMX1FVRVJJRVNfQU5EX0VYUEVDVEVEX1FVRVJJRVNfTUlTTUFUQ0gsXG4gICAgYFRoZSB0b3RhbCBxdWVyaWVzIFwiJHt0b3RhbFF1ZXJpZXN9XCIgYW5kIHRoZSBleHBlY3RlZCBxdWVyaWVzIFwiJHtleHBlY3RlZFF1ZXJpZXN9XCIgZG8gbm90IG1hdGNoLiBUaGlzIHVzdWFsbHkgaGFwcGVucyBpZiBhIHF1ZXJ5IGRlcGVuZHMgb24gdGhlIHJlc3BvbnNlIG9mIHRoZSBwcmV2aW91cyBxdWVyeSB0byBjYWxjdWxhdGUgaXRzIHBhZ2luYXRpb24gdmFsdWVzLiBTZXQgYmxvY2tFeGVjdXRpb25EdXJpbmdMb2FkaW5nIHRvIHRydWUgdG8gcHJldmVudCB0aGlzLmAsXG4gICk7XG59O1xuIl19","import { computed, effect, inject, isDevMode, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { deleteCookie as coreDeleteCookie, getCookie, getDomain, injectRoute, isObject, setCookie, } from '@ethlete/core';\nimport { of, switchMap, tap, timer } from 'rxjs';\nimport { decryptBearer } from '../../auth';\nimport { bearerExpiresInPropertyNotNumber, cookieLoginTriedButCookieDisabled, defaultResponseTransformerResponseNotContainingAccessToken, defaultResponseTransformerResponseNotContainingRefreshToken, defaultResponseTransformerResponseNotObject, disableCookieCalledWithoutCookieConfig, enableCookieCalledWithoutCookieConfig, loginCalledWithoutConfig, loginWithTokenCalledWithoutConfig, refreshTokenCalledWithoutConfig, selectRoleCalledWithoutConfig, unableToDecryptBearerToken, } from '../http/query-errors';\nconst defaultResponseTransformer = (response) => {\n if (!isObject(response)) {\n throw defaultResponseTransformerResponseNotObject(typeof response);\n }\n if (!('accessToken' in response)) {\n throw defaultResponseTransformerResponseNotContainingAccessToken();\n }\n if (!('refreshToken' in response)) {\n throw defaultResponseTransformerResponseNotContainingRefreshToken();\n }\n return response;\n};\nconst FIVE_MINUTES = 5 * 60 * 1000;\nconst createAuthProviderQuery = (config, authProviderConfig) => {\n const query = config.queryCreator({ onlyManualExecution: true });\n const triggeredInternally = signal(false);\n const tokens = computed(() => {\n const res = query.response();\n if (!res)\n return null;\n const transformed = config.responseTransformer?.(res) ?? defaultResponseTransformer(res);\n const bearerValue = decryptBearer(transformed.accessToken);\n if (!bearerValue)\n throw unableToDecryptBearerToken(transformed.accessToken);\n return {\n bearer: bearerValue,\n tokens: transformed,\n };\n });\n const expiresIn = computed(() => {\n const res = tokens();\n if (!res)\n return null;\n const expiresIn = res.bearer[authProviderConfig.expiresInPropertyName ?? 'exp'];\n const refreshBuffer = authProviderConfig.refreshBuffer ?? FIVE_MINUTES;\n if (typeof expiresIn !== 'number') {\n throw bearerExpiresInPropertyNotNumber(expiresIn);\n }\n // const dummyRemainingTime = (query.lastTimeExecutedAt() ?? 0) + 5000 - new Date().getTime();\n const remainingTime = new Date(expiresIn * 1000).getTime() - refreshBuffer - new Date().getTime();\n return remainingTime;\n });\n const execute = (newArgs, options) => {\n query.execute({ args: newArgs });\n triggeredInternally.set(options?.triggeredInternally ?? false);\n };\n return {\n execute,\n query,\n tokens,\n expiresIn,\n triggeredInternally: triggeredInternally.asReadonly(),\n };\n};\nexport const createBearerAuthProvider = (options) => {\n const route = injectRoute();\n const client = inject(options.queryClientRef);\n const cookieEnabled = signal(options.cookie === undefined ? false : (options.cookie.enabled ?? true));\n const cookieOptions = {\n expiresInDays: 30,\n name: 'etAuth',\n path: '/',\n sameSite: 'lax',\n domain: getDomain() ?? 'localhost',\n refreshArgsTransformer: (token) => ({ body: { token } }),\n autoLoginExcludeRoutes: [],\n ...(options.cookie ?? {}),\n };\n const loginQuery = options.login ? createAuthProviderQuery(options.login, options) : null;\n const tokenLoginQuery = options.tokenLogin ? createAuthProviderQuery(options.tokenLogin, options) : null;\n const tokenRefreshQuery = options.tokenRefresh ? createAuthProviderQuery(options.tokenRefresh, options) : null;\n const selectRoleQuery = options.selectRole ? createAuthProviderQuery(options.selectRole, options) : null;\n const queries = [\n { type: 'login', query: loginQuery },\n { type: 'tokenLogin', query: tokenLoginQuery },\n { type: 'tokenRefresh', query: tokenRefreshQuery },\n { type: 'selectRole', query: selectRoleQuery },\n ];\n const latestExecutedQuery = computed(() => {\n const relevantQueries = queries.filter((q) => q.query && q.query.query.lastTimeExecutedAt() !== null);\n return findMostRecentQuery(relevantQueries);\n });\n const tokens = computed(() => {\n const query = latestExecutedQuery();\n return query?.query?.tokens()?.tokens ?? null;\n });\n const bearerData = computed(() => {\n const accessToken = tokens()?.accessToken;\n if (!accessToken)\n return null;\n return (options.bearerDecryptFn?.(accessToken) ?? decryptBearer(accessToken));\n });\n toObservable(computed(() => {\n const query = latestExecutedQuery();\n const expiresIn = query?.query?.expiresIn() ?? null;\n const tokens = query?.query?.tokens() ?? null;\n return { expiresIn, tokens, query };\n }))\n .pipe(switchMap((res) => {\n if (!res.tokens || res.expiresIn === null || !options.tokenRefresh)\n return of(null);\n const expIn = res.expiresIn;\n const tokens = res.tokens;\n if (!expIn || !tokens)\n return of(null);\n return timer(expIn).pipe(tap(() => refreshToken({\n ...cookieOptions.refreshArgsTransformer(tokens.tokens.refreshToken),\n }, { triggeredInternally: true })));\n }), takeUntilDestroyed())\n .subscribe();\n const latestNonInternalQuery = signal(null);\n effect(() => {\n const relevantQueries = queries.filter((q) => q.query && !q.query.triggeredInternally() && q.query.query.lastTimeExecutedAt() !== null);\n const lastQuery = findMostRecentQuery(relevantQueries);\n untracked(() => {\n if (!lastQuery || !lastQuery.query?.query)\n return;\n latestNonInternalQuery.set({\n type: lastQuery.type,\n ...lastQuery.query.query.createSnapshot(),\n });\n });\n });\n // Cookie writing\n effect(() => {\n const isCookieEnabled = cookieEnabled();\n const res = latestExecutedQuery();\n const error = res?.query?.query.error();\n if (!isCookieEnabled || (error && error.code === 401)) {\n deleteCookie();\n return;\n }\n if (!res?.query)\n return;\n const { tokens } = res.query;\n const rt = tokens()?.tokens.refreshToken;\n if (!rt)\n return;\n writeCookie(rt);\n });\n const login = (args) => {\n if (!loginQuery) {\n throw loginCalledWithoutConfig();\n }\n loginQuery.execute(args);\n return loginQuery.query.createSnapshot();\n };\n const loginWithToken = (args) => {\n if (!tokenLoginQuery) {\n throw loginWithTokenCalledWithoutConfig();\n }\n tokenLoginQuery.execute(args);\n return tokenLoginQuery.query.createSnapshot();\n };\n const refreshToken = (args, options) => {\n if (!tokenRefreshQuery) {\n throw refreshTokenCalledWithoutConfig();\n }\n tokenRefreshQuery.execute(args, { triggeredInternally: options?.triggeredInternally });\n return tokenRefreshQuery.query.createSnapshot();\n };\n const selectRole = (args) => {\n if (!selectRoleQuery) {\n throw selectRoleCalledWithoutConfig();\n }\n selectRoleQuery.execute(args);\n return selectRoleQuery.query.createSnapshot();\n };\n const logout = () => {\n deleteCookie();\n loginQuery?.query.reset();\n tokenLoginQuery?.query.reset();\n tokenRefreshQuery?.query.reset();\n selectRoleQuery?.query.reset();\n latestNonInternalQuery.set(null);\n client.repository.unbindAllSecure();\n };\n const enableCookie = () => {\n if (isDevMode() && !options.cookie) {\n throw enableCookieCalledWithoutCookieConfig();\n }\n cookieEnabled.set(true);\n };\n const disableCookie = () => {\n if (isDevMode() && !options.cookie) {\n throw disableCookieCalledWithoutCookieConfig();\n }\n cookieEnabled.set(false);\n deleteCookie();\n };\n const isCookiePresent = () => {\n return !!getCookie(cookieOptions.name);\n };\n const tryLoginWithCookie = () => {\n const isCookieEnabled = cookieEnabled();\n if (!isCookieEnabled) {\n if (isDevMode()) {\n throw cookieLoginTriedButCookieDisabled();\n }\n return false;\n }\n const cookie = getCookie(cookieOptions.name);\n if (!cookie) {\n return false;\n }\n refreshToken(cookieOptions.refreshArgsTransformer(cookie));\n return true;\n };\n const writeCookie = (refreshToken) => {\n const { name, expiresInDays, domain, path, sameSite } = cookieOptions;\n setCookie(name, refreshToken, expiresInDays, domain, path, sameSite);\n };\n const deleteCookie = () => {\n const { name, path, domain } = cookieOptions;\n coreDeleteCookie(name, path, domain);\n };\n const findMostRecentQuery = (queriesToSearch) => {\n return queriesToSearch.reduce((acc, curr) => {\n if (!acc)\n return curr;\n const accExp = acc.query?.query.lastTimeExecutedAt() ?? null;\n const currExp = curr.query?.query.lastTimeExecutedAt() ?? null;\n if (currExp === null || accExp === null)\n return acc;\n return accExp > currExp ? acc : curr;\n }, null);\n };\n const bearerAuthProvider = {\n login,\n loginWithToken,\n refreshToken,\n selectRole,\n logout,\n enableCookie,\n disableCookie,\n isCookiePresent,\n tryLoginWithCookie,\n latestExecutedQuery: latestNonInternalQuery.asReadonly(),\n tokens,\n bearerData,\n };\n if (cookieEnabled()) {\n if (!cookieOptions.autoLoginExcludeRoutes.some((r) => route().startsWith(r))) {\n tryLoginWithCookie();\n }\n }\n return bearerAuthProvider;\n};\nexport const provideBearerAuthProvider = (config) => {\n return {\n provide: config.token,\n useFactory: () => createBearerAuthProvider(config),\n };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhcmVyLWF1dGgtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2F1dGgvYmVhcmVyLWF1dGgtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQ0wsWUFBWSxJQUFJLGdCQUFnQixFQUNoQyxTQUFTLEVBQ1QsU0FBUyxFQUNULFdBQVcsRUFDWCxRQUFRLEVBQ1IsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUzQyxPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLGlDQUFpQyxFQUNqQywwREFBMEQsRUFDMUQsMkRBQTJELEVBQzNELDJDQUEyQyxFQUMzQyxzQ0FBc0MsRUFDdEMscUNBQXFDLEVBQ3JDLHdCQUF3QixFQUN4QixpQ0FBaUMsRUFDakMsK0JBQStCLEVBQy9CLDZCQUE2QixFQUM3QiwwQkFBMEIsR0FDM0IsTUFBTSxzQkFBc0IsQ0FBQztBQWdJOUIsTUFBTSwwQkFBMEIsR0FBRyxDQUFJLFFBQVcsRUFBRSxFQUFFO0lBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN4QixNQUFNLDJDQUEyQyxDQUFDLE9BQU8sUUFBUSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELElBQUksQ0FBQyxDQUFDLGFBQWEs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QztBQUVGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBT3ZDLE1BQThHLEVBQzlHLEVBQUU7SUFDRixPQUFPO1FBQ0wsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1FBQ3JCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUM7S0FDbkQsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaXNEZXZNb2RlLCBTaWduYWwsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG4gIGRlbGV0ZUNvb2tpZSBhcyBjb3JlRGVsZXRlQ29va2llLFxuICBnZXRDb29raWUsXG4gIGdldERvbWFpbixcbiAgaW5qZWN0Um91dGUsXG4gIGlzT2JqZWN0LFxuICBzZXRDb29raWUsXG59IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgb2YsIHN3aXRjaE1hcCwgdGFwLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVjcnlwdEJlYXJlciB9IGZyb20gJy4uLy4uL2F1dGgnO1xuaW1wb3J0IHsgUXVlcnlBcmdzLCBRdWVyeVNuYXBzaG90LCBSZXF1ZXN0QXJncyB9IGZyb20gJy4uL2h0dHAnO1xuaW1wb3J0IHtcbiAgYmVhcmVyRXhwaXJlc0luUHJvcGVydHlOb3ROdW1iZXIsXG4gIGNvb2tpZUxvZ2luVHJpZWRCdXRDb29raWVEaXNhYmxlZCxcbiAgZGVmYXVsdFJlc3BvbnNlVHJhbnNmb3JtZXJSZXNwb25zZU5vdENvbnRhaW5pbmdBY2Nlc3NUb2tlbixcbiAgZGVmYXVsdFJlc3BvbnNlVHJhbnNmb3JtZXJSZXNwb25zZU5vdENvbnRhaW5pbmdSZWZyZXNoVG9rZW4sXG4gIGRlZmF1bHRSZXNwb25zZVRyYW5zZm9ybWVyUmVzcG9uc2VOb3RPYmplY3QsXG4gIGRpc2FibGVDb29raWVDYWxsZWRXaXRob3V0Q29va2llQ29uZmlnLFxuICBlbmFibGVDb29raWVDYWxsZWRXaXRob3V0Q29va2llQ29uZmlnLFxuICBsb2dpbkNhbGxlZFdpdGhvdXRDb25maWcsXG4gIGxvZ2luV2l0aFRva2VuQ2FsbGVkV2l0aG91dENvbmZpZyxcbiAgcmVmcmVzaFRva2VuQ2FsbGVkV2l0aG91dENvbmZpZyxcbiAgc2VsZWN0Um9sZUNhbGxlZFdpdGhvdXRDb25maWcsXG4gIHVuYWJsZVRvRGVjcnlwdEJlYXJlclRva2VuLFxufSBmcm9tICcuLi9odHRwL3F1ZXJ5LWVycm9ycyc7XG5pbXBvcnQge1xuICBCZWFyZXJBdXRoUHJvdmlkZXJDb25maWcsXG4gIEJlYXJlckF1dGhQcm92aWRlckNvb2tpZUNvbmZpZyxcbiAgQmVhcmVyQXV0aFByb3ZpZGVyUm91dGVDb25maWcsXG4gIEJlYXJlckF1dGhQcm92aWRlclRva2Vucyxcbn0gZnJvbSAnLi9iZWFyZXItYXV0aC1wcm92aWRlci1jb25maWcnO1xuXG50eXBlIEludGVybmFsUXVlcnlFeGVjdXRlT3B0aW9ucyA9IHtcbiAgdHJpZ2dlcmVkSW50ZXJuYWxseT86IGJvb2xlYW47XG59O1xuXG50eXBlIEF1dGhQcm92aWRlclF1ZXJ5V2l0aFR5cGU8XG4gIFRMb2dpbkFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRUb2tlbkxvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuUmVmcmVzaEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRTZWxlY3RSb2xlQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbj4gPVxuICB8IHtcbiAgICAgIHR5cGU6ICdsb2dpbic7XG4gICAgICBxdWVyeTogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQXV0aFByb3ZpZGVyUXVlcnk8VExvZ2luQXJncz4+IHwgbnVsbDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogJ3Rva2VuTG9naW4nO1xuICAgICAgcXVlcnk6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUF1dGhQcm92aWRlclF1ZXJ5PFRUb2tlbkxvZ2luQXJncz4+IHwgbnVsbDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogJ3Rva2VuUmVmcmVzaCc7XG4gICAgICBxdWVyeTogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQXV0aFByb3ZpZGVyUXVlcnk8VFRva2VuUmVmcmVzaEFyZ3M+PiB8IG51bGw7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZWxlY3RSb2xlJztcbiAgICAgIHF1ZXJ5OiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBdXRoUHJvdmlkZXJRdWVyeTxUU2VsZWN0Um9sZUFyZ3M+PiB8IG51bGw7XG4gICAgfTtcblxudHlwZSBRdWVyeVNuYXBzaG90V2l0aFR5cGU8XG4gIFRMb2dpbkFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRUb2tlbkxvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuUmVmcmVzaEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRTZWxlY3RSb2xlQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbj4gPVxuICB8ICh7XG4gICAgICB0eXBlOiAnbG9naW4nO1xuICAgIH0gJiBRdWVyeVNuYXBzaG90PFRMb2dpbkFyZ3M+KVxuICB8ICh7XG4gICAgICB0eXBlOiAndG9rZW5Mb2dpbic7XG4gICAgfSAmIFF1ZXJ5U25hcHNob3Q8VFRva2VuTG9naW5BcmdzPilcbiAgfCAoe1xuICAgICAgdHlwZTogJ3Rva2VuUmVmcmVzaCc7XG4gICAgfSAmIFF1ZXJ5U25hcHNob3Q8VFRva2VuUmVmcmVzaEFyZ3M+KVxuICB8ICh7XG4gICAgICB0eXBlOiAnc2VsZWN0Um9sZSc7XG4gICAgfSAmIFF1ZXJ5U25hcHNob3Q8VFNlbGVjdFJvbGVBcmdzPik7XG5cbmV4cG9ydCB0eXBlIEJlYXJlckF1dGhQcm92aWRlcjxcbiAgVExvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5SZWZyZXNoQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFNlbGVjdFJvbGVBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUQmVhcmVyRGF0YSxcbj4gPSB7XG4gIC8qKlxuICAgKiBMb2dzIGluIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIGFyZ3MuXG4gICAqL1xuICBsb2dpbjogKGFyZ3M6IFJlcXVlc3RBcmdzPFRMb2dpbkFyZ3M+KSA9PiBRdWVyeVNuYXBzaG90PFRMb2dpbkFyZ3M+O1xuXG4gIC8qKlxuICAgKiBMb2dzIGluIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIHRva2VuLlxuICAgKi9cbiAgbG9naW5XaXRoVG9rZW46IChhcmdzOiBSZXF1ZXN0QXJnczxUVG9rZW5Mb2dpbkFyZ3M+KSA9PiBRdWVyeVNuYXBzaG90PFRUb2tlbkxvZ2luQXJncz47XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyB0aGUgdG9rZW4gd2l0aCB0aGUgZ2l2ZW4gcmVmcmVzaCB0b2tlbi5cbiAgICovXG4gIHJlZnJlc2hUb2tlbjogKGFyZ3M6IFJlcXVlc3RBcmdzPFRUb2tlblJlZnJlc2hBcmdzPikgPT4gUXVlcnlTbmFwc2hvdDxUVG9rZW5SZWZyZXNoQXJncz47XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIHJvbGUgZm9yIHRoZSB1c2VyLlxuICAgKi9cbiAgc2VsZWN0Um9sZTogKGFyZ3M6IFJlcXVlc3RBcmdzPFRTZWxlY3RSb2xlQXJncz4pID0+IFF1ZXJ5U25hcHNob3Q8VFNlbGVjdFJvbGVBcmdzPjtcblxuICAvKipcbiAgICogTG9ncyBvdXQgdGhlIHVzZXIgYW5kIHJlbW92ZXMgdGhlIGNvb2tpZS5cbiAgICovXG4gIGxvZ291dDogKCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogRW5hYmxlcyBjb29raWUgdXNhZ2UgZm9yIHRoZSBhdXRoIHByb3ZpZGVyLlxuICAgKi9cbiAgZW5hYmxlQ29va2llOiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyBjb29raWUgdXNhZ2UgZm9yIHRoZSBhdXRoIHByb3ZpZGVyIGFuZCByZW1vdmVzIHRoZSBjb29raWUuXG4gICAqL1xuICBkaXNhYmxlQ29va2llOiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGNvb2tpZSBpcyBwcmVzZW50LlxuICAgKi9cbiAgaXNDb29raWVQcmVzZW50OiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUcmllcyB0byBsb2dpbiB3aXRoIHRoZSBnaXZlbiBjb29raWUgY29uZmlnLlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBhIGNvb2tpZSB3YXMgZm91bmQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgdHJ5TG9naW5XaXRoQ29va2llOiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbGF0ZXN0IGV4ZWN1dGVkIHF1ZXJ5IHRoYXQgd2FzIG5vdCB0cmlnZ2VyZWQgaW50ZXJuYWxseS5cbiAgICovXG4gIGxhdGVzdEV4ZWN1dGVkUXVlcnk6IFNpZ25hbDxRdWVyeVNuYXBzaG90V2l0aFR5cGU8XG4gICAgVExvZ2luQXJncyxcbiAgICBUVG9rZW5Mb2dpbkFyZ3MsXG4gICAgVFRva2VuUmVmcmVzaEFyZ3MsXG4gICAgVFNlbGVjdFJvbGVBcmdzXG4gID4gfCBudWxsPjtcblxuICAvKipcbiAgICogQSBzaWduYWwgdGhhdCBjb250YWlucyB0aGUgY3VycmVudCBhY2Nlc3MgYW5kIHJlZnJlc2ggdG9rZW5zLlxuICAgKi9cbiAgdG9rZW5zOiBTaWduYWw8QmVhcmVyQXV0aFByb3ZpZGVyVG9rZW5zIHwgbnVsbD47XG5cbiAgLyoqXG4gICAqIFRoZSBiZWFyZXIgZGF0YSB0aGF0IHdhcyBkZWNyeXB0ZWQgZnJvbSB0aGUgYWNjZXNzIHRva2VuLlxuICAgKi9cbiAgYmVhcmVyRGF0YTogU2lnbmFsPFRCZWFyZXJEYXRhIHwgbnVsbD47XG59O1xuXG5jb25zdCBkZWZhdWx0UmVzcG9uc2VUcmFuc2Zvcm1lciA9IDxUPihyZXNwb25zZTogVCkgPT4ge1xuICBpZiAoIWlzT2JqZWN0KHJlc3BvbnNlKSkge1xuICAgIHRocm93IGRlZmF1bHRSZXNwb25zZVRyYW5zZm9ybWVyUmVzcG9uc2VOb3RPYmplY3QodHlwZW9mIHJlc3BvbnNlKTtcbiAgfVxuXG4gIGlmICghKCdhY2Nlc3NUb2tlbicgaW4gcmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgZGVmYXVsdFJlc3BvbnNlVHJhbnNmb3JtZXJSZXNwb25zZU5vdENvbnRhaW5pbmdBY2Nlc3NUb2tlbigpO1xuICB9XG5cbiAgaWYgKCEoJ3JlZnJlc2hUb2tlbicgaW4gcmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgZGVmYXVsdFJlc3BvbnNlVHJhbnNmb3JtZXJSZXNwb25zZU5vdENvbnRhaW5pbmdSZWZyZXNoVG9rZW4oKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZSBhcyB1bmtub3duIGFzIEJlYXJlckF1dGhQcm92aWRlclRva2Vucztcbn07XG5cbmNvbnN0IEZJVkVfTUlOVVRFUyA9IDUgKiA2MCAqIDEwMDA7XG5cbmNvbnN0IGNyZWF0ZUF1dGhQcm92aWRlclF1ZXJ5ID0gPFQgZXh0ZW5kcyBRdWVyeUFyZ3M+KFxuICBjb25maWc6IEJlYXJlckF1dGhQcm92aWRlclJvdXRlQ29uZmlnPFQ+LFxuICBhdXRoUHJvdmlkZXJDb25maWc6IHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSB0b2tlbiBleHBpcmVzIHdoZW4gdGhlIHJlZnJlc2ggc2hvdWxkIGJlIHRyaWdnZXJlZC5cbiAgICAgKiBAZGVmYXVsdCAzMDAwMDAgLy8gKDUgbWludXRlcylcbiAgICAgKi9cbiAgICByZWZyZXNoQnVmZmVyPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4cGlyZXMgaW4gcHJvcGVydHkgbmFtZSBpbnNpZGUgdGhlIGp3dCBib2R5XG4gICAgICogQGRlZmF1bHQgJ2V4cCdcbiAgICAgKi9cbiAgICBleHBpcmVzSW5Qcm9wZXJ0eU5hbWU/OiBzdHJpbmc7XG4gIH0sXG4pID0+IHtcbiAgY29uc3QgcXVlcnkgPSBjb25maWcucXVlcnlDcmVhdG9yKHsgb25seU1hbnVhbEV4ZWN1dGlvbjogdHJ1ZSB9KTtcblxuICBjb25zdCB0cmlnZ2VyZWRJbnRlcm5hbGx5ID0gc2lnbmFsKGZhbHNlKTtcblxuICBjb25zdCB0b2tlbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gcXVlcnkucmVzcG9uc2UoKTtcblxuICAgIGlmICghcmVzKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHRyYW5zZm9ybWVkID0gY29uZmlnLnJlc3BvbnNlVHJhbnNmb3JtZXI/LihyZXMpID8/IGRlZmF1bHRSZXNwb25zZVRyYW5zZm9ybWVyKHJlcyk7XG5cbiAgICBjb25zdCBiZWFyZXJWYWx1ZSA9IGRlY3J5cHRCZWFyZXIodHJhbnNmb3JtZWQuYWNjZXNzVG9rZW4pO1xuXG4gICAgaWYgKCFiZWFyZXJWYWx1ZSkgdGhyb3cgdW5hYmxlVG9EZWNyeXB0QmVhcmVyVG9rZW4odHJhbnNmb3JtZWQuYWNjZXNzVG9rZW4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJlYXJlcjogYmVhcmVyVmFsdWUsXG4gICAgICB0b2tlbnM6IHRyYW5zZm9ybWVkLFxuICAgIH07XG4gIH0pO1xuXG4gIGNvbnN0IGV4cGlyZXNJbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCByZXMgPSB0b2tlbnMoKTtcblxuICAgIGlmICghcmVzKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGV4cGlyZXNJbiA9IHJlcy5iZWFyZXJbYXV0aFByb3ZpZGVyQ29uZmlnLmV4cGlyZXNJblByb3BlcnR5TmFtZSA/PyAnZXhwJ107XG4gICAgY29uc3QgcmVmcmVzaEJ1ZmZlciA9IGF1dGhQcm92aWRlckNvbmZpZy5yZWZyZXNoQnVmZmVyID8/IEZJVkVfTUlOVVRFUztcblxuICAgIGlmICh0eXBlb2YgZXhwaXJlc0luICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgYmVhcmVyRXhwaXJlc0luUHJvcGVydHlOb3ROdW1iZXIoZXhwaXJlc0luKTtcbiAgICB9XG5cbiAgICAvLyBjb25zdCBkdW1teVJlbWFpbmluZ1RpbWUgPSAocXVlcnkubGFzdFRpbWVFeGVjdXRlZEF0KCkgPz8gMCkgKyA1MDAwIC0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgY29uc3QgcmVtYWluaW5nVGltZSA9IG5ldyBEYXRlKGV4cGlyZXNJbiAqIDEwMDApLmdldFRpbWUoKSAtIHJlZnJlc2hCdWZmZXIgLSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuICAgIHJldHVybiByZW1haW5pbmdUaW1lO1xuICB9KTtcblxuICBjb25zdCBleGVjdXRlID0gKG5ld0FyZ3M6IFJlcXVlc3RBcmdzPFQ+LCBvcHRpb25zPzogSW50ZXJuYWxRdWVyeUV4ZWN1dGVPcHRpb25zKSA9PiB7XG4gICAgcXVlcnkuZXhlY3V0ZSh7IGFyZ3M6IG5ld0FyZ3MgfSk7XG4gICAgdHJpZ2dlcmVkSW50ZXJuYWxseS5zZXQob3B0aW9ucz8udHJpZ2dlcmVkSW50ZXJuYWxseSA/PyBmYWxzZSk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBleGVjdXRlLFxuICAgIHF1ZXJ5LFxuICAgIHRva2VucyxcbiAgICBleHBpcmVzSW4sXG4gICAgdHJpZ2dlcmVkSW50ZXJuYWxseTogdHJpZ2dlcmVkSW50ZXJuYWxseS5hc1JlYWRvbmx5KCksXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQmVhcmVyQXV0aFByb3ZpZGVyID0gPFxuICBUTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5Mb2dpbkFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRUb2tlblJlZnJlc2hBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUU2VsZWN0Um9sZUFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRCZWFyZXJEYXRhLFxuPihcbiAgb3B0aW9uczogQmVhcmVyQXV0aFByb3ZpZGVyQ29uZmlnPFRMb2dpbkFyZ3MsIFRUb2tlbkxvZ2luQXJncywgVFRva2VuUmVmcmVzaEFyZ3MsIFRTZWxlY3RSb2xlQXJncywgVEJlYXJlckRhdGE+LFxuKTogQmVhcmVyQXV0aFByb3ZpZGVyPFRMb2dpbkFyZ3MsIFRUb2tlbkxvZ2luQXJncywgVFRva2VuUmVmcmVzaEFyZ3MsIFRTZWxlY3RSb2xlQXJncywgVEJlYXJlckRhdGE+ID0+IHtcbiAgY29uc3Qgcm91dGUgPSBpbmplY3RSb3V0ZSgpO1xuICBjb25zdCBjbGllbnQgPSBpbmplY3Qob3B0aW9ucy5xdWVyeUNsaWVudFJlZik7XG5cbiAgY29uc3QgY29va2llRW5hYmxlZCA9IHNpZ25hbChvcHRpb25zLmNvb2tpZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAob3B0aW9ucy5jb29raWUuZW5hYmxlZCA/PyB0cnVlKSk7XG4gIGNvbnN0IGNvb2tpZU9wdGlvbnM6IFJlcXVpcmVkPE9taXQ8QmVhcmVyQXV0aFByb3ZpZGVyQ29va2llQ29uZmlnPFRUb2tlblJlZnJlc2hBcmdzPiwgJ2VuYWJsZWQnPj4gPSB7XG4gICAgZXhwaXJlc0luRGF5czogMzAsXG4gICAgbmFtZTogJ2V0QXV0aCcsXG4gICAgcGF0aDogJy8nLFxuICAgIHNhbWVTaXRlOiAnbGF4JyxcbiAgICBkb21haW46IGdldERvbWFpbigpID8/ICdsb2NhbGhvc3QnLFxuICAgIHJlZnJlc2hBcmdzVHJhbnNmb3JtZXI6ICh0b2tlbikgPT4gKHsgYm9keTogeyB0b2tlbiB9IH0pIGFzIFJlcXVlc3RBcmdzPFRUb2tlblJlZnJlc2hBcmdzPixcbiAgICBhdXRvTG9naW5FeGNsdWRlUm91dGVzOiBbXSxcbiAgICAuLi4ob3B0aW9ucy5jb29raWUgPz8ge30pLFxuICB9O1xuXG4gIGNvbnN0IGxvZ2luUXVlcnkgPSBvcHRpb25zLmxvZ2luID8gY3JlYXRlQXV0aFByb3ZpZGVyUXVlcnkob3B0aW9ucy5sb2dpbiwgb3B0aW9ucykgOiBudWxsO1xuICBjb25zdCB0b2tlbkxvZ2luUXVlcnkgPSBvcHRpb25zLnRva2VuTG9naW4gPyBjcmVhdGVBdXRoUHJvdmlkZXJRdWVyeShvcHRpb25zLnRva2VuTG9naW4sIG9wdGlvbnMpIDogbnVsbDtcbiAgY29uc3QgdG9rZW5SZWZyZXNoUXVlcnkgPSBvcHRpb25zLnRva2VuUmVmcmVzaCA/IGNyZWF0ZUF1dGhQcm92aWRlclF1ZXJ5KG9wdGlvbnMudG9rZW5SZWZyZXNoLCBvcHRpb25zKSA6IG51bGw7XG4gIGNvbnN0IHNlbGVjdFJvbGVRdWVyeSA9IG9wdGlvbnMuc2VsZWN0Um9sZSA/IGNyZWF0ZUF1dGhQcm92aWRlclF1ZXJ5KG9wdGlvbnMuc2VsZWN0Um9sZSwgb3B0aW9ucykgOiBudWxsO1xuXG4gIGNvbnN0IHF1ZXJpZXM6IEF1dGhQcm92aWRlclF1ZXJ5V2l0aFR5cGU8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzPltdID0gW1xuICAgIHsgdHlwZTogJ2xvZ2luJywgcXVlcnk6IGxvZ2luUXVlcnkgfSxcbiAgICB7IHR5cGU6ICd0b2tlbkxvZ2luJywgcXVlcnk6IHRva2VuTG9naW5RdWVyeSB9LFxuICAgIHsgdHlwZTogJ3Rva2VuUmVmcmVzaCcsIHF1ZXJ5OiB0b2tlblJlZnJlc2hRdWVyeSB9LFxuICAgIHsgdHlwZTogJ3NlbGVjdFJvbGUnLCBxdWVyeTogc2VsZWN0Um9sZVF1ZXJ5IH0sXG4gIF07XG5cbiAgY29uc3QgbGF0ZXN0RXhlY3V0ZWRRdWVyeSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCByZWxldmFudFF1ZXJpZXMgPSBxdWVyaWVzLmZpbHRlcigocSkgPT4gcS5xdWVyeSAmJiBxLnF1ZXJ5LnF1ZXJ5Lmxhc3RUaW1lRXhlY3V0ZWRBdCgpICE9PSBudWxsKTtcblxuICAgIHJldHVybiBmaW5kTW9zdFJlY2VudFF1ZXJ5KHJlbGV2YW50UXVlcmllcyk7XG4gIH0pO1xuXG4gIGNvbnN0IHRva2VucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBxdWVyeSA9IGxhdGVzdEV4ZWN1dGVkUXVlcnkoKTtcblxuICAgIHJldHVybiBxdWVyeT8ucXVlcnk/LnRva2VucygpPy50b2tlbnMgPz8gbnVsbDtcbiAgfSk7XG5cbiAgY29uc3QgYmVhcmVyRGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRva2VucygpPy5hY2Nlc3NUb2tlbjtcblxuICAgIGlmICghYWNjZXNzVG9rZW4pIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIChvcHRpb25zLmJlYXJlckRlY3J5cHRGbj8uKGFjY2Vzc1Rva2VuKSA/PyBkZWNyeXB0QmVhcmVyKGFjY2Vzc1Rva2VuKSkgYXMgVEJlYXJlckRhdGEgfCBudWxsO1xuICB9KTtcblxuICB0b09ic2VydmFibGUoXG4gICAgY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgY29uc3QgcXVlcnkgPSBsYXRlc3RFeGVjdXRlZFF1ZXJ5KCk7XG4gICAgICBjb25zdCBleHBpcmVzSW4gPSBxdWVyeT8ucXVlcnk/LmV4cGlyZXNJbigpID8/IG51bGw7XG4gICAgICBjb25zdCB0b2tlbnMgPSBxdWVyeT8ucXVlcnk/LnRva2VucygpID8/IG51bGw7XG5cbiAgICAgIHJldHVybiB7IGV4cGlyZXNJbiwgdG9rZW5zLCBxdWVyeSB9O1xuICAgIH0pLFxuICApXG4gICAgLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlcykgPT4ge1xuICAgICAgICBpZiAoIXJlcy50b2tlbnMgfHwgcmVzLmV4cGlyZXNJbiA9PT0gbnVsbCB8fCAhb3B0aW9ucy50b2tlblJlZnJlc2gpIHJldHVybiBvZihudWxsKTtcblxuICAgICAgICBjb25zdCBleHBJbiA9IHJlcy5leHBpcmVzSW47XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHJlcy50b2tlbnM7XG5cbiAgICAgICAgaWYgKCFleHBJbiB8fCAhdG9rZW5zKSByZXR1cm4gb2YobnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHRpbWVyKGV4cEluKS5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PlxuICAgICAgICAgICAgcmVmcmVzaFRva2VuKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uY29va2llT3B0aW9ucy5yZWZyZXNoQXJnc1RyYW5zZm9ybWVyKHRva2Vucy50b2tlbnMucmVmcmVzaFRva2VuKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgeyB0cmlnZ2VyZWRJbnRlcm5hbGx5OiB0cnVlIH0sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgIClcbiAgICAuc3Vic2NyaWJlKCk7XG5cbiAgY29uc3QgbGF0ZXN0Tm9uSW50ZXJuYWxRdWVyeSA9IHNpZ25hbDxRdWVyeVNuYXBzaG90V2l0aFR5cGU8XG4gICAgVExvZ2luQXJncyxcbiAgICBUVG9rZW5Mb2dpbkFyZ3MsXG4gICAgVFRva2VuUmVmcmVzaEFyZ3MsXG4gICAgVFNlbGVjdFJvbGVBcmdzXG4gID4gfCBudWxsPihudWxsKTtcblxuICBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHJlbGV2YW50UXVlcmllcyA9IHF1ZXJpZXMuZmlsdGVyKFxuICAgICAgKHEpID0+IHEucXVlcnkgJiYgIXEucXVlcnkudHJpZ2dlcmVkSW50ZXJuYWxseSgpICYmIHEucXVlcnkucXVlcnkubGFzdFRpbWVFeGVjdXRlZEF0KCkgIT09IG51bGwsXG4gICAgKTtcblxuICAgIGNvbnN0IGxhc3RRdWVyeSA9IGZpbmRNb3N0UmVjZW50UXVlcnkocmVsZXZhbnRRdWVyaWVzKTtcblxuICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICBpZiAoIWxhc3RRdWVyeSB8fCAhbGFzdFF1ZXJ5LnF1ZXJ5Py5xdWVyeSkgcmV0dXJuO1xuXG4gICAgICBsYXRlc3ROb25JbnRlcm5hbFF1ZXJ5LnNldCh7XG4gICAgICAgIHR5cGU6IGxhc3RRdWVyeS50eXBlLFxuICAgICAgICAuLi5sYXN0UXVlcnkucXVlcnkucXVlcnkuY3JlYXRlU25hcHNob3QoKSxcbiAgICAgIH0gYXMgUXVlcnlTbmFwc2hvdFdpdGhUeXBlPFRMb2dpbkFyZ3MsIFRUb2tlbkxvZ2luQXJncywgVFRva2VuUmVmcmVzaEFyZ3MsIFRTZWxlY3RSb2xlQXJncz4pO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBDb29raWUgd3JpdGluZ1xuICBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGlzQ29va2llRW5hYmxlZCA9IGNvb2tpZUVuYWJsZWQoKTtcbiAgICBjb25zdCByZXMgPSBsYXRlc3RFeGVjdXRlZFF1ZXJ5KCk7XG4gICAgY29uc3QgZXJyb3IgPSByZXM/LnF1ZXJ5Py5xdWVyeS5lcnJvcigpO1xuXG4gICAgaWYgKCFpc0Nvb2tpZUVuYWJsZWQgfHwgKGVycm9yICYmIGVycm9yLmNvZGUgPT09IDQwMSkpIHtcbiAgICAgIGRlbGV0ZUNvb2tpZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghcmVzPy5xdWVyeSkgcmV0dXJuO1xuXG4gICAgY29uc3QgeyB0b2tlbnMgfSA9IHJlcy5xdWVyeTtcblxuICAgIGNvbnN0IHJ0ID0gdG9rZW5zKCk/LnRva2Vucy5yZWZyZXNoVG9rZW47XG5cbiAgICBpZiAoIXJ0KSByZXR1cm47XG5cbiAgICB3cml0ZUNvb2tpZShydCk7XG4gIH0pO1xuXG4gIGNvbnN0IGxvZ2luID0gKGFyZ3M6IFJlcXVlc3RBcmdzPFRMb2dpbkFyZ3M+KSA9PiB7XG4gICAgaWYgKCFsb2dpblF1ZXJ5KSB7XG4gICAgICB0aHJvdyBsb2dpbkNhbGxlZFdpdGhvdXRDb25maWcoKTtcbiAgICB9XG5cbiAgICBsb2dpblF1ZXJ5LmV4ZWN1dGUoYXJncyk7XG5cbiAgICByZXR1cm4gbG9naW5RdWVyeS5xdWVyeS5jcmVhdGVTbmFwc2hvdCgpO1xuICB9O1xuXG4gIGNvbnN0IGxvZ2luV2l0aFRva2VuID0gKGFyZ3M6IFJlcXVlc3RBcmdzPFRUb2tlbkxvZ2luQXJncz4pID0+IHtcbiAgICBpZiAoIXRva2VuTG9naW5RdWVyeSkge1xuICAgICAgdGhyb3cgbG9naW5XaXRoVG9rZW5DYWxsZWRXaXRob3V0Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgdG9rZW5Mb2dpblF1ZXJ5LmV4ZWN1dGUoYXJncyk7XG5cbiAgICByZXR1cm4gdG9rZW5Mb2dpblF1ZXJ5LnF1ZXJ5LmNyZWF0ZVNuYXBzaG90KCk7XG4gIH07XG5cbiAgY29uc3QgcmVmcmVzaFRva2VuID0gKGFyZ3M6IFJlcXVlc3RBcmdzPFRUb2tlblJlZnJlc2hBcmdzPiwgb3B0aW9ucz86IEludGVybmFsUXVlcnlFeGVjdXRlT3B0aW9ucykgPT4ge1xuICAgIGlmICghdG9rZW5SZWZyZXNoUXVlcnkpIHtcbiAgICAgIHRocm93IHJlZnJlc2hUb2tlbkNhbGxlZFdpdGhvdXRDb25maWcoKTtcbiAgICB9XG5cbiAgICB0b2tlblJlZnJlc2hRdWVyeS5leGVjdXRlKGFyZ3MsIHsgdHJpZ2dlcmVkSW50ZXJuYWxseTogb3B0aW9ucz8udHJpZ2dlcmVkSW50ZXJuYWxseSB9KTtcblxuICAgIHJldHVybiB0b2tlblJlZnJlc2hRdWVyeS5xdWVyeS5jcmVhdGVTbmFwc2hvdCgpO1xuICB9O1xuXG4gIGNvbnN0IHNlbGVjdFJvbGUgPSAoYXJnczogUmVxdWVzdEFyZ3M8VFNlbGVjdFJvbGVBcmdzPikgPT4ge1xuICAgIGlmICghc2VsZWN0Um9sZVF1ZXJ5KSB7XG4gICAgICB0aHJvdyBzZWxlY3RSb2xlQ2FsbGVkV2l0aG91dENvbmZpZygpO1xuICAgIH1cblxuICAgIHNlbGVjdFJvbGVRdWVyeS5leGVjdXRlKGFyZ3MpO1xuXG4gICAgcmV0dXJuIHNlbGVjdFJvbGVRdWVyeS5xdWVyeS5jcmVhdGVTbmFwc2hvdCgpO1xuICB9O1xuXG4gIGNvbnN0IGxvZ291dCA9ICgpID0+IHtcbiAgICBkZWxldGVDb29raWUoKTtcbiAgICBsb2dpblF1ZXJ5Py5xdWVyeS5yZXNldCgpO1xuICAgIHRva2VuTG9naW5RdWVyeT8ucXVlcnkucmVzZXQoKTtcbiAgICB0b2tlblJlZnJlc2hRdWVyeT8ucXVlcnkucmVzZXQoKTtcbiAgICBzZWxlY3RSb2xlUXVlcnk/LnF1ZXJ5LnJlc2V0KCk7XG4gICAgbGF0ZXN0Tm9uSW50ZXJuYWxRdWVyeS5zZXQobnVsbCk7XG5cbiAgICBjbGllbnQucmVwb3NpdG9yeS51bmJpbmRBbGxTZWN1cmUoKTtcbiAgfTtcblxuICBjb25zdCBlbmFibGVDb29raWUgPSAoKSA9PiB7XG4gICAgaWYgKGlzRGV2TW9kZSgpICYmICFvcHRpb25zLmNvb2tpZSkge1xuICAgICAgdGhyb3cgZW5hYmxlQ29va2llQ2FsbGVkV2l0aG91dENvb2tpZUNvbmZpZygpO1xuICAgIH1cblxuICAgIGNvb2tpZUVuYWJsZWQuc2V0KHRydWUpO1xuICB9O1xuXG4gIGNvbnN0IGRpc2FibGVDb29raWUgPSAoKSA9PiB7XG4gICAgaWYgKGlzRGV2TW9kZSgpICYmICFvcHRpb25zLmNvb2tpZSkge1xuICAgICAgdGhyb3cgZGlzYWJsZUNvb2tpZUNhbGxlZFdpdGhvdXRDb29raWVDb25maWcoKTtcbiAgICB9XG5cbiAgICBjb29raWVFbmFibGVkLnNldChmYWxzZSk7XG4gICAgZGVsZXRlQ29va2llKCk7XG4gIH07XG5cbiAgY29uc3QgaXNDb29raWVQcmVzZW50ID0gKCkgPT4ge1xuICAgIHJldHVybiAhIWdldENvb2tpZShjb29raWVPcHRpb25zLm5hbWUpO1xuICB9O1xuXG4gIGNvbnN0IHRyeUxvZ2luV2l0aENvb2tpZSA9ICgpID0+IHtcbiAgICBjb25zdCBpc0Nvb2tpZUVuYWJsZWQgPSBjb29raWVFbmFibGVkKCk7XG5cbiAgICBpZiAoIWlzQ29va2llRW5hYmxlZCkge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIHRocm93IGNvb2tpZUxvZ2luVHJpZWRCdXRDb29raWVEaXNhYmxlZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvb2tpZSA9IGdldENvb2tpZShjb29raWVPcHRpb25zLm5hbWUpO1xuXG4gICAgaWYgKCFjb29raWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZWZyZXNoVG9rZW4oY29va2llT3B0aW9ucy5yZWZyZXNoQXJnc1RyYW5zZm9ybWVyKGNvb2tpZSkpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3Qgd3JpdGVDb29raWUgPSAocmVmcmVzaFRva2VuOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCB7IG5hbWUsIGV4cGlyZXNJbkRheXMsIGRvbWFpbiwgcGF0aCwgc2FtZVNpdGUgfSA9IGNvb2tpZU9wdGlvbnM7XG5cbiAgICBzZXRDb29raWUobmFtZSwgcmVmcmVzaFRva2VuLCBleHBpcmVzSW5EYXlzLCBkb21haW4sIHBhdGgsIHNhbWVTaXRlKTtcbiAgfTtcblxuICBjb25zdCBkZWxldGVDb29raWUgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBuYW1lLCBwYXRoLCBkb21haW4gfSA9IGNvb2tpZU9wdGlvbnM7XG5cbiAgICBjb3JlRGVsZXRlQ29va2llKG5hbWUsIHBhdGgsIGRvbWFpbik7XG4gIH07XG5cbiAgY29uc3QgZmluZE1vc3RSZWNlbnRRdWVyeSA9IChcbiAgICBxdWVyaWVzVG9TZWFyY2g6IEF1dGhQcm92aWRlclF1ZXJ5V2l0aFR5cGU8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzPltdLFxuICApID0+IHtcbiAgICByZXR1cm4gcXVlcmllc1RvU2VhcmNoLnJlZHVjZShcbiAgICAgIChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgaWYgKCFhY2MpIHJldHVybiBjdXJyO1xuXG4gICAgICAgIGNvbnN0IGFjY0V4cCA9IGFjYy5xdWVyeT8ucXVlcnkubGFzdFRpbWVFeGVjdXRlZEF0KCkgPz8gbnVsbDtcbiAgICAgICAgY29uc3QgY3VyckV4cCA9IGN1cnIucXVlcnk/LnF1ZXJ5Lmxhc3RUaW1lRXhlY3V0ZWRBdCgpID8/IG51bGw7XG5cbiAgICAgICAgaWYgKGN1cnJFeHAgPT09IG51bGwgfHwgYWNjRXhwID09PSBudWxsKSByZXR1cm4gYWNjO1xuXG4gICAgICAgIHJldHVybiBhY2NFeHAgPiBjdXJyRXhwID8gYWNjIDogY3VycjtcbiAgICAgIH0sXG4gICAgICBudWxsIGFzIEF1dGhQcm92aWRlclF1ZXJ5V2l0aFR5cGU8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzPiB8IG51bGwsXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBiZWFyZXJBdXRoUHJvdmlkZXI6IEJlYXJlckF1dGhQcm92aWRlcjxcbiAgICBUTG9naW5BcmdzLFxuICAgIFRUb2tlbkxvZ2luQXJncyxcbiAgICBUVG9rZW5SZWZyZXNoQXJncyxcbiAgICBUU2VsZWN0Um9sZUFyZ3MsXG4gICAgVEJlYXJlckRhdGFcbiAgPiA9IHtcbiAgICBsb2dpbixcbiAgICBsb2dpbldpdGhUb2tlbixcbiAgICByZWZyZXNoVG9rZW4sXG4gICAgc2VsZWN0Um9sZSxcbiAgICBsb2dvdXQsXG4gICAgZW5hYmxlQ29va2llLFxuICAgIGRpc2FibGVDb29raWUsXG4gICAgaXNDb29raWVQcmVzZW50LFxuICAgIHRyeUxvZ2luV2l0aENvb2tpZSxcbiAgICBsYXRlc3RFeGVjdXRlZFF1ZXJ5OiBsYXRlc3ROb25JbnRlcm5hbFF1ZXJ5LmFzUmVhZG9ubHkoKSxcbiAgICB0b2tlbnMsXG4gICAgYmVhcmVyRGF0YSxcbiAgfTtcblxuICBpZiAoY29va2llRW5hYmxlZCgpKSB7XG4gICAgaWYgKCFjb29raWVPcHRpb25zLmF1dG9Mb2dpbkV4Y2x1ZGVSb3V0ZXMuc29tZSgocikgPT4gcm91dGUoKS5zdGFydHNXaXRoKHIpKSkge1xuICAgICAgdHJ5TG9naW5XaXRoQ29va2llKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJlYXJlckF1dGhQcm92aWRlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBwcm92aWRlQmVhcmVyQXV0aFByb3ZpZGVyID0gPFxuICBUTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5Mb2dpbkFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRUb2tlblJlZnJlc2hBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUU2VsZWN0Um9sZUFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRCZWFyZXJEYXRhLFxuPihcbiAgY29uZmlnOiBCZWFyZXJBdXRoUHJvdmlkZXJDb25maWc8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzLCBUQmVhcmVyRGF0YT4sXG4pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlOiBjb25maWcudG9rZW4sXG4gICAgdXNlRmFjdG9yeTogKCkgPT4gY3JlYXRlQmVhcmVyQXV0aFByb3ZpZGVyKGNvbmZpZyksXG4gIH07XG59O1xuIl19","import { InjectionToken } from '@angular/core';\nexport const createBearerAuthProviderConfig = (options) => {\n const token = new InjectionToken(`BearerAuthProvider_${options.name}`);\n const bearerAuthProviderConfig = {\n name: options.name,\n queryClientRef: options.queryClientRef,\n token,\n cookie: options.cookie,\n expiresInPropertyName: options.expiresInPropertyName || 'exp',\n refreshBuffer: options.refreshBuffer ?? 300000,\n refreshOnUnauthorizedResponse: options.refreshOnUnauthorizedResponse ?? true,\n login: options.login,\n selectRole: options.selectRole,\n tokenLogin: options.tokenLogin,\n tokenRefresh: options.tokenRefresh,\n bearerDecryptFn: options.bearerDecryptFn,\n };\n return bearerAuthProviderConfig;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhcmVyLWF1dGgtcHJvdmlkZXItY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9hdXRoL2JlYXJlci1hdXRoLXByb3ZpZGVyLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBNksvQyxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxDQU81QyxPQU1DLEVBQ0QsRUFBRTtJQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksY0FBYyxDQUU5QixzQkFBc0IsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFFeEMsTUFBTSx3QkFBd0IsR0FNMUI7UUFDRixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7UUFDbEIsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjO1FBQ3RDLEtBQUs7UUFDTCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07UUFDdEIscUJBQXFCLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixJQUFJLEtBQUs7UUFDN0QsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLElBQUksTUFBTTtRQUM5Qyw2QkFBNkIsRUFBRSxPQUFPLENBQUMsNkJBQTZCLElBQUksSUFBSTtRQUM1RSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1FBQzlCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtRQUM5QixZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7UUFDbEMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlO0tBQ3pDLENBQUM7SUFFRixPQUFPLHdCQUF3QixDQUFDO0FBQ2xDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBRdWVyeUFyZ3MsIFF1ZXJ5Q2xpZW50UmVmLCBRdWVyeUNyZWF0b3IsIFJlcXVlc3RBcmdzLCBSZXNwb25zZVR5cGUgfSBmcm9tICcuLi9odHRwJztcbmltcG9ydCB7IEJlYXJlckF1dGhQcm92aWRlciB9IGZyb20gJy4vYmVhcmVyLWF1dGgtcHJvdmlkZXInO1xuXG5leHBvcnQgdHlwZSBCZWFyZXJBdXRoUHJvdmlkZXJUb2tlbnMgPSB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQmVhcmVyQXV0aFByb3ZpZGVyUm91dGVDb25maWc8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICBxdWVyeUNyZWF0b3I6IFF1ZXJ5Q3JlYXRvcjxUQXJncz47XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB0cmFuc2Zvcm1zIHRoZSByZXNwb25zZSBpbnRvIHRoZSBmb3JtYXQgdGhhdCB0aGUgYXV0aCBwcm92aWRlciBleHBlY3RzXG4gICAqXG4gICAqIFRoZSBleHBlY3RlZCBmb3JtYXQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIGBhY2Nlc3NUb2tlbmAgYW5kIGByZWZyZXNoVG9rZW5gIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IChyZXNwb25zZSkgPT4gcmVzcG9uc2VcbiAgICovXG4gIHJlc3BvbnNlVHJhbnNmb3JtZXI/OiAocmVzcG9uc2U6IFJlc3BvbnNlVHlwZTxUQXJncz4pID0+IEJlYXJlckF1dGhQcm92aWRlclRva2Vucztcbn07XG5cbmV4cG9ydCB0eXBlIEJlYXJlckF1dGhQcm92aWRlckNvb2tpZUNvbmZpZzxUVG9rZW5SZWZyZXNoQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIC8qKlxuICAgKiBUaGUgY29va2llIG5hbWUgd2hlcmUgdGhlIHJlZnJlc2ggdG9rZW4gaXMgc3RvcmVkXG4gICAqIEBkZWZhdWx0ICdldEF1dGgnXG4gICAqL1xuICBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9tYWluIG9mIHRoZSBjb29raWUuIElmIG5vdCBzZXQsIHRoZSBjdXJyZW50IG9yaWdpbiB3aWxsIGJlIHVzZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIFwiaHR0cHM6Ly9leGFtcGxlLmNvbVwiIC0+IFwiZXhhbXBsZS5jb21cIlxuICAgKiBcImh0dHBzOi8vc3ViLmV4YW1wbGUuY29tXCIgLT4gXCJleGFtcGxlLmNvbVwiXG4gICAqL1xuICBkb21haW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXlzIHVudGlsIHRoZSBjb29raWUgZXhwaXJlc1xuICAgKiBAZGVmYXVsdCAzMFxuICAgKi9cbiAgZXhwaXJlc0luRGF5cz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIGNvb2tpZVxuICAgKiBAZGVmYXVsdCAnLydcbiAgICovXG4gIHBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBjb29raWVcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzYW1lIHNpdGUgcHJvcGVydHkgb2YgdGhlIGNvb2tpZVxuICAgKiBAZGVmYXVsdCAnbGF4J1xuICAgKi9cbiAgc2FtZVNpdGU/OiAnc3RyaWN0JyB8ICdub25lJyB8ICdsYXgnO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgdHVybnMgdGhlIHRva2VuIGdvdHRlbiBmcm9tIHRoZSBjb29raWUgaW50byB0aGUgYm9keSBmb3IgdGhlIHJlZnJlc2ggdG9rZW4gcmVxdWVzdFxuICAgKiBAZGVmYXVsdCAodG9rZW4pID0+ICh7IHRva2VuIH0pXG4gICAqL1xuICByZWZyZXNoQXJnc1RyYW5zZm9ybWVyPzogKHRva2VuOiBzdHJpbmcpID0+IFJlcXVlc3RBcmdzPFRUb2tlblJlZnJlc2hBcmdzPjtcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2Ygcm91dGVzIHdoZXJlIHRoZSBhdXRvIGxvZ2luIHZpYSBjb29raWUgc2hvdWxkIG5vdCBiZSB0cmlnZ2VyZWQuXG4gICAqXG4gICAqIFRoaXMgY2hlY2tzIHRoZSBjdXJyZW50IHJvdXRlIGFnYWluc3QgdGhlIGFycmF5IG9mIHJvdXRlcyB1c2luZyB0aGUgYHN0YXJ0c1dpdGhgIG1ldGhvZC5cbiAgICogTWFrZSBzdXJlIHRvIHN0YXJ0IGVhY2ggcm91dGUgd2l0aCBhIGAvYC5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICogQGV4YW1wbGUgWycvbG9naW4nLCAnL3JlZ2lzdGVyJ11cbiAgICovXG4gIGF1dG9Mb2dpbkV4Y2x1ZGVSb3V0ZXM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUJlYXJlckF1dGhQcm92aWRlckNvbmZpZ09wdGlvbnM8XG4gIFRMb2dpbkFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRUb2tlbkxvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuUmVmcmVzaEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRTZWxlY3RSb2xlQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVEJlYXJlckRhdGEsXG4+ID0ge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGF1dGggcHJvdmlkZXJcbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHF1ZXJ5IGNsaWVudCByZWZlcmVuY2VcbiAgICovXG4gIHF1ZXJ5Q2xpZW50UmVmOiBRdWVyeUNsaWVudFJlZjtcblxuICAvKipcbiAgICogVGhlIGxvZ2luIHJvdXRlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGxvZ2luPzogQmVhcmVyQXV0aFByb3ZpZGVyUm91dGVDb25maWc8VExvZ2luQXJncz47XG5cbiAgLyoqXG4gICAqIFRoZSB0b2tlbiBsb2dpbiByb3V0ZSBjb25maWd1cmF0aW9uXG4gICAqL1xuICB0b2tlbkxvZ2luPzogQmVhcmVyQXV0aFByb3ZpZGVyUm91dGVDb25maWc8VFRva2VuTG9naW5BcmdzPjtcblxuICAvKipcbiAgICogVGhlIHRva2VuIHJlZnJlc2ggcm91dGUgY29uZmlndXJhdGlvblxuICAgKi9cbiAgdG9rZW5SZWZyZXNoPzogQmVhcmVyQXV0aFByb3ZpZGVyUm91dGVDb25maWc8VFRva2VuUmVmcmVzaEFyZ3M+O1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZWN0IHJvbGUgcm91dGUgY29uZmlndXJhdGlvblxuICAgKi9cbiAgc2VsZWN0Um9sZT86IEJlYXJlckF1dGhQcm92aWRlclJvdXRlQ29uZmlnPFRTZWxlY3RSb2xlQXJncz47XG5cbiAgLyoqXG4gICAqIFRoZSBjb29raWUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGF1dGggcHJvdmlkZXJcbiAgICovXG4gIGNvb2tpZT86IEJlYXJlckF1dGhQcm92aWRlckNvb2tpZUNvbmZpZzxUVG9rZW5SZWZyZXNoQXJncz47XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIHRva2VuIGV4cGlyZXMgd2hlbiB0aGUgcmVmcmVzaCBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuICAgKiBAZGVmYXVsdCAzMDAwMDAgLy8gKDUgbWludXRlcylcbiAgICovXG4gIHJlZnJlc2hCdWZmZXI/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBleHBpcmVzIGluIHByb3BlcnR5IG5hbWUgaW5zaWRlIHRoZSBqd3QgYm9keVxuICAgKiBAZGVmYXVsdCAnZXhwJ1xuICAgKi9cbiAgZXhwaXJlc0luUHJvcGVydHlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHRoZSB0b2tlbiBzaG91bGQgYmUgcmVmcmVzaGVkIGlmICoqYW55KiogcXVlcnkgcmV0dXJucyBhIDQwMSByZXNwb25zZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVmcmVzaE9uVW5hdXRob3JpemVkUmVzcG9uc2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgZGVjcnlwdHMgdGhlIGJlYXJlciB0b2tlblxuICAgKi9cbiAgYmVhcmVyRGVjcnlwdEZuPzogKHRva2VuOiBzdHJpbmcpID0+IFRCZWFyZXJEYXRhO1xufTtcblxuZXhwb3J0IHR5cGUgQmVhcmVyQXV0aFByb3ZpZGVyQ29uZmlnPFxuICBUTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5Mb2dpbkFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRUb2tlblJlZnJlc2hBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUU2VsZWN0Um9sZUFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRCZWFyZXJEYXRhLFxuPiA9IENyZWF0ZUJlYXJlckF1dGhQcm92aWRlckNvbmZpZ09wdGlvbnM8XG4gIFRMb2dpbkFyZ3MsXG4gIFRUb2tlbkxvZ2luQXJncyxcbiAgVFRva2VuUmVmcmVzaEFyZ3MsXG4gIFRTZWxlY3RSb2xlQXJncyxcbiAgVEJlYXJlckRhdGFcbj4gJiB7XG4gIHRva2VuOiBCZWFyZXJBdXRoUHJvdmlkZXJSZWY8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzLCBUQmVhcmVyRGF0YT47XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgQW55QmVhcmVyQXV0aFByb3ZpZGVyQ29uZmlnID0gQmVhcmVyQXV0aFByb3ZpZGVyQ29uZmlnPGFueSwgYW55LCBhbnksIGFueSwgYW55PjtcblxuZXhwb3J0IHR5cGUgQmVhcmVyQXV0aFByb3ZpZGVyUmVmPFxuICBUTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5Mb2dpbkFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRUb2tlblJlZnJlc2hBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUU2VsZWN0Um9sZUFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRCZWFyZXJEYXRhLFxuPiA9IEluamVjdGlvblRva2VuPEJlYXJlckF1dGhQcm92aWRlcjxUTG9naW5BcmdzLCBUVG9rZW5Mb2dpbkFyZ3MsIFRUb2tlblJlZnJlc2hBcmdzLCBUU2VsZWN0Um9sZUFyZ3MsIFRCZWFyZXJEYXRhPj47XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVCZWFyZXJBdXRoUHJvdmlkZXJDb25maWcgPSA8XG4gIFRMb2dpbkFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRUb2tlbkxvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuUmVmcmVzaEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRTZWxlY3RSb2xlQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVEJlYXJlckRhdGEsXG4+KFxuICBvcHRpb25zOiBDcmVhdGVCZWFyZXJBdXRoUHJvdmlkZXJDb25maWdPcHRpb25zPFxuICAgIFRMb2dpbkFyZ3MsXG4gICAgVFRva2VuTG9naW5BcmdzLFxuICAgIFRUb2tlblJlZnJlc2hBcmdzLFxuICAgIFRTZWxlY3RSb2xlQXJncyxcbiAgICBUQmVhcmVyRGF0YVxuICA+LFxuKSA9PiB7XG4gIGNvbnN0IHRva2VuID0gbmV3IEluamVjdGlvblRva2VuPFxuICAgIEJlYXJlckF1dGhQcm92aWRlckNvbmZpZzxUTG9naW5BcmdzLCBUVG9rZW5Mb2dpbkFyZ3MsIFRUb2tlblJlZnJlc2hBcmdzLCBUU2VsZWN0Um9sZUFyZ3MsIFRCZWFyZXJEYXRhPlxuICA+KGBCZWFyZXJBdXRoUHJvdmlkZXJfJHtvcHRpb25zLm5hbWV9YCk7XG5cbiAgY29uc3QgYmVhcmVyQXV0aFByb3ZpZGVyQ29uZmlnOiBCZWFyZXJBdXRoUHJvdmlkZXJDb25maWc8XG4gICAgVExvZ2luQXJncyxcbiAgICBUVG9rZW5Mb2dpbkFyZ3MsXG4gICAgVFRva2VuUmVmcmVzaEFyZ3MsXG4gICAgVFNlbGVjdFJvbGVBcmdzLFxuICAgIFRCZWFyZXJEYXRhXG4gID4gPSB7XG4gICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgIHF1ZXJ5Q2xpZW50UmVmOiBvcHRpb25zLnF1ZXJ5Q2xpZW50UmVmLFxuICAgIHRva2VuLFxuICAgIGNvb2tpZTogb3B0aW9ucy5jb29raWUsXG4gICAgZXhwaXJlc0luUHJvcGVydHlOYW1lOiBvcHRpb25zLmV4cGlyZXNJblByb3BlcnR5TmFtZSB8fCAnZXhwJyxcbiAgICByZWZyZXNoQnVmZmVyOiBvcHRpb25zLnJlZnJlc2hCdWZmZXIgPz8gMzAwMDAwLFxuICAgIHJlZnJlc2hPblVuYXV0aG9yaXplZFJlc3BvbnNlOiBvcHRpb25zLnJlZnJlc2hPblVuYXV0aG9yaXplZFJlc3BvbnNlID8/IHRydWUsXG4gICAgbG9naW46IG9wdGlvbnMubG9naW4sXG4gICAgc2VsZWN0Um9sZTogb3B0aW9ucy5zZWxlY3RSb2xlLFxuICAgIHRva2VuTG9naW46IG9wdGlvbnMudG9rZW5Mb2dpbixcbiAgICB0b2tlblJlZnJlc2g6IG9wdGlvbnMudG9rZW5SZWZyZXNoLFxuICAgIGJlYXJlckRlY3J5cHRGbjogb3B0aW9ucy5iZWFyZXJEZWNyeXB0Rm4sXG4gIH07XG5cbiAgcmV0dXJuIGJlYXJlckF1dGhQcm92aWRlckNvbmZpZztcbn07XG4iXX0=","export const isClassValidatorError = (error) => {\n return typeof error === 'object' && error !== null && 'statusCode' in error && 'message' in error && 'error' in error;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtdmFsaWRhdG9yLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2NsYXNzLXZhbGlkYXRvci9jbGFzcy12YWxpZGF0b3IudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxLQUFjLEVBQWdDLEVBQUU7SUFDcEYsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxZQUFZLElBQUksS0FBSyxJQUFJLFNBQVMsSUFBSSxLQUFLLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQztBQUN4SCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbGFzc1ZhbGlkYXRvckVycm9yIH0gZnJvbSAnLi9jbGFzcy12YWxpZGF0b3IudHlwZXMnO1xuXG5leHBvcnQgY29uc3QgaXNDbGFzc1ZhbGlkYXRvckVycm9yID0gKGVycm9yOiB1bmtub3duKTogZXJyb3IgaXMgQ2xhc3NWYWxpZGF0b3JFcnJvciA9PiB7XG4gIHJldHVybiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmIGVycm9yICE9PSBudWxsICYmICdzdGF0dXNDb2RlJyBpbiBlcnJvciAmJiAnbWVzc2FnZScgaW4gZXJyb3IgJiYgJ2Vycm9yJyBpbiBlcnJvcjtcbn07XG4iXX0=","import { computed, signal } from '@angular/core';\nexport const setupQueryState = (options) => {\n const response = signal(null);\n const args = signal(null);\n const latestHttpEvent = signal(null);\n const error = signal(null);\n const loading = signal(null);\n const lastTimeExecutedAt = signal(null);\n const request = signal(null);\n const executionState = computed(() => {\n const currentResponse = response();\n const currentError = error();\n const currentLoading = loading();\n if (currentLoading) {\n if (currentResponse) {\n return {\n type: 'loading',\n hasCachedResponse: true,\n loading: currentLoading,\n cachedResponse: currentResponse,\n };\n }\n return {\n type: 'loading',\n hasCachedResponse: false,\n loading: currentLoading,\n };\n }\n else if (currentError) {\n return {\n type: 'failure',\n error: currentError,\n };\n }\n else if (currentResponse) {\n return {\n type: 'success',\n response: currentResponse,\n };\n }\n else {\n return null;\n }\n });\n const state = {\n response,\n args,\n latestHttpEvent,\n loading,\n error,\n lastTimeExecutedAt,\n executionState,\n subtle: {\n request,\n },\n };\n return state;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvcXVlcnktc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUEwQixRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBdUR6RSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBMEIsT0FBK0IsRUFBRSxFQUFFO0lBQzFGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBNkIsSUFBSSxDQUFDLENBQUM7SUFDMUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUE0QixJQUFJLENBQUMsQ0FBQztJQUNyRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQXdDLElBQUksQ0FBQyxDQUFDO0lBQzVFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBNEIsSUFBSSxDQUFDLENBQUM7SUFDdEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFpQyxJQUFJLENBQUMsQ0FBQztJQUM3RCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFDdkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUE0QixJQUFJLENBQUMsQ0FBQztJQUV4RCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQW9DLEdBQUcsRUFBRTtRQUN0RSxNQUFNLGVBQWUsR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUM3QixNQUFNLGNBQWMsR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUVqQyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLE9BQU87b0JBQ0wsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsaUJBQWlCLEVBQUUsSUFBSTtvQkFDdkIsT0FBTyxFQUFFLGNBQWM7b0JBQ3ZCLGNBQWMsRUFBRSxlQUFlO2lCQUNoQyxDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU87Z0JBQ0wsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsaUJBQWlCLEVBQUUsS0FBSztnQkFDeEIsT0FBTyxFQUFFLGNBQWM7YUFDeEIsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3hCLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsS0FBSyxFQUFFLFlBQVk7YUFDcEIsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQzNCLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsUUFBUSxFQUFFLGVBQWU7YUFDMUIsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLEtBQUssR0FBc0I7UUFDL0IsUUFBUTtRQUNSLElBQUk7UUFDSixlQUFlO1FBQ2YsT0FBTztRQUNQLEtBQUs7UUFDTCxrQkFBa0I7UUFDbEIsY0FBYztRQUNkLE1BQU0sRUFBRTtZQUNOLE9BQU87U0FDUjtLQUNGLENBQUM7SUFFRixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFNpZ25hbCwgV3JpdGFibGVTaWduYWwsIGNvbXB1dGVkLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBSZXF1ZXN0LCBIdHRwUmVxdWVzdExvYWRpbmdTdGF0ZSB9IGZyb20gJy4vaHR0cC1yZXF1ZXN0JztcbmltcG9ydCB7IFF1ZXJ5QXJncywgUmVxdWVzdEFyZ3MsIFJlc3BvbnNlVHlwZSB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgUXVlcnlFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi9xdWVyeS1lcnJvci1yZXNwb25zZSc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCB0eXBlIFNldHVwUXVlcnlTdGF0ZU9wdGlvbnMgPSB7fTtcblxuZXhwb3J0IHR5cGUgUXVlcnlTdGF0ZVN1YnRsZTxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIHJlcXVlc3Q6IFdyaXRhYmxlU2lnbmFsPEh0dHBSZXF1ZXN0PFRBcmdzPiB8IG51bGw+O1xufTtcblxuZXhwb3J0IHR5cGUgUXVlcnlTdGF0ZTxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIHJlc3BvbnNlOiBXcml0YWJsZVNpZ25hbDxSZXNwb25zZVR5cGU8VEFyZ3M+IHwgbnVsbD47XG4gIGFyZ3M6IFdyaXRhYmxlU2lnbmFsPFJlcXVlc3RBcmdzPFRBcmdzPiB8IG51bGw+O1xuICBsYXRlc3RIdHRwRXZlbnQ6IFdyaXRhYmxlU2lnbmFsPEh0dHBFdmVudDxSZXNwb25zZVR5cGU8VEFyZ3M+PiB8IG51bGw+O1xuICBsb2FkaW5nOiBXcml0YWJsZVNpZ25hbDxIdHRwUmVxdWVzdExvYWRpbmdTdGF0ZSB8IG51bGw+O1xuICBlcnJvcjogV3JpdGFibGVTaWduYWw8UXVlcnlFcnJvclJlc3BvbnNlIHwgbnVsbD47XG4gIGxhc3RUaW1lRXhlY3V0ZWRBdDogV3JpdGFibGVTaWduYWw8bnVtYmVyIHwgbnVsbD47XG4gIGV4ZWN1dGlvblN0YXRlOiBTaWduYWw8UXVlcnlFeGVjdXRpb25TdGF0ZTxUQXJncz4gfCBudWxsPjtcbiAgc3VidGxlOiBRdWVyeVN0YXRlU3VidGxlPFRBcmdzPjtcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5RXhlY3V0aW9uU3RhdGVTdWNjZXNzPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IHtcbiAgdHlwZTogJ3N1Y2Nlc3MnO1xuICByZXNwb25zZTogUmVzcG9uc2VUeXBlPFRBcmdzPjtcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5RXhlY3V0aW9uU3RhdGVGYWlsdXJlID0ge1xuICB0eXBlOiAnZmFpbHVyZSc7XG4gIGVycm9yOiBRdWVyeUVycm9yUmVzcG9uc2U7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeUV4ZWN1dGlvblN0YXRlTG9hZGluZ1dpdGhOb1Jlc3BvbnNlID0ge1xuICB0eXBlOiAnbG9hZGluZyc7XG4gIGhhc0NhY2hlZFJlc3BvbnNlOiBmYWxzZTtcbiAgbG9hZGluZzogSHR0cFJlcXVlc3RMb2FkaW5nU3RhdGU7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeUV4ZWN1dGlvblN0YXRlTG9hZGluZ1dpdGhDYWNoZWRSZXNwb25zZTxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIHR5cGU6ICdsb2FkaW5nJztcbiAgaGFzQ2FjaGVkUmVzcG9uc2U6IHRydWU7XG4gIGxvYWRpbmc6IEh0dHBSZXF1ZXN0TG9hZGluZ1N0YXRlO1xuICBjYWNoZWRSZXNwb25zZTogUmVzcG9uc2VUeXBlPFRBcmdzPjtcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5RXhlY3V0aW9uU3RhdGVMb2FkaW5nPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9XG4gIHwgUXVlcnlFeGVjdXRpb25TdGF0ZUxvYWRpbmdXaXRoTm9SZXNwb25zZVxuICB8IFF1ZXJ5RXhlY3V0aW9uU3RhdGVMb2FkaW5nV2l0aENhY2hlZFJlc3BvbnNlPFRBcmdzPjtcblxuZXhwb3J0IHR5cGUgUXVlcnlFeGVjdXRpb25TdGF0ZTxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPVxuICB8IFF1ZXJ5RXhlY3V0aW9uU3RhdGVTdWNjZXNzPFRBcmdzPlxuICB8IFF1ZXJ5RXhlY3V0aW9uU3RhdGVGYWlsdXJlXG4gIHwgUXVlcnlFeGVjdXRpb25TdGF0ZUxvYWRpbmc8VEFyZ3M+O1xuXG5leHBvcnQgY29uc3Qgc2V0dXBRdWVyeVN0YXRlID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihvcHRpb25zOiBTZXR1cFF1ZXJ5U3RhdGVPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gc2lnbmFsPFJlc3BvbnNlVHlwZTxUQXJncz4gfCBudWxsPihudWxsKTtcbiAgY29uc3QgYXJncyA9IHNpZ25hbDxSZXF1ZXN0QXJnczxUQXJncz4gfCBudWxsPihudWxsKTtcbiAgY29uc3QgbGF0ZXN0SHR0cEV2ZW50ID0gc2lnbmFsPEh0dHBFdmVudDxSZXNwb25zZVR5cGU8VEFyZ3M+PiB8IG51bGw+KG51bGwpO1xuICBjb25zdCBlcnJvciA9IHNpZ25hbDxRdWVyeUVycm9yUmVzcG9uc2UgfCBudWxsPihudWxsKTtcbiAgY29uc3QgbG9hZGluZyA9IHNpZ25hbDxIdHRwUmVxdWVzdExvYWRpbmdTdGF0ZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBsYXN0VGltZUV4ZWN1dGVkQXQgPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHJlcXVlc3QgPSBzaWduYWw8SHR0cFJlcXVlc3Q8VEFyZ3M+IHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgZXhlY3V0aW9uU3RhdGUgPSBjb21wdXRlZDxRdWVyeUV4ZWN1dGlvblN0YXRlPFRBcmdzPiB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50UmVzcG9uc2UgPSByZXNwb25zZSgpO1xuICAgIGNvbnN0IGN1cnJlbnRFcnJvciA9IGVycm9yKCk7XG4gICAgY29uc3QgY3VycmVudExvYWRpbmcgPSBsb2FkaW5nKCk7XG5cbiAgICBpZiAoY3VycmVudExvYWRpbmcpIHtcbiAgICAgIGlmIChjdXJyZW50UmVzcG9uc2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAnbG9hZGluZycsXG4gICAgICAgICAgaGFzQ2FjaGVkUmVzcG9uc2U6IHRydWUsXG4gICAgICAgICAgbG9hZGluZzogY3VycmVudExvYWRpbmcsXG4gICAgICAgICAgY2FjaGVkUmVzcG9uc2U6IGN1cnJlbnRSZXNwb25zZSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2xvYWRpbmcnLFxuICAgICAgICBoYXNDYWNoZWRSZXNwb25zZTogZmFsc2UsXG4gICAgICAgIGxvYWRpbmc6IGN1cnJlbnRMb2FkaW5nLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRFcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2ZhaWx1cmUnLFxuICAgICAgICBlcnJvcjogY3VycmVudEVycm9yLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICByZXNwb25zZTogY3VycmVudFJlc3BvbnNlLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBzdGF0ZTogUXVlcnlTdGF0ZTxUQXJncz4gPSB7XG4gICAgcmVzcG9uc2UsXG4gICAgYXJncyxcbiAgICBsYXRlc3RIdHRwRXZlbnQsXG4gICAgbG9hZGluZyxcbiAgICBlcnJvcixcbiAgICBsYXN0VGltZUV4ZWN1dGVkQXQsXG4gICAgZXhlY3V0aW9uU3RhdGUsXG4gICAgc3VidGxlOiB7XG4gICAgICByZXF1ZXN0LFxuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcbiJdfQ==","import { effect, signal, untracked } from '@angular/core';\nimport { setupQueryState } from './query-state';\nimport { normalizeQueryRepositoryKey } from './query-utils';\nexport const createQuerySnapshotFn = (options) => {\n const { state, deps } = options;\n const snapshotFn = () => {\n const snapshotState = setupQueryState({});\n const isAlive = signal(true);\n const killEffectRef = effect(() => {\n const currentLoading = state.loading();\n const currentError = state.error();\n const currentResponse = state.response();\n const currentArgs = state.args();\n const currentLatestHttpEvent = state.latestHttpEvent();\n const currentLastTimeExecutedAt = state.lastTimeExecutedAt();\n untracked(() => {\n snapshotState.args.set(currentArgs);\n snapshotState.error.set(currentError);\n snapshotState.lastTimeExecutedAt.set(currentLastTimeExecutedAt);\n snapshotState.latestHttpEvent.set(currentLatestHttpEvent);\n snapshotState.loading.set(currentLoading);\n snapshotState.response.set(currentResponse);\n if (currentLoading)\n return;\n if (!currentResponse && !currentError)\n return;\n // kill the effect once loading is done and we either have a response or an error\n killEffectRef.destroy();\n isAlive.set(false);\n });\n }, { injector: deps.injector });\n const snapshot = {\n args: snapshotState.args.asReadonly(),\n response: snapshotState.response.asReadonly(),\n latestHttpEvent: snapshotState.latestHttpEvent.asReadonly(),\n loading: snapshotState.loading.asReadonly(),\n error: snapshotState.error.asReadonly(),\n lastTimeExecutedAt: snapshotState.lastTimeExecutedAt.asReadonly(),\n isAlive: isAlive.asReadonly(),\n id: normalizeQueryRepositoryKey(options.execute.currentRepositoryKey),\n executionState: snapshotState.executionState,\n };\n return snapshot;\n };\n return snapshotFn;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc25hcHNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvcXVlcnktc25hcHNob3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTFELE9BQU8sRUFBYyxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUTVELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQTBCLE9BQTBDLEVBQUUsRUFBRTtJQUMzRyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUVoQyxNQUFNLFVBQVUsR0FBRyxHQUFHLEVBQUU7UUFDdEIsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3QixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQzFCLEdBQUcsRUFBRTtZQUNILE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2RCxNQUFNLHlCQUF5QixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBRTdELFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2IsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3BDLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN0QyxhQUFhLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBQ2hFLGFBQWEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBQzFELGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMxQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFFNUMsSUFBSSxjQUFjO29CQUFFLE9BQU87Z0JBRTNCLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxZQUFZO29CQUFFLE9BQU87Z0JBRTlDLGlGQUFpRjtnQkFDakYsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUV4QixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUNELEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FDNUIsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUF5QjtZQUNyQyxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDckMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO1lBQzdDLGVBQWUsRUFBRSxhQUFhLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRTtZQUMzRCxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDM0MsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQ3ZDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUU7WUFDakUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDN0IsRUFBRSxFQUFFLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7WUFDckUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxjQUFjO1NBQzdDLENBQUM7UUFFRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFFRixPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlZmZlY3QsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBRdWVyeUFyZ3MsIFF1ZXJ5U25hcHNob3QgfSBmcm9tICcuL3F1ZXJ5JztcbmltcG9ydCB7IFF1ZXJ5RGVwZW5kZW5jaWVzIH0gZnJvbSAnLi9xdWVyeS1kZXBlbmRlbmNpZXMnO1xuaW1wb3J0IHsgSW50ZXJuYWxRdWVyeUV4ZWN1dGUgfSBmcm9tICcuL3F1ZXJ5LWV4ZWN1dGUnO1xuaW1wb3J0IHsgUXVlcnlTdGF0ZSwgc2V0dXBRdWVyeVN0YXRlIH0gZnJvbSAnLi9xdWVyeS1zdGF0ZSc7XG5pbXBvcnQgeyBub3JtYWxpemVRdWVyeVJlcG9zaXRvcnlLZXkgfSBmcm9tICcuL3F1ZXJ5LXV0aWxzJztcblxuZXhwb3J0IHR5cGUgQ3JlYXRlUXVlcnlTbmFwc2hvdE9wdGlvbnM8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICBzdGF0ZTogUXVlcnlTdGF0ZTxUQXJncz47XG4gIGRlcHM6IFF1ZXJ5RGVwZW5kZW5jaWVzO1xuICBleGVjdXRlOiBJbnRlcm5hbFF1ZXJ5RXhlY3V0ZTxUQXJncz47XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUXVlcnlTbmFwc2hvdEZuID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihvcHRpb25zOiBDcmVhdGVRdWVyeVNuYXBzaG90T3B0aW9uczxUQXJncz4pID0+IHtcbiAgY29uc3QgeyBzdGF0ZSwgZGVwcyB9ID0gb3B0aW9ucztcblxuICBjb25zdCBzbmFwc2hvdEZuID0gKCkgPT4ge1xuICAgIGNvbnN0IHNuYXBzaG90U3RhdGUgPSBzZXR1cFF1ZXJ5U3RhdGU8VEFyZ3M+KHt9KTtcbiAgICBjb25zdCBpc0FsaXZlID0gc2lnbmFsKHRydWUpO1xuXG4gICAgY29uc3Qga2lsbEVmZmVjdFJlZiA9IGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudExvYWRpbmcgPSBzdGF0ZS5sb2FkaW5nKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRFcnJvciA9IHN0YXRlLmVycm9yKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZXNwb25zZSA9IHN0YXRlLnJlc3BvbnNlKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBcmdzID0gc3RhdGUuYXJncygpO1xuICAgICAgICBjb25zdCBjdXJyZW50TGF0ZXN0SHR0cEV2ZW50ID0gc3RhdGUubGF0ZXN0SHR0cEV2ZW50KCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMYXN0VGltZUV4ZWN1dGVkQXQgPSBzdGF0ZS5sYXN0VGltZUV4ZWN1dGVkQXQoKTtcblxuICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgIHNuYXBzaG90U3RhdGUuYXJncy5zZXQoY3VycmVudEFyZ3MpO1xuICAgICAgICAgIHNuYXBzaG90U3RhdGUuZXJyb3Iuc2V0KGN1cnJlbnRFcnJvcik7XG4gICAgICAgICAgc25hcHNob3RTdGF0ZS5sYXN0VGltZUV4ZWN1dGVkQXQuc2V0KGN1cnJlbnRMYXN0VGltZUV4ZWN1dGVkQXQpO1xuICAgICAgICAgIHNuYXBzaG90U3RhdGUubGF0ZXN0SHR0cEV2ZW50LnNldChjdXJyZW50TGF0ZXN0SHR0cEV2ZW50KTtcbiAgICAgICAgICBzbmFwc2hvdFN0YXRlLmxvYWRpbmcuc2V0KGN1cnJlbnRMb2FkaW5nKTtcbiAgICAgICAgICBzbmFwc2hvdFN0YXRlLnJlc3BvbnNlLnNldChjdXJyZW50UmVzcG9uc2UpO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnRMb2FkaW5nKSByZXR1cm47XG5cbiAgICAgICAgICBpZiAoIWN1cnJlbnRSZXNwb25zZSAmJiAhY3VycmVudEVycm9yKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBraWxsIHRoZSBlZmZlY3Qgb25jZSBsb2FkaW5nIGlzIGRvbmUgYW5kIHdlIGVpdGhlciBoYXZlIGEgcmVzcG9uc2Ugb3IgYW4gZXJyb3JcbiAgICAgICAgICBraWxsRWZmZWN0UmVmLmRlc3Ryb3koKTtcblxuICAgICAgICAgIGlzQWxpdmUuc2V0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgeyBpbmplY3RvcjogZGVwcy5pbmplY3RvciB9LFxuICAgICk7XG5cbiAgICBjb25zdCBzbmFwc2hvdDogUXVlcnlTbmFwc2hvdDxUQXJncz4gPSB7XG4gICAgICBhcmdzOiBzbmFwc2hvdFN0YXRlLmFyZ3MuYXNSZWFkb25seSgpLFxuICAgICAgcmVzcG9uc2U6IHNuYXBzaG90U3RhdGUucmVzcG9uc2UuYXNSZWFkb25seSgpLFxuICAgICAgbGF0ZXN0SHR0cEV2ZW50OiBzbmFwc2hvdFN0YXRlLmxhdGVzdEh0dHBFdmVudC5hc1JlYWRvbmx5KCksXG4gICAgICBsb2FkaW5nOiBzbmFwc2hvdFN0YXRlLmxvYWRpbmcuYXNSZWFkb25seSgpLFxuICAgICAgZXJyb3I6IHNuYXBzaG90U3RhdGUuZXJyb3IuYXNSZWFkb25seSgpLFxuICAgICAgbGFzdFRpbWVFeGVjdXRlZEF0OiBzbmFwc2hvdFN0YXRlLmxhc3RUaW1lRXhlY3V0ZWRBdC5hc1JlYWRvbmx5KCksXG4gICAgICBpc0FsaXZlOiBpc0FsaXZlLmFzUmVhZG9ubHkoKSxcbiAgICAgIGlkOiBub3JtYWxpemVRdWVyeVJlcG9zaXRvcnlLZXkob3B0aW9ucy5leGVjdXRlLmN1cnJlbnRSZXBvc2l0b3J5S2V5KSxcbiAgICAgIGV4ZWN1dGlvblN0YXRlOiBzbmFwc2hvdFN0YXRlLmV4ZWN1dGlvblN0YXRlLFxuICAgIH07XG5cbiAgICByZXR1cm4gc25hcHNob3Q7XG4gIH07XG5cbiAgcmV0dXJuIHNuYXBzaG90Rm47XG59O1xuIl19","import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http';\nimport { computed, effect } from '@angular/core';\nimport { getActiveConsumer, setActiveConsumer } from '@angular/core/primitives/signals';\nimport { clamp } from '@ethlete/core';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../../symfony';\nimport { isCreateGqlQueryOptions } from '../gql/gql-query';\nimport { queryFeatureUsedMultipleTimes, silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent, withArgsQueryFeatureMissingButRouteIsFunction, } from './query-errors';\nimport { createQuerySnapshotFn } from './query-snapshot';\n/**\n * Returning this inside a withArgs feature will reset the query args to null.\n * This will also pause polling and auto refresh until new args are set.\n */\nexport const CLEAR_QUERY_ARGS = Symbol('CLEAR_QUERY_ARGS');\n/** A angular effect that can be nested inside another effect */\nexport const nestedEffect = (fn, options) => {\n const activeConsumer = getActiveConsumer();\n setActiveConsumer(null);\n const eff = effect(() => {\n fn();\n }, options);\n setActiveConsumer(activeConsumer);\n return eff;\n};\nconst CIRCULAR_QUERY_DEPENDENCY_ERROR_MESSAGE = 'Query was executed more than 5 times in less than 100ms. This is usually a sign of a circular dependency.';\nexport const circularQueryDependencyChecker = () => {\n let lastTriggerTs = 0;\n let illegalWrites = 0;\n // Typing this as number will throw an type error during testing since it is of type Timeout in a node env.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let timeout = null;\n const check = () => {\n const now = performance.now();\n if (now - lastTriggerTs < 100) {\n illegalWrites++;\n if (illegalWrites > 5) {\n throw new Error(CIRCULAR_QUERY_DEPENDENCY_ERROR_MESSAGE);\n }\n }\n lastTriggerTs = now;\n if (timeout)\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n illegalWrites = 0;\n }, 100);\n };\n return {\n check,\n };\n};\nexport const shouldAutoExecuteQuery = (method) => {\n return method === 'GET' || method === 'HEAD' || method === 'OPTIONS';\n};\nexport const shouldAutoExecuteGqlQuery = (method) => {\n return method === 'QUERY';\n};\nexport const extractExpiresInSeconds = (headers) => {\n const cacheControl = headers.get('cache-control');\n const age = headers.get('age');\n const expires = headers.get('expires');\n // In seconds\n let expiresIn = null;\n let maxAge = null;\n if (cacheControl?.includes('no-cache')) {\n return null;\n }\n if (cacheControl?.includes('max-age')) {\n const m = cacheControl.split('max-age=')[1];\n if (m) {\n maxAge = parseInt(m);\n }\n }\n else if (cacheControl?.includes('s-maxage')) {\n const m = cacheControl.split('s-maxage=')[1];\n if (m) {\n maxAge = parseInt(m);\n }\n }\n if (maxAge && age) {\n const ageSeconds = parseInt(age);\n expiresIn = maxAge - ageSeconds;\n }\n else if (maxAge) {\n expiresIn = maxAge / 2; // We assume the response is half way to its expiration\n }\n else if (expires) {\n // Used by some apis to tell the response will never expire\n // In this case we let the response expire after 1 hour\n if (expires === '-1') {\n expiresIn = 3600;\n }\n else {\n const expiresDate = new Date(expires);\n // check if the date is valid\n if (expiresDate.toString() !== 'Invalid Date') {\n expiresIn = Math.floor((expiresDate.getTime() - Date.now()) / 1000);\n }\n }\n }\n return expiresIn;\n};\nexport const shouldRetryRequest = (options) => {\n const normalizedOptions = options instanceof HttpErrorResponse ? { retryCount: 0, error: options } : options;\n const { retryCount, error } = normalizedOptions;\n const defaultRetryDelay = clamp(1000 + 1000 * retryCount, 1000, 5000);\n const { status, error: detail, headers } = error;\n // Code 0 usually means the internet connection is down. We retry in this case.\n // It could also be a CORS issue but that should not be the case in production.\n // We will retry in this case until the connection is back.\n if (status === 0) {\n return { retry: true, delay: defaultRetryDelay };\n }\n // Don't retry if we already retried 3 times\n if (retryCount > 3) {\n return { retry: false };\n }\n // Don't retry if it's not an http error\n if (!(error instanceof HttpErrorResponse)) {\n return { retry: false };\n }\n // Retry on 5xx errors (except 500 internal server error since those are usually not recoverable)\n if (status >= 501) {\n // Don't retry if a requested page is out of range\n if (isSymfonyPagerfantaOutOfRangeError(detail)) {\n return { retry: false };\n }\n return { retry: true, delay: defaultRetryDelay };\n }\n // Retry on 408 or 425 errors\n if (status === HttpStatusCode.RequestTimeout || status === HttpStatusCode.TooEarly) {\n return { retry: true, delay: defaultRetryDelay };\n }\n // Retry on 429 errors\n if (status === HttpStatusCode.TooManyRequests) {\n const retryAfter = headers.get('retry-after') || headers.get('x-retry-after');\n if (retryAfter) {\n const delay = parseInt(retryAfter) * 1000;\n return { retry: true, delay: Number.isNaN(delay) ? defaultRetryDelay : delay };\n }\n return { retry: true, delay: defaultRetryDelay };\n }\n return { retry: false };\n};\nexport const getQueryFeatureUsage = (options) => {\n const { creator, features, queryConfig, creatorInternals } = options;\n const hasWithArgsFeature = features.some((f) => f.type == \"withArgs\" /* QueryFeatureType.WithArgs */);\n const shouldAutoExecuteMethod = isCreateGqlQueryOptions(options)\n ? shouldAutoExecuteGqlQuery(options.creatorInternals.method)\n : shouldAutoExecuteQuery(options.creatorInternals.method);\n const hasRouteFunction = typeof creatorInternals?.route === 'function' ||\n typeof creator?.route === 'function';\n const shouldAutoExecute = shouldAutoExecuteMethod && !queryConfig.onlyManualExecution;\n if (hasRouteFunction && !hasWithArgsFeature && !queryConfig.silenceMissingWithArgsFeatureError) {\n throw withArgsQueryFeatureMissingButRouteIsFunction();\n }\n if (hasWithArgsFeature && queryConfig.silenceMissingWithArgsFeatureError) {\n throw silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent();\n }\n const featureFnContext = {\n hasWithArgsFeature,\n shouldAutoExecuteMethod,\n shouldAutoExecute,\n hasRouteFunction,\n onlyManualExecution: queryConfig.onlyManualExecution,\n method: isCreateGqlQueryOptions(options)\n ? `GQL ${options.creatorInternals.method}`\n : options.creatorInternals.method,\n };\n return featureFnContext;\n};\nexport const applyQueryFeatures = (features, context) => {\n const featureTypes = new Set();\n for (const feature of features) {\n if (featureTypes.has(feature.type)) {\n throw queryFeatureUsedMultipleTimes(feature.type);\n }\n featureTypes.add(feature.type);\n feature.fn(context);\n }\n};\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const maybeExecute = (options) => {\n if (options.flags.shouldAutoExecute && !options.flags.hasRouteFunction && !options.flags.hasWithArgsFeature) {\n options.execute();\n }\n};\nexport const createQueryObject = (options) => {\n const { state, execute, deps } = options;\n const destroy = () => deps.injector.destroy();\n const setResponse = (response) => state.response.set(response);\n const createSnapshot = createQuerySnapshotFn({ state, deps, execute });\n const asReadonly = () => {\n const roQuery = {\n args: state.args.asReadonly(),\n response: state.response.asReadonly(),\n latestHttpEvent: state.latestHttpEvent.asReadonly(),\n loading: state.loading.asReadonly(),\n error: state.error.asReadonly(),\n lastTimeExecutedAt: state.lastTimeExecutedAt.asReadonly(),\n id: normalizeQueryRepositoryKey(execute.currentRepositoryKey),\n createSnapshot,\n executionState: state.executionState,\n };\n return roQuery;\n };\n const query = {\n execute,\n args: state.args.asReadonly(),\n response: state.response.asReadonly(),\n latestHttpEvent: state.latestHttpEvent.asReadonly(),\n loading: state.loading.asReadonly(),\n error: state.error.asReadonly(),\n lastTimeExecutedAt: state.lastTimeExecutedAt.asReadonly(),\n id: normalizeQueryRepositoryKey(execute.currentRepositoryKey),\n createSnapshot,\n reset: execute.reset,\n asReadonly,\n executionState: state.executionState,\n subtle: {\n destroy,\n setResponse,\n request: state.subtle.request.asReadonly(),\n destroyRef: deps.scopeDestroyRef,\n injector: deps.injector,\n },\n };\n return query;\n};\nexport const normalizeQueryRepositoryKey = (key) => computed(() => {\n const k = key();\n if (k === false) {\n // false means the query cannot be cached and thus it is not stored in the repository\n // We generate a random id in this case to avoid confusion\n return crypto.randomUUID();\n }\n return k;\n});\nexport const shouldCacheQuery = (method) => {\n return method === 'GET' || method === 'OPTIONS' || method === 'HEAD';\n};\nexport const buildQueryCacheKey = (route, args) => {\n // We need to hash the body in case it's a gql query and the query get's transported in the body\n const body = JSON.stringify(args?.body || {})\n // replace all curly braces with empty string\n .replace(/{|}/g, '')\n // replace new lines and whitespaces with empty string\n .replace(/\\s/g, '');\n const seed = `${route}_${body}`;\n let hash = 0;\n for (const char of seed) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;\n }\n // Force positive number hash.\n // 2147483647 = equivalent of Integer.MAX_VALUE.\n hash += 2147483647 + 1;\n return hash.toString();\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvcXVlcnktdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFlLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxRQUFRLEVBQXVCLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQXlCLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFLbEYsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qix3REFBd0QsRUFDeEQsNkNBQTZDLEdBQzlDLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHekQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFHM0QsZ0VBQWdFO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEVBQWMsRUFBRSxPQUE2QixFQUFFLEVBQUU7SUFDNUUsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztJQUUzQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV4QixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ3RCLEVBQUUsRUFBRSxDQUFDO0lBQ1AsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRVosaUJBQWlCLENBQUMs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QUE4QjtJQUM5QixnREFBZ0Q7SUFDaEQsSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFFdkIsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDekIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzLCBIdHRwU3RhdHVzQ29kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGNvbXB1dGVkLCBDcmVhdGVFZmZlY3RPcHRpb25zLCBlZmZlY3QsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0QWN0aXZlQ29uc3VtZXIsIHNldEFjdGl2ZUNvbnN1bWVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9wcmltaXRpdmVzL3NpZ25hbHMnO1xuaW1wb3J0IHsgY2xhbXAgfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IGlzU3ltZm9ueVBhZ2VyZmFudGFPdXRPZlJhbmdlRXJyb3IgfSBmcm9tICcuLi8uLi9zeW1mb255JztcbmltcG9ydCB7IENyZWF0ZUdxbFF1ZXJ5T3B0aW9ucywgaXNDcmVhdGVHcWxRdWVyeU9wdGlvbnMgfSBmcm9tICcuLi9ncWwvZ3FsLXF1ZXJ5JztcbmltcG9ydCB7IENyZWF0ZUdxbFF1ZXJ5Q3JlYXRvck9wdGlvbnMsIEdxbFF1ZXJ5TWV0aG9kIH0gZnJvbSAnLi4vZ3FsL2dxbC1xdWVyeS1jcmVhdG9yJztcbmltcG9ydCB7IENyZWF0ZVF1ZXJ5T3B0aW9ucywgUXVlcnksIFF1ZXJ5QXJncywgUmVhZG9ubHlRdWVyeSwgUmVxdWVzdEFyZ3MsIFJlc3BvbnNlVHlwZSB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgSW50ZXJuYWxDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zLCBRdWVyeU1ldGhvZCB9IGZyb20gJy4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBRdWVyeURlcGVuZGVuY2llcyB9IGZyb20gJy4vcXVlcnktZGVwZW5kZW5jaWVzJztcbmltcG9ydCB7XG4gIHF1ZXJ5RmVhdHVyZVVzZWRNdWx0aXBsZVRpbWVzLFxuICBzaWxlbmNlTWlzc2luZ1dpdGhBcmdzRmVhdHVyZUVycm9yVXNlZEJ1dFdpdGhBcmdzUHJlc2VudCxcbiAgd2l0aEFyZ3NRdWVyeUZlYXR1cmVNaXNzaW5nQnV0Um91dGVJc0Z1bmN0aW9uLFxufSBmcm9tICcuL3F1ZXJ5LWVycm9ycyc7XG5pbXBvcnQgeyBJbnRlcm5hbFF1ZXJ5RXhlY3V0ZSB9IGZyb20gJy4vcXVlcnktZXhlY3V0ZSc7XG5pbXBvcnQgeyBRdWVyeUZlYXR1cmUsIFF1ZXJ5RmVhdHVyZUNvbnRleHQsIFF1ZXJ5RmVhdHVyZVR5cGUgfSBmcm9tICcuL3F1ZXJ5LWZlYXR1cmVzJztcbmltcG9ydCB7IFF1ZXJ5S2V5T3JOb25lIH0gZnJvbSAnLi9xdWVyeS1yZXBvc2l0b3J5JztcbmltcG9ydCB7IGNyZWF0ZVF1ZXJ5U25hcHNob3RGbiB9IGZyb20gJy4vcXVlcnktc25hcHNob3QnO1xuaW1wb3J0IHsgUXVlcnlTdGF0ZSB9IGZyb20gJy4vcXVlcnktc3RhdGUnO1xuXG4vKipcbiAqIFJldHVybmluZyB0aGlzIGluc2lkZSBhIHdpdGhBcmdzIGZlYXR1cmUgd2lsbCByZXNldCB0aGUgcXVlcnkgYXJncyB0byBudWxsLlxuICogVGhpcyB3aWxsIGFsc28gcGF1c2UgcG9sbGluZyBhbmQgYXV0byByZWZyZXNoIHVudGlsIG5ldyBhcmdzIGFyZSBzZXQuXG4gKi9cbmV4cG9ydCBjb25zdCBDTEVBUl9RVUVSWV9BUkdTID0gU3ltYm9sKCdDTEVBUl9RVUVSWV9BUkdTJyk7XG5leHBvcnQgdHlwZSBDbGVhclF1ZXJ5QXJncyA9IHR5cGVvZiBDTEVBUl9RVUVSWV9BUkdTO1xuXG4vKiogQSBhbmd1bGFyIGVmZmVjdCB0aGF0IGNhbiBiZSBuZXN0ZWQgaW5zaWRlIGFub3RoZXIgZWZmZWN0ICovXG5leHBvcnQgY29uc3QgbmVzdGVkRWZmZWN0ID0gKGZuOiAoKSA9PiB2b2lkLCBvcHRpb25zPzogQ3JlYXRlRWZmZWN0T3B0aW9ucykgPT4ge1xuICBjb25zdCBhY3RpdmVDb25zdW1lciA9IGdldEFjdGl2ZUNvbnN1bWVyKCk7XG5cbiAgc2V0QWN0aXZlQ29uc3VtZXIobnVsbCk7XG5cbiAgY29uc3QgZWZmID0gZWZmZWN0KCgpID0+IHtcbiAgICBmbigpO1xuICB9LCBvcHRpb25zKTtcblxuICBzZXRBY3RpdmVDb25zdW1lcihhY3RpdmVDb25zdW1lcik7XG5cbiAgcmV0dXJuIGVmZjtcbn07XG5cbmNvbnN0IENJUkNVTEFSX1FVRVJZX0RFUEVOREVOQ1lfRVJST1JfTUVTU0FHRSA9XG4gICdRdWVyeSB3YXMgZXhlY3V0ZWQgbW9yZSB0aGFuIDUgdGltZXMgaW4gbGVzcyB0aGFuIDEwMG1zLiBUaGlzIGlzIHVzdWFsbHkgYSBzaWduIG9mIGEgY2lyY3VsYXIgZGVwZW5kZW5jeS4nO1xuXG5leHBvcnQgY29uc3QgY2lyY3VsYXJRdWVyeURlcGVuZGVuY3lDaGVja2VyID0gKCkgPT4ge1xuICBsZXQgbGFzdFRyaWdnZXJUcyA9IDA7XG4gIGxldCBpbGxlZ2FsV3JpdGVzID0gMDtcblxuICAvLyBUeXBpbmcgdGhpcyBhcyBudW1iZXIgd2lsbCB0aHJvdyBhbiB0eXBlIGVycm9yIGR1cmluZyB0ZXN0aW5nIHNpbmNlIGl0IGlzIG9mIHR5cGUgVGltZW91dCBpbiBhIG5vZGUgZW52LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBsZXQgdGltZW91dDogYW55ID0gbnVsbDtcblxuICBjb25zdCBjaGVjayA9ICgpID0+IHtcbiAgICBjb25zdCBub3cgPSBwZXJmb3JtYW5jZS5ub3coKTtcblxuICAgIGlmIChub3cgLSBsYXN0VHJpZ2dlclRzIDwgMTAwKSB7XG4gICAgICBpbGxlZ2FsV3JpdGVzKys7XG5cbiAgICAgIGlmIChpbGxlZ2FsV3JpdGVzID4gNSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoQ0lSQ1VMQVJfUVVFUllfREVQRU5ERU5DWV9FUlJPUl9NRVNTQUdFKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0VHJpZ2dlclRzID0gbm93O1xuXG4gICAgaWYgKHRpbWVvdXQpIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblxuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlsbGVnYWxXcml0ZXMgPSAwO1xuICAgIH0sIDEwMCk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjaGVjayxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaG91bGRBdXRvRXhlY3V0ZVF1ZXJ5ID0gKG1ldGhvZDogUXVlcnlNZXRob2QpID0+IHtcbiAgcmV0dXJuIG1ldGhvZCA9PT0gJ0dFVCcgfHwgbWV0aG9kID09PSAnSEVBRCcgfHwgbWV0aG9kID09PSAnT1BUSU9OUyc7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkQXV0b0V4ZWN1dGVHcWxRdWVyeSA9IChtZXRob2Q6IEdxbFF1ZXJ5TWV0aG9kKSA9PiB7XG4gIHJldHVybiBtZXRob2QgPT09ICdRVUVSWSc7XG59O1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdEV4cGlyZXNJblNlY29uZHMgPSAoaGVhZGVyczogSHR0cEhlYWRlcnMpID0+IHtcbiAgY29uc3QgY2FjaGVDb250cm9sID0gaGVhZGVycy5nZXQoJ2NhY2hlLWNvbnRyb2wnKTtcbiAgY29uc3QgYWdlID0gaGVhZGVycy5nZXQoJ2FnZScpO1xuICBjb25zdCBleHBpcmVzID0gaGVhZGVycy5nZXQoJ2V4cGlyZXMnKTtcblxuICAvLyBJbiBzZWNvbmRzXG4gIGxldCBleHBpcmVzSW46IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBsZXQgbWF4QWdlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBpZiAoY2FjaGVDb250cm9sPy5pbmNsdWRlcygnbm8tY2FjaGUnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNhY2hlQ29udHJvbD8uaW5jbHVkZXMoJ21heC1hZ2UnKSkge1xuICAgIGNvbnN0IG0gPSBjYWNoZUNvbnRyb2wuc3BsaXQoJ21heC1hZ2U9JylbMV07XG5cbiAgICBpZiAobSkge1xuICAgICAgbWF4QWdlID0gcGFyc2VJbnQobSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNhY2hlQ29udHJvbD8uaW5jbHVkZXMoJ3MtbWF4YWdlJykpIHtcbiAgICBjb25zdCBtID0gY2FjaGVDb250cm9sLnNwbGl0KCdzLW1heGFnZT0nKVsxXTtcblxuICAgIGlmIChtKSB7XG4gICAgICBtYXhBZ2UgPSBwYXJzZUludChtKTtcbiAgICB9XG4gIH1cblxuICBpZiAobWF4QWdlICYmIGFnZSkge1xuICAgIGNvbnN0IGFnZVNlY29uZHMgPSBwYXJzZUludChhZ2UpO1xuXG4gICAgZXhwaXJlc0luID0gbWF4QWdlIC0gYWdlU2Vjb25kcztcbiAgfSBlbHNlIGlmIChtYXhBZ2UpIHtcbiAgICBleHBpcmVzSW4gPSBtYXhBZ2UgLyAyOyAvLyBXZSBhc3N1bWUgdGhlIHJlc3BvbnNlIGlzIGhhbGYgd2F5IHRvIGl0cyBleHBpcmF0aW9uXG4gIH0gZWxzZSBpZiAoZXhwaXJlcykge1xuICAgIC8vIFVzZWQgYnkgc29tZSBhcGlzIHRvIHRlbGwgdGhlIHJlc3BvbnNlIHdpbGwgbmV2ZXIgZXhwaXJlXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGxldCB0aGUgcmVzcG9uc2UgZXhwaXJlIGFmdGVyIDEgaG91clxuICAgIGlmIChleHBpcmVzID09PSAnLTEnKSB7XG4gICAgICBleHBpcmVzSW4gPSAzNjAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBleHBpcmVzRGF0ZSA9IG5ldyBEYXRlKGV4cGlyZXMpO1xuXG4gICAgICAvLyBjaGVjayBpZiB0aGUgZGF0ZSBpcyB2YWxpZFxuICAgICAgaWYgKGV4cGlyZXNEYXRlLnRvU3RyaW5nKCkgIT09ICdJbnZhbGlkIERhdGUnKSB7XG4gICAgICAgIGV4cGlyZXNJbiA9IE1hdGguZmxvb3IoKGV4cGlyZXNEYXRlLmdldFRpbWUoKSAtIERhdGUubm93KCkpIC8gMTAwMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cGlyZXNJbjtcbn07XG5cbmV4cG9ydCB0eXBlIFNob3VsZFJldHJ5UmVxdWVzdE9wdGlvbnMgPSB7XG4gIHJldHJ5Q291bnQ6IG51bWJlcjtcbiAgZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlO1xufTtcblxuZXhwb3J0IHR5cGUgU2hvdWxkUmV0cnlSZXF1ZXN0UmVzdWx0ID1cbiAgfCB7XG4gICAgICByZXRyeTogZmFsc2U7XG4gICAgfVxuICB8IHtcbiAgICAgIHJldHJ5OiB0cnVlO1xuICAgICAgZGVsYXk6IG51bWJlcjtcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBTaG91bGRSZXRyeVJlcXVlc3RGbiA9IChvcHRpb25zOiBTaG91bGRSZXRyeVJlcXVlc3RPcHRpb25zKSA9PiBTaG91bGRSZXRyeVJlcXVlc3RSZXN1bHQ7XG5cbmV4cG9ydCBjb25zdCBzaG91bGRSZXRyeVJlcXVlc3QgPSAoXG4gIG9wdGlvbnM6IFNob3VsZFJldHJ5UmVxdWVzdE9wdGlvbnMgfCBIdHRwRXJyb3JSZXNwb25zZSxcbik6IFNob3VsZFJldHJ5UmVxdWVzdFJlc3VsdCA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRPcHRpb25zID1cbiAgICBvcHRpb25zIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgPyB7IHJldHJ5Q291bnQ6IDAsIGVycm9yOiBvcHRpb25zIH0gOiAob3B0aW9ucyBhcyBTaG91bGRSZXRyeVJlcXVlc3RPcHRpb25zKTtcbiAgY29uc3QgeyByZXRyeUNvdW50LCBlcnJvciB9ID0gbm9ybWFsaXplZE9wdGlvbnM7XG4gIGNvbnN0IGRlZmF1bHRSZXRyeURlbGF5ID0gY2xhbXAoMTAwMCArIDEwMDAgKiByZXRyeUNvdW50LCAxMDAwLCA1MDAwKTtcbiAgY29uc3QgeyBzdGF0dXMsIGVycm9yOiBkZXRhaWwsIGhlYWRlcnMgfSA9IGVycm9yO1xuXG4gIC8vIENvZGUgMCB1c3VhbGx5IG1lYW5zIHRoZSBpbnRlcm5ldCBjb25uZWN0aW9uIGlzIGRvd24uIFdlIHJldHJ5IGluIHRoaXMgY2FzZS5cbiAgLy8gSXQgY291bGQgYWxzbyBiZSBhIENPUlMgaXNzdWUgYnV0IHRoYXQgc2hvdWxkIG5vdCBiZSB0aGUgY2FzZSBpbiBwcm9kdWN0aW9uLlxuICAvLyBXZSB3aWxsIHJldHJ5IGluIHRoaXMgY2FzZSB1bnRpbCB0aGUgY29ubmVjdGlvbiBpcyBiYWNrLlxuICBpZiAoc3RhdHVzID09PSAwKSB7XG4gICAgcmV0dXJuIHsgcmV0cnk6IHRydWUsIGRlbGF5OiBkZWZhdWx0UmV0cnlEZWxheSB9O1xuICB9XG5cbiAgLy8gRG9uJ3QgcmV0cnkgaWYgd2UgYWxyZWFkeSByZXRyaWVkIDMgdGltZXNcbiAgaWYgKHJldHJ5Q291bnQgPiAzKSB7XG4gICAgcmV0dXJuIHsgcmV0cnk6IGZhbHNlIH07XG4gIH1cblxuICAvLyBEb24ndCByZXRyeSBpZiBpdCdzIG5vdCBhbiBodHRwIGVycm9yXG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpKSB7XG4gICAgcmV0dXJuIHsgcmV0cnk6IGZhbHNlIH07XG4gIH1cblxuICAvLyBSZXRyeSBvbiA1eHggZXJyb3JzIChleGNlcHQgNTAwIGludGVybmFsIHNlcnZlciBlcnJvciBzaW5jZSB0aG9zZSBhcmUgdXN1YWxseSBub3QgcmVjb3ZlcmFibGUpXG4gIGlmIChzdGF0dXMgPj0gNTAxKSB7XG4gICAgLy8gRG9uJ3QgcmV0cnkgaWYgYSByZXF1ZXN0ZWQgcGFnZSBpcyBvdXQgb2YgcmFuZ2VcbiAgICBpZiAoaXNTeW1mb255UGFnZXJmYW50YU91dE9mUmFuZ2VFcnJvcihkZXRhaWwpKSB7XG4gICAgICByZXR1cm4geyByZXRyeTogZmFsc2UgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyByZXRyeTogdHJ1ZSwgZGVsYXk6IGRlZmF1bHRSZXRyeURlbGF5IH07XG4gIH1cblxuICAvLyBSZXRyeSBvbiA0MDggb3IgNDI1IGVycm9yc1xuICBpZiAoc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5SZXF1ZXN0VGltZW91dCB8fCBzdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLlRvb0Vhcmx5KSB7XG4gICAgcmV0dXJuIHsgcmV0cnk6IHRydWUsIGRlbGF5OiBkZWZhdWx0UmV0cnlEZWxheSB9O1xuICB9XG5cbiAgLy8gUmV0cnkgb24gNDI5IGVycm9yc1xuICBpZiAoc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5Ub29NYW55UmVxdWVzdHMpIHtcbiAgICBjb25zdCByZXRyeUFmdGVyID0gaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJykgfHwgaGVhZGVycy5nZXQoJ3gtcmV0cnktYWZ0ZXInKTtcblxuICAgIGlmIChyZXRyeUFmdGVyKSB7XG4gICAgICBjb25zdCBkZWxheSA9IHBhcnNlSW50KHJldHJ5QWZ0ZXIpICogMTAwMDtcbiAgICAgIHJldHVybiB7IHJldHJ5OiB0cnVlLCBkZWxheTogTnVtYmVyLmlzTmFOKGRlbGF5KSA/IGRlZmF1bHRSZXRyeURlbGF5IDogZGVsYXkgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyByZXRyeTogdHJ1ZSwgZGVsYXk6IGRlZmF1bHRSZXRyeURlbGF5IH07XG4gIH1cblxuICByZXR1cm4geyByZXRyeTogZmFsc2UgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5RmVhdHVyZUZsYWdzID0ge1xuICBoYXNXaXRoQXJnc0ZlYXR1cmU6IGJvb2xlYW47XG4gIHNob3VsZEF1dG9FeGVjdXRlTWV0aG9kOiBib29sZWFuO1xuICBzaG91bGRBdXRvRXhlY3V0ZTogYm9vbGVhbjtcbiAgaGFzUm91dGVGdW5jdGlvbjogYm9vbGVhbjtcbiAgb25seU1hbnVhbEV4ZWN1dGlvbj86IGJvb2xlYW47XG5cbiAgLyoqIEh1bWFuIHJlYWRhYmxlIG1ldGhvZCBuYW1lICovXG4gIG1ldGhvZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5RmVhdHVyZVVzYWdlID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihcbiAgb3B0aW9uczogQ3JlYXRlUXVlcnlPcHRpb25zPFRBcmdzPiB8IENyZWF0ZUdxbFF1ZXJ5T3B0aW9uczxUQXJncz4sXG4pID0+IHtcbiAgY29uc3QgeyBjcmVhdG9yLCBmZWF0dXJlcywgcXVlcnlDb25maWcsIGNyZWF0b3JJbnRlcm5hbHMgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgaGFzV2l0aEFyZ3NGZWF0dXJlID0gZmVhdHVyZXMuc29tZSgoZikgPT4gZi50eXBlID09IFF1ZXJ5RmVhdHVyZVR5cGUuV2l0aEFyZ3MpO1xuICBjb25zdCBzaG91bGRBdXRvRXhlY3V0ZU1ldGhvZCA9IGlzQ3JlYXRlR3FsUXVlcnlPcHRpb25zKG9wdGlvbnMpXG4gICAgPyBzaG91bGRBdXRvRXhlY3V0ZUdxbFF1ZXJ5KG9wdGlvbnMuY3JlYXRvckludGVybmFscy5tZXRob2QpXG4gICAgOiBzaG91bGRBdXRvRXhlY3V0ZVF1ZXJ5KG9wdGlvbnMuY3JlYXRvckludGVybmFscy5tZXRob2QpO1xuICBjb25zdCBoYXNSb3V0ZUZ1bmN0aW9uID1cbiAgICB0eXBlb2YgKGNyZWF0b3JJbnRlcm5hbHMgYXMgSW50ZXJuYWxDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zPFRBcmdzPik/LnJvdXRlID09PSAnZnVuY3Rpb24nIHx8XG4gICAgdHlwZW9mIChjcmVhdG9yIGFzIENyZWF0ZUdxbFF1ZXJ5Q3JlYXRvck9wdGlvbnM8VEFyZ3M+KT8ucm91dGUgPT09ICdmdW5jdGlvbic7XG4gIGNvbnN0IHNob3VsZEF1dG9FeGVjdXRlID0gc2hvdWxkQXV0b0V4ZWN1dGVNZXRob2QgJiYgIXF1ZXJ5Q29uZmlnLm9ubHlNYW51YWxFeGVjdXRpb247XG5cbiAgaWYgKGhhc1JvdXRlRnVuY3Rpb24gJiYgIWhhc1dpdGhBcmdzRmVhdHVyZSAmJiAhcXVlcnlDb25maWcuc2lsZW5jZU1pc3NpbmdXaXRoQXJnc0ZlYXR1cmVFcnJvcikge1xuICAgIHRocm93IHdpdGhBcmdzUXVlcnlGZWF0dXJlTWlzc2luZ0J1dFJvdXRlSXNGdW5jdGlvbigpO1xuICB9XG5cbiAgaWYgKGhhc1dpdGhBcmdzRmVhdHVyZSAmJiBxdWVyeUNvbmZpZy5zaWxlbmNlTWlzc2luZ1dpdGhBcmdzRmVhdHVyZUVycm9yKSB7XG4gICAgdGhyb3cgc2lsZW5jZU1pc3NpbmdXaXRoQXJnc0ZlYXR1cmVFcnJvclVzZWRCdXRXaXRoQXJnc1ByZXNlbnQoKTtcbiAgfVxuXG4gIGNvbnN0IGZlYXR1cmVGbkNvbnRleHQ6IFF1ZXJ5RmVhdHVyZUZsYWdzID0ge1xuICAgIGhhc1dpdGhBcmdzRmVhdHVyZSxcbiAgICBzaG91bGRBdXRvRXhlY3V0ZU1ldGhvZCxcbiAgICBzaG91bGRBdXRvRXhlY3V0ZSxcbiAgICBoYXNSb3V0ZUZ1bmN0aW9uLFxuICAgIG9ubHlNYW51YWxFeGVjdXRpb246IHF1ZXJ5Q29uZmlnLm9ubHlNYW51YWxFeGVjdXRpb24sXG4gICAgbWV0aG9kOiBpc0NyZWF0ZUdxbFF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuICAgICAgPyBgR1FMICR7b3B0aW9ucy5jcmVhdG9ySW50ZXJuYWxzLm1ldGhvZH1gXG4gICAgICA6IG9wdGlvbnMuY3JlYXRvckludGVybmFscy5tZXRob2QsXG4gIH07XG5cbiAgcmV0dXJuIGZlYXR1cmVGbkNvbnRleHQ7XG59O1xuXG5leHBvcnQgY29uc3QgYXBwbHlRdWVyeUZlYXR1cmVzID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihcbiAgZmVhdHVyZXM6IFF1ZXJ5RmVhdHVyZTxUQXJncz5bXSxcbiAgY29udGV4dDogUXVlcnlGZWF0dXJlQ29udGV4dDxUQXJncz4sXG4pID0+IHtcbiAgY29uc3QgZmVhdHVyZVR5cGVzID0gbmV3IFNldDxRdWVyeUZlYXR1cmVUeXBlPigpO1xuXG4gIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlcykge1xuICAgIGlmIChmZWF0dXJlVHlwZXMuaGFzKGZlYXR1cmUudHlwZSkpIHtcbiAgICAgIHRocm93IHF1ZXJ5RmVhdHVyZVVzZWRNdWx0aXBsZVRpbWVzKGZlYXR1cmUudHlwZSk7XG4gICAgfVxuXG4gICAgZmVhdHVyZVR5cGVzLmFkZChmZWF0dXJlLnR5cGUpO1xuICAgIGZlYXR1cmUuZm4oY29udGV4dCk7XG4gIH1cbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgY29uc3QgbWF5YmVFeGVjdXRlID0gKG9wdGlvbnM6IHsgZmxhZ3M6IFF1ZXJ5RmVhdHVyZUZsYWdzOyBleGVjdXRlOiBJbnRlcm5hbFF1ZXJ5RXhlY3V0ZTxhbnk+IH0pID0+IHtcbiAgaWYgKG9wdGlvbnMuZmxhZ3Muc2hvdWxkQXV0b0V4ZWN1dGUgJiYgIW9wdGlvbnMuZmxhZ3MuaGFzUm91dGVGdW5jdGlvbiAmJiAhb3B0aW9ucy5mbGFncy5oYXNXaXRoQXJnc0ZlYXR1cmUpIHtcbiAgICBvcHRpb25zLmV4ZWN1dGUoKTtcbiAgfVxufTtcblxuZXhwb3J0IHR5cGUgQ3JlYXRlUXVlcnlPYmplY3RPcHRpb25zPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IHtcbiAgc3RhdGU6IFF1ZXJ5U3RhdGU8VEFyZ3M+O1xuICBkZXBzOiBRdWVyeURlcGVuZGVuY2llcztcbiAgZXhlY3V0ZTogSW50ZXJuYWxRdWVyeUV4ZWN1dGU8VEFyZ3M+O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVF1ZXJ5T2JqZWN0ID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihvcHRpb25zOiBDcmVhdGVRdWVyeU9iamVjdE9wdGlvbnM8VEFyZ3M+KSA9PiB7XG4gIGNvbnN0IHsgc3RhdGUsIGV4ZWN1dGUsIGRlcHMgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgZGVzdHJveSA9ICgpID0+IGRlcHMuaW5qZWN0b3IuZGVzdHJveSgpO1xuICBjb25zdCBzZXRSZXNwb25zZSA9IChyZXNwb25zZTogUmVzcG9uc2VUeXBlPFRBcmdzPikgPT4gc3RhdGUucmVzcG9uc2Uuc2V0KHJlc3BvbnNlKTtcbiAgY29uc3QgY3JlYXRlU25hcHNob3QgPSBjcmVhdGVRdWVyeVNuYXBzaG90Rm4oeyBzdGF0ZSwgZGVwcywgZXhlY3V0ZSB9KTtcblxuICBjb25zdCBhc1JlYWRvbmx5ID0gKCkgPT4ge1xuICAgIGNvbnN0IHJvUXVlcnk6IFJlYWRvbmx5UXVlcnk8VEFyZ3M+ID0ge1xuICAgICAgYXJnczogc3RhdGUuYXJncy5hc1JlYWRvbmx5KCksXG4gICAgICByZXNwb25zZTogc3RhdGUucmVzcG9uc2UuYXNSZWFkb25seSgpLFxuICAgICAgbGF0ZXN0SHR0cEV2ZW50OiBzdGF0ZS5sYXRlc3RIdHRwRXZlbnQuYXNSZWFkb25seSgpLFxuICAgICAgbG9hZGluZzogc3RhdGUubG9hZGluZy5hc1JlYWRvbmx5KCksXG4gICAgICBlcnJvcjogc3RhdGUuZXJyb3IuYXNSZWFkb25seSgpLFxuICAgICAgbGFzdFRpbWVFeGVjdXRlZEF0OiBzdGF0ZS5sYXN0VGltZUV4ZWN1dGVkQXQuYXNSZWFkb25seSgpLFxuICAgICAgaWQ6IG5vcm1hbGl6ZVF1ZXJ5UmVwb3NpdG9yeUtleShleGVjdXRlLmN1cnJlbnRSZXBvc2l0b3J5S2V5KSxcbiAgICAgIGNyZWF0ZVNuYXBzaG90LFxuICAgICAgZXhlY3V0aW9uU3RhdGU6IHN0YXRlLmV4ZWN1dGlvblN0YXRlLFxuICAgIH07XG5cbiAgICByZXR1cm4gcm9RdWVyeTtcbiAgfTtcblxuICBjb25zdCBxdWVyeTogUXVlcnk8VEFyZ3M+ID0ge1xuICAgIGV4ZWN1dGUsXG4gICAgYXJnczogc3RhdGUuYXJncy5hc1JlYWRvbmx5KCksXG4gICAgcmVzcG9uc2U6IHN0YXRlLnJlc3BvbnNlLmFzUmVhZG9ubHkoKSxcbiAgICBsYXRlc3RIdHRwRXZlbnQ6IHN0YXRlLmxhdGVzdEh0dHBFdmVudC5hc1JlYWRvbmx5KCksXG4gICAgbG9hZGluZzogc3RhdGUubG9hZGluZy5hc1JlYWRvbmx5KCksXG4gICAgZXJyb3I6IHN0YXRlLmVycm9yLmFzUmVhZG9ubHkoKSxcbiAgICBsYXN0VGltZUV4ZWN1dGVkQXQ6IHN0YXRlLmxhc3RUaW1lRXhlY3V0ZWRBdC5hc1JlYWRvbmx5KCksXG4gICAgaWQ6IG5vcm1hbGl6ZVF1ZXJ5UmVwb3NpdG9yeUtleShleGVjdXRlLmN1cnJlbnRSZXBvc2l0b3J5S2V5KSxcbiAgICBjcmVhdGVTbmFwc2hvdCxcbiAgICByZXNldDogZXhlY3V0ZS5yZXNldCxcbiAgICBhc1JlYWRvbmx5LFxuICAgIGV4ZWN1dGlvblN0YXRlOiBzdGF0ZS5leGVjdXRpb25TdGF0ZSxcbiAgICBzdWJ0bGU6IHtcbiAgICAgIGRlc3Ryb3ksXG4gICAgICBzZXRSZXNwb25zZSxcbiAgICAgIHJlcXVlc3Q6IHN0YXRlLnN1YnRsZS5yZXF1ZXN0LmFzUmVhZG9ubHkoKSxcbiAgICAgIGRlc3Ryb3lSZWY6IGRlcHMuc2NvcGVEZXN0cm95UmVmLFxuICAgICAgaW5qZWN0b3I6IGRlcHMuaW5qZWN0b3IsXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gcXVlcnk7XG59O1xuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplUXVlcnlSZXBvc2l0b3J5S2V5ID0gKGtleTogU2lnbmFsPFF1ZXJ5S2V5T3JOb25lPikgPT5cbiAgY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGsgPSBrZXkoKTtcblxuICAgIGlmIChrID09PSBmYWxzZSkge1xuICAgICAgLy8gZmFsc2UgbWVhbnMgdGhlIHF1ZXJ5IGNhbm5vdCBiZSBjYWNoZWQgYW5kIHRodXMgaXQgaXMgbm90IHN0b3JlZCBpbiB0aGUgcmVwb3NpdG9yeVxuICAgICAgLy8gV2UgZ2VuZXJhdGUgYSByYW5kb20gaWQgaW4gdGhpcyBjYXNlIHRvIGF2b2lkIGNvbmZ1c2lvblxuICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGs7XG4gIH0pO1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkQ2FjaGVRdWVyeSA9IChtZXRob2Q6IFF1ZXJ5TWV0aG9kKSA9PiB7XG4gIHJldHVybiBtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ09QVElPTlMnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkUXVlcnlDYWNoZUtleSA9IChyb3V0ZTogc3RyaW5nLCBhcmdzOiBSZXF1ZXN0QXJnczxRdWVyeUFyZ3M+IHwgdW5kZWZpbmVkKSA9PiB7XG4gIC8vIFdlIG5lZWQgdG8gaGFzaCB0aGUgYm9keSBpbiBjYXNlIGl0J3MgYSBncWwgcXVlcnkgYW5kIHRoZSBxdWVyeSBnZXQncyB0cmFuc3BvcnRlZCBpbiB0aGUgYm9keVxuICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkoYXJncz8uYm9keSB8fCB7fSlcbiAgICAvLyByZXBsYWNlIGFsbCBjdXJseSBicmFjZXMgd2l0aCBlbXB0eSBzdHJpbmdcbiAgICAucmVwbGFjZSgve3x9L2csICcnKVxuICAgIC8vIHJlcGxhY2UgbmV3IGxpbmVzIGFuZCB3aGl0ZXNwYWNlcyB3aXRoIGVtcHR5IHN0cmluZ1xuICAgIC5yZXBsYWNlKC9cXHMvZywgJycpO1xuXG4gIGNvbnN0IHNlZWQgPSBgJHtyb3V0ZX1fJHtib2R5fWA7XG5cbiAgbGV0IGhhc2ggPSAwO1xuXG4gIGZvciAoY29uc3QgY2hhciBvZiBzZWVkKSB7XG4gICAgaGFzaCA9IChNYXRoLmltdWwoMzEsIGhhc2gpICsgY2hhci5jaGFyQ29kZUF0KDApKSA8PCAwO1xuICB9XG5cbiAgLy8gRm9yY2UgcG9zaXRpdmUgbnVtYmVyIGhhc2guXG4gIC8vIDIxNDc0ODM2NDcgPSBlcXVpdmFsZW50IG9mIEludGVnZXIuTUFYX1ZBTFVFLlxuICBoYXNoICs9IDIxNDc0ODM2NDcgKyAxO1xuXG4gIHJldHVybiBoYXNoLnRvU3RyaW5nKCk7XG59O1xuIl19","import { HttpErrorResponse } from '@angular/common/http';\nimport { isClassValidatorError } from '../../class-validator';\nimport { isSymfonyFormViolationListError, isSymfonyListError } from '../../symfony';\nimport { shouldRetryRequest } from './query-utils';\nexport const createQueryErrorResponse = (error) => {\n let err = error instanceof HttpErrorResponse ? error : null;\n if (!err) {\n err = new HttpErrorResponse({\n error: error,\n status: 0,\n statusText: 'Unknown Error',\n });\n }\n const retryState = shouldRetryRequest(err);\n const detail = err.error;\n const errorList = [];\n if (isClassValidatorError(detail)) {\n for (const error of detail.message) {\n errorList.push({ message: error });\n }\n }\n else if (isSymfonyFormViolationListError(detail)) {\n for (const violation of detail.violations) {\n errorList.push({ message: violation.message });\n }\n }\n else if (isSymfonyListError(detail)) {\n for (const error of detail) {\n errorList.push({ message: error.message });\n }\n }\n else if (typeof detail === 'object' && !!detail && 'message' in detail && typeof detail.message === 'string') {\n errorList.push({ message: detail.message });\n }\n else if (typeof detail === 'object' && !!detail && 'detail' in detail && typeof detail.detail === 'string') {\n // Symfony error response (during development)\n errorList.push({ message: detail.detail });\n }\n else if (typeof detail === 'string') {\n errorList.push({ message: detail });\n }\n else if (Array.isArray(detail) && detail.length > 0 && typeof detail[0] === 'string') {\n for (const error of detail) {\n errorList.push({ message: error });\n }\n }\n if (errorList.length > 1) {\n return {\n isList: true,\n errors: errorList,\n raw: err,\n retryState,\n code: err.status,\n };\n }\n else {\n const singleError = errorList[0] ?? { message: err.message };\n return {\n isList: false,\n error: singleError,\n raw: err,\n retryState,\n code: err.status,\n };\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZXJyb3ItcmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvcXVlcnktZXJyb3ItcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFrQixNQUFNLHNCQUFzQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUsa0JBQWtCLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBc0I3RSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEtBQWMsRUFBc0IsRUFBRTtJQUM3RSxJQUFJLEdBQUcsR0FBRyxLQUFLLFlBQVksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBRTVELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULEdBQUcsR0FBRyxJQUFJLGlCQUFpQixDQUFDO1lBQzFCLEtBQUssRUFBRSxLQUFLO1lBQ1osTUFBTSxFQUFFLENBQUM7WUFDVCxVQUFVLEVBQUUsZUFBZTtTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFM0MsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztJQUN6QixNQUFNLFNBQVMsR0FBNkIsRUFBRSxDQUFDO0lBRS9DLElBQUkscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNsQyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7U0FBTSxJQUFJLCtCQUErQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDbkQsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDMUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztTQUFNLElBQUksa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7U0FBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLFNBQVMsSUFBSSxNQUFNLElBQUksT0FBTyxNQUFNLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9HLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztTQUFNLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksUUFBUSxJQUFJLE1BQU0sSUFBSSxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0csOENBQThDO1FBQzlDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztTQUFNLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdEMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdkYsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTztZQUNMLE1BQU0sRUFBRSxJQUFJO1lBQ1osTUFBTSxFQUFFLFNBQVM7WUFDakIsR0FBRyxFQUFFLEdBQUc7WUFDUixVQUFVO1lBQ1YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1NBQ2pCLENBQUM7SUFDSixDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFN0QsT0FBTztZQUNMLE1BQU0sRUFBRSxLQUFLO1lBQ2IsS0FBSyxFQUFFLFdBQVc7WUFDbEIsR0FBRyxFQUFFLEdBQUc7WUFDUixVQUFVO1lBQ1YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1NBQ2pCLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBTdGF0dXNDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaXNDbGFzc1ZhbGlkYXRvckVycm9yIH0gZnJvbSAnLi4vLi4vY2xhc3MtdmFsaWRhdG9yJztcbmltcG9ydCB7IGlzU3ltZm9ueUZvcm1WaW9sYXRpb25MaXN0RXJyb3IsIGlzU3ltZm9ueUxpc3RFcnJvciB9IGZyb20gJy4uLy4uL3N5bWZvbnknO1xuaW1wb3J0IHsgc2hvdWxkUmV0cnlSZXF1ZXN0LCBTaG91bGRSZXRyeVJlcXVlc3RSZXN1bHQgfSBmcm9tICcuL3F1ZXJ5LXV0aWxzJztcblxuZXhwb3J0IHR5cGUgUXVlcnlFcnJvclJlc3BvbnNlTGlzdCA9IHtcbiAgaXNMaXN0OiB0cnVlO1xuICBlcnJvcnM6IFF1ZXJ5RXJyb3JSZXNwb25zZUl0ZW1bXTtcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5RXJyb3JSZXNwb25zZVNpbmdsZSA9IHtcbiAgaXNMaXN0OiBmYWxzZTtcbiAgZXJyb3I6IFF1ZXJ5RXJyb3JSZXNwb25zZUl0ZW07XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeUVycm9yUmVzcG9uc2UgPSB7XG4gIHJhdzogSHR0cEVycm9yUmVzcG9uc2U7XG4gIHJldHJ5U3RhdGU6IFNob3VsZFJldHJ5UmVxdWVzdFJlc3VsdDtcbiAgY29kZTogSHR0cFN0YXR1c0NvZGU7XG59ICYgKFF1ZXJ5RXJyb3JSZXNwb25zZUxpc3QgfCBRdWVyeUVycm9yUmVzcG9uc2VTaW5nbGUpO1xuXG5leHBvcnQgdHlwZSBRdWVyeUVycm9yUmVzcG9uc2VJdGVtID0ge1xuICBtZXNzYWdlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUXVlcnlFcnJvclJlc3BvbnNlID0gKGVycm9yOiB1bmtub3duKTogUXVlcnlFcnJvclJlc3BvbnNlID0+IHtcbiAgbGV0IGVyciA9IGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgPyBlcnJvciA6IG51bGw7XG5cbiAgaWYgKCFlcnIpIHtcbiAgICBlcnIgPSBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe1xuICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgc3RhdHVzOiAwLFxuICAgICAgc3RhdHVzVGV4dDogJ1Vua25vd24gRXJyb3InLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IHJldHJ5U3RhdGUgPSBzaG91bGRSZXRyeVJlcXVlc3QoZXJyKTtcblxuICBjb25zdCBkZXRhaWwgPSBlcnIuZXJyb3I7XG4gIGNvbnN0IGVycm9yTGlzdDogUXVlcnlFcnJvclJlc3BvbnNlSXRlbVtdID0gW107XG5cbiAgaWYgKGlzQ2xhc3NWYWxpZGF0b3JFcnJvcihkZXRhaWwpKSB7XG4gICAgZm9yIChjb25zdCBlcnJvciBvZiBkZXRhaWwubWVzc2FnZSkge1xuICAgICAgZXJyb3JMaXN0LnB1c2goeyBtZXNzYWdlOiBlcnJvciB9KTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNTeW1mb255Rm9ybVZpb2xhdGlvbkxpc3RFcnJvcihkZXRhaWwpKSB7XG4gICAgZm9yIChjb25zdCB2aW9sYXRpb24gb2YgZGV0YWlsLnZpb2xhdGlvbnMpIHtcbiAgICAgIGVycm9yTGlzdC5wdXNoKHsgbWVzc2FnZTogdmlvbGF0aW9uLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3ltZm9ueUxpc3RFcnJvcihkZXRhaWwpKSB7XG4gICAgZm9yIChjb25zdCBlcnJvciBvZiBkZXRhaWwpIHtcbiAgICAgIGVycm9yTGlzdC5wdXNoKHsgbWVzc2FnZTogZXJyb3IubWVzc2FnZSB9KTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRldGFpbCA9PT0gJ29iamVjdCcgJiYgISFkZXRhaWwgJiYgJ21lc3NhZ2UnIGluIGRldGFpbCAmJiB0eXBlb2YgZGV0YWlsLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgZXJyb3JMaXN0LnB1c2goeyBtZXNzYWdlOiBkZXRhaWwubWVzc2FnZSB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGV0YWlsID09PSAnb2JqZWN0JyAmJiAhIWRldGFpbCAmJiAnZGV0YWlsJyBpbiBkZXRhaWwgJiYgdHlwZW9mIGRldGFpbC5kZXRhaWwgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gU3ltZm9ueSBlcnJvciByZXNwb25zZSAoZHVyaW5nIGRldmVsb3BtZW50KVxuICAgIGVycm9yTGlzdC5wdXNoKHsgbWVzc2FnZTogZGV0YWlsLmRldGFpbCB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGV0YWlsID09PSAnc3RyaW5nJykge1xuICAgIGVycm9yTGlzdC5wdXNoKHsgbWVzc2FnZTogZGV0YWlsIH0pO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGV0YWlsKSAmJiBkZXRhaWwubGVuZ3RoID4gMCAmJiB0eXBlb2YgZGV0YWlsWzBdID09PSAnc3RyaW5nJykge1xuICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZGV0YWlsKSB7XG4gICAgICBlcnJvckxpc3QucHVzaCh7IG1lc3NhZ2U6IGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlcnJvckxpc3QubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xpc3Q6IHRydWUsXG4gICAgICBlcnJvcnM6IGVycm9yTGlzdCxcbiAgICAgIHJhdzogZXJyLFxuICAgICAgcmV0cnlTdGF0ZSxcbiAgICAgIGNvZGU6IGVyci5zdGF0dXMsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzaW5nbGVFcnJvciA9IGVycm9yTGlzdFswXSA/PyB7IG1lc3NhZ2U6IGVyci5tZXNzYWdlIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNMaXN0OiBmYWxzZSxcbiAgICAgIGVycm9yOiBzaW5nbGVFcnJvcixcbiAgICAgIHJhdzogZXJyLFxuICAgICAgcmV0cnlTdGF0ZSxcbiAgICAgIGNvZGU6IGVyci5zdGF0dXMsXG4gICAgfTtcbiAgfVxufTtcbiJdfQ==","import { HttpEventType } from '@angular/common/http';\nimport { computed, signal } from '@angular/core';\nimport { Subscription, catchError, retry, tap, throwError, timer } from 'rxjs';\nimport { buildTimestampFromSeconds } from '../../request';\nimport { createQueryErrorResponse } from './query-error-response';\nimport { extractExpiresInSeconds, shouldRetryRequest, } from './query-utils';\nexport const SPEED_BUFFER_TIME_IN_MS = 2000;\nexport const createHttpRequest = (options) => {\n let currentStreamSubscription = Subscription.EMPTY;\n const { args, clientOptions, dependencies } = options;\n const currentEvent = signal(null);\n const loading = signal(null);\n const error = signal(null);\n const response = signal(null);\n const lastLoadEventTime = signal(0);\n const lastLoadEventAmount = signal(0);\n const lastExecuteTime = signal(0);\n const expiresIn = signal(null);\n const isStale = computed(() => {\n const expiresInTs = expiresIn();\n return expiresInTs === null || expiresInTs < Date.now();\n });\n const stream = dependencies.httpClient\n .request(options.method, options.fullPath, {\n observe: 'events',\n body: args?.body,\n reportProgress: clientOptions?.reportProgress,\n withCredentials: clientOptions?.withCredentials,\n transferCache: clientOptions?.transferCache,\n responseType: clientOptions?.responseType || 'json',\n context: clientOptions?.context,\n headers: args?.headers,\n })\n .pipe(tap((event) => updateState(event)), retry({\n delay: (error, retryCount) => {\n const retryOptions = { error, retryCount };\n const retryResult = options.retryFn?.(retryOptions) || shouldRetryRequest(retryOptions);\n if (!retryResult.retry) {\n return throwError(() => error);\n }\n return timer(retryResult.delay);\n },\n }), catchError((e) => {\n updateErrorState(e);\n return throwError(() => e);\n }));\n const execute = (options) => {\n if (loading() || (!isStale() && options?.allowCache)) {\n // Do not execute if there is already a request in progress or caching is allowed\n return false;\n }\n currentStreamSubscription.unsubscribe();\n lastExecuteTime.set(Date.now());\n lastLoadEventTime.set(lastExecuteTime());\n loading.set({\n executeTime: lastExecuteTime(),\n progress: null,\n });\n error.set(null);\n expiresIn.set(null);\n currentStreamSubscription = stream.subscribe();\n return true;\n };\n const destroy = () => {\n if (currentStreamSubscription.closed) {\n return false;\n }\n currentStreamSubscription.unsubscribe();\n return true;\n };\n const updateState = (event) => {\n currentEvent.set(event);\n switch (event.type) {\n case HttpEventType.Response:\n {\n loading.set(null);\n response.set(event.body);\n const expiresInSeconds = options.cacheAdapter\n ? options.cacheAdapter(event.headers)\n : extractExpiresInSeconds(event.headers);\n const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);\n expiresIn.set(expiresInTimestamp);\n }\n break;\n case HttpEventType.UploadProgress:\n case HttpEventType.DownloadProgress:\n {\n updateLoadingState(event);\n }\n break;\n case HttpEventType.Sent:\n case HttpEventType.ResponseHeader:\n case HttpEventType.User:\n {\n // we don't care about these events\n }\n break;\n }\n };\n const updateErrorState = (errorResponse) => {\n const errorRes = createQueryErrorResponse(errorResponse);\n error.set(errorRes);\n loading.set(null);\n currentEvent.set({ type: 'error', error: errorRes });\n options.dependencies.ngErrorHandler.handleError(errorRes.raw);\n };\n const updateLoadingState = (event) => {\n if (event.total === undefined) {\n return;\n }\n const progress = {\n total: event.total,\n loaded: event.loaded,\n percentage: (event.loaded / event.total) * 100,\n speed: null,\n remainingTime: null,\n };\n const state = {\n executeTime: lastExecuteTime(),\n progress,\n };\n const currentTime = Date.now();\n const elapsedTimeSinceLastEvent = currentTime - lastLoadEventTime();\n const elapsedTimeSinceLastExecute = currentTime - lastExecuteTime();\n const loadedAmount = event.loaded - lastLoadEventAmount();\n // We only want to calculate speed and remaining time after 2 seconds of the execution\n // This is to avoid showing incorrect speed and remaining time when the request is very fast\n if (elapsedTimeSinceLastExecute > SPEED_BUFFER_TIME_IN_MS) {\n const speed = (loadedAmount / elapsedTimeSinceLastEvent) * 1000;\n progress.speed = speed * 1000;\n progress.remainingTime = Math.round((event.total - event.loaded) / speed) * 1000;\n }\n lastLoadEventTime.set(currentTime);\n lastLoadEventAmount.set(event.loaded);\n loading.set(state);\n };\n const httpRequest = {\n execute,\n destroy,\n loading: loading.asReadonly(),\n error: error.asReadonly(),\n response: response.asReadonly(),\n currentEvent: currentEvent.asReadonly(),\n isStale,\n };\n return httpRequest;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1yZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9odHRwL2h0dHAtcmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXNDLGFBQWEsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RyxPQUFPLEVBQXdCLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkxRCxPQUFPLEVBQXNCLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdEYsT0FBTyxFQUdMLHVCQUF1QixFQUN2QixrQkFBa0IsR0FDbkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0FBOEk1QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUEwQixPQUF3QyxFQUFFLEVBQUU7SUFDckcsSUFBSSx5QkFBeUIsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBRW5ELE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUV0RCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQXlELElBQUksQ0FBQyxDQUFDO0lBQzFGLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBaUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUE0QixJQUFJLENBQUMsQ0FBQztJQUN0RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQTZCLElBQUksQ0FBQyxDQUFDO0lBRTFELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBRTlDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDNUIsTUFBTSxXQUFXLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFFaEMsT0FBTyxXQUFXLEtBQUssSUFBSSxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVTtTQUNuQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFO1FBQ3pDLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtRQUNoQixjQUFjLEVBQUUsYUFBYSxFQUFFLGNBQWM7UUFDN0MsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlO1FBQy9DLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYTtRQUMzQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksSUFBSSxNQUFNO1FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTztRQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU87S0FDdkIsQ0FBQztTQUNELElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUNsQyxLQUFLLENBQUM7UUFDSixLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUU7WUFDM0IsTUFBTSxZQUFZLEdBQThCLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBRXRFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUV4RixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN2QixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBRUQsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUM7S0FDRixDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDZixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBRUosTUFBTSxPQUFPLEdBQUcsQ0FBQyxPQUFrQyxFQUFFLEVBQUU7UUFDckQsSUFBSSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDckQsaUZBQWlGO1lBQ2pGLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELHlCQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXhDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDaEMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFFekMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNWLFdBQVcsRUFBRSxlQUFlLEVBQUU7WUFDOUIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEIseUJBQXlCLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRS9DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUYsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO1FBQ25CLElBQUkseUJBQXlCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQseUJBQXlCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFeEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQXFDLEVBQUUsRUFBRTtRQUM1RCxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhCLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLEtBQUssYUFBYSxDQUFDLFFBQVE7Z0JBQ3pCLENBQUM7b0JBQ0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBRXpCLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLFlBQVk7d0JBQzNDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7d0JBQ3JDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzNDLE1BQU0sa0JBQWtCLEdBQUcseUJBQXlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFDdkUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUNwQyxDQUFDO2dCQUNELE1BQU07WUFFUixLQUFLLGFBQWEsQ0FBQyxjQUFjLENBQUM7WUFDbEMsS0FBSyxhQUFhLENBQUMsZ0JBQWdCO2dCQUNqQyxDQUFDO29CQUNDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QixDQUFDO2dCQUNELE1BQU07WUFFUixLQUFLLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDeEIsS0FBSyxhQUFhLENBQUMsY0FBYyxDQUFDO1lBQ2xDLEtBQUssYUFBYSxDQUFDLElBQUk7Z0JBQ3JCLENBQUM7b0JBQ0MsbUNBQW1DO2dCQUNyQyxDQUFDO2dCQUNELE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLGFBQXNCLEVBQUUsRUFBRTtRQUNsRCxNQUFNLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV6RCxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFckQsT0FBTyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUM7SUFFRixNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBd0IsRUFBRSxFQUFFO1FBQ3RELElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFvQztZQUNoRCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUc7WUFDOUMsS0FBSyxFQUFFLElBQUk7WUFDWCxhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQTRCO1lBQ3JDLFdBQVcsRUFBRSxlQUFlLEVBQUU7WUFDOUIsUUFBUTtTQUNULENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDL0IsTUFBTSx5QkFBeUIsR0FBRyxXQUFXLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztRQUNwRSxNQUFNLDJCQUEyQixHQUFHLFdBQVcsR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUNwRSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFMUQsc0ZBQXNGO1FBQ3RGLDRGQUE0RjtRQUM1RixJQUFJLDJCQUEyQixHQUFHLHVCQUF1QixFQUFFLENBQUM7WUFDMUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxZQUFZLEdBQUcseUJBQXlCLENBQUMsR0FBRyxJQUFJLENBQUM7WUFFaEUsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQzlCLFFBQVEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNuRixDQUFDO1FBRUQsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25DLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBdUI7UUFDdEMsT0FBTztRQUNQLE9BQU87UUFDUCxPQUFPLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRTtRQUM3QixLQUFLLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRTtRQUN6QixRQUFRLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRTtRQUMvQixZQUFZLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRTtRQUN2QyxPQUFPO0tBQ1IsQ0FBQztJQUVGLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBDb250ZXh0LCBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBQcm9ncmVzc0V2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyLCBTaWduYWwsIGNvbXB1dGVkLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgY2F0Y2hFcnJvciwgcmV0cnksIHRhcCwgdGhyb3dFcnJvciwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGJ1aWxkVGltZXN0YW1wRnJvbVNlY29uZHMgfSBmcm9tICcuLi8uLi9yZXF1ZXN0JztcbmltcG9ydCB7IFF1ZXJ5QXJncywgUmVxdWVzdEFyZ3MsIFJlc3BvbnNlVHlwZSB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgQ2FjaGVBZGFwdGVyRm4gfSBmcm9tICcuL3F1ZXJ5LWNsaWVudC1jb25maWcnO1xuaW1wb3J0IHsgUXVlcnlNZXRob2QgfSBmcm9tICcuL3F1ZXJ5LWNyZWF0b3InO1xuaW1wb3J0IHsgUXVlcnlFcnJvclJlc3BvbnNlLCBjcmVhdGVRdWVyeUVycm9yUmVzcG9uc2UgfSBmcm9tICcuL3F1ZXJ5LWVycm9yLXJlc3BvbnNlJztcbmltcG9ydCB7IFF1ZXJ5UmVwb3NpdG9yeURlcGVuZGVuY2llcyB9IGZyb20gJy4vcXVlcnktcmVwb3NpdG9yeSc7XG5pbXBvcnQge1xuICBTaG91bGRSZXRyeVJlcXVlc3RGbixcbiAgU2hvdWxkUmV0cnlSZXF1ZXN0T3B0aW9ucyxcbiAgZXh0cmFjdEV4cGlyZXNJblNlY29uZHMsXG4gIHNob3VsZFJldHJ5UmVxdWVzdCxcbn0gZnJvbSAnLi9xdWVyeS11dGlscyc7XG5cbmV4cG9ydCBjb25zdCBTUEVFRF9CVUZGRVJfVElNRV9JTl9NUyA9IDIwMDA7XG5cbmV4cG9ydCB0eXBlIEh0dHBSZXF1ZXN0VHJhbnNmZXJDYWNoZUNvbmZpZyA9XG4gIHwgYm9vbGVhblxuICB8IHtcbiAgICAgIGluY2x1ZGVIZWFkZXJzPzogc3RyaW5nW107XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgSHR0cFJlcXVlc3RSZXNwb25zZVR5cGUgPSAnanNvbicgfCAndGV4dCcgfCAnYmxvYicgfCAnYXJyYXlidWZmZXInO1xuXG5leHBvcnQgdHlwZSBDcmVhdGVIdHRwUmVxdWVzdERlcGVuZGVuY2llcyA9IHtcbiAgLyoqIFRoZSBodHRwIGNsaWVudCBpbnN0YW5jZSB0byB1c2UgZm9yIHRoZSByZXF1ZXN0ICovXG4gIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQ7XG5cbiAgLyoqIFRoZSBlcnJvciBoYW5kbGVyIGluc3RhbmNlIHRvIHVzZSBmb3IgdGhlIHJlcXVlc3QgKi9cbiAgbmdFcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlcjtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUh0dHBSZXF1ZXN0Q2xpZW50T3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVwb3J0IHRoZSBwcm9ncmVzcyBvZiB0aGUgcmVxdWVzdCBvciBub3QuIElmIHRoZSBmZXRjaCBiYWNrZW5kIGlzIHVzZWQsIHRoaXMgd2lsbCBvbmx5IHdvcmsgZm9yIGRvd25sb2Fkcy5cbiAgICogQHNlZSBodHRwczovL2FuZ3VsYXIuZGV2L2d1aWRlL2h0dHAvbWFraW5nLXJlcXVlc3RzI3JlY2VpdmluZy1yYXctcHJvZ3Jlc3MtZXZlbnRzXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSBjcmVkZW50aWFscyBpbiB0aGUgcmVxdWVzdCBvciBub3RcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBlaXRoZXIgYSBib29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIHRyYW5zZmVycmluZyBjYWNoZSBmb3IgZWxpZ2libGVcbiAgICogcmVxdWVzdHMgcGVyZm9ybWVkIHVzaW5nIGBIdHRwQ2xpZW50YCwgb3IgYW4gb2JqZWN0LCB3aGljaCBhbGxvd3MgdG8gY29uZmlndXJlIGNhY2hlXG4gICAqIHBhcmFtZXRlcnMsIHN1Y2ggYXMgd2hpY2ggaGVhZGVycyBzaG91bGQgYmUgaW5jbHVkZWQgKG5vIGhlYWRlcnMgYXJlIGluY2x1ZGVkIGJ5IGRlZmF1bHQpLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgd2lsbCBvdmVycmlkZSB0aGUgb3B0aW9ucyBwYXNzZWQgdG8gYHByb3ZpZGVDbGllbnRIeWRyYXRpb24oKWAgZm9yIHRoaXNcbiAgICogcGFydGljdWxhciByZXF1ZXN0XG4gICAqL1xuICB0cmFuc2ZlckNhY2hlPzogSHR0cFJlcXVlc3RUcmFuc2ZlckNhY2hlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzcG9uc2UgdHlwZSBvZiB0aGUgcmVxdWVzdFxuICAgKiBAZGVmYXVsdCAnanNvbidcbiAgICovXG4gIHJlc3BvbnNlVHlwZT86IEh0dHBSZXF1ZXN0UmVzcG9uc2VUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGV4dCBvZiB0aGUgcmVxdWVzdFxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICogQHNlZSBodHRwczovL2FuZ3VsYXIuZGV2L2d1aWRlL2h0dHAvaW50ZXJjZXB0b3JzI3JlcXVlc3QtYW5kLXJlc3BvbnNlLW1ldGFkYXRhXG4gICAqL1xuICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVIdHRwUmVxdWVzdE9wdGlvbnM8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICAvKiogVGhlIEhUVFAgbWV0aG9kIG9mIHRoZSByZXF1ZXN0ICovXG4gIG1ldGhvZDogUXVlcnlNZXRob2Q7XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxsIHBhdGggb2YgdGhlIHJlcXVlc3RcbiAgICogQGV4YW1wbGUgJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tL3YxL3VzZXJzJ1xuICAgKi9cbiAgZnVsbFBhdGg6IHN0cmluZztcblxuICAvKiogVGhlIGRhdGEgb2YgdGhlIHJlcXVlc3QgKi9cbiAgYXJncz86IFJlcXVlc3RBcmdzPFRBcmdzPiB8IG51bGw7XG5cbiAgLyoqIFRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIHJlcXVlc3QgKi9cbiAgZGVwZW5kZW5jaWVzOiBRdWVyeVJlcG9zaXRvcnlEZXBlbmRlbmNpZXM7XG5cbiAgLyoqIFRoZSBjbGllbnQgb3B0aW9ucyBvZiB0aGUgcmVxdWVzdCAqL1xuICBjbGllbnRPcHRpb25zPzogQ3JlYXRlSHR0cFJlcXVlc3RDbGllbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FjaGUgYWRhcHRlciBmdW5jdGlvbiB0byB1c2UgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEBkZWZhdWx0IGV4dHJhY3RFeHBpcmVzSW5TZWNvbmRzKClcbiAgICovXG4gIGNhY2hlQWRhcHRlcj86IENhY2hlQWRhcHRlckZuO1xuXG4gIC8qKlxuICAgKiBUaGUgcmV0cnkgZnVuY3Rpb24gdG8gdXNlIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAZGVmYXVsdCBzaG91bGRSZXRyeVJlcXVlc3QoKVxuICAgKi9cbiAgcmV0cnlGbj86IFNob3VsZFJldHJ5UmVxdWVzdEZuO1xufTtcblxuZXhwb3J0IHR5cGUgSHR0cFJlcXVlc3RMb2FkaW5nU3RhdGUgPSB7XG4gIC8qKiBUaGUgdGltZSB3aGVuIHRoZSByZXF1ZXN0IHdhcyBleGVjdXRlZCBpbiBtcyAqL1xuICBleGVjdXRlVGltZTogbnVtYmVyO1xuXG4gIC8qKiBUaGUgcHJvZ3Jlc3Mgb2YgdGhlIHJlcXVlc3QuIE51bGwgaWYgcmVwb3J0UHJvZ3Jlc3MgaXMgZmFsc2Ugb3IgcHJvZ3Jlc3MgaXMgbm90IGF2YWlsYWJsZSAvIHVuc3VwcG9ydGVkICovXG4gIHByb2dyZXNzOiBIdHRwUmVxdWVzdExvYWRpbmdQcm9ncmVzc1N0YXRlIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIEh0dHBSZXF1ZXN0TG9hZGluZ1Byb2dyZXNzU3RhdGUgPSB7XG4gIC8qKiBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkICovXG4gIHRvdGFsOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgKi9cbiAgbG9hZGVkOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBwZXJjZW50YWdlIG9mIHRoZSB0cmFuc2ZlciB0aGF0IGlzIGNvbXBsZXRlZCAqL1xuICBwZXJjZW50YWdlOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBzcGVlZCBvZiB0aGUgdHJhbnNmZXIgaW4gYnl0ZXMgcGVyIG1pbGxpc2Vjb25kICovXG4gIHNwZWVkOiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKiBUaGUgZXN0aW1hdGVkIHJlbWFpbmluZyB0aW1lIGluIG1pbGxpc2Vjb25kcyAqL1xuICByZW1haW5pbmdUaW1lOiBudW1iZXIgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgSHR0cFJlcXVlc3Q8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICAvKiogRXhlY3V0ZXMgdGhlIHJlcXVlc3QgKi9cbiAgZXhlY3V0ZTogKG9wdGlvbnM/OiB7IGFsbG93Q2FjaGU/OiBib29sZWFuIH0pID0+IGJvb2xlYW47XG5cbiAgLyoqIERlc3Ryb3lzIHRoZSByZXF1ZXN0IChjYW5jZWxzIGl0IGlmIGluIHByb2dyZXNzKSAqL1xuICBkZXN0cm95OiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKiBUaGUgbG9hZGluZyBzdGF0ZSBvZiB0aGUgcmVxdWVzdCAqL1xuICBsb2FkaW5nOiBTaWduYWw8SHR0cFJlcXVlc3RMb2FkaW5nU3RhdGUgfCBudWxsPjtcblxuICAvKiogVGhlIGVycm9yIHN0YXRlIG9mIHRoZSByZXF1ZXN0ICovXG4gIGVycm9yOiBTaWduYWw8UXVlcnlFcnJvclJlc3BvbnNlIHwgbnVsbD47XG5cbiAgLyoqIFRoZSByZXNwb25zZSBzdGF0ZSBvZiB0aGUgcmVxdWVzdCAqL1xuICByZXNwb25zZTogU2lnbmFsPFJlc3BvbnNlVHlwZTxUQXJncz4gfCBudWxsPjtcblxuICAvKiogVGhlIGN1cnJlbnQgZXZlbnQgb2YgdGhlIHJlcXVlc3QgKi9cbiAgY3VycmVudEV2ZW50OiBTaWduYWw8SHR0cEV2ZW50PFJlc3BvbnNlVHlwZTxUQXJncz4+IHwgSHR0cEVycm9yRXZlbnQgfCBudWxsPjtcblxuICAvKiogV2hldGhlciB0aGUgcmVxdWVzdCBpcyBzdGFsZSBvciBub3QgYWthIHRoZSBjYWNoZSBoZWFkZXIgaGFzIGV4cGlyZWQgKi9cbiAgaXNTdGFsZTogU2lnbmFsPGJvb2xlYW4+O1xufTtcblxuLyoqIEEgY3VzdG9tIGVycm9yIGV2ZW50IHNpbmNlIHRoZSBBbmd1bGFyIGh0dHAgY2xpZW50IGRvZXMgbm90IHByb3ZpZGUgYSBzcGVjaWZpYyBldmVudCBmb3IgZXJyb3JzICovXG5leHBvcnQgdHlwZSBIdHRwRXJyb3JFdmVudCA9IHtcbiAgdHlwZTogJ2Vycm9yJztcbiAgZXJyb3I6IFF1ZXJ5RXJyb3JSZXNwb25zZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVIdHRwUmVxdWVzdCA9IDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4ob3B0aW9uczogQ3JlYXRlSHR0cFJlcXVlc3RPcHRpb25zPFRBcmdzPikgPT4ge1xuICBsZXQgY3VycmVudFN0cmVhbVN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICBjb25zdCB7IGFyZ3MsIGNsaWVudE9wdGlvbnMsIGRlcGVuZGVuY2llcyB9ID0gb3B0aW9ucztcblxuICBjb25zdCBjdXJyZW50RXZlbnQgPSBzaWduYWw8SHR0cEV2ZW50PFJlc3BvbnNlVHlwZTxUQXJncz4+IHwgSHR0cEVycm9yRXZlbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgbG9hZGluZyA9IHNpZ25hbDxIdHRwUmVxdWVzdExvYWRpbmdTdGF0ZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBlcnJvciA9IHNpZ25hbDxRdWVyeUVycm9yUmVzcG9uc2UgfCBudWxsPihudWxsKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBzaWduYWw8UmVzcG9uc2VUeXBlPFRBcmdzPiB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGxhc3RMb2FkRXZlbnRUaW1lID0gc2lnbmFsKDApO1xuICBjb25zdCBsYXN0TG9hZEV2ZW50QW1vdW50ID0gc2lnbmFsKDApO1xuICBjb25zdCBsYXN0RXhlY3V0ZVRpbWUgPSBzaWduYWwoMCk7XG4gIGNvbnN0IGV4cGlyZXNJbiA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBpc1N0YWxlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGV4cGlyZXNJblRzID0gZXhwaXJlc0luKCk7XG5cbiAgICByZXR1cm4gZXhwaXJlc0luVHMgPT09IG51bGwgfHwgZXhwaXJlc0luVHMgPCBEYXRlLm5vdygpO1xuICB9KTtcblxuICBjb25zdCBzdHJlYW0gPSBkZXBlbmRlbmNpZXMuaHR0cENsaWVudFxuICAgIC5yZXF1ZXN0KG9wdGlvbnMubWV0aG9kLCBvcHRpb25zLmZ1bGxQYXRoLCB7XG4gICAgICBvYnNlcnZlOiAnZXZlbnRzJyxcbiAgICAgIGJvZHk6IGFyZ3M/LmJvZHksXG4gICAgICByZXBvcnRQcm9ncmVzczogY2xpZW50T3B0aW9ucz8ucmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGNsaWVudE9wdGlvbnM/LndpdGhDcmVkZW50aWFscyxcbiAgICAgIHRyYW5zZmVyQ2FjaGU6IGNsaWVudE9wdGlvbnM/LnRyYW5zZmVyQ2FjaGUsXG4gICAgICByZXNwb25zZVR5cGU6IGNsaWVudE9wdGlvbnM/LnJlc3BvbnNlVHlwZSB8fCAnanNvbicsXG4gICAgICBjb250ZXh0OiBjbGllbnRPcHRpb25zPy5jb250ZXh0LFxuICAgICAgaGVhZGVyczogYXJncz8uaGVhZGVycyxcbiAgICB9KVxuICAgIC5waXBlKFxuICAgICAgdGFwKChldmVudCkgPT4gdXBkYXRlU3RhdGUoZXZlbnQpKSxcbiAgICAgIHJldHJ5KHtcbiAgICAgICAgZGVsYXk6IChlcnJvciwgcmV0cnlDb3VudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJldHJ5T3B0aW9uczogU2hvdWxkUmV0cnlSZXF1ZXN0T3B0aW9ucyA9IHsgZXJyb3IsIHJldHJ5Q291bnQgfTtcblxuICAgICAgICAgIGNvbnN0IHJldHJ5UmVzdWx0ID0gb3B0aW9ucy5yZXRyeUZuPy4ocmV0cnlPcHRpb25zKSB8fCBzaG91bGRSZXRyeVJlcXVlc3QocmV0cnlPcHRpb25zKTtcblxuICAgICAgICAgIGlmICghcmV0cnlSZXN1bHQucmV0cnkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGltZXIocmV0cnlSZXN1bHQuZGVsYXkpO1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlKSA9PiB7XG4gICAgICAgIHVwZGF0ZUVycm9yU3RhdGUoZSk7XG5cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZSk7XG4gICAgICB9KSxcbiAgICApO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSAob3B0aW9ucz86IHsgYWxsb3dDYWNoZT86IGJvb2xlYW4gfSkgPT4ge1xuICAgIGlmIChsb2FkaW5nKCkgfHwgKCFpc1N0YWxlKCkgJiYgb3B0aW9ucz8uYWxsb3dDYWNoZSkpIHtcbiAgICAgIC8vIERvIG5vdCBleGVjdXRlIGlmIHRoZXJlIGlzIGFscmVhZHkgYSByZXF1ZXN0IGluIHByb2dyZXNzIG9yIGNhY2hpbmcgaXMgYWxsb3dlZFxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGN1cnJlbnRTdHJlYW1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgIGxhc3RFeGVjdXRlVGltZS5zZXQoRGF0ZS5ub3coKSk7XG4gICAgbGFzdExvYWRFdmVudFRpbWUuc2V0KGxhc3RFeGVjdXRlVGltZSgpKTtcblxuICAgIGxvYWRpbmcuc2V0KHtcbiAgICAgIGV4ZWN1dGVUaW1lOiBsYXN0RXhlY3V0ZVRpbWUoKSxcbiAgICAgIHByb2dyZXNzOiBudWxsLFxuICAgIH0pO1xuICAgIGVycm9yLnNldChudWxsKTtcbiAgICBleHBpcmVzSW4uc2V0KG51bGwpO1xuXG4gICAgY3VycmVudFN0cmVhbVN1YnNjcmlwdGlvbiA9IHN0cmVhbS5zdWJzY3JpYmUoKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgaWYgKGN1cnJlbnRTdHJlYW1TdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY3VycmVudFN0cmVhbVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlU3RhdGUgPSAoZXZlbnQ6IEh0dHBFdmVudDxSZXNwb25zZVR5cGU8VEFyZ3M+PikgPT4ge1xuICAgIGN1cnJlbnRFdmVudC5zZXQoZXZlbnQpO1xuXG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICBjYXNlIEh0dHBFdmVudFR5cGUuUmVzcG9uc2U6XG4gICAgICAgIHtcbiAgICAgICAgICBsb2FkaW5nLnNldChudWxsKTtcbiAgICAgICAgICByZXNwb25zZS5zZXQoZXZlbnQuYm9keSk7XG5cbiAgICAgICAgICBjb25zdCBleHBpcmVzSW5TZWNvbmRzID0gb3B0aW9ucy5jYWNoZUFkYXB0ZXJcbiAgICAgICAgICAgID8gb3B0aW9ucy5jYWNoZUFkYXB0ZXIoZXZlbnQuaGVhZGVycylcbiAgICAgICAgICAgIDogZXh0cmFjdEV4cGlyZXNJblNlY29uZHMoZXZlbnQuaGVhZGVycyk7XG4gICAgICAgICAgY29uc3QgZXhwaXJlc0luVGltZXN0YW1wID0gYnVpbGRUaW1lc3RhbXBGcm9tU2Vjb25kcyhleHBpcmVzSW5TZWNvbmRzKTtcbiAgICAgICAgICBleHBpcmVzSW4uc2V0KGV4cGlyZXNJblRpbWVzdGFtcCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzczpcbiAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5Eb3dubG9hZFByb2dyZXNzOlxuICAgICAgICB7XG4gICAgICAgICAgdXBkYXRlTG9hZGluZ1N0YXRlKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlNlbnQ6XG4gICAgICBjYXNlIEh0dHBFdmVudFR5cGUuUmVzcG9uc2VIZWFkZXI6XG4gICAgICBjYXNlIEh0dHBFdmVudFR5cGUuVXNlcjpcbiAgICAgICAge1xuICAgICAgICAgIC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlc2UgZXZlbnRzXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZUVycm9yU3RhdGUgPSAoZXJyb3JSZXNwb25zZTogdW5rbm93bikgPT4ge1xuICAgIGNvbnN0IGVycm9yUmVzID0gY3JlYXRlUXVlcnlFcnJvclJlc3BvbnNlKGVycm9yUmVzcG9uc2UpO1xuXG4gICAgZXJyb3Iuc2V0KGVycm9yUmVzKTtcbiAgICBsb2FkaW5nLnNldChudWxsKTtcbiAgICBjdXJyZW50RXZlbnQuc2V0KHsgdHlwZTogJ2Vycm9yJywgZXJyb3I6IGVycm9yUmVzIH0pO1xuXG4gICAgb3B0aW9ucy5kZXBlbmRlbmNpZXMubmdFcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZXJyb3JSZXMucmF3KTtcbiAgfTtcblxuICBjb25zdCB1cGRhdGVMb2FkaW5nU3RhdGUgPSAoZXZlbnQ6IEh0dHBQcm9ncmVzc0V2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LnRvdGFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmVzczogSHR0cFJlcXVlc3RMb2FkaW5nUHJvZ3Jlc3NTdGF0ZSA9IHtcbiAgICAgIHRvdGFsOiBldmVudC50b3RhbCxcbiAgICAgIGxvYWRlZDogZXZlbnQubG9hZGVkLFxuICAgICAgcGVyY2VudGFnZTogKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsKSAqIDEwMCxcbiAgICAgIHNwZWVkOiBudWxsLFxuICAgICAgcmVtYWluaW5nVGltZTogbnVsbCxcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RhdGU6IEh0dHBSZXF1ZXN0TG9hZGluZ1N0YXRlID0ge1xuICAgICAgZXhlY3V0ZVRpbWU6IGxhc3RFeGVjdXRlVGltZSgpLFxuICAgICAgcHJvZ3Jlc3MsXG4gICAgfTtcblxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBlbGFwc2VkVGltZVNpbmNlTGFzdEV2ZW50ID0gY3VycmVudFRpbWUgLSBsYXN0TG9hZEV2ZW50VGltZSgpO1xuICAgIGNvbnN0IGVsYXBzZWRUaW1lU2luY2VMYXN0RXhlY3V0ZSA9IGN1cnJlbnRUaW1lIC0gbGFzdEV4ZWN1dGVUaW1lKCk7XG4gICAgY29uc3QgbG9hZGVkQW1vdW50ID0gZXZlbnQubG9hZGVkIC0gbGFzdExvYWRFdmVudEFtb3VudCgpO1xuXG4gICAgLy8gV2Ugb25seSB3YW50IHRvIGNhbGN1bGF0ZSBzcGVlZCBhbmQgcmVtYWluaW5nIHRpbWUgYWZ0ZXIgMiBzZWNvbmRzIG9mIHRoZSBleGVjdXRpb25cbiAgICAvLyBUaGlzIGlzIHRvIGF2b2lkIHNob3dpbmcgaW5jb3JyZWN0IHNwZWVkIGFuZCByZW1haW5pbmcgdGltZSB3aGVuIHRoZSByZXF1ZXN0IGlzIHZlcnkgZmFzdFxuICAgIGlmIChlbGFwc2VkVGltZVNpbmNlTGFzdEV4ZWN1dGUgPiBTUEVFRF9CVUZGRVJfVElNRV9JTl9NUykge1xuICAgICAgY29uc3Qgc3BlZWQgPSAobG9hZGVkQW1vdW50IC8gZWxhcHNlZFRpbWVTaW5jZUxhc3RFdmVudCkgKiAxMDAwO1xuXG4gICAgICBwcm9ncmVzcy5zcGVlZCA9IHNwZWVkICogMTAwMDtcbiAgICAgIHByb2dyZXNzLnJlbWFpbmluZ1RpbWUgPSBNYXRoLnJvdW5kKChldmVudC50b3RhbCAtIGV2ZW50LmxvYWRlZCkgLyBzcGVlZCkgKiAxMDAwO1xuICAgIH1cblxuICAgIGxhc3RMb2FkRXZlbnRUaW1lLnNldChjdXJyZW50VGltZSk7XG4gICAgbGFzdExvYWRFdmVudEFtb3VudC5zZXQoZXZlbnQubG9hZGVkKTtcblxuICAgIGxvYWRpbmcuc2V0KHN0YXRlKTtcbiAgfTtcblxuICBjb25zdCBodHRwUmVxdWVzdDogSHR0cFJlcXVlc3Q8VEFyZ3M+ID0ge1xuICAgIGV4ZWN1dGUsXG4gICAgZGVzdHJveSxcbiAgICBsb2FkaW5nOiBsb2FkaW5nLmFzUmVhZG9ubHkoKSxcbiAgICBlcnJvcjogZXJyb3IuYXNSZWFkb25seSgpLFxuICAgIHJlc3BvbnNlOiByZXNwb25zZS5hc1JlYWRvbmx5KCksXG4gICAgY3VycmVudEV2ZW50OiBjdXJyZW50RXZlbnQuYXNSZWFkb25seSgpLFxuICAgIGlzU3RhbGUsXG4gIH07XG5cbiAgcmV0dXJuIGh0dHBSZXF1ZXN0O1xufTtcbiJdfQ==","import { computed, untracked } from '@angular/core';\nimport { withAutoRefreshUsedInManualQuery, withAutoRefreshUsedOnUnsupportedHttpMethod, withPollingUsedOnUnsupportedHttpMethod, } from './query-errors';\nimport { CLEAR_QUERY_ARGS, nestedEffect } from './query-utils';\nconst createQueryFeature = (config) => {\n return config;\n};\n/**\n * A query feature that allows you to set the arguments of the query.\n * The arguments are read within a computed function, so you can use reactive values.\n *\n * To set the arguments to `null`, return the symbol `CLEAR_QUERY_ARGS`.\n * If you instead return `null`, the arguments won't change.\n *\n * Changing arguments will automatically trigger a new execution of the query if it is eligible for auto execution (e.g. a GET request).\n */\nexport const withArgs = (args) => {\n return createQueryFeature({\n type: \"withArgs\" /* QueryFeatureType.WithArgs */,\n fn: (context) => {\n const currArgs = computed(() => args());\n nestedEffect(() => {\n const currArgsNow = currArgs();\n if (currArgsNow === null)\n return;\n untracked(() => {\n if (currArgsNow === CLEAR_QUERY_ARGS) {\n context.state.args.set(null);\n return;\n }\n context.state.args.set(currArgsNow);\n if (context.flags.shouldAutoExecute)\n context.execute({ args: currArgsNow });\n });\n }, { injector: context.deps.injector });\n },\n });\n};\n/**\n * A query feature that will automatically execute the query at a given interval.\n * The interval will be cleared when the query is destroyed.\n * The interval will be reset when the arguments of the query change.\n *\n * @throws If the query is not eligible for auto execution (e.g. a POST request)\n */\nexport const withPolling = (options) => {\n return createQueryFeature({\n type: \"withPolling\" /* QueryFeatureType.WithPolling */,\n fn: (context) => {\n if (!context.flags.shouldAutoExecuteMethod) {\n throw withPollingUsedOnUnsupportedHttpMethod(context.flags.method);\n }\n let intervalId = null;\n nestedEffect(() => {\n const args = context.state.args();\n untracked(() => {\n if (intervalId !== null)\n clearInterval(intervalId);\n // Don't start polling if the query doesn't have args.\n // It should have args because a withArgs feature is present.\n if (args === null && context.flags.hasWithArgsFeature)\n return;\n if (options.executeInitially) {\n context.execute({ args });\n }\n intervalId = window.setInterval(() => {\n context.execute({ args });\n }, options.interval);\n });\n }, { injector: context.deps.injector });\n context.deps.destroyRef.onDestroy(() => intervalId !== null && clearInterval(intervalId));\n },\n });\n};\n/** A query feature that can be used to log the latest http event */\nexport const withLogging = (options) => {\n return createQueryFeature({\n type: \"withLogging\" /* QueryFeatureType.WithLogging */,\n fn: (context) => {\n nestedEffect(() => {\n const event = context.state.latestHttpEvent();\n if (event === null)\n return;\n untracked(() => {\n options.logFn(event);\n });\n }, { injector: context.deps.injector });\n },\n });\n};\n/** A query feature that can be used to handle errors */\nexport const withErrorHandling = (options) => {\n return createQueryFeature({\n type: \"withErrorHandling\" /* QueryFeatureType.WithErrorHandling */,\n fn: (context) => {\n nestedEffect(() => {\n const error = context.state.error();\n if (error === null)\n return;\n untracked(() => {\n options.handler(error);\n });\n }, { injector: context.deps.injector });\n },\n });\n};\n/** A query feature that can be used to handle successful responses */\nexport const withSuccessHandling = (options) => {\n return createQueryFeature({\n type: \"withSuccessHandling\" /* QueryFeatureType.WithSuccessHandling */,\n fn: (context) => {\n nestedEffect(() => {\n const response = context.state.response();\n if (response === null)\n return;\n untracked(() => {\n options.handler(response);\n });\n }, { injector: context.deps.injector });\n },\n });\n};\n/**\n * A query feature that will automatically execute the query when any of the provided signals change\n * @throws If the query is not eligible for auto execution (e.g. a POST request)\n * @throws If the query has the `onlyManualExecution` query config flag set and `ignoreOnlyManualExecution` is not set\n */\nexport const withAutoRefresh = (options) => {\n return createQueryFeature({\n type: \"withAutoRefresh\" /* QueryFeatureType.WithAutoRefresh */,\n fn: (context) => {\n if (!context.flags.shouldAutoExecuteMethod) {\n throw withAutoRefreshUsedOnUnsupportedHttpMethod(context.flags.method);\n }\n if (context.flags.onlyManualExecution && !options.ignoreOnlyManualExecution) {\n throw withAutoRefreshUsedInManualQuery();\n }\n nestedEffect(() => {\n for (const signal of options.onSignalChanges) {\n signal();\n }\n untracked(() => {\n const args = context.state.args();\n // Don't start polling if the query doesn't have args.\n // It should have args because a withArgs feature is present.\n if (args === null && context.flags.hasWithArgsFeature)\n return;\n context.execute({ args });\n });\n }, { injector: context.deps.injector });\n },\n });\n};\nexport const withResponseUpdate = (options) => {\n return createQueryFeature({\n type: \"withResponseUpdate\" /* QueryFeatureType.WithResponseUpdate */,\n fn: (context) => {\n nestedEffect(() => {\n const currentResponse = untracked(() => context.state.response());\n const response = options.updater({ currentResponse });\n if (response === null)\n return;\n untracked(() => {\n context.state.response.set(response);\n });\n }, { injector: context.deps.injector });\n },\n });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZmVhdHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvcXVlcnktZmVhdHVyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJNUQsT0FBTyxFQUNMLGdDQUFnQyxFQUNoQywwQ0FBMEMsRUFDMUMsc0NBQXNDLEdBQ3ZDLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEIsT0FBTyxFQUFFLGdCQUFnQixFQUFrQixZQUFZLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBMEJsRyxNQUFNLGtCQUFrQixHQUFHLENBQTBCLE1BQTZELEVBQUUsRUFBRTtJQUNwSCxPQUFPLE1BQTZCLENBQUM7QUFDdkMsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBMEIsSUFBK0QsRUFBRSxFQUFFO0lBQ25ILE9BQU8sa0JBQWtCLENBQVE7UUFDL0IsSUFBSSw0Q0FBMkI7UUFDL0IsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDZCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUV4QyxZQUFZLENBQ1YsR0FBRyxFQUFFO2dCQUNILE1BQU0sV0FBVyxHQUFHLFFBQVEsRUFBRSxDQUFDO2dCQUUvQixJQUFJLFdBQVcsS0FBSyxJQUFJO29CQUFFLE9BQU87Z0JBRWpDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2IsSUFBSSxXQUFXLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDckMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUM3QixPQUFPO29CQUNULENBQUM7b0JBRUQsT0FB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QWtCLEdBQUcsQ0FBMEIsT0FBZ0QsRUFBRSxFQUFFO0lBQzlHLE9BQU8sa0JBQWtCLENBQVE7UUFDL0IsSUFBSSxnRUFBcUM7UUFDekMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDZCxZQUFZLENBQ1YsR0FBRyxFQUFFO2dCQUNILE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ2xFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO2dCQUV0RCxJQUFJLFFBQVEsS0FBSyxJQUFJO29CQUFFLE9BQU87Z0JBRTlCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsRUFDRCxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUNwQyxDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGNvbXB1dGVkLCBTaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUXVlcnlBcmdzLCBSZXF1ZXN0QXJncywgUmVzcG9uc2VUeXBlIH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBRdWVyeURlcGVuZGVuY2llcyB9IGZyb20gJy4vcXVlcnktZGVwZW5kZW5jaWVzJztcbmltcG9ydCB7IFF1ZXJ5RXJyb3JSZXNwb25zZSB9IGZyb20gJy4vcXVlcnktZXJyb3ItcmVzcG9uc2UnO1xuaW1wb3J0IHtcbiAgd2l0aEF1dG9SZWZyZXNoVXNlZEluTWFudWFsUXVlcnksXG4gIHdpdGhBdXRvUmVmcmVzaFVzZWRPblVuc3VwcG9ydGVkSHR0cE1ldGhvZCxcbiAgd2l0aFBvbGxpbmdVc2VkT25VbnN1cHBvcnRlZEh0dHBNZXRob2QsXG59IGZyb20gJy4vcXVlcnktZXJyb3JzJztcbmltcG9ydCB7IEludGVybmFsUXVlcnlFeGVjdXRlIH0gZnJvbSAnLi9xdWVyeS1leGVjdXRlJztcbmltcG9ydCB7IFF1ZXJ5U3RhdGUgfSBmcm9tICcuL3F1ZXJ5LXN0YXRlJztcbmltcG9ydCB7IENMRUFSX1FVRVJZX0FSR1MsIENsZWFyUXVlcnlBcmdzLCBuZXN0ZWRFZmZlY3QsIFF1ZXJ5RmVhdHVyZUZsYWdzIH0gZnJvbSAnLi9xdWVyeS11dGlscyc7XG5cbmV4cG9ydCBjb25zdCBlbnVtIFF1ZXJ5RmVhdHVyZVR5cGUge1xuICBXaXRoQXJncyA9ICd3aXRoQXJncycsXG4gIFdpdGhMb2dnaW5nID0gJ3dpdGhMb2dnaW5nJyxcbiAgV2l0aEVycm9ySGFuZGxpbmcgPSAnd2l0aEVycm9ySGFuZGxpbmcnLFxuICBXaXRoU3VjY2Vzc0hhbmRsaW5nID0gJ3dpdGhTdWNjZXNzSGFuZGxpbmcnLFxuICBXaXRoUG9sbGluZyA9ICd3aXRoUG9sbGluZycsXG4gIFdpdGhBdXRvUmVmcmVzaCA9ICd3aXRoQXV0b1JlZnJlc2gnLFxuICBXaXRoUmVzcG9uc2VVcGRhdGUgPSAnd2l0aFJlc3BvbnNlVXBkYXRlJyxcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlGZWF0dXJlQ29udGV4dDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIHN0YXRlOiBRdWVyeVN0YXRlPFRBcmdzPjtcbiAgZXhlY3V0ZTogSW50ZXJuYWxRdWVyeUV4ZWN1dGU8VEFyZ3M+O1xuICBkZXBzOiBRdWVyeURlcGVuZGVuY2llcztcbiAgZmxhZ3M6IFF1ZXJ5RmVhdHVyZUZsYWdzO1xufTtcblxuZXhwb3J0IHR5cGUgUXVlcnlGZWF0dXJlRm48VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0gKGNvbnRleHQ6IFF1ZXJ5RmVhdHVyZUNvbnRleHQ8VEFyZ3M+KSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBRdWVyeUZlYXR1cmU8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICB0eXBlOiBRdWVyeUZlYXR1cmVUeXBlO1xuICBmbjogKGNvbnRleHQ6IFF1ZXJ5RmVhdHVyZUNvbnRleHQ8VEFyZ3M+KSA9PiB2b2lkO1xufTtcblxuY29uc3QgY3JlYXRlUXVlcnlGZWF0dXJlID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihjb25maWc6IHsgdHlwZTogUXVlcnlGZWF0dXJlVHlwZTsgZm46IFF1ZXJ5RmVhdHVyZUZuPFRBcmdzPiB9KSA9PiB7XG4gIHJldHVybiBjb25maWcgYXMgUXVlcnlGZWF0dXJlPFRBcmdzPjtcbn07XG5cbi8qKlxuICogQSBxdWVyeSBmZWF0dXJlIHRoYXQgYWxsb3dzIHlvdSB0byBzZXQgdGhlIGFyZ3VtZW50cyBvZiB0aGUgcXVlcnkuXG4gKiBUaGUgYXJndW1lbnRzIGFyZSByZWFkIHdpdGhpbiBhIGNvbXB1dGVkIGZ1bmN0aW9uLCBzbyB5b3UgY2FuIHVzZSByZWFjdGl2ZSB2YWx1ZXMuXG4gKlxuICogVG8gc2V0IHRoZSBhcmd1bWVudHMgdG8gYG51bGxgLCByZXR1cm4gdGhlIHN5bWJvbCBgQ0xFQVJfUVVFUllfQVJHU2AuXG4gKiBJZiB5b3UgaW5zdGVhZCByZXR1cm4gYG51bGxgLCB0aGUgYXJndW1lbnRzIHdvbid0IGNoYW5nZS5cbiAqXG4gKiBDaGFuZ2luZyBhcmd1bWVudHMgd2lsbCBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgYSBuZXcgZXhlY3V0aW9uIG9mIHRoZSBxdWVyeSBpZiBpdCBpcyBlbGlnaWJsZSBmb3IgYXV0byBleGVjdXRpb24gKGUuZy4gYSBHRVQgcmVxdWVzdCkuXG4gKi9cbmV4cG9ydCBjb25zdCB3aXRoQXJncyA9IDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4oYXJnczogKCkgPT4gTm9JbmZlcjxSZXF1ZXN0QXJnczxUQXJncz4+IHwgQ2xlYXJRdWVyeUFyZ3MgfCBudWxsKSA9PiB7XG4gIHJldHVybiBjcmVhdGVRdWVyeUZlYXR1cmU8VEFyZ3M+KHtcbiAgICB0eXBlOiBRdWVyeUZlYXR1cmVUeXBlLldpdGhBcmdzLFxuICAgIGZuOiAoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgY3VyckFyZ3MgPSBjb21wdXRlZCgoKSA9PiBhcmdzKCkpO1xuXG4gICAgICBuZXN0ZWRFZmZlY3QoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyQXJnc05vdyA9IGN1cnJBcmdzKCk7XG5cbiAgICAgICAgICBpZiAoY3VyckFyZ3NOb3cgPT09IG51bGwpIHJldHVybjtcblxuICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY3VyckFyZ3NOb3cgPT09IENMRUFSX1FVRVJZX0FSR1MpIHtcbiAgICAgICAgICAgICAgY29udGV4dC5zdGF0ZS5hcmdzLnNldChudWxsKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250ZXh0LnN0YXRlLmFyZ3Muc2V0KGN1cnJBcmdzTm93KTtcblxuICAgICAgICAgICAgaWYgKGNvbnRleHQuZmxhZ3Muc2hvdWxkQXV0b0V4ZWN1dGUpIGNvbnRleHQuZXhlY3V0ZSh7IGFyZ3M6IGN1cnJBcmdzTm93IH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB7IGluamVjdG9yOiBjb250ZXh0LmRlcHMuaW5qZWN0b3IgfSxcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgdHlwZSBXaXRoUG9sbGluZ0ZlYXR1cmVPcHRpb25zID0ge1xuICAvKiogVGhlIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyBhdCB3aGljaCB0aGUgcXVlcnkgc2hvdWxkIGJlIGV4ZWN1dGVkICovXG4gIGludGVydmFsOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHF1ZXJ5IHNob3VsZCBiZSBleGVjdXRlZCBpbml0aWFsbHkuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBxdWVyeSB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBmaXJzdCBpbnRlcnZhbC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGV4ZWN1dGVJbml0aWFsbHk/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBBIHF1ZXJ5IGZlYXR1cmUgdGhhdCB3aWxsIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZSB0aGUgcXVlcnkgYXQgYSBnaXZlbiBpbnRlcnZhbC5cbiAqIFRoZSBpbnRlcnZhbCB3aWxsIGJlIGNsZWFyZWQgd2hlbiB0aGUgcXVlcnkgaXMgZGVzdHJveWVkLlxuICogVGhlIGludGVydmFsIHdpbGwgYmUgcmVzZXQgd2hlbiB0aGUgYXJndW1lbnRzIG9mIHRoZSBxdWVyeSBjaGFuZ2UuXG4gKlxuICogQHRocm93cyBJZiB0aGUgcXVlcnkgaXMgbm90IGVsaWdpYmxlIGZvciBhdXRvIGV4ZWN1dGlvbiAoZS5nLiBhIFBPU1QgcmVxdWVzdClcbiAqL1xuZXhwb3J0IGNvbnN0IHdpdGhQb2xsaW5nID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihvcHRpb25zOiBXaXRoUG9sbGluZ0ZlYXR1cmVPcHRpb25zKSA9PiB7XG4gIHJldHVybiBjcmVhdGVRdWVyeUZlYXR1cmU8VEFyZ3M+KHtcbiAgICB0eXBlOiBRdWVyeUZlYXR1cmVUeXBlLldpdGhQb2xsaW5nLFxuICAgIGZuOiAoY29udGV4dCkgPT4ge1xuICAgICAgaWYgKCFjb250ZXh0LmZsYWdzLnNob3VsZEF1dG9FeGVjdXRlTWV0aG9kKSB7XG4gICAgICAgIHRocm93IHdpdGhQb2xsaW5nVXNlZE9uVW5zdXBwb3J0ZWRIdHRwTWV0aG9kKGNvbnRleHQuZmxhZ3MubWV0aG9kKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGludGVydmFsSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICBuZXN0ZWRFZmZlY3QoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmdzID0gY29udGV4dC5zdGF0ZS5hcmdzKCk7XG5cbiAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGludGVydmFsSWQgIT09IG51bGwpIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG5cbiAgICAgICAgICAgIC8vIERvbid0IHN0YXJ0IHBvbGxpbmcgaWYgdGhlIHF1ZXJ5IGRvZXNuJ3QgaGF2ZSBhcmdzLlxuICAgICAgICAgICAgLy8gSXQgc2hvdWxkIGhhdmUgYXJncyBiZWNhdXNlIGEgd2l0aEFyZ3MgZmVhdHVyZSBpcyBwcmVzZW50LlxuICAgICAgICAgICAgaWYgKGFyZ3MgPT09IG51bGwgJiYgY29udGV4dC5mbGFncy5oYXNXaXRoQXJnc0ZlYXR1cmUpIHJldHVybjtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXhlY3V0ZUluaXRpYWxseSkge1xuICAgICAgICAgICAgICBjb250ZXh0LmV4ZWN1dGUoeyBhcmdzIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnRlcnZhbElkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgY29udGV4dC5leGVjdXRlKHsgYXJncyB9KTtcbiAgICAgICAgICAgIH0sIG9wdGlvbnMuaW50ZXJ2YWwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB7IGluamVjdG9yOiBjb250ZXh0LmRlcHMuaW5qZWN0b3IgfSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnRleHQuZGVwcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBpbnRlcnZhbElkICE9PSBudWxsICYmIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCkpO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IHR5cGUgV2l0aExvZ2dpbmdGZWF0dXJlT3B0aW9uczxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIC8qKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbGF0ZXN0IGh0dHAgZXZlbnQgKi9cbiAgbG9nRm46ICh2OiBIdHRwRXZlbnQ8UmVzcG9uc2VUeXBlPFRBcmdzPj4gfCBudWxsKSA9PiB2b2lkO1xufTtcblxuLyoqIEEgcXVlcnkgZmVhdHVyZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvZyB0aGUgbGF0ZXN0IGh0dHAgZXZlbnQgKi9cbmV4cG9ydCBjb25zdCB3aXRoTG9nZ2luZyA9IDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4ob3B0aW9uczogV2l0aExvZ2dpbmdGZWF0dXJlT3B0aW9uczxUQXJncz4pID0+IHtcbiAgcmV0dXJuIGNyZWF0ZVF1ZXJ5RmVhdHVyZTxUQXJncz4oe1xuICAgIHR5cGU6IFF1ZXJ5RmVhdHVyZVR5cGUuV2l0aExvZ2dpbmcsXG4gICAgZm46IChjb250ZXh0KSA9PiB7XG4gICAgICBuZXN0ZWRFZmZlY3QoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBjb25zdCBldmVudCA9IGNvbnRleHQuc3RhdGUubGF0ZXN0SHR0cEV2ZW50KCk7XG5cbiAgICAgICAgICBpZiAoZXZlbnQgPT09IG51bGwpIHJldHVybjtcblxuICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICBvcHRpb25zLmxvZ0ZuKGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBpbmplY3RvcjogY29udGV4dC5kZXBzLmluamVjdG9yIH0sXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IHR5cGUgV2l0aEVycm9ySGFuZGxpbmdGZWF0dXJlT3B0aW9ucyA9IHtcbiAgLyoqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsYXRlc3QgZXJyb3IgKi9cbiAgaGFuZGxlcjogKGU6IFF1ZXJ5RXJyb3JSZXNwb25zZSkgPT4gdm9pZDtcbn07XG5cbi8qKiBBIHF1ZXJ5IGZlYXR1cmUgdGhhdCBjYW4gYmUgdXNlZCB0byBoYW5kbGUgZXJyb3JzICovXG5leHBvcnQgY29uc3Qgd2l0aEVycm9ySGFuZGxpbmcgPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KG9wdGlvbnM6IFdpdGhFcnJvckhhbmRsaW5nRmVhdHVyZU9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIGNyZWF0ZVF1ZXJ5RmVhdHVyZTxUQXJncz4oe1xuICAgIHR5cGU6IFF1ZXJ5RmVhdHVyZVR5cGUuV2l0aEVycm9ySGFuZGxpbmcsXG4gICAgZm46IChjb250ZXh0KSA9PiB7XG4gICAgICBuZXN0ZWRFZmZlY3QoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGNvbnRleHQuc3RhdGUuZXJyb3IoKTtcblxuICAgICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgIG9wdGlvbnMuaGFuZGxlcihlcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHsgaW5qZWN0b3I6IGNvbnRleHQuZGVwcy5pbmplY3RvciB9LFxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbnR5cGUgV2l0aFN1Y2Nlc3NIYW5kbGluZ0ZlYXR1cmVPcHRpb25zPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IHtcbiAgLyoqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsYXRlc3QgcmVzcG9uc2UgKi9cbiAgaGFuZGxlcjogKGRhdGE6IE5vbk51bGxhYmxlPFJlc3BvbnNlVHlwZTxUQXJncz4+KSA9PiB2b2lkO1xufTtcblxuLyoqIEEgcXVlcnkgZmVhdHVyZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGhhbmRsZSBzdWNjZXNzZnVsIHJlc3BvbnNlcyAqL1xuZXhwb3J0IGNvbnN0IHdpdGhTdWNjZXNzSGFuZGxpbmcgPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KG9wdGlvbnM6IFdpdGhTdWNjZXNzSGFuZGxpbmdGZWF0dXJlT3B0aW9uczxUQXJncz4pID0+IHtcbiAgcmV0dXJuIGNyZWF0ZVF1ZXJ5RmVhdHVyZTxUQXJncz4oe1xuICAgIHR5cGU6IFF1ZXJ5RmVhdHVyZVR5cGUuV2l0aFN1Y2Nlc3NIYW5kbGluZyxcbiAgICBmbjogKGNvbnRleHQpID0+IHtcbiAgICAgIG5lc3RlZEVmZmVjdChcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gY29udGV4dC5zdGF0ZS5yZXNwb25zZSgpO1xuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlID09PSBudWxsKSByZXR1cm47XG5cbiAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgb3B0aW9ucy5oYW5kbGVyKHJlc3BvbnNlIGFzIE5vbk51bGxhYmxlPFJlc3BvbnNlVHlwZTxUQXJncz4+KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBpbmplY3RvcjogY29udGV4dC5kZXBzLmluamVjdG9yIH0sXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IHR5cGUgV2l0aEF1dG9SZWZyZXNoRmVhdHVyZU9wdGlvbnMgPSB7XG4gIC8qKiBUaGUgc2lnbmFscyB0aGF0IHNob3VsZCB0cmlnZ2VyIGEgcmVmcmVzaCBvZiB0aGUgcXVlcnkgKi9cbiAgb25TaWduYWxDaGFuZ2VzOiBTaWduYWw8dW5rbm93bj5bXTtcblxuICAvKiogV2hldGhlciB0byBpZ25vcmUgdGhlIGBvbmx5TWFudWFsRXhlY3V0aW9uYCBxdWVyeSBjb25maWcgZmxhZyAqL1xuICBpZ25vcmVPbmx5TWFudWFsRXhlY3V0aW9uPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQSBxdWVyeSBmZWF0dXJlIHRoYXQgd2lsbCBhdXRvbWF0aWNhbGx5IGV4ZWN1dGUgdGhlIHF1ZXJ5IHdoZW4gYW55IG9mIHRoZSBwcm92aWRlZCBzaWduYWxzIGNoYW5nZVxuICogQHRocm93cyBJZiB0aGUgcXVlcnkgaXMgbm90IGVsaWdpYmxlIGZvciBhdXRvIGV4ZWN1dGlvbiAoZS5nLiBhIFBPU1QgcmVxdWVzdClcbiAqIEB0aHJvd3MgSWYgdGhlIHF1ZXJ5IGhhcyB0aGUgYG9ubHlNYW51YWxFeGVjdXRpb25gIHF1ZXJ5IGNvbmZpZyBmbGFnIHNldCBhbmQgYGlnbm9yZU9ubHlNYW51YWxFeGVjdXRpb25gIGlzIG5vdCBzZXRcbiAqL1xuZXhwb3J0IGNvbnN0IHdpdGhBdXRvUmVmcmVzaCA9IDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4ob3B0aW9uczogV2l0aEF1dG9SZWZyZXNoRmVhdHVyZU9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIGNyZWF0ZVF1ZXJ5RmVhdHVyZTxUQXJncz4oe1xuICAgIHR5cGU6IFF1ZXJ5RmVhdHVyZVR5cGUuV2l0aEF1dG9SZWZyZXNoLFxuICAgIGZuOiAoY29udGV4dCkgPT4ge1xuICAgICAgaWYgKCFjb250ZXh0LmZsYWdzLnNob3VsZEF1dG9FeGVjdXRlTWV0aG9kKSB7XG4gICAgICAgIHRocm93IHdpdGhBdXRvUmVmcmVzaFVzZWRPblVuc3VwcG9ydGVkSHR0cE1ldGhvZChjb250ZXh0LmZsYWdzLm1ldGhvZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb250ZXh0LmZsYWdzLm9ubHlNYW51YWxFeGVjdXRpb24gJiYgIW9wdGlvbnMuaWdub3JlT25seU1hbnVhbEV4ZWN1dGlvbikge1xuICAgICAgICB0aHJvdyB3aXRoQXV0b1JlZnJlc2hVc2VkSW5NYW51YWxRdWVyeSgpO1xuICAgICAgfVxuXG4gICAgICBuZXN0ZWRFZmZlY3QoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBvcHRpb25zLm9uU2lnbmFsQ2hhbmdlcykge1xuICAgICAgICAgICAgc2lnbmFsKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBjb250ZXh0LnN0YXRlLmFyZ3MoKTtcblxuICAgICAgICAgICAgLy8gRG9uJ3Qgc3RhcnQgcG9sbGluZyBpZiB0aGUgcXVlcnkgZG9lc24ndCBoYXZlIGFyZ3MuXG4gICAgICAgICAgICAvLyBJdCBzaG91bGQgaGF2ZSBhcmdzIGJlY2F1c2UgYSB3aXRoQXJncyBmZWF0dXJlIGlzIHByZXNlbnQuXG4gICAgICAgICAgICBpZiAoYXJncyA9PT0gbnVsbCAmJiBjb250ZXh0LmZsYWdzLmhhc1dpdGhBcmdzRmVhdHVyZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb250ZXh0LmV4ZWN1dGUoeyBhcmdzIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB7IGluamVjdG9yOiBjb250ZXh0LmRlcHMuaW5qZWN0b3IgfSxcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgdHlwZSBXaXRoUmVzcG9uc2VVcGRhdGVGZWF0dXJlRm5EYXRhPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IHtcbiAgLyoqIFRoZSBjdXJyZW50IHJlc3BvbnNlIG9mIHRoZSBxdWVyeSAqL1xuICBjdXJyZW50UmVzcG9uc2U6IFJlc3BvbnNlVHlwZTxUQXJncz4gfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgV2l0aFJlc3BvbnNlVXBkYXRlRmVhdHVyZU9wdGlvbnM8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGxhdGVzdCByZXNwb25zZVxuICAgKiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBgbnVsbGAsIHRoZSByZXNwb25zZSB3aWxsIG5vdCBiZSB1cGRhdGVkLlxuICAgKiBPdGhlcndpc2UsIHRoZSByZXNwb25zZSB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgcmV0dXJuZWQgdmFsdWUuXG4gICAqIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiBhIHJlYWN0aXZlIHNpZ25hbCBjb250ZXh0LlxuICAgKiBJZiB0aGUgcXVlcnkgZ2V0J3MgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHJlc3BvbnNlIHdhcyB1cGRhdGVkLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSBzZXQgdGhlIHRoZSBmcmVzaCBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlci5cbiAgICpcbiAgICogVGhpcyBmZWF0dXJlIGlzIG1vc3QgdXNlZnVsIGluIGNvbWJpbmF0aW9uIHdpdGggd2ViIHNvY2tldHMgd2hlcmUgdGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgc29ja2V0IG1pZ2h0IGJlIG1vcmUgdXAtdG8tZGF0ZSB0aGFuIHRoZSBkYXRhIHJlY2VpdmVkIHByZXZpb3VzbHkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IG1hdGNoRXZlbnRzID0gbXlTb2NrZXQuam9pblJvb20oJ21hdGNoLWV2ZW50cycpO1xuICAgKlxuICAgKiBjb25zdCBteU1hdGNoUXVlcnkgPSBnZXRNYXRjaChcbiAgICogIHdpdGhBcmdzKCgpID0+ICh7IG1hdGNoSWQ6IDEgfSkpLFxuICAgKiAgd2l0aFJlc3BvbnNlVXBkYXRlKCh7IGN1cnJlbnRSZXNwb25zZSB9KSA9PiB7XG4gICAqICAgY29uc3QgbWF0Y2hFdmVudCA9IG1hdGNoRXZlbnRzKCk7XG4gICAqXG4gICAqICAgaWYgKCFtYXRjaEV2ZW50KSByZXR1cm4gbnVsbDtcbiAgICpcbiAgICogICAvLyBEbyBzb21lIGNoZWNrcyBoZXJlLiBUaGlzIGlzIGp1c3QgYSB2ZXJ5IHNpbXBsZSBleGFtcGxlLlxuICAgKiAgIC8vIFRvIGFwcGx5IHBhcnRpYWwgdXBkYXRlcywgeW91IGNhbiB1c2UgdGhlIHNwcmVhZCBvcGVyYXRvciBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBjdXJyZW50IHJlc3BvbnNlLlxuICAgKlxuICAgKiAgIHJldHVybiBtYXRjaEV2ZW50O1xuICAgKiAgfSlcbiAgICogKVxuICAgKi9cbiAgdXBkYXRlcjogKGRhdGE6IFdpdGhSZXNwb25zZVVwZGF0ZUZlYXR1cmVGbkRhdGE8VEFyZ3M+KSA9PiBSZXNwb25zZVR5cGU8VEFyZ3M+IHwgbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB3aXRoUmVzcG9uc2VVcGRhdGUgPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KG9wdGlvbnM6IFdpdGhSZXNwb25zZVVwZGF0ZUZlYXR1cmVPcHRpb25zPFRBcmdzPikgPT4ge1xuICByZXR1cm4gY3JlYXRlUXVlcnlGZWF0dXJlPFRBcmdzPih7XG4gICAgdHlwZTogUXVlcnlGZWF0dXJlVHlwZS5XaXRoUmVzcG9uc2VVcGRhdGUsXG4gICAgZm46IChjb250ZXh0KSA9PiB7XG4gICAgICBuZXN0ZWRFZmZlY3QoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UmVzcG9uc2UgPSB1bnRyYWNrZWQoKCkgPT4gY29udGV4dC5zdGF0ZS5yZXNwb25zZSgpKTtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IG9wdGlvbnMudXBkYXRlcih7IGN1cnJlbnRSZXNwb25zZSB9KTtcblxuICAgICAgICAgIGlmIChyZXNwb25zZSA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRleHQuc3RhdGUucmVzcG9uc2Uuc2V0KHJlc3BvbnNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBpbmplY3RvcjogY29udGV4dC5kZXBzLmluamVjdG9yIH0sXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xufTtcbiJdfQ==","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, effect, inject, Injector, runInInjectionContext, signal, untracked } from '@angular/core';\nimport { queryStackWithArgsUsed, queryStackWithResponseUpdateUsed } from './query-errors';\nimport { withArgs } from './query-features';\n/** Transforms an array of arrays into a single array and filters out `null` values. */\nexport const transformArrayResponse = (responses) => responses.filter((r) => !!r).flatMap((r) => r);\n/** Transforms an array of paginated responses into a single array and filters out `null` values. */\nexport const transformPaginatedResponse = (responses) => responses.filter((r) => !!r).flatMap((r) => r.items);\nexport const createQueryStack = (options) => {\n const { args, queryCreator, dependencies, append, features = [], appendFn = (oldQueries, newQueries) => {\n const queries = [...oldQueries, ...newQueries];\n const lastQuery = newQueries[newQueries.length - 1] ?? oldQueries[oldQueries.length - 1] ?? null;\n return { queries, lastQuery };\n }, transform, } = options ?? {};\n const injector = inject(Injector);\n const queries = signal([]);\n const lastQuery = signal(null);\n const firstQuery = computed(() => queries()[0] ?? null);\n const hasWithArgsFeature = features.some((f) => f.type == \"withArgs\" /* QueryFeatureType.WithArgs */);\n const hasWithOptimisticUpdateFeature = features.some((f) => f.type == \"withResponseUpdate\" /* QueryFeatureType.WithResponseUpdate */);\n if (hasWithArgsFeature) {\n throw queryStackWithArgsUsed();\n }\n if (hasWithOptimisticUpdateFeature) {\n throw queryStackWithResponseUpdateUsed();\n }\n effect(() => {\n // Clear the stack if dependencies change\n dependencies?.();\n untracked(() => clear());\n });\n effect(() => runWithArgs(args(dependencies?.())));\n const runWithArgs = (args) => {\n if (args === null)\n return null;\n const newArgsArray = Array.isArray(args) ? args : [args];\n const newQueries = runInInjectionContext(injector, () => newArgsArray.map((newArgsEntry) => queryCreator(withArgs(() => newArgsEntry), ...features)));\n const result = untracked(() => {\n const oldQueries = queries();\n if (append) {\n const { queries: appendedQueries, lastQuery: lastAppendedQuery } = appendFn(oldQueries, newQueries);\n queries.set(appendedQueries);\n lastQuery.set(lastAppendedQuery);\n return lastAppendedQuery;\n }\n else {\n for (const oldQuery of oldQueries) {\n if (!newQueries.some((q) => q.id() === oldQuery.id())) {\n oldQuery.subtle.destroy();\n }\n }\n queries.set(newQueries);\n const last = newQueries[newQueries.length - 1] ?? null;\n lastQuery.set(last);\n return last;\n }\n });\n return result;\n };\n const loading = computed(() => queries().some((q) => q.loading()));\n const error = computed(() => queries()\n .map((q) => q.error())\n .find((e) => e !== null) ?? null);\n const response = computed(() => {\n const responses = queries().map((q) => q.response());\n return transform?.(responses) ?? responses;\n });\n const execute = (options) => {\n for (const query of queries()) {\n query.execute({ options: { allowCache: options?.allowCache } });\n }\n };\n const clear = () => {\n for (const query of queries()) {\n query.subtle.destroy();\n }\n queries.set([]);\n lastQuery.set(null);\n };\n const stack = {\n queries: queries.asReadonly(),\n lastQuery: lastQuery.asReadonly(),\n firstQuery,\n loading,\n error,\n response,\n execute,\n clear,\n subtle: {\n runWithArgs,\n },\n };\n return stack;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvcXVlcnktc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUlySCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQWtDLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBNkg1RSx1RkFBdUY7QUFDdkYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBK0IsU0FBWSxFQUFFLEVBQUUsQ0FDbkYsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUF3QixDQUFDO0FBRXhFLG9HQUFvRztBQUNwRyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUE0QyxTQUFZLEVBQUUsRUFBRSxDQUNwRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUE0QyxDQUFDO0FBRWxHLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBTTlCLE9BQTZELEVBQzdELEVBQUU7SUFHRixNQUFNLEVBQ0osSUFBSSxFQUNKLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsR0FBRyxF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LENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNyRCxPQUFPLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUM3QyxDQUFDLENBQXVCLENBQUM7SUFFekIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxPQUFrQyxFQUFFLEVBQUU7UUFDckQsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQzlCLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ2pCLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUM5QixLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxLQUFLLEdBQWdEO1FBQ3pELE9BQU8sRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFO1FBQzdCLFNBQVMsRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFO1FBQ2pDLFVBQVU7UUFDVixPQUFPO1FBQ1AsS0FBSztRQUNMLFFBQVE7UUFDUixPQUFPO1FBQ1AsS0FBSztRQUNMLE1BQU0sRUFBRTtZQUNOLFdBQVc7U0FDWjtLQUNGLENBQUM7SUFFRixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgSW5qZWN0b3IsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgU2lnbmFsLCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW55TmV3UXVlcnksIFJlcXVlc3RBcmdzLCBSZXNwb25zZVR5cGUgfSBmcm9tICcuL3F1ZXJ5JztcbmltcG9ydCB7IEFueVF1ZXJ5Q3JlYXRvciwgUXVlcnlBcmdzT2YsIFJ1blF1ZXJ5Q3JlYXRvciB9IGZyb20gJy4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBRdWVyeUVycm9yUmVzcG9uc2UgfSBmcm9tICcuL3F1ZXJ5LWVycm9yLXJlc3BvbnNlJztcbmltcG9ydCB7IHF1ZXJ5U3RhY2tXaXRoQXJnc1VzZWQsIHF1ZXJ5U3RhY2tXaXRoUmVzcG9uc2VVcGRhdGVVc2VkIH0gZnJvbSAnLi9xdWVyeS1lcnJvcnMnO1xuaW1wb3J0IHsgUXVlcnlGZWF0dXJlLCBRdWVyeUZlYXR1cmVUeXBlLCB3aXRoQXJncyB9IGZyb20gJy4vcXVlcnktZmVhdHVyZXMnO1xuXG5leHBvcnQgdHlwZSBRdWVyeVN0YWNrU3VidGxlPFRDcmVhdG9yIGV4dGVuZHMgQW55UXVlcnlDcmVhdG9yLCBUUXVlcnkgZXh0ZW5kcyBBbnlOZXdRdWVyeT4gPSB7XG4gIC8qKiBDcmVhdGUgYSBuZXcgcXVlcnkgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLiBZb3Ugc2hvdWxkIGFsd2F5cyBwcmVmZXIgdGhlIGBhcmdzYCBvcHRpb24gaW5zdGVhZCBvZiB0aGlzLiAqL1xuICBydW5XaXRoQXJnczogKFxuICAgIGFyZ3M6IFJlcXVlc3RBcmdzPFF1ZXJ5QXJnc09mPFRDcmVhdG9yPj4gfCBSZXF1ZXN0QXJnczxRdWVyeUFyZ3NPZjxUQ3JlYXRvcj4+W10gfCBudWxsLFxuICApID0+IFRRdWVyeSB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeVN0YWNrPFRRdWVyeSBleHRlbmRzIEFueU5ld1F1ZXJ5LCBUQ3JlYXRvciBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvciwgVFRyYW5zZm9ybT4gPSB7XG4gIC8qKiBDb250YWlucyBhbGwgcXVlcmllcyBpbiB0aGUgc3RhY2suICovXG4gIHF1ZXJpZXM6IFNpZ25hbDxUUXVlcnlbXT47XG5cbiAgLyoqIENvbnRhaW5zIHRoZSBmaXJzdCBxdWVyeSBpbiB0aGUgc3RhY2suICovXG4gIGZpcnN0UXVlcnk6IFNpZ25hbDxUUXVlcnkgfCBudWxsPjtcblxuICAvKiogQ29udGFpbnMgdGhlIGxhc3QgcXVlcnkgaW4gdGhlIHN0YWNrLiBVc2VmdWwgZm9yIGdldHRpbmcgY3VycmVudCBwYWdpbmF0aW9uIHZhbHVlcy4gKi9cbiAgbGFzdFF1ZXJ5OiBTaWduYWw8VFF1ZXJ5IHwgbnVsbD47XG5cbiAgLyoqIFRydWUgaWYgYW55IHF1ZXJ5IGluIHRoZSBzdGFjayBpcyBsb2FkaW5nLiAqL1xuICBsb2FkaW5nOiBTaWduYWw8Ym9vbGVhbj47XG5cbiAgLyoqIENvbnRhaW5zIHRoZSBmaXJzdCBlcnJvciB0aGF0IG9jY3VycmVkIGluIHRoZSBzdGFjay4gKi9cbiAgZXJyb3I6IFNpZ25hbDxRdWVyeUVycm9yUmVzcG9uc2UgfCBudWxsPjtcblxuICAvKiogQ29udGFpbnMgdGhlIHJlc3BvbnNlcyBvZiBhbGwgcXVlcmllcyBpbiB0aGUgc3RhY2suIFdpbGwgYmUgYG51bGxgIGZvciBxdWVyaWVzIHRoYXQgYXJlIGxvYWRpbmcgb3IgZXJyb3JlZC4gKi9cbiAgcmVzcG9uc2U6IFNpZ25hbDxUVHJhbnNmb3JtPjtcblxuICAvKiogRXhlY3V0ZXMgYWxsIHF1ZXJpZXMgaW4gdGhlIHN0YWNrLiAqL1xuICBleGVjdXRlOiAob3B0aW9ucz86IHsgYWxsb3dDYWNoZT86IGJvb2xlYW4gfSkgPT4gdm9pZDtcblxuICAvKiogRGVzdHJveXMgYWxsIHF1ZXJpZXMgaW4gdGhlIHN0YWNrIGFuZCBlbXB0aWVzIGl0LiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgYGFwcGVuZGAgaXMgdHJ1ZS4gKi9cbiAgY2xlYXI6ICgpID0+IHZvaWQ7XG5cbiAgLyoqIEFkdmFuY2VkIHF1ZXJ5IHN0YWNrIGZlYXR1cmVzLiAqKldBUk5JTkchKiogSW5jb3JyZWN0bHkgdXNpbmcgdGhlc2UgZmVhdHVyZXMgd2lsbCBsaWtlbHkgKipCUkVBSyoqIHlvdXIgYXBwbGljYXRpb24uIFlvdSBoYXZlIGJlZW4gd2FybmVkISAqL1xuICBzdWJ0bGU6IFF1ZXJ5U3RhY2tTdWJ0bGU8VENyZWF0b3IsIFRRdWVyeT47XG59O1xuXG5leHBvcnQgdHlwZSBBbnlRdWVyeVN0YWNrID0gUXVlcnlTdGFjazxBbnlOZXdRdWVyeSwgQW55UXVlcnlDcmVhdG9yLCBhbnk+O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVRdWVyeVN0YWNrT3B0aW9uczxcbiAgVENyZWF0b3IgZXh0ZW5kcyBBbnlRdWVyeUNyZWF0b3IsXG4gIFREZXBzIGV4dGVuZHMgKCkgPT4gYW55LFxuICBUVHJhbnNmb3JtID0gKFJlc3BvbnNlVHlwZTxRdWVyeUFyZ3NPZjxUQ3JlYXRvcj4+IHwgbnVsbClbXSxcbj4gPSB7XG4gIC8qKlxuICAgKiBUaGUgcXVlcnkgY3JlYXRvciBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIHF1ZXJ5IHN0YWNrLlxuICAgKi9cbiAgcXVlcnlDcmVhdG9yOiBUQ3JlYXRvcjtcblxuICAvKipcbiAgICogVGhlIGRlcGVuZGVuY2llcyB0aGF0IHNob3VsZCB0cmlnZ2VyIGEgbmV3IHF1ZXJ5IHN0YWNrIGNyZWF0aW9uLlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB0cmVhdGVkIGxpa2UgYSBjb21wdXRlZCBmdW5jdGlvbi4gSXQgcmVhY3RzIHRvIHNpZ25hbCBjaGFuZ2VzLlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGBhcmdzYCBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyBvcHRpb24gY2FuIGJlIGlnbm9yZWQgaWYgYGFwcGVuZGAgaXMgZmFsc2UuXG4gICAqL1xuICBkZXBlbmRlbmNpZXM/OiBURGVwcztcblxuICAvKipcbiAgICogVGhlIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGFsbCBxdWVyaWVzIGluIHRoZSBzdGFjay5cbiAgICpcbiAgICogQHRocm93cyBJZiB0aGUgYHdpdGhBcmdzYCBmZWF0dXJlIGlzIHVzZWQuIFRoaXMgZmVhdHVyZSBpcyBpbnRlcm5hbGx5IHVzZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIER1ZSB0byBsaW1pdGF0aW9ucyBpbiBUeXBlU2NyaXB0LCB5b3UgaGF2ZSB0byBtYW51YWxseSBhZGQgdGhlIG5lZWRlZCBnZW5lcmljIHR5cGVzIGlmIG5lZWRlZC5cbiAgICogZmVhdHVyZXM6IFtFLndpdGhTdWNjZXNzSGFuZGxpbmc8R2V0UG9zdFF1ZXJ5QXJncz4oeyBoYW5kbGVyOiAocG9zdCkgPT4gY29uc29sZS5sb2cocG9zdC50aXRsZSkgfSldXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIElmIHR5cGluZ3MgYXJlIG5vdCBuZWVkZWQsIHlvdSBjYW4gdXNlIHRoZSBmZWF0dXJlIHdpdGhvdXQgZ2VuZXJpY3MuXG4gICAqIGZlYXR1cmVzOiBbRS53aXRoUG9sbGluZyh7IGludGVydmFsOiA1MDAwIH0pXVxuICAgKi9cbiAgZmVhdHVyZXM/OiBRdWVyeUZlYXR1cmU8YW55PltdO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHRvIGNyZWF0ZSBxdWVyaWVzIHdpdGguXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHRyZWF0ZWQgbGlrZSBhIGNvbXB1dGVkIGZ1bmN0aW9uLiBJdCByZWFjdHMgdG8gc2lnbmFsIGNoYW5nZXMuXG4gICAqIElmIGEgc2lnbmFsIGNoYW5nZXMsIGEgbmV3IHF1ZXJ5IHdpbGwgYmUgY3JlYXRlZCAoYW5kIGFwcGVuZGVkIHRvIHRoZSBleGlzdGluZyBvbmVzIGlmIGBhcHBlbmRgIGlzIHRydWUpLlxuICAgKiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYG51bGxgLCB0aGUgYXJncyB3aWxsIGJlIGlnbm9yZWQuXG4gICAqIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSwgbXVsdGlwbGUgcXVlcmllcyB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIE9uZSBxdWVyeVxuICAgKiAoKSA9PiAoeyBxdWVyeVBhcmFtczogeyBwb3N0SWQ6IG15SWQoKSB9IH0pLFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBNdWx0aXBsZSBxdWVyaWVzICh0aGVzZSBjYW4gb2YgY2F1c2UgYWxzbyBiZSBjcmVhdGVkIHVzaW5nIGEgbG9vcClcbiAgICogKCkgPT4gW1xuICAgKiAgeyBxdWVyeVBhcmFtczogeyBwb3N0SWQ6IG15SWQoKSB9IH0sXG4gICAqICB7IHF1ZXJ5UGFyYW1zOiB7IHBvc3RJZDogbXlPdGhlcklkKCkgfSB9LFxuICAgKiBdLFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBPbmUgcXVlcnkgd2l0aCBkZXBlbmRlbmNpZXNcbiAgICogKGRlcHMpID0+ICh7IHF1ZXJ5UGFyYW1zOiB7IHBvc3RJZDogbXlJZCgpLCBsaW1pdDogZGVwcy5saW1pdCB9IH0pLFxuICAgKi9cbiAgYXJnczogKGRlcHM6IFJldHVyblR5cGU8VERlcHM+KSA9PiBSZXF1ZXN0QXJnczxRdWVyeUFyZ3NPZjxUQ3JlYXRvcj4+IHwgUmVxdWVzdEFyZ3M8UXVlcnlBcmdzT2Y8VENyZWF0b3I+PltdIHwgbnVsbDtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgbmV3IHF1ZXJpZXMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZXhpc3Rpbmcgb25lcy4gT3RoZXJ3aXNlLCBleGlzdGluZyBxdWVyaWVzIHdpbGwgYmUgZGVzdHJveWVkLlxuICAgKiBUaGlzIHNob3VsZCBiZSB1c2VkIGZvciB0aGluZ3MgbGlrZSBpbmZpbml0ZSBzY3JvbGxpbmcgd2hlcmUgYWxyZWFkeSBmZXRjaGVkIHF1ZXJpZXMgc2hvdWxkIG5vdCBiZSBkZXN0cm95ZWQuXG4gICAqL1xuICBhcHBlbmQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBhcHBlbmQgaXMgdHJ1ZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBtZXJnZSB0aGUgb2xkIGFuZCBuZXcgcXVlcmllcy5cbiAgICogVXNlZnVsIGlmIHlvdSB3YW50IHRvIGFwcGVuZCB0aGUgbmV3IHF1ZXJpZXMgaW4gYSBzcGVjaWZpYyBvcmRlciAoZS5nLiBhdCB0aGUgYmVnaW5uaW5nKS5cbiAgICovXG4gIGFwcGVuZEZuPzogKFxuICAgIG9sZFF1ZXJpZXM6IFJ1blF1ZXJ5Q3JlYXRvcjxUQ3JlYXRvcj5bXSxcbiAgICBuZXdRdWVyaWVzOiBSdW5RdWVyeUNyZWF0b3I8VENyZWF0b3I+W10sXG4gICkgPT4ge1xuICAgIC8qKiBUaGUgbmV3IHF1ZXJpZXMgbWVyZ2VkIHdpdGggdGhlIG9sZCBvbmVzLiAqL1xuICAgIHF1ZXJpZXM6IFJ1blF1ZXJ5Q3JlYXRvcjxUQ3JlYXRvcj5bXTtcblxuICAgIC8qKiBUaGUgbGFzdCBxdWVyeSBpbiB0aGUgbmV3IHF1ZXJpZXMuICovXG4gICAgbGFzdFF1ZXJ5OiBSdW5RdWVyeUNyZWF0b3I8VENyZWF0b3I+IHwgbnVsbDtcbiAgfTtcblxuICAvKipcbiAgICogVHJhbnNmb3JtcyB0aGUgcmVzcG9uc2VzIG9mIGFsbCBxdWVyaWVzIGluIHRoZSBzdGFjay4gVXNlZnVsIGZvciBtZXJnaW5nIG9yIGZpbHRlcmluZyByZXNwb25zZXMuXG4gICAqL1xuICB0cmFuc2Zvcm0/OiAocmVzcG9uc2VzOiBSZXNwb25zZVR5cGU8UXVlcnlBcmdzT2Y8VENyZWF0b3I+PltdKSA9PiBUVHJhbnNmb3JtO1xufTtcblxuLyoqIFRyYW5zZm9ybXMgYW4gYXJyYXkgb2YgYXJyYXlzIGludG8gYSBzaW5nbGUgYXJyYXkgYW5kIGZpbHRlcnMgb3V0IGBudWxsYCB2YWx1ZXMuICovXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtQXJyYXlSZXNwb25zZSA9IDxUIGV4dGVuZHMgKHVua25vd24gfCBudWxsKVtdPihyZXNwb25zZXM6IFQpID0+XG4gIHJlc3BvbnNlcy5maWx0ZXIoKHIpID0+ICEhcikuZmxhdE1hcCgocikgPT4gcikgYXMgTm9uTnVsbGFibGU8VFswXT5bXTtcblxuLyoqIFRyYW5zZm9ybXMgYW4gYXJyYXkgb2YgcGFnaW5hdGVkIHJlc3BvbnNlcyBpbnRvIGEgc2luZ2xlIGFycmF5IGFuZCBmaWx0ZXJzIG91dCBgbnVsbGAgdmFsdWVzLiAqL1xuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVBhZ2luYXRlZFJlc3BvbnNlID0gPFQgZXh0ZW5kcyAoeyBpdGVtczogdW5rbm93bltdIH0gfCBudWxsKVtdPihyZXNwb25zZXM6IFQpID0+XG4gIHJlc3BvbnNlcy5maWx0ZXIoKHIpID0+ICEhcikuZmxhdE1hcCgocikgPT4gci5pdGVtcykgYXMgTm9uTnVsbGFibGU8Tm9uTnVsbGFibGU8VFswXT5bJ2l0ZW1zJ10+O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUXVlcnlTdGFjayA9IDxcbiAgVENyZWF0b3IgZXh0ZW5kcyBBbnlRdWVyeUNyZWF0b3IsXG4gIFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzT2Y8VENyZWF0b3I+LFxuICBURGVwcyBleHRlbmRzICgpID0+IGFueSxcbiAgVFRyYW5zZm9ybSA9IChSZXNwb25zZVR5cGU8VEFyZ3M+IHwgbnVsbClbXSxcbj4oXG4gIG9wdGlvbnM6IENyZWF0ZVF1ZXJ5U3RhY2tPcHRpb25zPFRDcmVhdG9yLCBURGVwcywgVFRyYW5zZm9ybT4sXG4pID0+IHtcbiAgdHlwZSBRdWVyeVR5cGUgPSBSdW5RdWVyeUNyZWF0b3I8VENyZWF0b3I+O1xuXG4gIGNvbnN0IHtcbiAgICBhcmdzLFxuICAgIHF1ZXJ5Q3JlYXRvcixcbiAgICBkZXBlbmRlbmNpZXMsXG4gICAgYXBwZW5kLFxuICAgIGZlYXR1cmVzID0gW10sXG4gICAgYXBwZW5kRm4gPSAob2xkUXVlcmllczogUXVlcnlUeXBlW10sIG5ld1F1ZXJpZXM6IFF1ZXJ5VHlwZVtdKSA9PiB7XG4gICAgICBjb25zdCBxdWVyaWVzID0gWy4uLm9sZFF1ZXJpZXMsIC4uLm5ld1F1ZXJpZXNdO1xuICAgICAgY29uc3QgbGFzdFF1ZXJ5ID0gbmV3UXVlcmllc1tuZXdRdWVyaWVzLmxlbmd0aCAtIDFdID8/IG9sZFF1ZXJpZXNbb2xkUXVlcmllcy5sZW5ndGggLSAxXSA/PyBudWxsO1xuXG4gICAgICByZXR1cm4geyBxdWVyaWVzLCBsYXN0UXVlcnkgfTtcbiAgICB9LFxuICAgIHRyYW5zZm9ybSxcbiAgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIGNvbnN0IHF1ZXJpZXMgPSBzaWduYWw8UXVlcnlUeXBlW10+KFtdKTtcbiAgY29uc3QgbGFzdFF1ZXJ5ID0gc2lnbmFsPFF1ZXJ5VHlwZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBmaXJzdFF1ZXJ5ID0gY29tcHV0ZWQoKCkgPT4gcXVlcmllcygpWzBdID8/IG51bGwpO1xuXG4gIGNvbnN0IGhhc1dpdGhBcmdzRmVhdHVyZSA9IGZlYXR1cmVzLnNvbWUoKGYpID0+IGYudHlwZSA9PSBRdWVyeUZlYXR1cmVUeXBlLldpdGhBcmdzKTtcbiAgY29uc3QgaGFzV2l0aE9wdGltaXN0aWNVcGRhdGVGZWF0dXJlID0gZmVhdHVyZXMuc29tZSgoZikgPT4gZi50eXBlID09IFF1ZXJ5RmVhdHVyZVR5cGUuV2l0aFJlc3BvbnNlVXBkYXRlKTtcblxuICBpZiAoaGFzV2l0aEFyZ3NGZWF0dXJlKSB7XG4gICAgdGhyb3cgcXVlcnlTdGFja1dpdGhBcmdzVXNlZCgpO1xuICB9XG5cbiAgaWYgKGhhc1dpdGhPcHRpbWlzdGljVXBkYXRlRmVhdHVyZSkge1xuICAgIHRocm93IHF1ZXJ5U3RhY2tXaXRoUmVzcG9uc2VVcGRhdGVVc2VkKCk7XG4gIH1cblxuICBlZmZlY3QoKCkgPT4ge1xuICAgIC8vIENsZWFyIHRoZSBzdGFjayBpZiBkZXBlbmRlbmNpZXMgY2hhbmdlXG4gICAgZGVwZW5kZW5jaWVzPy4oKTtcblxuICAgIHVudHJhY2tlZCgoKSA9PiBjbGVhcigpKTtcbiAgfSk7XG5cbiAgZWZmZWN0KCgpID0+IHJ1bldpdGhBcmdzKGFyZ3MoZGVwZW5kZW5jaWVzPy4oKSkpKTtcblxuICBjb25zdCBydW5XaXRoQXJncyA9IChhcmdzOiBSZXF1ZXN0QXJnczxRdWVyeUFyZ3NPZjxUQ3JlYXRvcj4+IHwgUmVxdWVzdEFyZ3M8UXVlcnlBcmdzT2Y8VENyZWF0b3I+PltdIHwgbnVsbCkgPT4ge1xuICAgIGlmIChhcmdzID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG5ld0FyZ3NBcnJheSA9IEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzIDogW2FyZ3NdO1xuXG4gICAgY29uc3QgbmV3UXVlcmllcyA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT5cbiAgICAgIG5ld0FyZ3NBcnJheS5tYXAoXG4gICAgICAgIChuZXdBcmdzRW50cnkpID0+XG4gICAgICAgICAgcXVlcnlDcmVhdG9yKFxuICAgICAgICAgICAgd2l0aEFyZ3MoKCkgPT4gbmV3QXJnc0VudHJ5KSxcbiAgICAgICAgICAgIC4uLmZlYXR1cmVzLFxuICAgICAgICAgICkgYXMgUXVlcnlUeXBlLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gdW50cmFja2VkKCgpID0+IHtcbiAgICAgIGNvbnN0IG9sZFF1ZXJpZXMgPSBxdWVyaWVzKCk7XG5cbiAgICAgIGlmIChhcHBlbmQpIHtcbiAgICAgICAgY29uc3QgeyBxdWVyaWVzOiBhcHBlbmRlZFF1ZXJpZXMsIGxhc3RRdWVyeTogbGFzdEFwcGVuZGVkUXVlcnkgfSA9IGFwcGVuZEZuKG9sZFF1ZXJpZXMsIG5ld1F1ZXJpZXMpO1xuICAgICAgICBxdWVyaWVzLnNldChhcHBlbmRlZFF1ZXJpZXMpO1xuICAgICAgICBsYXN0UXVlcnkuc2V0KGxhc3RBcHBlbmRlZFF1ZXJ5KTtcblxuICAgICAgICByZXR1cm4gbGFzdEFwcGVuZGVkUXVlcnk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IG9sZFF1ZXJ5IG9mIG9sZFF1ZXJpZXMpIHtcbiAgICAgICAgICBpZiAoIW5ld1F1ZXJpZXMuc29tZSgocSkgPT4gcS5pZCgpID09PSBvbGRRdWVyeS5pZCgpKSkge1xuICAgICAgICAgICAgb2xkUXVlcnkuc3VidGxlLmRlc3Ryb3koKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVlcmllcy5zZXQobmV3UXVlcmllcyk7XG5cbiAgICAgICAgY29uc3QgbGFzdCA9IG5ld1F1ZXJpZXNbbmV3UXVlcmllcy5sZW5ndGggLSAxXSA/PyBudWxsO1xuXG4gICAgICAgIGxhc3RRdWVyeS5zZXQobGFzdCk7XG5cbiAgICAgICAgcmV0dXJuIGxhc3Q7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGNvbnN0IGxvYWRpbmcgPSBjb21wdXRlZCgoKSA9PiBxdWVyaWVzKCkuc29tZSgocSkgPT4gcS5sb2FkaW5nKCkpKTtcblxuICBjb25zdCBlcnJvciA9IGNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICBxdWVyaWVzKClcbiAgICAgICAgLm1hcCgocSkgPT4gcS5lcnJvcigpKVxuICAgICAgICAuZmluZCgoZSkgPT4gZSAhPT0gbnVsbCkgPz8gbnVsbCxcbiAgKTtcblxuICBjb25zdCByZXNwb25zZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCByZXNwb25zZXMgPSBxdWVyaWVzKCkubWFwKChxKSA9PiBxLnJlc3BvbnNlKCkpO1xuICAgIHJldHVybiB0cmFuc2Zvcm0/LihyZXNwb25zZXMpID8/IHJlc3BvbnNlcztcbiAgfSkgYXMgU2lnbmFsPFRUcmFuc2Zvcm0+O1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSAob3B0aW9ucz86IHsgYWxsb3dDYWNoZT86IGJvb2xlYW4gfSkgPT4ge1xuICAgIGZvciAoY29uc3QgcXVlcnkgb2YgcXVlcmllcygpKSB7XG4gICAgICBxdWVyeS5leGVjdXRlKHsgb3B0aW9uczogeyBhbGxvd0NhY2hlOiBvcHRpb25zPy5hbGxvd0NhY2hlIH0gfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNsZWFyID0gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgcXVlcnkgb2YgcXVlcmllcygpKSB7XG4gICAgICBxdWVyeS5zdWJ0bGUuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHF1ZXJpZXMuc2V0KFtdKTtcbiAgICBsYXN0UXVlcnkuc2V0KG51bGwpO1xuICB9O1xuXG4gIGNvbnN0IHN0YWNrOiBRdWVyeVN0YWNrPFF1ZXJ5VHlwZSwgVENyZWF0b3IsIFRUcmFuc2Zvcm0+ID0ge1xuICAgIHF1ZXJpZXM6IHF1ZXJpZXMuYXNSZWFkb25seSgpLFxuICAgIGxhc3RRdWVyeTogbGFzdFF1ZXJ5LmFzUmVhZG9ubHkoKSxcbiAgICBmaXJzdFF1ZXJ5LFxuICAgIGxvYWRpbmcsXG4gICAgZXJyb3IsXG4gICAgcmVzcG9uc2UsXG4gICAgZXhlY3V0ZSxcbiAgICBjbGVhcixcbiAgICBzdWJ0bGU6IHtcbiAgICAgIHJ1bldpdGhBcmdzLFxuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIHN0YWNrO1xufTtcbiJdfQ==","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, effect, isDevMode, signal, untracked } from '@angular/core';\nimport { pagedQueryStackNextPageCalledWithoutPreviousPage, pagedQueryStackPageBiggerThanTotalPages, pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage, queryStackTotalQueriesAndExpectedQueriesMismatch, } from './query-errors';\nimport { createQueryStack, transformArrayResponse } from './query-stack';\nimport { shouldRetryRequest } from './query-utils';\nexport const ethletePaginationAdapter = (response) => {\n const pagination = {\n items: response.items,\n totalPages: response.totalPageCount,\n currentPage: response.currentPage,\n itemsPerPage: response.itemsPerPage,\n totalHits: response.totalHits,\n };\n return pagination;\n};\nexport const ggLikePaginationAdapter = (response) => {\n const pagination = {\n items: response.items,\n totalPages: response.totalPageCount,\n currentPage: response.currentPage,\n itemsPerPage: response.itemsPerPage,\n totalHits: response.totalHits,\n };\n return pagination;\n};\nexport const dynLikePaginationAdapter = (response) => {\n const pagination = {\n items: response.items,\n totalPages: response.totalPages,\n currentPage: response.currentPage,\n itemsPerPage: response.limit,\n totalHits: response.totalHits,\n };\n return pagination;\n};\nexport const contentfulGqlLikePaginationAdapter = (response) => {\n const totalPages = Math.max(Math.ceil(response.total / response.limit), 1); // If there are no items, there is still one page\n const currentPage = Math.max(Math.ceil(response.skip / response.limit) + 1, 1);\n const pagination = {\n items: response.items,\n totalPages,\n currentPage,\n itemsPerPage: response.limit,\n totalHits: response.total,\n };\n return pagination;\n};\nexport const fakePaginationAdapter = (totalHits = 10) => {\n return (response) => {\n const pagination = {\n items: [response],\n totalPages: totalHits,\n currentPage: 1,\n itemsPerPage: 1,\n totalHits,\n };\n return pagination;\n };\n};\nexport const createPagedQueryStack = (options) => {\n const { responseNormalizer, queryCreator, features } = options;\n const currentPageArgs = signal(null);\n const initialPage = signal(options.initialPage ?? 1);\n const loadedMinPage = signal(initialPage());\n const loadedMaxPage = signal(initialPage());\n const lastResetTimestamp = signal(Date.now());\n const pageDirection = signal('next');\n const stack = createQueryStack({\n args: () => null,\n queryCreator,\n append: true,\n features,\n appendFn: (oldQueries, newQueries) => {\n const newQuery = newQueries[0];\n const dir = pageDirection();\n if (!newQuery) {\n const lastQuery = oldQueries[oldQueries.length - 1] ?? null;\n return { queries: oldQueries, lastQuery };\n }\n else if (dir === 'previous') {\n return { queries: [newQuery, ...oldQueries], lastQuery: newQuery };\n }\n else {\n return { queries: [...oldQueries, newQuery], lastQuery: newQuery };\n }\n },\n transform: transformArrayResponse,\n });\n effect(() => {\n lastResetTimestamp();\n const args = options.args(initialPage(), []);\n untracked(() => {\n stack.clear();\n currentPageArgs.set(args);\n loadedMinPage.set(initialPage());\n loadedMaxPage.set(initialPage());\n stack.subtle.runWithArgs(args);\n });\n });\n const maxPagination = computed(() => {\n const res = stack.lastQuery()?.response();\n const all = stack.response();\n if (!res)\n return null;\n return responseNormalizer(res, all);\n });\n const minPagination = computed(() => {\n const res = stack.firstQuery()?.response();\n const all = stack.response();\n if (!res)\n return null;\n return responseNormalizer(res, all);\n });\n const isFirstPageLoaded = computed(() => {\n const min = minPagination();\n return min ? loadedMinPage() === min.currentPage : false;\n });\n const isLastPageLoaded = computed(() => {\n const max = maxPagination();\n return max ? loadedMaxPage() === max.totalPages : false;\n });\n const fetchPreviousPage = () => {\n const page = loadedMinPage() - 1;\n const allResponses = stack.response();\n if (!canFetchNewPage(page)) {\n return null;\n }\n if (page < 1) {\n if (isDevMode()) {\n throw pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage();\n }\n return null;\n }\n currentPageArgs.set(options.args(page, allResponses));\n loadedMinPage.set(page);\n pageDirection.set('previous');\n return stack.subtle.runWithArgs(currentPageArgs());\n };\n const fetchNextPage = () => {\n const page = loadedMaxPage() + 1;\n const currentPagination = maxPagination();\n const allResponses = stack.response();\n if (!canFetchNewPage(page)) {\n return null;\n }\n if (!currentPagination) {\n if (isDevMode()) {\n throw pagedQueryStackNextPageCalledWithoutPreviousPage();\n }\n return null;\n }\n if (page > currentPagination.totalPages) {\n if (isDevMode()) {\n throw pagedQueryStackPageBiggerThanTotalPages(page, currentPagination.totalPages);\n }\n return null;\n }\n currentPageArgs.set(options.args(page, allResponses));\n loadedMaxPage.set(page);\n pageDirection.set('next');\n return stack.subtle.runWithArgs(currentPageArgs());\n };\n const canFetchNewPage = (pageToLoad) => {\n const currentMaxPagination = maxPagination();\n const currentMinPagination = minPagination();\n if (!currentMaxPagination || !currentMinPagination) {\n return true;\n }\n const isOneMinusMinPagination = pageToLoad === currentMinPagination.currentPage - 1;\n const isOnePlusMaxPagination = pageToLoad === currentMaxPagination.currentPage + 1;\n if (!options.blockExecutionDuringLoading) {\n const totalQueries = stack.queries().length;\n const expectedQueries = Math.abs(loadedMaxPage() - loadedMinPage()) + 1;\n if (totalQueries !== expectedQueries) {\n if (isDevMode()) {\n throw queryStackTotalQueriesAndExpectedQueriesMismatch(totalQueries, expectedQueries);\n }\n }\n return true;\n }\n if (stack.loading()) {\n return false;\n }\n return isOneMinusMinPagination || isOnePlusMaxPagination;\n };\n const reset = (resetOptions) => {\n const page = resetOptions?.initialPage ?? initialPage();\n initialPage.set(page);\n pageDirection.set('next');\n lastResetTimestamp.set(Date.now());\n };\n const canFetchPreviousPage = computed(() => {\n const currentMinPagination = minPagination();\n if (!currentMinPagination)\n return false;\n return loadedMinPage() > 1;\n });\n const canFetchNextPage = computed(() => {\n const currentMaxPagination = maxPagination();\n return currentMaxPagination ? loadedMaxPage() < currentMaxPagination.totalPages : false;\n });\n const items = computed(() => {\n const res = stack.response();\n return res.map((r) => responseNormalizer(r, res).items).flat();\n });\n const isFirstLoad = computed(() => {\n return stack.queries().length === 1 && !!stack.lastQuery()?.loading();\n });\n const execute = (options) => {\n const whereFn = options?.where;\n if (whereFn) {\n const queriesToExecute = new Set();\n const all = stack.response();\n for (const [index, query] of stack.queries().entries()) {\n const res = query.response();\n const err = query.error();\n const isErroredAndCanBeRetried = err && shouldRetryRequest(err.raw);\n if (isErroredAndCanBeRetried) {\n queriesToExecute.add(query);\n }\n else if (res) {\n if (responseNormalizer(res, all).items.some((item, i, a) => whereFn(item, i, a))) {\n queriesToExecute.add(query);\n // Also execute the previous and next query to the one that matched the condition.\n if (index !== 0) {\n const prevQuery = stack.queries()[index - 1];\n if (prevQuery) {\n queriesToExecute.add(prevQuery);\n }\n }\n if (index !== stack.queries().length - 1) {\n const nextQuery = stack.queries()[index + 1];\n if (nextQuery) {\n queriesToExecute.add(nextQuery);\n }\n }\n }\n }\n }\n for (const query of queriesToExecute) {\n query.execute({ options: { allowCache: options.allowCache } });\n }\n }\n else {\n stack.execute({ allowCache: options?.allowCache });\n }\n };\n const pagedQuery = {\n maxPagination,\n minPagination,\n fetchPreviousPage,\n fetchNextPage,\n canFetchPreviousPage,\n canFetchNextPage,\n items,\n direction: pageDirection.asReadonly(),\n loading: stack.loading,\n error: stack.error,\n lastQuery: stack.lastQuery,\n isFirstLoad,\n queries: stack.queries,\n isLastPageLoaded,\n isFirstPageLoaded,\n reset,\n execute,\n };\n return pagedQuery;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZWQtcXVlcnktc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvcGFnZWQtcXVlcnktc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBV3ZGLE9BQU8sRUFDTCxnREFBZ0QsRUFDaEQsdUNBQXVDLEVBQ3ZDLHNEQUFzRCxFQUN0RCxnREFBZ0QsR0FDakQsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUksUUFBc0IsRUFBRSxFQUFFO0lBQ3BFLE1BQU0sVUFBVSxHQUE0QjtRQUMxQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7UUFDckIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxjQUFjO1FBQ25DLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVztRQUNqQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVk7UUFDbkMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO0tBQzlCLENBQUM7SUFFRixPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFJLFFBQTRCLEVBQUUsRUFBRTtJQUN6RSxNQUFNLFVBQVUsR0FBNEI7UUFDMUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO1FBQ3JCLFVBQVUsRUFBRSxRQUFRLENBQUMsY0FBYztRQUNuQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7UUFD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QUFFLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakUsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsTUFBTSxVQUFVLEdBQW1EO1FBQ2pFLGFBQWE7UUFDYixhQUFhO1FBQ2IsaUJBQWlCO1FBQ2pCLGFBQWE7UUFDYixvQkFBb0I7UUFDcEIsZ0JBQWdCO1FBQ2hCLEtBQUs7UUFDTCxTQUFTLEVBQUUsYUFBYSxDQUFDLFVBQVUsRUFBRTtRQUNyQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1FBQ2xCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztRQUMxQixXQUFXO1FBQ1gsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1FBQ3RCLGdCQUFnQjtRQUNoQixpQkFBaUI7UUFDakIsS0FBSztRQUNMLE9BQU87S0FDUixDQUFDO0lBRUYsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdCwgaXNEZXZNb2RlLCBTaWduYWwsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb250ZW50ZnVsR3FsTGlrZVBhZ2luYXRlZCxcbiAgRHluTGlrZVBhZ2luYXRlZCxcbiAgR2dMaWtlUGFnaW5hdGVkLFxuICBOb3JtYWxpemVkUGFnaW5hdGlvbixcbiAgUGFnaW5hdGVkLFxufSBmcm9tICdAZXRobGV0ZS90eXBlcyc7XG5pbXBvcnQgeyBBbnlOZXdRdWVyeSwgUXVlcnksIFF1ZXJ5QXJncywgUmVxdWVzdEFyZ3MsIFJlc3BvbnNlVHlwZSB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgQW55UXVlcnlDcmVhdG9yLCBRdWVyeUFyZ3NPZiwgUXVlcnlDcmVhdG9yIH0gZnJvbSAnLi9xdWVyeS1jcmVhdG9yJztcbmltcG9ydCB7IFF1ZXJ5RXJyb3JSZXNwb25zZSB9IGZyb20gJy4vcXVlcnktZXJyb3ItcmVzcG9uc2UnO1xuaW1wb3J0IHtcbiAgcGFnZWRRdWVyeVN0YWNrTmV4dFBhZ2VDYWxsZWRXaXRob3V0UHJldmlvdXNQYWdlLFxuICBwYWdlZFF1ZXJ5U3RhY2tQYWdlQmlnZ2VyVGhhblRvdGFsUGFnZXMsXG4gIHBhZ2VkUXVlcnlTdGFja1ByZXZpb3VzUGFnZUNhbGxlZEJ1dEFscmVhZHlBdEZpcnN0UGFnZSxcbiAgcXVlcnlTdGFja1RvdGFsUXVlcmllc0FuZEV4cGVjdGVkUXVlcmllc01pc21hdGNoLFxufSBmcm9tICcuL3F1ZXJ5LWVycm9ycyc7XG5pbXBvcnQgeyBRdWVyeUZlYXR1cmUgfSBmcm9tICcuL3F1ZXJ5LWZlYXR1cmVzJztcbmltcG9ydCB7IGNyZWF0ZVF1ZXJ5U3RhY2ssIHRyYW5zZm9ybUFycmF5UmVzcG9uc2UgfSBmcm9tICcuL3F1ZXJ5LXN0YWNrJztcbmltcG9ydCB7IHNob3VsZFJldHJ5UmVxdWVzdCB9IGZyb20gJy4vcXVlcnktdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXRobGV0ZVBhZ2luYXRpb25BZGFwdGVyID0gPFQ+KHJlc3BvbnNlOiBQYWdpbmF0ZWQ8VD4pID0+IHtcbiAgY29uc3QgcGFnaW5hdGlvbjogTm9ybWFsaXplZFBhZ2luYXRpb248VD4gPSB7XG4gICAgaXRlbXM6IHJlc3BvbnNlLml0ZW1zLFxuICAgIHRvdGFsUGFnZXM6IHJlc3BvbnNlLnRvdGFsUGFnZUNvdW50LFxuICAgIGN1cnJlbnRQYWdlOiByZXNwb25zZS5jdXJyZW50UGFnZSxcbiAgICBpdGVtc1BlclBhZ2U6IHJlc3BvbnNlLml0ZW1zUGVyUGFnZSxcbiAgICB0b3RhbEhpdHM6IHJlc3BvbnNlLnRvdGFsSGl0cyxcbiAgfTtcblxuICByZXR1cm4gcGFnaW5hdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZ0xpa2VQYWdpbmF0aW9uQWRhcHRlciA9IDxUPihyZXNwb25zZTogR2dMaWtlUGFnaW5hdGVkPFQ+KSA9PiB7XG4gIGNvbnN0IHBhZ2luYXRpb246IE5vcm1hbGl6ZWRQYWdpbmF0aW9uPFQ+ID0ge1xuICAgIGl0ZW1zOiByZXNwb25zZS5pdGVtcyxcbiAgICB0b3RhbFBhZ2VzOiByZXNwb25zZS50b3RhbFBhZ2VDb3VudCxcbiAgICBjdXJyZW50UGFnZTogcmVzcG9uc2UuY3VycmVudFBhZ2UsXG4gICAgaXRlbXNQZXJQYWdlOiByZXNwb25zZS5pdGVtc1BlclBhZ2UsXG4gICAgdG90YWxIaXRzOiByZXNwb25zZS50b3RhbEhpdHMsXG4gIH07XG5cbiAgcmV0dXJuIHBhZ2luYXRpb247XG59O1xuXG5leHBvcnQgY29uc3QgZHluTGlrZVBhZ2luYXRpb25BZGFwdGVyID0gPFQ+KHJlc3BvbnNlOiBEeW5MaWtlUGFnaW5hdGVkPFQ+KSA9PiB7XG4gIGNvbnN0IHBhZ2luYXRpb246IE5vcm1hbGl6ZWRQYWdpbmF0aW9uPFQ+ID0ge1xuICAgIGl0ZW1zOiByZXNwb25zZS5pdGVtcyxcbiAgICB0b3RhbFBhZ2VzOiByZXNwb25zZS50b3RhbFBhZ2VzLFxuICAgIGN1cnJlbnRQYWdlOiByZXNwb25zZS5jdXJyZW50UGFnZSxcbiAgICBpdGVtc1BlclBhZ2U6IHJlc3BvbnNlLmxpbWl0LFxuICAgIHRvdGFsSGl0czogcmVzcG9uc2UudG90YWxIaXRzLFxuICB9O1xuXG4gIHJldHVybiBwYWdpbmF0aW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnRlbnRmdWxHcWxMaWtlUGFnaW5hdGlvbkFkYXB0ZXIgPSA8VD4ocmVzcG9uc2U6IENvbnRlbnRmdWxHcWxMaWtlUGFnaW5hdGVkPFQ+KSA9PiB7XG4gIGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLm1heChNYXRoLmNlaWwocmVzcG9uc2UudG90YWwgLyByZXNwb25zZS5saW1pdCksIDEpOyAvLyBJZiB0aGVyZSBhcmUgbm8gaXRlbXMsIHRoZXJlIGlzIHN0aWxsIG9uZSBwYWdlXG4gIGNvbnN0IGN1cnJlbnRQYWdlID0gTWF0aC5tYXgoTWF0aC5jZWlsKHJlc3BvbnNlLnNraXAgLyByZXNwb25zZS5saW1pdCkgKyAxLCAxKTtcblxuICBjb25zdCBwYWdpbmF0aW9uOiBOb3JtYWxpemVkUGFnaW5hdGlvbjxUPiA9IHtcbiAgICBpdGVtczogcmVzcG9uc2UuaXRlbXMsXG4gICAgdG90YWxQYWdlcyxcbiAgICBjdXJyZW50UGFnZSxcbiAgICBpdGVtc1BlclBhZ2U6IHJlc3BvbnNlLmxpbWl0LFxuICAgIHRvdGFsSGl0czogcmVzcG9uc2UudG90YWwsXG4gIH07XG5cbiAgcmV0dXJuIHBhZ2luYXRpb247XG59O1xuXG5leHBvcnQgY29uc3QgZmFrZVBhZ2luYXRpb25BZGFwdGVyID0gKHRvdGFsSGl0cyA9IDEwKSA9PiB7XG4gIHJldHVybiA8VD4ocmVzcG9uc2U6IFQpID0+IHtcbiAgICBjb25zdCBwYWdpbmF0aW9uOiBOb3JtYWxpemVkUGFnaW5hdGlvbjxUPiA9IHtcbiAgICAgIGl0ZW1zOiBbcmVzcG9uc2VdLFxuICAgICAgdG90YWxQYWdlczogdG90YWxIaXRzLFxuICAgICAgY3VycmVudFBhZ2U6IDEsXG4gICAgICBpdGVtc1BlclBhZ2U6IDEsXG4gICAgICB0b3RhbEhpdHMsXG4gICAgfTtcblxuICAgIHJldHVybiBwYWdpbmF0aW9uO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgQ3JlYXRlUGFnZWRRdWVyeVN0YWNrT3B0aW9uczxcbiAgVEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFROb3JtUGFnaW5hdGlvbiBleHRlbmRzIE5vcm1hbGl6ZWRQYWdpbmF0aW9uPHVua25vd24+LFxuPiA9IHtcbiAgLyoqXG4gICAqIFRoZSBub3JtYWxpemVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIG5vcm1hbGl6ZSB0aGUgcmVzcG9uc2UgdG8gYSBmb3JtYXQgdGhhdCB0aGUgcGFnZWQgcXVlcnkgY2FuIHVuZGVyc3RhbmQuXG4gICAqXG4gICAqIFRoZXJlIGFyZSBzb21lIGJ1aWx0LWluIG5vcm1hbGl6ZXJzIHRoYXQgY2FuIGJlIHVzZWQ6XG4gICAqIC0gYGV0aGxldGVQYWdpbmF0aW9uQWRhcHRlcmBcbiAgICogLSBgZ2dMaWtlUGFnaW5hdGlvbkFkYXB0ZXJgXG4gICAqIC0gYGR5bkxpa2VQYWdpbmF0aW9uQWRhcHRlcmBcbiAgICogLSBgY29udGVudGZ1bEdxbExpa2VQYWdpbmF0aW9uQWRhcHRlcmBcbiAgICogLSBgZmFrZVBhZ2luYXRpb25BZGFwdGVyYCAoZm9yIHRlc3RpbmcgcHVycG9zZXMpXG4gICAqXG4gICAqIEBwYXJhbSBjdXJyZW50UmVzcG9uc2UgVGhlIGN1cnJlbnQgcmVzcG9uc2UgdGhhdCB3YXMgZmV0Y2hlZC5cbiAgICogQHBhcmFtIGFsbFJlc3BvbnNlcyBBbGwgcmVzcG9uc2VzIHRoYXQgd2VyZSBmZXRjaGVkIHRpbGwgbm93IGluY2x1ZGluZyB0aGUgY3VycmVudCByZXNwb25zZSBhbmQgcGFnaW5hdGlvbi5cbiAgICovXG4gIHJlc3BvbnNlTm9ybWFsaXplcjogKFxuICAgIGN1cnJlbnRSZXNwb25zZTogUmVzcG9uc2VUeXBlPFRBcmdzPixcbiAgICBhbGxSZXNwb25zZXM6IE5vbk51bGxhYmxlPFJlc3BvbnNlVHlwZTxUQXJncz4+W10sXG4gICkgPT4gVE5vcm1QYWdpbmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcXVlcnkgY3JlYXRvciBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIHBhZ2VkIHF1ZXJ5LlxuICAgKi9cbiAgcXVlcnlDcmVhdG9yOiBRdWVyeUNyZWF0b3I8VEFyZ3M+O1xuXG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHRvIGNyZWF0ZSB0aGUgcXVlcnkuXG4gICAqIFRoZSBjdXJyZW50IHBhZ2Ugd2lsbCBiZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHRyZWF0ZWQgbGlrZSBhIGNvbXB1dGVkIGZ1bmN0aW9uLiBJdCByZWFjdHMgdG8gc2lnbmFsIGNoYW5nZXMuXG4gICAqIElmIGEgc2lnbmFsIGNoYW5nZXMsIHRoZSBwYWdlZCBxdWVyeSB3aWxsIGJlIHJlc2V0IHRvIHRoZSBpbml0aWFsIHBhZ2UuXG4gICAqXG4gICAqIEBleGFtcGxlIChwYWdlKSA9PiAoeyBxdWVyeVBhcmFtczogeyBwYWdlLCBsaW1pdDoyMCB9IH0pLFxuICAgKlxuICAgKiBAcGFyYW0gcGFnZSBUaGUgcGFnZSB0byBmZXRjaCBuZXh0LiAqKkRvIG5vdCBtb2RpZnkgdGhpcyBhcmd1bWVudC4qKlxuICAgKiBAcGFyYW0gYWxsUmVzcG9uc2VzIEFsbCByZXNwb25zZXMgdGhhdCB3ZXJlIGZldGNoZWQgdGlsbCBub3cgaW5jbHVkaW5nIHBhZ2luYXRpb24uXG4gICAqL1xuICBhcmdzOiAocGFnZTogbnVtYmVyLCBhbGxSZXNwb25zZXM6IE5vbk51bGxhYmxlPFJlc3BvbnNlVHlwZTxUQXJncz4+W10pID0+IFJlcXVlc3RBcmdzPFRBcmdzPiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBhbGwgcXVlcmllcyBpbiB0aGUgc3RhY2suXG4gICAqXG4gICAqIEB0aHJvd3MgSWYgdGhlIGB3aXRoQXJnc2AgZmVhdHVyZSBpcyB1c2VkLiBUaGlzIGZlYXR1cmUgaXMgaW50ZXJuYWxseSB1c2VkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBEdWUgdG8gbGltaXRhdGlvbnMgaW4gVHlwZVNjcmlwdCwgeW91IGhhdmUgdG8gbWFudWFsbHkgYWRkIHRoZSBuZWVkZWQgZ2VuZXJpYyB0eXBlcyBpZiBuZWVkZWQuXG4gICAqIGZlYXR1cmVzOiBbRS53aXRoU3VjY2Vzc0hhbmRsaW5nPEdldFBvc3RRdWVyeUFyZ3M+KHsgaGFuZGxlcjogKHBvc3QpID0+IGNvbnNvbGUubG9nKHBvc3QudGl0bGUpIH0pXVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBJZiB0eXBpbmdzIGFyZSBub3QgbmVlZGVkLCB5b3UgY2FuIHVzZSB0aGUgZmVhdHVyZSB3aXRob3V0IGdlbmVyaWNzLlxuICAgKiBmZWF0dXJlczogW0Uud2l0aFBvbGxpbmcoeyBpbnRlcnZhbDogNTAwMCB9KV1cbiAgICovXG4gIGZlYXR1cmVzPzogUXVlcnlGZWF0dXJlPGFueT5bXTtcblxuICAvKipcbiAgICogVGhlIHBhZ2UgdG8gc3RhcnQgdGhpcyBwYWdlZCBxdWVyeSBmcm9tLlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBpbml0aWFsUGFnZT86IG51bWJlcjtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgbm8gcXVlcmllcyB3aWxsIGJlIGV4ZWN1dGVkIHdoaWxlIHRoZSBwYWdlZCBxdWVyeSBpcyBsb2FkaW5nLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZCB0aGUgY3VycmVudCByZXNwb25zZSB0byBiZSB1c2VkIGluIHRoZSBuZXh0IHF1ZXJ5LlxuICAgKi9cbiAgYmxvY2tFeGVjdXRpb25EdXJpbmdMb2FkaW5nPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFBhZ2VkUXVlcnlTdGFja1Jlc2V0T3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIFRoZSBwYWdlIHRvIHJlc2V0IHRoaXMgcGFnZWQgcXVlcnkgdG8uXG4gICAqIFRoaXMgd2lsbCBjbGVhciBldmVyeXRoaW5nIGFuZCBzdGFydCBmcm9tIHRoaXMgcGFnZS5cbiAgICogQGRlZmF1bHQgMSAvLyBvciB0aGUgdmFsdWUgcGFzc2VkIGluIHRoZSBgaW5pdGlhbFBhZ2VgIG9wdGlvbiB3aGVuIGNyZWF0aW5nIHRoZSBwYWdlZCBxdWVyeS5cbiAgICovXG4gIGluaXRpYWxQYWdlPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgUGFnZWRRdWVyeVN0YWNrRXhlY3V0ZU9wdGlvbnM8VE5vcm1QYWdpbmF0aW9uIGV4dGVuZHMgTm9ybWFsaXplZFBhZ2luYXRpb248dW5rbm93bj4+ID0ge1xuICAvKipcbiAgICogSWYgcHJvdmlkZWQsIG9ubHkgdGhlIHF1ZXJpZXMgdGhhdCBtYXRjaCB0aGUgY29uZGl0aW9uIHdpbGwgYmUgZXhlY3V0ZWQuXG4gICAqIFRoaXMgd2lsbCBhbHNvIGV4ZWN1dGUgdGhlIHByZXZpb3VzIGFuZCBuZXh0IHF1ZXJ5IHRvIHRoZSBvbmUgdGhhdCBtYXRjaGVkIHRoZSBjb25kaXRpb24uXG4gICAqIElmIG5vdCBwcm92aWRlZCwgYWxsIHF1ZXJpZXMgd2lsbCBiZSBleGVjdXRlZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogbXlQYWdlZFF1ZXJ5LmV4ZWN1dGUoeyB3aGVyZTogKGl0ZW0pID0+IGl0ZW0uaWQgPT09IDQgfSk7XG4gICAqL1xuICB3aGVyZT86IChpdGVtOiBUTm9ybVBhZ2luYXRpb25bJ2l0ZW1zJ11bbnVtYmVyXSwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFROb3JtUGFnaW5hdGlvblsnaXRlbXMnXSkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgdGhlIGNhY2hlIHdpbGwgYmUgdXNlZCAoaWYgbm90IGV4cGlyZWQpIGFuZCB0aGUgcmVxdWVzdCB3aWxsIG5vdCBiZSBtYWRlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYWxsb3dDYWNoZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBQYWdlZFF1ZXJ5U3RhY2tEaXJlY3Rpb24gPSAnbmV4dCcgfCAncHJldmlvdXMnO1xuXG5leHBvcnQgdHlwZSBBbnlQYWdlZFF1ZXJ5U3RhY2sgPSBQYWdlZFF1ZXJ5U3RhY2s8QW55TmV3UXVlcnksIE5vcm1hbGl6ZWRQYWdpbmF0aW9uPHVua25vd24+PjtcblxuZXhwb3J0IHR5cGUgUGFnZWRRdWVyeVN0YWNrPFRRdWVyeSBleHRlbmRzIEFueU5ld1F1ZXJ5LCBUTm9ybVBhZ2luYXRpb24gZXh0ZW5kcyBOb3JtYWxpemVkUGFnaW5hdGlvbjx1bmtub3duPj4gPSB7XG4gIC8qKlxuICAgKiBUaGUgcGFnaW5hdGlvbiBvZiB0aGUgbGFzdCBleGVjdXRlZCBxdWVyeSBpbiB0aGUgcGFnZWQgcXVlcnkuXG4gICAqL1xuICBtYXhQYWdpbmF0aW9uOiBTaWduYWw8VE5vcm1QYWdpbmF0aW9uIHwgbnVsbD47XG5cbiAgLyoqXG4gICAqIFRoZSBwYWdpbmF0aW9uIG9mIHRoZSBmaXJzdCBleGVjdXRlZCBxdWVyeSBpbiB0aGUgcGFnZWQgcXVlcnkuXG4gICAqL1xuICBtaW5QYWdpbmF0aW9uOiBTaWduYWw8VE5vcm1QYWdpbmF0aW9uIHwgbnVsbD47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGxhc3QgcGFnZSBvZiB0aGUgcGFnZWQgcXVlcnkgaXMgbG9hZGVkIG9yIG5vdC5cbiAgICovXG4gIGlzTGFzdFBhZ2VMb2FkZWQ6IFNpZ25hbDxib29sZWFuPjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgcGFnZWQgcXVlcnkgaXMgbG9hZGVkIG9yIG5vdC5cbiAgICovXG4gIGlzRmlyc3RQYWdlTG9hZGVkOiBTaWduYWw8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIHByZXZpb3VzIHBhZ2Ugb2YgdGhlIHBhZ2VkIHF1ZXJ5LlxuICAgKlxuICAgKiBAdGhyb3dzIElmIHRoZSBwYWdlZCBxdWVyeSBpcyBhbHJlYWR5IGF0IHRoZSBmaXJzdCBwYWdlLlxuICAgKi9cbiAgZmV0Y2hQcmV2aW91c1BhZ2U6ICgpID0+IFRRdWVyeSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIG5leHQgcGFnZSBvZiB0aGUgcGFnZWQgcXVlcnkuXG4gICAqXG4gICAqIEB0aHJvd3MgSWYgdGhlIHBhZ2VkIHF1ZXJ5IGlzIGFscmVhZHkgYXQgdGhlIGxhc3QgcGFnZS5cbiAgICovXG4gIGZldGNoTmV4dFBhZ2U6ICgpID0+IFRRdWVyeSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHByZXZpb3VzIHBhZ2UgY2FuIGJlIGZldGNoZWQgb3Igbm90LlxuICAgKlxuICAgKiBUaGlzIHdpbGwgYmUgZmFsc2UgaWYgdGhlIHBhZ2VkIHF1ZXJ5IGlzIGFscmVhZHkgYXQgdGhlIGZpcnN0IHBhZ2Ugb3IgaWYgdGhlIHBhZ2VkIHF1ZXJ5IGlzIGxvYWRpbmcuXG4gICAqL1xuICBjYW5GZXRjaFByZXZpb3VzUGFnZTogU2lnbmFsPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBuZXh0IHBhZ2UgY2FuIGJlIGZldGNoZWQgb3Igbm90LlxuICAgKlxuICAgKiBUaGlzIHdpbGwgYmUgZmFsc2UgaWYgdGhlIHBhZ2VkIHF1ZXJ5IGlzIGFscmVhZHkgYXQgdGhlIGxhc3QgcGFnZSBvciBpZiB0aGUgcGFnZWQgcXVlcnkgaXMgbG9hZGluZy5cbiAgICovXG4gIGNhbkZldGNoTmV4dFBhZ2U6IFNpZ25hbDxib29sZWFuPjtcblxuICAvKipcbiAgICogVGhlIGl0ZW1zIG9mIHRoZSBwYWdlZCBxdWVyeS5cbiAgICovXG4gIGl0ZW1zOiBTaWduYWw8VE5vcm1QYWdpbmF0aW9uWydpdGVtcyddPjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcGFnZWQgcXVlcnkgaXMgbG9hZGluZyBvciBub3QuXG4gICAqL1xuICBsb2FkaW5nOiBTaWduYWw8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFRoZSBlcnJvciB0aGF0IG9jY3VycmVkIGR1cmluZyB0aGUgbGFzdCBleGVjdXRpb24gb2YgdGhlIHBhZ2VkIHF1ZXJ5LlxuICAgKi9cbiAgZXJyb3I6IFNpZ25hbDxRdWVyeUVycm9yUmVzcG9uc2UgfCBudWxsPjtcblxuICAvKipcbiAgICogVGhlIGxhc3QgcXVlcnkgZXhlY3V0ZWQgaW4gdGhlIHBhZ2VkIHF1ZXJ5LlxuICAgKi9cbiAgbGFzdFF1ZXJ5OiBTaWduYWw8UXVlcnk8UXVlcnlBcmdzT2Y8VFF1ZXJ5Pj4gfCBudWxsPjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcGFnZWQgcXVlcnkgaXMgb24gaXRzIGZpcnN0IGxvYWQgb3Igbm90LlxuICAgKi9cbiAgaXNGaXJzdExvYWQ6IFNpZ25hbDxib29sZWFuPjtcblxuICAvKipcbiAgICogVGhlIHF1ZXJpZXMgaW4gdGhlIHBhZ2VkIHF1ZXJ5IHN0YWNrLlxuICAgKi9cbiAgcXVlcmllczogU2lnbmFsPFRRdWVyeVtdPjtcblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBwYWdlZCBxdWVyeSB0byB0aGUgaW5pdGlhbCBwYWdlLlxuICAgKi9cbiAgcmVzZXQ6IChyZXNldE9wdGlvbnM/OiBQYWdlZFF1ZXJ5U3RhY2tSZXNldE9wdGlvbnMpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBwYWdlZCBxdWVyeS5cbiAgICovXG4gIGV4ZWN1dGU6IChvcHRpb25zPzogUGFnZWRRdWVyeVN0YWNrRXhlY3V0ZU9wdGlvbnM8VE5vcm1QYWdpbmF0aW9uPikgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgZGlyZWN0aW9uIG9mIHRoZSBwYWdlZCBxdWVyeS5cbiAgICovXG4gIGRpcmVjdGlvbjogU2lnbmFsPFBhZ2VkUXVlcnlTdGFja0RpcmVjdGlvbj47XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUGFnZWRRdWVyeVN0YWNrID0gPFxuICBUQ3JlYXRvciBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvcixcbiAgVEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3NPZjxUQ3JlYXRvcj4sXG4gIFROb3JtUGFnaW5hdGlvbiBleHRlbmRzIE5vcm1hbGl6ZWRQYWdpbmF0aW9uPHVua25vd24+LFxuPihcbiAgb3B0aW9uczogQ3JlYXRlUGFnZWRRdWVyeVN0YWNrT3B0aW9uczxUQXJncywgVE5vcm1QYWdpbmF0aW9uPixcbikgPT4ge1xuICBjb25zdCB7IHJlc3BvbnNlTm9ybWFsaXplciwgcXVlcnlDcmVhdG9yLCBmZWF0dXJlcyB9ID0gb3B0aW9ucztcblxuICBjb25zdCBjdXJyZW50UGFnZUFyZ3MgPSBzaWduYWw8UmVxdWVzdEFyZ3M8VEFyZ3M+IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGluaXRpYWxQYWdlID0gc2lnbmFsKG9wdGlvbnMuaW5pdGlhbFBhZ2UgPz8gMSk7XG4gIGNvbnN0IGxvYWRlZE1pblBhZ2UgPSBzaWduYWwoaW5pdGlhbFBhZ2UoKSk7XG4gIGNvbnN0IGxvYWRlZE1heFBhZ2UgPSBzaWduYWwoaW5pdGlhbFBhZ2UoKSk7XG4gIGNvbnN0IGxhc3RSZXNldFRpbWVzdGFtcCA9IHNpZ25hbChEYXRlLm5vdygpKTtcblxuICBjb25zdCBwYWdlRGlyZWN0aW9uID0gc2lnbmFsPFBhZ2VkUXVlcnlTdGFja0RpcmVjdGlvbj4oJ25leHQnKTtcblxuICBjb25zdCBzdGFjayA9IGNyZWF0ZVF1ZXJ5U3RhY2soe1xuICAgIGFyZ3M6ICgpID0+IG51bGwsXG4gICAgcXVlcnlDcmVhdG9yLFxuICAgIGFwcGVuZDogdHJ1ZSxcbiAgICBmZWF0dXJlcyxcbiAgICBhcHBlbmRGbjogKG9sZFF1ZXJpZXMsIG5ld1F1ZXJpZXMpID0+IHtcbiAgICAgIGNvbnN0IG5ld1F1ZXJ5ID0gbmV3UXVlcmllc1swXTtcbiAgICAgIGNvbnN0IGRpciA9IHBhZ2VEaXJlY3Rpb24oKTtcblxuICAgICAgaWYgKCFuZXdRdWVyeSkge1xuICAgICAgICBjb25zdCBsYXN0UXVlcnkgPSBvbGRRdWVyaWVzW29sZFF1ZXJpZXMubGVuZ3RoIC0gMV0gPz8gbnVsbDtcbiAgICAgICAgcmV0dXJuIHsgcXVlcmllczogb2xkUXVlcmllcywgbGFzdFF1ZXJ5IH07XG4gICAgICB9IGVsc2UgaWYgKGRpciA9PT0gJ3ByZXZpb3VzJykge1xuICAgICAgICByZXR1cm4geyBxdWVyaWVzOiBbbmV3UXVlcnksIC4uLm9sZFF1ZXJpZXNdLCBsYXN0UXVlcnk6IG5ld1F1ZXJ5IH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geyBxdWVyaWVzOiBbLi4ub2xkUXVlcmllcywgbmV3UXVlcnldLCBsYXN0UXVlcnk6IG5ld1F1ZXJ5IH07XG4gICAgICB9XG4gICAgfSxcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybUFycmF5UmVzcG9uc2UsXG4gIH0pO1xuXG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgbGFzdFJlc2V0VGltZXN0YW1wKCk7XG5cbiAgICBjb25zdCBhcmdzID0gb3B0aW9ucy5hcmdzKGluaXRpYWxQYWdlKCksIFtdKTtcblxuICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICBzdGFjay5jbGVhcigpO1xuICAgICAgY3VycmVudFBhZ2VBcmdzLnNldChhcmdzKTtcbiAgICAgIGxvYWRlZE1pblBhZ2Uuc2V0KGluaXRpYWxQYWdlKCkpO1xuICAgICAgbG9hZGVkTWF4UGFnZS5zZXQoaW5pdGlhbFBhZ2UoKSk7XG4gICAgICBzdGFjay5zdWJ0bGUucnVuV2l0aEFyZ3MoYXJncyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IG1heFBhZ2luYXRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gc3RhY2subGFzdFF1ZXJ5KCk/LnJlc3BvbnNlKCk7XG4gICAgY29uc3QgYWxsID0gc3RhY2sucmVzcG9uc2UoKTtcblxuICAgIGlmICghcmVzKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiByZXNwb25zZU5vcm1hbGl6ZXIocmVzLCBhbGwpO1xuICB9KTtcblxuICBjb25zdCBtaW5QYWdpbmF0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHJlcyA9IHN0YWNrLmZpcnN0UXVlcnkoKT8ucmVzcG9uc2UoKTtcbiAgICBjb25zdCBhbGwgPSBzdGFjay5yZXNwb25zZSgpO1xuXG4gICAgaWYgKCFyZXMpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlTm9ybWFsaXplcihyZXMsIGFsbCk7XG4gIH0pO1xuXG4gIGNvbnN0IGlzRmlyc3RQYWdlTG9hZGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG1pbiA9IG1pblBhZ2luYXRpb24oKTtcblxuICAgIHJldHVybiBtaW4gPyBsb2FkZWRNaW5QYWdlKCkgPT09IG1pbi5jdXJyZW50UGFnZSA6IGZhbHNlO1xuICB9KTtcblxuICBjb25zdCBpc0xhc3RQYWdlTG9hZGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG1heCA9IG1heFBhZ2luYXRpb24oKTtcblxuICAgIHJldHVybiBtYXggPyBsb2FkZWRNYXhQYWdlKCkgPT09IG1heC50b3RhbFBhZ2VzIDogZmFsc2U7XG4gIH0pO1xuXG4gIGNvbnN0IGZldGNoUHJldmlvdXNQYWdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHBhZ2UgPSBsb2FkZWRNaW5QYWdlKCkgLSAxO1xuICAgIGNvbnN0IGFsbFJlc3BvbnNlcyA9IHN0YWNrLnJlc3BvbnNlKCk7XG5cbiAgICBpZiAoIWNhbkZldGNoTmV3UGFnZShwYWdlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHBhZ2UgPCAxKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgdGhyb3cgcGFnZWRRdWVyeVN0YWNrUHJldmlvdXNQYWdlQ2FsbGVkQnV0QWxyZWFkeUF0Rmlyc3RQYWdlKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGN1cnJlbnRQYWdlQXJncy5zZXQob3B0aW9ucy5hcmdzKHBhZ2UsIGFsbFJlc3BvbnNlcykpO1xuICAgIGxvYWRlZE1pblBhZ2Uuc2V0KHBhZ2UpO1xuICAgIHBhZ2VEaXJlY3Rpb24uc2V0KCdwcmV2aW91cycpO1xuXG4gICAgcmV0dXJuIHN0YWNrLnN1YnRsZS5ydW5XaXRoQXJncyhjdXJyZW50UGFnZUFyZ3MoKSk7XG4gIH07XG5cbiAgY29uc3QgZmV0Y2hOZXh0UGFnZSA9ICgpID0+IHtcbiAgICBjb25zdCBwYWdlID0gbG9hZGVkTWF4UGFnZSgpICsgMTtcbiAgICBjb25zdCBjdXJyZW50UGFnaW5hdGlvbiA9IG1heFBhZ2luYXRpb24oKTtcbiAgICBjb25zdCBhbGxSZXNwb25zZXMgPSBzdGFjay5yZXNwb25zZSgpO1xuXG4gICAgaWYgKCFjYW5GZXRjaE5ld1BhZ2UocGFnZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghY3VycmVudFBhZ2luYXRpb24pIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICB0aHJvdyBwYWdlZFF1ZXJ5U3RhY2tOZXh0UGFnZUNhbGxlZFdpdGhvdXRQcmV2aW91c1BhZ2UoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHBhZ2UgPiBjdXJyZW50UGFnaW5hdGlvbi50b3RhbFBhZ2VzKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgdGhyb3cgcGFnZWRRdWVyeVN0YWNrUGFnZUJpZ2dlclRoYW5Ub3RhbFBhZ2VzKHBhZ2UsIGN1cnJlbnRQYWdpbmF0aW9uLnRvdGFsUGFnZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjdXJyZW50UGFnZUFyZ3Muc2V0KG9wdGlvbnMuYXJncyhwYWdlLCBhbGxSZXNwb25zZXMpKTtcbiAgICBsb2FkZWRNYXhQYWdlLnNldChwYWdlKTtcbiAgICBwYWdlRGlyZWN0aW9uLnNldCgnbmV4dCcpO1xuXG4gICAgcmV0dXJuIHN0YWNrLnN1YnRsZS5ydW5XaXRoQXJncyhjdXJyZW50UGFnZUFyZ3MoKSk7XG4gIH07XG5cbiAgY29uc3QgY2FuRmV0Y2hOZXdQYWdlID0gKHBhZ2VUb0xvYWQ6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRNYXhQYWdpbmF0aW9uID0gbWF4UGFnaW5hdGlvbigpO1xuICAgIGNvbnN0IGN1cnJlbnRNaW5QYWdpbmF0aW9uID0gbWluUGFnaW5hdGlvbigpO1xuXG4gICAgaWYgKCFjdXJyZW50TWF4UGFnaW5hdGlvbiB8fCAhY3VycmVudE1pblBhZ2luYXRpb24pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGlzT25lTWludXNNaW5QYWdpbmF0aW9uID0gcGFnZVRvTG9hZCA9PT0gY3VycmVudE1pblBhZ2luYXRpb24uY3VycmVudFBhZ2UgLSAxO1xuICAgIGNvbnN0IGlzT25lUGx1c01heFBhZ2luYXRpb24gPSBwYWdlVG9Mb2FkID09PSBjdXJyZW50TWF4UGFnaW5hdGlvbi5jdXJyZW50UGFnZSArIDE7XG5cbiAgICBpZiAoIW9wdGlvbnMuYmxvY2tFeGVjdXRpb25EdXJpbmdMb2FkaW5nKSB7XG4gICAgICBjb25zdCB0b3RhbFF1ZXJpZXMgPSBzdGFjay5xdWVyaWVzKCkubGVuZ3RoO1xuICAgICAgY29uc3QgZXhwZWN0ZWRRdWVyaWVzID0gTWF0aC5hYnMobG9hZGVkTWF4UGFnZSgpIC0gbG9hZGVkTWluUGFnZSgpKSArIDE7XG5cbiAgICAgIGlmICh0b3RhbFF1ZXJpZXMgIT09IGV4cGVjdGVkUXVlcmllcykge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICB0aHJvdyBxdWVyeVN0YWNrVG90YWxRdWVyaWVzQW5kRXhwZWN0ZWRRdWVyaWVzTWlzbWF0Y2godG90YWxRdWVyaWVzLCBleHBlY3RlZFF1ZXJpZXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGFjay5sb2FkaW5nKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNPbmVNaW51c01pblBhZ2luYXRpb24gfHwgaXNPbmVQbHVzTWF4UGFnaW5hdGlvbjtcbiAgfTtcblxuICBjb25zdCByZXNldCA9IChyZXNldE9wdGlvbnM/OiBQYWdlZFF1ZXJ5U3RhY2tSZXNldE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBwYWdlID0gcmVzZXRPcHRpb25zPy5pbml0aWFsUGFnZSA/PyBpbml0aWFsUGFnZSgpO1xuXG4gICAgaW5pdGlhbFBhZ2Uuc2V0KHBhZ2UpO1xuICAgIHBhZ2VEaXJlY3Rpb24uc2V0KCduZXh0Jyk7XG4gICAgbGFzdFJlc2V0VGltZXN0YW1wLnNldChEYXRlLm5vdygpKTtcbiAgfTtcblxuICBjb25zdCBjYW5GZXRjaFByZXZpb3VzUGFnZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50TWluUGFnaW5hdGlvbiA9IG1pblBhZ2luYXRpb24oKTtcblxuICAgIGlmICghY3VycmVudE1pblBhZ2luYXRpb24pIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBsb2FkZWRNaW5QYWdlKCkgPiAxO1xuICB9KTtcbiAgY29uc3QgY2FuRmV0Y2hOZXh0UGFnZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50TWF4UGFnaW5hdGlvbiA9IG1heFBhZ2luYXRpb24oKTtcblxuICAgIHJldHVybiBjdXJyZW50TWF4UGFnaW5hdGlvbiA/IGxvYWRlZE1heFBhZ2UoKSA8IGN1cnJlbnRNYXhQYWdpbmF0aW9uLnRvdGFsUGFnZXMgOiBmYWxzZTtcbiAgfSk7XG5cbiAgY29uc3QgaXRlbXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gc3RhY2sucmVzcG9uc2UoKTtcbiAgICByZXR1cm4gcmVzLm1hcCgocikgPT4gcmVzcG9uc2VOb3JtYWxpemVyKHIsIHJlcykuaXRlbXMpLmZsYXQoKTtcbiAgfSk7XG5cbiAgY29uc3QgaXNGaXJzdExvYWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHN0YWNrLnF1ZXJpZXMoKS5sZW5ndGggPT09IDEgJiYgISFzdGFjay5sYXN0UXVlcnkoKT8ubG9hZGluZygpO1xuICB9KTtcblxuICBjb25zdCBleGVjdXRlID0gKG9wdGlvbnM/OiBQYWdlZFF1ZXJ5U3RhY2tFeGVjdXRlT3B0aW9uczxUQXJncz4pID0+IHtcbiAgICBjb25zdCB3aGVyZUZuID0gb3B0aW9ucz8ud2hlcmU7XG5cbiAgICBpZiAod2hlcmVGbikge1xuICAgICAgY29uc3QgcXVlcmllc1RvRXhlY3V0ZSA9IG5ldyBTZXQ8UXVlcnk8VEFyZ3M+PigpO1xuICAgICAgY29uc3QgYWxsID0gc3RhY2sucmVzcG9uc2UoKTtcblxuICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHF1ZXJ5XSBvZiBzdGFjay5xdWVyaWVzKCkuZW50cmllcygpKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHF1ZXJ5LnJlc3BvbnNlKCk7XG4gICAgICAgIGNvbnN0IGVyciA9IHF1ZXJ5LmVycm9yKCk7XG4gICAgICAgIGNvbnN0IGlzRXJyb3JlZEFuZENhbkJlUmV0cmllZCA9IGVyciAmJiBzaG91bGRSZXRyeVJlcXVlc3QoZXJyLnJhdyk7XG5cbiAgICAgICAgaWYgKGlzRXJyb3JlZEFuZENhbkJlUmV0cmllZCkge1xuICAgICAgICAgIHF1ZXJpZXNUb0V4ZWN1dGUuYWRkKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXMpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2VOb3JtYWxpemVyKHJlcywgYWxsKS5pdGVtcy5zb21lKChpdGVtLCBpLCBhKSA9PiB3aGVyZUZuKGl0ZW0sIGksIGEpKSkge1xuICAgICAgICAgICAgcXVlcmllc1RvRXhlY3V0ZS5hZGQocXVlcnkpO1xuXG4gICAgICAgICAgICAvLyBBbHNvIGV4ZWN1dGUgdGhlIHByZXZpb3VzIGFuZCBuZXh0IHF1ZXJ5IHRvIHRoZSBvbmUgdGhhdCBtYXRjaGVkIHRoZSBjb25kaXRpb24uXG5cbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgICBjb25zdCBwcmV2UXVlcnkgPSBzdGFjay5xdWVyaWVzKClbaW5kZXggLSAxXTtcblxuICAgICAgICAgICAgICBpZiAocHJldlF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgcXVlcmllc1RvRXhlY3V0ZS5hZGQocHJldlF1ZXJ5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IHN0YWNrLnF1ZXJpZXMoKS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRRdWVyeSA9IHN0YWNrLnF1ZXJpZXMoKVtpbmRleCArIDFdO1xuXG4gICAgICAgICAgICAgIGlmIChuZXh0UXVlcnkpIHtcbiAgICAgICAgICAgICAgICBxdWVyaWVzVG9FeGVjdXRlLmFkZChuZXh0UXVlcnkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgcXVlcnkgb2YgcXVlcmllc1RvRXhlY3V0ZSkge1xuICAgICAgICBxdWVyeS5leGVjdXRlKHsgb3B0aW9uczogeyBhbGxvd0NhY2hlOiBvcHRpb25zLmFsbG93Q2FjaGUgfSB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhY2suZXhlY3V0ZSh7IGFsbG93Q2FjaGU6IG9wdGlvbnM/LmFsbG93Q2FjaGUgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHBhZ2VkUXVlcnk6IFBhZ2VkUXVlcnlTdGFjazxRdWVyeTxUQXJncz4sIFROb3JtUGFnaW5hdGlvbj4gPSB7XG4gICAgbWF4UGFnaW5hdGlvbixcbiAgICBtaW5QYWdpbmF0aW9uLFxuICAgIGZldGNoUHJldmlvdXNQYWdlLFxuICAgIGZldGNoTmV4dFBhZ2UsXG4gICAgY2FuRmV0Y2hQcmV2aW91c1BhZ2UsXG4gICAgY2FuRmV0Y2hOZXh0UGFnZSxcbiAgICBpdGVtcyxcbiAgICBkaXJlY3Rpb246IHBhZ2VEaXJlY3Rpb24uYXNSZWFkb25seSgpLFxuICAgIGxvYWRpbmc6IHN0YWNrLmxvYWRpbmcsXG4gICAgZXJyb3I6IHN0YWNrLmVycm9yLFxuICAgIGxhc3RRdWVyeTogc3RhY2subGFzdFF1ZXJ5LFxuICAgIGlzRmlyc3RMb2FkLFxuICAgIHF1ZXJpZXM6IHN0YWNrLnF1ZXJpZXMsXG4gICAgaXNMYXN0UGFnZUxvYWRlZCxcbiAgICBpc0ZpcnN0UGFnZUxvYWRlZCxcbiAgICByZXNldCxcbiAgICBleGVjdXRlLFxuICB9O1xuXG4gIHJldHVybiBwYWdlZFF1ZXJ5O1xufTtcbiJdfQ==","import { HttpClient } from '@angular/common/http';\nimport { DestroyRef, EnvironmentInjector, ErrorHandler, Injector, createEnvironmentInjector, inject, ɵEffectScheduler, } from '@angular/core';\nexport const setupQueryDependencies = (options) => {\n const hostInjector = options.queryConfig?.injector ?? inject(Injector);\n const environmentInjector = options.queryConfig?.injector?.get(EnvironmentInjector) ?? hostInjector.get(EnvironmentInjector);\n const queryEnvironmentInjector = createEnvironmentInjector([], environmentInjector);\n const destroyRef = queryEnvironmentInjector.get(DestroyRef);\n const scopeDestroyRef = hostInjector.get(DestroyRef);\n const client = hostInjector.get(options.clientConfig.token);\n const effectScheduler = hostInjector.get(ɵEffectScheduler);\n const ngErrorHandler = hostInjector.get(ErrorHandler);\n const httpClient = hostInjector.get(HttpClient);\n const dependencies = {\n destroyRef,\n scopeDestroyRef,\n client,\n injector: queryEnvironmentInjector,\n effectScheduler,\n ngErrorHandler,\n httpClient,\n };\n // cleanup the environment injector when the scope (e.g. the component the query is in) is destroyed\n const scopeDestroyListener = scopeDestroyRef.onDestroy(() => {\n try {\n queryEnvironmentInjector.destroy();\n }\n catch {\n // ignore\n }\n });\n destroyRef.onDestroy(() => {\n // cleanup the scope destroy listener\n try {\n scopeDestroyListener();\n }\n catch {\n // ignore\n }\n });\n return dependencies;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZGVwZW5kZW5jaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9odHRwL3F1ZXJ5LWRlcGVuZGVuY2llcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUNMLFVBQVUsRUFDVixtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLFFBQVEsRUFDUix5QkFBeUIsRUFDekIsTUFBTSxFQUNOLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQWlDdkIsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxPQUFzQyxFQUFFLEVBQUU7SUFDL0UsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sbUJBQW1CLEdBQ3ZCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNuRyxNQUFNLHdCQUF3QixHQUFHLHlCQUF5QixDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sVUFBVSxHQUFHLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1RCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDM0QsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN0RCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWhELE1BQU0sWUFBWSxHQUFzQjtRQUN0QyxVQUFVO1FBQ1YsZUFBZTtRQUNmLE1BQU07UUFDTixRQUFRLEVBQUUsd0JBQXdCO1FBQ2xDLGVBQWU7UUFDZixjQUFjO1FBQ2QsVUFBVTtLQUNYLENBQUM7SUFFRixvR0FBb0c7SUFDcEcsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUMxRCxJQUFJLENBQUM7WUFDSCx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsU0FBUztRQUNYLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ3hCLHFDQUFxQztRQUNyQyxJQUFJLENBQUM7WUFDSCxvQkFBb0IsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxTQUFTO1FBQ1gsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gIERlc3Ryb3lSZWYsXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXG4gIEVycm9ySGFuZGxlcixcbiAgSW5qZWN0b3IsXG4gIGNyZWF0ZUVudmlyb25tZW50SW5qZWN0b3IsXG4gIGluamVjdCxcbiAgybVFZmZlY3RTY2hlZHVsZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQgfSBmcm9tICcuL3F1ZXJ5LWNsaWVudCc7XG5pbXBvcnQgeyBRdWVyeUNsaWVudENvbmZpZyB9IGZyb20gJy4vcXVlcnktY2xpZW50LWNvbmZpZyc7XG5pbXBvcnQgeyBRdWVyeUNvbmZpZyB9IGZyb20gJy4vcXVlcnktY3JlYXRvcic7XG5cbmV4cG9ydCB0eXBlIFNldHVwUXVlcnlEZXBlbmRlbmNpZXNPcHRpb25zID0ge1xuICBjbGllbnRDb25maWc6IFF1ZXJ5Q2xpZW50Q29uZmlnO1xuICBxdWVyeUNvbmZpZzogUXVlcnlDb25maWcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeURlcGVuZGVuY2llcyA9IHtcbiAgLyoqIFRoZSBkZXN0cm95IHJlZiBvZiB0aGUgcXVlcnkuICovXG4gIGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWY7XG5cbiAgLyoqIFRoZSBkZXN0cm95IHJlZiBvZiB0aGUgc2NvcGUgdGhlIHF1ZXJ5IGlzIGluIChlLmcuIGEgY29tcG9uZW50KSAqL1xuICBzY29wZURlc3Ryb3lSZWY6IERlc3Ryb3lSZWY7XG5cbiAgLyoqIFRoZSBxdWVyeSBjbGllbnQgKi9cbiAgY2xpZW50OiBRdWVyeUNsaWVudDtcblxuICAvKiogVGhlIGluamVjdG9yIG9mIHRoZSBxdWVyeSAqL1xuICBpbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcjtcblxuICAvKiogVGhlIGVmZmVjdCBzY2hlZHVsZXIgKi9cbiAgZWZmZWN0U2NoZWR1bGVyOiDJtUVmZmVjdFNjaGVkdWxlcjtcblxuICAvKiogVGhlIGVycm9yIGhhbmRsZXIgKi9cbiAgbmdFcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlcjtcblxuICAvKiogVGhlIGh0dHAgY2xpZW50ICovXG4gIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0dXBRdWVyeURlcGVuZGVuY2llcyA9IChvcHRpb25zOiBTZXR1cFF1ZXJ5RGVwZW5kZW5jaWVzT3B0aW9ucykgPT4ge1xuICBjb25zdCBob3N0SW5qZWN0b3IgPSBvcHRpb25zLnF1ZXJ5Q29uZmlnPy5pbmplY3RvciA/PyBpbmplY3QoSW5qZWN0b3IpO1xuICBjb25zdCBlbnZpcm9ubWVudEluamVjdG9yID1cbiAgICBvcHRpb25zLnF1ZXJ5Q29uZmlnPy5pbmplY3Rvcj8uZ2V0KEVudmlyb25tZW50SW5qZWN0b3IpID8/IGhvc3RJbmplY3Rvci5nZXQoRW52aXJvbm1lbnRJbmplY3Rvcik7XG4gIGNvbnN0IHF1ZXJ5RW52aXJvbm1lbnRJbmplY3RvciA9IGNyZWF0ZUVudmlyb25tZW50SW5qZWN0b3IoW10sIGVudmlyb25tZW50SW5qZWN0b3IpO1xuICBjb25zdCBkZXN0cm95UmVmID0gcXVlcnlFbnZpcm9ubWVudEluamVjdG9yLmdldChEZXN0cm95UmVmKTtcbiAgY29uc3Qgc2NvcGVEZXN0cm95UmVmID0gaG9zdEluamVjdG9yLmdldChEZXN0cm95UmVmKTtcbiAgY29uc3QgY2xpZW50ID0gaG9zdEluamVjdG9yLmdldChvcHRpb25zLmNsaWVudENvbmZpZy50b2tlbik7XG4gIGNvbnN0IGVmZmVjdFNjaGVkdWxlciA9IGhvc3RJbmplY3Rvci5nZXQoybVFZmZlY3RTY2hlZHVsZXIpO1xuICBjb25zdCBuZ0Vycm9ySGFuZGxlciA9IGhvc3RJbmplY3Rvci5nZXQoRXJyb3JIYW5kbGVyKTtcbiAgY29uc3QgaHR0cENsaWVudCA9IGhvc3RJbmplY3Rvci5nZXQoSHR0cENsaWVudCk7XG5cbiAgY29uc3QgZGVwZW5kZW5jaWVzOiBRdWVyeURlcGVuZGVuY2llcyA9IHtcbiAgICBkZXN0cm95UmVmLFxuICAgIHNjb3BlRGVzdHJveVJlZixcbiAgICBjbGllbnQsXG4gICAgaW5qZWN0b3I6IHF1ZXJ5RW52aXJvbm1lbnRJbmplY3RvcixcbiAgICBlZmZlY3RTY2hlZHVsZXIsXG4gICAgbmdFcnJvckhhbmRsZXIsXG4gICAgaHR0cENsaWVudCxcbiAgfTtcblxuICAvLyBjbGVhbnVwIHRoZSBlbnZpcm9ubWVudCBpbmplY3RvciB3aGVuIHRoZSBzY29wZSAoZS5nLiB0aGUgY29tcG9uZW50IHRoZSBxdWVyeSBpcyBpbikgaXMgZGVzdHJveWVkXG4gIGNvbnN0IHNjb3BlRGVzdHJveUxpc3RlbmVyID0gc2NvcGVEZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHF1ZXJ5RW52aXJvbm1lbnRJbmplY3Rvci5kZXN0cm95KCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH0pO1xuXG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAvLyBjbGVhbnVwIHRoZSBzY29wZSBkZXN0cm95IGxpc3RlbmVyXG4gICAgdHJ5IHtcbiAgICAgIHNjb3BlRGVzdHJveUxpc3RlbmVyKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBkZXBlbmRlbmNpZXM7XG59O1xuIl19","import { computed, runInInjectionContext, signal, untracked } from '@angular/core';\nimport { nestedEffect } from './query-utils';\nexport const resetExecuteState = (options) => {\n const { executeState, executeOptions: opts } = options;\n const { state } = opts;\n cleanupPreviousExecute({ executeOptions: opts, executeState });\n opts.deps.client.repository.unbind(executeState.previousKey(), opts.deps.destroyRef);\n state.args.set(null);\n state.error.set(null);\n state.latestHttpEvent.set(null);\n state.loading.set(null);\n state.response.set(null);\n state.lastTimeExecutedAt.set(null);\n};\nexport const setupQueryExecuteState = () => {\n return {\n effectRefs: [],\n previousKey: signal(false),\n };\n};\nconst syncSignal = (signal, target) => {\n target.set(signal());\n return nestedEffect(() => {\n const val = signal();\n untracked(() => {\n if (val === target())\n return;\n target.set(val);\n });\n });\n};\nexport const queryExecute = (options) => {\n const { executeOptions, args, executeState, options: runQueryOptions, internalOptions: internalRunQueryOptions, transformResponse, isSecure, } = options;\n const { deps, state, creator, creatorInternals, queryConfig } = executeOptions;\n const { key, request } = deps.client.repository.request({\n route: creatorInternals.route,\n method: creatorInternals.method,\n args,\n clientOptions: creator,\n consumerDestroyRef: deps.destroyRef,\n key: queryConfig.key,\n previousKey: executeState.previousKey(),\n internalRunQueryOptions,\n runQueryOptions,\n isSecure,\n });\n executeState.previousKey.set(key);\n const responseSignal = transformResponse ? computed(() => transformResponse(request.response())) : request.response;\n runInInjectionContext(deps.injector, () => {\n const responseRef = syncSignal(responseSignal, state.response);\n const loadingRef = syncSignal(request.loading, state.loading);\n const errorRef = syncSignal(request.error, state.error);\n const latestHttpEventRef = syncSignal(request.currentEvent, state.latestHttpEvent);\n executeState.effectRefs.push(responseRef, loadingRef, errorRef, latestHttpEventRef);\n });\n state.lastTimeExecutedAt.set(Date.now());\n state.subtle.request.set(request);\n};\nexport const cleanupPreviousExecute = (options) => {\n const { executeState } = options;\n executeState.effectRefs.forEach((ref) => ref.destroy());\n executeState.effectRefs.length = 0;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZXhlY3V0ZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9leHBlcmltZW50YWwvaHR0cC9xdWVyeS1leGVjdXRlLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQWEscUJBQXFCLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFHdEgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU83QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUEwQixPQUF3QyxFQUFFLEVBQUU7SUFDckcsTUFBTSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3ZELE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFFdkIsc0JBQXNCLENBQUMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFFL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVyRixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QixLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixLQUFLLENBQUMs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RyxFQUFFLENBQUMsQ0FBQztJQUN6QyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDO0FBT0YsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBMEIsT0FBNkMsRUFBRSxFQUFFO0lBQy9HLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFakMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgRWZmZWN0UmVmLCBydW5JbkluamVjdGlvbkNvbnRleHQsIFNpZ25hbCwgc2lnbmFsLCB1bnRyYWNrZWQsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBRdWVyeUFyZ3MsIFJlcXVlc3RBcmdzIH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBDcmVhdGVRdWVyeUV4ZWN1dGVPcHRpb25zIH0gZnJvbSAnLi9xdWVyeS1leGVjdXRlJztcbmltcG9ydCB7IG5lc3RlZEVmZmVjdCB9IGZyb20gJy4vcXVlcnktdXRpbHMnO1xuXG5leHBvcnQgdHlwZSBSZXNldEV4ZWN1dGVTdGF0ZU9wdGlvbnM8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICBleGVjdXRlT3B0aW9uczogUGljazxDcmVhdGVRdWVyeUV4ZWN1dGVPcHRpb25zPFRBcmdzPiwgJ3N0YXRlJyB8ICdkZXBzJz47XG4gIGV4ZWN1dGVTdGF0ZTogUXVlcnlFeGVjdXRlU3RhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgcmVzZXRFeGVjdXRlU3RhdGUgPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KG9wdGlvbnM6IFJlc2V0RXhlY3V0ZVN0YXRlT3B0aW9uczxUQXJncz4pID0+IHtcbiAgY29uc3QgeyBleGVjdXRlU3RhdGUsIGV4ZWN1dGVPcHRpb25zOiBvcHRzIH0gPSBvcHRpb25zO1xuICBjb25zdCB7IHN0YXRlIH0gPSBvcHRzO1xuXG4gIGNsZWFudXBQcmV2aW91c0V4ZWN1dGUoeyBleGVjdXRlT3B0aW9uczogb3B0cywgZXhlY3V0ZVN0YXRlIH0pO1xuXG4gIG9wdHMuZGVwcy5jbGllbnQucmVwb3NpdG9yeS51bmJpbmQoZXhlY3V0ZVN0YXRlLnByZXZpb3VzS2V5KCksIG9wdHMuZGVwcy5kZXN0cm95UmVmKTtcblxuICBzdGF0ZS5hcmdzLnNldChudWxsKTtcbiAgc3RhdGUuZXJyb3Iuc2V0KG51bGwpO1xuICBzdGF0ZS5sYXRlc3RIdHRwRXZlbnQuc2V0KG51bGwpO1xuICBzdGF0ZS5sb2FkaW5nLnNldChudWxsKTtcbiAgc3RhdGUucmVzcG9uc2Uuc2V0KG51bGwpO1xuICBzdGF0ZS5sYXN0VGltZUV4ZWN1dGVkQXQuc2V0KG51bGwpO1xufTtcblxuZXhwb3J0IHR5cGUgUXVlcnlFeGVjdXRlU3RhdGUgPSB7XG4gIGVmZmVjdFJlZnM6IEVmZmVjdFJlZltdO1xuICBwcmV2aW91c0tleTogV3JpdGFibGVTaWduYWw8c3RyaW5nIHwgZmFsc2U+O1xufTtcblxuZXhwb3J0IGNvbnN0IHNldHVwUXVlcnlFeGVjdXRlU3RhdGUgPSAoKTogUXVlcnlFeGVjdXRlU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIGVmZmVjdFJlZnM6IFtdLFxuICAgIHByZXZpb3VzS2V5OiBzaWduYWwoZmFsc2UpLFxuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgUnVuUXVlcnlFeGVjdXRlT3B0aW9ucyA9IHtcbiAgYWxsb3dDYWNoZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBJbnRlcm5hbFJ1blF1ZXJ5RXhlY3V0ZU9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0aGUgcmVxdWVzdCB3aWxsIGJlIGZvcmNlZCB0byBiZSBjYWNoZWQgKHNhdmVkIGluc2lkZSB0aGUgcXVlcnkgcmVwb3NpdG9yeSkuXG4gICAqIENhbiBiZSB1c2VkIHRvIGUuZy4gY2FjaGUgR1FMIHF1ZXJpZXMgdHJhbnNwb3J0ZWQgdmlhIFBPU1RcbiAgICpcbiAgICogLSBgdHJ1ZWAgbWVhbnMgdGhlIHJlcXVlc3Qgd2lsbCBhbHdheXMgYmUgY2FjaGVkXG4gICAqIC0gYGZhbHNlYCBtZWFucyB0aGUgcmVxdWVzdCB3aWxsIG5ldmVyIGJlIGNhY2hlZFxuICAgKiAtIGB1bmRlZmluZWRgIG1lYW5zIHRoZSByZXF1ZXN0IHdpbGwgYmUgY2FjaGVkIGlmIHRoZSBtZXRob2QgaXMgR0VULCBPUFRJT05TIG9yIEhFQURcbiAgICovXG4gIHVzZVF1ZXJ5UmVwb3NpdG9yeUNhY2hlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5RXhlY3V0ZU9wdGlvbnM8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICBleGVjdXRlT3B0aW9uczogQ3JlYXRlUXVlcnlFeGVjdXRlT3B0aW9uczxUQXJncz47XG4gIGV4ZWN1dGVTdGF0ZTogUXVlcnlFeGVjdXRlU3RhdGU7XG5cbiAgYXJnczogUmVxdWVzdEFyZ3M8VEFyZ3M+IHwgbnVsbDtcbiAgb3B0aW9ucz86IFJ1blF1ZXJ5RXhlY3V0ZU9wdGlvbnM7XG4gIGludGVybmFsT3B0aW9ucz86IEludGVybmFsUnVuUXVlcnlFeGVjdXRlT3B0aW9ucztcblxuICAvLyBUT0RPOiBUeXBpbmdzXG4gIHRyYW5zZm9ybVJlc3BvbnNlPzogKHJlc3BvbnNlOiBhbnkpID0+IGFueTtcblxuICBpc1NlY3VyZT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBzeW5jU2lnbmFsID0gPFQ+KHNpZ25hbDogU2lnbmFsPFQ+LCB0YXJnZXQ6IFdyaXRhYmxlU2lnbmFsPFQ+KSA9PiB7XG4gIHRhcmdldC5zZXQoc2lnbmFsKCkpO1xuXG4gIHJldHVybiBuZXN0ZWRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHZhbCA9IHNpZ25hbCgpO1xuXG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIGlmICh2YWwgPT09IHRhcmdldCgpKSByZXR1cm47XG5cbiAgICAgIHRhcmdldC5zZXQodmFsKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcXVlcnlFeGVjdXRlID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihvcHRpb25zOiBRdWVyeUV4ZWN1dGVPcHRpb25zPFRBcmdzPikgPT4ge1xuICBjb25zdCB7XG4gICAgZXhlY3V0ZU9wdGlvbnMsXG4gICAgYXJncyxcbiAgICBleGVjdXRlU3RhdGUsXG4gICAgb3B0aW9uczogcnVuUXVlcnlPcHRpb25zLFxuICAgIGludGVybmFsT3B0aW9uczogaW50ZXJuYWxSdW5RdWVyeU9wdGlvbnMsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgaXNTZWN1cmUsXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCB7IGRlcHMsIHN0YXRlLCBjcmVhdG9yLCBjcmVhdG9ySW50ZXJuYWxzLCBxdWVyeUNvbmZpZyB9ID0gZXhlY3V0ZU9wdGlvbnM7XG5cbiAgY29uc3QgeyBrZXksIHJlcXVlc3QgfSA9IGRlcHMuY2xpZW50LnJlcG9zaXRvcnkucmVxdWVzdCh7XG4gICAgcm91dGU6IGNyZWF0b3JJbnRlcm5hbHMucm91dGUsXG4gICAgbWV0aG9kOiBjcmVhdG9ySW50ZXJuYWxzLm1ldGhvZCxcbiAgICBhcmdzLFxuICAgIGNsaWVudE9wdGlvbnM6IGNyZWF0b3IsXG4gICAgY29uc3VtZXJEZXN0cm95UmVmOiBkZXBzLmRlc3Ryb3lSZWYsXG4gICAga2V5OiBxdWVyeUNvbmZpZy5rZXksXG4gICAgcHJldmlvdXNLZXk6IGV4ZWN1dGVTdGF0ZS5wcmV2aW91c0tleSgpLFxuICAgIGludGVybmFsUnVuUXVlcnlPcHRpb25zLFxuICAgIHJ1blF1ZXJ5T3B0aW9ucyxcbiAgICBpc1NlY3VyZSxcbiAgfSk7XG5cbiAgZXhlY3V0ZVN0YXRlLnByZXZpb3VzS2V5LnNldChrZXkpO1xuXG4gIGNvbnN0IHJlc3BvbnNlU2lnbmFsID0gdHJhbnNmb3JtUmVzcG9uc2UgPyBjb21wdXRlZCgoKSA9PiB0cmFuc2Zvcm1SZXNwb25zZShyZXF1ZXN0LnJlc3BvbnNlKCkpKSA6IHJlcXVlc3QucmVzcG9uc2U7XG5cbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0KGRlcHMuaW5qZWN0b3IsICgpID0+IHtcbiAgICBjb25zdCByZXNwb25zZVJlZiA9IHN5bmNTaWduYWwocmVzcG9uc2VTaWduYWwsIHN0YXRlLnJlc3BvbnNlKTtcbiAgICBjb25zdCBsb2FkaW5nUmVmID0gc3luY1NpZ25hbChyZXF1ZXN0LmxvYWRpbmcsIHN0YXRlLmxvYWRpbmcpO1xuICAgIGNvbnN0IGVycm9yUmVmID0gc3luY1NpZ25hbChyZXF1ZXN0LmVycm9yLCBzdGF0ZS5lcnJvcik7XG4gICAgY29uc3QgbGF0ZXN0SHR0cEV2ZW50UmVmID0gc3luY1NpZ25hbChyZXF1ZXN0LmN1cnJlbnRFdmVudCwgc3RhdGUubGF0ZXN0SHR0cEV2ZW50KTtcblxuICAgIGV4ZWN1dGVTdGF0ZS5lZmZlY3RSZWZzLnB1c2gocmVzcG9uc2VSZWYsIGxvYWRpbmdSZWYsIGVycm9yUmVmLCBsYXRlc3RIdHRwRXZlbnRSZWYpO1xuICB9KTtcblxuICBzdGF0ZS5sYXN0VGltZUV4ZWN1dGVkQXQuc2V0KERhdGUubm93KCkpO1xuICBzdGF0ZS5zdWJ0bGUucmVxdWVzdC5zZXQocmVxdWVzdCk7XG59O1xuXG5leHBvcnQgdHlwZSBDbGVhbnVwUHJldmlvdXNFeGVjdXRlT3B0aW9uczxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIGV4ZWN1dGVPcHRpb25zOiBQaWNrPENyZWF0ZVF1ZXJ5RXhlY3V0ZU9wdGlvbnM8VEFyZ3M+LCAnc3RhdGUnPjtcbiAgZXhlY3V0ZVN0YXRlOiBRdWVyeUV4ZWN1dGVTdGF0ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhbnVwUHJldmlvdXNFeGVjdXRlID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihvcHRpb25zOiBDbGVhbnVwUHJldmlvdXNFeGVjdXRlT3B0aW9uczxUQXJncz4pID0+IHtcbiAgY29uc3QgeyBleGVjdXRlU3RhdGUgfSA9IG9wdGlvbnM7XG5cbiAgZXhlY3V0ZVN0YXRlLmVmZmVjdFJlZnMuZm9yRWFjaCgocmVmKSA9PiByZWYuZGVzdHJveSgpKTtcbiAgZXhlY3V0ZVN0YXRlLmVmZmVjdFJlZnMubGVuZ3RoID0gMDtcbn07XG4iXX0=","import { cleanupPreviousExecute, queryExecute, resetExecuteState, setupQueryExecuteState, } from './query-execute-utils';\nimport { circularQueryDependencyChecker } from './query-utils';\nexport const createExecuteFn = (executeOptions) => {\n const executeState = setupQueryExecuteState();\n const circularChecker = circularQueryDependencyChecker();\n const reset = () => resetExecuteState({ executeState, executeOptions });\n const exec = (executeArgs) => {\n circularChecker.check();\n // Make sure all effects are flushed before reading the args.\n // A withArgs feature effect might still be pending otherwise resulting in the wrong args being read.\n executeOptions.deps.effectScheduler.flush();\n const { args = executeOptions.state.args(), options } = executeArgs ?? {};\n cleanupPreviousExecute({ executeOptions, executeState });\n queryExecute({ executeOptions, executeState, args, options });\n };\n exec['reset'] = reset;\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n return exec;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZXhlY3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9leHBlcmltZW50YWwvaHR0cC9xdWVyeS1leGVjdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsWUFBWSxFQUNaLGlCQUFpQixFQUVqQixzQkFBc0IsR0FDdkIsTUFBTSx1QkFBdUIsQ0FBQztBQUcvQixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUF1Qi9ELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUM3QixjQUFnRCxFQUNuQixFQUFFO0lBQy9CLE1BQU0sWUFBWSxHQUFHLHNCQUFzQixFQUFFLENBQUM7SUFDOUMsTUFBTSxlQUFlLEdBQUcsOEJBQThCLEVBQUUsQ0FBQztJQUV6RCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBRXhFLE1BQU0sSUFBSSxHQUFHLENBQUMsV0FBcUMsRUFBRSxFQUFFO1FBQ3JELGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUV4Qiw2REFBNkQ7UUFDN0QscUdBQXFHO1FBQ3JHLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTVDLE1BQU0sRUFBRSxJQUFJLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxXQUFXLElBQUksRUFBRSxDQUFDO1FBRTFFLHNCQUFzQixDQUFDLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDekQsWUFBWSxDQUFDLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUM7SUFFRixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXRCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFckUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFF1ZXJ5QXJncywgUmVxdWVzdEFyZ3MgfSBmcm9tICcuL3F1ZXJ5JztcbmltcG9ydCB7IENyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnMsIEludGVybmFsQ3JlYXRlUXVlcnlDcmVhdG9yT3B0aW9ucywgUXVlcnlDb25maWcgfSBmcm9tICcuL3F1ZXJ5LWNyZWF0b3InO1xuaW1wb3J0IHsgUXVlcnlEZXBlbmRlbmNpZXMgfSBmcm9tICcuL3F1ZXJ5LWRlcGVuZGVuY2llcyc7XG5pbXBvcnQge1xuICBjbGVhbnVwUHJldmlvdXNFeGVjdXRlLFxuICBxdWVyeUV4ZWN1dGUsXG4gIHJlc2V0RXhlY3V0ZVN0YXRlLFxuICBSdW5RdWVyeUV4ZWN1dGVPcHRpb25zLFxuICBzZXR1cFF1ZXJ5RXhlY3V0ZVN0YXRlLFxufSBmcm9tICcuL3F1ZXJ5LWV4ZWN1dGUtdXRpbHMnO1xuaW1wb3J0IHsgUXVlcnlLZXlPck5vbmUgfSBmcm9tICcuL3F1ZXJ5LXJlcG9zaXRvcnknO1xuaW1wb3J0IHsgUXVlcnlTdGF0ZSB9IGZyb20gJy4vcXVlcnktc3RhdGUnO1xuaW1wb3J0IHsgY2lyY3VsYXJRdWVyeURlcGVuZGVuY3lDaGVja2VyIH0gZnJvbSAnLi9xdWVyeS11dGlscyc7XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVF1ZXJ5RXhlY3V0ZU9wdGlvbnM8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICBkZXBzOiBRdWVyeURlcGVuZGVuY2llcztcbiAgc3RhdGU6IFF1ZXJ5U3RhdGU8VEFyZ3M+O1xuICBjcmVhdG9yPzogQ3JlYXRlUXVlcnlDcmVhdG9yT3B0aW9ucztcbiAgY3JlYXRvckludGVybmFsczogSW50ZXJuYWxDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zPFRBcmdzPjtcbiAgcXVlcnlDb25maWc6IFF1ZXJ5Q29uZmlnO1xufTtcblxuZXhwb3J0IHR5cGUgUXVlcnlFeGVjdXRlQXJnczxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIGFyZ3M/OiBSZXF1ZXN0QXJnczxUQXJncz4gfCBudWxsO1xuICBvcHRpb25zPzogUnVuUXVlcnlFeGVjdXRlT3B0aW9ucztcbn07XG5cbmV4cG9ydCB0eXBlIEludGVybmFsUXVlcnlFeGVjdXRlPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IHtcbiAgKGV4ZWN1dGVBcmdzPzogUXVlcnlFeGVjdXRlQXJnczxUQXJncz4pOiB2b2lkO1xuICByZXNldDogKCkgPT4gdm9pZDtcbiAgY3VycmVudFJlcG9zaXRvcnlLZXk6IFNpZ25hbDxRdWVyeUtleU9yTm9uZT47XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeUV4ZWN1dGU8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0gKGV4ZWN1dGVBcmdzPzogUXVlcnlFeGVjdXRlQXJnczxUQXJncz4pID0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVFeGVjdXRlRm4gPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KFxuICBleGVjdXRlT3B0aW9uczogQ3JlYXRlUXVlcnlFeGVjdXRlT3B0aW9uczxUQXJncz4sXG4pOiBJbnRlcm5hbFF1ZXJ5RXhlY3V0ZTxUQXJncz4gPT4ge1xuICBjb25zdCBleGVjdXRlU3RhdGUgPSBzZXR1cFF1ZXJ5RXhlY3V0ZVN0YXRlKCk7XG4gIGNvbnN0IGNpcmN1bGFyQ2hlY2tlciA9IGNpcmN1bGFyUXVlcnlEZXBlbmRlbmN5Q2hlY2tlcigpO1xuXG4gIGNvbnN0IHJlc2V0ID0gKCkgPT4gcmVzZXRFeGVjdXRlU3RhdGUoeyBleGVjdXRlU3RhdGUsIGV4ZWN1dGVPcHRpb25zIH0pO1xuXG4gIGNvbnN0IGV4ZWMgPSAoZXhlY3V0ZUFyZ3M/OiBRdWVyeUV4ZWN1dGVBcmdzPFRBcmdzPikgPT4ge1xuICAgIGNpcmN1bGFyQ2hlY2tlci5jaGVjaygpO1xuXG4gICAgLy8gTWFrZSBzdXJlIGFsbCBlZmZlY3RzIGFyZSBmbHVzaGVkIGJlZm9yZSByZWFkaW5nIHRoZSBhcmdzLlxuICAgIC8vIEEgd2l0aEFyZ3MgZmVhdHVyZSBlZmZlY3QgbWlnaHQgc3RpbGwgYmUgcGVuZGluZyBvdGhlcndpc2UgcmVzdWx0aW5nIGluIHRoZSB3cm9uZyBhcmdzIGJlaW5nIHJlYWQuXG4gICAgZXhlY3V0ZU9wdGlvbnMuZGVwcy5lZmZlY3RTY2hlZHVsZXIuZmx1c2goKTtcblxuICAgIGNvbnN0IHsgYXJncyA9IGV4ZWN1dGVPcHRpb25zLnN0YXRlLmFyZ3MoKSwgb3B0aW9ucyB9ID0gZXhlY3V0ZUFyZ3MgPz8ge307XG5cbiAgICBjbGVhbnVwUHJldmlvdXNFeGVjdXRlKHsgZXhlY3V0ZU9wdGlvbnMsIGV4ZWN1dGVTdGF0ZSB9KTtcbiAgICBxdWVyeUV4ZWN1dGUoeyBleGVjdXRlT3B0aW9ucywgZXhlY3V0ZVN0YXRlLCBhcmdzLCBvcHRpb25zIH0pO1xuICB9O1xuXG4gIGV4ZWNbJ3Jlc2V0J10gPSByZXNldDtcblxuICBleGVjWydjdXJyZW50UmVwb3NpdG9yeUtleSddID0gZXhlY3V0ZVN0YXRlLnByZXZpb3VzS2V5LmFzUmVhZG9ubHkoKTtcblxuICByZXR1cm4gZXhlYztcbn07XG4iXX0=","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { setupQueryDependencies } from './query-dependencies';\nimport { createExecuteFn } from './query-execute';\nimport { setupQueryState } from './query-state';\nimport { applyQueryFeatures, createQueryObject, getQueryFeatureUsage, maybeExecute } from './query-utils';\nexport const createQuery = (options) => {\n const deps = setupQueryDependencies({\n clientConfig: options.creatorInternals.client,\n queryConfig: options.queryConfig,\n });\n const state = setupQueryState({});\n const { creator, creatorInternals, queryConfig } = options;\n const flags = getQueryFeatureUsage(options);\n const execute = createExecuteFn({ deps, state, creator, creatorInternals, queryConfig });\n const featureFnContext = {\n state,\n execute,\n flags,\n deps,\n };\n applyQueryFeatures(options.features, featureFnContext);\n maybeExecute({ execute, flags });\n return createQueryObject({ state, execute, deps });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBTXZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTlELE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0saUJBQWlCLENBQUM7QUFFaEUsT0FBTyxFQUF1QixlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQW1HMUcsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQTBCLE9BQWtDLEVBQUUsRUFBRTtJQUN6RixNQUFNLElBQUksR0FBRyxzQkFBc0IsQ0FBQztRQUNsQyxZQUFZLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU07UUFDN0MsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO0tBQ2pDLENBQUMsQ0FBQztJQUNILE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBUSxFQUFFLENBQUMsQ0FBQztJQUN6QyxNQUFNLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUMzRCxNQUFNLEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUU1QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBRWhHLE1BQU0sZ0JBQWdCLEdBQStCO1FBQ25ELEtBQUs7UUFDTCxPQUFPO1FBQ1AsS0FBSztRQUNMLElBQUk7S0FDTCxDQUFDO0lBRUYsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBRXZELFlBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRWpDLE9BQU8saUJBQWlCLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5pbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRGVzdHJveVJlZiwgSW5qZWN0b3IsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cFJlcXVlc3QsIEh0dHBSZXF1ZXN0TG9hZGluZ1N0YXRlIH0gZnJvbSAnLi9odHRwLXJlcXVlc3QnO1xuaW1wb3J0IHsgQ3JlYXRlUXVlcnlDcmVhdG9yT3B0aW9ucywgSW50ZXJuYWxDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zLCBRdWVyeUNvbmZpZyB9IGZyb20gJy4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBzZXR1cFF1ZXJ5RGVwZW5kZW5jaWVzIH0gZnJvbSAnLi9xdWVyeS1kZXBlbmRlbmNpZXMnO1xuaW1wb3J0IHsgUXVlcnlFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi9xdWVyeS1lcnJvci1yZXNwb25zZSc7XG5pbXBvcnQgeyBjcmVhdGVFeGVjdXRlRm4sIFF1ZXJ5RXhlY3V0ZSB9IGZyb20gJy4vcXVlcnktZXhlY3V0ZSc7XG5pbXBvcnQgeyBRdWVyeUZlYXR1cmUsIFF1ZXJ5RmVhdHVyZUNvbnRleHQgfSBmcm9tICcuL3F1ZXJ5LWZlYXR1cmVzJztcbmltcG9ydCB7IFF1ZXJ5RXhlY3V0aW9uU3RhdGUsIHNldHVwUXVlcnlTdGF0ZSB9IGZyb20gJy4vcXVlcnktc3RhdGUnO1xuaW1wb3J0IHsgYXBwbHlRdWVyeUZlYXR1cmVzLCBjcmVhdGVRdWVyeU9iamVjdCwgZ2V0UXVlcnlGZWF0dXJlVXNhZ2UsIG1heWJlRXhlY3V0ZSB9IGZyb20gJy4vcXVlcnktdXRpbHMnO1xuXG5leHBvcnQgdHlwZSBRdWVyeUFyZ3MgPSB7XG4gIHJlc3BvbnNlPzogYW55O1xuICBwYXRoUGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPjtcbiAgcXVlcnlQYXJhbXM/OiBhbnk7XG4gIGJvZHk/OiBhbnk7XG4gIGhlYWRlcnM/OiBIdHRwSGVhZGVycztcbn07XG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlVHlwZTxUIGV4dGVuZHMgUXVlcnlBcmdzIHwgbnVsbD4gPSBUIGV4dGVuZHMgUXVlcnlBcmdzID8gVFsncmVzcG9uc2UnXSA6IG5ldmVyO1xuZXhwb3J0IHR5cGUgUGF0aFBhcmFtc1R5cGU8VCBleHRlbmRzIFF1ZXJ5QXJncyB8IG51bGw+ID0gVCBleHRlbmRzIFF1ZXJ5QXJncyA/IFRbJ3BhdGhQYXJhbXMnXSA6IG5ldmVyO1xuZXhwb3J0IHR5cGUgUXVlcnlQYXJhbXNUeXBlPFQgZXh0ZW5kcyBRdWVyeUFyZ3MgfCBudWxsPiA9IFQgZXh0ZW5kcyBRdWVyeUFyZ3MgPyBUWydxdWVyeVBhcmFtcyddIDogbmV2ZXI7XG5leHBvcnQgdHlwZSBCb2R5VHlwZTxUIGV4dGVuZHMgUXVlcnlBcmdzIHwgbnVsbD4gPSBUIGV4dGVuZHMgUXVlcnlBcmdzID8gVFsnYm9keSddIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RBcmdzPFQgZXh0ZW5kcyBRdWVyeUFyZ3MgfCBudWxsPiA9IFQgZXh0ZW5kcyBRdWVyeUFyZ3MgPyBPbWl0PFQsICdyZXNwb25zZSc+IDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVF1ZXJ5T3B0aW9uczxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIGNyZWF0b3I/OiBDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zO1xuICBjcmVhdG9ySW50ZXJuYWxzOiBJbnRlcm5hbENyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnM8VEFyZ3M+O1xuICBmZWF0dXJlczogUXVlcnlGZWF0dXJlPFRBcmdzPltdO1xuICBxdWVyeUNvbmZpZzogUXVlcnlDb25maWc7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeUJhc2U8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICAvKiogVGhlIGFyZ3VtZW50cyBvZiB0aGUgbGFzdCBleGVjdXRpb24gb2YgdGhlIHF1ZXJ5LiBXaWxsIGJlIGBudWxsYCBpZiB0aGUgcXVlcnkgaGFzIG5ldmVyIGJlZW4gZXhlY3V0ZWQgKi9cbiAgYXJnczogU2lnbmFsPFJlcXVlc3RBcmdzPFRBcmdzPiB8IG51bGw+O1xuXG4gIC8qKlxuICAgKiBUaGUgbGF0ZXN0IHJlc3BvbnNlIG9mIHRoZSBxdWVyeS4gV2lsbCBiZSBgbnVsbGAgaWYgdGhlIHF1ZXJ5IGhhcyBuZXZlciBiZWVuIGV4ZWN1dGVkLlxuICAgKiBSZXNwb25zZXMgYXJlIGNhY2hlZCB1bnRpbCBhIG5ldyByZXNwb25zZSBpcyByZWNlaXZlZC5cbiAgICogSWYgYSByZXNwb25zZSBpcyBwcmVzZW50IGJ1dCB0aGUgbmV4dCBleGVjdXRpb24gb2YgdGhlIHF1ZXJ5IGZhaWxzLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSBzZXQgdG8gYG51bGxgIGFnYWluLlxuICAgKi9cbiAgcmVzcG9uc2U6IFNpZ25hbDxSZXNwb25zZVR5cGU8VEFyZ3M+IHwgbnVsbD47XG5cbiAgLyoqIFRoZSBsYXRlc3QgQW5ndWxhciBIVFRQIGNsaWVudCBuYXRpdmUgaHR0cCBldmVudCB0aGF0IG9jY3VycmVkIGR1cmluZyB0aGUgbGFzdCBleGVjdXRpb24gb2YgdGhlIHF1ZXJ5LiBXaWxsIGJlIGBudWxsYCBpZiBubyBldmVudCBvY2N1cnJlZC4gKi9cbiAgbGF0ZXN0SHR0cEV2ZW50OiBTaWduYWw8SHR0cEV2ZW50PFJlc3BvbnNlVHlwZTxUQXJncz4+IHwgbnVsbD47XG5cbiAgLyoqIFRoZSBsb2FkaW5nIHN0YXRlIG9mIHRoZSBxdWVyeS4gV2lsbCBiZSBgbnVsbGAgaWYgdGhlIHF1ZXJ5IGN1cnJlbnRseSBpc24ndCBsb2FkaW5nLiAqL1xuICBsb2FkaW5nOiBTaWduYWw8SHR0cFJlcXVlc3RMb2FkaW5nU3RhdGUgfCBudWxsPjtcblxuICAvKiogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgZHVyaW5nIHRoZSBsYXN0IGV4ZWN1dGlvbiBvZiB0aGUgcXVlcnkuIFdpbGwgYmUgYG51bGxgIGlmIG5vIGVycm9yIG9jY3VycmVkLiAqL1xuICBlcnJvcjogU2lnbmFsPFF1ZXJ5RXJyb3JSZXNwb25zZSB8IG51bGw+O1xuXG4gIC8qKiBUaGUgdGltZSB0aGUgcXVlcnkgd2FzIGxhc3QgZXhlY3V0ZWQgYXQuIFdpbGwgYmUgYG51bGxgIGlmIHRoZSBxdWVyeSBoYXMgbmV2ZXIgYmVlbiBleGVjdXRlZC4gKi9cbiAgbGFzdFRpbWVFeGVjdXRlZEF0OiBTaWduYWw8bnVtYmVyIHwgbnVsbD47XG5cbiAgLyoqIFRoZSBpZCBvZiB0aGUgcXVlcnkgKi9cbiAgaWQ6IFNpZ25hbDxzdHJpbmc+O1xuXG4gIC8qKiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcXVlcnkuIFdpbGwgYmUgYG51bGxgIGlmIHRoZSBxdWVyeSBoYXMgbmV2ZXIgYmVlbiBleGVjdXRlZC4gKi9cbiAgZXhlY3V0aW9uU3RhdGU6IFNpZ25hbDxRdWVyeUV4ZWN1dGlvblN0YXRlPFRBcmdzPiB8IG51bGw+O1xufTtcblxuLyoqIEEgc25hcHNob3Qgb2YgYSBxdWVyeSBzdGF0ZSBhdCBhIHNwZWNpZmljIHBvaW50IGluIHRpbWUgKi9cbmV4cG9ydCB0eXBlIFF1ZXJ5U25hcHNob3Q8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0gUXVlcnlCYXNlPFRBcmdzPiAmIHtcbiAgLyoqIFRoaXMgc2lnbmFsIGlzIGB0cnVlYCB1bnRpbCB0aGUgbGF0ZXN0IGV4ZWN1dGlvbiBvZiB0aGUgcXVlcnkgaGFzIGNvbXBsZXRlZCBpbiBhbnkgd2F5IChzdWNjZXNzLCBlcnJvciwgb3IgY2FuY2VsbGF0aW9uKSAqL1xuICBpc0FsaXZlOiBTaWduYWw8Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgdHlwZSBBbnlRdWVyeVNuYXBzaG90ID0gUXVlcnlTbmFwc2hvdDxhbnk+O1xuZXhwb3J0IHR5cGUgQW55TmV3UXVlcnkgPSBRdWVyeTxhbnk+O1xuXG5leHBvcnQgdHlwZSBRdWVyeVN1YnRsZTxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIC8qKiBEZXN0cm95cyB0aGUgcXVlcnkgYW5kIGNsZWFucyB1cCBhbGwgcmVzb3VyY2VzLiBUaGUgcXVlcnkgc2hvdWxkIG5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4gKi9cbiAgZGVzdHJveTogKCkgPT4gdm9pZDtcblxuICAvKiogTWFudWFsbHkgc2V0cyB0aGUgcmVzcG9uc2Ugb2YgdGhlIHF1ZXJ5LiBUaGlzIHdpbGwgbm90IHRyaWdnZXIgYSBuZXcgZXhlY3V0aW9uIG9mIHRoZSBxdWVyeS4gKi9cbiAgc2V0UmVzcG9uc2U6IChyZXNwb25zZTogUmVzcG9uc2VUeXBlPFRBcmdzPikgPT4gdm9pZDtcblxuICAvKiogVGhlIGN1cnJlbnRseSB1bmRlcmx5aW5nIEhUVFAgcmVxdWVzdCBvZiB0aGUgcXVlcnkuIFdpbGwgYmUgYG51bGxgIGlmIHRoZSBxdWVyeSBoYXMgbmV2ZXIgYmVlbiBleGVjdXRlZC4gKi9cbiAgcmVxdWVzdDogU2lnbmFsPEh0dHBSZXF1ZXN0PFRBcmdzPiB8IG51bGw+O1xuXG4gIC8qKiBUaGUgZGVzdHJveSByZWZlcmVuY2UgdXNlZCB0byBjbGVhbiB1cCB0aGUgcXVlcnkgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkICovXG4gIGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWY7XG5cbiAgLyoqIFRoZSBBbmd1bGFyIGluamVjdG9yIHVzZWQgdG8gcmVzb2x2ZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBxdWVyeSAqL1xuICBpbmplY3RvcjogSW5qZWN0b3I7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeTxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSBRdWVyeUJhc2U8VEFyZ3M+ICYge1xuICAvKiogRXhlY3V0ZXMgdGhlIHF1ZXJ5ICovXG4gIGV4ZWN1dGU6IFF1ZXJ5RXhlY3V0ZTxUQXJncz47XG5cbiAgLyoqIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHNuYXBzaG90IG9mIHRoZSBjdXJyZW50IHF1ZXJ5IHN0YXRlICovXG4gIGNyZWF0ZVNuYXBzaG90OiAoKSA9PiBRdWVyeVNuYXBzaG90PFRBcmdzPjtcblxuICAvKiogUmVzZXRzIHRoZSBxdWVyeSBzdGF0ZSB0byBpdHMgaW5pdGlhbCBzdGF0ZSAqL1xuICByZXNldDogKCkgPT4gdm9pZDtcblxuICAvKiogUmV0dXJucyBhIHJlYWRvbmx5IHZlcnNpb24gb2YgdGhlIHF1ZXJ5ICovXG4gIGFzUmVhZG9ubHk6ICgpID0+IFJlYWRvbmx5UXVlcnk8VEFyZ3M+O1xuXG4gIC8qKiBBZHZhbmNlZCBxdWVyeSBmZWF0dXJlcy4gKipXQVJOSU5HISoqIEluY29ycmVjdGx5IHVzaW5nIHRoZXNlIGZlYXR1cmVzIHdpbGwgbGlrZWx5ICoqQlJFQUsqKiB5b3VyIGFwcGxpY2F0aW9uLiBZb3UgaGF2ZSBiZWVuIHdhcm5lZCEgKi9cbiAgc3VidGxlOiBRdWVyeVN1YnRsZTxUQXJncz47XG59O1xuXG5leHBvcnQgdHlwZSBSZWFkb25seVF1ZXJ5PFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IE9taXQ8UXVlcnk8VEFyZ3M+LCAnZXhlY3V0ZScgfCAnc3VidGxlJyB8ICdyZXNldCcgfCAnYXNSZWFkb25seSc+O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUXVlcnkgPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KG9wdGlvbnM6IENyZWF0ZVF1ZXJ5T3B0aW9uczxUQXJncz4pID0+IHtcbiAgY29uc3QgZGVwcyA9IHNldHVwUXVlcnlEZXBlbmRlbmNpZXMoe1xuICAgIGNsaWVudENvbmZpZzogb3B0aW9ucy5jcmVhdG9ySW50ZXJuYWxzLmNsaWVudCxcbiAgICBxdWVyeUNvbmZpZzogb3B0aW9ucy5xdWVyeUNvbmZpZyxcbiAgfSk7XG4gIGNvbnN0IHN0YXRlID0gc2V0dXBRdWVyeVN0YXRlPFRBcmdzPih7fSk7XG4gIGNvbnN0IHsgY3JlYXRvciwgY3JlYXRvckludGVybmFscywgcXVlcnlDb25maWcgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGZsYWdzID0gZ2V0UXVlcnlGZWF0dXJlVXNhZ2Uob3B0aW9ucyk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IGNyZWF0ZUV4ZWN1dGVGbjxUQXJncz4oeyBkZXBzLCBzdGF0ZSwgY3JlYXRvciwgY3JlYXRvckludGVybmFscywgcXVlcnlDb25maWcgfSk7XG5cbiAgY29uc3QgZmVhdHVyZUZuQ29udGV4dDogUXVlcnlGZWF0dXJlQ29udGV4dDxUQXJncz4gPSB7XG4gICAgc3RhdGUsXG4gICAgZXhlY3V0ZSxcbiAgICBmbGFncyxcbiAgICBkZXBzLFxuICB9O1xuXG4gIGFwcGx5UXVlcnlGZWF0dXJlcyhvcHRpb25zLmZlYXR1cmVzLCBmZWF0dXJlRm5Db250ZXh0KTtcblxuICBtYXliZUV4ZWN1dGUoeyBleGVjdXRlLCBmbGFncyB9KTtcblxuICByZXR1cm4gY3JlYXRlUXVlcnlPYmplY3QoeyBzdGF0ZSwgZXhlY3V0ZSwgZGVwcyB9KTtcbn07XG4iXX0=","import { buildRoute } from '../../request';\nimport { createHttpRequest } from './http-request';\nimport { uncacheableRequestHasAllowCacheParam, uncacheableRequestHasCacheKeyParam } from './query-errors';\nimport { buildQueryCacheKey, shouldCacheQuery } from './query-utils';\nexport const createQueryRepository = (config) => {\n const cache = new Map();\n const request = (options) => {\n const { args, clientOptions, runQueryOptions } = options;\n const shouldCache = options.internalRunQueryOptions?.useQueryRepositoryCache === false\n ? false\n : shouldCacheQuery(options.method) || options.internalRunQueryOptions?.useQueryRepositoryCache === true;\n if (!shouldCache && options.key)\n throw uncacheableRequestHasCacheKeyParam(options.key);\n if (!shouldCache && runQueryOptions?.allowCache)\n throw uncacheableRequestHasAllowCacheParam();\n const route = buildRoute({\n base: config.baseUrl,\n route: options.route,\n pathParams: args?.pathParams,\n queryParams: args?.queryParams,\n queryParamConfig: config.queryString,\n });\n const key = shouldCache &&\n buildQueryCacheKey(`${options.key ? options.key + '_' : ''}${route}`, {\n body: args?.body,\n queryParams: args?.queryParams,\n pathParams: args?.pathParams,\n headers: args?.headers,\n });\n const previousKey = options.previousKey;\n if (key !== previousKey && previousKey) {\n unbind(previousKey, options.consumerDestroyRef);\n }\n if (shouldCache && key) {\n const cacheEntry = cache.get(key);\n if (cacheEntry) {\n bind(key, options.consumerDestroyRef, cacheEntry.request, options.isSecure ?? false);\n if (!runQueryOptions?.allowCache || cacheEntry.request.isStale()) {\n cacheEntry.request.execute({ allowCache: runQueryOptions?.allowCache });\n }\n return { key, request: cacheEntry.request };\n }\n }\n const request = createHttpRequest({\n fullPath: route,\n args,\n method: options.method,\n dependencies: config.dependencies,\n clientOptions,\n cacheAdapter: config.cacheAdapter,\n retryFn: config.retryFn,\n });\n request.execute();\n if (shouldCache && key) {\n bind(key, options.consumerDestroyRef, request, options.isSecure ?? false);\n }\n return { key, request };\n };\n const unbind = (key, consumerDestroyRef) => {\n if (!key)\n return false;\n const cacheEntry = cache.get(key);\n if (!cacheEntry)\n return false;\n cacheEntry.consumers.delete(consumerDestroyRef);\n if (cacheEntry.consumers.size === 0) {\n cacheEntry.request.destroy();\n cache.delete(key);\n }\n return true;\n };\n const unbindAllSecure = () => {\n for (const [key, cacheEntry] of cache.entries()) {\n if (cacheEntry.isSecure) {\n for (const consumerDestroyRef of cacheEntry.consumers.keys()) {\n unbind(key, consumerDestroyRef);\n }\n cache.delete(key);\n }\n }\n };\n const bind = (key, consumerDestroyRef, request, isSecure) => {\n const destroyListener = consumerDestroyRef.onDestroy(() => unbind(key, consumerDestroyRef));\n const cacheEntry = cache.get(key);\n if (cacheEntry) {\n cacheEntry.consumers.set(consumerDestroyRef, destroyListener);\n }\n else {\n const consumers = new Map([]);\n consumers.set(consumerDestroyRef, destroyListener);\n cache.set(key, {\n consumers,\n request,\n isSecure,\n });\n }\n };\n const repository = {\n request,\n unbind,\n unbindAllSecure,\n };\n return repository;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9leHBlcmltZW50YWwvaHR0cC9xdWVyeS1yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUErQyxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSWhHLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQThGckUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxNQUFtQyxFQUFtQixFQUFFO0lBQzVGLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFvQyxDQUFDO0lBRTFELE1BQU0sT0FBTyxHQUFHLENBQTBCLE9BQTZDLEVBQUUsRUFBRTtRQUN6RixNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDekQsTUFBTSxXQUFXLEdBQ2YsT0FBTyxDQUFDLHVCQUF1QixFQUFFLHVCQUF1QixLQUFLLEtBQUs7WUFDaEUsQ0FBQyxDQUFDLEtBQUs7WUFDUCxDQUFDLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSx1QkFBdUIsS0FBSyxJQUFJLENBQUM7UUFFNUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsR0FBRztZQUFFLE1BQU0sa0NBQWtDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxXQUFXLElBQUksZUFBZSxFQUFFLFVBQVU7WUFBRSxNQUFNLG9DQUFvQyxFQUFF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Q0FBQyxFQUFFLENBQUMsQ0FBQztZQUV2RSxTQUFTLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBRW5ELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNiLFNBQVM7Z0JBQ1QsT0FBTztnQkFDUCxRQUFRO2FBQ1QsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLE1BQU0sVUFBVSxHQUFvQjtRQUNsQyxPQUFPO1FBQ1AsTUFBTTtRQUNOLGVBQWU7S0FDaEIsQ0FBQztJQUVGLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBEZXN0cm95UmVmLCBFcnJvckhhbmRsZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGJ1aWxkUm91dGUgfSBmcm9tICcuLi8uLi9yZXF1ZXN0JztcbmltcG9ydCB7IENyZWF0ZUh0dHBSZXF1ZXN0Q2xpZW50T3B0aW9ucywgSHR0cFJlcXVlc3QsIGNyZWF0ZUh0dHBSZXF1ZXN0IH0gZnJvbSAnLi9odHRwLXJlcXVlc3QnO1xuaW1wb3J0IHsgUXVlcnlBcmdzLCBSZXF1ZXN0QXJncyB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgUXVlcnlDbGllbnRDb25maWcgfSBmcm9tICcuL3F1ZXJ5LWNsaWVudC1jb25maWcnO1xuaW1wb3J0IHsgUXVlcnlNZXRob2QsIFJvdXRlVHlwZSB9IGZyb20gJy4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyB1bmNhY2hlYWJsZVJlcXVlc3RIYXNBbGxvd0NhY2hlUGFyYW0sIHVuY2FjaGVhYmxlUmVxdWVzdEhhc0NhY2hlS2V5UGFyYW0gfSBmcm9tICcuL3F1ZXJ5LWVycm9ycyc7XG5pbXBvcnQgeyBJbnRlcm5hbFJ1blF1ZXJ5RXhlY3V0ZU9wdGlvbnMsIFJ1blF1ZXJ5RXhlY3V0ZU9wdGlvbnMgfSBmcm9tICcuL3F1ZXJ5LWV4ZWN1dGUtdXRpbHMnO1xuaW1wb3J0IHsgYnVpbGRRdWVyeUNhY2hlS2V5LCBzaG91bGRDYWNoZVF1ZXJ5IH0gZnJvbSAnLi9xdWVyeS11dGlscyc7XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5UmVwb3NpdG9yeVJlcXVlc3RPcHRpb25zPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IHtcbiAgLyoqXG4gICAqIFRoZSByb3V0ZSBvZiB0aGUgcmVxdWVzdC5cbiAgICogQGV4YW1wbGUgJy91c2VycydcbiAgICogQGV4YW1wbGUgKGFyZ3MpID0+IGAvdXNlcnMvJHthcmdzLnVzZXJJZH1gXG4gICAqL1xuICByb3V0ZTogUm91dGVUeXBlPFRBcmdzPjtcblxuICAvKiogVGhlIEhUVFAgbWV0aG9kIG9mIHRoZSByZXF1ZXN0ICovXG4gIG1ldGhvZDogUXVlcnlNZXRob2Q7XG5cbiAgLyoqIElmIHRoZSByZXF1ZXN0IGlzIHNlY3VyZSAobmVlZHMgYXV0aGVudGljYXRpb24pICovXG4gIGlzU2VjdXJlPzogYm9vbGVhbjtcblxuICAvKiogVGhlIGRhdGEgb2YgdGhlIHJlcXVlc3QgKi9cbiAgYXJncz86IFJlcXVlc3RBcmdzPFRBcmdzPiB8IG51bGw7XG5cbiAgLyoqIFRoZSBjbGllbnQgb3B0aW9ucyBvZiB0aGUgcmVxdWVzdCAqL1xuICBjbGllbnRPcHRpb25zPzogQ3JlYXRlSHR0cFJlcXVlc3RDbGllbnRPcHRpb25zO1xuXG4gIC8qKiBJZiBzZXQsIHRoaXMgcmVxdWVzdCdzIGNhY2hlIGtleSB3aWxsIGJlIHByZWZpeGVkIHdpdGggdGhpcyBrZXkgKi9cbiAga2V5Pzogc3RyaW5nO1xuXG4gIC8qKiBUaGUgcHJldmlvdXMgY2FjaGUga2V5IG9mIHRoZSByZXF1ZXN0ICovXG4gIHByZXZpb3VzS2V5Pzogc3RyaW5nIHwgZmFsc2U7XG5cbiAgLyoqIFRoZSBkZXN0cm95IHJlZiB0byBiaW5kIHRoZSByZXF1ZXN0IHRvLiBJZiB0aGUgZGVzdHJveSByZWYgaXMgZGVzdHJveWVkLCB0aGUgcmVxdWVzdCB3aWxsIGJlIGRlc3Ryb3llZCBhcyB3ZWxsLiAqL1xuICBjb25zdW1lckRlc3Ryb3lSZWY6IERlc3Ryb3lSZWY7XG5cbiAgLyoqIENvbmZpZ3VyYXRpb24gb24gaG93IHRvIHJ1biB0aGUgcXVlcnkgKi9cbiAgcnVuUXVlcnlPcHRpb25zPzogUnVuUXVlcnlFeGVjdXRlT3B0aW9ucztcblxuICAvKiogSW50ZXJuYWwgb3B0aW9ucyBmb3IgcnVubmluZyB0aGUgcXVlcnkgKi9cbiAgaW50ZXJuYWxSdW5RdWVyeU9wdGlvbnM/OiBJbnRlcm5hbFJ1blF1ZXJ5RXhlY3V0ZU9wdGlvbnM7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeVJlcG9zaXRvcnlJdGVtPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IHtcbiAgLyoqIFRoZSBrZXkgb2YgdGhlIHJlcXVlc3QuIElmIHRoZSBrZXkgaXMgYGZhbHNlYCwgdGhlIHJlcXVlc3QgaXMgbm90IGNhY2hlZCwgb3RoZXJ3aXNlIGl0IGlzLiAqL1xuICBrZXk6IFF1ZXJ5S2V5T3JOb25lO1xuXG4gIC8qKiBUaGUgcmVxdWVzdCBvYmplY3QgKi9cbiAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8VEFyZ3M+O1xufTtcblxuLyoqXG4gKiBUaGUgcXVlcnkgcmVwb3NpdG9yeSBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgYWxsIHJlcXVlc3RzIGFuZCB0aGVpciBjb25zdW1lcnMuXG4gKiBJdCB3aWxsIGNhY2hlIHJlcXVlc3RzIGlmIHRoZXkgY2FuIGJlIGNhY2hlZCBhbmQgcmV1c2UgdGhlbSBpZiB0aGV5IGFyZSBhbHJlYWR5IGNhY2hlZC5cbiAqIEl0IHdpbGwgYWxzbyBkZXN0cm95IHJlcXVlc3RzIGlmIHRoZXJlIGFyZSBubyBtb3JlIGNvbnN1bWVycyBsZWZ0LlxuICovXG5leHBvcnQgdHlwZSBRdWVyeVJlcG9zaXRvcnkgPSB7XG4gIC8qKiBDcmVhdGVzIGEgbmV3IHJlcXVlc3QuIElmIHRoZSByZXF1ZXN0IGlzIGFscmVhZHkgY2FjaGVkLCBpdCB3aWxsIGJlIHJldXNlZC4gKi9cbiAgcmVxdWVzdDogPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihvcHRpb25zOiBRdWVyeVJlcG9zaXRvcnlSZXF1ZXN0T3B0aW9uczxUQXJncz4pID0+IFF1ZXJ5UmVwb3NpdG9yeUl0ZW08VEFyZ3M+O1xuXG4gIC8qKiBSZW1vdmVzIGEgY29uc3VtZXIgZnJvbSBhIHJlcXVlc3QgYnkgaXRzIGtleS4gRGVzdHJveXMgdGhlIHJlcXVlc3QgaWYgdGhlcmUgYXJlIG5vIG1vcmUgY29uc3VtZXJzIGxlZnQuICovXG4gIHVuYmluZDogKGtleTogUXVlcnlLZXlPck5vbmUsIGNvbnN1bWVyRGVzdHJveVJlZjogRGVzdHJveVJlZikgPT4gYm9vbGVhbjtcblxuICAvKiogUmVtb3ZlcyBhbGwgc2VjdXJlIHJlcXVlc3RzIGFuZCB0aGVpciBjb25zdW1lcnMgKi9cbiAgdW5iaW5kQWxsU2VjdXJlOiAoKSA9PiB2b2lkO1xufTtcblxuLyoqIFRoZSBrZXkgb2YgYSBxdWVyeSAqL1xuZXhwb3J0IHR5cGUgUXVlcnlLZXkgPSBzdHJpbmc7XG5cbi8qKiBBIGtleSB0aGF0IHdpbGwgbm90IGJlIGNhY2hlZCAqL1xuZXhwb3J0IHR5cGUgUXVlcnlLZXlOb0NhY2hlID0gZmFsc2U7XG5cbi8qKiBBIGtleSB0aGF0IG1heSBvciBtYXkgbm90IGJlIGNhY2hlZCAqL1xuZXhwb3J0IHR5cGUgUXVlcnlLZXlPck5vbmUgPSBRdWVyeUtleSB8IFF1ZXJ5S2V5Tm9DYWNoZTtcblxuLyoqIFJ1bnMgLnVuYmluZCgpIGlmIHRoZSBEZXN0cm95UmVmLm9uRGVzdHJveSgpIGdldHMgY2FsbGVkICovXG50eXBlIERlc3Ryb3lDbGVhbnVwQ2FsbGJhY2sgPSAoKSA9PiB2b2lkO1xuXG4vKiogS2VlcHMgdHJhY2sgb2YgYWxsIHBsYWNlcyB3aGVyZSB0aGUgcmVxdWVzdCBnZXRzIHVzZWQuIFdpbGwgYmUgY2xlYW5lZCB1cCBhbmQgcmVtb3ZlZCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBjb25zdW1lcnMuICAqL1xudHlwZSBEZXN0cm95TGlzdGVuZXJNYXBJdGVtID0ge1xuICBjb25zdW1lcnM6IE1hcDxEZXN0cm95UmVmLCBEZXN0cm95Q2xlYW51cENhbGxiYWNrPjtcbiAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8UXVlcnlBcmdzPjtcbiAgaXNTZWN1cmU6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeVJlcG9zaXRvcnlEZXBlbmRlbmNpZXMgPSB7XG4gIC8qKiBUaGUgSFRUUCBjbGllbnQgdG8gdXNlIGZvciB0aGUgcmVxdWVzdHMgKi9cbiAgaHR0cENsaWVudDogSHR0cENsaWVudDtcblxuICAvKiogVGhlIGVycm9yIGhhbmRsZXIgdG8gdXNlIGZvciB0aGUgcmVxdWVzdHMgKi9cbiAgbmdFcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlcjtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVF1ZXJ5UmVwb3NpdG9yeUNvbmZpZyA9IFF1ZXJ5Q2xpZW50Q29uZmlnICYge1xuICAvKiogVGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgcXVlcnkgcmVwb3NpdG9yeSAqL1xuICBkZXBlbmRlbmNpZXM6IFF1ZXJ5UmVwb3NpdG9yeURlcGVuZGVuY2llcztcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVRdWVyeVJlcG9zaXRvcnkgPSAoY29uZmlnOiBDcmVhdGVRdWVyeVJlcG9zaXRvcnlDb25maWcpOiBRdWVyeVJlcG9zaXRvcnkgPT4ge1xuICBjb25zdCBjYWNoZSA9IG5ldyBNYXA8UXVlcnlLZXksIERlc3Ryb3lMaXN0ZW5lck1hcEl0ZW0+KCk7XG5cbiAgY29uc3QgcmVxdWVzdCA9IDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4ob3B0aW9uczogUXVlcnlSZXBvc2l0b3J5UmVxdWVzdE9wdGlvbnM8VEFyZ3M+KSA9PiB7XG4gICAgY29uc3QgeyBhcmdzLCBjbGllbnRPcHRpb25zLCBydW5RdWVyeU9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qgc2hvdWxkQ2FjaGUgPVxuICAgICAgb3B0aW9ucy5pbnRlcm5hbFJ1blF1ZXJ5T3B0aW9ucz8udXNlUXVlcnlSZXBvc2l0b3J5Q2FjaGUgPT09IGZhbHNlXG4gICAgICAgID8gZmFsc2VcbiAgICAgICAgOiBzaG91bGRDYWNoZVF1ZXJ5KG9wdGlvbnMubWV0aG9kKSB8fCBvcHRpb25zLmludGVybmFsUnVuUXVlcnlPcHRpb25zPy51c2VRdWVyeVJlcG9zaXRvcnlDYWNoZSA9PT0gdHJ1ZTtcblxuICAgIGlmICghc2hvdWxkQ2FjaGUgJiYgb3B0aW9ucy5rZXkpIHRocm93IHVuY2FjaGVhYmxlUmVxdWVzdEhhc0NhY2hlS2V5UGFyYW0ob3B0aW9ucy5rZXkpO1xuICAgIGlmICghc2hvdWxkQ2FjaGUgJiYgcnVuUXVlcnlPcHRpb25zPy5hbGxvd0NhY2hlKSB0aHJvdyB1bmNhY2hlYWJsZVJlcXVlc3RIYXNBbGxvd0NhY2hlUGFyYW0oKTtcblxuICAgIGNvbnN0IHJvdXRlID0gYnVpbGRSb3V0ZSh7XG4gICAgICBiYXNlOiBjb25maWcuYmFzZVVybCxcbiAgICAgIHJvdXRlOiBvcHRpb25zLnJvdXRlLFxuICAgICAgcGF0aFBhcmFtczogYXJncz8ucGF0aFBhcmFtcyxcbiAgICAgIHF1ZXJ5UGFyYW1zOiBhcmdzPy5xdWVyeVBhcmFtcyxcbiAgICAgIHF1ZXJ5UGFyYW1Db25maWc6IGNvbmZpZy5xdWVyeVN0cmluZyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGtleSA9XG4gICAgICBzaG91bGRDYWNoZSAmJlxuICAgICAgYnVpbGRRdWVyeUNhY2hlS2V5KGAke29wdGlvbnMua2V5ID8gb3B0aW9ucy5rZXkgKyAnXycgOiAnJ30ke3JvdXRlfWAsIHtcbiAgICAgICAgYm9keTogYXJncz8uYm9keSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IGFyZ3M/LnF1ZXJ5UGFyYW1zLFxuICAgICAgICBwYXRoUGFyYW1zOiBhcmdzPy5wYXRoUGFyYW1zLFxuICAgICAgICBoZWFkZXJzOiBhcmdzPy5oZWFkZXJzLFxuICAgICAgfSk7XG5cbiAgICBjb25zdCBwcmV2aW91c0tleSA9IG9wdGlvbnMucHJldmlvdXNLZXk7XG5cbiAgICBpZiAoa2V5ICE9PSBwcmV2aW91c0tleSAmJiBwcmV2aW91c0tleSkge1xuICAgICAgdW5iaW5kKHByZXZpb3VzS2V5LCBvcHRpb25zLmNvbnN1bWVyRGVzdHJveVJlZik7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZENhY2hlICYmIGtleSkge1xuICAgICAgY29uc3QgY2FjaGVFbnRyeSA9IGNhY2hlLmdldChrZXkpO1xuXG4gICAgICBpZiAoY2FjaGVFbnRyeSkge1xuICAgICAgICBiaW5kKGtleSwgb3B0aW9ucy5jb25zdW1lckRlc3Ryb3lSZWYsIGNhY2hlRW50cnkucmVxdWVzdCwgb3B0aW9ucy5pc1NlY3VyZSA/PyBmYWxzZSk7XG5cbiAgICAgICAgaWYgKCFydW5RdWVyeU9wdGlvbnM/LmFsbG93Q2FjaGUgfHwgY2FjaGVFbnRyeS5yZXF1ZXN0LmlzU3RhbGUoKSkge1xuICAgICAgICAgIGNhY2hlRW50cnkucmVxdWVzdC5leGVjdXRlKHsgYWxsb3dDYWNoZTogcnVuUXVlcnlPcHRpb25zPy5hbGxvd0NhY2hlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsga2V5LCByZXF1ZXN0OiBjYWNoZUVudHJ5LnJlcXVlc3QgYXMgSHR0cFJlcXVlc3Q8VEFyZ3M+IH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNyZWF0ZUh0dHBSZXF1ZXN0PFRBcmdzPih7XG4gICAgICBmdWxsUGF0aDogcm91dGUsXG4gICAgICBhcmdzLFxuICAgICAgbWV0aG9kOiBvcHRpb25zLm1ldGhvZCxcbiAgICAgIGRlcGVuZGVuY2llczogY29uZmlnLmRlcGVuZGVuY2llcyxcbiAgICAgIGNsaWVudE9wdGlvbnMsXG4gICAgICBjYWNoZUFkYXB0ZXI6IGNvbmZpZy5jYWNoZUFkYXB0ZXIsXG4gICAgICByZXRyeUZuOiBjb25maWcucmV0cnlGbixcbiAgICB9KTtcblxuICAgIHJlcXVlc3QuZXhlY3V0ZSgpO1xuXG4gICAgaWYgKHNob3VsZENhY2hlICYmIGtleSkge1xuICAgICAgYmluZChrZXksIG9wdGlvbnMuY29uc3VtZXJEZXN0cm95UmVmLCByZXF1ZXN0LCBvcHRpb25zLmlzU2VjdXJlID8/IGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBrZXksIHJlcXVlc3QgfTtcbiAgfTtcblxuICBjb25zdCB1bmJpbmQgPSAoa2V5OiBRdWVyeUtleU9yTm9uZSwgY29uc3VtZXJEZXN0cm95UmVmOiBEZXN0cm95UmVmKSA9PiB7XG4gICAgaWYgKCFrZXkpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IGNhY2hlRW50cnkgPSBjYWNoZS5nZXQoa2V5KTtcblxuICAgIGlmICghY2FjaGVFbnRyeSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY2FjaGVFbnRyeS5jb25zdW1lcnMuZGVsZXRlKGNvbnN1bWVyRGVzdHJveVJlZik7XG5cbiAgICBpZiAoY2FjaGVFbnRyeS5jb25zdW1lcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgY2FjaGVFbnRyeS5yZXF1ZXN0LmRlc3Ryb3koKTtcbiAgICAgIGNhY2hlLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IHVuYmluZEFsbFNlY3VyZSA9ICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGNhY2hlRW50cnldIG9mIGNhY2hlLmVudHJpZXMoKSkge1xuICAgICAgaWYgKGNhY2hlRW50cnkuaXNTZWN1cmUpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb25zdW1lckRlc3Ryb3lSZWYgb2YgY2FjaGVFbnRyeS5jb25zdW1lcnMua2V5cygpKSB7XG4gICAgICAgICAgdW5iaW5kKGtleSwgY29uc3VtZXJEZXN0cm95UmVmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBiaW5kID0gKGtleTogUXVlcnlLZXksIGNvbnN1bWVyRGVzdHJveVJlZjogRGVzdHJveVJlZiwgcmVxdWVzdDogSHR0cFJlcXVlc3Q8UXVlcnlBcmdzPiwgaXNTZWN1cmU6IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCBkZXN0cm95TGlzdGVuZXIgPSBjb25zdW1lckRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHVuYmluZChrZXksIGNvbnN1bWVyRGVzdHJveVJlZikpO1xuXG4gICAgY29uc3QgY2FjaGVFbnRyeSA9IGNhY2hlLmdldChrZXkpO1xuXG4gICAgaWYgKGNhY2hlRW50cnkpIHtcbiAgICAgIGNhY2hlRW50cnkuY29uc3VtZXJzLnNldChjb25zdW1lckRlc3Ryb3lSZWYsIGRlc3Ryb3lMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbnN1bWVyczogTWFwPERlc3Ryb3lSZWYsIERlc3Ryb3lDbGVhbnVwQ2FsbGJhY2s+ID0gbmV3IE1hcChbXSk7XG5cbiAgICAgIGNvbnN1bWVycy5zZXQoY29uc3VtZXJEZXN0cm95UmVmLCBkZXN0cm95TGlzdGVuZXIpO1xuXG4gICAgICBjYWNoZS5zZXQoa2V5LCB7XG4gICAgICAgIGNvbnN1bWVycyxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgaXNTZWN1cmUsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVwb3NpdG9yeTogUXVlcnlSZXBvc2l0b3J5ID0ge1xuICAgIHJlcXVlc3QsXG4gICAgdW5iaW5kLFxuICAgIHVuYmluZEFsbFNlY3VyZSxcbiAgfTtcblxuICByZXR1cm4gcmVwb3NpdG9yeTtcbn07XG4iXX0=","import { HttpClient } from '@angular/common/http';\nimport { ErrorHandler, inject } from '@angular/core';\nimport { createQueryRepository } from './query-repository';\nexport const createQueryClient = (config) => {\n const httpClient = inject(HttpClient);\n const ngErrorHandler = inject(ErrorHandler);\n const repository = createQueryRepository({ ...config, dependencies: { httpClient, ngErrorHandler } });\n const client = {\n repository,\n };\n return client;\n};\nexport const provideQueryClient = (config) => {\n return {\n provide: config.token,\n useFactory: () => createQueryClient(config),\n };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9odHRwL3F1ZXJ5LWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUFtQixxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBTTVFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBeUIsRUFBRSxFQUFFO0lBQzdELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFNUMsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxZQUFZLEVBQUUsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXRHLE1BQU0sTUFBTSxHQUFnQjtRQUMxQixVQUFVO0tBQ1gsQ0FBQztJQUVGLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsTUFBeUIsRUFBRSxFQUFFO0lBQzlELE9BQU87UUFDTCxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDckIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztLQUM1QyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEVycm9ySGFuZGxlciwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBRdWVyeUNsaWVudENvbmZpZyB9IGZyb20gJy4vcXVlcnktY2xpZW50LWNvbmZpZyc7XG5pbXBvcnQgeyBRdWVyeVJlcG9zaXRvcnksIGNyZWF0ZVF1ZXJ5UmVwb3NpdG9yeSB9IGZyb20gJy4vcXVlcnktcmVwb3NpdG9yeSc7XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q2xpZW50ID0ge1xuICByZXBvc2l0b3J5OiBRdWVyeVJlcG9zaXRvcnk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUXVlcnlDbGllbnQgPSAoY29uZmlnOiBRdWVyeUNsaWVudENvbmZpZykgPT4ge1xuICBjb25zdCBodHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICBjb25zdCBuZ0Vycm9ySGFuZGxlciA9IGluamVjdChFcnJvckhhbmRsZXIpO1xuXG4gIGNvbnN0IHJlcG9zaXRvcnkgPSBjcmVhdGVRdWVyeVJlcG9zaXRvcnkoeyAuLi5jb25maWcsIGRlcGVuZGVuY2llczogeyBodHRwQ2xpZW50LCBuZ0Vycm9ySGFuZGxlciB9IH0pO1xuXG4gIGNvbnN0IGNsaWVudDogUXVlcnlDbGllbnQgPSB7XG4gICAgcmVwb3NpdG9yeSxcbiAgfTtcblxuICByZXR1cm4gY2xpZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IHByb3ZpZGVRdWVyeUNsaWVudCA9IChjb25maWc6IFF1ZXJ5Q2xpZW50Q29uZmlnKSA9PiB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogY29uZmlnLnRva2VuLFxuICAgIHVzZUZhY3Rvcnk6ICgpID0+IGNyZWF0ZVF1ZXJ5Q2xpZW50KGNvbmZpZyksXG4gIH07XG59O1xuIl19","import { InjectionToken } from '@angular/core';\n/**\n * This function creates a query client config.\n * The config is used to create a query client using the `provideQueryClient(myConfig)` function.\n */\nexport const createQueryClientConfig = (options) => {\n const token = new InjectionToken(`QueryClient_${options.name}`);\n const clientConfig = {\n baseUrl: options.baseUrl,\n token,\n name: options.name,\n queryString: options.queryString,\n // createHttpRequest will use fallbacks if these are not provided\n cacheAdapter: options.cacheAdapter,\n retryFn: options.retryFn,\n };\n return clientConfig;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY2xpZW50LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9leHBlcmltZW50YWwvaHR0cC9xdWVyeS1jbGllbnQtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFnRC9DOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsT0FBdUMsRUFBRSxFQUFFO0lBQ2pGLE1BQU0sS0FBSyxHQUFHLElBQUksY0FBYyxDQUFvQixlQUFlLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRW5GLE1BQU0sWUFBWSxHQUFzQjtRQUN0QyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsS0FBSztRQUNMLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7UUFFaEMsaUVBQWlFO1FBQ2pFLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtRQUNsQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87S0FDekIsQ0FBQztJQUVGLE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJ1aWxkUXVlcnlTdHJpbmdDb25maWcgfSBmcm9tICcuLi8uLi9yZXF1ZXN0JztcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50IH0gZnJvbSAnLi9xdWVyeS1jbGllbnQnO1xuaW1wb3J0IHsgU2hvdWxkUmV0cnlSZXF1ZXN0Rm4gfSBmcm9tICcuL3F1ZXJ5LXV0aWxzJztcblxuZXhwb3J0IHR5cGUgQ2FjaGVBZGFwdGVyRm4gPSAoaGVhZGVyczogSHR0cEhlYWRlcnMpID0+IG51bWJlciB8IG51bGw7XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVF1ZXJ5Q2xpZW50Q29uZmlnT3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIFRoZSBiYXNlIFVSTCBvZiB0aGUgY2xpZW50XG4gICAqIEBleGFtcGxlICdodHRwczovL2FwaS5leGFtcGxlLmNvbS92MSdcbiAgICovXG4gIGJhc2VVcmw6IHN0cmluZztcblxuICAvKiogQ29uZmlndXJhdGlvbiBmb3IgYnVpbGRpbmcgcXVlcnkgc3RyaW5ncyAqL1xuICBxdWVyeVN0cmluZz86IEJ1aWxkUXVlcnlTdHJpbmdDb25maWc7XG5cbiAgLyoqIFRoZSBuYW1lIG9mIHRoZSBjbGllbnQgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FjaGUgYWRhcHRlciBmdW5jdGlvbiB0byB1c2UgZm9yIHRoZSBjbGllbnQuXG4gICAqIEl0IGRldGVybWluZXMgaG93IGxvbmcgdGhlIHJlc3BvbnNlIG9mIGEgcmVxdWVzdCBjYW4gYmUgY2FjaGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBleHRyYWN0RXhwaXJlc0luU2Vjb25kcygpXG4gICAqL1xuICBjYWNoZUFkYXB0ZXI/OiBDYWNoZUFkYXB0ZXJGbjtcblxuICAvKipcbiAgICogVGhlIHJldHJ5IGZ1bmN0aW9uIHRvIHVzZSBmb3IgdGhlIGNsaWVudC5cbiAgICogSXQgZGV0ZXJtaW5lcyBpZiBhIHJlcXVlc3Qgc2hvdWxkIGJlIHJldHJpZWQgYWZ0ZXIgaXQgZmFpbGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBzaG91bGRSZXRyeVJlcXVlc3QoKVxuICAgKi9cbiAgcmV0cnlGbj86IFNob3VsZFJldHJ5UmVxdWVzdEZuO1xufTtcblxuZXhwb3J0IHR5cGUgUXVlcnlDbGllbnRDb25maWcgPSBDcmVhdGVRdWVyeUNsaWVudENvbmZpZ09wdGlvbnMgJiB7XG4gIC8qKiBBIGdlbmVyYXRlZCB0b2tlbiBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24gKi9cbiAgdG9rZW46IFF1ZXJ5Q2xpZW50UmVmO1xufTtcblxuLyoqXG4gKiBBIHRva2VuIGZvciBhIHF1ZXJ5IGNsaWVudC5cbiAqIFRoaXMgdG9rZW4gY2FuIGJlIHVzZWQgdG8gaW5qZWN0IGEgcXVlcnkgY2xpZW50IGludG8gYSBzZXJ2aWNlLlxuICovXG5leHBvcnQgdHlwZSBRdWVyeUNsaWVudFJlZiA9IEluamVjdGlvblRva2VuPFF1ZXJ5Q2xpZW50PjtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBxdWVyeSBjbGllbnQgY29uZmlnLlxuICogVGhlIGNvbmZpZyBpcyB1c2VkIHRvIGNyZWF0ZSBhIHF1ZXJ5IGNsaWVudCB1c2luZyB0aGUgYHByb3ZpZGVRdWVyeUNsaWVudChteUNvbmZpZylgIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUXVlcnlDbGllbnRDb25maWcgPSAob3B0aW9uczogQ3JlYXRlUXVlcnlDbGllbnRDb25maWdPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHRva2VuID0gbmV3IEluamVjdGlvblRva2VuPFF1ZXJ5Q2xpZW50Q29uZmlnPihgUXVlcnlDbGllbnRfJHtvcHRpb25zLm5hbWV9YCk7XG5cbiAgY29uc3QgY2xpZW50Q29uZmlnOiBRdWVyeUNsaWVudENvbmZpZyA9IHtcbiAgICBiYXNlVXJsOiBvcHRpb25zLmJhc2VVcmwsXG4gICAgdG9rZW4sXG4gICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgIHF1ZXJ5U3RyaW5nOiBvcHRpb25zLnF1ZXJ5U3RyaW5nLFxuXG4gICAgLy8gY3JlYXRlSHR0cFJlcXVlc3Qgd2lsbCB1c2UgZmFsbGJhY2tzIGlmIHRoZXNlIGFyZSBub3QgcHJvdmlkZWRcbiAgICBjYWNoZUFkYXB0ZXI6IG9wdGlvbnMuY2FjaGVBZGFwdGVyLFxuICAgIHJldHJ5Rm46IG9wdGlvbnMucmV0cnlGbixcbiAgfTtcblxuICByZXR1cm4gY2xpZW50Q29uZmlnO1xufTtcbiJdfQ==","import { createQuery } from './query';\nexport const splitQueryConfig = (args) => {\n let queryConfig = {};\n let features = [];\n const first = args[0];\n if (first) {\n if ('type' in first) {\n features = args;\n }\n else {\n [queryConfig, ...features] = args;\n }\n }\n return { features, queryConfig };\n};\nexport const createQueryCreator = (options, internals) => {\n function queryCreator(...args) {\n const { features, queryConfig } = splitQueryConfig(args);\n return createQuery({\n creator: options,\n creatorInternals: internals,\n features,\n queryConfig,\n });\n }\n return queryCreator;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY3JlYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9leHBlcmltZW50YWwvaHR0cC9xdWVyeS1jcmVhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBaUQsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBOEZyRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUEwQixJQUEyQyxFQUFFLEVBQUU7SUFDdkcsSUFBSSxXQUFXLEdBQWdCLEVBQUUsQ0FBQztJQUNsQyxJQUFJLFFBQVEsR0FBMEIsRUFBRSxDQUFDO0lBRXpDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV0QixJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsSUFBSSxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7WUFDcEIsUUFBUSxHQUFHLElBQTZCLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDTixDQUFDLFdBQVcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxHQUFHLElBQStDLENBQUM7UUFDL0UsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDO0FBQ25DLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQ2hDLE9BQThDLEVBQzlDLFNBQW1ELEVBQzlCLEVBQUU7SUFJdkIsU0FBUyxZQUFZLENBQUMsR0FBRyxJQUEyQztRQUNsRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxHQUFHLGdCQUFnQixDQUFRLElBQUksQ0FBQyxDQUFDO1FBRWhFLE9BQU8sV0FBVyxDQUFRO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGdCQUFnQixFQUFFLFNBQVM7WUFDM0IsUUFBUTtZQUNSLFdBQVc7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBSZXF1ZXN0UmVzcG9uc2VUeXBlLCBIdHRwUmVxdWVzdFRyYW5zZmVyQ2FjaGVDb25maWcgfSBmcm9tICcuL2h0dHAtcmVxdWVzdCc7XG5pbXBvcnQgeyBBbnlOZXdRdWVyeSwgUGF0aFBhcmFtc1R5cGUsIFF1ZXJ5LCBRdWVyeUFyZ3MsIGNyZWF0ZVF1ZXJ5IH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBRdWVyeUNsaWVudENvbmZpZyB9IGZyb20gJy4vcXVlcnktY2xpZW50LWNvbmZpZyc7XG5pbXBvcnQgeyBRdWVyeUZlYXR1cmUgfSBmcm9tICcuL3F1ZXJ5LWZlYXR1cmVzJztcblxuZXhwb3J0IHR5cGUgUm91dGVUeXBlPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9XG4gIFBhdGhQYXJhbXNUeXBlPFRBcmdzPiBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9ID8gKGFyZ3M6IFRBcmdzWydwYXRoUGFyYW1zJ10pID0+IFJvdXRlU3RyaW5nIDogUm91dGVTdHJpbmc7XG5cbmV4cG9ydCB0eXBlIFJvdXRlU3RyaW5nID0gYC8ke3N0cmluZ31gO1xuXG5leHBvcnQgdHlwZSBDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zID0ge1xuICAvKipcbiAgICogSWYgdHJ1ZSwgdGhlIHF1ZXJ5IGxvYWRpbmcgc3RhdGUgd2lsbCBpbmNsdWRlIHByb2dyZXNzIGluZm9ybWF0aW9uLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZmlsZSB1cGxvYWRzIGFuZCBkb3dubG9hZHMuXG4gICAqXG4gICAqICoqV2FybmluZyoqOiBVcGxvYWQgcHJvZ3Jlc3MgZXZlbnRzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGJyb3dzZXJzIHdoZW4gdXNpbmcgdGhlIGZldGNoIEFQSSwgc3VjaCBhcyB3aXRoIGBwcm92aWRlSHR0cENsaWVudCh3aXRoRmV0Y2goKSlgLlxuICAgKiBJbiB0aGlzIGNhc2UsIHlvdSBzaG91bGQgdXNlIHRoZSBvbGRlciBYSFIgaW1wbGVtZW50YXRpb24gYnkgb21pdHRpbmcgYHdpdGhGZXRjaCgpYC4gQnV0IHRha2UgaW50byBhY2NvdW50IHRoYXQgWEhSIGlzIG5vdCBzdXBwb3J0ZWQgaW4gc2VydmVyLXNpZGUgcmVuZGVyaW5nIGVudmlyb25tZW50cy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2FuZ3VsYXIuZGV2L2d1aWRlL2h0dHAvbWFraW5nLXJlcXVlc3RzI3JlY2VpdmluZy1yYXctcHJvZ3Jlc3MtZXZlbnRzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSByZXNwb25zZSB0eXBlIG9mIHRoZSBxdWVyeS5cbiAgICogQGRlZmF1bHQgJ2pzb24nXG4gICAqL1xuICByZXNwb25zZVR5cGU/OiBIdHRwUmVxdWVzdFJlc3BvbnNlVHlwZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIGNyZWRlbnRpYWxzIChjb29raWVzKSBpbiB0aGUgcmVxdWVzdCBvciBub3QuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IGFjY2VwdHMgZWl0aGVyIGEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSB0cmFuc2ZlcnJpbmcgY2FjaGUgZm9yIGVsaWdpYmxlXG4gICAqIHJlcXVlc3RzIHBlcmZvcm1lZCB1c2luZyBgSHR0cENsaWVudGAsIG9yIGFuIG9iamVjdCwgd2hpY2ggYWxsb3dzIHRvIGNvbmZpZ3VyZSBjYWNoZVxuICAgKiBwYXJhbWV0ZXJzLCBzdWNoIGFzIHdoaWNoIGhlYWRlcnMgc2hvdWxkIGJlIGluY2x1ZGVkIChubyBoZWFkZXJzIGFyZSBpbmNsdWRlZCBieSBkZWZhdWx0KS5cbiAgICpcbiAgICogU2V0dGluZyB0aGlzIHByb3BlcnR5IHdpbGwgb3ZlcnJpZGUgdGhlIG9wdGlvbnMgcGFzc2VkIHRvIGBwcm92aWRlQ2xpZW50SHlkcmF0aW9uKClgIGZvciB0aGlzXG4gICAqIHBhcnRpY3VsYXIgcmVxdWVzdFxuICAgKi9cbiAgdHJhbnNmZXJDYWNoZT86IEh0dHBSZXF1ZXN0VHJhbnNmZXJDYWNoZUNvbmZpZztcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q3JlYXRvcjxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gICguLi5mZWF0dXJlczogUXVlcnlGZWF0dXJlPFRBcmdzPltdKTogUXVlcnk8VEFyZ3M+O1xuICAocXVlcnlDb25maWc6IFF1ZXJ5Q29uZmlnLCAuLi5mZWF0dXJlczogUXVlcnlGZWF0dXJlPFRBcmdzPltdKTogUXVlcnk8VEFyZ3M+O1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEFueVF1ZXJ5Q3JlYXRvciA9IFF1ZXJ5Q3JlYXRvcjxhbnk+O1xuXG5leHBvcnQgdHlwZSBRdWVyeUFyZ3NPZjxUIGV4dGVuZHMgQW55UXVlcnlDcmVhdG9yIHwgQW55TmV3UXVlcnk+ID1cbiAgVCBleHRlbmRzIFF1ZXJ5Q3JlYXRvcjxpbmZlciBUQXJncz4gPyBUQXJncyA6IFQgZXh0ZW5kcyBRdWVyeTxpbmZlciBUQXJncz4gPyBUQXJncyA6IG5ldmVyO1xuXG5leHBvcnQgdHlwZSBSdW5RdWVyeUNyZWF0b3I8VENyZWF0b3IgZXh0ZW5kcyBBbnlRdWVyeUNyZWF0b3I+ID0gUmV0dXJuVHlwZTxUQ3JlYXRvcj47XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5TWV0aG9kID0gJ0dFVCcgfCAnT1BUSU9OUycgfCAnSEVBRCcgfCAnUE9TVCcgfCAnUFVUJyB8ICdERUxFVEUnIHwgJ1BBVENIJyB8ICdUUkFDRScgfCAnQ09OTkVDVCc7XG5cbmV4cG9ydCB0eXBlIEludGVybmFsQ3JlYXRlUXVlcnlDcmVhdG9yT3B0aW9uczxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIC8qKlxuICAgKiBUaGUgcm91dGUgb2YgdGhlIHF1ZXJ5LlxuICAgKiBJZiB0aGUgcXVlcnkgaGFzIHBhdGggcGFyYW1zLCB0aGUgcm91dGUgc2hvdWxkIGJlIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgcGF0aCBwYXJhbXMgYXMgYW4gYXJndW1lbnQuXG4gICAqIE90aGVyd2lzZSwgaXQgc2hvdWxkIGJlIGEgc3RyaW5nLlxuICAgKi9cbiAgcm91dGU6IFJvdXRlVHlwZTxUQXJncz47XG5cbiAgbWV0aG9kOiBRdWVyeU1ldGhvZDtcbiAgY2xpZW50OiBRdWVyeUNsaWVudENvbmZpZztcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q29uZmlnID0ge1xuICAvKiogQSBjdXN0b20gaWQgdG8gdXNlIGZvciB0aGlzIHF1ZXJ5LiBPbmx5IGFmZmVjdHMgcXVlcmllcyB0aGF0IGNhbiBiZSBjYWNoZWQuICovXG4gIGtleT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgdGhlIHF1ZXJ5IHdpbGwgbm90IGJlIGV4ZWN1dGVkIGF1dG9tYXRpY2FsbHkuXG4gICAqIERvZXMgbm90IGFmZmVjdCBtdXRhdGlvbnMgc3VjaCBhcyBQT1NULCBQVVQgZXRjLiBzaW5jZSB0aG9zZSBhcmUgbmV2ZXIgZXhlY3V0ZWQgYXV0b21hdGljYWxseS5cbiAgICovXG4gIG9ubHlNYW51YWxFeGVjdXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0aGUgcXVlcnkgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgYmVjYXVzZSBhIFwid2l0aEFyZ3MoKVwiIGZlYXR1cmUgaXMgbWlzc2luZy5cbiAgICovXG4gIHNpbGVuY2VNaXNzaW5nV2l0aEFyZ3NGZWF0dXJlRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGN1c3RvbSBpbmplY3RvciB0byB1c2UgZm9yIHRoaXMgcXVlcnkuXG4gICAqL1xuICBpbmplY3Rvcj86IEluamVjdG9yO1xufTtcblxuZXhwb3J0IGNvbnN0IHNwbGl0UXVlcnlDb25maWcgPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KGFyZ3M6IChRdWVyeUZlYXR1cmU8VEFyZ3M+IHwgUXVlcnlDb25maWcpW10pID0+IHtcbiAgbGV0IHF1ZXJ5Q29uZmlnOiBRdWVyeUNvbmZpZyA9IHt9O1xuICBsZXQgZmVhdHVyZXM6IFF1ZXJ5RmVhdHVyZTxUQXJncz5bXSA9IFtdO1xuXG4gIGNvbnN0IGZpcnN0ID0gYXJnc1swXTtcblxuICBpZiAoZmlyc3QpIHtcbiAgICBpZiAoJ3R5cGUnIGluIGZpcnN0KSB7XG4gICAgICBmZWF0dXJlcyA9IGFyZ3MgYXMgUXVlcnlGZWF0dXJlPFRBcmdzPltdO1xuICAgIH0gZWxzZSB7XG4gICAgICBbcXVlcnlDb25maWcsIC4uLmZlYXR1cmVzXSA9IGFyZ3MgYXMgW1F1ZXJ5Q29uZmlnLCAuLi5RdWVyeUZlYXR1cmU8VEFyZ3M+W11dO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBmZWF0dXJlcywgcXVlcnlDb25maWcgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVRdWVyeUNyZWF0b3IgPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KFxuICBvcHRpb25zOiBDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zIHwgdW5kZWZpbmVkLFxuICBpbnRlcm5hbHM6IEludGVybmFsQ3JlYXRlUXVlcnlDcmVhdG9yT3B0aW9uczxUQXJncz4sXG4pOiBRdWVyeUNyZWF0b3I8VEFyZ3M+ID0+IHtcbiAgZnVuY3Rpb24gcXVlcnlDcmVhdG9yKC4uLmZlYXR1cmVzOiBRdWVyeUZlYXR1cmU8VEFyZ3M+W10pOiBRdWVyeTxUQXJncz47XG4gIGZ1bmN0aW9uIHF1ZXJ5Q3JlYXRvcihxdWVyeUNvbmZpZzogUXVlcnlDb25maWcsIC4uLmZlYXR1cmVzOiBRdWVyeUZlYXR1cmU8VEFyZ3M+W10pOiBRdWVyeTxUQXJncz47XG5cbiAgZnVuY3Rpb24gcXVlcnlDcmVhdG9yKC4uLmFyZ3M6IChRdWVyeUZlYXR1cmU8VEFyZ3M+IHwgUXVlcnlDb25maWcpW10pOiBRdWVyeTxUQXJncz4ge1xuICAgIGNvbnN0IHsgZmVhdHVyZXMsIHF1ZXJ5Q29uZmlnIH0gPSBzcGxpdFF1ZXJ5Q29uZmlnPFRBcmdzPihhcmdzKTtcblxuICAgIHJldHVybiBjcmVhdGVRdWVyeTxUQXJncz4oe1xuICAgICAgY3JlYXRvcjogb3B0aW9ucyxcbiAgICAgIGNyZWF0b3JJbnRlcm5hbHM6IGludGVybmFscyxcbiAgICAgIGZlYXR1cmVzLFxuICAgICAgcXVlcnlDb25maWcsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcXVlcnlDcmVhdG9yO1xufTtcbiJdfQ==","import { HttpHeaders } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { of, Subscription, switchMap, tap } from 'rxjs';\nimport { cleanupPreviousExecute, queryExecute, resetExecuteState, setupQueryExecuteState } from './query-execute-utils';\nimport { circularQueryDependencyChecker } from './query-utils';\nconst AUTH_HEADER = 'Authorization';\nexport const createSecureExecuteFn = (executeOptions) => {\n const executeState = setupQueryExecuteState();\n const authProvider = inject(executeOptions.creatorInternals.authProvider.token);\n const circularChecker = circularQueryDependencyChecker();\n let authQuerySubscription = Subscription.EMPTY;\n const reset = () => {\n authQuerySubscription.unsubscribe();\n authQuerySubscription = Subscription.EMPTY;\n resetExecuteState({ executeState, executeOptions: executeOptions });\n };\n const error = (query) => {\n const state = executeOptions.state;\n state.error.set(query.error());\n state.loading.set(null);\n state.response.set(null);\n state.latestHttpEvent.set(null);\n state.args.set(null);\n };\n const authAndExec = (executeArgs) => {\n const { args, options: runOptions } = executeArgs ?? {};\n const tokens = authProvider.tokens();\n let headers = args?.headers || new HttpHeaders();\n if (!tokens) {\n throw new Error('Tokens are not available inside authAndExec');\n }\n if (!headers.has(AUTH_HEADER)) {\n headers = headers.set(AUTH_HEADER, `Bearer ${tokens.accessToken}`);\n }\n const updatedArgs = { ...(args ?? {}), headers };\n queryExecute({\n executeOptions: executeOptions,\n executeState,\n args: updatedArgs,\n options: runOptions,\n isSecure: true,\n });\n };\n const exec = (executeArgs) => {\n circularChecker.check();\n // Make sure all effects are flushed before reading the args.\n // A withArgs feature effect might still be pending otherwise resulting in the wrong args being read.\n executeOptions.deps.effectScheduler.flush();\n const execArgsWithDefaults = {\n args: executeArgs?.args ?? executeOptions.state.args(),\n options: executeArgs?.options,\n };\n authQuerySubscription.unsubscribe();\n authQuerySubscription = Subscription.EMPTY;\n cleanupPreviousExecute({ executeOptions: executeOptions, executeState });\n const authQuery = authProvider.latestExecutedQuery();\n // This might happen if a secure query gets executed while the auth query has just been created.\n // This is due to the fact that the query state is being synced with the state inside the http request using effect.\n const isAuthQueryFreshlyExecuted = authQuery?.lastTimeExecutedAt() === null;\n if (!authQuery || authQuery.loading() || isAuthQueryFreshlyExecuted) {\n executeOptions.state.loading.set({ executeTime: Date.now(), progress: null });\n authQuerySubscription = toObservable(authProvider.latestExecutedQuery, { injector: executeOptions.deps.injector })\n .pipe(switchMap((query) => {\n if (!query)\n return of(null);\n return toObservable(query.isAlive, { injector: executeOptions.deps.injector }).pipe(tap((isAlive) => {\n if (isAlive)\n return;\n if (query.error()) {\n error(query);\n }\n else if (query.response()) {\n authAndExec(execArgsWithDefaults);\n }\n }));\n }))\n .subscribe();\n }\n else if (authQuery.response()) {\n authAndExec(execArgsWithDefaults);\n }\n else if (authQuery.error()) {\n error(authQuery);\n }\n else {\n throw new Error('Invalid state ocurred inside createSecureExecuteFn');\n }\n };\n exec['reset'] = reset;\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n return exec;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlLXF1ZXJ5LWV4ZWN1dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvc2VjdXJlLXF1ZXJ5LWV4ZWN1dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hILE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvRCxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUM7QUFTcEMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FDbkMsY0FBc0QsRUFDekIsRUFBRTtJQUMvQixNQUFNLFlBQVksR0FBRyxzQkFBc0IsRUFBRSxDQUFDO0lBQzlDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sZUFBZSxHQUFHLDhCQUE4QixFQUFFLENBQUM7SUFFekQsSUFBSSxxQkFBcUIsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBRS9DLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRTtRQUNqQixxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxxQkFBcUIsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQzNDLGlCQUFpQixD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QUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXRCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFckUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgb2YsIFN1YnNjcmlwdGlvbiwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFueVF1ZXJ5U25hcHNob3QsIFF1ZXJ5QXJncywgUmVxdWVzdEFyZ3MgfSBmcm9tICcuL3F1ZXJ5JztcbmltcG9ydCB7IENyZWF0ZVF1ZXJ5RXhlY3V0ZU9wdGlvbnMsIEludGVybmFsUXVlcnlFeGVjdXRlLCBRdWVyeUV4ZWN1dGVBcmdzIH0gZnJvbSAnLi9xdWVyeS1leGVjdXRlJztcbmltcG9ydCB7IGNsZWFudXBQcmV2aW91c0V4ZWN1dGUsIHF1ZXJ5RXhlY3V0ZSwgcmVzZXRFeGVjdXRlU3RhdGUsIHNldHVwUXVlcnlFeGVjdXRlU3RhdGUgfSBmcm9tICcuL3F1ZXJ5LWV4ZWN1dGUtdXRpbHMnO1xuaW1wb3J0IHsgY2lyY3VsYXJRdWVyeURlcGVuZGVuY3lDaGVja2VyIH0gZnJvbSAnLi9xdWVyeS11dGlscyc7XG5pbXBvcnQgeyBJbnRlcm5hbFNlY3VyZUNyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnMgfSBmcm9tICcuL3NlY3VyZS1xdWVyeS1jcmVhdG9yJztcblxuY29uc3QgQVVUSF9IRUFERVIgPSAnQXV0aG9yaXphdGlvbic7XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVNlY3VyZVF1ZXJ5RXhlY3V0ZU9wdGlvbnM8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0gT21pdDxcbiAgQ3JlYXRlUXVlcnlFeGVjdXRlT3B0aW9uczxUQXJncz4sXG4gICdjcmVhdG9ySW50ZXJuYWxzJ1xuPiAmIHtcbiAgY3JlYXRvckludGVybmFsczogSW50ZXJuYWxTZWN1cmVDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zPFRBcmdzPjtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTZWN1cmVFeGVjdXRlRm4gPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KFxuICBleGVjdXRlT3B0aW9uczogQ3JlYXRlU2VjdXJlUXVlcnlFeGVjdXRlT3B0aW9uczxUQXJncz4sXG4pOiBJbnRlcm5hbFF1ZXJ5RXhlY3V0ZTxUQXJncz4gPT4ge1xuICBjb25zdCBleGVjdXRlU3RhdGUgPSBzZXR1cFF1ZXJ5RXhlY3V0ZVN0YXRlKCk7XG4gIGNvbnN0IGF1dGhQcm92aWRlciA9IGluamVjdChleGVjdXRlT3B0aW9ucy5jcmVhdG9ySW50ZXJuYWxzLmF1dGhQcm92aWRlci50b2tlbik7XG4gIGNvbnN0IGNpcmN1bGFyQ2hlY2tlciA9IGNpcmN1bGFyUXVlcnlEZXBlbmRlbmN5Q2hlY2tlcigpO1xuXG4gIGxldCBhdXRoUXVlcnlTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbiAgY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gICAgYXV0aFF1ZXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgYXV0aFF1ZXJ5U3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuICAgIHJlc2V0RXhlY3V0ZVN0YXRlKHsgZXhlY3V0ZVN0YXRlLCBleGVjdXRlT3B0aW9uczogZXhlY3V0ZU9wdGlvbnMgfSk7XG4gIH07XG5cbiAgY29uc3QgZXJyb3IgPSAocXVlcnk6IEFueVF1ZXJ5U25hcHNob3QpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGV4ZWN1dGVPcHRpb25zLnN0YXRlO1xuXG4gICAgc3RhdGUuZXJyb3Iuc2V0KHF1ZXJ5LmVycm9yKCkpO1xuICAgIHN0YXRlLmxvYWRpbmcuc2V0KG51bGwpO1xuICAgIHN0YXRlLnJlc3BvbnNlLnNldChudWxsKTtcbiAgICBzdGF0ZS5sYXRlc3RIdHRwRXZlbnQuc2V0KG51bGwpO1xuICAgIHN0YXRlLmFyZ3Muc2V0KG51bGwpO1xuICB9O1xuXG4gIGNvbnN0IGF1dGhBbmRFeGVjID0gKGV4ZWN1dGVBcmdzPzogUXVlcnlFeGVjdXRlQXJnczxUQXJncz4pID0+IHtcbiAgICBjb25zdCB7IGFyZ3MsIG9wdGlvbnM6IHJ1bk9wdGlvbnMgfSA9IGV4ZWN1dGVBcmdzID8/IHt9O1xuXG4gICAgY29uc3QgdG9rZW5zID0gYXV0aFByb3ZpZGVyLnRva2VucygpO1xuICAgIGxldCBoZWFkZXJzID0gYXJncz8uaGVhZGVycyB8fCBuZXcgSHR0cEhlYWRlcnMoKTtcblxuICAgIGlmICghdG9rZW5zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Rva2VucyBhcmUgbm90IGF2YWlsYWJsZSBpbnNpZGUgYXV0aEFuZEV4ZWMnKTtcbiAgICB9XG5cbiAgICBpZiAoIWhlYWRlcnMuaGFzKEFVVEhfSEVBREVSKSkge1xuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KEFVVEhfSEVBREVSLCBgQmVhcmVyICR7dG9rZW5zLmFjY2Vzc1Rva2VufWApO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZWRBcmdzID0geyAuLi4oYXJncyA/PyAoe30gYXMgUmVxdWVzdEFyZ3M8VEFyZ3M+KSksIGhlYWRlcnMgfTtcblxuICAgIHF1ZXJ5RXhlY3V0ZSh7XG4gICAgICBleGVjdXRlT3B0aW9uczogZXhlY3V0ZU9wdGlvbnMsXG4gICAgICBleGVjdXRlU3RhdGUsXG4gICAgICBhcmdzOiB1cGRhdGVkQXJncyxcbiAgICAgIG9wdGlvbnM6IHJ1bk9wdGlvbnMsXG4gICAgICBpc1NlY3VyZTogdHJ1ZSxcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBleGVjID0gKGV4ZWN1dGVBcmdzPzogUXVlcnlFeGVjdXRlQXJnczxUQXJncz4pID0+IHtcbiAgICBjaXJjdWxhckNoZWNrZXIuY2hlY2soKTtcblxuICAgIC8vIE1ha2Ugc3VyZSBhbGwgZWZmZWN0cyBhcmUgZmx1c2hlZCBiZWZvcmUgcmVhZGluZyB0aGUgYXJncy5cbiAgICAvLyBBIHdpdGhBcmdzIGZlYXR1cmUgZWZmZWN0IG1pZ2h0IHN0aWxsIGJlIHBlbmRpbmcgb3RoZXJ3aXNlIHJlc3VsdGluZyBpbiB0aGUgd3JvbmcgYXJncyBiZWluZyByZWFkLlxuICAgIGV4ZWN1dGVPcHRpb25zLmRlcHMuZWZmZWN0U2NoZWR1bGVyLmZsdXNoKCk7XG5cbiAgICBjb25zdCBleGVjQXJnc1dpdGhEZWZhdWx0czogUXVlcnlFeGVjdXRlQXJnczxUQXJncz4gPSB7XG4gICAgICBhcmdzOiBleGVjdXRlQXJncz8uYXJncyA/PyBleGVjdXRlT3B0aW9ucy5zdGF0ZS5hcmdzKCksXG4gICAgICBvcHRpb25zOiBleGVjdXRlQXJncz8ub3B0aW9ucyxcbiAgICB9O1xuXG4gICAgYXV0aFF1ZXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgYXV0aFF1ZXJ5U3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuICAgIGNsZWFudXBQcmV2aW91c0V4ZWN1dGUoeyBleGVjdXRlT3B0aW9uczogZXhlY3V0ZU9wdGlvbnMsIGV4ZWN1dGVTdGF0ZSB9KTtcblxuICAgIGNvbnN0IGF1dGhRdWVyeSA9IGF1dGhQcm92aWRlci5sYXRlc3RFeGVjdXRlZFF1ZXJ5KCk7XG5cbiAgICAvLyBUaGlzIG1pZ2h0IGhhcHBlbiBpZiBhIHNlY3VyZSBxdWVyeSBnZXRzIGV4ZWN1dGVkIHdoaWxlIHRoZSBhdXRoIHF1ZXJ5IGhhcyBqdXN0IGJlZW4gY3JlYXRlZC5cbiAgICAvLyBUaGlzIGlzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZSBxdWVyeSBzdGF0ZSBpcyBiZWluZyBzeW5jZWQgd2l0aCB0aGUgc3RhdGUgaW5zaWRlIHRoZSBodHRwIHJlcXVlc3QgdXNpbmcgZWZmZWN0LlxuICAgIGNvbnN0IGlzQXV0aFF1ZXJ5RnJlc2hseUV4ZWN1dGVkID0gYXV0aFF1ZXJ5Py5sYXN0VGltZUV4ZWN1dGVkQXQoKSA9PT0gbnVsbDtcblxuICAgIGlmICghYXV0aFF1ZXJ5IHx8IGF1dGhRdWVyeS5sb2FkaW5nKCkgfHwgaXNBdXRoUXVlcnlGcmVzaGx5RXhlY3V0ZWQpIHtcbiAgICAgIGV4ZWN1dGVPcHRpb25zLnN0YXRlLmxvYWRpbmcuc2V0KHsgZXhlY3V0ZVRpbWU6IERhdGUubm93KCksIHByb2dyZXNzOiBudWxsIH0pO1xuXG4gICAgICBhdXRoUXVlcnlTdWJzY3JpcHRpb24gPSB0b09ic2VydmFibGUoYXV0aFByb3ZpZGVyLmxhdGVzdEV4ZWN1dGVkUXVlcnksIHsgaW5qZWN0b3I6IGV4ZWN1dGVPcHRpb25zLmRlcHMuaW5qZWN0b3IgfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChxdWVyeSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFxdWVyeSkgcmV0dXJuIG9mKG51bGwpO1xuXG4gICAgICAgICAgICByZXR1cm4gdG9PYnNlcnZhYmxlKHF1ZXJ5LmlzQWxpdmUsIHsgaW5qZWN0b3I6IGV4ZWN1dGVPcHRpb25zLmRlcHMuaW5qZWN0b3IgfSkucGlwZShcbiAgICAgICAgICAgICAgdGFwKChpc0FsaXZlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQWxpdmUpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGlmIChxdWVyeS5lcnJvcigpKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcihxdWVyeSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxdWVyeS5yZXNwb25zZSgpKSB7XG4gICAgICAgICAgICAgICAgICBhdXRoQW5kRXhlYyhleGVjQXJnc1dpdGhEZWZhdWx0cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH0gZWxzZSBpZiAoYXV0aFF1ZXJ5LnJlc3BvbnNlKCkpIHtcbiAgICAgIGF1dGhBbmRFeGVjKGV4ZWNBcmdzV2l0aERlZmF1bHRzKTtcbiAgICB9IGVsc2UgaWYgKGF1dGhRdWVyeS5lcnJvcigpKSB7XG4gICAgICBlcnJvcihhdXRoUXVlcnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RhdGUgb2N1cnJlZCBpbnNpZGUgY3JlYXRlU2VjdXJlRXhlY3V0ZUZuJyk7XG4gICAgfVxuICB9O1xuXG4gIGV4ZWNbJ3Jlc2V0J10gPSByZXNldDtcblxuICBleGVjWydjdXJyZW50UmVwb3NpdG9yeUtleSddID0gZXhlY3V0ZVN0YXRlLnByZXZpb3VzS2V5LmFzUmVhZG9ubHkoKTtcblxuICByZXR1cm4gZXhlYztcbn07XG4iXX0=","import { setupQueryDependencies } from './query-dependencies';\nimport { setupQueryState } from './query-state';\nimport { applyQueryFeatures, createQueryObject, getQueryFeatureUsage, maybeExecute } from './query-utils';\nimport { createSecureExecuteFn } from './secure-query-execute';\nexport const createSecureQuery = (options) => {\n const deps = setupQueryDependencies({\n clientConfig: options.creatorInternals.client,\n queryConfig: options.queryConfig,\n });\n const state = setupQueryState({});\n const { creator, creatorInternals, queryConfig } = options;\n const flags = getQueryFeatureUsage(options);\n const execute = createSecureExecuteFn({\n deps,\n state,\n creator,\n creatorInternals,\n queryConfig,\n });\n const featureFnContext = {\n deps,\n state,\n execute,\n flags,\n };\n applyQueryFeatures(options.features, featureFnContext);\n maybeExecute({ execute, flags });\n return createQueryObject({ state, execute, deps });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlLXF1ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9odHRwL3NlY3VyZS1xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFNL0QsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBMEIsT0FBd0MsRUFBRSxFQUFFO0lBQ3JHLE1BQU0sSUFBSSxHQUFHLHNCQUFzQixDQUFDO1FBQ2xDLFlBQVksRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTTtRQUM3QyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7S0FDakMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQzNELE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVDLE1BQU0sT0FBTyxHQUFHLHFCQUFxQixDQUFRO1FBQzNDLElBQUk7UUFDSixLQUFLO1FBQ0wsT0FBTztRQUNQLGdCQUFnQjtRQUNoQixXQUFXO0tBQ1osQ0FBQyxDQUFDO0lBRUgsTUFBTSxnQkFBZ0IsR0FBK0I7UUFDbkQsSUFBSTtRQUNKLEtBQUs7UUFDTCxPQUFPO1FBQ1AsS0FBSztLQUNOLENBQUM7SUFFRixrQkFBa0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFFdkQsWUFBWSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFakMsT0FBTyxpQkFBaUIsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDcmVhdGVRdWVyeU9wdGlvbnMsIFF1ZXJ5QXJncyB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgc2V0dXBRdWVyeURlcGVuZGVuY2llcyB9IGZyb20gJy4vcXVlcnktZGVwZW5kZW5jaWVzJztcbmltcG9ydCB7IFF1ZXJ5RmVhdHVyZUNvbnRleHQgfSBmcm9tICcuL3F1ZXJ5LWZlYXR1cmVzJztcbmltcG9ydCB7IHNldHVwUXVlcnlTdGF0ZSB9IGZyb20gJy4vcXVlcnktc3RhdGUnO1xuaW1wb3J0IHsgYXBwbHlRdWVyeUZlYXR1cmVzLCBjcmVhdGVRdWVyeU9iamVjdCwgZ2V0UXVlcnlGZWF0dXJlVXNhZ2UsIG1heWJlRXhlY3V0ZSB9IGZyb20gJy4vcXVlcnktdXRpbHMnO1xuaW1wb3J0IHsgSW50ZXJuYWxTZWN1cmVDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zIH0gZnJvbSAnLi9zZWN1cmUtcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBjcmVhdGVTZWN1cmVFeGVjdXRlRm4gfSBmcm9tICcuL3NlY3VyZS1xdWVyeS1leGVjdXRlJztcblxuZXhwb3J0IHR5cGUgQ3JlYXRlU2VjdXJlUXVlcnlPcHRpb25zPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IE9taXQ8Q3JlYXRlUXVlcnlPcHRpb25zPFRBcmdzPiwgJ2NyZWF0b3JJbnRlcm5hbHMnPiAmIHtcbiAgY3JlYXRvckludGVybmFsczogSW50ZXJuYWxTZWN1cmVDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zPFRBcmdzPjtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTZWN1cmVRdWVyeSA9IDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4ob3B0aW9uczogQ3JlYXRlU2VjdXJlUXVlcnlPcHRpb25zPFRBcmdzPikgPT4ge1xuICBjb25zdCBkZXBzID0gc2V0dXBRdWVyeURlcGVuZGVuY2llcyh7XG4gICAgY2xpZW50Q29uZmlnOiBvcHRpb25zLmNyZWF0b3JJbnRlcm5hbHMuY2xpZW50LFxuICAgIHF1ZXJ5Q29uZmlnOiBvcHRpb25zLnF1ZXJ5Q29uZmlnLFxuICB9KTtcbiAgY29uc3Qgc3RhdGUgPSBzZXR1cFF1ZXJ5U3RhdGU8VEFyZ3M+KHt9KTtcbiAgY29uc3QgeyBjcmVhdG9yLCBjcmVhdG9ySW50ZXJuYWxzLCBxdWVyeUNvbmZpZyB9ID0gb3B0aW9ucztcbiAgY29uc3QgZmxhZ3MgPSBnZXRRdWVyeUZlYXR1cmVVc2FnZShvcHRpb25zKTtcblxuICBjb25zdCBleGVjdXRlID0gY3JlYXRlU2VjdXJlRXhlY3V0ZUZuPFRBcmdzPih7XG4gICAgZGVwcyxcbiAgICBzdGF0ZSxcbiAgICBjcmVhdG9yLFxuICAgIGNyZWF0b3JJbnRlcm5hbHMsXG4gICAgcXVlcnlDb25maWcsXG4gIH0pO1xuXG4gIGNvbnN0IGZlYXR1cmVGbkNvbnRleHQ6IFF1ZXJ5RmVhdHVyZUNvbnRleHQ8VEFyZ3M+ID0ge1xuICAgIGRlcHMsXG4gICAgc3RhdGUsXG4gICAgZXhlY3V0ZSxcbiAgICBmbGFncyxcbiAgfTtcblxuICBhcHBseVF1ZXJ5RmVhdHVyZXMob3B0aW9ucy5mZWF0dXJlcywgZmVhdHVyZUZuQ29udGV4dCk7XG5cbiAgbWF5YmVFeGVjdXRlKHsgZXhlY3V0ZSwgZmxhZ3MgfSk7XG5cbiAgcmV0dXJuIGNyZWF0ZVF1ZXJ5T2JqZWN0KHsgc3RhdGUsIGV4ZWN1dGUsIGRlcHMgfSk7XG59O1xuIl19","import { splitQueryConfig, } from './query-creator';\nimport { createSecureQuery } from './secure-query';\nexport const createSecureQueryCreator = (options, internals) => {\n function queryCreator(...args) {\n const { features, queryConfig } = splitQueryConfig(args);\n return createSecureQuery({\n creator: options,\n creatorInternals: internals,\n features,\n queryConfig,\n });\n }\n return queryCreator;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlLXF1ZXJ5LWNyZWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvc2VjdXJlLXF1ZXJ5LWNyZWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUtMLGdCQUFnQixHQUNqQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBT25ELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQ3RDLE9BQThDLEVBQzlDLFNBQXlELEVBQ3BDLEVBQUU7SUFJdkIsU0FBUyxZQUFZLENBQUMsR0FBRyxJQUEyQztRQUNsRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxHQUFHLGdCQUFnQixDQUFRLElBQUksQ0FBQyxDQUFDO1FBRWhFLE9BQU8saUJBQWlCLENBQVE7WUFDOUIsT0FBTyxFQUFFLE9BQU87WUFDaEIsZ0JBQWdCLEVBQUUsU0FBUztZQUMzQixRQUFRO1lBQ1IsV0FBVztTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbnlCZWFyZXJBdXRoUHJvdmlkZXJDb25maWcgfSBmcm9tICcuLi9hdXRoL2JlYXJlci1hdXRoLXByb3ZpZGVyLWNvbmZpZyc7XG5pbXBvcnQgeyBRdWVyeSwgUXVlcnlBcmdzIH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQge1xuICBDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zLFxuICBJbnRlcm5hbENyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnMsXG4gIFF1ZXJ5Q29uZmlnLFxuICBRdWVyeUNyZWF0b3IsXG4gIHNwbGl0UXVlcnlDb25maWcsXG59IGZyb20gJy4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBRdWVyeUZlYXR1cmUgfSBmcm9tICcuL3F1ZXJ5LWZlYXR1cmVzJztcbmltcG9ydCB7IGNyZWF0ZVNlY3VyZVF1ZXJ5IH0gZnJvbSAnLi9zZWN1cmUtcXVlcnknO1xuXG5leHBvcnQgdHlwZSBJbnRlcm5hbFNlY3VyZUNyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnM8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID1cbiAgSW50ZXJuYWxDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zPFRBcmdzPiAmIHtcbiAgICBhdXRoUHJvdmlkZXI6IEFueUJlYXJlckF1dGhQcm92aWRlckNvbmZpZztcbiAgfTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNlY3VyZVF1ZXJ5Q3JlYXRvciA9IDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4oXG4gIG9wdGlvbnM6IENyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnMgfCB1bmRlZmluZWQsXG4gIGludGVybmFsczogSW50ZXJuYWxTZWN1cmVDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zPFRBcmdzPixcbik6IFF1ZXJ5Q3JlYXRvcjxUQXJncz4gPT4ge1xuICBmdW5jdGlvbiBxdWVyeUNyZWF0b3IoLi4uZmVhdHVyZXM6IFF1ZXJ5RmVhdHVyZTxUQXJncz5bXSk6IFF1ZXJ5PFRBcmdzPjtcbiAgZnVuY3Rpb24gcXVlcnlDcmVhdG9yKHF1ZXJ5Q29uZmlnOiBRdWVyeUNvbmZpZywgLi4uZmVhdHVyZXM6IFF1ZXJ5RmVhdHVyZTxUQXJncz5bXSk6IFF1ZXJ5PFRBcmdzPjtcblxuICBmdW5jdGlvbiBxdWVyeUNyZWF0b3IoLi4uYXJnczogKFF1ZXJ5RmVhdHVyZTxUQXJncz4gfCBRdWVyeUNvbmZpZylbXSk6IFF1ZXJ5PFRBcmdzPiB7XG4gICAgY29uc3QgeyBmZWF0dXJlcywgcXVlcnlDb25maWcgfSA9IHNwbGl0UXVlcnlDb25maWc8VEFyZ3M+KGFyZ3MpO1xuXG4gICAgcmV0dXJuIGNyZWF0ZVNlY3VyZVF1ZXJ5PFRBcmdzPih7XG4gICAgICBjcmVhdG9yOiBvcHRpb25zLFxuICAgICAgY3JlYXRvckludGVybmFsczogaW50ZXJuYWxzLFxuICAgICAgZmVhdHVyZXMsXG4gICAgICBxdWVyeUNvbmZpZyxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBxdWVyeUNyZWF0b3I7XG59O1xuIl19","import { createQueryCreator } from './query-creator';\nimport { createSecureQueryCreator } from './secure-query-creator';\n/** A query creator that creates a GET query */\nexport const createGetQuery = (client) => {\n return (route, creatorOptions) => createQueryCreator(creatorOptions, { method: 'GET', client, route });\n};\n/** A query creator that creates a secure GET query (requires authentication) */\nexport const createSecureGetQuery = (client, authProvider) => {\n return (route, creatorOptions) => createSecureQueryCreator(creatorOptions, { method: 'GET', client, authProvider, route });\n};\n/** A query creator that creates a POST query */\nexport const createPostQuery = (client) => {\n return (route, creatorOptions) => createQueryCreator(creatorOptions, { method: 'POST', client, route });\n};\n/** A query creator that creates a secure POST query (requires authentication) */\nexport const createSecurePostQuery = (client, authProvider) => {\n return (route, creatorOptions) => createSecureQueryCreator(creatorOptions, { method: 'POST', client, authProvider, route });\n};\n/** A query creator that creates a PUT query */\nexport const createPutQuery = (client) => {\n return (route, creatorOptions) => createQueryCreator(creatorOptions, { method: 'PUT', client, route });\n};\n/** A query creator that creates a secure PUT query (requires authentication) */\nexport const createSecurePutQuery = (client, authProvider) => {\n return (route, creatorOptions) => createSecureQueryCreator(creatorOptions, { method: 'PUT', client, authProvider, route });\n};\n/** A query creator that creates a DELETE query */\nexport const createDeleteQuery = (client) => {\n return (route, creatorOptions) => createQueryCreator(creatorOptions, { method: 'DELETE', client, route });\n};\n/** A query creator that creates a secure DELETE query (requires authentication) */\nexport const createSecureDeleteQuery = (client, authProvider) => {\n return (route, creatorOptions) => createSecureQueryCreator(creatorOptions, { method: 'DELETE', client, authProvider, route });\n};\n/** A query creator that creates a PATCH query */\nexport const createPatchQuery = (client) => {\n return (route, creatorOptions) => createQueryCreator(creatorOptions, { method: 'PATCH', client, route });\n};\n/** A query creator that creates a secure PATCH query (requires authentication) */\nexport const createSecurePatchQuery = (client, authProvider) => {\n return (route, creatorOptions) => createSecureQueryCreator(creatorOptions, { method: 'PATCH', client, authProvider, route });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY3JlYXRvci10ZW1wbGF0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvcXVlcnktY3JlYXRvci10ZW1wbGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUF3QyxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWxFLCtDQUErQztBQUMvQyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUF5QixFQUFFLEVBQUU7SUFDMUQsT0FBTyxDQUEwQixLQUF1QixFQUFFLGNBQTBDLEVBQUUsRUFBRSxDQUN0RyxrQkFBa0IsQ0FBUSxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2hGLENBQUMsQ0FBQztBQUVGLGdGQUFnRjtBQUNoRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE1BQXlCLEVBQUUsWUFBeUMsRUFBRSxFQUFFO0lBQzNHLE9BQU8sQ0FBMEIsS0FBdUIsRUFBRSxjQUEwQyxFQUFFLEVBQUUsQ0FDdEcsd0JBQXdCLENBQVEsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDcEcsQ0FBQyxDQUFDO0FBRUYsZ0RBQWdEO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQXlCLEVBQUUsRUFBRTtJQUMzRCxPQUFPLENBQTBCLEtBQXVCLEVBQUUsY0FBMEMsRUFBRSxFQUFFLENBQ3RHLGtCQUFrQixDQUFRLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDakYsQ0FBQyxDQUFDO0FBRUYsaUZBQWlGO0FBQ2pGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsTUFBeUIsRUFBRSxZQUF5QyxFQUFFLEVBQUU7SUFDNUcsT0FBTyxDQUEwQixLQUF1QixFQUFFLGNBQTBDLEVBQUUsRUFBRSxDQUN0Ryx3QkFBd0IsQ0FBUSxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNyRyxDQUFDLENBQUM7QUFFRiwrQ0FBK0M7QUFDL0MsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBeUIsRUFBRSxFQUFFO0lBQzFELE9BQU8sQ0FBMEIsS0FBdUIsRUFBRSxjQUEwQyxFQUFFLEVBQUUsQ0FDdEcsa0JBQWtCLENBQVEsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNoRixDQUFDLENBQUM7QUFFRixnRkFBZ0Y7QUFDaEYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUF5QixFQUFFLFlBQXlDLEVBQUUsRUFBRTtJQUMzRyxPQUFPLENBQTBCLEtBQXVCLEVBQUUsY0FBMEMsRUFBRSxFQUFFLENBQ3RHLHdCQUF3QixDQUFRLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3BHLENBQUMsQ0FBQztBQUVGLGtEQUFrRDtBQUNsRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE1BQXlCLEVBQUUsRUFBRTtJQUM3RCxPQUFPLENBQTBCLEtBQXVCLEVBQUUsY0FBMEMsRUFBRSxFQUFFLENBQ3RHLGtCQUFrQixDQUFRLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDbkYsQ0FBQyxDQUFDO0FBRUYsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsTUFBeUIsRUFBRSxZQUF5QyxFQUFFLEVBQUU7SUFDOUcsT0FBTyxDQUEwQixLQUF1QixFQUFFLGNBQTBDLEVBQUUsRUFBRSxDQUN0Ryx3QkFBd0IsQ0FBUSxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUN2RyxDQUFDLENBQUM7QUFFRixpREFBaUQ7QUFDakQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxNQUF5QixFQUFFLEVBQUU7SUFDNUQsT0FBTyxDQUEwQixLQUF1QixFQUFFLGNBQTBDLEVBQUUsRUFBRSxDQUN0RyxrQkFBa0IsQ0FBUSxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGLENBQUMsQ0FBQztBQUVGLGtGQUFrRjtBQUNsRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE1BQXlCLEVBQUUsWUFBeUMsRUFBRSxFQUFFO0lBQzdHLE9BQU8sQ0FBMEIsS0FBdUIsRUFBRSxjQUEwQyxFQUFFLEVBQUUsQ0FDdEcsd0JBQXdCLENBQVEsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDdEcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW55QmVhcmVyQXV0aFByb3ZpZGVyQ29uZmlnIH0gZnJvbSAnLi4vYXV0aC9iZWFyZXItYXV0aC1wcm92aWRlci1jb25maWcnO1xuaW1wb3J0IHsgUXVlcnlBcmdzIH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBRdWVyeUNsaWVudENvbmZpZyB9IGZyb20gJy4vcXVlcnktY2xpZW50LWNvbmZpZyc7XG5pbXBvcnQgeyBDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zLCBSb3V0ZVR5cGUsIGNyZWF0ZVF1ZXJ5Q3JlYXRvciB9IGZyb20gJy4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBjcmVhdGVTZWN1cmVRdWVyeUNyZWF0b3IgfSBmcm9tICcuL3NlY3VyZS1xdWVyeS1jcmVhdG9yJztcblxuLyoqIEEgcXVlcnkgY3JlYXRvciB0aGF0IGNyZWF0ZXMgYSBHRVQgcXVlcnkgKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVHZXRRdWVyeSA9IChjbGllbnQ6IFF1ZXJ5Q2xpZW50Q29uZmlnKSA9PiB7XG4gIHJldHVybiA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KHJvdXRlOiBSb3V0ZVR5cGU8VEFyZ3M+LCBjcmVhdG9yT3B0aW9ucz86IENyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnMpID0+XG4gICAgY3JlYXRlUXVlcnlDcmVhdG9yPFRBcmdzPihjcmVhdG9yT3B0aW9ucywgeyBtZXRob2Q6ICdHRVQnLCBjbGllbnQsIHJvdXRlIH0pO1xufTtcblxuLyoqIEEgcXVlcnkgY3JlYXRvciB0aGF0IGNyZWF0ZXMgYSBzZWN1cmUgR0VUIHF1ZXJ5IChyZXF1aXJlcyBhdXRoZW50aWNhdGlvbikgKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVTZWN1cmVHZXRRdWVyeSA9IChjbGllbnQ6IFF1ZXJ5Q2xpZW50Q29uZmlnLCBhdXRoUHJvdmlkZXI6IEFueUJlYXJlckF1dGhQcm92aWRlckNvbmZpZykgPT4ge1xuICByZXR1cm4gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihyb3V0ZTogUm91dGVUeXBlPFRBcmdzPiwgY3JlYXRvck9wdGlvbnM/OiBDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zKSA9PlxuICAgIGNyZWF0ZVNlY3VyZVF1ZXJ5Q3JlYXRvcjxUQXJncz4oY3JlYXRvck9wdGlvbnMsIHsgbWV0aG9kOiAnR0VUJywgY2xpZW50LCBhdXRoUHJvdmlkZXIsIHJvdXRlIH0pO1xufTtcblxuLyoqIEEgcXVlcnkgY3JlYXRvciB0aGF0IGNyZWF0ZXMgYSBQT1NUIHF1ZXJ5ICovXG5leHBvcnQgY29uc3QgY3JlYXRlUG9zdFF1ZXJ5ID0gKGNsaWVudDogUXVlcnlDbGllbnRDb25maWcpID0+IHtcbiAgcmV0dXJuIDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4ocm91dGU6IFJvdXRlVHlwZTxUQXJncz4sIGNyZWF0b3JPcHRpb25zPzogQ3JlYXRlUXVlcnlDcmVhdG9yT3B0aW9ucykgPT5cbiAgICBjcmVhdGVRdWVyeUNyZWF0b3I8VEFyZ3M+KGNyZWF0b3JPcHRpb25zLCB7IG1ldGhvZDogJ1BPU1QnLCBjbGllbnQsIHJvdXRlIH0pO1xufTtcblxuLyoqIEEgcXVlcnkgY3JlYXRvciB0aGF0IGNyZWF0ZXMgYSBzZWN1cmUgUE9TVCBxdWVyeSAocmVxdWlyZXMgYXV0aGVudGljYXRpb24pICovXG5leHBvcnQgY29uc3QgY3JlYXRlU2VjdXJlUG9zdFF1ZXJ5ID0gKGNsaWVudDogUXVlcnlDbGllbnRDb25maWcsIGF1dGhQcm92aWRlcjogQW55QmVhcmVyQXV0aFByb3ZpZGVyQ29uZmlnKSA9PiB7XG4gIHJldHVybiA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KHJvdXRlOiBSb3V0ZVR5cGU8VEFyZ3M+LCBjcmVhdG9yT3B0aW9ucz86IENyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnMpID0+XG4gICAgY3JlYXRlU2VjdXJlUXVlcnlDcmVhdG9yPFRBcmdzPihjcmVhdG9yT3B0aW9ucywgeyBtZXRob2Q6ICdQT1NUJywgY2xpZW50LCBhdXRoUHJvdmlkZXIsIHJvdXRlIH0pO1xufTtcblxuLyoqIEEgcXVlcnkgY3JlYXRvciB0aGF0IGNyZWF0ZXMgYSBQVVQgcXVlcnkgKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVQdXRRdWVyeSA9IChjbGllbnQ6IFF1ZXJ5Q2xpZW50Q29uZmlnKSA9PiB7XG4gIHJldHVybiA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KHJvdXRlOiBSb3V0ZVR5cGU8VEFyZ3M+LCBjcmVhdG9yT3B0aW9ucz86IENyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnMpID0+XG4gICAgY3JlYXRlUXVlcnlDcmVhdG9yPFRBcmdzPihjcmVhdG9yT3B0aW9ucywgeyBtZXRob2Q6ICdQVVQnLCBjbGllbnQsIHJvdXRlIH0pO1xufTtcblxuLyoqIEEgcXVlcnkgY3JlYXRvciB0aGF0IGNyZWF0ZXMgYSBzZWN1cmUgUFVUIHF1ZXJ5IChyZXF1aXJlcyBhdXRoZW50aWNhdGlvbikgKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVTZWN1cmVQdXRRdWVyeSA9IChjbGllbnQ6IFF1ZXJ5Q2xpZW50Q29uZmlnLCBhdXRoUHJvdmlkZXI6IEFueUJlYXJlckF1dGhQcm92aWRlckNvbmZpZykgPT4ge1xuICByZXR1cm4gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihyb3V0ZTogUm91dGVUeXBlPFRBcmdzPiwgY3JlYXRvck9wdGlvbnM/OiBDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zKSA9PlxuICAgIGNyZWF0ZVNlY3VyZVF1ZXJ5Q3JlYXRvcjxUQXJncz4oY3JlYXRvck9wdGlvbnMsIHsgbWV0aG9kOiAnUFVUJywgY2xpZW50LCBhdXRoUHJvdmlkZXIsIHJvdXRlIH0pO1xufTtcblxuLyoqIEEgcXVlcnkgY3JlYXRvciB0aGF0IGNyZWF0ZXMgYSBERUxFVEUgcXVlcnkgKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVEZWxldGVRdWVyeSA9IChjbGllbnQ6IFF1ZXJ5Q2xpZW50Q29uZmlnKSA9PiB7XG4gIHJldHVybiA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KHJvdXRlOiBSb3V0ZVR5cGU8VEFyZ3M+LCBjcmVhdG9yT3B0aW9ucz86IENyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnMpID0+XG4gICAgY3JlYXRlUXVlcnlDcmVhdG9yPFRBcmdzPihjcmVhdG9yT3B0aW9ucywgeyBtZXRob2Q6ICdERUxFVEUnLCBjbGllbnQsIHJvdXRlIH0pO1xufTtcblxuLyoqIEEgcXVlcnkgY3JlYXRvciB0aGF0IGNyZWF0ZXMgYSBzZWN1cmUgREVMRVRFIHF1ZXJ5IChyZXF1aXJlcyBhdXRoZW50aWNhdGlvbikgKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVTZWN1cmVEZWxldGVRdWVyeSA9IChjbGllbnQ6IFF1ZXJ5Q2xpZW50Q29uZmlnLCBhdXRoUHJvdmlkZXI6IEFueUJlYXJlckF1dGhQcm92aWRlckNvbmZpZykgPT4ge1xuICByZXR1cm4gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihyb3V0ZTogUm91dGVUeXBlPFRBcmdzPiwgY3JlYXRvck9wdGlvbnM/OiBDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zKSA9PlxuICAgIGNyZWF0ZVNlY3VyZVF1ZXJ5Q3JlYXRvcjxUQXJncz4oY3JlYXRvck9wdGlvbnMsIHsgbWV0aG9kOiAnREVMRVRFJywgY2xpZW50LCBhdXRoUHJvdmlkZXIsIHJvdXRlIH0pO1xufTtcblxuLyoqIEEgcXVlcnkgY3JlYXRvciB0aGF0IGNyZWF0ZXMgYSBQQVRDSCBxdWVyeSAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVBhdGNoUXVlcnkgPSAoY2xpZW50OiBRdWVyeUNsaWVudENvbmZpZykgPT4ge1xuICByZXR1cm4gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihyb3V0ZTogUm91dGVUeXBlPFRBcmdzPiwgY3JlYXRvck9wdGlvbnM/OiBDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zKSA9PlxuICAgIGNyZWF0ZVF1ZXJ5Q3JlYXRvcjxUQXJncz4oY3JlYXRvck9wdGlvbnMsIHsgbWV0aG9kOiAnUEFUQ0gnLCBjbGllbnQsIHJvdXRlIH0pO1xufTtcblxuLyoqIEEgcXVlcnkgY3JlYXRvciB0aGF0IGNyZWF0ZXMgYSBzZWN1cmUgUEFUQ0ggcXVlcnkgKHJlcXVpcmVzIGF1dGhlbnRpY2F0aW9uKSAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVNlY3VyZVBhdGNoUXVlcnkgPSAoY2xpZW50OiBRdWVyeUNsaWVudENvbmZpZywgYXV0aFByb3ZpZGVyOiBBbnlCZWFyZXJBdXRoUHJvdmlkZXJDb25maWcpID0+IHtcbiAgcmV0dXJuIDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4ocm91dGU6IFJvdXRlVHlwZTxUQXJncz4sIGNyZWF0b3JPcHRpb25zPzogQ3JlYXRlUXVlcnlDcmVhdG9yT3B0aW9ucykgPT5cbiAgICBjcmVhdGVTZWN1cmVRdWVyeUNyZWF0b3I8VEFyZ3M+KGNyZWF0b3JPcHRpb25zLCB7IG1ldGhvZDogJ1BBVENIJywgY2xpZW50LCBhdXRoUHJvdmlkZXIsIHJvdXRlIH0pO1xufTtcbiJdfQ==","import { isDevMode } from '@angular/core';\nconst getOpName = /(query|mutation) ?([\\w\\d-_]+)? ?\\(.*?\\)? \\{/;\nexport const transformGql = (str) => {\n str = Array.isArray(str) ? str.join('') : str;\n const name = getOpName.exec(str);\n return (variables) => {\n const data = { query: str };\n if (variables)\n data['variables'] = JSON.stringify(variables);\n if (name && name.length) {\n const operationName = name[2];\n if (operationName)\n data['operationName'] = name[2];\n }\n if (!isDevMode()) {\n // minify the query\n data.query = data.query.replace(/\\s+/g, ' ').trim();\n }\n return data;\n };\n};\nexport const gql = (strings, ...values) => {\n const str = strings.reduce((acc, cur, i) => {\n return acc + cur + (values[i] || '');\n }, '');\n return str;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2dxbC9ncWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxNQUFNLFNBQVMsR0FBRyw2Q0FBNkMsQ0FBQztBQVFoRSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtJQUMxQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBRTlDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFakMsT0FBTyxDQUFDLFNBQXFELEVBQUUsRUFBRTtRQUMvRCxNQUFNLElBQUksR0FBd0IsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFFakQsSUFBSSxTQUFTO1lBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFN0QsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixJQUFJLGFBQWE7Z0JBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDakIsbUJBQW1CO1lBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RELENBQUM7UUFFRCxPQUFPLElBQTJCLENBQUM7SUFDckMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBSUYsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBNkIsRUFBRSxHQUFHLE1BQWdCLEVBQUUsRUFBRTtJQUN4RSxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN6QyxPQUFPLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1AsT0FBTyxHQUFVLENBQUM7QUFDcEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmNvbnN0IGdldE9wTmFtZSA9IC8ocXVlcnl8bXV0YXRpb24pID8oW1xcd1xcZC1fXSspPyA/XFwoLio/XFwpPyBcXHsvO1xuXG5leHBvcnQgdHlwZSBUcmFuc2Zvcm1lZEdxbFF1ZXJ5ID0ge1xuICBxdWVyeTogc3RyaW5nO1xuICB2YXJpYWJsZXM/OiBzdHJpbmc7XG4gIG9wZXJhdGlvbk5hbWU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtR3FsID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gIHN0ciA9IEFycmF5LmlzQXJyYXkoc3RyKSA/IHN0ci5qb2luKCcnKSA6IHN0cjtcblxuICBjb25zdCBuYW1lID0gZ2V0T3BOYW1lLmV4ZWMoc3RyKTtcblxuICByZXR1cm4gKHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgY29uc3QgZGF0YTogVHJhbnNmb3JtZWRHcWxRdWVyeSA9IHsgcXVlcnk6IHN0ciB9O1xuXG4gICAgaWYgKHZhcmlhYmxlcykgZGF0YVsndmFyaWFibGVzJ10gPSBKU09OLnN0cmluZ2lmeSh2YXJpYWJsZXMpO1xuXG4gICAgaWYgKG5hbWUgJiYgbmFtZS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG9wZXJhdGlvbk5hbWUgPSBuYW1lWzJdO1xuICAgICAgaWYgKG9wZXJhdGlvbk5hbWUpIGRhdGFbJ29wZXJhdGlvbk5hbWUnXSA9IG5hbWVbMl07XG4gICAgfVxuXG4gICAgaWYgKCFpc0Rldk1vZGUoKSkge1xuICAgICAgLy8gbWluaWZ5IHRoZSBxdWVyeVxuICAgICAgZGF0YS5xdWVyeSA9IGRhdGEucXVlcnkucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YSBhcyBUcmFuc2Zvcm1lZEdxbFF1ZXJ5O1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgR1FMID0gc3RyaW5nICYgeyBncWw6ICd0YWcnIH07XG5cbmV4cG9ydCBjb25zdCBncWwgPSAoc3RyaW5nczogVGVtcGxhdGVTdHJpbmdzQXJyYXksIC4uLnZhbHVlczogc3RyaW5nW10pID0+IHtcbiAgY29uc3Qgc3RyID0gc3RyaW5ncy5yZWR1Y2UoKGFjYywgY3VyLCBpKSA9PiB7XG4gICAgcmV0dXJuIGFjYyArIGN1ciArICh2YWx1ZXNbaV0gfHwgJycpO1xuICB9LCAnJyk7XG4gIHJldHVybiBzdHIgYXMgR1FMO1xufTtcbiJdfQ==","import { transformGql } from '../../gql';\nimport { circularQueryDependencyChecker, cleanupPreviousExecute, queryExecute, resetExecuteState, setupQueryExecuteState, } from '../http';\nexport const createGqlExecuteFn = (executeOptions) => {\n const executeState = setupQueryExecuteState();\n const circularChecker = circularQueryDependencyChecker();\n const reset = () => resetExecuteState({ executeState, executeOptions });\n const exec = (executeArgs) => {\n circularChecker.check();\n // Make sure all effects are flushed before reading the args.\n // A withArgs feature effect might still be pending otherwise resulting in the wrong args being read.\n executeOptions.deps.effectScheduler.flush();\n const { args = executeOptions.state.args(), options } = executeArgs ?? {};\n cleanupPreviousExecute({ executeOptions, executeState });\n // TODO: This should get cleaned up\n const tpl = executeOptions.creatorInternals.query;\n const query = transformGql(tpl);\n let gqlParams = query(args?.variables);\n if (args?.queryParams && executeOptions.creatorInternals.transport === 'GET') {\n gqlParams = { ...gqlParams, ...args.queryParams };\n }\n const computedArgs = args ?? {};\n if (executeOptions.creatorInternals.transport === 'GET') {\n computedArgs.queryParams = gqlParams;\n }\n else {\n computedArgs.body = gqlParams;\n }\n const normalizedOpts = {\n creator: executeOptions.creator ?? {},\n creatorInternals: {\n client: executeOptions.creatorInternals.client,\n method: executeOptions.creatorInternals.transport,\n route: (executeOptions.creator?.route ?? ''),\n },\n deps: executeOptions.deps,\n queryConfig: executeOptions.queryConfig,\n state: executeOptions.state,\n };\n queryExecute({\n executeOptions: normalizedOpts,\n executeState,\n args: computedArgs,\n options,\n internalOptions: {\n useQueryRepositoryCache: executeOptions.creatorInternals.method === 'QUERY',\n },\n transformResponse: (originalResponse) => {\n if (originalResponse && 'data' in originalResponse) {\n return originalResponse.data;\n }\n return originalResponse;\n },\n });\n };\n exec['reset'] = reset;\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n return exec;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3FsLXF1ZXJ5LWV4ZWN1dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2dxbC9ncWwtcXVlcnktZXhlY3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsc0JBQXNCLEVBTXRCLFlBQVksRUFJWixpQkFBaUIsRUFFakIsc0JBQXNCLEdBQ3ZCLE1BQU0sU0FBUyxDQUFDO0FBWWpCLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQ2hDLGNBQW1ELEVBQ3RCLEVBQUU7SUFDL0IsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQztJQUM5QyxNQUFNLGVBQWUsR0FBRyw4QkFBOEIsRUFBRSxDQUFDO0lBRXpELE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFFeEUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxXQUFxQyxFQUFFLEVBQUU7UUFDckQsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXhCLDZEQUE2RDtRQUM3RCxxR0FBcUc7UUFDckcsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFNUMsTUFBTSxFQUFFLElBQUksR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFFMUUsc0JBQXNCLENBQUMsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUV6RCxtQ0FBbUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUNsRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUV2QyxJQUFJLElBQUksRUFBRSxXQUFXLElBQUksY0FBYyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUM3RSxTQUFTLEdBQUcsRUFBRSxHQUFHLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwRCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxJQUFLLEVBQXlCLENBQUM7UUFFeEQsSUFBSSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3hELFlBQVksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO1FBQ3ZDLENBQUM7YUFBTSxDQUFDO1lBQ04sWUFBWSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7UUFDaEMsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFxQztZQUN2RCxPQUFPLEVBQUUsY0FBYyxDQUFDLE9BQU8sSUFBSSxFQUFFO1lBQ3JDLGdCQUFnQixFQUFFO2dCQUNoQixNQUFNLEVBQUUsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU07Z0JBQzlDLE1BQU0sRUFBRSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsU0FBUztnQkFDakQsS0FBSyxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFxQjthQUNqRTtZQUNELElBQUksRUFBRSxjQUFjLENBQUMsSUFBSTtZQUN6QixXQUFXLEVBQUUsY0FBYyxDQUFDLFdBQVc7WUFDdkMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxLQUFLO1NBQzVCLENBQUM7UUFFRixZQUFZLENBQUM7WUFDWCxjQUFjLEVBQUUsY0FBYztZQUM5QixZQUFZO1lBQ1osSUFBSSxFQUFFLFlBQVk7WUFDbEIsT0FBTztZQUNQLGVBQWUsRUFBRTtnQkFDZix1QkFBdUIsRUFBRSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxLQUFLLE9BQU87YUFDNUU7WUFDRCxpQkFBaUIsRUFBRSxDQUFDLGdCQUFnQixFQUFFLEVBQUU7Z0JBQ3RDLElBQUksZ0JBQWdCLElBQUksTUFBTSxJQUFJLGdCQUFnQixFQUFFLENBQUM7b0JBQ25ELE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDO2dCQUMvQixDQUFDO2dCQUVELE9BQU8sZ0JBQWdCLENBQUM7WUFDMUIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7SUFFdEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUVyRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRyYW5zZm9ybUdxbCB9IGZyb20gJy4uLy4uL2dxbCc7XG5pbXBvcnQge1xuICBjaXJjdWxhclF1ZXJ5RGVwZW5kZW5jeUNoZWNrZXIsXG4gIGNsZWFudXBQcmV2aW91c0V4ZWN1dGUsXG4gIENyZWF0ZVF1ZXJ5RXhlY3V0ZU9wdGlvbnMsXG4gIEludGVybmFsUXVlcnlFeGVjdXRlLFxuICBRdWVyeUFyZ3MsXG4gIFF1ZXJ5Q29uZmlnLFxuICBRdWVyeURlcGVuZGVuY2llcyxcbiAgcXVlcnlFeGVjdXRlLFxuICBRdWVyeUV4ZWN1dGVBcmdzLFxuICBRdWVyeVN0YXRlLFxuICBSZXF1ZXN0QXJncyxcbiAgcmVzZXRFeGVjdXRlU3RhdGUsXG4gIFJvdXRlVHlwZSxcbiAgc2V0dXBRdWVyeUV4ZWN1dGVTdGF0ZSxcbn0gZnJvbSAnLi4vaHR0cCc7XG5pbXBvcnQgeyBHcWxRdWVyeUFyZ3MgfSBmcm9tICcuL2dxbC1xdWVyeSc7XG5pbXBvcnQgeyBDcmVhdGVHcWxRdWVyeUNyZWF0b3JPcHRpb25zLCBJbnRlcm5hbENyZWF0ZUdxbFF1ZXJ5Q3JlYXRvck9wdGlvbnMgfSBmcm9tICcuL2dxbC1xdWVyeS1jcmVhdG9yJztcblxuZXhwb3J0IHR5cGUgQ3JlYXRlR3FsUXVlcnlFeGVjdXRlT3B0aW9uczxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIGRlcHM6IFF1ZXJ5RGVwZW5kZW5jaWVzO1xuICBzdGF0ZTogUXVlcnlTdGF0ZTxUQXJncz47XG4gIGNyZWF0b3I/OiBDcmVhdGVHcWxRdWVyeUNyZWF0b3JPcHRpb25zPFRBcmdzPjtcbiAgY3JlYXRvckludGVybmFsczogSW50ZXJuYWxDcmVhdGVHcWxRdWVyeUNyZWF0b3JPcHRpb25zO1xuICBxdWVyeUNvbmZpZzogUXVlcnlDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlR3FsRXhlY3V0ZUZuID0gPFRBcmdzIGV4dGVuZHMgR3FsUXVlcnlBcmdzPihcbiAgZXhlY3V0ZU9wdGlvbnM6IENyZWF0ZUdxbFF1ZXJ5RXhlY3V0ZU9wdGlvbnM8VEFyZ3M+LFxuKTogSW50ZXJuYWxRdWVyeUV4ZWN1dGU8VEFyZ3M+ID0+IHtcbiAgY29uc3QgZXhlY3V0ZVN0YXRlID0gc2V0dXBRdWVyeUV4ZWN1dGVTdGF0ZSgpO1xuICBjb25zdCBjaXJjdWxhckNoZWNrZXIgPSBjaXJjdWxhclF1ZXJ5RGVwZW5kZW5jeUNoZWNrZXIoKTtcblxuICBjb25zdCByZXNldCA9ICgpID0+IHJlc2V0RXhlY3V0ZVN0YXRlKHsgZXhlY3V0ZVN0YXRlLCBleGVjdXRlT3B0aW9ucyB9KTtcblxuICBjb25zdCBleGVjID0gKGV4ZWN1dGVBcmdzPzogUXVlcnlFeGVjdXRlQXJnczxUQXJncz4pID0+IHtcbiAgICBjaXJjdWxhckNoZWNrZXIuY2hlY2soKTtcblxuICAgIC8vIE1ha2Ugc3VyZSBhbGwgZWZmZWN0cyBhcmUgZmx1c2hlZCBiZWZvcmUgcmVhZGluZyB0aGUgYXJncy5cbiAgICAvLyBBIHdpdGhBcmdzIGZlYXR1cmUgZWZmZWN0IG1pZ2h0IHN0aWxsIGJlIHBlbmRpbmcgb3RoZXJ3aXNlIHJlc3VsdGluZyBpbiB0aGUgd3JvbmcgYXJncyBiZWluZyByZWFkLlxuICAgIGV4ZWN1dGVPcHRpb25zLmRlcHMuZWZmZWN0U2NoZWR1bGVyLmZsdXNoKCk7XG5cbiAgICBjb25zdCB7IGFyZ3MgPSBleGVjdXRlT3B0aW9ucy5zdGF0ZS5hcmdzKCksIG9wdGlvbnMgfSA9IGV4ZWN1dGVBcmdzID8/IHt9O1xuXG4gICAgY2xlYW51cFByZXZpb3VzRXhlY3V0ZSh7IGV4ZWN1dGVPcHRpb25zLCBleGVjdXRlU3RhdGUgfSk7XG5cbiAgICAvLyBUT0RPOiBUaGlzIHNob3VsZCBnZXQgY2xlYW5lZCB1cFxuICAgIGNvbnN0IHRwbCA9IGV4ZWN1dGVPcHRpb25zLmNyZWF0b3JJbnRlcm5hbHMucXVlcnk7XG4gICAgY29uc3QgcXVlcnkgPSB0cmFuc2Zvcm1HcWwodHBsKTtcbiAgICBsZXQgZ3FsUGFyYW1zID0gcXVlcnkoYXJncz8udmFyaWFibGVzKTtcblxuICAgIGlmIChhcmdzPy5xdWVyeVBhcmFtcyAmJiBleGVjdXRlT3B0aW9ucy5jcmVhdG9ySW50ZXJuYWxzLnRyYW5zcG9ydCA9PT0gJ0dFVCcpIHtcbiAgICAgIGdxbFBhcmFtcyA9IHsgLi4uZ3FsUGFyYW1zLCAuLi5hcmdzLnF1ZXJ5UGFyYW1zIH07XG4gICAgfVxuXG4gICAgY29uc3QgY29tcHV0ZWRBcmdzID0gYXJncyA/PyAoe30gYXMgUmVxdWVzdEFyZ3M8VEFyZ3M+KTtcblxuICAgIGlmIChleGVjdXRlT3B0aW9ucy5jcmVhdG9ySW50ZXJuYWxzLnRyYW5zcG9ydCA9PT0gJ0dFVCcpIHtcbiAgICAgIGNvbXB1dGVkQXJncy5xdWVyeVBhcmFtcyA9IGdxbFBhcmFtcztcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcHV0ZWRBcmdzLmJvZHkgPSBncWxQYXJhbXM7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZE9wdHM6IENyZWF0ZVF1ZXJ5RXhlY3V0ZU9wdGlvbnM8VEFyZ3M+ID0ge1xuICAgICAgY3JlYXRvcjogZXhlY3V0ZU9wdGlvbnMuY3JlYXRvciA/PyB7fSxcbiAgICAgIGNyZWF0b3JJbnRlcm5hbHM6IHtcbiAgICAgICAgY2xpZW50OiBleGVjdXRlT3B0aW9ucy5jcmVhdG9ySW50ZXJuYWxzLmNsaWVudCxcbiAgICAgICAgbWV0aG9kOiBleGVjdXRlT3B0aW9ucy5jcmVhdG9ySW50ZXJuYWxzLnRyYW5zcG9ydCxcbiAgICAgICAgcm91dGU6IChleGVjdXRlT3B0aW9ucy5jcmVhdG9yPy5yb3V0ZSA/PyAnJykgYXMgUm91dGVUeXBlPFRBcmdzPixcbiAgICAgIH0sXG4gICAgICBkZXBzOiBleGVjdXRlT3B0aW9ucy5kZXBzLFxuICAgICAgcXVlcnlDb25maWc6IGV4ZWN1dGVPcHRpb25zLnF1ZXJ5Q29uZmlnLFxuICAgICAgc3RhdGU6IGV4ZWN1dGVPcHRpb25zLnN0YXRlLFxuICAgIH07XG5cbiAgICBxdWVyeUV4ZWN1dGUoe1xuICAgICAgZXhlY3V0ZU9wdGlvbnM6IG5vcm1hbGl6ZWRPcHRzLFxuICAgICAgZXhlY3V0ZVN0YXRlLFxuICAgICAgYXJnczogY29tcHV0ZWRBcmdzLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGludGVybmFsT3B0aW9uczoge1xuICAgICAgICB1c2VRdWVyeVJlcG9zaXRvcnlDYWNoZTogZXhlY3V0ZU9wdGlvbnMuY3JlYXRvckludGVybmFscy5tZXRob2QgPT09ICdRVUVSWScsXG4gICAgICB9LFxuICAgICAgdHJhbnNmb3JtUmVzcG9uc2U6IChvcmlnaW5hbFJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChvcmlnaW5hbFJlc3BvbnNlICYmICdkYXRhJyBpbiBvcmlnaW5hbFJlc3BvbnNlKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVzcG9uc2UuZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlc3BvbnNlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcblxuICBleGVjWydyZXNldCddID0gcmVzZXQ7XG5cbiAgZXhlY1snY3VycmVudFJlcG9zaXRvcnlLZXknXSA9IGV4ZWN1dGVTdGF0ZS5wcmV2aW91c0tleS5hc1JlYWRvbmx5KCk7XG5cbiAgcmV0dXJuIGV4ZWM7XG59O1xuIl19","import { applyQueryFeatures, createQueryObject, getQueryFeatureUsage, maybeExecute, setupQueryDependencies, setupQueryState, } from '../http';\nimport { createGqlExecuteFn } from './gql-query-execute';\nexport const isCreateGqlQueryOptions = (options) => {\n return 'transport' in options.creatorInternals;\n};\nexport const createGqlQuery = (options) => {\n const deps = setupQueryDependencies({\n clientConfig: options.creatorInternals.client,\n queryConfig: options.queryConfig,\n });\n const state = setupQueryState({});\n const { creator, creatorInternals, queryConfig } = options;\n const flags = getQueryFeatureUsage(options);\n const execute = createGqlExecuteFn({\n deps,\n state,\n creator,\n creatorInternals,\n queryConfig,\n });\n const featureFnContext = {\n state,\n execute,\n flags,\n deps,\n };\n applyQueryFeatures(options.features, featureFnContext);\n maybeExecute({ execute, flags });\n return createQueryObject({ state, execute, deps });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3FsLXF1ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9ncWwvZ3FsLXF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsaUJBQWlCLEVBRWpCLG9CQUFvQixFQUNwQixZQUFZLEVBR1osc0JBQXNCLEVBQ3RCLGVBQWUsR0FDaEIsTUFBTSxTQUFTLENBQUM7QUFFakIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFnQnpELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQ3JDLE9BQWlFLEVBQ3hCLEVBQUU7SUFDM0MsT0FBTyxXQUFXLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDO0FBQ2pELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUE2QixPQUFxQyxFQUFFLEVBQUU7SUFDbEcsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUM7UUFDbEMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNO1FBQzdDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztLQUNqQyxDQUFDLENBQUM7SUFDSCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQVEsRUFBRSxDQUFDLENBQUM7SUFDekMsTUFBTSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDM0QsTUFBTSxLQUFLLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFNUMsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQVE7UUFDeEMsSUFBSTtRQUNKLEtBQUs7UUFDTCxPQUFPO1FBQ1AsZ0JBQWdCO1FBQ2hCLFdBQVc7S0FDWixDQUFDLENBQUM7SUFFSCxNQUFNLGdCQUFnQixHQUErQjtRQUNuRCxLQUFLO1FBQ0wsT0FBTztRQUNQLEtBQUs7UUFDTCxJQUFJO0tBQ0wsQ0FBQztJQUVGLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUV2RCxZQUFZLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUVqQyxPQUFPLGlCQUFpQixDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGx5UXVlcnlGZWF0dXJlcyxcbiAgY3JlYXRlUXVlcnlPYmplY3QsXG4gIENyZWF0ZVF1ZXJ5T3B0aW9ucyxcbiAgZ2V0UXVlcnlGZWF0dXJlVXNhZ2UsXG4gIG1heWJlRXhlY3V0ZSxcbiAgUXVlcnlBcmdzLFxuICBRdWVyeUZlYXR1cmVDb250ZXh0LFxuICBzZXR1cFF1ZXJ5RGVwZW5kZW5jaWVzLFxuICBzZXR1cFF1ZXJ5U3RhdGUsXG59IGZyb20gJy4uL2h0dHAnO1xuaW1wb3J0IHsgQ3JlYXRlR3FsUXVlcnlDcmVhdG9yT3B0aW9ucywgSW50ZXJuYWxDcmVhdGVHcWxRdWVyeUNyZWF0b3JPcHRpb25zIH0gZnJvbSAnLi9ncWwtcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBjcmVhdGVHcWxFeGVjdXRlRm4gfSBmcm9tICcuL2dxbC1xdWVyeS1leGVjdXRlJztcblxuZXhwb3J0IHR5cGUgR3FsUXVlcnlBcmdzID0gUXVlcnlBcmdzICYge1xuICB2YXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUdxbFF1ZXJ5T3B0aW9uczxUQXJncyBleHRlbmRzIEdxbFF1ZXJ5QXJncz4gPSBPbWl0PFxuICBDcmVhdGVRdWVyeU9wdGlvbnM8VEFyZ3M+LFxuICAnY3JlYXRvcicgfCAnY3JlYXRvckludGVybmFscydcbj4gJiB7XG4gIGNyZWF0b3I/OiBDcmVhdGVHcWxRdWVyeUNyZWF0b3JPcHRpb25zPFRBcmdzPjtcbiAgY3JlYXRvckludGVybmFsczogSW50ZXJuYWxDcmVhdGVHcWxRdWVyeUNyZWF0b3JPcHRpb25zO1xufTtcblxuZXhwb3J0IHR5cGUgR3FsVmFyaWFibGVzVHlwZTxUIGV4dGVuZHMgR3FsUXVlcnlBcmdzIHwgbnVsbD4gPSBUIGV4dGVuZHMgR3FsUXVlcnlBcmdzID8gVFsndmFyaWFibGVzJ10gOiBuZXZlcjtcblxuZXhwb3J0IGNvbnN0IGlzQ3JlYXRlR3FsUXVlcnlPcHRpb25zID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihcbiAgb3B0aW9uczogQ3JlYXRlUXVlcnlPcHRpb25zPFRBcmdzPiB8IENyZWF0ZUdxbFF1ZXJ5T3B0aW9uczxUQXJncz4sXG4pOiBvcHRpb25zIGlzIENyZWF0ZUdxbFF1ZXJ5T3B0aW9uczxUQXJncz4gPT4ge1xuICByZXR1cm4gJ3RyYW5zcG9ydCcgaW4gb3B0aW9ucy5jcmVhdG9ySW50ZXJuYWxzO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdxbFF1ZXJ5ID0gPFRBcmdzIGV4dGVuZHMgR3FsUXVlcnlBcmdzPihvcHRpb25zOiBDcmVhdGVHcWxRdWVyeU9wdGlvbnM8VEFyZ3M+KSA9PiB7XG4gIGNvbnN0IGRlcHMgPSBzZXR1cFF1ZXJ5RGVwZW5kZW5jaWVzKHtcbiAgICBjbGllbnRDb25maWc6IG9wdGlvbnMuY3JlYXRvckludGVybmFscy5jbGllbnQsXG4gICAgcXVlcnlDb25maWc6IG9wdGlvbnMucXVlcnlDb25maWcsXG4gIH0pO1xuICBjb25zdCBzdGF0ZSA9IHNldHVwUXVlcnlTdGF0ZTxUQXJncz4oe30pO1xuICBjb25zdCB7IGNyZWF0b3IsIGNyZWF0b3JJbnRlcm5hbHMsIHF1ZXJ5Q29uZmlnIH0gPSBvcHRpb25zO1xuICBjb25zdCBmbGFncyA9IGdldFF1ZXJ5RmVhdHVyZVVzYWdlKG9wdGlvbnMpO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSBjcmVhdGVHcWxFeGVjdXRlRm48VEFyZ3M+KHtcbiAgICBkZXBzLFxuICAgIHN0YXRlLFxuICAgIGNyZWF0b3IsXG4gICAgY3JlYXRvckludGVybmFscyxcbiAgICBxdWVyeUNvbmZpZyxcbiAgfSk7XG5cbiAgY29uc3QgZmVhdHVyZUZuQ29udGV4dDogUXVlcnlGZWF0dXJlQ29udGV4dDxUQXJncz4gPSB7XG4gICAgc3RhdGUsXG4gICAgZXhlY3V0ZSxcbiAgICBmbGFncyxcbiAgICBkZXBzLFxuICB9O1xuXG4gIGFwcGx5UXVlcnlGZWF0dXJlcyhvcHRpb25zLmZlYXR1cmVzLCBmZWF0dXJlRm5Db250ZXh0KTtcblxuICBtYXliZUV4ZWN1dGUoeyBleGVjdXRlLCBmbGFncyB9KTtcblxuICByZXR1cm4gY3JlYXRlUXVlcnlPYmplY3QoeyBzdGF0ZSwgZXhlY3V0ZSwgZGVwcyB9KTtcbn07XG4iXX0=","import { splitQueryConfig, } from '../http';\nimport { createGqlQuery } from './gql-query';\nexport const createGqlQueryCreator = (options, internals) => {\n function queryCreator(...args) {\n const { features, queryConfig } = splitQueryConfig(args);\n return createGqlQuery({\n creator: options,\n creatorInternals: internals,\n features,\n queryConfig,\n });\n }\n return queryCreator;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3FsLXF1ZXJ5LWNyZWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2dxbC9ncWwtcXVlcnktY3JlYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBUUwsZ0JBQWdCLEdBQ2pCLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxjQUFjLEVBQWdCLE1BQU0sYUFBYSxDQUFDO0FBZ0IzRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUNuQyxPQUF3RCxFQUN4RCxTQUErQyxFQUMxQixFQUFFO0lBSXZCLFNBQVMsWUFBWSxDQUFDLEdBQUcsSUFBMkM7UUFDbEUsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBUSxJQUFJLENBQUMsQ0FBQztRQUVoRSxPQUFPLGNBQWMsQ0FBUTtZQUMzQixPQUFPLEVBQUUsT0FBTztZQUNoQixnQkFBZ0IsRUFBRSxTQUFTO1lBQzNCLFFBQVE7WUFDUixXQUFXO1NBQ1osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnMsXG4gIFF1ZXJ5LFxuICBRdWVyeUNsaWVudENvbmZpZyxcbiAgUXVlcnlDb25maWcsXG4gIFF1ZXJ5Q3JlYXRvcixcbiAgUXVlcnlGZWF0dXJlLFxuICBSb3V0ZVR5cGUsXG4gIHNwbGl0UXVlcnlDb25maWcsXG59IGZyb20gJy4uL2h0dHAnO1xuaW1wb3J0IHsgY3JlYXRlR3FsUXVlcnksIEdxbFF1ZXJ5QXJncyB9IGZyb20gJy4vZ3FsLXF1ZXJ5JztcblxuZXhwb3J0IHR5cGUgQ3JlYXRlR3FsUXVlcnlDcmVhdG9yT3B0aW9uczxUQXJncyBleHRlbmRzIEdxbFF1ZXJ5QXJncz4gPSBPbWl0PENyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnMsICdyb3V0ZSc+ICYge1xuICByb3V0ZT86IFJvdXRlVHlwZTxUQXJncz47XG59O1xuXG5leHBvcnQgdHlwZSBHcWxRdWVyeU1ldGhvZCA9ICdRVUVSWScgfCAnTVVUQVRFJztcbmV4cG9ydCB0eXBlIEdxbFF1ZXJ5VHJhbnNwb3J0ID0gJ0dFVCcgfCAnUE9TVCc7XG5cbmV4cG9ydCB0eXBlIEludGVybmFsQ3JlYXRlR3FsUXVlcnlDcmVhdG9yT3B0aW9ucyA9IHtcbiAgbWV0aG9kOiBHcWxRdWVyeU1ldGhvZDtcbiAgdHJhbnNwb3J0OiBHcWxRdWVyeVRyYW5zcG9ydDtcbiAgY2xpZW50OiBRdWVyeUNsaWVudENvbmZpZztcbiAgcXVlcnk6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVHcWxRdWVyeUNyZWF0b3IgPSA8VEFyZ3MgZXh0ZW5kcyBHcWxRdWVyeUFyZ3M+KFxuICBvcHRpb25zOiBDcmVhdGVHcWxRdWVyeUNyZWF0b3JPcHRpb25zPFRBcmdzPiB8IHVuZGVmaW5lZCxcbiAgaW50ZXJuYWxzOiBJbnRlcm5hbENyZWF0ZUdxbFF1ZXJ5Q3JlYXRvck9wdGlvbnMsXG4pOiBRdWVyeUNyZWF0b3I8VEFyZ3M+ID0+IHtcbiAgZnVuY3Rpb24gcXVlcnlDcmVhdG9yKC4uLmZlYXR1cmVzOiBRdWVyeUZlYXR1cmU8VEFyZ3M+W10pOiBRdWVyeTxUQXJncz47XG4gIGZ1bmN0aW9uIHF1ZXJ5Q3JlYXRvcihxdWVyeUNvbmZpZzogUXVlcnlDb25maWcsIC4uLmZlYXR1cmVzOiBRdWVyeUZlYXR1cmU8VEFyZ3M+W10pOiBRdWVyeTxUQXJncz47XG5cbiAgZnVuY3Rpb24gcXVlcnlDcmVhdG9yKC4uLmFyZ3M6IChRdWVyeUZlYXR1cmU8VEFyZ3M+IHwgUXVlcnlDb25maWcpW10pOiBRdWVyeTxUQXJncz4ge1xuICAgIGNvbnN0IHsgZmVhdHVyZXMsIHF1ZXJ5Q29uZmlnIH0gPSBzcGxpdFF1ZXJ5Q29uZmlnPFRBcmdzPihhcmdzKTtcblxuICAgIHJldHVybiBjcmVhdGVHcWxRdWVyeTxUQXJncz4oe1xuICAgICAgY3JlYXRvcjogb3B0aW9ucyxcbiAgICAgIGNyZWF0b3JJbnRlcm5hbHM6IGludGVybmFscyxcbiAgICAgIGZlYXR1cmVzLFxuICAgICAgcXVlcnlDb25maWcsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcXVlcnlDcmVhdG9yO1xufTtcbiJdfQ==","import { createGqlQueryCreator } from './gql-query-creator';\n/** A query creator that creates a GQL query where the payload is sent via GET (query params) */\nexport const createGqlQueryViaGet = (client) => {\n return (query, creatorOptions) => createGqlQueryCreator(creatorOptions, { method: 'QUERY', client, transport: 'GET', query });\n};\n/** A query creator that creates a GQL query where the payload is sent via POST (body) */\nexport const createGqlQueryViaPost = (client) => {\n return (query, creatorOptions) => createGqlQueryCreator(creatorOptions, { method: 'QUERY', client, transport: 'POST', query });\n};\n/** A query creator that creates a GQL mutation where the payload is sent via GET (query params) */\nexport const createGqlMutationViaGet = (client) => {\n return (query, creatorOptions) => createGqlQueryCreator(creatorOptions, { method: 'MUTATE', client, transport: 'GET', query });\n};\n/** A query creator that creates a GQL mutation where the payload is sent via POST (body) */\nexport const createGqlMutationViaPost = (client) => {\n return (query, creatorOptions) => createGqlQueryCreator(creatorOptions, { method: 'MUTATE', client, transport: 'POST', query });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3FsLXF1ZXJ5LWNyZWF0b3ItdGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9ncWwvZ3FsLXF1ZXJ5LWNyZWF0b3ItdGVtcGxhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBZ0MscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUxRixnR0FBZ0c7QUFDaEcsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUF5QixFQUFFLEVBQUU7SUFDaEUsT0FBTyxDQUE2QixLQUFVLEVBQUUsY0FBb0QsRUFBRSxFQUFFLENBQ3RHLHFCQUFxQixDQUFRLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUN2RyxDQUFDLENBQUM7QUFFRix5RkFBeUY7QUFDekYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxNQUF5QixFQUFFLEVBQUU7SUFDakUsT0FBTyxDQUE2QixLQUFVLEVBQUUsY0FBb0QsRUFBRSxFQUFFLENBQ3RHLHFCQUFxQixDQUFRLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUN4RyxDQUFDLENBQUM7QUFFRixtR0FBbUc7QUFDbkcsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxNQUF5QixFQUFFLEVBQUU7SUFDbkUsT0FBTyxDQUE2QixLQUFVLEVBQUUsY0FBb0QsRUFBRSxFQUFFLENBQ3RHLHFCQUFxQixDQUFRLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUN4RyxDQUFDLENBQUM7QUFFRiw0RkFBNEY7QUFDNUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxNQUF5QixFQUFFLEVBQUU7SUFDcEUsT0FBTyxDQUE2QixLQUFVLEVBQUUsY0FBb0QsRUFBRSxFQUFFLENBQ3RHLHFCQUFxQixDQUFRLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUN6RyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHUUwgfSBmcm9tICcuLi8uLi9ncWwnO1xuaW1wb3J0IHsgUXVlcnlDbGllbnRDb25maWcgfSBmcm9tICcuLi9odHRwJztcbmltcG9ydCB7IEdxbFF1ZXJ5QXJncyB9IGZyb20gJy4vZ3FsLXF1ZXJ5JztcbmltcG9ydCB7IENyZWF0ZUdxbFF1ZXJ5Q3JlYXRvck9wdGlvbnMsIGNyZWF0ZUdxbFF1ZXJ5Q3JlYXRvciB9IGZyb20gJy4vZ3FsLXF1ZXJ5LWNyZWF0b3InO1xuXG4vKiogQSBxdWVyeSBjcmVhdG9yIHRoYXQgY3JlYXRlcyBhIEdRTCBxdWVyeSB3aGVyZSB0aGUgcGF5bG9hZCBpcyBzZW50IHZpYSBHRVQgKHF1ZXJ5IHBhcmFtcykgKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVHcWxRdWVyeVZpYUdldCA9IChjbGllbnQ6IFF1ZXJ5Q2xpZW50Q29uZmlnKSA9PiB7XG4gIHJldHVybiA8VEFyZ3MgZXh0ZW5kcyBHcWxRdWVyeUFyZ3M+KHF1ZXJ5OiBHUUwsIGNyZWF0b3JPcHRpb25zPzogQ3JlYXRlR3FsUXVlcnlDcmVhdG9yT3B0aW9uczxUQXJncz4pID0+XG4gICAgY3JlYXRlR3FsUXVlcnlDcmVhdG9yPFRBcmdzPihjcmVhdG9yT3B0aW9ucywgeyBtZXRob2Q6ICdRVUVSWScsIGNsaWVudCwgdHJhbnNwb3J0OiAnR0VUJywgcXVlcnkgfSk7XG59O1xuXG4vKiogQSBxdWVyeSBjcmVhdG9yIHRoYXQgY3JlYXRlcyBhIEdRTCBxdWVyeSB3aGVyZSB0aGUgcGF5bG9hZCBpcyBzZW50IHZpYSBQT1NUIChib2R5KSAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUdxbFF1ZXJ5VmlhUG9zdCA9IChjbGllbnQ6IFF1ZXJ5Q2xpZW50Q29uZmlnKSA9PiB7XG4gIHJldHVybiA8VEFyZ3MgZXh0ZW5kcyBHcWxRdWVyeUFyZ3M+KHF1ZXJ5OiBHUUwsIGNyZWF0b3JPcHRpb25zPzogQ3JlYXRlR3FsUXVlcnlDcmVhdG9yT3B0aW9uczxUQXJncz4pID0+XG4gICAgY3JlYXRlR3FsUXVlcnlDcmVhdG9yPFRBcmdzPihjcmVhdG9yT3B0aW9ucywgeyBtZXRob2Q6ICdRVUVSWScsIGNsaWVudCwgdHJhbnNwb3J0OiAnUE9TVCcsIHF1ZXJ5IH0pO1xufTtcblxuLyoqIEEgcXVlcnkgY3JlYXRvciB0aGF0IGNyZWF0ZXMgYSBHUUwgbXV0YXRpb24gd2hlcmUgdGhlIHBheWxvYWQgaXMgc2VudCB2aWEgR0VUIChxdWVyeSBwYXJhbXMpICovXG5leHBvcnQgY29uc3QgY3JlYXRlR3FsTXV0YXRpb25WaWFHZXQgPSAoY2xpZW50OiBRdWVyeUNsaWVudENvbmZpZykgPT4ge1xuICByZXR1cm4gPFRBcmdzIGV4dGVuZHMgR3FsUXVlcnlBcmdzPihxdWVyeTogR1FMLCBjcmVhdG9yT3B0aW9ucz86IENyZWF0ZUdxbFF1ZXJ5Q3JlYXRvck9wdGlvbnM8VEFyZ3M+KSA9PlxuICAgIGNyZWF0ZUdxbFF1ZXJ5Q3JlYXRvcjxUQXJncz4oY3JlYXRvck9wdGlvbnMsIHsgbWV0aG9kOiAnTVVUQVRFJywgY2xpZW50LCB0cmFuc3BvcnQ6ICdHRVQnLCBxdWVyeSB9KTtcbn07XG5cbi8qKiBBIHF1ZXJ5IGNyZWF0b3IgdGhhdCBjcmVhdGVzIGEgR1FMIG11dGF0aW9uIHdoZXJlIHRoZSBwYXlsb2FkIGlzIHNlbnQgdmlhIFBPU1QgKGJvZHkpICovXG5leHBvcnQgY29uc3QgY3JlYXRlR3FsTXV0YXRpb25WaWFQb3N0ID0gKGNsaWVudDogUXVlcnlDbGllbnRDb25maWcpID0+IHtcbiAgcmV0dXJuIDxUQXJncyBleHRlbmRzIEdxbFF1ZXJ5QXJncz4ocXVlcnk6IEdRTCwgY3JlYXRvck9wdGlvbnM/OiBDcmVhdGVHcWxRdWVyeUNyZWF0b3JPcHRpb25zPFRBcmdzPikgPT5cbiAgICBjcmVhdGVHcWxRdWVyeUNyZWF0b3I8VEFyZ3M+KGNyZWF0b3JPcHRpb25zLCB7IG1ldGhvZDogJ01VVEFURScsIGNsaWVudCwgdHJhbnNwb3J0OiAnUE9TVCcsIHF1ZXJ5IH0pO1xufTtcbiJdfQ==","import { effect, untracked } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { filter, interval, map, of, ReplaySubject, shareReplay, skip, switchMap, takeUntil, takeWhile, } from 'rxjs';\nimport { filterFailure, filterSuccess, isQueryStateLoading, isQueryStateSuccess, takeUntilResponse, } from '../../query';\nconst transformExecStateToQueryState = (execState) => {\n const meta = { id: -1, triggeredVia: 'program' };\n switch (execState?.type) {\n case 'loading': {\n const loading = {\n meta,\n type: \"LOADING\" /* QueryStateType.Loading */,\n ...(execState.loading.progress\n ? {\n progress: {\n current: execState.loading.progress.loaded,\n percentage: execState.loading.progress.percentage,\n total: execState.loading.progress.total,\n },\n }\n : {}),\n };\n return loading;\n }\n case 'success': {\n const success = {\n headers: {},\n meta,\n response: execState.response,\n type: \"SUCCESS\" /* QueryStateType.Success */,\n };\n return success;\n }\n case 'failure': {\n const error = {\n error: {\n detail: execState.error.raw.error,\n httpErrorResponse: execState.error.raw,\n status: execState.error.raw.status,\n statusText: execState.error.raw.statusText,\n url: execState.error.raw.url || '',\n },\n meta,\n type: \"FAILURE\" /* QueryStateType.Failure */,\n };\n return error;\n }\n default: {\n const prepared = {\n meta,\n type: \"PREPARED\" /* QueryStateType.Prepared */,\n };\n return prepared;\n }\n }\n};\nexport const isLegacyQuery = (query) => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n if (!('newQuery' in query)) {\n return false;\n }\n return true;\n};\nexport class LegacyQuery {\n get rawState() {\n return transformExecStateToQueryState(this.newQuery.executionState());\n }\n get isExpired() {\n return this.newQuery.subtle.request()?.isStale();\n }\n get isInUse() {\n return true;\n }\n /**\n * @internal\n */\n get _subscriberCount() {\n return 0;\n }\n get isPolling() {\n return !!this._pollingSubscription;\n }\n get autoRefreshOnConfig() {\n const transformed = {\n queryClientDefaultHeadersChange: false,\n windowFocus: false,\n };\n return transformed;\n }\n /**\n * @internal\n */\n get _enableSmartPolling() {\n return false;\n }\n get store() {\n return null;\n }\n get canBeCached() {\n return false;\n }\n get _isInMockMode() {\n return false;\n }\n constructor(newQuery, _arguments, entity) {\n this.newQuery = newQuery;\n this._arguments = _arguments;\n this.entity = entity;\n /**\n * @internal\n */\n this._pollingSubscription = null;\n /**\n * @internal\n */\n this._currentPollConfig = null;\n /**\n * @internal\n */\n this.storeSyncEffect = effect(() => {\n const res = this.newQuery.response();\n untracked(() => {\n if (this.entity?.set) {\n const id = this.entity.id({ args: this._arguments, response: res });\n this.entity.set({\n args: this._arguments,\n response: res,\n id,\n store: this.entity.store,\n });\n }\n });\n });\n /**\n * @internal\n */\n this._dependents = {};\n /**\n * @internal\n */\n this._dependentsChanged$ = new ReplaySubject();\n /**\n * @internal\n */\n this._isPollingPaused = false;\n this.state$ = toObservable(this.newQuery.executionState, { injector: this.newQuery.subtle.injector }).pipe(map((execState) => transformExecStateToQueryState(execState)), switchMap((s) => this._transformState(s)), shareReplay({ bufferSize: 1, refCount: true }));\n this.newQuery.subtle.destroyRef.onDestroy(() => this.destroy());\n }\n destroy() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._dependentsChanged$.complete();\n this.newQuery.subtle.destroy();\n this.storeSyncEffect.destroy();\n }\n execute(options = {}) {\n untracked(() => this.newQuery.execute({ args: this._arguments, options: { allowCache: options.skipCache !== true } }));\n return this;\n }\n abort() {\n if (!isQueryStateLoading(this.rawState)) {\n return this;\n }\n this.newQuery.reset();\n return this;\n }\n poll(config) {\n if (this._pollingSubscription) {\n return this;\n }\n this._currentPollConfig = config;\n const interval$ = interval(config.interval);\n const poll$ = interval$.pipe(skip(config.triggerImmediately ? 0 : 1), takeUntil(config.takeUntil), takeWhile(() => !this._isPollingPaused), filter(() => !isQueryStateLoading(this.rawState)));\n this._pollingSubscription = poll$.subscribe({\n next: () => this.execute({ skipCache: true, _triggeredVia: 'poll' }),\n complete: () => this.stopPolling(),\n });\n return this;\n }\n stopPolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._currentPollConfig = null;\n return this;\n }\n pausePolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._isPollingPaused = true;\n return this;\n }\n resumePolling() {\n if (!this._isPollingPaused || !this._currentPollConfig) {\n return this;\n }\n this._isPollingPaused = false;\n return this.poll({ ...this._currentPollConfig, triggerImmediately: true });\n }\n onSuccess(callback) {\n this.state$.pipe(takeUntilResponse(), filterSuccess()).subscribe((state) => callback(state.response));\n return this;\n }\n onFailure(callback) {\n this.state$.pipe(takeUntilResponse(), filterFailure()).subscribe((state) => callback(state.error));\n return this;\n }\n /**\n * @internal\n */\n _addDependent(tNodeIndex) {\n if (!this._dependents[tNodeIndex]) {\n this._dependents[tNodeIndex] = 0;\n }\n this._dependents[tNodeIndex]++;\n this._dependentsChanged$.next(this._dependents);\n }\n /**\n * @internal\n */\n _removeDependent(tNodeIndex) {\n const count = this._dependents[tNodeIndex];\n if (count === undefined) {\n return;\n }\n if (this._dependents[tNodeIndex] !== undefined) {\n this._dependents[tNodeIndex]--;\n }\n if (count <= 1) {\n delete this._dependents[tNodeIndex];\n }\n this._dependentsChanged$.next(this._dependents);\n }\n /**\n * @internal\n */\n _hasDependents() {\n return Object.keys(this._dependents).length > 0;\n }\n /**\n * @internal\n */\n _transformState(s) {\n if (!isQueryStateSuccess(s) || !this.entity?.get) {\n return of(s);\n }\n const id = this.entity.id({ args: this._arguments, response: s.response });\n return this.entity\n .get({ args: this._arguments, id, response: s.response, store: this.entity.store })\n .pipe(map((v) => ({ ...s, response: v })));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnYWN5LXF1ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9pbnRlcm9wL2xlZ2FjeS1xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUVILEVBQUUsRUFDRixhQUFhLEVBQ2IsV0FBVyxFQUNYLElBQUksRUFFSixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFJTCxhQUFhLEVBQ2IsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixtQkFBbUIsRUFXbkIsaUJBQWlCLEdBQ2xCLE1BQU0sYUFBYSxDQUFDO0FBUXJCLE1BQU0sOEJBQThCLEdBQUcsQ0FDckMsU0FBNEMsRUFDWCxFQUFFO0lBQ25DLE1BQU0sSUFBSSxHQUFtQixFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFFakUsUUFBUSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDeEIsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2YsTUFBTSxPQUFPLEdBQVk7Z0JBQ3ZCLElBQUk7Z0JBQ0osSUFBSSx3Q0FBd0I7Z0JBQzVCLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVE7b0JBQzVCLENBQUMsQ0FBQzt3QkFDRSxRQUFRLEVBQUU7NEJBQ1IsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07NEJBQzFDLFVBQVUsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVOzRCQUNqRCxLQUFLLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSzt5QkFDeEM7cUJBQ0Y7b0JBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNSLENBQUM7WUFFRixPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQ0QsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2YsTUFBTSxPQUFPLEdBQWlDO2dCQUM1QyxPQUFPLEVBQUUsRUFBRTtnQkFDWCxJQUFJO2dCQUNKLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTtnQkFDNUIsSUFBSSx3Q0FBd0I7YUFDN0IsQ0FBQztZQUVGLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFDRCxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDZixNQUFNLEtBQUssR0FBWTtnQkFDckIsS0FBSyxFQUFFO29CQUNMLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLO29CQUNqQyxpQkFBaUIsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUc7b0JBQ3RDLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNO29CQUNsQyxVQUFVLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVTtvQkFDMUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFO2lCQUNuQztnQkFDRCxJQUFJO2dCQUNKLElBQUksd0NBQXdCO2FBQzdCLENBQUM7WUFFRixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ1IsTUFBTSxRQUFRLEdBQWE7Z0JBQ3pCLElBQUk7Z0JBQ0osSUFBSSwwQ0FBeUI7YUFDOUIsQ0FBQztZQUVGLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQTJCLEtBQWMsRUFBYyxFQUFFO0lBQ3BGLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNoRSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUtGLE1BQU0sT0FBTyxXQUFXO0lBdUR0QixJQUFJLFFBQVE7UUFDVixPQUFPLDhCQUE4QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE1BQU0sV0FBVyxHQUFxQztZQUNwRCwrQkFBK0IsRUFBRSxLQUFLO1lBQ3RDLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUM7UUFFRixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxZQUNTLFFBQW1CLEVBQ25CLFVBQStDLEVBQy9DLE1BQWdFO1FBRmhFLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBcUM7UUFDL0MsV0FBTSxHQUFOLE1BQU0sQ0FBMEQ7UUFwR3pFOztXQUVHO1FBQ0gseUJBQW9CLEdBQXdCLElBQUksQ0FBQztRQUNqRDs7V0FFRztRQUNILHVCQUFrQixHQUFzQixJQUFJLENBQUM7UUFFN0M7O1dBRUc7UUFDSCxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDNUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVyQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNiLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztvQkFDckIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFFcEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7d0JBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVO3dCQUNyQixRQUFRLEVBQUUsR0FBRzt3QkFDYixFQUFFO3dCQUNGLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7cUJBQ3pCLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVIOztXQUVHO1FBQ0gsZ0JBQVcsR0FBMkIsRUFBRSxDQUFDO1FBRXpDOztXQUVHO1FBQ0gsd0JBQW1CLEdBQUcsSUFBSSxhQUFhLEVBQTBCLENBQUM7UUFFbEU7O1dBRUc7UUFDSCxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUE0RHZCLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN4RyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLDhCQUE4QixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQzdELFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN6QyxXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxPQUFPLENBQUMsVUFBK0IsRUFBRTtRQUN2QyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQ3RHLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQWtCO1FBQ3JCLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztRQUVqQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3ZDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQzNCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUN2QyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDbEQsQ0FBQztRQUVGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQzFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDcEUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7U0FDbkMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFFL0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBRWpDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFFN0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN2RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRTlCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELFNBQVMsQ0FBQyxRQUFrQztRQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDdEcsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsU0FBUyxDQUFDLFFBQWdEO1FBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWEsQ0FBQyxVQUFrQjtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFFL0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsVUFBa0I7UUFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDakMsQ0FBQztRQUVELElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjO1FBQ1osT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxDQUF1QjtRQUNyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2pELE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBaUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFM0UsT0FBTyxJQUFJLENBQUMsTUFBTTthQUNmLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNsRixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVmZmVjdCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBmaWx0ZXIsXG4gIGludGVydmFsLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBSZXBsYXlTdWJqZWN0LFxuICBzaGFyZVJlcGxheSxcbiAgc2tpcCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VVbnRpbCxcbiAgdGFrZVdoaWxlLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi4vLi4vZW50aXR5JztcbmltcG9ydCB7XG4gIEJhc2VBcmd1bWVudHMsXG4gIEV4ZWN1dGVRdWVyeU9wdGlvbnMsXG4gIEZhaWx1cmUsXG4gIGZpbHRlckZhaWx1cmUsXG4gIGZpbHRlclN1Y2Nlc3MsXG4gIGlzUXVlcnlTdGF0ZUxvYWRpbmcsXG4gIGlzUXVlcnlTdGF0ZVN1Y2Nlc3MsXG4gIExvYWRpbmcsXG4gIFBvbGxDb25maWcsXG4gIFByZXBhcmVkLFxuICBRdWVyeUF1dG9SZWZyZXNoQ29uZmlnLFxuICBRdWVyeUVudGl0eUNvbmZpZyxcbiAgUXVlcnlTdGF0ZSxcbiAgUXVlcnlTdGF0ZU1ldGEsXG4gIFF1ZXJ5U3RhdGVUeXBlLFxuICBSb3V0ZVR5cGUsXG4gIFN1Y2Nlc3MsXG4gIHRha2VVbnRpbFJlc3BvbnNlLFxufSBmcm9tICcuLi8uLi9xdWVyeSc7XG5pbXBvcnQgeyBSZXF1ZXN0RXJyb3IgfSBmcm9tICcuLi8uLi9yZXF1ZXN0JztcbmltcG9ydCB7IEFueU5ld1F1ZXJ5LCBRdWVyeSwgUXVlcnlBcmdzLCBRdWVyeUFyZ3NPZiwgUXVlcnlFeGVjdXRpb25TdGF0ZSwgUmVxdWVzdEFyZ3MsIFJlc3BvbnNlVHlwZSB9IGZyb20gJy4uL2h0dHAnO1xuXG5leHBvcnQgdHlwZSBDcmVhdGVMZWdhY3lRdWVyeU9wdGlvbnM8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICBxdWVyeTogUXVlcnk8VEFyZ3M+O1xufTtcblxuY29uc3QgdHJhbnNmb3JtRXhlY1N0YXRlVG9RdWVyeVN0YXRlID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihcbiAgZXhlY1N0YXRlOiBRdWVyeUV4ZWN1dGlvblN0YXRlPFRBcmdzPiB8IG51bGwsXG4pOiBRdWVyeVN0YXRlPFJlc3BvbnNlVHlwZTxUQXJncz4+ID0+IHtcbiAgY29uc3QgbWV0YTogUXVlcnlTdGF0ZU1ldGEgPSB7IGlkOiAtMSwgdHJpZ2dlcmVkVmlhOiAncHJvZ3JhbScgfTtcblxuICBzd2l0Y2ggKGV4ZWNTdGF0ZT8udHlwZSkge1xuICAgIGNhc2UgJ2xvYWRpbmcnOiB7XG4gICAgICBjb25zdCBsb2FkaW5nOiBMb2FkaW5nID0ge1xuICAgICAgICBtZXRhLFxuICAgICAgICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5Mb2FkaW5nLFxuICAgICAgICAuLi4oZXhlY1N0YXRlLmxvYWRpbmcucHJvZ3Jlc3NcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50OiBleGVjU3RhdGUubG9hZGluZy5wcm9ncmVzcy5sb2FkZWQsXG4gICAgICAgICAgICAgICAgcGVyY2VudGFnZTogZXhlY1N0YXRlLmxvYWRpbmcucHJvZ3Jlc3MucGVyY2VudGFnZSxcbiAgICAgICAgICAgICAgICB0b3RhbDogZXhlY1N0YXRlLmxvYWRpbmcucHJvZ3Jlc3MudG90YWwsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gbG9hZGluZztcbiAgICB9XG4gICAgY2FzZSAnc3VjY2Vzcyc6IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3M6IFN1Y2Nlc3M8UmVzcG9uc2VUeXBlPFRBcmdzPj4gPSB7XG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBtZXRhLFxuICAgICAgICByZXNwb25zZTogZXhlY1N0YXRlLnJlc3BvbnNlLFxuICAgICAgICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5TdWNjZXNzLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuICAgIGNhc2UgJ2ZhaWx1cmUnOiB7XG4gICAgICBjb25zdCBlcnJvcjogRmFpbHVyZSA9IHtcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBkZXRhaWw6IGV4ZWNTdGF0ZS5lcnJvci5yYXcuZXJyb3IsXG4gICAgICAgICAgaHR0cEVycm9yUmVzcG9uc2U6IGV4ZWNTdGF0ZS5lcnJvci5yYXcsXG4gICAgICAgICAgc3RhdHVzOiBleGVjU3RhdGUuZXJyb3IucmF3LnN0YXR1cyxcbiAgICAgICAgICBzdGF0dXNUZXh0OiBleGVjU3RhdGUuZXJyb3IucmF3LnN0YXR1c1RleHQsXG4gICAgICAgICAgdXJsOiBleGVjU3RhdGUuZXJyb3IucmF3LnVybCB8fCAnJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWV0YSxcbiAgICAgICAgdHlwZTogUXVlcnlTdGF0ZVR5cGUuRmFpbHVyZSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgY29uc3QgcHJlcGFyZWQ6IFByZXBhcmVkID0ge1xuICAgICAgICBtZXRhLFxuICAgICAgICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5QcmVwYXJlZCxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcmVwYXJlZDtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc0xlZ2FjeVF1ZXJ5ID0gPFQgZXh0ZW5kcyBBbnlMZWdhY3lRdWVyeT4ocXVlcnk6IHVua25vd24pOiBxdWVyeSBpcyBUID0+IHtcbiAgaWYgKCFxdWVyeSB8fCB0eXBlb2YgcXVlcnkgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocXVlcnkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ25ld1F1ZXJ5JyBpbiBxdWVyeSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBBbnlMZWdhY3lRdWVyeSA9IExlZ2FjeVF1ZXJ5PGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT47XG5cbmV4cG9ydCBjbGFzcyBMZWdhY3lRdWVyeTxcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFJvdXRlIGV4dGVuZHMgUm91dGVUeXBlPEFyZ3VtZW50cz4sXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuICBUTmV3UXVlcnkgZXh0ZW5kcyBBbnlOZXdRdWVyeSxcbj4ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfcG9sbGluZ1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9jdXJyZW50UG9sbENvbmZpZzogUG9sbENvbmZpZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHN0b3JlU3luY0VmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5uZXdRdWVyeS5yZXNwb25zZSgpO1xuXG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmVudGl0eT8uc2V0KSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5lbnRpdHkuaWQoeyBhcmdzOiB0aGlzLl9hcmd1bWVudHMsIHJlc3BvbnNlOiByZXMgfSk7XG5cbiAgICAgICAgdGhpcy5lbnRpdHkuc2V0KHtcbiAgICAgICAgICBhcmdzOiB0aGlzLl9hcmd1bWVudHMsXG4gICAgICAgICAgcmVzcG9uc2U6IHJlcyxcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBzdG9yZTogdGhpcy5lbnRpdHkuc3RvcmUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfZGVwZW5kZW50czogUmVjb3JkPG51bWJlciwgbnVtYmVyPiA9IHt9O1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9kZXBlbmRlbnRzQ2hhbmdlZCQgPSBuZXcgUmVwbGF5U3ViamVjdDxSZWNvcmQ8bnVtYmVyLCBudW1iZXI+PigpO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9pc1BvbGxpbmdQYXVzZWQgPSBmYWxzZTtcblxuICBzdGF0ZSQ6IE9ic2VydmFibGU8UXVlcnlTdGF0ZTxEYXRhPj47XG5cbiAgZ2V0IHJhd1N0YXRlKCkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1FeGVjU3RhdGVUb1F1ZXJ5U3RhdGUodGhpcy5uZXdRdWVyeS5leGVjdXRpb25TdGF0ZSgpKTtcbiAgfVxuXG4gIGdldCBpc0V4cGlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmV3UXVlcnkuc3VidGxlLnJlcXVlc3QoKT8uaXNTdGFsZSgpO1xuICB9XG5cbiAgZ2V0IGlzSW5Vc2UoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXQgX3N1YnNjcmliZXJDb3VudCgpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGdldCBpc1BvbGxpbmcoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5fcG9sbGluZ1N1YnNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBhdXRvUmVmcmVzaE9uQ29uZmlnKCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVkOiBSZWFkb25seTxRdWVyeUF1dG9SZWZyZXNoQ29uZmlnPiA9IHtcbiAgICAgIHF1ZXJ5Q2xpZW50RGVmYXVsdEhlYWRlcnNDaGFuZ2U6IGZhbHNlLFxuICAgICAgd2luZG93Rm9jdXM6IGZhbHNlLFxuICAgIH07XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtZWQ7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXQgX2VuYWJsZVNtYXJ0UG9sbGluZygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgc3RvcmUoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgY2FuQmVDYWNoZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IF9pc0luTW9ja01vZGUoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5ld1F1ZXJ5OiBUTmV3UXVlcnksXG4gICAgcHVibGljIF9hcmd1bWVudHM6IFJlcXVlc3RBcmdzPFF1ZXJ5QXJnc09mPFROZXdRdWVyeT4+LFxuICAgIHB1YmxpYyBlbnRpdHk/OiBRdWVyeUVudGl0eUNvbmZpZzxTdG9yZSwgRGF0YSwgUmVzcG9uc2UsIEFyZ3VtZW50cywgSWQ+LFxuICApIHtcbiAgICB0aGlzLnN0YXRlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLm5ld1F1ZXJ5LmV4ZWN1dGlvblN0YXRlLCB7IGluamVjdG9yOiB0aGlzLm5ld1F1ZXJ5LnN1YnRsZS5pbmplY3RvciB9KS5waXBlKFxuICAgICAgbWFwKChleGVjU3RhdGUpID0+IHRyYW5zZm9ybUV4ZWNTdGF0ZVRvUXVlcnlTdGF0ZShleGVjU3RhdGUpKSxcbiAgICAgIHN3aXRjaE1hcCgocykgPT4gdGhpcy5fdHJhbnNmb3JtU3RhdGUocykpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuXG4gICAgdGhpcy5uZXdRdWVyeS5zdWJ0bGUuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gdGhpcy5kZXN0cm95KCkpO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIHRoaXMuX2RlcGVuZGVudHNDaGFuZ2VkJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMubmV3UXVlcnkuc3VidGxlLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN0b3JlU3luY0VmZmVjdC5kZXN0cm95KCk7XG4gIH1cblxuICBleGVjdXRlKG9wdGlvbnM6IEV4ZWN1dGVRdWVyeU9wdGlvbnMgPSB7fSkge1xuICAgIHVudHJhY2tlZCgoKSA9PlxuICAgICAgdGhpcy5uZXdRdWVyeS5leGVjdXRlKHsgYXJnczogdGhpcy5fYXJndW1lbnRzLCBvcHRpb25zOiB7IGFsbG93Q2FjaGU6IG9wdGlvbnMuc2tpcENhY2hlICE9PSB0cnVlIH0gfSksXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgaWYgKCFpc1F1ZXJ5U3RhdGVMb2FkaW5nKHRoaXMucmF3U3RhdGUpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLm5ld1F1ZXJ5LnJlc2V0KCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHBvbGwoY29uZmlnOiBQb2xsQ29uZmlnKSB7XG4gICAgaWYgKHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRQb2xsQ29uZmlnID0gY29uZmlnO1xuXG4gICAgY29uc3QgaW50ZXJ2YWwkID0gaW50ZXJ2YWwoY29uZmlnLmludGVydmFsKTtcbiAgICBjb25zdCBwb2xsJCA9IGludGVydmFsJC5waXBlKFxuICAgICAgc2tpcChjb25maWcudHJpZ2dlckltbWVkaWF0ZWx5ID8gMCA6IDEpLFxuICAgICAgdGFrZVVudGlsKGNvbmZpZy50YWtlVW50aWwpLFxuICAgICAgdGFrZVdoaWxlKCgpID0+ICF0aGlzLl9pc1BvbGxpbmdQYXVzZWQpLFxuICAgICAgZmlsdGVyKCgpID0+ICFpc1F1ZXJ5U3RhdGVMb2FkaW5nKHRoaXMucmF3U3RhdGUpKSxcbiAgICApO1xuXG4gICAgdGhpcy5fcG9sbGluZ1N1YnNjcmlwdGlvbiA9IHBvbGwkLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB0aGlzLmV4ZWN1dGUoeyBza2lwQ2FjaGU6IHRydWUsIF90cmlnZ2VyZWRWaWE6ICdwb2xsJyB9KSxcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB0aGlzLnN0b3BQb2xsaW5nKCksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN0b3BQb2xsaW5nKCkge1xuICAgIHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fcG9sbGluZ1N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgdGhpcy5fY3VycmVudFBvbGxDb25maWcgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwYXVzZVBvbGxpbmcoKSB7XG4gICAgdGhpcy5fcG9sbGluZ1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uID0gbnVsbDtcblxuICAgIHRoaXMuX2lzUG9sbGluZ1BhdXNlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlc3VtZVBvbGxpbmcoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1BvbGxpbmdQYXVzZWQgfHwgIXRoaXMuX2N1cnJlbnRQb2xsQ29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLl9pc1BvbGxpbmdQYXVzZWQgPSBmYWxzZTtcblxuICAgIHJldHVybiB0aGlzLnBvbGwoeyAuLi50aGlzLl9jdXJyZW50UG9sbENvbmZpZywgdHJpZ2dlckltbWVkaWF0ZWx5OiB0cnVlIH0pO1xuICB9XG5cbiAgb25TdWNjZXNzKGNhbGxiYWNrOiAocmVzcG9uc2U6IERhdGEpID0+IHZvaWQpIHtcbiAgICB0aGlzLnN0YXRlJC5waXBlKHRha2VVbnRpbFJlc3BvbnNlKCksIGZpbHRlclN1Y2Nlc3MoKSkuc3Vic2NyaWJlKChzdGF0ZSkgPT4gY2FsbGJhY2soc3RhdGUucmVzcG9uc2UpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9uRmFpbHVyZShjYWxsYmFjazogKGVycm9yOiBSZXF1ZXN0RXJyb3I8dW5rbm93bj4pID0+IHZvaWQpIHtcbiAgICB0aGlzLnN0YXRlJC5waXBlKHRha2VVbnRpbFJlc3BvbnNlKCksIGZpbHRlckZhaWx1cmUoKSkuc3Vic2NyaWJlKChzdGF0ZSkgPT4gY2FsbGJhY2soc3RhdGUuZXJyb3IpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9hZGREZXBlbmRlbnQodE5vZGVJbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLl9kZXBlbmRlbnRzW3ROb2RlSW5kZXhdKSB7XG4gICAgICB0aGlzLl9kZXBlbmRlbnRzW3ROb2RlSW5kZXhdID0gMDtcbiAgICB9XG5cbiAgICB0aGlzLl9kZXBlbmRlbnRzW3ROb2RlSW5kZXhdKys7XG5cbiAgICB0aGlzLl9kZXBlbmRlbnRzQ2hhbmdlZCQubmV4dCh0aGlzLl9kZXBlbmRlbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9yZW1vdmVEZXBlbmRlbnQodE5vZGVJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLl9kZXBlbmRlbnRzW3ROb2RlSW5kZXhdO1xuICAgIGlmIChjb3VudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RlcGVuZGVudHNbdE5vZGVJbmRleF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fZGVwZW5kZW50c1t0Tm9kZUluZGV4XS0tO1xuICAgIH1cblxuICAgIGlmIChjb3VudCA8PSAxKSB7XG4gICAgICBkZWxldGUgdGhpcy5fZGVwZW5kZW50c1t0Tm9kZUluZGV4XTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZXBlbmRlbnRzQ2hhbmdlZCQubmV4dCh0aGlzLl9kZXBlbmRlbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9oYXNEZXBlbmRlbnRzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9kZXBlbmRlbnRzKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3RyYW5zZm9ybVN0YXRlKHM6IFF1ZXJ5U3RhdGU8UmVzcG9uc2U+KTogT2JzZXJ2YWJsZTxRdWVyeVN0YXRlPERhdGE+PiB7XG4gICAgaWYgKCFpc1F1ZXJ5U3RhdGVTdWNjZXNzKHMpIHx8ICF0aGlzLmVudGl0eT8uZ2V0KSB7XG4gICAgICByZXR1cm4gb2YocykgYXMgT2JzZXJ2YWJsZTxRdWVyeVN0YXRlPERhdGE+PjtcbiAgICB9XG5cbiAgICBjb25zdCBpZCA9IHRoaXMuZW50aXR5LmlkKHsgYXJnczogdGhpcy5fYXJndW1lbnRzLCByZXNwb25zZTogcy5yZXNwb25zZSB9KTtcblxuICAgIHJldHVybiB0aGlzLmVudGl0eVxuICAgICAgLmdldCh7IGFyZ3M6IHRoaXMuX2FyZ3VtZW50cywgaWQsIHJlc3BvbnNlOiBzLnJlc3BvbnNlLCBzdG9yZTogdGhpcy5lbnRpdHkuc3RvcmUgfSlcbiAgICAgIC5waXBlKG1hcCgodikgPT4gKHsgLi4ucywgcmVzcG9uc2U6IHYgfSkpKTtcbiAgfVxufVxuIl19","import { HttpHeaders } from '@angular/common/http';\nimport { effect, inject, Injector, runInInjectionContext, signal, untracked } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject } from 'rxjs';\nimport { addQueryContainerHandling } from '../../utils';\nimport { LegacyQuery } from './legacy-query';\n// TODO: Migrate to the new query creator\n// TODO: Create legacy query creator that uses the new query creator\n// TODO: In every component replace the new query creator with the legacy query creator\n// TODO: Inject the injector in every component that uses the legacy query creator\n// TODO: In every query add the injector to the prepare function args\n// TODO: If the created query is not pushed into a signal or subject set the self destroy on response prepare arg to true\n// TODO: Test with infinity query\n// TODO: Test with GQL. variables are currently not used\n/**\n * Creates a legacy query creator.\n * @deprecated This is a temporary solution to support legacy queries. It will be removed in the future.\n */\nexport class LegacyQueryCreator {\n constructor(options) {\n this.options = options;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.prepare = (args) => {\n const injector = args?.injector ?? inject(Injector);\n let headers = new HttpHeaders();\n if (args?.headers) {\n Object.entries(args.headers).forEach(([key, value]) => {\n if (value) {\n headers = headers.set(key, value);\n }\n });\n }\n const queryArgs = {\n ...(args?.body ? { body: args.body } : {}),\n ...(args?.pathParams ? { pathParams: args.pathParams } : {}),\n ...(args?.queryParams ? { queryParams: args.queryParams } : {}),\n headers,\n };\n return runInInjectionContext(injector, () => {\n return untracked(() => {\n const newQuery = this.options.creator({\n onlyManualExecution: true,\n injector,\n silenceMissingWithArgsFeatureError: true,\n });\n const legacyQuery = new LegacyQuery(newQuery, queryArgs, this.options.entity);\n if (args?.config?.destroyOnResponse) {\n const destroyEffect = effect(() => {\n if (newQuery.executionState()?.type === 'success' || newQuery.executionState()?.type === 'failure') {\n legacyQuery.destroy();\n destroyEffect.destroy();\n }\n });\n }\n return legacyQuery;\n });\n });\n };\n this.createSubject = (initialValue, config) => {\n const subject = new BehaviorSubject(initialValue ?? null);\n addQueryContainerHandling(subject, () => subject.getValue(), config);\n return subject;\n };\n this.createSignal = (initialValue, config) => {\n const _signal = signal(initialValue ?? null);\n addQueryContainerHandling(toObservable(_signal), () => _signal(), config);\n return _signal;\n };\n this.behaviorSubject = this.createSubject;\n }\n}\nexport const createLegacyQueryCreator = (options) => {\n return new LegacyQueryCreator(options);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnYWN5LXF1ZXJ5LWNyZWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2ludGVyb3AvbGVnYWN5LXF1ZXJ5LWNyZWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBV3ZDLE9BQU8sRUFBRSx5QkFBeUIsRUFBd0IsTUFBTSxhQUFhLENBQUM7QUFFOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBc0Q3Qyx5Q0FBeUM7QUFDekMsb0VBQW9FO0FBQ3BFLHVGQUF1RjtBQUN2RixrRkFBa0Y7QUFDbEYscUVBQXFFO0FBQ3JFLHlIQUF5SDtBQUV6SCxpQ0FBaUM7QUFDakMsd0RBQXdEO0FBRXhEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFPN0IsWUFBbUIsT0FBMEU7UUFBMUUsWUFBTyxHQUFQLE9BQU8sQ0FBbUU7UUFFN0YsNkRBQTZEO1FBQzdELGFBQWE7UUFDYixZQUFPLEdBQXFGLENBQzFGLElBQXdGLEVBQ3hGLEVBQUU7WUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLEVBQUUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVwRCxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBRWhDLElBQUksSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUNsQixNQUFNLENBQUMsT0FB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RyxDQU90QyxPQUEwRSxFQUNwQixFQUFFO0lBQ3hELE9BQU8sSUFBSSxrQkFBa0IsQ0FBbUMsT0FBTyxDQUFDLENBQUM7QUFDM0UsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBlZmZlY3QsIGluamVjdCwgSW5qZWN0b3IsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRW50aXR5U3RvcmUgfSBmcm9tICcuLi8uLi9lbnRpdHknO1xuaW1wb3J0IHtcbiAgQmFzZUFyZ3VtZW50cyxcbiAgRW1wdHlPYmplY3QsXG4gIFF1ZXJ5Q29uZmlnLFxuICBRdWVyeUVudGl0eUNvbmZpZyxcbiAgUm91dGVUeXBlLFxuICBXaXRoSGVhZGVycyxcbiAgV2l0aEluamVjdG9yLFxufSBmcm9tICcuLi8uLi9xdWVyeSc7XG5pbXBvcnQgeyBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nLCBRdWVyeUNvbnRhaW5lckNvbmZpZyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEFueU5ld1F1ZXJ5LCBRdWVyeSwgUXVlcnlBcmdzLCBRdWVyeUNyZWF0b3IsIFJlcXVlc3RBcmdzLCBSZXNwb25zZVR5cGUgfSBmcm9tICcuLi9odHRwJztcbmltcG9ydCB7IExlZ2FjeVF1ZXJ5IH0gZnJvbSAnLi9sZWdhY3ktcXVlcnknO1xuXG5leHBvcnQgdHlwZSBMZWdhY3lBcmd1bWVudHNPZlF1ZXJ5QXJnczxUIGV4dGVuZHMgUXVlcnlBcmdzPiA9IE9taXQ8VCwgJ3Jlc3BvbnNlJyB8ICdoZWFkZXJzJz4gJiBXaXRoSGVhZGVycztcbmV4cG9ydCB0eXBlIFF1ZXJ5QXJnc09mTGVnYWN5QXJndW1lbnRzPFQgZXh0ZW5kcyBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkLCBKPiA9IE9taXQ8VCwgJ21vY2snIHwgJ2hlYWRlcnMnPiAmIHtcbiAgaGVhZGVycz86IEh0dHBIZWFkZXJzO1xuICByZXNwb25zZT86IEo7XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVMZWdhY3lRdWVyeUNyZWF0b3JPcHRpb25zPFxuICBUQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgUmVzcG9uc2UsXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiA9IHtcbiAgY3JlYXRvcjogUXVlcnlDcmVhdG9yPFRBcmdzPjtcblxuICAvKipcbiAgICogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHF1ZXJ5J3MgZW50aXR5IHN0b3JlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgZW50aXR5PzogUXVlcnlFbnRpdHlDb25maWc8U3RvcmUsIERhdGEsIFJlc3BvbnNlLCBMZWdhY3lBcmd1bWVudHNPZlF1ZXJ5QXJnczxUQXJncz4sIElkPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aExlZ2FjeUNvbmZpZyB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgcXVlcnkuXG4gICAqL1xuICBjb25maWc/OiBRdWVyeUNvbmZpZyAmIHtcbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIHF1ZXJ5IHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gaXQgZWl0aGVyIHN1Y2NlZWRzIG9yIGZhaWxzLlxuICAgICAqL1xuICAgIGRlc3Ryb3lPblJlc3BvbnNlPzogYm9vbGVhbjtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTGVnYWN5UXVlcnlQcmVwYXJlRm48XG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFJlc3BvbnNlLFxuICBSb3V0ZSBleHRlbmRzIFJvdXRlVHlwZTxBcmd1bWVudHM+LFxuICBTdG9yZSBleHRlbmRzIEVudGl0eVN0b3JlPHVua25vd24+LFxuICBEYXRhLFxuICBJZCxcbiAgVE5ld1F1ZXJ5IGV4dGVuZHMgQW55TmV3UXVlcnksXG4+ID0gQXJndW1lbnRzIGV4dGVuZHMgQmFzZUFyZ3VtZW50c1xuICA/IChcbiAgICAgIGFyZ3M6IEFyZ3VtZW50cyAmIFdpdGhIZWFkZXJzICYgV2l0aExlZ2FjeUNvbmZpZyAmIFdpdGhJbmplY3RvcixcbiAgICApID0+IExlZ2FjeVF1ZXJ5PFJlc3BvbnNlLCBBcmd1bWVudHMsIFJvdXRlLCBTdG9yZSwgRGF0YSwgSWQsIFROZXdRdWVyeT5cbiAgOiAoXG4gICAgICBhcmdzPzogKEFyZ3VtZW50cyBleHRlbmRzIEVtcHR5T2JqZWN0ID8gQXJndW1lbnRzIDogRW1wdHlPYmplY3QpICYgV2l0aEhlYWRlcnMgJiBXaXRoTGVnYWN5Q29uZmlnICYgV2l0aEluamVjdG9yLFxuICAgICkgPT4gTGVnYWN5UXVlcnk8UmVzcG9uc2UsIEFyZ3VtZW50cywgUm91dGUsIFN0b3JlLCBEYXRhLCBJZCwgVE5ld1F1ZXJ5PjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEFueUxlZ2FjeVF1ZXJ5Q3JlYXRvciA9IExlZ2FjeVF1ZXJ5Q3JlYXRvcjxhbnksIGFueSwgYW55LCBhbnksIGFueT47XG5cbi8vIFRPRE86IE1pZ3JhdGUgdG8gdGhlIG5ldyBxdWVyeSBjcmVhdG9yXG4vLyBUT0RPOiBDcmVhdGUgbGVnYWN5IHF1ZXJ5IGNyZWF0b3IgdGhhdCB1c2VzIHRoZSBuZXcgcXVlcnkgY3JlYXRvclxuLy8gVE9ETzogSW4gZXZlcnkgY29tcG9uZW50IHJlcGxhY2UgdGhlIG5ldyBxdWVyeSBjcmVhdG9yIHdpdGggdGhlIGxlZ2FjeSBxdWVyeSBjcmVhdG9yXG4vLyBUT0RPOiBJbmplY3QgdGhlIGluamVjdG9yIGluIGV2ZXJ5IGNvbXBvbmVudCB0aGF0IHVzZXMgdGhlIGxlZ2FjeSBxdWVyeSBjcmVhdG9yXG4vLyBUT0RPOiBJbiBldmVyeSBxdWVyeSBhZGQgdGhlIGluamVjdG9yIHRvIHRoZSBwcmVwYXJlIGZ1bmN0aW9uIGFyZ3Ncbi8vIFRPRE86IElmIHRoZSBjcmVhdGVkIHF1ZXJ5IGlzIG5vdCBwdXNoZWQgaW50byBhIHNpZ25hbCBvciBzdWJqZWN0IHNldCB0aGUgc2VsZiBkZXN0cm95IG9uIHJlc3BvbnNlIHByZXBhcmUgYXJnIHRvIHRydWVcblxuLy8gVE9ETzogVGVzdCB3aXRoIGluZmluaXR5IHF1ZXJ5XG4vLyBUT0RPOiBUZXN0IHdpdGggR1FMLiB2YXJpYWJsZXMgYXJlIGN1cnJlbnRseSBub3QgdXNlZFxuXG4vKipcbiAqIENyZWF0ZXMgYSBsZWdhY3kgcXVlcnkgY3JlYXRvci5cbiAqIEBkZXByZWNhdGVkIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gdG8gc3VwcG9ydCBsZWdhY3kgcXVlcmllcy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBMZWdhY3lRdWVyeUNyZWF0b3I8XG4gIFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBSZXNwb25zZSBleHRlbmRzIFJlc3BvbnNlVHlwZTxUQXJncz4sXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIElkLFxuICBEYXRhID0gUmVzcG9uc2UsXG4+IHtcbiAgY29uc3RydWN0b3IocHVibGljIG9wdGlvbnM6IENyZWF0ZUxlZ2FjeVF1ZXJ5Q3JlYXRvck9wdGlvbnM8VEFyZ3MsIFJlc3BvbnNlLCBTdG9yZSwgRGF0YSwgSWQ+KSB7fVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICBwcmVwYXJlOiBMZWdhY3lRdWVyeVByZXBhcmVGbjxMZWdhY3lBcmdzLCBSZXNwb25zZSwgUm91dGUsIFN0b3JlLCBEYXRhLCBJZCwgUXVlcnk8VEFyZ3M+PiA9IChcbiAgICBhcmdzPzogTGVnYWN5QXJndW1lbnRzT2ZRdWVyeUFyZ3M8VEFyZ3M+ICYgV2l0aEhlYWRlcnMgJiBXaXRoTGVnYWN5Q29uZmlnICYgV2l0aEluamVjdG9yLFxuICApID0+IHtcbiAgICBjb25zdCBpbmplY3RvciA9IGFyZ3M/LmluamVjdG9yID8/IGluamVjdChJbmplY3Rvcik7XG5cbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuXG4gICAgaWYgKGFyZ3M/LmhlYWRlcnMpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGFyZ3MuaGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlBcmdzID0ge1xuICAgICAgLi4uKGFyZ3M/LmJvZHkgPyB7IGJvZHk6IGFyZ3MuYm9keSB9IDoge30pLFxuICAgICAgLi4uKGFyZ3M/LnBhdGhQYXJhbXMgPyB7IHBhdGhQYXJhbXM6IGFyZ3MucGF0aFBhcmFtcyB9IDoge30pLFxuICAgICAgLi4uKGFyZ3M/LnF1ZXJ5UGFyYW1zID8geyBxdWVyeVBhcmFtczogYXJncy5xdWVyeVBhcmFtcyB9IDoge30pLFxuICAgICAgaGVhZGVycyxcbiAgICB9IGFzIFJlcXVlc3RBcmdzPFRBcmdzPjtcblxuICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcbiAgICAgIHJldHVybiB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdRdWVyeSA9IHRoaXMub3B0aW9ucy5jcmVhdG9yKHtcbiAgICAgICAgICBvbmx5TWFudWFsRXhlY3V0aW9uOiB0cnVlLFxuICAgICAgICAgIGluamVjdG9yLFxuICAgICAgICAgIHNpbGVuY2VNaXNzaW5nV2l0aEFyZ3NGZWF0dXJlRXJyb3I6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGxlZ2FjeVF1ZXJ5ID0gbmV3IExlZ2FjeVF1ZXJ5PFxuICAgICAgICAgIFJlc3BvbnNlLFxuICAgICAgICAgIExlZ2FjeUFyZ3VtZW50c09mUXVlcnlBcmdzPFRBcmdzPixcbiAgICAgICAgICBSb3V0ZVR5cGU8TGVnYWN5QXJndW1lbnRzT2ZRdWVyeUFyZ3M8VEFyZ3M+PixcbiAgICAgICAgICBTdG9yZSxcbiAgICAgICAgICBEYXRhLFxuICAgICAgICAgIElkLFxuICAgICAgICAgIFF1ZXJ5PFRBcmdzPlxuICAgICAgICA+KG5ld1F1ZXJ5LCBxdWVyeUFyZ3MsIHRoaXMub3B0aW9ucy5lbnRpdHkpO1xuXG4gICAgICAgIGlmIChhcmdzPy5jb25maWc/LmRlc3Ryb3lPblJlc3BvbnNlKSB7XG4gICAgICAgICAgY29uc3QgZGVzdHJveUVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAobmV3UXVlcnkuZXhlY3V0aW9uU3RhdGUoKT8udHlwZSA9PT0gJ3N1Y2Nlc3MnIHx8IG5ld1F1ZXJ5LmV4ZWN1dGlvblN0YXRlKCk/LnR5cGUgPT09ICdmYWlsdXJlJykge1xuICAgICAgICAgICAgICBsZWdhY3lRdWVyeS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgIGRlc3Ryb3lFZmZlY3QuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxlZ2FjeVF1ZXJ5O1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG4gIGNyZWF0ZVN1YmplY3QgPSAoaW5pdGlhbFZhbHVlPzogUmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5wcmVwYXJlPiB8IG51bGwsIGNvbmZpZz86IFF1ZXJ5Q29udGFpbmVyQ29uZmlnKSA9PiB7XG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5wcmVwYXJlPiB8IG51bGw+KGluaXRpYWxWYWx1ZSA/PyBudWxsKTtcblxuICAgIGFkZFF1ZXJ5Q29udGFpbmVySGFuZGxpbmcoc3ViamVjdCwgKCkgPT4gc3ViamVjdC5nZXRWYWx1ZSgpLCBjb25maWcpO1xuXG4gICAgcmV0dXJuIHN1YmplY3Q7XG4gIH07XG4gIGNyZWF0ZVNpZ25hbCA9IChpbml0aWFsVmFsdWU/OiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLnByZXBhcmU+IHwgbnVsbCwgY29uZmlnPzogUXVlcnlDb250YWluZXJDb25maWcpID0+IHtcbiAgICBjb25zdCBfc2lnbmFsID0gc2lnbmFsPFJldHVyblR5cGU8dHlwZW9mIHRoaXMucHJlcGFyZT4gfCBudWxsPihpbml0aWFsVmFsdWUgPz8gbnVsbCk7XG5cbiAgICBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nKHRvT2JzZXJ2YWJsZShfc2lnbmFsKSwgKCkgPT4gX3NpZ25hbCgpLCBjb25maWcpO1xuXG4gICAgcmV0dXJuIF9zaWduYWw7XG4gIH07XG5cbiAgYmVoYXZpb3JTdWJqZWN0ID0gdGhpcy5jcmVhdGVTdWJqZWN0O1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlTGVnYWN5UXVlcnlDcmVhdG9yID0gPFxuICBUQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgUmVzcG9uc2UgZXh0ZW5kcyBSZXNwb25zZVR5cGU8VEFyZ3M+LFxuICBTdG9yZSBleHRlbmRzIEVudGl0eVN0b3JlPHVua25vd24+LFxuICBJZCxcbiAgRGF0YSA9IFJlc3BvbnNlLFxuPihcbiAgb3B0aW9uczogQ3JlYXRlTGVnYWN5UXVlcnlDcmVhdG9yT3B0aW9uczxUQXJncywgUmVzcG9uc2UsIFN0b3JlLCBEYXRhLCBJZD4sXG4pOiBMZWdhY3lRdWVyeUNyZWF0b3I8VEFyZ3MsIFJlc3BvbnNlLCBTdG9yZSwgSWQsIERhdGE+ID0+IHtcbiAgcmV0dXJuIG5ldyBMZWdhY3lRdWVyeUNyZWF0b3I8VEFyZ3MsIFJlc3BvbnNlLCBTdG9yZSwgSWQsIERhdGE+KG9wdGlvbnMpO1xufTtcbiJdfQ==","import { HttpStatusCode } from '@angular/common/http';\nexport const parseHttpErrorCodeToTitleDe = (statusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Ungültige Anfrage';\n case HttpStatusCode.Unauthorized:\n return 'Nicht autorisiert';\n case HttpStatusCode.PaymentRequired:\n return 'Zahlung erforderlich';\n case HttpStatusCode.Forbidden:\n return 'Verboten';\n case HttpStatusCode.NotFound:\n return 'Nicht gefunden';\n case HttpStatusCode.MethodNotAllowed:\n return 'Methode nicht erlaubt';\n case HttpStatusCode.NotAcceptable:\n return 'Nicht akzeptabel';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy-Authentifizierung erforderlich';\n case HttpStatusCode.RequestTimeout:\n return 'Anforderungszeitüberschreitung';\n case HttpStatusCode.Conflict:\n return 'Konflikt';\n case HttpStatusCode.Gone:\n return 'Weg';\n case HttpStatusCode.LengthRequired:\n return 'Länge erforderlich';\n case HttpStatusCode.PreconditionFailed:\n return 'Vorbedingung fehlgeschlagen';\n case HttpStatusCode.PayloadTooLarge:\n return 'Nutzlast zu groß';\n case HttpStatusCode.UriTooLong:\n return 'URI zu lang';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Nicht unterstützter Medientyp';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Bereich nicht zufriedenstellend';\n case HttpStatusCode.ExpectationFailed:\n return 'Erwartung fehlgeschlagen';\n case HttpStatusCode.ImATeapot:\n return 'Ich bin eine Teekanne';\n case HttpStatusCode.MisdirectedRequest:\n return 'Fehlgeleitete Anfrage';\n case HttpStatusCode.UnprocessableEntity:\n return 'Unverarbeitbare Entität';\n case HttpStatusCode.Locked:\n return 'Gesperrt';\n case HttpStatusCode.FailedDependency:\n return 'Fehlgeschlagene Abhängigkeit';\n case HttpStatusCode.TooEarly:\n return 'Zu früh';\n case HttpStatusCode.UpgradeRequired:\n return 'Upgrade erforderlich';\n case HttpStatusCode.PreconditionRequired:\n return 'Vorbedingung erforderlich';\n case HttpStatusCode.TooManyRequests:\n return 'Zu viele Anfragen';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Anforderungskopffelder zu groß';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Aus rechtlichen Gründen nicht verfügbar';\n case HttpStatusCode.InternalServerError:\n return 'Interner Serverfehler';\n case HttpStatusCode.NotImplemented:\n return 'Nicht implementiert';\n case HttpStatusCode.BadGateway:\n return 'Schlechtes Gateway';\n case HttpStatusCode.ServiceUnavailable:\n return 'Dienst nicht verfügbar';\n case HttpStatusCode.GatewayTimeout:\n return 'Gateway-Zeitüberschreitung';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'HTTP-Version nicht unterstützt';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Variante verhandelt auch';\n case HttpStatusCode.InsufficientStorage:\n return 'Unzureichender Speicher';\n case HttpStatusCode.LoopDetected:\n return 'Schleifenerkennung';\n case HttpStatusCode.NotExtended:\n return 'Nicht erweitert';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Netzwerkauthentifizierung erforderlich';\n default:\n return 'Etwas ist schief gelaufen';\n }\n};\nexport const parseHttpErrorCodeToMessageDe = (statusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Entschuldigung, wir konnten Ihre Anfrage nicht bearbeiten. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.Unauthorized:\n return 'Sie sind nicht berechtigt, diese Aktion auszuführen. Bitte melden Sie sich an, um fortzufahren.';\n case HttpStatusCode.PaymentRequired:\n return 'Zur Ausführung dieser Aktion ist eine Zahlung erforderlich.';\n case HttpStatusCode.Forbidden:\n return 'Sie haben keine Berechtigung, diese Aktion auszuführen.';\n case HttpStatusCode.NotFound:\n return 'Die angeforderte Ressource wurde nicht gefunden.';\n case HttpStatusCode.MethodNotAllowed:\n return 'Die angeforderte Methode ist für diese Ressource nicht zulässig.';\n case HttpStatusCode.NotAcceptable:\n return 'Die angeforderte Ressource ist nicht in der Lage, eine Antwort zu generieren, die der Liste der akzeptablen Werte entspricht.';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Zur Ausführung dieser Aktion ist eine Proxy-Authentifizierung erforderlich.';\n case HttpStatusCode.RequestTimeout:\n return 'Der Server hat auf die Anforderung gewartet.';\n case HttpStatusCode.Conflict:\n return 'Die Anforderung steht im Widerspruch zum aktuellen Zustand der Ressource.';\n case HttpStatusCode.Gone:\n return 'Die angeforderte Ressource ist nicht mehr verfügbar und wird auch nicht mehr verfügbar sein.';\n case HttpStatusCode.LengthRequired:\n return 'Die Anforderung hat die Länge ihres Inhalts nicht angegeben, die von der angeforderten Ressource benötigt wird.';\n case HttpStatusCode.PreconditionFailed:\n return 'Der Server erfüllt eine der Voraussetzungen nicht, die der Anforderer an die Anforderung gestellt hat.';\n case HttpStatusCode.PayloadTooLarge:\n return 'Die Anforderung ist größer als der Server bereit oder in der Lage ist, zu verarbeiten.';\n case HttpStatusCode.UriTooLong:\n return 'Die bereitgestellte URL war für den Server zu lang, um sie zu verarbeiten.';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Die Anforderungseinheit hat einen Medientyp, den der Server oder die Ressource nicht unterstützt.';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Der Client hat einen Teil der Datei angefordert, aber der Server kann diesen Teil nicht liefern.';\n case HttpStatusCode.ExpectationFailed:\n return 'Der Server kann die Anforderungen des Erwartung-Anforderungskopffelds nicht erfüllen.';\n case HttpStatusCode.ImATeapot:\n return 'Ich bin eine Teekanne.';\n case HttpStatusCode.MisdirectedRequest:\n return 'Die Anforderung wurde an einen Server gerichtet, der nicht in der Lage ist, eine Antwort zu generieren.';\n case HttpStatusCode.UnprocessableEntity:\n return 'Die Anforderung war gut formuliert, konnte aber aufgrund semantischer Fehler nicht befolgt werden.';\n case HttpStatusCode.Locked:\n return 'Die Ressource, auf die zugegriffen wird, ist gesperrt.';\n case HttpStatusCode.FailedDependency:\n return 'Die Anforderung ist aufgrund eines Fehlers einer vorherigen Anforderung fehlgeschlagen.';\n case HttpStatusCode.TooEarly:\n return 'Der Server ist nicht bereit, die Anforderung zu verarbeiten, weil der Benutzer nicht authentifiziert wurde.';\n case HttpStatusCode.UpgradeRequired:\n return 'Der Client sollte zu einem anderen Protokoll wie TLS/1.0 wechseln, das im Upgrade-Anforderungskopffeld angegeben ist.';\n case HttpStatusCode.PreconditionRequired:\n return 'Der Ursprungsserver erfordert, dass die Anforderung bedingt ist.';\n case HttpStatusCode.TooManyRequests:\n return 'Sie haben in einer bestimmten Zeit zu viele Anfragen gesendet. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Der Server ist nicht bereit, die Anforderung zu verarbeiten, weil seine Kopffelder zu groß sind.';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Die Ressource ist aufgrund einer rechtlichen Forderung nicht verfügbar.';\n case HttpStatusCode.InternalServerError:\n return 'Etwas ist schief gelaufen. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.NotImplemented:\n return 'Der Server unterstützt die zur Erfüllung der Anforderung erforderliche Funktionalität nicht.';\n case HttpStatusCode.BadGateway:\n return 'Etwas ist schief gelaufen. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.ServiceUnavailable:\n return 'Der Server kann die Anforderung derzeit nicht bearbeiten, da er vorübergehend überlastet oder gewartet wird.';\n case HttpStatusCode.GatewayTimeout:\n return 'Der Server hat beim Versuch, die Anforderung abzuschließen, keine rechtzeitige Antwort vom Server erhalten.';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'Der Server unterstützt die in der Anforderung verwendete HTTP-Protokollversion nicht.';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Der Server hat einen internen Konfigurationsfehler: Die ausgewählte Variantenressource ist so konfiguriert, dass sie sich selbst in die transparente Inhaltsverhandlung einbindet, und ist daher kein geeigneter Endpunkt im Verhandlungsprozess.';\n case HttpStatusCode.InsufficientStorage:\n return 'Die Methode konnte auf die Ressource nicht angewendet werden, weil der Server nicht in der Lage ist, die für die erfolgreiche Ausführung der Anforderung erforderliche Darstellung zu speichern.';\n case HttpStatusCode.LoopDetected:\n return 'Der Server hat eine Endlosschleife erkannt, während er die Anforderung verarbeitet.';\n case HttpStatusCode.NotExtended:\n return 'Weitere Erweiterungen der Anforderung sind erforderlich, damit der Server sie erfüllen kann.';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Sie müssen sich authentifizieren, um Zugang zum Netzwerk zu erhalten.';\n default:\n return 'Etwas ist schief gelaufen. Überprüfen Sie Ihre Internetverbindung und versuchen Sie es später erneut.';\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UtaHR0cC1lcnJvci1jb2RlLWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9waXBlcy9wYXJzZS1odHRwLWVycm9yLWNvZGUtZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsVUFBMEIsRUFBRSxFQUFFO0lBQ3hFLFFBQVEsVUFBVSxFQUFFLENBQUM7UUFDbkIsS0FBSyxjQUFjLENBQUMsVUFBVTtZQUM1QixPQUFPLG1CQUFtQixDQUFDO1FBQzdCLEtBQUssY0FBYyxDQUFDLFlBQVk7WUFDOUIsT0FBTyxtQkFBbUIsQ0FBQztRQUM3QixLQUFLLGNBQWMsQ0FBQyxlQUFlO1lBQ2pDLE9BQU8sc0JBQXNCLENBQUM7UUFDaEMsS0FBSyxjQUFjLENBQUMsU0FBUztZQUMzQixPQUFPLFVBQVUsQ0FBQztRQUNwQixLQUFLLGNBQWMsQ0FBQyxRQUFRO1lBQzFCLE9BQU8sZ0JBQWdCLENBQUM7UUFDMUIsS0FBSyxjQUFjLENBQUMsZ0JBQWdCO1lBQ2xDLE9BQU8sdUJBQXVCLENBQUM7UUFDakMsS0FBSyxjQUFjLENBQUMsYUFBYTtZQUMvQixPQUFPLGtCQUFrQixDQUFDO1FBQzVCLEtBQUssY0FBYyxDQUFDLDJCQUEyQjtZQUM3QyxPQUFPLHNDQUFzQyxDQUFDO1FBQ2hELEtBQUssY0FBYyxDQUFDLGNBQWM7WUFDaEMsT0FBTyxnQ0FBZ0MsQ0FBQztRQUMxQyxLQUFLLGNBQWMsQ0FBQyxRQUFRO1lBQzFCLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLEtBQUssY0FBYyxDQUFDLElBQUk7WUFDdEIsT0FBTyxLQUFLLENBQUM7UUFDZixLQUFLLGNBQWMsQ0FBQyxjQUFjO1lBQ2hDLE9BQU8sb0JBQW9CLENBQUM7UUFD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cG9ydCB7IEh0dHBTdGF0dXNDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5leHBvcnQgY29uc3QgcGFyc2VIdHRwRXJyb3JDb2RlVG9UaXRsZURlID0gKHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlKSA9PiB7XG4gIHN3aXRjaCAoc3RhdHVzQ29kZSkge1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuQmFkUmVxdWVzdDpcbiAgICAgIHJldHVybiAnVW5nw7xsdGlnZSBBbmZyYWdlJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlVuYXV0aG9yaXplZDpcbiAgICAgIHJldHVybiAnTmljaHQgYXV0b3Jpc2llcnQnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuUGF5bWVudFJlcXVpcmVkOlxuICAgICAgcmV0dXJuICdaYWhsdW5nIGVyZm9yZGVybGljaCc7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Gb3JiaWRkZW46XG4gICAgICByZXR1cm4gJ1ZlcmJvdGVuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLk5vdEZvdW5kOlxuICAgICAgcmV0dXJuICdOaWNodCBnZWZ1bmRlbic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5NZXRob2ROb3RBbGxvd2VkOlxuICAgICAgcmV0dXJuICdNZXRob2RlIG5pY2h0IGVybGF1YnQnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuTm90QWNjZXB0YWJsZTpcbiAgICAgIHJldHVybiAnTmljaHQgYWt6ZXB0YWJlbCc7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Qcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6XG4gICAgICByZXR1cm4gJ1Byb3h5LUF1dGhlbnRpZml6aWVydW5nIGVyZm9yZGVybGljaCc7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5SZXF1ZXN0VGltZW91dDpcbiAgICAgIHJldHVybiAnQW5mb3JkZXJ1bmdzemVpdMO8YmVyc2NocmVpdHVuZyc7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Db25mbGljdDpcbiAgICAgIHJldHVybiAnS29uZmxpa3QnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuR29uZTpcbiAgICAgIHJldHVybiAnV2VnJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkxlbmd0aFJlcXVpcmVkOlxuICAgICAgcmV0dXJuICdMw6RuZ2UgZXJmb3JkZXJsaWNoJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlByZWNvbmRpdGlvbkZhaWxlZDpcbiAgICAgIHJldHVybiAnVm9yYmVkaW5ndW5nIGZlaGxnZXNjaGxhZ2VuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlBheWxvYWRUb29MYXJnZTpcbiAgICAgIHJldHVybiAnTnV0emxhc3QgenUgZ3Jvw58nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVXJpVG9vTG9uZzpcbiAgICAgIHJldHVybiAnVVJJIHp1IGxhbmcnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVW5zdXBwb3J0ZWRNZWRpYVR5cGU6XG4gICAgICByZXR1cm4gJ05pY2h0IHVudGVyc3TDvHR6dGVyIE1lZGllbnR5cCc7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5SYW5nZU5vdFNhdGlzZmlhYmxlOlxuICAgICAgcmV0dXJuICdCZXJlaWNoIG5pY2h0IHp1ZnJpZWRlbnN0ZWxsZW5kJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkV4cGVjdGF0aW9uRmFpbGVkOlxuICAgICAgcmV0dXJuICdFcndhcnR1bmcgZmVobGdlc2NobGFnZW4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuSW1BVGVhcG90OlxuICAgICAgcmV0dXJuICdJY2ggYmluIGVpbmUgVGVla2FubmUnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuTWlzZGlyZWN0ZWRSZXF1ZXN0OlxuICAgICAgcmV0dXJuICdGZWhsZ2VsZWl0ZXRlIEFuZnJhZ2UnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVW5wcm9jZXNzYWJsZUVudGl0eTpcbiAgICAgIHJldHVybiAnVW52ZXJhcmJlaXRiYXJlIEVudGl0w6R0JztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkxvY2tlZDpcbiAgICAgIHJldHVybiAnR2VzcGVycnQnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuRmFpbGVkRGVwZW5kZW5jeTpcbiAgICAgIHJldHVybiAnRmVobGdlc2NobGFnZW5lIEFiaMOkbmdpZ2tlaXQnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVG9vRWFybHk6XG4gICAgICByZXR1cm4gJ1p1IGZyw7xoJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlVwZ3JhZGVSZXF1aXJlZDpcbiAgICAgIHJldHVybiAnVXBncmFkZSBlcmZvcmRlcmxpY2gnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuUHJlY29uZGl0aW9uUmVxdWlyZWQ6XG4gICAgICByZXR1cm4gJ1ZvcmJlZGluZ3VuZyBlcmZvcmRlcmxpY2gnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVG9vTWFueVJlcXVlc3RzOlxuICAgICAgcmV0dXJuICdadSB2aWVsZSBBbmZyYWdlbic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5SZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6XG4gICAgICByZXR1cm4gJ0FuZm9yZGVydW5nc2tvcGZmZWxkZXIgenUgZ3Jvw58nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6XG4gICAgICByZXR1cm4gJ0F1cyByZWNodGxpY2hlbiBHcsO8bmRlbiBuaWNodCB2ZXJmw7xnYmFyJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkludGVybmFsU2VydmVyRXJyb3I6XG4gICAgICByZXR1cm4gJ0ludGVybmVyIFNlcnZlcmZlaGxlcic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Ob3RJbXBsZW1lbnRlZDpcbiAgICAgIHJldHVybiAnTmljaHQgaW1wbGVtZW50aWVydCc7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5CYWRHYXRld2F5OlxuICAgICAgcmV0dXJuICdTY2hsZWNodGVzIEdhdGV3YXknO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuU2VydmljZVVuYXZhaWxhYmxlOlxuICAgICAgcmV0dXJuICdEaWVuc3QgbmljaHQgdmVyZsO8Z2Jhcic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5HYXRld2F5VGltZW91dDpcbiAgICAgIHJldHVybiAnR2F0ZXdheS1aZWl0w7xiZXJzY2hyZWl0dW5nJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOlxuICAgICAgcmV0dXJuICdIVFRQLVZlcnNpb24gbmljaHQgdW50ZXJzdMO8dHp0JztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlZhcmlhbnRBbHNvTmVnb3RpYXRlczpcbiAgICAgIHJldHVybiAnVmFyaWFudGUgdmVyaGFuZGVsdCBhdWNoJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkluc3VmZmljaWVudFN0b3JhZ2U6XG4gICAgICByZXR1cm4gJ1VuenVyZWljaGVuZGVyIFNwZWljaGVyJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkxvb3BEZXRlY3RlZDpcbiAgICAgIHJldHVybiAnU2NobGVpZmVuZXJrZW5udW5nJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLk5vdEV4dGVuZGVkOlxuICAgICAgcmV0dXJuICdOaWNodCBlcndlaXRlcnQnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6XG4gICAgICByZXR1cm4gJ05ldHp3ZXJrYXV0aGVudGlmaXppZXJ1bmcgZXJmb3JkZXJsaWNoJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICdFdHdhcyBpc3Qgc2NoaWVmIGdlbGF1ZmVuJztcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlSHR0cEVycm9yQ29kZVRvTWVzc2FnZURlID0gKHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlKSA9PiB7XG4gIHN3aXRjaCAoc3RhdHVzQ29kZSkge1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuQmFkUmVxdWVzdDpcbiAgICAgIHJldHVybiAnRW50c2NodWxkaWd1bmcsIHdpciBrb25udGVuIElocmUgQW5mcmFnZSBuaWNodCBiZWFyYmVpdGVuLiBCaXR0ZSB2ZXJzdWNoZW4gU2llIGVzIHNww6R0ZXIgZXJuZXV0Lic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWQ6XG4gICAgICByZXR1cm4gJ1NpZSBzaW5kIG5pY2h0IGJlcmVjaHRpZ3QsIGRpZXNlIEFrdGlvbiBhdXN6dWbDvGhyZW4uIEJpdHRlIG1lbGRlbiBTaWUgc2ljaCBhbiwgdW0gZm9ydHp1ZmFocmVuLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5QYXltZW50UmVxdWlyZWQ6XG4gICAgICByZXR1cm4gJ1p1ciBBdXNmw7xocnVuZyBkaWVzZXIgQWt0aW9uIGlzdCBlaW5lIFphaGx1bmcgZXJmb3JkZXJsaWNoLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Gb3JiaWRkZW46XG4gICAgICByZXR1cm4gJ1NpZSBoYWJlbiBrZWluZSBCZXJlY2h0aWd1bmcsIGRpZXNlIEFrdGlvbiBhdXN6dWbDvGhyZW4uJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLk5vdEZvdW5kOlxuICAgICAgcmV0dXJuICdEaWUgYW5nZWZvcmRlcnRlIFJlc3NvdXJjZSB3dXJkZSBuaWNodCBnZWZ1bmRlbi4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuTWV0aG9kTm90QWxsb3dlZDpcbiAgICAgIHJldHVybiAnRGllIGFuZ2Vmb3JkZXJ0ZSBNZXRob2RlIGlzdCBmw7xyIGRpZXNlIFJlc3NvdXJjZSBuaWNodCB6dWzDpHNzaWcuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLk5vdEFjY2VwdGFibGU6XG4gICAgICByZXR1cm4gJ0RpZSBhbmdlZm9yZGVydGUgUmVzc291cmNlIGlzdCBuaWNodCBpbiBkZXIgTGFnZSwgZWluZSBBbnR3b3J0IHp1IGdlbmVyaWVyZW4sIGRpZSBkZXIgTGlzdGUgZGVyIGFremVwdGFibGVuIFdlcnRlIGVudHNwcmljaHQuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDpcbiAgICAgIHJldHVybiAnWnVyIEF1c2bDvGhydW5nIGRpZXNlciBBa3Rpb24gaXN0IGVpbmUgUHJveHktQXV0aGVudGlmaXppZXJ1bmcgZXJmb3JkZXJsaWNoLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5SZXF1ZXN0VGltZW91dDpcbiAgICAgIHJldHVybiAnRGVyIFNlcnZlciBoYXQgYXVmIGRpZSBBbmZvcmRlcnVuZyBnZXdhcnRldC4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuQ29uZmxpY3Q6XG4gICAgICByZXR1cm4gJ0RpZSBBbmZvcmRlcnVuZyBzdGVodCBpbSBXaWRlcnNwcnVjaCB6dW0gYWt0dWVsbGVuIFp1c3RhbmQgZGVyIFJlc3NvdXJjZS4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuR29uZTpcbiAgICAgIHJldHVybiAnRGllIGFuZ2Vmb3JkZXJ0ZSBSZXNzb3VyY2UgaXN0IG5pY2h0IG1laHIgdmVyZsO8Z2JhciB1bmQgd2lyZCBhdWNoIG5pY2h0IG1laHIgdmVyZsO8Z2JhciBzZWluLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5MZW5ndGhSZXF1aXJlZDpcbiAgICAgIHJldHVybiAnRGllIEFuZm9yZGVydW5nIGhhdCBkaWUgTMOkbmdlIGlocmVzIEluaGFsdHMgbmljaHQgYW5nZWdlYmVuLCBkaWUgdm9uIGRlciBhbmdlZm9yZGVydGVuIFJlc3NvdXJjZSBiZW7DtnRpZ3Qgd2lyZC4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuUHJlY29uZGl0aW9uRmFpbGVkOlxuICAgICAgcmV0dXJuICdEZXIgU2VydmVyIGVyZsO8bGx0IGVpbmUgZGVyIFZvcmF1c3NldHp1bmdlbiBuaWNodCwgZGllIGRlciBBbmZvcmRlcmVyIGFuIGRpZSBBbmZvcmRlcnVuZyBnZXN0ZWxsdCBoYXQuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlBheWxvYWRUb29MYXJnZTpcbiAgICAgIHJldHVybiAnRGllIEFuZm9yZGVydW5nIGlzdCBncsO2w59lciBhbHMgZGVyIFNlcnZlciBiZXJlaXQgb2RlciBpbiBkZXIgTGFnZSBpc3QsIHp1IHZlcmFyYmVpdGVuLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5VcmlUb29Mb25nOlxuICAgICAgcmV0dXJuICdEaWUgYmVyZWl0Z2VzdGVsbHRlIFVSTCB3YXIgZsO8ciBkZW4gU2VydmVyIHp1IGxhbmcsIHVtIHNpZSB6dSB2ZXJhcmJlaXRlbi4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVW5zdXBwb3J0ZWRNZWRpYVR5cGU6XG4gICAgICByZXR1cm4gJ0RpZSBBbmZvcmRlcnVuZ3NlaW5oZWl0IGhhdCBlaW5lbiBNZWRpZW50eXAsIGRlbiBkZXIgU2VydmVyIG9kZXIgZGllIFJlc3NvdXJjZSBuaWNodCB1bnRlcnN0w7x0enQuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlJhbmdlTm90U2F0aXNmaWFibGU6XG4gICAgICByZXR1cm4gJ0RlciBDbGllbnQgaGF0IGVpbmVuIFRlaWwgZGVyIERhdGVpIGFuZ2Vmb3JkZXJ0LCBhYmVyIGRlciBTZXJ2ZXIga2FubiBkaWVzZW4gVGVpbCBuaWNodCBsaWVmZXJuLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5FeHBlY3RhdGlvbkZhaWxlZDpcbiAgICAgIHJldHVybiAnRGVyIFNlcnZlciBrYW5uIGRpZSBBbmZvcmRlcnVuZ2VuIGRlcyBFcndhcnR1bmctQW5mb3JkZXJ1bmdza29wZmZlbGRzIG5pY2h0IGVyZsO8bGxlbi4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuSW1BVGVhcG90OlxuICAgICAgcmV0dXJuICdJY2ggYmluIGVpbmUgVGVla2FubmUuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLk1pc2RpcmVjdGVkUmVxdWVzdDpcbiAgICAgIHJldHVybiAnRGllIEFuZm9yZGVydW5nIHd1cmRlIGFuIGVpbmVuIFNlcnZlciBnZXJpY2h0ZXQsIGRlciBuaWNodCBpbiBkZXIgTGFnZSBpc3QsIGVpbmUgQW50d29ydCB6dSBnZW5lcmllcmVuLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5VbnByb2Nlc3NhYmxlRW50aXR5OlxuICAgICAgcmV0dXJuICdEaWUgQW5mb3JkZXJ1bmcgd2FyIGd1dCBmb3JtdWxpZXJ0LCBrb25udGUgYWJlciBhdWZncnVuZCBzZW1hbnRpc2NoZXIgRmVobGVyIG5pY2h0IGJlZm9sZ3Qgd2VyZGVuLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Mb2NrZWQ6XG4gICAgICByZXR1cm4gJ0RpZSBSZXNzb3VyY2UsIGF1ZiBkaWUgenVnZWdyaWZmZW4gd2lyZCwgaXN0IGdlc3BlcnJ0Lic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5GYWlsZWREZXBlbmRlbmN5OlxuICAgICAgcmV0dXJuICdEaWUgQW5mb3JkZXJ1bmcgaXN0IGF1ZmdydW5kIGVpbmVzIEZlaGxlcnMgZWluZXIgdm9yaGVyaWdlbiBBbmZvcmRlcnVuZyBmZWhsZ2VzY2hsYWdlbi4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVG9vRWFybHk6XG4gICAgICByZXR1cm4gJ0RlciBTZXJ2ZXIgaXN0IG5pY2h0IGJlcmVpdCwgZGllIEFuZm9yZGVydW5nIHp1IHZlcmFyYmVpdGVuLCB3ZWlsIGRlciBCZW51dHplciBuaWNodCBhdXRoZW50aWZpemllcnQgd3VyZGUuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlVwZ3JhZGVSZXF1aXJlZDpcbiAgICAgIHJldHVybiAnRGVyIENsaWVudCBzb2xsdGUgenUgZWluZW0gYW5kZXJlbiBQcm90b2tvbGwgd2llIFRMUy8xLjAgd2VjaHNlbG4sIGRhcyBpbSBVcGdyYWRlLUFuZm9yZGVydW5nc2tvcGZmZWxkIGFuZ2VnZWJlbiBpc3QuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlByZWNvbmRpdGlvblJlcXVpcmVkOlxuICAgICAgcmV0dXJuICdEZXIgVXJzcHJ1bmdzc2VydmVyIGVyZm9yZGVydCwgZGFzcyBkaWUgQW5mb3JkZXJ1bmcgYmVkaW5ndCBpc3QuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlRvb01hbnlSZXF1ZXN0czpcbiAgICAgIHJldHVybiAnU2llIGhhYmVuIGluIGVpbmVyIGJlc3RpbW10ZW4gWmVpdCB6dSB2aWVsZSBBbmZyYWdlbiBnZXNlbmRldC4gQml0dGUgdmVyc3VjaGVuIFNpZSBlcyBzcMOkdGVyIGVybmV1dC4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOlxuICAgICAgcmV0dXJuICdEZXIgU2VydmVyIGlzdCBuaWNodCBiZXJlaXQsIGRpZSBBbmZvcmRlcnVuZyB6dSB2ZXJhcmJlaXRlbiwgd2VpbCBzZWluZSBLb3BmZmVsZGVyIHp1IGdyb8OfIHNpbmQuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOlxuICAgICAgcmV0dXJuICdEaWUgUmVzc291cmNlIGlzdCBhdWZncnVuZCBlaW5lciByZWNodGxpY2hlbiBGb3JkZXJ1bmcgbmljaHQgdmVyZsO8Z2Jhci4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuSW50ZXJuYWxTZXJ2ZXJFcnJvcjpcbiAgICAgIHJldHVybiAnRXR3YXMgaXN0IHNjaGllZiBnZWxhdWZlbi4gQml0dGUgdmVyc3VjaGVuIFNpZSBlcyBzcMOkdGVyIGVybmV1dC4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuTm90SW1wbGVtZW50ZWQ6XG4gICAgICByZXR1cm4gJ0RlciBTZXJ2ZXIgdW50ZXJzdMO8dHp0IGRpZSB6dXIgRXJmw7xsbHVuZyBkZXIgQW5mb3JkZXJ1bmcgZXJmb3JkZXJsaWNoZSBGdW5rdGlvbmFsaXTDpHQgbmljaHQuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkJhZEdhdGV3YXk6XG4gICAgICByZXR1cm4gJ0V0d2FzIGlzdCBzY2hpZWYgZ2VsYXVmZW4uIEJpdHRlIHZlcnN1Y2hlbiBTaWUgZXMgc3DDpHRlciBlcm5ldXQuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlNlcnZpY2VVbmF2YWlsYWJsZTpcbiAgICAgIHJldHVybiAnRGVyIFNlcnZlciBrYW5uIGRpZSBBbmZvcmRlcnVuZyBkZXJ6ZWl0IG5pY2h0IGJlYXJiZWl0ZW4sIGRhIGVyIHZvcsO8YmVyZ2VoZW5kIMO8YmVybGFzdGV0IG9kZXIgZ2V3YXJ0ZXQgd2lyZC4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuR2F0ZXdheVRpbWVvdXQ6XG4gICAgICByZXR1cm4gJ0RlciBTZXJ2ZXIgaGF0IGJlaW0gVmVyc3VjaCwgZGllIEFuZm9yZGVydW5nIGFienVzY2hsaWXDn2VuLCBrZWluZSByZWNodHplaXRpZ2UgQW50d29ydCB2b20gU2VydmVyIGVyaGFsdGVuLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5IdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDpcbiAgICAgIHJldHVybiAnRGVyIFNlcnZlciB1bnRlcnN0w7x0enQgZGllIGluIGRlciBBbmZvcmRlcnVuZyB2ZXJ3ZW5kZXRlIEhUVFAtUHJvdG9rb2xsdmVyc2lvbiBuaWNodC4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVmFyaWFudEFsc29OZWdvdGlhdGVzOlxuICAgICAgcmV0dXJuICdEZXIgU2VydmVyIGhhdCBlaW5lbiBpbnRlcm5lbiBLb25maWd1cmF0aW9uc2ZlaGxlcjogRGllIGF1c2dld8OkaGx0ZSBWYXJpYW50ZW5yZXNzb3VyY2UgaXN0IHNvIGtvbmZpZ3VyaWVydCwgZGFzcyBzaWUgc2ljaCBzZWxic3QgaW4gZGllIHRyYW5zcGFyZW50ZSBJbmhhbHRzdmVyaGFuZGx1bmcgZWluYmluZGV0LCB1bmQgaXN0IGRhaGVyIGtlaW4gZ2VlaWduZXRlciBFbmRwdW5rdCBpbSBWZXJoYW5kbHVuZ3Nwcm96ZXNzLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5JbnN1ZmZpY2llbnRTdG9yYWdlOlxuICAgICAgcmV0dXJuICdEaWUgTWV0aG9kZSBrb25udGUgYXVmIGRpZSBSZXNzb3VyY2UgbmljaHQgYW5nZXdlbmRldCB3ZXJkZW4sIHdlaWwgZGVyIFNlcnZlciBuaWNodCBpbiBkZXIgTGFnZSBpc3QsIGRpZSBmw7xyIGRpZSBlcmZvbGdyZWljaGUgQXVzZsO8aHJ1bmcgZGVyIEFuZm9yZGVydW5nIGVyZm9yZGVybGljaGUgRGFyc3RlbGx1bmcgenUgc3BlaWNoZXJuLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Mb29wRGV0ZWN0ZWQ6XG4gICAgICByZXR1cm4gJ0RlciBTZXJ2ZXIgaGF0IGVpbmUgRW5kbG9zc2NobGVpZmUgZXJrYW5udCwgd8OkaHJlbmQgZXIgZGllIEFuZm9yZGVydW5nIHZlcmFyYmVpdGV0Lic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Ob3RFeHRlbmRlZDpcbiAgICAgIHJldHVybiAnV2VpdGVyZSBFcndlaXRlcnVuZ2VuIGRlciBBbmZvcmRlcnVuZyBzaW5kIGVyZm9yZGVybGljaCwgZGFtaXQgZGVyIFNlcnZlciBzaWUgZXJmw7xsbGVuIGthbm4uJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLk5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOlxuICAgICAgcmV0dXJuICdTaWUgbcO8c3NlbiBzaWNoIGF1dGhlbnRpZml6aWVyZW4sIHVtIFp1Z2FuZyB6dW0gTmV0endlcmsgenUgZXJoYWx0ZW4uJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICdFdHdhcyBpc3Qgc2NoaWVmIGdlbGF1ZmVuLiDDnGJlcnByw7xmZW4gU2llIElocmUgSW50ZXJuZXR2ZXJiaW5kdW5nIHVuZCB2ZXJzdWNoZW4gU2llIGVzIHNww6R0ZXIgZXJuZXV0Lic7XG4gIH1cbn07XG4iXX0=","import { Pipe } from '@angular/core';\nimport { parseHttpErrorCodeToMessageDe, parseHttpErrorCodeToTitleDe } from './parse-http-error-code-de';\nimport * as i0 from \"@angular/core\";\nexport class ParseHttpErrorCodeToTitleDePipe {\n constructor() {\n this.transform = parseHttpErrorCodeToTitleDe;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: ParseHttpErrorCodeToTitleDePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.0.3\", ngImport: i0, type: ParseHttpErrorCodeToTitleDePipe, isStandalone: true, name: \"parseHttpErrorCodeToTitleDe\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: ParseHttpErrorCodeToTitleDePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'parseHttpErrorCodeToTitleDe',\n standalone: true,\n }]\n }] });\nexport class ParseHttpErrorCodeToMessageDePipe {\n constructor() {\n this.transform = parseHttpErrorCodeToMessageDe;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: ParseHttpErrorCodeToMessageDePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.0.3\", ngImport: i0, type: ParseHttpErrorCodeToMessageDePipe, isStandalone: true, name: \"parseHttpErrorCodeToMessageDe\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: ParseHttpErrorCodeToMessageDePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'parseHttpErrorCodeToMessageDe',\n standalone: true,\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UtaHR0cC1lcnJvci1jb2RlLWRlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL3BpcGVzL3BhcnNlLWh0dHAtZXJyb3ItY29kZS1kZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQU14RyxNQUFNLE9BQU8sK0JBQStCO0lBSjVDO1FBS0UsY0FBUyxHQUFHLDJCQUEyQixDQUFDO0tBQ3pDOzhHQUZZLCtCQUErQjs0R0FBL0IsK0JBQStCOzsyRkFBL0IsK0JBQStCO2tCQUozQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSw2QkFBNkI7b0JBQ25DLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7QUFTRCxNQUFNLE9BQU8saUNBQWlDO0lBSjlDO1FBS0UsY0FBUyxHQUFHLDZCQUE2QixDQUFDO0tBQzNDOzhHQUZZLGlDQUFpQzs0R0FBakMsaUNBQWlDOzsyRkFBakMsaUNBQWlDO2tCQUo3QyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSwrQkFBK0I7b0JBQ3JDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHBhcnNlSHR0cEVycm9yQ29kZVRvTWVzc2FnZURlLCBwYXJzZUh0dHBFcnJvckNvZGVUb1RpdGxlRGUgfSBmcm9tICcuL3BhcnNlLWh0dHAtZXJyb3ItY29kZS1kZSc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3BhcnNlSHR0cEVycm9yQ29kZVRvVGl0bGVEZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFBhcnNlSHR0cEVycm9yQ29kZVRvVGl0bGVEZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtID0gcGFyc2VIdHRwRXJyb3JDb2RlVG9UaXRsZURlO1xufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdwYXJzZUh0dHBFcnJvckNvZGVUb01lc3NhZ2VEZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFBhcnNlSHR0cEVycm9yQ29kZVRvTWVzc2FnZURlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0gPSBwYXJzZUh0dHBFcnJvckNvZGVUb01lc3NhZ2VEZTtcbn1cbiJdfQ==","import { HttpStatusCode } from '@angular/common/http';\nexport const parseHttpErrorCodeToTitleEn = (statusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Bad request';\n case HttpStatusCode.Unauthorized:\n return 'Unauthorized';\n case HttpStatusCode.PaymentRequired:\n return 'Payment required';\n case HttpStatusCode.Forbidden:\n return 'Forbidden';\n case HttpStatusCode.NotFound:\n return 'Not found';\n case HttpStatusCode.MethodNotAllowed:\n return 'Method not allowed';\n case HttpStatusCode.NotAcceptable:\n return 'Not acceptable';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy authentication required';\n case HttpStatusCode.RequestTimeout:\n return 'Request timeout';\n case HttpStatusCode.Conflict:\n return 'Conflict';\n case HttpStatusCode.Gone:\n return 'Gone';\n case HttpStatusCode.LengthRequired:\n return 'Length required';\n case HttpStatusCode.PreconditionFailed:\n return 'Precondition failed';\n case HttpStatusCode.PayloadTooLarge:\n return 'Payload too large';\n case HttpStatusCode.UriTooLong:\n return 'URI too long';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Unsupported media type';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Range not satisfiable';\n case HttpStatusCode.ExpectationFailed:\n return 'Expectation failed';\n case HttpStatusCode.ImATeapot:\n return 'I am a teapot';\n case HttpStatusCode.MisdirectedRequest:\n return 'Misdirected request';\n case HttpStatusCode.UnprocessableEntity:\n return 'Unprocessable entity';\n case HttpStatusCode.Locked:\n return 'Locked';\n case HttpStatusCode.FailedDependency:\n return 'Failed dependency';\n case HttpStatusCode.TooEarly:\n return 'Too early';\n case HttpStatusCode.UpgradeRequired:\n return 'Upgrade required';\n case HttpStatusCode.PreconditionRequired:\n return 'Precondition required';\n case HttpStatusCode.TooManyRequests:\n return 'Too many requests';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Request header fields too large';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Unavailable for legal reasons';\n case HttpStatusCode.InternalServerError:\n return 'Internal server error';\n case HttpStatusCode.NotImplemented:\n return 'Not implemented';\n case HttpStatusCode.BadGateway:\n return 'Bad gateway';\n case HttpStatusCode.ServiceUnavailable:\n return 'Service unavailable';\n case HttpStatusCode.GatewayTimeout:\n return 'Gateway timeout';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'HTTP version not supported';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Variant also negotiates';\n case HttpStatusCode.InsufficientStorage:\n return 'Insufficient storage';\n case HttpStatusCode.LoopDetected:\n return 'Loop detected';\n case HttpStatusCode.NotExtended:\n return 'Not extended';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Network authentication required';\n default:\n return 'Something went wrong';\n }\n};\nexport const parseHttpErrorCodeToMessageEn = (statusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Sorry, we could not process your request. Please try again later.';\n case HttpStatusCode.Unauthorized:\n return 'You are not authorized to perform this action. Please log in to continue.';\n case HttpStatusCode.PaymentRequired:\n return 'Payment is required to complete this action.';\n case HttpStatusCode.Forbidden:\n return 'You do not have permission to perform this action.';\n case HttpStatusCode.NotFound:\n return 'The requested resource was not found.';\n case HttpStatusCode.MethodNotAllowed:\n return 'The requested method is not allowed for this resource.';\n case HttpStatusCode.NotAcceptable:\n return 'The requested resource is not capable of generating a response matching the list of acceptable values.';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy authentication is required to complete this action.';\n case HttpStatusCode.RequestTimeout:\n return 'The server timed out waiting for the request.';\n case HttpStatusCode.Conflict:\n return 'The request conflicts with the current state of the resource.';\n case HttpStatusCode.Gone:\n return 'The requested resource is no longer available and will not be available again.';\n case HttpStatusCode.LengthRequired:\n return 'The request did not specify the length of its content, which is required by the requested resource.';\n case HttpStatusCode.PreconditionFailed:\n return 'The server does not meet one of the preconditions that the requester put on the request.';\n case HttpStatusCode.PayloadTooLarge:\n return 'The request is larger than the server is willing or able to process.';\n case HttpStatusCode.UriTooLong:\n return 'The URL provided was too long for the server to process.';\n case HttpStatusCode.UnsupportedMediaType:\n return 'The request entity has a media type which the server or resource does not support.';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'The client has asked for a portion of the file, but the server cannot supply that portion.';\n case HttpStatusCode.ExpectationFailed:\n return 'The server cannot meet the requirements of the Expect request-header field.';\n case HttpStatusCode.ImATeapot:\n return 'I am a teapot.';\n case HttpStatusCode.MisdirectedRequest:\n return 'The request was directed at a server that is not able to produce a response.';\n case HttpStatusCode.UnprocessableEntity:\n return 'The request was well-formed but was unable to be followed due to semantic errors.';\n case HttpStatusCode.Locked:\n return 'The resource that is being accessed is locked.';\n case HttpStatusCode.FailedDependency:\n return 'The request failed due to failure of a previous request.';\n case HttpStatusCode.TooEarly:\n return 'The server is unwilling to process the request because the user has not been authenticated.';\n case HttpStatusCode.UpgradeRequired:\n return 'The client should switch to a different protocol such as TLS/1.0, given in the Upgrade header field.';\n case HttpStatusCode.PreconditionRequired:\n return 'The origin server requires the request to be conditional.';\n case HttpStatusCode.TooManyRequests:\n return 'You have sent too many requests in a given amount of time. Please try again later.';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'The server is unwilling to process the request because its header fields are too large.';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'The resource is unavailable due to a legal demand.';\n case HttpStatusCode.InternalServerError:\n return 'Something went wrong on our end. Please try again later.';\n case HttpStatusCode.NotImplemented:\n return 'The server does not support the functionality required to fulfill the request.';\n case HttpStatusCode.BadGateway:\n return 'Something went wrong on our end. Please try again later.';\n case HttpStatusCode.ServiceUnavailable:\n return 'The server is currently unable to handle the request due to a temporary overload or maintenance of the server.';\n case HttpStatusCode.GatewayTimeout:\n return 'The server, while acting as a gateway or proxy, did not receive a timely response from the upstream server specified by the URL or some other auxiliary server it needed to access in attempting to complete the request.';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'The server does not support the HTTP protocol version used in the request.';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'The server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.';\n case HttpStatusCode.InsufficientStorage:\n return 'The method could not be performed on the resource because the server is unable to store the representation needed to successfully complete the request.';\n case HttpStatusCode.LoopDetected:\n return 'The server detected an infinite loop while processing the request.';\n case HttpStatusCode.NotExtended:\n return 'Further extensions to the request are required for the server to fulfill it.';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'You need to authenticate to gain network access.';\n default:\n return 'Something went wrong. Check your internet connection and try again later.';\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UtaHR0cC1lcnJvci1jb2RlLWVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9waXBlcy9wYXJzZS1odHRwLWVycm9yLWNvZGUtZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsVUFBMEIsRUFBRSxFQUFFO0lBQ3hFLFFBQVEsVUFBVSxFQUFFLENBQUM7UUFDbkIsS0FBSyxjQUFjLENBQUMsVUFBVTtZQUM1QixPQUFPLGFBQWEsQ0FBQztRQUN2QixLQUFLLGNBQWMsQ0FBQyxZQUFZO1lBQzlCLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLEtBQUssY0FBYyxDQUFDLGVBQWU7WUFDakMsT0FBTyxrQkFBa0IsQ0FBQztRQUM1QixLQUFLLGNBQWMsQ0FBQyxTQUFTO1lBQzNCLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLEtBQUssY0FBYyxDQUFDLFFBQVE7WUFDMUIsT0FBTyxXQUFXLENBQUM7UUFDckIsS0FBSyxjQUFjLENBQUMsZ0JBQWdCO1lBQ2xDLE9BQU8sb0JBQW9CLENBQUM7UUFDOUIsS0FBSyxjQUFjLENBQUMsYUFBYTtZQUMvQixPQUFPLGdCQUFnQixDQUFDO1FBQzFCLEtBQUssY0FBYyxDQUFDLDJCQUEyQjtZQUM3QyxPQUFPLCtCQUErQixDQUFDO1FBQ3pDLEtBQUssY0FBYyxDQUFDLGNBQWM7WUFDaEMsT0FBTyxpQkFBaUIsQ0FBQztRQUMzQixLQUFLLGNBQWMsQ0FBQyxRQUFRO1lBQzFCLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLEtBQUssY0FBYyxDQUFDLElBQUk7WUFDdEIsT0FBTyxNQUFNLENBQUM7UUFDaEIsS0FBSyxjQUFjLENBQUMsY0FBYztZQUNoQyxPQUFPLGlCQUFpQixDQUFDO1FBQzNCLEtB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YXR1c0NvZGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUh0dHBFcnJvckNvZGVUb1RpdGxlRW4gPSAoc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGUpID0+IHtcbiAgc3dpdGNoIChzdGF0dXNDb2RlKSB7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5CYWRSZXF1ZXN0OlxuICAgICAgcmV0dXJuICdCYWQgcmVxdWVzdCc7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWQ6XG4gICAgICByZXR1cm4gJ1VuYXV0aG9yaXplZCc7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5QYXltZW50UmVxdWlyZWQ6XG4gICAgICByZXR1cm4gJ1BheW1lbnQgcmVxdWlyZWQnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuRm9yYmlkZGVuOlxuICAgICAgcmV0dXJuICdGb3JiaWRkZW4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuTm90Rm91bmQ6XG4gICAgICByZXR1cm4gJ05vdCBmb3VuZCc7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5NZXRob2ROb3RBbGxvd2VkOlxuICAgICAgcmV0dXJuICdNZXRob2Qgbm90IGFsbG93ZWQnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuTm90QWNjZXB0YWJsZTpcbiAgICAgIHJldHVybiAnTm90IGFjY2VwdGFibGUnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOlxuICAgICAgcmV0dXJuICdQcm94eSBhdXRoZW50aWNhdGlvbiByZXF1aXJlZCc7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5SZXF1ZXN0VGltZW91dDpcbiAgICAgIHJldHVybiAnUmVxdWVzdCB0aW1lb3V0JztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkNvbmZsaWN0OlxuICAgICAgcmV0dXJuICdDb25mbGljdCc7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Hb25lOlxuICAgICAgcmV0dXJuICdHb25lJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkxlbmd0aFJlcXVpcmVkOlxuICAgICAgcmV0dXJuICdMZW5ndGggcmVxdWlyZWQnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuUHJlY29uZGl0aW9uRmFpbGVkOlxuICAgICAgcmV0dXJuICdQcmVjb25kaXRpb24gZmFpbGVkJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlBheWxvYWRUb29MYXJnZTpcbiAgICAgIHJldHVybiAnUGF5bG9hZCB0b28gbGFyZ2UnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVXJpVG9vTG9uZzpcbiAgICAgIHJldHVybiAnVVJJIHRvbyBsb25nJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlVuc3VwcG9ydGVkTWVkaWFUeXBlOlxuICAgICAgcmV0dXJuICdVbnN1cHBvcnRlZCBtZWRpYSB0eXBlJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlJhbmdlTm90U2F0aXNmaWFibGU6XG4gICAgICByZXR1cm4gJ1JhbmdlIG5vdCBzYXRpc2ZpYWJsZSc7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5FeHBlY3RhdGlvbkZhaWxlZDpcbiAgICAgIHJldHVybiAnRXhwZWN0YXRpb24gZmFpbGVkJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkltQVRlYXBvdDpcbiAgICAgIHJldHVybiAnSSBhbSBhIHRlYXBvdCc7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5NaXNkaXJlY3RlZFJlcXVlc3Q6XG4gICAgICByZXR1cm4gJ01pc2RpcmVjdGVkIHJlcXVlc3QnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVW5wcm9jZXNzYWJsZUVudGl0eTpcbiAgICAgIHJldHVybiAnVW5wcm9jZXNzYWJsZSBlbnRpdHknO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuTG9ja2VkOlxuICAgICAgcmV0dXJuICdMb2NrZWQnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuRmFpbGVkRGVwZW5kZW5jeTpcbiAgICAgIHJldHVybiAnRmFpbGVkIGRlcGVuZGVuY3knO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVG9vRWFybHk6XG4gICAgICByZXR1cm4gJ1RvbyBlYXJseSc7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5VcGdyYWRlUmVxdWlyZWQ6XG4gICAgICByZXR1cm4gJ1VwZ3JhZGUgcmVxdWlyZWQnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuUHJlY29uZGl0aW9uUmVxdWlyZWQ6XG4gICAgICByZXR1cm4gJ1ByZWNvbmRpdGlvbiByZXF1aXJlZCc7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Ub29NYW55UmVxdWVzdHM6XG4gICAgICByZXR1cm4gJ1RvbyBtYW55IHJlcXVlc3RzJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTpcbiAgICAgIHJldHVybiAnUmVxdWVzdCBoZWFkZXIgZmllbGRzIHRvbyBsYXJnZSc7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5VbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczpcbiAgICAgIHJldHVybiAnVW5hdmFpbGFibGUgZm9yIGxlZ2FsIHJlYXNvbnMnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuSW50ZXJuYWxTZXJ2ZXJFcnJvcjpcbiAgICAgIHJldHVybiAnSW50ZXJuYWwgc2VydmVyIGVycm9yJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLk5vdEltcGxlbWVudGVkOlxuICAgICAgcmV0dXJuICdOb3QgaW1wbGVtZW50ZWQnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuQmFkR2F0ZXdheTpcbiAgICAgIHJldHVybiAnQmFkIGdhdGV3YXknO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuU2VydmljZVVuYXZhaWxhYmxlOlxuICAgICAgcmV0dXJuICdTZXJ2aWNlIHVuYXZhaWxhYmxlJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkdhdGV3YXlUaW1lb3V0OlxuICAgICAgcmV0dXJuICdHYXRld2F5IHRpbWVvdXQnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6XG4gICAgICByZXR1cm4gJ0hUVFAgdmVyc2lvbiBub3Qgc3VwcG9ydGVkJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlZhcmlhbnRBbHNvTmVnb3RpYXRlczpcbiAgICAgIHJldHVybiAnVmFyaWFudCBhbHNvIG5lZ290aWF0ZXMnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuSW5zdWZmaWNpZW50U3RvcmFnZTpcbiAgICAgIHJldHVybiAnSW5zdWZmaWNpZW50IHN0b3JhZ2UnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuTG9vcERldGVjdGVkOlxuICAgICAgcmV0dXJuICdMb29wIGRldGVjdGVkJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLk5vdEV4dGVuZGVkOlxuICAgICAgcmV0dXJuICdOb3QgZXh0ZW5kZWQnO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6XG4gICAgICByZXR1cm4gJ05ldHdvcmsgYXV0aGVudGljYXRpb24gcmVxdWlyZWQnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ1NvbWV0aGluZyB3ZW50IHdyb25nJztcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlSHR0cEVycm9yQ29kZVRvTWVzc2FnZUVuID0gKHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlKSA9PiB7XG4gIHN3aXRjaCAoc3RhdHVzQ29kZSkge1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuQmFkUmVxdWVzdDpcbiAgICAgIHJldHVybiAnU29ycnksIHdlIGNvdWxkIG5vdCBwcm9jZXNzIHlvdXIgcmVxdWVzdC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVW5hdXRob3JpemVkOlxuICAgICAgcmV0dXJuICdZb3UgYXJlIG5vdCBhdXRob3JpemVkIHRvIHBlcmZvcm0gdGhpcyBhY3Rpb24uIFBsZWFzZSBsb2cgaW4gdG8gY29udGludWUuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlBheW1lbnRSZXF1aXJlZDpcbiAgICAgIHJldHVybiAnUGF5bWVudCBpcyByZXF1aXJlZCB0byBjb21wbGV0ZSB0aGlzIGFjdGlvbi4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuRm9yYmlkZGVuOlxuICAgICAgcmV0dXJuICdZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byBwZXJmb3JtIHRoaXMgYWN0aW9uLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Ob3RGb3VuZDpcbiAgICAgIHJldHVybiAnVGhlIHJlcXVlc3RlZCByZXNvdXJjZSB3YXMgbm90IGZvdW5kLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5NZXRob2ROb3RBbGxvd2VkOlxuICAgICAgcmV0dXJuICdUaGUgcmVxdWVzdGVkIG1ldGhvZCBpcyBub3QgYWxsb3dlZCBmb3IgdGhpcyByZXNvdXJjZS4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuTm90QWNjZXB0YWJsZTpcbiAgICAgIHJldHVybiAnVGhlIHJlcXVlc3RlZCByZXNvdXJjZSBpcyBub3QgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIGEgcmVzcG9uc2UgbWF0Y2hpbmcgdGhlIGxpc3Qgb2YgYWNjZXB0YWJsZSB2YWx1ZXMuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDpcbiAgICAgIHJldHVybiAnUHJveHkgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQgdG8gY29tcGxldGUgdGhpcyBhY3Rpb24uJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlJlcXVlc3RUaW1lb3V0OlxuICAgICAgcmV0dXJuICdUaGUgc2VydmVyIHRpbWVkIG91dCB3YWl0aW5nIGZvciB0aGUgcmVxdWVzdC4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuQ29uZmxpY3Q6XG4gICAgICByZXR1cm4gJ1RoZSByZXF1ZXN0IGNvbmZsaWN0cyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSByZXNvdXJjZS4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuR29uZTpcbiAgICAgIHJldHVybiAnVGhlIHJlcXVlc3RlZCByZXNvdXJjZSBpcyBubyBsb25nZXIgYXZhaWxhYmxlIGFuZCB3aWxsIG5vdCBiZSBhdmFpbGFibGUgYWdhaW4uJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkxlbmd0aFJlcXVpcmVkOlxuICAgICAgcmV0dXJuICdUaGUgcmVxdWVzdCBkaWQgbm90IHNwZWNpZnkgdGhlIGxlbmd0aCBvZiBpdHMgY29udGVudCwgd2hpY2ggaXMgcmVxdWlyZWQgYnkgdGhlIHJlcXVlc3RlZCByZXNvdXJjZS4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuUHJlY29uZGl0aW9uRmFpbGVkOlxuICAgICAgcmV0dXJuICdUaGUgc2VydmVyIGRvZXMgbm90IG1lZXQgb25lIG9mIHRoZSBwcmVjb25kaXRpb25zIHRoYXQgdGhlIHJlcXVlc3RlciBwdXQgb24gdGhlIHJlcXVlc3QuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlBheWxvYWRUb29MYXJnZTpcbiAgICAgIHJldHVybiAnVGhlIHJlcXVlc3QgaXMgbGFyZ2VyIHRoYW4gdGhlIHNlcnZlciBpcyB3aWxsaW5nIG9yIGFibGUgdG8gcHJvY2Vzcy4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVXJpVG9vTG9uZzpcbiAgICAgIHJldHVybiAnVGhlIFVSTCBwcm92aWRlZCB3YXMgdG9vIGxvbmcgZm9yIHRoZSBzZXJ2ZXIgdG8gcHJvY2Vzcy4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVW5zdXBwb3J0ZWRNZWRpYVR5cGU6XG4gICAgICByZXR1cm4gJ1RoZSByZXF1ZXN0IGVudGl0eSBoYXMgYSBtZWRpYSB0eXBlIHdoaWNoIHRoZSBzZXJ2ZXIgb3IgcmVzb3VyY2UgZG9lcyBub3Qgc3VwcG9ydC4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuUmFuZ2VOb3RTYXRpc2ZpYWJsZTpcbiAgICAgIHJldHVybiAnVGhlIGNsaWVudCBoYXMgYXNrZWQgZm9yIGEgcG9ydGlvbiBvZiB0aGUgZmlsZSwgYnV0IHRoZSBzZXJ2ZXIgY2Fubm90IHN1cHBseSB0aGF0IHBvcnRpb24uJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkV4cGVjdGF0aW9uRmFpbGVkOlxuICAgICAgcmV0dXJuICdUaGUgc2VydmVyIGNhbm5vdCBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIEV4cGVjdCByZXF1ZXN0LWhlYWRlciBmaWVsZC4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuSW1BVGVhcG90OlxuICAgICAgcmV0dXJuICdJIGFtIGEgdGVhcG90Lic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5NaXNkaXJlY3RlZFJlcXVlc3Q6XG4gICAgICByZXR1cm4gJ1RoZSByZXF1ZXN0IHdhcyBkaXJlY3RlZCBhdCBhIHNlcnZlciB0aGF0IGlzIG5vdCBhYmxlIHRvIHByb2R1Y2UgYSByZXNwb25zZS4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVW5wcm9jZXNzYWJsZUVudGl0eTpcbiAgICAgIHJldHVybiAnVGhlIHJlcXVlc3Qgd2FzIHdlbGwtZm9ybWVkIGJ1dCB3YXMgdW5hYmxlIHRvIGJlIGZvbGxvd2VkIGR1ZSB0byBzZW1hbnRpYyBlcnJvcnMuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkxvY2tlZDpcbiAgICAgIHJldHVybiAnVGhlIHJlc291cmNlIHRoYXQgaXMgYmVpbmcgYWNjZXNzZWQgaXMgbG9ja2VkLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5GYWlsZWREZXBlbmRlbmN5OlxuICAgICAgcmV0dXJuICdUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGZhaWx1cmUgb2YgYSBwcmV2aW91cyByZXF1ZXN0Lic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Ub29FYXJseTpcbiAgICAgIHJldHVybiAnVGhlIHNlcnZlciBpcyB1bndpbGxpbmcgdG8gcHJvY2VzcyB0aGUgcmVxdWVzdCBiZWNhdXNlIHRoZSB1c2VyIGhhcyBub3QgYmVlbiBhdXRoZW50aWNhdGVkLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5VcGdyYWRlUmVxdWlyZWQ6XG4gICAgICByZXR1cm4gJ1RoZSBjbGllbnQgc2hvdWxkIHN3aXRjaCB0byBhIGRpZmZlcmVudCBwcm90b2NvbCBzdWNoIGFzIFRMUy8xLjAsIGdpdmVuIGluIHRoZSBVcGdyYWRlIGhlYWRlciBmaWVsZC4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuUHJlY29uZGl0aW9uUmVxdWlyZWQ6XG4gICAgICByZXR1cm4gJ1RoZSBvcmlnaW4gc2VydmVyIHJlcXVpcmVzIHRoZSByZXF1ZXN0IHRvIGJlIGNvbmRpdGlvbmFsLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Ub29NYW55UmVxdWVzdHM6XG4gICAgICByZXR1cm4gJ1lvdSBoYXZlIHNlbnQgdG9vIG1hbnkgcmVxdWVzdHMgaW4gYSBnaXZlbiBhbW91bnQgb2YgdGltZS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOlxuICAgICAgcmV0dXJuICdUaGUgc2VydmVyIGlzIHVud2lsbGluZyB0byBwcm9jZXNzIHRoZSByZXF1ZXN0IGJlY2F1c2UgaXRzIGhlYWRlciBmaWVsZHMgYXJlIHRvbyBsYXJnZS4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6XG4gICAgICByZXR1cm4gJ1RoZSByZXNvdXJjZSBpcyB1bmF2YWlsYWJsZSBkdWUgdG8gYSBsZWdhbCBkZW1hbmQuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkludGVybmFsU2VydmVyRXJyb3I6XG4gICAgICByZXR1cm4gJ1NvbWV0aGluZyB3ZW50IHdyb25nIG9uIG91ciBlbmQuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJztcbiAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLk5vdEltcGxlbWVudGVkOlxuICAgICAgcmV0dXJuICdUaGUgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgdG8gZnVsZmlsbCB0aGUgcmVxdWVzdC4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuQmFkR2F0ZXdheTpcbiAgICAgIHJldHVybiAnU29tZXRoaW5nIHdlbnQgd3Jvbmcgb24gb3VyIGVuZC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuU2VydmljZVVuYXZhaWxhYmxlOlxuICAgICAgcmV0dXJuICdUaGUgc2VydmVyIGlzIGN1cnJlbnRseSB1bmFibGUgdG8gaGFuZGxlIHRoZSByZXF1ZXN0IGR1ZSB0byBhIHRlbXBvcmFyeSBvdmVybG9hZCBvciBtYWludGVuYW5jZSBvZiB0aGUgc2VydmVyLic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5HYXRld2F5VGltZW91dDpcbiAgICAgIHJldHVybiAnVGhlIHNlcnZlciwgd2hpbGUgYWN0aW5nIGFzIGEgZ2F0ZXdheSBvciBwcm94eSwgZGlkIG5vdCByZWNlaXZlIGEgdGltZWx5IHJlc3BvbnNlIGZyb20gdGhlIHVwc3RyZWFtIHNlcnZlciBzcGVjaWZpZWQgYnkgdGhlIFVSTCBvciBzb21lIG90aGVyIGF1eGlsaWFyeSBzZXJ2ZXIgaXQgbmVlZGVkIHRvIGFjY2VzcyBpbiBhdHRlbXB0aW5nIHRvIGNvbXBsZXRlIHRoZSByZXF1ZXN0Lic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5IdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDpcbiAgICAgIHJldHVybiAnVGhlIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBIVFRQIHByb3RvY29sIHZlcnNpb24gdXNlZCBpbiB0aGUgcmVxdWVzdC4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVmFyaWFudEFsc29OZWdvdGlhdGVzOlxuICAgICAgcmV0dXJuICdUaGUgc2VydmVyIGhhcyBhbiBpbnRlcm5hbCBjb25maWd1cmF0aW9uIGVycm9yOiB0aGUgY2hvc2VuIHZhcmlhbnQgcmVzb3VyY2UgaXMgY29uZmlndXJlZCB0byBlbmdhZ2UgaW4gdHJhbnNwYXJlbnQgY29udGVudCBuZWdvdGlhdGlvbiBpdHNlbGYsIGFuZCBpcyB0aGVyZWZvcmUgbm90IGEgcHJvcGVyIGVuZCBwb2ludCBpbiB0aGUgbmVnb3RpYXRpb24gcHJvY2Vzcy4nO1xuICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuSW5zdWZmaWNpZW50U3RvcmFnZTpcbiAgICAgIHJldHVybiAnVGhlIG1ldGhvZCBjb3VsZCBub3QgYmUgcGVyZm9ybWVkIG9uIHRoZSByZXNvdXJjZSBiZWNhdXNlIHRoZSBzZXJ2ZXIgaXMgdW5hYmxlIHRvIHN0b3JlIHRoZSByZXByZXNlbnRhdGlvbiBuZWVkZWQgdG8gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlIHRoZSByZXF1ZXN0Lic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Mb29wRGV0ZWN0ZWQ6XG4gICAgICByZXR1cm4gJ1RoZSBzZXJ2ZXIgZGV0ZWN0ZWQgYW4gaW5maW5pdGUgbG9vcCB3aGlsZSBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0Lic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5Ob3RFeHRlbmRlZDpcbiAgICAgIHJldHVybiAnRnVydGhlciBleHRlbnNpb25zIHRvIHRoZSByZXF1ZXN0IGFyZSByZXF1aXJlZCBmb3IgdGhlIHNlcnZlciB0byBmdWxmaWxsIGl0Lic7XG4gICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5OZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDpcbiAgICAgIHJldHVybiAnWW91IG5lZWQgdG8gYXV0aGVudGljYXRlIHRvIGdhaW4gbmV0d29yayBhY2Nlc3MuJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICdTb21ldGhpbmcgd2VudCB3cm9uZy4gQ2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uIGFuZCB0cnkgYWdhaW4gbGF0ZXIuJztcbiAgfVxufTtcbiJdfQ==","import { Pipe } from '@angular/core';\nimport { parseHttpErrorCodeToMessageEn, parseHttpErrorCodeToTitleEn } from './parse-http-error-code-en';\nimport * as i0 from \"@angular/core\";\nexport class ParseHttpErrorCodeToTitleEnPipe {\n constructor() {\n this.transform = parseHttpErrorCodeToTitleEn;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: ParseHttpErrorCodeToTitleEnPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.0.3\", ngImport: i0, type: ParseHttpErrorCodeToTitleEnPipe, isStandalone: true, name: \"parseHttpErrorCodeToTitleEn\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: ParseHttpErrorCodeToTitleEnPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'parseHttpErrorCodeToTitleEn',\n standalone: true,\n }]\n }] });\nexport class ParseHttpErrorCodeToMessageEnPipe {\n constructor() {\n this.transform = parseHttpErrorCodeToMessageEn;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: ParseHttpErrorCodeToMessageEnPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.0.3\", ngImport: i0, type: ParseHttpErrorCodeToMessageEnPipe, isStandalone: true, name: \"parseHttpErrorCodeToMessageEn\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: ParseHttpErrorCodeToMessageEnPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'parseHttpErrorCodeToMessageEn',\n standalone: true,\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UtaHR0cC1lcnJvci1jb2RlLWVuLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL3BpcGVzL3BhcnNlLWh0dHAtZXJyb3ItY29kZS1lbi5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQU14RyxNQUFNLE9BQU8sK0JBQStCO0lBSjVDO1FBS0UsY0FBUyxHQUFHLDJCQUEyQixDQUFDO0tBQ3pDOzhHQUZZLCtCQUErQjs0R0FBL0IsK0JBQStCOzsyRkFBL0IsK0JBQStCO2tCQUozQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSw2QkFBNkI7b0JBQ25DLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7QUFTRCxNQUFNLE9BQU8saUNBQWlDO0lBSjlDO1FBS0UsY0FBUyxHQUFHLDZCQUE2QixDQUFDO0tBQzNDOzhHQUZZLGlDQUFpQzs0R0FBakMsaUNBQWlDOzsyRkFBakMsaUNBQWlDO2tCQUo3QyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSwrQkFBK0I7b0JBQ3JDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHBhcnNlSHR0cEVycm9yQ29kZVRvTWVzc2FnZUVuLCBwYXJzZUh0dHBFcnJvckNvZGVUb1RpdGxlRW4gfSBmcm9tICcuL3BhcnNlLWh0dHAtZXJyb3ItY29kZS1lbic7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3BhcnNlSHR0cEVycm9yQ29kZVRvVGl0bGVFbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFBhcnNlSHR0cEVycm9yQ29kZVRvVGl0bGVFblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtID0gcGFyc2VIdHRwRXJyb3JDb2RlVG9UaXRsZUVuO1xufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdwYXJzZUh0dHBFcnJvckNvZGVUb01lc3NhZ2VFbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFBhcnNlSHR0cEVycm9yQ29kZVRvTWVzc2FnZUVuUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0gPSBwYXJzZUh0dHBFcnJvckNvZGVUb01lc3NhZ2VFbjtcbn1cbiJdfQ==","import { RuntimeError } from '@ethlete/core';\nexport const roomNotJoined = (room) => {\n return new RuntimeError(1000 /* WebSocketRuntimeErrorCode.ROOM_NOT_JOINED */, `Tried leaving the room \"${room}\" but it has not been joined.`);\n};\nexport const messageMalformed = () => {\n return new RuntimeError(1001 /* WebSocketRuntimeErrorCode.MESSAGE_MALFORMED */, 'A message has been received but it is malformed (cannot be parsed as JSON).');\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLXNvY2tldC1lcnJvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL3dzL3dlYi1zb2NrZXQtZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTN0MsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUU7SUFDNUMsT0FBTyxJQUFJLFlBQVksdURBRXJCLDJCQUEyQixJQUFJLCtCQUErQixDQUMvRCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxFQUFFO0lBQ25DLE9BQU8sSUFBSSxZQUFZLHlEQUVyQiw2RUFBNkUsQ0FDOUUsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJ1bnRpbWVFcnJvciB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuXG4vLyBjb2RlcyAxMDAwLTE5OTlcbmV4cG9ydCBjb25zdCBlbnVtIFdlYlNvY2tldFJ1bnRpbWVFcnJvckNvZGUge1xuICAvLyBXZWIgU29ja2V0IENsaWVudFxuICBST09NX05PVF9KT0lORUQgPSAxMDAwLFxuICBNRVNTQUdFX01BTEZPUk1FRCA9IDEwMDEsXG59XG5cbmV4cG9ydCBjb25zdCByb29tTm90Sm9pbmVkID0gKHJvb206IHN0cmluZykgPT4ge1xuICByZXR1cm4gbmV3IFJ1bnRpbWVFcnJvcihcbiAgICBXZWJTb2NrZXRSdW50aW1lRXJyb3JDb2RlLlJPT01fTk9UX0pPSU5FRCxcbiAgICBgVHJpZWQgbGVhdmluZyB0aGUgcm9vbSBcIiR7cm9vbX1cIiBidXQgaXQgaGFzIG5vdCBiZWVuIGpvaW5lZC5gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IG1lc3NhZ2VNYWxmb3JtZWQgPSAoKSA9PiB7XG4gIHJldHVybiBuZXcgUnVudGltZUVycm9yKFxuICAgIFdlYlNvY2tldFJ1bnRpbWVFcnJvckNvZGUuTUVTU0FHRV9NQUxGT1JNRUQsXG4gICAgJ0EgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZCBidXQgaXQgaXMgbWFsZm9ybWVkIChjYW5ub3QgYmUgcGFyc2VkIGFzIEpTT04pLicsXG4gICk7XG59O1xuIl19","import { computed, DestroyRef, effect, inject, isDevMode, signal, untracked, } from '@angular/core';\nimport { previousSignalValue } from '@ethlete/core';\nimport { io } from 'socket.io-client';\nimport { messageMalformed, roomNotJoined } from './web-socket-errors';\nexport const createWebSocketClient = (config) => {\n const socket = io(config.url, {\n withCredentials: true,\n autoConnect: false,\n transports: config.transports,\n });\n const rooms = new Map();\n const isConnected = signal(false);\n const joinRoom = (room) => {\n const roomFn = typeof room === 'function' ? room : () => room;\n const pre = previousSignalValue(computed(() => roomFn()));\n const roomData = signal(null);\n const join = (name) => {\n socket.emit('join-room', name);\n const existingRoom = rooms.get(name);\n if (existingRoom)\n return existingRoom;\n const message = signal(null);\n const newRoom = {\n latestMessage: message,\n };\n rooms.set(name, newRoom);\n return newRoom;\n };\n effect(() => {\n const current = roomFn();\n untracked(() => {\n const previous = pre();\n if (previous === current)\n return;\n if (previous)\n leaveRoom(previous);\n if (current) {\n const joinedRoom = join(current);\n if (joinedRoom)\n roomData.set(joinedRoom);\n }\n else {\n roomData.set(null);\n }\n });\n });\n inject(DestroyRef).onDestroy(() => {\n const current = roomFn();\n if (current) {\n leaveRoom(current);\n roomData.set(null);\n }\n });\n return roomData.asReadonly();\n };\n const leaveRoom = (room) => {\n if (!rooms.has(room)) {\n if (isDevMode())\n throw roomNotJoined(room);\n }\n socket.emit('leave-room', room);\n rooms.delete(room);\n };\n const setupWebSocketConnectionListener = () => {\n socket.on('connect', () => {\n isConnected.set(true);\n for (const room of rooms.keys()) {\n socket.emit('join-room', room);\n }\n });\n socket.on('disconnect', () => isConnected.set(false));\n };\n const setupWebSocketListener = () => {\n socket.onAny((data) => {\n try {\n const json = JSON.parse(data);\n const room = rooms.get(json.room);\n if (room)\n room.latestMessage.set(json);\n }\n catch (error) {\n console.error(error);\n if (isDevMode())\n throw messageMalformed();\n }\n });\n };\n inject(DestroyRef).onDestroy(() => socket.disconnect());\n setupWebSocketConnectionListener();\n setupWebSocketListener();\n socket.connect();\n const client = {\n joinRoom,\n isConnected: isConnected.asReadonly(),\n subtle: {\n leaveRoom,\n },\n };\n return client;\n};\nexport const provideWebSocketClient = (config) => {\n return {\n provide: config.token,\n useFactory: () => createWebSocketClient(config),\n };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLXNvY2tldC1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL3dzL3dlYi1zb2NrZXQtY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUVULE1BQU0sRUFDTixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUF1Q3RFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQXlDLE1BQTZCLEVBQUUsRUFBRTtJQUM3RyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUM1QixlQUFlLEVBQUUsSUFBSTtRQUNyQixXQUFXLEVBQUUsS0FBSztRQUNsQixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7S0FDOUIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQStDLENBQUM7SUFDckUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWxDLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBb0MsRUFBRSxFQUFFO1FBQ3hELE1BQU0sTUFBTSxHQUFHLE9BQU8sSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDOUQsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1B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Q0FBQyxNQUFNLENBQUM7S0FDaEQsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNvbXB1dGVkLFxuICBEZXN0cm95UmVmLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaXNEZXZNb2RlLFxuICBTaWduYWwsXG4gIHNpZ25hbCxcbiAgdW50cmFja2VkLFxuICBXcml0YWJsZVNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBwcmV2aW91c1NpZ25hbFZhbHVlIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBpbyB9IGZyb20gJ3NvY2tldC5pby1jbGllbnQnO1xuaW1wb3J0IHsgV2ViU29ja2V0Q2xpZW50Q29uZmlnIH0gZnJvbSAnLi93ZWItc29ja2V0LWNsaWVudC1jb25maWcnO1xuaW1wb3J0IHsgbWVzc2FnZU1hbGZvcm1lZCwgcm9vbU5vdEpvaW5lZCB9IGZyb20gJy4vd2ViLXNvY2tldC1lcnJvcnMnO1xuXG4vKiogQSBkZWZhdWx0IHNvY2tldCBpbyBtZXNzYWdlIHZpZXcgKi9cbmV4cG9ydCB0eXBlIFNvY2tldE1lc3NhZ2VWaWV3PFRNZXNzYWdlRGF0YSA9IHVua25vd24+ID0ge1xuICByb29tOiBzdHJpbmc7XG4gIGV2ZW50OiBzdHJpbmc7XG4gIGRhdGE6IFRNZXNzYWdlRGF0YTtcbn07XG5cbmV4cG9ydCB0eXBlIFdlYlNvY2tldENsaWVudFN1YnRsZSA9IHtcbiAgLyoqIExlYXZlIGEgc29ja2V0IGlvIHJvb20gKi9cbiAgbGVhdmVSb29tOiAocm9vbTogc3RyaW5nKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgV2ViU29ja2V0Q2xpZW50PFRNZXNzYWdlRGF0YSBleHRlbmRzIFNvY2tldE1lc3NhZ2VWaWV3PiA9IHtcbiAgLyoqXG4gICAqIEpvaW4gYSBzb2NrZXQgaW8gcm9vbVxuICAgKiBJZiBhIGZ1bmN0aW9uIGlzIHBhc3NlZCwgaXQgd2lsbCBiZSBldmFsdWF0ZWQgaW4gYSByZWFjdGl2ZSBzaWduYWwgY29udGV4dC5cbiAgICogSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVsbCwgbm8gcm9vbSB3aWxsIGJlIGpvaW5lZC5cbiAgICogSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcsIHRoZSBwcmV2aW91cyByb29tIHdpbGwgYmUgbGVmdCBhbmQgdGhlIG5ldyByb29tIHdpbGwgYmUgam9pbmVkLlxuICAgKi9cbiAgam9pblJvb206IChyb29tOiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgbnVsbCkpID0+IFNpZ25hbDxXZWJTb2NrZXRSb29tPFRNZXNzYWdlRGF0YT4gfCBudWxsPjtcblxuICAvKiogV2hldGhlciB0aGUgY2xpZW50IGlzIGNvbm5lY3RlZCB0byB0aGUgc2VydmVyICovXG4gIGlzQ29ubmVjdGVkOiBTaWduYWw8Ym9vbGVhbj47XG5cbiAgLyoqIEFkdmFuY2VkIHdlYiBzb2NrZXQgZmVhdHVyZXMuICoqV0FSTklORyEqKiBJbmNvcnJlY3RseSB1c2luZyB0aGVzZSBmZWF0dXJlcyB3aWxsIGxpa2VseSAqKkJSRUFLKiogeW91ciBhcHBsaWNhdGlvbi4gWW91IGhhdmUgYmVlbiB3YXJuZWQhICovXG4gIHN1YnRsZTogV2ViU29ja2V0Q2xpZW50U3VidGxlO1xufTtcblxuZXhwb3J0IHR5cGUgSW50ZXJuYWxXZWJTb2NrZXRSb29tPFRNZXNzYWdlRGF0YSBleHRlbmRzIFNvY2tldE1lc3NhZ2VWaWV3PiA9IHtcbiAgbGF0ZXN0TWVzc2FnZTogV3JpdGFibGVTaWduYWw8VE1lc3NhZ2VEYXRhIHwgbnVsbD47XG59O1xuXG5leHBvcnQgdHlwZSBXZWJTb2NrZXRSb29tPFRNZXNzYWdlRGF0YSBleHRlbmRzIFNvY2tldE1lc3NhZ2VWaWV3PiA9IHtcbiAgLyoqIFRoZSBsYXRlc3QgbWVzc2FnZSByZWNlaXZlZCBpbiB0aGUgcm9vbSAqL1xuICBsYXRlc3RNZXNzYWdlOiBTaWduYWw8VE1lc3NhZ2VEYXRhIHwgbnVsbD47XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlV2ViU29ja2V0Q2xpZW50ID0gPFRNZXNzYWdlRGF0YSBleHRlbmRzIFNvY2tldE1lc3NhZ2VWaWV3Pihjb25maWc6IFdlYlNvY2tldENsaWVudENvbmZpZykgPT4ge1xuICBjb25zdCBzb2NrZXQgPSBpbyhjb25maWcudXJsLCB7XG4gICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIGF1dG9Db25uZWN0OiBmYWxzZSxcbiAgICB0cmFuc3BvcnRzOiBjb25maWcudHJhbnNwb3J0cyxcbiAgfSk7XG5cbiAgY29uc3Qgcm9vbXMgPSBuZXcgTWFwPHN0cmluZywgSW50ZXJuYWxXZWJTb2NrZXRSb29tPFRNZXNzYWdlRGF0YT4+KCk7XG4gIGNvbnN0IGlzQ29ubmVjdGVkID0gc2lnbmFsKGZhbHNlKTtcblxuICBjb25zdCBqb2luUm9vbSA9IChyb29tOiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgbnVsbCkpID0+IHtcbiAgICBjb25zdCByb29tRm4gPSB0eXBlb2Ygcm9vbSA9PT0gJ2Z1bmN0aW9uJyA/IHJvb20gOiAoKSA9PiByb29tO1xuICAgIGNvbnN0IHByZSA9IHByZXZpb3VzU2lnbmFsVmFsdWUoY29tcHV0ZWQoKCkgPT4gcm9vbUZuKCkpKTtcbiAgICBjb25zdCByb29tRGF0YSA9IHNpZ25hbDxJbnRlcm5hbFdlYlNvY2tldFJvb208VE1lc3NhZ2VEYXRhPiB8IG51bGw+KG51bGwpO1xuXG4gICAgY29uc3Qgam9pbiA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHNvY2tldC5lbWl0KCdqb2luLXJvb20nLCBuYW1lKTtcblxuICAgICAgY29uc3QgZXhpc3RpbmdSb29tID0gcm9vbXMuZ2V0KG5hbWUpO1xuXG4gICAgICBpZiAoZXhpc3RpbmdSb29tKSByZXR1cm4gZXhpc3RpbmdSb29tO1xuXG4gICAgICBjb25zdCBtZXNzYWdlID0gc2lnbmFsPFRNZXNzYWdlRGF0YSB8IG51bGw+KG51bGwpO1xuXG4gICAgICBjb25zdCBuZXdSb29tOiBJbnRlcm5hbFdlYlNvY2tldFJvb208VE1lc3NhZ2VEYXRhPiA9IHtcbiAgICAgICAgbGF0ZXN0TWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIH07XG5cbiAgICAgIHJvb21zLnNldChuYW1lLCBuZXdSb29tKTtcblxuICAgICAgcmV0dXJuIG5ld1Jvb207XG4gICAgfTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gcm9vbUZuKCk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gcHJlKCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzID09PSBjdXJyZW50KSByZXR1cm47XG5cbiAgICAgICAgaWYgKHByZXZpb3VzKSBsZWF2ZVJvb20ocHJldmlvdXMpO1xuXG4gICAgICAgIGlmIChjdXJyZW50KSB7XG4gICAgICAgICAgY29uc3Qgam9pbmVkUm9vbSA9IGpvaW4oY3VycmVudCk7XG4gICAgICAgICAgaWYgKGpvaW5lZFJvb20pIHJvb21EYXRhLnNldChqb2luZWRSb29tKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb29tRGF0YS5zZXQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gcm9vbUZuKCk7XG5cbiAgICAgIGlmIChjdXJyZW50KSB7XG4gICAgICAgIGxlYXZlUm9vbShjdXJyZW50KTtcbiAgICAgICAgcm9vbURhdGEuc2V0KG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvb21EYXRhLmFzUmVhZG9ubHkoKSBhcyBTaWduYWw8V2ViU29ja2V0Um9vbTxUTWVzc2FnZURhdGE+IHwgbnVsbD47XG4gIH07XG5cbiAgY29uc3QgbGVhdmVSb29tID0gKHJvb206IHN0cmluZykgPT4ge1xuICAgIGlmICghcm9vbXMuaGFzKHJvb20pKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHRocm93IHJvb21Ob3RKb2luZWQocm9vbSk7XG4gICAgfVxuXG4gICAgc29ja2V0LmVtaXQoJ2xlYXZlLXJvb20nLCByb29tKTtcblxuICAgIHJvb21zLmRlbGV0ZShyb29tKTtcbiAgfTtcblxuICBjb25zdCBzZXR1cFdlYlNvY2tldENvbm5lY3Rpb25MaXN0ZW5lciA9ICgpID0+IHtcbiAgICBzb2NrZXQub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBpc0Nvbm5lY3RlZC5zZXQodHJ1ZSk7XG5cbiAgICAgIGZvciAoY29uc3Qgcm9vbSBvZiByb29tcy5rZXlzKCkpIHtcbiAgICAgICAgc29ja2V0LmVtaXQoJ2pvaW4tcm9vbScsIHJvb20pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHNvY2tldC5vbignZGlzY29ubmVjdCcsICgpID0+IGlzQ29ubmVjdGVkLnNldChmYWxzZSkpO1xuICB9O1xuXG4gIGNvbnN0IHNldHVwV2ViU29ja2V0TGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgc29ja2V0Lm9uQW55KChkYXRhOiBzdHJpbmcpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKGRhdGEpIGFzIFRNZXNzYWdlRGF0YTtcblxuICAgICAgICBjb25zdCByb29tID0gcm9vbXMuZ2V0KGpzb24ucm9vbSk7XG5cbiAgICAgICAgaWYgKHJvb20pIHJvb20ubGF0ZXN0TWVzc2FnZS5zZXQoanNvbik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB0aHJvdyBtZXNzYWdlTWFsZm9ybWVkKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgaW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiBzb2NrZXQuZGlzY29ubmVjdCgpKTtcblxuICBzZXR1cFdlYlNvY2tldENvbm5lY3Rpb25MaXN0ZW5lcigpO1xuICBzZXR1cFdlYlNvY2tldExpc3RlbmVyKCk7XG4gIHNvY2tldC5jb25uZWN0KCk7XG5cbiAgY29uc3QgY2xpZW50OiBXZWJTb2NrZXRDbGllbnQ8VE1lc3NhZ2VEYXRhPiA9IHtcbiAgICBqb2luUm9vbSxcbiAgICBpc0Nvbm5lY3RlZDogaXNDb25uZWN0ZWQuYXNSZWFkb25seSgpLFxuICAgIHN1YnRsZToge1xuICAgICAgbGVhdmVSb29tLFxuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIGNsaWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBwcm92aWRlV2ViU29ja2V0Q2xpZW50ID0gKGNvbmZpZzogV2ViU29ja2V0Q2xpZW50Q29uZmlnKSA9PiB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogY29uZmlnLnRva2VuLFxuICAgIHVzZUZhY3Rvcnk6ICgpID0+IGNyZWF0ZVdlYlNvY2tldENsaWVudChjb25maWcpLFxuICB9O1xufTtcbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const createWebSocketClientConfig = (options) => {\n const token = new InjectionToken(`WebSocketClient_${options.name}`);\n const clientConfig = {\n token,\n name: options.name,\n url: options.url,\n transports: options.transports,\n };\n return clientConfig;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLXNvY2tldC1jbGllbnQtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC93cy93ZWItc29ja2V0LWNsaWVudC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQXlCL0MsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxPQUFvQyxFQUFFLEVBQUU7SUFDbEYsTUFBTSxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQXdCLG1CQUFtQixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUUzRixNQUFNLFlBQVksR0FBMEI7UUFDMUMsS0FBSztRQUNMLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7UUFDaEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0tBQy9CLENBQUM7SUFFRixPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU29ja2V0TWVzc2FnZVZpZXcsIFdlYlNvY2tldENsaWVudCB9IGZyb20gJy4vd2ViLXNvY2tldC1jbGllbnQnO1xuXG5leHBvcnQgdHlwZSBDcmVhdGVXZWJTb2NrZXRDbGllbnRUcmFuc3BvcnQgPSAncG9sbGluZycgfCAnd2Vic29ja2V0JyB8ICd3ZWJ0cmFuc3BvcnQnO1xuXG5leHBvcnQgdHlwZSBDcmVhdGVXZWJTb2NrZXRDbGllbnRDb25maWcgPSB7XG4gIC8qKiBBIHVuaXF1ZSBuYW1lIGZvciB0aGUgY2xpZW50ICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKiogVGhlIFVSTCBvZiB0aGUgc29ja2V0IGlvIHNlcnZlciAqL1xuICB1cmw6IHN0cmluZztcblxuICAvKiogQSBsaXN0IG9mIHRyYW5zcG9ydHMgdG8gdHJ5IChpbiBvcmRlcikuIEVuZ2luZS5pbyBhbHdheXMgYXR0ZW1wdHMgdG8gY29ubmVjdCBkaXJlY3RseSB3aXRoIHRoZSBmaXJzdCBvbmUsIHByb3ZpZGVkIHRoZSBmZWF0dXJlIGRldGVjdGlvbiB0ZXN0IGZvciBpdCBwYXNzZXMuICovXG4gIHRyYW5zcG9ydHM/OiBDcmVhdGVXZWJTb2NrZXRDbGllbnRUcmFuc3BvcnRbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFdlYlNvY2tldENsaWVudFJlZjxUTWVzc2FnZURhdGEgZXh0ZW5kcyBTb2NrZXRNZXNzYWdlVmlldyA9IFNvY2tldE1lc3NhZ2VWaWV3PiA9IEluamVjdGlvblRva2VuPFxuICBXZWJTb2NrZXRDbGllbnQ8VE1lc3NhZ2VEYXRhPlxuPjtcblxuZXhwb3J0IHR5cGUgV2ViU29ja2V0Q2xpZW50Q29uZmlnID0gQ3JlYXRlV2ViU29ja2V0Q2xpZW50Q29uZmlnICYge1xuICAvKiogQSBnZW5lcmF0ZWQgdG9rZW4gZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uICovXG4gIHRva2VuOiBXZWJTb2NrZXRDbGllbnRSZWY7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlV2ViU29ja2V0Q2xpZW50Q29uZmlnID0gKG9wdGlvbnM6IENyZWF0ZVdlYlNvY2tldENsaWVudENvbmZpZykgPT4ge1xuICBjb25zdCB0b2tlbiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxXZWJTb2NrZXRDbGllbnRDb25maWc+KGBXZWJTb2NrZXRDbGllbnRfJHtvcHRpb25zLm5hbWV9YCk7XG5cbiAgY29uc3QgY2xpZW50Q29uZmlnOiBXZWJTb2NrZXRDbGllbnRDb25maWcgPSB7XG4gICAgdG9rZW4sXG4gICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgIHVybDogb3B0aW9ucy51cmwsXG4gICAgdHJhbnNwb3J0czogb3B0aW9ucy50cmFuc3BvcnRzLFxuICB9O1xuXG4gIHJldHVybiBjbGllbnRDb25maWc7XG59O1xuIl19","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpStatusCode } from '@angular/common/http';\nimport { assertInInjectionContext, isDevMode, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, filter, map, of, switchMap, takeWhile, tap } from 'rxjs';\nimport { isLegacyQuery } from '../experimental';\nimport { transformGql } from '../gql';\nimport { transformMethod } from '../request';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../symfony';\nimport { addQueryContainerHandling } from '../utils';\nexport function filterSuccess() {\n return function (source) {\n return source.pipe(filter((value) => isQueryStateSuccess(value)));\n };\n}\nexport function ignoreAutoRefresh() {\n return function (source) {\n return source.pipe(filter((value) => !isAutoRefresh(value)));\n };\n}\nexport function filterFailure() {\n return function (source) {\n return source.pipe(filter((value) => isQueryStateFailure(value)));\n };\n}\nexport function filterQueryStates(allowedStates) {\n return function (source) {\n return source.pipe(filter((value) => value && allowedStates.includes(value.type)));\n };\n}\nexport function takeUntilResponse(config) {\n return function (source) {\n return source.pipe(takeWhile((value) => {\n if (config?.excludeNull && value === null) {\n return false;\n }\n return isQueryStateLoading(value) || isQueryStatePrepared(value) || value === null;\n }, true));\n };\n}\nexport function filterNull() {\n return function (source) {\n return source.pipe(filter((value) => value !== null));\n };\n}\nexport function switchQueryState() {\n return function (source) {\n return source.pipe(switchMap((value) => value?.state$ ?? of(null)));\n };\n}\nexport function switchQueryCollectionState() {\n return function (source) {\n return source.pipe(switchMap((value) => value?.query.state$ ?? of(null)));\n };\n}\nexport const resetPageOnError = (config) => (source) => {\n const { queryForm, pageControlKey = 'page' } = config;\n if (isDevMode() && !queryForm.form.controls[pageControlKey]) {\n console.warn(`resetPageOnError: queryForm.form.controls[\"${pageControlKey}\"] is undefined`);\n }\n return source.pipe(switchMap((q) => {\n if (!q) {\n return of(q);\n }\n return q.state$.pipe(tap((state) => {\n if (!isQueryStateFailure(state)) {\n return;\n }\n switch (state.error.status) {\n // The page is invalid (in prod mode, code is 416)\n case HttpStatusCode.RangeNotSatisfiable:\n queryForm.form.controls[pageControlKey]?.patchValue(1);\n break;\n // The page might be invalid (in dev mode, code is 500)\n case HttpStatusCode.InternalServerError:\n if (isSymfonyPagerfantaOutOfRangeError(state.error.detail)) {\n queryForm.form.controls[pageControlKey].patchValue(1);\n }\n break;\n }\n }), takeUntilResponse());\n }));\n};\nexport const isQueryStateLoading = (state) => state?.type === \"LOADING\" /* QueryStateType.Loading */;\nexport const isQueryStateSuccess = (state) => state?.type === \"SUCCESS\" /* QueryStateType.Success */;\nexport const isQueryStateFailure = (state) => state?.type === \"FAILURE\" /* QueryStateType.Failure */;\nexport const isQueryStateCancelled = (state) => state?.type === \"CANCELLED\" /* QueryStateType.Cancelled */;\nexport const isQueryStatePrepared = (state) => state?.type === \"PREPARED\" /* QueryStateType.Prepared */;\nexport const isAutoRefresh = (state) => state?.meta.triggeredVia === 'auto';\nexport const mergeHeaders = (...headers) => {\n return headers.reduce((acc, headers) => {\n if (!headers) {\n return acc;\n }\n return {\n ...acc,\n ...headers,\n };\n }, {});\n};\nexport const isGqlQueryConfig = (config) => {\n if (!config || typeof config !== 'object' || Array.isArray(config)) {\n return false;\n }\n if (!('query' in config)) {\n return false;\n }\n return true;\n};\nexport const isQuery = (query) => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n if (!('state$' in query)) {\n return false;\n }\n return true;\n};\nexport const isQueryCollection = (query) => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n if (!('query' in query)) {\n return false;\n }\n return true;\n};\n/**\n * @deprecated Use `createQueryCollectionSubject` instead. Will be removed in v6.\n */\nexport const createQueryCollection = (\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nqueryMap) => new BehaviorSubject(null);\nexport const createQueryCollectionSubject = (queryMap, config) => {\n assertInInjectionContext(createQueryCollectionSubject);\n const subject = new BehaviorSubject(null);\n addQueryContainerHandling(subject.pipe(map((s) => s?.query ?? null)), () => subject.getValue()?.query ?? null, config);\n return subject;\n};\nexport const createQueryCollectionSignal = (queryMap, config) => {\n assertInInjectionContext(createQueryCollectionSignal);\n const _signal = signal(null);\n addQueryContainerHandling(toObservable(_signal).pipe(map((s) => s?.query ?? null)), () => _signal()?.query ?? null, config);\n return _signal;\n};\nexport const extractQuery = (v) => (isQuery(v) ? v : isLegacyQuery(v) ? v : v?.query) ?? null;\nexport const getDefaultHeaders = (headers, method) => {\n if (!headers) {\n return {};\n }\n if (method in headers) {\n return (headers[method] ?? {});\n }\n return headers;\n};\nexport const castQueryCreatorTypes = (config) => {\n if (config.args?.pathParams) {\n console.error(config);\n throw new Error('Path params cannot be overridden in castQueryCreatorTypes. Create a new query creator instead.');\n }\n return config.creator;\n};\nexport const computeQueryMethod = (config) => {\n let method;\n if (isGqlQueryConfig(config.config)) {\n const transferVia = config.config.transferVia ?? config.client.config.request?.gql?.transferVia;\n method = transformMethod({ method: config.config.method, transferVia });\n }\n else {\n method = transformMethod({ method: config.config.method });\n }\n return method;\n};\nexport const computeQueryBody = (config) => {\n let body;\n if (config.method === 'GET' ||\n config.method === 'HEAD' ||\n config.method === 'OPTIONS' ||\n (isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia)))) {\n return undefined;\n }\n if (isGqlQueryConfig(config.config)) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n body = query(config.args?.variables);\n }\n else {\n body = config.args?.body;\n }\n return body;\n};\nexport const computeQueryAuthHeader = (config) => {\n let authHeader = null;\n if (config.config.secure) {\n const header = config.client.authProvider?.header;\n if (header) {\n authHeader = header;\n }\n }\n else if (config.client.authProvider?.header) {\n if (config.config.secure === undefined || config.config.secure) {\n authHeader = config.client.authProvider.header;\n }\n }\n return authHeader;\n};\nexport const computeQueryHeaders = (config) => {\n const authHeader = computeQueryAuthHeader(config);\n const mergedHeaders = mergeHeaders(getDefaultHeaders(config.client.config.request?.headers, config.config.method), authHeader, config.args?.headers) || undefined;\n return mergedHeaders;\n};\nexport const computeQueryQueryParams = (config) => {\n if (isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia))) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n let params = query(config.args?.variables);\n if (config.args?.queryParams) {\n params = { ...params, ...config.args?.queryParams };\n }\n return params;\n }\n return config.args?.queryParams;\n};\nexport const paginatedEntityValueUpdater = (findFn) => ({ response, rawResponse, entity }) => {\n const indexOfEntityRaw = rawResponse.items.findIndex((item) => findFn(item, entity));\n const indexOfEntity = response.items.findIndex((item) => findFn(item, entity));\n if (indexOfEntity === -1 || indexOfEntityRaw === -1) {\n return null;\n }\n const newRawResponse = {\n ...rawResponse,\n items: [\n ...rawResponse.items.slice(0, indexOfEntityRaw),\n entity,\n ...rawResponse.items.slice(indexOfEntityRaw + 1),\n ],\n };\n const newResponse = {\n ...response,\n items: [...response.items.slice(0, indexOfEntity), entity, ...response.items.slice(indexOfEntity + 1)],\n };\n return {\n response: newResponse,\n rawResponse: newRawResponse,\n };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnkvcXVlcnkudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvRixPQUFPLEVBQWtCLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFZdEMsT0FBTyxFQUFtRCxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDOUYsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hFLE9BQU8sRUFBd0IseUJBQXlCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUF5QjNFLE1BQU0sVUFBVSxhQUFhO0lBQzNCLE9BQU8sVUFDTCxNQUFxQjtRQUVyQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFrQyxDQUFDO0lBQ3JHLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCO0lBQy9CLE9BQU8sVUFBdUMsTUFBcUI7UUFDakUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxF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QUFLLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1NBQ2pEO0tBQ0YsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHO1FBQ2xCLEdBQUcsUUFBUTtRQUNYLEtBQUssRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUN2RyxDQUFDO0lBRUYsT0FBTztRQUNMLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLFdBQVcsRUFBRSxjQUFjO0tBQzVCLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBIdHRwU3RhdHVzQ29kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgaXNEZXZNb2RlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IFBhZ2luYXRlZCB9IGZyb20gJ0BldGhsZXRlL3R5cGVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgZmlsdGVyLCBtYXAsIG9mLCBzd2l0Y2hNYXAsIHRha2VXaGlsZSwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFbnRpdHlTdG9yZSB9IGZyb20gJy4uL2VudGl0eSc7XG5pbXBvcnQgeyBBbnlMZWdhY3lRdWVyeSwgaXNMZWdhY3lRdWVyeSB9IGZyb20gJy4uL2V4cGVyaW1lbnRhbCc7XG5pbXBvcnQgeyB0cmFuc2Zvcm1HcWwgfSBmcm9tICcuLi9ncWwnO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQgfSBmcm9tICcuLi9xdWVyeS1jbGllbnQnO1xuaW1wb3J0IHtcbiAgQW55UXVlcnlDcmVhdG9yLFxuICBRdWVyeUFyZ3NPZixcbiAgUXVlcnlDcmVhdG9yLFxuICBRdWVyeURhdGFPZixcbiAgUXVlcnlSZXNwb25zZU9mLFxuICBRdWVyeVN0b3JlSWRPZixcbiAgUXVlcnlTdG9yZU9mLFxufSBmcm9tICcuLi9xdWVyeS1jcmVhdG9yJztcbmltcG9ydCB7IFF1ZXJ5Rm9ybSB9IGZyb20gJy4uL3F1ZXJ5LWZvcm0nO1xuaW1wb3J0IHsgTWV0aG9kLCBSZXF1ZXN0SGVhZGVycywgUmVxdWVzdEhlYWRlcnNNZXRob2RNYXAsIHRyYW5zZm9ybU1ldGhvZCB9IGZyb20gJy4uL3JlcXVlc3QnO1xuaW1wb3J0IHsgaXNTeW1mb255UGFnZXJmYW50YU91dE9mUmFuZ2VFcnJvciB9IGZyb20gJy4uL3N5bWZvbnknO1xuaW1wb3J0IHsgUXVlcnlDb250YWluZXJDb25maWcsIGFkZFF1ZXJ5Q29udGFpbmVySGFuZGxpbmcgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICBBbnlHcWxRdWVyeUNvbmZpZyxcbiAgQW55UXVlcnksXG4gIEFueVF1ZXJ5Q29sbGVjdGlvbixcbiAgQW55UXVlcnlDb2xsZWN0aW9uRGF0YSxcbiAgQW55UXVlcnlDcmVhdG9yQ29sbGVjdGlvbixcbiAgQW55UmVzdFF1ZXJ5Q29uZmlnLFxuICBCYXNlQXJndW1lbnRzLFxuICBDYW5jZWxsZWQsXG4gIEZhaWx1cmUsXG4gIEdxbFF1ZXJ5Q29uZmlnLFxuICBMb2FkaW5nLFxuICBQcmVwYXJlZCxcbiAgUXVlcnlDb2xsZWN0aW9uT2YsXG4gIFF1ZXJ5U3RhdGUsXG4gIFF1ZXJ5U3RhdGVSZXNwb25zZU9mLFxuICBRdWVyeVN0YXRlVHlwZSxcbiAgUmVzZXRQYWdlT25FcnJvck9wZXJhdG9yQ29uZmlnLFxuICBSb3V0ZVR5cGUsXG4gIFN1Y2Nlc3MsXG59IGZyb20gJy4vcXVlcnkudHlwZXMnO1xuXG50eXBlIE9taXROdWxsPFQ+ID0gVCBleHRlbmRzIG51bGwgPyBuZXZlciA6IFQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJTdWNjZXNzKCkge1xuICByZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBRdWVyeVN0YXRlIHwgbnVsbCwgUmVzcG9uc2UgZXh0ZW5kcyBRdWVyeVN0YXRlUmVzcG9uc2VPZjxPbWl0TnVsbDxUPj4+KFxuICAgIHNvdXJjZTogT2JzZXJ2YWJsZTxUPixcbiAgKSB7XG4gICAgcmV0dXJuIHNvdXJjZS5waXBlKGZpbHRlcigodmFsdWUpID0+IGlzUXVlcnlTdGF0ZVN1Y2Nlc3ModmFsdWUpKSkgYXMgT2JzZXJ2YWJsZTxTdWNjZXNzPFJlc3BvbnNlPj47XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVBdXRvUmVmcmVzaCgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIDxUIGV4dGVuZHMgUXVlcnlTdGF0ZSB8IG51bGw+KHNvdXJjZTogT2JzZXJ2YWJsZTxUPikge1xuICAgIHJldHVybiBzb3VyY2UucGlwZShmaWx0ZXIoKHZhbHVlKSA9PiAhaXNBdXRvUmVmcmVzaCh2YWx1ZSkpKSBhcyBPYnNlcnZhYmxlPFQ+O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRmFpbHVyZSgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIDxUIGV4dGVuZHMgUXVlcnlTdGF0ZSB8IG51bGw+KHNvdXJjZTogT2JzZXJ2YWJsZTxUPikge1xuICAgIHJldHVybiBzb3VyY2UucGlwZShmaWx0ZXIoKHZhbHVlKSA9PiBpc1F1ZXJ5U3RhdGVGYWlsdXJlKHZhbHVlKSkpIGFzIE9ic2VydmFibGU8RmFpbHVyZT47XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJRdWVyeVN0YXRlcyhhbGxvd2VkU3RhdGVzOiBRdWVyeVN0YXRlVHlwZVtdKSB7XG4gIHJldHVybiBmdW5jdGlvbiA8VCBleHRlbmRzIFF1ZXJ5U3RhdGUgfCBudWxsPihzb3VyY2U6IE9ic2VydmFibGU8VD4pIHtcbiAgICByZXR1cm4gc291cmNlLnBpcGUoZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgJiYgYWxsb3dlZFN0YXRlcy5pbmNsdWRlcyh2YWx1ZS50eXBlKSkpIGFzIE9ic2VydmFibGU8VD47XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWtlVW50aWxSZXNwb25zZShjb25maWc/OiB7IGV4Y2x1ZGVOdWxsPzogYm9vbGVhbiB9KSB7XG4gIHJldHVybiBmdW5jdGlvbiA8VCBleHRlbmRzIFF1ZXJ5U3RhdGUgfCBudWxsPihzb3VyY2U6IE9ic2VydmFibGU8VD4pIHtcbiAgICByZXR1cm4gc291cmNlLnBpcGUoXG4gICAgICB0YWtlV2hpbGUoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChjb25maWc/LmV4Y2x1ZGVOdWxsICYmIHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzUXVlcnlTdGF0ZUxvYWRpbmcodmFsdWUpIHx8IGlzUXVlcnlTdGF0ZVByZXBhcmVkKHZhbHVlKSB8fCB2YWx1ZSA9PT0gbnVsbDtcbiAgICAgIH0sIHRydWUpLFxuICAgICk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJOdWxsKCkge1xuICByZXR1cm4gZnVuY3Rpb24gPFQ+KHNvdXJjZTogT2JzZXJ2YWJsZTxUPikge1xuICAgIHJldHVybiBzb3VyY2UucGlwZShmaWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgT21pdE51bGw8VD4gPT4gdmFsdWUgIT09IG51bGwpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN3aXRjaFF1ZXJ5U3RhdGUoKSB7XG4gIHJldHVybiBmdW5jdGlvbiA8VCBleHRlbmRzIEFueVF1ZXJ5IHwgbnVsbCwgRGF0YSBleHRlbmRzIFF1ZXJ5RGF0YU9mPFQ+Pihzb3VyY2U6IE9ic2VydmFibGU8VD4pIHtcbiAgICByZXR1cm4gc291cmNlLnBpcGUoc3dpdGNoTWFwKCh2YWx1ZSkgPT4gdmFsdWU/LnN0YXRlJCA/PyBvZihudWxsKSkpIGFzIE9ic2VydmFibGU8UXVlcnlTdGF0ZTxEYXRhPiB8IG51bGw+O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3dpdGNoUXVlcnlDb2xsZWN0aW9uU3RhdGUoKSB7XG4gIHJldHVybiBmdW5jdGlvbiA8VCBleHRlbmRzIEFueVF1ZXJ5Q29sbGVjdGlvbiB8IG51bGwsIERhdGEgZXh0ZW5kcyBBbnlRdWVyeUNvbGxlY3Rpb25EYXRhPE9taXROdWxsPFQ+Pj4oXG4gICAgc291cmNlOiBPYnNlcnZhYmxlPFQ+LFxuICApIHtcbiAgICByZXR1cm4gc291cmNlLnBpcGUoc3dpdGNoTWFwKCh2YWx1ZSkgPT4gdmFsdWU/LnF1ZXJ5LnN0YXRlJCA/PyBvZihudWxsKSkpIGFzIE9ic2VydmFibGU8UXVlcnlTdGF0ZTxEYXRhPiB8IG51bGw+O1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgcmVzZXRQYWdlT25FcnJvciA9XG4gIDxUIGV4dGVuZHMgQW55UXVlcnkgfCBudWxsIHwgdW5kZWZpbmVkLCBKIGV4dGVuZHMgUXVlcnlGb3JtPGFueT4+KGNvbmZpZzogUmVzZXRQYWdlT25FcnJvck9wZXJhdG9yQ29uZmlnPEo+KSA9PlxuICAoc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiB7XG4gICAgY29uc3QgeyBxdWVyeUZvcm0sIHBhZ2VDb250cm9sS2V5ID0gJ3BhZ2UnIH0gPSBjb25maWc7XG5cbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgIXF1ZXJ5Rm9ybS5mb3JtLmNvbnRyb2xzW3BhZ2VDb250cm9sS2V5XSkge1xuICAgICAgY29uc29sZS53YXJuKGByZXNldFBhZ2VPbkVycm9yOiBxdWVyeUZvcm0uZm9ybS5jb250cm9sc1tcIiR7cGFnZUNvbnRyb2xLZXl9XCJdIGlzIHVuZGVmaW5lZGApO1xuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2UucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocSkgPT4ge1xuICAgICAgICBpZiAoIXEpIHtcbiAgICAgICAgICByZXR1cm4gb2YocSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcS5zdGF0ZSQucGlwZShcbiAgICAgICAgICB0YXAoKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzUXVlcnlTdGF0ZUZhaWx1cmUoc3RhdGUpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoIChzdGF0ZS5lcnJvci5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgLy8gVGhlIHBhZ2UgaXMgaW52YWxpZCAoaW4gcHJvZCBtb2RlLCBjb2RlIGlzIDQxNilcbiAgICAgICAgICAgICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5SYW5nZU5vdFNhdGlzZmlhYmxlOlxuICAgICAgICAgICAgICAgIHF1ZXJ5Rm9ybS5mb3JtLmNvbnRyb2xzW3BhZ2VDb250cm9sS2V5XT8ucGF0Y2hWYWx1ZSgxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAvLyBUaGUgcGFnZSBtaWdodCBiZSBpbnZhbGlkIChpbiBkZXYgbW9kZSwgY29kZSBpcyA1MDApXG4gICAgICAgICAgICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuSW50ZXJuYWxTZXJ2ZXJFcnJvcjpcbiAgICAgICAgICAgICAgICBpZiAoaXNTeW1mb255UGFnZXJmYW50YU91dE9mUmFuZ2VFcnJvcihzdGF0ZS5lcnJvci5kZXRhaWwpKSB7XG4gICAgICAgICAgICAgICAgICBxdWVyeUZvcm0uZm9ybS5jb250cm9sc1twYWdlQ29udHJvbEtleV0ucGF0Y2hWYWx1ZSgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsUmVzcG9uc2UoKSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCBpc1F1ZXJ5U3RhdGVMb2FkaW5nID0gKHN0YXRlOiBRdWVyeVN0YXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0YXRlIGlzIExvYWRpbmcgPT5cbiAgc3RhdGU/LnR5cGUgPT09IFF1ZXJ5U3RhdGVUeXBlLkxvYWRpbmc7XG5cbmV4cG9ydCBjb25zdCBpc1F1ZXJ5U3RhdGVTdWNjZXNzID0gKHN0YXRlOiBRdWVyeVN0YXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0YXRlIGlzIFN1Y2Nlc3MgPT5cbiAgc3RhdGU/LnR5cGUgPT09IFF1ZXJ5U3RhdGVUeXBlLlN1Y2Nlc3M7XG5cbmV4cG9ydCBjb25zdCBpc1F1ZXJ5U3RhdGVGYWlsdXJlID0gKHN0YXRlOiBRdWVyeVN0YXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0YXRlIGlzIEZhaWx1cmUgPT5cbiAgc3RhdGU/LnR5cGUgPT09IFF1ZXJ5U3RhdGVUeXBlLkZhaWx1cmU7XG5cbmV4cG9ydCBjb25zdCBpc1F1ZXJ5U3RhdGVDYW5jZWxsZWQgPSAoc3RhdGU6IFF1ZXJ5U3RhdGUgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RhdGUgaXMgQ2FuY2VsbGVkID0+XG4gIHN0YXRlPy50eXBlID09PSBRdWVyeVN0YXRlVHlwZS5DYW5jZWxsZWQ7XG5cbmV4cG9ydCBjb25zdCBpc1F1ZXJ5U3RhdGVQcmVwYXJlZCA9IChzdGF0ZTogUXVlcnlTdGF0ZSB8IG51bGwgfCB1bmRlZmluZWQpOiBzdGF0ZSBpcyBQcmVwYXJlZCA9PlxuICBzdGF0ZT8udHlwZSA9PT0gUXVlcnlTdGF0ZVR5cGUuUHJlcGFyZWQ7XG5cbmV4cG9ydCBjb25zdCBpc0F1dG9SZWZyZXNoID0gKHN0YXRlOiBRdWVyeVN0YXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT4gc3RhdGU/Lm1ldGEudHJpZ2dlcmVkVmlhID09PSAnYXV0byc7XG5cbmV4cG9ydCBjb25zdCBtZXJnZUhlYWRlcnMgPSAoLi4uaGVhZGVyczogQXJyYXk8UmVxdWVzdEhlYWRlcnMgfCBudWxsIHwgdW5kZWZpbmVkPikgPT4ge1xuICByZXR1cm4gaGVhZGVycy5yZWR1Y2UoKGFjYywgaGVhZGVycykgPT4ge1xuICAgIGlmICghaGVhZGVycykge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYWNjLFxuICAgICAgLi4uaGVhZGVycyxcbiAgICB9O1xuICB9LCB7fSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNHcWxRdWVyeUNvbmZpZyA9IDxcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFJvdXRlIGV4dGVuZHMgUm91dGVUeXBlPEFyZ3VtZW50cz4gfCB1bmRlZmluZWQsXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPihcbiAgY29uZmlnOiB1bmtub3duLFxuKTogY29uZmlnIGlzIEdxbFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+ID0+IHtcbiAgaWYgKCFjb25maWcgfHwgdHlwZW9mIGNvbmZpZyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShjb25maWcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ3F1ZXJ5JyBpbiBjb25maWcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgaXNRdWVyeSA9IDxUIGV4dGVuZHMgQW55UXVlcnk+KHF1ZXJ5OiB1bmtub3duKTogcXVlcnkgaXMgVCA9PiB7XG4gIGlmICghcXVlcnkgfHwgdHlwZW9mIHF1ZXJ5ICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHF1ZXJ5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdzdGF0ZSQnIGluIHF1ZXJ5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUXVlcnlDb2xsZWN0aW9uID0gPFQgZXh0ZW5kcyBBbnlRdWVyeUNvbGxlY3Rpb24+KHF1ZXJ5OiB1bmtub3duKTogcXVlcnkgaXMgVCA9PiB7XG4gIGlmICghcXVlcnkgfHwgdHlwZW9mIHF1ZXJ5ICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHF1ZXJ5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdxdWVyeScgaW4gcXVlcnkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgY3JlYXRlUXVlcnlDb2xsZWN0aW9uU3ViamVjdGAgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIHY2LlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUXVlcnlDb2xsZWN0aW9uID0gPFQgZXh0ZW5kcyBBbnlRdWVyeUNyZWF0b3JDb2xsZWN0aW9uLCBSIGV4dGVuZHMgUXVlcnlDb2xsZWN0aW9uT2Y8VD4+KFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHF1ZXJ5TWFwOiBULFxuKSA9PiBuZXcgQmVoYXZpb3JTdWJqZWN0PFIgfCBudWxsPihudWxsKTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVF1ZXJ5Q29sbGVjdGlvblN1YmplY3QgPSA8VCBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvckNvbGxlY3Rpb24sIFIgZXh0ZW5kcyBRdWVyeUNvbGxlY3Rpb25PZjxUPj4oXG4gIHF1ZXJ5TWFwOiBULFxuICBjb25maWc/OiBRdWVyeUNvbnRhaW5lckNvbmZpZyxcbikgPT4ge1xuICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoY3JlYXRlUXVlcnlDb2xsZWN0aW9uU3ViamVjdCk7XG5cbiAgY29uc3Qgc3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UiB8IG51bGw+KG51bGwpO1xuXG4gIGFkZFF1ZXJ5Q29udGFpbmVySGFuZGxpbmcoXG4gICAgc3ViamVjdC5waXBlKG1hcCgocykgPT4gcz8ucXVlcnkgPz8gbnVsbCkpLFxuICAgICgpID0+IHN1YmplY3QuZ2V0VmFsdWUoKT8ucXVlcnkgPz8gbnVsbCxcbiAgICBjb25maWcsXG4gICk7XG5cbiAgcmV0dXJuIHN1YmplY3Q7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUXVlcnlDb2xsZWN0aW9uU2lnbmFsID0gPFQgZXh0ZW5kcyBBbnlRdWVyeUNyZWF0b3JDb2xsZWN0aW9uLCBSIGV4dGVuZHMgUXVlcnlDb2xsZWN0aW9uT2Y8VD4+KFxuICBxdWVyeU1hcDogVCxcbiAgY29uZmlnPzogUXVlcnlDb250YWluZXJDb25maWcsXG4pID0+IHtcbiAgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGNyZWF0ZVF1ZXJ5Q29sbGVjdGlvblNpZ25hbCk7XG5cbiAgY29uc3QgX3NpZ25hbCA9IHNpZ25hbDxSIHwgbnVsbD4obnVsbCk7XG5cbiAgYWRkUXVlcnlDb250YWluZXJIYW5kbGluZyhcbiAgICB0b09ic2VydmFibGUoX3NpZ25hbCkucGlwZShtYXAoKHMpID0+IHM/LnF1ZXJ5ID8/IG51bGwpKSxcbiAgICAoKSA9PiBfc2lnbmFsKCk/LnF1ZXJ5ID8/IG51bGwsXG4gICAgY29uZmlnLFxuICApO1xuXG4gIHJldHVybiBfc2lnbmFsO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RRdWVyeSA9IDxUIGV4dGVuZHMgQW55UXVlcnkgfCBBbnlMZWdhY3lRdWVyeSB8IEFueVF1ZXJ5Q29sbGVjdGlvbiB8IG51bGw+KHY6IFQpID0+XG4gIChpc1F1ZXJ5KHYpID8gdiA6IGlzTGVnYWN5UXVlcnkodikgPyB2IDogdj8ucXVlcnkpID8/IG51bGw7XG5cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0SGVhZGVycyA9IChcbiAgaGVhZGVyczogUmVxdWVzdEhlYWRlcnMgfCBSZXF1ZXN0SGVhZGVyc01ldGhvZE1hcCB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG1ldGhvZDogTWV0aG9kLFxuKSA9PiB7XG4gIGlmICghaGVhZGVycykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGlmIChtZXRob2QgaW4gaGVhZGVycykge1xuICAgIHJldHVybiAoaGVhZGVyc1ttZXRob2RdID8/IHt9KSBhcyBSZXF1ZXN0SGVhZGVycztcbiAgfVxuXG4gIHJldHVybiBoZWFkZXJzIGFzIFJlcXVlc3RIZWFkZXJzO1xufTtcblxuZXhwb3J0IGNvbnN0IGNhc3RRdWVyeUNyZWF0b3JUeXBlcyA9IDxcbiAgUUMgZXh0ZW5kcyBBbnlRdWVyeUNyZWF0b3IsXG4gIEFyZ3VtZW50cyBleHRlbmRzIFF1ZXJ5QXJnc09mPFFDPixcbiAgUmVzcG9uc2UgZXh0ZW5kcyBRdWVyeVJlc3BvbnNlT2Y8UUM+LFxuICBTdG9yZSBleHRlbmRzIFF1ZXJ5U3RvcmVPZjxRQz4sXG4gIERhdGEgZXh0ZW5kcyBRdWVyeURhdGFPZjxRQz4sXG4gIFJvdXRlIGV4dGVuZHMgUm91dGVUeXBlPEFyZ3VtZW50cz4sXG4gIElkIGV4dGVuZHMgUXVlcnlTdG9yZUlkT2Y8UUM+LFxuICBPdmVycmlkZUFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIE92ZXJyaWRlUmVzcG9uc2UgZXh0ZW5kcyBSZXNwb25zZSB8IHVuZGVmaW5lZCxcbj4oY29uZmlnOiB7XG4gIGNyZWF0b3I6IFFDO1xuICBhcmdzPzogT3ZlcnJpZGVBcmd1bWVudHM7XG4gIHJlc3BvbnNlPzogT3ZlcnJpZGVSZXNwb25zZTtcbn0pID0+IHtcbiAgaWYgKGNvbmZpZy5hcmdzPy5wYXRoUGFyYW1zKSB7XG4gICAgY29uc29sZS5lcnJvcihjb25maWcpO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXRoIHBhcmFtcyBjYW5ub3QgYmUgb3ZlcnJpZGRlbiBpbiBjYXN0UXVlcnlDcmVhdG9yVHlwZXMuIENyZWF0ZSBhIG5ldyBxdWVyeSBjcmVhdG9yIGluc3RlYWQuJyk7XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmNyZWF0b3IgYXMgdW5rbm93biBhcyBRdWVyeUNyZWF0b3I8T3ZlcnJpZGVBcmd1bWVudHMsIE92ZXJyaWRlUmVzcG9uc2UsIFJvdXRlLCBTdG9yZSwgRGF0YSwgSWQ+O1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbXB1dGVRdWVyeU1ldGhvZCA9IChjb25maWc6IHsgY29uZmlnOiBBbnlSZXN0UXVlcnlDb25maWcgfCBBbnlHcWxRdWVyeUNvbmZpZzsgY2xpZW50OiBRdWVyeUNsaWVudCB9KSA9PiB7XG4gIGxldCBtZXRob2Q6IE1ldGhvZDtcblxuICBpZiAoaXNHcWxRdWVyeUNvbmZpZyhjb25maWcuY29uZmlnKSkge1xuICAgIGNvbnN0IHRyYW5zZmVyVmlhID0gY29uZmlnLmNvbmZpZy50cmFuc2ZlclZpYSA/PyBjb25maWcuY2xpZW50LmNvbmZpZy5yZXF1ZXN0Py5ncWw/LnRyYW5zZmVyVmlhO1xuICAgIG1ldGhvZCA9IHRyYW5zZm9ybU1ldGhvZCh7IG1ldGhvZDogY29uZmlnLmNvbmZpZy5tZXRob2QsIHRyYW5zZmVyVmlhIH0pO1xuICB9IGVsc2Uge1xuICAgIG1ldGhvZCA9IHRyYW5zZm9ybU1ldGhvZCh7IG1ldGhvZDogY29uZmlnLmNvbmZpZy5tZXRob2QgfSk7XG4gIH1cblxuICByZXR1cm4gbWV0aG9kO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbXB1dGVRdWVyeUJvZHkgPSAoY29uZmlnOiB7XG4gIGNvbmZpZzogQW55UmVzdFF1ZXJ5Q29uZmlnIHwgQW55R3FsUXVlcnlDb25maWc7XG4gIGNsaWVudDogUXVlcnlDbGllbnQ7XG4gIG1ldGhvZDogTWV0aG9kO1xuICBhcmdzPzogQmFzZUFyZ3VtZW50cztcbn0pID0+IHtcbiAgbGV0IGJvZHk6IHVua25vd247XG5cbiAgaWYgKFxuICAgIGNvbmZpZy5tZXRob2QgPT09ICdHRVQnIHx8XG4gICAgY29uZmlnLm1ldGhvZCA9PT0gJ0hFQUQnIHx8XG4gICAgY29uZmlnLm1ldGhvZCA9PT0gJ09QVElPTlMnIHx8XG4gICAgKGlzR3FsUXVlcnlDb25maWcoY29uZmlnLmNvbmZpZykgJiZcbiAgICAgIChjb25maWcuY29uZmlnLnRyYW5zZmVyVmlhID09PSAnR0VUJyB8fFxuICAgICAgICAoY29uZmlnLmNsaWVudC5jb25maWcucmVxdWVzdD8uZ3FsPy50cmFuc2ZlclZpYSA9PT0gJ0dFVCcgJiYgIWNvbmZpZy5jb25maWcudHJhbnNmZXJWaWEpKSlcbiAgKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChpc0dxbFF1ZXJ5Q29uZmlnKGNvbmZpZy5jb25maWcpKSB7XG4gICAgY29uc3QgcXVlcnlUZW1wbGF0ZSA9IGNvbmZpZy5jb25maWcucXVlcnk7XG4gICAgY29uc3QgcXVlcnkgPSB0cmFuc2Zvcm1HcWwocXVlcnlUZW1wbGF0ZSk7XG5cbiAgICBib2R5ID0gcXVlcnkoY29uZmlnLmFyZ3M/LnZhcmlhYmxlcyk7XG4gIH0gZWxzZSB7XG4gICAgYm9keSA9IGNvbmZpZy5hcmdzPy5ib2R5O1xuICB9XG5cbiAgcmV0dXJuIGJvZHk7XG59O1xuXG5leHBvcnQgY29uc3QgY29tcHV0ZVF1ZXJ5QXV0aEhlYWRlciA9IChjb25maWc6IHtcbiAgY29uZmlnOiBBbnlSZXN0UXVlcnlDb25maWcgfCBBbnlHcWxRdWVyeUNvbmZpZztcbiAgY2xpZW50OiBRdWVyeUNsaWVudDtcbn0pID0+IHtcbiAgbGV0IGF1dGhIZWFkZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBudWxsID0gbnVsbDtcblxuICBpZiAoY29uZmlnLmNvbmZpZy5zZWN1cmUpIHtcbiAgICBjb25zdCBoZWFkZXIgPSBjb25maWcuY2xpZW50LmF1dGhQcm92aWRlcj8uaGVhZGVyO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgYXV0aEhlYWRlciA9IGhlYWRlcjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29uZmlnLmNsaWVudC5hdXRoUHJvdmlkZXI/LmhlYWRlcikge1xuICAgIGlmIChjb25maWcuY29uZmlnLnNlY3VyZSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5jb25maWcuc2VjdXJlKSB7XG4gICAgICBhdXRoSGVhZGVyID0gY29uZmlnLmNsaWVudC5hdXRoUHJvdmlkZXIuaGVhZGVyO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhdXRoSGVhZGVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbXB1dGVRdWVyeUhlYWRlcnMgPSAoY29uZmlnOiB7XG4gIGNvbmZpZzogQW55UmVzdFF1ZXJ5Q29uZmlnIHwgQW55R3FsUXVlcnlDb25maWc7XG4gIGNsaWVudDogUXVlcnlDbGllbnQ7XG4gIGFyZ3M/OiBCYXNlQXJndW1lbnRzO1xufSkgPT4ge1xuICBjb25zdCBhdXRoSGVhZGVyID0gY29tcHV0ZVF1ZXJ5QXV0aEhlYWRlcihjb25maWcpO1xuXG4gIGNvbnN0IG1lcmdlZEhlYWRlcnMgPVxuICAgIG1lcmdlSGVhZGVycyhcbiAgICAgIGdldERlZmF1bHRIZWFkZXJzKGNvbmZpZy5jbGllbnQuY29uZmlnLnJlcXVlc3Q/LmhlYWRlcnMsIGNvbmZpZy5jb25maWcubWV0aG9kKSxcbiAgICAgIGF1dGhIZWFkZXIsXG4gICAgICBjb25maWcuYXJncz8uaGVhZGVycyxcbiAgICApIHx8IHVuZGVmaW5lZDtcblxuICByZXR1cm4gbWVyZ2VkSGVhZGVycztcbn07XG5cbmV4cG9ydCBjb25zdCBjb21wdXRlUXVlcnlRdWVyeVBhcmFtcyA9IChjb25maWc6IHtcbiAgY29uZmlnOiBBbnlSZXN0UXVlcnlDb25maWcgfCBBbnlHcWxRdWVyeUNvbmZpZztcbiAgY2xpZW50OiBRdWVyeUNsaWVudDtcbiAgYXJncz86IEJhc2VBcmd1bWVudHM7XG59KSA9PiB7XG4gIGlmIChcbiAgICBpc0dxbFF1ZXJ5Q29uZmlnKGNvbmZpZy5jb25maWcpICYmXG4gICAgKGNvbmZpZy5jb25maWcudHJhbnNmZXJWaWEgPT09ICdHRVQnIHx8XG4gICAgICAoY29uZmlnLmNsaWVudC5jb25maWcucmVxdWVzdD8uZ3FsPy50cmFuc2ZlclZpYSA9PT0gJ0dFVCcgJiYgIWNvbmZpZy5jb25maWcudHJhbnNmZXJWaWEpKVxuICApIHtcbiAgICBjb25zdCBxdWVyeVRlbXBsYXRlID0gY29uZmlnLmNvbmZpZy5xdWVyeTtcbiAgICBjb25zdCBxdWVyeSA9IHRyYW5zZm9ybUdxbChxdWVyeVRlbXBsYXRlKTtcblxuICAgIGxldCBwYXJhbXMgPSBxdWVyeShjb25maWcuYXJncz8udmFyaWFibGVzKTtcblxuICAgIGlmIChjb25maWcuYXJncz8ucXVlcnlQYXJhbXMpIHtcbiAgICAgIHBhcmFtcyA9IHsgLi4ucGFyYW1zLCAuLi5jb25maWcuYXJncz8ucXVlcnlQYXJhbXMgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5hcmdzPy5xdWVyeVBhcmFtcztcbn07XG5cbmV4cG9ydCBjb25zdCBwYWdpbmF0ZWRFbnRpdHlWYWx1ZVVwZGF0ZXIgPVxuICA8XG4gICAgVCBleHRlbmRzIFBhZ2luYXRlZDx1bmtub3duPixcbiAgICBBcmdzIGV4dGVuZHMgQmFzZUFyZ3VtZW50cyxcbiAgICBFbnRpdHksXG4gICAgSiBleHRlbmRzIFQgZXh0ZW5kcyBQYWdpbmF0ZWQ8aW5mZXIgWD4gPyBYIDogbmV2ZXIsXG4gID4oXG4gICAgZmluZEZuOiAodmFsOiBKLCBlbnRpdHk6IEVudGl0eSkgPT4gYm9vbGVhbixcbiAgKSA9PlxuICAoeyByZXNwb25zZSwgcmF3UmVzcG9uc2UsIGVudGl0eSB9OiB7IHJhd1Jlc3BvbnNlOiBUOyByZXNwb25zZTogVDsgYXJnczogQXJnczsgZW50aXR5OiBFbnRpdHkgfSkgPT4ge1xuICAgIGNvbnN0IGluZGV4T2ZFbnRpdHlSYXcgPSByYXdSZXNwb25zZS5pdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGZpbmRGbihpdGVtIGFzIEosIGVudGl0eSkpO1xuICAgIGNvbnN0IGluZGV4T2ZFbnRpdHkgPSByZXNwb25zZS5pdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGZpbmRGbihpdGVtIGFzIEosIGVudGl0eSkpO1xuXG4gICAgaWYgKGluZGV4T2ZFbnRpdHkgPT09IC0xIHx8IGluZGV4T2ZFbnRpdHlSYXcgPT09IC0xKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdSYXdSZXNwb25zZSA9IHtcbiAgICAgIC4uLnJhd1Jlc3BvbnNlLFxuICAgICAgaXRlbXM6IFtcbiAgICAgICAgLi4ucmF3UmVzcG9uc2UuaXRlbXMuc2xpY2UoMCwgaW5kZXhPZkVudGl0eVJhdyksXG4gICAgICAgIGVudGl0eSxcbiAgICAgICAgLi4ucmF3UmVzcG9uc2UuaXRlbXMuc2xpY2UoaW5kZXhPZkVudGl0eVJhdyArIDEpLFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgY29uc3QgbmV3UmVzcG9uc2UgPSB7XG4gICAgICAuLi5yZXNwb25zZSxcbiAgICAgIGl0ZW1zOiBbLi4ucmVzcG9uc2UuaXRlbXMuc2xpY2UoMCwgaW5kZXhPZkVudGl0eSksIGVudGl0eSwgLi4ucmVzcG9uc2UuaXRlbXMuc2xpY2UoaW5kZXhPZkVudGl0eSArIDEpXSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3BvbnNlOiBuZXdSZXNwb25zZSxcbiAgICAgIHJhd1Jlc3BvbnNlOiBuZXdSYXdSZXNwb25zZSxcbiAgICB9O1xuICB9O1xuIl19","import { HttpStatusCode } from '@angular/common/http';\nimport { untracked } from '@angular/core';\nimport { BehaviorSubject, combineLatest, filter, interval, map, of, ReplaySubject, shareReplay, skip, Subject, switchMap, take, takeUntil, takeWhile, tap, timer, } from 'rxjs';\nimport { isBearerAuthProvider } from '../auth';\nimport { shouldCacheQuery } from '../query-client';\nimport { request } from '../request';\nimport { computeQueryBody, computeQueryHeaders, computeQueryMethod, filterFailure, filterSuccess, isGqlQueryConfig, isQueryStateCancelled, isQueryStateFailure, isQueryStateLoading, isQueryStatePrepared, isQueryStateSuccess, switchQueryState, takeUntilResponse, } from './query.utils';\nlet _nextQueryId = 0;\nexport class Query {\n get _nextId() {\n return ++this._currentLocalId;\n }\n get state$() {\n return this._state$.pipe(tap((s) => {\n if (!this._client.config.logging?.preparedQuerySubscriptions)\n return;\n if (isQueryStatePrepared(s)) {\n console.warn(`Query ${this._routeWithParams} was subscribed to in the prepared state. Did you forget to call .execute()?`);\n }\n }), switchMap((s) => this._transformState(s)), shareReplay({ bufferSize: 1, refCount: true }));\n }\n /**\n * The current state of the query.\n *\n * **Warning!** This differs from the `state$` observable in that it does not use the query store. Thus, the response data might be outdated.\n * Use `state$` (or `firstValueFrom(state$)`) the most up-to-date data.\n */\n get rawState() {\n return this._state$.value;\n }\n get isExpired() {\n if (isQueryStateLoading(this.rawState)) {\n return false;\n }\n if (isQueryStatePrepared(this.rawState) ||\n isQueryStateCancelled(this.rawState) ||\n isQueryStateFailure(this.rawState)) {\n return true;\n }\n const ts = this.rawState.meta.expiresAt;\n if (!ts) {\n return true;\n }\n return ts < Date.now();\n }\n get isInUse() {\n return this._state$.observed || Object.keys(this._dependents).length > 0;\n }\n /**\n * @internal\n */\n get _subscriberCount() {\n return this._state$.observers.length;\n }\n get isPolling() {\n return !!this._pollingSubscription;\n }\n get autoRefreshOnConfig() {\n const base = this._queryConfig.autoRefreshOn ?? {};\n const transformed = {\n queryClientDefaultHeadersChange: base.queryClientDefaultHeadersChange ?? true,\n windowFocus: base.windowFocus ?? true,\n };\n return transformed;\n }\n /**\n * @internal\n */\n get _enableSmartPolling() {\n return this._queryConfig.enableSmartPolling ?? true;\n }\n get store() {\n return this._queryConfig.entity?.store ?? null;\n }\n get canBeCached() {\n return shouldCacheQuery(this._queryConfig.method);\n }\n get _isInMockMode() {\n return !!this._arguments?.mock;\n }\n constructor(_client, \n /**\n * @internal\n */\n _queryConfig, \n /**\n * @internal\n */\n _routeWithParams, \n /**\n * @internal\n */\n _arguments, \n /**\n * @internal\n */\n _queryStoreKey) {\n this._client = _client;\n this._queryConfig = _queryConfig;\n this._routeWithParams = _routeWithParams;\n this._arguments = _arguments;\n this._queryStoreKey = _queryStoreKey;\n this._id = _nextQueryId++;\n this._currentLocalId = 0;\n this._pollingSubscription = null;\n this._onAbort$ = new Subject();\n this._currentPollConfig = null;\n /**\n * @internal\n * Used to track which components depend on this query.\n * The key is the component's _tNode index.\n * The value is the number of times the component has subscribed to this query.\n * The value might increase since we cant distinguish between a component and a host directive applied to it.\n */\n this._dependents = {};\n /**\n * @internal\n */\n this._dependentsChanged$ = new ReplaySubject();\n /**\n * @internal\n */\n this._isPollingPaused = false;\n this._state$ = new BehaviorSubject({\n type: \"PREPARED\" /* QueryStateType.Prepared */,\n meta: { id: this._currentLocalId, triggeredVia: 'program' },\n });\n }\n execute(options = {}) {\n const { skipCache = false, _triggeredVia: triggeredVia = 'program', cancelPrevious = false } = options;\n const { authProvider } = this._client;\n const queryConfig = this._queryConfig;\n if (!this.isExpired && !skipCache && isQueryStateSuccess(this.rawState)) {\n return this;\n }\n if (queryConfig.secure && !authProvider && !this._isInMockMode) {\n throw new Error('Cannot execute secure query without auth provider');\n }\n const id = this._nextId;\n const meta = { id, triggeredVia };\n if (isQueryStateLoading(this.rawState)) {\n if (cancelPrevious) {\n this.abort();\n }\n else {\n return this;\n }\n }\n this._updateState({ type: \"LOADING\" /* QueryStateType.Loading */, meta });\n if (this._isInMockMode) {\n this._mockRequest({}, meta, options);\n }\n else {\n let goSignal = of(true);\n if (authProvider &&\n isBearerAuthProvider(authProvider) &&\n queryConfig.secure &&\n !isQueryStateSuccess(authProvider.currentRefreshQuery?.rawState)) {\n // On page load the query might be executed before the auth provider has been initialized.\n // In this case we need to wait for the auth provider to be ready before we can execute the query.\n goSignal = combineLatest([\n // The tokens might get set without a refresh query being created (e.g.) directly after login.\n authProvider.currentRefreshQuery$.pipe(switchQueryState(), takeUntilResponse()),\n authProvider.tokens$.pipe(take(1)),\n ]).pipe(takeUntil(this._onAbort$), filter(([state, tokens]) => {\n if (state) {\n return !isQueryStateLoading(state);\n }\n return !!tokens;\n }), tap(([state]) => {\n if (isQueryStateFailure(state)) {\n this._updateEntityState({ type: 'failure', error: state.error, headers: {} }, meta, options);\n }\n }), map(() => true), take(1));\n }\n goSignal\n .pipe(switchMap(() => {\n const method = computeQueryMethod({ config: queryConfig, client: this._client });\n const body = computeQueryBody({ config: queryConfig, client: this._client, args: this._arguments, method });\n const headers = computeQueryHeaders({ client: this._client, config: queryConfig, args: this._arguments });\n return request({\n urlWithParams: this._routeWithParams,\n method,\n body,\n headers,\n reportProgress: queryConfig.reportProgress,\n responseType: queryConfig.responseType,\n withCredentials: queryConfig.withCredentials,\n cacheAdapter: this._client.config.request?.cacheAdapter,\n retryFn: this._client.config.request?.retryFn,\n }).pipe(tap((state) => this._updateEntityState(state, meta, options)), takeUntil(this._onAbort$));\n }))\n .subscribe();\n }\n return this;\n }\n abort() {\n if (!isQueryStateLoading(this.rawState)) {\n return this;\n }\n this._onAbort$.next();\n this._updateState({\n type: \"CANCELLED\" /* QueryStateType.Cancelled */,\n meta: { id: this.rawState.meta.id, triggeredVia: this.rawState.meta.triggeredVia },\n });\n return this;\n }\n poll(config) {\n if (this._pollingSubscription) {\n return this;\n }\n this._currentPollConfig = config;\n const interval$ = interval(config.interval);\n const poll$ = interval$.pipe(skip(config.triggerImmediately ? 0 : 1), takeUntil(config.takeUntil), takeWhile(() => !this._isPollingPaused), filter(() => !isQueryStateLoading(this._state$.value)));\n this._pollingSubscription = poll$.subscribe({\n next: () => this.execute({ skipCache: true, _triggeredVia: 'poll' }),\n complete: () => this.stopPolling(),\n });\n return this;\n }\n stopPolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._currentPollConfig = null;\n return this;\n }\n pausePolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._isPollingPaused = true;\n return this;\n }\n resumePolling() {\n if (!this._isPollingPaused || !this._currentPollConfig) {\n return this;\n }\n this._isPollingPaused = false;\n return this.poll({ ...this._currentPollConfig, triggerImmediately: true });\n }\n onSuccess(callback) {\n this.state$.pipe(takeUntilResponse(), filterSuccess()).subscribe((state) => callback(state.response));\n return this;\n }\n onFailure(callback) {\n this.state$.pipe(takeUntilResponse(), filterFailure()).subscribe((state) => callback(state.error));\n return this;\n }\n _getBearerAuthProvider() {\n const authProvider = this._client.authProvider;\n if (authProvider && isBearerAuthProvider(authProvider)) {\n return authProvider;\n }\n return null;\n }\n _updateEntityState(requestEvent, meta, options) {\n switch (requestEvent.type) {\n case 'start':\n case 'delay-retry': {\n const { type, retryDelay, retryNumber } = requestEvent;\n const newMeta = { ...meta, isWaitingForRetry: type === 'delay-retry', retryDelay, retryNumber };\n this._updateState({\n type: \"LOADING\" /* QueryStateType.Loading */,\n meta: newMeta,\n });\n break;\n }\n case 'upload-progress':\n case 'download-progress': {\n this._updateState({\n type: \"LOADING\" /* QueryStateType.Loading */,\n progress: requestEvent.progress,\n partialText: 'partialText' in requestEvent ? requestEvent.partialText : undefined,\n meta,\n });\n break;\n }\n case 'success': {\n const { response, expiresInTimestamp, headers } = requestEvent;\n const isGql = isGqlQueryConfig(this._queryConfig);\n const responseData = isGql && typeof response === 'object' && !!response && 'data' in response\n ? response['data']\n : response;\n if (this._queryConfig.entity && this._queryConfig.entity.set) {\n const id = this._queryConfig.entity?.id({ args: this._arguments, response: responseData });\n this._queryConfig.entity?.set({\n args: this._arguments,\n response: responseData,\n id,\n store: this._queryConfig.entity.store,\n });\n }\n this._updateState({\n type: \"SUCCESS\" /* QueryStateType.Success */,\n response: responseData,\n headers: headers,\n meta: { ...meta, expiresAt: expiresInTimestamp },\n });\n break;\n }\n case 'failure': {\n const { error } = requestEvent;\n const failure = () => this._updateState({ type: \"FAILURE\" /* QueryStateType.Failure */, error, meta });\n const bearerAuthProvider = this._getBearerAuthProvider();\n if (!bearerAuthProvider ||\n options?._isUnauthorizedRetry ||\n error.status !== HttpStatusCode.Unauthorized ||\n !bearerAuthProvider.shouldRefreshOnUnauthorizedResponse) {\n return failure();\n }\n const query = bearerAuthProvider._refreshQuery();\n if (!query)\n return failure();\n query.state$\n .pipe(takeUntilResponse(), takeUntil(this._onAbort$), tap((state) => isQueryStateSuccess(state) ? this.execute({ ...options, _isUnauthorizedRetry: true }) : failure()))\n .subscribe();\n break;\n }\n case 'cancel': {\n this._updateState({\n type: \"CANCELLED\" /* QueryStateType.Cancelled */,\n meta,\n });\n break;\n }\n }\n }\n _transformState(s) {\n if (!isQueryStateSuccess(s) || !this._queryConfig.entity?.get) {\n return of(s);\n }\n const id = this._queryConfig.entity.id({ args: this._arguments, response: s.response });\n return this._queryConfig.entity\n .get({ args: this._arguments, id, response: s.response, store: this._queryConfig.entity.store })\n .pipe(map((v) => ({ ...s, response: v })));\n }\n _updateState(s) {\n // We need to use untracked here to avoid Angular's \"allowSignalWrites is false\" error when executing queries inside Angular's computed/effect signal functions.\n untracked(() => this._state$.next(s));\n }\n _mockRequest(headers, meta, options) {\n if (!this._arguments?.mock)\n return;\n const { delay = 200, error, response, retryIntoResponse = false, progress } = this._arguments.mock;\n const progressFileSize = progress?.fileSize ?? 1000000;\n const progressEventType = progress?.eventType ?? 'upload';\n const progressEventCount = progress?.eventCount ?? 5;\n const progressOmitTotal = progress?.omitTotal ?? false;\n const omitPartialText = progress?.omitPartialText ?? false;\n const finalResolveMock = () => {\n if (error) {\n this._updateEntityState({ error, headers: headers ?? {}, type: 'failure' }, meta, options);\n return;\n }\n this._updateEntityState({ response: response, headers: headers ?? {}, type: 'success' }, meta, options);\n };\n if (progress) {\n interval(delay)\n .pipe(tap((a) => {\n if (a === progressEventCount + 1) {\n finalResolveMock();\n }\n else {\n const current = Math.min(progressFileSize * a, progressFileSize * progressEventCount);\n const percentage = (current / (progressFileSize * progressEventCount)) * 100;\n this._updateEntityState({\n type: progressEventType === 'upload' ? 'upload-progress' : 'download-progress',\n headers: headers ?? {},\n progress: { current, ...(progressOmitTotal ? {} : { percentage, total: progressFileSize }) },\n partialText: omitPartialText ? undefined : `Partial text ${a}`,\n }, meta, options);\n }\n }), takeUntil(this._onAbort$), takeWhile((a) => a < progressEventCount + 1, true))\n .subscribe();\n }\n else if (retryIntoResponse) {\n interval(delay)\n .pipe(tap((a) => {\n if (a === 3) {\n finalResolveMock();\n }\n else {\n const aModified = a + 1;\n this._updateEntityState({\n type: 'delay-retry',\n headers: headers ?? {},\n retryDelay: 1000 + 1000 * aModified,\n retryNumber: aModified,\n }, meta, options);\n }\n }), takeUntil(this._onAbort$), takeWhile((a) => a < 3, true))\n .subscribe();\n }\n else {\n timer(delay)\n .pipe(tap(() => finalResolveMock()), takeUntil(this._onAbort$))\n .subscribe();\n }\n }\n /**\n * @internal\n */\n _addDependent(tNodeIndex) {\n if (!this._dependents[tNodeIndex]) {\n this._dependents[tNodeIndex] = 0;\n }\n this._dependents[tNodeIndex]++;\n this._dependentsChanged$.next(this._dependents);\n }\n /**\n * @internal\n */\n _removeDependent(tNodeIndex) {\n const count = this._dependents[tNodeIndex];\n if (count === undefined) {\n return;\n }\n if (this._dependents[tNodeIndex] !== undefined) {\n this._dependents[tNodeIndex]--;\n }\n if (count <= 1) {\n delete this._dependents[tNodeIndex];\n }\n this._dependentsChanged$.next(this._dependents);\n }\n /**\n * @internal\n */\n _hasDependents() {\n return Object.keys(this._dependents).length > 0;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnkvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsTUFBTSxFQUNOLFFBQVEsRUFDUixHQUFHLEVBRUgsRUFBRSxFQUNGLGFBQWEsRUFDYixXQUFXLEVBQ1gsSUFBSSxFQUNKLE9BQU8sRUFFUCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNILEtBQUssR0FDTixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUvQyxPQUFPLEVBQWUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUE4QyxNQUFNLFlBQVksQ0FBQztBQWFqRixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQUVyQixNQUFNLE9BQU8sS0FBSztJQXVDaEIsSUFBWSxPQUFPO1FBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxD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QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxVQUFrQjtRQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBRUQsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFN0YXR1c0NvZGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZmlsdGVyLFxuICBpbnRlcnZhbCxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgUmVwbGF5U3ViamVjdCxcbiAgc2hhcmVSZXBsYXksXG4gIHNraXAsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRha2VXaGlsZSxcbiAgdGFwLFxuICB0aW1lcixcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0JlYXJlckF1dGhQcm92aWRlciB9IGZyb20gJy4uL2F1dGgnO1xuaW1wb3J0IHsgRW50aXR5U3RvcmUgfSBmcm9tICcuLi9lbnRpdHknO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIHNob3VsZENhY2hlUXVlcnkgfSBmcm9tICcuLi9xdWVyeS1jbGllbnQnO1xuaW1wb3J0IHsgcmVxdWVzdCwgUmVxdWVzdEVycm9yLCBSZXF1ZXN0RXZlbnQsIFJlcXVlc3RIZWFkZXJzIH0gZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQge1xuICBCYXNlQXJndW1lbnRzLFxuICBFeGVjdXRlUXVlcnlPcHRpb25zLFxuICBHcWxRdWVyeUNvbmZpZyxcbiAgUG9sbENvbmZpZyxcbiAgUXVlcnlBdXRvUmVmcmVzaENvbmZpZyxcbiAgUXVlcnlTdGF0ZSxcbiAgUXVlcnlTdGF0ZU1ldGEsXG4gIFF1ZXJ5U3RhdGVUeXBlLFxuICBSZXN0UXVlcnlDb25maWcsXG4gIFJvdXRlVHlwZSxcbn0gZnJvbSAnLi9xdWVyeS50eXBlcyc7XG5pbXBvcnQge1xuICBjb21wdXRlUXVlcnlCb2R5LFxuICBjb21wdXRlUXVlcnlIZWFkZXJzLFxuICBjb21wdXRlUXVlcnlNZXRob2QsXG4gIGZpbHRlckZhaWx1cmUsXG4gIGZpbHRlclN1Y2Nlc3MsXG4gIGlzR3FsUXVlcnlDb25maWcsXG4gIGlzUXVlcnlTdGF0ZUNhbmNlbGxlZCxcbiAgaXNRdWVyeVN0YXRlRmFpbHVyZSxcbiAgaXNRdWVyeVN0YXRlTG9hZGluZyxcbiAgaXNRdWVyeVN0YXRlUHJlcGFyZWQsXG4gIGlzUXVlcnlTdGF0ZVN1Y2Nlc3MsXG4gIHN3aXRjaFF1ZXJ5U3RhdGUsXG4gIHRha2VVbnRpbFJlc3BvbnNlLFxufSBmcm9tICcuL3F1ZXJ5LnV0aWxzJztcblxubGV0IF9uZXh0UXVlcnlJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeTxcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFJvdXRlIGV4dGVuZHMgUm91dGVUeXBlPEFyZ3VtZW50cz4sXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiB7XG4gIHJlYWRvbmx5IF9pZCA9IF9uZXh0UXVlcnlJZCsrO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRMb2NhbElkID0gMDtcbiAgcHJpdmF0ZSBfcG9sbGluZ1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX29uQWJvcnQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfY3VycmVudFBvbGxDb25maWc6IFBvbGxDb25maWcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFVzZWQgdG8gdHJhY2sgd2hpY2ggY29tcG9uZW50cyBkZXBlbmQgb24gdGhpcyBxdWVyeS5cbiAgICogVGhlIGtleSBpcyB0aGUgY29tcG9uZW50J3MgX3ROb2RlIGluZGV4LlxuICAgKiBUaGUgdmFsdWUgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgY29tcG9uZW50IGhhcyBzdWJzY3JpYmVkIHRvIHRoaXMgcXVlcnkuXG4gICAqIFRoZSB2YWx1ZSBtaWdodCBpbmNyZWFzZSBzaW5jZSB3ZSBjYW50IGRpc3Rpbmd1aXNoIGJldHdlZW4gYSBjb21wb25lbnQgYW5kIGEgaG9zdCBkaXJlY3RpdmUgYXBwbGllZCB0byBpdC5cbiAgICovXG4gIF9kZXBlbmRlbnRzOiBSZWNvcmQ8bnVtYmVyLCBudW1iZXI+ID0ge307XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2RlcGVuZGVudHNDaGFuZ2VkJCA9IG5ldyBSZXBsYXlTdWJqZWN0PFJlY29yZDxudW1iZXIsIG51bWJlcj4+KCk7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2lzUG9sbGluZ1BhdXNlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVlcnlTdGF0ZTxSZXNwb25zZT4+KHtcbiAgICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5QcmVwYXJlZCxcbiAgICBtZXRhOiB7IGlkOiB0aGlzLl9jdXJyZW50TG9jYWxJZCwgdHJpZ2dlcmVkVmlhOiAncHJvZ3JhbScgfSxcbiAgfSk7XG5cbiAgcHJpdmF0ZSBnZXQgX25leHRJZCgpIHtcbiAgICByZXR1cm4gKyt0aGlzLl9jdXJyZW50TG9jYWxJZDtcbiAgfVxuXG4gIGdldCBzdGF0ZSQoKTogT2JzZXJ2YWJsZTxRdWVyeVN0YXRlPERhdGE+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgdGFwKChzKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5fY2xpZW50LmNvbmZpZy5sb2dnaW5nPy5wcmVwYXJlZFF1ZXJ5U3Vic2NyaXB0aW9ucykgcmV0dXJuO1xuXG4gICAgICAgIGlmIChpc1F1ZXJ5U3RhdGVQcmVwYXJlZChzKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBRdWVyeSAke3RoaXMuX3JvdXRlV2l0aFBhcmFtc30gd2FzIHN1YnNjcmliZWQgdG8gaW4gdGhlIHByZXBhcmVkIHN0YXRlLiBEaWQgeW91IGZvcmdldCB0byBjYWxsIC5leGVjdXRlKCk/YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHN3aXRjaE1hcCgocykgPT4gdGhpcy5fdHJhbnNmb3JtU3RhdGUocykpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBxdWVyeS5cbiAgICpcbiAgICogKipXYXJuaW5nISoqIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBgc3RhdGUkYCBvYnNlcnZhYmxlIGluIHRoYXQgaXQgZG9lcyBub3QgdXNlIHRoZSBxdWVyeSBzdG9yZS4gVGh1cywgdGhlIHJlc3BvbnNlIGRhdGEgbWlnaHQgYmUgb3V0ZGF0ZWQuXG4gICAqIFVzZSBgc3RhdGUkYCAob3IgYGZpcnN0VmFsdWVGcm9tKHN0YXRlJClgKSB0aGUgbW9zdCB1cC10by1kYXRlIGRhdGEuXG4gICAqL1xuICBnZXQgcmF3U3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBpc0V4cGlyZWQoKSB7XG4gICAgaWYgKGlzUXVlcnlTdGF0ZUxvYWRpbmcodGhpcy5yYXdTdGF0ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpc1F1ZXJ5U3RhdGVQcmVwYXJlZCh0aGlzLnJhd1N0YXRlKSB8fFxuICAgICAgaXNRdWVyeVN0YXRlQ2FuY2VsbGVkKHRoaXMucmF3U3RhdGUpIHx8XG4gICAgICBpc1F1ZXJ5U3RhdGVGYWlsdXJlKHRoaXMucmF3U3RhdGUpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0cyA9IHRoaXMucmF3U3RhdGUubWV0YS5leHBpcmVzQXQ7XG5cbiAgICBpZiAoIXRzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHMgPCBEYXRlLm5vdygpO1xuICB9XG5cbiAgZ2V0IGlzSW5Vc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5vYnNlcnZlZCB8fCBPYmplY3Qua2V5cyh0aGlzLl9kZXBlbmRlbnRzKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IF9zdWJzY3JpYmVyQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5vYnNlcnZlcnMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGlzUG9sbGluZygpIHtcbiAgICByZXR1cm4gISF0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGF1dG9SZWZyZXNoT25Db25maWcoKSB7XG4gICAgY29uc3QgYmFzZSA9IHRoaXMuX3F1ZXJ5Q29uZmlnLmF1dG9SZWZyZXNoT24gPz8ge307XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZDogUmVhZG9ubHk8UXVlcnlBdXRvUmVmcmVzaENvbmZpZz4gPSB7XG4gICAgICBxdWVyeUNsaWVudERlZmF1bHRIZWFkZXJzQ2hhbmdlOiBiYXNlLnF1ZXJ5Q2xpZW50RGVmYXVsdEhlYWRlcnNDaGFuZ2UgPz8gdHJ1ZSxcbiAgICAgIHdpbmRvd0ZvY3VzOiBiYXNlLndpbmRvd0ZvY3VzID8/IHRydWUsXG4gICAgfTtcblxuICAgIHJldHVybiB0cmFuc2Zvcm1lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBfZW5hYmxlU21hcnRQb2xsaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeUNvbmZpZy5lbmFibGVTbWFydFBvbGxpbmcgPz8gdHJ1ZTtcbiAgfVxuXG4gIGdldCBzdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlDb25maWcuZW50aXR5Py5zdG9yZSA/PyBudWxsO1xuICB9XG5cbiAgZ2V0IGNhbkJlQ2FjaGVkKCkge1xuICAgIHJldHVybiBzaG91bGRDYWNoZVF1ZXJ5KHRoaXMuX3F1ZXJ5Q29uZmlnLm1ldGhvZCk7XG4gIH1cblxuICBnZXQgX2lzSW5Nb2NrTW9kZSgpIHtcbiAgICByZXR1cm4gISF0aGlzLl9hcmd1bWVudHM/Lm1vY2s7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnQ6IFF1ZXJ5Q2xpZW50LFxuXG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IF9xdWVyeUNvbmZpZzpcbiAgICAgIHwgUmVzdFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+XG4gICAgICB8IEdxbFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+LFxuXG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IF9yb3V0ZVdpdGhQYXJhbXM6IFJvdXRlLFxuXG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IF9hcmd1bWVudHM6IEFyZ3VtZW50cyxcblxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBfcXVlcnlTdG9yZUtleTogc3RyaW5nLFxuICApIHt9XG5cbiAgZXhlY3V0ZShvcHRpb25zOiBFeGVjdXRlUXVlcnlPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7IHNraXBDYWNoZSA9IGZhbHNlLCBfdHJpZ2dlcmVkVmlhOiB0cmlnZ2VyZWRWaWEgPSAncHJvZ3JhbScsIGNhbmNlbFByZXZpb3VzID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgeyBhdXRoUHJvdmlkZXIgfSA9IHRoaXMuX2NsaWVudDtcbiAgICBjb25zdCBxdWVyeUNvbmZpZyA9IHRoaXMuX3F1ZXJ5Q29uZmlnO1xuXG4gICAgaWYgKCF0aGlzLmlzRXhwaXJlZCAmJiAhc2tpcENhY2hlICYmIGlzUXVlcnlTdGF0ZVN1Y2Nlc3ModGhpcy5yYXdTdGF0ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmIChxdWVyeUNvbmZpZy5zZWN1cmUgJiYgIWF1dGhQcm92aWRlciAmJiAhdGhpcy5faXNJbk1vY2tNb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBleGVjdXRlIHNlY3VyZSBxdWVyeSB3aXRob3V0IGF1dGggcHJvdmlkZXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZCA9IHRoaXMuX25leHRJZDtcbiAgICBjb25zdCBtZXRhOiBRdWVyeVN0YXRlTWV0YSA9IHsgaWQsIHRyaWdnZXJlZFZpYSB9O1xuXG4gICAgaWYgKGlzUXVlcnlTdGF0ZUxvYWRpbmcodGhpcy5yYXdTdGF0ZSkpIHtcbiAgICAgIGlmIChjYW5jZWxQcmV2aW91cykge1xuICAgICAgICB0aGlzLmFib3J0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVTdGF0ZSh7IHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkxvYWRpbmcsIG1ldGEgfSk7XG5cbiAgICBpZiAodGhpcy5faXNJbk1vY2tNb2RlKSB7XG4gICAgICB0aGlzLl9tb2NrUmVxdWVzdCh7fSwgbWV0YSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBnb1NpZ25hbCA9IG9mKHRydWUpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGF1dGhQcm92aWRlciAmJlxuICAgICAgICBpc0JlYXJlckF1dGhQcm92aWRlcihhdXRoUHJvdmlkZXIpICYmXG4gICAgICAgIHF1ZXJ5Q29uZmlnLnNlY3VyZSAmJlxuICAgICAgICAhaXNRdWVyeVN0YXRlU3VjY2VzcyhhdXRoUHJvdmlkZXIuY3VycmVudFJlZnJlc2hRdWVyeT8ucmF3U3RhdGUpXG4gICAgICApIHtcbiAgICAgICAgLy8gT24gcGFnZSBsb2FkIHRoZSBxdWVyeSBtaWdodCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIGF1dGggcHJvdmlkZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG4gICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBhdXRoIHByb3ZpZGVyIHRvIGJlIHJlYWR5IGJlZm9yZSB3ZSBjYW4gZXhlY3V0ZSB0aGUgcXVlcnkuXG4gICAgICAgIGdvU2lnbmFsID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgLy8gVGhlIHRva2VucyBtaWdodCBnZXQgc2V0IHdpdGhvdXQgYSByZWZyZXNoIHF1ZXJ5IGJlaW5nIGNyZWF0ZWQgKGUuZy4pIGRpcmVjdGx5IGFmdGVyIGxvZ2luLlxuICAgICAgICAgIGF1dGhQcm92aWRlci5jdXJyZW50UmVmcmVzaFF1ZXJ5JC5waXBlKHN3aXRjaFF1ZXJ5U3RhdGUoKSwgdGFrZVVudGlsUmVzcG9uc2UoKSksXG4gICAgICAgICAgYXV0aFByb3ZpZGVyLnRva2VucyQucGlwZSh0YWtlKDEpKSxcbiAgICAgICAgXSkucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25BYm9ydCQpLFxuICAgICAgICAgIGZpbHRlcigoW3N0YXRlLCB0b2tlbnNdKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICFpc1F1ZXJ5U3RhdGVMb2FkaW5nKHN0YXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICEhdG9rZW5zO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRhcCgoW3N0YXRlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzUXVlcnlTdGF0ZUZhaWx1cmUoc3RhdGUpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVudGl0eVN0YXRlKHsgdHlwZTogJ2ZhaWx1cmUnLCBlcnJvcjogc3RhdGUuZXJyb3IsIGhlYWRlcnM6IHt9IH0sIG1ldGEsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBnb1NpZ25hbFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gY29tcHV0ZVF1ZXJ5TWV0aG9kKHsgY29uZmlnOiBxdWVyeUNvbmZpZywgY2xpZW50OiB0aGlzLl9jbGllbnQgfSk7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gY29tcHV0ZVF1ZXJ5Qm9keSh7IGNvbmZpZzogcXVlcnlDb25maWcsIGNsaWVudDogdGhpcy5fY2xpZW50LCBhcmdzOiB0aGlzLl9hcmd1bWVudHMsIG1ldGhvZCB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBjb21wdXRlUXVlcnlIZWFkZXJzKHsgY2xpZW50OiB0aGlzLl9jbGllbnQsIGNvbmZpZzogcXVlcnlDb25maWcsIGFyZ3M6IHRoaXMuX2FyZ3VtZW50cyB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q8UmVzcG9uc2U+KHtcbiAgICAgICAgICAgICAgdXJsV2l0aFBhcmFtczogdGhpcy5fcm91dGVXaXRoUGFyYW1zIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcXVlcnlDb25maWcucmVwb3J0UHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogcXVlcnlDb25maWcucmVzcG9uc2VUeXBlLFxuICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHF1ZXJ5Q29uZmlnLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgY2FjaGVBZGFwdGVyOiB0aGlzLl9jbGllbnQuY29uZmlnLnJlcXVlc3Q/LmNhY2hlQWRhcHRlcixcbiAgICAgICAgICAgICAgcmV0cnlGbjogdGhpcy5fY2xpZW50LmNvbmZpZy5yZXF1ZXN0Py5yZXRyeUZuLFxuICAgICAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgICAgdGFwKChzdGF0ZSkgPT4gdGhpcy5fdXBkYXRlRW50aXR5U3RhdGUoc3RhdGUsIG1ldGEsIG9wdGlvbnMpKSxcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uQWJvcnQkKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcblxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICBpZiAoIWlzUXVlcnlTdGF0ZUxvYWRpbmcodGhpcy5yYXdTdGF0ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMuX29uQWJvcnQkLm5leHQoKTtcblxuICAgIHRoaXMuX3VwZGF0ZVN0YXRlKHtcbiAgICAgIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkNhbmNlbGxlZCxcbiAgICAgIG1ldGE6IHsgaWQ6IHRoaXMucmF3U3RhdGUubWV0YS5pZCwgdHJpZ2dlcmVkVmlhOiB0aGlzLnJhd1N0YXRlLm1ldGEudHJpZ2dlcmVkVmlhIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHBvbGwoY29uZmlnOiBQb2xsQ29uZmlnKSB7XG4gICAgaWYgKHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRQb2xsQ29uZmlnID0gY29uZmlnO1xuXG4gICAgY29uc3QgaW50ZXJ2YWwkID0gaW50ZXJ2YWwoY29uZmlnLmludGVydmFsKTtcbiAgICBjb25zdCBwb2xsJCA9IGludGVydmFsJC5waXBlKFxuICAgICAgc2tpcChjb25maWcudHJpZ2dlckltbWVkaWF0ZWx5ID8gMCA6IDEpLFxuICAgICAgdGFrZVVudGlsKGNvbmZpZy50YWtlVW50aWwpLFxuICAgICAgdGFrZVdoaWxlKCgpID0+ICF0aGlzLl9pc1BvbGxpbmdQYXVzZWQpLFxuICAgICAgZmlsdGVyKCgpID0+ICFpc1F1ZXJ5U3RhdGVMb2FkaW5nKHRoaXMuX3N0YXRlJC52YWx1ZSkpLFxuICAgICk7XG5cbiAgICB0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uID0gcG9sbCQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHRoaXMuZXhlY3V0ZSh7IHNraXBDYWNoZTogdHJ1ZSwgX3RyaWdnZXJlZFZpYTogJ3BvbGwnIH0pLFxuICAgICAgY29tcGxldGU6ICgpID0+IHRoaXMuc3RvcFBvbGxpbmcoKSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RvcFBvbGxpbmcoKSB7XG4gICAgdGhpcy5fcG9sbGluZ1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB0aGlzLl9jdXJyZW50UG9sbENvbmZpZyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHBhdXNlUG9sbGluZygpIHtcbiAgICB0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5faXNQb2xsaW5nUGF1c2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmVzdW1lUG9sbGluZygpIHtcbiAgICBpZiAoIXRoaXMuX2lzUG9sbGluZ1BhdXNlZCB8fCAhdGhpcy5fY3VycmVudFBvbGxDb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMuX2lzUG9sbGluZ1BhdXNlZCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRoaXMucG9sbCh7IC4uLnRoaXMuX2N1cnJlbnRQb2xsQ29uZmlnLCB0cmlnZ2VySW1tZWRpYXRlbHk6IHRydWUgfSk7XG4gIH1cblxuICBvblN1Y2Nlc3MoY2FsbGJhY2s6IChyZXNwb25zZTogRGF0YSkgPT4gdm9pZCkge1xuICAgIHRoaXMuc3RhdGUkLnBpcGUodGFrZVVudGlsUmVzcG9uc2UoKSwgZmlsdGVyU3VjY2VzcygpKS5zdWJzY3JpYmUoKHN0YXRlKSA9PiBjYWxsYmFjayhzdGF0ZS5yZXNwb25zZSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb25GYWlsdXJlKGNhbGxiYWNrOiAoZXJyb3I6IFJlcXVlc3RFcnJvcjx1bmtub3duPikgPT4gdm9pZCkge1xuICAgIHRoaXMuc3RhdGUkLnBpcGUodGFrZVVudGlsUmVzcG9uc2UoKSwgZmlsdGVyRmFpbHVyZSgpKS5zdWJzY3JpYmUoKHN0YXRlKSA9PiBjYWxsYmFjayhzdGF0ZS5lcnJvcikpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QmVhcmVyQXV0aFByb3ZpZGVyKCkge1xuICAgIGNvbnN0IGF1dGhQcm92aWRlciA9IHRoaXMuX2NsaWVudC5hdXRoUHJvdmlkZXI7XG5cbiAgICBpZiAoYXV0aFByb3ZpZGVyICYmIGlzQmVhcmVyQXV0aFByb3ZpZGVyKGF1dGhQcm92aWRlcikpIHtcbiAgICAgIHJldHVybiBhdXRoUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVFbnRpdHlTdGF0ZShcbiAgICByZXF1ZXN0RXZlbnQ6IFJlcXVlc3RFdmVudDxSZXNwb25zZT4sXG4gICAgbWV0YTogUXVlcnlTdGF0ZU1ldGEsXG4gICAgb3B0aW9ucz86IEV4ZWN1dGVRdWVyeU9wdGlvbnMsXG4gICkge1xuICAgIHN3aXRjaCAocmVxdWVzdEV2ZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIGNhc2UgJ2RlbGF5LXJldHJ5Jzoge1xuICAgICAgICBjb25zdCB7IHR5cGUsIHJldHJ5RGVsYXksIHJldHJ5TnVtYmVyIH0gPSByZXF1ZXN0RXZlbnQ7XG4gICAgICAgIGNvbnN0IG5ld01ldGE6IFF1ZXJ5U3RhdGVNZXRhID0geyAuLi5tZXRhLCBpc1dhaXRpbmdGb3JSZXRyeTogdHlwZSA9PT0gJ2RlbGF5LXJldHJ5JywgcmV0cnlEZWxheSwgcmV0cnlOdW1iZXIgfTtcblxuICAgICAgICB0aGlzLl91cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgdHlwZTogUXVlcnlTdGF0ZVR5cGUuTG9hZGluZyxcbiAgICAgICAgICBtZXRhOiBuZXdNZXRhLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3VwbG9hZC1wcm9ncmVzcyc6XG4gICAgICBjYXNlICdkb3dubG9hZC1wcm9ncmVzcyc6IHtcbiAgICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoe1xuICAgICAgICAgIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkxvYWRpbmcsXG4gICAgICAgICAgcHJvZ3Jlc3M6IHJlcXVlc3RFdmVudC5wcm9ncmVzcyxcbiAgICAgICAgICBwYXJ0aWFsVGV4dDogJ3BhcnRpYWxUZXh0JyBpbiByZXF1ZXN0RXZlbnQgPyByZXF1ZXN0RXZlbnQucGFydGlhbFRleHQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgbWV0YSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3N1Y2Nlc3MnOiB7XG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UsIGV4cGlyZXNJblRpbWVzdGFtcCwgaGVhZGVycyB9ID0gcmVxdWVzdEV2ZW50O1xuICAgICAgICBjb25zdCBpc0dxbCA9IGlzR3FsUXVlcnlDb25maWcodGhpcy5fcXVlcnlDb25maWcpO1xuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPVxuICAgICAgICAgIGlzR3FsICYmIHR5cGVvZiByZXNwb25zZSA9PT0gJ29iamVjdCcgJiYgISFyZXNwb25zZSAmJiAnZGF0YScgaW4gcmVzcG9uc2VcbiAgICAgICAgICAgID8gKHJlc3BvbnNlWydkYXRhJ10gYXMgUmVzcG9uc2UpXG4gICAgICAgICAgICA6IChyZXNwb25zZSBhcyBSZXNwb25zZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eSAmJiB0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHkuc2V0KSB7XG4gICAgICAgICAgY29uc3QgaWQgPSB0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHk/LmlkKHsgYXJnczogdGhpcy5fYXJndW1lbnRzLCByZXNwb25zZTogcmVzcG9uc2VEYXRhIH0pO1xuXG4gICAgICAgICAgdGhpcy5fcXVlcnlDb25maWcuZW50aXR5Py5zZXQoe1xuICAgICAgICAgICAgYXJnczogdGhpcy5fYXJndW1lbnRzLFxuICAgICAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgc3RvcmU6IHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eS5zdG9yZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VwZGF0ZVN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5TdWNjZXNzLFxuICAgICAgICAgIHJlc3BvbnNlOiByZXNwb25zZURhdGEsXG4gICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICBtZXRhOiB7IC4uLm1ldGEsIGV4cGlyZXNBdDogZXhwaXJlc0luVGltZXN0YW1wIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdmYWlsdXJlJzoge1xuICAgICAgICBjb25zdCB7IGVycm9yIH0gPSByZXF1ZXN0RXZlbnQ7XG4gICAgICAgIGNvbnN0IGZhaWx1cmUgPSAoKSA9PiB0aGlzLl91cGRhdGVTdGF0ZSh7IHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkZhaWx1cmUsIGVycm9yLCBtZXRhIH0pO1xuICAgICAgICBjb25zdCBiZWFyZXJBdXRoUHJvdmlkZXIgPSB0aGlzLl9nZXRCZWFyZXJBdXRoUHJvdmlkZXIoKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWJlYXJlckF1dGhQcm92aWRlciB8fFxuICAgICAgICAgIG9wdGlvbnM/Ll9pc1VuYXV0aG9yaXplZFJldHJ5IHx8XG4gICAgICAgICAgZXJyb3Iuc3RhdHVzICE9PSBIdHRwU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWQgfHxcbiAgICAgICAgICAhYmVhcmVyQXV0aFByb3ZpZGVyLnNob3VsZFJlZnJlc2hPblVuYXV0aG9yaXplZFJlc3BvbnNlXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWlsdXJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBxdWVyeSA9IGJlYXJlckF1dGhQcm92aWRlci5fcmVmcmVzaFF1ZXJ5KCk7XG4gICAgICAgIGlmICghcXVlcnkpIHJldHVybiBmYWlsdXJlKCk7XG5cbiAgICAgICAgcXVlcnkuc3RhdGUkXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWxSZXNwb25zZSgpLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uQWJvcnQkKSxcbiAgICAgICAgICAgIHRhcCgoc3RhdGUpID0+XG4gICAgICAgICAgICAgIGlzUXVlcnlTdGF0ZVN1Y2Nlc3Moc3RhdGUpID8gdGhpcy5leGVjdXRlKHsgLi4ub3B0aW9ucywgX2lzVW5hdXRob3JpemVkUmV0cnk6IHRydWUgfSkgOiBmYWlsdXJlKCksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2NhbmNlbCc6IHtcbiAgICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoe1xuICAgICAgICAgIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkNhbmNlbGxlZCxcbiAgICAgICAgICBtZXRhLFxuICAgICAgICB9KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90cmFuc2Zvcm1TdGF0ZShzOiBRdWVyeVN0YXRlPFJlc3BvbnNlPik6IE9ic2VydmFibGU8UXVlcnlTdGF0ZTxEYXRhPj4ge1xuICAgIGlmICghaXNRdWVyeVN0YXRlU3VjY2VzcyhzKSB8fCAhdGhpcy5fcXVlcnlDb25maWcuZW50aXR5Py5nZXQpIHtcbiAgICAgIHJldHVybiBvZihzKSBhcyBPYnNlcnZhYmxlPFF1ZXJ5U3RhdGU8RGF0YT4+O1xuICAgIH1cblxuICAgIGNvbnN0IGlkID0gdGhpcy5fcXVlcnlDb25maWcuZW50aXR5LmlkKHsgYXJnczogdGhpcy5fYXJndW1lbnRzLCByZXNwb25zZTogcy5yZXNwb25zZSB9KTtcblxuICAgIHJldHVybiB0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHlcbiAgICAgIC5nZXQoeyBhcmdzOiB0aGlzLl9hcmd1bWVudHMsIGlkLCByZXNwb25zZTogcy5yZXNwb25zZSwgc3RvcmU6IHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eS5zdG9yZSB9KVxuICAgICAgLnBpcGUobWFwKCh2KSA9PiAoeyAuLi5zLCByZXNwb25zZTogdiB9KSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlU3RhdGUoczogUXVlcnlTdGF0ZTxSZXNwb25zZT4pIHtcbiAgICAvLyBXZSBuZWVkIHRvIHVzZSB1bnRyYWNrZWQgaGVyZSB0byBhdm9pZCBBbmd1bGFyJ3MgXCJhbGxvd1NpZ25hbFdyaXRlcyBpcyBmYWxzZVwiIGVycm9yIHdoZW4gZXhlY3V0aW5nIHF1ZXJpZXMgaW5zaWRlIEFuZ3VsYXIncyBjb21wdXRlZC9lZmZlY3Qgc2lnbmFsIGZ1bmN0aW9ucy5cbiAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5fc3RhdGUkLm5leHQocykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbW9ja1JlcXVlc3QoaGVhZGVyczogUmVxdWVzdEhlYWRlcnMgfCB1bmRlZmluZWQsIG1ldGE6IFF1ZXJ5U3RhdGVNZXRhLCBvcHRpb25zOiBFeGVjdXRlUXVlcnlPcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLl9hcmd1bWVudHM/Lm1vY2spIHJldHVybjtcblxuICAgIGNvbnN0IHsgZGVsYXkgPSAyMDAsIGVycm9yLCByZXNwb25zZSwgcmV0cnlJbnRvUmVzcG9uc2UgPSBmYWxzZSwgcHJvZ3Jlc3MgfSA9IHRoaXMuX2FyZ3VtZW50cy5tb2NrO1xuICAgIGNvbnN0IHByb2dyZXNzRmlsZVNpemUgPSBwcm9ncmVzcz8uZmlsZVNpemUgPz8gMTAwMDAwMDtcbiAgICBjb25zdCBwcm9ncmVzc0V2ZW50VHlwZSA9IHByb2dyZXNzPy5ldmVudFR5cGUgPz8gJ3VwbG9hZCc7XG4gICAgY29uc3QgcHJvZ3Jlc3NFdmVudENvdW50ID0gcHJvZ3Jlc3M/LmV2ZW50Q291bnQgPz8gNTtcbiAgICBjb25zdCBwcm9ncmVzc09taXRUb3RhbCA9IHByb2dyZXNzPy5vbWl0VG90YWwgPz8gZmFsc2U7XG4gICAgY29uc3Qgb21pdFBhcnRpYWxUZXh0ID0gcHJvZ3Jlc3M/Lm9taXRQYXJ0aWFsVGV4dCA/PyBmYWxzZTtcblxuICAgIGNvbnN0IGZpbmFsUmVzb2x2ZU1vY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlRW50aXR5U3RhdGUoeyBlcnJvciwgaGVhZGVyczogaGVhZGVycyA/PyB7fSwgdHlwZTogJ2ZhaWx1cmUnIH0sIG1ldGEsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3VwZGF0ZUVudGl0eVN0YXRlKFxuICAgICAgICB7IHJlc3BvbnNlOiByZXNwb25zZSBhcyBSZXNwb25zZSwgaGVhZGVyczogaGVhZGVycyA/PyB7fSwgdHlwZTogJ3N1Y2Nlc3MnIH0sXG4gICAgICAgIG1ldGEsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICApO1xuICAgIH07XG5cbiAgICBpZiAocHJvZ3Jlc3MpIHtcbiAgICAgIGludGVydmFsKGRlbGF5KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKGEpID0+IHtcbiAgICAgICAgICAgIGlmIChhID09PSBwcm9ncmVzc0V2ZW50Q291bnQgKyAxKSB7XG4gICAgICAgICAgICAgIGZpbmFsUmVzb2x2ZU1vY2soKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBNYXRoLm1pbihwcm9ncmVzc0ZpbGVTaXplICogYSwgcHJvZ3Jlc3NGaWxlU2l6ZSAqIHByb2dyZXNzRXZlbnRDb3VudCk7XG4gICAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSAoY3VycmVudCAvIChwcm9ncmVzc0ZpbGVTaXplICogcHJvZ3Jlc3NFdmVudENvdW50KSkgKiAxMDA7XG5cbiAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlRW50aXR5U3RhdGUoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHlwZTogcHJvZ3Jlc3NFdmVudFR5cGUgPT09ICd1cGxvYWQnID8gJ3VwbG9hZC1wcm9ncmVzcycgOiAnZG93bmxvYWQtcHJvZ3Jlc3MnLFxuICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyA/PyB7fSxcbiAgICAgICAgICAgICAgICAgIHByb2dyZXNzOiB7IGN1cnJlbnQsIC4uLihwcm9ncmVzc09taXRUb3RhbCA/IHt9IDogeyBwZXJjZW50YWdlLCB0b3RhbDogcHJvZ3Jlc3NGaWxlU2l6ZSB9KSB9LFxuICAgICAgICAgICAgICAgICAgcGFydGlhbFRleHQ6IG9taXRQYXJ0aWFsVGV4dCA/IHVuZGVmaW5lZCA6IGBQYXJ0aWFsIHRleHQgJHthfWAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXRhLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uQWJvcnQkKSxcbiAgICAgICAgICB0YWtlV2hpbGUoKGEpID0+IGEgPCBwcm9ncmVzc0V2ZW50Q291bnQgKyAxLCB0cnVlKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfSBlbHNlIGlmIChyZXRyeUludG9SZXNwb25zZSkge1xuICAgICAgaW50ZXJ2YWwoZGVsYXkpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoYSkgPT4ge1xuICAgICAgICAgICAgaWYgKGEgPT09IDMpIHtcbiAgICAgICAgICAgICAgZmluYWxSZXNvbHZlTW9jaygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgYU1vZGlmaWVkID0gYSArIDE7XG4gICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVudGl0eVN0YXRlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdkZWxheS1yZXRyeScsXG4gICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzID8/IHt9LFxuICAgICAgICAgICAgICAgICAgcmV0cnlEZWxheTogMTAwMCArIDEwMDAgKiBhTW9kaWZpZWQsXG4gICAgICAgICAgICAgICAgICByZXRyeU51bWJlcjogYU1vZGlmaWVkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWV0YSxcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkFib3J0JCksXG4gICAgICAgICAgdGFrZVdoaWxlKChhKSA9PiBhIDwgMywgdHJ1ZSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aW1lcihkZWxheSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+IGZpbmFsUmVzb2x2ZU1vY2soKSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uQWJvcnQkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2FkZERlcGVuZGVudCh0Tm9kZUluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuX2RlcGVuZGVudHNbdE5vZGVJbmRleF0pIHtcbiAgICAgIHRoaXMuX2RlcGVuZGVudHNbdE5vZGVJbmRleF0gPSAwO1xuICAgIH1cblxuICAgIHRoaXMuX2RlcGVuZGVudHNbdE5vZGVJbmRleF0rKztcblxuICAgIHRoaXMuX2RlcGVuZGVudHNDaGFuZ2VkJC5uZXh0KHRoaXMuX2RlcGVuZGVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3JlbW92ZURlcGVuZGVudCh0Tm9kZUluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuX2RlcGVuZGVudHNbdE5vZGVJbmRleF07XG4gICAgaWYgKGNvdW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZGVwZW5kZW50c1t0Tm9kZUluZGV4XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9kZXBlbmRlbnRzW3ROb2RlSW5kZXhdLS07XG4gICAgfVxuXG4gICAgaWYgKGNvdW50IDw9IDEpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLl9kZXBlbmRlbnRzW3ROb2RlSW5kZXhdO1xuICAgIH1cblxuICAgIHRoaXMuX2RlcGVuZGVudHNDaGFuZ2VkJC5uZXh0KHRoaXMuX2RlcGVuZGVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2hhc0RlcGVuZGVudHMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2RlcGVuZGVudHMpLmxlbmd0aCA+IDA7XG4gIH1cbn1cbiJdfQ==","import { BasicAuthProvider } from './basic-auth-provider';\nimport { BearerAuthProvider } from './bearer-auth-provider';\nimport { CustomHeaderAuthProvider } from './custom-header-auth-provider';\nexport const isBasicAuthProvider = (authProvider) => authProvider instanceof BasicAuthProvider;\nexport const isBearerAuthProvider = (authProvider) => authProvider instanceof BearerAuthProvider;\nexport const isCustomHeaderAuthProvider = (authProvider) => authProvider instanceof CustomHeaderAuthProvider;\nexport const decryptBearer = (token) => {\n try {\n const base64Url = token.split('.')[1];\n if (!base64Url) {\n return null;\n }\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(atob(base64)\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join(''));\n return JSON.parse(jsonPayload);\n }\n catch (error) {\n console.error(`Invalid bearer token: ${token}`, error);\n return null;\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1wcm92aWRlci51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9hdXRoL2F1dGgtcHJvdmlkZXIudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFekUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxZQUEwQixFQUFxQyxFQUFFLENBQ25HLFlBQVksWUFBWSxpQkFBaUIsQ0FBQztBQUU1QyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUNsQyxZQUEwQixFQUNhLEVBQUUsQ0FBQyxZQUFZLFlBQVksa0JBQWtCLENBQUM7QUFFdkYsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxZQUEwQixFQUE0QyxFQUFFLENBQ2pILFlBQVksWUFBWSx3QkFBd0IsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBbUMsS0FBYSxFQUFFLEVBQUU7SUFDL0UsSUFBSSxDQUFDO1FBQ0gsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQ1QsS0FBSyxDQUFDLEVBQUUsQ0FBQzthQUNULEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUNaLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFXLENBQUM7SUFDM0MsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixLQUFLLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV2RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbnlRdWVyeUNyZWF0b3IgfSBmcm9tICcuLi9xdWVyeS1jcmVhdG9yJztcbmltcG9ydCB7IEF1dGhQcm92aWRlciB9IGZyb20gJy4vYXV0aC1wcm92aWRlci50eXBlcyc7XG5pbXBvcnQgeyBCYXNpY0F1dGhQcm92aWRlciB9IGZyb20gJy4vYmFzaWMtYXV0aC1wcm92aWRlcic7XG5pbXBvcnQgeyBCZWFyZXJBdXRoUHJvdmlkZXIgfSBmcm9tICcuL2JlYXJlci1hdXRoLXByb3ZpZGVyJztcbmltcG9ydCB7IEN1c3RvbUhlYWRlckF1dGhQcm92aWRlciB9IGZyb20gJy4vY3VzdG9tLWhlYWRlci1hdXRoLXByb3ZpZGVyJztcblxuZXhwb3J0IGNvbnN0IGlzQmFzaWNBdXRoUHJvdmlkZXIgPSAoYXV0aFByb3ZpZGVyOiBBdXRoUHJvdmlkZXIpOiBhdXRoUHJvdmlkZXIgaXMgQmFzaWNBdXRoUHJvdmlkZXIgPT5cbiAgYXV0aFByb3ZpZGVyIGluc3RhbmNlb2YgQmFzaWNBdXRoUHJvdmlkZXI7XG5cbmV4cG9ydCBjb25zdCBpc0JlYXJlckF1dGhQcm92aWRlciA9IDxUIGV4dGVuZHMgQW55UXVlcnlDcmVhdG9yPihcbiAgYXV0aFByb3ZpZGVyOiBBdXRoUHJvdmlkZXIsXG4pOiBhdXRoUHJvdmlkZXIgaXMgQmVhcmVyQXV0aFByb3ZpZGVyPFQ+ID0+IGF1dGhQcm92aWRlciBpbnN0YW5jZW9mIEJlYXJlckF1dGhQcm92aWRlcjtcblxuZXhwb3J0IGNvbnN0IGlzQ3VzdG9tSGVhZGVyQXV0aFByb3ZpZGVyID0gKGF1dGhQcm92aWRlcjogQXV0aFByb3ZpZGVyKTogYXV0aFByb3ZpZGVyIGlzIEN1c3RvbUhlYWRlckF1dGhQcm92aWRlciA9PlxuICBhdXRoUHJvdmlkZXIgaW5zdGFuY2VvZiBDdXN0b21IZWFkZXJBdXRoUHJvdmlkZXI7XG5cbmV4cG9ydCBjb25zdCBkZWNyeXB0QmVhcmVyID0gPFJlc3VsdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih0b2tlbjogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYmFzZTY0VXJsID0gdG9rZW4uc3BsaXQoJy4nKVsxXTtcblxuICAgIGlmICghYmFzZTY0VXJsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlNjQgPSBiYXNlNjRVcmwucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKTtcbiAgICBjb25zdCBqc29uUGF5bG9hZCA9IGRlY29kZVVSSUNvbXBvbmVudChcbiAgICAgIGF0b2IoYmFzZTY0KVxuICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgIC5tYXAoKGMpID0+ICclJyArICgnMDAnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpKVxuICAgICAgICAuam9pbignJyksXG4gICAgKTtcblxuICAgIHJldHVybiBKU09OLnBhcnNlKGpzb25QYXlsb2FkKSBhcyBSZXN1bHQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBiZWFyZXIgdG9rZW46ICR7dG9rZW59YCwgZXJyb3IpO1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG4iXX0=","import { deleteCookie, getCookie, setCookie } from '@ethlete/core';\nimport { BehaviorSubject, Subject, takeUntil, tap, timer } from 'rxjs';\nimport { isQueryStateFailure, isQueryStateLoading, isQueryStateSuccess, switchQueryState, takeUntilResponse, } from '../query';\nimport { decryptBearer } from './auth-provider.utils';\nexport class BearerAuthProvider {\n get header() {\n return { Authorization: `Bearer ${this._tokens$.getValue().token}` };\n }\n get tokens$() {\n return this._tokens$.asObservable();\n }\n get tokens() {\n return this._tokens$.getValue();\n }\n get currentRefreshQuery$() {\n return this._currentRefreshQuery$.asObservable();\n }\n get currentRefreshQuery() {\n return this._currentRefreshQuery$.getValue();\n }\n get shouldRefreshOnUnauthorizedResponse() {\n return (!!this._config.refreshConfig &&\n (this._config.refreshConfig.refreshOnUnauthorizedResponse === undefined ||\n this._config.refreshConfig.refreshOnUnauthorizedResponse));\n }\n constructor(_config) {\n this._config = _config;\n this._destroy$ = new Subject();\n this._currentRefreshQuery$ = new BehaviorSubject(null);\n this._tokens$ = new BehaviorSubject({\n token: null,\n refreshToken: null,\n });\n const cookieEnabled = _config.refreshConfig?.cookieEnabled ?? true;\n const cookieToken = _config.refreshConfig?.cookieName && cookieEnabled ? (getCookie(_config.refreshConfig.cookieName) ?? null) : null;\n this._tokens$.next({\n token: _config.token || null,\n refreshToken: _config.refreshConfig?.token || cookieToken || null,\n });\n if (!this.tokens.token && !this.tokens.refreshToken) {\n if (!_config.refreshConfig?.cookieName) {\n console.error('A BearerAuthProvider was created without token or refresh token. You should provide at least a cookieName where the refresh token might be stored.');\n }\n return;\n }\n if (this.tokens.token) {\n this._prepareForRefresh();\n if (this.tokens.refreshToken && this._config.refreshConfig?.cookieName && cookieEnabled) {\n this._setCookie();\n }\n }\n else if (this.tokens.refreshToken) {\n this._refreshQuery();\n }\n }\n cleanUp() {\n this._destroy$.next(true);\n this._destroy$.unsubscribe();\n this._currentRefreshQuery$.next(null);\n if (this._config.refreshConfig?.cookieName) {\n this._deleteCookie();\n }\n }\n enableCookie() {\n if (!this._config.refreshConfig?.cookieName) {\n throw new Error('No cookie name was provided');\n }\n if (!this.tokens.refreshToken) {\n throw new Error('No refresh token was provided');\n }\n this._config.refreshConfig.cookieEnabled = true;\n this._setCookie();\n }\n disableCookie() {\n if (!this._config.refreshConfig?.cookieName) {\n throw new Error('No cookie name was provided');\n }\n this._config.refreshConfig.cookieEnabled = false;\n this._deleteCookie();\n }\n _setCookie() {\n if (!this._config.refreshConfig?.cookieName || !this.tokens.refreshToken)\n return;\n setCookie(this._config.refreshConfig.cookieName, this.tokens.refreshToken, this._config.refreshConfig.cookieExpiresInDays, this._config.refreshConfig.cookieDomain, this._config.refreshConfig.cookiePath, this._config.refreshConfig.cookieSameSite);\n }\n _deleteCookie() {\n if (!this._config.refreshConfig?.cookieName)\n return;\n deleteCookie(this._config.refreshConfig.cookieName, this._config.refreshConfig.cookiePath, this._config.refreshConfig.cookieDomain);\n }\n _prepareForRefresh() {\n if (!this.tokens.token || !this._config.refreshConfig) {\n return;\n }\n const bearer = decryptBearer(this.tokens.token);\n if (!bearer) {\n return;\n }\n const expiresInPropertyName = this._config.refreshConfig.expiresInPropertyName || 'exp';\n const expiresIn = bearer[expiresInPropertyName];\n const fiveMinutes = 5 * 60 * 1000;\n const refreshBuffer = this._config.refreshConfig.refreshBuffer ?? fiveMinutes;\n if (expiresIn === undefined) {\n throw new Error(`Bearer token does not contain an '${expiresInPropertyName}' property`);\n }\n const remainingTime = new Date(expiresIn * 1000).getTime() - refreshBuffer - new Date().getTime();\n const strategy = this._config.refreshConfig.strategy ?? \"beforeExpiration\" /* AuthBearerRefreshStrategy.BeforeExpiration */;\n switch (strategy) {\n case \"beforeExpiration\" /* AuthBearerRefreshStrategy.BeforeExpiration */:\n timer(remainingTime)\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => this._refreshQuery());\n break;\n }\n }\n /**\n * @internal\n */\n _refreshQuery() {\n const currentQuery = this._currentRefreshQuery$.getValue();\n if (isQueryStateLoading(currentQuery?.rawState)) {\n return currentQuery;\n }\n const currentRefreshToken = this.tokens.refreshToken;\n if (!currentRefreshToken || !this._config.refreshConfig) {\n return;\n }\n const args = this._config.refreshConfig.requestArgsAdapter?.({\n token: this.tokens.token,\n refreshToken: currentRefreshToken,\n }) ?? {\n body: { refreshToken: currentRefreshToken },\n };\n const query = this._config.refreshConfig.queryCreator.prepare(args).execute({ skipCache: true });\n this._currentRefreshQuery$.next(query);\n this._currentRefreshQuery$\n .pipe(switchQueryState(), tap((state) => {\n if (isQueryStateSuccess(state)) {\n if (this._config.refreshConfig?.responseAdapter) {\n const tokens = this._config.refreshConfig.responseAdapter(state.response);\n this._tokens$.next(tokens);\n }\n else {\n this._tokens$.next({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n token: state.response['token'],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n refreshToken: state.response['refreshToken'],\n });\n }\n const cookieEnabled = this._config.refreshConfig?.cookieEnabled ?? true;\n if (this._config.refreshConfig?.cookieName && this.tokens.refreshToken && cookieEnabled) {\n this._setCookie();\n }\n this._prepareForRefresh();\n }\n else if (isQueryStateFailure(state)) {\n this._tokens$.next({ token: null, refreshToken: null });\n if (this._config.refreshConfig?.cookieName) {\n this._deleteCookie();\n }\n }\n }), takeUntilResponse(), takeUntil(this._destroy$))\n .subscribe();\n return query;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhcmVyLWF1dGgtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvYXV0aC9iZWFyZXItYXV0aC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkUsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixpQkFBaUIsR0FDbEIsTUFBTSxVQUFVLENBQUM7QUFRbEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE1BQU0sT0FBTyxrQkFBa0I7SUFTN0IsSUFBSSxNQUFNO1FBQ1IsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztJQUN2RSxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxtQ0FBbUM7UUFDckMsT0FB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QUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsaUJBQWlCLEVBQUUsRUFDbkIsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVmLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVsZXRlQ29va2llLCBnZXRDb29raWUsIHNldENvb2tpZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCB0YWtlVW50aWwsIHRhcCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGlzUXVlcnlTdGF0ZUZhaWx1cmUsXG4gIGlzUXVlcnlTdGF0ZUxvYWRpbmcsXG4gIGlzUXVlcnlTdGF0ZVN1Y2Nlc3MsXG4gIHN3aXRjaFF1ZXJ5U3RhdGUsXG4gIHRha2VVbnRpbFJlc3BvbnNlLFxufSBmcm9tICcuLi9xdWVyeSc7XG5pbXBvcnQgeyBBbnlRdWVyeUNyZWF0b3IsIENvbnN0cnVjdFF1ZXJ5LCBRdWVyeVJlc3BvbnNlT2YgfSBmcm9tICcuLi9xdWVyeS1jcmVhdG9yJztcbmltcG9ydCB7XG4gIEF1dGhCZWFyZXJSZWZyZXNoU3RyYXRlZ3ksXG4gIEF1dGhQcm92aWRlcixcbiAgQXV0aFByb3ZpZGVyQmVhcmVyQ29uZmlnLFxuICBUb2tlblJlc3BvbnNlLFxufSBmcm9tICcuL2F1dGgtcHJvdmlkZXIudHlwZXMnO1xuaW1wb3J0IHsgZGVjcnlwdEJlYXJlciB9IGZyb20gJy4vYXV0aC1wcm92aWRlci51dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBCZWFyZXJBdXRoUHJvdmlkZXI8VCBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvcj4gaW1wbGVtZW50cyBBdXRoUHJvdmlkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N1cnJlbnRSZWZyZXNoUXVlcnkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb25zdHJ1Y3RRdWVyeTxUPiB8IG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRva2VuUmVzcG9uc2U+KHtcbiAgICB0b2tlbjogbnVsbCxcbiAgICByZWZyZXNoVG9rZW46IG51bGwsXG4gIH0pO1xuXG4gIGdldCBoZWFkZXIoKSB7XG4gICAgcmV0dXJuIHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuX3Rva2VucyQuZ2V0VmFsdWUoKS50b2tlbn1gIH07XG4gIH1cblxuICBnZXQgdG9rZW5zJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5zJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCB0b2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VucyQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVmcmVzaFF1ZXJ5JCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlZnJlc2hRdWVyeSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgY3VycmVudFJlZnJlc2hRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlZnJlc2hRdWVyeSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGdldCBzaG91bGRSZWZyZXNoT25VbmF1dGhvcml6ZWRSZXNwb25zZSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZyAmJlxuICAgICAgKHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnLnJlZnJlc2hPblVuYXV0aG9yaXplZFJlc3BvbnNlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcucmVmcmVzaE9uVW5hdXRob3JpemVkUmVzcG9uc2UpXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBfY29uZmlnOiBBdXRoUHJvdmlkZXJCZWFyZXJDb25maWc8VD4pIHtcbiAgICBjb25zdCBjb29raWVFbmFibGVkID0gX2NvbmZpZy5yZWZyZXNoQ29uZmlnPy5jb29raWVFbmFibGVkID8/IHRydWU7XG4gICAgY29uc3QgY29va2llVG9rZW4gPVxuICAgICAgX2NvbmZpZy5yZWZyZXNoQ29uZmlnPy5jb29raWVOYW1lICYmIGNvb2tpZUVuYWJsZWQgPyAoZ2V0Q29va2llKF9jb25maWcucmVmcmVzaENvbmZpZy5jb29raWVOYW1lKSA/PyBudWxsKSA6IG51bGw7XG5cbiAgICB0aGlzLl90b2tlbnMkLm5leHQoe1xuICAgICAgdG9rZW46IF9jb25maWcudG9rZW4gfHwgbnVsbCxcbiAgICAgIHJlZnJlc2hUb2tlbjogX2NvbmZpZy5yZWZyZXNoQ29uZmlnPy50b2tlbiB8fCBjb29raWVUb2tlbiB8fCBudWxsLFxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLnRva2Vucy50b2tlbiAmJiAhdGhpcy50b2tlbnMucmVmcmVzaFRva2VuKSB7XG4gICAgICBpZiAoIV9jb25maWcucmVmcmVzaENvbmZpZz8uY29va2llTmFtZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdBIEJlYXJlckF1dGhQcm92aWRlciB3YXMgY3JlYXRlZCB3aXRob3V0IHRva2VuIG9yIHJlZnJlc2ggdG9rZW4uIFlvdSBzaG91bGQgcHJvdmlkZSBhdCBsZWFzdCBhIGNvb2tpZU5hbWUgd2hlcmUgdGhlIHJlZnJlc2ggdG9rZW4gbWlnaHQgYmUgc3RvcmVkLicsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnMudG9rZW4pIHtcbiAgICAgIHRoaXMuX3ByZXBhcmVGb3JSZWZyZXNoKCk7XG5cbiAgICAgIGlmICh0aGlzLnRva2Vucy5yZWZyZXNoVG9rZW4gJiYgdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWc/LmNvb2tpZU5hbWUgJiYgY29va2llRW5hYmxlZCkge1xuICAgICAgICB0aGlzLl9zZXRDb29raWUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudG9rZW5zLnJlZnJlc2hUb2tlbikge1xuICAgICAgdGhpcy5fcmVmcmVzaFF1ZXJ5KCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYW5VcCgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fY3VycmVudFJlZnJlc2hRdWVyeSQubmV4dChudWxsKTtcblxuICAgIGlmICh0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZz8uY29va2llTmFtZSkge1xuICAgICAgdGhpcy5fZGVsZXRlQ29va2llKCk7XG4gICAgfVxuICB9XG5cbiAgZW5hYmxlQ29va2llKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWc/LmNvb2tpZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY29va2llIG5hbWUgd2FzIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnRva2Vucy5yZWZyZXNoVG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVmcmVzaCB0b2tlbiB3YXMgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5jb29raWVFbmFibGVkID0gdHJ1ZTtcblxuICAgIHRoaXMuX3NldENvb2tpZSgpO1xuICB9XG5cbiAgZGlzYWJsZUNvb2tpZSgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnPy5jb29raWVOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvb2tpZSBuYW1lIHdhcyBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnLmNvb2tpZUVuYWJsZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuX2RlbGV0ZUNvb2tpZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0Q29va2llKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWc/LmNvb2tpZU5hbWUgfHwgIXRoaXMudG9rZW5zLnJlZnJlc2hUb2tlbikgcmV0dXJuO1xuXG4gICAgc2V0Q29va2llKFxuICAgICAgdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcuY29va2llTmFtZSxcbiAgICAgIHRoaXMudG9rZW5zLnJlZnJlc2hUb2tlbixcbiAgICAgIHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnLmNvb2tpZUV4cGlyZXNJbkRheXMsXG4gICAgICB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5jb29raWVEb21haW4sXG4gICAgICB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5jb29raWVQYXRoLFxuICAgICAgdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcuY29va2llU2FtZVNpdGUsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RlbGV0ZUNvb2tpZSgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnPy5jb29raWVOYW1lKSByZXR1cm47XG5cbiAgICBkZWxldGVDb29raWUoXG4gICAgICB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5jb29raWVOYW1lLFxuICAgICAgdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcuY29va2llUGF0aCxcbiAgICAgIHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnLmNvb2tpZURvbWFpbixcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJlcGFyZUZvclJlZnJlc2goKSB7XG4gICAgaWYgKCF0aGlzLnRva2Vucy50b2tlbiB8fCAhdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiZWFyZXIgPSBkZWNyeXB0QmVhcmVyKHRoaXMudG9rZW5zLnRva2VuKTtcblxuICAgIGlmICghYmVhcmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXhwaXJlc0luUHJvcGVydHlOYW1lID0gdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcuZXhwaXJlc0luUHJvcGVydHlOYW1lIHx8ICdleHAnO1xuICAgIGNvbnN0IGV4cGlyZXNJbiA9IGJlYXJlcltleHBpcmVzSW5Qcm9wZXJ0eU5hbWVdIGFzIG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBmaXZlTWludXRlcyA9IDUgKiA2MCAqIDEwMDA7XG4gICAgY29uc3QgcmVmcmVzaEJ1ZmZlciA9IHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnLnJlZnJlc2hCdWZmZXIgPz8gZml2ZU1pbnV0ZXM7XG5cbiAgICBpZiAoZXhwaXJlc0luID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQmVhcmVyIHRva2VuIGRvZXMgbm90IGNvbnRhaW4gYW4gJyR7ZXhwaXJlc0luUHJvcGVydHlOYW1lfScgcHJvcGVydHlgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZW1haW5pbmdUaW1lID0gbmV3IERhdGUoZXhwaXJlc0luICogMTAwMCkuZ2V0VGltZSgpIC0gcmVmcmVzaEJ1ZmZlciAtIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG4gICAgY29uc3Qgc3RyYXRlZ3kgPSB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5zdHJhdGVneSA/PyBBdXRoQmVhcmVyUmVmcmVzaFN0cmF0ZWd5LkJlZm9yZUV4cGlyYXRpb247XG5cbiAgICBzd2l0Y2ggKHN0cmF0ZWd5KSB7XG4gICAgICBjYXNlIEF1dGhCZWFyZXJSZWZyZXNoU3RyYXRlZ3kuQmVmb3JlRXhwaXJhdGlvbjpcbiAgICAgICAgdGltZXIocmVtYWluaW5nVGltZSlcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fcmVmcmVzaFF1ZXJ5KCkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfcmVmcmVzaFF1ZXJ5KCkge1xuICAgIGNvbnN0IGN1cnJlbnRRdWVyeSA9IHRoaXMuX2N1cnJlbnRSZWZyZXNoUXVlcnkkLmdldFZhbHVlKCk7XG5cbiAgICBpZiAoaXNRdWVyeVN0YXRlTG9hZGluZyhjdXJyZW50UXVlcnk/LnJhd1N0YXRlKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRRdWVyeTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50UmVmcmVzaFRva2VuID0gdGhpcy50b2tlbnMucmVmcmVzaFRva2VuO1xuXG4gICAgaWYgKCFjdXJyZW50UmVmcmVzaFRva2VuIHx8ICF0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFyZ3MgPSB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5yZXF1ZXN0QXJnc0FkYXB0ZXI/Lih7XG4gICAgICB0b2tlbjogdGhpcy50b2tlbnMudG9rZW4sXG4gICAgICByZWZyZXNoVG9rZW46IGN1cnJlbnRSZWZyZXNoVG9rZW4sXG4gICAgfSkgPz8ge1xuICAgICAgYm9keTogeyByZWZyZXNoVG9rZW46IGN1cnJlbnRSZWZyZXNoVG9rZW4gfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5xdWVyeUNyZWF0b3IucHJlcGFyZShhcmdzKS5leGVjdXRlKHsgc2tpcENhY2hlOiB0cnVlIH0pO1xuXG4gICAgdGhpcy5fY3VycmVudFJlZnJlc2hRdWVyeSQubmV4dChxdWVyeSBhcyBDb25zdHJ1Y3RRdWVyeTxUPik7XG5cbiAgICB0aGlzLl9jdXJyZW50UmVmcmVzaFF1ZXJ5JFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaFF1ZXJ5U3RhdGUoKSxcbiAgICAgICAgdGFwKChzdGF0ZSkgPT4ge1xuICAgICAgICAgIGlmIChpc1F1ZXJ5U3RhdGVTdWNjZXNzKHN0YXRlKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnPy5yZXNwb25zZUFkYXB0ZXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgdG9rZW5zID0gdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcucmVzcG9uc2VBZGFwdGVyKHN0YXRlLnJlc3BvbnNlIGFzIFF1ZXJ5UmVzcG9uc2VPZjxUPik7XG5cbiAgICAgICAgICAgICAgdGhpcy5fdG9rZW5zJC5uZXh0KHRva2Vucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLl90b2tlbnMkLm5leHQoe1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgdG9rZW46IChzdGF0ZS5yZXNwb25zZSBhcyBhbnkpWyd0b2tlbiddLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgICAgcmVmcmVzaFRva2VuOiAoc3RhdGUucmVzcG9uc2UgYXMgYW55KVsncmVmcmVzaFRva2VuJ10sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29va2llRW5hYmxlZCA9IHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnPy5jb29raWVFbmFibGVkID8/IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZz8uY29va2llTmFtZSAmJiB0aGlzLnRva2Vucy5yZWZyZXNoVG9rZW4gJiYgY29va2llRW5hYmxlZCkge1xuICAgICAgICAgICAgICB0aGlzLl9zZXRDb29raWUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fcHJlcGFyZUZvclJlZnJlc2goKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzUXVlcnlTdGF0ZUZhaWx1cmUoc3RhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLl90b2tlbnMkLm5leHQoeyB0b2tlbjogbnVsbCwgcmVmcmVzaFRva2VuOiBudWxsIH0pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWc/LmNvb2tpZU5hbWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fZGVsZXRlQ29va2llKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsUmVzcG9uc2UoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxufVxuIl19","import { ChangeDetectorRef, Directive, ErrorHandler, TemplateRef, ViewContainerRef, effect, inject, input, untracked, } from '@angular/core';\nimport { isLegacyQuery } from '../experimental/interop/legacy-query';\nimport { extractQuery, isQueryCollection, isQueryStateCancelled, isQueryStateFailure, isQueryStateLoading, isQueryStatePrepared, isQueryStateSuccess, } from '../query';\nimport { queryStateSignal } from '../utils';\nimport * as i0 from \"@angular/core\";\nexport class QueryDirective {\n static ngTemplateContextGuard(dir, ctx) {\n return true;\n }\n constructor() {\n this.errorHandler = inject(ErrorHandler);\n this.cdr = inject(ChangeDetectorRef);\n this._viewContext = {\n $implicit: null,\n etQuery: null,\n loading: false,\n refreshing: false,\n error: null,\n progress: null,\n scope: null,\n query: null,\n };\n this.query = input.required({ alias: 'etQuery' });\n this.cache = input(false, { alias: 'etQueryCache' });\n this.queryState = queryStateSignal(this.query);\n inject(ViewContainerRef).createEmbeddedView(inject(TemplateRef), this._viewContext);\n effect(() => {\n const query = extractQuery(this.query());\n untracked(() => {\n if (!query) {\n this._viewContext.$implicit = null;\n this._viewContext.etQuery = null;\n this._viewContext.loading = false;\n this._viewContext.refreshing = false;\n this._viewContext.error = null;\n this._viewContext.progress = null;\n this._viewContext.scope = null;\n this._viewContext.query = null;\n return;\n }\n if (isQueryStatePrepared(query.rawState) || isQueryStateCancelled(query.rawState)) {\n query.execute();\n }\n this._viewContext.scope = isQueryCollection(query) ? query.type : null;\n this._viewContext.query = query;\n });\n });\n effect(() => {\n const state = this.queryState();\n const cache = this.cache();\n untracked(() => {\n if (isQueryStateLoading(state)) {\n this._viewContext.progress = state.progress ?? null;\n this._viewContext.refreshing = state.meta.triggeredVia === 'auto' || state.meta.triggeredVia === 'poll';\n if (!this._viewContext.refreshing) {\n this._viewContext.loading = true;\n }\n }\n else {\n this._viewContext.loading = false;\n this._viewContext.refreshing = false;\n this._viewContext.progress = null;\n }\n if (isQueryStateSuccess(state)) {\n this._viewContext.etQuery = state.response;\n this._viewContext.$implicit = state.response;\n }\n else if (!cache) {\n this._viewContext.etQuery = null;\n this._viewContext.$implicit = null;\n }\n if (isQueryStateFailure(state)) {\n this._viewContext.error = state.error;\n if (isLegacyQuery(extractQuery(this.query()))) {\n this.errorHandler.handleError(state.error.httpErrorResponse);\n }\n }\n else {\n this._viewContext.error = null;\n }\n this.cdr.markForCheck();\n });\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: QueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n 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 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: QueryDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etQuery]',\n standalone: true,\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RpcmVjdGl2ZXMvcXVlcnkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWtCLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JGLE9BQU8sRUFLTCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixtQkFBbUIsR0FDcEIsTUFBTSxVQUFVLENBQUM7QUFHbEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQWtENUMsTUFBTSxPQUFPLGNBQWM7SUFxQnpCLE1BQU0sQ0FBQyxzQkFBc0IsQ0FDM0IsR0FBc0IsRUFDdEIsR0FBWTtRQUVaLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEO1FBM0JRLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BDLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUV2QixpQkFBWSxHQUE2QjtZQUN4RCxTQUFTLEVBQUUsSUFBSTtZQUNmLE9BQU8sRUFBRSxJQUFJO1lBQ2IsT0FBTyxFQUFFLEtBQUs7WUFDZCxVQUFVLEVBQUUsS0FBSztZQUNqQixLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLElBQUk7WUFDWCxLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUM7UUFFRixVQUFLLEdBQUcsS0FBSyxDQUFDLFFB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biAgRXJyb3JIYW5kbGVyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW55TGVnYWN5UXVlcnksIGlzTGVnYWN5UXVlcnkgfSBmcm9tICcuLi9leHBlcmltZW50YWwvaW50ZXJvcC9sZWdhY3ktcXVlcnknO1xuaW1wb3J0IHtcbiAgQW55UXVlcnksXG4gIEFueVF1ZXJ5Q29sbGVjdGlvbixcbiAgUXVlcnlDb2xsZWN0aW9uS2V5c09mLFxuICBRdWVyeU9mLFxuICBleHRyYWN0UXVlcnksXG4gIGlzUXVlcnlDb2xsZWN0aW9uLFxuICBpc1F1ZXJ5U3RhdGVDYW5jZWxsZWQsXG4gIGlzUXVlcnlTdGF0ZUZhaWx1cmUsXG4gIGlzUXVlcnlTdGF0ZUxvYWRpbmcsXG4gIGlzUXVlcnlTdGF0ZVByZXBhcmVkLFxuICBpc1F1ZXJ5U3RhdGVTdWNjZXNzLFxufSBmcm9tICcuLi9xdWVyeSc7XG5pbXBvcnQgeyBRdWVyeURhdGFPZiB9IGZyb20gJy4uL3F1ZXJ5LWNyZWF0b3InO1xuaW1wb3J0IHsgUmVxdWVzdEVycm9yLCBSZXF1ZXN0UHJvZ3Jlc3MgfSBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCB7IHF1ZXJ5U3RhdGVTaWduYWwgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5RGlyZWN0aXZlQ29udGV4dDxRIGV4dGVuZHMgUXVlcnlEaXJlY3RpdmVUeXBlIHwgbnVsbD4gPSB7XG4gIC8qKlxuICAgKiBUaGUgcXVlcmllcydzIHJlc3BvbnNlIGRhdGEuXG4gICAqL1xuICAkaW1wbGljaXQ6IFF1ZXJ5RGF0YU9mPFF1ZXJ5T2Y8UT4+IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHF1ZXJpZXMncyByZXNwb25zZSBkYXRhLlxuICAgKi9cbiAgZXRRdWVyeTogUXVlcnlEYXRhT2Y8UXVlcnlPZjxRPj4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgcXVlcnkgdXNlZCBpbnNpZGUgdGhpcyBkaXJlY3RpdmUuIFVzZWZ1bCBpZiBmb3IgaW5zdGFuY2UgdGhlIHF1ZXJ5IGdldHMgdW53cmFwcGVkIHZpYSBhc3luYyBwaXBlIGluc2lkZSB0aGUgZGlyZWN0aXZlLlxuICAgKi9cbiAgcXVlcnk6IFF1ZXJ5T2Y8UT4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBJcyB0cnVlIHdoZW4gdGhlIHF1ZXJ5IGlzIHRyaWdnZXJlZCBieSB1c2VyIGludGVyYWN0aW9uLlxuICAgKi9cbiAgbG9hZGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSXMgdHJ1ZSB3aGVuIHRoZSBxdWVyeSBpcyB0cmlnZ2VyZWQgYnkgZWl0aGVyIHBvbGxpbmcgb3IgYXV0byByZWZyZXNoIGV2ZW50LlxuICAgKi9cbiAgcmVmcmVzaGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHF1ZXJ5J3MgcHJvZ3Jlc3Mgc3RhdGUuXG4gICAqL1xuICBwcm9ncmVzczogUmVxdWVzdFByb2dyZXNzIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHF1ZXJ5J3MgZXJyb3Igc3RhdGUuXG4gICAqL1xuICBlcnJvcjogUmVxdWVzdEVycm9yPHVua25vd24+IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHF1ZXJ5J3Mgc2NvcGUgKG9ubHkgYXZhaWxhYmxlIHdoZW4gdGhlIHF1ZXJ5IGlzIGEgY29sbGVjdGlvbilcbiAgICovXG4gIHNjb3BlOiBRdWVyeUNvbGxlY3Rpb25LZXlzT2Y8UT4gfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgUXVlcnlEaXJlY3RpdmVUeXBlID0gQW55UXVlcnkgfCBBbnlMZWdhY3lRdWVyeSB8IEFueVF1ZXJ5Q29sbGVjdGlvbjtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0UXVlcnldJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUXVlcnlEaXJlY3RpdmU8USBleHRlbmRzIFF1ZXJ5RGlyZWN0aXZlVHlwZSB8IG51bGw+IHtcbiAgcHJpdmF0ZSBlcnJvckhhbmRsZXIgPSBpbmplY3QoRXJyb3JIYW5kbGVyKTtcbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250ZXh0OiBRdWVyeURpcmVjdGl2ZUNvbnRleHQ8UT4gPSB7XG4gICAgJGltcGxpY2l0OiBudWxsLFxuICAgIGV0UXVlcnk6IG51bGwsXG4gICAgbG9hZGluZzogZmFsc2UsXG4gICAgcmVmcmVzaGluZzogZmFsc2UsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgcHJvZ3Jlc3M6IG51bGwsXG4gICAgc2NvcGU6IG51bGwsXG4gICAgcXVlcnk6IG51bGwsXG4gIH07XG5cbiAgcXVlcnkgPSBpbnB1dC5yZXF1aXJlZDxRPih7IGFsaWFzOiAnZXRRdWVyeScgfSk7XG5cbiAgY2FjaGUgPSBpbnB1dChmYWxzZSwgeyBhbGlhczogJ2V0UXVlcnlDYWNoZScgfSk7XG5cbiAgcXVlcnlTdGF0ZSA9IHF1ZXJ5U3RhdGVTaWduYWwodGhpcy5xdWVyeSk7XG5cbiAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQ8USBleHRlbmRzIFF1ZXJ5RGlyZWN0aXZlVHlwZSB8IG51bGw+KFxuICAgIGRpcjogUXVlcnlEaXJlY3RpdmU8UT4sXG4gICAgY3R4OiB1bmtub3duLFxuICApOiBjdHggaXMgUXVlcnlEaXJlY3RpdmVDb250ZXh0PFE+IHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGluamVjdChWaWV3Q29udGFpbmVyUmVmKS5jcmVhdGVFbWJlZGRlZFZpZXcoaW5qZWN0KFRlbXBsYXRlUmVmKSwgdGhpcy5fdmlld0NvbnRleHQpO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gZXh0cmFjdFF1ZXJ5KHRoaXMucXVlcnkoKSk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGlmICghcXVlcnkpIHtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC4kaW1wbGljaXQgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmV0UXVlcnkgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5yZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXJyb3IgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LnByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5zY29wZSA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQucXVlcnkgPSBudWxsO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1F1ZXJ5U3RhdGVQcmVwYXJlZChxdWVyeS5yYXdTdGF0ZSkgfHwgaXNRdWVyeVN0YXRlQ2FuY2VsbGVkKHF1ZXJ5LnJhd1N0YXRlKSkge1xuICAgICAgICAgIHF1ZXJ5LmV4ZWN1dGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LnNjb3BlID0gaXNRdWVyeUNvbGxlY3Rpb24ocXVlcnkpID8gKHF1ZXJ5LnR5cGUgYXMgUXVlcnlDb2xsZWN0aW9uS2V5c09mPFE+KSA6IG51bGw7XG4gICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LnF1ZXJ5ID0gcXVlcnkgYXMgUXVlcnlPZjxRPjtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5xdWVyeVN0YXRlKCk7XG4gICAgICBjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGUoKTtcblxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKGlzUXVlcnlTdGF0ZUxvYWRpbmcoc3RhdGUpKSB7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQucHJvZ3Jlc3MgPSBzdGF0ZS5wcm9ncmVzcyA/PyBudWxsO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LnJlZnJlc2hpbmcgPSBzdGF0ZS5tZXRhLnRyaWdnZXJlZFZpYSA9PT0gJ2F1dG8nIHx8IHN0YXRlLm1ldGEudHJpZ2dlcmVkVmlhID09PSAncG9sbCc7XG5cbiAgICAgICAgICBpZiAoIXRoaXMuX3ZpZXdDb250ZXh0LnJlZnJlc2hpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQucmVmcmVzaGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LnByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1F1ZXJ5U3RhdGVTdWNjZXNzKHN0YXRlKSkge1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmV0UXVlcnkgPSBzdGF0ZS5yZXNwb25zZSBhcyBRdWVyeURhdGFPZjxRdWVyeU9mPFE+PjtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC4kaW1wbGljaXQgPSBzdGF0ZS5yZXNwb25zZSBhcyBRdWVyeURhdGFPZjxRdWVyeU9mPFE+PjtcbiAgICAgICAgfSBlbHNlIGlmICghY2FjaGUpIHtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5ldFF1ZXJ5ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC4kaW1wbGljaXQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUXVlcnlTdGF0ZUZhaWx1cmUoc3RhdGUpKSB7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXJyb3IgPSBzdGF0ZS5lcnJvcjtcblxuICAgICAgICAgIGlmIChpc0xlZ2FjeVF1ZXJ5KGV4dHJhY3RRdWVyeSh0aGlzLnF1ZXJ5KCkpKSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3Ioc3RhdGUuZXJyb3IuaHR0cEVycm9yUmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5lcnJvciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=","import { BehaviorSubject, combineLatest, map, of, shareReplay, switchMap, tap } from 'rxjs';\nimport { filterSuccess } from '../query';\nexport class InfinityQuery {\n get currentPage$() {\n return this._currentPage$.asObservable();\n }\n get currentPage() {\n return this._currentPage$.getValue();\n }\n get currentCalculatedPage$() {\n return this._currentCalculatedPage$.asObservable();\n }\n get currentCalculatedPage() {\n return this._currentCalculatedPage$.getValue();\n }\n get totalPages$() {\n return this._totalPages$.asObservable();\n }\n get totalPages() {\n return this._totalPages$.getValue();\n }\n get itemsPerPage$() {\n return this._itemsPerPage$.asObservable();\n }\n get itemsPerPage() {\n return this._itemsPerPage$.getValue();\n }\n get data$() {\n return this._data$;\n }\n get currentQuery$() {\n return this._lastQuery$;\n }\n constructor(_config, _destroy$) {\n this._config = _config;\n this._destroy$ = _destroy$;\n this._queries$ = new BehaviorSubject([]);\n this._currentPage$ = new BehaviorSubject(null);\n this._currentCalculatedPage$ = new BehaviorSubject(null);\n this._totalPages$ = new BehaviorSubject(null);\n this._itemsPerPage$ = new BehaviorSubject(10);\n this._data$ = this._queries$.pipe(switchMap((queries) => {\n if (!queries.length) {\n return of([]);\n }\n return combineLatest(queries.map((query) => query.state$.pipe(filterSuccess(), map((state) => ({ state, query })))));\n }), tap((stateMaps) => {\n const lastState = stateMaps[stateMaps.length - 1]?.state;\n const lastQuery = stateMaps[stateMaps.length - 1]?.query;\n if (!lastState || !lastQuery) {\n return;\n }\n const totalPages = this._config.response.totalPagesExtractor?.({\n response: lastState.response,\n itemsPerPage: this.itemsPerPage,\n args: lastQuery._arguments,\n }) ??\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lastState.response?.totalPages ??\n null;\n this._totalPages$.next(totalPages);\n }), map((stateMaps) => {\n if (!stateMaps.length) {\n return null;\n }\n const fullData = stateMaps.reduce((acc, stateMap) => {\n const valExtractFn = this._config?.response?.valueExtractor;\n let data = valExtractFn\n ? valExtractFn?.(stateMap.state.response)\n : stateMap.state.response;\n if (this._config.response.reverse) {\n data = [...data].reverse();\n }\n if (this._config.response.appendItemsTo === 'start') {\n acc.unshift(...data);\n }\n else {\n acc.push(...data);\n }\n return acc;\n }, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n []);\n return fullData;\n }), shareReplay({ bufferSize: 1, refCount: true }));\n this._lastQuery$ = this._queries$.pipe(map((queries) => queries[queries.length - 1] ?? null), shareReplay({ bufferSize: 1, refCount: true }));\n this._itemsPerPage$.next(this._config.limitParam?.value ?? 10);\n }\n nextPage() {\n const newPage = (this._currentPage$.value ?? 0) + 1;\n const calculatedPage = this._config?.pageParam?.valueCalculator?.({\n page: newPage,\n totalPages: this.totalPages,\n itemsPerPage: this.itemsPerPage,\n }) ?? newPage;\n if (this.totalPages !== null && newPage > this.totalPages) {\n console.error('Cannot load more pages, already at the end. Make sure to not render the infinity query trigger using *ngIf canLoadMore');\n return;\n }\n const args = this._prepareArgs(this._config, calculatedPage);\n const query = this._config.queryCreator.prepare(args).execute();\n if (this._config.pollingInterval) {\n query.poll({ interval: this._config.pollingInterval, takeUntil: this._destroy$ });\n }\n this._queries$.next([...this._queries$.value, query]);\n this._currentPage$.next(newPage);\n this._currentCalculatedPage$.next(calculatedPage);\n }\n reset(newConfig) {\n this._config = { ...this._config, ...(newConfig ?? {}) };\n this._currentPage$.next(null);\n this._currentCalculatedPage$.next(null);\n this._totalPages$.next(null);\n this._itemsPerPage$.next(this._config.limitParam?.value ?? 10);\n this._queries$.next([]);\n this.nextPage();\n }\n _prepareArgs(config, page) {\n const pageParamLocation = this._getPageParamLocation(config?.pageParam?.location);\n const pageArgs = {\n [pageParamLocation]: {\n [config?.pageParam?.key ?? 'page']: page,\n },\n };\n const limitParamLocation = this._getPageParamLocation(config?.limitParam?.location);\n const limitArgs = {\n [limitParamLocation]: {\n [config?.limitParam?.key ?? 'limit']: config?.limitParam?.value ?? 10,\n },\n };\n const defaultConfig = config?.defaultArgs ?? {};\n const mergedArgs = pageParamLocation === limitParamLocation\n ? {\n ...defaultConfig,\n [pageParamLocation]: {\n ...(config?.defaultArgs?.[pageParamLocation] ?? {}),\n ...pageArgs[limitParamLocation],\n ...limitArgs[limitParamLocation],\n },\n }\n : {\n ...defaultConfig,\n [pageParamLocation]: {\n ...(config?.defaultArgs?.[pageParamLocation] ?? {}),\n ...pageArgs[pageParamLocation],\n },\n [limitParamLocation]: {\n ...(config?.defaultArgs?.[limitParamLocation] ?? {}),\n ...limitArgs[limitParamLocation],\n },\n };\n return mergedArgs;\n }\n _getPageParamLocation(location) {\n const loc = location ?? 'query';\n switch (loc) {\n case 'path':\n return 'pathParams';\n case 'query':\n return 'queryParams';\n case 'body':\n return 'body';\n case 'header':\n return 'headers';\n case 'variable':\n return 'variables';\n default:\n throw new Error(`Invalid pageParamLocation: ${loc}`);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdHktcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvaW5maW5pdGUtcXVlcnkvaW5maW5pdHktcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV4RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBSXpDLE1BQU0sT0FBTyxhQUFhO0lBcUZ4QixJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEMs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LEtBQUssQ0FBQyw4QkFBOEIsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFueUxlZ2FjeVF1ZXJ5Q3JlYXRvciB9IGZyb20gJy4uL2V4cGVyaW1lbnRhbCc7XG5pbXBvcnQgeyBmaWx0ZXJTdWNjZXNzIH0gZnJvbSAnLi4vcXVlcnknO1xuaW1wb3J0IHsgQW55UXVlcnlDcmVhdG9yLCBDb25zdHJ1Y3RRdWVyeSwgUXVlcnlBcmdzT2YsIFF1ZXJ5RGF0YU9mIH0gZnJvbSAnLi4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBJbmZpbml0eVF1ZXJ5Q29uZmlnLCBJbmZpbml0eVF1ZXJ5UGFyYW1Mb2NhdGlvbiB9IGZyb20gJy4vaW5maW5pdHktcXVlcnkudHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSW5maW5pdHlRdWVyeTxcbiAgUXVlcnlDcmVhdG9yIGV4dGVuZHMgQW55UXVlcnlDcmVhdG9yIHwgQW55TGVnYWN5UXVlcnlDcmVhdG9yLFxuICBRdWVyeSBleHRlbmRzIENvbnN0cnVjdFF1ZXJ5PFF1ZXJ5Q3JlYXRvcj4sXG4gIEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3NPZjxRdWVyeUNyZWF0b3I+LFxuICBRdWVyeVJlc3BvbnNlIGV4dGVuZHMgUXVlcnlEYXRhT2Y8UXVlcnlDcmVhdG9yPixcbiAgSW5maW5pdHlSZXNwb25zZSBleHRlbmRzIHVua25vd25bXSxcbj4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9xdWVyaWVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVlcnlbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50UGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50Q2FsY3VsYXRlZFBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG90YWxQYWdlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtc1BlclBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDEwKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhJCA9IHRoaXMuX3F1ZXJpZXMkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChxdWVyaWVzKSA9PiB7XG4gICAgICBpZiAoIXF1ZXJpZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFxuICAgICAgICBxdWVyaWVzLm1hcCgocXVlcnkpID0+XG4gICAgICAgICAgcXVlcnkuc3RhdGUkLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXJTdWNjZXNzKCksXG4gICAgICAgICAgICBtYXAoKHN0YXRlKSA9PiAoeyBzdGF0ZSwgcXVlcnkgfSkpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0pLFxuICAgIHRhcCgoc3RhdGVNYXBzKSA9PiB7XG4gICAgICBjb25zdCBsYXN0U3RhdGUgPSBzdGF0ZU1hcHNbc3RhdGVNYXBzLmxlbmd0aCAtIDFdPy5zdGF0ZTtcbiAgICAgIGNvbnN0IGxhc3RRdWVyeSA9IHN0YXRlTWFwc1tzdGF0ZU1hcHMubGVuZ3RoIC0gMV0/LnF1ZXJ5O1xuXG4gICAgICBpZiAoIWxhc3RTdGF0ZSB8fCAhbGFzdFF1ZXJ5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG90YWxQYWdlcyA9XG4gICAgICAgIHRoaXMuX2NvbmZpZy5yZXNwb25zZS50b3RhbFBhZ2VzRXh0cmFjdG9yPy4oe1xuICAgICAgICAgIHJlc3BvbnNlOiBsYXN0U3RhdGUucmVzcG9uc2UgYXMgUXVlcnlSZXNwb25zZSxcbiAgICAgICAgICBpdGVtc1BlclBhZ2U6IHRoaXMuaXRlbXNQZXJQYWdlLFxuICAgICAgICAgIGFyZ3M6IGxhc3RRdWVyeS5fYXJndW1lbnRzLFxuICAgICAgICB9KSA/P1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAobGFzdFN0YXRlLnJlc3BvbnNlIGFzIGFueSk/LnRvdGFsUGFnZXMgPz9cbiAgICAgICAgbnVsbDtcblxuICAgICAgdGhpcy5fdG90YWxQYWdlcyQubmV4dCh0b3RhbFBhZ2VzKTtcbiAgICB9KSxcbiAgICBtYXAoKHN0YXRlTWFwcykgPT4ge1xuICAgICAgaWYgKCFzdGF0ZU1hcHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmdWxsRGF0YSA9IHN0YXRlTWFwcy5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHN0YXRlTWFwKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsRXh0cmFjdEZuID0gdGhpcy5fY29uZmlnPy5yZXNwb25zZT8udmFsdWVFeHRyYWN0b3I7XG4gICAgICAgICAgbGV0IGRhdGEgPSB2YWxFeHRyYWN0Rm5cbiAgICAgICAgICAgID8gdmFsRXh0cmFjdEZuPy4oc3RhdGVNYXAuc3RhdGUucmVzcG9uc2UgYXMgUXVlcnlSZXNwb25zZSlcbiAgICAgICAgICAgIDogKHN0YXRlTWFwLnN0YXRlLnJlc3BvbnNlIGFzIEluZmluaXR5UmVzcG9uc2UpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5yZXNwb25zZS5yZXZlcnNlKSB7XG4gICAgICAgICAgICBkYXRhID0gWy4uLmRhdGFdLnJldmVyc2UoKSBhcyBJbmZpbml0eVJlc3BvbnNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLl9jb25maWcucmVzcG9uc2UuYXBwZW5kSXRlbXNUbyA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgICAgYWNjLnVuc2hpZnQoLi4uZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjYy5wdXNoKC4uLmRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBbXSBhcyBhbnkgYXMgSW5maW5pdHlSZXNwb25zZSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBmdWxsRGF0YTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhc3RRdWVyeSQgPSB0aGlzLl9xdWVyaWVzJC5waXBlKFxuICAgIG1hcCgocXVlcmllcykgPT4gcXVlcmllc1txdWVyaWVzLmxlbmd0aCAtIDFdID8/IG51bGwpLFxuICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICk7XG5cbiAgZ2V0IGN1cnJlbnRQYWdlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhZ2UkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50UGFnZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50Q2FsY3VsYXRlZFBhZ2UkKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Q2FsY3VsYXRlZFBhZ2UkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRDYWxjdWxhdGVkUGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudENhbGN1bGF0ZWRQYWdlJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0IHRvdGFsUGFnZXMkKCkge1xuICAgIHJldHVybiB0aGlzLl90b3RhbFBhZ2VzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCB0b3RhbFBhZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLl90b3RhbFBhZ2VzJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0IGl0ZW1zUGVyUGFnZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zUGVyUGFnZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgaXRlbXNQZXJQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtc1BlclBhZ2UkLmdldFZhbHVlKCk7XG4gIH1cblxuICBnZXQgZGF0YSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEkO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRRdWVyeSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhc3RRdWVyeSQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jb25maWc6IEluZmluaXR5UXVlcnlDb25maWc8UXVlcnlDcmVhdG9yLCBBcmdzLCBRdWVyeVJlc3BvbnNlLCBJbmZpbml0eVJlc3BvbnNlPixcbiAgICBwcml2YXRlIF9kZXN0cm95JDogT2JzZXJ2YWJsZTxib29sZWFuPixcbiAgKSB7XG4gICAgdGhpcy5faXRlbXNQZXJQYWdlJC5uZXh0KHRoaXMuX2NvbmZpZy5saW1pdFBhcmFtPy52YWx1ZSA/PyAxMCk7XG4gIH1cblxuICBuZXh0UGFnZSgpIHtcbiAgICBjb25zdCBuZXdQYWdlID0gKHRoaXMuX2N1cnJlbnRQYWdlJC52YWx1ZSA/PyAwKSArIDE7XG4gICAgY29uc3QgY2FsY3VsYXRlZFBhZ2UgPVxuICAgICAgdGhpcy5fY29uZmlnPy5wYWdlUGFyYW0/LnZhbHVlQ2FsY3VsYXRvcj8uKHtcbiAgICAgICAgcGFnZTogbmV3UGFnZSxcbiAgICAgICAgdG90YWxQYWdlczogdGhpcy50b3RhbFBhZ2VzLFxuICAgICAgICBpdGVtc1BlclBhZ2U6IHRoaXMuaXRlbXNQZXJQYWdlLFxuICAgICAgfSkgPz8gbmV3UGFnZTtcblxuICAgIGlmICh0aGlzLnRvdGFsUGFnZXMgIT09IG51bGwgJiYgbmV3UGFnZSA+IHRoaXMudG90YWxQYWdlcykge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ0Nhbm5vdCBsb2FkIG1vcmUgcGFnZXMsIGFscmVhZHkgYXQgdGhlIGVuZC4gTWFrZSBzdXJlIHRvIG5vdCByZW5kZXIgdGhlIGluZmluaXR5IHF1ZXJ5IHRyaWdnZXIgdXNpbmcgKm5nSWYgY2FuTG9hZE1vcmUnLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcmdzID0gdGhpcy5fcHJlcGFyZUFyZ3ModGhpcy5fY29uZmlnLCBjYWxjdWxhdGVkUGFnZSk7XG5cbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuX2NvbmZpZy5xdWVyeUNyZWF0b3IucHJlcGFyZShhcmdzKS5leGVjdXRlKCkgYXMgUXVlcnk7XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnBvbGxpbmdJbnRlcnZhbCkge1xuICAgICAgcXVlcnkucG9sbCh7IGludGVydmFsOiB0aGlzLl9jb25maWcucG9sbGluZ0ludGVydmFsLCB0YWtlVW50aWw6IHRoaXMuX2Rlc3Ryb3kkIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3F1ZXJpZXMkLm5leHQoWy4uLnRoaXMuX3F1ZXJpZXMkLnZhbHVlLCBxdWVyeV0pO1xuXG4gICAgdGhpcy5fY3VycmVudFBhZ2UkLm5leHQobmV3UGFnZSk7XG4gICAgdGhpcy5fY3VycmVudENhbGN1bGF0ZWRQYWdlJC5uZXh0KGNhbGN1bGF0ZWRQYWdlKTtcbiAgfVxuXG4gIHJlc2V0KFxuICAgIG5ld0NvbmZpZz86IE9taXQ8XG4gICAgICBJbmZpbml0eVF1ZXJ5Q29uZmlnPFF1ZXJ5Q3JlYXRvciwgQXJncywgUXVlcnlSZXNwb25zZSwgSW5maW5pdHlSZXNwb25zZT4sXG4gICAgICAncXVlcnlDcmVhdG9yJyB8ICdyZXNwb25zZSdcbiAgICA+LFxuICApIHtcbiAgICB0aGlzLl9jb25maWcgPSB7IC4uLnRoaXMuX2NvbmZpZywgLi4uKG5ld0NvbmZpZyA/PyB7fSkgfTtcblxuICAgIHRoaXMuX2N1cnJlbnRQYWdlJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2N1cnJlbnRDYWxjdWxhdGVkUGFnZSQubmV4dChudWxsKTtcbiAgICB0aGlzLl90b3RhbFBhZ2VzJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2l0ZW1zUGVyUGFnZSQubmV4dCh0aGlzLl9jb25maWcubGltaXRQYXJhbT8udmFsdWUgPz8gMTApO1xuICAgIHRoaXMuX3F1ZXJpZXMkLm5leHQoW10pO1xuXG4gICAgdGhpcy5uZXh0UGFnZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJlcGFyZUFyZ3MoY29uZmlnOiBJbmZpbml0eVF1ZXJ5Q29uZmlnPFF1ZXJ5Q3JlYXRvciwgQXJncywgUXVlcnlSZXNwb25zZSwgSW5maW5pdHlSZXNwb25zZT4sIHBhZ2U6IG51bWJlcikge1xuICAgIGNvbnN0IHBhZ2VQYXJhbUxvY2F0aW9uID0gdGhpcy5fZ2V0UGFnZVBhcmFtTG9jYXRpb24oY29uZmlnPy5wYWdlUGFyYW0/LmxvY2F0aW9uKTtcblxuICAgIGNvbnN0IHBhZ2VBcmdzID0ge1xuICAgICAgW3BhZ2VQYXJhbUxvY2F0aW9uXToge1xuICAgICAgICBbY29uZmlnPy5wYWdlUGFyYW0/LmtleSA/PyAncGFnZSddOiBwYWdlLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgbGltaXRQYXJhbUxvY2F0aW9uID0gdGhpcy5fZ2V0UGFnZVBhcmFtTG9jYXRpb24oY29uZmlnPy5saW1pdFBhcmFtPy5sb2NhdGlvbik7XG5cbiAgICBjb25zdCBsaW1pdEFyZ3MgPSB7XG4gICAgICBbbGltaXRQYXJhbUxvY2F0aW9uXToge1xuICAgICAgICBbY29uZmlnPy5saW1pdFBhcmFtPy5rZXkgPz8gJ2xpbWl0J106IGNvbmZpZz8ubGltaXRQYXJhbT8udmFsdWUgPz8gMTAsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0Q29uZmlnID0gY29uZmlnPy5kZWZhdWx0QXJncyA/PyB7fTtcblxuICAgIGNvbnN0IG1lcmdlZEFyZ3MgPVxuICAgICAgcGFnZVBhcmFtTG9jYXRpb24gPT09IGxpbWl0UGFyYW1Mb2NhdGlvblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRDb25maWcsXG4gICAgICAgICAgICBbcGFnZVBhcmFtTG9jYXRpb25dOiB7XG4gICAgICAgICAgICAgIC4uLihjb25maWc/LmRlZmF1bHRBcmdzPy5bcGFnZVBhcmFtTG9jYXRpb25dID8/IHt9KSxcbiAgICAgICAgICAgICAgLi4ucGFnZUFyZ3NbbGltaXRQYXJhbUxvY2F0aW9uXSxcbiAgICAgICAgICAgICAgLi4ubGltaXRBcmdzW2xpbWl0UGFyYW1Mb2NhdGlvbl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICAuLi5kZWZhdWx0Q29uZmlnLFxuICAgICAgICAgICAgW3BhZ2VQYXJhbUxvY2F0aW9uXToge1xuICAgICAgICAgICAgICAuLi4oY29uZmlnPy5kZWZhdWx0QXJncz8uW3BhZ2VQYXJhbUxvY2F0aW9uXSA/PyB7fSksXG4gICAgICAgICAgICAgIC4uLnBhZ2VBcmdzW3BhZ2VQYXJhbUxvY2F0aW9uXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbbGltaXRQYXJhbUxvY2F0aW9uXToge1xuICAgICAgICAgICAgICAuLi4oY29uZmlnPy5kZWZhdWx0QXJncz8uW2xpbWl0UGFyYW1Mb2NhdGlvbl0gPz8ge30pLFxuICAgICAgICAgICAgICAuLi5saW1pdEFyZ3NbbGltaXRQYXJhbUxvY2F0aW9uXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBtZXJnZWRBcmdzO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UGFnZVBhcmFtTG9jYXRpb24obG9jYXRpb246IEluZmluaXR5UXVlcnlQYXJhbUxvY2F0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbG9jID0gbG9jYXRpb24gPz8gJ3F1ZXJ5JztcblxuICAgIHN3aXRjaCAobG9jKSB7XG4gICAgICBjYXNlICdwYXRoJzpcbiAgICAgICAgcmV0dXJuICdwYXRoUGFyYW1zJztcbiAgICAgIGNhc2UgJ3F1ZXJ5JzpcbiAgICAgICAgcmV0dXJuICdxdWVyeVBhcmFtcyc7XG4gICAgICBjYXNlICdib2R5JzpcbiAgICAgICAgcmV0dXJuICdib2R5JztcbiAgICAgIGNhc2UgJ2hlYWRlcic6XG4gICAgICAgIHJldHVybiAnaGVhZGVycyc7XG4gICAgICBjYXNlICd2YXJpYWJsZSc6XG4gICAgICAgIHJldHVybiAndmFyaWFibGVzJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYWdlUGFyYW1Mb2NhdGlvbjogJHtsb2N9YCk7XG4gICAgfVxuICB9XG59XG4iXX0=","export const createInfinityQueryConfig = (config) => config;\nexport const skipPaginationPageParamCalculator = ({ page, itemsPerPage }) => itemsPerPage * (page - 1);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdHktcXVlcnkudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvaW5maW5pdGUtcXVlcnkvaW5maW5pdHktcXVlcnkudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FNdkMsTUFBZ0YsRUFDaEYsRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUVaLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUE4QixFQUFFLEVBQUUsQ0FDdEcsWUFBWSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW55TGVnYWN5UXVlcnlDcmVhdG9yIH0gZnJvbSAnLi4vZXhwZXJpbWVudGFsJztcbmltcG9ydCB7IEFueVF1ZXJ5Q3JlYXRvciwgUXVlcnlBcmdzT2YsIFF1ZXJ5RGF0YU9mIH0gZnJvbSAnLi4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBJbmZpbml0eVF1ZXJ5Q29uZmlnLCBQYWdlUGFyYW1DYWxjdWxhdG9yT3B0aW9ucyB9IGZyb20gJy4vaW5maW5pdHktcXVlcnkudHlwZXMnO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlSW5maW5pdHlRdWVyeUNvbmZpZyA9IDxcbiAgUXVlcnlDcmVhdG9yIGV4dGVuZHMgQW55UXVlcnlDcmVhdG9yIHwgQW55TGVnYWN5UXVlcnlDcmVhdG9yLFxuICBBcmdzIGV4dGVuZHMgUXVlcnlBcmdzT2Y8UXVlcnlDcmVhdG9yPixcbiAgUXVlcnlSZXNwb25zZSBleHRlbmRzIFF1ZXJ5RGF0YU9mPFF1ZXJ5Q3JlYXRvcj4sXG4gIEluZmluaXR5UmVzcG9uc2UgZXh0ZW5kcyB1bmtub3duW10sXG4+KFxuICBjb25maWc6IEluZmluaXR5UXVlcnlDb25maWc8UXVlcnlDcmVhdG9yLCBBcmdzLCBRdWVyeVJlc3BvbnNlLCBJbmZpbml0eVJlc3BvbnNlPixcbikgPT4gY29uZmlnO1xuXG5leHBvcnQgY29uc3Qgc2tpcFBhZ2luYXRpb25QYWdlUGFyYW1DYWxjdWxhdG9yID0gKHsgcGFnZSwgaXRlbXNQZXJQYWdlIH06IFBhZ2VQYXJhbUNhbGN1bGF0b3JPcHRpb25zKSA9PlxuICBpdGVtc1BlclBhZ2UgKiAocGFnZSAtIDEpO1xuIl19","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ChangeDetectorRef, Directive, ErrorHandler, inject, InjectionToken, Input, TemplateRef, ViewContainerRef, } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { createDestroy, DelayableDirective } from '@ethlete/core';\nimport { BehaviorSubject, combineLatest, Subject, takeUntil, tap, withLatestFrom } from 'rxjs';\nimport { isLegacyQuery } from '../experimental';\nimport { InfinityQuery } from '../infinite-query';\nimport { isQueryStateFailure, isQueryStateLoading, isQueryStateSuccess, switchQueryState, } from '../query';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@ethlete/core\";\nexport const INFINITY_QUERY_TOKEN = new InjectionToken('INFINITY_QUERY_TOKEN');\nexport class InfinityQueryDirective {\n get infinityQuery() {\n return this._infinityQuery;\n }\n set infinityQuery(v) {\n this._cleanup();\n this._infinityQuery = v;\n this._infinityQueryInstance = this._setupInfinityQuery(v);\n this._infinityQueryInstance.nextPage();\n }\n get context() {\n return this._viewContext;\n }\n get instance() {\n return this._infinityQueryInstance;\n }\n get data$() {\n return this._data$.asObservable();\n }\n static ngTemplateContextGuard(dir, ctx) {\n return true;\n }\n constructor() {\n this._queryConfigChanged$ = new Subject();\n this._viewContext = {\n $implicit: null,\n etInfinityQuery: null,\n loading: false,\n error: null,\n isFirstLoad: false,\n canLoadMore: false,\n currentPage: null,\n currentCalculatedPage: null,\n totalPages: null,\n itemsPerPage: null,\n currentQuery: null,\n };\n this._infinityQueryInstance = null;\n this._destroy$ = createDestroy();\n this._cdr = inject(ChangeDetectorRef);\n this._viewContainerRef = inject(ViewContainerRef);\n this._mainTemplateRef = inject((TemplateRef));\n this._errorHandler = inject(ErrorHandler);\n this._delayable = inject(DelayableDirective, { host: true });\n this._data$ = new BehaviorSubject([]);\n this.data = toSignal(this._data$, { requireSync: true });\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);\n }\n _setupInfinityQuery(config) {\n const instance = new InfinityQuery(config, this._destroy$);\n combineLatest([\n instance.currentQuery$.pipe(switchQueryState(), withLatestFrom(instance.currentQuery$)),\n this._delayable.isDelayed$,\n instance.data$,\n ])\n .pipe(tap(([[state, currentQuery], isDelayed, infinityArray]) => {\n this._viewContext.currentPage = instance.currentPage;\n this._viewContext.totalPages = instance.totalPages;\n this._viewContext.itemsPerPage = instance.itemsPerPage;\n this._viewContext.canLoadMore =\n (instance.totalPages !== null &&\n instance.currentPage !== null &&\n instance.totalPages > instance.currentPage) ||\n false;\n this._viewContext.currentCalculatedPage = instance.currentCalculatedPage;\n this._viewContext.currentQuery = currentQuery;\n if (isQueryStateLoading(state) || isDelayed || !infinityArray) {\n this._viewContext.loading = state ? state.meta.triggeredVia !== 'poll' : true;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = this.context.etInfinityQuery === null;\n }\n else if (isQueryStateFailure(state)) {\n this._viewContext.loading = false;\n this._viewContext.error = state.error;\n this._viewContext.isFirstLoad = false;\n if (isLegacyQuery(currentQuery)) {\n this._errorHandler.handleError(state.error.httpErrorResponse);\n }\n }\n else if (isQueryStateSuccess(state)) {\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = false;\n this._viewContext.etInfinityQuery = this._viewContext.$implicit =\n infinityArray;\n this._data$.next(infinityArray);\n }\n this._cdr.markForCheck();\n }), takeUntil(this._destroy$), takeUntil(this._queryConfigChanged$))\n .subscribe();\n return instance;\n }\n loadNextPage() {\n if (!this._infinityQueryInstance) {\n return;\n }\n if (this._viewContext.loading) {\n return;\n }\n this._infinityQueryInstance.nextPage();\n }\n reset(newConfig) {\n if (!this._infinityQueryInstance) {\n return;\n }\n this._infinityQueryInstance.reset(newConfig);\n }\n _cleanup() {\n this._queryConfigChanged$.next(true);\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.etInfinityQuery = null;\n this._viewContext.$implicit = null;\n this._viewContext.isFirstLoad = false;\n this._viewContext.canLoadMore = false;\n this._viewContext.currentPage = null;\n this._viewContext.itemsPerPage = null;\n this._viewContext.totalPages = null;\n this._viewContext.currentQuery = null;\n this._data$.next([]);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: InfinityQueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n 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 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: InfinityQueryDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etInfinityQuery]',\n exportAs: 'etInfinityQuery',\n standalone: true,\n providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }],\n hostDirectives: [DelayableDirective],\n }]\n }], ctorParameters: () => [], propDecorators: { infinityQuery: [{\n type: Input,\n args: ['etInfinityQuery']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdHktcXVlcnkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RpcmVjdGl2ZXMvaW5maW5pdHktcXVlcnkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBQ0wsV0FBVyxFQUNYLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQXdDLE1BQU0sbUJBQW1CLENBQUM7QUFDeEYsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLGdCQUFnQixHQUNqQixNQUFNLFVBQVUsQ0FBQzs7O0FBc0JsQixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsc0JBQXNCLENBQUMsQ0FBQztBQVM1RyxNQUFNLE9BQU8sc0JBQXNCO0lBOEJqQyxJQUNJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksYUFBYSxDQUFDLENBQUk7UUFDcEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FB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ZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFcnJvckhhbmRsZXIsXG4gIGluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGNyZWF0ZURlc3Ryb3ksIERlbGF5YWJsZURpcmVjdGl2ZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBTdWJqZWN0LCB0YWtlVW50aWwsIHRhcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzTGVnYWN5UXVlcnkgfSBmcm9tICcuLi9leHBlcmltZW50YWwnO1xuaW1wb3J0IHsgSW5maW5pdHlRdWVyeSwgSW5maW5pdHlRdWVyeUNvbmZpZywgSW5maW5pdHlRdWVyeU9mIH0gZnJvbSAnLi4vaW5maW5pdGUtcXVlcnknO1xuaW1wb3J0IHtcbiAgQmFzZUFyZ3VtZW50cyxcbiAgaXNRdWVyeVN0YXRlRmFpbHVyZSxcbiAgaXNRdWVyeVN0YXRlTG9hZGluZyxcbiAgaXNRdWVyeVN0YXRlU3VjY2VzcyxcbiAgc3dpdGNoUXVlcnlTdGF0ZSxcbn0gZnJvbSAnLi4vcXVlcnknO1xuaW1wb3J0IHsgQW55UXVlcnlDcmVhdG9yLCBDb25zdHJ1Y3RRdWVyeSB9IGZyb20gJy4uL3F1ZXJ5LWNyZWF0b3InO1xuaW1wb3J0IHsgUmVxdWVzdEVycm9yIH0gZnJvbSAnLi4vcmVxdWVzdCc7XG5cbmludGVyZmFjZSBJbmZpbml0eVF1ZXJ5Q29udGV4dDxcbiAgUSBleHRlbmRzIEluZmluaXR5UXVlcnlDb25maWc8QW55UXVlcnlDcmVhdG9yLCBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkLCBhbnksIHVua25vd25bXT4sXG4+IHtcbiAgJGltcGxpY2l0OiBRWydyZXNwb25zZSddWydhcnJheVR5cGUnXSB8IG51bGw7XG4gIGV0SW5maW5pdHlRdWVyeTogUVsncmVzcG9uc2UnXVsnYXJyYXlUeXBlJ10gfCBudWxsO1xuICBsb2FkaW5nOiBib29sZWFuO1xuICBlcnJvcjogUmVxdWVzdEVycm9yPHVua25vd24+IHwgbnVsbDtcblxuICBpc0ZpcnN0TG9hZDogYm9vbGVhbjtcbiAgY2FuTG9hZE1vcmU6IGJvb2xlYW47XG4gIGN1cnJlbnRQYWdlOiBudW1iZXIgfCBudWxsO1xuICBjdXJyZW50Q2FsY3VsYXRlZFBhZ2U6IG51bWJlciB8IG51bGw7XG4gIHRvdGFsUGFnZXM6IG51bWJlciB8IG51bGw7XG4gIGl0ZW1zUGVyUGFnZTogbnVtYmVyIHwgbnVsbDtcblxuICBjdXJyZW50UXVlcnk6IENvbnN0cnVjdFF1ZXJ5PFFbJ3F1ZXJ5Q3JlYXRvciddPiB8IG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBJTkZJTklUWV9RVUVSWV9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJbmZpbml0eVF1ZXJ5RGlyZWN0aXZlPGFueT4+KCdJTkZJTklUWV9RVUVSWV9UT0tFTicpO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRJbmZpbml0eVF1ZXJ5XScsXG4gIGV4cG9ydEFzOiAnZXRJbmZpbml0eVF1ZXJ5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJTkZJTklUWV9RVUVSWV9UT0tFTiwgdXNlRXhpc3Rpbmc6IEluZmluaXR5UXVlcnlEaXJlY3RpdmUgfV0sXG4gIGhvc3REaXJlY3RpdmVzOiBbRGVsYXlhYmxlRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgSW5maW5pdHlRdWVyeURpcmVjdGl2ZTxcbiAgUSBleHRlbmRzIEluZmluaXR5UXVlcnlDb25maWc8QW55UXVlcnlDcmVhdG9yLCBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkLCBhbnksIHVua25vd25bXT4sXG4+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcXVlcnlDb25maWdDaGFuZ2VkJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250ZXh0OiBJbmZpbml0eVF1ZXJ5Q29udGV4dDxRPiA9IHtcbiAgICAkaW1wbGljaXQ6IG51bGwsXG4gICAgZXRJbmZpbml0eVF1ZXJ5OiBudWxsLFxuICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgIGVycm9yOiBudWxsLFxuXG4gICAgaXNGaXJzdExvYWQ6IGZhbHNlLFxuICAgIGNhbkxvYWRNb3JlOiBmYWxzZSxcbiAgICBjdXJyZW50UGFnZTogbnVsbCxcbiAgICBjdXJyZW50Q2FsY3VsYXRlZFBhZ2U6IG51bGwsXG4gICAgdG90YWxQYWdlczogbnVsbCxcbiAgICBpdGVtc1BlclBhZ2U6IG51bGwsXG5cbiAgICBjdXJyZW50UXVlcnk6IG51bGwsXG4gIH07XG4gIHByaXZhdGUgX2luZmluaXR5UXVlcnlJbnN0YW5jZTogSW5maW5pdHlRdWVyeU9mPFE+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBjcmVhdGVEZXN0cm95KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21haW5UZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZjxJbmZpbml0eVF1ZXJ5Q29udGV4dDxRPj4pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lcnJvckhhbmRsZXIgPSBpbmplY3QoRXJyb3JIYW5kbGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVsYXlhYmxlID0gaW5qZWN0KERlbGF5YWJsZURpcmVjdGl2ZSwgeyBob3N0OiB0cnVlIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRWydyZXNwb25zZSddWydhcnJheVR5cGUnXT4oW10pO1xuXG4gIEBJbnB1dCgnZXRJbmZpbml0eVF1ZXJ5JylcbiAgZ2V0IGluZmluaXR5UXVlcnkoKTogUSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZmluaXR5UXVlcnk7XG4gIH1cbiAgc2V0IGluZmluaXR5UXVlcnkodjogUSkge1xuICAgIHRoaXMuX2NsZWFudXAoKTtcblxuICAgIHRoaXMuX2luZmluaXR5UXVlcnkgPSB2O1xuICAgIHRoaXMuX2luZmluaXR5UXVlcnlJbnN0YW5jZSA9IHRoaXMuX3NldHVwSW5maW5pdHlRdWVyeSh2KTtcbiAgICB0aGlzLl9pbmZpbml0eVF1ZXJ5SW5zdGFuY2UubmV4dFBhZ2UoKTtcbiAgfVxuICBwcml2YXRlIF9pbmZpbml0eVF1ZXJ5ITogUTtcblxuICBnZXQgY29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld0NvbnRleHQ7XG4gIH1cblxuICBnZXQgaW5zdGFuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZmluaXR5UXVlcnlJbnN0YW5jZTtcbiAgfVxuXG4gIGdldCBkYXRhJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBkYXRhID0gdG9TaWduYWwodGhpcy5fZGF0YSQsIHsgcmVxdWlyZVN5bmM6IHRydWUgfSk7XG5cbiAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQ8XG4gICAgUSBleHRlbmRzIEluZmluaXR5UXVlcnlDb25maWc8QW55UXVlcnlDcmVhdG9yLCBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkLCBhbnksIHVua25vd25bXT4sXG4gID4oZGlyOiBJbmZpbml0eVF1ZXJ5RGlyZWN0aXZlPFE+LCBjdHg6IHVua25vd24pOiBjdHggaXMgSW5maW5pdHlRdWVyeUNvbnRleHQ8UT4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fbWFpblRlbXBsYXRlUmVmLCB0aGlzLl92aWV3Q29udGV4dCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cEluZmluaXR5UXVlcnkoY29uZmlnOiBRKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgSW5maW5pdHlRdWVyeShjb25maWcsIHRoaXMuX2Rlc3Ryb3kkKSBhcyBJbmZpbml0eVF1ZXJ5T2Y8UT47XG5cbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIGluc3RhbmNlLmN1cnJlbnRRdWVyeSQucGlwZShzd2l0Y2hRdWVyeVN0YXRlKCksIHdpdGhMYXRlc3RGcm9tKGluc3RhbmNlLmN1cnJlbnRRdWVyeSQpKSxcbiAgICAgIHRoaXMuX2RlbGF5YWJsZS5pc0RlbGF5ZWQkLFxuICAgICAgaW5zdGFuY2UuZGF0YSQsXG4gICAgXSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKFtbc3RhdGUsIGN1cnJlbnRRdWVyeV0sIGlzRGVsYXllZCwgaW5maW5pdHlBcnJheV0pID0+IHtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5jdXJyZW50UGFnZSA9IGluc3RhbmNlLmN1cnJlbnRQYWdlO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LnRvdGFsUGFnZXMgPSBpbnN0YW5jZS50b3RhbFBhZ2VzO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0Lml0ZW1zUGVyUGFnZSA9IGluc3RhbmNlLml0ZW1zUGVyUGFnZTtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5jYW5Mb2FkTW9yZSA9XG4gICAgICAgICAgICAoaW5zdGFuY2UudG90YWxQYWdlcyAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICBpbnN0YW5jZS5jdXJyZW50UGFnZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICBpbnN0YW5jZS50b3RhbFBhZ2VzID4gaW5zdGFuY2UuY3VycmVudFBhZ2UpIHx8XG4gICAgICAgICAgICBmYWxzZTtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5jdXJyZW50Q2FsY3VsYXRlZFBhZ2UgPSBpbnN0YW5jZS5jdXJyZW50Q2FsY3VsYXRlZFBhZ2U7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuY3VycmVudFF1ZXJ5ID0gY3VycmVudFF1ZXJ5O1xuXG4gICAgICAgICAgaWYgKGlzUXVlcnlTdGF0ZUxvYWRpbmcoc3RhdGUpIHx8IGlzRGVsYXllZCB8fCAhaW5maW5pdHlBcnJheSkge1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IHN0YXRlID8gc3RhdGUubWV0YS50cmlnZ2VyZWRWaWEgIT09ICdwb2xsJyA6IHRydWU7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5pc0ZpcnN0TG9hZCA9IHRoaXMuY29udGV4dC5ldEluZmluaXR5UXVlcnkgPT09IG51bGw7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1F1ZXJ5U3RhdGVGYWlsdXJlKHN0YXRlKSkge1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXJyb3IgPSBzdGF0ZS5lcnJvcjtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmlzRmlyc3RMb2FkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChpc0xlZ2FjeVF1ZXJ5KGN1cnJlbnRRdWVyeSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKHN0YXRlLmVycm9yLmh0dHBFcnJvclJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGlzUXVlcnlTdGF0ZVN1Y2Nlc3Moc3RhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5pc0ZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXRJbmZpbml0eVF1ZXJ5ID0gdGhpcy5fdmlld0NvbnRleHQuJGltcGxpY2l0ID1cbiAgICAgICAgICAgICAgaW5maW5pdHlBcnJheSBhcyBRWydyZXNwb25zZSddWydhcnJheVR5cGUnXTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEkLm5leHQoaW5maW5pdHlBcnJheSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3F1ZXJ5Q29uZmlnQ2hhbmdlZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgbG9hZE5leHRQYWdlKCkge1xuICAgIGlmICghdGhpcy5faW5maW5pdHlRdWVyeUluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3ZpZXdDb250ZXh0LmxvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbmZpbml0eVF1ZXJ5SW5zdGFuY2UubmV4dFBhZ2UoKTtcbiAgfVxuXG4gIHJlc2V0KG5ld0NvbmZpZz86IE9taXQ8USwgJ3F1ZXJ5Q3JlYXRvcicgfCAncmVzcG9uc2UnPikge1xuICAgIGlmICghdGhpcy5faW5maW5pdHlRdWVyeUluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5maW5pdHlRdWVyeUluc3RhbmNlLnJlc2V0KG5ld0NvbmZpZyBhcyBhbnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYW51cCgpIHtcbiAgICB0aGlzLl9xdWVyeUNvbmZpZ0NoYW5nZWQkLm5leHQodHJ1ZSk7XG5cbiAgICB0aGlzLl92aWV3Q29udGV4dC5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fdmlld0NvbnRleHQuZXJyb3IgPSBudWxsO1xuICAgIHRoaXMuX3ZpZXdDb250ZXh0LmV0SW5maW5pdHlRdWVyeSA9IG51bGw7XG4gICAgdGhpcy5fdmlld0NvbnRleHQuJGltcGxpY2l0ID0gbnVsbDtcblxuICAgIHRoaXMuX3ZpZXdDb250ZXh0LmlzRmlyc3RMb2FkID0gZmFsc2U7XG4gICAgdGhpcy5fdmlld0NvbnRleHQuY2FuTG9hZE1vcmUgPSBmYWxzZTtcbiAgICB0aGlzLl92aWV3Q29udGV4dC5jdXJyZW50UGFnZSA9IG51bGw7XG4gICAgdGhpcy5fdmlld0NvbnRleHQuaXRlbXNQZXJQYWdlID0gbnVsbDtcbiAgICB0aGlzLl92aWV3Q29udGV4dC50b3RhbFBhZ2VzID0gbnVsbDtcblxuICAgIHRoaXMuX3ZpZXdDb250ZXh0LmN1cnJlbnRRdWVyeSA9IG51bGw7XG5cbiAgICB0aGlzLl9kYXRhJC5uZXh0KFtdKTtcbiAgfVxufVxuIl19","import { Directive, ElementRef, inject, Input } from '@angular/core';\nimport { fromEvent, Subject, takeUntil } from 'rxjs';\nimport { INFINITY_QUERY_TOKEN } from './infinity-query.directive';\nimport * as i0 from \"@angular/core\";\nexport class InfinityQueryTriggerDirective {\n constructor() {\n this._elementRef = inject((ElementRef));\n this._infinityQuery = inject(INFINITY_QUERY_TOKEN);\n this._destroy = new Subject();\n this._observer = null;\n this.click$ = fromEvent(this._elementRef.nativeElement, 'click');\n this.scrollContainerSelector = null;\n }\n ngOnInit() {\n const isInteractive = this._elementRef.nativeElement.tagName === 'BUTTON';\n if (isInteractive) {\n this.click$.pipe(takeUntil(this._destroy)).subscribe(() => this._infinityQuery.loadNextPage());\n }\n else {\n this._setupIntersectionObserver();\n }\n }\n ngOnDestroy() {\n this._destroy.next(true);\n this._destroy.unsubscribe();\n this._observer?.disconnect();\n }\n _setupIntersectionObserver() {\n this._observer = new IntersectionObserver((entries) => {\n const entry = entries[0];\n if (!entry)\n return;\n if (entry.isIntersecting && !this._infinityQuery.context.loading) {\n this._infinityQuery.loadNextPage();\n }\n }, {\n root: this.scrollContainerSelector ? document.querySelector(this.scrollContainerSelector) : null,\n rootMargin: '0px',\n threshold: [0.25, 0.5, 0.75, 1],\n });\n this._observer.observe(this._elementRef.nativeElement);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: InfinityQueryTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n 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 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: InfinityQueryTriggerDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etInfinityQueryTrigger], et-infinity-query-trigger',\n standalone: true,\n }]\n }], propDecorators: { scrollContainerSelector: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdHktcXVlcnktdHJpZ2dlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZGlyZWN0aXZlcy9pbmZpbml0eS1xdWVyeS10cmlnZ2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBTWxFLE1BQU0sT0FBTyw2QkFBNkI7SUFKMUM7UUFLVSxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxDQUFBLFVBQXVCLENBQUEsQ0FBQyxDQUFDO1FBQzlDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFOUMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDbEMsY0FBUyxHQUFnQyxJQUFJLENBQUM7UUFFdEQsV0FBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUc1RCw0QkFBdUIsR0FBa0IsSUFBSSxDQUFDO0tBc0MvQztJQXBDQyxRQUFRO1FBQ04sTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQztRQUUxRSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ2pHLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTywwQkFBMEI7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLG9CQUFvQixDQUN2QyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ1YsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXpCLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU87WUFFbkIsSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUMsRUFDRDtZQUNFLElBQUksRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDaEcsVUFBVSxFQUFFLEtBQUs7WUFDakIsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2hDLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekQsQ0FBQzs4R0EvQ1UsNkJBQTZCO2tHQUE3Qiw2QkFBNkI7OzJGQUE3Qiw2QkFBNkI7a0JBSnpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFEQUFxRDtvQkFDL0QsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQVdDLHVCQUF1QjtzQkFEdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJTkZJTklUWV9RVUVSWV9UT0tFTiB9IGZyb20gJy4vaW5maW5pdHktcXVlcnkuZGlyZWN0aXZlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0SW5maW5pdHlRdWVyeVRyaWdnZXJdLCBldC1pbmZpbml0eS1xdWVyeS10cmlnZ2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSW5maW5pdHlRdWVyeVRyaWdnZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xuICBwcml2YXRlIF9pbmZpbml0eVF1ZXJ5ID0gaW5qZWN0KElORklOSVRZX1FVRVJZX1RPS0VOKTtcblxuICBwcml2YXRlIF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSBfb2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgY2xpY2skID0gZnJvbUV2ZW50KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsaWNrJyk7XG5cbiAgQElucHV0KClcbiAgc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGlzSW50ZXJhY3RpdmUgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGFnTmFtZSA9PT0gJ0JVVFRPTic7XG5cbiAgICBpZiAoaXNJbnRlcmFjdGl2ZSkge1xuICAgICAgdGhpcy5jbGljayQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9pbmZpbml0eVF1ZXJ5LmxvYWROZXh0UGFnZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCh0cnVlKTtcbiAgICB0aGlzLl9kZXN0cm95LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fb2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5fb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZW50cmllcykgPT4ge1xuICAgICAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNbMF07XG5cbiAgICAgICAgaWYgKCFlbnRyeSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZyAmJiAhdGhpcy5faW5maW5pdHlRdWVyeS5jb250ZXh0LmxvYWRpbmcpIHtcbiAgICAgICAgICB0aGlzLl9pbmZpbml0eVF1ZXJ5LmxvYWROZXh0UGFnZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICByb290OiB0aGlzLnNjcm9sbENvbnRhaW5lclNlbGVjdG9yID8gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLnNjcm9sbENvbnRhaW5lclNlbGVjdG9yKSA6IG51bGwsXG4gICAgICAgIHJvb3RNYXJnaW46ICcwcHgnLFxuICAgICAgICB0aHJlc2hvbGQ6IFswLjI1LCAwLjUsIDAuNzUsIDFdLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG59XG4iXX0=","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class QueryShortNamePipe {\n transform(value) {\n const route = value._routeWithParams;\n if (typeof route === 'string') {\n // given an url that looks like this: https://api.github.com/repos/EladBezalel/etimo-achievements or https://api.github.com/repos/EladBezalel/etimo-achievements?test=1&test2=2\n // we want to extract the last 3 parts of the url, so we get: repos/EladBezalel/etimo-achievements\n const parts = route.split('/');\n if (parts.length > 3) {\n return `.../${parts.slice(parts.length - 3).join('/')}`;\n }\n return route;\n }\n return route;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: QueryShortNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.0.3\", ngImport: i0, type: QueryShortNamePipe, isStandalone: true, name: \"queryShortName\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: QueryShortNamePipe, decorators: [{\n type: Pipe,\n args: [{ name: 'queryShortName', standalone: true }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc2hvcnQtbmFtZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL3BpcGVzL3F1ZXJ5LXNob3J0LW5hbWUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFJcEQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixTQUFTLENBQUMsS0FBZTtRQUN2QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7UUFFckMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QiwrS0FBK0s7WUFDL0ssa0dBQWtHO1lBRWxHLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFL0IsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyQixPQUFPLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFELENBQUM7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPLEtBQWUsQ0FBQztJQUN6QixDQUFDOzhHQWxCVSxrQkFBa0I7NEdBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFEOUIsSUFBSTttQkFBQyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW55UXVlcnkgfSBmcm9tICcuLi8uLi9xdWVyeSc7XG5cbkBQaXBlKHsgbmFtZTogJ3F1ZXJ5U2hvcnROYW1lJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5U2hvcnROYW1lUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IEFueVF1ZXJ5KSB7XG4gICAgY29uc3Qgcm91dGUgPSB2YWx1ZS5fcm91dGVXaXRoUGFyYW1zO1xuXG4gICAgaWYgKHR5cGVvZiByb3V0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGdpdmVuIGFuIHVybCB0aGF0IGxvb2tzIGxpa2UgdGhpczogaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9FbGFkQmV6YWxlbC9ldGltby1hY2hpZXZlbWVudHMgb3IgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9FbGFkQmV6YWxlbC9ldGltby1hY2hpZXZlbWVudHM/dGVzdD0xJnRlc3QyPTJcbiAgICAgIC8vIHdlIHdhbnQgdG8gZXh0cmFjdCB0aGUgbGFzdCAzIHBhcnRzIG9mIHRoZSB1cmwsIHNvIHdlIGdldDogcmVwb3MvRWxhZEJlemFsZWwvZXRpbW8tYWNoaWV2ZW1lbnRzXG5cbiAgICAgIGNvbnN0IHBhcnRzID0gcm91dGUuc3BsaXQoJy8nKTtcblxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgcmV0dXJuIGAuLi4vJHtwYXJ0cy5zbGljZShwYXJ0cy5sZW5ndGggLSAzKS5qb2luKCcvJyl9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdXRlO1xuICAgIH1cblxuICAgIHJldHVybiByb3V0ZSBhcyBzdHJpbmc7XG4gIH1cbn1cbiJdfQ==","import { InjectionToken, isDevMode } from '@angular/core';\nexport const QUERY_CLIENT_DEVTOOLS_TOKEN = new InjectionToken('QUERY_CLIENT_DEVTOOLS_TOKEN');\nexport const provideQueryClientForDevtools = (queryClient) => {\n if (!isDevMode()) {\n console.warn('You are using the Query Devtools in production mode. This increases the size of your bundle and should only be used for development purposes.');\n }\n return {\n provide: QUERY_CLIENT_DEVTOOLS_TOKEN,\n useValue: queryClient,\n multi: true,\n };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY2xpZW50LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL3V0aWxzL3F1ZXJ5LWNsaWVudC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVExRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLGNBQWMsQ0FDM0QsNkJBQTZCLENBQzlCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLFdBQXVDLEVBQUUsRUFBRTtJQUN2RixJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztRQUNqQixPQUFPLENBQUMsSUFBSSxDQUNWLCtJQUErSSxDQUNoSixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLEVBQUUsMkJBQTJCO1FBQ3BDLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50IH0gZnJvbSAnLi4vLi4vcXVlcnktY2xpZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUNsaWVudERldnRvb2xzT3B0aW9ucyB7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBjbGllbnQ6IFF1ZXJ5Q2xpZW50O1xufVxuXG5leHBvcnQgY29uc3QgUVVFUllfQ0xJRU5UX0RFVlRPT0xTX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPFF1ZXJ5Q2xpZW50RGV2dG9vbHNPcHRpb25zW10+KFxuICAnUVVFUllfQ0xJRU5UX0RFVlRPT0xTX1RPS0VOJyxcbik7XG5cbmV4cG9ydCBjb25zdCBwcm92aWRlUXVlcnlDbGllbnRGb3JEZXZ0b29scyA9IChxdWVyeUNsaWVudDogUXVlcnlDbGllbnREZXZ0b29sc09wdGlvbnMpID0+IHtcbiAgaWYgKCFpc0Rldk1vZGUoKSkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdZb3UgYXJlIHVzaW5nIHRoZSBRdWVyeSBEZXZ0b29scyBpbiBwcm9kdWN0aW9uIG1vZGUuIFRoaXMgaW5jcmVhc2VzIHRoZSBzaXplIG9mIHlvdXIgYnVuZGxlIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZXZlbG9wbWVudCBwdXJwb3Nlcy4nLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IFFVRVJZX0NMSUVOVF9ERVZUT09MU19UT0tFTixcbiAgICB1c2VWYWx1ZTogcXVlcnlDbGllbnQsXG4gICAgbXVsdGk6IHRydWUsXG4gIH07XG59O1xuIl19","import { AsyncPipe, JsonPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewEncapsulation, computed, effect, inject, signal, untracked, } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { createDestroy, nextFrame } from '@ethlete/core';\nimport { BehaviorSubject, map, of, startWith, switchMap, takeUntil, tap } from 'rxjs';\nimport { BasicAuthProvider, CustomHeaderAuthProvider, isBearerAuthProvider } from '../../../auth';\nimport { QueryDirective } from '../../../directives';\nimport { isGqlQueryConfig } from '../../../query';\nimport { QueryShortNamePipe } from '../../pipes';\nimport { QUERY_CLIENT_DEVTOOLS_TOKEN } from '../../utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nexport class QueryDevtoolsComponent {\n constructor() {\n this._cdr = inject(ChangeDetectorRef);\n this._destroy$ = createDestroy();\n this.queryClientConfigs = inject(QUERY_CLIENT_DEVTOOLS_TOKEN);\n this.isOpen = signal(false);\n this.isTranslucent = signal(false);\n this.snapLayout = signal('full');\n this.queryListMode = signal('live');\n this.viewMode = signal('query');\n this.showResponse = signal(false);\n this.showRawResponse = signal(false);\n this.showQueryConfig = signal(false);\n this.showEntityStoreValue = signal(false);\n this.showArguments = signal(false);\n this.selectedClientIdCtrl = new FormControl(0);\n this.selectedClientId = toSignal(this.selectedClientIdCtrl.valueChanges.pipe(startWith(this.selectedClientIdCtrl.value)));\n this.selectedQueryId = signal(null);\n this.selectedClientConfig = computed(() => {\n if (this.queryClientConfigs.length === 1) {\n return this.queryClientConfigs[0];\n }\n const index = this.selectedClientId() ?? 0;\n const cfg = this.queryClientConfigs[index];\n if (!cfg) {\n return this.queryClientConfigs[0];\n }\n return cfg;\n });\n this.queryStore = computed(() => {\n const config = this.selectedClientConfig();\n return config.client._store;\n });\n this.queryStore$ = toObservable(this.queryStore);\n this._queries$ = new BehaviorSubject([]);\n this.queries = toSignal(this._queries$);\n this.selectedQuery = computed(() => {\n const id = this.selectedQueryId();\n const mode = this.queryListMode();\n if (id === null || !mode) {\n return null;\n }\n if (mode === 'live') {\n return this.queries()?.find((q) => q._id === id) ?? null;\n }\n return this.queryHistory$.getValue()?.find((q) => q._id === id) ?? null;\n });\n this.selectedQuery$ = toObservable(this.selectedQuery);\n this.selectedQueryEntityStore = computed(() => {\n const query = this.selectedQuery();\n if (!query)\n return null;\n return query.store;\n });\n this.selectedQueryEntityStore$ = toObservable(this.selectedQueryEntityStore);\n this.selectedQueryEntityStoreValue$ = this.selectedQueryEntityStore$.pipe(switchMap((s) => s?._change$.pipe(startWith(''), map(() => {\n if (!s._dictionary)\n return null;\n return Array.from(s._dictionary).reduce((obj, [key, value]) => {\n obj[key] = value;\n return obj;\n }, {});\n })) ?? of(null)));\n this.queryHistory$ = new BehaviorSubject([]);\n this.stringifiedQueryConfig = computed(() => {\n const query = this.selectedQuery();\n if (!query)\n return null;\n const cfg = query._queryConfig;\n const route = typeof cfg.route === 'string' ? cfg.route : cfg.route ? cfg.route({}).replace(/undefined/g, ':param') : null;\n const sharedCfg = {\n method: cfg.method,\n secure: cfg.secure,\n route,\n reportProgress: cfg.reportProgress,\n responseType: cfg.responseType,\n withCredentials: cfg.withCredentials,\n autoRefreshOn: cfg.autoRefreshOn,\n enableSmartPolling: cfg.enableSmartPolling,\n hasEntityStore: !!cfg.entity,\n };\n if (isGqlQueryConfig(cfg)) {\n return {\n ...sharedCfg,\n query: cfg.query,\n transferVia: cfg.transferVia,\n };\n }\n return {\n ...sharedCfg,\n };\n });\n this.authProvider = toSignal(toObservable(this.selectedClientConfig).pipe(switchMap((c) => c.client.authProvider$)));\n this.authProviderDetails = computed(() => {\n const provider = this.authProvider();\n if (!provider)\n return null;\n if (provider instanceof CustomHeaderAuthProvider) {\n return {\n type: 'CustomHeaderAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {\n name: provider._config.name,\n value: provider._config.value,\n },\n };\n }\n else if (provider instanceof BasicAuthProvider) {\n return {\n type: 'BasicAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {\n username: provider._config.username,\n password: provider._config.password,\n },\n };\n }\n else if (isBearerAuthProvider(provider)) {\n const refreshCfg = provider._config.refreshConfig;\n return {\n type: 'BearerAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {\n token: provider._config.token,\n refreshConfig: {\n refreshOnUnauthorizedResponse: refreshCfg?.refreshOnUnauthorizedResponse ?? 'true (default)',\n token: refreshCfg?.token,\n cookieName: refreshCfg?.cookieName,\n cookieDomain: refreshCfg?.cookieDomain ?? 'current origin (default)',\n cookieExpiresInDays: refreshCfg?.cookieExpiresInDays ?? '30 (default)',\n cookiePath: refreshCfg?.cookiePath ?? '/ (default)',\n cookieEnabled: refreshCfg?.cookieEnabled ?? 'true (default)',\n cookieSameSite: refreshCfg?.cookieSameSite ?? 'lax (default)',\n refreshBuffer: refreshCfg?.refreshBuffer ?? '30000 (default)',\n expiresInPropertyName: refreshCfg?.expiresInPropertyName ?? 'exp (default)',\n strategy: refreshCfg?.strategy ?? 'AuthBearerRefreshStrategy.BeforeExpiration (default)',\n requestArgsAdapter: refreshCfg?.requestArgsAdapter ? 'custom' : 'default',\n responseAdapter: refreshCfg?.responseAdapter ? 'custom' : 'default',\n },\n },\n };\n }\n else {\n return {\n type: 'UnknownAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {},\n };\n }\n });\n this.trackByClient = (_, { client }) => client.config.baseRoute;\n this.trackByQuery = (_, { _id }) => _id;\n this.selectedClientIdCtrl.valueChanges\n .pipe(tap(() => this.clearQueryHistory()), takeUntil(this._destroy$))\n .subscribe();\n this.selectedQuery$\n .pipe(switchMap((q) => q?._dependentsChanged$ ?? of(null)), tap(() => this._cdr.markForCheck()), takeUntilDestroyed())\n .subscribe();\n toObservable(this.authProviderDetails)\n .pipe(switchMap((ap) => (ap?.type === 'BearerAuthProvider' ? ap.provider.tokens$ : of(null))))\n .pipe(tap(() => this._cdr.markForCheck()), takeUntilDestroyed())\n .subscribe();\n this.queryStore$\n .pipe(switchMap((s) => s.storeChange$.pipe(startWith(''), map(() => s._store), tap((s) => {\n untracked(() => {\n this._queries$.next(Array.from(s.values()));\n });\n }), takeUntil(this._destroy$))))\n .subscribe();\n this.queryStore$\n .pipe(switchMap((s) => s.queryCreated$.pipe(tap((query) => {\n const currentHistory = this.queryHistory$.getValue();\n if (!currentHistory)\n return;\n const currentHistoryClone = [...currentHistory];\n if (!currentHistory.some((q) => q._id === query._id)) {\n currentHistoryClone.unshift(query);\n }\n currentHistoryClone.splice(50);\n this.queryHistory$.next(currentHistoryClone);\n }), takeUntil(this._destroy$))))\n .subscribe();\n this._queries$\n .pipe(tap((queries) => {\n const currentHistory = this.queryHistory$.getValue();\n if (!queries || !currentHistory)\n return;\n const currentHistoryClone = [...currentHistory];\n for (const query of queries) {\n if (!currentHistoryClone.some((q) => q._id === query._id)) {\n currentHistoryClone.unshift(query);\n }\n }\n currentHistoryClone.splice(50);\n this.queryHistory$.next(currentHistoryClone);\n }), takeUntil(this._destroy$))\n .subscribe();\n effect(() => {\n const devtoolConfig = {\n isOpen: this.isOpen(),\n isTranslucent: this.isTranslucent(),\n snapLayout: this.snapLayout(),\n showResponse: this.showResponse(),\n showRawResponse: this.showRawResponse(),\n showQueryConfig: this.showQueryConfig(),\n showEntityStoreValue: this.showEntityStoreValue(),\n showArguments: this.showArguments(),\n selectedClientId: this.selectedClientId(),\n selectedQueryPath: this.selectedQueryId(),\n queryListMode: this.queryListMode(),\n viewMode: this.viewMode(),\n };\n window.localStorage.setItem('ethlete:query:devtools', JSON.stringify(devtoolConfig));\n });\n const initialConfig = window.localStorage.getItem('ethlete:query:devtools');\n if (initialConfig) {\n const parsed = JSON.parse(initialConfig);\n this.isOpen.set(parsed.isOpen ?? false);\n this.isTranslucent.set(parsed.isTranslucent ?? false);\n this.snapLayout.set(parsed.snapLayout ?? 'full');\n this.showResponse.set(parsed.showResponse ?? false);\n this.showRawResponse.set(parsed.showRawResponse ?? false);\n this.showQueryConfig.set(parsed.showQueryConfig ?? false);\n this.showEntityStoreValue.set(parsed.showEntityStoreValue ?? false);\n this.showArguments.set(parsed.showArguments ?? false);\n this.selectedClientIdCtrl.setValue(parsed.selectedClientId ?? 0);\n this.selectedQueryId.set(parsed.selectedQueryPath ?? null);\n this.queryListMode.set(parsed.queryListMode ?? 'live');\n this.viewMode.set(parsed.viewMode ?? 'query');\n }\n }\n toggleOpen() {\n this.isOpen.set(!this.isOpen());\n }\n toggleTranslucent() {\n this.isTranslucent.set(!this.isTranslucent());\n }\n toggleShowResponse() {\n this.showResponse.set(!this.showResponse());\n nextFrame(() => {\n this._cdr.markForCheck();\n });\n }\n toggleShowQueryConfig() {\n this.showQueryConfig.set(!this.showQueryConfig());\n }\n toggleShowRawResponse() {\n this.showRawResponse.set(!this.showRawResponse());\n }\n toggleShowEntityStoreValue() {\n this.showEntityStoreValue.set(!this.showEntityStoreValue());\n }\n toggleShowArguments() {\n this.showArguments.set(!this.showArguments());\n }\n selectSnapLayout(layout) {\n this.snapLayout.set(layout);\n }\n selectQueryListMode(mode) {\n this.queryListMode.set(mode);\n }\n selectViewMode(mode) {\n this.viewMode.set(mode);\n }\n selectQuery(query) {\n this.selectedQueryId.set(query._id);\n }\n clearQueryHistory() {\n this.queryHistory$.next([]);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: QueryDevtoolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n 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.NgSelectOption, selector: \"option\", inputs: [\"ngValue\", \"value\"] }, { kind: \"directive\", type: i1.ɵNgSelectMultipleOption, selector: \"option\", inputs: [\"ngValue\", \"value\"] }, { kind: \"directive\", type: i1.SelectControlValueAccessor, selector: \"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]\", inputs: [\"compareWith\"] }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.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 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: QueryDevtoolsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'et-query-devtools', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.ShadowDom, host: {\n class: 'et-query-devtools',\n }, imports: [AsyncPipe, JsonPipe, ReactiveFormsModule, NgClass, QueryShortNamePipe, QueryDirective], 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\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZGV2dG9vbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL2NvbXBvbmVudHMvcXVlcnktZGV2dG9vbHMvcXVlcnktZGV2dG9vbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL2NvbXBvbmVudHMvcXVlcnktZGV2dG9vbHMvcXVlcnktZGV2dG9vbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxP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O0lBRVMsbUJBQW1CLENBQUMsSUFBbUI7UUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVTLGNBQWMsQ0FBQyxJQUFtQjtRQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRVMsV0FBVyxDQUFDLEtBQWU7UUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFUyxpQkFBaUI7UUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQzs4R0E3WFUsc0JBQXNCO2tHQUF0QixzQkFBc0IsNEhDdkNuQyxtdmZBa1pBLHU0S0Q3V1ksU0FBUyx5Q0FBRSxRQUFRLDRDQUFFLG1CQUFtQixxdEJBQUUsT0FBTywrRUFBRSxrQkFBa0IsdURBQUUsY0FBYzs7MkZBRXBGLHNCQUFzQjtrQkFYbEMsU0FBUzsrQkFDRSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsU0FBUyxRQUNwQzt3QkFDSixLQUFLLEVBQUUsbUJBQW1CO3FCQUMzQixXQUNRLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBKc29uUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgVHJhY2tCeUZ1bmN0aW9uLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNyZWF0ZURlc3Ryb3ksIG5leHRGcmFtZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtYXAsIG9mLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhc2ljQXV0aFByb3ZpZGVyLCBDdXN0b21IZWFkZXJBdXRoUHJvdmlkZXIsIGlzQmVhcmVyQXV0aFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vLi4vYXV0aCc7XG5pbXBvcnQgeyBRdWVyeURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRW50aXR5U3RvcmUgfSBmcm9tICcuLi8uLi8uLi9lbnRpdHknO1xuaW1wb3J0IHsgQW55UXVlcnksIGlzR3FsUXVlcnlDb25maWcgfSBmcm9tICcuLi8uLi8uLi9xdWVyeSc7XG5pbXBvcnQgeyBRdWVyeVNob3J0TmFtZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcyc7XG5pbXBvcnQgeyBRVUVSWV9DTElFTlRfREVWVE9PTFNfVE9LRU4sIFF1ZXJ5Q2xpZW50RGV2dG9vbHNPcHRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG50eXBlIFF1ZXJ5RGV2dG9vbHNTbmFwTGF5b3V0ID0gJ2Z1bGwnIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ3RvcCc7XG50eXBlIFF1ZXJ5TGlzdE1vZGUgPSAnbGl2ZScgfCAnaGlzdG9yeSc7XG50eXBlIFF1ZXJ5Vmlld01vZGUgPSAncXVlcnknIHwgJ2F1dGhQcm92aWRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V0LXF1ZXJ5LWRldnRvb2xzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXJ5LWRldnRvb2xzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVlcnktZGV2dG9vbHMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLlNoYWRvd0RvbSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZXQtcXVlcnktZGV2dG9vbHMnLFxuICB9LFxuICBpbXBvcnRzOiBbQXN5bmNQaXBlLCBKc29uUGlwZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTmdDbGFzcywgUXVlcnlTaG9ydE5hbWVQaXBlLCBRdWVyeURpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5RGV2dG9vbHNDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gY3JlYXRlRGVzdHJveSgpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyeUNsaWVudENvbmZpZ3MgPSBpbmplY3QoUVVFUllfQ0xJRU5UX0RFVlRPT0xTX1RPS0VOKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNPcGVuID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzVHJhbnNsdWNlbnQgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc25hcExheW91dCA9IHNpZ25hbDxRdWVyeURldnRvb2xzU25hcExheW91dD4oJ2Z1bGwnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHF1ZXJ5TGlzdE1vZGUgPSBzaWduYWw8UXVlcnlMaXN0TW9kZT4oJ2xpdmUnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHZpZXdNb2RlID0gc2lnbmFsPFF1ZXJ5Vmlld01vZGU+KCdxdWVyeScpO1xuXG4gIHByb3RlY3RlZCBzaG93UmVzcG9uc2UgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgc2hvd1Jhd1Jlc3BvbnNlID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHNob3dRdWVyeUNvbmZpZyA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBzaG93RW50aXR5U3RvcmVWYWx1ZSA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBzaG93QXJndW1lbnRzID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRDbGllbnRJZEN0cmwgPSBuZXcgRm9ybUNvbnRyb2woMCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkQ2xpZW50SWQgPSB0b1NpZ25hbChcbiAgICB0aGlzLnNlbGVjdGVkQ2xpZW50SWRDdHJsLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLnNlbGVjdGVkQ2xpZW50SWRDdHJsLnZhbHVlKSksXG4gICk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFF1ZXJ5SWQgPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkQ2xpZW50Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLnF1ZXJ5Q2xpZW50Q29uZmlncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2xpZW50Q29uZmlnc1swXSE7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkQ2xpZW50SWQoKSA/PyAwO1xuXG4gICAgY29uc3QgY2ZnID0gdGhpcy5xdWVyeUNsaWVudENvbmZpZ3NbaW5kZXhdO1xuXG4gICAgaWYgKCFjZmcpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2xpZW50Q29uZmlnc1swXSE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNmZztcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHF1ZXJ5U3RvcmUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5zZWxlY3RlZENsaWVudENvbmZpZygpO1xuXG4gICAgcmV0dXJuIGNvbmZpZy5jbGllbnQuX3N0b3JlO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcnlTdG9yZSQgPSB0b09ic2VydmFibGUodGhpcy5xdWVyeVN0b3JlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9xdWVyaWVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QW55UXVlcnlbXT4oW10pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcmllcyA9IHRvU2lnbmFsKHRoaXMuX3F1ZXJpZXMkKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRRdWVyeSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpZCA9IHRoaXMuc2VsZWN0ZWRRdWVyeUlkKCk7XG4gICAgY29uc3QgbW9kZSA9IHRoaXMucXVlcnlMaXN0TW9kZSgpO1xuXG4gICAgaWYgKGlkID09PSBudWxsIHx8ICFtb2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobW9kZSA9PT0gJ2xpdmUnKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWVyaWVzKCk/LmZpbmQoKHEpID0+IHEuX2lkID09PSBpZCkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5xdWVyeUhpc3RvcnkkLmdldFZhbHVlKCk/LmZpbmQoKHEpID0+IHEuX2lkID09PSBpZCkgPz8gbnVsbDtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkUXVlcnkkID0gdG9PYnNlcnZhYmxlKHRoaXMuc2VsZWN0ZWRRdWVyeSk7XG5cbiAgcHJvdGVjdGVkIHNlbGVjdGVkUXVlcnlFbnRpdHlTdG9yZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuc2VsZWN0ZWRRdWVyeSgpO1xuXG4gICAgaWYgKCFxdWVyeSkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gcXVlcnkuc3RvcmUgYXMgRW50aXR5U3RvcmU8dW5rbm93bj4gfCBudWxsO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRRdWVyeUVudGl0eVN0b3JlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNlbGVjdGVkUXVlcnlFbnRpdHlTdG9yZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkUXVlcnlFbnRpdHlTdG9yZVZhbHVlJCA9IHRoaXMuc2VsZWN0ZWRRdWVyeUVudGl0eVN0b3JlJC5waXBlKFxuICAgIHN3aXRjaE1hcChcbiAgICAgIChzKSA9PlxuICAgICAgICBzPy5fY2hhbmdlJC5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aCgnJyksXG4gICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghcy5fZGljdGlvbmFyeSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHMuX2RpY3Rpb25hcnkpLnJlZHVjZShcbiAgICAgICAgICAgICAgKG9iaiwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgICkgPz8gb2YobnVsbCksXG4gICAgKSxcbiAgKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcnlIaXN0b3J5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QW55UXVlcnlbXT4oW10pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzdHJpbmdpZmllZFF1ZXJ5Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5zZWxlY3RlZFF1ZXJ5KCk7XG5cbiAgICBpZiAoIXF1ZXJ5KSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGNmZyA9IHF1ZXJ5Ll9xdWVyeUNvbmZpZztcbiAgICBjb25zdCByb3V0ZSA9XG4gICAgICB0eXBlb2YgY2ZnLnJvdXRlID09PSAnc3RyaW5nJyA/IGNmZy5yb3V0ZSA6IGNmZy5yb3V0ZSA/IGNmZy5yb3V0ZSh7fSkucmVwbGFjZSgvdW5kZWZpbmVkL2csICc6cGFyYW0nKSA6IG51bGw7XG5cbiAgICBjb25zdCBzaGFyZWRDZmcgPSB7XG4gICAgICBtZXRob2Q6IGNmZy5tZXRob2QsXG4gICAgICBzZWN1cmU6IGNmZy5zZWN1cmUsXG4gICAgICByb3V0ZSxcbiAgICAgIHJlcG9ydFByb2dyZXNzOiBjZmcucmVwb3J0UHJvZ3Jlc3MsXG4gICAgICByZXNwb25zZVR5cGU6IGNmZy5yZXNwb25zZVR5cGUsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGNmZy53aXRoQ3JlZGVudGlhbHMsXG4gICAgICBhdXRvUmVmcmVzaE9uOiBjZmcuYXV0b1JlZnJlc2hPbixcbiAgICAgIGVuYWJsZVNtYXJ0UG9sbGluZzogY2ZnLmVuYWJsZVNtYXJ0UG9sbGluZyxcbiAgICAgIGhhc0VudGl0eVN0b3JlOiAhIWNmZy5lbnRpdHksXG4gICAgfTtcblxuICAgIGlmIChpc0dxbFF1ZXJ5Q29uZmlnKGNmZykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnNoYXJlZENmZyxcbiAgICAgICAgcXVlcnk6IGNmZy5xdWVyeSxcbiAgICAgICAgdHJhbnNmZXJWaWE6IGNmZy50cmFuc2ZlclZpYSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnNoYXJlZENmZyxcbiAgICB9O1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXV0aFByb3ZpZGVyID0gdG9TaWduYWwoXG4gICAgdG9PYnNlcnZhYmxlKHRoaXMuc2VsZWN0ZWRDbGllbnRDb25maWcpLnBpcGUoc3dpdGNoTWFwKChjKSA9PiBjLmNsaWVudC5hdXRoUHJvdmlkZXIkKSksXG4gICk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGF1dGhQcm92aWRlckRldGFpbHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmF1dGhQcm92aWRlcigpO1xuXG4gICAgaWYgKCFwcm92aWRlcikgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAocHJvdmlkZXIgaW5zdGFuY2VvZiBDdXN0b21IZWFkZXJBdXRoUHJvdmlkZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdDdXN0b21IZWFkZXJBdXRoUHJvdmlkZXInLFxuICAgICAgICBoZWFkZXI6ICgpID0+IHByb3ZpZGVyLmhlYWRlcixcbiAgICAgICAgcHJvdmlkZXI6IHByb3ZpZGVyLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBuYW1lOiBwcm92aWRlci5fY29uZmlnLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHByb3ZpZGVyLl9jb25maWcudmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9IGFzIGNvbnN0O1xuICAgIH0gZWxzZSBpZiAocHJvdmlkZXIgaW5zdGFuY2VvZiBCYXNpY0F1dGhQcm92aWRlcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ0Jhc2ljQXV0aFByb3ZpZGVyJyxcbiAgICAgICAgaGVhZGVyOiAoKSA9PiBwcm92aWRlci5oZWFkZXIsXG4gICAgICAgIHByb3ZpZGVyOiBwcm92aWRlcixcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgdXNlcm5hbWU6IHByb3ZpZGVyLl9jb25maWcudXNlcm5hbWUsXG4gICAgICAgICAgcGFzc3dvcmQ6IHByb3ZpZGVyLl9jb25maWcucGFzc3dvcmQsXG4gICAgICAgIH0sXG4gICAgICB9IGFzIGNvbnN0O1xuICAgIH0gZWxzZSBpZiAoaXNCZWFyZXJBdXRoUHJvdmlkZXIocHJvdmlkZXIpKSB7XG4gICAgICBjb25zdCByZWZyZXNoQ2ZnID0gcHJvdmlkZXIuX2NvbmZpZy5yZWZyZXNoQ29uZmlnO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnQmVhcmVyQXV0aFByb3ZpZGVyJyxcbiAgICAgICAgaGVhZGVyOiAoKSA9PiBwcm92aWRlci5oZWFkZXIsXG4gICAgICAgIHByb3ZpZGVyOiBwcm92aWRlcixcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgdG9rZW46IHByb3ZpZGVyLl9jb25maWcudG9rZW4sXG4gICAgICAgICAgcmVmcmVzaENvbmZpZzoge1xuICAgICAgICAgICAgcmVmcmVzaE9uVW5hdXRob3JpemVkUmVzcG9uc2U6IHJlZnJlc2hDZmc/LnJlZnJlc2hPblVuYXV0aG9yaXplZFJlc3BvbnNlID8/ICd0cnVlIChkZWZhdWx0KScsXG4gICAgICAgICAgICB0b2tlbjogcmVmcmVzaENmZz8udG9rZW4sXG4gICAgICAgICAgICBjb29raWVOYW1lOiByZWZyZXNoQ2ZnPy5jb29raWVOYW1lLFxuICAgICAgICAgICAgY29va2llRG9tYWluOiByZWZyZXNoQ2ZnPy5jb29raWVEb21haW4gPz8gJ2N1cnJlbnQgb3JpZ2luIChkZWZhdWx0KScsXG4gICAgICAgICAgICBjb29raWVFeHBpcmVzSW5EYXlzOiByZWZyZXNoQ2ZnPy5jb29raWVFeHBpcmVzSW5EYXlzID8/ICczMCAoZGVmYXVsdCknLFxuICAgICAgICAgICAgY29va2llUGF0aDogcmVmcmVzaENmZz8uY29va2llUGF0aCA/PyAnLyAoZGVmYXVsdCknLFxuICAgICAgICAgICAgY29va2llRW5hYmxlZDogcmVmcmVzaENmZz8uY29va2llRW5hYmxlZCA/PyAndHJ1ZSAoZGVmYXVsdCknLFxuICAgICAgICAgICAgY29va2llU2FtZVNpdGU6IHJlZnJlc2hDZmc/LmNvb2tpZVNhbWVTaXRlID8/ICdsYXggKGRlZmF1bHQpJyxcbiAgICAgICAgICAgIHJlZnJlc2hCdWZmZXI6IHJlZnJlc2hDZmc/LnJlZnJlc2hCdWZmZXIgPz8gJzMwMDAwIChkZWZhdWx0KScsXG4gICAgICAgICAgICBleHBpcmVzSW5Qcm9wZXJ0eU5hbWU6IHJlZnJlc2hDZmc/LmV4cGlyZXNJblByb3BlcnR5TmFtZSA/PyAnZXhwIChkZWZhdWx0KScsXG4gICAgICAgICAgICBzdHJhdGVneTogcmVmcmVzaENmZz8uc3RyYXRlZ3kgPz8gJ0F1dGhCZWFyZXJSZWZyZXNoU3RyYXRlZ3kuQmVmb3JlRXhwaXJhdGlvbiAoZGVmYXVsdCknLFxuICAgICAgICAgICAgcmVxdWVzdEFyZ3NBZGFwdGVyOiByZWZyZXNoQ2ZnPy5yZXF1ZXN0QXJnc0FkYXB0ZXIgPyAnY3VzdG9tJyA6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgIHJlc3BvbnNlQWRhcHRlcjogcmVmcmVzaENmZz8ucmVzcG9uc2VBZGFwdGVyID8gJ2N1c3RvbScgOiAnZGVmYXVsdCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgY29uc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdVbmtub3duQXV0aFByb3ZpZGVyJyxcbiAgICAgICAgaGVhZGVyOiAoKSA9PiBwcm92aWRlci5oZWFkZXIsXG4gICAgICAgIHByb3ZpZGVyOiBwcm92aWRlcixcbiAgICAgICAgY29uZmlnOiB7fSxcbiAgICAgIH0gYXMgY29uc3Q7XG4gICAgfVxuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ2xpZW50SWRDdHJsLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLmNsZWFyUXVlcnlIaXN0b3J5KCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zZWxlY3RlZFF1ZXJ5JFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocSkgPT4gcT8uX2RlcGVuZGVudHNDaGFuZ2VkJCA/PyBvZihudWxsKSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCkpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmF1dGhQcm92aWRlckRldGFpbHMpXG4gICAgICAucGlwZShzd2l0Y2hNYXAoKGFwKSA9PiAoYXA/LnR5cGUgPT09ICdCZWFyZXJBdXRoUHJvdmlkZXInID8gYXAucHJvdmlkZXIudG9rZW5zJCA6IG9mKG51bGwpKSkpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5xdWVyeVN0b3JlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocykgPT5cbiAgICAgICAgICBzLnN0b3JlQ2hhbmdlJC5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiBzLl9zdG9yZSksXG4gICAgICAgICAgICB0YXAoKHMpID0+IHtcbiAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9xdWVyaWVzJC5uZXh0KEFycmF5LmZyb20ocy52YWx1ZXMoKSkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5xdWVyeVN0b3JlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocykgPT5cbiAgICAgICAgICBzLnF1ZXJ5Q3JlYXRlZCQucGlwZShcbiAgICAgICAgICAgIHRhcCgocXVlcnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudEhpc3RvcnkgPSB0aGlzLnF1ZXJ5SGlzdG9yeSQuZ2V0VmFsdWUoKTtcblxuICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRIaXN0b3J5KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudEhpc3RvcnlDbG9uZSA9IFsuLi5jdXJyZW50SGlzdG9yeV07XG5cbiAgICAgICAgICAgICAgaWYgKCFjdXJyZW50SGlzdG9yeS5zb21lKChxKSA9PiBxLl9pZCA9PT0gcXVlcnkuX2lkKSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRIaXN0b3J5Q2xvbmUudW5zaGlmdChxdWVyeSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjdXJyZW50SGlzdG9yeUNsb25lLnNwbGljZSg1MCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5xdWVyeUhpc3RvcnkkLm5leHQoY3VycmVudEhpc3RvcnlDbG9uZSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuX3F1ZXJpZXMkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChxdWVyaWVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudEhpc3RvcnkgPSB0aGlzLnF1ZXJ5SGlzdG9yeSQuZ2V0VmFsdWUoKTtcblxuICAgICAgICAgIGlmICghcXVlcmllcyB8fCAhY3VycmVudEhpc3RvcnkpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRIaXN0b3J5Q2xvbmUgPSBbLi4uY3VycmVudEhpc3RvcnldO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBxdWVyeSBvZiBxdWVyaWVzKSB7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRIaXN0b3J5Q2xvbmUuc29tZSgocSkgPT4gcS5faWQgPT09IHF1ZXJ5Ll9pZCkpIHtcbiAgICAgICAgICAgICAgY3VycmVudEhpc3RvcnlDbG9uZS51bnNoaWZ0KHF1ZXJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50SGlzdG9yeUNsb25lLnNwbGljZSg1MCk7XG5cbiAgICAgICAgICB0aGlzLnF1ZXJ5SGlzdG9yeSQubmV4dChjdXJyZW50SGlzdG9yeUNsb25lKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZGV2dG9vbENvbmZpZyA9IHtcbiAgICAgICAgaXNPcGVuOiB0aGlzLmlzT3BlbigpLFxuICAgICAgICBpc1RyYW5zbHVjZW50OiB0aGlzLmlzVHJhbnNsdWNlbnQoKSxcbiAgICAgICAgc25hcExheW91dDogdGhpcy5zbmFwTGF5b3V0KCksXG4gICAgICAgIHNob3dSZXNwb25zZTogdGhpcy5zaG93UmVzcG9uc2UoKSxcbiAgICAgICAgc2hvd1Jhd1Jlc3BvbnNlOiB0aGlzLnNob3dSYXdSZXNwb25zZSgpLFxuICAgICAgICBzaG93UXVlcnlDb25maWc6IHRoaXMuc2hvd1F1ZXJ5Q29uZmlnKCksXG4gICAgICAgIHNob3dFbnRpdHlTdG9yZVZhbHVlOiB0aGlzLnNob3dFbnRpdHlTdG9yZVZhbHVlKCksXG4gICAgICAgIHNob3dBcmd1bWVudHM6IHRoaXMuc2hvd0FyZ3VtZW50cygpLFxuICAgICAgICBzZWxlY3RlZENsaWVudElkOiB0aGlzLnNlbGVjdGVkQ2xpZW50SWQoKSxcbiAgICAgICAgc2VsZWN0ZWRRdWVyeVBhdGg6IHRoaXMuc2VsZWN0ZWRRdWVyeUlkKCksXG4gICAgICAgIHF1ZXJ5TGlzdE1vZGU6IHRoaXMucXVlcnlMaXN0TW9kZSgpLFxuICAgICAgICB2aWV3TW9kZTogdGhpcy52aWV3TW9kZSgpLFxuICAgICAgfTtcblxuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdldGhsZXRlOnF1ZXJ5OmRldnRvb2xzJywgSlNPTi5zdHJpbmdpZnkoZGV2dG9vbENvbmZpZykpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgaW5pdGlhbENvbmZpZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXRobGV0ZTpxdWVyeTpkZXZ0b29scycpO1xuXG4gICAgaWYgKGluaXRpYWxDb25maWcpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoaW5pdGlhbENvbmZpZyk7XG5cbiAgICAgIHRoaXMuaXNPcGVuLnNldChwYXJzZWQuaXNPcGVuID8/IGZhbHNlKTtcbiAgICAgIHRoaXMuaXNUcmFuc2x1Y2VudC5zZXQocGFyc2VkLmlzVHJhbnNsdWNlbnQgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zbmFwTGF5b3V0LnNldChwYXJzZWQuc25hcExheW91dCA/PyAnZnVsbCcpO1xuICAgICAgdGhpcy5zaG93UmVzcG9uc2Uuc2V0KHBhcnNlZC5zaG93UmVzcG9uc2UgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zaG93UmF3UmVzcG9uc2Uuc2V0KHBhcnNlZC5zaG93UmF3UmVzcG9uc2UgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zaG93UXVlcnlDb25maWcuc2V0KHBhcnNlZC5zaG93UXVlcnlDb25maWcgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zaG93RW50aXR5U3RvcmVWYWx1ZS5zZXQocGFyc2VkLnNob3dFbnRpdHlTdG9yZVZhbHVlID8/IGZhbHNlKTtcbiAgICAgIHRoaXMuc2hvd0FyZ3VtZW50cy5zZXQocGFyc2VkLnNob3dBcmd1bWVudHMgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zZWxlY3RlZENsaWVudElkQ3RybC5zZXRWYWx1ZShwYXJzZWQuc2VsZWN0ZWRDbGllbnRJZCA/PyAwKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRRdWVyeUlkLnNldChwYXJzZWQuc2VsZWN0ZWRRdWVyeVBhdGggPz8gbnVsbCk7XG4gICAgICB0aGlzLnF1ZXJ5TGlzdE1vZGUuc2V0KHBhcnNlZC5xdWVyeUxpc3RNb2RlID8/ICdsaXZlJyk7XG4gICAgICB0aGlzLnZpZXdNb2RlLnNldChwYXJzZWQudmlld01vZGUgPz8gJ3F1ZXJ5Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHRyYWNrQnlDbGllbnQ6IFRyYWNrQnlGdW5jdGlvbjxRdWVyeUNsaWVudERldnRvb2xzT3B0aW9ucz4gPSAoXywgeyBjbGllbnQgfSkgPT4gY2xpZW50LmNvbmZpZy5iYXNlUm91dGU7XG4gIHByb3RlY3RlZCB0cmFja0J5UXVlcnk6IFRyYWNrQnlGdW5jdGlvbjxBbnlRdWVyeT4gPSAoXywgeyBfaWQgfSkgPT4gX2lkO1xuXG4gIHByb3RlY3RlZCB0b2dnbGVPcGVuKCkge1xuICAgIHRoaXMuaXNPcGVuLnNldCghdGhpcy5pc09wZW4oKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlVHJhbnNsdWNlbnQoKSB7XG4gICAgdGhpcy5pc1RyYW5zbHVjZW50LnNldCghdGhpcy5pc1RyYW5zbHVjZW50KCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNob3dSZXNwb25zZSgpIHtcbiAgICB0aGlzLnNob3dSZXNwb25zZS5zZXQoIXRoaXMuc2hvd1Jlc3BvbnNlKCkpO1xuXG4gICAgbmV4dEZyYW1lKCgpID0+IHtcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93UXVlcnlDb25maWcoKSB7XG4gICAgdGhpcy5zaG93UXVlcnlDb25maWcuc2V0KCF0aGlzLnNob3dRdWVyeUNvbmZpZygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93UmF3UmVzcG9uc2UoKSB7XG4gICAgdGhpcy5zaG93UmF3UmVzcG9uc2Uuc2V0KCF0aGlzLnNob3dSYXdSZXNwb25zZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93RW50aXR5U3RvcmVWYWx1ZSgpIHtcbiAgICB0aGlzLnNob3dFbnRpdHlTdG9yZVZhbHVlLnNldCghdGhpcy5zaG93RW50aXR5U3RvcmVWYWx1ZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93QXJndW1lbnRzKCkge1xuICAgIHRoaXMuc2hvd0FyZ3VtZW50cy5zZXQoIXRoaXMuc2hvd0FyZ3VtZW50cygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RTbmFwTGF5b3V0KGxheW91dDogUXVlcnlEZXZ0b29sc1NuYXBMYXlvdXQpIHtcbiAgICB0aGlzLnNuYXBMYXlvdXQuc2V0KGxheW91dCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0UXVlcnlMaXN0TW9kZShtb2RlOiBRdWVyeUxpc3RNb2RlKSB7XG4gICAgdGhpcy5xdWVyeUxpc3RNb2RlLnNldChtb2RlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RWaWV3TW9kZShtb2RlOiBRdWVyeVZpZXdNb2RlKSB7XG4gICAgdGhpcy52aWV3TW9kZS5zZXQobW9kZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0UXVlcnkocXVlcnk6IEFueVF1ZXJ5KSB7XG4gICAgdGhpcy5zZWxlY3RlZFF1ZXJ5SWQuc2V0KHF1ZXJ5Ll9pZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYXJRdWVyeUhpc3RvcnkoKSB7XG4gICAgdGhpcy5xdWVyeUhpc3RvcnkkLm5leHQoW10pO1xuICB9XG59XG4iLCJAaWYgKCFpc09wZW4oKSkge1xuICA8YnV0dG9uIChjbGljayk9XCJ0b2dnbGVPcGVuKClcIiBjbGFzcz1cImV0LXF1ZXJ5LWRldnRvb2xzLW9wZW4tYnRuIGV0LXFkLWNoaXBcIj5RdWVyeSBEZXZ0b29sczwvYnV0dG9uPlxufVxuXG5AaWYgKGlzT3BlbigpKSB7XG4gIDxkaXZcbiAgICBbY2xhc3MuZXQtcXVlcnktZGV2dG9vbHMtY29udGFpbmVyLS10cmFuc3BhcmVudF09XCJpc1RyYW5zbHVjZW50KClcIlxuICAgIGNsYXNzPVwiZXQtcXVlcnktZGV2dG9vbHMtY29udGFpbmVyIGV0LXF1ZXJ5LWRldnRvb2xzLWNvbnRhaW5lci0tc25hcC17eyBzbmFwTGF5b3V0KCkgfX1cIlxuICA+XG4gICAgPGhlYWRlciBjbGFzcz1cImV0LXFkLWhlYWRlclwiPlxuICAgICAgPGgzIGNsYXNzPVwiZXQtcWQtaGVhZGVyX190aXRsZVwiPlF1ZXJ5IERldnRvb2xzPC9oMz5cblxuICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWhlYWRlcl9fc2VsZWN0XCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJldC1xdWVyeS1jbGllbnQtaW5zdGFuY2VcIj5DbGllbnQgaW5zdGFuY2U8L2xhYmVsPlxuICAgICAgICA8c2VsZWN0IFtmb3JtQ29udHJvbF09XCJzZWxlY3RlZENsaWVudElkQ3RybFwiIGlkPVwiZXQtcXVlcnktY2xpZW50LWluc3RhbmNlXCI+XG4gICAgICAgICAgQGZvciAoY2xpZW50Q29uZmlnIG9mIHF1ZXJ5Q2xpZW50Q29uZmlnczsgdHJhY2sgdHJhY2tCeUNsaWVudChpLCBjbGllbnRDb25maWcpOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiaVwiPlxuICAgICAgICAgICAgICB7eyBjbGllbnRDb25maWcuZGlzcGxheU5hbWUgPz8gY2xpZW50Q29uZmlnLmNsaWVudC5jb25maWcuYmFzZVJvdXRlIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cInRvZ2dsZU9wZW4oKVwiIGNsYXNzPVwiZXQtcWQtYnRuIGV0LXFkLWJ0bi1zZWNvbmRhcnlcIj5DbG9zZTwvYnV0dG9uPlxuICAgIDwvaGVhZGVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImV0LXFkLXN1Yi1oZWFkZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhaXNUcmFuc2x1Y2VudCgpIH1cIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlVHJhbnNsdWNlbnQoKVwiXG4gICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC10cmFuc2x1Y2VudC1jbGlja2FibGVcIlxuICAgICAgPlxuICAgICAgICBUcmFuc2x1Y2VudFxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtc3ViLWhlYWRlcl9fZGl2aWRlclwiPjwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6IHNuYXBMYXlvdXQoKSAhPT0gJ2Z1bGwnIH1cIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0U25hcExheW91dCgnZnVsbCcpXCJcbiAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwXCJcbiAgICAgID5cbiAgICAgICAgRnVsbHNjcmVlblxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5Jzogc25hcExheW91dCgpICE9PSAndG9wJyB9XCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFNuYXBMYXlvdXQoJ3RvcCcpXCJcbiAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwXCJcbiAgICAgID5cbiAgICAgICAgVG9wXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBzbmFwTGF5b3V0KCkgIT09ICdib3R0b20nIH1cIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0U25hcExheW91dCgnYm90dG9tJylcIlxuICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXBcIlxuICAgICAgPlxuICAgICAgICBCb3R0b21cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6IHNuYXBMYXlvdXQoKSAhPT0gJ2xlZnQnIH1cIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0U25hcExheW91dCgnbGVmdCcpXCJcbiAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwXCJcbiAgICAgID5cbiAgICAgICAgTGVmdFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5Jzogc25hcExheW91dCgpICE9PSAncmlnaHQnIH1cIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0U25hcExheW91dCgncmlnaHQnKVwiXG4gICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcFwiXG4gICAgICA+XG4gICAgICAgIFJpZ2h0XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoc2VsZWN0ZWRDbGllbnRDb25maWcoKTsgYXMgY2ZnKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtY2xpZW50XCI+XG4gICAgICAgIDxwIGNsYXNzPVwiZXQtcWQtY2xpZW50X190aXRsZVwiPnt7IGNmZy5kaXNwbGF5TmFtZSA/PyBjZmcuY2xpZW50LmNvbmZpZy5iYXNlUm91dGUgfX08L3A+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWNsaWVudF9fYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNmZy5jbGllbnQuX3N0b3JlLnJlZnJlc2hRdWVyaWVzSW5Vc2UoKVwiIGNsYXNzPVwiZXQtcWQtY2hpcFwiPlJlZnJlc2ggYWxsPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2ZnLmNsaWVudC5fc3RvcmUucmVmcmVzaFF1ZXJpZXNJblVzZSh7IGlnbm9yZUNhY2hlVmFsaWRpdHk6IHRydWUgfSlcIiBjbGFzcz1cImV0LXFkLWNoaXBcIj5cbiAgICAgICAgICAgIFJlZnJlc2ggYWxsIChpZ25vcmUgY2FjaGVzKVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJjZmcuY2xpZW50Ll9zdG9yZS5yZWZyZXNoUXVlcmllc0luVXNlKHsgaWdub3JlQ2FjaGVWYWxpZGl0eTogdHJ1ZSwgcHVyZ2VVbnVzZWQ6IHRydWUgfSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBSZWZyZXNoIGFsbCAoaWdub3JlIGNhY2hlcyAmIHB1cmdlIHVudXNlZClcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKHNlbGVjdGVkQ2xpZW50Q29uZmlnKCk7IGFzIGNmZykge1xuICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLXF1ZXJpZXNcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJldC1xZC1xdWVyaWVzX190aXRsZVwiPkluc3BlY3RvcjwvcD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2FjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6IHF1ZXJ5TGlzdE1vZGUoKSAhPT0gJ2xpdmUnIHx8IHZpZXdNb2RlKCkgIT09ICdxdWVyeScgfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UXVlcnlMaXN0TW9kZSgnbGl2ZScpOyBzZWxlY3RWaWV3TW9kZSgncXVlcnknKVwiXG4gICAgICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgTGl2ZSBRdWVyaWVzICh7eyBxdWVyaWVzKCk/Lmxlbmd0aCA/PyAwIH19KVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogcXVlcnlMaXN0TW9kZSgpICE9PSAnaGlzdG9yeScgfHwgdmlld01vZGUoKSAhPT0gJ3F1ZXJ5JyB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RRdWVyeUxpc3RNb2RlKCdoaXN0b3J5Jyk7IHNlbGVjdFZpZXdNb2RlKCdxdWVyeScpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBRdWVyeSBIaXN0b3J5ICh7eyAocXVlcnlIaXN0b3J5JCB8IGFzeW5jKT8ubGVuZ3RoID8/IDAgfX0vNTApXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgQGlmIChxdWVyeUxpc3RNb2RlKCkgPT09ICdoaXN0b3J5JyAmJiB2aWV3TW9kZSgpID09PSAncXVlcnknKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtcXVlcmllc19fZGl2aWRlclwiPjwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xlYXJRdWVyeUhpc3RvcnkoKVwiIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCI+Q2xlYXIgaGlzdG9yeTwvYnV0dG9uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1xdWVyaWVzX19kaXZpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiB2aWV3TW9kZSgpICE9PSAnYXV0aFByb3ZpZGVyJyB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RWaWV3TW9kZSgnYXV0aFByb3ZpZGVyJylcIlxuICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEF1dGggUHJvdmlkZXJcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgQGlmICh2aWV3TW9kZSgpID09PSAncXVlcnknKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2Jyb3dzZXJcIj5cbiAgICAgICAgICAgIEBpZiAocXVlcnlMaXN0TW9kZSgpID09PSAnbGl2ZScpIHtcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYnJvd3Nlci1saXN0XCI+XG4gICAgICAgICAgICAgICAgQGZvciAocXVlcnkgb2YgcXVlcmllcygpOyB0cmFjayB0cmFja0J5UXVlcnkoJGluZGV4LCBxdWVyeSkpIHtcbiAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ldC1xZC1xdWVyeS0tYWN0aXZlXT1cInNlbGVjdGVkUXVlcnkoKT8uX2lkID09PSBxdWVyeS5faWRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RRdWVyeShxdWVyeSlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IHF1ZXJ5Ll9xdWVyeUNvbmZpZy5tZXRob2QgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IHF1ZXJ5IHwgcXVlcnlTaG9ydE5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHF1ZXJ5TGlzdE1vZGUoKSA9PT0gJ2hpc3RvcnknKSB7XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2Jyb3dzZXItbGlzdFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKHF1ZXJ5IG9mIHF1ZXJ5SGlzdG9yeSQgfCBhc3luYzsgdHJhY2sgdHJhY2tCeVF1ZXJ5KCRpbmRleCwgcXVlcnkpKSB7XG4gICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXQtcWQtcXVlcnktLWFjdGl2ZV09XCJzZWxlY3RlZFF1ZXJ5KCk/Ll9pZCA9PT0gcXVlcnkuX2lkXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UXVlcnkocXVlcnkpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiB7eyBxdWVyeS5fcXVlcnlDb25maWcubWV0aG9kIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiB7eyBxdWVyeSB8IHF1ZXJ5U2hvcnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2Jyb3dzZXItZGV0YWlsXCI+XG4gICAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRRdWVyeSgpOyBhcyBxdWVyeSkge1xuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYnJvd3Nlci1kZXRhaWxfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICB7eyBxdWVyeS5fcXVlcnlDb25maWcubWV0aG9kIH19IHt7IHF1ZXJ5Ll9yb3V0ZVdpdGhQYXJhbXMgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicXVlcnkuZXhlY3V0ZSgpXCIgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIj5FeGVjdXRlPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJxdWVyeS5leGVjdXRlKHsgc2tpcENhY2hlOiB0cnVlIH0pXCIgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgRXhlY3V0ZSAoaWdub3JlIGNhY2hlKVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInF1ZXJ5LmFib3J0KClcIiBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiPkFib3J0PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtcXVlcmllc19fZGl2aWRlclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6ICFxdWVyeS5pc1BvbGxpbmcgfVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJxdWVyeS5wb2xsKHsgaW50ZXJ2YWw6IDUwMDAsIHRha2VVbnRpbDogX2Rlc3Ryb3kkIH0pXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBQb2xsXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6IHF1ZXJ5LmlzUG9sbGluZyB9XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInF1ZXJ5LnN0b3BQb2xsaW5nKClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFN0b3AgcG9sbGluZ1xuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICBAaWYgKHF1ZXJ5LmlzUG9sbGluZyB8fCBxdWVyeS5faXNQb2xsaW5nUGF1c2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInF1ZXJ5LnBhdXNlUG9sbGluZygpXCIgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtc2Vjb25kYXJ5IGV0LXFkLWNoaXAtYm9yZGVyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICBQYXVzZSBwb2xsaW5nXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJxdWVyeS5yZXN1bWVQb2xsaW5nKClcIiBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1zZWNvbmRhcnkgZXQtcWQtY2hpcC1ib3JkZXJlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIFJlc3VtZSBwb2xsaW5nXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+U3RhdGUgdHlwZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5yYXdTdGF0ZS50eXBlIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8cD5EZXBlbmRlbnRzPC9wPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5Ll9kZXBlbmRlbnRzIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+SXMgZXhwaXJlZDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5pc0V4cGlyZWQgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPklzIGluIHVzZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5pc0luVXNlIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8cD5TdWJzY3JpYmVyIGNvdW50PC9wPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5Ll9zdWJzY3JpYmVyQ291bnQgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPklzIHBvbGxpbmc8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkuaXNQb2xsaW5nIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8cD5JcyBwb2xsaW5nIHBhdXNlZDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5faXNQb2xsaW5nUGF1c2VkIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8cD5FbmFibGUgc21hcnQgcG9sbGluZzwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5fZW5hYmxlU21hcnRQb2xsaW5nIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8cD5RdWVyeSBzdG9yZSBrZXk8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkuX3F1ZXJ5U3RvcmVLZXkgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPkFyZ3VtZW50czwvcD5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogIXNob3dBcmd1bWVudHMoKSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93QXJndW1lbnRzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93QXJndW1lbnRzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5Ll9hcmd1bWVudHMgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlN0YXRlPC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD48aT4gV2FybmluZywgdGhpcyB3aWxsIGNhdXNlIGEgc3Vic2NyaXB0aW9uIGlmIHNob3duITwvaT48L3A+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhc2hvd1Jlc3BvbnNlKCkgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd1Jlc3BvbnNlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93UmVzcG9uc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkuc3RhdGUkIHwgYXN5bmMgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlJhdyBzdGF0ZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHA+PGk+IFRoZSBxdWVyeSBzdGF0ZSB1bmFmZmVjdGVkIGJ5IGVudGl0eSBzdG9yZXM8L2k+PC9wPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhc2hvd1Jhd1Jlc3BvbnNlKCkgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd1Jhd1Jlc3BvbnNlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93UmF3UmVzcG9uc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkucmF3U3RhdGUgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlF1ZXJ5IGNvbmZpZzwvcD5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogIXNob3dRdWVyeUNvbmZpZygpIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNob3dRdWVyeUNvbmZpZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBUb2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1F1ZXJ5Q29uZmlnKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IHN0cmluZ2lmaWVkUXVlcnlDb25maWcoKSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIEBpZiAoISFxdWVyeS5fcXVlcnlDb25maWcuZW50aXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cD5FbnRpdHkgc3RvcmUgdmFsdWU8L3A+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6ICFzaG93RW50aXR5U3RvcmVWYWx1ZSgpIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd0VudGl0eVN0b3JlVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgVG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dFbnRpdHlTdG9yZVZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgc2VsZWN0ZWRRdWVyeUVudGl0eVN0b3JlVmFsdWUkIHwgYXN5bmMgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2UgaWYgKHZpZXdNb2RlKCkgPT09ICdhdXRoUHJvdmlkZXInKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWF1dGgtcHJvdmlkZXJfX3ZpZXdlclwiPlxuICAgICAgICAgICAgQGlmIChhdXRoUHJvdmlkZXJEZXRhaWxzKCk7IGFzIGRldGFpbHMpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8cD5UeXBlPC9wPlxuICAgICAgICAgICAgICAgICAgPHByZT57eyBkZXRhaWxzLnR5cGUgfX08L3ByZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8cD5IZWFkZXIgdmFsdWU8L3A+XG4gICAgICAgICAgICAgICAgICA8cHJlPnt7IGRldGFpbHMuaGVhZGVyKCkgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPHA+Q29uZmlnPC9wPlxuICAgICAgICAgICAgICAgICAgPHByZT57eyBkZXRhaWxzLmNvbmZpZyB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIEBpZiAoZGV0YWlscy50eXBlID09PSAnQmVhcmVyQXV0aFByb3ZpZGVyJykge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8cD5Ub2tlbnM8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgZGV0YWlscy5wcm92aWRlci50b2tlbnMkIHwgYXN5bmMgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8cD5TaG91bGQgcmVmcmVzaCBvbiB1bmF1dGhvcml6ZWQgcmVzcG9uc2U8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgZGV0YWlscy5wcm92aWRlci5zaG91bGRSZWZyZXNoT25VbmF1dGhvcml6ZWRSZXNwb25zZSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKmV0UXVlcnk9XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLnByb3ZpZGVyLmN1cnJlbnRSZWZyZXNoUXVlcnkkIHwgYXN5bmMgYXMgcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgbG9hZGluZyBhcyBsb2FkaW5nO1xuICAgICAgICAgICAgICAgICAgICAgIGVycm9yIGFzIGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5IGFzIHF1ZXJ5XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cD5SZWZyZXNoIHF1ZXJ5IHJlc3BvbnNlPC9wPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRldGFpbHMucHJvdmlkZXIuX3JlZnJlc2hRdWVyeSgpXCIgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmcmVzaFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPHByZT57eyByZXNwb25zZSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cD5SZWZyZXNoIHF1ZXJ5IGxvYWRpbmc8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPHByZT57eyBsb2FkaW5nIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHA+UmVmcmVzaCBxdWVyeSBlcnJvcjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IGVycm9yID8/ICdudWxsJyB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwPlN0YXRlPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnk/LnN0YXRlJCB8IGFzeW5jIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPHA+Tm8gYXV0aCBwcm92aWRlciBzZXQ8L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=","import { Subject, debounceTime, filter, map, shareReplay, startWith } from 'rxjs';\nclass EntityStoreError extends Error {\n constructor(message, detail) {\n super(message);\n this.detail = detail;\n this.name = 'EntityStoreError';\n }\n}\nfunction flatten(arr) {\n return arr.reduce((acc, val) => acc.concat(val), []);\n}\nexport class EntityStore {\n constructor(_config) {\n this._config = _config;\n /**\n * @internal\n */\n this._dictionary = new Map();\n /**\n * @internal\n */\n this._change$ = new Subject();\n }\n select(keyOrKeys) {\n if (Array.isArray(keyOrKeys)) {\n const _keys = this._normalizeKeys(keyOrKeys);\n return this._selectMany(_keys);\n }\n return this._select(keyOrKeys);\n }\n /**\n * **Note:** Prefer `select` over `selectWhere` when possible.\n */\n selectWhere(predicate) {\n return this._change$.pipe(startWith(null), debounceTime(0), map(() => Array.from(this._dictionary.values()).filter(predicate)), shareReplay({ bufferSize: 1, refCount: true }));\n }\n set(keyOrKeys, valueOrValues) {\n const _keys = this._normalizeKeys(keyOrKeys);\n if (Array.isArray(_keys)) {\n if (!Array.isArray(valueOrValues)) {\n throw new EntityStoreError('When setting multiple keys, values must be an array', {\n keyOrValues: _keys,\n valueOrValues,\n });\n }\n const _values = (Array.isArray(valueOrValues[0]) ? flatten(valueOrValues) : valueOrValues);\n for (let i = 0; i < _keys.length; i++) {\n const k = _keys[i];\n const v = _values[i];\n if (k === undefined || v === undefined)\n continue;\n this._set(k, v);\n }\n }\n else {\n this._set(_keys, valueOrValues);\n }\n this._change$.next(_keys);\n }\n remove(keyOrKeys) {\n const _keys = this._normalizeKeys(keyOrKeys);\n if (Array.isArray(_keys)) {\n for (const key of _keys) {\n this._remove(key);\n }\n }\n else {\n this._remove(_keys);\n }\n this._change$.next(_keys);\n }\n logState() {\n console.log('EntityStore:', this._config.name, {\n dictionary: this._dictionary,\n });\n }\n _select(key) {\n if (this._config.logActions) {\n console.log('EntityStore: select', this._config.name, key);\n }\n return this._change$.pipe(startWith(null), filter((v) => {\n if (v === null) {\n return true;\n }\n if (Array.isArray(v)) {\n return v.includes(key);\n }\n return v === key;\n }), map(() => this._dictionary.get(key) ?? null));\n }\n _selectMany(keys) {\n if (this._config.logActions) {\n console.log('EntityStore: selectMany', this._config.name, keys);\n }\n return this._change$.pipe(startWith(null), filter((v) => {\n if (v === null) {\n return true;\n }\n if (Array.isArray(v)) {\n return keys.some((key) => v.includes(key));\n }\n return keys.includes(v);\n }), map(() => keys.map((key) => this._dictionary.get(key)).filter((value) => value !== undefined)));\n }\n _set(key, value) {\n if (this._config.logActions) {\n console.log('EntityStore: set', this._config.name, key, value);\n }\n this._dictionary.set(key, value);\n }\n _remove(key) {\n if (this._config.logActions) {\n console.log('EntityStore: remove', this._config.name, key);\n }\n this._dictionary.delete(key);\n }\n _normalizeKeys(keys) {\n if (Array.isArray(keys)) {\n if (Array.isArray(keys[0])) {\n return flatten(keys);\n }\n return keys;\n }\n return keys;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2VudGl0eS9lbnRpdHktc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzlGLE1BQU0sZ0JBQWlCLFNBQVEsS0FBSztJQUNsQyxZQUNFLE9BQWUsRUFDUixNQUFnQjtRQUV2QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFGUixXQUFNLEdBQU4sTUFBTSxDQUFVO1FBR3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBRUQsU0FBUyxPQUFPLENBQUksR0FBVTtJQUM1QixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxNQUFNLE9BQU8sV0FBVztJQVd0QixZQUE2QixPQUEwQjtRQUExQixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQVZ2RDs7V0FFRztRQUNNLGdCQUFXLEdBQUcsSUFBSSxHQUFHLEVBQWdCLENBQUM7UUFFL0M7O1dBRUc7UUFDTSxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUM7SUFFRCxDQUFDO0lBSzNELE1BQU0sQ0FBQyxTQUFrRDtRQUN2RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFvQixDQUFD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T0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDeEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sT0FBTyxDQUFDLElBQXFCLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBRUQsT0FBTyxJQUFtQixDQUFDO1FBQzdCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eUtleSwgRW50aXR5U3RvcmVDb25maWcgfSBmcm9tICcuL2VudGl0eS50eXBlcyc7XG5cbmNsYXNzIEVudGl0eVN0b3JlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwdWJsaWMgZGV0YWlsPzogdW5rbm93bixcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0VudGl0eVN0b3JlRXJyb3InO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW48VD4oYXJyOiBUW11bXSk6IFRbXSB7XG4gIHJldHVybiBhcnIucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjLmNvbmNhdCh2YWwpLCBbXSk7XG59XG5cbmV4cG9ydCBjbGFzcyBFbnRpdHlTdG9yZTxUPiB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlYWRvbmx5IF9kaWN0aW9uYXJ5ID0gbmV3IE1hcDxFbnRpdHlLZXksIFQ+KCk7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVhZG9ubHkgX2NoYW5nZSQgPSBuZXcgU3ViamVjdDxFbnRpdHlLZXkgfCBFbnRpdHlLZXlbXT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9jb25maWc6IEVudGl0eVN0b3JlQ29uZmlnKSB7fVxuXG4gIHNlbGVjdChrZXk6IEVudGl0eUtleSk6IE9ic2VydmFibGU8VCB8IG51bGw+O1xuICBzZWxlY3Qoa2V5czogRW50aXR5S2V5W10pOiBPYnNlcnZhYmxlPFRbXT47XG4gIHNlbGVjdChrZXlzOiBFbnRpdHlLZXlbXVtdKTogT2JzZXJ2YWJsZTxUW10+O1xuICBzZWxlY3Qoa2V5T3JLZXlzOiBFbnRpdHlLZXkgfCBFbnRpdHlLZXlbXSB8IEVudGl0eUtleVtdW10pOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB8IE9ic2VydmFibGU8VFtdPiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5T3JLZXlzKSkge1xuICAgICAgY29uc3QgX2tleXMgPSB0aGlzLl9ub3JtYWxpemVLZXlzKGtleU9yS2V5cyk7XG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0TWFueShfa2V5cyBhcyBFbnRpdHlLZXlbXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdChrZXlPcktleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqICoqTm90ZToqKiBQcmVmZXIgYHNlbGVjdGAgb3ZlciBgc2VsZWN0V2hlcmVgIHdoZW4gcG9zc2libGUuXG4gICAqL1xuICBzZWxlY3RXaGVyZShwcmVkaWNhdGU6ICh2YWx1ZTogVCkgPT4gYm9vbGVhbik6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5nZSQucGlwZShcbiAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgIG1hcCgoKSA9PiBBcnJheS5mcm9tKHRoaXMuX2RpY3Rpb25hcnkudmFsdWVzKCkpLmZpbHRlcihwcmVkaWNhdGUpKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgKTtcbiAgfVxuXG4gIHNldChrZXk6IEVudGl0eUtleSwgdmFsdWU6IFQpOiB2b2lkO1xuICBzZXQoa2V5czogRW50aXR5S2V5W10sIHZhbHVlczogVFtdKTogdm9pZDtcbiAgc2V0KGtleXM6IEVudGl0eUtleVtdW10sIHZhbHVlczogVFtdW10pOiB2b2lkO1xuICBzZXQoa2V5T3JLZXlzOiBFbnRpdHlLZXkgfCBFbnRpdHlLZXlbXSB8IEVudGl0eUtleVtdW10sIHZhbHVlT3JWYWx1ZXM6IFQgfCBUW10gfCBUW11bXSkge1xuICAgIGNvbnN0IF9rZXlzID0gdGhpcy5fbm9ybWFsaXplS2V5cyhrZXlPcktleXMpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoX2tleXMpKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVPclZhbHVlcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVudGl0eVN0b3JlRXJyb3IoJ1doZW4gc2V0dGluZyBtdWx0aXBsZSBrZXlzLCB2YWx1ZXMgbXVzdCBiZSBhbiBhcnJheScsIHtcbiAgICAgICAgICBrZXlPclZhbHVlczogX2tleXMsXG4gICAgICAgICAgdmFsdWVPclZhbHVlcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IF92YWx1ZXMgPSAoQXJyYXkuaXNBcnJheSh2YWx1ZU9yVmFsdWVzWzBdKSA/IGZsYXR0ZW4odmFsdWVPclZhbHVlcyBhcyBUW11bXSkgOiB2YWx1ZU9yVmFsdWVzKSBhcyBUW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgX2tleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgayA9IF9rZXlzW2ldO1xuICAgICAgICBjb25zdCB2ID0gX3ZhbHVlc1tpXTtcblxuICAgICAgICBpZiAoayA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICAgICAgdGhpcy5fc2V0KGssIHYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXQoX2tleXMsIHZhbHVlT3JWYWx1ZXMgYXMgVCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbmdlJC5uZXh0KF9rZXlzKTtcbiAgfVxuXG4gIHJlbW92ZShrZXk6IEVudGl0eUtleSk6IHZvaWQ7XG4gIHJlbW92ZShrZXlzOiBFbnRpdHlLZXlbXSk6IHZvaWQ7XG4gIHJlbW92ZShrZXlzOiBFbnRpdHlLZXlbXVtdKTogdm9pZDtcbiAgcmVtb3ZlKGtleU9yS2V5czogRW50aXR5S2V5IHwgRW50aXR5S2V5W10gfCBFbnRpdHlLZXlbXVtdKSB7XG4gICAgY29uc3QgX2tleXMgPSB0aGlzLl9ub3JtYWxpemVLZXlzKGtleU9yS2V5cyk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShfa2V5cykpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIF9rZXlzKSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZShrZXkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZW1vdmUoX2tleXMpO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5nZSQubmV4dChfa2V5cyk7XG4gIH1cblxuICBsb2dTdGF0ZSgpIHtcbiAgICBjb25zb2xlLmxvZygnRW50aXR5U3RvcmU6JywgdGhpcy5fY29uZmlnLm5hbWUsIHtcbiAgICAgIGRpY3Rpb25hcnk6IHRoaXMuX2RpY3Rpb25hcnksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3Qoa2V5OiBFbnRpdHlLZXkpOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5sb2dBY3Rpb25zKSB7XG4gICAgICBjb25zb2xlLmxvZygnRW50aXR5U3RvcmU6IHNlbGVjdCcsIHRoaXMuX2NvbmZpZy5uYW1lLCBrZXkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jaGFuZ2UkLnBpcGUoXG4gICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICBmaWx0ZXIoKHYpID0+IHtcbiAgICAgICAgaWYgKHYgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgICAgcmV0dXJuIHYuaW5jbHVkZXMoa2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2ID09PSBrZXk7XG4gICAgICB9KSxcbiAgICAgIG1hcCgoKSA9PiB0aGlzLl9kaWN0aW9uYXJ5LmdldChrZXkpID8/IG51bGwpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RNYW55KGtleXM6IEVudGl0eUtleVtdKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmxvZ0FjdGlvbnMpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdFbnRpdHlTdG9yZTogc2VsZWN0TWFueScsIHRoaXMuX2NvbmZpZy5uYW1lLCBrZXlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY2hhbmdlJC5waXBlKFxuICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgZmlsdGVyKCh2KSA9PiB7XG4gICAgICAgIGlmICh2ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICAgIHJldHVybiBrZXlzLnNvbWUoKGtleSkgPT4gdi5pbmNsdWRlcyhrZXkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBrZXlzLmluY2x1ZGVzKHYpO1xuICAgICAgfSksXG4gICAgICBtYXAoKCkgPT4ga2V5cy5tYXAoKGtleSkgPT4gdGhpcy5fZGljdGlvbmFyeS5nZXQoa2V5KSkuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIFQgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCkpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9zZXQoa2V5OiBFbnRpdHlLZXksIHZhbHVlOiBUKSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5sb2dBY3Rpb25zKSB7XG4gICAgICBjb25zb2xlLmxvZygnRW50aXR5U3RvcmU6IHNldCcsIHRoaXMuX2NvbmZpZy5uYW1lLCBrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kaWN0aW9uYXJ5LnNldChrZXksIHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbW92ZShrZXk6IEVudGl0eUtleSkge1xuICAgIGlmICh0aGlzLl9jb25maWcubG9nQWN0aW9ucykge1xuICAgICAgY29uc29sZS5sb2coJ0VudGl0eVN0b3JlOiByZW1vdmUnLCB0aGlzLl9jb25maWcubmFtZSwga2V5KTtcbiAgICB9XG5cbiAgICB0aGlzLl9kaWN0aW9uYXJ5LmRlbGV0ZShrZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbm9ybWFsaXplS2V5cyhrZXlzOiBFbnRpdHlLZXkgfCBFbnRpdHlLZXlbXSB8IEVudGl0eUtleVtdW10pOiBFbnRpdHlLZXkgfCBFbnRpdHlLZXlbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5cykpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleXNbMF0pKSB7XG4gICAgICAgIHJldHVybiBmbGF0dGVuKGtleXMgYXMgRW50aXR5S2V5W11bXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBrZXlzIGFzIEVudGl0eUtleVtdO1xuICAgIH1cblxuICAgIHJldHVybiBrZXlzO1xuICB9XG59XG4iXX0=","import { map, of, switchMap, take, tap } from 'rxjs';\nexport function mapToPaginated(response) {\n return map((items) => ({ ...response, items }));\n}\n// FIXME: This breaks if SubStoreType is an array\n/**\n * Use an other store to represent a property of the current entity.\n */\nexport const insertFrom = (store, { for: key, id }) => switchMap((value) => {\n if (!value)\n return of(null);\n const ids = id(value);\n if (Array.isArray(ids)) {\n return store.select(ids).pipe(map((data) => ({ ...value, [key]: data })));\n }\n else {\n return store.select(ids).pipe(map((data) => ({ ...value, [key]: data })));\n }\n});\n/**\n * Remove entities from a store based on a where function.\n */\nexport const removeFrom = (store, { where, id }) => {\n store\n .selectWhere(where)\n .pipe(tap((entities) => store.remove(entities.map(id))), take(1))\n .subscribe();\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2VudGl0eS9lbnRpdHkudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJckQsTUFBTSxVQUFVLGNBQWMsQ0FBSSxRQUFzQjtJQUN0RCxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFpQixDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELGlEQUFpRDtBQUNqRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQVd4QixLQUFnQyxFQUNoQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUF1RCxFQUNyRSxFQUFFLENBQ0YsU0FBUyxDQUFDLENBQUMsS0FBc0IsRUFBRSxFQUFFO0lBQ25DLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFNUIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXRCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBdUIsQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQXVCLENBQUMsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVMOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUksS0FBcUIsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQXVCLEVBQUUsRUFBRTtJQUN6RixLQUFLO1NBQ0YsV0FBVyxDQUFDLEtBQUssQ0FBQztTQUNsQixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUNqRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1I7U0FDQSxTQUFTLEVBQUUsQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYWdpbmF0ZWQgfSBmcm9tICdAZXRobGV0ZS90eXBlcyc7XG5pbXBvcnQgeyBtYXAsIG9mLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRW50aXR5U3RvcmUgfSBmcm9tICcuL2VudGl0eS1zdG9yZSc7XG5pbXBvcnQgeyBFbnRpdHlLZXksIEluc2VydEZyb21Db25maWcsIFJlbW92ZUZyb21Db25maWcgfSBmcm9tICcuL2VudGl0eS50eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1BhZ2luYXRlZDxUPihyZXNwb25zZTogUGFnaW5hdGVkPFQ+KSB7XG4gIHJldHVybiBtYXAoKGl0ZW1zKSA9PiAoeyAuLi5yZXNwb25zZSwgaXRlbXMgfSkgYXMgUGFnaW5hdGVkPFQ+KTtcbn1cblxuLy8gRklYTUU6IFRoaXMgYnJlYWtzIGlmIFN1YlN0b3JlVHlwZSBpcyBhbiBhcnJheVxuLyoqXG4gKiBVc2UgYW4gb3RoZXIgc3RvcmUgdG8gcmVwcmVzZW50IGEgcHJvcGVydHkgb2YgdGhlIGN1cnJlbnQgZW50aXR5LlxuICovXG5leHBvcnQgY29uc3QgaW5zZXJ0RnJvbSA9IDxcbiAgT3JpZ2luU3RvcmVUeXBlLFxuICBPcmlnaW5LZXlzIGV4dGVuZHMga2V5b2YgTm9uTnVsbGFibGU8T3JpZ2luU3RvcmVUeXBlPixcbiAgU3ViU3RvcmVUeXBlIGV4dGVuZHMgTm9uTnVsbGFibGU8T3JpZ2luU3RvcmVUeXBlPltPcmlnaW5LZXlzXSBleHRlbmRzIEFycmF5PGluZmVyIFU+XG4gICAgPyBVXG4gICAgOiBOb25OdWxsYWJsZTxPcmlnaW5TdG9yZVR5cGU+W09yaWdpbktleXNdLFxuICBJZEZuIGV4dGVuZHMgKHZhbHVlOiBOb25OdWxsYWJsZTxPcmlnaW5TdG9yZVR5cGU+KSA9PiBFbnRpdHlLZXkgfCBFbnRpdHlLZXlbXSxcbiAgQ29tcHV0ZWRFbnRpdHlUeXBlIGV4dGVuZHMgUmV0dXJuVHlwZTxJZEZuPiBleHRlbmRzIEFycmF5PHVua25vd24+XG4gICAgPyBPcmlnaW5TdG9yZVR5cGVcbiAgICA6IE9taXQ8T3JpZ2luU3RvcmVUeXBlLCBPcmlnaW5LZXlzPiAmIHsgW0sgaW4gT3JpZ2luS2V5c106IFN1YlN0b3JlVHlwZSB8IG51bGwgfSxcbj4oXG4gIHN0b3JlOiBFbnRpdHlTdG9yZTxTdWJTdG9yZVR5cGU+LFxuICB7IGZvcjoga2V5LCBpZCB9OiBJbnNlcnRGcm9tQ29uZmlnPE9yaWdpblN0b3JlVHlwZSwgT3JpZ2luS2V5cywgSWRGbj4sXG4pID0+XG4gIHN3aXRjaE1hcCgodmFsdWU6IE9yaWdpblN0b3JlVHlwZSkgPT4ge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBvZihudWxsKTtcblxuICAgIGNvbnN0IGlkcyA9IGlkKHZhbHVlKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGlkcykpIHtcbiAgICAgIHJldHVybiBzdG9yZS5zZWxlY3QoaWRzKS5waXBlKG1hcCgoZGF0YSkgPT4gKHsgLi4udmFsdWUsIFtrZXldOiBkYXRhIH0pIGFzIENvbXB1dGVkRW50aXR5VHlwZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RvcmUuc2VsZWN0KGlkcykucGlwZShtYXAoKGRhdGEpID0+ICh7IC4uLnZhbHVlLCBba2V5XTogZGF0YSB9KSBhcyBDb21wdXRlZEVudGl0eVR5cGUpKTtcbiAgICB9XG4gIH0pO1xuXG4vKipcbiAqIFJlbW92ZSBlbnRpdGllcyBmcm9tIGEgc3RvcmUgYmFzZWQgb24gYSB3aGVyZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUZyb20gPSA8VD4oc3RvcmU6IEVudGl0eVN0b3JlPFQ+LCB7IHdoZXJlLCBpZCB9OiBSZW1vdmVGcm9tQ29uZmlnPFQ+KSA9PiB7XG4gIHN0b3JlXG4gICAgLnNlbGVjdFdoZXJlKHdoZXJlKVxuICAgIC5waXBlKFxuICAgICAgdGFwKChlbnRpdGllcykgPT4gc3RvcmUucmVtb3ZlKGVudGl0aWVzLm1hcChpZCkpKSxcbiAgICAgIHRha2UoMSksXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKTtcbn07XG4iXX0=","export const transformToString = (value) => {\n if (typeof value === 'string') {\n return value;\n }\n return null;\n};\nexport const transformToStringArray = (value) => {\n if (Array.isArray(value)) {\n return value.map(transformToString).filter(Boolean);\n }\n else if (typeof value === 'string') {\n return [transformToString(value)];\n }\n return null;\n};\nexport const transformToNumber = (value) => {\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n return Number(value);\n }\n return null;\n};\nexport const transformToNumberArray = (value) => {\n if (Array.isArray(value)) {\n return value.map(transformToNumber).filter((item) => item !== null);\n }\n else if (typeof value === 'number') {\n return [value];\n }\n return null;\n};\nexport const transformToBoolean = (value) => {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n return value === 'true' || value === '1';\n }\n return null;\n};\nexport const transformToBooleanArray = (value) => {\n if (Array.isArray(value)) {\n return value.map(transformToBoolean).filter((item) => item !== null);\n }\n else if (typeof value === 'string' || typeof value === 'boolean') {\n return [transformToBoolean(value)];\n }\n return null;\n};\nexport const transformToDate = (value) => {\n if (value instanceof Date) {\n return value;\n }\n if (typeof value === 'string') {\n const date = new Date(value);\n if (isNaN(date.getTime())) {\n return null;\n }\n return date;\n }\n return null;\n};\nexport const transformToDateArray = (value) => {\n if (Array.isArray(value)) {\n return value.map(transformToDate).filter((item) => item !== null);\n }\n else if (typeof value === 'string' || value instanceof Date) {\n return [transformToDate(value)];\n }\n return null;\n};\nexport const transformToSort = (value) => {\n if (typeof value === 'string') {\n const [active, direction] = value.split(':');\n if (!active) {\n return null;\n }\n return {\n active,\n direction: direction,\n };\n }\n return null;\n};\nexport const transformToSortQueryParam = (value) => {\n if (typeof value === 'string') {\n return value;\n }\n if (value && typeof value === 'object' && 'active' in value && 'direction' in value) {\n const valAsSort = value;\n return valAsSort.direction ? `${valAsSort.active}:${valAsSort.direction}` : null;\n }\n return null;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRTtJQUNsRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRTtJQUN2RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFhLENBQUM7SUFDbEUsQ0FBQztTQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDckMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFhLENBQUM7SUFDaEQsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRTtJQUNsRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxD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QUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTztZQUNMLE1BQU07WUFDTixTQUFTLEVBQUUsU0FBMkI7U0FDdkMsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUU7SUFDMUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksUUFBUSxJQUFJLEtBQUssSUFBSSxXQUFXLElBQUksS0FBSyxFQUFFLENBQUM7UUFDcEYsTUFBTSxTQUFTLEdBQUcsS0FHakIsQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ25GLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Ub1N0cmluZyA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVRvU3RyaW5nQXJyYXkgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcCh0cmFuc2Zvcm1Ub1N0cmluZykuZmlsdGVyKEJvb2xlYW4pIGFzIHN0cmluZ1tdO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gW3RyYW5zZm9ybVRvU3RyaW5nKHZhbHVlKV0gYXMgc3RyaW5nW107XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Ub051bWJlciA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVRvTnVtYmVyQXJyYXkgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcCh0cmFuc2Zvcm1Ub051bWJlcikuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSBudWxsKSBhcyBudW1iZXJbXTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIFt2YWx1ZV0gYXMgbnVtYmVyW107XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Ub0Jvb2xlYW4gPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Ub0Jvb2xlYW5BcnJheSA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUubWFwKHRyYW5zZm9ybVRvQm9vbGVhbikuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSBudWxsKSBhcyBib29sZWFuW107XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBbdHJhbnNmb3JtVG9Cb29sZWFuKHZhbHVlKV0gYXMgYm9vbGVhbltdO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtVG9EYXRlID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXG4gICAgaWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtVG9EYXRlQXJyYXkgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcCh0cmFuc2Zvcm1Ub0RhdGUpLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gbnVsbCkgYXMgRGF0ZVtdO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIFt0cmFuc2Zvcm1Ub0RhdGUodmFsdWUpXSBhcyBEYXRlW107XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFNvcnREaXJlY3Rpb24gPSAnYXNjJyB8ICdkZXNjJyB8ICcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvcnQge1xuICBhY3RpdmU6IHN0cmluZztcbiAgZGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uO1xufVxuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtVG9Tb3J0ID0gKHZhbHVlOiB1bmtub3duKTogU29ydCB8IG51bGwgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IFthY3RpdmUsIGRpcmVjdGlvbl0gPSB2YWx1ZS5zcGxpdCgnOicpO1xuXG4gICAgaWYgKCFhY3RpdmUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhY3RpdmUsXG4gICAgICBkaXJlY3Rpb246IGRpcmVjdGlvbiBhcyAnYXNjJyB8ICdkZXNjJyxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtVG9Tb3J0UXVlcnlQYXJhbSA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAnYWN0aXZlJyBpbiB2YWx1ZSAmJiAnZGlyZWN0aW9uJyBpbiB2YWx1ZSkge1xuICAgIGNvbnN0IHZhbEFzU29ydCA9IHZhbHVlIGFzIHtcbiAgICAgIGFjdGl2ZTogc3RyaW5nO1xuICAgICAgZGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJztcbiAgICB9O1xuXG4gICAgcmV0dXJuIHZhbEFzU29ydC5kaXJlY3Rpb24gPyBgJHt2YWxBc1NvcnQuYWN0aXZlfToke3ZhbEFzU29ydC5kaXJlY3Rpb259YCA6IG51bGw7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG4iXX0=","import { DestroyRef, NgZone, assertInInjectionContext, inject, isDevMode } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ET_PROPERTY_REMOVED, clone, createDestroy, equal, injectQueryParamChanges, injectQueryParams, } from '@ethlete/core';\nimport { BehaviorSubject, Subject, debounceTime, map, merge, of, switchMap, takeUntil, tap, timer } from 'rxjs';\nimport { transformToBoolean, transformToBooleanArray, transformToDate, transformToDateArray, transformToNumber, transformToNumberArray, transformToSort, transformToSortQueryParam, transformToStringArray, } from './query-form.utils';\nconst ET_ARR_PREFIX = 'ET_ARR__';\nexport class QueryField {\n get control() {\n return this.data.control;\n }\n constructor(data) {\n this.data = data;\n }\n}\nexport class SearchQueryField {\n get control() {\n return this.data.control;\n }\n constructor(_data) {\n this._data = _data;\n this.data = {\n control: _data?.control ?? new FormControl(null),\n debounce: 300,\n disableDebounceIfFalsy: true,\n ...(_data ?? {}),\n };\n }\n}\nexport class SortQueryField {\n get control() {\n return this.data.control;\n }\n constructor(_data) {\n this._data = _data;\n this.data = {\n control: _data?.control ?? new FormControl(null),\n queryParamToValueTransformFn: transformToSort,\n valueToQueryParamTransformFn: transformToSortQueryParam,\n ...(_data ?? {}),\n };\n }\n}\nexport class StringArrayQueryField {\n get control() {\n return this.data.control;\n }\n constructor(_data) {\n this._data = _data;\n this.data = {\n control: _data?.control ?? new FormControl(null),\n queryParamToValueTransformFn: transformToStringArray,\n ...(_data ?? {}),\n };\n }\n}\nexport class BooleanArrayQueryField {\n get control() {\n return this.data.control;\n }\n constructor(_data) {\n this._data = _data;\n this.data = {\n control: _data?.control ?? new FormControl(null),\n queryParamToValueTransformFn: transformToBooleanArray,\n ...(_data ?? {}),\n };\n }\n}\nexport class NumberArrayQueryField {\n get control() {\n return this.data.control;\n }\n constructor(_data) {\n this._data = _data;\n this.data = {\n control: _data?.control ?? new FormControl(null),\n queryParamToValueTransformFn: transformToNumberArray,\n ...(_data ?? {}),\n };\n }\n}\nexport class DateQueryField {\n get control() {\n return this.data.control;\n }\n constructor(_data) {\n this._data = _data;\n this.data = {\n control: _data?.control ?? new FormControl(null),\n queryParamToValueTransformFn: transformToDate,\n ...(_data ?? {}),\n };\n }\n}\nexport class DateArrayQueryField {\n get control() {\n return this.data.control;\n }\n constructor(_data) {\n this._data = _data;\n this.data = {\n control: _data?.control ?? new FormControl(null),\n queryParamToValueTransformFn: transformToDateArray,\n ...(_data ?? {}),\n };\n }\n}\nconst IGNORED_FILTER_COUNT_FIELDS = ['page', 'skip', 'take', 'limit', 'sort', 'sortBy', 'sortOrder', 'query', 'search'];\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class QueryForm {\n get _formValue() {\n return this.form.getRawValue();\n }\n get _form() {\n return this.form;\n }\n get controls() {\n return this.form.controls;\n }\n get value() {\n return this._changes$.value.currentValue;\n }\n get defaultFormValue() {\n return Object.entries(this._defaultValues).reduce((acc, [key]) => {\n acc[key] = this._getDefaultValue(key);\n return acc;\n }, {});\n }\n // with prefix eg. page should become ${prefix}-page\n constructor(_fields, _options) {\n this._fields = _fields;\n this._options = _options;\n this._destroy$ = createDestroy();\n this._unobserveTrigger$ = new Subject();\n this._router = inject(Router);\n this._activatedRoute = inject(ActivatedRoute);\n this._defaultValues = this._extractDefaultValues();\n this._zone = inject(NgZone);\n this._didValueChanges$ = new Subject();\n this._isObserving = false;\n this._skipNextResets = false;\n this._queryParamChanges$ = toObservable(injectQueryParamChanges());\n this._queryParams = injectQueryParams();\n /**\n * The angular form group that contains all the fields.\n *\n * **Do not** use any of the following methods on this form group:\n * - `setValue`: Use `QueryForm.setValue` instead.\n * - `patchValue`: Use `QueryForm.patchValue` instead.\n * - `valueChanges`: Use `QueryForm.changes$` instead.\n * - `value`: Use `QueryForm.value` instead.\n * - `controls`: Use `QueryForm.controls` instead.\n */\n this.form = this._setupFormGroup();\n this._lastFormValue$ = new BehaviorSubject(null);\n this._currentFormValue$ = new BehaviorSubject(this._formValue);\n this._changes$ = new BehaviorSubject({\n previousValue: null,\n currentValue: this.form.getRawValue(),\n });\n this.changes$ = this._changes$.asObservable();\n this.currentValue$ = this._changes$.pipe(map(({ currentValue }) => currentValue));\n this.previousValue$ = this._changes$.pipe(map(({ previousValue }) => previousValue));\n this.changes = toSignal(this.changes$);\n this.currentValue = toSignal(this.currentValue$);\n this.previousValue = toSignal(this.previousValue$);\n /**\n * The number of active filters.\n *\n * Excludes the following fields by default:\n * - `page`\n * - `skip`\n * - `take`\n * - `limit`\n * - `sort`\n * - `sortBy`\n * - `sortOrder`\n * - `query`\n * - `search`\n */\n this.activeFilterCount$ = this.changes$.pipe(map(({ currentValue }) => Object.entries(currentValue)\n .map(([key, value]) => {\n if (IGNORED_FILTER_COUNT_FIELDS.includes(key) || this._fields[key]?.data.skipInFilterCount) {\n return true;\n }\n return this._isDefaultValue(key, value);\n })\n .filter((v) => v === false).length));\n assertInInjectionContext(QueryForm);\n inject(DestroyRef).onDestroy(() => this._cleanup());\n }\n observe(options) {\n if (this._isObserving) {\n if (isDevMode()) {\n console.warn('QueryForm.observe() was called multiple times. This is not supported.');\n }\n return this;\n }\n this._isObserving = true;\n if (options?.syncOnNavigation !== false) {\n const didChanges = this.setFormValueFromUrlQueryParams({\n queryParams: this._queryParams(),\n });\n if (didChanges) {\n this._handleFormChange(true);\n }\n }\n merge(...Object.values(this._fields).map((field) => field.control.valueChanges), this._didValueChanges$)\n .pipe(debounceTime(0), tap(() => {\n this._handleFormChange();\n }), takeUntil(this._destroy$), takeUntil(this._unobserveTrigger$))\n .subscribe();\n let changedFieldsInLastResetLoop = [];\n let currentUniqueChangedFields = [];\n this._currentFormValue$\n .pipe(map((currentValue) => {\n return {\n previousValue: clone(this._lastFormValue$.value),\n currentValue: clone(currentValue),\n };\n }), tap(({ currentValue, previousValue }) => {\n if (options?.writeToQueryParams !== false) {\n this._syncViaUrlQueryParams(currentValue, options?.replaceUrl);\n }\n const didResetValues = this._skipNextResets\n ? false\n : this._handleQueryFormResets(previousValue ?? null, currentValue);\n this._skipNextResets = false;\n const changedFields = Object.keys(currentValue).filter((key) => !equal(previousValue?.[key], currentValue[key]));\n if (changedFieldsInLastResetLoop.length) {\n changedFields.push(...changedFieldsInLastResetLoop);\n changedFieldsInLastResetLoop = [];\n }\n if (didResetValues) {\n this._didValueChanges$.next(true);\n changedFieldsInLastResetLoop = changedFields;\n }\n currentUniqueChangedFields = [...new Set(changedFields)];\n }), switchMap(({ currentValue, previousValue }) => {\n if (changedFieldsInLastResetLoop.length)\n return of(null).pipe(map(() => ({ currentValue, previousValue })));\n const debounceValues = currentUniqueChangedFields.map((key) => {\n const field = this._fields[key];\n if (!field)\n return null;\n if (field.data.disableDebounceIfFalsy === true && !currentValue[key]) {\n return null;\n }\n return field.data.debounce ?? null;\n });\n currentUniqueChangedFields = [];\n if (debounceValues.some((v) => v === null) || !debounceValues.length) {\n return of(null).pipe(map(() => ({ currentValue, previousValue })));\n }\n const shortestDebounceTime = Math.min(...debounceValues.filter((v) => v !== null));\n return timer(shortestDebounceTime).pipe(map(() => ({ currentValue, previousValue })));\n }), tap(({ currentValue, previousValue }) => {\n if (changedFieldsInLastResetLoop.length)\n return;\n this._changes$.next({\n previousValue: previousValue ?? null,\n currentValue: currentValue,\n });\n }), takeUntil(this._destroy$), takeUntil(this._unobserveTrigger$))\n .subscribe();\n if (options?.syncOnNavigation !== false) {\n this._queryParamChanges$\n .pipe(takeUntil(this._destroy$), takeUntil(this._unobserveTrigger$), tap((changes) => {\n const didValueChanges = this.setFormValueFromUrlQueryParams({ queryParams: changes });\n if (didValueChanges) {\n this._didValueChanges$.next(true);\n }\n }))\n .subscribe();\n }\n return this;\n }\n _handleQueryFormResets(previousValue, currentValue) {\n let didResetValues = false;\n for (const formFieldKey in this._fields) {\n const field = this._fields[formFieldKey];\n if (!field)\n continue;\n const resets = field.data.isResetBy;\n if (!resets)\n continue;\n const resetConditionKeys = Array.isArray(resets) ? resets : [resets];\n for (const resetConditionKey of resetConditionKeys) {\n if (!(resetConditionKey in this._fields)) {\n if (isDevMode()) {\n console.warn(`The field \"${resetConditionKey}\" is not defined in the QueryForm. Is it a typo?`, this);\n }\n continue;\n }\n if (previousValue &&\n currentValue &&\n !equal(previousValue[resetConditionKey], currentValue[resetConditionKey])) {\n const defaultValueForKeyToReset = this._getDefaultValue(formFieldKey);\n const currentValueForKeyToReset = currentValue[formFieldKey];\n if (equal(defaultValueForKeyToReset, currentValueForKeyToReset)) {\n continue;\n }\n this.form.controls[formFieldKey].setValue(defaultValueForKeyToReset);\n didResetValues = true;\n break;\n }\n }\n }\n return didResetValues;\n }\n unobserve() {\n this._unobserveTrigger$.next(true);\n this._cleanup();\n }\n setFormValueFromUrlQueryParams(options) {\n let didValueChanges = false;\n for (const [key, field] of Object.entries(this._fields)) {\n const value = options.queryParams[this._transformKeyToQueryParam(key)];\n const valueDoesNotExist = value === undefined;\n if (valueDoesNotExist)\n continue;\n const valueGotRemoved = value === ET_PROPERTY_REMOVED;\n if (valueGotRemoved) {\n field.control.setValue(this._getDefaultValue(key), { emitEvent: false });\n didValueChanges = true;\n continue;\n }\n let deserializedValue = value;\n if (field.data.queryParamToValueTransformFn) {\n deserializedValue = field.data.queryParamToValueTransformFn(value);\n }\n else if (!field.data.skipAutoTransform) {\n const defaultIsNum = this._getDefaultValue(key) === 'number';\n const valueIsNum = !isNaN(Number(value));\n const valueContainsWhitespace = typeof value === 'string' && value.trim() !== value;\n const valueHasLeadingZero = typeof value === 'string' && value.startsWith('0');\n const valueEndsWithDot = typeof value === 'string' && value.endsWith('.');\n const defaultIsBool = this._getDefaultValue(key) === 'boolean';\n const valueIsBool = value === 'true' || value === 'false';\n if (defaultIsNum || (valueIsNum && !valueContainsWhitespace && !valueHasLeadingZero && !valueEndsWithDot)) {\n deserializedValue = transformToNumber(value);\n }\n else if (defaultIsBool || valueIsBool) {\n deserializedValue = transformToBoolean(value);\n }\n }\n const valueIsEqualToCurrent = equal(deserializedValue, field.control.value);\n if (valueIsEqualToCurrent)\n continue;\n field.control.setValue(deserializedValue, { emitEvent: false });\n didValueChanges = true;\n }\n return didValueChanges;\n }\n setValue(value, options) {\n this._form._setValue(value, options);\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n patchValue(value, options) {\n this._form._patchValue(value, options);\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n resetFieldToDefault(key, options) {\n const defaultValue = this._getDefaultValue(key);\n this.form.controls[key].setValue(defaultValue);\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n resetFieldsToDefault(keys, options) {\n const defaults = keys.reduce((acc, key) => {\n acc[key] = this._getDefaultValue(key);\n return acc;\n }, {});\n this.patchValue(defaults);\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n resetAllFieldsToDefault(options) {\n const keys = Object.keys(this._fields);\n if (options?.skipFields) {\n for (const key of options.skipFields) {\n const index = keys.indexOf(key);\n if (index !== -1) {\n keys.splice(index, 1);\n }\n }\n }\n this.resetFieldsToDefault(keys, options);\n }\n _getDefaultValue(key) {\n const val = this._defaultValues[key];\n if (typeof val === 'string' && val.startsWith(ET_ARR_PREFIX)) {\n return JSON.parse(val.slice(ET_ARR_PREFIX.length));\n }\n else if (typeof val === 'function') {\n return val();\n }\n return val ?? null;\n }\n _transformKeyToQueryParam(key) {\n if (!this._options?.queryParamPrefix)\n return key;\n const prefix = typeof this._options?.queryParamPrefix === 'string'\n ? this._options.queryParamPrefix\n : this._options.queryParamPrefix();\n return `${prefix}-${key}`;\n }\n _isDefaultValue(key, value) {\n const normalizedValue = Array.isArray(value) ? `${ET_ARR_PREFIX}${JSON.stringify(value)}` : value;\n return this._getDefaultValue(key) === normalizedValue;\n }\n _setupFormGroup() {\n const group = new FormGroup({});\n for (const [key, field] of Object.entries(this._fields)) {\n group.addControl(key, field.control);\n }\n group._patchValue = group.patchValue;\n group._setValue = group.setValue;\n group.patchValue = this.patchValue.bind(this);\n group.setValue = this.setValue.bind(this);\n return group;\n }\n _extractDefaultValues() {\n const defaultValues = {};\n for (const [key, field] of Object.entries(this._fields)) {\n const value = field.data.defaultValue !== undefined ? field.data.defaultValue : field.control.value;\n if (Array.isArray(value)) {\n defaultValues[key] = `${ET_ARR_PREFIX}${JSON.stringify(value)}`;\n }\n else {\n defaultValues[key] = value;\n }\n }\n return defaultValues;\n }\n _syncViaUrlQueryParams(values, replaceUrl) {\n const queryParams = { ...clone(this._activatedRoute.snapshot.queryParams) };\n for (const [key, value] of Object.entries(values)) {\n const queryParamKey = this._transformKeyToQueryParam(key);\n const field = this._fields[key];\n if (!field) {\n continue;\n }\n const isDefault = this._isDefaultValue(key, value);\n const writeDefaultToUrl = field.data.appendDefaultValueToUrl === true;\n const writeToUrl = field.data.appendToUrl !== false;\n if (!writeToUrl || (isDefault && !writeDefaultToUrl)) {\n queryParams[queryParamKey] = undefined;\n }\n else {\n queryParams[queryParamKey] = field.data.valueToQueryParamTransformFn\n ? field.data.valueToQueryParamTransformFn?.(value)\n : value;\n }\n }\n this._zone.run(() => {\n queueMicrotask(() => {\n this._router.navigate([], {\n queryParams,\n replaceUrl,\n queryParamsHandling: 'merge',\n });\n });\n });\n }\n _handleFormChange(forceOverwrite = false) {\n const currentVal = clone(this._currentFormValue$.value);\n const newVal = clone(this._formValue);\n if (equal(currentVal, newVal)) {\n return;\n }\n if (forceOverwrite) {\n this._lastFormValue$.next(newVal);\n }\n else {\n this._lastFormValue$.next(currentVal);\n }\n this._currentFormValue$.next(newVal);\n }\n _cleanup() {\n if (!this._isObserving)\n return;\n this._isObserving = false;\n const queryParamKeys = Object.keys(this._fields);\n const queryParams = queryParamKeys.reduce((acc, key) => {\n acc[this._transformKeyToQueryParam(key)] = undefined;\n return acc;\n }, {});\n this._zone.run(() => {\n queueMicrotask(() => {\n this._router.navigate([], {\n queryParams,\n replaceUrl: true,\n queryParamsHandling: 'merge',\n });\n });\n });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLEtBQUssRUFDTCxhQUFhLEVBQ2IsS0FBSyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVdoSCxPQUFPLEVBRUwsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2QixlQUFlLEVBQ2Ysb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLHlCQUF5QixFQUN6QixzQkFBc0IsR0FDdkIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUM7QUFFakMsTUFBTSxPQUFPLFVBQVU7SUFDckIsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBbUIsSUFB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SUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxRQUFRO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTztRQUUvQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUUxQixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRCxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUN2QyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7WUFDckQsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQ0QsRUFBNkIsQ0FDOUIsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNsQixjQUFjLENBQUMsR0FBRyxFQUFFO2dCQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7b0JBQ3hCLFdBQVc7b0JBQ1gsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLG1CQUFtQixFQUFFLE9BQU87aUJBQzdCLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBOZ1pvbmUsIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgaW5qZWN0LCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBFVF9QUk9QRVJUWV9SRU1PVkVELFxuICBjbG9uZSxcbiAgY3JlYXRlRGVzdHJveSxcbiAgZXF1YWwsXG4gIGluamVjdFF1ZXJ5UGFyYW1DaGFuZ2VzLFxuICBpbmplY3RRdWVyeVBhcmFtcyxcbn0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIGRlYm91bmNlVGltZSwgbWFwLCBtZXJnZSwgb2YsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBPcHRpb25hbFF1ZXJ5RmllbGRPcHRpb25zLFxuICBRdWVyeUZpZWxkT3B0aW9ucyxcbiAgUXVlcnlGb3JtR3JvdXAsXG4gIFF1ZXJ5Rm9ybUdyb3VwQ29udHJvbHMsXG4gIFF1ZXJ5Rm9ybU9ic2VydmVPcHRpb25zLFxuICBRdWVyeUZvcm1WYWx1ZSxcbiAgUXVlcnlGb3JtVmFsdWVFdmVudCxcbiAgUXVlcnlGb3JtV3JpdGVPcHRpb25zLFxufSBmcm9tICcuL3F1ZXJ5LWZvcm0udHlwZXMnO1xuaW1wb3J0IHtcbiAgU29ydCxcbiAgdHJhbnNmb3JtVG9Cb29sZWFuLFxuICB0cmFuc2Zvcm1Ub0Jvb2xlYW5BcnJheSxcbiAgdHJhbnNmb3JtVG9EYXRlLFxuICB0cmFuc2Zvcm1Ub0RhdGVBcnJheSxcbiAgdHJhbnNmb3JtVG9OdW1iZXIsXG4gIHRyYW5zZm9ybVRvTnVtYmVyQXJyYXksXG4gIHRyYW5zZm9ybVRvU29ydCxcbiAgdHJhbnNmb3JtVG9Tb3J0UXVlcnlQYXJhbSxcbiAgdHJhbnNmb3JtVG9TdHJpbmdBcnJheSxcbn0gZnJvbSAnLi9xdWVyeS1mb3JtLnV0aWxzJztcblxuY29uc3QgRVRfQVJSX1BSRUZJWCA9ICdFVF9BUlJfXyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeUZpZWxkPFQ+IHtcbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5jb250cm9sO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRhdGE6IFF1ZXJ5RmllbGRPcHRpb25zPFQ+KSB7fVxufVxuXG5leHBvcnQgY2xhc3MgU2VhcmNoUXVlcnlGaWVsZCB7XG4gIGdldCBjb250cm9sKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuY29udHJvbDtcbiAgfVxuXG4gIGRhdGE6IFF1ZXJ5RmllbGRPcHRpb25zPHN0cmluZyB8IG51bGw+O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBfZGF0YT86IE9wdGlvbmFsUXVlcnlGaWVsZE9wdGlvbnM8c3RyaW5nIHwgbnVsbD4pIHtcbiAgICB0aGlzLmRhdGEgPSB7XG4gICAgICBjb250cm9sOiBfZGF0YT8uY29udHJvbCA/PyBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCksXG4gICAgICBkZWJvdW5jZTogMzAwLFxuICAgICAgZGlzYWJsZURlYm91bmNlSWZGYWxzeTogdHJ1ZSxcbiAgICAgIC4uLihfZGF0YSA/PyB7fSksXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU29ydFF1ZXJ5RmllbGQge1xuICBnZXQgY29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmNvbnRyb2w7XG4gIH1cblxuICBkYXRhOiBRdWVyeUZpZWxkT3B0aW9uczxTb3J0IHwgbnVsbD47XG5cbiAgY29uc3RydWN0b3IocHVibGljIF9kYXRhPzogT3B0aW9uYWxRdWVyeUZpZWxkT3B0aW9uczxTb3J0IHwgbnVsbD4pIHtcbiAgICB0aGlzLmRhdGEgPSB7XG4gICAgICBjb250cm9sOiBfZGF0YT8uY29udHJvbCA/PyBuZXcgRm9ybUNvbnRyb2w8U29ydCB8IG51bGw+KG51bGwpLFxuICAgICAgcXVlcnlQYXJhbVRvVmFsdWVUcmFuc2Zvcm1GbjogdHJhbnNmb3JtVG9Tb3J0LFxuICAgICAgdmFsdWVUb1F1ZXJ5UGFyYW1UcmFuc2Zvcm1GbjogdHJhbnNmb3JtVG9Tb3J0UXVlcnlQYXJhbSxcbiAgICAgIC4uLihfZGF0YSA/PyB7fSksXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RyaW5nQXJyYXlRdWVyeUZpZWxkPFQgZXh0ZW5kcyBzdHJpbmdbXT4ge1xuICBnZXQgY29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmNvbnRyb2w7XG4gIH1cblxuICBkYXRhOiBRdWVyeUZpZWxkT3B0aW9uczxUIHwgbnVsbD47XG5cbiAgY29uc3RydWN0b3IocHVibGljIF9kYXRhPzogT3B0aW9uYWxRdWVyeUZpZWxkT3B0aW9uczxUIHwgbnVsbD4pIHtcbiAgICB0aGlzLmRhdGEgPSB7XG4gICAgICBjb250cm9sOiBfZGF0YT8uY29udHJvbCA/PyBuZXcgRm9ybUNvbnRyb2w8VCB8IG51bGw+KG51bGwpLFxuICAgICAgcXVlcnlQYXJhbVRvVmFsdWVUcmFuc2Zvcm1GbjogdHJhbnNmb3JtVG9TdHJpbmdBcnJheSBhcyAodmFsOiB1bmtub3duKSA9PiBUIHwgbnVsbCxcbiAgICAgIC4uLihfZGF0YSA/PyB7fSksXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9vbGVhbkFycmF5UXVlcnlGaWVsZCB7XG4gIGdldCBjb250cm9sKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuY29udHJvbDtcbiAgfVxuXG4gIGRhdGE6IFF1ZXJ5RmllbGRPcHRpb25zPGJvb2xlYW5bXSB8IG51bGw+O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBfZGF0YT86IE9wdGlvbmFsUXVlcnlGaWVsZE9wdGlvbnM8Ym9vbGVhbltdIHwgbnVsbD4pIHtcbiAgICB0aGlzLmRhdGEgPSB7XG4gICAgICBjb250cm9sOiBfZGF0YT8uY29udHJvbCA/PyBuZXcgRm9ybUNvbnRyb2w8Ym9vbGVhbltdIHwgbnVsbD4obnVsbCksXG4gICAgICBxdWVyeVBhcmFtVG9WYWx1ZVRyYW5zZm9ybUZuOiB0cmFuc2Zvcm1Ub0Jvb2xlYW5BcnJheSxcbiAgICAgIC4uLihfZGF0YSA/PyB7fSksXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTnVtYmVyQXJyYXlRdWVyeUZpZWxkIHtcbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5jb250cm9sO1xuICB9XG5cbiAgZGF0YTogUXVlcnlGaWVsZE9wdGlvbnM8bnVtYmVyW10gfCBudWxsPjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgX2RhdGE/OiBPcHRpb25hbFF1ZXJ5RmllbGRPcHRpb25zPG51bWJlcltdIHwgbnVsbD4pIHtcbiAgICB0aGlzLmRhdGEgPSB7XG4gICAgICBjb250cm9sOiBfZGF0YT8uY29udHJvbCA/PyBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyW10gfCBudWxsPihudWxsKSxcbiAgICAgIHF1ZXJ5UGFyYW1Ub1ZhbHVlVHJhbnNmb3JtRm46IHRyYW5zZm9ybVRvTnVtYmVyQXJyYXksXG4gICAgICAuLi4oX2RhdGEgPz8ge30pLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVRdWVyeUZpZWxkIHtcbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5jb250cm9sO1xuICB9XG5cbiAgZGF0YTogUXVlcnlGaWVsZE9wdGlvbnM8RGF0ZSB8IG51bGw+O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBfZGF0YT86IE9wdGlvbmFsUXVlcnlGaWVsZE9wdGlvbnM8RGF0ZSB8IG51bGw+KSB7XG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgY29udHJvbDogX2RhdGE/LmNvbnRyb2wgPz8gbmV3IEZvcm1Db250cm9sPERhdGUgfCBudWxsPihudWxsKSxcbiAgICAgIHF1ZXJ5UGFyYW1Ub1ZhbHVlVHJhbnNmb3JtRm46IHRyYW5zZm9ybVRvRGF0ZSxcbiAgICAgIC4uLihfZGF0YSA/PyB7fSksXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0ZUFycmF5UXVlcnlGaWVsZCB7XG4gIGdldCBjb250cm9sKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuY29udHJvbDtcbiAgfVxuXG4gIGRhdGE6IFF1ZXJ5RmllbGRPcHRpb25zPERhdGVbXSB8IG51bGw+O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBfZGF0YT86IE9wdGlvbmFsUXVlcnlGaWVsZE9wdGlvbnM8RGF0ZVtdIHwgbnVsbD4pIHtcbiAgICB0aGlzLmRhdGEgPSB7XG4gICAgICBjb250cm9sOiBfZGF0YT8uY29udHJvbCA/PyBuZXcgRm9ybUNvbnRyb2w8RGF0ZVtdIHwgbnVsbD4obnVsbCksXG4gICAgICBxdWVyeVBhcmFtVG9WYWx1ZVRyYW5zZm9ybUZuOiB0cmFuc2Zvcm1Ub0RhdGVBcnJheSxcbiAgICAgIC4uLihfZGF0YSA/PyB7fSksXG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBJR05PUkVEX0ZJTFRFUl9DT1VOVF9GSUVMRFMgPSBbJ3BhZ2UnLCAnc2tpcCcsICd0YWtlJywgJ2xpbWl0JywgJ3NvcnQnLCAnc29ydEJ5JywgJ3NvcnRPcmRlcicsICdxdWVyeScsICdzZWFyY2gnXTtcblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUZvcm1PcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgcHJlZml4IHRvIHVzZSBmb3IgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMuIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGhhdmUgbXVsdGlwbGUgcXVlcnkgZm9ybXMgb24gdGhlIHNhbWUgcGFnZS5cbiAgICovXG4gIHF1ZXJ5UGFyYW1QcmVmaXg/OiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEFueVF1ZXJ5Rm9ybSA9IFF1ZXJ5Rm9ybTxhbnk+O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGNsYXNzIFF1ZXJ5Rm9ybTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUXVlcnlGaWVsZDxhbnk+Pj4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdW5vYnNlcnZlVHJpZ2dlciQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZhdGVkUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0VmFsdWVzID0gdGhpcy5fZXh0cmFjdERlZmF1bHRWYWx1ZXMoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaWRWYWx1ZUNoYW5nZXMkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBwcml2YXRlIF9pc09ic2VydmluZyA9IGZhbHNlO1xuICBwcml2YXRlIF9za2lwTmV4dFJlc2V0cyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3F1ZXJ5UGFyYW1DaGFuZ2VzJCA9IHRvT2JzZXJ2YWJsZShpbmplY3RRdWVyeVBhcmFtQ2hhbmdlcygpKTtcbiAgcHJpdmF0ZSBfcXVlcnlQYXJhbXMgPSBpbmplY3RRdWVyeVBhcmFtcygpO1xuXG4gIC8qKlxuICAgKiBUaGUgYW5ndWxhciBmb3JtIGdyb3VwIHRoYXQgY29udGFpbnMgYWxsIHRoZSBmaWVsZHMuXG4gICAqXG4gICAqICoqRG8gbm90KiogdXNlIGFueSBvZiB0aGUgZm9sbG93aW5nIG1ldGhvZHMgb24gdGhpcyBmb3JtIGdyb3VwOlxuICAgKiAtIGBzZXRWYWx1ZWA6IFVzZSBgUXVlcnlGb3JtLnNldFZhbHVlYCBpbnN0ZWFkLlxuICAgKiAtIGBwYXRjaFZhbHVlYDogVXNlIGBRdWVyeUZvcm0ucGF0Y2hWYWx1ZWAgaW5zdGVhZC5cbiAgICogLSBgdmFsdWVDaGFuZ2VzYDogVXNlIGBRdWVyeUZvcm0uY2hhbmdlcyRgIGluc3RlYWQuXG4gICAqIC0gYHZhbHVlYDogVXNlIGBRdWVyeUZvcm0udmFsdWVgIGluc3RlYWQuXG4gICAqIC0gYGNvbnRyb2xzYDogVXNlIGBRdWVyeUZvcm0uY29udHJvbHNgIGluc3RlYWQuXG4gICAqL1xuICByZWFkb25seSBmb3JtID0gdGhpcy5fc2V0dXBGb3JtR3JvdXAoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9sYXN0Rm9ybVZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVlcnlGb3JtVmFsdWU8VD4gfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3VycmVudEZvcm1WYWx1ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1ZXJ5Rm9ybVZhbHVlPFQ+Pih0aGlzLl9mb3JtVmFsdWUpO1xuXG4gIHByaXZhdGUgZ2V0IF9mb3JtVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFF1ZXJ5Rm9ybVZhbHVlPFQ+O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgX2Zvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybSBhcyB1bmtub3duIGFzIFF1ZXJ5Rm9ybUdyb3VwO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbmdlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1ZXJ5Rm9ybVZhbHVlRXZlbnQ8VD4+KHtcbiAgICBwcmV2aW91c1ZhbHVlOiBudWxsLFxuICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkgYXMgUXVlcnlGb3JtVmFsdWU8VD4sXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGNoYW5nZXMkID0gdGhpcy5fY2hhbmdlcyQuYXNPYnNlcnZhYmxlKCk7XG4gIHJlYWRvbmx5IGN1cnJlbnRWYWx1ZSQgPSB0aGlzLl9jaGFuZ2VzJC5waXBlKG1hcCgoeyBjdXJyZW50VmFsdWUgfSkgPT4gY3VycmVudFZhbHVlKSk7XG4gIHJlYWRvbmx5IHByZXZpb3VzVmFsdWUkID0gdGhpcy5fY2hhbmdlcyQucGlwZShtYXAoKHsgcHJldmlvdXNWYWx1ZSB9KSA9PiBwcmV2aW91c1ZhbHVlKSk7XG5cbiAgcmVhZG9ubHkgY2hhbmdlcyA9IHRvU2lnbmFsKHRoaXMuY2hhbmdlcyQpO1xuICByZWFkb25seSBjdXJyZW50VmFsdWUgPSB0b1NpZ25hbCh0aGlzLmN1cnJlbnRWYWx1ZSQpO1xuICByZWFkb25seSBwcmV2aW91c1ZhbHVlID0gdG9TaWduYWwodGhpcy5wcmV2aW91c1ZhbHVlJCk7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgYWN0aXZlIGZpbHRlcnMuXG4gICAqXG4gICAqIEV4Y2x1ZGVzIHRoZSBmb2xsb3dpbmcgZmllbGRzIGJ5IGRlZmF1bHQ6XG4gICAqIC0gYHBhZ2VgXG4gICAqIC0gYHNraXBgXG4gICAqIC0gYHRha2VgXG4gICAqIC0gYGxpbWl0YFxuICAgKiAtIGBzb3J0YFxuICAgKiAtIGBzb3J0QnlgXG4gICAqIC0gYHNvcnRPcmRlcmBcbiAgICogLSBgcXVlcnlgXG4gICAqIC0gYHNlYXJjaGBcbiAgICovXG4gIHJlYWRvbmx5IGFjdGl2ZUZpbHRlckNvdW50JCA9IHRoaXMuY2hhbmdlcyQucGlwZShcbiAgICBtYXAoXG4gICAgICAoeyBjdXJyZW50VmFsdWUgfSkgPT5cbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY3VycmVudFZhbHVlKVxuICAgICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKElHTk9SRURfRklMVEVSX0NPVU5UX0ZJRUxEUy5pbmNsdWRlcyhrZXkpIHx8IHRoaXMuX2ZpZWxkc1trZXldPy5kYXRhLnNraXBJbkZpbHRlckNvdW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEZWZhdWx0VmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKCh2KSA9PiB2ID09PSBmYWxzZSkubGVuZ3RoLFxuICAgICksXG4gICk7XG5cbiAgZ2V0IGNvbnRyb2xzKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHM7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5nZXMkLnZhbHVlLmN1cnJlbnRWYWx1ZTtcbiAgfVxuXG4gIGdldCBkZWZhdWx0Rm9ybVZhbHVlKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLl9kZWZhdWx0VmFsdWVzKS5yZWR1Y2UoKGFjYywgW2tleV0pID0+IHtcbiAgICAgIGFjY1trZXkgYXMga2V5b2YgUXVlcnlGb3JtVmFsdWU8VD5dID0gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGtleSk7XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUXVlcnlGb3JtVmFsdWU8VD4pO1xuICB9XG5cbiAgLy8gd2l0aCBwcmVmaXggZWcuIHBhZ2Ugc2hvdWxkIGJlY29tZSAke3ByZWZpeH0tcGFnZVxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9maWVsZHM6IFQsXG4gICAgcHJpdmF0ZSBfb3B0aW9ucz86IFF1ZXJ5Rm9ybU9wdGlvbnMsXG4gICkge1xuICAgIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChRdWVyeUZvcm0pO1xuXG4gICAgaW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB0aGlzLl9jbGVhbnVwKCkpO1xuICB9XG5cbiAgb2JzZXJ2ZShvcHRpb25zPzogUXVlcnlGb3JtT2JzZXJ2ZU9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5faXNPYnNlcnZpbmcpIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1F1ZXJ5Rm9ybS5vYnNlcnZlKCkgd2FzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5faXNPYnNlcnZpbmcgPSB0cnVlO1xuXG4gICAgaWYgKG9wdGlvbnM/LnN5bmNPbk5hdmlnYXRpb24gIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBkaWRDaGFuZ2VzID0gdGhpcy5zZXRGb3JtVmFsdWVGcm9tVXJsUXVlcnlQYXJhbXMoe1xuICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5fcXVlcnlQYXJhbXMoKSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGlkQ2hhbmdlcykge1xuICAgICAgICB0aGlzLl9oYW5kbGVGb3JtQ2hhbmdlKHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lcmdlKC4uLk9iamVjdC52YWx1ZXModGhpcy5fZmllbGRzKS5tYXAoKGZpZWxkKSA9PiBmaWVsZC5jb250cm9sLnZhbHVlQ2hhbmdlcyksIHRoaXMuX2RpZFZhbHVlQ2hhbmdlcyQpXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDApLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2hhbmRsZUZvcm1DaGFuZ2UoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl91bm9ic2VydmVUcmlnZ2VyJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBsZXQgY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcDogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgY3VycmVudFVuaXF1ZUNoYW5nZWRGaWVsZHM6IHN0cmluZ1tdID0gW107XG5cbiAgICB0aGlzLl9jdXJyZW50Rm9ybVZhbHVlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoY3VycmVudFZhbHVlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IGNsb25lKHRoaXMuX2xhc3RGb3JtVmFsdWUkLnZhbHVlKSxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogY2xvbmUoY3VycmVudFZhbHVlKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCh7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSB9KSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbnM/LndyaXRlVG9RdWVyeVBhcmFtcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N5bmNWaWFVcmxRdWVyeVBhcmFtcyhjdXJyZW50VmFsdWUsIG9wdGlvbnM/LnJlcGxhY2VVcmwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGRpZFJlc2V0VmFsdWVzID0gdGhpcy5fc2tpcE5leHRSZXNldHNcbiAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgIDogdGhpcy5faGFuZGxlUXVlcnlGb3JtUmVzZXRzKHByZXZpb3VzVmFsdWUgPz8gbnVsbCwgY3VycmVudFZhbHVlKTtcblxuICAgICAgICAgIHRoaXMuX3NraXBOZXh0UmVzZXRzID0gZmFsc2U7XG5cbiAgICAgICAgICBjb25zdCBjaGFuZ2VkRmllbGRzID0gT2JqZWN0LmtleXMoY3VycmVudFZhbHVlKS5maWx0ZXIoXG4gICAgICAgICAgICAoa2V5KSA9PiAhZXF1YWwocHJldmlvdXNWYWx1ZT8uW2tleV0sIGN1cnJlbnRWYWx1ZVtrZXldKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3AubGVuZ3RoKSB7XG4gICAgICAgICAgICBjaGFuZ2VkRmllbGRzLnB1c2goLi4uY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcCk7XG4gICAgICAgICAgICBjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRpZFJlc2V0VmFsdWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWRWYWx1ZUNoYW5nZXMkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICBjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wID0gY2hhbmdlZEZpZWxkcztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50VW5pcXVlQ2hhbmdlZEZpZWxkcyA9IFsuLi5uZXcgU2V0KGNoYW5nZWRGaWVsZHMpXTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkgPT4ge1xuICAgICAgICAgIGlmIChjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wLmxlbmd0aCkgcmV0dXJuIG9mKG51bGwpLnBpcGUobWFwKCgpID0+ICh7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSB9KSkpO1xuXG4gICAgICAgICAgY29uc3QgZGVib3VuY2VWYWx1ZXMgPSBjdXJyZW50VW5pcXVlQ2hhbmdlZEZpZWxkcy5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9maWVsZHNba2V5XTtcblxuICAgICAgICAgICAgaWYgKCFmaWVsZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5kYXRhLmRpc2FibGVEZWJvdW5jZUlmRmFsc3kgPT09IHRydWUgJiYgIWN1cnJlbnRWYWx1ZVtrZXldKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmllbGQuZGF0YS5kZWJvdW5jZSA/PyBudWxsO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY3VycmVudFVuaXF1ZUNoYW5nZWRGaWVsZHMgPSBbXTtcblxuICAgICAgICAgIGlmIChkZWJvdW5jZVZhbHVlcy5zb21lKCh2KSA9PiB2ID09PSBudWxsKSB8fCAhZGVib3VuY2VWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCkucGlwZShtYXAoKCkgPT4gKHsgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlIH0pKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc2hvcnRlc3REZWJvdW5jZVRpbWUgPSBNYXRoLm1pbiguLi5kZWJvdW5jZVZhbHVlcy5maWx0ZXIoKHYpOiB2IGlzIG51bWJlciA9PiB2ICE9PSBudWxsKSk7XG5cbiAgICAgICAgICByZXR1cm4gdGltZXIoc2hvcnRlc3REZWJvdW5jZVRpbWUpLnBpcGUobWFwKCgpID0+ICh7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSB9KSkpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCh7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSB9KSA9PiB7XG4gICAgICAgICAgaWYgKGNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3AubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgICB0aGlzLl9jaGFuZ2VzJC5uZXh0KHtcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IHByZXZpb3VzVmFsdWUgPz8gbnVsbCxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogY3VycmVudFZhbHVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vub2JzZXJ2ZVRyaWdnZXIkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIGlmIChvcHRpb25zPy5zeW5jT25OYXZpZ2F0aW9uICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5fcXVlcnlQYXJhbUNoYW5nZXMkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vub2JzZXJ2ZVRyaWdnZXIkKSxcbiAgICAgICAgICB0YXAoKGNoYW5nZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRpZFZhbHVlQ2hhbmdlcyA9IHRoaXMuc2V0Rm9ybVZhbHVlRnJvbVVybFF1ZXJ5UGFyYW1zKHsgcXVlcnlQYXJhbXM6IGNoYW5nZXMgfSk7XG5cbiAgICAgICAgICAgIGlmIChkaWRWYWx1ZUNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgdGhpcy5fZGlkVmFsdWVDaGFuZ2VzJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVF1ZXJ5Rm9ybVJlc2V0cyhwcmV2aW91c1ZhbHVlOiBRdWVyeUZvcm1WYWx1ZTxUPiB8IG51bGwsIGN1cnJlbnRWYWx1ZTogUXVlcnlGb3JtVmFsdWU8VD4pIHtcbiAgICBsZXQgZGlkUmVzZXRWYWx1ZXMgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgZm9ybUZpZWxkS2V5IGluIHRoaXMuX2ZpZWxkcykge1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLl9maWVsZHNbZm9ybUZpZWxkS2V5XTtcblxuICAgICAgaWYgKCFmaWVsZCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHJlc2V0cyA9IGZpZWxkLmRhdGEuaXNSZXNldEJ5O1xuXG4gICAgICBpZiAoIXJlc2V0cykgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHJlc2V0Q29uZGl0aW9uS2V5cyA9IEFycmF5LmlzQXJyYXkocmVzZXRzKSA/IHJlc2V0cyA6IFtyZXNldHNdO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlc2V0Q29uZGl0aW9uS2V5IG9mIHJlc2V0Q29uZGl0aW9uS2V5cykge1xuICAgICAgICBpZiAoIShyZXNldENvbmRpdGlvbktleSBpbiB0aGlzLl9maWVsZHMpKSB7XG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFRoZSBmaWVsZCBcIiR7cmVzZXRDb25kaXRpb25LZXl9XCIgaXMgbm90IGRlZmluZWQgaW4gdGhlIFF1ZXJ5Rm9ybS4gSXMgaXQgYSB0eXBvP2AsIHRoaXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByZXZpb3VzVmFsdWUgJiZcbiAgICAgICAgICBjdXJyZW50VmFsdWUgJiZcbiAgICAgICAgICAhZXF1YWwocHJldmlvdXNWYWx1ZVtyZXNldENvbmRpdGlvbktleV0sIGN1cnJlbnRWYWx1ZVtyZXNldENvbmRpdGlvbktleV0pXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZUZvcktleVRvUmVzZXQgPSB0aGlzLl9nZXREZWZhdWx0VmFsdWUoZm9ybUZpZWxkS2V5KTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVGb3JLZXlUb1Jlc2V0ID0gY3VycmVudFZhbHVlW2Zvcm1GaWVsZEtleV07XG5cbiAgICAgICAgICBpZiAoZXF1YWwoZGVmYXVsdFZhbHVlRm9yS2V5VG9SZXNldCwgY3VycmVudFZhbHVlRm9yS2V5VG9SZXNldCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1tmb3JtRmllbGRLZXldLnNldFZhbHVlKGRlZmF1bHRWYWx1ZUZvcktleVRvUmVzZXQpO1xuXG4gICAgICAgICAgZGlkUmVzZXRWYWx1ZXMgPSB0cnVlO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGlkUmVzZXRWYWx1ZXM7XG4gIH1cblxuICB1bm9ic2VydmUoKSB7XG4gICAgdGhpcy5fdW5vYnNlcnZlVHJpZ2dlciQubmV4dCh0cnVlKTtcbiAgICB0aGlzLl9jbGVhbnVwKCk7XG4gIH1cblxuICBzZXRGb3JtVmFsdWVGcm9tVXJsUXVlcnlQYXJhbXMob3B0aW9uczogeyBxdWVyeVBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSkge1xuICAgIGxldCBkaWRWYWx1ZUNoYW5nZXMgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2ZpZWxkcykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy5xdWVyeVBhcmFtc1t0aGlzLl90cmFuc2Zvcm1LZXlUb1F1ZXJ5UGFyYW0oa2V5KV07XG5cbiAgICAgIGNvbnN0IHZhbHVlRG9lc05vdEV4aXN0ID0gdmFsdWUgPT09IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHZhbHVlRG9lc05vdEV4aXN0KSBjb250aW51ZTtcblxuICAgICAgY29uc3QgdmFsdWVHb3RSZW1vdmVkID0gdmFsdWUgPT09IEVUX1BST1BFUlRZX1JFTU9WRUQ7XG5cbiAgICAgIGlmICh2YWx1ZUdvdFJlbW92ZWQpIHtcbiAgICAgICAgZmllbGQuY29udHJvbC5zZXRWYWx1ZSh0aGlzLl9nZXREZWZhdWx0VmFsdWUoa2V5KSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICBkaWRWYWx1ZUNoYW5nZXMgPSB0cnVlO1xuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IGRlc2VyaWFsaXplZFZhbHVlID0gdmFsdWU7XG5cbiAgICAgIGlmIChmaWVsZC5kYXRhLnF1ZXJ5UGFyYW1Ub1ZhbHVlVHJhbnNmb3JtRm4pIHtcbiAgICAgICAgZGVzZXJpYWxpemVkVmFsdWUgPSBmaWVsZC5kYXRhLnF1ZXJ5UGFyYW1Ub1ZhbHVlVHJhbnNmb3JtRm4odmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICghZmllbGQuZGF0YS5za2lwQXV0b1RyYW5zZm9ybSkge1xuICAgICAgICBjb25zdCBkZWZhdWx0SXNOdW0gPSB0aGlzLl9nZXREZWZhdWx0VmFsdWUoa2V5KSA9PT0gJ251bWJlcic7XG4gICAgICAgIGNvbnN0IHZhbHVlSXNOdW0gPSAhaXNOYU4oTnVtYmVyKHZhbHVlKSk7XG4gICAgICAgIGNvbnN0IHZhbHVlQ29udGFpbnNXaGl0ZXNwYWNlID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkgIT09IHZhbHVlO1xuICAgICAgICBjb25zdCB2YWx1ZUhhc0xlYWRpbmdaZXJvID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5zdGFydHNXaXRoKCcwJyk7XG4gICAgICAgIGNvbnN0IHZhbHVlRW5kc1dpdGhEb3QgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmVuZHNXaXRoKCcuJyk7XG5cbiAgICAgICAgY29uc3QgZGVmYXVsdElzQm9vbCA9IHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkpID09PSAnYm9vbGVhbic7XG4gICAgICAgIGNvbnN0IHZhbHVlSXNCb29sID0gdmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJ2ZhbHNlJztcblxuICAgICAgICBpZiAoZGVmYXVsdElzTnVtIHx8ICh2YWx1ZUlzTnVtICYmICF2YWx1ZUNvbnRhaW5zV2hpdGVzcGFjZSAmJiAhdmFsdWVIYXNMZWFkaW5nWmVybyAmJiAhdmFsdWVFbmRzV2l0aERvdCkpIHtcbiAgICAgICAgICBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHRyYW5zZm9ybVRvTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChkZWZhdWx0SXNCb29sIHx8IHZhbHVlSXNCb29sKSB7XG4gICAgICAgICAgZGVzZXJpYWxpemVkVmFsdWUgPSB0cmFuc2Zvcm1Ub0Jvb2xlYW4odmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlSXNFcXVhbFRvQ3VycmVudCA9IGVxdWFsKGRlc2VyaWFsaXplZFZhbHVlLCBmaWVsZC5jb250cm9sLnZhbHVlKTtcblxuICAgICAgaWYgKHZhbHVlSXNFcXVhbFRvQ3VycmVudCkgY29udGludWU7XG5cbiAgICAgIGZpZWxkLmNvbnRyb2wuc2V0VmFsdWUoZGVzZXJpYWxpemVkVmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIGRpZFZhbHVlQ2hhbmdlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZFZhbHVlQ2hhbmdlcztcbiAgfVxuXG4gIHNldFZhbHVlKHZhbHVlOiBRdWVyeUZvcm1WYWx1ZTxUPiwgb3B0aW9ucz86IFF1ZXJ5Rm9ybVdyaXRlT3B0aW9ucykge1xuICAgIHRoaXMuX2Zvcm0uX3NldFZhbHVlKHZhbHVlLCBvcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zPy5za2lwUmVzZXRzKSB7XG4gICAgICB0aGlzLl9za2lwTmV4dFJlc2V0cyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcGF0Y2hWYWx1ZSh2YWx1ZTogUGFydGlhbDxRdWVyeUZvcm1WYWx1ZTxUPj4sIG9wdGlvbnM/OiBRdWVyeUZvcm1Xcml0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLl9mb3JtLl9wYXRjaFZhbHVlKHZhbHVlLCBvcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zPy5za2lwUmVzZXRzKSB7XG4gICAgICB0aGlzLl9za2lwTmV4dFJlc2V0cyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRGaWVsZFRvRGVmYXVsdChrZXk6IGtleW9mIFF1ZXJ5Rm9ybVZhbHVlPFQ+LCBvcHRpb25zPzogUXVlcnlGb3JtV3JpdGVPcHRpb25zKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGtleSBhcyBzdHJpbmcpO1xuXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzW2tleV0uc2V0VmFsdWUoZGVmYXVsdFZhbHVlKTtcblxuICAgIGlmIChvcHRpb25zPy5za2lwUmVzZXRzKSB7XG4gICAgICB0aGlzLl9za2lwTmV4dFJlc2V0cyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRGaWVsZHNUb0RlZmF1bHQoa2V5czogKGtleW9mIFF1ZXJ5Rm9ybVZhbHVlPFQ+KVtdLCBvcHRpb25zPzogUXVlcnlGb3JtV3JpdGVPcHRpb25zKSB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSBrZXlzLnJlZHVjZShcbiAgICAgIChhY2MsIGtleSkgPT4ge1xuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkgYXMgc3RyaW5nKTtcblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFBhcnRpYWw8UXVlcnlGb3JtVmFsdWU8VD4+LFxuICAgICk7XG5cbiAgICB0aGlzLnBhdGNoVmFsdWUoZGVmYXVsdHMpO1xuXG4gICAgaWYgKG9wdGlvbnM/LnNraXBSZXNldHMpIHtcbiAgICAgIHRoaXMuX3NraXBOZXh0UmVzZXRzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXNldEFsbEZpZWxkc1RvRGVmYXVsdChvcHRpb25zPzogUXVlcnlGb3JtV3JpdGVPcHRpb25zICYgeyBza2lwRmllbGRzPzogKGtleW9mIFF1ZXJ5Rm9ybVZhbHVlPFQ+KVtdIH0pIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5fZmllbGRzKSBhcyAoa2V5b2YgUXVlcnlGb3JtVmFsdWU8VD4pW107XG5cbiAgICBpZiAob3B0aW9ucz8uc2tpcEZpZWxkcykge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2Ygb3B0aW9ucy5za2lwRmllbGRzKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0ga2V5cy5pbmRleE9mKGtleSk7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGtleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVzZXRGaWVsZHNUb0RlZmF1bHQoa2V5cywgb3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIF9nZXREZWZhdWx0VmFsdWUoa2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCB2YWwgPSB0aGlzLl9kZWZhdWx0VmFsdWVzW2tleV07XG5cbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgdmFsLnN0YXJ0c1dpdGgoRVRfQVJSX1BSRUZJWCkpIHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbC5zbGljZShFVF9BUlJfUFJFRklYLmxlbmd0aCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHZhbCgpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWwgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX3RyYW5zZm9ybUtleVRvUXVlcnlQYXJhbShrZXk6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5fb3B0aW9ucz8ucXVlcnlQYXJhbVByZWZpeCkgcmV0dXJuIGtleTtcblxuICAgIGNvbnN0IHByZWZpeCA9XG4gICAgICB0eXBlb2YgdGhpcy5fb3B0aW9ucz8ucXVlcnlQYXJhbVByZWZpeCA9PT0gJ3N0cmluZydcbiAgICAgICAgPyB0aGlzLl9vcHRpb25zLnF1ZXJ5UGFyYW1QcmVmaXhcbiAgICAgICAgOiB0aGlzLl9vcHRpb25zLnF1ZXJ5UGFyYW1QcmVmaXgoKTtcblxuICAgIHJldHVybiBgJHtwcmVmaXh9LSR7a2V5fWA7XG4gIH1cblxuICBwcml2YXRlIF9pc0RlZmF1bHRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IGAke0VUX0FSUl9QUkVGSVh9JHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCA6IHZhbHVlO1xuXG4gICAgcmV0dXJuIHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkpID09PSBub3JtYWxpemVkVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cEZvcm1Hcm91cCgpIHtcbiAgICBjb25zdCBncm91cCA9IG5ldyBGb3JtR3JvdXAoe30gYXMgUXVlcnlGb3JtR3JvdXBDb250cm9sczxUPikgYXMgdW5rbm93biBhcyBRdWVyeUZvcm1Hcm91cDtcblxuICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2ZpZWxkcykpIHtcbiAgICAgIGdyb3VwLmFkZENvbnRyb2woa2V5LCBmaWVsZC5jb250cm9sKTtcbiAgICB9XG5cbiAgICBncm91cC5fcGF0Y2hWYWx1ZSA9IGdyb3VwLnBhdGNoVmFsdWU7XG4gICAgZ3JvdXAuX3NldFZhbHVlID0gZ3JvdXAuc2V0VmFsdWU7XG5cbiAgICBncm91cC5wYXRjaFZhbHVlID0gdGhpcy5wYXRjaFZhbHVlLmJpbmQodGhpcyk7XG4gICAgZ3JvdXAuc2V0VmFsdWUgPSB0aGlzLnNldFZhbHVlLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gZ3JvdXAgYXMgdW5rbm93biBhcyBGb3JtR3JvdXA8UXVlcnlGb3JtR3JvdXBDb250cm9sczxUPj47XG4gIH1cblxuICBwcml2YXRlIF9leHRyYWN0RGVmYXVsdFZhbHVlcygpIHtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBmaWVsZF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fZmllbGRzKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZC5kYXRhLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gZmllbGQuZGF0YS5kZWZhdWx0VmFsdWUgOiBmaWVsZC5jb250cm9sLnZhbHVlO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlc1trZXldID0gYCR7RVRfQVJSX1BSRUZJWH0ke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZXM7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jVmlhVXJsUXVlcnlQYXJhbXModmFsdWVzOiBRdWVyeUZvcm1WYWx1ZTxUPiwgcmVwbGFjZVVybD86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgLi4uY2xvbmUodGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMpIH07XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZXMpKSB7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtS2V5ID0gdGhpcy5fdHJhbnNmb3JtS2V5VG9RdWVyeVBhcmFtKGtleSk7XG4gICAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2ZpZWxkc1trZXldO1xuXG4gICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0RlZmF1bHQgPSB0aGlzLl9pc0RlZmF1bHRWYWx1ZShrZXksIHZhbHVlKTtcbiAgICAgIGNvbnN0IHdyaXRlRGVmYXVsdFRvVXJsID0gZmllbGQuZGF0YS5hcHBlbmREZWZhdWx0VmFsdWVUb1VybCA9PT0gdHJ1ZTtcbiAgICAgIGNvbnN0IHdyaXRlVG9VcmwgPSBmaWVsZC5kYXRhLmFwcGVuZFRvVXJsICE9PSBmYWxzZTtcblxuICAgICAgaWYgKCF3cml0ZVRvVXJsIHx8IChpc0RlZmF1bHQgJiYgIXdyaXRlRGVmYXVsdFRvVXJsKSkge1xuICAgICAgICBxdWVyeVBhcmFtc1txdWVyeVBhcmFtS2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zW3F1ZXJ5UGFyYW1LZXldID0gZmllbGQuZGF0YS52YWx1ZVRvUXVlcnlQYXJhbVRyYW5zZm9ybUZuXG4gICAgICAgICAgPyBmaWVsZC5kYXRhLnZhbHVlVG9RdWVyeVBhcmFtVHJhbnNmb3JtRm4/Lih2YWx1ZSlcbiAgICAgICAgICA6IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcmVwbGFjZVVybCxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlRm9ybUNoYW5nZShmb3JjZU92ZXJ3cml0ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgY3VycmVudFZhbCA9IGNsb25lKHRoaXMuX2N1cnJlbnRGb3JtVmFsdWUkLnZhbHVlKTtcbiAgICBjb25zdCBuZXdWYWwgPSBjbG9uZSh0aGlzLl9mb3JtVmFsdWUpO1xuXG4gICAgaWYgKGVxdWFsKGN1cnJlbnRWYWwsIG5ld1ZhbCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZm9yY2VPdmVyd3JpdGUpIHtcbiAgICAgIHRoaXMuX2xhc3RGb3JtVmFsdWUkLm5leHQobmV3VmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGFzdEZvcm1WYWx1ZSQubmV4dChjdXJyZW50VmFsKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50Rm9ybVZhbHVlJC5uZXh0KG5ld1ZhbCk7XG4gIH1cblxuICBwcml2YXRlIF9jbGVhbnVwKCkge1xuICAgIGlmICghdGhpcy5faXNPYnNlcnZpbmcpIHJldHVybjtcblxuICAgIHRoaXMuX2lzT2JzZXJ2aW5nID0gZmFsc2U7XG5cbiAgICBjb25zdCBxdWVyeVBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX2ZpZWxkcyk7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSBxdWVyeVBhcmFtS2V5cy5yZWR1Y2UoXG4gICAgICAoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgYWNjW3RoaXMuX3RyYW5zZm9ybUtleVRvUXVlcnlQYXJhbShrZXkpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICApO1xuICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=","export * from './lib/auth';\nexport * from './lib/class-validator';\nexport * from './lib/devtools/components/query-devtools';\nexport * from './lib/devtools/pipes';\nexport * from './lib/devtools/utils';\nexport * from './lib/directives';\nexport * from './lib/entity';\nexport * as ExperimentalQuery from './lib/experimental';\nexport * from './lib/experimental/pipes';\nexport * from './lib/gql';\nexport * from './lib/infinite-query';\nexport * from './lib/logger';\nexport * from './lib/query';\nexport * from './lib/query-client';\nexport * from './lib/query-creator';\nexport * from './lib/query-form';\nexport * from './lib/query-store';\nexport * from './lib/request';\nexport * from './lib/symfony';\nexport * from './lib/utils';\n// Burst cache\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxjQUFjLENBQUM7QUFDN0IsT0FBTyxLQUFLLGlCQUFpQixNQUFNLG9CQUFvQixDQUFDO0FBQ3hELGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsYUFBYSxDQUFDO0FBRTVCLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NsYXNzLXZhbGlkYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXZ0b29scy9jb21wb25lbnRzL3F1ZXJ5LWRldnRvb2xzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RldnRvb2xzL3BpcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RldnRvb2xzL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZW50aXR5JztcbmV4cG9ydCAqIGFzIEV4cGVyaW1lbnRhbFF1ZXJ5IGZyb20gJy4vbGliL2V4cGVyaW1lbnRhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9leHBlcmltZW50YWwvcGlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ3FsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2luZmluaXRlLXF1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xvZ2dlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9xdWVyeS1jbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcXVlcnktY3JlYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9xdWVyeS1mb3JtJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3F1ZXJ5LXN0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JlcXVlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3ltZm9ueSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscyc7XG5cbi8vIEJ1cnN0IGNhY2hlXG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRobGV0ZS1xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2V0aGxldGUtcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":["isNaN","extractExpiresInSeconds","shouldRetryRequest","syncSignal","buildQueryCacheKey","shouldCacheQuery","deleteCookie","coreDeleteCookie","ɵEffectScheduler","i1"],"mappings":"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"}