@ethlete/query 5.21.0 → 5.22.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.
Files changed (92) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/fesm2022/ethlete-query.mjs +419 -228
  3. package/fesm2022/ethlete-query.mjs.map +1 -1
  4. package/lib/experimental/http-request.d.ts +3 -1
  5. package/lib/experimental/index.d.ts +1 -0
  6. package/lib/experimental/paged-query.d.ts +35 -0
  7. package/lib/experimental/query-errors.d.ts +7 -1
  8. package/lib/experimental/query-stack.d.ts +4 -2
  9. package/package.json +5 -7
  10. package/esm2022/ethlete-query.mjs +0 -5
  11. package/esm2022/index.mjs +0 -21
  12. package/esm2022/lib/auth/auth-provider.types.mjs +0 -2
  13. package/esm2022/lib/auth/auth-provider.utils.mjs +0 -25
  14. package/esm2022/lib/auth/basic-auth-provider.mjs +0 -15
  15. package/esm2022/lib/auth/bearer-auth-provider.mjs +0 -168
  16. package/esm2022/lib/auth/custom-header-auth-provider.mjs +0 -12
  17. package/esm2022/lib/auth/index.mjs +0 -6
  18. package/esm2022/lib/class-validator/class-validator.types.mjs +0 -2
  19. package/esm2022/lib/class-validator/class-validator.utils.mjs +0 -4
  20. package/esm2022/lib/class-validator/index.mjs +0 -3
  21. package/esm2022/lib/devtools/components/query-devtools/index.mjs +0 -2
  22. package/esm2022/lib/devtools/components/query-devtools/query-devtools.component.mjs +0 -297
  23. package/esm2022/lib/devtools/pipes/index.mjs +0 -2
  24. package/esm2022/lib/devtools/pipes/query-short-name.pipe.mjs +0 -24
  25. package/esm2022/lib/devtools/utils/index.mjs +0 -2
  26. package/esm2022/lib/devtools/utils/query-client.utils.mjs +0 -13
  27. package/esm2022/lib/directives/index.mjs +0 -4
  28. package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +0 -56
  29. package/esm2022/lib/directives/infinity-query.directive.mjs +0 -147
  30. package/esm2022/lib/directives/query.directive.mjs +0 -123
  31. package/esm2022/lib/entity/entity-store.mjs +0 -127
  32. package/esm2022/lib/entity/entity.types.mjs +0 -2
  33. package/esm2022/lib/entity/entity.utils.mjs +0 -29
  34. package/esm2022/lib/entity/index.mjs +0 -4
  35. package/esm2022/lib/experimental/bearer-auth-provider-config.mjs +0 -19
  36. package/esm2022/lib/experimental/bearer-auth-provider.mjs +0 -245
  37. package/esm2022/lib/experimental/http-request.mjs +0 -154
  38. package/esm2022/lib/experimental/index.mjs +0 -22
  39. package/esm2022/lib/experimental/query-client-config.mjs +0 -13
  40. package/esm2022/lib/experimental/query-client.mjs +0 -16
  41. package/esm2022/lib/experimental/query-creator-templates.mjs +0 -33
  42. package/esm2022/lib/experimental/query-creator.mjs +0 -28
  43. package/esm2022/lib/experimental/query-dependencies.mjs +0 -14
  44. package/esm2022/lib/experimental/query-errors.mjs +0 -61
  45. package/esm2022/lib/experimental/query-execute-utils.mjs +0 -54
  46. package/esm2022/lib/experimental/query-execute.mjs +0 -14
  47. package/esm2022/lib/experimental/query-features.mjs +0 -126
  48. package/esm2022/lib/experimental/query-repository.mjs +0 -97
  49. package/esm2022/lib/experimental/query-snapshot.mjs +0 -45
  50. package/esm2022/lib/experimental/query-stack.mjs +0 -65
  51. package/esm2022/lib/experimental/query-state.mjs +0 -20
  52. package/esm2022/lib/experimental/query-utils.mjs +0 -176
  53. package/esm2022/lib/experimental/query.mjs +0 -29
  54. package/esm2022/lib/experimental/secure-query-creator.mjs +0 -15
  55. package/esm2022/lib/experimental/secure-query-execute.mjs +0 -80
  56. package/esm2022/lib/experimental/secure-query.mjs +0 -33
  57. package/esm2022/lib/gql/gql.mjs +0 -23
  58. package/esm2022/lib/gql/index.mjs +0 -2
  59. package/esm2022/lib/infinite-query/index.mjs +0 -4
  60. package/esm2022/lib/infinite-query/infinity-query.mjs +0 -171
  61. package/esm2022/lib/infinite-query/infinity-query.types.mjs +0 -2
  62. package/esm2022/lib/infinite-query/infinity-query.utils.mjs +0 -3
  63. package/esm2022/lib/logger/index.mjs +0 -2
  64. package/esm2022/lib/logger/logger.mjs +0 -16
  65. package/esm2022/lib/query/index.mjs +0 -4
  66. package/esm2022/lib/query/query.mjs +0 -431
  67. package/esm2022/lib/query/query.types.mjs +0 -2
  68. package/esm2022/lib/query/query.utils.mjs +0 -253
  69. package/esm2022/lib/query-client/index.mjs +0 -4
  70. package/esm2022/lib/query-client/query-client.mjs +0 -80
  71. package/esm2022/lib/query-client/query-client.types.mjs +0 -2
  72. package/esm2022/lib/query-client/query-client.utils.mjs +0 -20
  73. package/esm2022/lib/query-creator/index.mjs +0 -3
  74. package/esm2022/lib/query-creator/query-creator.mjs +0 -55
  75. package/esm2022/lib/query-creator/query-creator.types.mjs +0 -2
  76. package/esm2022/lib/query-form/index.mjs +0 -4
  77. package/esm2022/lib/query-form/query-form.mjs +0 -412
  78. package/esm2022/lib/query-form/query-form.types.mjs +0 -2
  79. package/esm2022/lib/query-form/query-form.utils.mjs +0 -97
  80. package/esm2022/lib/query-store/index.mjs +0 -2
  81. package/esm2022/lib/query-store/query-store.mjs +0 -144
  82. package/esm2022/lib/request/index.mjs +0 -4
  83. package/esm2022/lib/request/request.mjs +0 -196
  84. package/esm2022/lib/request/request.types.mjs +0 -2
  85. package/esm2022/lib/request/request.util.mjs +0 -252
  86. package/esm2022/lib/symfony/index.mjs +0 -3
  87. package/esm2022/lib/symfony/symfony.types.mjs +0 -2
  88. package/esm2022/lib/symfony/symfony.utils.mjs +0 -31
  89. package/esm2022/lib/utils/data.utils.mjs +0 -138
  90. package/esm2022/lib/utils/deep-freeze.util.mjs +0 -17
  91. package/esm2022/lib/utils/def.util.mjs +0 -8
  92. package/esm2022/lib/utils/index.mjs +0 -4
