@ethlete/query 5.44.0 → 5.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
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-features.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-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, ...(ngDevMode ? [{ debugName: \"lastResult\" }] : []));\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(), ...(ngDevMode ? [{ debugName: \"rwSignal\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"dataSignal\" }] : []));\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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QUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUYsT0FBTyxVQUFpQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLE1BQVM7SUFFVCxNQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVuQyxPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDbkIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFFbEIsT0FBTyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsTUFBUztJQUVULE1BQU0sQ0FBQyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRW5DLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNuQixNQUFNLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUVsQixPQUFPLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDcmVhdGVDb21wdXRlZE9wdGlvbnMsXG4gIEluamVjdG9yLFxuICBTaWduYWwsXG4gIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBydW5JbkluamVjdGlvbkNvbnRleHQsXG4gIHNpZ25hbCxcbiAgdW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRvT2JzZXJ2YWJsZU9wdGlvbnMsIFRvU2lnbmFsT3B0aW9ucywgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGNvbXB1dGVkVGlsbFRydXRoeSwgY3JlYXRlRGVzdHJveSwgc3luY1NpZ25hbCB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaWJhYmxlLCBvZiwgcGFpcndpc2UsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQW55TGVnYWN5UXVlcnkgfSBmcm9tICcuLi9leHBlcmltZW50YWwnO1xuaW1wb3J0IHtcbiAgQW55UXVlcnksXG4gIEFueVF1ZXJ5Q29sbGVjdGlvbixcbiAgUXVlcnlPZixcbiAgUXVlcnlTdGF0ZSxcbiAgUXVlcnlTdGF0ZVR5cGUsXG4gIGV4dHJhY3RRdWVyeSxcbiAgZmlsdGVyUXVlcnlTdGF0ZXMsXG4gIGlzUXVlcnksXG4gIGlzUXVlcnlTdGF0ZUZhaWx1cmUsXG4gIGlzUXVlcnlTdGF0ZUxvYWRpbmcsXG4gIGlzUXVlcnlTdGF0ZVN1Y2Nlc3MsXG59IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IFF1ZXJ5RGF0YU9mIH0gZnJvbSAnLi4vcXVlcnktY3JlYXRvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlDb250YWluZXJDb25maWcge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcHJldmlvdXMgcXVlcnkgd2lsbCBiZSBhYm9ydGVkIHdoZW4gYSBuZXcgcXVlcnkgaXMgcHVzaGVkIGludG8gdGhlIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgdHJ1ZSAvLyBPbmx5IGlmIHRoZSByZXF1ZXN0IGNhbiBiZSBjYWNoZWQgKEdFVCwgT1BUSU9OUywgSEVBRCBhbmQgR1FMX1FVRVJZKS4gT3RoZXJ3aXNlIGZhbHNlLlxuICAgKi9cbiAgYWJvcnRQcmV2aW91cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHF1ZXJ5IHdpbGwgYmUgYWJvcnRlZCB3aGVuIHRoZSBjb250YWluZXIgaXMgZGVzdHJveWVkLlxuICAgKiBAZGVmYXVsdCB0cnVlIC8vIE9ubHkgaWYgdGhlIHJlcXVlc3QgY2FuIGJlIGNhY2hlZCAoR0VULCBPUFRJT05TLCBIRUFEIGFuZCBHUUxfUVVFUlkpLiBPdGhlcndpc2UgZmFsc2UuXG4gICAqL1xuICBhYm9ydE9uRGVzdHJveT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHByZXZpb3VzIHBvbGxpbmcgd2lsbCBiZSBzdG9wcGVkIHdoZW4gYSBuZXcgcXVlcnkgaXMgcHVzaGVkIGludG8gdGhlIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgdHJ1ZSAvLyBPbmx5IGlmIHRoZSBxdWVyeSBoYXMgbm8gb3RoZXIgZGVwZW5kZW50cyBhbmQgdGhlIHJlcXVlc3QgY2FuIGJlIGNhY2hlZCAoR0VULCBPUFRJT05TLCBIRUFEIGFuZCBHUUxfUVVFUlkpLiBPdGhlcndpc2UgZmFsc2UuXG4gICAqL1xuICBzdG9wUHJldmlvdXNQb2xsaW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUZpbHRlckNvbmZpZyB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByZXNwb25zZSB3aWxsIGJlIGNhY2hlZCB1bnRpbCB0aGUgbmV4dCByZXNwb25zZSBpcyByZWNlaXZlZCBvciB0aGUgcXVlcnkgZmFpbHMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjYWNoZVJlc3BvbnNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGFkZFF1ZXJ5Q29udGFpbmVySGFuZGxpbmcgPSAoXG4gIG9iczogT2JzZXJ2YWJsZTxBbnlRdWVyeSB8IEFueVF1ZXJ5W10gfCBBbnlMZWdhY3lRdWVyeSB8IEFueUxlZ2FjeVF1ZXJ5W10gfCBudWxsPixcbiAgdmFsdWVGbjogKCkgPT4gQW55UXVlcnkgfCBBbnlRdWVyeVtdIHwgQW55TGVnYWN5UXVlcnkgfCBBbnlMZWdhY3lRdWVyeVtdIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgY29uZmlnPzogUXVlcnlDb250YWluZXJDb25maWcsXG4pID0+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, ...(ngDevMode ? [{ debugName: \"_signal\" }] : []));\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY3JlYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1jcmVhdG9yL3F1ZXJ5LWNyZWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzFELE9BQU8sRUFBZSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBWXBGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUF3Qix5QkFBeUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUczRSxNQUFNLE9BQU8sWUFBWTtJQVF2QixZQUNVLFlBRXVELEVBQ3ZELE9BQW9CLEVBQ3BCLE1BQWtCO1FBSmxCLGlCQUFZLEdBQVosWUFBWSxDQUUyQztRQUN2RCxZQUFPLEdBQVAsT0FBTyxDQUFhO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQVk7UUFHNUIsNkRBQTZEO1FBQzdELGFBQWE7UUFDYixZQUFPLEdBQWdFLENBQ3JFLElBQWdFLEVBQ2hFLEVBQUU7WUFDRixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUM7Z0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFpQjtnQkFDMUMsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVO2dCQUM1QixXQUFXLEVBQUUsdUJBQXVCLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDL0YsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFdBQVc7YUFDM0QsQ0FBVSxDQUFDO1lBRVosTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEtBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUV0RyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDO2dCQUNoRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBcUQsUUFBUSxDQUFDLENBQUM7Z0JBRXBHLElBQUksYUFBYSxFQUFFLENBQUM7b0JBQ2xCLE9BQU8sYUFBYSxDQUFDO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUNyQixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxZQUFZLEVBQ2pCLEtBQUssRUFDTCxJQUFJLElBQUssRUFBZ0IsRUFDekIsUUFBUSxDQUNULENBQUM7WUFFRixJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDO2dCQUNoRixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUVELElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFekMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUM7UUFFRixrQkFBYSxHQUFHLENBQUMsWUFBcUQsRUFBRSxNQUE2QixFQUFFLEVBQUU7WUFDdkcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRTdDLE1BQU0sT0FBTyxHQUFHLElBQUksZUFBZSxDQUF5QyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUM7WUFFbEcseUJBQXlCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUVyRSxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUM7UUFFRixpQkFBWSxHQUFHLENBQUMsWUFBcUQsRUFBRSxNQUE2QixFQUFFLEVBQUU7WUFDdEcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRTVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBeUMsWUFBWSxJQUFJLElBQUksbURBQUMsQ0FBQztZQUVyRix5QkFBeUIsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFMUUsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBRUY7O1dBRUc7UUFDSCxvQkFBZSxHQUFHLENBQUMsWUFBcUQsRUFBRSxFQUFFLENBQzFFLElBQUksZUFBZSxDQUF5QyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUM7SUFsRWpGLENBQUM7Q0FtRUwiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFbnRpdHlTdG9yZSB9IGZyb20gJy4uL2VudGl0eSc7XG5pbXBvcnQgeyBRdWVyeSwgY29tcHV0ZVF1ZXJ5UXVlcnlQYXJhbXMgfSBmcm9tICcuLi9xdWVyeSc7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgYnVpbGRRdWVyeUNhY2hlS2V5LCBzaG91bGRDYWNoZVF1ZXJ5IH0gZnJvbSAnLi4vcXVlcnktY2xpZW50JztcbmltcG9ydCB7IFF1ZXJ5U3RvcmUgfSBmcm9tICcuLi9xdWVyeS1zdG9yZSc7XG5pbXBvcnQge1xuICBBbnlSb3V0ZSxcbiAgQmFzZUFyZ3VtZW50cyxcbiAgR3FsUXVlcnlDb25maWcsXG4gIFJlc3RRdWVyeUNvbmZpZyxcbiAgUm91dGVUeXBlLFxuICBXaXRoQ29uZmlnLFxuICBXaXRoSGVhZGVycyxcbiAgV2l0aE1vY2ssXG59IGZyb20gJy4uL3F1ZXJ5L3F1ZXJ5LnR5cGVzJztcbmltcG9ydCB7IGJ1aWxkUm91dGUgfSBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCB7IFF1ZXJ5Q29udGFpbmVyQ29uZmlnLCBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgUXVlcnlQcmVwYXJlRm4gfSBmcm9tICcuL3F1ZXJ5LWNyZWF0b3IudHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlDcmVhdG9yPFxuICBBcmd1bWVudHMgZXh0ZW5kcyBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkLFxuICBSZXNwb25zZSxcbiAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPixcbiAgU3RvcmUgZXh0ZW5kcyBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgRGF0YSxcbiAgSWQsXG4+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfcXVlcnlDb25maWc6XG4gICAgICB8IFJlc3RRdWVyeUNvbmZpZzxSb3V0ZSwgUmVzcG9uc2UsIEFyZ3VtZW50cywgU3RvcmUsIERhdGEsIElkPlxuICAgICAgfCBHcWxRdWVyeUNvbmZpZzxSb3V0ZSwgUmVzcG9uc2UsIEFyZ3VtZW50cywgU3RvcmUsIERhdGEsIElkPixcbiAgICBwcml2YXRlIF9jbGllbnQ6IFF1ZXJ5Q2xpZW50LFxuICAgIHByaXZhdGUgX3N0b3JlOiBRdWVyeVN0b3JlLFxuICApIHt9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIHByZXBhcmU6IFF1ZXJ5UHJlcGFyZUZuPEFyZ3VtZW50cywgUmVzcG9uc2UsIFJvdXRlLCBTdG9yZSwgRGF0YSwgSWQ+ID0gKFxuICAgIGFyZ3M/OiBBcmd1bWVudHMgJiBXaXRoSGVhZGVycyAmIFdpdGhDb25maWcgJiBXaXRoTW9jazxSZXNwb25zZT4sXG4gICkgPT4ge1xuICAgIGNvbnN0IHJvdXRlID0gYnVpbGRSb3V0ZSh7XG4gICAgICBiYXNlOiB0aGlzLl9jbGllbnQuY29uZmlnLmJhc2VSb3V0ZSxcbiAgICAgIHJvdXRlOiB0aGlzLl9xdWVyeUNvbmZpZy5yb3V0ZSBhcyBBbnlSb3V0ZSxcbiAgICAgIHBhdGhQYXJhbXM6IGFyZ3M/LnBhdGhQYXJhbXMsXG4gICAgICBxdWVyeVBhcmFtczogY29tcHV0ZVF1ZXJ5UXVlcnlQYXJhbXMoeyBjb25maWc6IHRoaXMuX3F1ZXJ5Q29uZmlnLCBjbGllbnQ6IHRoaXMuX2NsaWVudCwgYXJncyB9KSxcbiAgICAgIHF1ZXJ5UGFyYW1Db25maWc6IHRoaXMuX2NsaWVudC5jb25maWcucmVxdWVzdD8ucXVlcnlQYXJhbXMsXG4gICAgfSkgYXMgUm91dGU7XG5cbiAgICBjb25zdCBjYWNoZUtleSA9IChhcmdzPy5jb25maWc/LnF1ZXJ5U3RvcmVDYWNoZUtleSA/PyAnJykgKyBidWlsZFF1ZXJ5Q2FjaGVLZXkocm91dGUgYXMgc3RyaW5nLCBhcmdzKTtcblxuICAgIGlmIChzaG91bGRDYWNoZVF1ZXJ5KHRoaXMuX3F1ZXJ5Q29uZmlnLm1ldGhvZCkgJiYgIWFyZ3M/LmNvbmZpZz8uc2tpcFF1ZXJ5U3RvcmUpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nUXVlcnkgPSB0aGlzLl9zdG9yZS5nZXQ8UXVlcnk8UmVzcG9uc2UsIEFyZ3VtZW50cywgUm91dGUsIFN0b3JlLCBEYXRhLCBJZD4+KGNhY2hlS2V5KTtcblxuICAgICAgaWYgKGV4aXN0aW5nUXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nUXVlcnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnkgPSBuZXcgUXVlcnk8UmVzcG9uc2UsIEFyZ3VtZW50cywgUm91dGUsIFN0b3JlLCBEYXRhLCBJZD4oXG4gICAgICB0aGlzLl9jbGllbnQsXG4gICAgICB0aGlzLl9xdWVyeUNvbmZpZyxcbiAgICAgIHJvdXRlLFxuICAgICAgYXJncyA/PyAoe30gYXMgQXJndW1lbnRzKSxcbiAgICAgIGNhY2hlS2V5LFxuICAgICk7XG5cbiAgICBpZiAoc2hvdWxkQ2FjaGVRdWVyeSh0aGlzLl9xdWVyeUNvbmZpZy5tZXRob2QpICYmICFhcmdzPy5jb25maWc/LnNraXBRdWVyeVN0b3JlKSB7XG4gICAgICB0aGlzLl9zdG9yZS5hZGQoY2FjaGVLZXksIHF1ZXJ5KTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdG9yZS5fZGlzcGF0Y2hRdWVyeUNyZWF0ZWQocXVlcnkpO1xuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9O1xuXG4gIGNyZWF0ZVN1YmplY3QgPSAoaW5pdGlhbFZhbHVlPzogUmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5wcmVwYXJlPiB8IG51bGwsIGNvbmZpZz86IFF1ZXJ5Q29udGFpbmVyQ29uZmlnKSA9PiB7XG4gICAgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KHRoaXMuY3JlYXRlU3ViamVjdCk7XG5cbiAgICBjb25zdCBzdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLnByZXBhcmU+IHwgbnVsbD4oaW5pdGlhbFZhbHVlID8/IG51bGwpO1xuXG4gICAgYWRkUXVlcnlDb250YWluZXJIYW5kbGluZyhzdWJqZWN0LCAoKSA9PiBzdWJqZWN0LmdldFZhbHVlKCksIGNvbmZpZyk7XG5cbiAgICByZXR1cm4gc3ViamVjdDtcbiAgfTtcblxuICBjcmVhdGVTaWduYWwgPSAoaW5pdGlhbFZhbHVlPzogUmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5wcmVwYXJlPiB8IG51bGwsIGNvbmZpZz86IFF1ZXJ5Q29udGFpbmVyQ29uZmlnKSA9PiB7XG4gICAgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KHRoaXMuY3JlYXRlU2lnbmFsKTtcblxuICAgIGNvbnN0IF9zaWduYWwgPSBzaWduYWw8UmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5wcmVwYXJlPiB8IG51bGw+KGluaXRpYWxWYWx1ZSA/PyBudWxsKTtcblxuICAgIGFkZFF1ZXJ5Q29udGFpbmVySGFuZGxpbmcodG9PYnNlcnZhYmxlKF9zaWduYWwpLCAoKSA9PiBfc2lnbmFsKCksIGNvbmZpZyk7XG5cbiAgICByZXR1cm4gX3NpZ25hbDtcbiAgfTtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBteVF1ZXJ5LmNyZWF0ZVN1YmplY3QoKWAgb3IgYG15UXVlcnkuY3JlYXRlU2lnbmFsKClgIGluc3RlYWQuIFdpbGwgYmUgcmVtb3ZlZCBpbiB2Ni5cbiAgICovXG4gIGJlaGF2aW9yU3ViamVjdCA9IChpbml0aWFsVmFsdWU/OiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLnByZXBhcmU+IHwgbnVsbCkgPT5cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PFJldHVyblR5cGU8dHlwZW9mIHRoaXMucHJlcGFyZT4gfCBudWxsPihpbml0aWFsVmFsdWUgPz8gbnVsbCk7XG59XG4iXX0=","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnktc3RvcmUvcXVlcnktc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHbEUsTUFBTSxPQUFPLFVBQVU7SUFnQnJCLFlBQ1UsT0FLUDtRQUxPLFlBQU8sR0FBUCxPQUFPLENBS2Q7UUFyQkg7O1dBRUc7UUFDTSxXQUFNLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFFdEMsc0JBQWlCLEdBQWtCLElBQUksQ0FBQztRQUN4Qyx5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDN0IsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWhDLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUN0QyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFZLENBQUM7UUFFeEMsaUJBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2pELGtCQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQVUxRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsR0FBRyxDQUFDLEVBQVUsRUFBRSxLQUFlO1FBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUzQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUU3QixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENB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QUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsTUFBYztRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSw2QkFBNkI7WUFBRSxPQUFPO1FBRXpELE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxNQUFNLEVBQUUsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QsIGZyb21FdmVudCwgdGFrZSwgdGFrZVVudGlsLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQW55UXVlcnkgfSBmcm9tICcuLi9xdWVyeSc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeVN0b3JlIHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVhZG9ubHkgX3N0b3JlID0gbmV3IE1hcDxzdHJpbmcsIEFueVF1ZXJ5PigpO1xuXG4gIHByaXZhdGUgX2dhcmJhZ2VDb2xsZWN0b3I6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9pc0luTG93UmVzb3VyY2VNb2RlID0gZmFsc2U7XG4gIHByaXZhdGUgX2xhc3RCbHVyVGltZXN0YW1wID0gRGF0ZS5ub3coKTtcblxuICBwcml2YXRlIF9zdG9yZUNoYW5nZSQgPSBuZXcgU3ViamVjdDxzdHJpbmc+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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL3F1ZXJ5LWNsaWVudC9xdWVyeS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVd2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTVDLE1BQU0sT0FBTyxXQUFXO0lBTXRCLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUM7SUFDeEcsQ0FBQztJQUNELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDO0lBQ2hILENBQUM7SUFHRCxZQUFvQixhQUFnQztRQUFoQyxrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7UUFGbkMsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBc0IsSUFBSSxDQUFDLENBQUM7UUFXakYsUUFBRyxHQUFHLENBUUosV0FBa0YsRUFDbEYsRUFBRSxDQUNGLElBQUksQ0FBQyxLQUFLLENBQThDO1lBQ3RELEdBQUcsV0FBVztZQUNkLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQyxDQUFDO1FBRUwsU0FBSSxHQUFHLENBUUwsV0FBa0YsRUFDbEYsRUFBRSxDQUNGLElBQUksQ0FBQyxLQUFLLENBQThDO1lBQ3RELEdBQUcsV0FBVztZQUNkLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQyxDQUFDO1FBRUwsUUFBRyxHQUFHLENBUUosV0FBa0YsRUFDbEYsRUFBRSxDQUNGLElBQUksQ0FBQyxLQUFLLENBQThDO1lBQ3RELEdBQUcsV0FBVztZQUNkLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQyxDQUFDO1FBRUwsVUFBSyxHQUFHLENBUU4sV0FBa0YsRUFDbEYsRUFBRSxDQUNGLElBQUksQ0FBQyxLQUFLLENBQThDO1lBQ3RELEdBQUcsV0FBVztZQUNkLE1BQU0sRUFBRSxPQUFPO1NBQ2hCLENBQUMsQ0FBQztRQUVMLFdBQU0sR0FBRyxDQVFQLFdBQWtGLEVBQ2xGLEVBQUUsQ0FDRixJQUFJLENBQUMsS0FBSyxDQUE4QztZQUN0RCxHQUFHLFdBQVc7WUFDZCxNQUFNLEVBQUUsUUFBUTtTQUNqQixDQUFDLENBQUM7UUFFTCxhQUFRLEdBQUcsQ0FRVCxXQUFxRixFQUNyRixFQUFFLENBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBOEM7WUFDdEQsR0FBRyxXQUFXO1lBQ2QsTUFBTSxFQUFFLFdBQVc7U0FDcEIsQ0FBQyxDQUFDO1FBRUwsY0FBUyxHQUFHLENBUVYsV0FBcUYsRUFDckYsRUFBRSxDQUNGLElBQUksQ0FBQyxLQUFLLENBQThDO1lBQ3RELEdBQUcsV0FBVztZQUNkLE1BQU0sRUFBRSxZQUFZO1NBQ3JCLENBQUMsQ0FBQztRQUVMLFVBQUssR0FBRyxDQVFOLFdBRStELEVBQy9ELEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBOEMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbkcsb0JBQWUsR0FBRyxDQUFDLFlBQTBCLEVBQUUsRUFBRTtZQUMvQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMvQixDQUFDO1lBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDO1FBRUYsc0JBQWlCLEdBQUcsQ0FBQyxNQUdwQixFQUFFLEVBQUU7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEdBQUc7b0JBQzNCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxJQUFJLFNBQVM7aUJBQ3JDLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDO1lBQ25FLENBQUM7WUFFRCxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3BGLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixzQkFBaUIsR0FBRyxHQUFHLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUM7UUFFRixxQkFBZ0IsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QyxDQUFDLENBQUM7UUE5SkEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQztZQUMzQixtQkFBbUIsRUFBRSxhQUFhLENBQUMsT0FBTyxFQUFFLGlCQUFpQjtZQUM3RCw2QkFBNkIsRUFBRSxhQUFhLENBQUMsT0FBTyxFQUFFLDBCQUEwQjtZQUNoRiwrQkFBK0IsRUFBRSxhQUFhLENBQUMsT0FBTyxFQUFFLCtCQUErQixJQUFJLElBQUk7WUFDL0Ysa0JBQWtCLEVBQUUsYUFBYSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsSUFBSSxJQUFJO1NBQ3RFLENBQUMsQ0FBQztJQUNMLENBQUM7Q0F5SkYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEF1dGhQcm92aWRlciB9IGZyb20gJy4uL2F1dGgnO1xuaW1wb3J0IHsgRW50aXR5U3RvcmUgfSBmcm9tICcuLi9lbnRpdHknO1xuaW1wb3J0IHtcbiAgQmFzZUFyZ3VtZW50cyxcbiAgR3FsUXVlcnlDb25maWcsXG4gIEdxbFF1ZXJ5Q29uZmlnV2l0aG91dE1ldGhvZCxcbiAgUXVlcnlDb25maWdXaXRob3V0TWV0aG9kLFxuICBSZXN0UXVlcnlDb25maWcsXG4gIFJvdXRlVHlwZSxcbn0gZnJvbSAnLi4vcXVlcnknO1xuaW1wb3J0IHsgUXVlcnlDcmVhdG9yIH0gZnJvbSAnLi4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBRdWVyeVN0b3JlIH0gZnJvbSAnLi4vcXVlcnktc3RvcmUnO1xuaW1wb3J0IHsgUmVxdWVzdEhlYWRlcnMsIFJlcXVlc3RIZWFkZXJzTWV0aG9kTWFwIH0gZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQgeyBRdWVyeUNsaWVudENvbmZpZyB9IGZyb20gJy4vcXVlcnktY2xpZW50LnR5cGVzJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5Q2xpZW50IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVhZG9ubHkgX3N0b3JlOiBRdWVyeVN0b3JlO1xuXG4gIGdldCBjb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudENvbmZpZztcbiAgfVxuXG4gIGdldCBhdXRoUHJvdmlkZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dGhQcm92aWRlciQuZ2V0VmFsdWUoKSA/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';\n// codes 0-999\nexport const QueryRuntimeErrorCode = {\n // Query\n QUERY_FEATURE_USED_MULTIPLE_TIMES: 0,\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 // 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 // Query Repository\n UNCACHEABLE_REQUEST_HAS_CACHE_KEY_PARAM: 300,\n UNCACHEABLE_REQUEST_HAS_ALLOW_CACHE_PARAM: 301,\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 // 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};\nexport const queryFeatureUsedMultipleTimes = (type) => {\n return new RuntimeError(QueryRuntimeErrorCode.QUERY_FEATURE_USED_MULTIPLE_TIMES, `The query feature \"${type}()\" was used multiple times.`);\n};\nexport const withArgsQueryFeatureMissingButRouteIsFunction = () => {\n return new RuntimeError(QueryRuntimeErrorCode.WITH_ARGS_QUERY_FEATURE_MISSING_BUT_ROUTE_IS_FUNCTION, `This queries route is a function, but a \"withArgs()\" feature is missing.`);\n};\nexport const withPollingUsedOnUnsupportedHttpMethod = (method) => {\n return new RuntimeError(QueryRuntimeErrorCode.WITH_POLLING_USED_ON_UNSUPPORTED_HTTP_METHOD, `This is a \"${method}\" request, \"withPolling()\" is only supported for GET, HEAD, OPTIONS requests and GQL queries.`);\n};\nexport const withAutoRefreshUsedOnUnsupportedHttpMethod = (method) => {\n return new RuntimeError(QueryRuntimeErrorCode.WITH_AUTO_REFRESH_USED_ON_UNSUPPORTED_HTTP_METHOD, `This is a \"${method}\" request, \"withAutoRefresh()\" is only supported for GET, HEAD, OPTIONS requests and GQL queries.`);\n};\nexport const withAutoRefreshUsedInManualQuery = () => {\n return new RuntimeError(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(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(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(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(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(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(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(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(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(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(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(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(QueryRuntimeErrorCode.UNABLE_TO_DECRYPT_BEARER_TOKEN, `The bearer token could not be decrypted: ${token}`);\n};\nexport const bearerExpiresInPropertyNotNumber = (expiresIn) => {\n return new RuntimeError(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(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(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(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(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(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(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(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(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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9odHRwL3F1ZXJ5LWVycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzdDLGNBQWM7QUFDZCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRztJQUNuQyxRQUFRO0lBQ1IsaUNBQWlDLEVBQUUsQ0FBQztJQUVwQyxpQkFBaUI7SUFDakIscURBQXFELEVBQUUsR0FBRztJQUMxRCw0Q0FBNEMsRUFBRSxHQUFHO0lBQ2pELGlEQUFpRCxFQUFFLEdBQUc7SUFDdEQsc0NBQXNDLEVBQUUsR0FBRztJQUMzQyxrRUFBa0UsRUFBRSxHQUFHO0lBRXZFLGdCQUFnQjtJQUNoQixzQ0FBc0MsRUFBRSxHQUFHO0lBQzNDLDBDQUEwQyxFQUFFLEdBQUc7SUFDL0MsMkNBQTJDLEVBQUUsR0FBRztJQUNoRCwyQkFBMkIsRUFBRSxHQUFHO0lBQ2hDLHNDQUFzQyxFQUFFLEdBQUc7SUFDM0MsbUNBQW1DLEVBQUUsR0FBRztJQUN4QyxpQ0FBaUMsRUFBRSxHQUFHO0lBQ3RDLGdEQUFnRCxFQUFFLEdBQUc7SUFDckQsaUVBQWlFLEVBQUUsR0FBRztJQUN0RSxrRUFBa0UsRUFBRSxHQUFHO0lBQ3ZFLDhCQUE4QixFQUFFLEdBQUc7SUFDbkMscUNBQXFDLEVBQUUsR0FBRztJQUUxQyxtQkFBbUI7SUFDbkIsdUNBQXVDLEVBQUUsR0FBRztJQUM1Qyx5Q0FBeUMsRUFBRSxHQUFHO0lBRTlDLG9CQUFvQjtJQUNwQiw4Q0FBOEMsRUFBRSxHQUFHO0lBQ25ELHdEQUF3RCxFQUFFLEdBQUc7SUFDN0QsZ0VBQWdFLEVBQUUsR0FBRztJQUVyRSxjQUFjO0lBQ2QsMEJBQTBCLEVBQUUsR0FBRztJQUMvQixxQ0FBcUMsRUFBRSxHQUFHO0lBQzFD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cG9ydCB7IFJ1bnRpbWVFcnJvciB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgUXVlcnlGZWF0dXJlVHlwZSB9IGZyb20gJy4vcXVlcnktZmVhdHVyZXMnO1xuXG4vLyBjb2RlcyAwLTk5OVxuZXhwb3J0IGNvbnN0IFF1ZXJ5UnVudGltZUVycm9yQ29kZSA9IHtcbiAgLy8gUXVlcnlcbiAgUVVFUllfRkVBVFVSRV9VU0VEX01VTFRJUExFX1RJTUVTOiAwLFxuXG4gIC8vIFF1ZXJ5IGZlYXR1cmVzXG4gIFdJVEhfQVJHU19RVUVSWV9GRUFUVVJFX01JU1NJTkdfQlVUX1JPVVRFX0lTX0ZVTkNUSU9OOiAxMDAsXG4gIFdJVEhfUE9MTElOR19VU0VEX09OX1VOU1VQUE9SVEVEX0hUVFBfTUVUSE9EOiAxMDEsXG4gIFdJVEhfQVVUT19SRUZSRVNIX1VTRURfT05fVU5TVVBQT1JURURfSFRUUF9NRVRIT0Q6IDEwMixcbiAgV0lUSF9BVVRPX1JFRlJFU0hfVVNFRF9JTl9NQU5VQUxfUVVFUlk6IDEwMyxcbiAgU0lMRU5DRV9NSVNTSU5HX1dJVEhfQVJHU19GRUFUVVJFX0VSUk9SX1VTRURfQlVUX1dJVEhfQVJHU19QUkVTRU5UOiAxMDQsXG5cbiAgLy8gQXV0aCBwcm92aWRlclxuICBDT09LSUVfTE9HSU5fVFJJRURfQlVUX0NPT0tJRV9ESVNBQkxFRDogMjAwLFxuICBFTkFCTEVfQ09PS0lFX0NBTExFRF9XSVRIT1VUX0NPT0tJRV9DT05GSUc6IDIwMSxcbiAgRElTQUJMRV9DT09LSUVfQ0FMTEVEX1dJVEhPVVRfQ09PS0lFX0NPTkZJRzogMjAyLFxuICBMT0dJTl9DQUxMRURfV0lUSE9VVF9DT05GSUc6IDIwMyxcbiAgTE9HSU5fV0lUSF9UT0tFTl9DQUxMRURfV0lUSE9VVF9DT05GSUc6IDIwNCxcbiAgUkVGUkVTSF9UT0tFTl9DQUxMRURfV0lUSE9VVF9DT05GSUc6IDIwNSxcbiAgU0VMRUNUX1JPTEVfQ0FMTEVEX1dJVEhPVVRfQ09ORklHOiAyMDYsXG4gIERFRkFVTFRfUkVTUE9OU0VfVFJBTlNGT1JNRVJfUkVTUE9OU0VfTk9UX09CSkVDVDogMjA3LFxuICBERUZBVUxUX1JFU1BPTlNFX1RSQU5TRk9STUVSX1JFU1BPTlNFX05PVF9DT05UQUlOSU5HX0FDQ0VTU19UT0tFTjogMjA4LFxuICBERUZBVUxUX1JFU1BPTlNFX1RSQU5TRk9STUVSX1JFU1BPTlNFX05PVF9DT05UQUlOSU5HX1JFRlJFU0hfVE9LRU46IDIwOSxcbiAgVU5BQkxFX1RPX0RFQ1JZUFRfQkVBUkVSX1RPS0VOOiAyMTAsXG4gIEJFQVJFUl9FWFBJUkVTX0lOX1BST1BFUlRZX05PVF9OVU1CRVI6IDIxMSxcblxuICAvLyBRdWVyeSBSZXBvc2l0b3J5XG4gIFVOQ0FDSEVBQkxFX1JFUVVFU1RfSEFTX0NBQ0hFX0tFWV9QQVJBTTogMzAwLFxuICBVTkNBQ0hFQUJMRV9SRVFVRVNUX0hBU19BTExPV19DQUNIRV9QQVJBTTogMzAxLFxuXG4gIC8vIFBhZ2VkIFF1ZXJ5IFN0YWNrXG4gIFBBR0VEX1FVRVJZX1NUQUNLX1BBR0VfQklHR0VSX1RIQU5fVE9UQUxfUEFHRVM6IDQwMCxcbiAgUEFHRURfUVVFUllfU1RBQ0tfTkVYVF9QQUdFX0NBTExFRF9XSVRIT1VUX1BSRVZJT1VTX1BBR0U6IDQwMSxcbiAgUEFHRURfUVVFUllfU1RBQ0tfUFJFVklPVVNfUEFHRV9DQUxMRURfQlVUX0FMUkVBRFlfQVRfRklSU1RfUEFHRTogNDAyLFxuXG4gIC8vIFF1ZXJ5IFN0YWNrXG4gIFFVRVJZX1NUQUNLX1dJVEhfQVJHU19VU0VEOiA1MDAsXG4gIFFVRVJZX1NUQUNLX1dJVEhfUkVTUE9OU0VfVVBEQVRFX1VTRUQ6IDUwMSxcbiAgUVVFUllfU1RBQ0tfVE9UQUxfUVVFUklFU19BTkRfRVhQRUNURURfUVVFUklFU19NSVNNQVRDSDogNTAyLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgUXVlcnlSdW50aW1lRXJyb3JDb2RlID0gKHR5cGVvZiBRdWVyeVJ1bnRpbWVFcnJvckNvZGUpW2tleW9mIHR5cGVvZiBRdWVyeVJ1bnRpbWVFcnJvckNvZGVdO1xuXG5leHBvcnQgY29uc3QgcXVlcnlGZWF0dXJlVXNlZE11bHRpcGxlVGltZXMgPSAodHlwZTogUXVlcnlGZWF0dXJlVHlwZSkgPT4ge1xuICByZXR1cm4gbmV3IFJ1bnRpbWVFcnJvcihcbiAgICBRdWVyeVJ1bnRpbWVFcnJvckNvZGUuUVVFUllfRkVBVFVSRV9VU0VEX01VTFRJUExFX1RJTUVTLFxuICAgIGBUaGUgcXVlcnkgZmVhdHVyZSBcIiR7dHlwZX0oKVwiIHdhcyB1c2VkIG11bHRpcGxlIHRpbWVzLmAsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgd2l0aEFyZ3NRdWVyeUZlYXR1cmVNaXNzaW5nQnV0Um91dGVJc0Z1bmN0aW9uID0gKCkgPT4ge1xuICByZXR1cm4gbmV3IFJ1bnRpbWVFcnJvcihcbiAgICBRdWVyeVJ1bnRpbWVFcnJvckNvZGUuV0lUSF9BUkdTX1FVRVJZX0ZFQVRVUkVfTUlTU0lOR19CVVRfUk9VVEVfSVNfRlVOQ1RJT04sXG4gICAgYFRoaXMgcXVlcmllcyByb3V0ZSBpcyBhIGZ1bmN0aW9uLCBidXQgYSBcIndpdGhBcmdzKClcIiBmZWF0dXJlIGlzIG1pc3NpbmcuYCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB3aXRoUG9sbGluZ1VzZWRPblVuc3VwcG9ydGVkSHR0cE1ldGhvZCA9IChtZXRob2Q6IHN0cmluZykgPT4ge1xuICByZXR1cm4gbmV3IFJ1bnRpbWVFcnJvcihcbiAgICBRdWVyeVJ1bnRpbWVFcnJvckNvZGUuV0lUSF9QT0xMSU5HX1VTRURfT05fVU5TVVBQT1JURURfSFRUUF9NRVRIT0QsXG4gICAgYFRoaXMgaXMgYSBcIiR7bWV0aG9kfVwiIHJlcXVlc3QsIFwid2l0aFBvbGxpbmcoKVwiIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBHRVQsIEhFQUQsIE9QVElPTlMgcmVxdWVzdHMgYW5kIEdRTCBxdWVyaWVzLmAsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgd2l0aEF1dG9SZWZyZXNoVXNlZE9uVW5zdXBwb3J0ZWRIdHRwTWV0aG9kID0gKG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBuZXcgUnVudGltZUVycm9yKFxuICAgIFF1ZXJ5UnVudGltZUVycm9yQ29kZS5XSVRIX0FVVE9fUkVGUkVTSF9VU0VEX09OX1VOU1VQUE9SVEVEX0hUVFBfTUVUSE9ELFxuICAgIGBUaGlzIGlzIGEgXCIke21ldGhvZH1cIiByZXF1ZXN0LCBcIndpdGhBdXRvUmVmcmVzaCgpXCIgaXMgb25seSBzdXBwb3J0ZWQgZm9yIEdFVCwgSEVBRCwgT1BUSU9OUyByZXF1ZXN0cyBhbmQgR1FMIHF1ZXJpZXMuYCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB3aXRoQXV0b1JlZnJlc2hVc2VkSW5NYW51YWxRdWVyeSA9ICgpID0+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, ...(ngDevMode ? [{ debugName: \"triggeredInternally\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"tokens\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"expiresIn\" }] : []));\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), ...(ngDevMode ? [{ debugName: \"cookieEnabled\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"latestExecutedQuery\" }] : []));\n const tokens = computed(() => {\n const query = latestExecutedQuery();\n return query?.query?.tokens()?.tokens ?? null;\n }, ...(ngDevMode ? [{ debugName: \"tokens\" }] : []));\n const bearerData = computed(() => {\n const accessToken = tokens()?.accessToken;\n if (!accessToken)\n return null;\n return (options.bearerDecryptFn?.(accessToken) ?? decryptBearer(accessToken));\n }, ...(ngDevMode ? [{ debugName: \"bearerData\" }] : []));\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, ...(ngDevMode ? [{ debugName: \"latestNonInternalQuery\" }] : []));\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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Q0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FPdkMsTUFBOEcsRUFDOUcsRUFBRTtJQUNGLE9BQU87UUFDTCxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDckIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQztLQUNuRCxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpc0Rldk1vZGUsIFNpZ25hbCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgZGVsZXRlQ29va2llIGFzIGNvcmVEZWxldGVDb29raWUsXG4gIGdldENvb2tpZSxcbiAgZ2V0RG9tYWluLFxuICBpbmplY3RSb3V0ZSxcbiAgaXNPYmplY3QsXG4gIHNldENvb2tpZSxcbn0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBvZiwgc3dpdGNoTWFwLCB0YXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWNyeXB0QmVhcmVyIH0gZnJvbSAnLi4vLi4vYXV0aCc7XG5pbXBvcnQgeyBRdWVyeUFyZ3MsIFF1ZXJ5U25hcHNob3QsIFJlcXVlc3RBcmdzIH0gZnJvbSAnLi4vaHR0cCc7XG5pbXBvcnQge1xuICBiZWFyZXJFeHBpcmVzSW5Qcm9wZXJ0eU5vdE51bWJlcixcbiAgY29va2llTG9naW5UcmllZEJ1dENvb2tpZURpc2FibGVkLFxuICBkZWZhdWx0UmVzcG9uc2VUcmFuc2Zvcm1lclJlc3BvbnNlTm90Q29udGFpbmluZ0FjY2Vzc1Rva2VuLFxuICBkZWZhdWx0UmVzcG9uc2VUcmFuc2Zvcm1lclJlc3BvbnNlTm90Q29udGFpbmluZ1JlZnJlc2hUb2tlbixcbiAgZGVmYXVsdFJlc3BvbnNlVHJhbnNmb3JtZXJSZXNwb25zZU5vdE9iamVjdCxcbiAgZGlzYWJsZUNvb2tpZUNhbGxlZFdpdGhvdXRDb29raWVDb25maWcsXG4gIGVuYWJsZUNvb2tpZUNhbGxlZFdpdGhvdXRDb29raWVDb25maWcsXG4gIGxvZ2luQ2FsbGVkV2l0aG91dENvbmZpZyxcbiAgbG9naW5XaXRoVG9rZW5DYWxsZWRXaXRob3V0Q29uZmlnLFxuICByZWZyZXNoVG9rZW5DYWxsZWRXaXRob3V0Q29uZmlnLFxuICBzZWxlY3RSb2xlQ2FsbGVkV2l0aG91dENvbmZpZyxcbiAgdW5hYmxlVG9EZWNyeXB0QmVhcmVyVG9rZW4sXG59IGZyb20gJy4uL2h0dHAvcXVlcnktZXJyb3JzJztcbmltcG9ydCB7XG4gIEJlYXJlckF1dGhQcm92aWRlckNvbmZpZyxcbiAgQmVhcmVyQXV0aFByb3ZpZGVyQ29va2llQ29uZmlnLFxuICBCZWFyZXJBdXRoUHJvdmlkZXJSb3V0ZUNvbmZpZyxcbiAgQmVhcmVyQXV0aFByb3ZpZGVyVG9rZW5zLFxufSBmcm9tICcuL2JlYXJlci1hdXRoLXByb3ZpZGVyLWNvbmZpZyc7XG5cbnR5cGUgSW50ZXJuYWxRdWVyeUV4ZWN1dGVPcHRpb25zID0ge1xuICB0cmlnZ2VyZWRJbnRlcm5hbGx5PzogYm9vbGVhbjtcbn07XG5cbnR5cGUgQXV0aFByb3ZpZGVyUXVlcnlXaXRoVHlwZTxcbiAgVExvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5SZWZyZXNoQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFNlbGVjdFJvbGVBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuPiA9XG4gIHwge1xuICAgICAgdHlwZTogJ2xvZ2luJztcbiAgICAgIHF1ZXJ5OiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBdXRoUHJvdmlkZXJRdWVyeTxUTG9naW5BcmdzPj4gfCBudWxsO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiAndG9rZW5Mb2dpbic7XG4gICAgICBxdWVyeTogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQXV0aFByb3ZpZGVyUXVlcnk8VFRva2VuTG9naW5BcmdzPj4gfCBudWxsO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiAndG9rZW5SZWZyZXNoJztcbiAgICAgIHF1ZXJ5OiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBdXRoUHJvdmlkZXJRdWVyeTxUVG9rZW5SZWZyZXNoQXJncz4+IHwgbnVsbDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogJ3NlbGVjdFJvbGUnO1xuICAgICAgcXVlcnk6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUF1dGhQcm92aWRlclF1ZXJ5PFRTZWxlY3RSb2xlQXJncz4+IHwgbnVsbDtcbiAgICB9O1xuXG50eXBlIFF1ZXJ5U25hcHNob3RXaXRoVHlwZTxcbiAgVExvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5SZWZyZXNoQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFNlbGVjdFJvbGVBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuPiA9XG4gIHwgKHtcbiAgICAgIHR5cGU6ICdsb2dpbic7XG4gICAgfSAmIFF1ZXJ5U25hcHNob3Q8VExvZ2luQXJncz4pXG4gIHwgKHtcbiAgICAgIHR5cGU6ICd0b2tlbkxvZ2luJztcbiAgICB9ICYgUXVlcnlTbmFwc2hvdDxUVG9rZW5Mb2dpbkFyZ3M+KVxuICB8ICh7XG4gICAgICB0eXBlOiAndG9rZW5SZWZyZXNoJztcbiAgICB9ICYgUXVlcnlTbmFwc2hvdDxUVG9rZW5SZWZyZXNoQXJncz4pXG4gIHwgKHtcbiAgICAgIHR5cGU6ICdzZWxlY3RSb2xlJztcbiAgICB9ICYgUXVlcnlTbmFwc2hvdDxUU2VsZWN0Um9sZUFyZ3M+KTtcblxuZXhwb3J0IHR5cGUgQmVhcmVyQXV0aFByb3ZpZGVyPFxuICBUTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5Mb2dpbkFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRUb2tlblJlZnJlc2hBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUU2VsZWN0Um9sZUFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRCZWFyZXJEYXRhLFxuPiA9IHtcbiAgLyoqXG4gICAqIExvZ3MgaW4gdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gYXJncy5cbiAgICovXG4gIGxvZ2luOiAoYXJnczogUmVxdWVzdEFyZ3M8VExvZ2luQXJncz4pID0+IFF1ZXJ5U25hcHNob3Q8VExvZ2luQXJncz47XG5cbiAgLyoqXG4gICAqIExvZ3MgaW4gdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gdG9rZW4uXG4gICAqL1xuICBsb2dpbldpdGhUb2tlbjogKGFyZ3M6IFJlcXVlc3RBcmdzPFRUb2tlbkxvZ2luQXJncz4pID0+IFF1ZXJ5U25hcHNob3Q8VFRva2VuTG9naW5BcmdzPjtcblxuICAvKipcbiAgICogUmVmcmVzaGVzIHRoZSB0b2tlbiB3aXRoIHRoZSBnaXZlbiByZWZyZXNoIHRva2VuLlxuICAgKi9cbiAgcmVmcmVzaFRva2VuOiAoYXJnczogUmVxdWVzdEFyZ3M8VFRva2VuUmVmcmVzaEFyZ3M+KSA9PiBRdWVyeVNuYXBzaG90PFRUb2tlblJlZnJlc2hBcmdzPjtcblxuICAvKipcbiAgICogU2VsZWN0cyB0aGUgcm9sZSBmb3IgdGhlIHVzZXIuXG4gICAqL1xuICBzZWxlY3RSb2xlOiAoYXJnczogUmVxdWVzdEFyZ3M8VFNlbGVjdFJvbGVBcmdzPikgPT4gUXVlcnlTbmFwc2hvdDxUU2VsZWN0Um9sZUFyZ3M+O1xuXG4gIC8qKlxuICAgKiBMb2dzIG91dCB0aGUgdXNlciBhbmQgcmVtb3ZlcyB0aGUgY29va2llLlxuICAgKi9cbiAgbG9nb3V0OiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIGNvb2tpZSB1c2FnZSBmb3IgdGhlIGF1dGggcHJvdmlkZXIuXG4gICAqL1xuICBlbmFibGVDb29raWU6ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIGNvb2tpZSB1c2FnZSBmb3IgdGhlIGF1dGggcHJvdmlkZXIgYW5kIHJlbW92ZXMgdGhlIGNvb2tpZS5cbiAgICovXG4gIGRpc2FibGVDb29raWU6ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgY29va2llIGlzIHByZXNlbnQuXG4gICAqL1xuICBpc0Nvb2tpZVByZXNlbnQ6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRyaWVzIHRvIGxvZ2luIHdpdGggdGhlIGdpdmVuIGNvb2tpZSBjb25maWcuXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGEgY29va2llIHdhcyBmb3VuZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICB0cnlMb2dpbldpdGhDb29raWU6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBsYXRlc3QgZXhlY3V0ZWQgcXVlcnkgdGhhdCB3YXMgbm90IHRyaWdnZXJlZCBpbnRlcm5hbGx5LlxuICAgKi9cbiAgbGF0ZXN0RXhlY3V0ZWRRdWVyeTogU2lnbmFsPFF1ZXJ5U25hcHNob3RXaXRoVHlwZTxcbiAgICBUTG9naW5BcmdzLFxuICAgIFRUb2tlbkxvZ2luQXJncyxcbiAgICBUVG9rZW5SZWZyZXNoQXJncyxcbiAgICBUU2VsZWN0Um9sZUFyZ3NcbiAgPiB8IG51bGw+O1xuXG4gIC8qKlxuICAgKiBBIHNpZ25hbCB0aGF0IGNvbnRhaW5zIHRoZSBjdXJyZW50IGFjY2VzcyBhbmQgcmVmcmVzaCB0b2tlbnMuXG4gICAqL1xuICB0b2tlbnM6IFNpZ25hbDxCZWFyZXJBdXRoUHJvdmlkZXJUb2tlbnMgfCBudWxsPjtcblxuICAvKipcbiAgICogVGhlIGJlYXJlciBkYXRhIHRoYXQgd2FzIGRlY3J5cHRlZCBmcm9tIHRoZSBhY2Nlc3MgdG9rZW4uXG4gICAqL1xuICBiZWFyZXJEYXRhOiBTaWduYWw8VEJlYXJlckRhdGEgfCBudWxsPjtcbn07XG5cbmNvbnN0IGRlZmF1bHRSZXNwb25zZVRyYW5zZm9ybWVyID0gPFQ+KHJlc3BvbnNlOiBUKSA9PiB7XG4gIGlmICghaXNPYmplY3QocmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgZGVmYXVsdFJlc3BvbnNlVHJhbnNmb3JtZXJSZXNwb25zZU5vdE9iamVjdCh0eXBlb2YgcmVzcG9uc2UpO1xuICB9XG5cbiAgaWYgKCEoJ2FjY2Vzc1Rva2VuJyBpbiByZXNwb25zZSkpIHtcbiAgICB0aHJvdyBkZWZhdWx0UmVzcG9uc2VUcmFuc2Zvcm1lclJlc3BvbnNlTm90Q29udGFpbmluZ0FjY2Vzc1Rva2VuKCk7XG4gIH1cblxuICBpZiAoISgncmVmcmVzaFRva2VuJyBpbiByZXNwb25zZSkpIHtcbiAgICB0aHJvdyBkZWZhdWx0UmVzcG9uc2VUcmFuc2Zvcm1lclJlc3BvbnNlTm90Q29udGFpbmluZ1JlZnJlc2hUb2tlbigpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlIGFzIHVua25vd24gYXMgQmVhcmVyQXV0aFByb3ZpZGVyVG9rZW5zO1xufTtcblxuY29uc3QgRklWRV9NSU5VVEVTID0gNSAqIDYwICogMTAwMDtcblxuY29uc3QgY3JlYXRlQXV0aFByb3ZpZGVyUXVlcnkgPSA8VCBleHRlbmRzIFF1ZXJ5QXJncz4oXG4gIGNvbmZpZzogQmVhcmVyQXV0aFByb3ZpZGVyUm91dGVDb25maWc8VD4sXG4gIGF1dGhQcm92aWRlckNvbmZpZzoge1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIHRva2VuIGV4cGlyZXMgd2hlbiB0aGUgcmVmcmVzaCBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuICAgICAqIEBkZWZhdWx0IDMwMDAwMCAvLyAoNSBtaW51dGVzKVxuICAgICAqL1xuICAgIHJlZnJlc2hCdWZmZXI/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZXhwaXJlcyBpbiBwcm9wZXJ0eSBuYW1lIGluc2lkZSB0aGUgand0IGJvZHlcbiAgICAgKiBAZGVmYXVsdCAnZXhwJ1xuICAgICAqL1xuICAgIGV4cGlyZXNJblByb3BlcnR5TmFtZT86IHN0cmluZztcbiAgfSxcbikgPT4ge1xuICBjb25zdCBxdWVyeSA9IGNvbmZpZy5xdWVyeUNyZWF0b3IoeyBvbmx5TWFudWFsRXhlY3V0aW9uOiB0cnVlIH0pO1xuXG4gIGNvbnN0IHRyaWdnZXJlZEludGVybmFsbHkgPSBzaWduYWwoZmFsc2UpO1xuXG4gIGNvbnN0IHRva2VucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCByZXMgPSBxdWVyeS5yZXNwb25zZSgpO1xuXG4gICAgaWYgKCFyZXMpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgdHJhbnNmb3JtZWQgPSBjb25maWcucmVzcG9uc2VUcmFuc2Zvcm1lcj8uKHJlcykgPz8gZGVmYXVsdFJlc3BvbnNlVHJhbnNmb3JtZXIocmVzKTtcblxuICAgIGNvbnN0IGJlYXJlclZhbHVlID0gZGVjcnlwdEJlYXJlcih0cmFuc2Zvcm1lZC5hY2Nlc3NUb2tlbik7XG5cbiAgICBpZiAoIWJlYXJlclZhbHVlKSB0aHJvdyB1bmFibGVUb0RlY3J5cHRCZWFyZXJUb2tlbih0cmFuc2Zvcm1lZC5hY2Nlc3NUb2tlbik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYmVhcmVyOiBiZWFyZXJWYWx1ZSxcbiAgICAgIHRva2VuczogdHJhbnNmb3JtZWQsXG4gICAgfTtcbiAgfSk7XG5cbiAgY29uc3QgZXhwaXJlc0luID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHJlcyA9IHRva2VucygpO1xuXG4gICAgaWYgKCFyZXMpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgZXhwaXJlc0luID0gcmVzLmJlYXJlclthdXRoUHJvdmlkZXJDb25maWcuZXhwaXJlc0luUHJvcGVydHlOYW1lID8/ICdleHAnXTtcbiAgICBjb25zdCByZWZyZXNoQnVmZmVyID0gYXV0aFByb3ZpZGVyQ29uZmlnLnJlZnJlc2hCdWZmZXIgPz8gRklWRV9NSU5VVEVTO1xuXG4gICAgaWYgKHR5cGVvZiBleHBpcmVzSW4gIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBiZWFyZXJFeHBpcmVzSW5Qcm9wZXJ0eU5vdE51bWJlcihleHBpcmVzSW4pO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IGR1bW15UmVtYWluaW5nVGltZSA9IChxdWVyeS5sYXN0VGltZUV4ZWN1dGVkQXQoKSA/PyAwKSArIDUwMDAgLSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBjb25zdCByZW1haW5pbmdUaW1lID0gbmV3IERhdGUoZXhwaXJlc0luICogMTAwMCkuZ2V0VGltZSgpIC0gcmVmcmVzaEJ1ZmZlciAtIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG4gICAgcmV0dXJuIHJlbWFpbmluZ1RpbWU7XG4gIH0pO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSAobmV3QXJnczogUmVxdWVzdEFyZ3M8VD4sIG9wdGlvbnM/OiBJbnRlcm5hbFF1ZXJ5RXhlY3V0ZU9wdGlvbnMpID0+IHtcbiAgICBxdWVyeS5leGVjdXRlKHsgYXJnczogbmV3QXJncyB9KTtcbiAgICB0cmlnZ2VyZWRJbnRlcm5hbGx5LnNldChvcHRpb25zPy50cmlnZ2VyZWRJbnRlcm5hbGx5ID8/IGZhbHNlKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGV4ZWN1dGUsXG4gICAgcXVlcnksXG4gICAgdG9rZW5zLFxuICAgIGV4cGlyZXNJbixcbiAgICB0cmlnZ2VyZWRJbnRlcm5hbGx5OiB0cmlnZ2VyZWRJbnRlcm5hbGx5LmFzUmVhZG9ubHkoKSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVCZWFyZXJBdXRoUHJvdmlkZXIgPSA8XG4gIFRMb2dpbkFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRUb2tlbkxvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuUmVmcmVzaEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRTZWxlY3RSb2xlQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVEJlYXJlckRhdGEsXG4+KFxuICBvcHRpb25zOiBCZWFyZXJBdXRoUHJvdmlkZXJDb25maWc8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzLCBUQmVhcmVyRGF0YT4sXG4pOiBCZWFyZXJBdXRoUHJvdmlkZXI8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzLCBUQmVhcmVyRGF0YT4gPT4ge1xuICBjb25zdCByb3V0ZSA9IGluamVjdFJvdXRlKCk7XG4gIGNvbnN0IGNsaWVudCA9IGluamVjdChvcHRpb25zLnF1ZXJ5Q2xpZW50UmVmKTtcblxuICBjb25zdCBjb29raWVFbmFibGVkID0gc2lnbmFsKG9wdGlvbnMuY29va2llID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IChvcHRpb25zLmNvb2tpZS5lbmFibGVkID8/IHRydWUpKTtcbiAgY29uc3QgY29va2llT3B0aW9uczogUmVxdWlyZWQ8T21pdDxCZWFyZXJBdXRoUHJvdmlkZXJDb29raWVDb25maWc8VFRva2VuUmVmcmVzaEFyZ3M+LCAnZW5hYmxlZCc+PiA9IHtcbiAgICBleHBpcmVzSW5EYXlzOiAzMCxcbiAgICBuYW1lOiAnZXRBdXRoJyxcbiAgICBwYXRoOiAnLycsXG4gICAgc2FtZVNpdGU6ICdsYXgnLFxuICAgIGRvbWFpbjogZ2V0RG9tYWluKCkgPz8gJ2xvY2FsaG9zdCcsXG4gICAgcmVmcmVzaEFyZ3NUcmFuc2Zvcm1lcjogKHRva2VuKSA9PiAoeyBib2R5OiB7IHRva2VuIH0gfSkgYXMgUmVxdWVzdEFyZ3M8VFRva2VuUmVmcmVzaEFyZ3M+LFxuICAgIGF1dG9Mb2dpbkV4Y2x1ZGVSb3V0ZXM6IFtdLFxuICAgIC4uLihvcHRpb25zLmNvb2tpZSA/PyB7fSksXG4gIH07XG5cbiAgY29uc3QgbG9naW5RdWVyeSA9IG9wdGlvbnMubG9naW4gPyBjcmVhdGVBdXRoUHJvdmlkZXJRdWVyeShvcHRpb25zLmxvZ2luLCBvcHRpb25zKSA6IG51bGw7XG4gIGNvbnN0IHRva2VuTG9naW5RdWVyeSA9IG9wdGlvbnMudG9rZW5Mb2dpbiA/IGNyZWF0ZUF1dGhQcm92aWRlclF1ZXJ5KG9wdGlvbnMudG9rZW5Mb2dpbiwgb3B0aW9ucykgOiBudWxsO1xuICBjb25zdCB0b2tlblJlZnJlc2hRdWVyeSA9IG9wdGlvbnMudG9rZW5SZWZyZXNoID8gY3JlYXRlQXV0aFByb3ZpZGVyUXVlcnkob3B0aW9ucy50b2tlblJlZnJlc2gsIG9wdGlvbnMpIDogbnVsbDtcbiAgY29uc3Qgc2VsZWN0Um9sZVF1ZXJ5ID0gb3B0aW9ucy5zZWxlY3RSb2xlID8gY3JlYXRlQXV0aFByb3ZpZGVyUXVlcnkob3B0aW9ucy5zZWxlY3RSb2xlLCBvcHRpb25zKSA6IG51bGw7XG5cbiAgY29uc3QgcXVlcmllczogQXV0aFByb3ZpZGVyUXVlcnlXaXRoVHlwZTxUTG9naW5BcmdzLCBUVG9rZW5Mb2dpbkFyZ3MsIFRUb2tlblJlZnJlc2hBcmdzLCBUU2VsZWN0Um9sZUFyZ3M+W10gPSBbXG4gICAgeyB0eXBlOiAnbG9naW4nLCBxdWVyeTogbG9naW5RdWVyeSB9LFxuICAgIHsgdHlwZTogJ3Rva2VuTG9naW4nLCBxdWVyeTogdG9rZW5Mb2dpblF1ZXJ5IH0sXG4gICAgeyB0eXBlOiAndG9rZW5SZWZyZXNoJywgcXVlcnk6IHRva2VuUmVmcmVzaFF1ZXJ5IH0sXG4gICAgeyB0eXBlOiAnc2VsZWN0Um9sZScsIHF1ZXJ5OiBzZWxlY3RSb2xlUXVlcnkgfSxcbiAgXTtcblxuICBjb25zdCBsYXRlc3RFeGVjdXRlZFF1ZXJ5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHJlbGV2YW50UXVlcmllcyA9IHF1ZXJpZXMuZmlsdGVyKChxKSA9PiBxLnF1ZXJ5ICYmIHEucXVlcnkucXVlcnkubGFzdFRpbWVFeGVjdXRlZEF0KCkgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGZpbmRNb3N0UmVjZW50UXVlcnkocmVsZXZhbnRRdWVyaWVzKTtcbiAgfSk7XG5cbiAgY29uc3QgdG9rZW5zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gbGF0ZXN0RXhlY3V0ZWRRdWVyeSgpO1xuXG4gICAgcmV0dXJuIHF1ZXJ5Py5xdWVyeT8udG9rZW5zKCk/LnRva2VucyA/PyBudWxsO1xuICB9KTtcblxuICBjb25zdCBiZWFyZXJEYXRhID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gdG9rZW5zKCk/LmFjY2Vzc1Rva2VuO1xuXG4gICAgaWYgKCFhY2Nlc3NUb2tlbikgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gKG9wdGlvbnMuYmVhcmVyRGVjcnlwdEZuPy4oYWNjZXNzVG9rZW4pID8/IGRlY3J5cHRCZWFyZXIoYWNjZXNzVG9rZW4pKSBhcyBUQmVhcmVyRGF0YSB8IG51bGw7XG4gIH0pO1xuXG4gIHRvT2JzZXJ2YWJsZShcbiAgICBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBjb25zdCBxdWVyeSA9IGxhdGVzdEV4ZWN1dGVkUXVlcnkoKTtcbiAgICAgIGNvbnN0IGV4cGlyZXNJbiA9IHF1ZXJ5Py5xdWVyeT8uZXhwaXJlc0luKCkgPz8gbnVsbDtcbiAgICAgIGNvbnN0IHRva2VucyA9IHF1ZXJ5Py5xdWVyeT8udG9rZW5zKCkgPz8gbnVsbDtcblxuICAgICAgcmV0dXJuIHsgZXhwaXJlc0luLCB0b2tlbnMsIHF1ZXJ5IH07XG4gICAgfSksXG4gIClcbiAgICAucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzKSA9PiB7XG4gICAgICAgIGlmICghcmVzLnRva2VucyB8fCByZXMuZXhwaXJlc0luID09PSBudWxsIHx8ICFvcHRpb25zLnRva2VuUmVmcmVzaCkgcmV0dXJuIG9mKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IGV4cEluID0gcmVzLmV4cGlyZXNJbjtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gcmVzLnRva2VucztcblxuICAgICAgICBpZiAoIWV4cEluIHx8ICF0b2tlbnMpIHJldHVybiBvZihudWxsKTtcblxuICAgICAgICByZXR1cm4gdGltZXIoZXhwSW4pLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+XG4gICAgICAgICAgICByZWZyZXNoVG9rZW4oXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5jb29raWVPcHRpb25zLnJlZnJlc2hBcmdzVHJhbnNmb3JtZXIodG9rZW5zLnRva2Vucy5yZWZyZXNoVG9rZW4pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7IHRyaWdnZXJlZEludGVybmFsbHk6IHRydWUgfSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKTtcblxuICBjb25zdCBsYXRlc3ROb25JbnRlcm5hbFF1ZXJ5ID0gc2lnbmFsPFF1ZXJ5U25hcHNob3RXaXRoVHlwZTxcbiAgICBUTG9naW5BcmdzLFxuICAgIFRUb2tlbkxvZ2luQXJncyxcbiAgICBUVG9rZW5SZWZyZXNoQXJncyxcbiAgICBUU2VsZWN0Um9sZUFyZ3NcbiAgPiB8IG51bGw+KG51bGwpO1xuXG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcmVsZXZhbnRRdWVyaWVzID0gcXVlcmllcy5maWx0ZXIoXG4gICAgICAocSkgPT4gcS5xdWVyeSAmJiAhcS5xdWVyeS50cmlnZ2VyZWRJbnRlcm5hbGx5KCkgJiYgcS5xdWVyeS5xdWVyeS5sYXN0VGltZUV4ZWN1dGVkQXQoKSAhPT0gbnVsbCxcbiAgICApO1xuXG4gICAgY29uc3QgbGFzdFF1ZXJ5ID0gZmluZE1vc3RSZWNlbnRRdWVyeShyZWxldmFudFF1ZXJpZXMpO1xuXG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIGlmICghbGFzdFF1ZXJ5IHx8ICFsYXN0UXVlcnkucXVlcnk/LnF1ZXJ5KSByZXR1cm47XG5cbiAgICAgIGxhdGVzdE5vbkludGVybmFsUXVlcnkuc2V0KHtcbiAgICAgICAgdHlwZTogbGFzdFF1ZXJ5LnR5cGUsXG4gICAgICAgIC4uLmxhc3RRdWVyeS5xdWVyeS5xdWVyeS5jcmVhdGVTbmFwc2hvdCgpLFxuICAgICAgfSBhcyBRdWVyeVNuYXBzaG90V2l0aFR5cGU8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzPik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIENvb2tpZSB3cml0aW5nXG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaXNDb29raWVFbmFibGVkID0gY29va2llRW5hYmxlZCgpO1xuICAgIGNvbnN0IHJlcyA9IGxhdGVzdEV4ZWN1dGVkUXVlcnkoKTtcbiAgICBjb25zdCBlcnJvciA9IHJlcz8ucXVlcnk/LnF1ZXJ5LmVycm9yKCk7XG5cbiAgICBpZiAoIWlzQ29va2llRW5hYmxlZCB8fCAoZXJyb3IgJiYgZXJyb3IuY29kZSA9PT0gNDAxKSkge1xuICAgICAgZGVsZXRlQ29va2llKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFyZXM/LnF1ZXJ5KSByZXR1cm47XG5cbiAgICBjb25zdCB7IHRva2VucyB9ID0gcmVzLnF1ZXJ5O1xuXG4gICAgY29uc3QgcnQgPSB0b2tlbnMoKT8udG9rZW5zLnJlZnJlc2hUb2tlbjtcblxuICAgIGlmICghcnQpIHJldHVybjtcblxuICAgIHdyaXRlQ29va2llKHJ0KTtcbiAgfSk7XG5cbiAgY29uc3QgbG9naW4gPSAoYXJnczogUmVxdWVzdEFyZ3M8VExvZ2luQXJncz4pID0+IHtcbiAgICBpZiAoIWxvZ2luUXVlcnkpIHtcbiAgICAgIHRocm93IGxvZ2luQ2FsbGVkV2l0aG91dENvbmZpZygpO1xuICAgIH1cblxuICAgIGxvZ2luUXVlcnkuZXhlY3V0ZShhcmdzKTtcblxuICAgIHJldHVybiBsb2dpblF1ZXJ5LnF1ZXJ5LmNyZWF0ZVNuYXBzaG90KCk7XG4gIH07XG5cbiAgY29uc3QgbG9naW5XaXRoVG9rZW4gPSAoYXJnczogUmVxdWVzdEFyZ3M8VFRva2VuTG9naW5BcmdzPikgPT4ge1xuICAgIGlmICghdG9rZW5Mb2dpblF1ZXJ5KSB7XG4gICAgICB0aHJvdyBsb2dpbldpdGhUb2tlbkNhbGxlZFdpdGhvdXRDb25maWcoKTtcbiAgICB9XG5cbiAgICB0b2tlbkxvZ2luUXVlcnkuZXhlY3V0ZShhcmdzKTtcblxuICAgIHJldHVybiB0b2tlbkxvZ2luUXVlcnkucXVlcnkuY3JlYXRlU25hcHNob3QoKTtcbiAgfTtcblxuICBjb25zdCByZWZyZXNoVG9rZW4gPSAoYXJnczogUmVxdWVzdEFyZ3M8VFRva2VuUmVmcmVzaEFyZ3M+LCBvcHRpb25zPzogSW50ZXJuYWxRdWVyeUV4ZWN1dGVPcHRpb25zKSA9PiB7XG4gICAgaWYgKCF0b2tlblJlZnJlc2hRdWVyeSkge1xuICAgICAgdGhyb3cgcmVmcmVzaFRva2VuQ2FsbGVkV2l0aG91dENvbmZpZygpO1xuICAgIH1cblxuICAgIHRva2VuUmVmcmVzaFF1ZXJ5LmV4ZWN1dGUoYXJncywgeyB0cmlnZ2VyZWRJbnRlcm5hbGx5OiBvcHRpb25zPy50cmlnZ2VyZWRJbnRlcm5hbGx5IH0pO1xuXG4gICAgcmV0dXJuIHRva2VuUmVmcmVzaFF1ZXJ5LnF1ZXJ5LmNyZWF0ZVNuYXBzaG90KCk7XG4gIH07XG5cbiAgY29uc3Qgc2VsZWN0Um9sZSA9IChhcmdzOiBSZXF1ZXN0QXJnczxUU2VsZWN0Um9sZUFyZ3M+KSA9PiB7XG4gICAgaWYgKCFzZWxlY3RSb2xlUXVlcnkpIHtcbiAgICAgIHRocm93IHNlbGVjdFJvbGVDYWxsZWRXaXRob3V0Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgc2VsZWN0Um9sZVF1ZXJ5LmV4ZWN1dGUoYXJncyk7XG5cbiAgICByZXR1cm4gc2VsZWN0Um9sZVF1ZXJ5LnF1ZXJ5LmNyZWF0ZVNuYXBzaG90KCk7XG4gIH07XG5cbiAgY29uc3QgbG9nb3V0ID0gKCkgPT4ge1xuICAgIGRlbGV0ZUNvb2tpZSgpO1xuICAgIGxvZ2luUXVlcnk/LnF1ZXJ5LnJlc2V0KCk7XG4gICAgdG9rZW5Mb2dpblF1ZXJ5Py5xdWVyeS5yZXNldCgpO1xuICAgIHRva2VuUmVmcmVzaFF1ZXJ5Py5xdWVyeS5yZXNldCgpO1xuICAgIHNlbGVjdFJvbGVRdWVyeT8ucXVlcnkucmVzZXQoKTtcbiAgICBsYXRlc3ROb25JbnRlcm5hbFF1ZXJ5LnNldChudWxsKTtcblxuICAgIGNsaWVudC5yZXBvc2l0b3J5LnVuYmluZEFsbFNlY3VyZSgpO1xuICB9O1xuXG4gIGNvbnN0IGVuYWJsZUNvb2tpZSA9ICgpID0+IHtcbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgIW9wdGlvbnMuY29va2llKSB7XG4gICAgICB0aHJvdyBlbmFibGVDb29raWVDYWxsZWRXaXRob3V0Q29va2llQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgY29va2llRW5hYmxlZC5zZXQodHJ1ZSk7XG4gIH07XG5cbiAgY29uc3QgZGlzYWJsZUNvb2tpZSA9ICgpID0+IHtcbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgIW9wdGlvbnMuY29va2llKSB7XG4gICAgICB0aHJvdyBkaXNhYmxlQ29va2llQ2FsbGVkV2l0aG91dENvb2tpZUNvbmZpZygpO1xuICAgIH1cblxuICAgIGNvb2tpZUVuYWJsZWQuc2V0KGZhbHNlKTtcbiAgICBkZWxldGVDb29raWUoKTtcbiAgfTtcblxuICBjb25zdCBpc0Nvb2tpZVByZXNlbnQgPSAoKSA9PiB7XG4gICAgcmV0dXJuICEhZ2V0Q29va2llKGNvb2tpZU9wdGlvbnMubmFtZSk7XG4gIH07XG5cbiAgY29uc3QgdHJ5TG9naW5XaXRoQ29va2llID0gKCkgPT4ge1xuICAgIGNvbnN0IGlzQ29va2llRW5hYmxlZCA9IGNvb2tpZUVuYWJsZWQoKTtcblxuICAgIGlmICghaXNDb29raWVFbmFibGVkKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgdGhyb3cgY29va2llTG9naW5UcmllZEJ1dENvb2tpZURpc2FibGVkKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgY29va2llID0gZ2V0Q29va2llKGNvb2tpZU9wdGlvbnMubmFtZSk7XG5cbiAgICBpZiAoIWNvb2tpZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJlZnJlc2hUb2tlbihjb29raWVPcHRpb25zLnJlZnJlc2hBcmdzVHJhbnNmb3JtZXIoY29va2llKSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCB3cml0ZUNvb2tpZSA9IChyZWZyZXNoVG9rZW46IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHsgbmFtZSwgZXhwaXJlc0luRGF5cywgZG9tYWluLCBwYXRoLCBzYW1lU2l0ZSB9ID0gY29va2llT3B0aW9ucztcblxuICAgIHNldENvb2tpZShuYW1lLCByZWZyZXNoVG9rZW4sIGV4cGlyZXNJbkRheXMsIGRvbWFpbiwgcGF0aCwgc2FtZVNpdGUpO1xuICB9O1xuXG4gIGNvbnN0IGRlbGV0ZUNvb2tpZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IG5hbWUsIHBhdGgsIGRvbWFpbiB9ID0gY29va2llT3B0aW9ucztcblxuICAgIGNvcmVEZWxldGVDb29raWUobmFtZSwgcGF0aCwgZG9tYWluKTtcbiAgfTtcblxuICBjb25zdCBmaW5kTW9zdFJlY2VudFF1ZXJ5ID0gKFxuICAgIHF1ZXJpZXNUb1NlYXJjaDogQXV0aFByb3ZpZGVyUXVlcnlXaXRoVHlwZTxUTG9naW5BcmdzLCBUVG9rZW5Mb2dpbkFyZ3MsIFRUb2tlblJlZnJlc2hBcmdzLCBUU2VsZWN0Um9sZUFyZ3M+W10sXG4gICkgPT4ge1xuICAgIHJldHVybiBxdWVyaWVzVG9TZWFyY2gucmVkdWNlKFxuICAgICAgKGFjYywgY3VycikgPT4ge1xuICAgICAgICBpZiAoIWFjYykgcmV0dXJuIGN1cnI7XG5cbiAgICAgICAgY29uc3QgYWNjRXhwID0gYWNjLnF1ZXJ5Py5xdWVyeS5sYXN0VGltZUV4ZWN1dGVkQXQoKSA/PyBudWxsO1xuICAgICAgICBjb25zdCBjdXJyRXhwID0gY3Vyci5xdWVyeT8ucXVlcnkubGFzdFRpbWVFeGVjdXRlZEF0KCkgPz8gbnVsbDtcblxuICAgICAgICBpZiAoY3VyckV4cCA9PT0gbnVsbCB8fCBhY2NFeHAgPT09IG51bGwpIHJldHVybiBhY2M7XG5cbiAgICAgICAgcmV0dXJuIGFjY0V4cCA+IGN1cnJFeHAgPyBhY2MgOiBjdXJyO1xuICAgICAgfSxcbiAgICAgIG51bGwgYXMgQXV0aFByb3ZpZGVyUXVlcnlXaXRoVHlwZTxUTG9naW5BcmdzLCBUVG9rZW5Mb2dpbkFyZ3MsIFRUb2tlblJlZnJlc2hBcmdzLCBUU2VsZWN0Um9sZUFyZ3M+IHwgbnVsbCxcbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IGJlYXJlckF1dGhQcm92aWRlcjogQmVhcmVyQXV0aFByb3ZpZGVyPFxuICAgIFRMb2dpbkFyZ3MsXG4gICAgVFRva2VuTG9naW5BcmdzLFxuICAgIFRUb2tlblJlZnJlc2hBcmdzLFxuICAgIFRTZWxlY3RSb2xlQXJncyxcbiAgICBUQmVhcmVyRGF0YVxuICA+ID0ge1xuICAgIGxvZ2luLFxuICAgIGxvZ2luV2l0aFRva2VuLFxuICAgIHJlZnJlc2hUb2tlbixcbiAgICBzZWxlY3RSb2xlLFxuICAgIGxvZ291dCxcbiAgICBlbmFibGVDb29raWUsXG4gICAgZGlzYWJsZUNvb2tpZSxcbiAgICBpc0Nvb2tpZVByZXNlbnQsXG4gICAgdHJ5TG9naW5XaXRoQ29va2llLFxuICAgIGxhdGVzdEV4ZWN1dGVkUXVlcnk6IGxhdGVzdE5vbkludGVybmFsUXVlcnkuYXNSZWFkb25seSgpLFxuICAgIHRva2VucyxcbiAgICBiZWFyZXJEYXRhLFxuICB9O1xuXG4gIGlmIChjb29raWVFbmFibGVkKCkpIHtcbiAgICBpZiAoIWNvb2tpZU9wdGlvbnMuYXV0b0xvZ2luRXhjbHVkZVJvdXRlcy5zb21lKChyKSA9PiByb3V0ZSgpLnN0YXJ0c1dpdGgocikpKSB7XG4gICAgICB0cnlMb2dpbldpdGhDb29raWUoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYmVhcmVyQXV0aFByb3ZpZGVyO1xufTtcblxuZXhwb3J0IGNvbnN0IHByb3ZpZGVCZWFyZXJBdXRoUHJvdmlkZXIgPSA8XG4gIFRMb2dpbkFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRUb2tlbkxvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuUmVmcmVzaEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRTZWxlY3RSb2xlQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVEJlYXJlckRhdGEsXG4+KFxuICBjb25maWc6IEJlYXJlckF1dGhQcm92aWRlckNvbmZpZzxUTG9naW5BcmdzLCBUVG9rZW5Mb2dpbkFyZ3MsIFRUb2tlblJlZnJlc2hBcmdzLCBUU2VsZWN0Um9sZUFyZ3MsIFRCZWFyZXJEYXRhPixcbikgPT4ge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IGNvbmZpZy50b2tlbixcbiAgICB1c2VGYWN0b3J5OiAoKSA9PiBjcmVhdGVCZWFyZXJBdXRoUHJvdmlkZXIoY29uZmlnKSxcbiAgfTtcbn07XG4iXX0=","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 { HttpEventType } from '@angular/common/http';\nimport { computed, untracked } from '@angular/core';\nimport { withAutoRefreshUsedInManualQuery, withAutoRefreshUsedOnUnsupportedHttpMethod, withPollingUsedOnUnsupportedHttpMethod, } from './query-errors';\nimport { CLEAR_QUERY_ARGS, nestedEffect } from './query-utils';\nexport const QueryFeatureType = {\n WITH_ARGS: 'WITH_ARGS',\n WITH_LOGGING: 'WITH_LOGGING',\n WITH_ERROR_HANDLING: 'WITH_ERROR_HANDLING',\n WITH_SUCCESS_HANDLING: 'WITH_SUCCESS_HANDLING',\n WITH_POLLING: 'WITH_POLLING',\n WITH_AUTO_REFRESH: 'WITH_AUTO_REFRESH',\n WITH_RESPONSE_UPDATE: 'WITH_RESPONSE_UPDATE',\n};\nexport const 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: QueryFeatureType.WITH_ARGS,\n fn: (context) => {\n const currArgs = computed(() => args(), ...(ngDevMode ? [{ debugName: \"currArgs\" }] : []));\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: QueryFeatureType.WITH_POLLING,\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: QueryFeatureType.WITH_LOGGING,\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: QueryFeatureType.WITH_ERROR_HANDLING,\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: QueryFeatureType.WITH_SUCCESS_HANDLING,\n fn: (context) => {\n nestedEffect(() => {\n const event = context.state.latestHttpEvent();\n if (!event || event.type !== HttpEventType.Response)\n return;\n untracked(() => {\n options.handler(context.state.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: QueryFeatureType.WITH_AUTO_REFRESH,\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: QueryFeatureType.WITH_RESPONSE_UPDATE,\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZmVhdHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvcXVlcnktZmVhdHVyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFhLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTVELE9BQU8sRUFDTCxnQ0FBZ0MsRUFDaEMsMENBQTBDLEVBQzFDLHNDQUFzQyxHQUN2QyxNQUFNLGdCQUFnQixDQUFDO0FBR3hCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBa0IsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVsRyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixTQUFTLEVBQUUsV0FBVztJQUN0QixZQUFZLEVBQUUsY0FBYztJQUM1QixtQkFBbUIsRUFBRSxxQkFBcUI7SUFDMUMscUJBQXFCLEVBQUUsdUJBQXVCO0lBQzlDLFlBQVksRUFBRSxjQUFjO0lBQzVCLGlCQUFpQixFQUFFLG1CQUFtQjtJQUN0QyxvQkFBb0IsRUFBRSxzQkFBc0I7Q0FDcEMsQ0FBQztBQWlCWCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUEwQixNQUczRCxFQUFFLEVBQUU7SUFDSCxPQUFPLE1BQTZCLENBQUM7QUFDdkMsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBMEIsSUFBK0QsRUFBRSxFQUFFO0lBQ25ILE9BQU8sa0JBQWtCLENBQVE7UUFDL0IsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFNBQVM7UUFDaEMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDZCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLG9EQUFDLENBQUM7WUFFeEMsWUFBWSxDQUNWLEdBQUcsRUFBRTtnQkFDSCxNQUFNLFdBQVcsR0FBRyxRQUFRLEVBQUUsQ0FBQztnQkFFL0IsSUFBSSxXQUFXLEtBQUssSUFBSTtvQkFBRSxPQUFPO2dCQUVqQyxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNiLElBQUksV0FBVyxLQUFLLGdCQUFnQixFQUFFLENBQUM7d0JBQ3JDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDN0IsT0FBTztvQkFDVCxDQUFDO29CQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFFcEMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLGlCQUFpQjt3QkFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQzlFLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxFQUNELEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQ3BDLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBY0Y7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQTBCLE9BQWtDLEVBQUUsRUFBRTtJQUN6RixPQUFPLGtCQUFrQixDQUFRO1FBQy9CLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxZQUFZO1FBQ25DLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDM0MsTUFBTSxzQ0FBc0MsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JFLENBQUM7WUFFRCxJQUFJLFVBQVUsR0FBa0IsSUFBSSxDQUFDO1lBRXJDLFlBQVksQ0FDVixHQUFHLEVBQUU7Z0JBQ0gsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFbEMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDYixJQUFJLFVBQVUsS0FBSyxJQUFJO3dCQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFFbkQsc0RBQXNEO29CQUN0RCw2REFBNkQ7b0JBQzdELElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLGtCQUFrQjt3QkFBRSxPQUFPO29CQUU5RCxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO3dCQUM3QixPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDNUIsQ0FBQztvQkFFRCxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUU7d0JBQ25DLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUM1QixDQUFDLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN2QixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsRUFDRCxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUNwQyxDQUFDO1lBRUYsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDNUYsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQU9GLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBMEIsT0FBeUMsRUFBRSxFQUFFO0lBQ2hHLE9BQU8sa0JBQWtCLENBQVE7UUFDL0IsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFlBQVk7UUFDbkMsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDZCxZQUFZLENBQ1YsR0FBRyxFQUFFO2dCQUNILE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBRTlDLElBQUksS0FBSyxLQUFLLElBQUk7b0JBQUUsT0FBTztnQkFFM0IsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsRUFDRCxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUNwQyxDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQU9GLHdEQUF3RDtBQUN4RCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUEwQixPQUF3QyxFQUFFLEVBQUU7SUFDckcsT0FBTyxrQkFBa0IsQ0FBUTtRQUMvQixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsbUJBQW1CO1FBQzFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2QsWUFBWSxDQUNWLEdBQUcsRUFBRTtnQkFDSCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUVwQyxJQUFJLEtBQUssS0FBSyxJQUFJO29CQUFFLE9BQU87Z0JBRTNCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDekIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLEVBQ0QsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FDcEMsQ0FBQztRQUNKLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFPRixzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBMEIsT0FBaUQsRUFBRSxFQUFFO0lBQ2hILE9BQU8sa0JBQWtCLENBQVE7UUFDL0IsSUFBSSxFQUFFLGdCQUFnQixDQUFDLHFCQUFxQjtRQUM1QyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNkLFlBQVksQ0FDVixHQUFHLEVBQUU7Z0JBQ0gsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFFOUMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxRQUFRO29CQUFFLE9BQU87Z0JBRTVELFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBc0MsQ0FBQyxDQUFDO2dCQUNoRixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsRUFDRCxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUNwQyxDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQVVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBMEIsT0FBc0MsRUFBRSxFQUFFO0lBQ2pHLE9BQU8sa0JBQWtCLENBQVE7UUFDL0IsSUFBSSxFQUFFLGdCQUFnQixDQUFDLGlCQUFpQjtRQUN4QyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQzNDLE1BQU0sMENBQTBDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6RSxDQUFDO1lBRUQsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixJQUFJLENBQUMsT0FBTyxDQUFDLHlCQUF5QixFQUFFLENBQUM7Z0JBQzVFLE1BQU0sZ0NBQWdDLEVBQUUsQ0FBQztZQUMzQyxDQUFDO1lBRUQsWUFBWSxDQUNWLEdBQUcsRUFBRTtnQkFDSCxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDN0MsTUFBTSxFQUFFLENBQUM7Z0JBQ1gsQ0FBQztnQkFFRCxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNiLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBRWxDLHNEQUFzRDtvQkFDdEQsNkRBQTZEO29CQUM3RCxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7d0JBQUUsT0FBTztvQkFFOUQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzVCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxFQUNELEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQ3BDLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBcUNGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQTBCLE9BQWdELEVBQUUsRUFBRTtJQUM5RyxPQUFPLGtCQUFrQixDQUFRO1FBQy9CLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxvQkFBb0I7UUFDM0MsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDZCxZQUFZLENBQ1YsR0FBRyxFQUFFO2dCQUNILE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ2xFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO2dCQUV0RCxJQUFJLFFBQVEsS0FBSyxJQUFJO29CQUFFLE9BQU87Z0JBRTlCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsRUFDRCxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUNwQyxDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFdmVudCwgSHR0cEV2ZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGNvbXB1dGVkLCBTaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUXVlcnlBcmdzLCBSZXF1ZXN0QXJncywgUmVzcG9uc2VUeXBlIH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBRdWVyeURlcGVuZGVuY2llcyB9IGZyb20gJy4vcXVlcnktZGVwZW5kZW5jaWVzJztcbmltcG9ydCB7IFF1ZXJ5RXJyb3JSZXNwb25zZSB9IGZyb20gJy4vcXVlcnktZXJyb3ItcmVzcG9uc2UnO1xuaW1wb3J0IHtcbiAgd2l0aEF1dG9SZWZyZXNoVXNlZEluTWFudWFsUXVlcnksXG4gIHdpdGhBdXRvUmVmcmVzaFVzZWRPblVuc3VwcG9ydGVkSHR0cE1ldGhvZCxcbiAgd2l0aFBvbGxpbmdVc2VkT25VbnN1cHBvcnRlZEh0dHBNZXRob2QsXG59IGZyb20gJy4vcXVlcnktZXJyb3JzJztcbmltcG9ydCB7IEludGVybmFsUXVlcnlFeGVjdXRlIH0gZnJvbSAnLi9xdWVyeS1leGVjdXRlJztcbmltcG9ydCB7IFF1ZXJ5U3RhdGUgfSBmcm9tICcuL3F1ZXJ5LXN0YXRlJztcbmltcG9ydCB7IENMRUFSX1FVRVJZX0FSR1MsIENsZWFyUXVlcnlBcmdzLCBuZXN0ZWRFZmZlY3QsIFF1ZXJ5RmVhdHVyZUZsYWdzIH0gZnJvbSAnLi9xdWVyeS11dGlscyc7XG5cbmV4cG9ydCBjb25zdCBRdWVyeUZlYXR1cmVUeXBlID0ge1xuICBXSVRIX0FSR1M6ICdXSVRIX0FSR1MnLFxuICBXSVRIX0xPR0dJTkc6ICdXSVRIX0xPR0dJTkcnLFxuICBXSVRIX0VSUk9SX0hBTkRMSU5HOiAnV0lUSF9FUlJPUl9IQU5ETElORycsXG4gIFdJVEhfU1VDQ0VTU19IQU5ETElORzogJ1dJVEhfU1VDQ0VTU19IQU5ETElORycsXG4gIFdJVEhfUE9MTElORzogJ1dJVEhfUE9MTElORycsXG4gIFdJVEhfQVVUT19SRUZSRVNIOiAnV0lUSF9BVVRPX1JFRlJFU0gnLFxuICBXSVRIX1JFU1BPTlNFX1VQREFURTogJ1dJVEhfUkVTUE9OU0VfVVBEQVRFJyxcbn0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBRdWVyeUZlYXR1cmVUeXBlID0gKHR5cGVvZiBRdWVyeUZlYXR1cmVUeXBlKVtrZXlvZiB0eXBlb2YgUXVlcnlGZWF0dXJlVHlwZV07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5RmVhdHVyZUNvbnRleHQ8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICBzdGF0ZTogUXVlcnlTdGF0ZTxUQXJncz47XG4gIGV4ZWN1dGU6IEludGVybmFsUXVlcnlFeGVjdXRlPFRBcmdzPjtcbiAgZGVwczogUXVlcnlEZXBlbmRlbmNpZXM7XG4gIGZsYWdzOiBRdWVyeUZlYXR1cmVGbGFncztcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5RmVhdHVyZUZuPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IChjb250ZXh0OiBRdWVyeUZlYXR1cmVDb250ZXh0PFRBcmdzPikgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgUXVlcnlGZWF0dXJlPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IHtcbiAgdHlwZTogUXVlcnlGZWF0dXJlVHlwZTtcbiAgZm46IChjb250ZXh0OiBRdWVyeUZlYXR1cmVDb250ZXh0PFRBcmdzPikgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVRdWVyeUZlYXR1cmUgPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KGNvbmZpZzoge1xuICB0eXBlOiBRdWVyeUZlYXR1cmVUeXBlO1xuICBmbjogUXVlcnlGZWF0dXJlRm48VEFyZ3M+O1xufSkgPT4ge1xuICByZXR1cm4gY29uZmlnIGFzIFF1ZXJ5RmVhdHVyZTxUQXJncz47XG59O1xuXG4vKipcbiAqIEEgcXVlcnkgZmVhdHVyZSB0aGF0IGFsbG93cyB5b3UgdG8gc2V0IHRoZSBhcmd1bWVudHMgb2YgdGhlIHF1ZXJ5LlxuICogVGhlIGFyZ3VtZW50cyBhcmUgcmVhZCB3aXRoaW4gYSBjb21wdXRlZCBmdW5jdGlvbiwgc28geW91IGNhbiB1c2UgcmVhY3RpdmUgdmFsdWVzLlxuICpcbiAqIFRvIHNldCB0aGUgYXJndW1lbnRzIHRvIGBudWxsYCwgcmV0dXJuIHRoZSBzeW1ib2wgYENMRUFSX1FVRVJZX0FSR1NgLlxuICogSWYgeW91IGluc3RlYWQgcmV0dXJuIGBudWxsYCwgdGhlIGFyZ3VtZW50cyB3b24ndCBjaGFuZ2UuXG4gKlxuICogQ2hhbmdpbmcgYXJndW1lbnRzIHdpbGwgYXV0b21hdGljYWxseSB0cmlnZ2VyIGEgbmV3IGV4ZWN1dGlvbiBvZiB0aGUgcXVlcnkgaWYgaXQgaXMgZWxpZ2libGUgZm9yIGF1dG8gZXhlY3V0aW9uIChlLmcuIGEgR0VUIHJlcXVlc3QpLlxuICovXG5leHBvcnQgY29uc3Qgd2l0aEFyZ3MgPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KGFyZ3M6ICgpID0+IE5vSW5mZXI8UmVxdWVzdEFyZ3M8VEFyZ3M+PiB8IENsZWFyUXVlcnlBcmdzIHwgbnVsbCkgPT4ge1xuICByZXR1cm4gY3JlYXRlUXVlcnlGZWF0dXJlPFRBcmdzPih7XG4gICAgdHlwZTogUXVlcnlGZWF0dXJlVHlwZS5XSVRIX0FSR1MsXG4gICAgZm46IChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBjdXJyQXJncyA9IGNvbXB1dGVkKCgpID0+IGFyZ3MoKSk7XG5cbiAgICAgIG5lc3RlZEVmZmVjdChcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJBcmdzTm93ID0gY3VyckFyZ3MoKTtcblxuICAgICAgICAgIGlmIChjdXJyQXJnc05vdyA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChjdXJyQXJnc05vdyA9PT0gQ0xFQVJfUVVFUllfQVJHUykge1xuICAgICAgICAgICAgICBjb250ZXh0LnN0YXRlLmFyZ3Muc2V0KG51bGwpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRleHQuc3RhdGUuYXJncy5zZXQoY3VyckFyZ3NOb3cpO1xuXG4gICAgICAgICAgICBpZiAoY29udGV4dC5mbGFncy5zaG91bGRBdXRvRXhlY3V0ZSkgY29udGV4dC5leGVjdXRlKHsgYXJnczogY3VyckFyZ3NOb3cgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHsgaW5qZWN0b3I6IGNvbnRleHQuZGVwcy5pbmplY3RvciB9LFxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCB0eXBlIFdpdGhQb2xsaW5nRmVhdHVyZU9wdGlvbnMgPSB7XG4gIC8qKiBUaGUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIGF0IHdoaWNoIHRoZSBxdWVyeSBzaG91bGQgYmUgZXhlY3V0ZWQgKi9cbiAgaW50ZXJ2YWw6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcXVlcnkgc2hvdWxkIGJlIGV4ZWN1dGVkIGluaXRpYWxseS5cbiAgICogQnkgZGVmYXVsdCwgdGhlIHF1ZXJ5IHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGZpcnN0IGludGVydmFsLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZXhlY3V0ZUluaXRpYWxseT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEEgcXVlcnkgZmVhdHVyZSB0aGF0IHdpbGwgYXV0b21hdGljYWxseSBleGVjdXRlIHRoZSBxdWVyeSBhdCBhIGdpdmVuIGludGVydmFsLlxuICogVGhlIGludGVydmFsIHdpbGwgYmUgY2xlYXJlZCB3aGVuIHRoZSBxdWVyeSBpcyBkZXN0cm95ZWQuXG4gKiBUaGUgaW50ZXJ2YWwgd2lsbCBiZSByZXNldCB3aGVuIHRoZSBhcmd1bWVudHMgb2YgdGhlIHF1ZXJ5IGNoYW5nZS5cbiAqXG4gKiBAdGhyb3dzIElmIHRoZSBxdWVyeSBpcyBub3QgZWxpZ2libGUgZm9yIGF1dG8gZXhlY3V0aW9uIChlLmcuIGEgUE9TVCByZXF1ZXN0KVxuICovXG5leHBvcnQgY29uc3Qgd2l0aFBvbGxpbmcgPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KG9wdGlvbnM6IFdpdGhQb2xsaW5nRmVhdHVyZU9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIGNyZWF0ZVF1ZXJ5RmVhdHVyZTxUQXJncz4oe1xuICAgIHR5cGU6IFF1ZXJ5RmVhdHVyZVR5cGUuV0lUSF9QT0xMSU5HLFxuICAgIGZuOiAoY29udGV4dCkgPT4ge1xuICAgICAgaWYgKCFjb250ZXh0LmZsYWdzLnNob3VsZEF1dG9FeGVjdXRlTWV0aG9kKSB7XG4gICAgICAgIHRocm93IHdpdGhQb2xsaW5nVXNlZE9uVW5zdXBwb3J0ZWRIdHRwTWV0aG9kKGNvbnRleHQuZmxhZ3MubWV0aG9kKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGludGVydmFsSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICBuZXN0ZWRFZmZlY3QoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmdzID0gY29udGV4dC5zdGF0ZS5hcmdzKCk7XG5cbiAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGludGVydmFsSWQgIT09IG51bGwpIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG5cbiAgICAgICAgICAgIC8vIERvbid0IHN0YXJ0IHBvbGxpbmcgaWYgdGhlIHF1ZXJ5IGRvZXNuJ3QgaGF2ZSBhcmdzLlxuICAgICAgICAgICAgLy8gSXQgc2hvdWxkIGhhdmUgYXJncyBiZWNhdXNlIGEgd2l0aEFyZ3MgZmVhdHVyZSBpcyBwcmVzZW50LlxuICAgICAgICAgICAgaWYgKGFyZ3MgPT09IG51bGwgJiYgY29udGV4dC5mbGFncy5oYXNXaXRoQXJnc0ZlYXR1cmUpIHJldHVybjtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXhlY3V0ZUluaXRpYWxseSkge1xuICAgICAgICAgICAgICBjb250ZXh0LmV4ZWN1dGUoeyBhcmdzIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnRlcnZhbElkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgY29udGV4dC5leGVjdXRlKHsgYXJncyB9KTtcbiAgICAgICAgICAgIH0sIG9wdGlvbnMuaW50ZXJ2YWwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB7IGluamVjdG9yOiBjb250ZXh0LmRlcHMuaW5qZWN0b3IgfSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnRleHQuZGVwcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBpbnRlcnZhbElkICE9PSBudWxsICYmIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCkpO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IHR5cGUgV2l0aExvZ2dpbmdGZWF0dXJlT3B0aW9uczxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIC8qKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbGF0ZXN0IGh0dHAgZXZlbnQgKi9cbiAgbG9nRm46ICh2OiBIdHRwRXZlbnQ8UmVzcG9uc2VUeXBlPFRBcmdzPj4gfCBudWxsKSA9PiB2b2lkO1xufTtcblxuLyoqIEEgcXVlcnkgZmVhdHVyZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvZyB0aGUgbGF0ZXN0IGh0dHAgZXZlbnQgKi9cbmV4cG9ydCBjb25zdCB3aXRoTG9nZ2luZyA9IDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4ob3B0aW9uczogV2l0aExvZ2dpbmdGZWF0dXJlT3B0aW9uczxUQXJncz4pID0+IHtcbiAgcmV0dXJuIGNyZWF0ZVF1ZXJ5RmVhdHVyZTxUQXJncz4oe1xuICAgIHR5cGU6IFF1ZXJ5RmVhdHVyZVR5cGUuV0lUSF9MT0dHSU5HLFxuICAgIGZuOiAoY29udGV4dCkgPT4ge1xuICAgICAgbmVzdGVkRWZmZWN0KFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXZlbnQgPSBjb250ZXh0LnN0YXRlLmxhdGVzdEh0dHBFdmVudCgpO1xuXG4gICAgICAgICAgaWYgKGV2ZW50ID09PSBudWxsKSByZXR1cm47XG5cbiAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgb3B0aW9ucy5sb2dGbihldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHsgaW5qZWN0b3I6IGNvbnRleHQuZGVwcy5pbmplY3RvciB9LFxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCB0eXBlIFdpdGhFcnJvckhhbmRsaW5nRmVhdHVyZU9wdGlvbnMgPSB7XG4gIC8qKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbGF0ZXN0IGVycm9yICovXG4gIGhhbmRsZXI6IChlOiBRdWVyeUVycm9yUmVzcG9uc2UpID0+IHZvaWQ7XG59O1xuXG4vKiogQSBxdWVyeSBmZWF0dXJlIHRoYXQgY2FuIGJlIHVzZWQgdG8gaGFuZGxlIGVycm9ycyAqL1xuZXhwb3J0IGNvbnN0IHdpdGhFcnJvckhhbmRsaW5nID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihvcHRpb25zOiBXaXRoRXJyb3JIYW5kbGluZ0ZlYXR1cmVPcHRpb25zKSA9PiB7XG4gIHJldHVybiBjcmVhdGVRdWVyeUZlYXR1cmU8VEFyZ3M+KHtcbiAgICB0eXBlOiBRdWVyeUZlYXR1cmVUeXBlLldJVEhfRVJST1JfSEFORExJTkcsXG4gICAgZm46IChjb250ZXh0KSA9PiB7XG4gICAgICBuZXN0ZWRFZmZlY3QoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGNvbnRleHQuc3RhdGUuZXJyb3IoKTtcblxuICAgICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgIG9wdGlvbnMuaGFuZGxlcihlcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHsgaW5qZWN0b3I6IGNvbnRleHQuZGVwcy5pbmplY3RvciB9LFxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCB0eXBlIFdpdGhTdWNjZXNzSGFuZGxpbmdGZWF0dXJlT3B0aW9uczxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIC8qKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbGF0ZXN0IHJlc3BvbnNlICovXG4gIGhhbmRsZXI6IChkYXRhOiBOb25OdWxsYWJsZTxSZXNwb25zZVR5cGU8VEFyZ3M+PikgPT4gdm9pZDtcbn07XG5cbi8qKiBBIHF1ZXJ5IGZlYXR1cmUgdGhhdCBjYW4gYmUgdXNlZCB0byBoYW5kbGUgc3VjY2Vzc2Z1bCByZXNwb25zZXMgKi9cbmV4cG9ydCBjb25zdCB3aXRoU3VjY2Vzc0hhbmRsaW5nID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihvcHRpb25zOiBXaXRoU3VjY2Vzc0hhbmRsaW5nRmVhdHVyZU9wdGlvbnM8VEFyZ3M+KSA9PiB7XG4gIHJldHVybiBjcmVhdGVRdWVyeUZlYXR1cmU8VEFyZ3M+KHtcbiAgICB0eXBlOiBRdWVyeUZlYXR1cmVUeXBlLldJVEhfU1VDQ0VTU19IQU5ETElORyxcbiAgICBmbjogKGNvbnRleHQpID0+IHtcbiAgICAgIG5lc3RlZEVmZmVjdChcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV2ZW50ID0gY29udGV4dC5zdGF0ZS5sYXRlc3RIdHRwRXZlbnQoKTtcblxuICAgICAgICAgIGlmICghZXZlbnQgfHwgZXZlbnQudHlwZSAhPT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSkgcmV0dXJuO1xuXG4gICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgIG9wdGlvbnMuaGFuZGxlcihjb250ZXh0LnN0YXRlLnJlc3BvbnNlKCkgYXMgTm9uTnVsbGFibGU8UmVzcG9uc2VUeXBlPFRBcmdzPj4pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB7IGluamVjdG9yOiBjb250ZXh0LmRlcHMuaW5qZWN0b3IgfSxcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgdHlwZSBXaXRoQXV0b1JlZnJlc2hGZWF0dXJlT3B0aW9ucyA9IHtcbiAgLyoqIFRoZSBzaWduYWxzIHRoYXQgc2hvdWxkIHRyaWdnZXIgYSByZWZyZXNoIG9mIHRoZSBxdWVyeSAqL1xuICBvblNpZ25hbENoYW5nZXM6IFNpZ25hbDx1bmtub3duPltdO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGlnbm9yZSB0aGUgYG9ubHlNYW51YWxFeGVjdXRpb25gIHF1ZXJ5IGNvbmZpZyBmbGFnICovXG4gIGlnbm9yZU9ubHlNYW51YWxFeGVjdXRpb24/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBBIHF1ZXJ5IGZlYXR1cmUgdGhhdCB3aWxsIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZSB0aGUgcXVlcnkgd2hlbiBhbnkgb2YgdGhlIHByb3ZpZGVkIHNpZ25hbHMgY2hhbmdlXG4gKiBAdGhyb3dzIElmIHRoZSBxdWVyeSBpcyBub3QgZWxpZ2libGUgZm9yIGF1dG8gZXhlY3V0aW9uIChlLmcuIGEgUE9TVCByZXF1ZXN0KVxuICogQHRocm93cyBJZiB0aGUgcXVlcnkgaGFzIHRoZSBgb25seU1hbnVhbEV4ZWN1dGlvbmAgcXVlcnkgY29uZmlnIGZsYWcgc2V0IGFuZCBgaWdub3JlT25seU1hbnVhbEV4ZWN1dGlvbmAgaXMgbm90IHNldFxuICovXG5leHBvcnQgY29uc3Qgd2l0aEF1dG9SZWZyZXNoID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihvcHRpb25zOiBXaXRoQXV0b1JlZnJlc2hGZWF0dXJlT3B0aW9ucykgPT4ge1xuICByZXR1cm4gY3JlYXRlUXVlcnlGZWF0dXJlPFRBcmdzPih7XG4gICAgdHlwZTogUXVlcnlGZWF0dXJlVHlwZS5XSVRIX0FVVE9fUkVGUkVTSCxcbiAgICBmbjogKGNvbnRleHQpID0+IHtcbiAgICAgIGlmICghY29udGV4dC5mbGFncy5zaG91bGRBdXRvRXhlY3V0ZU1ldGhvZCkge1xuICAgICAgICB0aHJvdyB3aXRoQXV0b1JlZnJlc2hVc2VkT25VbnN1cHBvcnRlZEh0dHBNZXRob2QoY29udGV4dC5mbGFncy5tZXRob2QpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29udGV4dC5mbGFncy5vbmx5TWFudWFsRXhlY3V0aW9uICYmICFvcHRpb25zLmlnbm9yZU9ubHlNYW51YWxFeGVjdXRpb24pIHtcbiAgICAgICAgdGhyb3cgd2l0aEF1dG9SZWZyZXNoVXNlZEluTWFudWFsUXVlcnkoKTtcbiAgICAgIH1cblxuICAgICAgbmVzdGVkRWZmZWN0KFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBzaWduYWwgb2Ygb3B0aW9ucy5vblNpZ25hbENoYW5nZXMpIHtcbiAgICAgICAgICAgIHNpZ25hbCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gY29udGV4dC5zdGF0ZS5hcmdzKCk7XG5cbiAgICAgICAgICAgIC8vIERvbid0IHN0YXJ0IHBvbGxpbmcgaWYgdGhlIHF1ZXJ5IGRvZXNuJ3QgaGF2ZSBhcmdzLlxuICAgICAgICAgICAgLy8gSXQgc2hvdWxkIGhhdmUgYXJncyBiZWNhdXNlIGEgd2l0aEFyZ3MgZmVhdHVyZSBpcyBwcmVzZW50LlxuICAgICAgICAgICAgaWYgKGFyZ3MgPT09IG51bGwgJiYgY29udGV4dC5mbGFncy5oYXNXaXRoQXJnc0ZlYXR1cmUpIHJldHVybjtcblxuICAgICAgICAgICAgY29udGV4dC5leGVjdXRlKHsgYXJncyB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBpbmplY3RvcjogY29udGV4dC5kZXBzLmluamVjdG9yIH0sXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IHR5cGUgV2l0aFJlc3BvbnNlVXBkYXRlRmVhdHVyZUZuRGF0YTxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIC8qKiBUaGUgY3VycmVudCByZXNwb25zZSBvZiB0aGUgcXVlcnkgKi9cbiAgY3VycmVudFJlc3BvbnNlOiBSZXNwb25zZVR5cGU8VEFyZ3M+IHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFdpdGhSZXNwb25zZVVwZGF0ZUZlYXR1cmVPcHRpb25zPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IHtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsYXRlc3QgcmVzcG9uc2VcbiAgICogSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYG51bGxgLCB0aGUgcmVzcG9uc2Ugd2lsbCBub3QgYmUgdXBkYXRlZC5cbiAgICogT3RoZXJ3aXNlLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSB1cGRhdGVkIHdpdGggdGhlIHJldHVybmVkIHZhbHVlLlxuICAgKiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gYSByZWFjdGl2ZSBzaWduYWwgY29udGV4dC5cbiAgICogSWYgdGhlIHF1ZXJ5IGdldCdzIGV4ZWN1dGVkIGFmdGVyIHRoZSByZXNwb25zZSB3YXMgdXBkYXRlZCwgdGhlIHJlc3BvbnNlIHdpbGwgYmUgc2V0IHRoZSB0aGUgZnJlc2ggZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAqXG4gICAqIFRoaXMgZmVhdHVyZSBpcyBtb3N0IHVzZWZ1bCBpbiBjb21iaW5hdGlvbiB3aXRoIHdlYiBzb2NrZXRzIHdoZXJlIHRoZSBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIHNvY2tldCBtaWdodCBiZSBtb3JlIHVwLXRvLWRhdGUgdGhhbiB0aGUgZGF0YSByZWNlaXZlZCBwcmV2aW91c2x5LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBtYXRjaEV2ZW50cyA9IG15U29ja2V0LmpvaW5Sb29tKCdtYXRjaC1ldmVudHMnKTtcbiAgICpcbiAgICogY29uc3QgbXlNYXRjaFF1ZXJ5ID0gZ2V0TWF0Y2goXG4gICAqICB3aXRoQXJncygoKSA9PiAoeyBtYXRjaElkOiAxIH0pKSxcbiAgICogIHdpdGhSZXNwb25zZVVwZGF0ZSgoeyBjdXJyZW50UmVzcG9uc2UgfSkgPT4ge1xuICAgKiAgIGNvbnN0IG1hdGNoRXZlbnQgPSBtYXRjaEV2ZW50cygpO1xuICAgKlxuICAgKiAgIGlmICghbWF0Y2hFdmVudCkgcmV0dXJuIG51bGw7XG4gICAqXG4gICAqICAgLy8gRG8gc29tZSBjaGVja3MgaGVyZS4gVGhpcyBpcyBqdXN0IGEgdmVyeSBzaW1wbGUgZXhhbXBsZS5cbiAgICogICAvLyBUbyBhcHBseSBwYXJ0aWFsIHVwZGF0ZXMsIHlvdSBjYW4gdXNlIHRoZSBzcHJlYWQgb3BlcmF0b3IgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgY3VycmVudCByZXNwb25zZS5cbiAgICpcbiAgICogICByZXR1cm4gbWF0Y2hFdmVudDtcbiAgICogIH0pXG4gICAqIClcbiAgICovXG4gIHVwZGF0ZXI6IChkYXRhOiBXaXRoUmVzcG9uc2VVcGRhdGVGZWF0dXJlRm5EYXRhPFRBcmdzPikgPT4gUmVzcG9uc2VUeXBlPFRBcmdzPiB8IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3Qgd2l0aFJlc3BvbnNlVXBkYXRlID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihvcHRpb25zOiBXaXRoUmVzcG9uc2VVcGRhdGVGZWF0dXJlT3B0aW9uczxUQXJncz4pID0+IHtcbiAgcmV0dXJuIGNyZWF0ZVF1ZXJ5RmVhdHVyZTxUQXJncz4oe1xuICAgIHR5cGU6IFF1ZXJ5RmVhdHVyZVR5cGUuV0lUSF9SRVNQT05TRV9VUERBVEUsXG4gICAgZm46IChjb250ZXh0KSA9PiB7XG4gICAgICBuZXN0ZWRFZmZlY3QoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UmVzcG9uc2UgPSB1bnRyYWNrZWQoKCkgPT4gY29udGV4dC5zdGF0ZS5yZXNwb25zZSgpKTtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IG9wdGlvbnMudXBkYXRlcih7IGN1cnJlbnRSZXNwb25zZSB9KTtcblxuICAgICAgICAgIGlmIChyZXNwb25zZSA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRleHQuc3RhdGUucmVzcG9uc2Uuc2V0KHJlc3BvbnNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBpbmplY3RvcjogY29udGV4dC5kZXBzLmluamVjdG9yIH0sXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xufTtcbiJdfQ==","import { computed, signal } from '@angular/core';\nexport const setupQueryState = (options) => {\n const response = signal(null, ...(ngDevMode ? [{ debugName: \"response\" }] : []));\n const args = signal(null, ...(ngDevMode ? [{ debugName: \"args\" }] : []));\n const latestHttpEvent = signal(null, ...(ngDevMode ? [{ debugName: \"latestHttpEvent\" }] : []));\n const error = signal(null, ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n const loading = signal(null, ...(ngDevMode ? [{ debugName: \"loading\" }] : []));\n const lastTimeExecutedAt = signal(null, ...(ngDevMode ? [{ debugName: \"lastTimeExecutedAt\" }] : []));\n const request = signal(null, ...(ngDevMode ? [{ debugName: \"request\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"executionState\" }] : []));\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvcXVlcnktc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUEwQixRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBdUR6RSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBMEIsT0FBK0IsRUFBRSxFQUFFO0lBQzFGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBNkIsSUFBSSxvREFBQyxDQUFDO0lBQzFELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBNEIsSUFBSSxnREFBQyxDQUFDO0lBQ3JELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBd0MsSUFBSSwyREFBQyxDQUFDO0lBQzVFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBNEIsSUFBSSxpREFBQyxDQUFDO0lBQ3RELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBaUMsSUFBSSxtREFBQyxDQUFDO0lBQzdELE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFnQixJQUFJLDhEQUFDLENBQUM7SUFDdkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUE0QixJQUFJLG1EQUFDLENBQUM7SUFFeEQsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFvQyxHQUFHLEVBQUU7UUFDdEUsTUFBTSxlQUFlLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDbkMsTUFBTSxZQUFZLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDN0IsTUFBTSxjQUFjLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFFakMsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixPQUFPO29CQUNMLElBQUksRUFBRSxTQUFTO29CQUNmLGlCQUFpQixFQUFFLElBQUk7b0JBQ3ZCLE9BQU8sRUFBRSxjQUFjO29CQUN2QixjQUFjLEVBQUUsZUFBZTtpQkFDaEMsQ0FBQztZQUNKLENBQUM7WUFFRCxPQUFPO2dCQUNMLElBQUksRUFBRSxTQUFTO2dCQUNmLGlCQUFpQixFQUFFLEtBQUs7Z0JBQ3hCLE9BQU8sRUFBRSxjQUFjO2FBQ3hCLENBQUM7UUFDSixDQUFDO2FBQU0sSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUN4QixPQUFPO2dCQUNMLElBQUksRUFBRSxTQUFTO2dCQUNmLEtBQUssRUFBRSxZQUFZO2FBQ3BCLENBQUM7UUFDSixDQUFDO2FBQU0sSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUMzQixPQUFPO2dCQUNMLElBQUksRUFBRSxTQUFTO2dCQUNmLFFBQVEsRUFBRSxlQUFlO2FBQzFCLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUMsMERBQUMsQ0FBQztJQUVILE1BQU0sS0FBSyxHQUFzQjtRQUMvQixRQUFRO1FBQ1IsSUFBSTtRQUNKLGVBQWU7UUFDZixPQUFPO1FBQ1AsS0FBSztRQUNMLGtCQUFrQjtRQUNsQixjQUFjO1FBQ2QsTUFBTSxFQUFFO1lBQ04sT0FBTztTQUNSO0tBQ0YsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgU2lnbmFsLCBXcml0YWJsZVNpZ25hbCwgY29tcHV0ZWQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cFJlcXVlc3QsIEh0dHBSZXF1ZXN0TG9hZGluZ1N0YXRlIH0gZnJvbSAnLi9odHRwLXJlcXVlc3QnO1xuaW1wb3J0IHsgUXVlcnlBcmdzLCBSZXF1ZXN0QXJncywgUmVzcG9uc2VUeXBlIH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBRdWVyeUVycm9yUmVzcG9uc2UgfSBmcm9tICcuL3F1ZXJ5LWVycm9yLXJlc3BvbnNlJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IHR5cGUgU2V0dXBRdWVyeVN0YXRlT3B0aW9ucyA9IHt9O1xuXG5leHBvcnQgdHlwZSBRdWVyeVN0YXRlU3VidGxlPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IHtcbiAgcmVxdWVzdDogV3JpdGFibGVTaWduYWw8SHR0cFJlcXVlc3Q8VEFyZ3M+IHwgbnVsbD47XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeVN0YXRlPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IHtcbiAgcmVzcG9uc2U6IFdyaXRhYmxlU2lnbmFsPFJlc3BvbnNlVHlwZTxUQXJncz4gfCBudWxsPjtcbiAgYXJnczogV3JpdGFibGVTaWduYWw8UmVxdWVzdEFyZ3M8VEFyZ3M+IHwgbnVsbD47XG4gIGxhdGVzdEh0dHBFdmVudDogV3JpdGFibGVTaWduYWw8SHR0cEV2ZW50PFJlc3BvbnNlVHlwZTxUQXJncz4+IHwgbnVsbD47XG4gIGxvYWRpbmc6IFdyaXRhYmxlU2lnbmFsPEh0dHBSZXF1ZXN0TG9hZGluZ1N0YXRlIHwgbnVsbD47XG4gIGVycm9yOiBXcml0YWJsZVNpZ25hbDxRdWVyeUVycm9yUmVzcG9uc2UgfCBudWxsPjtcbiAgbGFzdFRpbWVFeGVjdXRlZEF0OiBXcml0YWJsZVNpZ25hbDxudW1iZXIgfCBudWxsPjtcbiAgZXhlY3V0aW9uU3RhdGU6IFNpZ25hbDxRdWVyeUV4ZWN1dGlvblN0YXRlPFRBcmdzPiB8IG51bGw+O1xuICBzdWJ0bGU6IFF1ZXJ5U3RhdGVTdWJ0bGU8VEFyZ3M+O1xufTtcblxuZXhwb3J0IHR5cGUgUXVlcnlFeGVjdXRpb25TdGF0ZVN1Y2Nlc3M8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICB0eXBlOiAnc3VjY2Vzcyc7XG4gIHJlc3BvbnNlOiBSZXNwb25zZVR5cGU8VEFyZ3M+O1xufTtcblxuZXhwb3J0IHR5cGUgUXVlcnlFeGVjdXRpb25TdGF0ZUZhaWx1cmUgPSB7XG4gIHR5cGU6ICdmYWlsdXJlJztcbiAgZXJyb3I6IFF1ZXJ5RXJyb3JSZXNwb25zZTtcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5RXhlY3V0aW9uU3RhdGVMb2FkaW5nV2l0aE5vUmVzcG9uc2UgPSB7XG4gIHR5cGU6ICdsb2FkaW5nJztcbiAgaGFzQ2FjaGVkUmVzcG9uc2U6IGZhbHNlO1xuICBsb2FkaW5nOiBIdHRwUmVxdWVzdExvYWRpbmdTdGF0ZTtcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5RXhlY3V0aW9uU3RhdGVMb2FkaW5nV2l0aENhY2hlZFJlc3BvbnNlPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IHtcbiAgdHlwZTogJ2xvYWRpbmcnO1xuICBoYXNDYWNoZWRSZXNwb25zZTogdHJ1ZTtcbiAgbG9hZGluZzogSHR0cFJlcXVlc3RMb2FkaW5nU3RhdGU7XG4gIGNhY2hlZFJlc3BvbnNlOiBSZXNwb25zZVR5cGU8VEFyZ3M+O1xufTtcblxuZXhwb3J0IHR5cGUgUXVlcnlFeGVjdXRpb25TdGF0ZUxvYWRpbmc8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID1cbiAgfCBRdWVyeUV4ZWN1dGlvblN0YXRlTG9hZGluZ1dpdGhOb1Jlc3BvbnNlXG4gIHwgUXVlcnlFeGVjdXRpb25TdGF0ZUxvYWRpbmdXaXRoQ2FjaGVkUmVzcG9uc2U8VEFyZ3M+O1xuXG5leHBvcnQgdHlwZSBRdWVyeUV4ZWN1dGlvblN0YXRlPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9XG4gIHwgUXVlcnlFeGVjdXRpb25TdGF0ZVN1Y2Nlc3M8VEFyZ3M+XG4gIHwgUXVlcnlFeGVjdXRpb25TdGF0ZUZhaWx1cmVcbiAgfCBRdWVyeUV4ZWN1dGlvblN0YXRlTG9hZGluZzxUQXJncz47XG5cbmV4cG9ydCBjb25zdCBzZXR1cFF1ZXJ5U3RhdGUgPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KG9wdGlvbnM6IFNldHVwUXVlcnlTdGF0ZU9wdGlvbnMpID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBzaWduYWw8UmVzcG9uc2VUeXBlPFRBcmdzPiB8IG51bGw+KG51bGwpO1xuICBjb25zdCBhcmdzID0gc2lnbmFsPFJlcXVlc3RBcmdzPFRBcmdzPiB8IG51bGw+KG51bGwpO1xuICBjb25zdCBsYXRlc3RIdHRwRXZlbnQgPSBzaWduYWw8SHR0cEV2ZW50PFJlc3BvbnNlVHlwZTxUQXJncz4+IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGVycm9yID0gc2lnbmFsPFF1ZXJ5RXJyb3JSZXNwb25zZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBsb2FkaW5nID0gc2lnbmFsPEh0dHBSZXF1ZXN0TG9hZGluZ1N0YXRlIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGxhc3RUaW1lRXhlY3V0ZWRBdCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3QgcmVxdWVzdCA9IHNpZ25hbDxIdHRwUmVxdWVzdDxUQXJncz4gfCBudWxsPihudWxsKTtcblxuICBjb25zdCBleGVjdXRpb25TdGF0ZSA9IGNvbXB1dGVkPFF1ZXJ5RXhlY3V0aW9uU3RhdGU8VEFyZ3M+IHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRSZXNwb25zZSA9IHJlc3BvbnNlKCk7XG4gICAgY29uc3QgY3VycmVudEVycm9yID0gZXJyb3IoKTtcbiAgICBjb25zdCBjdXJyZW50TG9hZGluZyA9IGxvYWRpbmcoKTtcblxuICAgIGlmIChjdXJyZW50TG9hZGluZykge1xuICAgICAgaWYgKGN1cnJlbnRSZXNwb25zZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICdsb2FkaW5nJyxcbiAgICAgICAgICBoYXNDYWNoZWRSZXNwb25zZTogdHJ1ZSxcbiAgICAgICAgICBsb2FkaW5nOiBjdXJyZW50TG9hZGluZyxcbiAgICAgICAgICBjYWNoZWRSZXNwb25zZTogY3VycmVudFJlc3BvbnNlLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnbG9hZGluZycsXG4gICAgICAgIGhhc0NhY2hlZFJlc3BvbnNlOiBmYWxzZSxcbiAgICAgICAgbG9hZGluZzogY3VycmVudExvYWRpbmcsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoY3VycmVudEVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZmFpbHVyZScsXG4gICAgICAgIGVycm9yOiBjdXJyZW50RXJyb3IsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoY3VycmVudFJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIHJlc3BvbnNlOiBjdXJyZW50UmVzcG9uc2UsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHN0YXRlOiBRdWVyeVN0YXRlPFRBcmdzPiA9IHtcbiAgICByZXNwb25zZSxcbiAgICBhcmdzLFxuICAgIGxhdGVzdEh0dHBFdmVudCxcbiAgICBsb2FkaW5nLFxuICAgIGVycm9yLFxuICAgIGxhc3RUaW1lRXhlY3V0ZWRBdCxcbiAgICBleGVjdXRpb25TdGF0ZSxcbiAgICBzdWJ0bGU6IHtcbiAgICAgIHJlcXVlc3QsXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gc3RhdGU7XG59O1xuIl19","import { HttpEventType } from '@angular/common/http';\nimport { 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, ...(ngDevMode ? [{ debugName: \"isAlive\" }] : []));\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 const hasCompletedResponse = currentLatestHttpEvent?.type === HttpEventType.Response;\n if (!hasCompletedResponse && !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 }, ...(ngDevMode ? [{ debugName: \"killEffectRef\", injector: deps.injector }] : [{ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc25hcHNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvcXVlcnktc25hcHNob3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkxRCxPQUFPLEVBQWMsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVE1RCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUEwQixPQUEwQyxFQUFFLEVBQUU7SUFDM0csTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFaEMsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFO1FBQ3RCLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBUSxFQUFFLENBQUMsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxtREFBQyxDQUFDO1FBRTdCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FDMUIsR0FBRyxFQUFFO1lBQ0gsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pDLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZELE1BQU0seUJBQXlCLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFFN0QsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDcEMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3RDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFDaEUsYUFBYSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFDMUQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUU1QyxJQUFJLGNBQWM7b0JBQUUsT0FBTztnQkFFM0IsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsRUFBRSxJQUFJLEtBQUssYUFBYSxDQUFDLFFBQVEsQ0FBQztnQkFDckYsSUFBSSxDQUFDLG9CQUFvQixJQUFJLENBQUMsWUFBWTtvQkFBRSxPQUFPO2dCQUVuRCxpRkFBaUY7Z0JBQ2pGLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFFeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsaURBQ0MsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLE9BQXpCLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FDNUIsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUF5QjtZQUNyQyxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDckMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO1lBQzdDLGVBQWUsRUFBRSxhQUFhLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRTtZQUMzRCxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDM0MsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQ3ZDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUU7WUFDakUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDN0IsRUFBRSxFQUFFLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7WUFDckUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxjQUFjO1NBQzdDLENBQUM7UUFFRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFFRixPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXZlbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgZWZmZWN0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUXVlcnlBcmdzLCBRdWVyeVNuYXBzaG90IH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBRdWVyeURlcGVuZGVuY2llcyB9IGZyb20gJy4vcXVlcnktZGVwZW5kZW5jaWVzJztcbmltcG9ydCB7IEludGVybmFsUXVlcnlFeGVjdXRlIH0gZnJvbSAnLi9xdWVyeS1leGVjdXRlJztcbmltcG9ydCB7IFF1ZXJ5U3RhdGUsIHNldHVwUXVlcnlTdGF0ZSB9IGZyb20gJy4vcXVlcnktc3RhdGUnO1xuaW1wb3J0IHsgbm9ybWFsaXplUXVlcnlSZXBvc2l0b3J5S2V5IH0gZnJvbSAnLi9xdWVyeS11dGlscyc7XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVF1ZXJ5U25hcHNob3RPcHRpb25zPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IHtcbiAgc3RhdGU6IFF1ZXJ5U3RhdGU8VEFyZ3M+O1xuICBkZXBzOiBRdWVyeURlcGVuZGVuY2llcztcbiAgZXhlY3V0ZTogSW50ZXJuYWxRdWVyeUV4ZWN1dGU8VEFyZ3M+O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVF1ZXJ5U25hcHNob3RGbiA9IDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4ob3B0aW9uczogQ3JlYXRlUXVlcnlTbmFwc2hvdE9wdGlvbnM8VEFyZ3M+KSA9PiB7XG4gIGNvbnN0IHsgc3RhdGUsIGRlcHMgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3Qgc25hcHNob3RGbiA9ICgpID0+IHtcbiAgICBjb25zdCBzbmFwc2hvdFN0YXRlID0gc2V0dXBRdWVyeVN0YXRlPFRBcmdzPih7fSk7XG4gICAgY29uc3QgaXNBbGl2ZSA9IHNpZ25hbCh0cnVlKTtcblxuICAgIGNvbnN0IGtpbGxFZmZlY3RSZWYgPSBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMb2FkaW5nID0gc3RhdGUubG9hZGluZygpO1xuICAgICAgICBjb25zdCBjdXJyZW50RXJyb3IgPSBzdGF0ZS5lcnJvcigpO1xuICAgICAgICBjb25zdCBjdXJyZW50UmVzcG9uc2UgPSBzdGF0ZS5yZXNwb25zZSgpO1xuICAgICAgICBjb25zdCBjdXJyZW50QXJncyA9IHN0YXRlLmFyZ3MoKTtcbiAgICAgICAgY29uc3QgY3VycmVudExhdGVzdEh0dHBFdmVudCA9IHN0YXRlLmxhdGVzdEh0dHBFdmVudCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50TGFzdFRpbWVFeGVjdXRlZEF0ID0gc3RhdGUubGFzdFRpbWVFeGVjdXRlZEF0KCk7XG5cbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICBzbmFwc2hvdFN0YXRlLmFyZ3Muc2V0KGN1cnJlbnRBcmdzKTtcbiAgICAgICAgICBzbmFwc2hvdFN0YXRlLmVycm9yLnNldChjdXJyZW50RXJyb3IpO1xuICAgICAgICAgIHNuYXBzaG90U3RhdGUubGFzdFRpbWVFeGVjdXRlZEF0LnNldChjdXJyZW50TGFzdFRpbWVFeGVjdXRlZEF0KTtcbiAgICAgICAgICBzbmFwc2hvdFN0YXRlLmxhdGVzdEh0dHBFdmVudC5zZXQoY3VycmVudExhdGVzdEh0dHBFdmVudCk7XG4gICAgICAgICAgc25hcHNob3RTdGF0ZS5sb2FkaW5nLnNldChjdXJyZW50TG9hZGluZyk7XG4gICAgICAgICAgc25hcHNob3RTdGF0ZS5yZXNwb25zZS5zZXQoY3VycmVudFJlc3BvbnNlKTtcblxuICAgICAgICAgIGlmIChjdXJyZW50TG9hZGluZykgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgaGFzQ29tcGxldGVkUmVzcG9uc2UgPSBjdXJyZW50TGF0ZXN0SHR0cEV2ZW50Py50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlO1xuICAgICAgICAgIGlmICghaGFzQ29tcGxldGVkUmVzcG9uc2UgJiYgIWN1cnJlbnRFcnJvcikgcmV0dXJuO1xuXG4gICAgICAgICAgLy8ga2lsbCB0aGUgZWZmZWN0IG9uY2UgbG9hZGluZyBpcyBkb25lIGFuZCB3ZSBlaXRoZXIgaGF2ZSBhIHJlc3BvbnNlIG9yIGFuIGVycm9yXG4gICAgICAgICAga2lsbEVmZmVjdFJlZi5kZXN0cm95KCk7XG5cbiAgICAgICAgICBpc0FsaXZlLnNldChmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHsgaW5qZWN0b3I6IGRlcHMuaW5qZWN0b3IgfSxcbiAgICApO1xuXG4gICAgY29uc3Qgc25hcHNob3Q6IFF1ZXJ5U25hcHNob3Q8VEFyZ3M+ID0ge1xuICAgICAgYXJnczogc25hcHNob3RTdGF0ZS5hcmdzLmFzUmVhZG9ubHkoKSxcbiAgICAgIHJlc3BvbnNlOiBzbmFwc2hvdFN0YXRlLnJlc3BvbnNlLmFzUmVhZG9ubHkoKSxcbiAgICAgIGxhdGVzdEh0dHBFdmVudDogc25hcHNob3RTdGF0ZS5sYXRlc3RIdHRwRXZlbnQuYXNSZWFkb25seSgpLFxuICAgICAgbG9hZGluZzogc25hcHNob3RTdGF0ZS5sb2FkaW5nLmFzUmVhZG9ubHkoKSxcbiAgICAgIGVycm9yOiBzbmFwc2hvdFN0YXRlLmVycm9yLmFzUmVhZG9ubHkoKSxcbiAgICAgIGxhc3RUaW1lRXhlY3V0ZWRBdDogc25hcHNob3RTdGF0ZS5sYXN0VGltZUV4ZWN1dGVkQXQuYXNSZWFkb25seSgpLFxuICAgICAgaXNBbGl2ZTogaXNBbGl2ZS5hc1JlYWRvbmx5KCksXG4gICAgICBpZDogbm9ybWFsaXplUXVlcnlSZXBvc2l0b3J5S2V5KG9wdGlvbnMuZXhlY3V0ZS5jdXJyZW50UmVwb3NpdG9yeUtleSksXG4gICAgICBleGVjdXRpb25TdGF0ZTogc25hcHNob3RTdGF0ZS5leGVjdXRpb25TdGF0ZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNuYXBzaG90O1xuICB9O1xuXG4gIHJldHVybiBzbmFwc2hvdEZuO1xufTtcbiJdfQ==","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 { QueryFeatureType } from './query-features';\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 == QueryFeatureType.WITH_ARGS);\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvcXVlcnktdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFlLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxRQUFRLEVBQXVCLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQXlCLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFLbEYsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qix3REFBd0QsRUFDeEQsNkNBQTZDLEdBQzlDLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFxQyxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXZGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR3pEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRzNELGdFQUFnRTtBQUNoRSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFjLEVBQUUsT0FBNkIsRUFBRSxFQUFFO0lBQzVFLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixFQUFFLENBQUM7SUFFM0MsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFeEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUN0QixFQUFFLEVBQUUsQ0FBQztJ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QUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsZ0RBQWdEO0lBQ2hELElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBRXZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycywgSHR0cFN0YXR1c0NvZGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBjb21wdXRlZCwgQ3JlYXRlRWZmZWN0T3B0aW9ucywgZWZmZWN0LCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldEFjdGl2ZUNvbnN1bWVyLCBzZXRBY3RpdmVDb25zdW1lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcHJpbWl0aXZlcy9zaWduYWxzJztcbmltcG9ydCB7IGNsYW1wIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBpc1N5bWZvbnlQYWdlcmZhbnRhT3V0T2ZSYW5nZUVycm9yIH0gZnJvbSAnLi4vLi4vc3ltZm9ueSc7XG5pbXBvcnQgeyBDcmVhdGVHcWxRdWVyeU9wdGlvbnMsIGlzQ3JlYXRlR3FsUXVlcnlPcHRpb25zIH0gZnJvbSAnLi4vZ3FsL2dxbC1xdWVyeSc7XG5pbXBvcnQgeyBDcmVhdGVHcWxRdWVyeUNyZWF0b3JPcHRpb25zLCBHcWxRdWVyeU1ldGhvZCB9IGZyb20gJy4uL2dxbC9ncWwtcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBDcmVhdGVRdWVyeU9wdGlvbnMsIFF1ZXJ5LCBRdWVyeUFyZ3MsIFJlYWRvbmx5UXVlcnksIFJlcXVlc3RBcmdzLCBSZXNwb25zZVR5cGUgfSBmcm9tICcuL3F1ZXJ5JztcbmltcG9ydCB7IEludGVybmFsQ3JlYXRlUXVlcnlDcmVhdG9yT3B0aW9ucywgUXVlcnlNZXRob2QgfSBmcm9tICcuL3F1ZXJ5LWNyZWF0b3InO1xuaW1wb3J0IHsgUXVlcnlEZXBlbmRlbmNpZXMgfSBmcm9tICcuL3F1ZXJ5LWRlcGVuZGVuY2llcyc7XG5pbXBvcnQge1xuICBxdWVyeUZlYXR1cmVVc2VkTXVsdGlwbGVUaW1lcyxcbiAgc2lsZW5jZU1pc3NpbmdXaXRoQXJnc0ZlYXR1cmVFcnJvclVzZWRCdXRXaXRoQXJnc1ByZXNlbnQsXG4gIHdpdGhBcmdzUXVlcnlGZWF0dXJlTWlzc2luZ0J1dFJvdXRlSXNGdW5jdGlvbixcbn0gZnJvbSAnLi9xdWVyeS1lcnJvcnMnO1xuaW1wb3J0IHsgSW50ZXJuYWxRdWVyeUV4ZWN1dGUgfSBmcm9tICcuL3F1ZXJ5LWV4ZWN1dGUnO1xuaW1wb3J0IHsgUXVlcnlGZWF0dXJlLCBRdWVyeUZlYXR1cmVDb250ZXh0LCBRdWVyeUZlYXR1cmVUeXBlIH0gZnJvbSAnLi9xdWVyeS1mZWF0dXJlcyc7XG5pbXBvcnQgeyBRdWVyeUtleU9yTm9uZSB9IGZyb20gJy4vcXVlcnktcmVwb3NpdG9yeSc7XG5pbXBvcnQgeyBjcmVhdGVRdWVyeVNuYXBzaG90Rm4gfSBmcm9tICcuL3F1ZXJ5LXNuYXBzaG90JztcbmltcG9ydCB7IFF1ZXJ5U3RhdGUgfSBmcm9tICcuL3F1ZXJ5LXN0YXRlJztcblxuLyoqXG4gKiBSZXR1cm5pbmcgdGhpcyBpbnNpZGUgYSB3aXRoQXJncyBmZWF0dXJlIHdpbGwgcmVzZXQgdGhlIHF1ZXJ5IGFyZ3MgdG8gbnVsbC5cbiAqIFRoaXMgd2lsbCBhbHNvIHBhdXNlIHBvbGxpbmcgYW5kIGF1dG8gcmVmcmVzaCB1bnRpbCBuZXcgYXJncyBhcmUgc2V0LlxuICovXG5leHBvcnQgY29uc3QgQ0xFQVJfUVVFUllfQVJHUyA9IFN5bWJvbCgnQ0xFQVJfUVVFUllfQVJHUycpO1xuZXhwb3J0IHR5cGUgQ2xlYXJRdWVyeUFyZ3MgPSB0eXBlb2YgQ0xFQVJfUVVFUllfQVJHUztcblxuLyoqIEEgYW5ndWxhciBlZmZlY3QgdGhhdCBjYW4gYmUgbmVzdGVkIGluc2lkZSBhbm90aGVyIGVmZmVjdCAqL1xuZXhwb3J0IGNvbnN0IG5lc3RlZEVmZmVjdCA9IChmbjogKCkgPT4gdm9pZCwgb3B0aW9ucz86IENyZWF0ZUVmZmVjdE9wdGlvbnMpID0+IHtcbiAgY29uc3QgYWN0aXZlQ29uc3VtZXIgPSBnZXRBY3RpdmVDb25zdW1lcigpO1xuXG4gIHNldEFjdGl2ZUNvbnN1bWVyKG51bGwpO1xuXG4gIGNvbnN0IGVmZiA9IGVmZmVjdCgoKSA9PiB7XG4gICAgZm4oKTtcbiAgfSwgb3B0aW9ucyk7XG5cbiAgc2V0QWN0aXZlQ29uc3VtZXIoYWN0aXZlQ29uc3VtZXIpO1xuXG4gIHJldHVybiBlZmY7XG59O1xuXG5jb25zdCBDSVJDVUxBUl9RVUVSWV9ERVBFTkRFTkNZX0VSUk9SX01FU1NBR0UgPVxuICAnUXVlcnkgd2FzIGV4ZWN1dGVkIG1vcmUgdGhhbiA1IHRpbWVzIGluIGxlc3MgdGhhbiAxMDBtcy4gVGhpcyBpcyB1c3VhbGx5IGEgc2lnbiBvZiBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuJztcblxuZXhwb3J0IGNvbnN0IGNpcmN1bGFyUXVlcnlEZXBlbmRlbmN5Q2hlY2tlciA9ICgpID0+IHtcbiAgbGV0IGxhc3RUcmlnZ2VyVHMgPSAwO1xuICBsZXQgaWxsZWdhbFdyaXRlcyA9IDA7XG5cbiAgLy8gVHlwaW5nIHRoaXMgYXMgbnVtYmVyIHdpbGwgdGhyb3cgYW4gdHlwZSBlcnJvciBkdXJpbmcgdGVzdGluZyBzaW5jZSBpdCBpcyBvZiB0eXBlIFRpbWVvdXQgaW4gYSBub2RlIGVudi5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgbGV0IHRpbWVvdXQ6IGFueSA9IG51bGw7XG5cbiAgY29uc3QgY2hlY2sgPSAoKSA9PiB7XG4gICAgY29uc3Qgbm93ID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgICBpZiAobm93IC0gbGFzdFRyaWdnZXJUcyA8IDEwMCkge1xuICAgICAgaWxsZWdhbFdyaXRlcysrO1xuXG4gICAgICBpZiAoaWxsZWdhbFdyaXRlcyA+IDUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKENJUkNVTEFSX1FVRVJZX0RFUEVOREVOQ1lfRVJST1JfTUVTU0FHRSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGFzdFRyaWdnZXJUcyA9IG5vdztcblxuICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XG5cbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpbGxlZ2FsV3JpdGVzID0gMDtcbiAgICB9LCAxMDApO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY2hlY2ssXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkQXV0b0V4ZWN1dGVRdWVyeSA9IChtZXRob2Q6IFF1ZXJ5TWV0aG9kKSA9PiB7XG4gIHJldHVybiBtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnIHx8IG1ldGhvZCA9PT0gJ09QVElPTlMnO1xufTtcblxuZXhwb3J0IGNvbnN0IHNob3VsZEF1dG9FeGVjdXRlR3FsUXVlcnkgPSAobWV0aG9kOiBHcWxRdWVyeU1ldGhvZCkgPT4ge1xuICByZXR1cm4gbWV0aG9kID09PSAnUVVFUlknO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RFeHBpcmVzSW5TZWNvbmRzID0gKGhlYWRlcnM6IEh0dHBIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IGNhY2hlQ29udHJvbCA9IGhlYWRlcnMuZ2V0KCdjYWNoZS1jb250cm9sJyk7XG4gIGNvbnN0IGFnZSA9IGhlYWRlcnMuZ2V0KCdhZ2UnKTtcbiAgY29uc3QgZXhwaXJlcyA9IGhlYWRlcnMuZ2V0KCdleHBpcmVzJyk7XG5cbiAgLy8gSW4gc2Vjb25kc1xuICBsZXQgZXhwaXJlc0luOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgbGV0IG1heEFnZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgaWYgKGNhY2hlQ29udHJvbD8uaW5jbHVkZXMoJ25vLWNhY2hlJykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjYWNoZUNvbnRyb2w/LmluY2x1ZGVzKCdtYXgtYWdlJykpIHtcbiAgICBjb25zdCBtID0gY2FjaGVDb250cm9sLnNwbGl0KCdtYXgtYWdlPScpWzFdO1xuXG4gICAgaWYgKG0pIHtcbiAgICAgIG1heEFnZSA9IHBhcnNlSW50KG0pO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjYWNoZUNvbnRyb2w/LmluY2x1ZGVzKCdzLW1heGFnZScpKSB7XG4gICAgY29uc3QgbSA9IGNhY2hlQ29udHJvbC5zcGxpdCgncy1tYXhhZ2U9JylbMV07XG5cbiAgICBpZiAobSkge1xuICAgICAgbWF4QWdlID0gcGFyc2VJbnQobSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG1heEFnZSAmJiBhZ2UpIHtcbiAgICBjb25zdCBhZ2VTZWNvbmRzID0gcGFyc2VJbnQoYWdlKTtcblxuICAgIGV4cGlyZXNJbiA9IG1heEFnZSAtIGFnZVNlY29uZHM7XG4gIH0gZWxzZSBpZiAobWF4QWdlKSB7XG4gICAgZXhwaXJlc0luID0gbWF4QWdlIC8gMjsgLy8gV2UgYXNzdW1lIHRoZSByZXNwb25zZSBpcyBoYWxmIHdheSB0byBpdHMgZXhwaXJhdGlvblxuICB9IGVsc2UgaWYgKGV4cGlyZXMpIHtcbiAgICAvLyBVc2VkIGJ5IHNvbWUgYXBpcyB0byB0ZWxsIHRoZSByZXNwb25zZSB3aWxsIG5ldmVyIGV4cGlyZVxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBsZXQgdGhlIHJlc3BvbnNlIGV4cGlyZSBhZnRlciAxIGhvdXJcbiAgICBpZiAoZXhwaXJlcyA9PT0gJy0xJykge1xuICAgICAgZXhwaXJlc0luID0gMzYwMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXhwaXJlc0RhdGUgPSBuZXcgRGF0ZShleHBpcmVzKTtcblxuICAgICAgLy8gY2hlY2sgaWYgdGhlIGRhdGUgaXMgdmFsaWRcbiAgICAgIGlmIChleHBpcmVzRGF0ZS50b1N0cmluZygpICE9PSAnSW52YWxpZCBEYXRlJykge1xuICAgICAgICBleHBpcmVzSW4gPSBNYXRoLmZsb29yKChleHBpcmVzRGF0ZS5nZXRUaW1lKCkgLSBEYXRlLm5vdygpKSAvIDEwMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHBpcmVzSW47XG59O1xuXG5leHBvcnQgdHlwZSBTaG91bGRSZXRyeVJlcXVlc3RPcHRpb25zID0ge1xuICByZXRyeUNvdW50OiBudW1iZXI7XG4gIGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZTtcbn07XG5cbmV4cG9ydCB0eXBlIFNob3VsZFJldHJ5UmVxdWVzdFJlc3VsdCA9XG4gIHwge1xuICAgICAgcmV0cnk6IGZhbHNlO1xuICAgIH1cbiAgfCB7XG4gICAgICByZXRyeTogdHJ1ZTtcbiAgICAgIGRlbGF5OiBudW1iZXI7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgU2hvdWxkUmV0cnlSZXF1ZXN0Rm4gPSAob3B0aW9uczogU2hvdWxkUmV0cnlSZXF1ZXN0T3B0aW9ucykgPT4gU2hvdWxkUmV0cnlSZXF1ZXN0UmVzdWx0O1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmV0cnlSZXF1ZXN0ID0gKFxuICBvcHRpb25zOiBTaG91bGRSZXRyeVJlcXVlc3RPcHRpb25zIHwgSHR0cEVycm9yUmVzcG9uc2UsXG4pOiBTaG91bGRSZXRyeVJlcXVlc3RSZXN1bHQgPT4ge1xuICBjb25zdCBub3JtYWxpemVkT3B0aW9ucyA9XG4gICAgb3B0aW9ucyBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlID8geyByZXRyeUNvdW50OiAwLCBlcnJvcjogb3B0aW9ucyB9IDogKG9wdGlvbnMgYXMgU2hvdWxkUmV0cnlSZXF1ZXN0T3B0aW9ucyk7XG4gIGNvbnN0IHsgcmV0cnlDb3VudCwgZXJyb3IgfSA9IG5vcm1hbGl6ZWRPcHRpb25zO1xuICBjb25zdCBkZWZhdWx0UmV0cnlEZWxheSA9IGNsYW1wKDEwMDAgKyAxMDAwICogcmV0cnlDb3VudCwgMTAwMCwgNTAwMCk7XG4gIGNvbnN0IHsgc3RhdHVzLCBlcnJvcjogZGV0YWlsLCBoZWFkZXJzIH0gPSBlcnJvcjtcblxuICAvLyBDb2RlIDAgdXN1YWxseSBtZWFucyB0aGUgaW50ZXJuZXQgY29ubmVjdGlvbiBpcyBkb3duLiBXZSByZXRyeSBpbiB0aGlzIGNhc2UuXG4gIC8vIEl0IGNvdWxkIGFsc28gYmUgYSBDT1JTIGlzc3VlIGJ1dCB0aGF0IHNob3VsZCBub3QgYmUgdGhlIGNhc2UgaW4gcHJvZHVjdGlvbi5cbiAgLy8gV2Ugd2lsbCByZXRyeSBpbiB0aGlzIGNhc2UgdW50aWwgdGhlIGNvbm5lY3Rpb24gaXMgYmFjay5cbiAgaWYgKHN0YXR1cyA9PT0gMCkge1xuICAgIHJldHVybiB7IHJldHJ5OiB0cnVlLCBkZWxheTogZGVmYXVsdFJldHJ5RGVsYXkgfTtcbiAgfVxuXG4gIC8vIERvbid0IHJldHJ5IGlmIHdlIGFscmVhZHkgcmV0cmllZCAzIHRpbWVzXG4gIGlmIChyZXRyeUNvdW50ID4gMykge1xuICAgIHJldHVybiB7IHJldHJ5OiBmYWxzZSB9O1xuICB9XG5cbiAgLy8gRG9uJ3QgcmV0cnkgaWYgaXQncyBub3QgYW4gaHR0cCBlcnJvclxuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSkge1xuICAgIHJldHVybiB7IHJldHJ5OiBmYWxzZSB9O1xuICB9XG5cbiAgLy8gUmV0cnkgb24gNXh4IGVycm9ycyAoZXhjZXB0IDUwMCBpbnRlcm5hbCBzZXJ2ZXIgZXJyb3Igc2luY2UgdGhvc2UgYXJlIHVzdWFsbHkgbm90IHJlY292ZXJhYmxlKVxuICBpZiAoc3RhdHVzID49IDUwMSkge1xuICAgIC8vIERvbid0IHJldHJ5IGlmIGEgcmVxdWVzdGVkIHBhZ2UgaXMgb3V0IG9mIHJhbmdlXG4gICAgaWYgKGlzU3ltZm9ueVBhZ2VyZmFudGFPdXRPZlJhbmdlRXJyb3IoZGV0YWlsKSkge1xuICAgICAgcmV0dXJuIHsgcmV0cnk6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcmV0cnk6IHRydWUsIGRlbGF5OiBkZWZhdWx0UmV0cnlEZWxheSB9O1xuICB9XG5cbiAgLy8gUmV0cnkgb24gNDA4IG9yIDQyNSBlcnJvcnNcbiAgaWYgKHN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuUmVxdWVzdFRpbWVvdXQgfHwgc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5Ub29FYXJseSkge1xuICAgIHJldHVybiB7IHJldHJ5OiB0cnVlLCBkZWxheTogZGVmYXVsdFJldHJ5RGVsYXkgfTtcbiAgfVxuXG4gIC8vIFJldHJ5IG9uIDQyOSBlcnJvcnNcbiAgaWYgKHN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpIHx8IGhlYWRlcnMuZ2V0KCd4LXJldHJ5LWFmdGVyJyk7XG5cbiAgICBpZiAocmV0cnlBZnRlcikge1xuICAgICAgY29uc3QgZGVsYXkgPSBwYXJzZUludChyZXRyeUFmdGVyKSAqIDEwMDA7XG4gICAgICByZXR1cm4geyByZXRyeTogdHJ1ZSwgZGVsYXk6IE51bWJlci5pc05hTihkZWxheSkgPyBkZWZhdWx0UmV0cnlEZWxheSA6IGRlbGF5IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcmV0cnk6IHRydWUsIGRlbGF5OiBkZWZhdWx0UmV0cnlEZWxheSB9O1xuICB9XG5cbiAgcmV0dXJuIHsgcmV0cnk6IGZhbHNlIH07XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeUZlYXR1cmVGbGFncyA9IHtcbiAgaGFzV2l0aEFyZ3NGZWF0dXJlOiBib29sZWFuO1xuICBzaG91bGRBdXRvRXhlY3V0ZU1ldGhvZDogYm9vbGVhbjtcbiAgc2hvdWxkQXV0b0V4ZWN1dGU6IGJvb2xlYW47XG4gIGhhc1JvdXRlRnVuY3Rpb246IGJvb2xlYW47XG4gIG9ubHlNYW51YWxFeGVjdXRpb24/OiBib29sZWFuO1xuXG4gIC8qKiBIdW1hbiByZWFkYWJsZSBtZXRob2QgbmFtZSAqL1xuICBtZXRob2Q6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRRdWVyeUZlYXR1cmVVc2FnZSA9IDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4oXG4gIG9wdGlvbnM6IENyZWF0ZVF1ZXJ5T3B0aW9uczxUQXJncz4gfCBDcmVhdGVHcWxRdWVyeU9wdGlvbnM8VEFyZ3M+LFxuKSA9PiB7XG4gIGNvbnN0IHsgY3JlYXRvciwgZmVhdHVyZXMsIHF1ZXJ5Q29uZmlnLCBjcmVhdG9ySW50ZXJuYWxzIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGhhc1dpdGhBcmdzRmVhdHVyZSA9IGZlYXR1cmVzLnNvbWUoKGYpID0+IGYudHlwZSA9PSBRdWVyeUZlYXR1cmVUeXBlLldJVEhfQVJHUyk7XG4gIGNvbnN0IHNob3VsZEF1dG9FeGVjdXRlTWV0aG9kID0gaXNDcmVhdGVHcWxRdWVyeU9wdGlvbnMob3B0aW9ucylcbiAgICA/IHNob3VsZEF1dG9FeGVjdXRlR3FsUXVlcnkob3B0aW9ucy5jcmVhdG9ySW50ZXJuYWxzLm1ldGhvZClcbiAgICA6IHNob3VsZEF1dG9FeGVjdXRlUXVlcnkob3B0aW9ucy5jcmVhdG9ySW50ZXJuYWxzLm1ldGhvZCk7XG4gIGNvbnN0IGhhc1JvdXRlRnVuY3Rpb24gPVxuICAgIHR5cGVvZiAoY3JlYXRvckludGVybmFscyBhcyBJbnRlcm5hbENyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnM8VEFyZ3M+KT8ucm91dGUgPT09ICdmdW5jdGlvbicgfHxcbiAgICB0eXBlb2YgKGNyZWF0b3IgYXMgQ3JlYXRlR3FsUXVlcnlDcmVhdG9yT3B0aW9uczxUQXJncz4pPy5yb3V0ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgY29uc3Qgc2hvdWxkQXV0b0V4ZWN1dGUgPSBzaG91bGRBdXRvRXhlY3V0ZU1ldGhvZCAmJiAhcXVlcnlDb25maWcub25seU1hbnVhbEV4ZWN1dGlvbjtcblxuICBpZiAoaGFzUm91dGVGdW5jdGlvbiAmJiAhaGFzV2l0aEFyZ3NGZWF0dXJlICYmICFxdWVyeUNvbmZpZy5zaWxlbmNlTWlzc2luZ1dpdGhBcmdzRmVhdHVyZUVycm9yKSB7XG4gICAgdGhyb3cgd2l0aEFyZ3NRdWVyeUZlYXR1cmVNaXNzaW5nQnV0Um91dGVJc0Z1bmN0aW9uKCk7XG4gIH1cblxuICBpZiAoaGFzV2l0aEFyZ3NGZWF0dXJlICYmIHF1ZXJ5Q29uZmlnLnNpbGVuY2VNaXNzaW5nV2l0aEFyZ3NGZWF0dXJlRXJyb3IpIHtcbiAgICB0aHJvdyBzaWxlbmNlTWlzc2luZ1dpdGhBcmdzRmVhdHVyZUVycm9yVXNlZEJ1dFdpdGhBcmdzUHJlc2VudCgpO1xuICB9XG5cbiAgY29uc3QgZmVhdHVyZUZuQ29udGV4dDogUXVlcnlGZWF0dXJlRmxhZ3MgPSB7XG4gICAgaGFzV2l0aEFyZ3NGZWF0dXJlLFxuICAgIHNob3VsZEF1dG9FeGVjdXRlTWV0aG9kLFxuICAgIHNob3VsZEF1dG9FeGVjdXRlLFxuICAgIGhhc1JvdXRlRnVuY3Rpb24sXG4gICAgb25seU1hbnVhbEV4ZWN1dGlvbjogcXVlcnlDb25maWcub25seU1hbnVhbEV4ZWN1dGlvbixcbiAgICBtZXRob2Q6IGlzQ3JlYXRlR3FsUXVlcnlPcHRpb25zKG9wdGlvbnMpXG4gICAgICA/IGBHUUwgJHtvcHRpb25zLmNyZWF0b3JJbnRlcm5hbHMubWV0aG9kfWBcbiAgICAgIDogb3B0aW9ucy5jcmVhdG9ySW50ZXJuYWxzLm1ldGhvZCxcbiAgfTtcblxuICByZXR1cm4gZmVhdHVyZUZuQ29udGV4dDtcbn07XG5cbmV4cG9ydCBjb25zdCBhcHBseVF1ZXJ5RmVhdHVyZXMgPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KFxuICBmZWF0dXJlczogUXVlcnlGZWF0dXJlPFRBcmdzPltdLFxuICBjb250ZXh0OiBRdWVyeUZlYXR1cmVDb250ZXh0PFRBcmdzPixcbikgPT4ge1xuICBjb25zdCBmZWF0dXJlVHlwZXMgPSBuZXcgU2V0PFF1ZXJ5RmVhdHVyZVR5cGU+KCk7XG5cbiAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XG4gICAgaWYgKGZlYXR1cmVUeXBlcy5oYXMoZmVhdHVyZS50eXBlKSkge1xuICAgICAgdGhyb3cgcXVlcnlGZWF0dXJlVXNlZE11bHRpcGxlVGltZXMoZmVhdHVyZS50eXBlKTtcbiAgICB9XG5cbiAgICBmZWF0dXJlVHlwZXMuYWRkKGZlYXR1cmUudHlwZSk7XG4gICAgZmVhdHVyZS5mbihjb250ZXh0KTtcbiAgfVxufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBjb25zdCBtYXliZUV4ZWN1dGUgPSAob3B0aW9uczogeyBmbGFnczogUXVlcnlGZWF0dXJlRmxhZ3M7IGV4ZWN1dGU6IEludGVybmFsUXVlcnlFeGVjdXRlPGFueT4gfSkgPT4ge1xuICBpZiAob3B0aW9ucy5mbGFncy5zaG91bGRBdXRvRXhlY3V0ZSAmJiAhb3B0aW9ucy5mbGFncy5oYXNSb3V0ZUZ1bmN0aW9uICYmICFvcHRpb25zLmZsYWdzLmhhc1dpdGhBcmdzRmVhdHVyZSkge1xuICAgIG9wdGlvbnMuZXhlY3V0ZSgpO1xuICB9XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVRdWVyeU9iamVjdE9wdGlvbnM8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICBzdGF0ZTogUXVlcnlTdGF0ZTxUQXJncz47XG4gIGRlcHM6IFF1ZXJ5RGVwZW5kZW5jaWVzO1xuICBleGVjdXRlOiBJbnRlcm5hbFF1ZXJ5RXhlY3V0ZTxUQXJncz47XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUXVlcnlPYmplY3QgPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KG9wdGlvbnM6IENyZWF0ZVF1ZXJ5T2JqZWN0T3B0aW9uczxUQXJncz4pID0+IHtcbiAgY29uc3QgeyBzdGF0ZSwgZXhlY3V0ZSwgZGVwcyB9ID0gb3B0aW9ucztcblxuICBjb25zdCBkZXN0cm95ID0gKCkgPT4gZGVwcy5pbmplY3Rvci5kZXN0cm95KCk7XG4gIGNvbnN0IHNldFJlc3BvbnNlID0gKHJlc3BvbnNlOiBSZXNwb25zZVR5cGU8VEFyZ3M+KSA9PiBzdGF0ZS5yZXNwb25zZS5zZXQocmVzcG9uc2UpO1xuICBjb25zdCBjcmVhdGVTbmFwc2hvdCA9IGNyZWF0ZVF1ZXJ5U25hcHNob3RGbih7IHN0YXRlLCBkZXBzLCBleGVjdXRlIH0pO1xuXG4gIGNvbnN0IGFzUmVhZG9ubHkgPSAoKSA9PiB7XG4gICAgY29uc3Qgcm9RdWVyeTogUmVhZG9ubHlRdWVyeTxUQXJncz4gPSB7XG4gICAgICBhcmdzOiBzdGF0ZS5hcmdzLmFzUmVhZG9ubHkoKSxcbiAgICAgIHJlc3BvbnNlOiBzdGF0ZS5yZXNwb25zZS5hc1JlYWRvbmx5KCksXG4gICAgICBsYXRlc3RIdHRwRXZlbnQ6IHN0YXRlLmxhdGVzdEh0dHBFdmVudC5hc1JlYWRvbmx5KCksXG4gICAgICBsb2FkaW5nOiBzdGF0ZS5sb2FkaW5nLmFzUmVhZG9ubHkoKSxcbiAgICAgIGVycm9yOiBzdGF0ZS5lcnJvci5hc1JlYWRvbmx5KCksXG4gICAgICBsYXN0VGltZUV4ZWN1dGVkQXQ6IHN0YXRlLmxhc3RUaW1lRXhlY3V0ZWRBdC5hc1JlYWRvbmx5KCksXG4gICAgICBpZDogbm9ybWFsaXplUXVlcnlSZXBvc2l0b3J5S2V5KGV4ZWN1dGUuY3VycmVudFJlcG9zaXRvcnlLZXkpLFxuICAgICAgY3JlYXRlU25hcHNob3QsXG4gICAgICBleGVjdXRpb25TdGF0ZTogc3RhdGUuZXhlY3V0aW9uU3RhdGUsXG4gICAgfTtcblxuICAgIHJldHVybiByb1F1ZXJ5O1xuICB9O1xuXG4gIGNvbnN0IHF1ZXJ5OiBRdWVyeTxUQXJncz4gPSB7XG4gICAgZXhlY3V0ZSxcbiAgICBhcmdzOiBzdGF0ZS5hcmdzLmFzUmVhZG9ubHkoKSxcbiAgICByZXNwb25zZTogc3RhdGUucmVzcG9uc2UuYXNSZWFkb25seSgpLFxuICAgIGxhdGVzdEh0dHBFdmVudDogc3RhdGUubGF0ZXN0SHR0cEV2ZW50LmFzUmVhZG9ubHkoKSxcbiAgICBsb2FkaW5nOiBzdGF0ZS5sb2FkaW5nLmFzUmVhZG9ubHkoKSxcbiAgICBlcnJvcjogc3RhdGUuZXJyb3IuYXNSZWFkb25seSgpLFxuICAgIGxhc3RUaW1lRXhlY3V0ZWRBdDogc3RhdGUubGFzdFRpbWVFeGVjdXRlZEF0LmFzUmVhZG9ubHkoKSxcbiAgICBpZDogbm9ybWFsaXplUXVlcnlSZXBvc2l0b3J5S2V5KGV4ZWN1dGUuY3VycmVudFJlcG9zaXRvcnlLZXkpLFxuICAgIGNyZWF0ZVNuYXBzaG90LFxuICAgIHJlc2V0OiBleGVjdXRlLnJlc2V0LFxuICAgIGFzUmVhZG9ubHksXG4gICAgZXhlY3V0aW9uU3RhdGU6IHN0YXRlLmV4ZWN1dGlvblN0YXRlLFxuICAgIHN1YnRsZToge1xuICAgICAgZGVzdHJveSxcbiAgICAgIHNldFJlc3BvbnNlLFxuICAgICAgcmVxdWVzdDogc3RhdGUuc3VidGxlLnJlcXVlc3QuYXNSZWFkb25seSgpLFxuICAgICAgZGVzdHJveVJlZjogZGVwcy5zY29wZURlc3Ryb3lSZWYsXG4gICAgICBpbmplY3RvcjogZGVwcy5pbmplY3RvcixcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBxdWVyeTtcbn07XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVRdWVyeVJlcG9zaXRvcnlLZXkgPSAoa2V5OiBTaWduYWw8UXVlcnlLZXlPck5vbmU+KSA9PlxuICBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgayA9IGtleSgpO1xuXG4gICAgaWYgKGsgPT09IGZhbHNlKSB7XG4gICAgICAvLyBmYWxzZSBtZWFucyB0aGUgcXVlcnkgY2Fubm90IGJlIGNhY2hlZCBhbmQgdGh1cyBpdCBpcyBub3Qgc3RvcmVkIGluIHRoZSByZXBvc2l0b3J5XG4gICAgICAvLyBXZSBnZW5lcmF0ZSBhIHJhbmRvbSBpZCBpbiB0aGlzIGNhc2UgdG8gYXZvaWQgY29uZnVzaW9uXG4gICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaztcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBzaG91bGRDYWNoZVF1ZXJ5ID0gKG1ldGhvZDogUXVlcnlNZXRob2QpID0+IHtcbiAgcmV0dXJuIG1ldGhvZCA9PT0gJ0dFVCcgfHwgbWV0aG9kID09PSAnT1BUSU9OUycgfHwgbWV0aG9kID09PSAnSEVBRCc7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRRdWVyeUNhY2hlS2V5ID0gKHJvdXRlOiBzdHJpbmcsIGFyZ3M6IFJlcXVlc3RBcmdzPFF1ZXJ5QXJncz4gfCB1bmRlZmluZWQpID0+IHtcbiAgLy8gV2UgbmVlZCB0byBoYXNoIHRoZSBib2R5IGluIGNhc2UgaXQncyBhIGdxbCBxdWVyeSBhbmQgdGhlIHF1ZXJ5IGdldCdzIHRyYW5zcG9ydGVkIGluIHRoZSBib2R5XG4gIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShhcmdzPy5ib2R5IHx8IHt9KVxuICAgIC8vIHJlcGxhY2UgYWxsIGN1cmx5IGJyYWNlcyB3aXRoIGVtcHR5IHN0cmluZ1xuICAgIC5yZXBsYWNlKC97fH0vZywgJycpXG4gICAgLy8gcmVwbGFjZSBuZXcgbGluZXMgYW5kIHdoaXRlc3BhY2VzIHdpdGggZW1wdHkgc3RyaW5nXG4gICAgLnJlcGxhY2UoL1xccy9nLCAnJyk7XG5cbiAgY29uc3Qgc2VlZCA9IGAke3JvdXRlfV8ke2JvZHl9YDtcblxuICBsZXQgaGFzaCA9IDA7XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHNlZWQpIHtcbiAgICBoYXNoID0gKE1hdGguaW11bCgzMSwgaGFzaCkgKyBjaGFyLmNoYXJDb2RlQXQoMCkpIDw8IDA7XG4gIH1cblxuICAvLyBGb3JjZSBwb3NpdGl2ZSBudW1iZXIgaGFzaC5cbiAgLy8gMjE0NzQ4MzY0NyA9IGVxdWl2YWxlbnQgb2YgSW50ZWdlci5NQVhfVkFMVUUuXG4gIGhhc2ggKz0gMjE0NzQ4MzY0NyArIDE7XG5cbiAgcmV0dXJuIGhhc2gudG9TdHJpbmcoKTtcbn07XG4iXX0=","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, ...(ngDevMode ? [{ debugName: \"currentEvent\" }] : []));\n const loading = signal(null, ...(ngDevMode ? [{ debugName: \"loading\" }] : []));\n const error = signal(null, ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n const response = signal(null, ...(ngDevMode ? [{ debugName: \"response\" }] : []));\n const lastLoadEventTime = signal(0, ...(ngDevMode ? [{ debugName: \"lastLoadEventTime\" }] : []));\n const lastLoadEventAmount = signal(0, ...(ngDevMode ? [{ debugName: \"lastLoadEventAmount\" }] : []));\n const lastExecuteTime = signal(0, ...(ngDevMode ? [{ debugName: \"lastExecuteTime\" }] : []));\n const expiresIn = signal(null, ...(ngDevMode ? [{ debugName: \"expiresIn\" }] : []));\n const isStale = computed(() => {\n const expiresInTs = expiresIn();\n return expiresInTs === null || expiresInTs < Date.now();\n }, ...(ngDevMode ? [{ debugName: \"isStale\" }] : []));\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 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 currentEvent.set(event);\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1yZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9odHRwL2h0dHAtcmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXNDLGFBQWEsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RyxPQUFPLEVBQXdCLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkxRCxPQUFPLEVBQXNCLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdEYsT0FBTyxFQUdMLHVCQUF1QixFQUN2QixrQkFBa0IsR0FDbkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0FBOEk1QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUEwQixPQUF3QyxFQUFFLEVBQUU7SUFDckcsSUFBSSx5QkFBeUIsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBRW5ELE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUV0RCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQXlELElBQUksd0RBQUMsQ0FBQztJQUMxRixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQWlDLElBQUksbURBQUMsQ0FBQztJQUM3RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQTRCLElBQUksaURBQUMsQ0FBQztJQUN0RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQTZCLElBQUksb0RBQUMsQ0FBQztJQUUxRCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxDQUFDLDZEQUFDLENBQUM7SUFDcEMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsQ0FBQywrREFBQyxDQUFDO0lBQ3RDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxDQUFDLDJEQUFDLENBQUM7SUFDbEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFnQixJQUFJLHFEQUFDLENBQUM7SUFFOUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUM1QixNQUFNLFdBQVcsR0FBRyxTQUFTLEVBQUUsQ0FBQztRQUVoQyxPQUFPLFdBQVcsS0FBSyxJQUFJLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMxRCxDQUFDLG1EQUFDLENBQUM7SUFFSCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVTtTQUNuQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFO1FBQ3pDLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtRQUNoQixjQUFjLEVBQUUsYUFBYSxFQUFFLGNBQWM7UUFDN0MsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlO1FBQy9DLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYTtRQUMzQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksSUFBSSxNQUFNO1FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTztRQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU87S0FDdkIsQ0FBQztTQUNELElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUNsQyxLQUFLLENBQUM7UUFDSixLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUU7WUFDM0IsTUFBTSxZQUFZLEdBQThCLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBRXRFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUV4RixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN2QixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBRUQsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUM7S0FDRixDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDZixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBRUosTUFBTSxPQUFPLEdBQUcsQ0FBQyxPQUFrQyxFQUFFLEVBQUU7UUFDckQsSUFBSSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDckQsaUZBQWlGO1lBQ2pGLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELHlCQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXhDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDaEMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFFekMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNWLFdBQVcsRUFBRSxlQUFlLEVBQUU7WUFDOUIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEIseUJBQXlCLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRS9DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUYsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO1FBQ25CLElBQUkseUJBQXlCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQseUJBQXlCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFeEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQXFDLEVBQUUsRUFBRTtRQUM1RCxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixLQUFLLGFBQWEsQ0FBQyxRQUFRO2dCQUN6QixDQUFDO29CQUNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xCLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUV6QixNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxZQUFZO3dCQUMzQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO3dCQUNyQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUMzQyxNQUFNLGtCQUFrQixHQUFHLHlCQUF5QixDQUFDLGdCQUFnQixDQUFDLENBQUM7b0JBQ3ZFLFNBQVMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDcEMsQ0FBQztnQkFDRCxNQUFNO1lBRVIsS0FBSyxhQUFhLENBQUMsY0FBYyxDQUFDO1lBQ2xDLEtBQUssYUFBYSxDQUFDLGdCQUFnQjtnQkFDakMsQ0FBQztvQkFDQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUIsQ0FBQztnQkFDRCxNQUFNO1lBRVIsS0FBSyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQ3hCLEtBQUssYUFBYSxDQUFDLGNBQWMsQ0FBQztZQUNsQyxLQUFLLGFBQWEsQ0FBQyxJQUFJO2dCQUNyQixDQUFDO29CQUNDLG1DQUFtQztnQkFDckMsQ0FBQztnQkFDRCxNQUFNO1FBQ1YsQ0FBQztRQUVELFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLGFBQXNCLEVBQUUsRUFBRTtRQUNsRCxNQUFNLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV6RCxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFckQsT0FBTyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUM7SUFFRixNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBd0IsRUFBRSxFQUFFO1FBQ3RELElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFvQztZQUNoRCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUc7WUFDOUMsS0FBSyxFQUFFLElBQUk7WUFDWCxhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQTRCO1lBQ3JDLFdBQVcsRUFBRSxlQUFlLEVBQUU7WUFDOUIsUUFBUTtTQUNULENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDL0IsTUFBTSx5QkFBeUIsR0FBRyxXQUFXLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztRQUNwRSxNQUFNLDJCQUEyQixHQUFHLFdBQVcsR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUNwRSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFMUQsc0ZBQXNGO1FBQ3RGLDRGQUE0RjtRQUM1RixJQUFJLDJCQUEyQixHQUFHLHVCQUF1QixFQUFFLENBQUM7WUFDMUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxZQUFZLEdBQUcseUJBQXlCLENBQUMsR0FBRyxJQUFJLENBQUM7WUFFaEUsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQzlCLFFBQVEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNuRixDQUFDO1FBRUQsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25DLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBdUI7UUFDdEMsT0FBTztRQUNQLE9BQU87UUFDUCxPQUFPLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRTtRQUM3QixLQUFLLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRTtRQUN6QixRQUFRLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRTtRQUMvQixZQUFZLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRTtRQUN2QyxPQUFPO0tBQ1IsQ0FBQztJQUVGLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBDb250ZXh0LCBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBQcm9ncmVzc0V2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyLCBTaWduYWwsIGNvbXB1dGVkLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgY2F0Y2hFcnJvciwgcmV0cnksIHRhcCwgdGhyb3dFcnJvciwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGJ1aWxkVGltZXN0YW1wRnJvbVNlY29uZHMgfSBmcm9tICcuLi8uLi9yZXF1ZXN0JztcbmltcG9ydCB7IFF1ZXJ5QXJncywgUmVxdWVzdEFyZ3MsIFJlc3BvbnNlVHlwZSB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgQ2FjaGVBZGFwdGVyRm4gfSBmcm9tICcuL3F1ZXJ5LWNsaWVudC1jb25maWcnO1xuaW1wb3J0IHsgUXVlcnlNZXRob2QgfSBmcm9tICcuL3F1ZXJ5LWNyZWF0b3InO1xuaW1wb3J0IHsgUXVlcnlFcnJvclJlc3BvbnNlLCBjcmVhdGVRdWVyeUVycm9yUmVzcG9uc2UgfSBmcm9tICcuL3F1ZXJ5LWVycm9yLXJlc3BvbnNlJztcbmltcG9ydCB7IFF1ZXJ5UmVwb3NpdG9yeURlcGVuZGVuY2llcyB9IGZyb20gJy4vcXVlcnktcmVwb3NpdG9yeSc7XG5pbXBvcnQge1xuICBTaG91bGRSZXRyeVJlcXVlc3RGbixcbiAgU2hvdWxkUmV0cnlSZXF1ZXN0T3B0aW9ucyxcbiAgZXh0cmFjdEV4cGlyZXNJblNlY29uZHMsXG4gIHNob3VsZFJldHJ5UmVxdWVzdCxcbn0gZnJvbSAnLi9xdWVyeS11dGlscyc7XG5cbmV4cG9ydCBjb25zdCBTUEVFRF9CVUZGRVJfVElNRV9JTl9NUyA9IDIwMDA7XG5cbmV4cG9ydCB0eXBlIEh0dHBSZXF1ZXN0VHJhbnNmZXJDYWNoZUNvbmZpZyA9XG4gIHwgYm9vbGVhblxuICB8IHtcbiAgICAgIGluY2x1ZGVIZWFkZXJzPzogc3RyaW5nW107XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgSHR0cFJlcXVlc3RSZXNwb25zZVR5cGUgPSAnanNvbicgfCAndGV4dCcgfCAnYmxvYicgfCAnYXJyYXlidWZmZXInO1xuXG5leHBvcnQgdHlwZSBDcmVhdGVIdHRwUmVxdWVzdERlcGVuZGVuY2llcyA9IHtcbiAgLyoqIFRoZSBodHRwIGNsaWVudCBpbnN0YW5jZSB0byB1c2UgZm9yIHRoZSByZXF1ZXN0ICovXG4gIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQ7XG5cbiAgLyoqIFRoZSBlcnJvciBoYW5kbGVyIGluc3RhbmNlIHRvIHVzZSBmb3IgdGhlIHJlcXVlc3QgKi9cbiAgbmdFcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlcjtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUh0dHBSZXF1ZXN0Q2xpZW50T3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVwb3J0IHRoZSBwcm9ncmVzcyBvZiB0aGUgcmVxdWVzdCBvciBub3QuIElmIHRoZSBmZXRjaCBiYWNrZW5kIGlzIHVzZWQsIHRoaXMgd2lsbCBvbmx5IHdvcmsgZm9yIGRvd25sb2Fkcy5cbiAgICogQHNlZSBodHRwczovL2FuZ3VsYXIuZGV2L2d1aWRlL2h0dHAvbWFraW5nLXJlcXVlc3RzI3JlY2VpdmluZy1yYXctcHJvZ3Jlc3MtZXZlbnRzXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSBjcmVkZW50aWFscyBpbiB0aGUgcmVxdWVzdCBvciBub3RcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBlaXRoZXIgYSBib29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIHRyYW5zZmVycmluZyBjYWNoZSBmb3IgZWxpZ2libGVcbiAgICogcmVxdWVzdHMgcGVyZm9ybWVkIHVzaW5nIGBIdHRwQ2xpZW50YCwgb3IgYW4gb2JqZWN0LCB3aGljaCBhbGxvd3MgdG8gY29uZmlndXJlIGNhY2hlXG4gICAqIHBhcmFtZXRlcnMsIHN1Y2ggYXMgd2hpY2ggaGVhZGVycyBzaG91bGQgYmUgaW5jbHVkZWQgKG5vIGhlYWRlcnMgYXJlIGluY2x1ZGVkIGJ5IGRlZmF1bHQpLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgd2lsbCBvdmVycmlkZSB0aGUgb3B0aW9ucyBwYXNzZWQgdG8gYHByb3ZpZGVDbGllbnRIeWRyYXRpb24oKWAgZm9yIHRoaXNcbiAgICogcGFydGljdWxhciByZXF1ZXN0XG4gICAqL1xuICB0cmFuc2ZlckNhY2hlPzogSHR0cFJlcXVlc3RUcmFuc2ZlckNhY2hlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzcG9uc2UgdHlwZSBvZiB0aGUgcmVxdWVzdFxuICAgKiBAZGVmYXVsdCAnanNvbidcbiAgICovXG4gIHJlc3BvbnNlVHlwZT86IEh0dHBSZXF1ZXN0UmVzcG9uc2VUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGV4dCBvZiB0aGUgcmVxdWVzdFxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICogQHNlZSBodHRwczovL2FuZ3VsYXIuZGV2L2d1aWRlL2h0dHAvaW50ZXJjZXB0b3JzI3JlcXVlc3QtYW5kLXJlc3BvbnNlLW1ldGFkYXRhXG4gICAqL1xuICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVIdHRwUmVxdWVzdE9wdGlvbnM8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICAvKiogVGhlIEhUVFAgbWV0aG9kIG9mIHRoZSByZXF1ZXN0ICovXG4gIG1ldGhvZDogUXVlcnlNZXRob2Q7XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxsIHBhdGggb2YgdGhlIHJlcXVlc3RcbiAgICogQGV4YW1wbGUgJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tL3YxL3VzZXJzJ1xuICAgKi9cbiAgZnVsbFBhdGg6IHN0cmluZztcblxuICAvKiogVGhlIGRhdGEgb2YgdGhlIHJlcXVlc3QgKi9cbiAgYXJncz86IFJlcXVlc3RBcmdzPFRBcmdzPiB8IG51bGw7XG5cbiAgLyoqIFRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIHJlcXVlc3QgKi9cbiAgZGVwZW5kZW5jaWVzOiBRdWVyeVJlcG9zaXRvcnlEZXBlbmRlbmNpZXM7XG5cbiAgLyoqIFRoZSBjbGllbnQgb3B0aW9ucyBvZiB0aGUgcmVxdWVzdCAqL1xuICBjbGllbnRPcHRpb25zPzogQ3JlYXRlSHR0cFJlcXVlc3RDbGllbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FjaGUgYWRhcHRlciBmdW5jdGlvbiB0byB1c2UgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEBkZWZhdWx0IGV4dHJhY3RFeHBpcmVzSW5TZWNvbmRzKClcbiAgICovXG4gIGNhY2hlQWRhcHRlcj86IENhY2hlQWRhcHRlckZuO1xuXG4gIC8qKlxuICAgKiBUaGUgcmV0cnkgZnVuY3Rpb24gdG8gdXNlIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAZGVmYXVsdCBzaG91bGRSZXRyeVJlcXVlc3QoKVxuICAgKi9cbiAgcmV0cnlGbj86IFNob3VsZFJldHJ5UmVxdWVzdEZuO1xufTtcblxuZXhwb3J0IHR5cGUgSHR0cFJlcXVlc3RMb2FkaW5nU3RhdGUgPSB7XG4gIC8qKiBUaGUgdGltZSB3aGVuIHRoZSByZXF1ZXN0IHdhcyBleGVjdXRlZCBpbiBtcyAqL1xuICBleGVjdXRlVGltZTogbnVtYmVyO1xuXG4gIC8qKiBUaGUgcHJvZ3Jlc3Mgb2YgdGhlIHJlcXVlc3QuIE51bGwgaWYgcmVwb3J0UHJvZ3Jlc3MgaXMgZmFsc2Ugb3IgcHJvZ3Jlc3MgaXMgbm90IGF2YWlsYWJsZSAvIHVuc3VwcG9ydGVkICovXG4gIHByb2dyZXNzOiBIdHRwUmVxdWVzdExvYWRpbmdQcm9ncmVzc1N0YXRlIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIEh0dHBSZXF1ZXN0TG9hZGluZ1Byb2dyZXNzU3RhdGUgPSB7XG4gIC8qKiBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkICovXG4gIHRvdGFsOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgKi9cbiAgbG9hZGVkOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBwZXJjZW50YWdlIG9mIHRoZSB0cmFuc2ZlciB0aGF0IGlzIGNvbXBsZXRlZCAqL1xuICBwZXJjZW50YWdlOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBzcGVlZCBvZiB0aGUgdHJhbnNmZXIgaW4gYnl0ZXMgcGVyIG1pbGxpc2Vjb25kICovXG4gIHNwZWVkOiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKiBUaGUgZXN0aW1hdGVkIHJlbWFpbmluZyB0aW1lIGluIG1pbGxpc2Vjb25kcyAqL1xuICByZW1haW5pbmdUaW1lOiBudW1iZXIgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgSHR0cFJlcXVlc3Q8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICAvKiogRXhlY3V0ZXMgdGhlIHJlcXVlc3QgKi9cbiAgZXhlY3V0ZTogKG9wdGlvbnM/OiB7IGFsbG93Q2FjaGU/OiBib29sZWFuIH0pID0+IGJvb2xlYW47XG5cbiAgLyoqIERlc3Ryb3lzIHRoZSByZXF1ZXN0IChjYW5jZWxzIGl0IGlmIGluIHByb2dyZXNzKSAqL1xuICBkZXN0cm95OiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKiBUaGUgbG9hZGluZyBzdGF0ZSBvZiB0aGUgcmVxdWVzdCAqL1xuICBsb2FkaW5nOiBTaWduYWw8SHR0cFJlcXVlc3RMb2FkaW5nU3RhdGUgfCBudWxsPjtcblxuICAvKiogVGhlIGVycm9yIHN0YXRlIG9mIHRoZSByZXF1ZXN0ICovXG4gIGVycm9yOiBTaWduYWw8UXVlcnlFcnJvclJlc3BvbnNlIHwgbnVsbD47XG5cbiAgLyoqIFRoZSByZXNwb25zZSBzdGF0ZSBvZiB0aGUgcmVxdWVzdCAqL1xuICByZXNwb25zZTogU2lnbmFsPFJlc3BvbnNlVHlwZTxUQXJncz4gfCBudWxsPjtcblxuICAvKiogVGhlIGN1cnJlbnQgZXZlbnQgb2YgdGhlIHJlcXVlc3QgKi9cbiAgY3VycmVudEV2ZW50OiBTaWduYWw8SHR0cEV2ZW50PFJlc3BvbnNlVHlwZTxUQXJncz4+IHwgSHR0cEVycm9yRXZlbnQgfCBudWxsPjtcblxuICAvKiogV2hldGhlciB0aGUgcmVxdWVzdCBpcyBzdGFsZSBvciBub3QgYWthIHRoZSBjYWNoZSBoZWFkZXIgaGFzIGV4cGlyZWQgKi9cbiAgaXNTdGFsZTogU2lnbmFsPGJvb2xlYW4+O1xufTtcblxuLyoqIEEgY3VzdG9tIGVycm9yIGV2ZW50IHNpbmNlIHRoZSBBbmd1bGFyIGh0dHAgY2xpZW50IGRvZXMgbm90IHByb3ZpZGUgYSBzcGVjaWZpYyBldmVudCBmb3IgZXJyb3JzICovXG5leHBvcnQgdHlwZSBIdHRwRXJyb3JFdmVudCA9IHtcbiAgdHlwZTogJ2Vycm9yJztcbiAgZXJyb3I6IFF1ZXJ5RXJyb3JSZXNwb25zZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVIdHRwUmVxdWVzdCA9IDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4ob3B0aW9uczogQ3JlYXRlSHR0cFJlcXVlc3RPcHRpb25zPFRBcmdzPikgPT4ge1xuICBsZXQgY3VycmVudFN0cmVhbVN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICBjb25zdCB7IGFyZ3MsIGNsaWVudE9wdGlvbnMsIGRlcGVuZGVuY2llcyB9ID0gb3B0aW9ucztcblxuICBjb25zdCBjdXJyZW50RXZlbnQgPSBzaWduYWw8SHR0cEV2ZW50PFJlc3BvbnNlVHlwZTxUQXJncz4+IHwgSHR0cEVycm9yRXZlbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgbG9hZGluZyA9IHNpZ25hbDxIdHRwUmVxdWVzdExvYWRpbmdTdGF0ZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBlcnJvciA9IHNpZ25hbDxRdWVyeUVycm9yUmVzcG9uc2UgfCBudWxsPihudWxsKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBzaWduYWw8UmVzcG9uc2VUeXBlPFRBcmdzPiB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGxhc3RMb2FkRXZlbnRUaW1lID0gc2lnbmFsKDApO1xuICBjb25zdCBsYXN0TG9hZEV2ZW50QW1vdW50ID0gc2lnbmFsKDApO1xuICBjb25zdCBsYXN0RXhlY3V0ZVRpbWUgPSBzaWduYWwoMCk7XG4gIGNvbnN0IGV4cGlyZXNJbiA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBpc1N0YWxlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGV4cGlyZXNJblRzID0gZXhwaXJlc0luKCk7XG5cbiAgICByZXR1cm4gZXhwaXJlc0luVHMgPT09IG51bGwgfHwgZXhwaXJlc0luVHMgPCBEYXRlLm5vdygpO1xuICB9KTtcblxuICBjb25zdCBzdHJlYW0gPSBkZXBlbmRlbmNpZXMuaHR0cENsaWVudFxuICAgIC5yZXF1ZXN0KG9wdGlvbnMubWV0aG9kLCBvcHRpb25zLmZ1bGxQYXRoLCB7XG4gICAgICBvYnNlcnZlOiAnZXZlbnRzJyxcbiAgICAgIGJvZHk6IGFyZ3M/LmJvZHksXG4gICAgICByZXBvcnRQcm9ncmVzczogY2xpZW50T3B0aW9ucz8ucmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGNsaWVudE9wdGlvbnM/LndpdGhDcmVkZW50aWFscyxcbiAgICAgIHRyYW5zZmVyQ2FjaGU6IGNsaWVudE9wdGlvbnM/LnRyYW5zZmVyQ2FjaGUsXG4gICAgICByZXNwb25zZVR5cGU6IGNsaWVudE9wdGlvbnM/LnJlc3BvbnNlVHlwZSB8fCAnanNvbicsXG4gICAgICBjb250ZXh0OiBjbGllbnRPcHRpb25zPy5jb250ZXh0LFxuICAgICAgaGVhZGVyczogYXJncz8uaGVhZGVycyxcbiAgICB9KVxuICAgIC5waXBlKFxuICAgICAgdGFwKChldmVudCkgPT4gdXBkYXRlU3RhdGUoZXZlbnQpKSxcbiAgICAgIHJldHJ5KHtcbiAgICAgICAgZGVsYXk6IChlcnJvciwgcmV0cnlDb3VudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJldHJ5T3B0aW9uczogU2hvdWxkUmV0cnlSZXF1ZXN0T3B0aW9ucyA9IHsgZXJyb3IsIHJldHJ5Q291bnQgfTtcblxuICAgICAgICAgIGNvbnN0IHJldHJ5UmVzdWx0ID0gb3B0aW9ucy5yZXRyeUZuPy4ocmV0cnlPcHRpb25zKSB8fCBzaG91bGRSZXRyeVJlcXVlc3QocmV0cnlPcHRpb25zKTtcblxuICAgICAgICAgIGlmICghcmV0cnlSZXN1bHQucmV0cnkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGltZXIocmV0cnlSZXN1bHQuZGVsYXkpO1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlKSA9PiB7XG4gICAgICAgIHVwZGF0ZUVycm9yU3RhdGUoZSk7XG5cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZSk7XG4gICAgICB9KSxcbiAgICApO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSAob3B0aW9ucz86IHsgYWxsb3dDYWNoZT86IGJvb2xlYW4gfSkgPT4ge1xuICAgIGlmIChsb2FkaW5nKCkgfHwgKCFpc1N0YWxlKCkgJiYgb3B0aW9ucz8uYWxsb3dDYWNoZSkpIHtcbiAgICAgIC8vIERvIG5vdCBleGVjdXRlIGlmIHRoZXJlIGlzIGFscmVhZHkgYSByZXF1ZXN0IGluIHByb2dyZXNzIG9yIGNhY2hpbmcgaXMgYWxsb3dlZFxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGN1cnJlbnRTdHJlYW1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgIGxhc3RFeGVjdXRlVGltZS5zZXQoRGF0ZS5ub3coKSk7XG4gICAgbGFzdExvYWRFdmVudFRpbWUuc2V0KGxhc3RFeGVjdXRlVGltZSgpKTtcblxuICAgIGxvYWRpbmcuc2V0KHtcbiAgICAgIGV4ZWN1dGVUaW1lOiBsYXN0RXhlY3V0ZVRpbWUoKSxcbiAgICAgIHByb2dyZXNzOiBudWxsLFxuICAgIH0pO1xuICAgIGVycm9yLnNldChudWxsKTtcbiAgICBleHBpcmVzSW4uc2V0KG51bGwpO1xuXG4gICAgY3VycmVudFN0cmVhbVN1YnNjcmlwdGlvbiA9IHN0cmVhbS5zdWJzY3JpYmUoKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgaWYgKGN1cnJlbnRTdHJlYW1TdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY3VycmVudFN0cmVhbVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlU3RhdGUgPSAoZXZlbnQ6IEh0dHBFdmVudDxSZXNwb25zZVR5cGU8VEFyZ3M+PikgPT4ge1xuICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlOlxuICAgICAgICB7XG4gICAgICAgICAgbG9hZGluZy5zZXQobnVsbCk7XG4gICAgICAgICAgcmVzcG9uc2Uuc2V0KGV2ZW50LmJvZHkpO1xuXG4gICAgICAgICAgY29uc3QgZXhwaXJlc0luU2Vjb25kcyA9IG9wdGlvbnMuY2FjaGVBZGFwdGVyXG4gICAgICAgICAgICA/IG9wdGlvbnMuY2FjaGVBZGFwdGVyKGV2ZW50LmhlYWRlcnMpXG4gICAgICAgICAgICA6IGV4dHJhY3RFeHBpcmVzSW5TZWNvbmRzKGV2ZW50LmhlYWRlcnMpO1xuICAgICAgICAgIGNvbnN0IGV4cGlyZXNJblRpbWVzdGFtcCA9IGJ1aWxkVGltZXN0YW1wRnJvbVNlY29uZHMoZXhwaXJlc0luU2Vjb25kcyk7XG4gICAgICAgICAgZXhwaXJlc0luLnNldChleHBpcmVzSW5UaW1lc3RhbXApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3M6XG4gICAgICBjYXNlIEh0dHBFdmVudFR5cGUuRG93bmxvYWRQcm9ncmVzczpcbiAgICAgICAge1xuICAgICAgICAgIHVwZGF0ZUxvYWRpbmdTdGF0ZShldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5TZW50OlxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlSGVhZGVyOlxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlVzZXI6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZXNlIGV2ZW50c1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGN1cnJlbnRFdmVudC5zZXQoZXZlbnQpO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZUVycm9yU3RhdGUgPSAoZXJyb3JSZXNwb25zZTogdW5rbm93bikgPT4ge1xuICAgIGNvbnN0IGVycm9yUmVzID0gY3JlYXRlUXVlcnlFcnJvclJlc3BvbnNlKGVycm9yUmVzcG9uc2UpO1xuXG4gICAgZXJyb3Iuc2V0KGVycm9yUmVzKTtcbiAgICBsb2FkaW5nLnNldChudWxsKTtcbiAgICBjdXJyZW50RXZlbnQuc2V0KHsgdHlwZTogJ2Vycm9yJywgZXJyb3I6IGVycm9yUmVzIH0pO1xuXG4gICAgb3B0aW9ucy5kZXBlbmRlbmNpZXMubmdFcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZXJyb3JSZXMucmF3KTtcbiAgfTtcblxuICBjb25zdCB1cGRhdGVMb2FkaW5nU3RhdGUgPSAoZXZlbnQ6IEh0dHBQcm9ncmVzc0V2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LnRvdGFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmVzczogSHR0cFJlcXVlc3RMb2FkaW5nUHJvZ3Jlc3NTdGF0ZSA9IHtcbiAgICAgIHRvdGFsOiBldmVudC50b3RhbCxcbiAgICAgIGxvYWRlZDogZXZlbnQubG9hZGVkLFxuICAgICAgcGVyY2VudGFnZTogKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsKSAqIDEwMCxcbiAgICAgIHNwZWVkOiBudWxsLFxuICAgICAgcmVtYWluaW5nVGltZTogbnVsbCxcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RhdGU6IEh0dHBSZXF1ZXN0TG9hZGluZ1N0YXRlID0ge1xuICAgICAgZXhlY3V0ZVRpbWU6IGxhc3RFeGVjdXRlVGltZSgpLFxuICAgICAgcHJvZ3Jlc3MsXG4gICAgfTtcblxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBlbGFwc2VkVGltZVNpbmNlTGFzdEV2ZW50ID0gY3VycmVudFRpbWUgLSBsYXN0TG9hZEV2ZW50VGltZSgpO1xuICAgIGNvbnN0IGVsYXBzZWRUaW1lU2luY2VMYXN0RXhlY3V0ZSA9IGN1cnJlbnRUaW1lIC0gbGFzdEV4ZWN1dGVUaW1lKCk7XG4gICAgY29uc3QgbG9hZGVkQW1vdW50ID0gZXZlbnQubG9hZGVkIC0gbGFzdExvYWRFdmVudEFtb3VudCgpO1xuXG4gICAgLy8gV2Ugb25seSB3YW50IHRvIGNhbGN1bGF0ZSBzcGVlZCBhbmQgcmVtYWluaW5nIHRpbWUgYWZ0ZXIgMiBzZWNvbmRzIG9mIHRoZSBleGVjdXRpb25cbiAgICAvLyBUaGlzIGlzIHRvIGF2b2lkIHNob3dpbmcgaW5jb3JyZWN0IHNwZWVkIGFuZCByZW1haW5pbmcgdGltZSB3aGVuIHRoZSByZXF1ZXN0IGlzIHZlcnkgZmFzdFxuICAgIGlmIChlbGFwc2VkVGltZVNpbmNlTGFzdEV4ZWN1dGUgPiBTUEVFRF9CVUZGRVJfVElNRV9JTl9NUykge1xuICAgICAgY29uc3Qgc3BlZWQgPSAobG9hZGVkQW1vdW50IC8gZWxhcHNlZFRpbWVTaW5jZUxhc3RFdmVudCkgKiAxMDAwO1xuXG4gICAgICBwcm9ncmVzcy5zcGVlZCA9IHNwZWVkICogMTAwMDtcbiAgICAgIHByb2dyZXNzLnJlbWFpbmluZ1RpbWUgPSBNYXRoLnJvdW5kKChldmVudC50b3RhbCAtIGV2ZW50LmxvYWRlZCkgLyBzcGVlZCkgKiAxMDAwO1xuICAgIH1cblxuICAgIGxhc3RMb2FkRXZlbnRUaW1lLnNldChjdXJyZW50VGltZSk7XG4gICAgbGFzdExvYWRFdmVudEFtb3VudC5zZXQoZXZlbnQubG9hZGVkKTtcblxuICAgIGxvYWRpbmcuc2V0KHN0YXRlKTtcbiAgfTtcblxuICBjb25zdCBodHRwUmVxdWVzdDogSHR0cFJlcXVlc3Q8VEFyZ3M+ID0ge1xuICAgIGV4ZWN1dGUsXG4gICAgZGVzdHJveSxcbiAgICBsb2FkaW5nOiBsb2FkaW5nLmFzUmVhZG9ubHkoKSxcbiAgICBlcnJvcjogZXJyb3IuYXNSZWFkb25seSgpLFxuICAgIHJlc3BvbnNlOiByZXNwb25zZS5hc1JlYWRvbmx5KCksXG4gICAgY3VycmVudEV2ZW50OiBjdXJyZW50RXZlbnQuYXNSZWFkb25seSgpLFxuICAgIGlzU3RhbGUsXG4gIH07XG5cbiAgcmV0dXJuIGh0dHBSZXF1ZXN0O1xufTtcbiJdfQ==","/* 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 { QueryFeatureType, 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([], ...(ngDevMode ? [{ debugName: \"queries\" }] : []));\n const lastQuery = signal(null, ...(ngDevMode ? [{ debugName: \"lastQuery\" }] : []));\n const firstQuery = computed(() => queries()[0] ?? null, ...(ngDevMode ? [{ debugName: \"firstQuery\" }] : []));\n const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WITH_ARGS);\n const hasWithOptimisticUpdateFeature = features.some((f) => f.type == QueryFeatureType.WITH_RESPONSE_UPDATE);\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()), ...(ngDevMode ? [{ debugName: \"loading\" }] : []));\n const error = computed(() => queries()\n .map((q) => q.error())\n .find((e) => e !== null) ?? null, ...(ngDevMode ? [{ debugName: \"error\" }] : []));\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvcXVlcnktc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUlySCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQWdCLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBNkg1RSx1RkFBdUY7QUFDdkYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBK0IsU0FBWSxFQUFFLEVBQUUsQ0FDbkYsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUF3QixDQUFDO0FBRXhFLG9HQUFvRztBQUNwRyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUE0QyxTQUFZLEVBQUUsRUFBRSxDQUNwRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUE0QyxDQUFDO0FBRWxHLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBTTlCLE9BQTZELEVBQzdELEVBQUU7SUFHRixNQUFNLEVBQ0osSUFBSSxFQUNKLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNO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dC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIEluamVjdG9yLCBydW5JbkluamVjdGlvbkNvbnRleHQsIFNpZ25hbCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFueU5ld1F1ZXJ5LCBSZXF1ZXN0QXJncywgUmVzcG9uc2VUeXBlIH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBBbnlRdWVyeUNyZWF0b3IsIFF1ZXJ5QXJnc09mLCBSdW5RdWVyeUNyZWF0b3IgfSBmcm9tICcuL3F1ZXJ5LWNyZWF0b3InO1xuaW1wb3J0IHsgUXVlcnlFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi9xdWVyeS1lcnJvci1yZXNwb25zZSc7XG5pbXBvcnQgeyBxdWVyeVN0YWNrV2l0aEFyZ3NVc2VkLCBxdWVyeVN0YWNrV2l0aFJlc3BvbnNlVXBkYXRlVXNlZCB9IGZyb20gJy4vcXVlcnktZXJyb3JzJztcbmltcG9ydCB7IFF1ZXJ5RmVhdHVyZSwgUXVlcnlGZWF0dXJlVHlwZSwgd2l0aEFyZ3MgfSBmcm9tICcuL3F1ZXJ5LWZlYXR1cmVzJztcblxuZXhwb3J0IHR5cGUgUXVlcnlTdGFja1N1YnRsZTxUQ3JlYXRvciBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvciwgVFF1ZXJ5IGV4dGVuZHMgQW55TmV3UXVlcnk+ID0ge1xuICAvKiogQ3JlYXRlIGEgbmV3IHF1ZXJ5IHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4gWW91IHNob3VsZCBhbHdheXMgcHJlZmVyIHRoZSBgYXJnc2Agb3B0aW9uIGluc3RlYWQgb2YgdGhpcy4gKi9cbiAgcnVuV2l0aEFyZ3M6IChcbiAgICBhcmdzOiBSZXF1ZXN0QXJnczxRdWVyeUFyZ3NPZjxUQ3JlYXRvcj4+IHwgUmVxdWVzdEFyZ3M8UXVlcnlBcmdzT2Y8VENyZWF0b3I+PltdIHwgbnVsbCxcbiAgKSA9PiBUUXVlcnkgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgUXVlcnlTdGFjazxUUXVlcnkgZXh0ZW5kcyBBbnlOZXdRdWVyeSwgVENyZWF0b3IgZXh0ZW5kcyBBbnlRdWVyeUNyZWF0b3IsIFRUcmFuc2Zvcm0+ID0ge1xuICAvKiogQ29udGFpbnMgYWxsIHF1ZXJpZXMgaW4gdGhlIHN0YWNrLiAqL1xuICBxdWVyaWVzOiBTaWduYWw8VFF1ZXJ5W10+O1xuXG4gIC8qKiBDb250YWlucyB0aGUgZmlyc3QgcXVlcnkgaW4gdGhlIHN0YWNrLiAqL1xuICBmaXJzdFF1ZXJ5OiBTaWduYWw8VFF1ZXJ5IHwgbnVsbD47XG5cbiAgLyoqIENvbnRhaW5zIHRoZSBsYXN0IHF1ZXJ5IGluIHRoZSBzdGFjay4gVXNlZnVsIGZvciBnZXR0aW5nIGN1cnJlbnQgcGFnaW5hdGlvbiB2YWx1ZXMuICovXG4gIGxhc3RRdWVyeTogU2lnbmFsPFRRdWVyeSB8IG51bGw+O1xuXG4gIC8qKiBUcnVlIGlmIGFueSBxdWVyeSBpbiB0aGUgc3RhY2sgaXMgbG9hZGluZy4gKi9cbiAgbG9hZGluZzogU2lnbmFsPGJvb2xlYW4+O1xuXG4gIC8qKiBDb250YWlucyB0aGUgZmlyc3QgZXJyb3IgdGhhdCBvY2N1cnJlZCBpbiB0aGUgc3RhY2suICovXG4gIGVycm9yOiBTaWduYWw8UXVlcnlFcnJvclJlc3BvbnNlIHwgbnVsbD47XG5cbiAgLyoqIENvbnRhaW5zIHRoZSByZXNwb25zZXMgb2YgYWxsIHF1ZXJpZXMgaW4gdGhlIHN0YWNrLiBXaWxsIGJlIGBudWxsYCBmb3IgcXVlcmllcyB0aGF0IGFyZSBsb2FkaW5nIG9yIGVycm9yZWQuICovXG4gIHJlc3BvbnNlOiBTaWduYWw8VFRyYW5zZm9ybT47XG5cbiAgLyoqIEV4ZWN1dGVzIGFsbCBxdWVyaWVzIGluIHRoZSBzdGFjay4gKi9cbiAgZXhlY3V0ZTogKG9wdGlvbnM/OiB7IGFsbG93Q2FjaGU/OiBib29sZWFuIH0pID0+IHZvaWQ7XG5cbiAgLyoqIERlc3Ryb3lzIGFsbCBxdWVyaWVzIGluIHRoZSBzdGFjayBhbmQgZW1wdGllcyBpdC4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGlmIGBhcHBlbmRgIGlzIHRydWUuICovXG4gIGNsZWFyOiAoKSA9PiB2b2lkO1xuXG4gIC8qKiBBZHZhbmNlZCBxdWVyeSBzdGFjayBmZWF0dXJlcy4gKipXQVJOSU5HISoqIEluY29ycmVjdGx5IHVzaW5nIHRoZXNlIGZlYXR1cmVzIHdpbGwgbGlrZWx5ICoqQlJFQUsqKiB5b3VyIGFwcGxpY2F0aW9uLiBZb3UgaGF2ZSBiZWVuIHdhcm5lZCEgKi9cbiAgc3VidGxlOiBRdWVyeVN0YWNrU3VidGxlPFRDcmVhdG9yLCBUUXVlcnk+O1xufTtcblxuZXhwb3J0IHR5cGUgQW55UXVlcnlTdGFjayA9IFF1ZXJ5U3RhY2s8QW55TmV3UXVlcnksIEFueVF1ZXJ5Q3JlYXRvciwgYW55PjtcblxuZXhwb3J0IHR5cGUgQ3JlYXRlUXVlcnlTdGFja09wdGlvbnM8XG4gIFRDcmVhdG9yIGV4dGVuZHMgQW55UXVlcnlDcmVhdG9yLFxuICBURGVwcyBleHRlbmRzICgpID0+IGFueSxcbiAgVFRyYW5zZm9ybSA9IChSZXNwb25zZVR5cGU8UXVlcnlBcmdzT2Y8VENyZWF0b3I+PiB8IG51bGwpW10sXG4+ID0ge1xuICAvKipcbiAgICogVGhlIHF1ZXJ5IGNyZWF0b3IgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBxdWVyeSBzdGFjay5cbiAgICovXG4gIHF1ZXJ5Q3JlYXRvcjogVENyZWF0b3I7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXBlbmRlbmNpZXMgdGhhdCBzaG91bGQgdHJpZ2dlciBhIG5ldyBxdWVyeSBzdGFjayBjcmVhdGlvbi5cbiAgICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdHJlYXRlZCBsaWtlIGEgY29tcHV0ZWQgZnVuY3Rpb24uIEl0IHJlYWN0cyB0byBzaWduYWwgY2hhbmdlcy5cbiAgICogVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBgYXJnc2AgZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGNhbiBiZSBpZ25vcmVkIGlmIGBhcHBlbmRgIGlzIGZhbHNlLlxuICAgKi9cbiAgZGVwZW5kZW5jaWVzPzogVERlcHM7XG5cbiAgLyoqXG4gICAqIFRoZSBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBhbGwgcXVlcmllcyBpbiB0aGUgc3RhY2suXG4gICAqXG4gICAqIEB0aHJvd3MgSWYgdGhlIGB3aXRoQXJnc2AgZmVhdHVyZSBpcyB1c2VkLiBUaGlzIGZlYXR1cmUgaXMgaW50ZXJuYWxseSB1c2VkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBEdWUgdG8gbGltaXRhdGlvbnMgaW4gVHlwZVNjcmlwdCwgeW91IGhhdmUgdG8gbWFudWFsbHkgYWRkIHRoZSBuZWVkZWQgZ2VuZXJpYyB0eXBlcyBpZiBuZWVkZWQuXG4gICAqIGZlYXR1cmVzOiBbRS53aXRoU3VjY2Vzc0hhbmRsaW5nPEdldFBvc3RRdWVyeUFyZ3M+KHsgaGFuZGxlcjogKHBvc3QpID0+IGNvbnNvbGUubG9nKHBvc3QudGl0bGUpIH0pXVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBJZiB0eXBpbmdzIGFyZSBub3QgbmVlZGVkLCB5b3UgY2FuIHVzZSB0aGUgZmVhdHVyZSB3aXRob3V0IGdlbmVyaWNzLlxuICAgKiBmZWF0dXJlczogW0Uud2l0aFBvbGxpbmcoeyBpbnRlcnZhbDogNTAwMCB9KV1cbiAgICovXG4gIGZlYXR1cmVzPzogUXVlcnlGZWF0dXJlPGFueT5bXTtcblxuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyB0byBjcmVhdGUgcXVlcmllcyB3aXRoLlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB0cmVhdGVkIGxpa2UgYSBjb21wdXRlZCBmdW5jdGlvbi4gSXQgcmVhY3RzIHRvIHNpZ25hbCBjaGFuZ2VzLlxuICAgKiBJZiBhIHNpZ25hbCBjaGFuZ2VzLCBhIG5ldyBxdWVyeSB3aWxsIGJlIGNyZWF0ZWQgKGFuZCBhcHBlbmRlZCB0byB0aGUgZXhpc3Rpbmcgb25lcyBpZiBgYXBwZW5kYCBpcyB0cnVlKS5cbiAgICogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGBudWxsYCwgdGhlIGFyZ3Mgd2lsbCBiZSBpZ25vcmVkLlxuICAgKiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXksIG11bHRpcGxlIHF1ZXJpZXMgd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBPbmUgcXVlcnlcbiAgICogKCkgPT4gKHsgcXVlcnlQYXJhbXM6IHsgcG9zdElkOiBteUlkKCkgfSB9KSxcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gTXVsdGlwbGUgcXVlcmllcyAodGhlc2UgY2FuIG9mIGNhdXNlIGFsc28gYmUgY3JlYXRlZCB1c2luZyBhIGxvb3ApXG4gICAqICgpID0+IFtcbiAgICogIHsgcXVlcnlQYXJhbXM6IHsgcG9zdElkOiBteUlkKCkgfSB9LFxuICAgKiAgeyBxdWVyeVBhcmFtczogeyBwb3N0SWQ6IG15T3RoZXJJZCgpIH0gfSxcbiAgICogXSxcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gT25lIHF1ZXJ5IHdpdGggZGVwZW5kZW5jaWVzXG4gICAqIChkZXBzKSA9PiAoeyBxdWVyeVBhcmFtczogeyBwb3N0SWQ6IG15SWQoKSwgbGltaXQ6IGRlcHMubGltaXQgfSB9KSxcbiAgICovXG4gIGFyZ3M6IChkZXBzOiBSZXR1cm5UeXBlPFREZXBzPikgPT4gUmVxdWVzdEFyZ3M8UXVlcnlBcmdzT2Y8VENyZWF0b3I+PiB8IFJlcXVlc3RBcmdzPFF1ZXJ5QXJnc09mPFRDcmVhdG9yPj5bXSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIG5ldyBxdWVyaWVzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGV4aXN0aW5nIG9uZXMuIE90aGVyd2lzZSwgZXhpc3RpbmcgcXVlcmllcyB3aWxsIGJlIGRlc3Ryb3llZC5cbiAgICogVGhpcyBzaG91bGQgYmUgdXNlZCBmb3IgdGhpbmdzIGxpa2UgaW5maW5pdGUgc2Nyb2xsaW5nIHdoZXJlIGFscmVhZHkgZmV0Y2hlZCBxdWVyaWVzIHNob3VsZCBub3QgYmUgZGVzdHJveWVkLlxuICAgKi9cbiAgYXBwZW5kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYXBwZW5kIGlzIHRydWUsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdG8gbWVyZ2UgdGhlIG9sZCBhbmQgbmV3IHF1ZXJpZXMuXG4gICAqIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBhcHBlbmQgdGhlIG5ldyBxdWVyaWVzIGluIGEgc3BlY2lmaWMgb3JkZXIgKGUuZy4gYXQgdGhlIGJlZ2lubmluZykuXG4gICAqL1xuICBhcHBlbmRGbj86IChcbiAgICBvbGRRdWVyaWVzOiBSdW5RdWVyeUNyZWF0b3I8VENyZWF0b3I+W10sXG4gICAgbmV3UXVlcmllczogUnVuUXVlcnlDcmVhdG9yPFRDcmVhdG9yPltdLFxuICApID0+IHtcbiAgICAvKiogVGhlIG5ldyBxdWVyaWVzIG1lcmdlZCB3aXRoIHRoZSBvbGQgb25lcy4gKi9cbiAgICBxdWVyaWVzOiBSdW5RdWVyeUNyZWF0b3I8VENyZWF0b3I+W107XG5cbiAgICAvKiogVGhlIGxhc3QgcXVlcnkgaW4gdGhlIG5ldyBxdWVyaWVzLiAqL1xuICAgIGxhc3RRdWVyeTogUnVuUXVlcnlDcmVhdG9yPFRDcmVhdG9yPiB8IG51bGw7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgdGhlIHJlc3BvbnNlcyBvZiBhbGwgcXVlcmllcyBpbiB0aGUgc3RhY2suIFVzZWZ1bCBmb3IgbWVyZ2luZyBvciBmaWx0ZXJpbmcgcmVzcG9uc2VzLlxuICAgKi9cbiAgdHJhbnNmb3JtPzogKHJlc3BvbnNlczogUmVzcG9uc2VUeXBlPFF1ZXJ5QXJnc09mPFRDcmVhdG9yPj5bXSkgPT4gVFRyYW5zZm9ybTtcbn07XG5cbi8qKiBUcmFuc2Zvcm1zIGFuIGFycmF5IG9mIGFycmF5cyBpbnRvIGEgc2luZ2xlIGFycmF5IGFuZCBmaWx0ZXJzIG91dCBgbnVsbGAgdmFsdWVzLiAqL1xuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybUFycmF5UmVzcG9uc2UgPSA8VCBleHRlbmRzICh1bmtub3duIHwgbnVsbClbXT4ocmVzcG9uc2VzOiBUKSA9PlxuICByZXNwb25zZXMuZmlsdGVyKChyKSA9PiAhIXIpLmZsYXRNYXAoKHIpID0+IHIpIGFzIE5vbk51bGxhYmxlPFRbMF0+W107XG5cbi8qKiBUcmFuc2Zvcm1zIGFuIGFycmF5IG9mIHBhZ2luYXRlZCByZXNwb25zZXMgaW50byBhIHNpbmdsZSBhcnJheSBhbmQgZmlsdGVycyBvdXQgYG51bGxgIHZhbHVlcy4gKi9cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1QYWdpbmF0ZWRSZXNwb25zZSA9IDxUIGV4dGVuZHMgKHsgaXRlbXM6IHVua25vd25bXSB9IHwgbnVsbClbXT4ocmVzcG9uc2VzOiBUKSA9PlxuICByZXNwb25zZXMuZmlsdGVyKChyKSA9PiAhIXIpLmZsYXRNYXAoKHIpID0+IHIuaXRlbXMpIGFzIE5vbk51bGxhYmxlPE5vbk51bGxhYmxlPFRbMF0+WydpdGVtcyddPjtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVF1ZXJ5U3RhY2sgPSA8XG4gIFRDcmVhdG9yIGV4dGVuZHMgQW55UXVlcnlDcmVhdG9yLFxuICBUQXJncyBleHRlbmRzIFF1ZXJ5QXJnc09mPFRDcmVhdG9yPixcbiAgVERlcHMgZXh0ZW5kcyAoKSA9PiBhbnksXG4gIFRUcmFuc2Zvcm0gPSAoUmVzcG9uc2VUeXBlPFRBcmdzPiB8IG51bGwpW10sXG4+KFxuICBvcHRpb25zOiBDcmVhdGVRdWVyeVN0YWNrT3B0aW9uczxUQ3JlYXRvciwgVERlcHMsIFRUcmFuc2Zvcm0+LFxuKSA9PiB7XG4gIHR5cGUgUXVlcnlUeXBlID0gUnVuUXVlcnlDcmVhdG9yPFRDcmVhdG9yPjtcblxuICBjb25zdCB7XG4gICAgYXJncyxcbiAgICBxdWVyeUNyZWF0b3IsXG4gICAgZGVwZW5kZW5jaWVzLFxuICAgIGFwcGVuZCxcbiAgICBmZWF0dXJlcyA9IFtdLFxuICAgIGFwcGVuZEZuID0gKG9sZFF1ZXJpZXM6IFF1ZXJ5VHlwZVtdLCBuZXdRdWVyaWVzOiBRdWVyeVR5cGVbXSkgPT4ge1xuICAgICAgY29uc3QgcXVlcmllcyA9IFsuLi5vbGRRdWVyaWVzLCAuLi5uZXdRdWVyaWVzXTtcbiAgICAgIGNvbnN0IGxhc3RRdWVyeSA9IG5ld1F1ZXJpZXNbbmV3UXVlcmllcy5sZW5ndGggLSAxXSA/PyBvbGRRdWVyaWVzW29sZFF1ZXJpZXMubGVuZ3RoIC0gMV0gPz8gbnVsbDtcblxuICAgICAgcmV0dXJuIHsgcXVlcmllcywgbGFzdFF1ZXJ5IH07XG4gICAgfSxcbiAgICB0cmFuc2Zvcm0sXG4gIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gIGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICBjb25zdCBxdWVyaWVzID0gc2lnbmFsPFF1ZXJ5VHlwZVtdPihbXSk7XG4gIGNvbnN0IGxhc3RRdWVyeSA9IHNpZ25hbDxRdWVyeVR5cGUgfCBudWxsPihudWxsKTtcbiAgY29uc3QgZmlyc3RRdWVyeSA9IGNvbXB1dGVkKCgpID0+IHF1ZXJpZXMoKVswXSA/PyBudWxsKTtcblxuICBjb25zdCBoYXNXaXRoQXJnc0ZlYXR1cmUgPSBmZWF0dXJlcy5zb21lKChmKSA9PiBmLnR5cGUgPT0gUXVlcnlGZWF0dXJlVHlwZS5XSVRIX0FSR1MpO1xuICBjb25zdCBoYXNXaXRoT3B0aW1pc3RpY1VwZGF0ZUZlYXR1cmUgPSBmZWF0dXJlcy5zb21lKChmKSA9PiBmLnR5cGUgPT0gUXVlcnlGZWF0dXJlVHlwZS5XSVRIX1JFU1BPTlNFX1VQREFURSk7XG5cbiAgaWYgKGhhc1dpdGhBcmdzRmVhdHVyZSkge1xuICAgIHRocm93IHF1ZXJ5U3RhY2tXaXRoQXJnc1VzZWQoKTtcbiAgfVxuXG4gIGlmIChoYXNXaXRoT3B0aW1pc3RpY1VwZGF0ZUZlYXR1cmUpIHtcbiAgICB0aHJvdyBxdWVyeVN0YWNrV2l0aFJlc3BvbnNlVXBkYXRlVXNlZCgpO1xuICB9XG5cbiAgZWZmZWN0KCgpID0+IHtcbiAgICAvLyBDbGVhciB0aGUgc3RhY2sgaWYgZGVwZW5kZW5jaWVzIGNoYW5nZVxuICAgIGRlcGVuZGVuY2llcz8uKCk7XG5cbiAgICB1bnRyYWNrZWQoKCkgPT4gY2xlYXIoKSk7XG4gIH0pO1xuXG4gIGVmZmVjdCgoKSA9PiBydW5XaXRoQXJncyhhcmdzKGRlcGVuZGVuY2llcz8uKCkpKSk7XG5cbiAgY29uc3QgcnVuV2l0aEFyZ3MgPSAoYXJnczogUmVxdWVzdEFyZ3M8UXVlcnlBcmdzT2Y8VENyZWF0b3I+PiB8IFJlcXVlc3RBcmdzPFF1ZXJ5QXJnc09mPFRDcmVhdG9yPj5bXSB8IG51bGwpID0+IHtcbiAgICBpZiAoYXJncyA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBuZXdBcmdzQXJyYXkgPSBBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IFthcmdzXTtcblxuICAgIGNvbnN0IG5ld1F1ZXJpZXMgPSBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+XG4gICAgICBuZXdBcmdzQXJyYXkubWFwKFxuICAgICAgICAobmV3QXJnc0VudHJ5KSA9PlxuICAgICAgICAgIHF1ZXJ5Q3JlYXRvcihcbiAgICAgICAgICAgIHdpdGhBcmdzKCgpID0+IG5ld0FyZ3NFbnRyeSksXG4gICAgICAgICAgICAuLi5mZWF0dXJlcyxcbiAgICAgICAgICApIGFzIFF1ZXJ5VHlwZSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICBjb25zdCBvbGRRdWVyaWVzID0gcXVlcmllcygpO1xuXG4gICAgICBpZiAoYXBwZW5kKSB7XG4gICAgICAgIGNvbnN0IHsgcXVlcmllczogYXBwZW5kZWRRdWVyaWVzLCBsYXN0UXVlcnk6IGxhc3RBcHBlbmRlZFF1ZXJ5IH0gPSBhcHBlbmRGbihvbGRRdWVyaWVzLCBuZXdRdWVyaWVzKTtcbiAgICAgICAgcXVlcmllcy5zZXQoYXBwZW5kZWRRdWVyaWVzKTtcbiAgICAgICAgbGFzdFF1ZXJ5LnNldChsYXN0QXBwZW5kZWRRdWVyeSk7XG5cbiAgICAgICAgcmV0dXJuIGxhc3RBcHBlbmRlZFF1ZXJ5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBvbGRRdWVyeSBvZiBvbGRRdWVyaWVzKSB7XG4gICAgICAgICAgaWYgKCFuZXdRdWVyaWVzLnNvbWUoKHEpID0+IHEuaWQoKSA9PT0gb2xkUXVlcnkuaWQoKSkpIHtcbiAgICAgICAgICAgIG9sZFF1ZXJ5LnN1YnRsZS5kZXN0cm95KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXJpZXMuc2V0KG5ld1F1ZXJpZXMpO1xuXG4gICAgICAgIGNvbnN0IGxhc3QgPSBuZXdRdWVyaWVzW25ld1F1ZXJpZXMubGVuZ3RoIC0gMV0gPz8gbnVsbDtcblxuICAgICAgICBsYXN0UXVlcnkuc2V0KGxhc3QpO1xuXG4gICAgICAgIHJldHVybiBsYXN0O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBjb25zdCBsb2FkaW5nID0gY29tcHV0ZWQoKCkgPT4gcXVlcmllcygpLnNvbWUoKHEpID0+IHEubG9hZGluZygpKSk7XG5cbiAgY29uc3QgZXJyb3IgPSBjb21wdXRlZChcbiAgICAoKSA9PlxuICAgICAgcXVlcmllcygpXG4gICAgICAgIC5tYXAoKHEpID0+IHEuZXJyb3IoKSlcbiAgICAgICAgLmZpbmQoKGUpID0+IGUgIT09IG51bGwpID8/IG51bGwsXG4gICk7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2VzID0gcXVlcmllcygpLm1hcCgocSkgPT4gcS5yZXNwb25zZSgpKTtcbiAgICByZXR1cm4gdHJhbnNmb3JtPy4ocmVzcG9uc2VzKSA/PyByZXNwb25zZXM7XG4gIH0pIGFzIFNpZ25hbDxUVHJhbnNmb3JtPjtcblxuICBjb25zdCBleGVjdXRlID0gKG9wdGlvbnM/OiB7IGFsbG93Q2FjaGU/OiBib29sZWFuIH0pID0+IHtcbiAgICBmb3IgKGNvbnN0IHF1ZXJ5IG9mIHF1ZXJpZXMoKSkge1xuICAgICAgcXVlcnkuZXhlY3V0ZSh7IG9wdGlvbnM6IHsgYWxsb3dDYWNoZTogb3B0aW9ucz8uYWxsb3dDYWNoZSB9IH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjbGVhciA9ICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IHF1ZXJ5IG9mIHF1ZXJpZXMoKSkge1xuICAgICAgcXVlcnkuc3VidGxlLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBxdWVyaWVzLnNldChbXSk7XG4gICAgbGFzdFF1ZXJ5LnNldChudWxsKTtcbiAgfTtcblxuICBjb25zdCBzdGFjazogUXVlcnlTdGFjazxRdWVyeVR5cGUsIFRDcmVhdG9yLCBUVHJhbnNmb3JtPiA9IHtcbiAgICBxdWVyaWVzOiBxdWVyaWVzLmFzUmVhZG9ubHkoKSxcbiAgICBsYXN0UXVlcnk6IGxhc3RRdWVyeS5hc1JlYWRvbmx5KCksXG4gICAgZmlyc3RRdWVyeSxcbiAgICBsb2FkaW5nLFxuICAgIGVycm9yLFxuICAgIHJlc3BvbnNlLFxuICAgIGV4ZWN1dGUsXG4gICAgY2xlYXIsXG4gICAgc3VidGxlOiB7XG4gICAgICBydW5XaXRoQXJncyxcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBzdGFjaztcbn07XG4iXX0=","/* 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, ...(ngDevMode ? [{ debugName: \"currentPageArgs\" }] : []));\n const initialPage = signal(options.initialPage ?? 1, ...(ngDevMode ? [{ debugName: \"initialPage\" }] : []));\n const loadedMinPage = signal(initialPage(), ...(ngDevMode ? [{ debugName: \"loadedMinPage\" }] : []));\n const loadedMaxPage = signal(initialPage(), ...(ngDevMode ? [{ debugName: \"loadedMaxPage\" }] : []));\n const lastResetTimestamp = signal(Date.now(), ...(ngDevMode ? [{ debugName: \"lastResetTimestamp\" }] : []));\n const pageDirection = signal('next', ...(ngDevMode ? [{ debugName: \"pageDirection\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"maxPagination\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"minPagination\" }] : []));\n const isFirstPageLoaded = computed(() => {\n const min = minPagination();\n return min ? loadedMinPage() === min.currentPage : false;\n }, ...(ngDevMode ? [{ debugName: \"isFirstPageLoaded\" }] : []));\n const isLastPageLoaded = computed(() => {\n const max = maxPagination();\n return max ? loadedMaxPage() === max.totalPages : false;\n }, ...(ngDevMode ? [{ debugName: \"isLastPageLoaded\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"canFetchPreviousPage\" }] : []));\n const canFetchNextPage = computed(() => {\n const currentMaxPagination = maxPagination();\n return currentMaxPagination ? loadedMaxPage() < currentMaxPagination.totalPages : false;\n }, ...(ngDevMode ? [{ debugName: \"canFetchNextPage\" }] : []));\n const items = computed(() => {\n const res = stack.response();\n return res.map((r) => responseNormalizer(r, res).items).flat();\n }, ...(ngDevMode ? [{ debugName: \"items\" }] : []));\n const isFirstLoad = computed(() => {\n return stack.queries().length === 1 && !!stack.lastQuery()?.loading();\n }, ...(ngDevMode ? [{ debugName: \"isFirstLoad\" }] : []));\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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QUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqRSxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixNQUFNLFVBQVUsR0FBbUQ7UUFDakUsYUFBYTtRQUNiLGFBQWE7UUFDYixpQkFBaUI7UUFDakIsYUFBYTtRQUNiLG9CQUFvQjtRQUNwQixnQkFBZ0I7UUFDaEIsS0FBSztRQUNMLFNBQVMsRUFBRSxhQUFhLENBQUMsVUFBVSxFQUFFO1FBQ3JDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztRQUN0QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLFdBQVc7UUFDWCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixLQUFLO1FBQ0wsT0FBTztLQUNSLENBQUM7SUFFRixPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0LCBpc0Rldk1vZGUsIFNpZ25hbCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRlbnRmdWxHcWxMaWtlUGFnaW5hdGVkLFxuICBEeW5MaWtlUGFnaW5hdGVkLFxuICBHZ0xpa2VQYWdpbmF0ZWQsXG4gIE5vcm1hbGl6ZWRQYWdpbmF0aW9uLFxuICBQYWdpbmF0ZWQsXG59IGZyb20gJ0BldGhsZXRlL3R5cGVzJztcbmltcG9ydCB7IEFueU5ld1F1ZXJ5LCBRdWVyeSwgUXVlcnlBcmdzLCBSZXF1ZXN0QXJncywgUmVzcG9uc2VUeXBlIH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBBbnlRdWVyeUNyZWF0b3IsIFF1ZXJ5QXJnc09mLCBRdWVyeUNyZWF0b3IgfSBmcm9tICcuL3F1ZXJ5LWNyZWF0b3InO1xuaW1wb3J0IHsgUXVlcnlFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi9xdWVyeS1lcnJvci1yZXNwb25zZSc7XG5pbXBvcnQge1xuICBwYWdlZFF1ZXJ5U3RhY2tOZXh0UGFnZUNhbGxlZFdpdGhvdXRQcmV2aW91c1BhZ2UsXG4gIHBhZ2VkUXVlcnlTdGFja1BhZ2VCaWdnZXJUaGFuVG90YWxQYWdlcyxcbiAgcGFnZWRRdWVyeVN0YWNrUHJldmlvdXNQYWdlQ2FsbGVkQnV0QWxyZWFkeUF0Rmlyc3RQYWdlLFxuICBxdWVyeVN0YWNrVG90YWxRdWVyaWVzQW5kRXhwZWN0ZWRRdWVyaWVzTWlzbWF0Y2gsXG59IGZyb20gJy4vcXVlcnktZXJyb3JzJztcbmltcG9ydCB7IFF1ZXJ5RmVhdHVyZSB9IGZyb20gJy4vcXVlcnktZmVhdHVyZXMnO1xuaW1wb3J0IHsgY3JlYXRlUXVlcnlTdGFjaywgdHJhbnNmb3JtQXJyYXlSZXNwb25zZSB9IGZyb20gJy4vcXVlcnktc3RhY2snO1xuaW1wb3J0IHsgc2hvdWxkUmV0cnlSZXF1ZXN0IH0gZnJvbSAnLi9xdWVyeS11dGlscyc7XG5cbmV4cG9ydCBjb25zdCBldGhsZXRlUGFnaW5hdGlvbkFkYXB0ZXIgPSA8VD4ocmVzcG9uc2U6IFBhZ2luYXRlZDxUPikgPT4ge1xuICBjb25zdCBwYWdpbmF0aW9uOiBOb3JtYWxpemVkUGFnaW5hdGlvbjxUPiA9IHtcbiAgICBpdGVtczogcmVzcG9uc2UuaXRlbXMsXG4gICAgdG90YWxQYWdlczogcmVzcG9uc2UudG90YWxQYWdlQ291bnQsXG4gICAgY3VycmVudFBhZ2U6IHJlc3BvbnNlLmN1cnJlbnRQYWdlLFxuICAgIGl0ZW1zUGVyUGFnZTogcmVzcG9uc2UuaXRlbXNQZXJQYWdlLFxuICAgIHRvdGFsSGl0czogcmVzcG9uc2UudG90YWxIaXRzLFxuICB9O1xuXG4gIHJldHVybiBwYWdpbmF0aW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGdnTGlrZVBhZ2luYXRpb25BZGFwdGVyID0gPFQ+KHJlc3BvbnNlOiBHZ0xpa2VQYWdpbmF0ZWQ8VD4pID0+IHtcbiAgY29uc3QgcGFnaW5hdGlvbjogTm9ybWFsaXplZFBhZ2luYXRpb248VD4gPSB7XG4gICAgaXRlbXM6IHJlc3BvbnNlLml0ZW1zLFxuICAgIHRvdGFsUGFnZXM6IHJlc3BvbnNlLnRvdGFsUGFnZUNvdW50LFxuICAgIGN1cnJlbnRQYWdlOiByZXNwb25zZS5jdXJyZW50UGFnZSxcbiAgICBpdGVtc1BlclBhZ2U6IHJlc3BvbnNlLml0ZW1zUGVyUGFnZSxcbiAgICB0b3RhbEhpdHM6IHJlc3BvbnNlLnRvdGFsSGl0cyxcbiAgfTtcblxuICByZXR1cm4gcGFnaW5hdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBkeW5MaWtlUGFnaW5hdGlvbkFkYXB0ZXIgPSA8VD4ocmVzcG9uc2U6IER5bkxpa2VQYWdpbmF0ZWQ8VD4pID0+IHtcbiAgY29uc3QgcGFnaW5hdGlvbjogTm9ybWFsaXplZFBhZ2luYXRpb248VD4gPSB7XG4gICAgaXRlbXM6IHJlc3BvbnNlLml0ZW1zLFxuICAgIHRvdGFsUGFnZXM6IHJlc3BvbnNlLnRvdGFsUGFnZXMsXG4gICAgY3VycmVudFBhZ2U6IHJlc3BvbnNlLmN1cnJlbnRQYWdlLFxuICAgIGl0ZW1zUGVyUGFnZTogcmVzcG9uc2UubGltaXQsXG4gICAgdG90YWxIaXRzOiByZXNwb25zZS50b3RhbEhpdHMsXG4gIH07XG5cbiAgcmV0dXJuIHBhZ2luYXRpb247XG59O1xuXG5leHBvcnQgY29uc3QgY29udGVudGZ1bEdxbExpa2VQYWdpbmF0aW9uQWRhcHRlciA9IDxUPihyZXNwb25zZTogQ29udGVudGZ1bEdxbExpa2VQYWdpbmF0ZWQ8VD4pID0+IHtcbiAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGgubWF4KE1hdGguY2VpbChyZXNwb25zZS50b3RhbCAvIHJlc3BvbnNlLmxpbWl0KSwgMSk7IC8vIElmIHRoZXJlIGFyZSBubyBpdGVtcywgdGhlcmUgaXMgc3RpbGwgb25lIHBhZ2VcbiAgY29uc3QgY3VycmVudFBhZ2UgPSBNYXRoLm1heChNYXRoLmNlaWwocmVzcG9uc2Uuc2tpcCAvIHJlc3BvbnNlLmxpbWl0KSArIDEsIDEpO1xuXG4gIGNvbnN0IHBhZ2luYXRpb246IE5vcm1hbGl6ZWRQYWdpbmF0aW9uPFQ+ID0ge1xuICAgIGl0ZW1zOiByZXNwb25zZS5pdGVtcyxcbiAgICB0b3RhbFBhZ2VzLFxuICAgIGN1cnJlbnRQYWdlLFxuICAgIGl0ZW1zUGVyUGFnZTogcmVzcG9uc2UubGltaXQsXG4gICAgdG90YWxIaXRzOiByZXNwb25zZS50b3RhbCxcbiAgfTtcblxuICByZXR1cm4gcGFnaW5hdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBmYWtlUGFnaW5hdGlvbkFkYXB0ZXIgPSAodG90YWxIaXRzID0gMTApID0+IHtcbiAgcmV0dXJuIDxUPihyZXNwb25zZTogVCkgPT4ge1xuICAgIGNvbnN0IHBhZ2luYXRpb246IE5vcm1hbGl6ZWRQYWdpbmF0aW9uPFQ+ID0ge1xuICAgICAgaXRlbXM6IFtyZXNwb25zZV0sXG4gICAgICB0b3RhbFBhZ2VzOiB0b3RhbEhpdHMsXG4gICAgICBjdXJyZW50UGFnZTogMSxcbiAgICAgIGl0ZW1zUGVyUGFnZTogMSxcbiAgICAgIHRvdGFsSGl0cyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHBhZ2luYXRpb247XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVQYWdlZFF1ZXJ5U3RhY2tPcHRpb25zPFxuICBUQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVE5vcm1QYWdpbmF0aW9uIGV4dGVuZHMgTm9ybWFsaXplZFBhZ2luYXRpb248dW5rbm93bj4sXG4+ID0ge1xuICAvKipcbiAgICogVGhlIG5vcm1hbGl6ZXIgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gbm9ybWFsaXplIHRoZSByZXNwb25zZSB0byBhIGZvcm1hdCB0aGF0IHRoZSBwYWdlZCBxdWVyeSBjYW4gdW5kZXJzdGFuZC5cbiAgICpcbiAgICogVGhlcmUgYXJlIHNvbWUgYnVpbHQtaW4gbm9ybWFsaXplcnMgdGhhdCBjYW4gYmUgdXNlZDpcbiAgICogLSBgZXRobGV0ZVBhZ2luYXRpb25BZGFwdGVyYFxuICAgKiAtIGBnZ0xpa2VQYWdpbmF0aW9uQWRhcHRlcmBcbiAgICogLSBgZHluTGlrZVBhZ2luYXRpb25BZGFwdGVyYFxuICAgKiAtIGBjb250ZW50ZnVsR3FsTGlrZVBhZ2luYXRpb25BZGFwdGVyYFxuICAgKiAtIGBmYWtlUGFnaW5hdGlvbkFkYXB0ZXJgIChmb3IgdGVzdGluZyBwdXJwb3NlcylcbiAgICpcbiAgICogQHBhcmFtIGN1cnJlbnRSZXNwb25zZSBUaGUgY3VycmVudCByZXNwb25zZSB0aGF0IHdhcyBmZXRjaGVkLlxuICAgKiBAcGFyYW0gYWxsUmVzcG9uc2VzIEFsbCByZXNwb25zZXMgdGhhdCB3ZXJlIGZldGNoZWQgdGlsbCBub3cgaW5jbHVkaW5nIHRoZSBjdXJyZW50IHJlc3BvbnNlIGFuZCBwYWdpbmF0aW9uLlxuICAgKi9cbiAgcmVzcG9uc2VOb3JtYWxpemVyOiAoXG4gICAgY3VycmVudFJlc3BvbnNlOiBSZXNwb25zZVR5cGU8VEFyZ3M+LFxuICAgIGFsbFJlc3BvbnNlczogTm9uTnVsbGFibGU8UmVzcG9uc2VUeXBlPFRBcmdzPj5bXSxcbiAgKSA9PiBUTm9ybVBhZ2luYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBxdWVyeSBjcmVhdG9yIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgcGFnZWQgcXVlcnkuXG4gICAqL1xuICBxdWVyeUNyZWF0b3I6IFF1ZXJ5Q3JlYXRvcjxUQXJncz47XG5cbiAgLyoqXG4gICAqIFRoZSBhcmd1bWVudHMgdG8gY3JlYXRlIHRoZSBxdWVyeS5cbiAgICogVGhlIGN1cnJlbnQgcGFnZSB3aWxsIGJlIHBhc3NlZCBhcyBhbiBhcmd1bWVudC5cbiAgICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdHJlYXRlZCBsaWtlIGEgY29tcHV0ZWQgZnVuY3Rpb24uIEl0IHJlYWN0cyB0byBzaWduYWwgY2hhbmdlcy5cbiAgICogSWYgYSBzaWduYWwgY2hhbmdlcywgdGhlIHBhZ2VkIHF1ZXJ5IHdpbGwgYmUgcmVzZXQgdG8gdGhlIGluaXRpYWwgcGFnZS5cbiAgICpcbiAgICogQGV4YW1wbGUgKHBhZ2UpID0+ICh7IHF1ZXJ5UGFyYW1zOiB7IHBhZ2UsIGxpbWl0OjIwIH0gfSksXG4gICAqXG4gICAqIEBwYXJhbSBwYWdlIFRoZSBwYWdlIHRvIGZldGNoIG5leHQuICoqRG8gbm90IG1vZGlmeSB0aGlzIGFyZ3VtZW50LioqXG4gICAqIEBwYXJhbSBhbGxSZXNwb25zZXMgQWxsIHJlc3BvbnNlcyB0aGF0IHdlcmUgZmV0Y2hlZCB0aWxsIG5vdyBpbmNsdWRpbmcgcGFnaW5hdGlvbi5cbiAgICovXG4gIGFyZ3M6IChwYWdlOiBudW1iZXIsIGFsbFJlc3BvbnNlczogTm9uTnVsbGFibGU8UmVzcG9uc2VUeXBlPFRBcmdzPj5bXSkgPT4gUmVxdWVzdEFyZ3M8VEFyZ3M+IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGFsbCBxdWVyaWVzIGluIHRoZSBzdGFjay5cbiAgICpcbiAgICogQHRocm93cyBJZiB0aGUgYHdpdGhBcmdzYCBmZWF0dXJlIGlzIHVzZWQuIFRoaXMgZmVhdHVyZSBpcyBpbnRlcm5hbGx5IHVzZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIER1ZSB0byBsaW1pdGF0aW9ucyBpbiBUeXBlU2NyaXB0LCB5b3UgaGF2ZSB0byBtYW51YWxseSBhZGQgdGhlIG5lZWRlZCBnZW5lcmljIHR5cGVzIGlmIG5lZWRlZC5cbiAgICogZmVhdHVyZXM6IFtFLndpdGhTdWNjZXNzSGFuZGxpbmc8R2V0UG9zdFF1ZXJ5QXJncz4oeyBoYW5kbGVyOiAocG9zdCkgPT4gY29uc29sZS5sb2cocG9zdC50aXRsZSkgfSldXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIElmIHR5cGluZ3MgYXJlIG5vdCBuZWVkZWQsIHlvdSBjYW4gdXNlIHRoZSBmZWF0dXJlIHdpdGhvdXQgZ2VuZXJpY3MuXG4gICAqIGZlYXR1cmVzOiBbRS53aXRoUG9sbGluZyh7IGludGVydmFsOiA1MDAwIH0pXVxuICAgKi9cbiAgZmVhdHVyZXM/OiBRdWVyeUZlYXR1cmU8YW55PltdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFnZSB0byBzdGFydCB0aGlzIHBhZ2VkIHF1ZXJ5IGZyb20uXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIGluaXRpYWxQYWdlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCBubyBxdWVyaWVzIHdpbGwgYmUgZXhlY3V0ZWQgd2hpbGUgdGhlIHBhZ2VkIHF1ZXJ5IGlzIGxvYWRpbmcuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBuZWVkIHRoZSBjdXJyZW50IHJlc3BvbnNlIHRvIGJlIHVzZWQgaW4gdGhlIG5leHQgcXVlcnkuXG4gICAqL1xuICBibG9ja0V4ZWN1dGlvbkR1cmluZ0xvYWRpbmc/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgUGFnZWRRdWVyeVN0YWNrUmVzZXRPcHRpb25zID0ge1xuICAvKipcbiAgICogVGhlIHBhZ2UgdG8gcmVzZXQgdGhpcyBwYWdlZCBxdWVyeSB0by5cbiAgICogVGhpcyB3aWxsIGNsZWFyIGV2ZXJ5dGhpbmcgYW5kIHN0YXJ0IGZyb20gdGhpcyBwYWdlLlxuICAgKiBAZGVmYXVsdCAxIC8vIG9yIHRoZSB2YWx1ZSBwYXNzZWQgaW4gdGhlIGBpbml0aWFsUGFnZWAgb3B0aW9uIHdoZW4gY3JlYXRpbmcgdGhlIHBhZ2VkIHF1ZXJ5LlxuICAgKi9cbiAgaW5pdGlhbFBhZ2U/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBQYWdlZFF1ZXJ5U3RhY2tFeGVjdXRlT3B0aW9uczxUTm9ybVBhZ2luYXRpb24gZXh0ZW5kcyBOb3JtYWxpemVkUGFnaW5hdGlvbjx1bmtub3duPj4gPSB7XG4gIC8qKlxuICAgKiBJZiBwcm92aWRlZCwgb25seSB0aGUgcXVlcmllcyB0aGF0IG1hdGNoIHRoZSBjb25kaXRpb24gd2lsbCBiZSBleGVjdXRlZC5cbiAgICogVGhpcyB3aWxsIGFsc28gZXhlY3V0ZSB0aGUgcHJldmlvdXMgYW5kIG5leHQgcXVlcnkgdG8gdGhlIG9uZSB0aGF0IG1hdGNoZWQgdGhlIGNvbmRpdGlvbi5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBhbGwgcXVlcmllcyB3aWxsIGJlIGV4ZWN1dGVkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBteVBhZ2VkUXVlcnkuZXhlY3V0ZSh7IHdoZXJlOiAoaXRlbSkgPT4gaXRlbS5pZCA9PT0gNCB9KTtcbiAgICovXG4gIHdoZXJlPzogKGl0ZW06IFROb3JtUGFnaW5hdGlvblsnaXRlbXMnXVtudW1iZXJdLCBpbmRleDogbnVtYmVyLCBhcnJheTogVE5vcm1QYWdpbmF0aW9uWydpdGVtcyddKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0aGUgY2FjaGUgd2lsbCBiZSB1c2VkIChpZiBub3QgZXhwaXJlZCkgYW5kIHRoZSByZXF1ZXN0IHdpbGwgbm90IGJlIG1hZGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhbGxvd0NhY2hlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFBhZ2VkUXVlcnlTdGFja0RpcmVjdGlvbiA9ICduZXh0JyB8ICdwcmV2aW91cyc7XG5cbmV4cG9ydCB0eXBlIEFueVBhZ2VkUXVlcnlTdGFjayA9IFBhZ2VkUXVlcnlTdGFjazxBbnlOZXdRdWVyeSwgTm9ybWFsaXplZFBhZ2luYXRpb248dW5rbm93bj4+O1xuXG5leHBvcnQgdHlwZSBQYWdlZFF1ZXJ5U3RhY2s8VFF1ZXJ5IGV4dGVuZHMgQW55TmV3UXVlcnksIFROb3JtUGFnaW5hdGlvbiBleHRlbmRzIE5vcm1hbGl6ZWRQYWdpbmF0aW9uPHVua25vd24+PiA9IHtcbiAgLyoqXG4gICAqIFRoZSBwYWdpbmF0aW9uIG9mIHRoZSBsYXN0IGV4ZWN1dGVkIHF1ZXJ5IGluIHRoZSBwYWdlZCBxdWVyeS5cbiAgICovXG4gIG1heFBhZ2luYXRpb246IFNpZ25hbDxUTm9ybVBhZ2luYXRpb24gfCBudWxsPjtcblxuICAvKipcbiAgICogVGhlIHBhZ2luYXRpb24gb2YgdGhlIGZpcnN0IGV4ZWN1dGVkIHF1ZXJ5IGluIHRoZSBwYWdlZCBxdWVyeS5cbiAgICovXG4gIG1pblBhZ2luYXRpb246IFNpZ25hbDxUTm9ybVBhZ2luYXRpb24gfCBudWxsPjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbGFzdCBwYWdlIG9mIHRoZSBwYWdlZCBxdWVyeSBpcyBsb2FkZWQgb3Igbm90LlxuICAgKi9cbiAgaXNMYXN0UGFnZUxvYWRlZDogU2lnbmFsPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBwYWdlZCBxdWVyeSBpcyBsb2FkZWQgb3Igbm90LlxuICAgKi9cbiAgaXNGaXJzdFBhZ2VMb2FkZWQ6IFNpZ25hbDxib29sZWFuPjtcblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgcHJldmlvdXMgcGFnZSBvZiB0aGUgcGFnZWQgcXVlcnkuXG4gICAqXG4gICAqIEB0aHJvd3MgSWYgdGhlIHBhZ2VkIHF1ZXJ5IGlzIGFscmVhZHkgYXQgdGhlIGZpcnN0IHBhZ2UuXG4gICAqL1xuICBmZXRjaFByZXZpb3VzUGFnZTogKCkgPT4gVFF1ZXJ5IHwgbnVsbDtcblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgbmV4dCBwYWdlIG9mIHRoZSBwYWdlZCBxdWVyeS5cbiAgICpcbiAgICogQHRocm93cyBJZiB0aGUgcGFnZWQgcXVlcnkgaXMgYWxyZWFkeSBhdCB0aGUgbGFzdCBwYWdlLlxuICAgKi9cbiAgZmV0Y2hOZXh0UGFnZTogKCkgPT4gVFF1ZXJ5IHwgbnVsbDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcHJldmlvdXMgcGFnZSBjYW4gYmUgZmV0Y2hlZCBvciBub3QuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBiZSBmYWxzZSBpZiB0aGUgcGFnZWQgcXVlcnkgaXMgYWxyZWFkeSBhdCB0aGUgZmlyc3QgcGFnZSBvciBpZiB0aGUgcGFnZWQgcXVlcnkgaXMgbG9hZGluZy5cbiAgICovXG4gIGNhbkZldGNoUHJldmlvdXNQYWdlOiBTaWduYWw8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5leHQgcGFnZSBjYW4gYmUgZmV0Y2hlZCBvciBub3QuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBiZSBmYWxzZSBpZiB0aGUgcGFnZWQgcXVlcnkgaXMgYWxyZWFkeSBhdCB0aGUgbGFzdCBwYWdlIG9yIGlmIHRoZSBwYWdlZCBxdWVyeSBpcyBsb2FkaW5nLlxuICAgKi9cbiAgY2FuRmV0Y2hOZXh0UGFnZTogU2lnbmFsPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBUaGUgaXRlbXMgb2YgdGhlIHBhZ2VkIHF1ZXJ5LlxuICAgKi9cbiAgaXRlbXM6IFNpZ25hbDxUTm9ybVBhZ2luYXRpb25bJ2l0ZW1zJ10+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwYWdlZCBxdWVyeSBpcyBsb2FkaW5nIG9yIG5vdC5cbiAgICovXG4gIGxvYWRpbmc6IFNpZ25hbDxib29sZWFuPjtcblxuICAvKipcbiAgICogVGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgZHVyaW5nIHRoZSBsYXN0IGV4ZWN1dGlvbiBvZiB0aGUgcGFnZWQgcXVlcnkuXG4gICAqL1xuICBlcnJvcjogU2lnbmFsPFF1ZXJ5RXJyb3JSZXNwb25zZSB8IG51bGw+O1xuXG4gIC8qKlxuICAgKiBUaGUgbGFzdCBxdWVyeSBleGVjdXRlZCBpbiB0aGUgcGFnZWQgcXVlcnkuXG4gICAqL1xuICBsYXN0UXVlcnk6IFNpZ25hbDxRdWVyeTxRdWVyeUFyZ3NPZjxUUXVlcnk+PiB8IG51bGw+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwYWdlZCBxdWVyeSBpcyBvbiBpdHMgZmlyc3QgbG9hZCBvciBub3QuXG4gICAqL1xuICBpc0ZpcnN0TG9hZDogU2lnbmFsPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBUaGUgcXVlcmllcyBpbiB0aGUgcGFnZWQgcXVlcnkgc3RhY2suXG4gICAqL1xuICBxdWVyaWVzOiBTaWduYWw8VFF1ZXJ5W10+O1xuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIHBhZ2VkIHF1ZXJ5IHRvIHRoZSBpbml0aWFsIHBhZ2UuXG4gICAqL1xuICByZXNldDogKHJlc2V0T3B0aW9ucz86IFBhZ2VkUXVlcnlTdGFja1Jlc2V0T3B0aW9ucykgPT4gdm9pZDtcblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIHBhZ2VkIHF1ZXJ5LlxuICAgKi9cbiAgZXhlY3V0ZTogKG9wdGlvbnM/OiBQYWdlZFF1ZXJ5U3RhY2tFeGVjdXRlT3B0aW9uczxUTm9ybVBhZ2luYXRpb24+KSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBkaXJlY3Rpb24gb2YgdGhlIHBhZ2VkIHF1ZXJ5LlxuICAgKi9cbiAgZGlyZWN0aW9uOiBTaWduYWw8UGFnZWRRdWVyeVN0YWNrRGlyZWN0aW9uPjtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQYWdlZFF1ZXJ5U3RhY2sgPSA8XG4gIFRDcmVhdG9yIGV4dGVuZHMgQW55UXVlcnlDcmVhdG9yLFxuICBUQXJncyBleHRlbmRzIFF1ZXJ5QXJnc09mPFRDcmVhdG9yPixcbiAgVE5vcm1QYWdpbmF0aW9uIGV4dGVuZHMgTm9ybWFsaXplZFBhZ2luYXRpb248dW5rbm93bj4sXG4+KFxuICBvcHRpb25zOiBDcmVhdGVQYWdlZFF1ZXJ5U3RhY2tPcHRpb25zPFRBcmdzLCBUTm9ybVBhZ2luYXRpb24+LFxuKSA9PiB7XG4gIGNvbnN0IHsgcmVzcG9uc2VOb3JtYWxpemVyLCBxdWVyeUNyZWF0b3IsIGZlYXR1cmVzIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGN1cnJlbnRQYWdlQXJncyA9IHNpZ25hbDxSZXF1ZXN0QXJnczxUQXJncz4gfCBudWxsPihudWxsKTtcbiAgY29uc3QgaW5pdGlhbFBhZ2UgPSBzaWduYWwob3B0aW9ucy5pbml0aWFsUGFnZSA/PyAxKTtcbiAgY29uc3QgbG9hZGVkTWluUGFnZSA9IHNpZ25hbChpbml0aWFsUGFnZSgpKTtcbiAgY29uc3QgbG9hZGVkTWF4UGFnZSA9IHNpZ25hbChpbml0aWFsUGFnZSgpKTtcbiAgY29uc3QgbGFzdFJlc2V0VGltZXN0YW1wID0gc2lnbmFsKERhdGUubm93KCkpO1xuXG4gIGNvbnN0IHBhZ2VEaXJlY3Rpb24gPSBzaWduYWw8UGFnZWRRdWVyeVN0YWNrRGlyZWN0aW9uPignbmV4dCcpO1xuXG4gIGNvbnN0IHN0YWNrID0gY3JlYXRlUXVlcnlTdGFjayh7XG4gICAgYXJnczogKCkgPT4gbnVsbCxcbiAgICBxdWVyeUNyZWF0b3IsXG4gICAgYXBwZW5kOiB0cnVlLFxuICAgIGZlYXR1cmVzLFxuICAgIGFwcGVuZEZuOiAob2xkUXVlcmllcywgbmV3UXVlcmllcykgPT4ge1xuICAgICAgY29uc3QgbmV3UXVlcnkgPSBuZXdRdWVyaWVzWzBdO1xuICAgICAgY29uc3QgZGlyID0gcGFnZURpcmVjdGlvbigpO1xuXG4gICAgICBpZiAoIW5ld1F1ZXJ5KSB7XG4gICAgICAgIGNvbnN0IGxhc3RRdWVyeSA9IG9sZFF1ZXJpZXNbb2xkUXVlcmllcy5sZW5ndGggLSAxXSA/PyBudWxsO1xuICAgICAgICByZXR1cm4geyBxdWVyaWVzOiBvbGRRdWVyaWVzLCBsYXN0UXVlcnkgfTtcbiAgICAgIH0gZWxzZSBpZiAoZGlyID09PSAncHJldmlvdXMnKSB7XG4gICAgICAgIHJldHVybiB7IHF1ZXJpZXM6IFtuZXdRdWVyeSwgLi4ub2xkUXVlcmllc10sIGxhc3RRdWVyeTogbmV3UXVlcnkgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7IHF1ZXJpZXM6IFsuLi5vbGRRdWVyaWVzLCBuZXdRdWVyeV0sIGxhc3RRdWVyeTogbmV3UXVlcnkgfTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQXJyYXlSZXNwb25zZSxcbiAgfSk7XG5cbiAgZWZmZWN0KCgpID0+IHtcbiAgICBsYXN0UmVzZXRUaW1lc3RhbXAoKTtcblxuICAgIGNvbnN0IGFyZ3MgPSBvcHRpb25zLmFyZ3MoaW5pdGlhbFBhZ2UoKSwgW10pO1xuXG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIHN0YWNrLmNsZWFyKCk7XG4gICAgICBjdXJyZW50UGFnZUFyZ3Muc2V0KGFyZ3MpO1xuICAgICAgbG9hZGVkTWluUGFnZS5zZXQoaW5pdGlhbFBhZ2UoKSk7XG4gICAgICBsb2FkZWRNYXhQYWdlLnNldChpbml0aWFsUGFnZSgpKTtcbiAgICAgIHN0YWNrLnN1YnRsZS5ydW5XaXRoQXJncyhhcmdzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgbWF4UGFnaW5hdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCByZXMgPSBzdGFjay5sYXN0UXVlcnkoKT8ucmVzcG9uc2UoKTtcbiAgICBjb25zdCBhbGwgPSBzdGFjay5yZXNwb25zZSgpO1xuXG4gICAgaWYgKCFyZXMpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlTm9ybWFsaXplcihyZXMsIGFsbCk7XG4gIH0pO1xuXG4gIGNvbnN0IG1pblBhZ2luYXRpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gc3RhY2suZmlyc3RRdWVyeSgpPy5yZXNwb25zZSgpO1xuICAgIGNvbnN0IGFsbCA9IHN0YWNrLnJlc3BvbnNlKCk7XG5cbiAgICBpZiAoIXJlcykgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gcmVzcG9uc2VOb3JtYWxpemVyKHJlcywgYWxsKTtcbiAgfSk7XG5cbiAgY29uc3QgaXNGaXJzdFBhZ2VMb2FkZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWluID0gbWluUGFnaW5hdGlvbigpO1xuXG4gICAgcmV0dXJuIG1pbiA/IGxvYWRlZE1pblBhZ2UoKSA9PT0gbWluLmN1cnJlbnRQYWdlIDogZmFsc2U7XG4gIH0pO1xuXG4gIGNvbnN0IGlzTGFzdFBhZ2VMb2FkZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWF4ID0gbWF4UGFnaW5hdGlvbigpO1xuXG4gICAgcmV0dXJuIG1heCA/IGxvYWRlZE1heFBhZ2UoKSA9PT0gbWF4LnRvdGFsUGFnZXMgOiBmYWxzZTtcbiAgfSk7XG5cbiAgY29uc3QgZmV0Y2hQcmV2aW91c1BhZ2UgPSAoKSA9PiB7XG4gICAgY29uc3QgcGFnZSA9IGxvYWRlZE1pblBhZ2UoKSAtIDE7XG4gICAgY29uc3QgYWxsUmVzcG9uc2VzID0gc3RhY2sucmVzcG9uc2UoKTtcblxuICAgIGlmICghY2FuRmV0Y2hOZXdQYWdlKHBhZ2UpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocGFnZSA8IDEpIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICB0aHJvdyBwYWdlZFF1ZXJ5U3RhY2tQcmV2aW91c1BhZ2VDYWxsZWRCdXRBbHJlYWR5QXRGaXJzdFBhZ2UoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY3VycmVudFBhZ2VBcmdzLnNldChvcHRpb25zLmFyZ3MocGFnZSwgYWxsUmVzcG9uc2VzKSk7XG4gICAgbG9hZGVkTWluUGFnZS5zZXQocGFnZSk7XG4gICAgcGFnZURpcmVjdGlvbi5zZXQoJ3ByZXZpb3VzJyk7XG5cbiAgICByZXR1cm4gc3RhY2suc3VidGxlLnJ1bldpdGhBcmdzKGN1cnJlbnRQYWdlQXJncygpKTtcbiAgfTtcblxuICBjb25zdCBmZXRjaE5leHRQYWdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHBhZ2UgPSBsb2FkZWRNYXhQYWdlKCkgKyAxO1xuICAgIGNvbnN0IGN1cnJlbnRQYWdpbmF0aW9uID0gbWF4UGFnaW5hdGlvbigpO1xuICAgIGNvbnN0IGFsbFJlc3BvbnNlcyA9IHN0YWNrLnJlc3BvbnNlKCk7XG5cbiAgICBpZiAoIWNhbkZldGNoTmV3UGFnZShwYWdlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCFjdXJyZW50UGFnaW5hdGlvbikge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIHRocm93IHBhZ2VkUXVlcnlTdGFja05leHRQYWdlQ2FsbGVkV2l0aG91dFByZXZpb3VzUGFnZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocGFnZSA+IGN1cnJlbnRQYWdpbmF0aW9uLnRvdGFsUGFnZXMpIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICB0aHJvdyBwYWdlZFF1ZXJ5U3RhY2tQYWdlQmlnZ2VyVGhhblRvdGFsUGFnZXMocGFnZSwgY3VycmVudFBhZ2luYXRpb24udG90YWxQYWdlcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGN1cnJlbnRQYWdlQXJncy5zZXQob3B0aW9ucy5hcmdzKHBhZ2UsIGFsbFJlc3BvbnNlcykpO1xuICAgIGxvYWRlZE1heFBhZ2Uuc2V0KHBhZ2UpO1xuICAgIHBhZ2VEaXJlY3Rpb24uc2V0KCduZXh0Jyk7XG5cbiAgICByZXR1cm4gc3RhY2suc3VidGxlLnJ1bldpdGhBcmdzKGN1cnJlbnRQYWdlQXJncygpKTtcbiAgfTtcblxuICBjb25zdCBjYW5GZXRjaE5ld1BhZ2UgPSAocGFnZVRvTG9hZDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgY3VycmVudE1heFBhZ2luYXRpb24gPSBtYXhQYWdpbmF0aW9uKCk7XG4gICAgY29uc3QgY3VycmVudE1pblBhZ2luYXRpb24gPSBtaW5QYWdpbmF0aW9uKCk7XG5cbiAgICBpZiAoIWN1cnJlbnRNYXhQYWdpbmF0aW9uIHx8ICFjdXJyZW50TWluUGFnaW5hdGlvbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgaXNPbmVNaW51c01pblBhZ2luYXRpb24gPSBwYWdlVG9Mb2FkID09PSBjdXJyZW50TWluUGFnaW5hdGlvbi5jdXJyZW50UGFnZSAtIDE7XG4gICAgY29uc3QgaXNPbmVQbHVzTWF4UGFnaW5hdGlvbiA9IHBhZ2VUb0xvYWQgPT09IGN1cnJlbnRNYXhQYWdpbmF0aW9uLmN1cnJlbnRQYWdlICsgMTtcblxuICAgIGlmICghb3B0aW9ucy5ibG9ja0V4ZWN1dGlvbkR1cmluZ0xvYWRpbmcpIHtcbiAgICAgIGNvbnN0IHRvdGFsUXVlcmllcyA9IHN0YWNrLnF1ZXJpZXMoKS5sZW5ndGg7XG4gICAgICBjb25zdCBleHBlY3RlZFF1ZXJpZXMgPSBNYXRoLmFicyhsb2FkZWRNYXhQYWdlKCkgLSBsb2FkZWRNaW5QYWdlKCkpICsgMTtcblxuICAgICAgaWYgKHRvdGFsUXVlcmllcyAhPT0gZXhwZWN0ZWRRdWVyaWVzKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgIHRocm93IHF1ZXJ5U3RhY2tUb3RhbFF1ZXJpZXNBbmRFeHBlY3RlZFF1ZXJpZXNNaXNtYXRjaCh0b3RhbFF1ZXJpZXMsIGV4cGVjdGVkUXVlcmllcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YWNrLmxvYWRpbmcoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBpc09uZU1pbnVzTWluUGFnaW5hdGlvbiB8fCBpc09uZVBsdXNNYXhQYWdpbmF0aW9uO1xuICB9O1xuXG4gIGNvbnN0IHJlc2V0ID0gKHJlc2V0T3B0aW9ucz86IFBhZ2VkUXVlcnlTdGFja1Jlc2V0T3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHBhZ2UgPSByZXNldE9wdGlvbnM/LmluaXRpYWxQYWdlID8/IGluaXRpYWxQYWdlKCk7XG5cbiAgICBpbml0aWFsUGFnZS5zZXQocGFnZSk7XG4gICAgcGFnZURpcmVjdGlvbi5zZXQoJ25leHQnKTtcbiAgICBsYXN0UmVzZXRUaW1lc3RhbXAuc2V0KERhdGUubm93KCkpO1xuICB9O1xuXG4gIGNvbnN0IGNhbkZldGNoUHJldmlvdXNQYWdlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRNaW5QYWdpbmF0aW9uID0gbWluUGFnaW5hdGlvbigpO1xuXG4gICAgaWYgKCFjdXJyZW50TWluUGFnaW5hdGlvbikgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIGxvYWRlZE1pblBhZ2UoKSA+IDE7XG4gIH0pO1xuICBjb25zdCBjYW5GZXRjaE5leHRQYWdlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRNYXhQYWdpbmF0aW9uID0gbWF4UGFnaW5hdGlvbigpO1xuXG4gICAgcmV0dXJuIGN1cnJlbnRNYXhQYWdpbmF0aW9uID8gbG9hZGVkTWF4UGFnZSgpIDwgY3VycmVudE1heFBhZ2luYXRpb24udG90YWxQYWdlcyA6IGZhbHNlO1xuICB9KTtcblxuICBjb25zdCBpdGVtcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCByZXMgPSBzdGFjay5yZXNwb25zZSgpO1xuICAgIHJldHVybiByZXMubWFwKChyKSA9PiByZXNwb25zZU5vcm1hbGl6ZXIociwgcmVzKS5pdGVtcykuZmxhdCgpO1xuICB9KTtcblxuICBjb25zdCBpc0ZpcnN0TG9hZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gc3RhY2sucXVlcmllcygpLmxlbmd0aCA9PT0gMSAmJiAhIXN0YWNrLmxhc3RRdWVyeSgpPy5sb2FkaW5nKCk7XG4gIH0pO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSAob3B0aW9ucz86IFBhZ2VkUXVlcnlTdGFja0V4ZWN1dGVPcHRpb25zPFRBcmdzPikgPT4ge1xuICAgIGNvbnN0IHdoZXJlRm4gPSBvcHRpb25zPy53aGVyZTtcblxuICAgIGlmICh3aGVyZUZuKSB7XG4gICAgICBjb25zdCBxdWVyaWVzVG9FeGVjdXRlID0gbmV3IFNldDxRdWVyeTxUQXJncz4+KCk7XG4gICAgICBjb25zdCBhbGwgPSBzdGFjay5yZXNwb25zZSgpO1xuXG4gICAgICBmb3IgKGNvbnN0IFtpbmRleCwgcXVlcnldIG9mIHN0YWNrLnF1ZXJpZXMoKS5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3QgcmVzID0gcXVlcnkucmVzcG9uc2UoKTtcbiAgICAgICAgY29uc3QgZXJyID0gcXVlcnkuZXJyb3IoKTtcbiAgICAgICAgY29uc3QgaXNFcnJvcmVkQW5kQ2FuQmVSZXRyaWVkID0gZXJyICYmIHNob3VsZFJldHJ5UmVxdWVzdChlcnIucmF3KTtcblxuICAgICAgICBpZiAoaXNFcnJvcmVkQW5kQ2FuQmVSZXRyaWVkKSB7XG4gICAgICAgICAgcXVlcmllc1RvRXhlY3V0ZS5hZGQocXVlcnkpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlcykge1xuICAgICAgICAgIGlmIChyZXNwb25zZU5vcm1hbGl6ZXIocmVzLCBhbGwpLml0ZW1zLnNvbWUoKGl0ZW0sIGksIGEpID0+IHdoZXJlRm4oaXRlbSwgaSwgYSkpKSB7XG4gICAgICAgICAgICBxdWVyaWVzVG9FeGVjdXRlLmFkZChxdWVyeSk7XG5cbiAgICAgICAgICAgIC8vIEFsc28gZXhlY3V0ZSB0aGUgcHJldmlvdXMgYW5kIG5leHQgcXVlcnkgdG8gdGhlIG9uZSB0aGF0IG1hdGNoZWQgdGhlIGNvbmRpdGlvbi5cblxuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByZXZRdWVyeSA9IHN0YWNrLnF1ZXJpZXMoKVtpbmRleCAtIDFdO1xuXG4gICAgICAgICAgICAgIGlmIChwcmV2UXVlcnkpIHtcbiAgICAgICAgICAgICAgICBxdWVyaWVzVG9FeGVjdXRlLmFkZChwcmV2UXVlcnkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gc3RhY2sucXVlcmllcygpLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dFF1ZXJ5ID0gc3RhY2sucXVlcmllcygpW2luZGV4ICsgMV07XG5cbiAgICAgICAgICAgICAgaWYgKG5leHRRdWVyeSkge1xuICAgICAgICAgICAgICAgIHF1ZXJpZXNUb0V4ZWN1dGUuYWRkKG5leHRRdWVyeSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBxdWVyeSBvZiBxdWVyaWVzVG9FeGVjdXRlKSB7XG4gICAgICAgIHF1ZXJ5LmV4ZWN1dGUoeyBvcHRpb25zOiB7IGFsbG93Q2FjaGU6IG9wdGlvbnMuYWxsb3dDYWNoZSB9IH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGFjay5leGVjdXRlKHsgYWxsb3dDYWNoZTogb3B0aW9ucz8uYWxsb3dDYWNoZSB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGFnZWRRdWVyeTogUGFnZWRRdWVyeVN0YWNrPFF1ZXJ5PFRBcmdzPiwgVE5vcm1QYWdpbmF0aW9uPiA9IHtcbiAgICBtYXhQYWdpbmF0aW9uLFxuICAgIG1pblBhZ2luYXRpb24sXG4gICAgZmV0Y2hQcmV2aW91c1BhZ2UsXG4gICAgZmV0Y2hOZXh0UGFnZSxcbiAgICBjYW5GZXRjaFByZXZpb3VzUGFnZSxcbiAgICBjYW5GZXRjaE5leHRQYWdlLFxuICAgIGl0ZW1zLFxuICAgIGRpcmVjdGlvbjogcGFnZURpcmVjdGlvbi5hc1JlYWRvbmx5KCksXG4gICAgbG9hZGluZzogc3RhY2subG9hZGluZyxcbiAgICBlcnJvcjogc3RhY2suZXJyb3IsXG4gICAgbGFzdFF1ZXJ5OiBzdGFjay5sYXN0UXVlcnksXG4gICAgaXNGaXJzdExvYWQsXG4gICAgcXVlcmllczogc3RhY2sucXVlcmllcyxcbiAgICBpc0xhc3RQYWdlTG9hZGVkLFxuICAgIGlzRmlyc3RQYWdlTG9hZGVkLFxuICAgIHJlc2V0LFxuICAgIGV4ZWN1dGUsXG4gIH07XG5cbiAgcmV0dXJuIHBhZ2VkUXVlcnk7XG59O1xuIl19","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};\nexport const bindSignalToTarget = (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 = bindSignalToTarget(responseSignal, state.response);\n const loadingRef = bindSignalToTarget(request.loading, state.loading);\n const errorRef = bindSignalToTarget(request.error, state.error);\n const latestHttpEventRef = bindSignalToTarget(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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RyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUFPRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUEwQixPQUE2QyxFQUFFLEVBQUU7SUFDL0csTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUVqQyxZQUFZLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDeEQsWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBFZmZlY3RSZWYsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgU2lnbmFsLCBzaWduYWwsIHVudHJhY2tlZCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFF1ZXJ5QXJncywgUmVxdWVzdEFyZ3MgfSBmcm9tICcuL3F1ZXJ5JztcbmltcG9ydCB7IENyZWF0ZVF1ZXJ5RXhlY3V0ZU9wdGlvbnMgfSBmcm9tICcuL3F1ZXJ5LWV4ZWN1dGUnO1xuaW1wb3J0IHsgbmVzdGVkRWZmZWN0IH0gZnJvbSAnLi9xdWVyeS11dGlscyc7XG5cbmV4cG9ydCB0eXBlIFJlc2V0RXhlY3V0ZVN0YXRlT3B0aW9uczxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIGV4ZWN1dGVPcHRpb25zOiBQaWNrPENyZWF0ZVF1ZXJ5RXhlY3V0ZU9wdGlvbnM8VEFyZ3M+LCAnc3RhdGUnIHwgJ2RlcHMnPjtcbiAgZXhlY3V0ZVN0YXRlOiBRdWVyeUV4ZWN1dGVTdGF0ZTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXNldEV4ZWN1dGVTdGF0ZSA9IDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4ob3B0aW9uczogUmVzZXRFeGVjdXRlU3RhdGVPcHRpb25zPFRBcmdzPikgPT4ge1xuICBjb25zdCB7IGV4ZWN1dGVTdGF0ZSwgZXhlY3V0ZU9wdGlvbnM6IG9wdHMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHsgc3RhdGUgfSA9IG9wdHM7XG5cbiAgY2xlYW51cFByZXZpb3VzRXhlY3V0ZSh7IGV4ZWN1dGVPcHRpb25zOiBvcHRzLCBleGVjdXRlU3RhdGUgfSk7XG5cbiAgb3B0cy5kZXBzLmNsaWVudC5yZXBvc2l0b3J5LnVuYmluZChleGVjdXRlU3RhdGUucHJldmlvdXNLZXkoKSwgb3B0cy5kZXBzLmRlc3Ryb3lSZWYpO1xuXG4gIHN0YXRlLmFyZ3Muc2V0KG51bGwpO1xuICBzdGF0ZS5lcnJvci5zZXQobnVsbCk7XG4gIHN0YXRlLmxhdGVzdEh0dHBFdmVudC5zZXQobnVsbCk7XG4gIHN0YXRlLmxvYWRpbmcuc2V0KG51bGwpO1xuICBzdGF0ZS5yZXNwb25zZS5zZXQobnVsbCk7XG4gIHN0YXRlLmxhc3RUaW1lRXhlY3V0ZWRBdC5zZXQobnVsbCk7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeUV4ZWN1dGVTdGF0ZSA9IHtcbiAgZWZmZWN0UmVmczogRWZmZWN0UmVmW107XG4gIHByZXZpb3VzS2V5OiBXcml0YWJsZVNpZ25hbDxzdHJpbmcgfCBmYWxzZT47XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0dXBRdWVyeUV4ZWN1dGVTdGF0ZSA9ICgpOiBRdWVyeUV4ZWN1dGVTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgZWZmZWN0UmVmczogW10sXG4gICAgcHJldmlvdXNLZXk6IHNpZ25hbChmYWxzZSksXG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBSdW5RdWVyeUV4ZWN1dGVPcHRpb25zID0ge1xuICBhbGxvd0NhY2hlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEludGVybmFsUnVuUXVlcnlFeGVjdXRlT3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIElmIHRydWUsIHRoZSByZXF1ZXN0IHdpbGwgYmUgZm9yY2VkIHRvIGJlIGNhY2hlZCAoc2F2ZWQgaW5zaWRlIHRoZSBxdWVyeSByZXBvc2l0b3J5KS5cbiAgICogQ2FuIGJlIHVzZWQgdG8gZS5nLiBjYWNoZSBHUUwgcXVlcmllcyB0cmFuc3BvcnRlZCB2aWEgUE9TVFxuICAgKlxuICAgKiAtIGB0cnVlYCBtZWFucyB0aGUgcmVxdWVzdCB3aWxsIGFsd2F5cyBiZSBjYWNoZWRcbiAgICogLSBgZmFsc2VgIG1lYW5zIHRoZSByZXF1ZXN0IHdpbGwgbmV2ZXIgYmUgY2FjaGVkXG4gICAqIC0gYHVuZGVmaW5lZGAgbWVhbnMgdGhlIHJlcXVlc3Qgd2lsbCBiZSBjYWNoZWQgaWYgdGhlIG1ldGhvZCBpcyBHRVQsIE9QVElPTlMgb3IgSEVBRFxuICAgKi9cbiAgdXNlUXVlcnlSZXBvc2l0b3J5Q2FjaGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgUXVlcnlFeGVjdXRlT3B0aW9uczxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIGV4ZWN1dGVPcHRpb25zOiBDcmVhdGVRdWVyeUV4ZWN1dGVPcHRpb25zPFRBcmdzPjtcbiAgZXhlY3V0ZVN0YXRlOiBRdWVyeUV4ZWN1dGVTdGF0ZTtcblxuICBhcmdzOiBSZXF1ZXN0QXJnczxUQXJncz4gfCBudWxsO1xuICBvcHRpb25zPzogUnVuUXVlcnlFeGVjdXRlT3B0aW9ucztcbiAgaW50ZXJuYWxPcHRpb25zPzogSW50ZXJuYWxSdW5RdWVyeUV4ZWN1dGVPcHRpb25zO1xuXG4gIC8vIFRPRE86IFR5cGluZ3NcbiAgdHJhbnNmb3JtUmVzcG9uc2U/OiAocmVzcG9uc2U6IGFueSkgPT4gYW55O1xuXG4gIGlzU2VjdXJlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBiaW5kU2lnbmFsVG9UYXJnZXQgPSA8VD4oc2lnbmFsOiBTaWduYWw8VD4sIHRhcmdldDogV3JpdGFibGVTaWduYWw8VD4pID0+IHtcbiAgdGFyZ2V0LnNldChzaWduYWwoKSk7XG5cbiAgcmV0dXJuIG5lc3RlZEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdmFsID0gc2lnbmFsKCk7XG5cbiAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgaWYgKHZhbCA9PT0gdGFyZ2V0KCkpIHJldHVybjtcblxuICAgICAgdGFyZ2V0LnNldCh2YWwpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBxdWVyeUV4ZWN1dGUgPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KG9wdGlvbnM6IFF1ZXJ5RXhlY3V0ZU9wdGlvbnM8VEFyZ3M+KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBleGVjdXRlT3B0aW9ucyxcbiAgICBhcmdzLFxuICAgIGV4ZWN1dGVTdGF0ZSxcbiAgICBvcHRpb25zOiBydW5RdWVyeU9wdGlvbnMsXG4gICAgaW50ZXJuYWxPcHRpb25zOiBpbnRlcm5hbFJ1blF1ZXJ5T3B0aW9ucyxcbiAgICB0cmFuc2Zvcm1SZXNwb25zZSxcbiAgICBpc1NlY3VyZSxcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHsgZGVwcywgc3RhdGUsIGNyZWF0b3IsIGNyZWF0b3JJbnRlcm5hbHMsIHF1ZXJ5Q29uZmlnIH0gPSBleGVjdXRlT3B0aW9ucztcblxuICBjb25zdCB7IGtleSwgcmVxdWVzdCB9ID0gZGVwcy5jbGllbnQucmVwb3NpdG9yeS5yZXF1ZXN0KHtcbiAgICByb3V0ZTogY3JlYXRvckludGVybmFscy5yb3V0ZSxcbiAgICBtZXRob2Q6IGNyZWF0b3JJbnRlcm5hbHMubWV0aG9kLFxuICAgIGFyZ3MsXG4gICAgY2xpZW50T3B0aW9uczogY3JlYXRvcixcbiAgICBjb25zdW1lckRlc3Ryb3lSZWY6IGRlcHMuZGVzdHJveVJlZixcbiAgICBrZXk6IHF1ZXJ5Q29uZmlnLmtleSxcbiAgICBwcmV2aW91c0tleTogZXhlY3V0ZVN0YXRlLnByZXZpb3VzS2V5KCksXG4gICAgaW50ZXJuYWxSdW5RdWVyeU9wdGlvbnMsXG4gICAgcnVuUXVlcnlPcHRpb25zLFxuICAgIGlzU2VjdXJlLFxuICB9KTtcblxuICBleGVjdXRlU3RhdGUucHJldmlvdXNLZXkuc2V0KGtleSk7XG5cbiAgY29uc3QgcmVzcG9uc2VTaWduYWwgPSB0cmFuc2Zvcm1SZXNwb25zZSA/IGNvbXB1dGVkKCgpID0+IHRyYW5zZm9ybVJlc3BvbnNlKHJlcXVlc3QucmVzcG9uc2UoKSkpIDogcmVxdWVzdC5yZXNwb25zZTtcblxuICBydW5JbkluamVjdGlvbkNvbnRleHQoZGVwcy5pbmplY3RvciwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlUmVmID0gYmluZFNpZ25hbFRvVGFyZ2V0KHJlc3BvbnNlU2lnbmFsLCBzdGF0ZS5yZXNwb25zZSk7XG4gICAgY29uc3QgbG9hZGluZ1JlZiA9IGJpbmRTaWduYWxUb1RhcmdldChyZXF1ZXN0LmxvYWRpbmcsIHN0YXRlLmxvYWRpbmcpO1xuICAgIGNvbnN0IGVycm9yUmVmID0gYmluZFNpZ25hbFRvVGFyZ2V0KHJlcXVlc3QuZXJyb3IsIHN0YXRlLmVycm9yKTtcbiAgICBjb25zdCBsYXRlc3RIdHRwRXZlbnRSZWYgPSBiaW5kU2lnbmFsVG9UYXJnZXQocmVxdWVzdC5jdXJyZW50RXZlbnQsIHN0YXRlLmxhdGVzdEh0dHBFdmVudCk7XG5cbiAgICBleGVjdXRlU3RhdGUuZWZmZWN0UmVmcy5wdXNoKHJlc3BvbnNlUmVmLCBsb2FkaW5nUmVmLCBlcnJvclJlZiwgbGF0ZXN0SHR0cEV2ZW50UmVmKTtcbiAgfSk7XG5cbiAgc3RhdGUubGFzdFRpbWVFeGVjdXRlZEF0LnNldChEYXRlLm5vdygpKTtcbiAgc3RhdGUuc3VidGxlLnJlcXVlc3Quc2V0KHJlcXVlc3QpO1xufTtcblxuZXhwb3J0IHR5cGUgQ2xlYW51cFByZXZpb3VzRXhlY3V0ZU9wdGlvbnM8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICBleGVjdXRlT3B0aW9uczogUGljazxDcmVhdGVRdWVyeUV4ZWN1dGVPcHRpb25zPFRBcmdzPiwgJ3N0YXRlJz47XG4gIGV4ZWN1dGVTdGF0ZTogUXVlcnlFeGVjdXRlU3RhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYW51cFByZXZpb3VzRXhlY3V0ZSA9IDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4ob3B0aW9uczogQ2xlYW51cFByZXZpb3VzRXhlY3V0ZU9wdGlvbnM8VEFyZ3M+KSA9PiB7XG4gIGNvbnN0IHsgZXhlY3V0ZVN0YXRlIH0gPSBvcHRpb25zO1xuXG4gIGV4ZWN1dGVTdGF0ZS5lZmZlY3RSZWZzLmZvckVhY2goKHJlZikgPT4gcmVmLmRlc3Ryb3koKSk7XG4gIGV4ZWN1dGVTdGF0ZS5lZmZlY3RSZWZzLmxlbmd0aCA9IDA7XG59O1xuIl19","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+O1xuXG4gIC8qKiBSZW1vdmVzIGEgY29uc3VtZXIgZnJvbSBhIHJlcXVlc3QgYnkgaXRzIGtleS4gRGVzdHJveXMgdGhlIHJlcXVlc3QgaWYgdGhlcmUgYXJlIG5vIG1vcmUgY29uc3VtZXJzIGxlZnQuICovXG4gIHVuYmluZDogKGtleTogUXVlcnlLZXlPck5vbmUsIGNvbnN1bWVyRGVzdHJveVJlZjogRGVzdHJveVJlZikgPT4gYm9vbGVhbjtcblxuICAvKiogUmVtb3ZlcyBhbGwgc2VjdXJlIHJlcXVlc3RzIGFuZCB0aGVpciBjb25zdW1lcnMgKi9cbiAgdW5iaW5kQWxsU2VjdXJlOiAoKSA9PiB2b2lkO1xufTtcblxuLyoqIFRoZSBrZXkgb2YgYSBxdWVyeSAqL1xuZXhwb3J0IHR5cGUgUXVlcnlLZXkgPSBzdHJpbmc7XG5cbi8qKiBBIGtleSB0aGF0IHdpbGwgbm90IGJlIGNhY2hlZCAqL1xuZXhwb3J0IHR5cGUgUXVlcnlLZXlOb0NhY2hlID0gZmFsc2U7XG5cbi8qKiBBIGtleSB0aGF0IG1heSBvciBtYXkgbm90IGJlIGNhY2hlZCAqL1xuZXhwb3J0IHR5cGUgUXVlcnlLZXlPck5vbmUgPSBRdWVyeUtleSB8IFF1ZXJ5S2V5Tm9DYWNoZTtcblxuLyoqIFJ1bnMgLnVuYmluZCgpIGlmIHRoZSBEZXN0cm95UmVmLm9uRGVzdHJveSgpIGdldHMgY2FsbGVkICovXG5leHBvcnQgdHlwZSBEZXN0cm95Q2xlYW51cENhbGxiYWNrID0gKCkgPT4gdm9pZDtcblxuLyoqIEtlZXBzIHRyYWNrIG9mIGFsbCBwbGFjZXMgd2hlcmUgdGhlIHJlcXVlc3QgZ2V0cyB1c2VkLiBXaWxsIGJlIGNsZWFuZWQgdXAgYW5kIHJlbW92ZWQgaWYgdGhlcmUgYXJlIG5vIG1vcmUgY29uc3VtZXJzLiAgKi9cbnR5cGUgRGVzdHJveUxpc3RlbmVyTWFwSXRlbSA9IHtcbiAgY29uc3VtZXJzOiBNYXA8RGVzdHJveVJlZiwgRGVzdHJveUNsZWFudXBDYWxsYmFjaz47XG4gIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PFF1ZXJ5QXJncz47XG4gIGlzU2VjdXJlOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgUXVlcnlSZXBvc2l0b3J5RGVwZW5kZW5jaWVzID0ge1xuICAvKiogVGhlIEhUVFAgY2xpZW50IHRvIHVzZSBmb3IgdGhlIHJlcXVlc3RzICovXG4gIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQ7XG5cbiAgLyoqIFRoZSBlcnJvciBoYW5kbGVyIHRvIHVzZSBmb3IgdGhlIHJlcXVlc3RzICovXG4gIG5nRXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXI7XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVRdWVyeVJlcG9zaXRvcnlDb25maWcgPSBRdWVyeUNsaWVudENvbmZpZyAmIHtcbiAgLyoqIFRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIHF1ZXJ5IHJlcG9zaXRvcnkgKi9cbiAgZGVwZW5kZW5jaWVzOiBRdWVyeVJlcG9zaXRvcnlEZXBlbmRlbmNpZXM7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUXVlcnlSZXBvc2l0b3J5ID0gKGNvbmZpZzogQ3JlYXRlUXVlcnlSZXBvc2l0b3J5Q29uZmlnKTogUXVlcnlSZXBvc2l0b3J5ID0+IHtcbiAgY29uc3QgY2FjaGUgPSBuZXcgTWFwPFF1ZXJ5S2V5LCBEZXN0cm95TGlzdGVuZXJNYXBJdGVtPigpO1xuXG4gIGNvbnN0IHJlcXVlc3QgPSA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KG9wdGlvbnM6IFF1ZXJ5UmVwb3NpdG9yeVJlcXVlc3RPcHRpb25zPFRBcmdzPikgPT4ge1xuICAgIGNvbnN0IHsgYXJncywgY2xpZW50T3B0aW9ucywgcnVuUXVlcnlPcHRpb25zIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHNob3VsZENhY2hlID1cbiAgICAgIG9wdGlvbnMuaW50ZXJuYWxSdW5RdWVyeU9wdGlvbnM/LnVzZVF1ZXJ5UmVwb3NpdG9yeUNhY2hlID09PSBmYWxzZVxuICAgICAgICA/IGZhbHNlXG4gICAgICAgIDogc2hvdWxkQ2FjaGVRdWVyeShvcHRpb25zLm1ldGhvZCkgfHwgb3B0aW9ucy5pbnRlcm5hbFJ1blF1ZXJ5T3B0aW9ucz8udXNlUXVlcnlSZXBvc2l0b3J5Q2FjaGUgPT09IHRydWU7XG5cbiAgICBpZiAoIXNob3VsZENhY2hlICYmIG9wdGlvbnMua2V5KSB0aHJvdyB1bmNhY2hlYWJsZVJlcXVlc3RIYXNDYWNoZUtleVBhcmFtKG9wdGlvbnMua2V5KTtcbiAgICBpZiAoIXNob3VsZENhY2hlICYmIHJ1blF1ZXJ5T3B0aW9ucz8uYWxsb3dDYWNoZSkgdGhyb3cgdW5jYWNoZWFibGVSZXF1ZXN0SGFzQWxsb3dDYWNoZVBhcmFtKCk7XG5cbiAgICBjb25zdCByb3V0ZSA9IGJ1aWxkUm91dGUoe1xuICAgICAgYmFzZTogY29uZmlnLmJhc2VVcmwsXG4gICAgICByb3V0ZTogb3B0aW9ucy5yb3V0ZSxcbiAgICAgIHBhdGhQYXJhbXM6IGFyZ3M/LnBhdGhQYXJhbXMsXG4gICAgICBxdWVyeVBhcmFtczogYXJncz8ucXVlcnlQYXJhbXMsXG4gICAgICBxdWVyeVBhcmFtQ29uZmlnOiBjb25maWcucXVlcnlTdHJpbmcsXG4gICAgfSk7XG5cbiAgICBjb25zdCBrZXkgPVxuICAgICAgc2hvdWxkQ2FjaGUgJiZcbiAgICAgIGJ1aWxkUXVlcnlDYWNoZUtleShgJHtvcHRpb25zLmtleSA/IG9wdGlvbnMua2V5ICsgJ18nIDogJyd9JHtyb3V0ZX1gLCB7XG4gICAgICAgIGJvZHk6IGFyZ3M/LmJvZHksXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBhcmdzPy5xdWVyeVBhcmFtcyxcbiAgICAgICAgcGF0aFBhcmFtczogYXJncz8ucGF0aFBhcmFtcyxcbiAgICAgICAgaGVhZGVyczogYXJncz8uaGVhZGVycyxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgcHJldmlvdXNLZXkgPSBvcHRpb25zLnByZXZpb3VzS2V5O1xuXG4gICAgaWYgKGtleSAhPT0gcHJldmlvdXNLZXkgJiYgcHJldmlvdXNLZXkpIHtcbiAgICAgIHVuYmluZChwcmV2aW91c0tleSwgb3B0aW9ucy5jb25zdW1lckRlc3Ryb3lSZWYpO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRDYWNoZSAmJiBrZXkpIHtcbiAgICAgIGNvbnN0IGNhY2hlRW50cnkgPSBjYWNoZS5nZXQoa2V5KTtcblxuICAgICAgaWYgKGNhY2hlRW50cnkpIHtcbiAgICAgICAgYmluZChrZXksIG9wdGlvbnMuY29uc3VtZXJEZXN0cm95UmVmLCBjYWNoZUVudHJ5LnJlcXVlc3QsIG9wdGlvbnMuaXNTZWN1cmUgPz8gZmFsc2UpO1xuXG4gICAgICAgIGlmICghcnVuUXVlcnlPcHRpb25zPy5hbGxvd0NhY2hlIHx8IGNhY2hlRW50cnkucmVxdWVzdC5pc1N0YWxlKCkpIHtcbiAgICAgICAgICBjYWNoZUVudHJ5LnJlcXVlc3QuZXhlY3V0ZSh7IGFsbG93Q2FjaGU6IHJ1blF1ZXJ5T3B0aW9ucz8uYWxsb3dDYWNoZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGtleSwgcmVxdWVzdDogY2FjaGVFbnRyeS5yZXF1ZXN0IGFzIEh0dHBSZXF1ZXN0PFRBcmdzPiB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjcmVhdGVIdHRwUmVxdWVzdDxUQXJncz4oe1xuICAgICAgZnVsbFBhdGg6IHJvdXRlLFxuICAgICAgYXJncyxcbiAgICAgIG1ldGhvZDogb3B0aW9ucy5tZXRob2QsXG4gICAgICBkZXBlbmRlbmNpZXM6IGNvbmZpZy5kZXBlbmRlbmNpZXMsXG4gICAgICBjbGllbnRPcHRpb25zLFxuICAgICAgY2FjaGVBZGFwdGVyOiBjb25maWcuY2FjaGVBZGFwdGVyLFxuICAgICAgcmV0cnlGbjogY29uZmlnLnJldHJ5Rm4sXG4gICAgfSk7XG5cbiAgICByZXF1ZXN0LmV4ZWN1dGUoKTtcblxuICAgIGlmIChzaG91bGRDYWNoZSAmJiBrZXkpIHtcbiAgICAgIGJpbmQoa2V5LCBvcHRpb25zLmNvbnN1bWVyRGVzdHJveVJlZiwgcmVxdWVzdCwgb3B0aW9ucy5pc1NlY3VyZSA/PyBmYWxzZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsga2V5LCByZXF1ZXN0IH07XG4gIH07XG5cbiAgY29uc3QgdW5iaW5kID0gKGtleTogUXVlcnlLZXlPck5vbmUsIGNvbnN1bWVyRGVzdHJveVJlZjogRGVzdHJveVJlZikgPT4ge1xuICAgIGlmICgha2V5KSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBjYWNoZUVudHJ5ID0gY2FjaGUuZ2V0KGtleSk7XG5cbiAgICBpZiAoIWNhY2hlRW50cnkpIHJldHVybiBmYWxzZTtcblxuICAgIGNhY2hlRW50cnkuY29uc3VtZXJzLmRlbGV0ZShjb25zdW1lckRlc3Ryb3lSZWYpO1xuXG4gICAgaWYgKGNhY2hlRW50cnkuY29uc3VtZXJzLnNpemUgPT09IDApIHtcbiAgICAgIGNhY2hlRW50cnkucmVxdWVzdC5kZXN0cm95KCk7XG4gICAgICBjYWNoZS5kZWxldGUoa2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCB1bmJpbmRBbGxTZWN1cmUgPSAoKSA9PiB7XG4gICAgZm9yIChjb25zdCBba2V5LCBjYWNoZUVudHJ5XSBvZiBjYWNoZS5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChjYWNoZUVudHJ5LmlzU2VjdXJlKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29uc3VtZXJEZXN0cm95UmVmIG9mIGNhY2hlRW50cnkuY29uc3VtZXJzLmtleXMoKSkge1xuICAgICAgICAgIHVuYmluZChrZXksIGNvbnN1bWVyRGVzdHJveVJlZik7XG4gICAgICAgIH1cblxuICAgICAgICBjYWNoZS5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYmluZCA9IChrZXk6IFF1ZXJ5S2V5LCBjb25zdW1lckRlc3Ryb3lSZWY6IERlc3Ryb3lSZWYsIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PFF1ZXJ5QXJncz4sIGlzU2VjdXJlOiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgZGVzdHJveUxpc3RlbmVyID0gY29uc3VtZXJEZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB1bmJpbmQoa2V5LCBjb25zdW1lckRlc3Ryb3lSZWYpKTtcblxuICAgIGNvbnN0IGNhY2hlRW50cnkgPSBjYWNoZS5nZXQoa2V5KTtcblxuICAgIGlmIChjYWNoZUVudHJ5KSB7XG4gICAgICBjYWNoZUVudHJ5LmNvbnN1bWVycy5zZXQoY29uc3VtZXJEZXN0cm95UmVmLCBkZXN0cm95TGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb25zdW1lcnM6IE1hcDxEZXN0cm95UmVmLCBEZXN0cm95Q2xlYW51cENhbGxiYWNrPiA9IG5ldyBNYXAoW10pO1xuXG4gICAgICBjb25zdW1lcnMuc2V0KGNvbnN1bWVyRGVzdHJveVJlZiwgZGVzdHJveUxpc3RlbmVyKTtcblxuICAgICAgY2FjaGUuc2V0KGtleSwge1xuICAgICAgICBjb25zdW1lcnMsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGlzU2VjdXJlLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHJlcG9zaXRvcnk6IFF1ZXJ5UmVwb3NpdG9yeSA9IHtcbiAgICByZXF1ZXN0LFxuICAgIHVuYmluZCxcbiAgICB1bmJpbmRBbGxTZWN1cmUsXG4gIH07XG5cbiAgcmV0dXJuIHJlcG9zaXRvcnk7XG59O1xuIl19","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlLXF1ZXJ5LWV4ZWN1dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2h0dHAvc2VjdXJlLXF1ZXJ5LWV4ZWN1dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hILE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvRCxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUM7QUFTcEMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FDbkMsY0FBc0QsRUFDekIsRUFBRTtJQUMvQixNQUFNLFlBQVksR0FBRyxzQkFBc0IsRUFBRSxDQUFDO0lBQzlDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sZUFBZSxHQUFHLDhCQUE4QixFQUFFLENBQUM7SUFFekQsSUFBSSxxQkFBcUIsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBRS9DLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRTtRQUNqQixxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxxQkFBcUIsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQzNDLGlCQUFpQixDQUFDLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsQ0FBQztJQUVGLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBdUIsRUFBRSxFQUFFO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFFbkMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDL0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxXQUFxQyxFQUFFLEVBQUU7UUFDNUQsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUV4RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDckMsSUFBSSxPQUFPLEdBQUcsSUFBSSxFQUFFLE9BQU8sSUFBSSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRWpELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUM5QixPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFLLEVBQXlCLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUV6RSxZQUFZLENBQUM7WUFDWCxjQUFjLEVBQUUsY0FBYztZQUM5QixZQUFZO1lBQ1osSUFBSSxFQUFFLFdBQVc7WUFDakIsT0FBTyxFQUFFLFVBQVU7WUFDbkIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRixNQUFNLElBQUksR0FBRyxDQUFDLFdBQXFDLEVBQUUsRUFBRTtRQUNyRCxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFeEIsNkRBQTZEO1FBQzdELHFHQUFxRztRQUNyRyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUU1QyxNQUFNLG9CQUFvQixHQUE0QjtZQUNwRCxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtZQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU87U0FDOUIsQ0FBQztRQUVGLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLHFCQUFxQixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDM0Msc0JBQXNCLENBQUMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFFekUsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFckQsZ0dBQWdHO1FBQ2hHLG9IQUFvSDtRQUNwSCxNQUFNLDBCQUEwQixHQUFHLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLElBQUksQ0FBQztRQUU1RSxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSwwQkFBMEIsRUFBRSxDQUFDO1lBQ3BFLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFFOUUscUJBQXFCLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUMvRyxJQUFJLENBQ0gsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxLQUFLO29CQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUU1QixPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ2pGLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUNkLElBQUksT0FBTzt3QkFBRSxPQUFPO29CQUVwQixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO3dCQUNsQixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2YsQ0FBQzt5QkFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO3dCQUM1QixXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztvQkFDcEMsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQ0g7aUJBQ0EsU0FBUyxFQUFFLENBQUM7UUFDakIsQ0FBQzthQUFNLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDaEMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDcEMsQ0FBQzthQUFNLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDN0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXRCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFckUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgb2YsIFN1YnNjcmlwdGlvbiwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFueVF1ZXJ5U25hcHNob3QsIFF1ZXJ5QXJncywgUmVxdWVzdEFyZ3MgfSBmcm9tICcuL3F1ZXJ5JztcbmltcG9ydCB7IENyZWF0ZVF1ZXJ5RXhlY3V0ZU9wdGlvbnMsIEludGVybmFsUXVlcnlFeGVjdXRlLCBRdWVyeUV4ZWN1dGVBcmdzIH0gZnJvbSAnLi9xdWVyeS1leGVjdXRlJztcbmltcG9ydCB7IGNsZWFudXBQcmV2aW91c0V4ZWN1dGUsIHF1ZXJ5RXhlY3V0ZSwgcmVzZXRFeGVjdXRlU3RhdGUsIHNldHVwUXVlcnlFeGVjdXRlU3RhdGUgfSBmcm9tICcuL3F1ZXJ5LWV4ZWN1dGUtdXRpbHMnO1xuaW1wb3J0IHsgY2lyY3VsYXJRdWVyeURlcGVuZGVuY3lDaGVja2VyIH0gZnJvbSAnLi9xdWVyeS11dGlscyc7XG5pbXBvcnQgeyBJbnRlcm5hbFNlY3VyZUNyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnMgfSBmcm9tICcuL3NlY3VyZS1xdWVyeS1jcmVhdG9yJztcblxuY29uc3QgQVVUSF9IRUFERVIgPSAnQXV0aG9yaXphdGlvbic7XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVNlY3VyZVF1ZXJ5RXhlY3V0ZU9wdGlvbnM8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+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';\nexport const 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 }, ...(ngDevMode ? [{ debugName: \"storeSyncEffect\" }] : []));\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnYWN5LXF1ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9pbnRlcm9wL2xlZ2FjeS1xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUVILEVBQUUsRUFDRixhQUFhLEVBQ2IsV0FBVyxFQUNYLElBQUksRUFFSixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFJTCxhQUFhLEVBQ2IsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixtQkFBbUIsRUFXbkIsaUJBQWlCLEdBQ2xCLE1BQU0sYUFBYSxDQUFDO0FBUXJCLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLENBQzVDLFNBQTRDLEVBQ1gsRUFBRTtJQUNuQyxNQUFNLElBQUksR0FBbUIsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBRWpFLFFBQVEsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3hCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNmLE1BQU0sT0FBTyxHQUFZO2dCQUN2QixJQUFJO2dCQUNKLElBQUksd0NBQXdCO2dCQUM1QixHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRO29CQUM1QixDQUFDLENBQUM7d0JBQ0UsUUFBUSxFQUFFOzRCQUNSLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNOzRCQUMxQyxVQUFVLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENB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QUFDLENBQXVCO1FBQ3JDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDakQsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFpQyxDQUFDO1FBQy9DLENBQUM7UUFFRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUUzRSxPQUFPLElBQUksQ0FBQyxNQUFNO2FBQ2YsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2xGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZWZmZWN0LCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG4gIGZpbHRlcixcbiAgaW50ZXJ2YWwsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFJlcGxheVN1YmplY3QsXG4gIHNoYXJlUmVwbGF5LFxuICBza2lwLFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZVVudGlsLFxuICB0YWtlV2hpbGUsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRW50aXR5U3RvcmUgfSBmcm9tICcuLi8uLi9lbnRpdHknO1xuaW1wb3J0IHtcbiAgQmFzZUFyZ3VtZW50cyxcbiAgRXhlY3V0ZVF1ZXJ5T3B0aW9ucyxcbiAgRmFpbHVyZSxcbiAgZmlsdGVyRmFpbHVyZSxcbiAgZmlsdGVyU3VjY2VzcyxcbiAgaXNRdWVyeVN0YXRlTG9hZGluZyxcbiAgaXNRdWVyeVN0YXRlU3VjY2VzcyxcbiAgTG9hZGluZyxcbiAgUG9sbENvbmZpZyxcbiAgUHJlcGFyZWQsXG4gIFF1ZXJ5QXV0b1JlZnJlc2hDb25maWcsXG4gIFF1ZXJ5RW50aXR5Q29uZmlnLFxuICBRdWVyeVN0YXRlLFxuICBRdWVyeVN0YXRlTWV0YSxcbiAgUXVlcnlTdGF0ZVR5cGUsXG4gIFJvdXRlVHlwZSxcbiAgU3VjY2VzcyxcbiAgdGFrZVVudGlsUmVzcG9uc2UsXG59IGZyb20gJy4uLy4uL3F1ZXJ5JztcbmltcG9ydCB7IFJlcXVlc3RFcnJvciB9IGZyb20gJy4uLy4uL3JlcXVlc3QnO1xuaW1wb3J0IHsgQW55TmV3UXVlcnksIFF1ZXJ5LCBRdWVyeUFyZ3MsIFF1ZXJ5QXJnc09mLCBRdWVyeUV4ZWN1dGlvblN0YXRlLCBSZXF1ZXN0QXJncywgUmVzcG9uc2VUeXBlIH0gZnJvbSAnLi4vaHR0cCc7XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUxlZ2FjeVF1ZXJ5T3B0aW9uczxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIHF1ZXJ5OiBRdWVyeTxUQXJncz47XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtRXhlY1N0YXRlVG9RdWVyeVN0YXRlID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihcbiAgZXhlY1N0YXRlOiBRdWVyeUV4ZWN1dGlvblN0YXRlPFRBcmdzPiB8IG51bGwsXG4pOiBRdWVyeVN0YXRlPFJlc3BvbnNlVHlwZTxUQXJncz4+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/**\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 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 }, ...(ngDevMode ? [{ debugName: \"destroyEffect\" }] : []));\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, ...(ngDevMode ? [{ debugName: \"_signal\" }] : []));\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnYWN5LXF1ZXJ5LWNyZWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2ludGVyb3AvbGVnYWN5LXF1ZXJ5LWNyZWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3ZDLE9BQU8sRUFBRSx5QkFBeUIsRUFBd0IsTUFBTSxhQUFhLENBQUM7QUFFOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBa0Q3Qzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBTzdCLFlBQW1CLE9BQTBFO1FBQTFFLFlBQU8sR0FBUCxPQUFPLENBQW1FO1FBRTdGLFlBQU8sR0FRSCxDQUFDLElBQXVGLEVBQUUsRUFBRTtZQUM5RixNQUFNLFFBQVEsR0FBRyxJQUFJLEVBQUUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVwRCxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBRWhDLElBQUksSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO29CQUNwRCxJQUFJLEtBQUssRUFBRSxDQUFDO3dCQUNWLE9BQU8sR0FBRyxPQUFP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IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGVmZmVjdCwgaW5qZWN0LCBJbmplY3RvciwgcnVuSW5JbmplY3Rpb25Db250ZXh0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFbnRpdHlTdG9yZSB9IGZyb20gJy4uLy4uL2VudGl0eSc7XG5pbXBvcnQgeyBCYXNlQXJndW1lbnRzLCBRdWVyeUNvbmZpZywgUXVlcnlFbnRpdHlDb25maWcsIFJvdXRlVHlwZSwgV2l0aEhlYWRlcnMsIFdpdGhJbmplY3RvciB9IGZyb20gJy4uLy4uL3F1ZXJ5JztcbmltcG9ydCB7IGFkZFF1ZXJ5Q29udGFpbmVySGFuZGxpbmcsIFF1ZXJ5Q29udGFpbmVyQ29uZmlnIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQW55TmV3UXVlcnksIFF1ZXJ5LCBRdWVyeUFyZ3MsIFF1ZXJ5Q3JlYXRvciwgUmVxdWVzdEFyZ3MsIFJlc3BvbnNlVHlwZSB9IGZyb20gJy4uL2h0dHAnO1xuaW1wb3J0IHsgTGVnYWN5UXVlcnkgfSBmcm9tICcuL2xlZ2FjeS1xdWVyeSc7XG5cbmV4cG9ydCB0eXBlIExlZ2FjeUFyZ3VtZW50c09mUXVlcnlBcmdzPFQgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0gT21pdDxULCAncmVzcG9uc2UnIHwgJ2hlYWRlcnMnPiAmIFdpdGhIZWFkZXJzO1xuZXhwb3J0IHR5cGUgUXVlcnlBcmdzT2ZMZWdhY3lBcmd1bWVudHM8VCBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsIEo+ID0gT21pdDxULCAnbW9jaycgfCAnaGVhZGVycyc+ICYge1xuICBoZWFkZXJzPzogSHR0cEhlYWRlcnM7XG4gIHJlc3BvbnNlPzogSjtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUxlZ2FjeVF1ZXJ5Q3JlYXRvck9wdGlvbnM8XG4gIFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBSZXNwb25zZSxcbiAgU3RvcmUgZXh0ZW5kcyBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgRGF0YSxcbiAgSWQsXG4+ID0ge1xuICBjcmVhdG9yOiBRdWVyeUNyZWF0b3I8VEFyZ3M+O1xuXG4gIC8qKlxuICAgKiBPYmplY3QgY29udGFpbmluZyB0aGUgcXVlcnkncyBlbnRpdHkgc3RvcmUgaW5mb3JtYXRpb24uXG4gICAqL1xuICBlbnRpdHk/OiBRdWVyeUVudGl0eUNvbmZpZzxTdG9yZSwgRGF0YSwgUmVzcG9uc2UsIExlZ2FjeUFyZ3VtZW50c09mUXVlcnlBcmdzPFRBcmdzPiwgSWQ+O1xufTtcblxuZXhwb3J0IHR5cGUgV2l0aExlZ2FjeUNvbmZpZyA9IHtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBxdWVyeS5cbiAgICovXG4gIGNvbmZpZz86IFF1ZXJ5Q29uZmlnICYge1xuICAgIC8qKlxuICAgICAqIElmIHNldCB0byB0cnVlLCB0aGUgcXVlcnkgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiBpdCBlaXRoZXIgc3VjY2VlZHMgb3IgZmFpbHMuXG4gICAgICovXG4gICAgZGVzdHJveU9uUmVzcG9uc2U/OiBib29sZWFuO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgTGVnYWN5UXVlcnlQcmVwYXJlRm48XG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFJlc3BvbnNlLFxuICBSb3V0ZSBleHRlbmRzIFJvdXRlVHlwZTxBcmd1bWVudHM+LFxuICBTdG9yZSBleHRlbmRzIEVudGl0eVN0b3JlPHVua25vd24+LFxuICBEYXRhLFxuICBJZCxcbiAgVE5ld1F1ZXJ5IGV4dGVuZHMgQW55TmV3UXVlcnksXG4+ID0gKFxuICBhcmdzOiBBcmd1bWVudHMgJiBXaXRoSGVhZGVycyAmIFdpdGhMZWdhY3lDb25maWcgJiBXaXRoSW5qZWN0b3IsXG4pID0+IExlZ2FjeVF1ZXJ5PFJlc3BvbnNlLCBBcmd1bWVudHMsIFJvdXRlLCBTdG9yZSwgRGF0YSwgSWQsIFROZXdRdWVyeT47XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBBbnlMZWdhY3lRdWVyeUNyZWF0b3IgPSBMZWdhY3lRdWVyeUNyZWF0b3I8YW55LCBhbnksIGFueSwgYW55LCBhbnk+O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBsZWdhY3kgcXVlcnkgY3JlYXRvci5cbiAqIEBkZXByZWNhdGVkIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gdG8gc3VwcG9ydCBsZWdhY3kgcXVlcmllcy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBMZWdhY3lRdWVyeUNyZWF0b3I8XG4gIFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBSZXNwb25zZSBleHRlbmRzIFJlc3BvbnNlVHlwZTxUQXJncz4sXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIElkLFxuICBEYXRhID0gUmVzcG9uc2UsXG4+IHtcbiAgY29uc3RydWN0b3IocHVibGljIG9wdGlvbnM6IENyZWF0ZUxlZ2FjeVF1ZXJ5Q3JlYXRvck9wdGlvbnM8VEFyZ3MsIFJlc3BvbnNlLCBTdG9yZSwgRGF0YSwgSWQ+KSB7fVxuXG4gIHByZXBhcmU6IExlZ2FjeVF1ZXJ5UHJlcGFyZUZuPFxuICAgIExlZ2FjeUFyZ3VtZW50c09mUXVlcnlBcmdzPFRBcmdzPixcbiAgICBSZXNwb25zZSxcbiAgICBSb3V0ZVR5cGU8TGVnYWN5QXJndW1lbnRzT2ZRdWVyeUFyZ3M8VEFyZ3M+PixcbiAgICBTdG9yZSxcbiAgICBEYXRhLFxuICAgIElkLFxuICAgIFF1ZXJ5PFRBcmdzPlxuICA+ID0gKGFyZ3M6IExlZ2FjeUFyZ3VtZW50c09mUXVlcnlBcmdzPFRBcmdzPiAmIFdpdGhIZWFkZXJzICYgV2l0aExlZ2FjeUNvbmZpZyAmIFdpdGhJbmplY3RvcikgPT4ge1xuICAgIGNvbnN0IGluamVjdG9yID0gYXJncz8uaW5qZWN0b3IgPz8gaW5qZWN0KEluamVjdG9yKTtcblxuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG5cbiAgICBpZiAoYXJncz8uaGVhZGVycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMoYXJncy5oZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeUFyZ3MgPSB7XG4gICAgICAuLi4oYXJncz8uYm9keSA/IHsgYm9keTogYXJncy5ib2R5IH0gOiB7fSksXG4gICAgICAuLi4oYXJncz8ucGF0aFBhcmFtcyA/IHsgcGF0aFBhcmFtczogYXJncy5wYXRoUGFyYW1zIH0gOiB7fSksXG4gICAgICAuLi4oYXJncz8ucXVlcnlQYXJhbXMgPyB7IHF1ZXJ5UGFyYW1zOiBhcmdzLnF1ZXJ5UGFyYW1zIH0gOiB7fSksXG4gICAgICBoZWFkZXJzLFxuICAgIH0gYXMgUmVxdWVzdEFyZ3M8VEFyZ3M+O1xuXG4gICAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4ge1xuICAgICAgcmV0dXJuIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1F1ZXJ5ID0gdGhpcy5vcHRpb25zLmNyZWF0b3Ioe1xuICAgICAgICAgIG9ubHlNYW51YWxFeGVjdXRpb246IHRydWUsXG4gICAgICAgICAgaW5qZWN0b3IsXG4gICAgICAgICAgc2lsZW5jZU1pc3NpbmdXaXRoQXJnc0ZlYXR1cmVFcnJvcjogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbGVnYWN5UXVlcnkgPSBuZXcgTGVnYWN5UXVlcnk8XG4gICAgICAgICAgUmVzcG9uc2UsXG4gICAgICAgICAgTGVnYWN5QXJndW1lbnRzT2ZRdWVyeUFyZ3M8VEFyZ3M+LFxuICAgICAgICAgIFJvdXRlVHlwZTxMZWdhY3lBcmd1bWVudHNPZlF1ZXJ5QXJnczxUQXJncz4+LFxuICAgICAgICAgIFN0b3JlLFxuICAgICAgICAgIERhdGEsXG4gICAgICAgICAgSWQsXG4gICAgICAgICAgUXVlcnk8VEFyZ3M+XG4gICAgICAgID4obmV3UXVlcnksIHF1ZXJ5QXJncywgdGhpcy5vcHRpb25zLmVudGl0eSk7XG5cbiAgICAgICAgaWYgKGFyZ3M/LmNvbmZpZz8uZGVzdHJveU9uUmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25zdCBkZXN0cm95RWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChuZXdRdWVyeS5leGVjdXRpb25TdGF0ZSgpPy50eXBlID09PSAnc3VjY2VzcycgfHwgbmV3UXVlcnkuZXhlY3V0aW9uU3RhdGUoKT8udHlwZSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgICAgIGxlZ2FjeVF1ZXJ5LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgZGVzdHJveUVmZmVjdC5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGVnYWN5UXVlcnk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbiAgY3JlYXRlU3ViamVjdCA9IChpbml0aWFsVmFsdWU/OiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLnByZXBhcmU+IHwgbnVsbCwgY29uZmlnPzogUXVlcnlDb250YWluZXJDb25maWcpID0+IHtcbiAgICBjb25zdCBzdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLnByZXBhcmU+IHwgbnVsbD4oaW5pdGlhbFZhbHVlID8/IG51bGwpO1xuXG4gICAgYWRkUXVlcnlDb250YWluZXJIYW5kbGluZyhzdWJqZWN0LCAoKSA9PiBzdWJqZWN0LmdldFZhbHVlKCksIGNvbmZpZyk7XG5cbiAgICByZXR1cm4gc3ViamVjdDtcbiAgfTtcbiAgY3JlYXRlU2lnbmFsID0gKGluaXRpYWxWYWx1ZT86IFJldHVyblR5cGU8dHlwZW9mIHRoaXMucHJlcGFyZT4gfCBudWxsLCBjb25maWc/OiBRdWVyeUNvbnRhaW5lckNvbmZpZykgPT4ge1xuICAgIGNvbnN0IF9zaWduYWwgPSBzaWduYWw8UmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5wcmVwYXJlPiB8IG51bGw+KGluaXRpYWxWYWx1ZSA/PyBudWxsKTtcblxuICAgIGFkZFF1ZXJ5Q29udGFpbmVySGFuZGxpbmcodG9PYnNlcnZhYmxlKF9zaWduYWwpLCAoKSA9PiBfc2lnbmFsKCksIGNvbmZpZyk7XG5cbiAgICByZXR1cm4gX3NpZ25hbDtcbiAgfTtcblxuICBiZWhhdmlvclN1YmplY3QgPSB0aGlzLmNyZWF0ZVN1YmplY3Q7XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVMZWdhY3lRdWVyeUNyZWF0b3IgPSA8XG4gIFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBSZXNwb25zZSBleHRlbmRzIFJlc3BvbnNlVHlwZTxUQXJncz4sXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIElkLFxuICBEYXRhID0gUmVzcG9uc2UsXG4+KFxuICBvcHRpb25zOiBDcmVhdGVMZWdhY3lRdWVyeUNyZWF0b3JPcHRpb25zPFRBcmdzLCBSZXNwb25zZSwgU3RvcmUsIERhdGEsIElkPixcbik6IExlZ2FjeVF1ZXJ5Q3JlYXRvcjxUQXJncywgUmVzcG9uc2UsIFN0b3JlLCBJZCwgRGF0YT4gPT4ge1xuICByZXR1cm4gbmV3IExlZ2FjeVF1ZXJ5Q3JlYXRvcjxUQXJncywgUmVzcG9uc2UsIFN0b3JlLCBJZCwgRGF0YT4ob3B0aW9ucyk7XG59O1xuIl19","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.3.6\", ngImport: i0, type: ParseHttpErrorCodeToTitleDePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.6\", ngImport: i0, type: ParseHttpErrorCodeToTitleDePipe, isStandalone: true, name: \"parseHttpErrorCodeToTitleDe\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.3.6\", ngImport: i0, type: ParseHttpErrorCodeToMessageDePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.6\", ngImport: i0, type: ParseHttpErrorCodeToMessageDePipe, isStandalone: true, name: \"parseHttpErrorCodeToMessageDe\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.3.6\", ngImport: i0, type: ParseHttpErrorCodeToTitleEnPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.6\", ngImport: i0, type: ParseHttpErrorCodeToTitleEnPipe, isStandalone: true, name: \"parseHttpErrorCodeToTitleEn\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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.3.6\", ngImport: i0, type: ParseHttpErrorCodeToMessageEnPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.6\", ngImport: i0, type: ParseHttpErrorCodeToMessageEnPipe, isStandalone: true, name: \"parseHttpErrorCodeToMessageEn\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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';\n// codes 1000-1999\nexport const WebSocketRuntimeErrorCode = {\n // Web Socket Client\n ROOM_NOT_JOINED: 1000,\n MESSAGE_MALFORMED: 1001,\n};\nexport const roomNotJoined = (room) => {\n return new RuntimeError(WebSocketRuntimeErrorCode.ROOM_NOT_JOINED, `Tried leaving the room \"${room}\" but it has not been joined.`);\n};\nexport const messageMalformed = () => {\n return new RuntimeError(WebSocketRuntimeErrorCode.MESSAGE_MALFORMED, 'A message has been received but it is malformed (cannot be parsed as JSON).');\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLXNvY2tldC1lcnJvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL3dzL3dlYi1zb2NrZXQtZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0Msa0JBQWtCO0FBQ2xCLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHO0lBQ3ZDLG9CQUFvQjtJQUNwQixlQUFlLEVBQUUsSUFBSTtJQUNyQixpQkFBaUIsRUFBRSxJQUFJO0NBQ2YsQ0FBQztBQUlYLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO0lBQzVDLE9BQU8sSUFBSSxZQUFZLENBQ3JCLHlCQUF5QixDQUFDLGVBQWUsRUFDekMsMkJBQTJCLElBQUksK0JBQStCLENBQy9ELENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUU7SUFDbkMsT0FBTyxJQUFJLFlBQVksQ0FDckIseUJBQXlCLENBQUMsaUJBQWlCLEVBQzNDLDZFQUE2RSxDQUM5RSxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUnVudGltZUVycm9yIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5cbi8vIGNvZGVzIDEwMDAtMTk5OVxuZXhwb3J0IGNvbnN0IFdlYlNvY2tldFJ1bnRpbWVFcnJvckNvZGUgPSB7XG4gIC8vIFdlYiBTb2NrZXQgQ2xpZW50XG4gIFJPT01fTk9UX0pPSU5FRDogMTAwMCxcbiAgTUVTU0FHRV9NQUxGT1JNRUQ6IDEwMDEsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBXZWJTb2NrZXRSdW50aW1lRXJyb3JDb2RlID0gKHR5cGVvZiBXZWJTb2NrZXRSdW50aW1lRXJyb3JDb2RlKVtrZXlvZiB0eXBlb2YgV2ViU29ja2V0UnVudGltZUVycm9yQ29kZV07XG5cbmV4cG9ydCBjb25zdCByb29tTm90Sm9pbmVkID0gKHJvb206IHN0cmluZykgPT4ge1xuICByZXR1cm4gbmV3IFJ1bnRpbWVFcnJvcihcbiAgICBXZWJTb2NrZXRSdW50aW1lRXJyb3JDb2RlLlJPT01fTk9UX0pPSU5FRCxcbiAgICBgVHJpZWQgbGVhdmluZyB0aGUgcm9vbSBcIiR7cm9vbX1cIiBidXQgaXQgaGFzIG5vdCBiZWVuIGpvaW5lZC5gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IG1lc3NhZ2VNYWxmb3JtZWQgPSAoKSA9PiB7XG4gIHJldHVybiBuZXcgUnVudGltZUVycm9yKFxuICAgIFdlYlNvY2tldFJ1bnRpbWVFcnJvckNvZGUuTUVTU0FHRV9NQUxGT1JNRUQsXG4gICAgJ0EgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZCBidXQgaXQgaXMgbWFsZm9ybWVkIChjYW5ub3QgYmUgcGFyc2VkIGFzIEpTT04pLicsXG4gICk7XG59O1xuIl19","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, ...(ngDevMode ? [{ debugName: \"isConnected\" }] : []));\n const joinRoom = (room) => {\n const roomFn = typeof room === 'function' ? room : () => room;\n const pre = previousSignalValue(computed(() => roomFn()));\n const roomData = signal(null, ...(ngDevMode ? [{ debugName: \"roomData\" }] : []));\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, ...(ngDevMode ? [{ debugName: \"message\" }] : []));\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLXNvY2tldC1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL3dzL3dlYi1zb2NrZXQtY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUVULE1BQU0sRUFDTixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUF1Q3RFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQXlDLE1BQTZCLEVBQUUsRUFBRTtJQUM3RyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUM1QixlQUFlLEVBQUUsSUFBSTtRQUNyQixXQUFXLEVBQUUsS0FBSztRQUNsQixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7S0FDOUIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQStDLENBQUM7SUFDckUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssdURBQUMsQ0FBQztJQUVsQyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQW9DLEVBQUUsRUFBRTtRQUN4RCxNQUFNLE1BQU0sR0FBRyxPQUFPLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQzlELE1BQU0sR0FBRyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxN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cUIsQ0FBQyxNQUFNLENBQUM7S0FDaEQsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNvbXB1dGVkLFxuICBEZXN0cm95UmVmLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaXNEZXZNb2RlLFxuICBTaWduYWwsXG4gIHNpZ25hbCxcbiAgdW50cmFja2VkLFxuICBXcml0YWJsZVNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBwcmV2aW91c1NpZ25hbFZhbHVlIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBpbyB9IGZyb20gJ3NvY2tldC5pby1jbGllbnQnO1xuaW1wb3J0IHsgV2ViU29ja2V0Q2xpZW50Q29uZmlnIH0gZnJvbSAnLi93ZWItc29ja2V0LWNsaWVudC1jb25maWcnO1xuaW1wb3J0IHsgbWVzc2FnZU1hbGZvcm1lZCwgcm9vbU5vdEpvaW5lZCB9IGZyb20gJy4vd2ViLXNvY2tldC1lcnJvcnMnO1xuXG4vKiogQSBkZWZhdWx0IHNvY2tldCBpbyBtZXNzYWdlIHZpZXcgKi9cbmV4cG9ydCB0eXBlIFNvY2tldE1lc3NhZ2VWaWV3PFRNZXNzYWdlRGF0YSA9IHVua25vd24+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, ...(ngDevMode ? [{ debugName: \"_signal\" }] : []));\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnkvcXVlcnkudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcvRixPQUFPLEVBQWtCLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFZdEMsT0FBTyxFQUFtRCxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDOUYsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hFLE9BQU8sRUFBd0IseUJBQXlCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUF5QjNFLE1BQU0sVUFBVSxhQUFhO0lBQzNCLE9BQU8sVUFDTCxNQUFxQjtRQUVyQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFrQyxDQUFDO0lBQ3JHLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCO0lBQy9CLE9BQU8sVUFBdUMsTUFBcUI7UUFDakUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxF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QUssQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7U0FDakQ7S0FDRixDQUFDO0lBRUYsTUFBTSxXQUFXLEdBQUc7UUFDbEIsR0FBRyxRQUFRO1FBQ1gsS0FBSyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3ZHLENBQUM7SUFFRixPQUFPO1FBQ0wsUUFBUSxFQUFFLFdBQVc7UUFDckIsV0FBVyxFQUFFLGNBQWM7S0FDNUIsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEh0dHBTdGF0dXNDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0LCBpc0Rldk1vZGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUGFnaW5hdGVkIH0gZnJvbSAnQGV0aGxldGUvdHlwZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBmaWx0ZXIsIG1hcCwgb2YsIHN3aXRjaE1hcCwgdGFrZVdoaWxlLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEV4cGVyaW1lbnRhbFF1ZXJ5IH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgRW50aXR5U3RvcmUgfSBmcm9tICcuLi9lbnRpdHknO1xuaW1wb3J0IHsgQW55TGVnYWN5UXVlcnksIGlzTGVnYWN5UXVlcnkgfSBmcm9tICcuLi9leHBlcmltZW50YWwnO1xuaW1wb3J0IHsgdHJhbnNmb3JtR3FsIH0gZnJvbSAnLi4vZ3FsJztcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50IH0gZnJvbSAnLi4vcXVlcnktY2xpZW50JztcbmltcG9ydCB7XG4gIEFueVF1ZXJ5Q3JlYXRvcixcbiAgUXVlcnlBcmdzT2YsXG4gIFF1ZXJ5Q3JlYXRvcixcbiAgUXVlcnlEYXRhT2YsXG4gIFF1ZXJ5UmVzcG9uc2VPZixcbiAgUXVlcnlTdG9yZUlkT2YsXG4gIFF1ZXJ5U3RvcmVPZixcbn0gZnJvbSAnLi4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBRdWVyeUZvcm0gfSBmcm9tICcuLi9xdWVyeS1mb3JtJztcbmltcG9ydCB7IE1ldGhvZCwgUmVxdWVzdEhlYWRlcnMsIFJlcXVlc3RIZWFkZXJzTWV0aG9kTWFwLCB0cmFuc2Zvcm1NZXRob2QgfSBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCB7IGlzU3ltZm9ueVBhZ2VyZmFudGFPdXRPZlJhbmdlRXJyb3IgfSBmcm9tICcuLi9zeW1mb255JztcbmltcG9ydCB7IFF1ZXJ5Q29udGFpbmVyQ29uZmlnLCBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgQW55R3FsUXVlcnlDb25maWcsXG4gIEFueVF1ZXJ5LFxuICBBbnlRdWVyeUNvbGxlY3Rpb24sXG4gIEFueVF1ZXJ5Q29sbGVjdGlvbkRhdGEsXG4gIEFueVF1ZXJ5Q3JlYXRvckNvbGxlY3Rpb24sXG4gIEFueVJlc3RRdWVyeUNvbmZpZyxcbiAgQmFzZUFyZ3VtZW50cyxcbiAgQ2FuY2VsbGVkLFxuICBGYWlsdXJlLFxuICBHcWxRdWVyeUNvbmZpZyxcbiAgTG9hZGluZyxcbiAgUHJlcGFyZWQsXG4gIFF1ZXJ5Q29sbGVjdGlvbk9mLFxuICBRdWVyeVN0YXRlLFxuICBRdWVyeVN0YXRlUmVzcG9uc2VPZixcbiAgUXVlcnlTdGF0ZVR5cGUsXG4gIFJlc2V0UGFnZU9uRXJyb3JPcGVyYXRvckNvbmZpZyxcbiAgUm91dGVUeXBlLFxuICBTdWNjZXNzLFxufSBmcm9tICcuL3F1ZXJ5LnR5cGVzJztcblxudHlwZSBPbWl0TnVsbDxUPiA9IFQgZXh0ZW5kcyBudWxsID8gbmV2ZXIgOiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyU3VjY2VzcygpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIDxUIGV4dGVuZHMgUXVlcnlTdGF0ZSB8IG51bGwsIFJlc3BvbnNlIGV4dGVuZHMgUXVlcnlTdGF0ZVJlc3BvbnNlT2Y8T21pdE51bGw8VD4+PihcbiAgICBzb3VyY2U6IE9ic2VydmFibGU8VD4sXG4gICkge1xuICAgIHJldHVybiBzb3VyY2UucGlwZShmaWx0ZXIoKHZhbHVlKSA9PiBpc1F1ZXJ5U3RhdGVTdWNjZXNzKHZhbHVlKSkpIGFzIE9ic2VydmFibGU8U3VjY2VzczxSZXNwb25zZT4+O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWdub3JlQXV0b1JlZnJlc2goKSB7XG4gIHJldHVybiBmdW5jdGlvbiA8VCBleHRlbmRzIFF1ZXJ5U3RhdGUgfCBudWxsPihzb3VyY2U6IE9ic2VydmFibGU8VD4pIHtcbiAgICByZXR1cm4gc291cmNlLnBpcGUoZmlsdGVyKCh2YWx1ZSkgPT4gIWlzQXV0b1JlZnJlc2godmFsdWUpKSkgYXMgT2JzZXJ2YWJsZTxUPjtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckZhaWx1cmUoKSB7XG4gIHJldHVybiBmdW5jdGlvbiA8VCBleHRlbmRzIFF1ZXJ5U3RhdGUgfCBudWxsPihzb3VyY2U6IE9ic2VydmFibGU8VD4pIHtcbiAgICByZXR1cm4gc291cmNlLnBpcGUoZmlsdGVyKCh2YWx1ZSkgPT4gaXNRdWVyeVN0YXRlRmFpbHVyZSh2YWx1ZSkpKSBhcyBPYnNlcnZhYmxlPEZhaWx1cmU+O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyUXVlcnlTdGF0ZXMoYWxsb3dlZFN0YXRlczogUXVlcnlTdGF0ZVR5cGVbXSkge1xuICByZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBRdWVyeVN0YXRlIHwgbnVsbD4oc291cmNlOiBPYnNlcnZhYmxlPFQ+KSB7XG4gICAgcmV0dXJuIHNvdXJjZS5waXBlKGZpbHRlcigodmFsdWUpID0+IHZhbHVlICYmIGFsbG93ZWRTdGF0ZXMuaW5jbHVkZXModmFsdWUudHlwZSkpKSBhcyBPYnNlcnZhYmxlPFQ+O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFrZVVudGlsUmVzcG9uc2UoY29uZmlnPzogeyBleGNsdWRlTnVsbD86IGJvb2xlYW4gfSkge1xuICByZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBRdWVyeVN0YXRlIHwgbnVsbD4oc291cmNlOiBPYnNlcnZhYmxlPFQ+KSB7XG4gICAgcmV0dXJuIHNvdXJjZS5waXBlKFxuICAgICAgdGFrZVdoaWxlKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoY29uZmlnPy5leGNsdWRlTnVsbCAmJiB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc1F1ZXJ5U3RhdGVMb2FkaW5nKHZhbHVlKSB8fCBpc1F1ZXJ5U3RhdGVQcmVwYXJlZCh2YWx1ZSkgfHwgdmFsdWUgPT09IG51bGw7XG4gICAgICB9LCB0cnVlKSxcbiAgICApO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyTnVsbCgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIDxUPihzb3VyY2U6IE9ic2VydmFibGU8VD4pIHtcbiAgICByZXR1cm4gc291cmNlLnBpcGUoZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIE9taXROdWxsPFQ+ID0+IHZhbHVlICE9PSBudWxsKSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzd2l0Y2hRdWVyeVN0YXRlKCkge1xuICByZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBBbnlRdWVyeSB8IEV4cGVyaW1lbnRhbFF1ZXJ5LkFueUxlZ2FjeVF1ZXJ5IHwgbnVsbCwgRGF0YSBleHRlbmRzIFF1ZXJ5RGF0YU9mPFQ+PihcbiAgICBzb3VyY2U6IE9ic2VydmFibGU8VD4sXG4gICkge1xuICAgIHJldHVybiBzb3VyY2UucGlwZShzd2l0Y2hNYXAoKHZhbHVlKSA9PiB2YWx1ZT8uc3RhdGUkID8/IG9mKG51bGwpKSkgYXMgT2JzZXJ2YWJsZTxRdWVyeVN0YXRlPERhdGE+IHwgbnVsbD47XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzd2l0Y2hRdWVyeUNvbGxlY3Rpb25TdGF0ZSgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIDxUIGV4dGVuZHMgQW55UXVlcnlDb2xsZWN0aW9uIHwgbnVsbCwgRGF0YSBleHRlbmRzIEFueVF1ZXJ5Q29sbGVjdGlvbkRhdGE8T21pdE51bGw8VD4+PihcbiAgICBzb3VyY2U6IE9ic2VydmFibGU8VD4sXG4gICkge1xuICAgIHJldHVybiBzb3VyY2UucGlwZShzd2l0Y2hNYXAoKHZhbHVlKSA9PiB2YWx1ZT8ucXVlcnkuc3RhdGUkID8/IG9mKG51bGwpKSkgYXMgT2JzZXJ2YWJsZTxRdWVyeVN0YXRlPERhdGE+IHwgbnVsbD47XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCByZXNldFBhZ2VPbkVycm9yID1cbiAgPFQgZXh0ZW5kcyBBbnlRdWVyeSB8IEV4cGVyaW1lbnRhbFF1ZXJ5LkFueUxlZ2FjeVF1ZXJ5IHwgbnVsbCB8IHVuZGVmaW5lZCwgSiBleHRlbmRzIFF1ZXJ5Rm9ybTxhbnk+PihcbiAgICBjb25maWc6IFJlc2V0UGFnZU9uRXJyb3JPcGVyYXRvckNvbmZpZzxKPixcbiAgKSA9PlxuICAoc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiB7XG4gICAgY29uc3QgeyBxdWVyeUZvcm0sIHBhZ2VDb250cm9sS2V5ID0gJ3BhZ2UnIH0gPSBjb25maWc7XG5cbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgIXF1ZXJ5Rm9ybS5mb3JtLmNvbnRyb2xzW3BhZ2VDb250cm9sS2V5XSkge1xuICAgICAgY29uc29sZS53YXJuKGByZXNldFBhZ2VPbkVycm9yOiBxdWVyeUZvcm0uZm9ybS5jb250cm9sc1tcIiR7cGFnZUNvbnRyb2xLZXl9XCJdIGlzIHVuZGVmaW5lZGApO1xuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2UucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocSkgPT4ge1xuICAgICAgICBpZiAoIXEpIHtcbiAgICAgICAgICByZXR1cm4gb2YocSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcS5zdGF0ZSQucGlwZShcbiAgICAgICAgICB0YXAoKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzUXVlcnlTdGF0ZUZhaWx1cmUoc3RhdGUpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoIChzdGF0ZS5lcnJvci5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgLy8gVGhlIHBhZ2UgaXMgaW52YWxpZCAoaW4gcHJvZCBtb2RlLCBjb2RlIGlzIDQxNilcbiAgICAgICAgICAgICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5SYW5nZU5vdFNhdGlzZmlhYmxlOlxuICAgICAgICAgICAgICAgIHF1ZXJ5Rm9ybS5mb3JtLmNvbnRyb2xzW3BhZ2VDb250cm9sS2V5XT8ucGF0Y2hWYWx1ZSgxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAvLyBUaGUgcGFnZSBtaWdodCBiZSBpbnZhbGlkIChpbiBkZXYgbW9kZSwgY29kZSBpcyA1MDApXG4gICAgICAgICAgICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuSW50ZXJuYWxTZXJ2ZXJFcnJvcjpcbiAgICAgICAgICAgICAgICBpZiAoaXNTeW1mb255UGFnZXJmYW50YU91dE9mUmFuZ2VFcnJvcihzdGF0ZS5lcnJvci5kZXRhaWwpKSB7XG4gICAgICAgICAgICAgICAgICBxdWVyeUZvcm0uZm9ybS5jb250cm9sc1twYWdlQ29udHJvbEtleV0ucGF0Y2hWYWx1ZSgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsUmVzcG9uc2UoKSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCBpc1F1ZXJ5U3RhdGVMb2FkaW5nID0gKHN0YXRlOiBRdWVyeVN0YXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0YXRlIGlzIExvYWRpbmcgPT5cbiAgc3RhdGU/LnR5cGUgPT09IFF1ZXJ5U3RhdGVUeXBlLkxvYWRpbmc7XG5cbmV4cG9ydCBjb25zdCBpc1F1ZXJ5U3RhdGVTdWNjZXNzID0gKHN0YXRlOiBRdWVyeVN0YXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0YXRlIGlzIFN1Y2Nlc3MgPT5cbiAgc3RhdGU/LnR5cGUgPT09IFF1ZXJ5U3RhdGVUeXBlLlN1Y2Nlc3M7XG5cbmV4cG9ydCBjb25zdCBpc1F1ZXJ5U3RhdGVGYWlsdXJlID0gKHN0YXRlOiBRdWVyeVN0YXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0YXRlIGlzIEZhaWx1cmUgPT5cbiAgc3RhdGU/LnR5cGUgPT09IFF1ZXJ5U3RhdGVUeXBlLkZhaWx1cmU7XG5cbmV4cG9ydCBjb25zdCBpc1F1ZXJ5U3RhdGVDYW5jZWxsZWQgPSAoc3RhdGU6IFF1ZXJ5U3RhdGUgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RhdGUgaXMgQ2FuY2VsbGVkID0+XG4gIHN0YXRlPy50eXBlID09PSBRdWVyeVN0YXRlVHlwZS5DYW5jZWxsZWQ7XG5cbmV4cG9ydCBjb25zdCBpc1F1ZXJ5U3RhdGVQcmVwYXJlZCA9IChzdGF0ZTogUXVlcnlTdGF0ZSB8IG51bGwgfCB1bmRlZmluZWQpOiBzdGF0ZSBpcyBQcmVwYXJlZCA9PlxuICBzdGF0ZT8udHlwZSA9PT0gUXVlcnlTdGF0ZVR5cGUuUHJlcGFyZWQ7XG5cbmV4cG9ydCBjb25zdCBpc0F1dG9SZWZyZXNoID0gKHN0YXRlOiBRdWVyeVN0YXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT4gc3RhdGU/Lm1ldGEudHJpZ2dlcmVkVmlhID09PSAnYXV0byc7XG5cbmV4cG9ydCBjb25zdCBtZXJnZUhlYWRlcnMgPSAoLi4uaGVhZGVyczogQXJyYXk8UmVxdWVzdEhlYWRlcnMgfCBudWxsIHwgdW5kZWZpbmVkPikgPT4ge1xuICByZXR1cm4gaGVhZGVycy5yZWR1Y2UoKGFjYywgaGVhZGVycykgPT4ge1xuICAgIGlmICghaGVhZGVycykge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYWNjLFxuICAgICAgLi4uaGVhZGVycyxcbiAgICB9O1xuICB9LCB7fSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNHcWxRdWVyeUNvbmZpZyA9IDxcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFJvdXRlIGV4dGVuZHMgUm91dGVUeXBlPEFyZ3VtZW50cz4gfCB1bmRlZmluZWQsXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPihcbiAgY29uZmlnOiB1bmtub3duLFxuKTogY29uZmlnIGlzIEdxbFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+ID0+IHtcbiAgaWYgKCFjb25maWcgfHwgdHlwZW9mIGNvbmZpZyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShjb25maWcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ3F1ZXJ5JyBpbiBjb25maWcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgaXNRdWVyeSA9IDxUIGV4dGVuZHMgQW55UXVlcnkgfCBFeHBlcmltZW50YWxRdWVyeS5BbnlMZWdhY3lRdWVyeT4ocXVlcnk6IHVua25vd24pOiBxdWVyeSBpcyBUID0+IHtcbiAgaWYgKCFxdWVyeSB8fCB0eXBlb2YgcXVlcnkgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocXVlcnkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ3N0YXRlJCcgaW4gcXVlcnkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgaXNRdWVyeUNvbGxlY3Rpb24gPSA8VCBleHRlbmRzIEFueVF1ZXJ5Q29sbGVjdGlvbj4ocXVlcnk6IHVua25vd24pOiBxdWVyeSBpcyBUID0+IHtcbiAgaWYgKCFxdWVyeSB8fCB0eXBlb2YgcXVlcnkgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocXVlcnkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ3F1ZXJ5JyBpbiBxdWVyeSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBjcmVhdGVRdWVyeUNvbGxlY3Rpb25TdWJqZWN0YCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjYuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVRdWVyeUNvbGxlY3Rpb24gPSA8VCBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvckNvbGxlY3Rpb24sIFIgZXh0ZW5kcyBRdWVyeUNvbGxlY3Rpb25PZjxUPj4oXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcXVlcnlNYXA6IFQsXG4pID0+IG5ldyBCZWhhdmlvclN1YmplY3Q8UiB8IG51bGw+KG51bGwpO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUXVlcnlDb2xsZWN0aW9uU3ViamVjdCA9IDxUIGV4dGVuZHMgQW55UXVlcnlDcmVhdG9yQ29sbGVjdGlvbiwgUiBleHRlbmRzIFF1ZXJ5Q29sbGVjdGlvbk9mPFQ+PihcbiAgcXVlcnlNYXA6IFQsXG4gIGNvbmZpZz86IFF1ZXJ5Q29udGFpbmVyQ29uZmlnLFxuKSA9PiB7XG4gIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChjcmVhdGVRdWVyeUNvbGxlY3Rpb25TdWJqZWN0KTtcblxuICBjb25zdCBzdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSIHwgbnVsbD4obnVsbCk7XG5cbiAgYWRkUXVlcnlDb250YWluZXJIYW5kbGluZyhcbiAgICBzdWJqZWN0LnBpcGUobWFwKChzKSA9PiBzPy5xdWVyeSA/PyBudWxsKSksXG4gICAgKCkgPT4gc3ViamVjdC5nZXRWYWx1ZSgpPy5xdWVyeSA/PyBudWxsLFxuICAgIGNvbmZpZyxcbiAgKTtcblxuICByZXR1cm4gc3ViamVjdDtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVRdWVyeUNvbGxlY3Rpb25TaWduYWwgPSA8VCBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvckNvbGxlY3Rpb24sIFIgZXh0ZW5kcyBRdWVyeUNvbGxlY3Rpb25PZjxUPj4oXG4gIHF1ZXJ5TWFwOiBULFxuICBjb25maWc/OiBRdWVyeUNvbnRhaW5lckNvbmZpZyxcbikgPT4ge1xuICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoY3JlYXRlUXVlcnlDb2xsZWN0aW9uU2lnbmFsKTtcblxuICBjb25zdCBfc2lnbmFsID0gc2lnbmFsPFIgfCBudWxsPihudWxsKTtcblxuICBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nKFxuICAgIHRvT2JzZXJ2YWJsZShfc2lnbmFsKS5waXBlKG1hcCgocykgPT4gcz8ucXVlcnkgPz8gbnVsbCkpLFxuICAgICgpID0+IF9zaWduYWwoKT8ucXVlcnkgPz8gbnVsbCxcbiAgICBjb25maWcsXG4gICk7XG5cbiAgcmV0dXJuIF9zaWduYWw7XG59O1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdFF1ZXJ5ID0gPFQgZXh0ZW5kcyBBbnlRdWVyeSB8IEFueUxlZ2FjeVF1ZXJ5IHwgQW55UXVlcnlDb2xsZWN0aW9uIHwgbnVsbD4odjogVCkgPT5cbiAgKGlzUXVlcnkodikgPyB2IDogaXNMZWdhY3lRdWVyeSh2KSA/IHYgOiB2Py5xdWVyeSkgPz8gbnVsbDtcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRIZWFkZXJzID0gKFxuICBoZWFkZXJzOiBSZXF1ZXN0SGVhZGVycyB8IFJlcXVlc3RIZWFkZXJzTWV0aG9kTWFwIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgbWV0aG9kOiBNZXRob2QsXG4pID0+IHtcbiAgaWYgKCFoZWFkZXJzKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgaWYgKG1ldGhvZCBpbiBoZWFkZXJzKSB7XG4gICAgcmV0dXJuIChoZWFkZXJzW21ldGhvZF0gPz8ge30pIGFzIFJlcXVlc3RIZWFkZXJzO1xuICB9XG5cbiAgcmV0dXJuIGhlYWRlcnMgYXMgUmVxdWVzdEhlYWRlcnM7XG59O1xuXG5leHBvcnQgY29uc3QgY2FzdFF1ZXJ5Q3JlYXRvclR5cGVzID0gPFxuICBRQyBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvcixcbiAgQXJndW1lbnRzIGV4dGVuZHMgUXVlcnlBcmdzT2Y8UUM+LFxuICBSZXNwb25zZSBleHRlbmRzIFF1ZXJ5UmVzcG9uc2VPZjxRQz4sXG4gIFN0b3JlIGV4dGVuZHMgUXVlcnlTdG9yZU9mPFFDPixcbiAgRGF0YSBleHRlbmRzIFF1ZXJ5RGF0YU9mPFFDPixcbiAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPixcbiAgSWQgZXh0ZW5kcyBRdWVyeVN0b3JlSWRPZjxRQz4sXG4gIE92ZXJyaWRlQXJndW1lbnRzIGV4dGVuZHMgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCxcbiAgT3ZlcnJpZGVSZXNwb25zZSBleHRlbmRzIFJlc3BvbnNlIHwgdW5kZWZpbmVkLFxuPihjb25maWc6IHtcbiAgY3JlYXRvcjogUUM7XG4gIGFyZ3M/OiBPdmVycmlkZUFyZ3VtZW50cztcbiAgcmVzcG9uc2U/OiBPdmVycmlkZVJlc3BvbnNlO1xufSkgPT4ge1xuICBpZiAoY29uZmlnLmFyZ3M/LnBhdGhQYXJhbXMpIHtcbiAgICBjb25zb2xlLmVycm9yKGNvbmZpZyk7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggcGFyYW1zIGNhbm5vdCBiZSBvdmVycmlkZGVuIGluIGNhc3RRdWVyeUNyZWF0b3JUeXBlcy4gQ3JlYXRlIGEgbmV3IHF1ZXJ5IGNyZWF0b3IgaW5zdGVhZC4nKTtcbiAgfVxuXG4gIHJldHVybiBjb25maWcuY3JlYXRvciBhcyB1bmtub3duIGFzIFF1ZXJ5Q3JlYXRvcjxPdmVycmlkZUFyZ3VtZW50cywgT3ZlcnJpZGVSZXNwb25zZSwgUm91dGUsIFN0b3JlLCBEYXRhLCBJZD47XG59O1xuXG5leHBvcnQgY29uc3QgY29tcHV0ZVF1ZXJ5TWV0aG9kID0gKGNvbmZpZzogeyBjb25maWc6IEFueVJlc3RRdWVyeUNvbmZpZyB8IEFueUdxbFF1ZXJ5Q29uZmlnOyBjbGllbnQ6IFF1ZXJ5Q2xpZW50IH0pID0+IHtcbiAgbGV0IG1ldGhvZDogTWV0aG9kO1xuXG4gIGlmIChpc0dxbFF1ZXJ5Q29uZmlnKGNvbmZpZy5jb25maWcpKSB7XG4gICAgY29uc3QgdHJhbnNmZXJWaWEgPSBjb25maWcuY29uZmlnLnRyYW5zZmVyVmlhID8/IGNvbmZpZy5jbGllbnQuY29uZmlnLnJlcXVlc3Q/LmdxbD8udHJhbnNmZXJWaWE7XG4gICAgbWV0aG9kID0gdHJhbnNmb3JtTWV0aG9kKHsgbWV0aG9kOiBjb25maWcuY29uZmlnLm1ldGhvZCwgdHJhbnNmZXJWaWEgfSk7XG4gIH0gZWxzZSB7XG4gICAgbWV0aG9kID0gdHJhbnNmb3JtTWV0aG9kKHsgbWV0aG9kOiBjb25maWcuY29uZmlnLm1ldGhvZCB9KTtcbiAgfVxuXG4gIHJldHVybiBtZXRob2Q7XG59O1xuXG5leHBvcnQgY29uc3QgY29tcHV0ZVF1ZXJ5Qm9keSA9IChjb25maWc6IHtcbiAgY29uZmlnOiBBbnlSZXN0UXVlcnlDb25maWcgfCBBbnlHcWxRdWVyeUNvbmZpZztcbiAgY2xpZW50OiBRdWVyeUNsaWVudDtcbiAgbWV0aG9kOiBNZXRob2Q7XG4gIGFyZ3M/OiBCYXNlQXJndW1lbnRzO1xufSkgPT4ge1xuICBsZXQgYm9keTogdW5rbm93bjtcblxuICBpZiAoXG4gICAgY29uZmlnLm1ldGhvZCA9PT0gJ0dFVCcgfHxcbiAgICBjb25maWcubWV0aG9kID09PSAnSEVBRCcgfHxcbiAgICBjb25maWcubWV0aG9kID09PSAnT1BUSU9OUycgfHxcbiAgICAoaXNHcWxRdWVyeUNvbmZpZyhjb25maWcuY29uZmlnKSAmJlxuICAgICAgKGNvbmZpZy5jb25maWcudHJhbnNmZXJWaWEgPT09ICdHRVQnIHx8XG4gICAgICAgIChjb25maWcuY2xpZW50LmNvbmZpZy5yZXF1ZXN0Py5ncWw/LnRyYW5zZmVyVmlhID09PSAnR0VUJyAmJiAhY29uZmlnLmNvbmZpZy50cmFuc2ZlclZpYSkpKVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGlzR3FsUXVlcnlDb25maWcoY29uZmlnLmNvbmZpZykpIHtcbiAgICBjb25zdCBxdWVyeVRlbXBsYXRlID0gY29uZmlnLmNvbmZpZy5xdWVyeTtcbiAgICBjb25zdCBxdWVyeSA9IHRyYW5zZm9ybUdxbChxdWVyeVRlbXBsYXRlKTtcblxuICAgIGJvZHkgPSBxdWVyeShjb25maWcuYXJncz8udmFyaWFibGVzKTtcbiAgfSBlbHNlIHtcbiAgICBib2R5ID0gY29uZmlnLmFyZ3M/LmJvZHk7XG4gIH1cblxuICByZXR1cm4gYm9keTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb21wdXRlUXVlcnlBdXRoSGVhZGVyID0gKGNvbmZpZzoge1xuICBjb25maWc6IEFueVJlc3RRdWVyeUNvbmZpZyB8IEFueUdxbFF1ZXJ5Q29uZmlnO1xuICBjbGllbnQ6IFF1ZXJ5Q2xpZW50O1xufSkgPT4ge1xuICBsZXQgYXV0aEhlYWRlcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IG51bGwgPSBudWxsO1xuXG4gIGlmIChjb25maWcuY29uZmlnLnNlY3VyZSkge1xuICAgIGNvbnN0IGhlYWRlciA9IGNvbmZpZy5jbGllbnQuYXV0aFByb3ZpZGVyPy5oZWFkZXI7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBhdXRoSGVhZGVyID0gaGVhZGVyO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb25maWcuY2xpZW50LmF1dGhQcm92aWRlcj8uaGVhZGVyKSB7XG4gICAgaWYgKGNvbmZpZy5jb25maWcuc2VjdXJlID09PSB1bmRlZmluZWQgfHwgY29uZmlnLmNvbmZpZy5zZWN1cmUpIHtcbiAgICAgIGF1dGhIZWFkZXIgPSBjb25maWcuY2xpZW50LmF1dGhQcm92aWRlci5oZWFkZXI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGF1dGhIZWFkZXI7XG59O1xuXG5leHBvcnQgY29uc3QgY29tcHV0ZVF1ZXJ5SGVhZGVycyA9IChjb25maWc6IHtcbiAgY29uZmlnOiBBbnlSZXN0UXVlcnlDb25maWcgfCBBbnlHcWxRdWVyeUNvbmZpZztcbiAgY2xpZW50OiBRdWVyeUNsaWVudDtcbiAgYXJncz86IEJhc2VBcmd1bWVudHM7XG59KSA9PiB7XG4gIGNvbnN0IGF1dGhIZWFkZXIgPSBjb21wdXRlUXVlcnlBdXRoSGVhZGVyKGNvbmZpZyk7XG5cbiAgY29uc3QgbWVyZ2VkSGVhZGVycyA9XG4gICAgbWVyZ2VIZWFkZXJzKFxuICAgICAgZ2V0RGVmYXVsdEhlYWRlcnMoY29uZmlnLmNsaWVudC5jb25maWcucmVxdWVzdD8uaGVhZGVycywgY29uZmlnLmNvbmZpZy5tZXRob2QpLFxuICAgICAgYXV0aEhlYWRlcixcbiAgICAgIGNvbmZpZy5hcmdzPy5oZWFkZXJzLFxuICAgICkgfHwgdW5kZWZpbmVkO1xuXG4gIHJldHVybiBtZXJnZWRIZWFkZXJzO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbXB1dGVRdWVyeVF1ZXJ5UGFyYW1zID0gKGNvbmZpZzoge1xuICBjb25maWc6IEFueVJlc3RRdWVyeUNvbmZpZyB8IEFueUdxbFF1ZXJ5Q29uZmlnO1xuICBjbGllbnQ6IFF1ZXJ5Q2xpZW50O1xuICBhcmdzPzogQmFzZUFyZ3VtZW50cztcbn0pID0+IHtcbiAgaWYgKFxuICAgIGlzR3FsUXVlcnlDb25maWcoY29uZmlnLmNvbmZpZykgJiZcbiAgICAoY29uZmlnLmNvbmZpZy50cmFuc2ZlclZpYSA9PT0gJ0dFVCcgfHxcbiAgICAgIChjb25maWcuY2xpZW50LmNvbmZpZy5yZXF1ZXN0Py5ncWw/LnRyYW5zZmVyVmlhID09PSAnR0VUJyAmJiAhY29uZmlnLmNvbmZpZy50cmFuc2ZlclZpYSkpXG4gICkge1xuICAgIGNvbnN0IHF1ZXJ5VGVtcGxhdGUgPSBjb25maWcuY29uZmlnLnF1ZXJ5O1xuICAgIGNvbnN0IHF1ZXJ5ID0gdHJhbnNmb3JtR3FsKHF1ZXJ5VGVtcGxhdGUpO1xuXG4gICAgbGV0IHBhcmFtcyA9IHF1ZXJ5KGNvbmZpZy5hcmdzPy52YXJpYWJsZXMpO1xuXG4gICAgaWYgKGNvbmZpZy5hcmdzPy5xdWVyeVBhcmFtcykge1xuICAgICAgcGFyYW1zID0geyAuLi5wYXJhbXMsIC4uLmNvbmZpZy5hcmdzPy5xdWVyeVBhcmFtcyB9O1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmFyZ3M/LnF1ZXJ5UGFyYW1zO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhZ2luYXRlZEVudGl0eVZhbHVlVXBkYXRlciA9XG4gIDxcbiAgICBUIGV4dGVuZHMgUGFnaW5hdGVkPHVua25vd24+LFxuICAgIEFyZ3MgZXh0ZW5kcyBCYXNlQXJndW1lbnRzLFxuICAgIEVudGl0eSxcbiAgICBKIGV4dGVuZHMgVCBleHRlbmRzIFBhZ2luYXRlZDxpbmZlciBYPiA/IFggOiBuZXZlcixcbiAgPihcbiAgICBmaW5kRm46ICh2YWw6IEosIGVudGl0eTogRW50aXR5KSA9PiBib29sZWFuLFxuICApID0+XG4gICh7IHJlc3BvbnNlLCByYXdSZXNwb25zZSwgZW50aXR5IH06IHsgcmF3UmVzcG9uc2U6IFQ7IHJlc3BvbnNlOiBUOyBhcmdzOiBBcmdzOyBlbnRpdHk6IEVudGl0eSB9KSA9PiB7XG4gICAgY29uc3QgaW5kZXhPZkVudGl0eVJhdyA9IHJhd1Jlc3BvbnNlLml0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gZmluZEZuKGl0ZW0gYXMgSiwgZW50aXR5KSk7XG4gICAgY29uc3QgaW5kZXhPZkVudGl0eSA9IHJlc3BvbnNlLml0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gZmluZEZuKGl0ZW0gYXMgSiwgZW50aXR5KSk7XG5cbiAgICBpZiAoaW5kZXhPZkVudGl0eSA9PT0gLTEgfHwgaW5kZXhPZkVudGl0eVJhdyA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1Jhd1Jlc3BvbnNlID0ge1xuICAgICAgLi4ucmF3UmVzcG9uc2UsXG4gICAgICBpdGVtczogW1xuICAgICAgICAuLi5yYXdSZXNwb25zZS5pdGVtcy5zbGljZSgwLCBpbmRleE9mRW50aXR5UmF3KSxcbiAgICAgICAgZW50aXR5LFxuICAgICAgICAuLi5yYXdSZXNwb25zZS5pdGVtcy5zbGljZShpbmRleE9mRW50aXR5UmF3ICsgMSksXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBjb25zdCBuZXdSZXNwb25zZSA9IHtcbiAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgaXRlbXM6IFsuLi5yZXNwb25zZS5pdGVtcy5zbGljZSgwLCBpbmRleE9mRW50aXR5KSwgZW50aXR5LCAuLi5yZXNwb25zZS5pdGVtcy5zbGljZShpbmRleE9mRW50aXR5ICsgMSldLFxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVzcG9uc2U6IG5ld1Jlc3BvbnNlLFxuICAgICAgcmF3UmVzcG9uc2U6IG5ld1Jhd1Jlc3BvbnNlLFxuICAgIH07XG4gIH07XG4iXX0=","import { HttpStatusCode } from '@angular/common/http';\nimport { untracked } from '@angular/core';\nimport { BehaviorSubject, combineLatest, EMPTY, 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 if (!this._memoizedState$) {\n this._memoizedState$ = 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 return this._memoizedState$;\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._memoizedState$ = null;\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$), switchMap(([state, tokens]) => {\n if (state && isQueryStateLoading(state)) {\n return EMPTY;\n }\n if (isQueryStateFailure(state)) {\n this._updateEntityState({ type: 'failure', error: state.error, headers: {} }, meta, options);\n return EMPTY;\n }\n if (!state && !(tokens?.token || tokens?.refreshToken)) {\n return EMPTY;\n }\n return of(true);\n }), 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnkvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsS0FBSyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUVILEVBQUUsRUFDRixhQUFhLEVBQ2IsV0FBVyxFQUNYLElBQUksRUFDSixPQUFPLEVBRVAsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsRUFDSCxLQUFLLEdBQ04sTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFL0MsT0FBTyxFQUFlLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE9BQU8sRUFBOEMsTUFBTSxZQUFZLENBQUM7QUFhakYsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFFckIsTUFBTSxPQUFPLEtBQUs7SUF5Q2hCLElBQVksT0FBTztRQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxl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SUFDSCxhQUFhLENBQUMsVUFBa0I7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBRS9CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQixDQUFDLFVBQWtCO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2pDLENBQUM7UUFFRCxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNmLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYztRQUNaLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwU3RhdHVzQ29kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBFTVBUWSxcbiAgZmlsdGVyLFxuICBpbnRlcnZhbCxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgUmVwbGF5U3ViamVjdCxcbiAgc2hhcmVSZXBsYXksXG4gIHNraXAsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRha2VXaGlsZSxcbiAgdGFwLFxuICB0aW1lcixcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0JlYXJlckF1dGhQcm92aWRlciB9IGZyb20gJy4uL2F1dGgnO1xuaW1wb3J0IHsgRW50aXR5U3RvcmUgfSBmcm9tICcuLi9lbnRpdHknO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIHNob3VsZENhY2hlUXVlcnkgfSBmcm9tICcuLi9xdWVyeS1jbGllbnQnO1xuaW1wb3J0IHsgcmVxdWVzdCwgUmVxdWVzdEVycm9yLCBSZXF1ZXN0RXZlbnQsIFJlcXVlc3RIZWFkZXJzIH0gZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQge1xuICBCYXNlQXJndW1lbnRzLFxuICBFeGVjdXRlUXVlcnlPcHRpb25zLFxuICBHcWxRdWVyeUNvbmZpZyxcbiAgUG9sbENvbmZpZyxcbiAgUXVlcnlBdXRvUmVmcmVzaENvbmZpZyxcbiAgUXVlcnlTdGF0ZSxcbiAgUXVlcnlTdGF0ZU1ldGEsXG4gIFF1ZXJ5U3RhdGVUeXBlLFxuICBSZXN0UXVlcnlDb25maWcsXG4gIFJvdXRlVHlwZSxcbn0gZnJvbSAnLi9xdWVyeS50eXBlcyc7XG5pbXBvcnQge1xuICBjb21wdXRlUXVlcnlCb2R5LFxuICBjb21wdXRlUXVlcnlIZWFkZXJzLFxuICBjb21wdXRlUXVlcnlNZXRob2QsXG4gIGZpbHRlckZhaWx1cmUsXG4gIGZpbHRlclN1Y2Nlc3MsXG4gIGlzR3FsUXVlcnlDb25maWcsXG4gIGlzUXVlcnlTdGF0ZUNhbmNlbGxlZCxcbiAgaXNRdWVyeVN0YXRlRmFpbHVyZSxcbiAgaXNRdWVyeVN0YXRlTG9hZGluZyxcbiAgaXNRdWVyeVN0YXRlUHJlcGFyZWQsXG4gIGlzUXVlcnlTdGF0ZVN1Y2Nlc3MsXG4gIHN3aXRjaFF1ZXJ5U3RhdGUsXG4gIHRha2VVbnRpbFJlc3BvbnNlLFxufSBmcm9tICcuL3F1ZXJ5LnV0aWxzJztcblxubGV0IF9uZXh0UXVlcnlJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeTxcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFJvdXRlIGV4dGVuZHMgUm91dGVUeXBlPEFyZ3VtZW50cz4sXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiB7XG4gIHJlYWRvbmx5IF9pZCA9IF9uZXh0UXVlcnlJZCsrO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRMb2NhbElkID0gMDtcbiAgcHJpdmF0ZSBfcG9sbGluZ1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX29uQWJvcnQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfY3VycmVudFBvbGxDb25maWc6IFBvbGxDb25maWcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFVzZWQgdG8gdHJhY2sgd2hpY2ggY29tcG9uZW50cyBkZXBlbmQgb24gdGhpcyBxdWVyeS5cbiAgICogVGhlIGtleSBpcyB0aGUgY29tcG9uZW50J3MgX3ROb2RlIGluZGV4LlxuICAgKiBUaGUgdmFsdWUgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgY29tcG9uZW50IGhhcyBzdWJzY3JpYmVkIHRvIHRoaXMgcXVlcnkuXG4gICAqIFRoZSB2YWx1ZSBtaWdodCBpbmNyZWFzZSBzaW5jZSB3ZSBjYW50IGRpc3Rpbmd1aXNoIGJldHdlZW4gYSBjb21wb25lbnQgYW5kIGEgaG9zdCBkaXJlY3RpdmUgYXBwbGllZCB0byBpdC5cbiAgICovXG4gIF9kZXBlbmRlbnRzOiBSZWNvcmQ8bnVtYmVyLCBudW1iZXI+ID0ge307XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2RlcGVuZGVudHNDaGFuZ2VkJCA9IG5ldyBSZXBsYXlTdWJqZWN0PFJlY29yZDxudW1iZXIsIG51bWJlcj4+KCk7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2lzUG9sbGluZ1BhdXNlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX21lbW9pemVkU3RhdGUkOiBPYnNlcnZhYmxlPFF1ZXJ5U3RhdGU8RGF0YT4+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeVN0YXRlPFJlc3BvbnNlPj4oe1xuICAgIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLlByZXBhcmVkLFxuICAgIG1ldGE6IHsgaWQ6IHRoaXMuX2N1cnJlbnRMb2NhbElkLCB0cmlnZ2VyZWRWaWE6ICdwcm9ncmFtJyB9LFxuICB9KTtcblxuICBwcml2YXRlIGdldCBfbmV4dElkKCkge1xuICAgIHJldHVybiArK3RoaXMuX2N1cnJlbnRMb2NhbElkO1xuICB9XG5cbiAgZ2V0IHN0YXRlJCgpOiBPYnNlcnZhYmxlPFF1ZXJ5U3RhdGU8RGF0YT4+IHtcbiAgICBpZiAoIXRoaXMuX21lbW9pemVkU3RhdGUkKSB7XG4gICAgICB0aGlzLl9tZW1vaXplZFN0YXRlJCA9IHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgICB0YXAoKHMpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuX2NsaWVudC5jb25maWcubG9nZ2luZz8ucHJlcGFyZWRRdWVyeVN1YnNjcmlwdGlvbnMpIHJldHVybjtcblxuICAgICAgICAgIGlmIChpc1F1ZXJ5U3RhdGVQcmVwYXJlZChzKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICBgUXVlcnkgJHt0aGlzLl9yb3V0ZVdpdGhQYXJhbXN9IHdhcyBzdWJzY3JpYmVkIHRvIGluIHRoZSBwcmVwYXJlZCBzdGF0ZS4gRGlkIHlvdSBmb3JnZXQgdG8gY2FsbCAuZXhlY3V0ZSgpP2AsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgocykgPT4gdGhpcy5fdHJhbnNmb3JtU3RhdGUocykpLFxuICAgICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX21lbW9pemVkU3RhdGUkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBxdWVyeS5cbiAgICpcbiAgICogKipXYXJuaW5nISoqIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBgc3RhdGUkYCBvYnNlcnZhYmxlIGluIHRoYXQgaXQgZG9lcyBub3QgdXNlIHRoZSBxdWVyeSBzdG9yZS4gVGh1cywgdGhlIHJlc3BvbnNlIGRhdGEgbWlnaHQgYmUgb3V0ZGF0ZWQuXG4gICAqIFVzZSBgc3RhdGUkYCAob3IgYGZpcnN0VmFsdWVGcm9tKHN0YXRlJClgKSB0aGUgbW9zdCB1cC10by1kYXRlIGRhdGEuXG4gICAqL1xuICBnZXQgcmF3U3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBpc0V4cGlyZWQoKSB7XG4gICAgaWYgKGlzUXVlcnlTdGF0ZUxvYWRpbmcodGhpcy5yYXdTdGF0ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpc1F1ZXJ5U3RhdGVQcmVwYXJlZCh0aGlzLnJhd1N0YXRlKSB8fFxuICAgICAgaXNRdWVyeVN0YXRlQ2FuY2VsbGVkKHRoaXMucmF3U3RhdGUpIHx8XG4gICAgICBpc1F1ZXJ5U3RhdGVGYWlsdXJlKHRoaXMucmF3U3RhdGUpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0cyA9IHRoaXMucmF3U3RhdGUubWV0YS5leHBpcmVzQXQ7XG5cbiAgICBpZiAoIXRzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHMgPCBEYXRlLm5vdygpO1xuICB9XG5cbiAgZ2V0IGlzSW5Vc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5vYnNlcnZlZCB8fCBPYmplY3Qua2V5cyh0aGlzLl9kZXBlbmRlbnRzKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IF9zdWJzY3JpYmVyQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5vYnNlcnZlcnMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGlzUG9sbGluZygpIHtcbiAgICByZXR1cm4gISF0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGF1dG9SZWZyZXNoT25Db25maWcoKSB7XG4gICAgY29uc3QgYmFzZSA9IHRoaXMuX3F1ZXJ5Q29uZmlnLmF1dG9SZWZyZXNoT24gPz8ge307XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZDogUmVhZG9ubHk8UXVlcnlBdXRvUmVmcmVzaENvbmZpZz4gPSB7XG4gICAgICBxdWVyeUNsaWVudERlZmF1bHRIZWFkZXJzQ2hhbmdlOiBiYXNlLnF1ZXJ5Q2xpZW50RGVmYXVsdEhlYWRlcnNDaGFuZ2UgPz8gdHJ1ZSxcbiAgICAgIHdpbmRvd0ZvY3VzOiBiYXNlLndpbmRvd0ZvY3VzID8/IHRydWUsXG4gICAgfTtcblxuICAgIHJldHVybiB0cmFuc2Zvcm1lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBfZW5hYmxlU21hcnRQb2xsaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeUNvbmZpZy5lbmFibGVTbWFydFBvbGxpbmcgPz8gdHJ1ZTtcbiAgfVxuXG4gIGdldCBzdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlDb25maWcuZW50aXR5Py5zdG9yZSA/PyBudWxsO1xuICB9XG5cbiAgZ2V0IGNhbkJlQ2FjaGVkKCkge1xuICAgIHJldHVybiBzaG91bGRDYWNoZVF1ZXJ5KHRoaXMuX3F1ZXJ5Q29uZmlnLm1ldGhvZCk7XG4gIH1cblxuICBnZXQgX2lzSW5Nb2NrTW9kZSgpIHtcbiAgICByZXR1cm4gISF0aGlzLl9hcmd1bWVudHM/Lm1vY2s7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnQ6IFF1ZXJ5Q2xpZW50LFxuXG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IF9xdWVyeUNvbmZpZzpcbiAgICAgIHwgUmVzdFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+XG4gICAgICB8IEdxbFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+LFxuXG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IF9yb3V0ZVdpdGhQYXJhbXM6IFJvdXRlLFxuXG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IF9hcmd1bWVudHM6IEFyZ3VtZW50cyxcblxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBfcXVlcnlTdG9yZUtleTogc3RyaW5nLFxuICApIHt9XG5cbiAgZXhlY3V0ZShvcHRpb25zOiBFeGVjdXRlUXVlcnlPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7IHNraXBDYWNoZSA9IGZhbHNlLCBfdHJpZ2dlcmVkVmlhOiB0cmlnZ2VyZWRWaWEgPSAncHJvZ3JhbScsIGNhbmNlbFByZXZpb3VzID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgeyBhdXRoUHJvdmlkZXIgfSA9IHRoaXMuX2NsaWVudDtcbiAgICBjb25zdCBxdWVyeUNvbmZpZyA9IHRoaXMuX3F1ZXJ5Q29uZmlnO1xuXG4gICAgaWYgKCF0aGlzLmlzRXhwaXJlZCAmJiAhc2tpcENhY2hlICYmIGlzUXVlcnlTdGF0ZVN1Y2Nlc3ModGhpcy5yYXdTdGF0ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmIChxdWVyeUNvbmZpZy5zZWN1cmUgJiYgIWF1dGhQcm92aWRlciAmJiAhdGhpcy5faXNJbk1vY2tNb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBleGVjdXRlIHNlY3VyZSBxdWVyeSB3aXRob3V0IGF1dGggcHJvdmlkZXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZCA9IHRoaXMuX25leHRJZDtcbiAgICBjb25zdCBtZXRhOiBRdWVyeVN0YXRlTWV0YSA9IHsgaWQsIHRyaWdnZXJlZFZpYSB9O1xuXG4gICAgaWYgKGlzUXVlcnlTdGF0ZUxvYWRpbmcodGhpcy5yYXdTdGF0ZSkpIHtcbiAgICAgIGlmIChjYW5jZWxQcmV2aW91cykge1xuICAgICAgICB0aGlzLmFib3J0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVTdGF0ZSh7IHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkxvYWRpbmcsIG1ldGEgfSk7XG5cbiAgICBpZiAodGhpcy5faXNJbk1vY2tNb2RlKSB7XG4gICAgICB0aGlzLl9tb2NrUmVxdWVzdCh7fSwgbWV0YSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBnb1NpZ25hbCA9IG9mKHRydWUpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGF1dGhQcm92aWRlciAmJlxuICAgICAgICBpc0JlYXJlckF1dGhQcm92aWRlcihhdXRoUHJvdmlkZXIpICYmXG4gICAgICAgIHF1ZXJ5Q29uZmlnLnNlY3VyZSAmJlxuICAgICAgICAhaXNRdWVyeVN0YXRlU3VjY2VzcyhhdXRoUHJvdmlkZXIuY3VycmVudFJlZnJlc2hRdWVyeT8ucmF3U3RhdGUpXG4gICAgICApIHtcbiAgICAgICAgLy8gT24gcGFnZSBsb2FkIHRoZSBxdWVyeSBtaWdodCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIGF1dGggcHJvdmlkZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG4gICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBhdXRoIHByb3ZpZGVyIHRvIGJlIHJlYWR5IGJlZm9yZSB3ZSBjYW4gZXhlY3V0ZSB0aGUgcXVlcnkuXG4gICAgICAgIGdvU2lnbmFsID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgLy8gVGhlIHRva2VucyBtaWdodCBnZXQgc2V0IHdpdGhvdXQgYSByZWZyZXNoIHF1ZXJ5IGJlaW5nIGNyZWF0ZWQgKGUuZy4pIGRpcmVjdGx5IGFmdGVyIGxvZ2luLlxuICAgICAgICAgIGF1dGhQcm92aWRlci5jdXJyZW50UmVmcmVzaFF1ZXJ5JC5waXBlKHN3aXRjaFF1ZXJ5U3RhdGUoKSwgdGFrZVVudGlsUmVzcG9uc2UoKSksXG4gICAgICAgICAgYXV0aFByb3ZpZGVyLnRva2VucyQucGlwZSh0YWtlKDEpKSxcbiAgICAgICAgXSkucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25BYm9ydCQpLFxuICAgICAgICAgIHN3aXRjaE1hcCgoW3N0YXRlLCB0b2tlbnNdKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdGUgJiYgaXNRdWVyeVN0YXRlTG9hZGluZyhzdGF0ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNRdWVyeVN0YXRlRmFpbHVyZShzdGF0ZSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlRW50aXR5U3RhdGUoeyB0eXBlOiAnZmFpbHVyZScsIGVycm9yOiBzdGF0ZS5lcnJvciwgaGVhZGVyczoge30gfSwgbWV0YSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzdGF0ZSAmJiAhKHRva2Vucz8udG9rZW4gfHwgdG9rZW5zPy5yZWZyZXNoVG9rZW4pKSB7XG4gICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUgYXMgY29uc3QpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGdvU2lnbmFsXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRob2QgPSBjb21wdXRlUXVlcnlNZXRob2QoeyBjb25maWc6IHF1ZXJ5Q29uZmlnLCBjbGllbnQ6IHRoaXMuX2NsaWVudCB9KTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBjb21wdXRlUXVlcnlCb2R5KHsgY29uZmlnOiBxdWVyeUNvbmZpZywgY2xpZW50OiB0aGlzLl9jbGllbnQsIGFyZ3M6IHRoaXMuX2FyZ3VtZW50cywgbWV0aG9kIH0pO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IGNvbXB1dGVRdWVyeUhlYWRlcnMoeyBjbGllbnQ6IHRoaXMuX2NsaWVudCwgY29uZmlnOiBxdWVyeUNvbmZpZywgYXJnczogdGhpcy5fYXJndW1lbnRzIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDxSZXNwb25zZT4oe1xuICAgICAgICAgICAgICB1cmxXaXRoUGFyYW1zOiB0aGlzLl9yb3V0ZVdpdGhQYXJhbXMgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiBxdWVyeUNvbmZpZy5yZXBvcnRQcm9ncmVzcyxcbiAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBxdWVyeUNvbmZpZy5yZXNwb25zZVR5cGUsXG4gICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogcXVlcnlDb25maWcud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICBjYWNoZUFkYXB0ZXI6IHRoaXMuX2NsaWVudC5jb25maWcucmVxdWVzdD8uY2FjaGVBZGFwdGVyLFxuICAgICAgICAgICAgICByZXRyeUZuOiB0aGlzLl9jbGllbnQuY29uZmlnLnJlcXVlc3Q/LnJldHJ5Rm4sXG4gICAgICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgICB0YXAoKHN0YXRlKSA9PiB0aGlzLl91cGRhdGVFbnRpdHlTdGF0ZShzdGF0ZSwgbWV0YSwgb3B0aW9ucykpLFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25BYm9ydCQpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIGlmICghaXNRdWVyeVN0YXRlTG9hZGluZyh0aGlzLnJhd1N0YXRlKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5fb25BYm9ydCQubmV4dCgpO1xuXG4gICAgdGhpcy5fdXBkYXRlU3RhdGUoe1xuICAgICAgdHlwZTogUXVlcnlTdGF0ZVR5cGUuQ2FuY2VsbGVkLFxuICAgICAgbWV0YTogeyBpZDogdGhpcy5yYXdTdGF0ZS5tZXRhLmlkLCB0cmlnZ2VyZWRWaWE6IHRoaXMucmF3U3RhdGUubWV0YS50cmlnZ2VyZWRWaWEgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcG9sbChjb25maWc6IFBvbGxDb25maWcpIHtcbiAgICBpZiAodGhpcy5fcG9sbGluZ1N1YnNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5fY3VycmVudFBvbGxDb25maWcgPSBjb25maWc7XG5cbiAgICBjb25zdCBpbnRlcnZhbCQgPSBpbnRlcnZhbChjb25maWcuaW50ZXJ2YWwpO1xuICAgIGNvbnN0IHBvbGwkID0gaW50ZXJ2YWwkLnBpcGUoXG4gICAgICBza2lwKGNvbmZpZy50cmlnZ2VySW1tZWRpYXRlbHkgPyAwIDogMSksXG4gICAgICB0YWtlVW50aWwoY29uZmlnLnRha2VVbnRpbCksXG4gICAgICB0YWtlV2hpbGUoKCkgPT4gIXRoaXMuX2lzUG9sbGluZ1BhdXNlZCksXG4gICAgICBmaWx0ZXIoKCkgPT4gIWlzUXVlcnlTdGF0ZUxvYWRpbmcodGhpcy5fc3RhdGUkLnZhbHVlKSksXG4gICAgKTtcblxuICAgIHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24gPSBwb2xsJC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4gdGhpcy5leGVjdXRlKHsgc2tpcENhY2hlOiB0cnVlLCBfdHJpZ2dlcmVkVmlhOiAncG9sbCcgfSksXG4gICAgICBjb21wbGV0ZTogKCkgPT4gdGhpcy5zdG9wUG9sbGluZygpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdG9wUG9sbGluZygpIHtcbiAgICB0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRQb2xsQ29uZmlnID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcGF1c2VQb2xsaW5nKCkge1xuICAgIHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fcG9sbGluZ1N1YnNjcmlwdGlvbiA9IG51bGw7XG5cbiAgICB0aGlzLl9pc1BvbGxpbmdQYXVzZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZXN1bWVQb2xsaW5nKCkge1xuICAgIGlmICghdGhpcy5faXNQb2xsaW5nUGF1c2VkIHx8ICF0aGlzLl9jdXJyZW50UG9sbENvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5faXNQb2xsaW5nUGF1c2VkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGhpcy5wb2xsKHsgLi4udGhpcy5fY3VycmVudFBvbGxDb25maWcsIHRyaWdnZXJJbW1lZGlhdGVseTogdHJ1ZSB9KTtcbiAgfVxuXG4gIG9uU3VjY2VzcyhjYWxsYmFjazogKHJlc3BvbnNlOiBEYXRhKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5zdGF0ZSQucGlwZSh0YWtlVW50aWxSZXNwb25zZSgpLCBmaWx0ZXJTdWNjZXNzKCkpLnN1YnNjcmliZSgoc3RhdGUpID0+IGNhbGxiYWNrKHN0YXRlLnJlc3BvbnNlKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvbkZhaWx1cmUoY2FsbGJhY2s6IChlcnJvcjogUmVxdWVzdEVycm9yPHVua25vd24+KSA9PiB2b2lkKSB7XG4gICAgdGhpcy5zdGF0ZSQucGlwZSh0YWtlVW50aWxSZXNwb25zZSgpLCBmaWx0ZXJGYWlsdXJlKCkpLnN1YnNjcmliZSgoc3RhdGUpID0+IGNhbGxiYWNrKHN0YXRlLmVycm9yKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIF9nZXRCZWFyZXJBdXRoUHJvdmlkZXIoKSB7XG4gICAgY29uc3QgYXV0aFByb3ZpZGVyID0gdGhpcy5fY2xpZW50LmF1dGhQcm92aWRlcjtcblxuICAgIGlmIChhdXRoUHJvdmlkZXIgJiYgaXNCZWFyZXJBdXRoUHJvdmlkZXIoYXV0aFByb3ZpZGVyKSkge1xuICAgICAgcmV0dXJuIGF1dGhQcm92aWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUVudGl0eVN0YXRlKFxuICAgIHJlcXVlc3RFdmVudDogUmVxdWVzdEV2ZW50PFJlc3BvbnNlPixcbiAgICBtZXRhOiBRdWVyeVN0YXRlTWV0YSxcbiAgICBvcHRpb25zPzogRXhlY3V0ZVF1ZXJ5T3B0aW9ucyxcbiAgKSB7XG4gICAgc3dpdGNoIChyZXF1ZXN0RXZlbnQudHlwZSkge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgY2FzZSAnZGVsYXktcmV0cnknOiB7XG4gICAgICAgIGNvbnN0IHsgdHlwZSwgcmV0cnlEZWxheSwgcmV0cnlOdW1iZXIgfSA9IHJlcXVlc3RFdmVudDtcbiAgICAgICAgY29uc3QgbmV3TWV0YTogUXVlcnlTdGF0ZU1ldGEgPSB7IC4uLm1ldGEsIGlzV2FpdGluZ0ZvclJldHJ5OiB0eXBlID09PSAnZGVsYXktcmV0cnknLCByZXRyeURlbGF5LCByZXRyeU51bWJlciB9O1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZVN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5Mb2FkaW5nLFxuICAgICAgICAgIG1ldGE6IG5ld01ldGEsXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAndXBsb2FkLXByb2dyZXNzJzpcbiAgICAgIGNhc2UgJ2Rvd25sb2FkLXByb2dyZXNzJzoge1xuICAgICAgICB0aGlzLl91cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgdHlwZTogUXVlcnlTdGF0ZVR5cGUuTG9hZGluZyxcbiAgICAgICAgICBwcm9ncmVzczogcmVxdWVzdEV2ZW50LnByb2dyZXNzLFxuICAgICAgICAgIHBhcnRpYWxUZXh0OiAncGFydGlhbFRleHQnIGluIHJlcXVlc3RFdmVudCA/IHJlcXVlc3RFdmVudC5wYXJ0aWFsVGV4dCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtZXRhLFxuICAgICAgICB9KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnc3VjY2Vzcyc6IHtcbiAgICAgICAgY29uc3QgeyByZXNwb25zZSwgZXhwaXJlc0luVGltZXN0YW1wLCBoZWFkZXJzIH0gPSByZXF1ZXN0RXZlbnQ7XG4gICAgICAgIGNvbnN0IGlzR3FsID0gaXNHcWxRdWVyeUNvbmZpZyh0aGlzLl9xdWVyeUNvbmZpZyk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9XG4gICAgICAgICAgaXNHcWwgJiYgdHlwZW9mIHJlc3BvbnNlID09PSAnb2JqZWN0JyAmJiAhIXJlc3BvbnNlICYmICdkYXRhJyBpbiByZXNwb25zZVxuICAgICAgICAgICAgPyAocmVzcG9uc2VbJ2RhdGEnXSBhcyBSZXNwb25zZSlcbiAgICAgICAgICAgIDogKHJlc3BvbnNlIGFzIFJlc3BvbnNlKTtcblxuICAgICAgICBpZiAodGhpcy5fcXVlcnlDb25maWcuZW50aXR5ICYmIHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eS5zZXQpIHtcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eT8uaWQoeyBhcmdzOiB0aGlzLl9hcmd1bWVudHMsIHJlc3BvbnNlOiByZXNwb25zZURhdGEgfSk7XG5cbiAgICAgICAgICB0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHk/LnNldCh7XG4gICAgICAgICAgICBhcmdzOiB0aGlzLl9hcmd1bWVudHMsXG4gICAgICAgICAgICByZXNwb25zZTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBzdG9yZTogdGhpcy5fcXVlcnlDb25maWcuZW50aXR5LnN0b3JlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoe1xuICAgICAgICAgIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLlN1Y2Nlc3MsXG4gICAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgIG1ldGE6IHsgLi4ubWV0YSwgZXhwaXJlc0F0OiBleHBpcmVzSW5UaW1lc3RhbXAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2ZhaWx1cmUnOiB7XG4gICAgICAgIGNvbnN0IHsgZXJyb3IgfSA9IHJlcXVlc3RFdmVudDtcbiAgICAgICAgY29uc3QgZmFpbHVyZSA9ICgpID0+IHRoaXMuX3VwZGF0ZVN0YXRlKHsgdHlwZTogUXVlcnlTdGF0ZVR5cGUuRmFpbHVyZSwgZXJyb3IsIG1ldGEgfSk7XG4gICAgICAgIGNvbnN0IGJlYXJlckF1dGhQcm92aWRlciA9IHRoaXMuX2dldEJlYXJlckF1dGhQcm92aWRlcigpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhYmVhcmVyQXV0aFByb3ZpZGVyIHx8XG4gICAgICAgICAgb3B0aW9ucz8uX2lzVW5hdXRob3JpemVkUmV0cnkgfHxcbiAgICAgICAgICBlcnJvci5zdGF0dXMgIT09IEh0dHBTdGF0dXNDb2RlLlVuYXV0aG9yaXplZCB8fFxuICAgICAgICAgICFiZWFyZXJBdXRoUHJvdmlkZXIuc2hvdWxkUmVmcmVzaE9uVW5hdXRob3JpemVkUmVzcG9uc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGZhaWx1cmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gYmVhcmVyQXV0aFByb3ZpZGVyLl9yZWZyZXNoUXVlcnkoKTtcbiAgICAgICAgaWYgKCFxdWVyeSkgcmV0dXJuIGZhaWx1cmUoKTtcblxuICAgICAgICBxdWVyeS5zdGF0ZSRcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbFJlc3BvbnNlKCksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25BYm9ydCQpLFxuICAgICAgICAgICAgdGFwKChzdGF0ZSkgPT5cbiAgICAgICAgICAgICAgaXNRdWVyeVN0YXRlU3VjY2VzcyhzdGF0ZSkgPyB0aGlzLmV4ZWN1dGUoeyAuLi5vcHRpb25zLCBfaXNVbmF1dGhvcml6ZWRSZXRyeTogdHJ1ZSB9KSA6IGZhaWx1cmUoKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnY2FuY2VsJzoge1xuICAgICAgICB0aGlzLl91cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgdHlwZTogUXVlcnlTdGF0ZVR5cGUuQ2FuY2VsbGVkLFxuICAgICAgICAgIG1ldGEsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RyYW5zZm9ybVN0YXRlKHM6IFF1ZXJ5U3RhdGU8UmVzcG9uc2U+KTogT2JzZXJ2YWJsZTxRdWVyeVN0YXRlPERhdGE+PiB7XG4gICAgaWYgKCFpc1F1ZXJ5U3RhdGVTdWNjZXNzKHMpIHx8ICF0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHk/LmdldCkge1xuICAgICAgcmV0dXJuIG9mKHMpIGFzIE9ic2VydmFibGU8UXVlcnlTdGF0ZTxEYXRhPj47XG4gICAgfVxuXG4gICAgY29uc3QgaWQgPSB0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHkuaWQoeyBhcmdzOiB0aGlzLl9hcmd1bWVudHMsIHJlc3BvbnNlOiBzLnJlc3BvbnNlIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eVxuICAgICAgLmdldCh7IGFyZ3M6IHRoaXMuX2FyZ3VtZW50cywgaWQsIHJlc3BvbnNlOiBzLnJlc3BvbnNlLCBzdG9yZTogdGhpcy5fcXVlcnlDb25maWcuZW50aXR5LnN0b3JlIH0pXG4gICAgICAucGlwZShtYXAoKHYpID0+ICh7IC4uLnMsIHJlc3BvbnNlOiB2IH0pKSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVTdGF0ZShzOiBRdWVyeVN0YXRlPFJlc3BvbnNlPikge1xuICAgIC8vIFdlIG5lZWQgdG8gdXNlIHVudHJhY2tlZCBoZXJlIHRvIGF2b2lkIEFuZ3VsYXIncyBcImFsbG93U2lnbmFsV3JpdGVzIGlzIGZhbHNlXCIgZXJyb3Igd2hlbiBleGVjdXRpbmcgcXVlcmllcyBpbnNpZGUgQW5ndWxhcidzIGNvbXB1dGVkL2VmZmVjdCBzaWduYWwgZnVuY3Rpb25zLlxuICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLl9zdGF0ZSQubmV4dChzKSk7XG4gIH1cblxuICBwcml2YXRlIF9tb2NrUmVxdWVzdChoZWFkZXJzOiBSZXF1ZXN0SGVhZGVycyB8IHVuZGVmaW5lZCwgbWV0YTogUXVlcnlTdGF0ZU1ldGEsIG9wdGlvbnM6IEV4ZWN1dGVRdWVyeU9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuX2FyZ3VtZW50cz8ubW9jaykgcmV0dXJuO1xuXG4gICAgY29uc3QgeyBkZWxheSA9IDIwMCwgZXJyb3IsIHJlc3BvbnNlLCByZXRyeUludG9SZXNwb25zZSA9IGZhbHNlLCBwcm9ncmVzcyB9ID0gdGhpcy5fYXJndW1lbnRzLm1vY2s7XG4gICAgY29uc3QgcHJvZ3Jlc3NGaWxlU2l6ZSA9IHByb2dyZXNzPy5maWxlU2l6ZSA/PyAxMDAwMDAwO1xuICAgIGNvbnN0IHByb2dyZXNzRXZlbnRUeXBlID0gcHJvZ3Jlc3M/LmV2ZW50VHlwZSA/PyAndXBsb2FkJztcbiAgICBjb25zdCBwcm9ncmVzc0V2ZW50Q291bnQgPSBwcm9ncmVzcz8uZXZlbnRDb3VudCA/PyA1O1xuICAgIGNvbnN0IHByb2dyZXNzT21pdFRvdGFsID0gcHJvZ3Jlc3M/Lm9taXRUb3RhbCA/PyBmYWxzZTtcbiAgICBjb25zdCBvbWl0UGFydGlhbFRleHQgPSBwcm9ncmVzcz8ub21pdFBhcnRpYWxUZXh0ID8/IGZhbHNlO1xuXG4gICAgY29uc3QgZmluYWxSZXNvbHZlTW9jayA9ICgpID0+IHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICB0aGlzLl91cGRhdGVFbnRpdHlTdGF0ZSh7IGVycm9yLCBoZWFkZXJzOiBoZWFkZXJzID8/IHt9LCB0eXBlOiAnZmFpbHVyZScgfSwgbWV0YSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fdXBkYXRlRW50aXR5U3RhdGUoXG4gICAgICAgIHsgcmVzcG9uc2U6IHJlc3BvbnNlIGFzIFJlc3BvbnNlLCBoZWFkZXJzOiBoZWFkZXJzID8/IHt9LCB0eXBlOiAnc3VjY2VzcycgfSxcbiAgICAgICAgbWV0YSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGlmIChwcm9ncmVzcykge1xuICAgICAgaW50ZXJ2YWwoZGVsYXkpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoYSkgPT4ge1xuICAgICAgICAgICAgaWYgKGEgPT09IHByb2dyZXNzRXZlbnRDb3VudCArIDEpIHtcbiAgICAgICAgICAgICAgZmluYWxSZXNvbHZlTW9jaygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IE1hdGgubWluKHByb2dyZXNzRmlsZVNpemUgKiBhLCBwcm9ncmVzc0ZpbGVTaXplICogcHJvZ3Jlc3NFdmVudENvdW50KTtcbiAgICAgICAgICAgICAgY29uc3QgcGVyY2VudGFnZSA9IChjdXJyZW50IC8gKHByb2dyZXNzRmlsZVNpemUgKiBwcm9ncmVzc0V2ZW50Q291bnQpKSAqIDEwMDtcblxuICAgICAgICAgICAgICB0aGlzLl91cGRhdGVFbnRpdHlTdGF0ZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBwcm9ncmVzc0V2ZW50VHlwZSA9PT0gJ3VwbG9hZCcgPyAndXBsb2FkLXByb2dyZXNzJyA6ICdkb3dubG9hZC1wcm9ncmVzcycsXG4gICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzID8/IHt9LFxuICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHsgY3VycmVudCwgLi4uKHByb2dyZXNzT21pdFRvdGFsID8ge30gOiB7IHBlcmNlbnRhZ2UsIHRvdGFsOiBwcm9ncmVzc0ZpbGVTaXplIH0pIH0sXG4gICAgICAgICAgICAgICAgICBwYXJ0aWFsVGV4dDogb21pdFBhcnRpYWxUZXh0ID8gdW5kZWZpbmVkIDogYFBhcnRpYWwgdGV4dCAke2F9YCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1ldGEsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25BYm9ydCQpLFxuICAgICAgICAgIHRha2VXaGlsZSgoYSkgPT4gYSA8IHByb2dyZXNzRXZlbnRDb3VudCArIDEsIHRydWUpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9IGVsc2UgaWYgKHJldHJ5SW50b1Jlc3BvbnNlKSB7XG4gICAgICBpbnRlcnZhbChkZWxheSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChhKSA9PiB7XG4gICAgICAgICAgICBpZiAoYSA9PT0gMykge1xuICAgICAgICAgICAgICBmaW5hbFJlc29sdmVNb2NrKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBhTW9kaWZpZWQgPSBhICsgMTtcbiAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlRW50aXR5U3RhdGUoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ2RlbGF5LXJldHJ5JyxcbiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMgPz8ge30sXG4gICAgICAgICAgICAgICAgICByZXRyeURlbGF5OiAxMDAwICsgMTAwMCAqIGFNb2RpZmllZCxcbiAgICAgICAgICAgICAgICAgIHJldHJ5TnVtYmVyOiBhTW9kaWZpZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXRhLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uQWJvcnQkKSxcbiAgICAgICAgICB0YWtlV2hpbGUoKGEpID0+IGEgPCAzLCB0cnVlKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpbWVyKGRlbGF5KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4gZmluYWxSZXNvbHZlTW9jaygpKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25BYm9ydCQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfYWRkRGVwZW5kZW50KHROb2RlSW5kZXg6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5fZGVwZW5kZW50c1t0Tm9kZUluZGV4XSkge1xuICAgICAgdGhpcy5fZGVwZW5kZW50c1t0Tm9kZUluZGV4XSA9IDA7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVwZW5kZW50c1t0Tm9kZUluZGV4XSsrO1xuXG4gICAgdGhpcy5fZGVwZW5kZW50c0NoYW5nZWQkLm5leHQodGhpcy5fZGVwZW5kZW50cyk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfcmVtb3ZlRGVwZW5kZW50KHROb2RlSW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5fZGVwZW5kZW50c1t0Tm9kZUluZGV4XTtcbiAgICBpZiAoY291bnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kZXBlbmRlbnRzW3ROb2RlSW5kZXhdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2RlcGVuZGVudHNbdE5vZGVJbmRleF0tLTtcbiAgICB9XG5cbiAgICBpZiAoY291bnQgPD0gMSkge1xuICAgICAgZGVsZXRlIHRoaXMuX2RlcGVuZGVudHNbdE5vZGVJbmRleF07XG4gICAgfVxuXG4gICAgdGhpcy5fZGVwZW5kZW50c0NoYW5nZWQkLm5leHQodGhpcy5fZGVwZW5kZW50cyk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfaGFzRGVwZW5kZW50cygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fZGVwZW5kZW50cykubGVuZ3RoID4gMDtcbiAgfVxufVxuIl19","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 forceRefresh() {\n return this._refreshQuery();\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\n .prepare(args)\n .execute({ skipCache: true, _isUnauthorizedRetry: 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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QUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsQ0FBQztvQkFDM0MsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLGlCQUFpQixFQUFFLEVBQ25CLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFFZixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlbGV0ZUNvb2tpZSwgZ2V0Q29va2llLCBzZXRDb29raWUgfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgdGFrZVVudGlsLCB0YXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBpc1F1ZXJ5U3RhdGVGYWlsdXJlLFxuICBpc1F1ZXJ5U3RhdGVMb2FkaW5nLFxuICBpc1F1ZXJ5U3RhdGVTdWNjZXNzLFxuICBzd2l0Y2hRdWVyeVN0YXRlLFxuICB0YWtlVW50aWxSZXNwb25zZSxcbn0gZnJvbSAnLi4vcXVlcnknO1xuaW1wb3J0IHsgQW55UXVlcnlDcmVhdG9yLCBDb25zdHJ1Y3RRdWVyeSwgUXVlcnlSZXNwb25zZU9mIH0gZnJvbSAnLi4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQge1xuICBBdXRoQmVhcmVyUmVmcmVzaFN0cmF0ZWd5LFxuICBBdXRoUHJvdmlkZXIsXG4gIEF1dGhQcm92aWRlckJlYXJlckNvbmZpZyxcbiAgVG9rZW5SZXNwb25zZSxcbn0gZnJvbSAnLi9hdXRoLXByb3ZpZGVyLnR5cGVzJztcbmltcG9ydCB7IGRlY3J5cHRCZWFyZXIgfSBmcm9tICcuL2F1dGgtcHJvdmlkZXIudXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQmVhcmVyQXV0aFByb3ZpZGVyPFQgZXh0ZW5kcyBBbnlRdWVyeUNyZWF0b3I+IGltcGxlbWVudHMgQXV0aFByb3ZpZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50UmVmcmVzaFF1ZXJ5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29uc3RydWN0UXVlcnk8VD4gfCBudWxsPihudWxsKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUb2tlblJlc3BvbnNlPih7XG4gICAgdG9rZW46IG51bGwsXG4gICAgcmVmcmVzaFRva2VuOiBudWxsLFxuICB9KTtcblxuICBnZXQgaGVhZGVyKCkge1xuICAgIHJldHVybiB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLl90b2tlbnMkLmdldFZhbHVlKCkudG9rZW59YCB9O1xuICB9XG5cbiAgZ2V0IHRva2VucyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VucyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgdG9rZW5zKCkge1xuICAgIHJldHVybiB0aGlzLl90b2tlbnMkLmdldFZhbHVlKCk7XG4gIH1cblxuICBnZXQgY3VycmVudFJlZnJlc2hRdWVyeSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZWZyZXNoUXVlcnkkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSZWZyZXNoUXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZWZyZXNoUXVlcnkkLmdldFZhbHVlKCk7XG4gIH1cblxuICBnZXQgc2hvdWxkUmVmcmVzaE9uVW5hdXRob3JpemVkUmVzcG9uc2UoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcgJiZcbiAgICAgICh0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5yZWZyZXNoT25VbmF1dGhvcml6ZWRSZXNwb25zZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnLnJlZnJlc2hPblVuYXV0aG9yaXplZFJlc3BvbnNlKVxuICAgICk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgX2NvbmZpZzogQXV0aFByb3ZpZGVyQmVhcmVyQ29uZmlnPFQ+KSB7XG4gICAgY29uc3QgY29va2llRW5hYmxlZCA9IF9jb25maWcucmVmcmVzaENvbmZpZz8uY29va2llRW5hYmxlZCA/PyB0cnVlO1xuICAgIGNvbnN0IGNvb2tpZVRva2VuID1cbiAgICAgIF9jb25maWcucmVmcmVzaENvbmZpZz8uY29va2llTmFtZSAmJiBjb29raWVFbmFibGVkID8gKGdldENvb2tpZShfY29uZmlnLnJlZnJlc2hDb25maWcuY29va2llTmFtZSkgPz8gbnVsbCkgOiBudWxsO1xuXG4gICAgdGhpcy5fdG9rZW5zJC5uZXh0KHtcbiAgICAgIHRva2VuOiBfY29uZmlnLnRva2VuIHx8IG51bGwsXG4gICAgICByZWZyZXNoVG9rZW46IF9jb25maWcucmVmcmVzaENvbmZpZz8udG9rZW4gfHwgY29va2llVG9rZW4gfHwgbnVsbCxcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy50b2tlbnMudG9rZW4gJiYgIXRoaXMudG9rZW5zLnJlZnJlc2hUb2tlbikge1xuICAgICAgaWYgKCFfY29uZmlnLnJlZnJlc2hDb25maWc/LmNvb2tpZU5hbWUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnQSBCZWFyZXJBdXRoUHJvdmlkZXIgd2FzIGNyZWF0ZWQgd2l0aG91dCB0b2tlbiBvciByZWZyZXNoIHRva2VuLiBZb3Ugc2hvdWxkIHByb3ZpZGUgYXQgbGVhc3QgYSBjb29raWVOYW1lIHdoZXJlIHRoZSByZWZyZXNoIHRva2VuIG1pZ2h0IGJlIHN0b3JlZC4nLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLnRva2VuKSB7XG4gICAgICB0aGlzLl9wcmVwYXJlRm9yUmVmcmVzaCgpO1xuXG4gICAgICBpZiAodGhpcy50b2tlbnMucmVmcmVzaFRva2VuICYmIHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnPy5jb29raWVOYW1lICYmIGNvb2tpZUVuYWJsZWQpIHtcbiAgICAgICAgdGhpcy5fc2V0Q29va2llKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnRva2Vucy5yZWZyZXNoVG9rZW4pIHtcbiAgICAgIHRoaXMuX3JlZnJlc2hRdWVyeSgpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFuVXAoKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICB0aGlzLl9kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2N1cnJlbnRSZWZyZXNoUXVlcnkkLm5leHQobnVsbCk7XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWc/LmNvb2tpZU5hbWUpIHtcbiAgICAgIHRoaXMuX2RlbGV0ZUNvb2tpZSgpO1xuICAgIH1cbiAgfVxuXG4gIGVuYWJsZUNvb2tpZSgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnPy5jb29raWVOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvb2tpZSBuYW1lIHdhcyBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50b2tlbnMucmVmcmVzaFRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlZnJlc2ggdG9rZW4gd2FzIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcuY29va2llRW5hYmxlZCA9IHRydWU7XG5cbiAgICB0aGlzLl9zZXRDb29raWUoKTtcbiAgfVxuXG4gIGRpc2FibGVDb29raWUoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZz8uY29va2llTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjb29raWUgbmFtZSB3YXMgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5jb29raWVFbmFibGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLl9kZWxldGVDb29raWUoKTtcbiAgfVxuXG4gIGZvcmNlUmVmcmVzaCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVmcmVzaFF1ZXJ5KCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRDb29raWUoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZz8uY29va2llTmFtZSB8fCAhdGhpcy50b2tlbnMucmVmcmVzaFRva2VuKSByZXR1cm47XG5cbiAgICBzZXRDb29raWUoXG4gICAgICB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5jb29raWVOYW1lLFxuICAgICAgdGhpcy50b2tlbnMucmVmcmVzaFRva2VuLFxuICAgICAgdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcuY29va2llRXhwaXJlc0luRGF5cyxcbiAgICAgIHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnLmNvb2tpZURvbWFpbixcbiAgICAgIHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnLmNvb2tpZVBhdGgsXG4gICAgICB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5jb29raWVTYW1lU2l0ZSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGVsZXRlQ29va2llKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWc/LmNvb2tpZU5hbWUpIHJldHVybjtcblxuICAgIGRlbGV0ZUNvb2tpZShcbiAgICAgIHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnLmNvb2tpZU5hbWUsXG4gICAgICB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5jb29raWVQYXRoLFxuICAgICAgdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcuY29va2llRG9tYWluLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9wcmVwYXJlRm9yUmVmcmVzaCgpIHtcbiAgICBpZiAoIXRoaXMudG9rZW5zLnRva2VuIHx8ICF0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJlYXJlciA9IGRlY3J5cHRCZWFyZXIodGhpcy50b2tlbnMudG9rZW4pO1xuXG4gICAgaWYgKCFiZWFyZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBleHBpcmVzSW5Qcm9wZXJ0eU5hbWUgPSB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5leHBpcmVzSW5Qcm9wZXJ0eU5hbWUgfHwgJ2V4cCc7XG4gICAgY29uc3QgZXhwaXJlc0luID0gYmVhcmVyW2V4cGlyZXNJblByb3BlcnR5TmFtZV0gYXMgbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGZpdmVNaW51dGVzID0gNSAqIDYwICogMTAwMDtcbiAgICBjb25zdCByZWZyZXNoQnVmZmVyID0gdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcucmVmcmVzaEJ1ZmZlciA/PyBmaXZlTWludXRlcztcblxuICAgIGlmIChleHBpcmVzSW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCZWFyZXIgdG9rZW4gZG9lcyBub3QgY29udGFpbiBhbiAnJHtleHBpcmVzSW5Qcm9wZXJ0eU5hbWV9JyBwcm9wZXJ0eWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbWFpbmluZ1RpbWUgPSBuZXcgRGF0ZShleHBpcmVzSW4gKiAxMDAwKS5nZXRUaW1lKCkgLSByZWZyZXNoQnVmZmVyIC0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICBjb25zdCBzdHJhdGVneSA9IHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnLnN0cmF0ZWd5ID8/IEF1dGhCZWFyZXJSZWZyZXNoU3RyYXRlZ3kuQmVmb3JlRXhwaXJhdGlvbjtcblxuICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgIGNhc2UgQXV0aEJlYXJlclJlZnJlc2hTdHJhdGVneS5CZWZvcmVFeHBpcmF0aW9uOlxuICAgICAgICB0aW1lcihyZW1haW5pbmdUaW1lKVxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9yZWZyZXNoUXVlcnkoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9yZWZyZXNoUXVlcnkoKSB7XG4gICAgY29uc3QgY3VycmVudFF1ZXJ5ID0gdGhpcy5fY3VycmVudFJlZnJlc2hRdWVyeSQuZ2V0VmFsdWUoKTtcblxuICAgIGlmIChpc1F1ZXJ5U3RhdGVMb2FkaW5nKGN1cnJlbnRRdWVyeT8ucmF3U3RhdGUpKSB7XG4gICAgICByZXR1cm4gY3VycmVudFF1ZXJ5O1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRSZWZyZXNoVG9rZW4gPSB0aGlzLnRva2Vucy5yZWZyZXNoVG9rZW47XG5cbiAgICBpZiAoIWN1cnJlbnRSZWZyZXNoVG9rZW4gfHwgIXRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXJncyA9IHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnLnJlcXVlc3RBcmdzQWRhcHRlcj8uKHtcbiAgICAgIHRva2VuOiB0aGlzLnRva2Vucy50b2tlbixcbiAgICAgIHJlZnJlc2hUb2tlbjogY3VycmVudFJlZnJlc2hUb2tlbixcbiAgICB9KSA/PyB7XG4gICAgICBib2R5OiB7IHJlZnJlc2hUb2tlbjogY3VycmVudFJlZnJlc2hUb2tlbiB9LFxuICAgIH07XG5cbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnLnF1ZXJ5Q3JlYXRvclxuICAgICAgLnByZXBhcmUoYXJncylcbiAgICAgIC5leGVjdXRlKHsgc2tpcENhY2hlOiB0cnVlLCBfaXNVbmF1dGhvcml6ZWRSZXRyeTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuX2N1cnJlbnRSZWZyZXNoUXVlcnkkLm5leHQocXVlcnkgYXMgQ29uc3RydWN0UXVlcnk8VD4pO1xuXG4gICAgdGhpcy5fY3VycmVudFJlZnJlc2hRdWVyeSRcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hRdWVyeVN0YXRlKCksXG4gICAgICAgIHRhcCgoc3RhdGUpID0+IHtcbiAgICAgICAgICBpZiAoaXNRdWVyeVN0YXRlU3VjY2VzcyhzdGF0ZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZz8ucmVzcG9uc2VBZGFwdGVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnLnJlc3BvbnNlQWRhcHRlcihzdGF0ZS5yZXNwb25zZSBhcyBRdWVyeVJlc3BvbnNlT2Y8VD4pO1xuXG4gICAgICAgICAgICAgIHRoaXMuX3Rva2VucyQubmV4dCh0b2tlbnMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5fdG9rZW5zJC5uZXh0KHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgIHRva2VuOiAoc3RhdGUucmVzcG9uc2UgYXMgYW55KVsndG9rZW4nXSxcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogKHN0YXRlLnJlc3BvbnNlIGFzIGFueSlbJ3JlZnJlc2hUb2tlbiddLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvb2tpZUVuYWJsZWQgPSB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZz8uY29va2llRW5hYmxlZCA/PyB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWc/LmNvb2tpZU5hbWUgJiYgdGhpcy50b2tlbnMucmVmcmVzaFRva2VuICYmIGNvb2tpZUVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0Q29va2llKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVGb3JSZWZyZXNoKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1F1ZXJ5U3RhdGVGYWlsdXJlKHN0YXRlKSkge1xuICAgICAgICAgICAgdGhpcy5fdG9rZW5zJC5uZXh0KHsgdG9rZW46IG51bGwsIHJlZnJlc2hUb2tlbjogbnVsbCB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnPy5jb29raWVOYW1lKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2RlbGV0ZUNvb2tpZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbFJlc3BvbnNlKCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cbn1cbiJdfQ==","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(...(ngDevMode ? [{ debugName: \"query\", alias: 'etQuery' }] : [{ alias: 'etQuery' }]));\n this.cache = input(false, ...(ngDevMode ? [{ debugName: \"cache\", alias: 'etQueryCache' }] : [{ 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.3.6\", ngImport: i0, type: QueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.6\", 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.3.6\", ngImport: i0, type: QueryDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[etQuery]',\n standalone: true,\n }]\n }], ctorParameters: () => [], propDecorators: { query: [{ type: i0.Input, args: [{ isSignal: true, alias: \"etQuery\", required: true }] }], cache: [{ type: i0.Input, args: [{ isSignal: true, alias: \"etQueryCache\", required: false }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RpcmVjdGl2ZXMvcXVlcnkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWtCLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JGLE9BQU8sRUFLTCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixtQkFBbUIsR0FDcEIsTUFBTSxVQUFVLENBQUM7QUFHbEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQWtENUMsTUFBTSxPQUFPLGNBQWM7SUFxQnpCLE1BQU0sQ0FBQyxzQkFBc0IsQ0FDM0IsR0FBc0IsRUFDdEIsR0FBWTtRQUVaLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEO1FBM0JRLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BDLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUV2QixpQkFBWSxHQUE2QjtZQUN4RCxTQUFTLEVBQUUsSUFBSTtZQUNmLE9BQU8sRUFBRSxJQUFJO1lBQ2IsT0FBTyxFQUFFLEtBQUs7WUFDZCxVQUFVLEVBQUUsS0FBSztZQUNqQixLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLElBQUk7WUFDWCxLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUM7UUFFRixVQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsd0NBQU0sS0FBSyxFQUFFLFNBQVMsT0FBbEIsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUMsQ0FBQztRQUVoRCxVQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUsseUNBQUksS0FBSyxFQUFFLGNBQWMsT0FBdkIsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEdBQUMsQ0FBQztRQUVoRCxlQUFVLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBVXhDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFcEYsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUV6QyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNiLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztvQkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO29CQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7b0JBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztvQkFDL0IsT0FBTztnQkFDVCxDQUFDO2dCQUVELElBQUksb0JBQW9CLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUNsRixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2xCLENBQUM7Z0JBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFFLEtBQUssQ0FBQyxJQUFpQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLEtBQW1CLENBQUM7WUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRTNCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2IsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQztvQkFDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLE1BQU0sQ0FBQztvQkFFeEcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDbkMsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDcEMsQ0FBQztnQkFFRCxJQUFJLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFtQyxDQUFDO29CQUN0RSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBbUMsQ0FBQztnQkFDMUUsQ0FBQztxQkFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUNyQyxDQUFDO2dCQUVELElBQUksbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztvQkFFdEMsSUFBSSxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO29CQUMvRCxDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ2pDLENBQUM7Z0JBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0EvRlUsY0FBYztrR0FBZCxjQUFjOzsyRkFBZCxjQUFjO2tCQUoxQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxXQUFXO29CQUNyQixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFcnJvckhhbmRsZXIsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbnlMZWdhY3lRdWVyeSwgaXNMZWdhY3lRdWVyeSB9IGZyb20gJy4uL2V4cGVyaW1lbnRhbC9pbnRlcm9wL2xlZ2FjeS1xdWVyeSc7XG5pbXBvcnQge1xuICBBbnlRdWVyeSxcbiAgQW55UXVlcnlDb2xsZWN0aW9uLFxuICBRdWVyeUNvbGxlY3Rpb25LZXlzT2YsXG4gIFF1ZXJ5T2YsXG4gIGV4dHJhY3RRdWVyeSxcbiAgaXNRdWVyeUNvbGxlY3Rpb24sXG4gIGlzUXVlcnlTdGF0ZUNhbmNlbGxlZCxcbiAgaXNRdWVyeVN0YXRlRmFpbHVyZSxcbiAgaXNRdWVyeVN0YXRlTG9hZGluZyxcbiAgaXNRdWVyeVN0YXRlUHJlcGFyZWQsXG4gIGlzUXVlcnlTdGF0ZVN1Y2Nlc3MsXG59IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IFF1ZXJ5RGF0YU9mIH0gZnJvbSAnLi4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBSZXF1ZXN0RXJyb3IsIFJlcXVlc3RQcm9ncmVzcyB9IGZyb20gJy4uL3JlcXVlc3QnO1xuaW1wb3J0IHsgcXVlcnlTdGF0ZVNpZ25hbCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IHR5cGUgUXVlcnlEaXJlY3RpdmVDb250ZXh0PFEgZXh0ZW5kcyBRdWVyeURpcmVjdGl2ZVR5cGUgfCBudWxsPiA9IHtcbiAgLyoqXG4gICAqIFRoZSBxdWVyaWVzJ3MgcmVzcG9uc2UgZGF0YS5cbiAgICovXG4gICRpbXBsaWNpdDogUXVlcnlEYXRhT2Y8UXVlcnlPZjxRPj4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgcXVlcmllcydzIHJlc3BvbnNlIGRhdGEuXG4gICAqL1xuICBldFF1ZXJ5OiBRdWVyeURhdGFPZjxRdWVyeU9mPFE+PiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBxdWVyeSB1c2VkIGluc2lkZSB0aGlzIGRpcmVjdGl2ZS4gVXNlZnVsIGlmIGZvciBpbnN0YW5jZSB0aGUgcXVlcnkgZ2V0cyB1bndyYXBwZWQgdmlhIGFzeW5jIHBpcGUgaW5zaWRlIHRoZSBkaXJlY3RpdmUuXG4gICAqL1xuICBxdWVyeTogUXVlcnlPZjxRPiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIElzIHRydWUgd2hlbiB0aGUgcXVlcnkgaXMgdHJpZ2dlcmVkIGJ5IHVzZXIgaW50ZXJhY3Rpb24uXG4gICAqL1xuICBsb2FkaW5nOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJcyB0cnVlIHdoZW4gdGhlIHF1ZXJ5IGlzIHRyaWdnZXJlZCBieSBlaXRoZXIgcG9sbGluZyBvciBhdXRvIHJlZnJlc2ggZXZlbnQuXG4gICAqL1xuICByZWZyZXNoaW5nOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcXVlcnkncyBwcm9ncmVzcyBzdGF0ZS5cbiAgICovXG4gIHByb2dyZXNzOiBSZXF1ZXN0UHJvZ3Jlc3MgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgcXVlcnkncyBlcnJvciBzdGF0ZS5cbiAgICovXG4gIGVycm9yOiBSZXF1ZXN0RXJyb3I8dW5rbm93bj4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgcXVlcnkncyBzY29wZSAob25seSBhdmFpbGFibGUgd2hlbiB0aGUgcXVlcnkgaXMgYSBjb2xsZWN0aW9uKVxuICAgKi9cbiAgc2NvcGU6IFF1ZXJ5Q29sbGVjdGlvbktleXNPZjxRPiB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeURpcmVjdGl2ZVR5cGUgPSBBbnlRdWVyeSB8IEFueUxlZ2FjeVF1ZXJ5IHwgQW55UXVlcnlDb2xsZWN0aW9uO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRRdWVyeV0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBRdWVyeURpcmVjdGl2ZTxRIGV4dGVuZHMgUXVlcnlEaXJlY3RpdmVUeXBlIHwgbnVsbD4ge1xuICBwcml2YXRlIGVycm9ySGFuZGxlciA9IGluamVjdChFcnJvckhhbmRsZXIpO1xuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld0NvbnRleHQ6IFF1ZXJ5RGlyZWN0aXZlQ29udGV4dDxRPiA9IHtcbiAgICAkaW1wbGljaXQ6IG51bGwsXG4gICAgZXRRdWVyeTogbnVsbCxcbiAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICByZWZyZXNoaW5nOiBmYWxzZSxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBwcm9ncmVzczogbnVsbCxcbiAgICBzY29wZTogbnVsbCxcbiAgICBxdWVyeTogbnVsbCxcbiAgfTtcblxuICBxdWVyeSA9IGlucHV0LnJlcXVpcmVkPFE+KHsgYWxpYXM6ICdldFF1ZXJ5JyB9KTtcblxuICBjYWNoZSA9IGlucHV0KGZhbHNlLCB7IGFsaWFzOiAnZXRRdWVyeUNhY2hlJyB9KTtcblxuICBxdWVyeVN0YXRlID0gcXVlcnlTdGF0ZVNpZ25hbCh0aGlzLnF1ZXJ5KTtcblxuICBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZDxRIGV4dGVuZHMgUXVlcnlEaXJlY3RpdmVUeXBlIHwgbnVsbD4oXG4gICAgZGlyOiBRdWVyeURpcmVjdGl2ZTxRPixcbiAgICBjdHg6IHVua25vd24sXG4gICk6IGN0eCBpcyBRdWVyeURpcmVjdGl2ZUNvbnRleHQ8UT4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaW5qZWN0KFZpZXdDb250YWluZXJSZWYpLmNyZWF0ZUVtYmVkZGVkVmlldyhpbmplY3QoVGVtcGxhdGVSZWYpLCB0aGlzLl92aWV3Q29udGV4dCk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgcXVlcnkgPSBleHRyYWN0UXVlcnkodGhpcy5xdWVyeSgpKTtcblxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKCFxdWVyeSkge1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LiRpbXBsaWNpdCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXRRdWVyeSA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LnJlZnJlc2hpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5lcnJvciA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LnNjb3BlID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5xdWVyeSA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUXVlcnlTdGF0ZVByZXBhcmVkKHF1ZXJ5LnJhd1N0YXRlKSB8fCBpc1F1ZXJ5U3RhdGVDYW5jZWxsZWQocXVlcnkucmF3U3RhdGUpKSB7XG4gICAgICAgICAgcXVlcnkuZXhlY3V0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuc2NvcGUgPSBpc1F1ZXJ5Q29sbGVjdGlvbihxdWVyeSkgPyAocXVlcnkudHlwZSBhcyBRdWVyeUNvbGxlY3Rpb25LZXlzT2Y8UT4pIDogbnVsbDtcbiAgICAgICAgdGhpcy5fdmlld0NvbnRleHQucXVlcnkgPSBxdWVyeSBhcyBRdWVyeU9mPFE+O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnF1ZXJ5U3RhdGUoKTtcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZSgpO1xuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBpZiAoaXNRdWVyeVN0YXRlTG9hZGluZyhzdGF0ZSkpIHtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5wcm9ncmVzcyA9IHN0YXRlLnByb2dyZXNzID8/IG51bGw7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQucmVmcmVzaGluZyA9IHN0YXRlLm1ldGEudHJpZ2dlcmVkVmlhID09PSAnYXV0bycgfHwgc3RhdGUubWV0YS50cmlnZ2VyZWRWaWEgPT09ICdwb2xsJztcblxuICAgICAgICAgIGlmICghdGhpcy5fdmlld0NvbnRleHQucmVmcmVzaGluZykge1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5yZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUXVlcnlTdGF0ZVN1Y2Nlc3Moc3RhdGUpKSB7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXRRdWVyeSA9IHN0YXRlLnJlc3BvbnNlIGFzIFF1ZXJ5RGF0YU9mPFF1ZXJ5T2Y8UT4+O1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LiRpbXBsaWNpdCA9IHN0YXRlLnJlc3BvbnNlIGFzIFF1ZXJ5RGF0YU9mPFF1ZXJ5T2Y8UT4+O1xuICAgICAgICB9IGVsc2UgaWYgKCFjYWNoZSkge1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmV0UXVlcnkgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LiRpbXBsaWNpdCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNRdWVyeVN0YXRlRmFpbHVyZShzdGF0ZSkpIHtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5lcnJvciA9IHN0YXRlLmVycm9yO1xuXG4gICAgICAgICAgaWYgKGlzTGVnYWN5UXVlcnkoZXh0cmFjdFF1ZXJ5KHRoaXMucXVlcnkoKSkpKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihzdGF0ZS5lcnJvci5odHRwRXJyb3JSZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmVycm9yID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==","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 if (v.enabled === false) {\n this._infinityQuery = v;\n this._infinityQueryInstance = null;\n return;\n }\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.3.6\", ngImport: i0, type: InfinityQueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.6\", 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.3.6\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdHktcXVlcnkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RpcmVjdGl2ZXMvaW5maW5pdHktcXVlcnkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBQ0wsV0FBVyxFQUNYLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQXdDLE1BQU0sbUJBQW1CLENBQUM7QUFDeEYsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLGdCQUFnQixHQUNqQixNQUFNLFVBQVUsQ0FBQzs7O0FBc0JsQixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsc0JBQXNCLENBQUMsQ0FBQztBQVc1RyxNQUFNLE9BQU8sc0JBQXNCO0lBOEJqQyxJQUNJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksYUFBYSxDQUFDLENBQUk7UUFDcEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhCLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FB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QVcsd0JBQXdCLEVBQUUsQ0FBQztvQkFDbkYsY0FBYyxFQUFFLENBQUMsa0JBQWtCLENBQUM7aUJBQ3JDOztzQkErQkUsS0FBSzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFcnJvckhhbmRsZXIsXG4gIGluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGNyZWF0ZURlc3Ryb3ksIERlbGF5YWJsZURpcmVjdGl2ZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBTdWJqZWN0LCB0YWtlVW50aWwsIHRhcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEV4cGVyaW1lbnRhbFF1ZXJ5IH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgaXNMZWdhY3lRdWVyeSB9IGZyb20gJy4uL2V4cGVyaW1lbnRhbCc7XG5pbXBvcnQgeyBJbmZpbml0eVF1ZXJ5LCBJbmZpbml0eVF1ZXJ5Q29uZmlnLCBJbmZpbml0eVF1ZXJ5T2YgfSBmcm9tICcuLi9pbmZpbml0ZS1xdWVyeSc7XG5pbXBvcnQge1xuICBCYXNlQXJndW1lbnRzLFxuICBpc1F1ZXJ5U3RhdGVGYWlsdXJlLFxuICBpc1F1ZXJ5U3RhdGVMb2FkaW5nLFxuICBpc1F1ZXJ5U3RhdGVTdWNjZXNzLFxuICBzd2l0Y2hRdWVyeVN0YXRlLFxufSBmcm9tICcuLi9xdWVyeSc7XG5pbXBvcnQgeyBBbnlRdWVyeUNyZWF0b3IsIENvbnN0cnVjdFF1ZXJ5IH0gZnJvbSAnLi4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBSZXF1ZXN0RXJyb3IgfSBmcm9tICcuLi9yZXF1ZXN0JztcblxuaW50ZXJmYWNlIEluZmluaXR5UXVlcnlDb250ZXh0PFxuICBRIGV4dGVuZHMgSW5maW5pdHlRdWVyeUNvbmZpZzxEaXJlY3RpdmVRdWVyeUNyZWF0b3IsIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsIGFueSwgdW5rbm93bltdPixcbj4ge1xuICAkaW1wbGljaXQ6IFFbJ3Jlc3BvbnNlJ11bJ2FycmF5VHlwZSddIHwgbnVsbDtcbiAgZXRJbmZpbml0eVF1ZXJ5OiBRWydyZXNwb25zZSddWydhcnJheVR5cGUnXSB8IG51bGw7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIGVycm9yOiBSZXF1ZXN0RXJyb3I8dW5rbm93bj4gfCBudWxsO1xuXG4gIGlzRmlyc3RMb2FkOiBib29sZWFuO1xuICBjYW5Mb2FkTW9yZTogYm9vbGVhbjtcbiAgY3VycmVudFBhZ2U6IG51bWJlciB8IG51bGw7XG4gIGN1cnJlbnRDYWxjdWxhdGVkUGFnZTogbnVtYmVyIHwgbnVsbDtcbiAgdG90YWxQYWdlczogbnVtYmVyIHwgbnVsbDtcbiAgaXRlbXNQZXJQYWdlOiBudW1iZXIgfCBudWxsO1xuXG4gIGN1cnJlbnRRdWVyeTogQ29uc3RydWN0UXVlcnk8UVsncXVlcnlDcmVhdG9yJ10+IHwgbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IElORklOSVRZX1FVRVJZX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPEluZmluaXR5UXVlcnlEaXJlY3RpdmU8YW55Pj4oJ0lORklOSVRZX1FVRVJZX1RPS0VOJyk7XG5cbnR5cGUgRGlyZWN0aXZlUXVlcnlDcmVhdG9yID0gQW55UXVlcnlDcmVhdG9yIHwgRXhwZXJpbWVudGFsUXVlcnkuQW55TGVnYWN5UXVlcnlDcmVhdG9yO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRJbmZpbml0eVF1ZXJ5XScsXG4gIGV4cG9ydEFzOiAnZXRJbmZpbml0eVF1ZXJ5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJTkZJTklUWV9RVUVSWV9UT0tFTiwgdXNlRXhpc3Rpbmc6IEluZmluaXR5UXVlcnlEaXJlY3RpdmUgfV0sXG4gIGhvc3REaXJlY3RpdmVzOiBbRGVsYXlhYmxlRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgSW5maW5pdHlRdWVyeURpcmVjdGl2ZTxcbiAgUSBleHRlbmRzIEluZmluaXR5UXVlcnlDb25maWc8RGlyZWN0aXZlUXVlcnlDcmVhdG9yLCBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkLCBhbnksIHVua25vd25bXT4sXG4+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcXVlcnlDb25maWdDaGFuZ2VkJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250ZXh0OiBJbmZpbml0eVF1ZXJ5Q29udGV4dDxRPiA9IHtcbiAgICAkaW1wbGljaXQ6IG51bGwsXG4gICAgZXRJbmZpbml0eVF1ZXJ5OiBudWxsLFxuICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgIGVycm9yOiBudWxsLFxuXG4gICAgaXNGaXJzdExvYWQ6IGZhbHNlLFxuICAgIGNhbkxvYWRNb3JlOiBmYWxzZSxcbiAgICBjdXJyZW50UGFnZTogbnVsbCxcbiAgICBjdXJyZW50Q2FsY3VsYXRlZFBhZ2U6IG51bGwsXG4gICAgdG90YWxQYWdlczogbnVsbCxcbiAgICBpdGVtc1BlclBhZ2U6IG51bGwsXG5cbiAgICBjdXJyZW50UXVlcnk6IG51bGwsXG4gIH07XG4gIHByaXZhdGUgX2luZmluaXR5UXVlcnlJbnN0YW5jZTogSW5maW5pdHlRdWVyeU9mPFE+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBjcmVhdGVEZXN0cm95KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21haW5UZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZjxJbmZpbml0eVF1ZXJ5Q29udGV4dDxRPj4pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lcnJvckhhbmRsZXIgPSBpbmplY3QoRXJyb3JIYW5kbGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVsYXlhYmxlID0gaW5qZWN0KERlbGF5YWJsZURpcmVjdGl2ZSwgeyBob3N0OiB0cnVlIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRWydyZXNwb25zZSddWydhcnJheVR5cGUnXT4oW10pO1xuXG4gIEBJbnB1dCgnZXRJbmZpbml0eVF1ZXJ5JylcbiAgZ2V0IGluZmluaXR5UXVlcnkoKTogUSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZmluaXR5UXVlcnk7XG4gIH1cbiAgc2V0IGluZmluaXR5UXVlcnkodjogUSkge1xuICAgIHRoaXMuX2NsZWFudXAoKTtcblxuICAgIGlmICh2LmVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9pbmZpbml0eVF1ZXJ5ID0gdjtcbiAgICAgIHRoaXMuX2luZmluaXR5UXVlcnlJbnN0YW5jZSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5maW5pdHlRdWVyeSA9IHY7XG4gICAgdGhpcy5faW5maW5pdHlRdWVyeUluc3RhbmNlID0gdGhpcy5fc2V0dXBJbmZpbml0eVF1ZXJ5KHYpO1xuICAgIHRoaXMuX2luZmluaXR5UXVlcnlJbnN0YW5jZS5uZXh0UGFnZSgpO1xuICB9XG4gIHByaXZhdGUgX2luZmluaXR5UXVlcnkhOiBRO1xuXG4gIGdldCBjb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLl92aWV3Q29udGV4dDtcbiAgfVxuXG4gIGdldCBpbnN0YW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5maW5pdHlRdWVyeUluc3RhbmNlO1xuICB9XG5cbiAgZ2V0IGRhdGEkKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGRhdGEgPSB0b1NpZ25hbCh0aGlzLl9kYXRhJCwgeyByZXF1aXJlU3luYzogdHJ1ZSB9KTtcblxuICBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZDxcbiAgICBRIGV4dGVuZHMgSW5maW5pdHlRdWVyeUNvbmZpZzxEaXJlY3RpdmVRdWVyeUNyZWF0b3IsIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsIGFueSwgdW5rbm93bltdPixcbiAgPihkaXI6IEluZmluaXR5UXVlcnlEaXJlY3RpdmU8UT4sIGN0eDogdW5rbm93bik6IGN0eCBpcyBJbmZpbml0eVF1ZXJ5Q29udGV4dDxRPiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9tYWluVGVtcGxhdGVSZWYsIHRoaXMuX3ZpZXdDb250ZXh0KTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwSW5maW5pdHlRdWVyeShjb25maWc6IFEpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBJbmZpbml0eVF1ZXJ5KGNvbmZpZywgdGhpcy5fZGVzdHJveSQpIGFzIEluZmluaXR5UXVlcnlPZjxRPjtcblxuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgaW5zdGFuY2UuY3VycmVudFF1ZXJ5JC5waXBlKHN3aXRjaFF1ZXJ5U3RhdGUoKSwgd2l0aExhdGVzdEZyb20oaW5zdGFuY2UuY3VycmVudFF1ZXJ5JCkpLFxuICAgICAgdGhpcy5fZGVsYXlhYmxlLmlzRGVsYXllZCQsXG4gICAgICBpbnN0YW5jZS5kYXRhJCxcbiAgICBdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoW1tzdGF0ZSwgY3VycmVudFF1ZXJ5XSwgaXNEZWxheWVkLCBpbmZpbml0eUFycmF5XSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmN1cnJlbnRQYWdlID0gaW5zdGFuY2UuY3VycmVudFBhZ2U7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQudG90YWxQYWdlcyA9IGluc3RhbmNlLnRvdGFsUGFnZXM7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuaXRlbXNQZXJQYWdlID0gaW5zdGFuY2UuaXRlbXNQZXJQYWdlO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmNhbkxvYWRNb3JlID1cbiAgICAgICAgICAgIChpbnN0YW5jZS50b3RhbFBhZ2VzICE9PSBudWxsICYmXG4gICAgICAgICAgICAgIGluc3RhbmNlLmN1cnJlbnRQYWdlICE9PSBudWxsICYmXG4gICAgICAgICAgICAgIGluc3RhbmNlLnRvdGFsUGFnZXMgPiBpbnN0YW5jZS5jdXJyZW50UGFnZSkgfHxcbiAgICAgICAgICAgIGZhbHNlO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmN1cnJlbnRDYWxjdWxhdGVkUGFnZSA9IGluc3RhbmNlLmN1cnJlbnRDYWxjdWxhdGVkUGFnZTtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5jdXJyZW50UXVlcnkgPSBjdXJyZW50UXVlcnk7XG5cbiAgICAgICAgICBpZiAoaXNRdWVyeVN0YXRlTG9hZGluZyhzdGF0ZSkgfHwgaXNEZWxheWVkIHx8ICFpbmZpbml0eUFycmF5KSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5sb2FkaW5nID0gc3RhdGUgPyBzdGF0ZS5tZXRhLnRyaWdnZXJlZFZpYSAhPT0gJ3BvbGwnIDogdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmlzRmlyc3RMb2FkID0gdGhpcy5jb250ZXh0LmV0SW5maW5pdHlRdWVyeSA9PT0gbnVsbDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzUXVlcnlTdGF0ZUZhaWx1cmUoc3RhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5lcnJvciA9IHN0YXRlLmVycm9yO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuaXNGaXJzdExvYWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGlzTGVnYWN5UXVlcnkoY3VycmVudFF1ZXJ5KSkge1xuICAgICAgICAgICAgICB0aGlzLl9lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3Ioc3RhdGUuZXJyb3IuaHR0cEVycm9yUmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNRdWVyeVN0YXRlU3VjY2VzcyhzdGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmlzRmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5ldEluZmluaXR5UXVlcnkgPSB0aGlzLl92aWV3Q29udGV4dC4kaW1wbGljaXQgPVxuICAgICAgICAgICAgICBpbmZpbml0eUFycmF5IGFzIFFbJ3Jlc3BvbnNlJ11bJ2FycmF5VHlwZSddO1xuICAgICAgICAgICAgdGhpcy5fZGF0YSQubmV4dChpbmZpbml0eUFycmF5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fcXVlcnlDb25maWdDaGFuZ2VkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICBsb2FkTmV4dFBhZ2UoKSB7XG4gICAgaWYgKCF0aGlzLl9pbmZpbml0eVF1ZXJ5SW5zdGFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdmlld0NvbnRleHQubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luZmluaXR5UXVlcnlJbnN0YW5jZS5uZXh0UGFnZSgpO1xuICB9XG5cbiAgcmVzZXQobmV3Q29uZmlnPzogT21pdDxRLCAncXVlcnlDcmVhdG9yJyB8ICdyZXNwb25zZSc+KSB7XG4gICAgaWYgKCF0aGlzLl9pbmZpbml0eVF1ZXJ5SW5zdGFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbmZpbml0eVF1ZXJ5SW5zdGFuY2UucmVzZXQobmV3Q29uZmlnIGFzIGFueSk7XG4gIH1cblxuICBwcml2YXRlIF9jbGVhbnVwKCkge1xuICAgIHRoaXMuX3F1ZXJ5Q29uZmlnQ2hhbmdlZCQubmV4dCh0cnVlKTtcblxuICAgIHRoaXMuX3ZpZXdDb250ZXh0LmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl92aWV3Q29udGV4dC5lcnJvciA9IG51bGw7XG4gICAgdGhpcy5fdmlld0NvbnRleHQuZXRJbmZpbml0eVF1ZXJ5ID0gbnVsbDtcbiAgICB0aGlzLl92aWV3Q29udGV4dC4kaW1wbGljaXQgPSBudWxsO1xuXG4gICAgdGhpcy5fdmlld0NvbnRleHQuaXNGaXJzdExvYWQgPSBmYWxzZTtcbiAgICB0aGlzLl92aWV3Q29udGV4dC5jYW5Mb2FkTW9yZSA9IGZhbHNlO1xuICAgIHRoaXMuX3ZpZXdDb250ZXh0LmN1cnJlbnRQYWdlID0gbnVsbDtcbiAgICB0aGlzLl92aWV3Q29udGV4dC5pdGVtc1BlclBhZ2UgPSBudWxsO1xuICAgIHRoaXMuX3ZpZXdDb250ZXh0LnRvdGFsUGFnZXMgPSBudWxsO1xuXG4gICAgdGhpcy5fdmlld0NvbnRleHQuY3VycmVudFF1ZXJ5ID0gbnVsbDtcblxuICAgIHRoaXMuX2RhdGEkLm5leHQoW10pO1xuICB9XG59XG4iXX0=","import { computed, Directive, ElementRef, inject, input, 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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.infinityQueryOverride = input(null, ...(ngDevMode ? [{ debugName: \"infinityQueryOverride\" }] : []));\n this.infinityQuery = computed(() => this.infinityQueryOverride() ?? this._infinityQuery, ...(ngDevMode ? [{ debugName: \"infinityQuery\" }] : []));\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.3.6\", ngImport: i0, type: InfinityQueryTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.6\", type: InfinityQueryTriggerDirective, isStandalone: true, selector: \"[etInfinityQueryTrigger], et-infinity-query-trigger\", inputs: { scrollContainerSelector: { classPropertyName: \"scrollContainerSelector\", publicName: \"scrollContainerSelector\", isSignal: false, isRequired: false, transformFunction: null }, infinityQueryOverride: { classPropertyName: \"infinityQueryOverride\", publicName: \"infinityQueryOverride\", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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 }], infinityQueryOverride: [{ type: i0.Input, args: [{ isSignal: true, alias: \"infinityQueryOverride\", required: false }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdHktcXVlcnktdHJpZ2dlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZGlyZWN0aXZlcy9pbmZpbml0eS1xdWVyeS10cmlnZ2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQTBCLE1BQU0sNEJBQTRCLENBQUM7O0FBTTFGLE1BQU0sT0FBTyw2QkFBNkI7SUFKMUM7UUFLVSxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxDQUFBLFVBQXVCLENBQUEsQ0FBQyxDQUFDO1FBQzlDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFOUMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDbEMsY0FBUyxHQUFnQyxJQUFJLENBQUM7UUFFdEQsV0FBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUc1RCw0QkFBdUIsR0FBa0IsSUFBSSxDQUFDO1FBRTlDLDhEQUE4RDtRQUM5RCwwQkFBcUIsR0FBRyxLQUFLLENBQXFDLElBQUksaUVBQUMsQ0FBQztRQUV4RSxrQkFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyx5REFBQyxDQUFDO0tBc0NyRjtJQXBDQyxRQUFRO1FBQ04sTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQztRQUUxRSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbEcsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLDBCQUEwQjtRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksb0JBQW9CLENBQ3ZDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDVixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFekIsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTztZQUVuQixJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUMsRUFDRDtZQUNFLElBQUksRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDaEcsVUFBVSxFQUFFLEtBQUs7WUFDakIsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2hDLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekQsQ0FBQzs4R0FwRFUsNkJBQTZCO2tHQUE3Qiw2QkFBNkI7OzJGQUE3Qiw2QkFBNkI7a0JBSnpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFEQUFxRDtvQkFDL0QsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOztzQkFVRSxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSU5GSU5JVFlfUVVFUllfVE9LRU4sIEluZmluaXR5UXVlcnlEaXJlY3RpdmUgfSBmcm9tICcuL2luZmluaXR5LXF1ZXJ5LmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldEluZmluaXR5UXVlcnlUcmlnZ2VyXSwgZXQtaW5maW5pdHktcXVlcnktdHJpZ2dlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEluZmluaXR5UXVlcnlUcmlnZ2VyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcbiAgcHJpdmF0ZSBfaW5maW5pdHlRdWVyeSA9IGluamVjdChJTkZJTklUWV9RVUVSWV9UT0tFTik7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgX29ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlciB8IG51bGwgPSBudWxsO1xuXG4gIGNsaWNrJCA9IGZyb21FdmVudCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdjbGljaycpO1xuXG4gIEBJbnB1dCgpXG4gIHNjcm9sbENvbnRhaW5lclNlbGVjdG9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBpbmZpbml0eVF1ZXJ5T3ZlcnJpZGUgPSBpbnB1dDxJbmZpbml0eVF1ZXJ5RGlyZWN0aXZlPGFueT4gfCBudWxsPihudWxsKTtcblxuICBpbmZpbml0eVF1ZXJ5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pbmZpbml0eVF1ZXJ5T3ZlcnJpZGUoKSA/PyB0aGlzLl9pbmZpbml0eVF1ZXJ5KTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBpc0ludGVyYWN0aXZlID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRhZ05hbWUgPT09ICdCVVRUT04nO1xuXG4gICAgaWYgKGlzSW50ZXJhY3RpdmUpIHtcbiAgICAgIHRoaXMuY2xpY2skLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5pbmZpbml0eVF1ZXJ5KCkubG9hZE5leHRQYWdlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXR1cEludGVyc2VjdGlvbk9ic2VydmVyKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KHRydWUpO1xuICAgIHRoaXMuX2Rlc3Ryb3kudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpOiB2b2lkIHtcbiAgICB0aGlzLl9vYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgIChlbnRyaWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcblxuICAgICAgICBpZiAoIWVudHJ5KSByZXR1cm47XG5cbiAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nICYmICF0aGlzLmluZmluaXR5UXVlcnkoKS5jb250ZXh0LmxvYWRpbmcpIHtcbiAgICAgICAgICB0aGlzLmluZmluaXR5UXVlcnkoKS5sb2FkTmV4dFBhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcm9vdDogdGhpcy5zY3JvbGxDb250YWluZXJTZWxlY3RvciA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5zY3JvbGxDb250YWluZXJTZWxlY3RvcikgOiBudWxsLFxuICAgICAgICByb290TWFyZ2luOiAnMHB4JyxcbiAgICAgICAgdGhyZXNob2xkOiBbMC4yNSwgMC41LCAwLjc1LCAxXSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuX29ic2VydmVyLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxufVxuIl19","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.3.6\", ngImport: i0, type: QueryShortNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.6\", ngImport: i0, type: QueryShortNamePipe, isStandalone: true, name: \"queryShortName\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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, ...(ngDevMode ? [{ debugName: \"isOpen\" }] : []));\n this.isTranslucent = signal(false, ...(ngDevMode ? [{ debugName: \"isTranslucent\" }] : []));\n this.snapLayout = signal('full', ...(ngDevMode ? [{ debugName: \"snapLayout\" }] : []));\n this.queryListMode = signal('live', ...(ngDevMode ? [{ debugName: \"queryListMode\" }] : []));\n this.viewMode = signal('query', ...(ngDevMode ? [{ debugName: \"viewMode\" }] : []));\n this.showResponse = signal(false, ...(ngDevMode ? [{ debugName: \"showResponse\" }] : []));\n this.showRawResponse = signal(false, ...(ngDevMode ? [{ debugName: \"showRawResponse\" }] : []));\n this.showQueryConfig = signal(false, ...(ngDevMode ? [{ debugName: \"showQueryConfig\" }] : []));\n this.showEntityStoreValue = signal(false, ...(ngDevMode ? [{ debugName: \"showEntityStoreValue\" }] : []));\n this.showArguments = signal(false, ...(ngDevMode ? [{ debugName: \"showArguments\" }] : []));\n this.selectedClientIdCtrl = new FormControl(0);\n this.selectedClientId = toSignal(this.selectedClientIdCtrl.valueChanges.pipe(startWith(this.selectedClientIdCtrl.value)));\n this.selectedQueryId = signal(null, ...(ngDevMode ? [{ debugName: \"selectedQueryId\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"selectedClientConfig\" }] : []));\n this.queryStore = computed(() => {\n const config = this.selectedClientConfig();\n return config.client._store;\n }, ...(ngDevMode ? [{ debugName: \"queryStore\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"selectedQuery\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"selectedQueryEntityStore\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"stringifiedQueryConfig\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"authProviderDetails\" }] : []));\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.3.6\", ngImport: i0, type: QueryDevtoolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.6\", type: QueryDevtoolsComponent, isStandalone: true, selector: \"et-query-devtools\", host: { classAttribute: \"et-query-devtools\" }, ngImport: i0, template: \"@if (!isOpen()) {\\n <button (click)=\\\"toggleOpen()\\\" class=\\\"et-query-devtools-open-btn et-qd-chip\\\">Query Devtools</button>\\n}\\n\\n@if (isOpen()) {\\n <div\\n [class.et-query-devtools-container--transparent]=\\\"isTranslucent()\\\"\\n class=\\\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\\\"\\n >\\n <header class=\\\"et-qd-header\\\">\\n <h3 class=\\\"et-qd-header__title\\\">Query Devtools</h3>\\n\\n <div class=\\\"et-qd-header__select\\\">\\n <label for=\\\"et-query-client-instance\\\">Client instance</label>\\n <select [formControl]=\\\"selectedClientIdCtrl\\\" id=\\\"et-query-client-instance\\\">\\n @for (clientConfig of queryClientConfigs; track trackByClient(i, clientConfig); let i = $index) {\\n <option [value]=\\\"i\\\">\\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\\n </option>\\n }\\n </select>\\n </div>\\n\\n <button (click)=\\\"toggleOpen()\\\" class=\\\"et-qd-btn et-qd-btn-secondary\\\">Close</button>\\n </header>\\n\\n <div class=\\\"et-qd-sub-header\\\">\\n <button\\n [ngClass]=\\\"{ 'et-qd-chip-secondary': !isTranslucent() }\\\"\\n (click)=\\\"toggleTranslucent()\\\"\\n class=\\\"et-qd-chip et-qd-translucent-clickable\\\"\\n >\\n Translucent\\n </button>\\n <div class=\\\"et-qd-sub-header__divider\\\"></div>\\n <button\\n [ngClass]=\\\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\\\"\\n (click)=\\\"selectSnapLayout('full')\\\"\\n class=\\\"et-qd-chip\\\"\\n >\\n Fullscreen\\n </button>\\n <button\\n [ngClass]=\\\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\\\"\\n (click)=\\\"selectSnapLayout('top')\\\"\\n class=\\\"et-qd-chip\\\"\\n >\\n Top\\n </button>\\n <button\\n [ngClass]=\\\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\\\"\\n (click)=\\\"selectSnapLayout('bottom')\\\"\\n class=\\\"et-qd-chip\\\"\\n >\\n Bottom\\n </button>\\n <button\\n [ngClass]=\\\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\\\"\\n (click)=\\\"selectSnapLayout('left')\\\"\\n class=\\\"et-qd-chip\\\"\\n >\\n Left\\n </button>\\n <button\\n [ngClass]=\\\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\\\"\\n (click)=\\\"selectSnapLayout('right')\\\"\\n class=\\\"et-qd-chip\\\"\\n >\\n Right\\n </button>\\n </div>\\n\\n @if (selectedClientConfig(); as cfg) {\\n <div class=\\\"et-qd-client\\\">\\n <p class=\\\"et-qd-client__title\\\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\\n\\n <div class=\\\"et-qd-client__actions\\\">\\n <button (click)=\\\"cfg.client._store.refreshQueriesInUse()\\\" class=\\\"et-qd-chip\\\">Refresh all</button>\\n <button (click)=\\\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\\\" class=\\\"et-qd-chip\\\">\\n Refresh all (ignore caches)\\n </button>\\n <button\\n (click)=\\\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\\\"\\n class=\\\"et-qd-chip\\\"\\n >\\n Refresh all (ignore caches & purge unused)\\n </button>\\n </div>\\n </div>\\n }\\n\\n @if (selectedClientConfig(); as cfg) {\\n <div class=\\\"et-qd-queries\\\">\\n <p class=\\\"et-qd-queries__title\\\">Inspector</p>\\n <div class=\\\"et-qd-queries__actions\\\">\\n <button\\n [ngClass]=\\\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' || viewMode() !== 'query' }\\\"\\n (click)=\\\"selectQueryListMode('live'); selectViewMode('query')\\\"\\n class=\\\"et-qd-chip et-qd-chip-bordered\\\"\\n >\\n Live Queries ({{ queries()?.length ?? 0 }})\\n </button>\\n <button\\n [ngClass]=\\\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' || viewMode() !== 'query' }\\\"\\n (click)=\\\"selectQueryListMode('history'); selectViewMode('query')\\\"\\n class=\\\"et-qd-chip et-qd-chip-bordered\\\"\\n >\\n Query History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)\\n </button>\\n @if (queryListMode() === 'history' && viewMode() === 'query') {\\n <div class=\\\"et-qd-queries__divider\\\"></div>\\n <button (click)=\\\"clearQueryHistory()\\\" class=\\\"et-qd-chip et-qd-chip-bordered\\\">Clear history</button>\\n }\\n\\n <div class=\\\"et-qd-queries__divider\\\"></div>\\n <button\\n [ngClass]=\\\"{ 'et-qd-chip-secondary': viewMode() !== 'authProvider' }\\\"\\n (click)=\\\"selectViewMode('authProvider')\\\"\\n class=\\\"et-qd-chip et-qd-chip-bordered\\\"\\n >\\n Auth Provider\\n </button>\\n </div>\\n\\n @if (viewMode() === 'query') {\\n <div class=\\\"et-qd-queries__browser\\\">\\n @if (queryListMode() === 'live') {\\n <ul class=\\\"et-qd-queries__browser-list\\\">\\n @for (query of queries(); track trackByQuery($index, query)) {\\n <li>\\n <button\\n [class.et-qd-query--active]=\\\"selectedQuery()?._id === query._id\\\"\\n (click)=\\\"selectQuery(query)\\\"\\n >\\n <span> {{ query._queryConfig.method }}</span>\\n <span> {{ query | queryShortName }}</span>\\n </button>\\n </li>\\n }\\n </ul>\\n }\\n @if (queryListMode() === 'history') {\\n <ul class=\\\"et-qd-queries__browser-list\\\">\\n @for (query of queryHistory$ | async; track trackByQuery($index, query)) {\\n <li>\\n <button\\n [class.et-qd-query--active]=\\\"selectedQuery()?._id === query._id\\\"\\n (click)=\\\"selectQuery(query)\\\"\\n >\\n <span> {{ query._queryConfig.method }}</span>\\n <span> {{ query | queryShortName }}</span>\\n </button>\\n </li>\\n }\\n </ul>\\n }\\n <div class=\\\"et-qd-queries__browser-detail\\\">\\n @if (selectedQuery(); as query) {\\n <p class=\\\"et-qd-queries__browser-detail__title\\\">\\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\\n </p>\\n\\n <div class=\\\"et-qd-queries__actions\\\">\\n <button (click)=\\\"query.execute()\\\" class=\\\"et-qd-chip et-qd-chip-bordered\\\">Execute</button>\\n <button (click)=\\\"query.execute({ skipCache: true })\\\" class=\\\"et-qd-chip et-qd-chip-bordered\\\">\\n Execute (ignore cache)\\n </button>\\n\\n <button (click)=\\\"query.abort()\\\" class=\\\"et-qd-chip et-qd-chip-bordered\\\">Abort</button>\\n <div class=\\\"et-qd-queries__divider\\\"></div>\\n <button\\n [ngClass]=\\\"{ 'et-qd-chip-secondary': !query.isPolling }\\\"\\n (click)=\\\"query.poll({ interval: 5000, takeUntil: _destroy$ })\\\"\\n class=\\\"et-qd-chip et-qd-chip-bordered\\\"\\n >\\n Poll\\n </button>\\n\\n <button\\n [ngClass]=\\\"{ 'et-qd-chip-secondary': query.isPolling }\\\"\\n (click)=\\\"query.stopPolling()\\\"\\n class=\\\"et-qd-chip et-qd-chip-bordered\\\"\\n >\\n Stop polling\\n </button>\\n @if (query.isPolling || query._isPollingPaused) {\\n <button (click)=\\\"query.pausePolling()\\\" class=\\\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\\\">\\n Pause polling\\n </button>\\n <button (click)=\\\"query.resumePolling()\\\" class=\\\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\\\">\\n Resume polling\\n </button>\\n }\\n </div>\\n\\n <div class=\\\"et-qd-list\\\">\\n <div class=\\\"et-qd-list-item\\\">\\n <p>State type</p>\\n <pre>{{ query.rawState.type }}</pre>\\n </div>\\n\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Dependents</p>\\n <pre>{{ query._dependents | json }}</pre>\\n </div>\\n\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Is expired</p>\\n <pre>{{ query.isExpired }}</pre>\\n </div>\\n\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Is in use</p>\\n <pre>{{ query.isInUse }}</pre>\\n </div>\\n\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Subscriber count</p>\\n <pre>{{ query._subscriberCount }}</pre>\\n </div>\\n\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Is polling</p>\\n <pre>{{ query.isPolling }}</pre>\\n </div>\\n\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Is polling paused</p>\\n <pre>{{ query._isPollingPaused }}</pre>\\n </div>\\n\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Enable smart polling</p>\\n <pre>{{ query._enableSmartPolling }}</pre>\\n </div>\\n\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Query store key</p>\\n <pre>{{ query._queryStoreKey }}</pre>\\n </div>\\n\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Arguments</p>\\n\\n <div>\\n <button\\n [ngClass]=\\\"{ 'et-qd-chip-secondary': !showArguments() }\\\"\\n (click)=\\\"toggleShowArguments()\\\"\\n class=\\\"et-qd-chip et-qd-chip-bordered\\\"\\n >\\n Toggle\\n </button>\\n </div>\\n @if (showArguments()) {\\n <pre>{{ query._arguments | json }}</pre>\\n }\\n </div>\\n\\n <div class=\\\"et-qd-list-item\\\">\\n <p>State</p>\\n <p><i> Warning, this will cause a subscription if shown!</i></p>\\n <div>\\n <button\\n [ngClass]=\\\"{ 'et-qd-chip-secondary': !showResponse() }\\\"\\n (click)=\\\"toggleShowResponse()\\\"\\n class=\\\"et-qd-chip et-qd-chip-bordered\\\"\\n >\\n Toggle\\n </button>\\n </div>\\n @if (showResponse()) {\\n <pre>{{ query.state$ | async | json }}</pre>\\n }\\n </div>\\n\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Raw state</p>\\n <p><i> The query state unaffected by entity stores</i></p>\\n\\n <div>\\n <button\\n [ngClass]=\\\"{ 'et-qd-chip-secondary': !showRawResponse() }\\\"\\n (click)=\\\"toggleShowRawResponse()\\\"\\n class=\\\"et-qd-chip et-qd-chip-bordered\\\"\\n >\\n Toggle\\n </button>\\n </div>\\n @if (showRawResponse()) {\\n <pre>{{ query.rawState | json }}</pre>\\n }\\n </div>\\n\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Query config</p>\\n\\n <div>\\n <button\\n [ngClass]=\\\"{ 'et-qd-chip-secondary': !showQueryConfig() }\\\"\\n (click)=\\\"toggleShowQueryConfig()\\\"\\n class=\\\"et-qd-chip et-qd-chip-bordered\\\"\\n >\\n Toggle\\n </button>\\n </div>\\n @if (showQueryConfig()) {\\n <pre>{{ stringifiedQueryConfig() | json }}</pre>\\n }\\n </div>\\n\\n @if (!!query._queryConfig.entity) {\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Entity store value</p>\\n\\n <div>\\n <button\\n [ngClass]=\\\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\\\"\\n (click)=\\\"toggleShowEntityStoreValue()\\\"\\n class=\\\"et-qd-chip et-qd-chip-bordered\\\"\\n >\\n Toggle\\n </button>\\n </div>\\n @if (showEntityStoreValue()) {\\n <pre>{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\\n }\\n </div>\\n }\\n </div>\\n }\\n </div>\\n </div>\\n } @else if (viewMode() === 'authProvider') {\\n <div class=\\\"et-qd-auth-provider__viewer\\\">\\n @if (authProviderDetails(); as details) {\\n <div class=\\\"et-qd-list\\\">\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Type</p>\\n <pre>{{ details.type }}</pre>\\n </div>\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Header value</p>\\n <pre>{{ details.header() | json }}</pre>\\n </div>\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Config</p>\\n <pre>{{ details.config | json }}</pre>\\n </div>\\n\\n @if (details.type === 'BearerAuthProvider') {\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Tokens</p>\\n <pre>{{ details.provider.tokens$ | async | json }}</pre>\\n </div>\\n\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Should refresh on unauthorized response</p>\\n <pre>{{ details.provider.shouldRefreshOnUnauthorizedResponse }}</pre>\\n </div>\\n\\n <ng-container\\n *etQuery=\\\"\\n details.provider.currentRefreshQuery$ | async as response;\\n loading as loading;\\n error as error;\\n query as query\\n \\\"\\n >\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Refresh query response</p>\\n\\n <div>\\n <button (click)=\\\"details.provider._refreshQuery()\\\" class=\\\"et-qd-chip et-qd-chip-bordered\\\">\\n Refresh\\n </button>\\n </div>\\n <pre>{{ response | json }}</pre>\\n </div>\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Refresh query loading</p>\\n <pre>{{ loading }}</pre>\\n </div>\\n <div class=\\\"et-qd-list-item\\\">\\n <p>Refresh query error</p>\\n <pre>{{ error ?? 'null' }}</pre>\\n </div>\\n <div class=\\\"et-qd-list-item\\\">\\n <p>State</p>\\n <pre>{{ query?.state$ | async | json }}</pre>\\n </div>\\n </ng-container>\\n }\\n </div>\\n } @else {\\n <p>No auth provider set</p>\\n }\\n </div>\\n }\\n </div>\\n }\\n </div>\\n}\\n\", styles: [\":host{position:fixed;top:0;z-index:1000000;font-size:14px;color:#fff}.et-query-devtools-container{position:fixed;inset:0;background-color:#25292e;z-index:10000;overflow:auto;font-family:monospace;display:grid;grid-template-rows:auto auto auto minmax(0,1fr)}.et-query-devtools-container.et-query-devtools-container--transparent{opacity:.25;pointer-events:none}.et-query-devtools-container.et-query-devtools-container--transparent .et-query-devtools-translucent-btn{pointer-events:all}.et-query-devtools-container.et-query-devtools-container--snap-left{inset-inline-start:0;inset-block-start:0;inset-block-end:0;width:50%;border-right:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-right{inset-inline-start:unset;inset-inline-end:0;inset-block-start:0;inset-block-end:0;width:50%;border-left:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-top{inset-inline-start:0;inset-block-start:0;inset-inline-end:0;height:50%;border-bottom:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-bottom{inset-inline-start:0;inset-block-start:unset;inset-block-end:0;inset-inline-end:0;height:50%;border-top:1px solid rgb(37,41,46)}button.et-query-devtools-open-btn{position:fixed;inset-inline-end:20px;inset-block-end:0;z-index:9999;font-family:monospace;border-radius:3px 3px 0 0;line-height:14px;font-size:12px}.et-qd-header{background-color:#00ffa1;padding:12px;display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center}.et-qd-header__title{color:#25292e;margin:0;font-size:22px}.et-qd-header__select{display:grid;background-color:#25292e;border-radius:10px;overflow:hidden}.et-qd-header__select select{width:250px;color:#fff;padding:3px 10px 2px;border:none;background-color:#25292e;font-family:monospace}.et-qd-header__select label{padding:3px 10px;color:#25292e;font-size:12px;font-weight:700;color:#fff;border-bottom:1px solid gray}.et-qd-sub-header{background-color:#00b371;padding:12px;display:flex;gap:12px;flex-wrap:wrap}.et-qd-sub-header__divider{width:1px;background-color:#25292e}.et-qd-btn{background-color:#00ffa1;color:#25292e;border:none;padding:12px;cursor:pointer;font-size:14px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;width:100%;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-btn:hover{background-color:#00cc81}.et-qd-btn.et-qd-btn-secondary{background-color:#25292e;color:#00ffa1}.et-qd-btn.et-qd-btn-secondary:hover{background-color:#3c424a}.et-qd-chip{background-color:#00ffa1;color:#25292e;border:none;padding:4px 9px;cursor:pointer;font-size:12px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-chip:hover{background-color:#00cc81}.et-qd-chip.et-qd-chip-secondary{background-color:#25292e;color:#00ffa1}.et-qd-chip.et-qd-chip-secondary:hover{background-color:#3c424a}.et-qd-chip.et-qd-chip-bordered{border:1px solid rgb(0,255,161)}.et-qd-translucent-clickable{pointer-events:all}.et-qd-client{border-bottom:1px solid rgb(59.734939759,66.1927710843,74.265060241);padding:12px}.et-qd-client__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-client__actions{display:flex;gap:12px;margin-top:12px}.et-qd-queries{padding:12px;display:grid;grid-template-rows:auto auto minmax(0,1fr)}.et-qd-queries__actions{display:flex;gap:12px;margin-top:12px;margin-bottom:16px}.et-qd-queries__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-queries__divider{width:1px;background-color:#3c424a}.et-qd-queries__browser{display:grid;grid-template-columns:1fr minmax(0,3fr);margin-left:-12px;margin-right:-12px;border-top:1px solid rgb(59.734939759,66.1927710843,74.265060241);margin-bottom:-12px}.et-qd-queries__browser-list{border-right:1px solid rgb(59.734939759,66.1927710843,74.265060241);list-style:none;padding:0;margin:0;display:grid;grid-auto-flow:row;grid-auto-rows:55px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-list li{margin:0}.et-qd-queries__browser-list li button{all:unset;font-family:monospace;box-sizing:border-box;width:100%;border:none;border-bottom:1px solid rgb(59.734939759,66.1927710843,74.265060241);background-color:#25292e;color:#fff;text-align:left;padding:12px;height:100%;transition:all .3s ease-in-out;cursor:pointer;display:grid;grid-template-columns:auto minmax(0,1fr);gap:2px;display:block}.et-qd-queries__browser-list li button span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.et-qd-queries__browser-list li button span:first-of-type{font-weight:700}.et-qd-queries__browser-list li button:hover,.et-qd-queries__browser-list li button.et-qd-query--active{background-color:#30363c}.et-qd-queries__browser-detail{padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-detail__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-auth-provider__viewer{border-top:1px solid rgb(59.734939759,66.1927710843,74.265060241);margin-left:-12px;margin-right:-12px;margin-bottom:-12px;padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-list{display:grid;gap:12px}.et-qd-list-item{display:grid}.et-qd-list-item p{font-weight:700;margin:0;padding-bottom:8px}.et-qd-list-item p+p{margin-top:-8px}.et-qd-list-item div+pre{margin-top:8px}.et-qd-list-item pre{margin:0;padding:4px;background-color:#0e1012;border-radius:4px;max-height:450px;overflow:auto}\\n\"], dependencies: [{ kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i1.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: \"directive\", type: QueryDirective, selector: \"[etQuery]\", inputs: [\"etQuery\", \"etQueryCache\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: JsonPipe, name: \"json\" }, { kind: \"pipe\", type: QueryShortNamePipe, name: \"queryShortName\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZGV2dG9vbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL2NvbXBvbmVudHMvcXVlcnktZGV2dG9vbHMvcXVlcnktZGV2dG9vbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL2NvbXBvbmVudHMvcXVlcnktZGV2dG9vbHMvcXVlcnktZGV2dG9vbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQVksZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLDJCQUEyQixFQUE4QixNQUFNLGFBQWEsQ0FBQzs7O0FBaUJ0RixNQUFNLE9BQU8sc0JBQXNCO0lBd01qQztRQXZNaUIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9CLGNBQVMsR0FBRyxhQUFhLEVBQUUsQ0FBQztRQUU1Qix1QkFBa0IsR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUV6RCxXQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssa0RBQUMsQ0FBQztRQUN2QixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxLQUFLLHlEQUFDLENBQUM7UUFDOUIsZUFBVSxHQUFHLE1BQU0sQ0FBMEIsTUFBTSxzREFBQyxDQUFDO1FBQ3JELGtCQUFhLEdBQUcsTUFBTSxDQUFnQixNQUFNLHlEQUFDLENBQUM7UUFDOUMsYUFBUSxHQUFHLE1BQU0sQ0FBZ0IsT0FBTyxvREFBQyxDQUFDO1FBRW5ELGlCQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssd0RBQUMsQ0FBQztRQUM3QixvQkFBZSxHQUFHLE1BQU0sQ0FBQyxLQUFLLDJEQUFDLENBQUM7UUFDaEMsb0JBQWUsR0FBRyxNQUFNLENBQUMsS0FBSywyREFBQyxDQUFDO1FBQ2hDLHlCQUFvQixHQUFHLE1BQU0sQ0FBQyxLQUFLLGdFQUFDLENBQUM7UUFDckMsa0JBQWEsR0FBRyxNQUFNLENBQUMsS0FBSyx5REFBQyxDQUFDO1FBRTlCLHlCQUFvQixHQUFHLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpDLHFCQUFnQixHQUFHLFFBQVEsQ0FDNUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUN4RixDQUFDO1FBQ2lCLG9CQUFlLEdBQUcsTUFBTSxDQUFnQixJQUFJLDJEQUFDLENBQUM7UUFFOUMseUJBQW9CLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN0RCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBRSxDQUFDO1lBQ3JDLENBQUM7WUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFM0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTNDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUUsQ0FBQztZQUNyQyxDQUFDO1lBRUQsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLGdFQUFDLENBQUM7UUFFZ0IsZUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFFM0MsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM5QixDQUFDLHNEQUFDLENBQUM7UUFFZ0IsZ0JBQVcsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTlDLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBYSxFQUFFLENBQUMsQ0FBQztRQUM5QyxZQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVuQyxrQkFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDL0MsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUVsQyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUM7WUFDM0QsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQzFFLENBQUMseURBQUMsQ0FBQztRQUVnQixtQkFBYyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFM0QsNkJBQXdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNqRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFbkMsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFFeEIsT0FBTyxLQUFLLENBQUMsS0FBb0MsQ0FBQztRQUNwRCxDQUFDLG9FQUFDLENBQUM7UUFFZ0IsOEJBQXlCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRXhFLG1DQUE4QixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQ3JGLFNBQVMsQ0FDUCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQ2QsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUNiLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVc7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFFaEMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQ3JDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ2pCLE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQyxFQUNELEVBQTZCLENBQzlCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FDaEIsQ0FDRixDQUFDO1FBRWlCLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQWEsRUFBRSxDQUFDLENBQUM7UUFFcEQsMkJBQXNCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN4RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFbkMsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFFeEIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUMvQixNQUFNLEtBQUssR0FDVCxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUUvRyxNQUFNLFNBQVMsR0FBRztnQkFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO2dCQUNsQixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07Z0JBQ2xCLEtBQUs7Z0JBQ0wsY0FBYyxFQUFFLEdBQUcsQ0FBQyxjQUFjO2dCQUNsQyxZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7Z0JBQzlCLGVBQWUsRUFBRSxHQUFHLENBQUMsZUFBZTtnQkFDcEMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxhQUFhO2dCQUNoQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsa0JBQWtCO2dCQUMxQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNO2FBQzdCLENBQUM7WUFFRixJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE9BQU87b0JBQ0wsR0FBRyxTQUFTO29CQUNaLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztvQkFDaEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO2lCQUM3QixDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU87Z0JBQ0wsR0FBRyxTQUFTO2FBQ2IsQ0FBQztRQUNKLENBQUMsa0VBQUMsQ0FBQztRQUVnQixpQkFBWSxHQUFHLFFBQVEsQ0FDeEMsWUFBWSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FDdkYsQ0FBQztRQUVpQix3QkFBbUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3JELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUVyQyxJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUUzQixJQUFJLFFBQVEsWUFBWSx3QkFBd0IsRUFBRSxDQUFDO2dCQUNqRCxPQUFPO29CQUNMLElBQUksRUFBRSwwQkFBMEI7b0JBQ2hDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTTtvQkFDN0IsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLE1BQU0sRUFBRTt3QkFDTixJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJO3dCQUMzQixLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLO3FCQUM5QjtpQkFDTyxDQUFDO1lBQ2IsQ0FBQztpQkFBTSxJQUFJLFFBQVEsWUFBWSxpQkFBaUIsRUFBRSxDQUFDO2dCQUNqRCxPQUFPO29CQUNMLElBQUksRUFBRSxtQkFBbUI7b0JBQ3pCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTTtvQkFDN0IsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLE1BQU0sRUFBRTt3QkFDTixRQUFRLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRO3dCQUNuQyxRQUFRLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRO3FCQUNwQztpQkFDTyxDQUFDO1lBQ2IsQ0FBQztpQkFBTSxJQUFJLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO2dCQUVsRCxPQUFPO29CQUNMLElBQUksRUFBRSxvQkFBb0I7b0JBQzFCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTTtvQkFDN0IsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLE1BQU0sRUFBRTt3QkFDTixLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLO3dCQUM3QixhQUFhLEVBQUU7NEJBQ2IsNkJBQTZCLEVBQUUsVUFBVSxFQUFFLDZCQUE2QixJQUFJLGdCQUFnQjs0QkFDNUYsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLOzRCQUN4QixVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7NEJBQ2xDLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxJQUFJLDBCQUEwQjs0QkFDcEUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixJQUFJLGNBQWM7NEJBQ3RFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxJQUFJLGFBQWE7NEJBQ25ELGFBQWEsRUFBRSxVQUFVLEVBQUUsYUFBYSxJQUFJLGdCQUFnQjs0QkFDNUQsY0FBYyxFQUFFLFVBQVUsRUFBRSxjQUFjLElBQUksZUFBZTs0QkFDN0QsYUFBYSxFQUFFLFVBQVUsRUFBRSxhQUFhLElBQUksaUJBQWlCOzRCQUM3RCxxQkFBcUIsRUFBRSxVQUFVLEVBQUUscUJBQXFCLElBQUksZUFBZTs0QkFDM0UsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLElBQUksc0RBQXNEOzRCQUN4RixrQkFBa0IsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUzs0QkFDekUsZUFBZSxFQUFFLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUzt5QkFDcEU7cUJBQ0Y7aUJBQ08sQ0FBQztZQUNiLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPO29CQUNMLElBQUksRUFBRSxxQkFBcUI7b0JBQzNCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTTtvQkFDN0IsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLE1BQU0sRUFBRSxFQUFFO2lCQUNGLENBQUM7WUFDYixDQUFDO1FBQ0gsQ0FBQywrREFBQyxDQUFDO1FBa0lPLGtCQUFhLEdBQWdELENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3hHLGlCQUFZLEdBQThCLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQWhJdEUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVk7YUFDbkMsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxFQUNuQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLGNBQWM7YUFDaEIsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNwRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUNuQyxrQkFBa0IsRUFBRSxDQUNyQjthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsWUFBWSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQzthQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEtBQUssb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzdGLElBQUksQ0FDSCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUNuQyxrQkFBa0IsRUFBRSxDQUNyQjthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLFdBQVc7YUFDYixJQUFJLENBQ0gsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDZCxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDakIsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUNiLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1IsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQixDQUNGLENBQ0Y7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxXQUFXO2FBQ2IsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ2QsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ2xCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1osTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVyRCxJQUFJLENBQUMsY0FBYztnQkFBRSxPQUFPO1lBRTVCLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDO1lBRWhELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUVELG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUUvQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCLENBQ0YsQ0FDRjthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLFNBQVM7YUFDWCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDZCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRXJELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxjQUFjO2dCQUFFLE9BQU87WUFFeEMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7WUFFaEQsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDMUQsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQyxDQUFDO1lBQ0gsQ0FBQztZQUVELG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUUvQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFFZixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxhQUFhLEdBQUc7Z0JBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNyQixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDbkMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQzdCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNqQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDdkMsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3ZDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDakQsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ25DLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDekMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDekMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ25DLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2FBQzFCLENBQUM7WUFFRixNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDdkYsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRTVFLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUV6QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLElBQUksS0FBSyxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsSUFBSSxLQUFLLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsSUFBSSxLQUFLLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLENBQUM7UUFDaEQsQ0FBQztJQUNILENBQUM7SUFLUyxVQUFVO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVTLGlCQUFpQjtRQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFUyxrQkFBa0I7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUU1QyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyxxQkFBcUI7UUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRVMscUJBQXFCO1FBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVTLDBCQUEwQjtRQUNsQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRVMsbUJBQW1CO1FBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVTLGdCQUFnQixDQUFDLE1BQStCO1FBQ3hELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFUyxtQkFBbUIsQ0FBQyxJQUFtQjtRQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRVMsY0FBYyxDQUFDLElBQW1CO1FBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFUyxXQUFXLENBQUMsS0FBZTtRQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVTLGlCQUFpQjtRQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDOzhHQTdYVSxzQkFBc0I7a0dBQXRCLHNCQUFzQiw0SEN2Q25DLG12ZkFrWkEsMjRLRDdXaUMsbUJBQW1CLHF0QkFBRSxPQUFPLG9GQUFzQixjQUFjLHNGQUFyRixTQUFTLHlDQUFFLFFBQVEsd0NBQWdDLGtCQUFrQjs7MkZBRXBFLHNCQUFzQjtrQkFYbEMsU0FBUzsrQkFDRSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsU0FBUyxRQUNwQzt3QkFDSixLQUFLLEVBQUUsbUJBQW1CO3FCQUMzQixXQUNRLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBKc29uUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgVHJhY2tCeUZ1bmN0aW9uLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNyZWF0ZURlc3Ryb3ksIG5leHRGcmFtZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtYXAsIG9mLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhc2ljQXV0aFByb3ZpZGVyLCBDdXN0b21IZWFkZXJBdXRoUHJvdmlkZXIsIGlzQmVhcmVyQXV0aFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vLi4vYXV0aCc7XG5pbXBvcnQgeyBRdWVyeURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRW50aXR5U3RvcmUgfSBmcm9tICcuLi8uLi8uLi9lbnRpdHknO1xuaW1wb3J0IHsgQW55UXVlcnksIGlzR3FsUXVlcnlDb25maWcgfSBmcm9tICcuLi8uLi8uLi9xdWVyeSc7XG5pbXBvcnQgeyBRdWVyeVNob3J0TmFtZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcyc7XG5pbXBvcnQgeyBRVUVSWV9DTElFTlRfREVWVE9PTFNfVE9LRU4sIFF1ZXJ5Q2xpZW50RGV2dG9vbHNPcHRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG50eXBlIFF1ZXJ5RGV2dG9vbHNTbmFwTGF5b3V0ID0gJ2Z1bGwnIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ3RvcCc7XG50eXBlIFF1ZXJ5TGlzdE1vZGUgPSAnbGl2ZScgfCAnaGlzdG9yeSc7XG50eXBlIFF1ZXJ5Vmlld01vZGUgPSAncXVlcnknIHwgJ2F1dGhQcm92aWRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V0LXF1ZXJ5LWRldnRvb2xzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXJ5LWRldnRvb2xzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVlcnktZGV2dG9vbHMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLlNoYWRvd0RvbSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZXQtcXVlcnktZGV2dG9vbHMnLFxuICB9LFxuICBpbXBvcnRzOiBbQXN5bmNQaXBlLCBKc29uUGlwZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTmdDbGFzcywgUXVlcnlTaG9ydE5hbWVQaXBlLCBRdWVyeURpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5RGV2dG9vbHNDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gY3JlYXRlRGVzdHJveSgpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyeUNsaWVudENvbmZpZ3MgPSBpbmplY3QoUVVFUllfQ0xJRU5UX0RFVlRPT0xTX1RPS0VOKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNPcGVuID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzVHJhbnNsdWNlbnQgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc25hcExheW91dCA9IHNpZ25hbDxRdWVyeURldnRvb2xzU25hcExheW91dD4oJ2Z1bGwnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHF1ZXJ5TGlzdE1vZGUgPSBzaWduYWw8UXVlcnlMaXN0TW9kZT4oJ2xpdmUnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHZpZXdNb2RlID0gc2lnbmFsPFF1ZXJ5Vmlld01vZGU+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__';\nconst ET_OBJ_PREFIX = 'ET_OBJ__';\nconst ET_PROP_NULL_VALUE = 'ET_NULL__';\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 = typeof 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 (value === ET_PROP_NULL_VALUE) {\n deserializedValue = null;\n }\n else if (defaultIsNum ||\n (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 === 'string' && val.startsWith(ET_OBJ_PREFIX)) {\n return JSON.parse(val.slice(ET_OBJ_PREFIX.length));\n }\n else if (typeof val === 'function') {\n return val();\n }\n else if (val === ET_PROP_NULL_VALUE) {\n return null;\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)\n ? `${ET_ARR_PREFIX}${JSON.stringify(value)}`\n : typeof value === 'object' && value !== null\n ? `${ET_OBJ_PREFIX}${JSON.stringify(value)}`\n : value === null\n ? ET_PROP_NULL_VALUE\n : value;\n return this._defaultValues[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 if (typeof value === 'object' && value !== null) {\n defaultValues[key] = `${ET_OBJ_PREFIX}${JSON.stringify(value)}`;\n }\n else if (value === null) {\n defaultValues[key] = ET_PROP_NULL_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 === null\n ? ET_PROP_NULL_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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLEtBQUssRUFDTCxhQUFhLEVBQ2IsS0FBSyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVdoSCxPQUFPLEVBRUwsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2QixlQUFlLEVBQ2Ysb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLHlCQUF5QixFQUN6QixzQkFBc0IsR0FDdkIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUM7QUFDakMsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDO0FBQ2pDLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDO0FBRXZDLE1BQU0sT0FBTyxVQUFVO0lBQ3JCLElBQUksT0FBTztR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QUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxRQUFRO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTztRQUUvQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUUxQixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRCxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUN2QyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7WUFDckQsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQ0QsRUFBNkIsQ0FDOUIsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNsQixjQUFjLENBQUMsR0FBRyxFQUFFO2dCQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7b0JBQ3hCLFdBQVc7b0JBQ1gsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLG1CQUFtQixFQUFFLE9BQU87aUJBQzdCLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBOZ1pvbmUsIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgaW5qZWN0LCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBFVF9QUk9QRVJUWV9SRU1PVkVELFxuICBjbG9uZSxcbiAgY3JlYXRlRGVzdHJveSxcbiAgZXF1YWwsXG4gIGluamVjdFF1ZXJ5UGFyYW1DaGFuZ2VzLFxuICBpbmplY3RRdWVyeVBhcmFtcyxcbn0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIGRlYm91bmNlVGltZSwgbWFwLCBtZXJnZSwgb2YsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBPcHRpb25hbFF1ZXJ5RmllbGRPcHRpb25zLFxuICBRdWVyeUZpZWxkT3B0aW9ucyxcbiAgUXVlcnlGb3JtR3JvdXAsXG4gIFF1ZXJ5Rm9ybUdyb3VwQ29udHJvbHMsXG4gIFF1ZXJ5Rm9ybU9ic2VydmVPcHRpb25zLFxuICBRdWVyeUZvcm1WYWx1ZSxcbiAgUXVlcnlGb3JtVmFsdWVFdmVudCxcbiAgUXVlcnlGb3JtV3JpdGVPcHRpb25zLFxufSBmcm9tICcuL3F1ZXJ5LWZvcm0udHlwZXMnO1xuaW1wb3J0IHtcbiAgU29ydCxcbiAgdHJhbnNmb3JtVG9Cb29sZWFuLFxuICB0cmFuc2Zvcm1Ub0Jvb2xlYW5BcnJheSxcbiAgdHJhbnNmb3JtVG9EYXRlLFxuICB0cmFuc2Zvcm1Ub0RhdGVBcnJheSxcbiAgdHJhbnNmb3JtVG9OdW1iZXIsXG4gIHRyYW5zZm9ybVRvTnVtYmVyQXJyYXksXG4gIHRyYW5zZm9ybVRvU29ydCxcbiAgdHJhbnNmb3JtVG9Tb3J0UXVlcnlQYXJhbSxcbiAgdHJhbnNmb3JtVG9TdHJpbmdBcnJheSxcbn0gZnJvbSAnLi9xdWVyeS1mb3JtLnV0aWxzJztcblxuY29uc3QgRVRfQVJSX1BSRUZJWCA9ICdFVF9BUlJfXyc7XG5jb25zdCBFVF9PQkpfUFJFRklYID0gJ0VUX09CSl9fJztcbmNvbnN0IEVUX1BST1BfTlVMTF9WQUxVRSA9ICdFVF9OVUxMX18nO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlGaWVsZDxUPiB7XG4gIGdldCBjb250cm9sKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuY29udHJvbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRhOiBRdWVyeUZpZWxkT3B0aW9uczxUPikge31cbn1cblxuZXhwb3J0IGNsYXNzIFNlYXJjaFF1ZXJ5RmllbGQge1xuICBnZXQgY29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmNvbnRyb2w7XG4gIH1cblxuICBkYXRhOiBRdWVyeUZpZWxkT3B0aW9uczxzdHJpbmcgfCBudWxsPjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgX2RhdGE/OiBPcHRpb25hbFF1ZXJ5RmllbGRPcHRpb25zPHN0cmluZyB8IG51bGw+KSB7XG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgY29udHJvbDogX2RhdGE/LmNvbnRyb2wgPz8gbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpLFxuICAgICAgZGVib3VuY2U6IDMwMCxcbiAgICAgIGRpc2FibGVEZWJvdW5jZUlmRmFsc3k6IHRydWUsXG4gICAgICAuLi4oX2RhdGEgPz8ge30pLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNvcnRRdWVyeUZpZWxkIHtcbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5jb250cm9sO1xuICB9XG5cbiAgZGF0YTogUXVlcnlGaWVsZE9wdGlvbnM8U29ydCB8IG51bGw+O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBfZGF0YT86IE9wdGlvbmFsUXVlcnlGaWVsZE9wdGlvbnM8U29ydCB8IG51bGw+KSB7XG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgY29udHJvbDogX2RhdGE/LmNvbnRyb2wgPz8gbmV3IEZvcm1Db250cm9sPFNvcnQgfCBudWxsPihudWxsKSxcbiAgICAgIHF1ZXJ5UGFyYW1Ub1ZhbHVlVHJhbnNmb3JtRm46IHRyYW5zZm9ybVRvU29ydCxcbiAgICAgIHZhbHVlVG9RdWVyeVBhcmFtVHJhbnNmb3JtRm46IHRyYW5zZm9ybVRvU29ydFF1ZXJ5UGFyYW0sXG4gICAgICAuLi4oX2RhdGEgPz8ge30pLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0cmluZ0FycmF5UXVlcnlGaWVsZDxUIGV4dGVuZHMgc3RyaW5nW10+IHtcbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5jb250cm9sO1xuICB9XG5cbiAgZGF0YTogUXVlcnlGaWVsZE9wdGlvbnM8VCB8IG51bGw+O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBfZGF0YT86IE9wdGlvbmFsUXVlcnlGaWVsZE9wdGlvbnM8VCB8IG51bGw+KSB7XG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgY29udHJvbDogX2RhdGE/LmNvbnRyb2wgPz8gbmV3IEZvcm1Db250cm9sPFQgfCBudWxsPihudWxsKSxcbiAgICAgIHF1ZXJ5UGFyYW1Ub1ZhbHVlVHJhbnNmb3JtRm46IHRyYW5zZm9ybVRvU3RyaW5nQXJyYXkgYXMgKHZhbDogdW5rbm93bikgPT4gVCB8IG51bGwsXG4gICAgICAuLi4oX2RhdGEgPz8ge30pLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJvb2xlYW5BcnJheVF1ZXJ5RmllbGQge1xuICBnZXQgY29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmNvbnRyb2w7XG4gIH1cblxuICBkYXRhOiBRdWVyeUZpZWxkT3B0aW9uczxib29sZWFuW10gfCBudWxsPjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgX2RhdGE/OiBPcHRpb25hbFF1ZXJ5RmllbGRPcHRpb25zPGJvb2xlYW5bXSB8IG51bGw+KSB7XG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgY29udHJvbDogX2RhdGE/LmNvbnRyb2wgPz8gbmV3IEZvcm1Db250cm9sPGJvb2xlYW5bXSB8IG51bGw+KG51bGwpLFxuICAgICAgcXVlcnlQYXJhbVRvVmFsdWVUcmFuc2Zvcm1GbjogdHJhbnNmb3JtVG9Cb29sZWFuQXJyYXksXG4gICAgICAuLi4oX2RhdGEgPz8ge30pLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE51bWJlckFycmF5UXVlcnlGaWVsZCB7XG4gIGdldCBjb250cm9sKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuY29udHJvbDtcbiAgfVxuXG4gIGRhdGE6IFF1ZXJ5RmllbGRPcHRpb25zPG51bWJlcltdIHwgbnVsbD47XG5cbiAgY29uc3RydWN0b3IocHVibGljIF9kYXRhPzogT3B0aW9uYWxRdWVyeUZpZWxkT3B0aW9uczxudW1iZXJbXSB8IG51bGw+KSB7XG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgY29udHJvbDogX2RhdGE/LmNvbnRyb2wgPz8gbmV3IEZvcm1Db250cm9sPG51bWJlcltdIHwgbnVsbD4obnVsbCksXG4gICAgICBxdWVyeVBhcmFtVG9WYWx1ZVRyYW5zZm9ybUZuOiB0cmFuc2Zvcm1Ub051bWJlckFycmF5LFxuICAgICAgLi4uKF9kYXRhID8/IHt9KSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRlUXVlcnlGaWVsZCB7XG4gIGdldCBjb250cm9sKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuY29udHJvbDtcbiAgfVxuXG4gIGRhdGE6IFF1ZXJ5RmllbGRPcHRpb25zPERhdGUgfCBudWxsPjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgX2RhdGE/OiBPcHRpb25hbFF1ZXJ5RmllbGRPcHRpb25zPERhdGUgfCBudWxsPikge1xuICAgIHRoaXMuZGF0YSA9IHtcbiAgICAgIGNvbnRyb2w6IF9kYXRhPy5jb250cm9sID8/IG5ldyBGb3JtQ29udHJvbDxEYXRlIHwgbnVsbD4obnVsbCksXG4gICAgICBxdWVyeVBhcmFtVG9WYWx1ZVRyYW5zZm9ybUZuOiB0cmFuc2Zvcm1Ub0RhdGUsXG4gICAgICAuLi4oX2RhdGEgPz8ge30pLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVBcnJheVF1ZXJ5RmllbGQge1xuICBnZXQgY29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmNvbnRyb2w7XG4gIH1cblxuICBkYXRhOiBRdWVyeUZpZWxkT3B0aW9uczxEYXRlW10gfCBudWxsPjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgX2RhdGE/OiBPcHRpb25hbFF1ZXJ5RmllbGRPcHRpb25zPERhdGVbXSB8IG51bGw+KSB7XG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgY29udHJvbDogX2RhdGE/LmNvbnRyb2wgPz8gbmV3IEZvcm1Db250cm9sPERhdGVbXSB8IG51bGw+KG51bGwpLFxuICAgICAgcXVlcnlQYXJhbVRvVmFsdWVUcmFuc2Zvcm1GbjogdHJhbnNmb3JtVG9EYXRlQXJyYXksXG4gICAgICAuLi4oX2RhdGEgPz8ge30pLFxuICAgIH07XG4gIH1cbn1cblxuY29uc3QgSUdOT1JFRF9GSUxURVJfQ09VTlRfRklFTERTID0gWydwYWdlJywgJ3NraXAnLCAndGFrZScsICdsaW1pdCcsICdzb3J0JywgJ3NvcnRCeScsICdzb3J0T3JkZXInLCAncXVlcnknLCAnc2VhcmNoJ107XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlGb3JtT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIHByZWZpeCB0byB1c2UgZm9yIHRoZSBxdWVyeSBwYXJhbWV0ZXJzLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBoYXZlIG11bHRpcGxlIHF1ZXJ5IGZvcm1zIG9uIHRoZSBzYW1lIHBhZ2UuXG4gICAqL1xuICBxdWVyeVBhcmFtUHJlZml4Pzogc3RyaW5nIHwgKCgpID0+IHN0cmluZyk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBBbnlRdWVyeUZvcm0gPSBRdWVyeUZvcm08YW55PjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBjbGFzcyBRdWVyeUZvcm08VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFF1ZXJ5RmllbGQ8YW55Pj4+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBjcmVhdGVEZXN0cm95KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Vub2JzZXJ2ZVRyaWdnZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdFZhbHVlcyA9IHRoaXMuX2V4dHJhY3REZWZhdWx0VmFsdWVzKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlkVmFsdWVDaGFuZ2VzJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgcHJpdmF0ZSBfaXNPYnNlcnZpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2tpcE5leHRSZXNldHMgPSBmYWxzZTtcblxuICBwcml2YXRlIF9xdWVyeVBhcmFtQ2hhbmdlcyQgPSB0b09ic2VydmFibGUoaW5qZWN0UXVlcnlQYXJhbUNoYW5nZXMoKSk7XG4gIHByaXZhdGUgX3F1ZXJ5UGFyYW1zID0gaW5qZWN0UXVlcnlQYXJhbXMoKTtcblxuICAvKipcbiAgICogVGhlIGFuZ3VsYXIgZm9ybSBncm91cCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgZmllbGRzLlxuICAgKlxuICAgKiAqKkRvIG5vdCoqIHVzZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzIG9uIHRoaXMgZm9ybSBncm91cDpcbiAgICogLSBgc2V0VmFsdWVgOiBVc2UgYFF1ZXJ5Rm9ybS5zZXRWYWx1ZWAgaW5zdGVhZC5cbiAgICogLSBgcGF0Y2hWYWx1ZWA6IFVzZSBgUXVlcnlGb3JtLnBhdGNoVmFsdWVgIGluc3RlYWQuXG4gICAqIC0gYHZhbHVlQ2hhbmdlc2A6IFVzZSBgUXVlcnlGb3JtLmNoYW5nZXMkYCBpbnN0ZWFkLlxuICAgKiAtIGB2YWx1ZWA6IFVzZSBgUXVlcnlGb3JtLnZhbHVlYCBpbnN0ZWFkLlxuICAgKiAtIGBjb250cm9sc2A6IFVzZSBgUXVlcnlGb3JtLmNvbnRyb2xzYCBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX3NldHVwRm9ybUdyb3VwKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbGFzdEZvcm1WYWx1ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1ZXJ5Rm9ybVZhbHVlPFQ+IHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N1cnJlbnRGb3JtVmFsdWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeUZvcm1WYWx1ZTxUPj4odGhpcy5fZm9ybVZhbHVlKTtcblxuICBwcml2YXRlIGdldCBfZm9ybVZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSBhcyBRdWVyeUZvcm1WYWx1ZTxUPjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9mb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0gYXMgdW5rbm93biBhcyBRdWVyeUZvcm1Hcm91cDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeUZvcm1WYWx1ZUV2ZW50PFQ+Pih7XG4gICAgcHJldmlvdXNWYWx1ZTogbnVsbCxcbiAgICBjdXJyZW50VmFsdWU6IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFF1ZXJ5Rm9ybVZhbHVlPFQ+LFxuICB9KTtcblxuICByZWFkb25seSBjaGFuZ2VzJCA9IHRoaXMuX2NoYW5nZXMkLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSBjdXJyZW50VmFsdWUkID0gdGhpcy5fY2hhbmdlcyQucGlwZShtYXAoKHsgY3VycmVudFZhbHVlIH0pID0+IGN1cnJlbnRWYWx1ZSkpO1xuICByZWFkb25seSBwcmV2aW91c1ZhbHVlJCA9IHRoaXMuX2NoYW5nZXMkLnBpcGUobWFwKCh7IHByZXZpb3VzVmFsdWUgfSkgPT4gcHJldmlvdXNWYWx1ZSkpO1xuXG4gIHJlYWRvbmx5IGNoYW5nZXMgPSB0b1NpZ25hbCh0aGlzLmNoYW5nZXMkKTtcbiAgcmVhZG9ubHkgY3VycmVudFZhbHVlID0gdG9TaWduYWwodGhpcy5jdXJyZW50VmFsdWUkKTtcbiAgcmVhZG9ubHkgcHJldmlvdXNWYWx1ZSA9IHRvU2lnbmFsKHRoaXMucHJldmlvdXNWYWx1ZSQpO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGFjdGl2ZSBmaWx0ZXJzLlxuICAgKlxuICAgKiBFeGNsdWRlcyB0aGUgZm9sbG93aW5nIGZpZWxkcyBieSBkZWZhdWx0OlxuICAgKiAtIGBwYWdlYFxuICAgKiAtIGBza2lwYFxuICAgKiAtIGB0YWtlYFxuICAgKiAtIGBsaW1pdGBcbiAgICogLSBgc29ydGBcbiAgICogLSBgc29ydEJ5YFxuICAgKiAtIGBzb3J0T3JkZXJgXG4gICAqIC0gYHF1ZXJ5YFxuICAgKiAtIGBzZWFyY2hgXG4gICAqL1xuICByZWFkb25seSBhY3RpdmVGaWx0ZXJDb3VudCQgPSB0aGlzLmNoYW5nZXMkLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKHsgY3VycmVudFZhbHVlIH0pID0+XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGlmIChJR05PUkVEX0ZJTFRFUl9DT1VOVF9GSUVMRFMuaW5jbHVkZXMoa2V5KSB8fCB0aGlzLl9maWVsZHNba2V5XT8uZGF0YS5za2lwSW5GaWx0ZXJDb3VudCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGVmYXVsdFZhbHVlKGtleSwgdmFsdWUpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigodikgPT4gdiA9PT0gZmFsc2UpLmxlbmd0aCxcbiAgICApLFxuICApO1xuXG4gIGdldCBjb250cm9scygpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGFuZ2VzJC52YWx1ZS5jdXJyZW50VmFsdWU7XG4gIH1cblxuICBnZXQgZGVmYXVsdEZvcm1WYWx1ZSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5fZGVmYXVsdFZhbHVlcykucmVkdWNlKChhY2MsIFtrZXldKSA9PiB7XG4gICAgICBhY2Nba2V5IGFzIGtleW9mIFF1ZXJ5Rm9ybVZhbHVlPFQ+XSA9IHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkpO1xuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFF1ZXJ5Rm9ybVZhbHVlPFQ+KTtcbiAgfVxuXG4gIC8vIHdpdGggcHJlZml4IGVnLiBwYWdlIHNob3VsZCBiZWNvbWUgJHtwcmVmaXh9LXBhZ2VcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZmllbGRzOiBULFxuICAgIHByaXZhdGUgX29wdGlvbnM/OiBRdWVyeUZvcm1PcHRpb25zLFxuICApIHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoUXVlcnlGb3JtKTtcblxuICAgIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4gdGhpcy5fY2xlYW51cCgpKTtcbiAgfVxuXG4gIG9ic2VydmUob3B0aW9ucz86IFF1ZXJ5Rm9ybU9ic2VydmVPcHRpb25zKSB7XG4gICAgaWYgKHRoaXMuX2lzT2JzZXJ2aW5nKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdRdWVyeUZvcm0ub2JzZXJ2ZSgpIHdhcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMuX2lzT2JzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIGlmIChvcHRpb25zPy5zeW5jT25OYXZpZ2F0aW9uICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgZGlkQ2hhbmdlcyA9IHRoaXMuc2V0Rm9ybVZhbHVlRnJvbVVybFF1ZXJ5UGFyYW1zKHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IHRoaXMuX3F1ZXJ5UGFyYW1zKCksXG4gICAgICB9KTtcblxuICAgICAgaWYgKGRpZENoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5faGFuZGxlRm9ybUNoYW5nZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZXJnZSguLi5PYmplY3QudmFsdWVzKHRoaXMuX2ZpZWxkcykubWFwKChmaWVsZCkgPT4gZmllbGQuY29udHJvbC52YWx1ZUNoYW5nZXMpLCB0aGlzLl9kaWRWYWx1ZUNoYW5nZXMkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9oYW5kbGVGb3JtQ2hhbmdlKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5vYnNlcnZlVHJpZ2dlciQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgbGV0IGNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3A6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGN1cnJlbnRVbmlxdWVDaGFuZ2VkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGhpcy5fY3VycmVudEZvcm1WYWx1ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlOiBjbG9uZSh0aGlzLl9sYXN0Rm9ybVZhbHVlJC52YWx1ZSksXG4gICAgICAgICAgICBjdXJyZW50VmFsdWU6IGNsb25lKGN1cnJlbnRWYWx1ZSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkgPT4ge1xuICAgICAgICAgIGlmIChvcHRpb25zPy53cml0ZVRvUXVlcnlQYXJhbXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zeW5jVmlhVXJsUXVlcnlQYXJhbXMoY3VycmVudFZhbHVlLCBvcHRpb25zPy5yZXBsYWNlVXJsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBkaWRSZXNldFZhbHVlcyA9IHRoaXMuX3NraXBOZXh0UmVzZXRzXG4gICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICA6IHRoaXMuX2hhbmRsZVF1ZXJ5Rm9ybVJlc2V0cyhwcmV2aW91c1ZhbHVlID8/IG51bGwsIGN1cnJlbnRWYWx1ZSk7XG5cbiAgICAgICAgICB0aGlzLl9za2lwTmV4dFJlc2V0cyA9IGZhbHNlO1xuXG4gICAgICAgICAgY29uc3QgY2hhbmdlZEZpZWxkcyA9IE9iamVjdC5rZXlzKGN1cnJlbnRWYWx1ZSkuZmlsdGVyKFxuICAgICAgICAgICAgKGtleSkgPT4gIWVxdWFsKHByZXZpb3VzVmFsdWU/LltrZXldLCBjdXJyZW50VmFsdWVba2V5XSksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wLmxlbmd0aCkge1xuICAgICAgICAgICAgY2hhbmdlZEZpZWxkcy5wdXNoKC4uLmNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3ApO1xuICAgICAgICAgICAgY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcCA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkaWRSZXNldFZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5fZGlkVmFsdWVDaGFuZ2VzJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcCA9IGNoYW5nZWRGaWVsZHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudFVuaXF1ZUNoYW5nZWRGaWVsZHMgPSBbLi4ubmV3IFNldChjaGFuZ2VkRmllbGRzKV07XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKHsgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlIH0pID0+IHtcbiAgICAgICAgICBpZiAoY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcC5sZW5ndGgpIHJldHVybiBvZihudWxsKS5waXBlKG1hcCgoKSA9PiAoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkpKTtcblxuICAgICAgICAgIGNvbnN0IGRlYm91bmNlVmFsdWVzID0gY3VycmVudFVuaXF1ZUNoYW5nZWRGaWVsZHMubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZmllbGRzW2tleV07XG5cbiAgICAgICAgICAgIGlmICghZmllbGQpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBpZiAoZmllbGQuZGF0YS5kaXNhYmxlRGVib3VuY2VJZkZhbHN5ID09PSB0cnVlICYmICFjdXJyZW50VmFsdWVba2V5XSkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmRhdGEuZGVib3VuY2UgPz8gbnVsbDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGN1cnJlbnRVbmlxdWVDaGFuZ2VkRmllbGRzID0gW107XG5cbiAgICAgICAgICBpZiAoZGVib3VuY2VWYWx1ZXMuc29tZSgodikgPT4gdiA9PT0gbnVsbCkgfHwgIWRlYm91bmNlVmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpLnBpcGUobWFwKCgpID0+ICh7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSB9KSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHNob3J0ZXN0RGVib3VuY2VUaW1lID0gTWF0aC5taW4oLi4uZGVib3VuY2VWYWx1ZXMuZmlsdGVyKCh2KTogdiBpcyBudW1iZXIgPT4gdiAhPT0gbnVsbCkpO1xuXG4gICAgICAgICAgcmV0dXJuIHRpbWVyKHNob3J0ZXN0RGVib3VuY2VUaW1lKS5waXBlKG1hcCgoKSA9PiAoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkpKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkgPT4ge1xuICAgICAgICAgIGlmIChjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbmdlcyQubmV4dCh7XG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlOiBwcmV2aW91c1ZhbHVlID8/IG51bGwsXG4gICAgICAgICAgICBjdXJyZW50VmFsdWU6IGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl91bm9ic2VydmVUcmlnZ2VyJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAob3B0aW9ucz8uc3luY09uTmF2aWdhdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX3F1ZXJ5UGFyYW1DaGFuZ2VzJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bm9ic2VydmVUcmlnZ2VyJCksXG4gICAgICAgICAgdGFwKChjaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkaWRWYWx1ZUNoYW5nZXMgPSB0aGlzLnNldEZvcm1WYWx1ZUZyb21VcmxRdWVyeVBhcmFtcyh7IHF1ZXJ5UGFyYW1zOiBjaGFuZ2VzIH0pO1xuXG4gICAgICAgICAgICBpZiAoZGlkVmFsdWVDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2RpZFZhbHVlQ2hhbmdlcyQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVRdWVyeUZvcm1SZXNldHMocHJldmlvdXNWYWx1ZTogUXVlcnlGb3JtVmFsdWU8VD4gfCBudWxsLCBjdXJyZW50VmFsdWU6IFF1ZXJ5Rm9ybVZhbHVlPFQ+KSB7XG4gICAgbGV0IGRpZFJlc2V0VmFsdWVzID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IGZvcm1GaWVsZEtleSBpbiB0aGlzLl9maWVsZHMpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZmllbGRzW2Zvcm1GaWVsZEtleV07XG5cbiAgICAgIGlmICghZmllbGQpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCByZXNldHMgPSBmaWVsZC5kYXRhLmlzUmVzZXRCeTtcblxuICAgICAgaWYgKCFyZXNldHMpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCByZXNldENvbmRpdGlvbktleXMgPSBBcnJheS5pc0FycmF5KHJlc2V0cykgPyByZXNldHMgOiBbcmVzZXRzXTtcblxuICAgICAgZm9yIChjb25zdCByZXNldENvbmRpdGlvbktleSBvZiByZXNldENvbmRpdGlvbktleXMpIHtcbiAgICAgICAgaWYgKCEocmVzZXRDb25kaXRpb25LZXkgaW4gdGhpcy5fZmllbGRzKSkge1xuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBUaGUgZmllbGQgXCIke3Jlc2V0Q29uZGl0aW9uS2V5fVwiIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBRdWVyeUZvcm0uIElzIGl0IGEgdHlwbz9gLCB0aGlzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2aW91c1ZhbHVlICYmXG4gICAgICAgICAgY3VycmVudFZhbHVlICYmXG4gICAgICAgICAgIWVxdWFsKHByZXZpb3VzVmFsdWVbcmVzZXRDb25kaXRpb25LZXldLCBjdXJyZW50VmFsdWVbcmVzZXRDb25kaXRpb25LZXldKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWVGb3JLZXlUb1Jlc2V0ID0gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGZvcm1GaWVsZEtleSk7XG4gICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlRm9yS2V5VG9SZXNldCA9IGN1cnJlbnRWYWx1ZVtmb3JtRmllbGRLZXldO1xuXG4gICAgICAgICAgaWYgKGVxdWFsKGRlZmF1bHRWYWx1ZUZvcktleVRvUmVzZXQsIGN1cnJlbnRWYWx1ZUZvcktleVRvUmVzZXQpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbZm9ybUZpZWxkS2V5XS5zZXRWYWx1ZShkZWZhdWx0VmFsdWVGb3JLZXlUb1Jlc2V0KTtcblxuICAgICAgICAgIGRpZFJlc2V0VmFsdWVzID0gdHJ1ZTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZFJlc2V0VmFsdWVzO1xuICB9XG5cbiAgdW5vYnNlcnZlKCkge1xuICAgIHRoaXMuX3Vub2JzZXJ2ZVRyaWdnZXIkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5fY2xlYW51cCgpO1xuICB9XG5cbiAgc2V0Rm9ybVZhbHVlRnJvbVVybFF1ZXJ5UGFyYW1zKG9wdGlvbnM6IHsgcXVlcnlQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0pIHtcbiAgICBsZXQgZGlkVmFsdWVDaGFuZ2VzID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9maWVsZHMpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMucXVlcnlQYXJhbXNbdGhpcy5fdHJhbnNmb3JtS2V5VG9RdWVyeVBhcmFtKGtleSldO1xuXG4gICAgICBjb25zdCB2YWx1ZURvZXNOb3RFeGlzdCA9IHZhbHVlID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh2YWx1ZURvZXNOb3RFeGlzdCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHZhbHVlR290UmVtb3ZlZCA9IHZhbHVlID09PSBFVF9QUk9QRVJUWV9SRU1PVkVEO1xuXG4gICAgICBpZiAodmFsdWVHb3RSZW1vdmVkKSB7XG4gICAgICAgIGZpZWxkLmNvbnRyb2wuc2V0VmFsdWUodGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGtleSksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgZGlkVmFsdWVDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICBpZiAoZmllbGQuZGF0YS5xdWVyeVBhcmFtVG9WYWx1ZVRyYW5zZm9ybUZuKSB7XG4gICAgICAgIGRlc2VyaWFsaXplZFZhbHVlID0gZmllbGQuZGF0YS5xdWVyeVBhcmFtVG9WYWx1ZVRyYW5zZm9ybUZuKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoIWZpZWxkLmRhdGEuc2tpcEF1dG9UcmFuc2Zvcm0pIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdElzTnVtID0gdHlwZW9mIHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkpID09PSAnbnVtYmVyJztcbiAgICAgICAgY29uc3QgdmFsdWVJc051bSA9ICFpc05hTihOdW1iZXIodmFsdWUpKTtcbiAgICAgICAgY29uc3QgdmFsdWVDb250YWluc1doaXRlc3BhY2UgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKSAhPT0gdmFsdWU7XG4gICAgICAgIGNvbnN0IHZhbHVlSGFzTGVhZGluZ1plcm8gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnN0YXJ0c1dpdGgoJzAnKTtcbiAgICAgICAgY29uc3QgdmFsdWVFbmRzV2l0aERvdCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZW5kc1dpdGgoJy4nKTtcblxuICAgICAgICBjb25zdCBkZWZhdWx0SXNCb29sID0gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGtleSkgPT09ICdib29sZWFuJztcbiAgICAgICAgY29uc3QgdmFsdWVJc0Jvb2wgPSB2YWx1ZSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSAnZmFsc2UnO1xuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gRVRfUFJPUF9OVUxMX1ZBTFVFKSB7XG4gICAgICAgICAgZGVzZXJpYWxpemVkVmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGRlZmF1bHRJc051bSB8fFxuICAgICAgICAgICh2YWx1ZUlzTnVtICYmICF2YWx1ZUNvbnRhaW5zV2hpdGVzcGFjZSAmJiAhdmFsdWVIYXNMZWFkaW5nWmVybyAmJiAhdmFsdWVFbmRzV2l0aERvdClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGVzZXJpYWxpemVkVmFsdWUgPSB0cmFuc2Zvcm1Ub051bWJlcih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVmYXVsdElzQm9vbCB8fCB2YWx1ZUlzQm9vbCkge1xuICAgICAgICAgIGRlc2VyaWFsaXplZFZhbHVlID0gdHJhbnNmb3JtVG9Cb29sZWFuKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZUlzRXF1YWxUb0N1cnJlbnQgPSBlcXVhbChkZXNlcmlhbGl6ZWRWYWx1ZSwgZmllbGQuY29udHJvbC52YWx1ZSk7XG5cbiAgICAgIGlmICh2YWx1ZUlzRXF1YWxUb0N1cnJlbnQpIGNvbnRpbnVlO1xuXG4gICAgICBmaWVsZC5jb250cm9sLnNldFZhbHVlKGRlc2VyaWFsaXplZFZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICBkaWRWYWx1ZUNoYW5nZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBkaWRWYWx1ZUNoYW5nZXM7XG4gIH1cblxuICBzZXRWYWx1ZSh2YWx1ZTogUXVlcnlGb3JtVmFsdWU8VD4sIG9wdGlvbnM/OiBRdWVyeUZvcm1Xcml0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLl9mb3JtLl9zZXRWYWx1ZSh2YWx1ZSwgb3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucz8uc2tpcFJlc2V0cykge1xuICAgICAgdGhpcy5fc2tpcE5leHRSZXNldHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHBhdGNoVmFsdWUodmFsdWU6IFBhcnRpYWw8UXVlcnlGb3JtVmFsdWU8VD4+LCBvcHRpb25zPzogUXVlcnlGb3JtV3JpdGVPcHRpb25zKSB7XG4gICAgdGhpcy5fZm9ybS5fcGF0Y2hWYWx1ZSh2YWx1ZSwgb3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucz8uc2tpcFJlc2V0cykge1xuICAgICAgdGhpcy5fc2tpcE5leHRSZXNldHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0RmllbGRUb0RlZmF1bHQoa2V5OiBrZXlvZiBRdWVyeUZvcm1WYWx1ZTxUPiwgb3B0aW9ucz86IFF1ZXJ5Rm9ybVdyaXRlT3B0aW9ucykge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkgYXMgc3RyaW5nKTtcblxuICAgIHRoaXMuZm9ybS5jb250cm9sc1trZXldLnNldFZhbHVlKGRlZmF1bHRWYWx1ZSk7XG5cbiAgICBpZiAob3B0aW9ucz8uc2tpcFJlc2V0cykge1xuICAgICAgdGhpcy5fc2tpcE5leHRSZXNldHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0RmllbGRzVG9EZWZhdWx0KGtleXM6IChrZXlvZiBRdWVyeUZvcm1WYWx1ZTxUPilbXSwgb3B0aW9ucz86IFF1ZXJ5Rm9ybVdyaXRlT3B0aW9ucykge1xuICAgIGNvbnN0IGRlZmF1bHRzID0ga2V5cy5yZWR1Y2UoXG4gICAgICAoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgYWNjW2tleV0gPSB0aGlzLl9nZXREZWZhdWx0VmFsdWUoa2V5IGFzIHN0cmluZyk7XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7fSBhcyBQYXJ0aWFsPFF1ZXJ5Rm9ybVZhbHVlPFQ+PixcbiAgICApO1xuXG4gICAgdGhpcy5wYXRjaFZhbHVlKGRlZmF1bHRzKTtcblxuICAgIGlmIChvcHRpb25zPy5za2lwUmVzZXRzKSB7XG4gICAgICB0aGlzLl9za2lwTmV4dFJlc2V0cyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRBbGxGaWVsZHNUb0RlZmF1bHQob3B0aW9ucz86IFF1ZXJ5Rm9ybVdyaXRlT3B0aW9ucyAmIHsgc2tpcEZpZWxkcz86IChrZXlvZiBRdWVyeUZvcm1WYWx1ZTxUPilbXSB9KSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX2ZpZWxkcykgYXMgKGtleW9mIFF1ZXJ5Rm9ybVZhbHVlPFQ+KVtdO1xuXG4gICAgaWYgKG9wdGlvbnM/LnNraXBGaWVsZHMpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIG9wdGlvbnMuc2tpcEZpZWxkcykge1xuICAgICAgICBjb25zdCBpbmRleCA9IGtleXMuaW5kZXhPZihrZXkpO1xuXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBrZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0RmllbGRzVG9EZWZhdWx0KGtleXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RGVmYXVsdFZhbHVlKGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5fZGVmYXVsdFZhbHVlc1trZXldO1xuXG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbC5zdGFydHNXaXRoKEVUX0FSUl9QUkVGSVgpKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWwuc2xpY2UoRVRfQVJSX1BSRUZJWC5sZW5ndGgpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbC5zdGFydHNXaXRoKEVUX09CSl9QUkVGSVgpKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWwuc2xpY2UoRVRfT0JKX1BSRUZJWC5sZW5ndGgpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB2YWwoKTtcbiAgICB9IGVsc2UgaWYgKHZhbCA9PT0gRVRfUFJPUF9OVUxMX1ZBTFVFKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF90cmFuc2Zvcm1LZXlUb1F1ZXJ5UGFyYW0oa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuX29wdGlvbnM/LnF1ZXJ5UGFyYW1QcmVmaXgpIHJldHVybiBrZXk7XG5cbiAgICBjb25zdCBwcmVmaXggPVxuICAgICAgdHlwZW9mIHRoaXMuX29wdGlvbnM/LnF1ZXJ5UGFyYW1QcmVmaXggPT09ICdzdHJpbmcnXG4gICAgICAgID8gdGhpcy5fb3B0aW9ucy5xdWVyeVBhcmFtUHJlZml4XG4gICAgICAgIDogdGhpcy5fb3B0aW9ucy5xdWVyeVBhcmFtUHJlZml4KCk7XG5cbiAgICByZXR1cm4gYCR7cHJlZml4fS0ke2tleX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNEZWZhdWx0VmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgID8gYCR7RVRfQVJSX1BSRUZJWH0ke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gXG4gICAgICA6IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGxcbiAgICAgICAgPyBgJHtFVF9PQkpfUFJFRklYfSR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWBcbiAgICAgICAgOiB2YWx1ZSA9PT0gbnVsbFxuICAgICAgICAgID8gRVRfUFJPUF9OVUxMX1ZBTFVFXG4gICAgICAgICAgOiB2YWx1ZTtcblxuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWVzW2tleV0gPT09IG5vcm1hbGl6ZWRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwRm9ybUdyb3VwKCkge1xuICAgIGNvbnN0IGdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSBhcyBRdWVyeUZvcm1Hcm91cENvbnRyb2xzPFQ+KSBhcyB1bmtub3duIGFzIFF1ZXJ5Rm9ybUdyb3VwO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBmaWVsZF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fZmllbGRzKSkge1xuICAgICAgZ3JvdXAuYWRkQ29udHJvbChrZXksIGZpZWxkLmNvbnRyb2wpO1xuICAgIH1cblxuICAgIGdyb3VwLl9wYXRjaFZhbHVlID0gZ3JvdXAucGF0Y2hWYWx1ZTtcbiAgICBncm91cC5fc2V0VmFsdWUgPSBncm91cC5zZXRWYWx1ZTtcblxuICAgIGdyb3VwLnBhdGNoVmFsdWUgPSB0aGlzLnBhdGNoVmFsdWUuYmluZCh0aGlzKTtcbiAgICBncm91cC5zZXRWYWx1ZSA9IHRoaXMuc2V0VmFsdWUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBncm91cCBhcyB1bmtub3duIGFzIEZvcm1Hcm91cDxRdWVyeUZvcm1Hcm91cENvbnRyb2xzPFQ+PjtcbiAgfVxuXG4gIHByaXZhdGUgX2V4dHJhY3REZWZhdWx0VmFsdWVzKCkge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9maWVsZHMpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkLmRhdGEuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgPyBmaWVsZC5kYXRhLmRlZmF1bHRWYWx1ZSA6IGZpZWxkLmNvbnRyb2wudmFsdWU7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBkZWZhdWx0VmFsdWVzW2tleV0gPSBgJHtFVF9BUlJfUFJFRklYfSR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWA7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlc1trZXldID0gYCR7RVRfT0JKX1BSRUZJWH0ke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBkZWZhdWx0VmFsdWVzW2tleV0gPSBFVF9QUk9QX05VTExfVkFMVUU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0VmFsdWVzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlcztcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNWaWFVcmxRdWVyeVBhcmFtcyh2YWx1ZXM6IFF1ZXJ5Rm9ybVZhbHVlPFQ+LCByZXBsYWNlVXJsPzogYm9vbGVhbikge1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyAuLi5jbG9uZSh0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcykgfTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlcykpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1LZXkgPSB0aGlzLl90cmFuc2Zvcm1LZXlUb1F1ZXJ5UGFyYW0oa2V5KTtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZmllbGRzW2tleV07XG5cbiAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzRGVmYXVsdCA9IHRoaXMuX2lzRGVmYXVsdFZhbHVlKGtleSwgdmFsdWUpO1xuICAgICAgY29uc3Qgd3JpdGVEZWZhdWx0VG9VcmwgPSBmaWVsZC5kYXRhLmFwcGVuZERlZmF1bHRWYWx1ZVRvVXJsID09PSB0cnVlO1xuICAgICAgY29uc3Qgd3JpdGVUb1VybCA9IGZpZWxkLmRhdGEuYXBwZW5kVG9VcmwgIT09IGZhbHNlO1xuXG4gICAgICBpZiAoIXdyaXRlVG9VcmwgfHwgKGlzRGVmYXVsdCAmJiAhd3JpdGVEZWZhdWx0VG9VcmwpKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zW3F1ZXJ5UGFyYW1LZXldID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnlQYXJhbXNbcXVlcnlQYXJhbUtleV0gPSBmaWVsZC5kYXRhLnZhbHVlVG9RdWVyeVBhcmFtVHJhbnNmb3JtRm5cbiAgICAgICAgICA/IGZpZWxkLmRhdGEudmFsdWVUb1F1ZXJ5UGFyYW1UcmFuc2Zvcm1Gbj8uKHZhbHVlKVxuICAgICAgICAgIDogdmFsdWUgPT09IG51bGxcbiAgICAgICAgICAgID8gRVRfUFJPUF9OVUxMX1ZBTFVFXG4gICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3pvbmUucnVuKCgpID0+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","buildQueryCacheKey","shouldCacheQuery","deleteCookie","coreDeleteCookie","ɵEffectScheduler","i1"],"mappings":"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"}
1
+ {"version":3,"file":"ethlete-query.mjs","names":["isNaN","deleteCookie","extractExpiresInSeconds","shouldRetryRequest","shouldCacheQuery","buildQueryCacheKey","shouldRetryRequest","shouldRetryRequest","extractExpiresInSeconds","shouldRetryRequest","shouldCacheQuery","buildQueryCacheKey","i1"],"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-features.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-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/experimental/index.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"],"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;\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): boolean {\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 let didAddAnyValue = false;\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 didAddAnyValue = true;\n }\n }\n\n return didAddAnyValue;\n } else if (typeof value === 'object' && value !== null) {\n let didAddAnyValue = false;\n for (const [objKey, val] of Object.entries(value)) {\n const nestedKey = objectNotation === 'dot' ? `${key}.${objKey}` : `${key}[${objKey}]`;\n didAddAnyValue = processValue(nestedKey, val) || didAddAnyValue;\n }\n\n return didAddAnyValue;\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 = runInInjectionContext(injector, () => 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 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} as const;\n\nexport type QueryRuntimeErrorCode = (typeof QueryRuntimeErrorCode)[keyof typeof QueryRuntimeErrorCode];\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, HttpEventType } 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 QueryFeatureType = {\n WITH_ARGS: 'WITH_ARGS',\n WITH_LOGGING: 'WITH_LOGGING',\n WITH_ERROR_HANDLING: 'WITH_ERROR_HANDLING',\n WITH_SUCCESS_HANDLING: 'WITH_SUCCESS_HANDLING',\n WITH_POLLING: 'WITH_POLLING',\n WITH_AUTO_REFRESH: 'WITH_AUTO_REFRESH',\n WITH_RESPONSE_UPDATE: 'WITH_RESPONSE_UPDATE',\n} as const;\nexport type QueryFeatureType = (typeof QueryFeatureType)[keyof typeof QueryFeatureType];\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\nexport const createQueryFeature = <TArgs extends QueryArgs>(config: {\n type: QueryFeatureType;\n fn: QueryFeatureFn<TArgs>;\n}) => {\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.WITH_ARGS,\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.WITH_POLLING,\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.WITH_LOGGING,\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.WITH_ERROR_HANDLING,\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\nexport type 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.WITH_SUCCESS_HANDLING,\n fn: (context) => {\n nestedEffect(\n () => {\n const event = context.state.latestHttpEvent();\n\n if (!event || event.type !== HttpEventType.Response) return;\n\n untracked(() => {\n options.handler(context.state.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.WITH_AUTO_REFRESH,\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.WITH_RESPONSE_UPDATE,\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","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 { HttpEventType } from '@angular/common/http';\nimport { 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 const hasCompletedResponse = currentLatestHttpEvent?.type === HttpEventType.Response;\n if (!hasCompletedResponse && !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.WITH_ARGS);\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 request: state.subtle.request.asReadonly(),\n destroyRef: deps.scopeDestroyRef,\n injector: deps.injector,\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 type 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 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 currentEvent.set(event);\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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, effect, inject, Injector, runInInjectionContext, Signal, signal, untracked } from '@angular/core';\nimport { AnyNewQuery, 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 AnyNewQuery> = {\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 AnyNewQuery, 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<AnyNewQuery, 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.WITH_ARGS);\n const hasWithOptimisticUpdateFeature = features.some((f) => f.type == QueryFeatureType.WITH_RESPONSE_UPDATE);\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 { AnyNewQuery, 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<AnyNewQuery, NormalizedPagination<unknown>>;\n\nexport type PagedQueryStack<TQuery extends AnyNewQuery, 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\nexport const bindSignalToTarget = <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 });\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 = bindSignalToTarget(responseSignal, state.response);\n const loadingRef = bindSignalToTarget(request.loading, state.loading);\n const errorRef = bindSignalToTarget(request.error, state.error);\n const latestHttpEventRef = bindSignalToTarget(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 { DestroyRef, Injector, Signal } from '@angular/core';\nimport { HttpRequest, 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 AnyNewQuery = 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 /** The currently underlying HTTP request of the query. Will be `null` if the query has never been executed. */\n request: Signal<HttpRequest<TArgs> | null>;\n\n /** The destroy reference used to clean up the query when it is no longer needed */\n destroyRef: DestroyRef;\n\n /** The Angular injector used to resolve dependencies for the query */\n injector: Injector;\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 */\nexport type 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 { AnyNewQuery, 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 | AnyNewQuery> =\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 isQueryStateLoading,\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 { AnyNewQuery, Query, QueryArgs, QueryArgsOf, QueryExecutionState, RequestArgs, ResponseType } from '../http';\n\nexport type CreateLegacyQueryOptions<TArgs extends QueryArgs> = {\n query: Query<TArgs>;\n};\n\nexport const 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 AnyNewQuery,\n> {\n /**\n * @internal\n */\n _pollingSubscription: Subscription | null = null;\n /**\n * @internal\n */\n _currentPollConfig: PollConfig | null = null;\n\n /**\n * @internal\n */\n 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 return this.newQuery.subtle.request()?.isStale();\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 public newQuery: TNewQuery,\n public _arguments: RequestArgs<QueryArgsOf<TNewQuery>>,\n public entity?: QueryEntityConfig<Store, Data, Response, Arguments, Id>,\n ) {\n this.state$ = toObservable(this.newQuery.executionState, { injector: this.newQuery.subtle.injector }).pipe(\n map((execState) => transformExecStateToQueryState(execState)),\n switchMap((s) => this._transformState(s)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n this.newQuery.subtle.destroyRef.onDestroy(() => this.destroy());\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 /**\n * @internal\n */\n _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 { BaseArguments, QueryConfig, QueryEntityConfig, RouteType, WithHeaders, WithInjector } from '../../query';\nimport { addQueryContainerHandling, QueryContainerConfig } from '../../utils';\nimport { AnyNewQuery, 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 type 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 AnyNewQuery,\n> = (\n args: Arguments & 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/**\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 prepare: LegacyQueryPrepareFn<\n LegacyArgumentsOfQueryArgs<TArgs>,\n Response,\n RouteType<LegacyArgumentsOfQueryArgs<TArgs>>,\n Store,\n Data,\n Id,\n Query<TArgs>\n > = (args: LegacyArgumentsOfQueryArgs<TArgs> & WithHeaders & WithLegacyConfig & WithInjector) => {\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 WebSocketRuntimeErrorCode = {\n // Web Socket Client\n ROOM_NOT_JOINED: 1000,\n MESSAGE_MALFORMED: 1001,\n} as const;\n\nexport type WebSocketRuntimeErrorCode = (typeof WebSocketRuntimeErrorCode)[keyof typeof WebSocketRuntimeErrorCode];\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","export * from './auth';\nexport * from './gql';\nexport * from './http';\nexport * from './interop';\nexport * from './pipes';\nexport * from './ws';\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 { ExperimentalQuery } from '../..';\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 | ExperimentalQuery.AnyLegacyQuery | null, Data extends QueryDataOf<T>>(\n source: Observable<T>,\n ) {\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 | ExperimentalQuery.AnyLegacyQuery | null | undefined, J extends QueryForm<any>>(\n config: ResetPageOnErrorOperatorConfig<J>,\n ) =>\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 | ExperimentalQuery.AnyLegacyQuery>(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 EMPTY,\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 _memoizedState$: Observable<QueryState<Data>> | null = null;\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 if (!this._memoizedState$) {\n this._memoizedState$ = 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 return this._memoizedState$;\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 switchMap(([state, tokens]) => {\n if (state && isQueryStateLoading(state)) {\n return EMPTY;\n }\n\n if (isQueryStateFailure(state)) {\n this._updateEntityState({ type: 'failure', error: state.error, headers: {} }, meta, options);\n return EMPTY;\n }\n\n if (!state && !(tokens?.token || tokens?.refreshToken)) {\n return EMPTY;\n }\n\n return of(true as const);\n }),\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 forceRefresh() {\n return this._refreshQuery();\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\n .prepare(args)\n .execute({ skipCache: true, _isUnauthorizedRetry: 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 TemplateRef,\n ViewContainerRef,\n effect,\n inject,\n input,\n untracked,\n} from '@angular/core';\nimport { AnyLegacyQuery, isLegacyQuery } from '../experimental/interop/legacy-query';\nimport {\n AnyQuery,\n AnyQueryCollection,\n QueryCollectionKeysOf,\n QueryOf,\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';\nimport { queryStateSignal } from '../utils';\n\nexport type QueryDirectiveContext<Q extends QueryDirectiveType | 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\nexport type QueryDirectiveType = AnyQuery | AnyLegacyQuery | AnyQueryCollection;\n\n@Directive({\n selector: '[etQuery]',\n standalone: true,\n})\nexport class QueryDirective<Q extends QueryDirectiveType | null> {\n private errorHandler = inject(ErrorHandler);\n private cdr = inject(ChangeDetectorRef);\n\n private readonly _viewContext: QueryDirectiveContext<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 query = input.required<Q>({ alias: 'etQuery' });\n\n cache = input(false, { alias: 'etQueryCache' });\n\n queryState = queryStateSignal(this.query);\n\n static ngTemplateContextGuard<Q extends QueryDirectiveType | null>(\n dir: QueryDirective<Q>,\n ctx: unknown,\n ): ctx is QueryDirectiveContext<Q> {\n return true;\n }\n\n constructor() {\n inject(ViewContainerRef).createEmbeddedView(inject(TemplateRef), this._viewContext);\n\n effect(() => {\n const query = extractQuery(this.query());\n\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\n if (isQueryStatePrepared(query.rawState) || isQueryStateCancelled(query.rawState)) {\n query.execute();\n }\n\n this._viewContext.scope = isQueryCollection(query) ? (query.type as QueryCollectionKeysOf<Q>) : null;\n this._viewContext.query = query as QueryOf<Q>;\n });\n });\n\n effect(() => {\n const state = this.queryState();\n const cache = this.cache();\n\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\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 (!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 }\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 { ExperimentalQuery } from '../..';\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<DirectiveQueryCreator, 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\ntype DirectiveQueryCreator = AnyQueryCreator | ExperimentalQuery.AnyLegacyQueryCreator;\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<DirectiveQueryCreator, 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 if (v.enabled === false) {\n this._infinityQuery = v;\n this._infinityQueryInstance = null;\n return;\n }\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<DirectiveQueryCreator, 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 { computed, Directive, ElementRef, inject, input, Input, OnDestroy, OnInit } from '@angular/core';\nimport { fromEvent, Subject, takeUntil } from 'rxjs';\nimport { INFINITY_QUERY_TOKEN, InfinityQueryDirective } 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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n infinityQueryOverride = input<InfinityQueryDirective<any> | null>(null);\n\n infinityQuery = computed(() => this.infinityQueryOverride() ?? this._infinityQuery);\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>{{ $safeNavigationMigration(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__';\nconst ET_OBJ_PREFIX = 'ET_OBJ__';\nconst ET_PROP_NULL_VALUE = 'ET_NULL__';\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 = typeof 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 (value === ET_PROP_NULL_VALUE) {\n deserializedValue = null;\n } else if (\n defaultIsNum ||\n (valueIsNum && !valueContainsWhitespace && !valueHasLeadingZero && !valueEndsWithDot)\n ) {\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 === 'string' && val.startsWith(ET_OBJ_PREFIX)) {\n return JSON.parse(val.slice(ET_OBJ_PREFIX.length));\n } else if (typeof val === 'function') {\n return val();\n } else if (val === ET_PROP_NULL_VALUE) {\n return null;\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)\n ? `${ET_ARR_PREFIX}${JSON.stringify(value)}`\n : typeof value === 'object' && value !== null\n ? `${ET_OBJ_PREFIX}${JSON.stringify(value)}`\n : value === null\n ? ET_PROP_NULL_VALUE\n : value;\n\n return this._defaultValues[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 if (typeof value === 'object' && value !== null) {\n defaultValues[key] = `${ET_OBJ_PREFIX}${JSON.stringify(value)}`;\n } else if (value === null) {\n defaultValues[key] = ET_PROP_NULL_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 === null\n ? ET_PROP_NULL_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"],"mappings":"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"}