@@ -1,245 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-empty-function */
2
- import { computed, effect, isDevMode, signal, untracked } from '@angular/core';
3
- import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
4
- import { deleteCookie as coreDeleteCookie, getCookie, getDomain, isObject, setCookie } from '@ethlete/core';
5
- import { of, switchMap, tap, timer } from 'rxjs';
6
- import { decryptBearer } from '../auth';
7
- import { bearerExpiresInPropertyNotNumber, cookieLoginTriedButCookieDisabled, defaultResponseTransformerResponseNotContainingAccessToken, defaultResponseTransformerResponseNotContainingRefreshToken, defaultResponseTransformerResponseNotObject, disableCookieCalledWithoutCookieConfig, enableCookieCalledWithoutCookieConfig, loginCalledWithoutConfig, loginWithTokenCalledWithoutConfig, refreshTokenCalledWithoutConfig, selectRoleCalledWithoutConfig, unableToDecryptBearerToken, } from './query-errors';
8
- const defaultResponseTransformer = (response) => {
9
- if (!isObject(response)) {
10
- throw defaultResponseTransformerResponseNotObject(typeof response);
11
- }
12
- if (!('accessToken' in response)) {
13
- throw defaultResponseTransformerResponseNotContainingAccessToken();
14
- }
15
- if (!('refreshToken' in response)) {
16
- throw defaultResponseTransformerResponseNotContainingRefreshToken();
17
- }
18
- return response;
19
- };
20
- const FIVE_MINUTES = 5 * 60 * 1000;
21
- const createAuthProviderQuery = (config, authProviderConfig) => {
22
- const query = config.queryCreator();
23
- const triggeredInternally = signal(false);
24
- const tokens = computed(() => {
25
- const res = query.response();
26
- if (!res)
27
- return null;
28
- const transformed = config.responseTransformer?.(res) ?? defaultResponseTransformer(res);
29
- const bearerValue = decryptBearer(transformed.accessToken);
30
- if (!bearerValue)
31
- throw unableToDecryptBearerToken(transformed.accessToken);
32
- return {
33
- bearer: bearerValue,
34
- tokens: transformed,
35
- };
36
- });
37
- const expiresIn = computed(() => {
38
- const res = tokens();
39
- if (!res)
40
- return null;
41
- const expiresIn = res.bearer[authProviderConfig.expiresInPropertyName ?? 'exp'];
42
- const refreshBuffer = authProviderConfig.refreshBuffer ?? FIVE_MINUTES;
43
- if (typeof expiresIn !== 'number') {
44
- throw bearerExpiresInPropertyNotNumber(expiresIn);
45
- }
46
- // const dummyRemainingTime = (query.lastTimeExecutedAt() ?? 0) + 5000 - new Date().getTime();
47
- const remainingTime = new Date(expiresIn * 1000).getTime() - refreshBuffer - new Date().getTime();
48
- return remainingTime;
49
- });
50
- const execute = (newArgs, options) => {
51
- query.execute({ args: newArgs });
52
- triggeredInternally.set(options?.triggeredInternally ?? false);
53
- };
54
- return {
55
- execute,
56
- query,
57
- tokens,
58
- expiresIn,
59
- triggeredInternally: triggeredInternally.asReadonly(),
60
- };
61
- };
62
- export const createBearerAuthProvider = (options) => {
63
- const cookieEnabled = signal(options.cookie === undefined ? false : (options.cookie.enabled ?? true));
64
- const cookieOptions = {
65
- expiresInDays: 30,
66
- name: 'etAuth',
67
- path: '/',
68
- sameSite: 'lax',
69
- domain: getDomain() ?? 'localhost',
70
- refreshArgsTransformer: (token) => ({ body: { token } }),
71
- ...(options.cookie ?? {}),
72
- };
73
- const loginQuery = options.login ? createAuthProviderQuery(options.login, options) : null;
74
- const tokenLoginQuery = options.tokenLogin ? createAuthProviderQuery(options.tokenLogin, options) : null;
75
- const tokenRefreshQuery = options.tokenRefresh ? createAuthProviderQuery(options.tokenRefresh, options) : null;
76
- const selectRoleQuery = options.selectRole ? createAuthProviderQuery(options.selectRole, options) : null;
77
- const queries = [
78
- { type: 'login', query: loginQuery },
79
- { type: 'tokenLogin', query: tokenLoginQuery },
80
- { type: 'tokenRefresh', query: tokenRefreshQuery },
81
- { type: 'selectRole', query: selectRoleQuery },
82
- ];
83
- const latestExecutedQuery = computed(() => {
84
- const relevantQueries = queries.filter((q) => q.query && q.query.query.lastTimeExecutedAt() !== null);
85
- return findMostRecentQuery(relevantQueries);
86
- });
87
- const tokens = computed(() => {
88
- const query = latestExecutedQuery();
89
- return query?.query?.tokens()?.tokens ?? null;
90
- });
91
- toObservable(computed(() => {
92
- const query = latestExecutedQuery();
93
- const expiresIn = query?.query?.expiresIn() ?? null;
94
- const tokens = query?.query?.tokens() ?? null;
95
- return { expiresIn, tokens, query };
96
- }))
97
- .pipe(switchMap((res) => {
98
- if (!res.tokens || res.expiresIn === null || !options.tokenRefresh)
99
- return of(null);
100
- const expIn = res.expiresIn;
101
- const tokens = res.tokens;
102
- if (!expIn || !tokens)
103
- return of(null);
104
- return timer(expIn).pipe(tap(() => refreshToken({
105
- ...cookieOptions.refreshArgsTransformer(tokens.tokens.refreshToken),
106
- }, { triggeredInternally: true })));
107
- }), takeUntilDestroyed())
108
- .subscribe();
109
- const latestNonInternalQuery = signal(null);
110
- effect(() => {
111
- const relevantQueries = queries.filter((q) => q.query && !q.query.triggeredInternally() && q.query.query.lastTimeExecutedAt() !== null);
112
- const lastQuery = findMostRecentQuery(relevantQueries);
113
- untracked(() => {
114
- if (!lastQuery || !lastQuery.query?.query)
115
- return;
116
- latestNonInternalQuery.set({
117
- type: lastQuery.type,
118
- ...lastQuery.query.query.createSnapshot(),
119
- });
120
- });
121
- });
122
- // Cookie writing
123
- effect(() => {
124
- const isCookieEnabled = cookieEnabled();
125
- const res = latestExecutedQuery();
126
- const error = res?.query?.query.error();
127
- if (!isCookieEnabled || (error && error.status === 401)) {
128
- deleteCookie();
129
- return;
130
- }
131
- if (!res?.query)
132
- return;
133
- const { tokens } = res.query;
134
- const rt = tokens()?.tokens.refreshToken;
135
- if (!rt)
136
- return;
137
- writeCookie(rt);
138
- });
139
- const login = (args) => {
140
- if (!loginQuery) {
141
- throw loginCalledWithoutConfig();
142
- }
143
- loginQuery.execute(args);
144
- return loginQuery.query.createSnapshot();
145
- };
146
- const loginWithToken = (args) => {
147
- if (!tokenLoginQuery) {
148
- throw loginWithTokenCalledWithoutConfig();
149
- }
150
- tokenLoginQuery.execute(args);
151
- return tokenLoginQuery.query.createSnapshot();
152
- };
153
- const refreshToken = (args, options) => {
154
- if (!tokenRefreshQuery) {
155
- throw refreshTokenCalledWithoutConfig();
156
- }
157
- tokenRefreshQuery.execute(args, { triggeredInternally: options?.triggeredInternally });
158
- return tokenRefreshQuery.query.createSnapshot();
159
- };
160
- const selectRole = (args) => {
161
- if (!selectRoleQuery) {
162
- throw selectRoleCalledWithoutConfig();
163
- }
164
- selectRoleQuery.execute(args);
165
- return selectRoleQuery.query.createSnapshot();
166
- };
167
- const logout = () => {
168
- deleteCookie();
169
- loginQuery?.query.execute.reset();
170
- tokenLoginQuery?.query.execute.reset();
171
- tokenRefreshQuery?.query.execute.reset();
172
- selectRoleQuery?.query.execute.reset();
173
- latestNonInternalQuery.set(null);
174
- };
175
- const enableCookie = () => {
176
- if (isDevMode() && !options.cookie) {
177
- throw enableCookieCalledWithoutCookieConfig();
178
- }
179
- cookieEnabled.set(true);
180
- };
181
- const disableCookie = () => {
182
- if (isDevMode() && !options.cookie) {
183
- throw disableCookieCalledWithoutCookieConfig();
184
- }
185
- cookieEnabled.set(false);
186
- deleteCookie();
187
- };
188
- const tryLoginWithCookie = () => {
189
- const isCookieEnabled = cookieEnabled();
190
- if (!isCookieEnabled) {
191
- if (isDevMode()) {
192
- throw cookieLoginTriedButCookieDisabled();
193
- }
194
- return false;
195
- }
196
- const cookie = getCookie(cookieOptions.name);
197
- if (!cookie) {
198
- return false;
199
- }
200
- refreshToken(cookieOptions.refreshArgsTransformer(cookie));
201
- return true;
202
- };
203
- const writeCookie = (refreshToken) => {
204
- const { name, expiresInDays, domain, path, sameSite } = cookieOptions;
205
- setCookie(name, refreshToken, expiresInDays, domain, path, sameSite);
206
- };
207
- const deleteCookie = () => {
208
- const { name, path, domain } = cookieOptions;
209
- coreDeleteCookie(name, path, domain);
210
- };
211
- const findMostRecentQuery = (queriesToSearch) => {
212
- return queriesToSearch.reduce((acc, curr) => {
213
- if (!acc)
214
- return curr;
215
- const accExp = acc.query?.query.lastTimeExecutedAt() ?? null;
216
- const currExp = curr.query?.query.lastTimeExecutedAt() ?? null;
217
- if (currExp === null || accExp === null)
218
- return acc;
219
- return accExp > currExp ? acc : curr;
220
- }, null);
221
- };
222
- const bearerAuthProvider = {
223
- login,
224
- loginWithToken,
225
- refreshToken,
226
- selectRole,
227
- logout,
228
- enableCookie,
229
- disableCookie,
230
- tryLoginWithCookie,
231
- latestExecutedQuery: latestNonInternalQuery.asReadonly(),
232
- tokens,
233
- };
234
- if (cookieEnabled()) {
235
- tryLoginWithCookie();
236
- }
237
- return bearerAuthProvider;
238
- };
239
- export const provideBearerAuthProvider = (config) => {
240
- return {
241
- provide: config.token,
242
- useFactory: () => createBearerAuthProvider(config),
243
- };
244
- };
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhcmVyLWF1dGgtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2JlYXJlci1hdXRoLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUd6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksSUFBSSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBUXhDLE9BQU8sRUFDTCxnQ0FBZ0MsRUFDaEMsaUNBQWlDLEVBQ2pDLDBEQUEwRCxFQUMxRCwyREFBMkQsRUFDM0QsMkNBQTJDLEVBQzNDLHNDQUFzQyxFQUN0QyxxQ0FBcUMsRUFDckMsd0JBQXdCLEVBQ3hCLGlDQUFpQyxFQUNqQywrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLDBCQUEwQixHQUMzQixNQUFNLGdCQUFnQixDQUFDO0FBaUh4QixNQUFNLDBCQUEwQixHQUFHLENBQUksUUFBVyxFQUFFLEVBQUU7SUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sMkNBQTJDLENBQUMsT0FBTyxRQUFRLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsSUFBSSxDQUFDLENBQUMsYUFBYSxJQUFJLFFBQVEsQ0FBQyxF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d0Y7UUFDOUcsS0FBSztRQUNMLGNBQWM7UUFDZCxZQUFZO1FBQ1osVUFBVTtRQUNWLE1BQU07UUFDTixZQUFZO1FBQ1osYUFBYTtRQUNiLGtCQUFrQjtRQUNsQixtQkFBbUIsRUFBRSxzQkFBc0IsQ0FBQyxVQUFVLEVBQUU7UUFDeEQsTUFBTTtLQUNQLENBQUM7SUFFRixJQUFJLGFBQWEsRUFBRSxFQUFFLENBQUM7UUFDcEIsa0JBQWtCLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsT0FBTyxrQkFBa0IsQ0FBQztBQUM1QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQU12QyxNQUFpRyxFQUNqRyxFQUFFO0lBQ0YsT0FBTztRQUNMLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSztRQUNyQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDO0tBQ25ELENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24gKi9cblxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0LCBpc0Rldk1vZGUsIFNpZ25hbCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgZGVsZXRlQ29va2llIGFzIGNvcmVEZWxldGVDb29raWUsIGdldENvb2tpZSwgZ2V0RG9tYWluLCBpc09iamVjdCwgc2V0Q29va2llIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBvZiwgc3dpdGNoTWFwLCB0YXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWNyeXB0QmVhcmVyIH0gZnJvbSAnLi4vYXV0aCc7XG5pbXBvcnQge1xuICBCZWFyZXJBdXRoUHJvdmlkZXJDb25maWcsXG4gIEJlYXJlckF1dGhQcm92aWRlckNvb2tpZUNvbmZpZyxcbiAgQmVhcmVyQXV0aFByb3ZpZGVyUm91dGVDb25maWcsXG4gIEJlYXJlckF1dGhQcm92aWRlclRva2Vucyxcbn0gZnJvbSAnLi9iZWFyZXItYXV0aC1wcm92aWRlci1jb25maWcnO1xuaW1wb3J0IHsgUXVlcnlBcmdzLCBRdWVyeVNuYXBzaG90LCBSZXF1ZXN0QXJncyB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHtcbiAgYmVhcmVyRXhwaXJlc0luUHJvcGVydHlOb3ROdW1iZXIsXG4gIGNvb2tpZUxvZ2luVHJpZWRCdXRDb29raWVEaXNhYmxlZCxcbiAgZGVmYXVsdFJlc3BvbnNlVHJhbnNmb3JtZXJSZXNwb25zZU5vdENvbnRhaW5pbmdBY2Nlc3NUb2tlbixcbiAgZGVmYXVsdFJlc3BvbnNlVHJhbnNmb3JtZXJSZXNwb25zZU5vdENvbnRhaW5pbmdSZWZyZXNoVG9rZW4sXG4gIGRlZmF1bHRSZXNwb25zZVRyYW5zZm9ybWVyUmVzcG9uc2VOb3RPYmplY3QsXG4gIGRpc2FibGVDb29raWVDYWxsZWRXaXRob3V0Q29va2llQ29uZmlnLFxuICBlbmFibGVDb29raWVDYWxsZWRXaXRob3V0Q29va2llQ29uZmlnLFxuICBsb2dpbkNhbGxlZFdpdGhvdXRDb25maWcsXG4gIGxvZ2luV2l0aFRva2VuQ2FsbGVkV2l0aG91dENvbmZpZyxcbiAgcmVmcmVzaFRva2VuQ2FsbGVkV2l0aG91dENvbmZpZyxcbiAgc2VsZWN0Um9sZUNhbGxlZFdpdGhvdXRDb25maWcsXG4gIHVuYWJsZVRvRGVjcnlwdEJlYXJlclRva2VuLFxufSBmcm9tICcuL3F1ZXJ5LWVycm9ycyc7XG5cbnR5cGUgSW50ZXJuYWxRdWVyeUV4ZWN1dGVPcHRpb25zID0ge1xuICB0cmlnZ2VyZWRJbnRlcm5hbGx5PzogYm9vbGVhbjtcbn07XG5cbnR5cGUgQXV0aFByb3ZpZGVyUXVlcnlXaXRoVHlwZTxcbiAgVExvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5SZWZyZXNoQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFNlbGVjdFJvbGVBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuPiA9XG4gIHwge1xuICAgICAgdHlwZTogJ2xvZ2luJztcbiAgICAgIHF1ZXJ5OiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBdXRoUHJvdmlkZXJRdWVyeTxUTG9naW5BcmdzPj4gfCBudWxsO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiAndG9rZW5Mb2dpbic7XG4gICAgICBxdWVyeTogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQXV0aFByb3ZpZGVyUXVlcnk8VFRva2VuTG9naW5BcmdzPj4gfCBudWxsO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiAndG9rZW5SZWZyZXNoJztcbiAgICAgIHF1ZXJ5OiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBdXRoUHJvdmlkZXJRdWVyeTxUVG9rZW5SZWZyZXNoQXJncz4+IHwgbnVsbDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogJ3NlbGVjdFJvbGUnO1xuICAgICAgcXVlcnk6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUF1dGhQcm92aWRlclF1ZXJ5PFRTZWxlY3RSb2xlQXJncz4+IHwgbnVsbDtcbiAgICB9O1xuXG50eXBlIFF1ZXJ5U25hcHNob3RXaXRoVHlwZTxcbiAgVExvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5SZWZyZXNoQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFNlbGVjdFJvbGVBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuPiA9XG4gIHwgKHtcbiAgICAgIHR5cGU6ICdsb2dpbic7XG4gICAgfSAmIFF1ZXJ5U25hcHNob3Q8VExvZ2luQXJncz4pXG4gIHwgKHtcbiAgICAgIHR5cGU6ICd0b2tlbkxvZ2luJztcbiAgICB9ICYgUXVlcnlTbmFwc2hvdDxUVG9rZW5Mb2dpbkFyZ3M+KVxuICB8ICh7XG4gICAgICB0eXBlOiAndG9rZW5SZWZyZXNoJztcbiAgICB9ICYgUXVlcnlTbmFwc2hvdDxUVG9rZW5SZWZyZXNoQXJncz4pXG4gIHwgKHtcbiAgICAgIHR5cGU6ICdzZWxlY3RSb2xlJztcbiAgICB9ICYgUXVlcnlTbmFwc2hvdDxUU2VsZWN0Um9sZUFyZ3M+KTtcblxuZXhwb3J0IHR5cGUgQmVhcmVyQXV0aFByb3ZpZGVyPFxuICBUTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5Mb2dpbkFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRUb2tlblJlZnJlc2hBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUU2VsZWN0Um9sZUFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4+ID0ge1xuICAvKipcbiAgICogTG9ncyBpbiB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBhcmdzLlxuICAgKi9cbiAgbG9naW46IChhcmdzOiBSZXF1ZXN0QXJnczxUTG9naW5BcmdzPikgPT4gUXVlcnlTbmFwc2hvdDxUTG9naW5BcmdzPjtcblxuICAvKipcbiAgICogTG9ncyBpbiB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiB0b2tlbi5cbiAgICovXG4gIGxvZ2luV2l0aFRva2VuOiAoYXJnczogUmVxdWVzdEFyZ3M8VFRva2VuTG9naW5BcmdzPikgPT4gUXVlcnlTbmFwc2hvdDxUVG9rZW5Mb2dpbkFyZ3M+O1xuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgdGhlIHRva2VuIHdpdGggdGhlIGdpdmVuIHJlZnJlc2ggdG9rZW4uXG4gICAqL1xuICByZWZyZXNoVG9rZW46IChhcmdzOiBSZXF1ZXN0QXJnczxUVG9rZW5SZWZyZXNoQXJncz4pID0+IFF1ZXJ5U25hcHNob3Q8VFRva2VuUmVmcmVzaEFyZ3M+O1xuXG4gIC8qKlxuICAgKiBTZWxlY3RzIHRoZSByb2xlIGZvciB0aGUgdXNlci5cbiAgICovXG4gIHNlbGVjdFJvbGU6IChhcmdzOiBSZXF1ZXN0QXJnczxUU2VsZWN0Um9sZUFyZ3M+KSA9PiBRdWVyeVNuYXBzaG90PFRTZWxlY3RSb2xlQXJncz47XG5cbiAgLyoqXG4gICAqIExvZ3Mgb3V0IHRoZSB1c2VyIGFuZCByZW1vdmVzIHRoZSBjb29raWUuXG4gICAqL1xuICBsb2dvdXQ6ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgY29va2llIHVzYWdlIGZvciB0aGUgYXV0aCBwcm92aWRlci5cbiAgICovXG4gIGVuYWJsZUNvb2tpZTogKCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogRGlzYWJsZXMgY29va2llIHVzYWdlIGZvciB0aGUgYXV0aCBwcm92aWRlciBhbmQgcmVtb3ZlcyB0aGUgY29va2llLlxuICAgKi9cbiAgZGlzYWJsZUNvb2tpZTogKCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogVHJpZXMgdG8gbG9naW4gd2l0aCB0aGUgZ2l2ZW4gY29va2llIGNvbmZpZy5cbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYSBjb29raWUgd2FzIGZvdW5kLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIHRyeUxvZ2luV2l0aENvb2tpZTogKCkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGxhdGVzdCBleGVjdXRlZCBxdWVyeSB0aGF0IHdhcyBub3QgdHJpZ2dlcmVkIGludGVybmFsbHkuXG4gICAqL1xuICBsYXRlc3RFeGVjdXRlZFF1ZXJ5OiBTaWduYWw8UXVlcnlTbmFwc2hvdFdpdGhUeXBlPFxuICAgIFRMb2dpbkFyZ3MsXG4gICAgVFRva2VuTG9naW5BcmdzLFxuICAgIFRUb2tlblJlZnJlc2hBcmdzLFxuICAgIFRTZWxlY3RSb2xlQXJnc1xuICA+IHwgbnVsbD47XG5cbiAgb25SZWZyZXNoRmFpbHVyZT86IChjYWxsYmFjazogKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdm9pZCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogQSBzaWduYWwgdGhhdCBjb250YWlucyB0aGUgY3VycmVudCBhY2Nlc3MgYW5kIHJlZnJlc2ggdG9rZW5zLlxuICAgKi9cbiAgdG9rZW5zOiBTaWduYWw8QmVhcmVyQXV0aFByb3ZpZGVyVG9rZW5zIHwgbnVsbD47XG59O1xuXG5jb25zdCBkZWZhdWx0UmVzcG9uc2VUcmFuc2Zvcm1lciA9IDxUPihyZXNwb25zZTogVCkgPT4ge1xuICBpZiAoIWlzT2JqZWN0KHJlc3BvbnNlKSkge1xuICAgIHRocm93IGRlZmF1bHRSZXNwb25zZVRyYW5zZm9ybWVyUmVzcG9uc2VOb3RPYmplY3QodHlwZW9mIHJlc3BvbnNlKTtcbiAgfVxuXG4gIGlmICghKCdhY2Nlc3NUb2tlbicgaW4gcmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgZGVmYXVsdFJlc3BvbnNlVHJhbnNmb3JtZXJSZXNwb25zZU5vdENvbnRhaW5pbmdBY2Nlc3NUb2tlbigpO1xuICB9XG5cbiAgaWYgKCEoJ3JlZnJlc2hUb2tlbicgaW4gcmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgZGVmYXVsdFJlc3BvbnNlVHJhbnNmb3JtZXJSZXNwb25zZU5vdENvbnRhaW5pbmdSZWZyZXNoVG9rZW4oKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZSBhcyB1bmtub3duIGFzIEJlYXJlckF1dGhQcm92aWRlclRva2Vucztcbn07XG5cbmNvbnN0IEZJVkVfTUlOVVRFUyA9IDUgKiA2MCAqIDEwMDA7XG5cbmNvbnN0IGNyZWF0ZUF1dGhQcm92aWRlclF1ZXJ5ID0gPFQgZXh0ZW5kcyBRdWVyeUFyZ3M+KFxuICBjb25maWc6IEJlYXJlckF1dGhQcm92aWRlclJvdXRlQ29uZmlnPFQ+LFxuICBhdXRoUHJvdmlkZXJDb25maWc6IHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSB0b2tlbiBleHBpcmVzIHdoZW4gdGhlIHJlZnJlc2ggc2hvdWxkIGJlIHRyaWdnZXJlZC5cbiAgICAgKiBAZGVmYXVsdCAzMDAwMDAgLy8gKDUgbWludXRlcylcbiAgICAgKi9cbiAgICByZWZyZXNoQnVmZmVyPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4cGlyZXMgaW4gcHJvcGVydHkgbmFtZSBpbnNpZGUgdGhlIGp3dCBib2R5XG4gICAgICogQGRlZmF1bHQgJ2V4cCdcbiAgICAgKi9cbiAgICBleHBpcmVzSW5Qcm9wZXJ0eU5hbWU/OiBzdHJpbmc7XG4gIH0sXG4pID0+IHtcbiAgY29uc3QgcXVlcnkgPSBjb25maWcucXVlcnlDcmVhdG9yKCk7XG5cbiAgY29uc3QgdHJpZ2dlcmVkSW50ZXJuYWxseSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgY29uc3QgdG9rZW5zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHJlcyA9IHF1ZXJ5LnJlc3BvbnNlKCk7XG5cbiAgICBpZiAoIXJlcykgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZCA9IGNvbmZpZy5yZXNwb25zZVRyYW5zZm9ybWVyPy4ocmVzKSA/PyBkZWZhdWx0UmVzcG9uc2VUcmFuc2Zvcm1lcihyZXMpO1xuXG4gICAgY29uc3QgYmVhcmVyVmFsdWUgPSBkZWNyeXB0QmVhcmVyKHRyYW5zZm9ybWVkLmFjY2Vzc1Rva2VuKTtcblxuICAgIGlmICghYmVhcmVyVmFsdWUpIHRocm93IHVuYWJsZVRvRGVjcnlwdEJlYXJlclRva2VuKHRyYW5zZm9ybWVkLmFjY2Vzc1Rva2VuKTtcblxuICAgIHJldHVybiB7XG4gICAgICBiZWFyZXI6IGJlYXJlclZhbHVlLFxuICAgICAgdG9rZW5zOiB0cmFuc2Zvcm1lZCxcbiAgICB9O1xuICB9KTtcblxuICBjb25zdCBleHBpcmVzSW4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gdG9rZW5zKCk7XG5cbiAgICBpZiAoIXJlcykgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBleHBpcmVzSW4gPSByZXMuYmVhcmVyW2F1dGhQcm92aWRlckNvbmZpZy5leHBpcmVzSW5Qcm9wZXJ0eU5hbWUgPz8gJ2V4cCddO1xuICAgIGNvbnN0IHJlZnJlc2hCdWZmZXIgPSBhdXRoUHJvdmlkZXJDb25maWcucmVmcmVzaEJ1ZmZlciA/PyBGSVZFX01JTlVURVM7XG5cbiAgICBpZiAodHlwZW9mIGV4cGlyZXNJbiAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IGJlYXJlckV4cGlyZXNJblByb3BlcnR5Tm90TnVtYmVyKGV4cGlyZXNJbik7XG4gICAgfVxuXG4gICAgLy8gY29uc3QgZHVtbXlSZW1haW5pbmdUaW1lID0gKHF1ZXJ5Lmxhc3RUaW1lRXhlY3V0ZWRBdCgpID8/IDApICsgNTAwMCAtIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGNvbnN0IHJlbWFpbmluZ1RpbWUgPSBuZXcgRGF0ZShleHBpcmVzSW4gKiAxMDAwKS5nZXRUaW1lKCkgLSByZWZyZXNoQnVmZmVyIC0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICByZXR1cm4gcmVtYWluaW5nVGltZTtcbiAgfSk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IChuZXdBcmdzOiBSZXF1ZXN0QXJnczxUPiwgb3B0aW9ucz86IEludGVybmFsUXVlcnlFeGVjdXRlT3B0aW9ucykgPT4ge1xuICAgIHF1ZXJ5LmV4ZWN1dGUoeyBhcmdzOiBuZXdBcmdzIH0pO1xuICAgIHRyaWdnZXJlZEludGVybmFsbHkuc2V0KG9wdGlvbnM/LnRyaWdnZXJlZEludGVybmFsbHkgPz8gZmFsc2UpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgZXhlY3V0ZSxcbiAgICBxdWVyeSxcbiAgICB0b2tlbnMsXG4gICAgZXhwaXJlc0luLFxuICAgIHRyaWdnZXJlZEludGVybmFsbHk6IHRyaWdnZXJlZEludGVybmFsbHkuYXNSZWFkb25seSgpLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUJlYXJlckF1dGhQcm92aWRlciA9IDxcbiAgVExvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5SZWZyZXNoQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFNlbGVjdFJvbGVBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuPihcbiAgb3B0aW9uczogQmVhcmVyQXV0aFByb3ZpZGVyQ29uZmlnPFRMb2dpbkFyZ3MsIFRUb2tlbkxvZ2luQXJncywgVFRva2VuUmVmcmVzaEFyZ3MsIFRTZWxlY3RSb2xlQXJncz4sXG4pOiBCZWFyZXJBdXRoUHJvdmlkZXI8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzPiA9PiB7XG4gIGNvbnN0IGNvb2tpZUVuYWJsZWQgPSBzaWduYWwob3B0aW9ucy5jb29raWUgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogKG9wdGlvbnMuY29va2llLmVuYWJsZWQgPz8gdHJ1ZSkpO1xuICBjb25zdCBjb29raWVPcHRpb25zOiBSZXF1aXJlZDxPbWl0PEJlYXJlckF1dGhQcm92aWRlckNvb2tpZUNvbmZpZzxUVG9rZW5SZWZyZXNoQXJncz4sICdlbmFibGVkJz4+ID0ge1xuICAgIGV4cGlyZXNJbkRheXM6IDMwLFxuICAgIG5hbWU6ICdldEF1dGgnLFxuICAgIHBhdGg6ICcvJyxcbiAgICBzYW1lU2l0ZTogJ2xheCcsXG4gICAgZG9tYWluOiBnZXREb21haW4oKSA/PyAnbG9jYWxob3N0JyxcbiAgICByZWZyZXNoQXJnc1RyYW5zZm9ybWVyOiAodG9rZW4pID0+ICh7IGJvZHk6IHsgdG9rZW4gfSB9KSBhcyBSZXF1ZXN0QXJnczxUVG9rZW5SZWZyZXNoQXJncz4sXG4gICAgLi4uKG9wdGlvbnMuY29va2llID8/IHt9KSxcbiAgfTtcblxuICBjb25zdCBsb2dpblF1ZXJ5ID0gb3B0aW9ucy5sb2dpbiA/IGNyZWF0ZUF1dGhQcm92aWRlclF1ZXJ5KG9wdGlvbnMubG9naW4sIG9wdGlvbnMpIDogbnVsbDtcbiAgY29uc3QgdG9rZW5Mb2dpblF1ZXJ5ID0gb3B0aW9ucy50b2tlbkxvZ2luID8gY3JlYXRlQXV0aFByb3ZpZGVyUXVlcnkob3B0aW9ucy50b2tlbkxvZ2luLCBvcHRpb25zKSA6IG51bGw7XG4gIGNvbnN0IHRva2VuUmVmcmVzaFF1ZXJ5ID0gb3B0aW9ucy50b2tlblJlZnJlc2ggPyBjcmVhdGVBdXRoUHJvdmlkZXJRdWVyeShvcHRpb25zLnRva2VuUmVmcmVzaCwgb3B0aW9ucykgOiBudWxsO1xuICBjb25zdCBzZWxlY3RSb2xlUXVlcnkgPSBvcHRpb25zLnNlbGVjdFJvbGUgPyBjcmVhdGVBdXRoUHJvdmlkZXJRdWVyeShvcHRpb25zLnNlbGVjdFJvbGUsIG9wdGlvbnMpIDogbnVsbDtcblxuICBjb25zdCBxdWVyaWVzOiBBdXRoUHJvdmlkZXJRdWVyeVdpdGhUeXBlPFRMb2dpbkFyZ3MsIFRUb2tlbkxvZ2luQXJncywgVFRva2VuUmVmcmVzaEFyZ3MsIFRTZWxlY3RSb2xlQXJncz5bXSA9IFtcbiAgICB7IHR5cGU6ICdsb2dpbicsIHF1ZXJ5OiBsb2dpblF1ZXJ5IH0sXG4gICAgeyB0eXBlOiAndG9rZW5Mb2dpbicsIHF1ZXJ5OiB0b2tlbkxvZ2luUXVlcnkgfSxcbiAgICB7IHR5cGU6ICd0b2tlblJlZnJlc2gnLCBxdWVyeTogdG9rZW5SZWZyZXNoUXVlcnkgfSxcbiAgICB7IHR5cGU6ICdzZWxlY3RSb2xlJywgcXVlcnk6IHNlbGVjdFJvbGVRdWVyeSB9LFxuICBdO1xuXG4gIGNvbnN0IGxhdGVzdEV4ZWN1dGVkUXVlcnkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcmVsZXZhbnRRdWVyaWVzID0gcXVlcmllcy5maWx0ZXIoKHEpID0+IHEucXVlcnkgJiYgcS5xdWVyeS5xdWVyeS5sYXN0VGltZUV4ZWN1dGVkQXQoKSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZmluZE1vc3RSZWNlbnRRdWVyeShyZWxldmFudFF1ZXJpZXMpO1xuICB9KTtcblxuICBjb25zdCB0b2tlbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcXVlcnkgPSBsYXRlc3RFeGVjdXRlZFF1ZXJ5KCk7XG5cbiAgICByZXR1cm4gcXVlcnk/LnF1ZXJ5Py50b2tlbnMoKT8udG9rZW5zID8/IG51bGw7XG4gIH0pO1xuXG4gIHRvT2JzZXJ2YWJsZShcbiAgICBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBjb25zdCBxdWVyeSA9IGxhdGVzdEV4ZWN1dGVkUXVlcnkoKTtcbiAgICAgIGNvbnN0IGV4cGlyZXNJbiA9IHF1ZXJ5Py5xdWVyeT8uZXhwaXJlc0luKCkgPz8gbnVsbDtcbiAgICAgIGNvbnN0IHRva2VucyA9IHF1ZXJ5Py5xdWVyeT8udG9rZW5zKCkgPz8gbnVsbDtcblxuICAgICAgcmV0dXJuIHsgZXhwaXJlc0luLCB0b2tlbnMsIHF1ZXJ5IH07XG4gICAgfSksXG4gIClcbiAgICAucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzKSA9PiB7XG4gICAgICAgIGlmICghcmVzLnRva2VucyB8fCByZXMuZXhwaXJlc0luID09PSBudWxsIHx8ICFvcHRpb25zLnRva2VuUmVmcmVzaCkgcmV0dXJuIG9mKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IGV4cEluID0gcmVzLmV4cGlyZXNJbjtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gcmVzLnRva2VucztcblxuICAgICAgICBpZiAoIWV4cEluIHx8ICF0b2tlbnMpIHJldHVybiBvZihudWxsKTtcblxuICAgICAgICByZXR1cm4gdGltZXIoZXhwSW4pLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+XG4gICAgICAgICAgICByZWZyZXNoVG9rZW4oXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5jb29raWVPcHRpb25zLnJlZnJlc2hBcmdzVHJhbnNmb3JtZXIodG9rZW5zLnRva2Vucy5yZWZyZXNoVG9rZW4pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7IHRyaWdnZXJlZEludGVybmFsbHk6IHRydWUgfSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKTtcblxuICBjb25zdCBsYXRlc3ROb25JbnRlcm5hbFF1ZXJ5ID0gc2lnbmFsPFF1ZXJ5U25hcHNob3RXaXRoVHlwZTxcbiAgICBUTG9naW5BcmdzLFxuICAgIFRUb2tlbkxvZ2luQXJncyxcbiAgICBUVG9rZW5SZWZyZXNoQXJncyxcbiAgICBUU2VsZWN0Um9sZUFyZ3NcbiAgPiB8IG51bGw+KG51bGwpO1xuXG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcmVsZXZhbnRRdWVyaWVzID0gcXVlcmllcy5maWx0ZXIoXG4gICAgICAocSkgPT4gcS5xdWVyeSAmJiAhcS5xdWVyeS50cmlnZ2VyZWRJbnRlcm5hbGx5KCkgJiYgcS5xdWVyeS5xdWVyeS5sYXN0VGltZUV4ZWN1dGVkQXQoKSAhPT0gbnVsbCxcbiAgICApO1xuXG4gICAgY29uc3QgbGFzdFF1ZXJ5ID0gZmluZE1vc3RSZWNlbnRRdWVyeShyZWxldmFudFF1ZXJpZXMpO1xuXG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIGlmICghbGFzdFF1ZXJ5IHx8ICFsYXN0UXVlcnkucXVlcnk/LnF1ZXJ5KSByZXR1cm47XG5cbiAgICAgIGxhdGVzdE5vbkludGVybmFsUXVlcnkuc2V0KHtcbiAgICAgICAgdHlwZTogbGFzdFF1ZXJ5LnR5cGUsXG4gICAgICAgIC4uLmxhc3RRdWVyeS5xdWVyeS5xdWVyeS5jcmVhdGVTbmFwc2hvdCgpLFxuICAgICAgfSBhcyBRdWVyeVNuYXBzaG90V2l0aFR5cGU8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzPik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIENvb2tpZSB3cml0aW5nXG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaXNDb29raWVFbmFibGVkID0gY29va2llRW5hYmxlZCgpO1xuICAgIGNvbnN0IHJlcyA9IGxhdGVzdEV4ZWN1dGVkUXVlcnkoKTtcbiAgICBjb25zdCBlcnJvciA9IHJlcz8ucXVlcnk/LnF1ZXJ5LmVycm9yKCk7XG5cbiAgICBpZiAoIWlzQ29va2llRW5hYmxlZCB8fCAoZXJyb3IgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDEpKSB7XG4gICAgICBkZWxldGVDb29raWUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXJlcz8ucXVlcnkpIHJldHVybjtcblxuICAgIGNvbnN0IHsgdG9rZW5zIH0gPSByZXMucXVlcnk7XG5cbiAgICBjb25zdCBydCA9IHRva2VucygpPy50b2tlbnMucmVmcmVzaFRva2VuO1xuXG4gICAgaWYgKCFydCkgcmV0dXJuO1xuXG4gICAgd3JpdGVDb29raWUocnQpO1xuICB9KTtcblxuICBjb25zdCBsb2dpbiA9IChhcmdzOiBSZXF1ZXN0QXJnczxUTG9naW5BcmdzPikgPT4ge1xuICAgIGlmICghbG9naW5RdWVyeSkge1xuICAgICAgdGhyb3cgbG9naW5DYWxsZWRXaXRob3V0Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgbG9naW5RdWVyeS5leGVjdXRlKGFyZ3MpO1xuXG4gICAgcmV0dXJuIGxvZ2luUXVlcnkucXVlcnkuY3JlYXRlU25hcHNob3QoKTtcbiAgfTtcblxuICBjb25zdCBsb2dpbldpdGhUb2tlbiA9IChhcmdzOiBSZXF1ZXN0QXJnczxUVG9rZW5Mb2dpbkFyZ3M+KSA9PiB7XG4gICAgaWYgKCF0b2tlbkxvZ2luUXVlcnkpIHtcbiAgICAgIHRocm93IGxvZ2luV2l0aFRva2VuQ2FsbGVkV2l0aG91dENvbmZpZygpO1xuICAgIH1cblxuICAgIHRva2VuTG9naW5RdWVyeS5leGVjdXRlKGFyZ3MpO1xuXG4gICAgcmV0dXJuIHRva2VuTG9naW5RdWVyeS5xdWVyeS5jcmVhdGVTbmFwc2hvdCgpO1xuICB9O1xuXG4gIGNvbnN0IHJlZnJlc2hUb2tlbiA9IChhcmdzOiBSZXF1ZXN0QXJnczxUVG9rZW5SZWZyZXNoQXJncz4sIG9wdGlvbnM/OiBJbnRlcm5hbFF1ZXJ5RXhlY3V0ZU9wdGlvbnMpID0+IHtcbiAgICBpZiAoIXRva2VuUmVmcmVzaFF1ZXJ5KSB7XG4gICAgICB0aHJvdyByZWZyZXNoVG9rZW5DYWxsZWRXaXRob3V0Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgdG9rZW5SZWZyZXNoUXVlcnkuZXhlY3V0ZShhcmdzLCB7IHRyaWdnZXJlZEludGVybmFsbHk6IG9wdGlvbnM/LnRyaWdnZXJlZEludGVybmFsbHkgfSk7XG5cbiAgICByZXR1cm4gdG9rZW5SZWZyZXNoUXVlcnkucXVlcnkuY3JlYXRlU25hcHNob3QoKTtcbiAgfTtcblxuICBjb25zdCBzZWxlY3RSb2xlID0gKGFyZ3M6IFJlcXVlc3RBcmdzPFRTZWxlY3RSb2xlQXJncz4pID0+IHtcbiAgICBpZiAoIXNlbGVjdFJvbGVRdWVyeSkge1xuICAgICAgdGhyb3cgc2VsZWN0Um9sZUNhbGxlZFdpdGhvdXRDb25maWcoKTtcbiAgICB9XG5cbiAgICBzZWxlY3RSb2xlUXVlcnkuZXhlY3V0ZShhcmdzKTtcblxuICAgIHJldHVybiBzZWxlY3RSb2xlUXVlcnkucXVlcnkuY3JlYXRlU25hcHNob3QoKTtcbiAgfTtcblxuICBjb25zdCBsb2dvdXQgPSAoKSA9PiB7XG4gICAgZGVsZXRlQ29va2llKCk7XG4gICAgbG9naW5RdWVyeT8ucXVlcnkuZXhlY3V0ZS5yZXNldCgpO1xuICAgIHRva2VuTG9naW5RdWVyeT8ucXVlcnkuZXhlY3V0ZS5yZXNldCgpO1xuICAgIHRva2VuUmVmcmVzaFF1ZXJ5Py5xdWVyeS5leGVjdXRlLnJlc2V0KCk7XG4gICAgc2VsZWN0Um9sZVF1ZXJ5Py5xdWVyeS5leGVjdXRlLnJlc2V0KCk7XG4gICAgbGF0ZXN0Tm9uSW50ZXJuYWxRdWVyeS5zZXQobnVsbCk7XG4gIH07XG5cbiAgY29uc3QgZW5hYmxlQ29va2llID0gKCkgPT4ge1xuICAgIGlmIChpc0Rldk1vZGUoKSAmJiAhb3B0aW9ucy5jb29raWUpIHtcbiAgICAgIHRocm93IGVuYWJsZUNvb2tpZUNhbGxlZFdpdGhvdXRDb29raWVDb25maWcoKTtcbiAgICB9XG5cbiAgICBjb29raWVFbmFibGVkLnNldCh0cnVlKTtcbiAgfTtcblxuICBjb25zdCBkaXNhYmxlQ29va2llID0gKCkgPT4ge1xuICAgIGlmIChpc0Rldk1vZGUoKSAmJiAhb3B0aW9ucy5jb29raWUpIHtcbiAgICAgIHRocm93IGRpc2FibGVDb29raWVDYWxsZWRXaXRob3V0Q29va2llQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgY29va2llRW5hYmxlZC5zZXQoZmFsc2UpO1xuICAgIGRlbGV0ZUNvb2tpZSgpO1xuICB9O1xuXG4gIGNvbnN0IHRyeUxvZ2luV2l0aENvb2tpZSA9ICgpID0+IHtcbiAgICBjb25zdCBpc0Nvb2tpZUVuYWJsZWQgPSBjb29raWVFbmFibGVkKCk7XG5cbiAgICBpZiAoIWlzQ29va2llRW5hYmxlZCkge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIHRocm93IGNvb2tpZUxvZ2luVHJpZWRCdXRDb29raWVEaXNhYmxlZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvb2tpZSA9IGdldENvb2tpZShjb29raWVPcHRpb25zLm5hbWUpO1xuXG4gICAgaWYgKCFjb29raWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZWZyZXNoVG9rZW4oY29va2llT3B0aW9ucy5yZWZyZXNoQXJnc1RyYW5zZm9ybWVyKGNvb2tpZSkpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3Qgd3JpdGVDb29raWUgPSAocmVmcmVzaFRva2VuOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCB7IG5hbWUsIGV4cGlyZXNJbkRheXMsIGRvbWFpbiwgcGF0aCwgc2FtZVNpdGUgfSA9IGNvb2tpZU9wdGlvbnM7XG5cbiAgICBzZXRDb29raWUobmFtZSwgcmVmcmVzaFRva2VuLCBleHBpcmVzSW5EYXlzLCBkb21haW4sIHBhdGgsIHNhbWVTaXRlKTtcbiAgfTtcblxuICBjb25zdCBkZWxldGVDb29raWUgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBuYW1lLCBwYXRoLCBkb21haW4gfSA9IGNvb2tpZU9wdGlvbnM7XG5cbiAgICBjb3JlRGVsZXRlQ29va2llKG5hbWUsIHBhdGgsIGRvbWFpbik7XG4gIH07XG5cbiAgY29uc3QgZmluZE1vc3RSZWNlbnRRdWVyeSA9IChcbiAgICBxdWVyaWVzVG9TZWFyY2g6IEF1dGhQcm92aWRlclF1ZXJ5V2l0aFR5cGU8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzPltdLFxuICApID0+IHtcbiAgICByZXR1cm4gcXVlcmllc1RvU2VhcmNoLnJlZHVjZShcbiAgICAgIChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgaWYgKCFhY2MpIHJldHVybiBjdXJyO1xuXG4gICAgICAgIGNvbnN0IGFjY0V4cCA9IGFjYy5xdWVyeT8ucXVlcnkubGFzdFRpbWVFeGVjdXRlZEF0KCkgPz8gbnVsbDtcbiAgICAgICAgY29uc3QgY3VyckV4cCA9IGN1cnIucXVlcnk/LnF1ZXJ5Lmxhc3RUaW1lRXhlY3V0ZWRBdCgpID8/IG51bGw7XG5cbiAgICAgICAgaWYgKGN1cnJFeHAgPT09IG51bGwgfHwgYWNjRXhwID09PSBudWxsKSByZXR1cm4gYWNjO1xuXG4gICAgICAgIHJldHVybiBhY2NFeHAgPiBjdXJyRXhwID8gYWNjIDogY3VycjtcbiAgICAgIH0sXG4gICAgICBudWxsIGFzIEF1dGhQcm92aWRlclF1ZXJ5V2l0aFR5cGU8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzPiB8IG51bGwsXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBiZWFyZXJBdXRoUHJvdmlkZXI6IEJlYXJlckF1dGhQcm92aWRlcjxUTG9naW5BcmdzLCBUVG9rZW5Mb2dpbkFyZ3MsIFRUb2tlblJlZnJlc2hBcmdzLCBUU2VsZWN0Um9sZUFyZ3M+ID0ge1xuICAgIGxvZ2luLFxuICAgIGxvZ2luV2l0aFRva2VuLFxuICAgIHJlZnJlc2hUb2tlbixcbiAgICBzZWxlY3RSb2xlLFxuICAgIGxvZ291dCxcbiAgICBlbmFibGVDb29raWUsXG4gICAgZGlzYWJsZUNvb2tpZSxcbiAgICB0cnlMb2dpbldpdGhDb29raWUsXG4gICAgbGF0ZXN0RXhlY3V0ZWRRdWVyeTogbGF0ZXN0Tm9uSW50ZXJuYWxRdWVyeS5hc1JlYWRvbmx5KCksXG4gICAgdG9rZW5zLFxuICB9O1xuXG4gIGlmIChjb29raWVFbmFibGVkKCkpIHtcbiAgICB0cnlMb2dpbldpdGhDb29raWUoKTtcbiAgfVxuXG4gIHJldHVybiBiZWFyZXJBdXRoUHJvdmlkZXI7XG59O1xuXG5leHBvcnQgY29uc3QgcHJvdmlkZUJlYXJlckF1dGhQcm92aWRlciA9IDxcbiAgVExvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5SZWZyZXNoQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFNlbGVjdFJvbGVBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuPihcbiAgY29uZmlnOiBCZWFyZXJBdXRoUHJvdmlkZXJDb25maWc8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzPixcbikgPT4ge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IGNvbmZpZy50b2tlbixcbiAgICB1c2VGYWN0b3J5OiAoKSA9PiBjcmVhdGVCZWFyZXJBdXRoUHJvdmlkZXIoY29uZmlnKSxcbiAgfTtcbn07XG4iXX0=
@@ -1,154 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-empty-function */
2
- import { HttpErrorResponse, HttpEventType, } from '@angular/common/http';
3
- import { computed, signal } from '@angular/core';
4
- import { Subscription, catchError, retry, tap, throwError, timer } from 'rxjs';
5
- import { buildTimestampFromSeconds } from '../request';
6
- import { extractExpiresInSeconds, shouldRetryRequest, } from './query-utils';
7
- export const SPEED_BUFFER_TIME_IN_MS = 2000;
8
- export const createHttpRequest = (options) => {
9
- let currentStreamSubscription = Subscription.EMPTY;
10
- const { args, clientOptions, dependencies } = options;
11
- const currentEvent = signal(null);
12
- const loading = signal(null);
13
- const error = signal(null);
14
- const response = signal(null);
15
- const lastLoadEventTime = signal(0);
16
- const lastLoadEventAmount = signal(0);
17
- const lastExecuteTime = signal(0);
18
- const expiresIn = signal(null);
19
- const isStale = computed(() => {
20
- const expiresInTs = expiresIn();
21
- return expiresInTs === null || expiresInTs < Date.now();
22
- });
23
- const stream = dependencies.httpClient
24
- .request(options.method, options.fullPath, {
25
- observe: 'events',
26
- body: args?.body,
27
- reportProgress: clientOptions?.reportProgress,
28
- withCredentials: clientOptions?.withCredentials,
29
- transferCache: clientOptions?.transferCache,
30
- responseType: clientOptions?.responseType || 'json',
31
- context: clientOptions?.context,
32
- headers: args?.headers,
33
- })
34
- .pipe(tap((event) => updateState(event)), retry({
35
- delay: (error, retryCount) => {
36
- const retryOptions = { error, retryCount };
37
- const retryResult = options.retryFn?.(retryOptions) || shouldRetryRequest(retryOptions);
38
- if (!retryResult.retry) {
39
- return throwError(() => error);
40
- }
41
- return timer(retryResult.delay);
42
- },
43
- }), catchError((e) => {
44
- updateErrorState(e);
45
- return throwError(() => e);
46
- }));
47
- const execute = () => {
48
- if (loading() || !isStale()) {
49
- // Do not execute if there is already a request in progress or the request is not stale
50
- return false;
51
- }
52
- currentStreamSubscription.unsubscribe();
53
- lastExecuteTime.set(Date.now());
54
- lastLoadEventTime.set(lastExecuteTime());
55
- loading.set({
56
- executeTime: lastExecuteTime(),
57
- progress: null,
58
- });
59
- error.set(null);
60
- expiresIn.set(null);
61
- currentStreamSubscription = stream.subscribe();
62
- return true;
63
- };
64
- const destroy = () => {
65
- if (currentStreamSubscription.closed) {
66
- return false;
67
- }
68
- currentStreamSubscription.unsubscribe();
69
- return true;
70
- };
71
- const updateState = (event) => {
72
- currentEvent.set(event);
73
- switch (event.type) {
74
- case HttpEventType.Response:
75
- {
76
- loading.set(null);
77
- response.set(event.body);
78
- const expiresInSeconds = options.cacheAdapter
79
- ? options.cacheAdapter(event.headers)
80
- : extractExpiresInSeconds(event.headers);
81
- const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);
82
- expiresIn.set(expiresInTimestamp);
83
- }
84
- break;
85
- case HttpEventType.UploadProgress:
86
- case HttpEventType.DownloadProgress:
87
- {
88
- updateLoadingState(event);
89
- }
90
- break;
91
- case HttpEventType.Sent:
92
- case HttpEventType.ResponseHeader:
93
- case HttpEventType.User:
94
- {
95
- // we don't care about these events
96
- }
97
- break;
98
- }
99
- };
100
- const updateErrorState = (errorResponse) => {
101
- let err = errorResponse instanceof HttpErrorResponse ? errorResponse : null;
102
- if (!err) {
103
- err = new HttpErrorResponse({
104
- error: errorResponse,
105
- status: 0,
106
- statusText: 'Unknown Error',
107
- });
108
- }
109
- error.set(err);
110
- loading.set(null);
111
- currentEvent.set({ type: 'error', error: err });
112
- };
113
- const updateLoadingState = (event) => {
114
- if (event.total === undefined) {
115
- return;
116
- }
117
- const progress = {
118
- total: event.total,
119
- loaded: event.loaded,
120
- percentage: (event.loaded / event.total) * 100,
121
- speed: null,
122
- remainingTime: null,
123
- };
124
- const state = {
125
- executeTime: lastExecuteTime(),
126
- progress,
127
- };
128
- const currentTime = Date.now();
129
- const elapsedTimeSinceLastEvent = currentTime - lastLoadEventTime();
130
- const elapsedTimeSinceLastExecute = currentTime - lastExecuteTime();
131
- const loadedAmount = event.loaded - lastLoadEventAmount();
132
- // We only want to calculate speed and remaining time after 2 seconds of the execution
133
- // This is to avoid showing incorrect speed and remaining time when the request is very fast
134
- if (elapsedTimeSinceLastExecute > SPEED_BUFFER_TIME_IN_MS) {
135
- const speed = (loadedAmount / elapsedTimeSinceLastEvent) * 1000;
136
- progress.speed = speed * 1000;
137
- progress.remainingTime = Math.round((event.total - event.loaded) / speed) * 1000;
138
- }
139
- lastLoadEventTime.set(currentTime);
140
- lastLoadEventAmount.set(event.loaded);
141
- loading.set(state);
142
- };
143
- const httpRequest = {
144
- execute,
145
- destroy,
146
- loading: loading.asReadonly(),
147
- error: error.asReadonly(),
148
- response: response.asReadonly(),
149
- currentEvent: currentEvent.asReadonly(),
150
- isStale,
151
- };
152
- return httpRequest;
153
- };
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1yZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9odHRwLXJlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBRXpELE9BQU8sRUFHTCxpQkFBaUIsRUFFakIsYUFBYSxHQUVkLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUl2RCxPQUFPLEVBR0wsdUJBQXVCLEVBQ3ZCLGtCQUFrQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUV2QixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUM7QUEySTVDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQTBCLE9BQXdDLEVBQUUsRUFBRTtJQUNyRyxJQUFJLHlCQUF5QixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFFbkQsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXRELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBeUQsSUFBSSxDQUFDLENBQUM7SUFDMUYsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFpQyxJQUFJLENBQUMsQ0FBQztJQUM3RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQTJCLElBQUksQ0FBQyxDQUFDO0lBQ3JELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBNkIsSUFBSSxDQUFDLENBQUM7SUFFMUQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFD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aW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uICovXG5cbmltcG9ydCB7XG4gIEh0dHBDbGllbnQsXG4gIEh0dHBDb250ZXh0LFxuICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgSHR0cEV2ZW50LFxuICBIdHRwRXZlbnRUeXBlLFxuICBIdHRwUHJvZ3Jlc3NFdmVudCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgU2lnbmFsLCBjb21wdXRlZCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGNhdGNoRXJyb3IsIHJldHJ5LCB0YXAsIHRocm93RXJyb3IsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBidWlsZFRpbWVzdGFtcEZyb21TZWNvbmRzIH0gZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQgeyBRdWVyeUFyZ3MsIFJlcXVlc3RBcmdzLCBSZXNwb25zZVR5cGUgfSBmcm9tICcuL3F1ZXJ5JztcbmltcG9ydCB7IENhY2hlQWRhcHRlckZuIH0gZnJvbSAnLi9xdWVyeS1jbGllbnQtY29uZmlnJztcbmltcG9ydCB7IFF1ZXJ5TWV0aG9kIH0gZnJvbSAnLi9xdWVyeS1jcmVhdG9yJztcbmltcG9ydCB7XG4gIFNob3VsZFJldHJ5UmVxdWVzdEZuLFxuICBTaG91bGRSZXRyeVJlcXVlc3RPcHRpb25zLFxuICBleHRyYWN0RXhwaXJlc0luU2Vjb25kcyxcbiAgc2hvdWxkUmV0cnlSZXF1ZXN0LFxufSBmcm9tICcuL3F1ZXJ5LXV0aWxzJztcblxuZXhwb3J0IGNvbnN0IFNQRUVEX0JVRkZFUl9USU1FX0lOX01TID0gMjAwMDtcblxuZXhwb3J0IHR5cGUgSHR0cFJlcXVlc3RUcmFuc2ZlckNhY2hlQ29uZmlnID1cbiAgfCBib29sZWFuXG4gIHwge1xuICAgICAgaW5jbHVkZUhlYWRlcnM/OiBzdHJpbmdbXTtcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBIdHRwUmVxdWVzdFJlc3BvbnNlVHlwZSA9ICdqc29uJyB8ICd0ZXh0JyB8ICdibG9iJyB8ICdhcnJheWJ1ZmZlcic7XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUh0dHBSZXF1ZXN0RGVwZW5kZW5jaWVzID0ge1xuICAvKiogVGhlIGh0dHAgY2xpZW50IGluc3RhbmNlIHRvIHVzZSBmb3IgdGhlIHJlcXVlc3QgKi9cbiAgaHR0cENsaWVudDogSHR0cENsaWVudDtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUh0dHBSZXF1ZXN0Q2xpZW50T3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVwb3J0IHRoZSBwcm9ncmVzcyBvZiB0aGUgcmVxdWVzdCBvciBub3QuIElmIHRoZSBmZXRjaCBiYWNrZW5kIGlzIHVzZWQsIHRoaXMgd2lsbCBvbmx5IHdvcmsgZm9yIGRvd25sb2Fkcy5cbiAgICogQHNlZSBodHRwczovL2FuZ3VsYXIuZGV2L2d1aWRlL2h0dHAvbWFraW5nLXJlcXVlc3RzI3JlY2VpdmluZy1yYXctcHJvZ3Jlc3MtZXZlbnRzXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSBjcmVkZW50aWFscyBpbiB0aGUgcmVxdWVzdCBvciBub3RcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBlaXRoZXIgYSBib29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIHRyYW5zZmVycmluZyBjYWNoZSBmb3IgZWxpZ2libGVcbiAgICogcmVxdWVzdHMgcGVyZm9ybWVkIHVzaW5nIGBIdHRwQ2xpZW50YCwgb3IgYW4gb2JqZWN0LCB3aGljaCBhbGxvd3MgdG8gY29uZmlndXJlIGNhY2hlXG4gICAqIHBhcmFtZXRlcnMsIHN1Y2ggYXMgd2hpY2ggaGVhZGVycyBzaG91bGQgYmUgaW5jbHVkZWQgKG5vIGhlYWRlcnMgYXJlIGluY2x1ZGVkIGJ5IGRlZmF1bHQpLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgd2lsbCBvdmVycmlkZSB0aGUgb3B0aW9ucyBwYXNzZWQgdG8gYHByb3ZpZGVDbGllbnRIeWRyYXRpb24oKWAgZm9yIHRoaXNcbiAgICogcGFydGljdWxhciByZXF1ZXN0XG4gICAqL1xuICB0cmFuc2ZlckNhY2hlPzogSHR0cFJlcXVlc3RUcmFuc2ZlckNhY2hlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzcG9uc2UgdHlwZSBvZiB0aGUgcmVxdWVzdFxuICAgKiBAZGVmYXVsdCAnanNvbidcbiAgICovXG4gIHJlc3BvbnNlVHlwZT86IEh0dHBSZXF1ZXN0UmVzcG9uc2VUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGV4dCBvZiB0aGUgcmVxdWVzdFxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICogQHNlZSBodHRwczovL2FuZ3VsYXIuZGV2L2d1aWRlL2h0dHAvaW50ZXJjZXB0b3JzI3JlcXVlc3QtYW5kLXJlc3BvbnNlLW1ldGFkYXRhXG4gICAqL1xuICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVIdHRwUmVxdWVzdE9wdGlvbnM8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICAvKiogVGhlIEhUVFAgbWV0aG9kIG9mIHRoZSByZXF1ZXN0ICovXG4gIG1ldGhvZDogUXVlcnlNZXRob2Q7XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxsIHBhdGggb2YgdGhlIHJlcXVlc3RcbiAgICogQGV4YW1wbGUgJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tL3YxL3VzZXJzJ1xuICAgKi9cbiAgZnVsbFBhdGg6IHN0cmluZztcblxuICAvKiogVGhlIGRhdGEgb2YgdGhlIHJlcXVlc3QgKi9cbiAgYXJncz86IFJlcXVlc3RBcmdzPFRBcmdzPiB8IG51bGw7XG5cbiAgLyoqIFRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIHJlcXVlc3QgKi9cbiAgZGVwZW5kZW5jaWVzOiBDcmVhdGVIdHRwUmVxdWVzdERlcGVuZGVuY2llcztcblxuICAvKiogVGhlIGNsaWVudCBvcHRpb25zIG9mIHRoZSByZXF1ZXN0ICovXG4gIGNsaWVudE9wdGlvbnM/OiBDcmVhdGVIdHRwUmVxdWVzdENsaWVudE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBjYWNoZSBhZGFwdGVyIGZ1bmN0aW9uIHRvIHVzZSBmb3IgdGhlIHJlcXVlc3RcbiAgICogQGRlZmF1bHQgZXh0cmFjdEV4cGlyZXNJblNlY29uZHMoKVxuICAgKi9cbiAgY2FjaGVBZGFwdGVyPzogQ2FjaGVBZGFwdGVyRm47XG5cbiAgLyoqXG4gICAqIFRoZSByZXRyeSBmdW5jdGlvbiB0byB1c2UgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEBkZWZhdWx0IHNob3VsZFJldHJ5UmVxdWVzdCgpXG4gICAqL1xuICByZXRyeUZuPzogU2hvdWxkUmV0cnlSZXF1ZXN0Rm47XG59O1xuXG5leHBvcnQgdHlwZSBIdHRwUmVxdWVzdExvYWRpbmdTdGF0ZSA9IHtcbiAgLyoqIFRoZSB0aW1lIHdoZW4gdGhlIHJlcXVlc3Qgd2FzIGV4ZWN1dGVkIGluIG1zICovXG4gIGV4ZWN1dGVUaW1lOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBwcm9ncmVzcyBvZiB0aGUgcmVxdWVzdC4gTnVsbCBpZiByZXBvcnRQcm9ncmVzcyBpcyBmYWxzZSBvciBwcm9ncmVzcyBpcyBub3QgYXZhaWxhYmxlIC8gdW5zdXBwb3J0ZWQgKi9cbiAgcHJvZ3Jlc3M6IEh0dHBSZXF1ZXN0TG9hZGluZ1Byb2dyZXNzU3RhdGUgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgSHR0cFJlcXVlc3RMb2FkaW5nUHJvZ3Jlc3NTdGF0ZSA9IHtcbiAgLyoqIFRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdHJhbnNmZXJyZWQgKi9cbiAgdG90YWw6IG51bWJlcjtcblxuICAvKiogVGhlIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCAqL1xuICBsb2FkZWQ6IG51bWJlcjtcblxuICAvKiogVGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHRyYW5zZmVyIHRoYXQgaXMgY29tcGxldGVkICovXG4gIHBlcmNlbnRhZ2U6IG51bWJlcjtcblxuICAvKiogVGhlIHNwZWVkIG9mIHRoZSB0cmFuc2ZlciBpbiBieXRlcyBwZXIgbWlsbGlzZWNvbmQgKi9cbiAgc3BlZWQ6IG51bWJlciB8IG51bGw7XG5cbiAgLyoqIFRoZSBlc3RpbWF0ZWQgcmVtYWluaW5nIHRpbWUgaW4gbWlsbGlzZWNvbmRzICovXG4gIHJlbWFpbmluZ1RpbWU6IG51bWJlciB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBIdHRwUmVxdWVzdDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4gPSB7XG4gIC8qKiBFeGVjdXRlcyB0aGUgcmVxdWVzdCAqL1xuICBleGVjdXRlOiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKiBEZXN0cm95cyB0aGUgcmVxdWVzdCAoY2FuY2VscyBpdCBpZiBpbiBwcm9ncmVzcykgKi9cbiAgZGVzdHJveTogKCkgPT4gYm9vbGVhbjtcblxuICAvKiogVGhlIGxvYWRpbmcgc3RhdGUgb2YgdGhlIHJlcXVlc3QgKi9cbiAgbG9hZGluZzogU2lnbmFsPEh0dHBSZXF1ZXN0TG9hZGluZ1N0YXRlIHwgbnVsbD47XG5cbiAgLyoqIFRoZSBlcnJvciBzdGF0ZSBvZiB0aGUgcmVxdWVzdCAqL1xuICBlcnJvcjogU2lnbmFsPEh0dHBFcnJvclJlc3BvbnNlIHwgbnVsbD47XG5cbiAgLyoqIFRoZSByZXNwb25zZSBzdGF0ZSBvZiB0aGUgcmVxdWVzdCAqL1xuICByZXNwb25zZTogU2lnbmFsPFJlc3BvbnNlVHlwZTxUQXJncz4gfCBudWxsPjtcblxuICAvKiogVGhlIGN1cnJlbnQgZXZlbnQgb2YgdGhlIHJlcXVlc3QgKi9cbiAgY3VycmVudEV2ZW50OiBTaWduYWw8SHR0cEV2ZW50PFJlc3BvbnNlVHlwZTxUQXJncz4+IHwgSHR0cEVycm9yRXZlbnQgfCBudWxsPjtcblxuICAvKiogV2hldGhlciB0aGUgcmVxdWVzdCBpcyBzdGFsZSBvciBub3QgYWthIHRoZSBjYWNoZSBoZWFkZXIgaGFzIGV4cGlyZWQgKi9cbiAgaXNTdGFsZTogU2lnbmFsPGJvb2xlYW4+O1xufTtcblxuLyoqIEEgY3VzdG9tIGVycm9yIGV2ZW50IHNpbmNlIHRoZSBBbmd1bGFyIGh0dHAgY2xpZW50IGRvZXMgbm90IHByb3ZpZGUgYSBzcGVjaWZpYyBldmVudCBmb3IgZXJyb3JzICovXG5leHBvcnQgdHlwZSBIdHRwRXJyb3JFdmVudCA9IHtcbiAgdHlwZTogJ2Vycm9yJztcbiAgZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUh0dHBSZXF1ZXN0ID0gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihvcHRpb25zOiBDcmVhdGVIdHRwUmVxdWVzdE9wdGlvbnM8VEFyZ3M+KSA9PiB7XG4gIGxldCBjdXJyZW50U3RyZWFtU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuXG4gIGNvbnN0IHsgYXJncywgY2xpZW50T3B0aW9ucywgZGVwZW5kZW5jaWVzIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGN1cnJlbnRFdmVudCA9IHNpZ25hbDxIdHRwRXZlbnQ8UmVzcG9uc2VUeXBlPFRBcmdzPj4gfCBIdHRwRXJyb3JFdmVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBsb2FkaW5nID0gc2lnbmFsPEh0dHBSZXF1ZXN0TG9hZGluZ1N0YXRlIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGVycm9yID0gc2lnbmFsPEh0dHBFcnJvclJlc3BvbnNlIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gc2lnbmFsPFJlc3BvbnNlVHlwZTxUQXJncz4gfCBudWxsPihudWxsKTtcblxuICBjb25zdCBsYXN0TG9hZEV2ZW50VGltZSA9IHNpZ25hbCgwKTtcbiAgY29uc3QgbGFzdExvYWRFdmVudEFtb3VudCA9IHNpZ25hbCgwKTtcbiAgY29uc3QgbGFzdEV4ZWN1dGVUaW1lID0gc2lnbmFsKDApO1xuICBjb25zdCBleHBpcmVzSW4gPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgaXNTdGFsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBleHBpcmVzSW5UcyA9IGV4cGlyZXNJbigpO1xuXG4gICAgcmV0dXJuIGV4cGlyZXNJblRzID09PSBudWxsIHx8IGV4cGlyZXNJblRzIDwgRGF0ZS5ub3coKTtcbiAgfSk7XG5cbiAgY29uc3Qgc3RyZWFtID0gZGVwZW5kZW5jaWVzLmh0dHBDbGllbnRcbiAgICAucmVxdWVzdChvcHRpb25zLm1ldGhvZCwgb3B0aW9ucy5mdWxsUGF0aCwge1xuICAgICAgb2JzZXJ2ZTogJ2V2ZW50cycsXG4gICAgICBib2R5OiBhcmdzPy5ib2R5LFxuICAgICAgcmVwb3J0UHJvZ3Jlc3M6IGNsaWVudE9wdGlvbnM/LnJlcG9ydFByb2dyZXNzLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiBjbGllbnRPcHRpb25zPy53aXRoQ3JlZGVudGlhbHMsXG4gICAgICB0cmFuc2ZlckNhY2hlOiBjbGllbnRPcHRpb25zPy50cmFuc2ZlckNhY2hlLFxuICAgICAgcmVzcG9uc2VUeXBlOiBjbGllbnRPcHRpb25zPy5yZXNwb25zZVR5cGUgfHwgJ2pzb24nLFxuICAgICAgY29udGV4dDogY2xpZW50T3B0aW9ucz8uY29udGV4dCxcbiAgICAgIGhlYWRlcnM6IGFyZ3M/LmhlYWRlcnMsXG4gICAgfSlcbiAgICAucGlwZShcbiAgICAgIHRhcCgoZXZlbnQpID0+IHVwZGF0ZVN0YXRlKGV2ZW50KSksXG4gICAgICByZXRyeSh7XG4gICAgICAgIGRlbGF5OiAoZXJyb3IsIHJldHJ5Q291bnQpID0+IHtcbiAgICAgICAgICBjb25zdCByZXRyeU9wdGlvbnM6IFNob3VsZFJldHJ5UmVxdWVzdE9wdGlvbnMgPSB7IGVycm9yLCByZXRyeUNvdW50IH07XG5cbiAgICAgICAgICBjb25zdCByZXRyeVJlc3VsdCA9IG9wdGlvbnMucmV0cnlGbj8uKHJldHJ5T3B0aW9ucykgfHwgc2hvdWxkUmV0cnlSZXF1ZXN0KHJldHJ5T3B0aW9ucyk7XG5cbiAgICAgICAgICBpZiAoIXJldHJ5UmVzdWx0LnJldHJ5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRpbWVyKHJldHJ5UmVzdWx0LmRlbGF5KTtcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICB1cGRhdGVFcnJvclN0YXRlKGUpO1xuXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgICAgfSksXG4gICAgKTtcblxuICBjb25zdCBleGVjdXRlID0gKCkgPT4ge1xuICAgIGlmIChsb2FkaW5nKCkgfHwgIWlzU3RhbGUoKSkge1xuICAgICAgLy8gRG8gbm90IGV4ZWN1dGUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHJlcXVlc3QgaW4gcHJvZ3Jlc3Mgb3IgdGhlIHJlcXVlc3QgaXMgbm90IHN0YWxlXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY3VycmVudFN0cmVhbVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgbGFzdEV4ZWN1dGVUaW1lLnNldChEYXRlLm5vdygpKTtcbiAgICBsYXN0TG9hZEV2ZW50VGltZS5zZXQobGFzdEV4ZWN1dGVUaW1lKCkpO1xuXG4gICAgbG9hZGluZy5zZXQoe1xuICAgICAgZXhlY3V0ZVRpbWU6IGxhc3RFeGVjdXRlVGltZSgpLFxuICAgICAgcHJvZ3Jlc3M6IG51bGwsXG4gICAgfSk7XG4gICAgZXJyb3Iuc2V0KG51bGwpO1xuICAgIGV4cGlyZXNJbi5zZXQobnVsbCk7XG5cbiAgICBjdXJyZW50U3RyZWFtU3Vic2NyaXB0aW9uID0gc3RyZWFtLnN1YnNjcmliZSgpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3QgZGVzdHJveSA9ICgpID0+IHtcbiAgICBpZiAoY3VycmVudFN0cmVhbVN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjdXJyZW50U3RyZWFtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCB1cGRhdGVTdGF0ZSA9IChldmVudDogSHR0cEV2ZW50PFJlc3BvbnNlVHlwZTxUQXJncz4+KSA9PiB7XG4gICAgY3VycmVudEV2ZW50LnNldChldmVudCk7XG5cbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcbiAgICAgICAge1xuICAgICAgICAgIGxvYWRpbmcuc2V0KG51bGwpO1xuICAgICAgICAgIHJlc3BvbnNlLnNldChldmVudC5ib2R5KTtcblxuICAgICAgICAgIGNvbnN0IGV4cGlyZXNJblNlY29uZHMgPSBvcHRpb25zLmNhY2hlQWRhcHRlclxuICAgICAgICAgICAgPyBvcHRpb25zLmNhY2hlQWRhcHRlcihldmVudC5oZWFkZXJzKVxuICAgICAgICAgICAgOiBleHRyYWN0RXhwaXJlc0luU2Vjb25kcyhldmVudC5oZWFkZXJzKTtcbiAgICAgICAgICBjb25zdCBleHBpcmVzSW5UaW1lc3RhbXAgPSBidWlsZFRpbWVzdGFtcEZyb21TZWNvbmRzKGV4cGlyZXNJblNlY29uZHMpO1xuICAgICAgICAgIGV4cGlyZXNJbi5zZXQoZXhwaXJlc0luVGltZXN0YW1wKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzOlxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLkRvd25sb2FkUHJvZ3Jlc3M6XG4gICAgICAgIHtcbiAgICAgICAgICB1cGRhdGVMb2FkaW5nU3RhdGUoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEh0dHBFdmVudFR5cGUuU2VudDpcbiAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZUhlYWRlcjpcbiAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5Vc2VyOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGVzZSBldmVudHNcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlRXJyb3JTdGF0ZSA9IChlcnJvclJlc3BvbnNlOiB1bmtub3duKSA9PiB7XG4gICAgbGV0IGVyciA9IGVycm9yUmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSA/IGVycm9yUmVzcG9uc2UgOiBudWxsO1xuXG4gICAgaWYgKCFlcnIpIHtcbiAgICAgIGVyciA9IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7XG4gICAgICAgIGVycm9yOiBlcnJvclJlc3BvbnNlLFxuICAgICAgICBzdGF0dXM6IDAsXG4gICAgICAgIHN0YXR1c1RleHQ6ICdVbmtub3duIEVycm9yJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGVycm9yLnNldChlcnIpO1xuICAgIGxvYWRpbmcuc2V0KG51bGwpO1xuICAgIGN1cnJlbnRFdmVudC5zZXQoeyB0eXBlOiAnZXJyb3InLCBlcnJvcjogZXJyIH0pO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZUxvYWRpbmdTdGF0ZSA9IChldmVudDogSHR0cFByb2dyZXNzRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudG90YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2dyZXNzOiBIdHRwUmVxdWVzdExvYWRpbmdQcm9ncmVzc1N0YXRlID0ge1xuICAgICAgdG90YWw6IGV2ZW50LnRvdGFsLFxuICAgICAgbG9hZGVkOiBldmVudC5sb2FkZWQsXG4gICAgICBwZXJjZW50YWdlOiAoZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpICogMTAwLFxuICAgICAgc3BlZWQ6IG51bGwsXG4gICAgICByZW1haW5pbmdUaW1lOiBudWxsLFxuICAgIH07XG5cbiAgICBjb25zdCBzdGF0ZTogSHR0cFJlcXVlc3RMb2FkaW5nU3RhdGUgPSB7XG4gICAgICBleGVjdXRlVGltZTogbGFzdEV4ZWN1dGVUaW1lKCksXG4gICAgICBwcm9ncmVzcyxcbiAgICB9O1xuXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGVsYXBzZWRUaW1lU2luY2VMYXN0RXZlbnQgPSBjdXJyZW50VGltZSAtIGxhc3RMb2FkRXZlbnRUaW1lKCk7XG4gICAgY29uc3QgZWxhcHNlZFRpbWVTaW5jZUxhc3RFeGVjdXRlID0gY3VycmVudFRpbWUgLSBsYXN0RXhlY3V0ZVRpbWUoKTtcbiAgICBjb25zdCBsb2FkZWRBbW91bnQgPSBldmVudC5sb2FkZWQgLSBsYXN0TG9hZEV2ZW50QW1vdW50KCk7XG5cbiAgICAvLyBXZSBvbmx5IHdhbnQgdG8gY2FsY3VsYXRlIHNwZWVkIGFuZCByZW1haW5pbmcgdGltZSBhZnRlciAyIHNlY29uZHMgb2YgdGhlIGV4ZWN1dGlvblxuICAgIC8vIFRoaXMgaXMgdG8gYXZvaWQgc2hvd2luZyBpbmNvcnJlY3Qgc3BlZWQgYW5kIHJlbWFpbmluZyB0aW1lIHdoZW4gdGhlIHJlcXVlc3QgaXMgdmVyeSBmYXN0XG4gICAgaWYgKGVsYXBzZWRUaW1lU2luY2VMYXN0RXhlY3V0ZSA+IFNQRUVEX0JVRkZFUl9USU1FX0lOX01TKSB7XG4gICAgICBjb25zdCBzcGVlZCA9IChsb2FkZWRBbW91bnQgLyBlbGFwc2VkVGltZVNpbmNlTGFzdEV2ZW50KSAqIDEwMDA7XG5cbiAgICAgIHByb2dyZXNzLnNwZWVkID0gc3BlZWQgKiAxMDAwO1xuICAgICAgcHJvZ3Jlc3MucmVtYWluaW5nVGltZSA9IE1hdGgucm91bmQoKGV2ZW50LnRvdGFsIC0gZXZlbnQubG9hZGVkKSAvIHNwZWVkKSAqIDEwMDA7XG4gICAgfVxuXG4gICAgbGFzdExvYWRFdmVudFRpbWUuc2V0KGN1cnJlbnRUaW1lKTtcbiAgICBsYXN0TG9hZEV2ZW50QW1vdW50LnNldChldmVudC5sb2FkZWQpO1xuXG4gICAgbG9hZGluZy5zZXQoc3RhdGUpO1xuICB9O1xuXG4gIGNvbnN0IGh0dHBSZXF1ZXN0OiBIdHRwUmVxdWVzdDxUQXJncz4gPSB7XG4gICAgZXhlY3V0ZSxcbiAgICBkZXN0cm95LFxuICAgIGxvYWRpbmc6IGxvYWRpbmcuYXNSZWFkb25seSgpLFxuICAgIGVycm9yOiBlcnJvci5hc1JlYWRvbmx5KCksXG4gICAgcmVzcG9uc2U6IHJlc3BvbnNlLmFzUmVhZG9ubHkoKSxcbiAgICBjdXJyZW50RXZlbnQ6IGN1cnJlbnRFdmVudC5hc1JlYWRvbmx5KCksXG4gICAgaXNTdGFsZSxcbiAgfTtcblxuICByZXR1cm4gaHR0cFJlcXVlc3Q7XG59O1xuIl19
@@ -1,22 +0,0 @@
1
- export * from './bearer-auth-provider';
2
- export * from './bearer-auth-provider-config';
3
- export * from './http-request';
4
- export * from './query';
5
- export * from './query-client';
6
- export * from './query-client-config';
7
- export * from './query-creator';
8
- export * from './query-creator-templates';
9
- export * from './query-dependencies';
10
- export * from './query-errors';
11
- export * from './query-execute';
12
- export * from './query-execute-utils';
13
- export * from './query-features';
14
- export * from './query-repository';
15
- export * from './query-snapshot';
16
- export * from './query-stack';
17
- export * from './query-state';
18
- export * from './query-utils';
19
- export * from './secure-query';
20
- export * from './secure-query-creator';
21
- export * from './secure-query-execute';
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYmVhcmVyLWF1dGgtcHJvdmlkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9iZWFyZXItYXV0aC1wcm92aWRlci1jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9odHRwLXJlcXVlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWNsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWNsaWVudC1jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1jcmVhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktY3JlYXRvci10ZW1wbGF0ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1kZXBlbmRlbmNpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1lcnJvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1leGVjdXRlJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktZXhlY3V0ZS11dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWZlYXR1cmVzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktcmVwb3NpdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LXNuYXBzaG90JztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktc3RhY2snO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1zdGF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LXV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VjdXJlLXF1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vc2VjdXJlLXF1ZXJ5LWNyZWF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9zZWN1cmUtcXVlcnktZXhlY3V0ZSc7XG4iXX0=
@@ -1,13 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-empty-function */
2
- import { InjectionToken } from '@angular/core';
3
- export const createQueryClientConfig = (options) => {
4
- const token = new InjectionToken(`QueryClient_${options.name}`);
5
- const clientConfig = {
6
- baseUrl: options.baseUrl,
7
- token,
8
- name: options.name,
9
- queryString: options.queryString,
10
- };
11
- return clientConfig;
12
- };
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY2xpZW50LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9leHBlcmltZW50YWwvcXVlcnktY2xpZW50LWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFHekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQXFCL0MsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxPQUF1QyxFQUFFLEVBQUU7SUFDakYsTUFBTSxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQW9CLGVBQWUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFFbkYsTUFBTSxZQUFZLEdBQXNCO1FBQ3RDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixLQUFLO1FBQ0wsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FBQ2xCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztLQUNqQyxDQUFDO0lBRUYsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uICovXG5cbmltcG9ydCB7IEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJ1aWxkUXVlcnlTdHJpbmdDb25maWcgfSBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50IH0gZnJvbSAnLi9xdWVyeS1jbGllbnQnO1xuaW1wb3J0IHsgU2hvdWxkUmV0cnlSZXF1ZXN0Rm4gfSBmcm9tICcuL3F1ZXJ5LXV0aWxzJztcblxuZXhwb3J0IHR5cGUgQ2FjaGVBZGFwdGVyRm4gPSAoaGVhZGVyczogSHR0cEhlYWRlcnMpID0+IG51bWJlciB8IG51bGw7XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVF1ZXJ5Q2xpZW50Q29uZmlnT3B0aW9ucyA9IHtcbiAgYmFzZVVybDogc3RyaW5nO1xuICBxdWVyeVN0cmluZz86IEJ1aWxkUXVlcnlTdHJpbmdDb25maWc7XG4gIG5hbWU6IHN0cmluZztcbiAgY2FjaGVBZGFwdGVyPzogQ2FjaGVBZGFwdGVyRm47XG4gIHJldHJ5Rm4/OiBTaG91bGRSZXRyeVJlcXVlc3RGbjtcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q2xpZW50Q29uZmlnID0gQ3JlYXRlUXVlcnlDbGllbnRDb25maWdPcHRpb25zICYge1xuICB0b2tlbjogUXVlcnlDbGllbnRSZWY7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeUNsaWVudFJlZiA9IEluamVjdGlvblRva2VuPFF1ZXJ5Q2xpZW50PjtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVF1ZXJ5Q2xpZW50Q29uZmlnID0gKG9wdGlvbnM6IENyZWF0ZVF1ZXJ5Q2xpZW50Q29uZmlnT3B0aW9ucykgPT4ge1xuICBjb25zdCB0b2tlbiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxRdWVyeUNsaWVudENvbmZpZz4oYFF1ZXJ5Q2xpZW50XyR7b3B0aW9ucy5uYW1lfWApO1xuXG4gIGNvbnN0IGNsaWVudENvbmZpZzogUXVlcnlDbGllbnRDb25maWcgPSB7XG4gICAgYmFzZVVybDogb3B0aW9ucy5iYXNlVXJsLFxuICAgIHRva2VuLFxuICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICBxdWVyeVN0cmluZzogb3B0aW9ucy5xdWVyeVN0cmluZyxcbiAgfTtcblxuICByZXR1cm4gY2xpZW50Q29uZmlnO1xufTtcbiJdfQ==
@@ -1,16 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-empty-function */
2
- import { createQueryRepository } from './query-repository';
3
- export const createQueryClient = (config) => {
4
- const repository = createQueryRepository(config);
5
- const client = {
6
- repository,
7
- };
8
- return client;
9
- };
10
- export const provideQueryClient = (config) => {
11
- return {
12
- provide: config.token,
13
- useFactory: () => createQueryClient(config),
14
- };
15
- };
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9xdWVyeS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBR3pELE9BQU8sRUFBbUIscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU01RSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE1BQXlCLEVBQUUsRUFBRTtJQUM3RCxNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVqRCxNQUFNLE1BQU0sR0FBZ0I7UUFDMUIsVUFBVTtLQUNYLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLE1BQXlCLEVBQUUsRUFBRTtJQUM5RCxPQUFPO1FBQ0wsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1FBQ3JCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7S0FDNUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiAqL1xuXG5pbXBvcnQgeyBRdWVyeUNsaWVudENvbmZpZyB9IGZyb20gJy4vcXVlcnktY2xpZW50LWNvbmZpZyc7XG5pbXBvcnQgeyBRdWVyeVJlcG9zaXRvcnksIGNyZWF0ZVF1ZXJ5UmVwb3NpdG9yeSB9IGZyb20gJy4vcXVlcnktcmVwb3NpdG9yeSc7XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q2xpZW50ID0ge1xuICByZXBvc2l0b3J5OiBRdWVyeVJlcG9zaXRvcnk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUXVlcnlDbGllbnQgPSAoY29uZmlnOiBRdWVyeUNsaWVudENvbmZpZykgPT4ge1xuICBjb25zdCByZXBvc2l0b3J5ID0gY3JlYXRlUXVlcnlSZXBvc2l0b3J5KGNvbmZpZyk7XG5cbiAgY29uc3QgY2xpZW50OiBRdWVyeUNsaWVudCA9IHtcbiAgICByZXBvc2l0b3J5LFxuICB9O1xuXG4gIHJldHVybiBjbGllbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgcHJvdmlkZVF1ZXJ5Q2xpZW50ID0gKGNvbmZpZzogUXVlcnlDbGllbnRDb25maWcpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlOiBjb25maWcudG9rZW4sXG4gICAgdXNlRmFjdG9yeTogKCkgPT4gY3JlYXRlUXVlcnlDbGllbnQoY29uZmlnKSxcbiAgfTtcbn07XG4iXX0=
@@ -1,33 +0,0 @@
1
- import { createQueryCreator } from './query-creator';
2
- import { createSecureQueryCreator } from './secure-query-creator';
3
- export const createGetQuery = (client) => {
4
- return (creatorOptions) => createQueryCreator(creatorOptions, { method: 'GET', client });
5
- };
6
- export const createSecureGetQuery = (client, authProvider) => {
7
- return (creatorOptions) => createSecureQueryCreator(creatorOptions, { method: 'GET', client, authProvider });
8
- };
9
- export const createPostQuery = (client) => {
10
- return (creatorOptions) => createQueryCreator(creatorOptions, { method: 'POST', client });
11
- };
12
- export const createSecurePostQuery = (client, authProvider) => {
13
- return (creatorOptions) => createSecureQueryCreator(creatorOptions, { method: 'POST', client, authProvider });
14
- };
15
- export const createPutQuery = (client) => {
16
- return (creatorOptions) => createQueryCreator(creatorOptions, { method: 'PUT', client });
17
- };
18
- export const createSecurePutQuery = (client, authProvider) => {
19
- return (creatorOptions) => createSecureQueryCreator(creatorOptions, { method: 'PUT', client, authProvider });
20
- };
21
- export const createDeleteQuery = (client) => {
22
- return (creatorOptions) => createQueryCreator(creatorOptions, { method: 'DELETE', client });
23
- };
24
- export const createSecureDeleteQuery = (client, authProvider) => {
25
- return (creatorOptions) => createSecureQueryCreator(creatorOptions, { method: 'DELETE', client, authProvider });
26
- };
27
- export const createPatchQuery = (client) => {
28
- return (creatorOptions) => createQueryCreator(creatorOptions, { method: 'PATCH', client });
29
- };
30
- export const createSecurePatchQuery = (client, authProvider) => {
31
- return (creatorOptions) => createSecureQueryCreator(creatorOptions, { method: 'PATCH', client, authProvider });
32
- };
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY3JlYXRvci10ZW1wbGF0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL3F1ZXJ5LWNyZWF0b3ItdGVtcGxhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBNkIsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVsRSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUF5QixFQUFFLEVBQUU7SUFDMUQsT0FBTyxDQUEwQixjQUFnRCxFQUFFLEVBQUUsQ0FDbkYsa0JBQWtCLENBQVEsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsTUFBeUIsRUFBRSxZQUF5QyxFQUFFLEVBQUU7SUFDM0csT0FBTyxDQUEwQixjQUFnRCxFQUFFLEVBQUUsQ0FDbkYsd0JBQXdCLENBQVEsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztBQUM3RixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUF5QixFQUFFLEVBQUU7SUFDM0QsT0FBTyxDQUEwQixjQUFnRCxFQUFFLEVBQUUsQ0FDbkYsa0JBQWtCLENBQVEsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzFFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsTUFBeUIsRUFBRSxZQUF5QyxFQUFFLEVBQUU7SUFDNUcsT0FBTyxDQUEwQixjQUFnRCxFQUFFLEVBQUUsQ0FDbkYsd0JBQXdCLENBQVEsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztBQUM5RixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUF5QixFQUFFLEVBQUU7SUFDMUQsT0FBTyxDQUEwQixjQUFnRCxFQUFFLEVBQUUsQ0FDbkYsa0JBQWtCLENBQVEsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsTUFBeUIsRUFBRSxZQUF5QyxFQUFFLEVBQUU7SUFDM0csT0FBTyxDQUEwQixjQUFnRCxFQUFFLEVBQUUsQ0FDbkYsd0JBQXdCLENBQVEsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztBQUM3RixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE1BQXlCLEVBQUUsRUFBRTtJQUM3RCxPQUFPLENBQTBCLGNBQWdELEVBQUUsRUFBRSxDQUNuRixrQkFBa0IsQ0FBUSxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDNUUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxNQUF5QixFQUFFLFlBQXlDLEVBQUUsRUFBRTtJQUM5RyxPQUFPLENBQTBCLGNBQWdELEVBQUUsRUFBRSxDQUNuRix3QkFBd0IsQ0FBUSxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQ2hHLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsTUFBeUIsRUFBRSxFQUFFO0lBQzVELE9BQU8sQ0FBMEIsY0FBZ0QsRUFBRSxFQUFFLENBQ25GLGtCQUFrQixDQUFRLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUMzRSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE1BQXlCLEVBQUUsWUFBeUMsRUFBRSxFQUFFO0lBQzdHLE9BQU8sQ0FBMEIsY0FBZ0QsRUFBRSxFQUFFLENBQ25GLHdCQUF3QixDQUFRLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDL0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW55QmVhcmVyQXV0aFByb3ZpZGVyQ29uZmlnIH0gZnJvbSAnLi9iZWFyZXItYXV0aC1wcm92aWRlci1jb25maWcnO1xuaW1wb3J0IHsgUXVlcnlBcmdzIH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBRdWVyeUNsaWVudENvbmZpZyB9IGZyb20gJy4vcXVlcnktY2xpZW50LWNvbmZpZyc7XG5pbXBvcnQgeyBDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zLCBjcmVhdGVRdWVyeUNyZWF0b3IgfSBmcm9tICcuL3F1ZXJ5LWNyZWF0b3InO1xuaW1wb3J0IHsgY3JlYXRlU2VjdXJlUXVlcnlDcmVhdG9yIH0gZnJvbSAnLi9zZWN1cmUtcXVlcnktY3JlYXRvcic7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVHZXRRdWVyeSA9IChjbGllbnQ6IFF1ZXJ5Q2xpZW50Q29uZmlnKSA9PiB7XG4gIHJldHVybiA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KGNyZWF0b3JPcHRpb25zOiBDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zPFRBcmdzPikgPT5cbiAgICBjcmVhdGVRdWVyeUNyZWF0b3I8VEFyZ3M+KGNyZWF0b3JPcHRpb25zLCB7IG1ldGhvZDogJ0dFVCcsIGNsaWVudCB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTZWN1cmVHZXRRdWVyeSA9IChjbGllbnQ6IFF1ZXJ5Q2xpZW50Q29uZmlnLCBhdXRoUHJvdmlkZXI6IEFueUJlYXJlckF1dGhQcm92aWRlckNvbmZpZykgPT4ge1xuICByZXR1cm4gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihjcmVhdG9yT3B0aW9uczogQ3JlYXRlUXVlcnlDcmVhdG9yT3B0aW9uczxUQXJncz4pID0+XG4gICAgY3JlYXRlU2VjdXJlUXVlcnlDcmVhdG9yPFRBcmdzPihjcmVhdG9yT3B0aW9ucywgeyBtZXRob2Q6ICdHRVQnLCBjbGllbnQsIGF1dGhQcm92aWRlciB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQb3N0UXVlcnkgPSAoY2xpZW50OiBRdWVyeUNsaWVudENvbmZpZykgPT4ge1xuICByZXR1cm4gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihjcmVhdG9yT3B0aW9uczogQ3JlYXRlUXVlcnlDcmVhdG9yT3B0aW9uczxUQXJncz4pID0+XG4gICAgY3JlYXRlUXVlcnlDcmVhdG9yPFRBcmdzPihjcmVhdG9yT3B0aW9ucywgeyBtZXRob2Q6ICdQT1NUJywgY2xpZW50IH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNlY3VyZVBvc3RRdWVyeSA9IChjbGllbnQ6IFF1ZXJ5Q2xpZW50Q29uZmlnLCBhdXRoUHJvdmlkZXI6IEFueUJlYXJlckF1dGhQcm92aWRlckNvbmZpZykgPT4ge1xuICByZXR1cm4gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihjcmVhdG9yT3B0aW9uczogQ3JlYXRlUXVlcnlDcmVhdG9yT3B0aW9uczxUQXJncz4pID0+XG4gICAgY3JlYXRlU2VjdXJlUXVlcnlDcmVhdG9yPFRBcmdzPihjcmVhdG9yT3B0aW9ucywgeyBtZXRob2Q6ICdQT1NUJywgY2xpZW50LCBhdXRoUHJvdmlkZXIgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUHV0UXVlcnkgPSAoY2xpZW50OiBRdWVyeUNsaWVudENvbmZpZykgPT4ge1xuICByZXR1cm4gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihjcmVhdG9yT3B0aW9uczogQ3JlYXRlUXVlcnlDcmVhdG9yT3B0aW9uczxUQXJncz4pID0+XG4gICAgY3JlYXRlUXVlcnlDcmVhdG9yPFRBcmdzPihjcmVhdG9yT3B0aW9ucywgeyBtZXRob2Q6ICdQVVQnLCBjbGllbnQgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlU2VjdXJlUHV0UXVlcnkgPSAoY2xpZW50OiBRdWVyeUNsaWVudENvbmZpZywgYXV0aFByb3ZpZGVyOiBBbnlCZWFyZXJBdXRoUHJvdmlkZXJDb25maWcpID0+IHtcbiAgcmV0dXJuIDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4oY3JlYXRvck9wdGlvbnM6IENyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnM8VEFyZ3M+KSA9PlxuICAgIGNyZWF0ZVNlY3VyZVF1ZXJ5Q3JlYXRvcjxUQXJncz4oY3JlYXRvck9wdGlvbnMsIHsgbWV0aG9kOiAnUFVUJywgY2xpZW50LCBhdXRoUHJvdmlkZXIgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRGVsZXRlUXVlcnkgPSAoY2xpZW50OiBRdWVyeUNsaWVudENvbmZpZykgPT4ge1xuICByZXR1cm4gPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPihjcmVhdG9yT3B0aW9uczogQ3JlYXRlUXVlcnlDcmVhdG9yT3B0aW9uczxUQXJncz4pID0+XG4gICAgY3JlYXRlUXVlcnlDcmVhdG9yPFRBcmdzPihjcmVhdG9yT3B0aW9ucywgeyBtZXRob2Q6ICdERUxFVEUnLCBjbGllbnQgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlU2VjdXJlRGVsZXRlUXVlcnkgPSAoY2xpZW50OiBRdWVyeUNsaWVudENvbmZpZywgYXV0aFByb3ZpZGVyOiBBbnlCZWFyZXJBdXRoUHJvdmlkZXJDb25maWcpID0+IHtcbiAgcmV0dXJuIDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4oY3JlYXRvck9wdGlvbnM6IENyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnM8VEFyZ3M+KSA9PlxuICAgIGNyZWF0ZVNlY3VyZVF1ZXJ5Q3JlYXRvcjxUQXJncz4oY3JlYXRvck9wdGlvbnMsIHsgbWV0aG9kOiAnREVMRVRFJywgY2xpZW50LCBhdXRoUHJvdmlkZXIgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUGF0Y2hRdWVyeSA9IChjbGllbnQ6IFF1ZXJ5Q2xpZW50Q29uZmlnKSA9PiB7XG4gIHJldHVybiA8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+KGNyZWF0b3JPcHRpb25zOiBDcmVhdGVRdWVyeUNyZWF0b3JPcHRpb25zPFRBcmdzPikgPT5cbiAgICBjcmVhdGVRdWVyeUNyZWF0b3I8VEFyZ3M+KGNyZWF0b3JPcHRpb25zLCB7IG1ldGhvZDogJ1BBVENIJywgY2xpZW50IH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNlY3VyZVBhdGNoUXVlcnkgPSAoY2xpZW50OiBRdWVyeUNsaWVudENvbmZpZywgYXV0aFByb3ZpZGVyOiBBbnlCZWFyZXJBdXRoUHJvdmlkZXJDb25maWcpID0+IHtcbiAgcmV0dXJuIDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4oY3JlYXRvck9wdGlvbnM6IENyZWF0ZVF1ZXJ5Q3JlYXRvck9wdGlvbnM8VEFyZ3M+KSA9PlxuICAgIGNyZWF0ZVNlY3VyZVF1ZXJ5Q3JlYXRvcjxUQXJncz4oY3JlYXRvck9wdGlvbnMsIHsgbWV0aG9kOiAnUEFUQ0gnLCBjbGllbnQsIGF1dGhQcm92aWRlciB9KTtcbn07XG4iXX0=