@ethlete/query 5.21.1 → 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.
- package/CHANGELOG.md +6 -0
- package/fesm2022/ethlete-query.mjs +21 -37
- package/fesm2022/ethlete-query.mjs.map +1 -1
- package/package.json +5 -7
- package/esm2022/ethlete-query.mjs +0 -5
- package/esm2022/index.mjs +0 -21
- package/esm2022/lib/auth/auth-provider.types.mjs +0 -2
- package/esm2022/lib/auth/auth-provider.utils.mjs +0 -25
- package/esm2022/lib/auth/basic-auth-provider.mjs +0 -15
- package/esm2022/lib/auth/bearer-auth-provider.mjs +0 -168
- package/esm2022/lib/auth/custom-header-auth-provider.mjs +0 -12
- package/esm2022/lib/auth/index.mjs +0 -6
- package/esm2022/lib/class-validator/class-validator.types.mjs +0 -2
- package/esm2022/lib/class-validator/class-validator.utils.mjs +0 -4
- package/esm2022/lib/class-validator/index.mjs +0 -3
- package/esm2022/lib/devtools/components/query-devtools/index.mjs +0 -2
- package/esm2022/lib/devtools/components/query-devtools/query-devtools.component.mjs +0 -297
- package/esm2022/lib/devtools/pipes/index.mjs +0 -2
- package/esm2022/lib/devtools/pipes/query-short-name.pipe.mjs +0 -24
- package/esm2022/lib/devtools/utils/index.mjs +0 -2
- package/esm2022/lib/devtools/utils/query-client.utils.mjs +0 -13
- package/esm2022/lib/directives/index.mjs +0 -4
- package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +0 -56
- package/esm2022/lib/directives/infinity-query.directive.mjs +0 -147
- package/esm2022/lib/directives/query.directive.mjs +0 -123
- package/esm2022/lib/entity/entity-store.mjs +0 -127
- package/esm2022/lib/entity/entity.types.mjs +0 -2
- package/esm2022/lib/entity/entity.utils.mjs +0 -29
- package/esm2022/lib/entity/index.mjs +0 -4
- package/esm2022/lib/experimental/bearer-auth-provider-config.mjs +0 -19
- package/esm2022/lib/experimental/bearer-auth-provider.mjs +0 -245
- package/esm2022/lib/experimental/http-request.mjs +0 -154
- package/esm2022/lib/experimental/index.mjs +0 -23
- package/esm2022/lib/experimental/paged-query.mjs +0 -194
- package/esm2022/lib/experimental/query-client-config.mjs +0 -13
- package/esm2022/lib/experimental/query-client.mjs +0 -16
- package/esm2022/lib/experimental/query-creator-templates.mjs +0 -33
- package/esm2022/lib/experimental/query-creator.mjs +0 -28
- package/esm2022/lib/experimental/query-dependencies.mjs +0 -14
- package/esm2022/lib/experimental/query-errors.mjs +0 -70
- package/esm2022/lib/experimental/query-execute-utils.mjs +0 -54
- package/esm2022/lib/experimental/query-execute.mjs +0 -14
- package/esm2022/lib/experimental/query-features.mjs +0 -126
- package/esm2022/lib/experimental/query-repository.mjs +0 -97
- package/esm2022/lib/experimental/query-snapshot.mjs +0 -45
- package/esm2022/lib/experimental/query-stack.mjs +0 -65
- package/esm2022/lib/experimental/query-state.mjs +0 -20
- package/esm2022/lib/experimental/query-utils.mjs +0 -176
- package/esm2022/lib/experimental/query.mjs +0 -29
- package/esm2022/lib/experimental/secure-query-creator.mjs +0 -15
- package/esm2022/lib/experimental/secure-query-execute.mjs +0 -80
- package/esm2022/lib/experimental/secure-query.mjs +0 -33
- package/esm2022/lib/gql/gql.mjs +0 -23
- package/esm2022/lib/gql/index.mjs +0 -2
- package/esm2022/lib/infinite-query/index.mjs +0 -4
- package/esm2022/lib/infinite-query/infinity-query.mjs +0 -171
- package/esm2022/lib/infinite-query/infinity-query.types.mjs +0 -2
- package/esm2022/lib/infinite-query/infinity-query.utils.mjs +0 -3
- package/esm2022/lib/logger/index.mjs +0 -2
- package/esm2022/lib/logger/logger.mjs +0 -16
- package/esm2022/lib/query/index.mjs +0 -4
- package/esm2022/lib/query/query.mjs +0 -431
- package/esm2022/lib/query/query.types.mjs +0 -2
- package/esm2022/lib/query/query.utils.mjs +0 -253
- package/esm2022/lib/query-client/index.mjs +0 -4
- package/esm2022/lib/query-client/query-client.mjs +0 -80
- package/esm2022/lib/query-client/query-client.types.mjs +0 -2
- package/esm2022/lib/query-client/query-client.utils.mjs +0 -20
- package/esm2022/lib/query-creator/index.mjs +0 -3
- package/esm2022/lib/query-creator/query-creator.mjs +0 -55
- package/esm2022/lib/query-creator/query-creator.types.mjs +0 -2
- package/esm2022/lib/query-form/index.mjs +0 -4
- package/esm2022/lib/query-form/query-form.mjs +0 -412
- package/esm2022/lib/query-form/query-form.types.mjs +0 -2
- package/esm2022/lib/query-form/query-form.utils.mjs +0 -97
- package/esm2022/lib/query-store/index.mjs +0 -2
- package/esm2022/lib/query-store/query-store.mjs +0 -144
- package/esm2022/lib/request/index.mjs +0 -4
- package/esm2022/lib/request/request.mjs +0 -196
- package/esm2022/lib/request/request.types.mjs +0 -2
- package/esm2022/lib/request/request.util.mjs +0 -252
- package/esm2022/lib/symfony/index.mjs +0 -3
- package/esm2022/lib/symfony/symfony.types.mjs +0 -2
- package/esm2022/lib/symfony/symfony.utils.mjs +0 -31
- package/esm2022/lib/utils/data.utils.mjs +0 -138
- package/esm2022/lib/utils/deep-freeze.util.mjs +0 -17
- package/esm2022/lib/utils/def.util.mjs +0 -8
- package/esm2022/lib/utils/index.mjs +0 -4
|
@@ -1,252 +0,0 @@
|
|
|
1
|
-
import { invalidBaseRouteError, invalidRouteError, pathParamsMissingInRouteFunctionError } from '../logger';
|
|
2
|
-
import { isSymfonyPagerfantaOutOfRangeError } from '../symfony';
|
|
3
|
-
export const isNaN = (value) => typeof value === 'number' && Number.isNaN(value);
|
|
4
|
-
export const isEmptyString = (value) => typeof value === 'string' && value.trim() === '';
|
|
5
|
-
export const isRequestError = (error) => error instanceof Object && 'status' in error && 'statusText' in error && 'url' in error;
|
|
6
|
-
export const buildRoute = (options) => {
|
|
7
|
-
if (options.base.endsWith('/')) {
|
|
8
|
-
throw invalidBaseRouteError(options.base);
|
|
9
|
-
}
|
|
10
|
-
let route = null;
|
|
11
|
-
if (typeof options.route === 'function') {
|
|
12
|
-
if (!options.pathParams) {
|
|
13
|
-
throw pathParamsMissingInRouteFunctionError(options.route({}));
|
|
14
|
-
}
|
|
15
|
-
route = options.route(options.pathParams);
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
route = options.route ?? null;
|
|
19
|
-
}
|
|
20
|
-
if (route && !route.startsWith('/')) {
|
|
21
|
-
throw invalidRouteError(route);
|
|
22
|
-
}
|
|
23
|
-
if (options.queryParams) {
|
|
24
|
-
const queryString = buildQueryString(options.queryParams, options.queryParamConfig);
|
|
25
|
-
if (queryString) {
|
|
26
|
-
route = route ? `${route}?${queryString}` : `/?${queryString}`;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return `${options.base}${route ?? ''}`;
|
|
30
|
-
};
|
|
31
|
-
export const buildQueryString = (params, config) => {
|
|
32
|
-
const objectNotation = config?.objectNotation ?? 'bracket';
|
|
33
|
-
const writeArrayIndexes = config?.writeArrayIndexes ?? false;
|
|
34
|
-
const ignoredValues = config?.ignoredValues ?? [undefined, null, Infinity, -Infinity];
|
|
35
|
-
const ignoredValuesFns = config?.ignoredValuesFns ?? [isNaN, isEmptyString];
|
|
36
|
-
const queryParams = [];
|
|
37
|
-
function processValue(key, value) {
|
|
38
|
-
if (Array.isArray(value)) {
|
|
39
|
-
let currentFilteredIndex = 0;
|
|
40
|
-
for (const arrayValue of value) {
|
|
41
|
-
const nestedKey = writeArrayIndexes ? `${key}[${currentFilteredIndex}]` : `${key}[]`;
|
|
42
|
-
const didAddValue = processValue(nestedKey, arrayValue);
|
|
43
|
-
if (didAddValue) {
|
|
44
|
-
currentFilteredIndex++;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
else if (typeof value === 'object' && value !== null) {
|
|
50
|
-
for (const [objKey, val] of Object.entries(value)) {
|
|
51
|
-
const nestedKey = objectNotation === 'dot' ? `${key}.${objKey}` : `${key}[${objKey}]`;
|
|
52
|
-
processValue(nestedKey, val);
|
|
53
|
-
}
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
if (ignoredValues.includes(value)) {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
if (ignoredValuesFns.some((fn) => fn(value))) {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
const encodedKey = encodeURIComponent(key);
|
|
64
|
-
const encodedValue = encodeURIComponent(value);
|
|
65
|
-
queryParams.push(`${encodedKey}=${encodedValue}`);
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
for (const [key, val] of Object.entries(params)) {
|
|
70
|
-
processValue(key, val);
|
|
71
|
-
}
|
|
72
|
-
return queryParams.length ? queryParams.join('&') : null;
|
|
73
|
-
};
|
|
74
|
-
export const extractExpiresInSeconds = (headers) => {
|
|
75
|
-
const cacheControl = headers['cache-control'];
|
|
76
|
-
const age = headers['age'];
|
|
77
|
-
const expires = headers['expires'];
|
|
78
|
-
// In seconds
|
|
79
|
-
let expiresIn = null;
|
|
80
|
-
let maxAge = null;
|
|
81
|
-
if (cacheControl?.includes('no-cache')) {
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
if (cacheControl?.includes('max-age')) {
|
|
85
|
-
const m = cacheControl.split('max-age=')[1];
|
|
86
|
-
if (m) {
|
|
87
|
-
maxAge = parseInt(m);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
else if (cacheControl?.includes('s-maxage')) {
|
|
91
|
-
const m = cacheControl.split('s-maxage=')[1];
|
|
92
|
-
if (m) {
|
|
93
|
-
maxAge = parseInt(m);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
if (maxAge && age) {
|
|
97
|
-
const ageSeconds = parseInt(age);
|
|
98
|
-
expiresIn = maxAge - ageSeconds;
|
|
99
|
-
}
|
|
100
|
-
else if (maxAge) {
|
|
101
|
-
expiresIn = maxAge / 2; // We assume the response is half way to its expiration
|
|
102
|
-
}
|
|
103
|
-
else if (expires) {
|
|
104
|
-
// Used by some apis to tell the response will never expire
|
|
105
|
-
// In this case we let the response expire after 1 hour
|
|
106
|
-
if (expires === '-1') {
|
|
107
|
-
expiresIn = 3600;
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
const expiresDate = new Date(expires);
|
|
111
|
-
// check if the date is valid
|
|
112
|
-
if (expiresDate.toString() !== 'Invalid Date') {
|
|
113
|
-
expiresIn = Math.floor((expiresDate.getTime() - Date.now()) / 1000);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return expiresIn;
|
|
118
|
-
};
|
|
119
|
-
export const buildTimestampFromSeconds = (seconds) => {
|
|
120
|
-
if (seconds === null) {
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
return new Date(Date.now() + seconds * 1000).getTime();
|
|
124
|
-
};
|
|
125
|
-
export const serializeBody = (body) => {
|
|
126
|
-
if (body === null || body === undefined) {
|
|
127
|
-
return null;
|
|
128
|
-
}
|
|
129
|
-
if (body instanceof ArrayBuffer ||
|
|
130
|
-
body instanceof Blob ||
|
|
131
|
-
body instanceof FormData ||
|
|
132
|
-
body instanceof URLSearchParams ||
|
|
133
|
-
typeof body === 'string') {
|
|
134
|
-
return body;
|
|
135
|
-
}
|
|
136
|
-
if (typeof body === 'object' || typeof body === 'boolean' || Array.isArray(body)) {
|
|
137
|
-
return JSON.stringify(body);
|
|
138
|
-
}
|
|
139
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
140
|
-
return body.toString();
|
|
141
|
-
};
|
|
142
|
-
export const transformMethod = (config) => {
|
|
143
|
-
if (config.method === 'GQL_QUERY' || config.method === 'GQL_MUTATE') {
|
|
144
|
-
if (!config.transferVia) {
|
|
145
|
-
return 'POST';
|
|
146
|
-
}
|
|
147
|
-
return config.transferVia;
|
|
148
|
-
}
|
|
149
|
-
return config.method;
|
|
150
|
-
};
|
|
151
|
-
export const detectContentTypeHeader = (body) => {
|
|
152
|
-
// An empty body has no content type.
|
|
153
|
-
if (body === null) {
|
|
154
|
-
return null;
|
|
155
|
-
}
|
|
156
|
-
// FormData bodies rely on the browser's content type assignment.
|
|
157
|
-
if (body instanceof FormData) {
|
|
158
|
-
return null;
|
|
159
|
-
}
|
|
160
|
-
// Blobs usually have their own content type. If it doesn't, then
|
|
161
|
-
// no type can be inferred.
|
|
162
|
-
if (body instanceof Blob) {
|
|
163
|
-
return body.type || null;
|
|
164
|
-
}
|
|
165
|
-
// Array buffers have unknown contents and thus no type can be inferred.
|
|
166
|
-
if (body instanceof ArrayBuffer) {
|
|
167
|
-
return null;
|
|
168
|
-
}
|
|
169
|
-
// Technically, strings could be a form of JSON data, but it's safe enough
|
|
170
|
-
// to assume they're plain strings.
|
|
171
|
-
if (typeof body === 'string') {
|
|
172
|
-
return 'text/plain';
|
|
173
|
-
}
|
|
174
|
-
// Arrays, objects, boolean and numbers will be encoded as JSON.
|
|
175
|
-
if (typeof body === 'object' || typeof body === 'number' || typeof body === 'boolean') {
|
|
176
|
-
return 'application/json';
|
|
177
|
-
}
|
|
178
|
-
// No type could be inferred.
|
|
179
|
-
return null;
|
|
180
|
-
};
|
|
181
|
-
export const hasHeader = (headers, header) => {
|
|
182
|
-
return Object.keys(headers).some((key) => key.toLowerCase() === header.toLowerCase());
|
|
183
|
-
};
|
|
184
|
-
export const forEachHeader = (headers, callback) => {
|
|
185
|
-
Object.entries(headers).forEach(([key, value]) => {
|
|
186
|
-
callback(key, value);
|
|
187
|
-
});
|
|
188
|
-
};
|
|
189
|
-
export const parseAllXhrResponseHeaders = (xhr) => {
|
|
190
|
-
const headers = xhr.getAllResponseHeaders();
|
|
191
|
-
const parsedHeaders = {};
|
|
192
|
-
for (const line of headers.split('\n')) {
|
|
193
|
-
const index = line.indexOf(':');
|
|
194
|
-
if (index > 0) {
|
|
195
|
-
const name = line.slice(0, index);
|
|
196
|
-
const key = name.toLowerCase();
|
|
197
|
-
const value = line.slice(index + 1).trim();
|
|
198
|
-
parsedHeaders[key] = value;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
return parsedHeaders;
|
|
202
|
-
};
|
|
203
|
-
export const getResponseUrl = (xhr) => {
|
|
204
|
-
if ('responseURL' in xhr && xhr.responseURL) {
|
|
205
|
-
return xhr.responseURL;
|
|
206
|
-
}
|
|
207
|
-
if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {
|
|
208
|
-
return xhr.getResponseHeader('X-Request-URL');
|
|
209
|
-
}
|
|
210
|
-
return null;
|
|
211
|
-
};
|
|
212
|
-
export const shouldRetryRequest = (config) => {
|
|
213
|
-
const defaultRetryDelay = 1000 + 1000 * config.currentRetryCount;
|
|
214
|
-
if (config.currentRetryCount > 3) {
|
|
215
|
-
return { retry: false };
|
|
216
|
-
}
|
|
217
|
-
if (!isRequestError(config.error)) {
|
|
218
|
-
return { retry: false };
|
|
219
|
-
}
|
|
220
|
-
const { status, detail } = config.error;
|
|
221
|
-
// Retry on 5xx errors
|
|
222
|
-
if (status >= 500) {
|
|
223
|
-
// Don't retry if a requested page is out of range
|
|
224
|
-
if (isSymfonyPagerfantaOutOfRangeError(detail)) {
|
|
225
|
-
return { retry: false };
|
|
226
|
-
}
|
|
227
|
-
return { retry: true, delay: defaultRetryDelay };
|
|
228
|
-
}
|
|
229
|
-
// Retry on 408 or 425 errors
|
|
230
|
-
if (status === 408 /* HttpStatusCode.RequestTimeout */ || status === 425 /* HttpStatusCode.TooEarly */) {
|
|
231
|
-
return { retry: true, delay: defaultRetryDelay };
|
|
232
|
-
}
|
|
233
|
-
// Retry on 429 errors
|
|
234
|
-
if (status === 429 /* HttpStatusCode.TooManyRequests */) {
|
|
235
|
-
const retryAfter = config.headers['retry-after'] ||
|
|
236
|
-
config.headers['Retry-After'] ||
|
|
237
|
-
config.headers['x-retry-after'] ||
|
|
238
|
-
config.headers['X-Retry-After'];
|
|
239
|
-
if (retryAfter) {
|
|
240
|
-
const delay = parseInt(retryAfter) * 1000;
|
|
241
|
-
return { retry: true, delay: Number.isNaN(delay) ? defaultRetryDelay : delay };
|
|
242
|
-
}
|
|
243
|
-
return { retry: true, delay: defaultRetryDelay };
|
|
244
|
-
}
|
|
245
|
-
// Code 0 usually means the internet connection is down. We retry in this case.
|
|
246
|
-
// It could also be a CORS issue but that should not be the case in production.
|
|
247
|
-
if (status === 0) {
|
|
248
|
-
return { retry: true, delay: defaultRetryDelay };
|
|
249
|
-
}
|
|
250
|
-
return { retry: false };
|
|
251
|
-
};
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL3JlcXVlc3QvcmVxdWVzdC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU1RyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFXaEUsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBYyxFQUFXLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuRyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFjLEVBQVcsRUFBRSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBRTNHLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFjLEtBQWMsRUFBNEIsRUFBRSxDQUN0RixLQUFLLFlBQVksTUFBTSxJQUFJLFFBQVEsSUFBSSxLQUFLLElBQUksWUFBWSxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDO0FBRTFGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BTTFCLEVBQUUsRUFBRTtJQUNILElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMvQixNQUFNLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxLQUFLLEdBQWtCLElBQUksQ0FBQztJQUVoQyxJQUFJLE9BQU8sT0FBTyxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMs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QUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pGLENBQUM7UUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQsK0VBQStFO0lBQy9FLCtFQUErRTtJQUMvRSxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqQixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUMxQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbnZhbGlkQmFzZVJvdXRlRXJyb3IsIGludmFsaWRSb3V0ZUVycm9yLCBwYXRoUGFyYW1zTWlzc2luZ0luUm91dGVGdW5jdGlvbkVycm9yIH0gZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IEFueVJvdXRlIH0gZnJvbSAnLi4vcXVlcnknO1xuaW1wb3J0IHsgaXNTeW1mb255UGFnZXJmYW50YU91dE9mUmFuZ2VFcnJvciB9IGZyb20gJy4uL3N5bWZvbnknO1xuaW1wb3J0IHtcbiAgQnVpbGRRdWVyeVN0cmluZ0NvbmZpZyxcbiAgTWV0aG9kLFxuICBQYXRoUGFyYW1zLFxuICBRdWVyeVBhcmFtcyxcbiAgUmVxdWVzdEVycm9yLFxuICBSZXF1ZXN0SGVhZGVycyxcbiAgUmVxdWVzdFJldHJ5Rm4sXG59IGZyb20gJy4vcmVxdWVzdC50eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBpc05hTiA9ICh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4gPT4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNOYU4odmFsdWUpO1xuZXhwb3J0IGNvbnN0IGlzRW1wdHlTdHJpbmcgPSAodmFsdWU6IHVua25vd24pOiBib29sZWFuID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpID09PSAnJztcblxuZXhwb3J0IGNvbnN0IGlzUmVxdWVzdEVycm9yID0gPFQgPSB1bmtub3duPihlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIFJlcXVlc3RFcnJvcjxUPiA9PlxuICBlcnJvciBpbnN0YW5jZW9mIE9iamVjdCAmJiAnc3RhdHVzJyBpbiBlcnJvciAmJiAnc3RhdHVzVGV4dCcgaW4gZXJyb3IgJiYgJ3VybCcgaW4gZXJyb3I7XG5cbmV4cG9ydCBjb25zdCBidWlsZFJvdXRlID0gKG9wdGlvbnM6IHtcbiAgYmFzZTogc3RyaW5nO1xuICByb3V0ZTogQW55Um91dGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwYXRoUGFyYW1zPzogUGF0aFBhcmFtcztcbiAgcXVlcnlQYXJhbXM/OiBRdWVyeVBhcmFtcztcbiAgcXVlcnlQYXJhbUNvbmZpZz86IEJ1aWxkUXVlcnlTdHJpbmdDb25maWc7XG59KSA9PiB7XG4gIGlmIChvcHRpb25zLmJhc2UuZW5kc1dpdGgoJy8nKSkge1xuICAgIHRocm93IGludmFsaWRCYXNlUm91dGVFcnJvcihvcHRpb25zLmJhc2UpO1xuICB9XG5cbiAgbGV0IHJvdXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMucm91dGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoIW9wdGlvbnMucGF0aFBhcmFtcykge1xuICAgICAgdGhyb3cgcGF0aFBhcmFtc01pc3NpbmdJblJvdXRlRnVuY3Rpb25FcnJvcihvcHRpb25zLnJvdXRlKHt9KSk7XG4gICAgfVxuXG4gICAgcm91dGUgPSBvcHRpb25zLnJvdXRlKG9wdGlvbnMucGF0aFBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgcm91dGUgPSBvcHRpb25zLnJvdXRlID8/IG51bGw7XG4gIH1cblxuICBpZiAocm91dGUgJiYgIXJvdXRlLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHRocm93IGludmFsaWRSb3V0ZUVycm9yKHJvdXRlKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnF1ZXJ5UGFyYW1zKSB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBidWlsZFF1ZXJ5U3RyaW5nKG9wdGlvbnMucXVlcnlQYXJhbXMsIG9wdGlvbnMucXVlcnlQYXJhbUNvbmZpZyk7XG5cbiAgICBpZiAocXVlcnlTdHJpbmcpIHtcbiAgICAgIHJvdXRlID0gcm91dGUgPyBgJHtyb3V0ZX0/JHtxdWVyeVN0cmluZ31gIDogYC8/JHtxdWVyeVN0cmluZ31gO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBgJHtvcHRpb25zLmJhc2V9JHtyb3V0ZSA/PyAnJ31gO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkUXVlcnlTdHJpbmcgPSAocGFyYW1zOiBRdWVyeVBhcmFtcywgY29uZmlnPzogQnVpbGRRdWVyeVN0cmluZ0NvbmZpZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCBvYmplY3ROb3RhdGlvbiA9IGNvbmZpZz8ub2JqZWN0Tm90YXRpb24gPz8gJ2JyYWNrZXQnO1xuICBjb25zdCB3cml0ZUFycmF5SW5kZXhlcyA9IGNvbmZpZz8ud3JpdGVBcnJheUluZGV4ZXMgPz8gZmFsc2U7XG4gIGNvbnN0IGlnbm9yZWRWYWx1ZXMgPSBjb25maWc/Lmlnbm9yZWRWYWx1ZXMgPz8gW3VuZGVmaW5lZCwgbnVsbCwgSW5maW5pdHksIC1JbmZpbml0eV07XG4gIGNvbnN0IGlnbm9yZWRWYWx1ZXNGbnMgPSBjb25maWc/Lmlnbm9yZWRWYWx1ZXNGbnMgPz8gW2lzTmFOLCBpc0VtcHR5U3RyaW5nXTtcblxuICBjb25zdCBxdWVyeVBhcmFtczogc3RyaW5nW10gPSBbXTtcblxuICBmdW5jdGlvbiBwcm9jZXNzVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBsZXQgY3VycmVudEZpbHRlcmVkSW5kZXggPSAwO1xuICAgICAgZm9yIChjb25zdCBhcnJheVZhbHVlIG9mIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5lc3RlZEtleSA9IHdyaXRlQXJyYXlJbmRleGVzID8gYCR7a2V5fVske2N1cnJlbnRGaWx0ZXJlZEluZGV4fV1gIDogYCR7a2V5fVtdYDtcblxuICAgICAgICBjb25zdCBkaWRBZGRWYWx1ZSA9IHByb2Nlc3NWYWx1ZShuZXN0ZWRLZXksIGFycmF5VmFsdWUpO1xuXG4gICAgICAgIGlmIChkaWRBZGRWYWx1ZSkge1xuICAgICAgICAgIGN1cnJlbnRGaWx0ZXJlZEluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICBmb3IgKGNvbnN0IFtvYmpLZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IG5lc3RlZEtleSA9IG9iamVjdE5vdGF0aW9uID09PSAnZG90JyA/IGAke2tleX0uJHtvYmpLZXl9YCA6IGAke2tleX1bJHtvYmpLZXl9XWA7XG4gICAgICAgIHByb2Nlc3NWYWx1ZShuZXN0ZWRLZXksIHZhbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaWdub3JlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaWdub3JlZFZhbHVlc0Zucy5zb21lKChmbikgPT4gZm4odmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVuY29kZWRLZXkgPSBlbmNvZGVVUklDb21wb25lbnQoa2V5KTtcbiAgICAgIGNvbnN0IGVuY29kZWRWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSBhcyBzdHJpbmcpO1xuXG4gICAgICBxdWVyeVBhcmFtcy5wdXNoKGAke2VuY29kZWRLZXl9PSR7ZW5jb2RlZFZhbHVlfWApO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zKSkge1xuICAgIHByb2Nlc3NWYWx1ZShrZXksIHZhbCk7XG4gIH1cblxuICByZXR1cm4gcXVlcnlQYXJhbXMubGVuZ3RoID8gcXVlcnlQYXJhbXMuam9pbignJicpIDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0RXhwaXJlc0luU2Vjb25kcyA9IChoZWFkZXJzOiBSZXF1ZXN0SGVhZGVycykgPT4ge1xuICBjb25zdCBjYWNoZUNvbnRyb2wgPSBoZWFkZXJzWydjYWNoZS1jb250cm9sJ107XG4gIGNvbnN0IGFnZSA9IGhlYWRlcnNbJ2FnZSddO1xuICBjb25zdCBleHBpcmVzID0gaGVhZGVyc1snZXhwaXJlcyddO1xuXG4gIC8vIEluIHNlY29uZHNcbiAgbGV0IGV4cGlyZXNJbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGxldCBtYXhBZ2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIGlmIChjYWNoZUNvbnRyb2w/LmluY2x1ZGVzKCduby1jYWNoZScpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoY2FjaGVDb250cm9sPy5pbmNsdWRlcygnbWF4LWFnZScpKSB7XG4gICAgY29uc3QgbSA9IGNhY2hlQ29udHJvbC5zcGxpdCgnbWF4LWFnZT0nKVsxXTtcblxuICAgIGlmIChtKSB7XG4gICAgICBtYXhBZ2UgPSBwYXJzZUludChtKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2FjaGVDb250cm9sPy5pbmNsdWRlcygncy1tYXhhZ2UnKSkge1xuICAgIGNvbnN0IG0gPSBjYWNoZUNvbnRyb2wuc3BsaXQoJ3MtbWF4YWdlPScpWzFdO1xuXG4gICAgaWYgKG0pIHtcbiAgICAgIG1heEFnZSA9IHBhcnNlSW50KG0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtYXhBZ2UgJiYgYWdlKSB7XG4gICAgY29uc3QgYWdlU2Vjb25kcyA9IHBhcnNlSW50KGFnZSk7XG5cbiAgICBleHBpcmVzSW4gPSBtYXhBZ2UgLSBhZ2VTZWNvbmRzO1xuICB9IGVsc2UgaWYgKG1heEFnZSkge1xuICAgIGV4cGlyZXNJbiA9IG1heEFnZSAvIDI7IC8vIFdlIGFzc3VtZSB0aGUgcmVzcG9uc2UgaXMgaGFsZiB3YXkgdG8gaXRzIGV4cGlyYXRpb25cbiAgfSBlbHNlIGlmIChleHBpcmVzKSB7XG4gICAgLy8gVXNlZCBieSBzb21lIGFwaXMgdG8gdGVsbCB0aGUgcmVzcG9uc2Ugd2lsbCBuZXZlciBleHBpcmVcbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgbGV0IHRoZSByZXNwb25zZSBleHBpcmUgYWZ0ZXIgMSBob3VyXG4gICAgaWYgKGV4cGlyZXMgPT09ICctMScpIHtcbiAgICAgIGV4cGlyZXNJbiA9IDM2MDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGV4cGlyZXNEYXRlID0gbmV3IERhdGUoZXhwaXJlcyk7XG5cbiAgICAgIC8vIGNoZWNrIGlmIHRoZSBkYXRlIGlzIHZhbGlkXG4gICAgICBpZiAoZXhwaXJlc0RhdGUudG9TdHJpbmcoKSAhPT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICAgICAgZXhwaXJlc0luID0gTWF0aC5mbG9vcigoZXhwaXJlc0RhdGUuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKSkgLyAxMDAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwaXJlc0luO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkVGltZXN0YW1wRnJvbVNlY29uZHMgPSAoc2Vjb25kczogbnVtYmVyIHwgbnVsbCkgPT4ge1xuICBpZiAoc2Vjb25kcyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBEYXRlKERhdGUubm93KCkgKyBzZWNvbmRzICogMTAwMCkuZ2V0VGltZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZUJvZHkgPSAoYm9keTogdW5rbm93bik6IEFycmF5QnVmZmVyIHwgVVJMU2VhcmNoUGFyYW1zIHwgQmxvYiB8IEZvcm1EYXRhIHwgc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGlmIChib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKFxuICAgIGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fFxuICAgIGJvZHkgaW5zdGFuY2VvZiBCbG9iIHx8XG4gICAgYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhIHx8XG4gICAgYm9keSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcyB8fFxuICAgIHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJ1xuICApIHtcbiAgICByZXR1cm4gYm9keSBhcyBBcnJheUJ1ZmZlciB8IFVSTFNlYXJjaFBhcmFtcyB8IEJsb2IgfCBGb3JtRGF0YSB8IHN0cmluZztcbiAgfVxuXG4gIGlmICh0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGJvZHkgPT09ICdib29sZWFuJyB8fCBBcnJheS5pc0FycmF5KGJvZHkpKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcmV0dXJuIChib2R5IGFzIGFueSkudG9TdHJpbmcoKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1NZXRob2QgPSAoY29uZmlnOiB7IG1ldGhvZDogTWV0aG9kOyB0cmFuc2ZlclZpYT86ICdHRVQnIHwgJ1BPU1QnIH0pID0+IHtcbiAgaWYgKGNvbmZpZy5tZXRob2QgPT09ICdHUUxfUVVFUlknIHx8IGNvbmZpZy5tZXRob2QgPT09ICdHUUxfTVVUQVRFJykge1xuICAgIGlmICghY29uZmlnLnRyYW5zZmVyVmlhKSB7XG4gICAgICByZXR1cm4gJ1BPU1QnO1xuICAgIH1cblxuICAgIHJldHVybiBjb25maWcudHJhbnNmZXJWaWE7XG4gIH1cblxuICByZXR1cm4gY29uZmlnLm1ldGhvZDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZXRlY3RDb250ZW50VHlwZUhlYWRlciA9IChib2R5OiB1bmtub3duKSA9PiB7XG4gIC8vIEFuIGVtcHR5IGJvZHkgaGFzIG5vIGNvbnRlbnQgdHlwZS5cbiAgaWYgKGJvZHkgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBGb3JtRGF0YSBib2RpZXMgcmVseSBvbiB0aGUgYnJvd3NlcidzIGNvbnRlbnQgdHlwZSBhc3NpZ25tZW50LlxuICBpZiAoYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gQmxvYnMgdXN1YWxseSBoYXZlIHRoZWlyIG93biBjb250ZW50IHR5cGUuIElmIGl0IGRvZXNuJ3QsIHRoZW5cbiAgLy8gbm8gdHlwZSBjYW4gYmUgaW5mZXJyZWQuXG4gIGlmIChib2R5IGluc3RhbmNlb2YgQmxvYikge1xuICAgIHJldHVybiBib2R5LnR5cGUgfHwgbnVsbDtcbiAgfVxuICAvLyBBcnJheSBidWZmZXJzIGhhdmUgdW5rbm93biBjb250ZW50cyBhbmQgdGh1cyBubyB0eXBlIGNhbiBiZSBpbmZlcnJlZC5cbiAgaWYgKGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIFRlY2huaWNhbGx5LCBzdHJpbmdzIGNvdWxkIGJlIGEgZm9ybSBvZiBKU09OIGRhdGEsIGJ1dCBpdCdzIHNhZmUgZW5vdWdoXG4gIC8vIHRvIGFzc3VtZSB0aGV5J3JlIHBsYWluIHN0cmluZ3MuXG4gIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gJ3RleHQvcGxhaW4nO1xuICB9XG5cbiAgLy8gQXJyYXlzLCBvYmplY3RzLCBib29sZWFuIGFuZCBudW1iZXJzIHdpbGwgYmUgZW5jb2RlZCBhcyBKU09OLlxuICBpZiAodHlwZW9mIGJvZHkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBib2R5ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgYm9keSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcbiAgfVxuICAvLyBObyB0eXBlIGNvdWxkIGJlIGluZmVycmVkLlxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNIZWFkZXIgPSAoaGVhZGVyczogUmVxdWVzdEhlYWRlcnMsIGhlYWRlcjogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhoZWFkZXJzKS5zb21lKChrZXkpID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSBoZWFkZXIudG9Mb3dlckNhc2UoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9yRWFjaEhlYWRlciA9IChoZWFkZXJzOiBSZXF1ZXN0SGVhZGVycywgY2FsbGJhY2s6ICh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZykgPT4gdm9pZCkgPT4ge1xuICBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBjYWxsYmFjayhrZXksIHZhbHVlKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VBbGxYaHJSZXNwb25zZUhlYWRlcnMgPSAoeGhyOiBYTUxIdHRwUmVxdWVzdCkgPT4ge1xuICBjb25zdCBoZWFkZXJzID0geGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpO1xuICBjb25zdCBwYXJzZWRIZWFkZXJzOiBSZXF1ZXN0SGVhZGVycyA9IHt9O1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBoZWFkZXJzLnNwbGl0KCdcXG4nKSkge1xuICAgIGNvbnN0IGluZGV4ID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgY29uc3QgbmFtZSA9IGxpbmUuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgY29uc3Qga2V5ID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgdmFsdWUgPSBsaW5lLnNsaWNlKGluZGV4ICsgMSkudHJpbSgpO1xuXG4gICAgICBwYXJzZWRIZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyc2VkSGVhZGVycztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZXNwb25zZVVybCA9ICh4aHI6IFhNTEh0dHBSZXF1ZXN0KTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGlmICgncmVzcG9uc2VVUkwnIGluIHhociAmJiB4aHIucmVzcG9uc2VVUkwpIHtcbiAgICByZXR1cm4geGhyLnJlc3BvbnNlVVJMO1xuICB9XG4gIGlmICgvXlgtUmVxdWVzdC1VUkw6L20udGVzdCh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKSB7XG4gICAgcmV0dXJuIHhoci5nZXRSZXNwb25zZUhlYWRlcignWC1SZXF1ZXN0LVVSTCcpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJldHJ5UmVxdWVzdDogUmVxdWVzdFJldHJ5Rm4gPSAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRSZXRyeURlbGF5ID0gMTAwMCArIDEwMDAgKiBjb25maWcuY3VycmVudFJldHJ5Q291bnQ7XG5cbiAgaWYgKGNvbmZpZy5jdXJyZW50UmV0cnlDb3VudCA+IDMpIHtcbiAgICByZXR1cm4geyByZXRyeTogZmFsc2UgfTtcbiAgfVxuXG4gIGlmICghaXNSZXF1ZXN0RXJyb3IoY29uZmlnLmVycm9yKSkge1xuICAgIHJldHVybiB7IHJldHJ5OiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgeyBzdGF0dXMsIGRldGFpbCB9ID0gY29uZmlnLmVycm9yO1xuXG4gIC8vIFJldHJ5IG9uIDV4eCBlcnJvcnNcbiAgaWYgKHN0YXR1cyA+PSA1MDApIHtcbiAgICAvLyBEb24ndCByZXRyeSBpZiBhIHJlcXVlc3RlZCBwYWdlIGlzIG91dCBvZiByYW5nZVxuICAgIGlmIChpc1N5bWZvbnlQYWdlcmZhbnRhT3V0T2ZSYW5nZUVycm9yKGRldGFpbCkpIHtcbiAgICAgIHJldHVybiB7IHJldHJ5OiBmYWxzZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHJldHJ5OiB0cnVlLCBkZWxheTogZGVmYXVsdFJldHJ5RGVsYXkgfTtcbiAgfVxuXG4gIC8vIFJldHJ5IG9uIDQwOCBvciA0MjUgZXJyb3JzXG4gIGlmIChzdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLlJlcXVlc3RUaW1lb3V0IHx8IHN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuVG9vRWFybHkpIHtcbiAgICByZXR1cm4geyByZXRyeTogdHJ1ZSwgZGVsYXk6IGRlZmF1bHRSZXRyeURlbGF5IH07XG4gIH1cblxuICAvLyBSZXRyeSBvbiA0MjkgZXJyb3JzXG4gIGlmIChzdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLlRvb01hbnlSZXF1ZXN0cykge1xuICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPVxuICAgICAgY29uZmlnLmhlYWRlcnNbJ3JldHJ5LWFmdGVyJ10gfHxcbiAgICAgIGNvbmZpZy5oZWFkZXJzWydSZXRyeS1BZnRlciddIHx8XG4gICAgICBjb25maWcuaGVhZGVyc1sneC1yZXRyeS1hZnRlciddIHx8XG4gICAgICBjb25maWcuaGVhZGVyc1snWC1SZXRyeS1BZnRlciddO1xuXG4gICAgaWYgKHJldHJ5QWZ0ZXIpIHtcbiAgICAgIGNvbnN0IGRlbGF5ID0gcGFyc2VJbnQocmV0cnlBZnRlcikgKiAxMDAwO1xuICAgICAgcmV0dXJuIHsgcmV0cnk6IHRydWUsIGRlbGF5OiBOdW1iZXIuaXNOYU4oZGVsYXkpID8gZGVmYXVsdFJldHJ5RGVsYXkgOiBkZWxheSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHJldHJ5OiB0cnVlLCBkZWxheTogZGVmYXVsdFJldHJ5RGVsYXkgfTtcbiAgfVxuXG4gIC8vIENvZGUgMCB1c3VhbGx5IG1lYW5zIHRoZSBpbnRlcm5ldCBjb25uZWN0aW9uIGlzIGRvd24uIFdlIHJldHJ5IGluIHRoaXMgY2FzZS5cbiAgLy8gSXQgY291bGQgYWxzbyBiZSBhIENPUlMgaXNzdWUgYnV0IHRoYXQgc2hvdWxkIG5vdCBiZSB0aGUgY2FzZSBpbiBwcm9kdWN0aW9uLlxuICBpZiAoc3RhdHVzID09PSAwKSB7XG4gICAgcmV0dXJuIHsgcmV0cnk6IHRydWUsIGRlbGF5OiBkZWZhdWx0UmV0cnlEZWxheSB9O1xuICB9XG5cbiAgcmV0dXJuIHsgcmV0cnk6IGZhbHNlIH07XG59O1xuXG5leHBvcnQgY29uc3QgZW51bSBIdHRwU3RhdHVzQ29kZSB7XG4gIFVua25vd24gPSAwLFxuXG4gIENvbnRpbnVlID0gMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHMgPSAxMDEsXG4gIFByb2Nlc3NpbmcgPSAxMDIsXG4gIEVhcmx5SGludHMgPSAxMDMsXG5cbiAgT2sgPSAyMDAsXG4gIENyZWF0ZWQgPSAyMDEsXG4gIEFjY2VwdGVkID0gMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24gPSAyMDMsXG4gIE5vQ29udGVudCA9IDIwNCxcbiAgUmVzZXRDb250ZW50ID0gMjA1LFxuICBQYXJ0aWFsQ29udGVudCA9IDIwNixcbiAgTXVsdGlTdGF0dXMgPSAyMDcsXG4gIEFscmVhZHlSZXBvcnRlZCA9IDIwOCxcbiAgSW1Vc2VkID0gMjI2LFxuXG4gIE11bHRpcGxlQ2hvaWNlcyA9IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseSA9IDMwMSxcbiAgRm91bmQgPSAzMDIsXG4gIFNlZU90aGVyID0gMzAzLFxuICBOb3RNb2RpZmllZCA9IDMwNCxcbiAgVXNlUHJveHkgPSAzMDUsXG4gIFVudXNlZCA9IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3QgPSAzMDcsXG4gIFBlcm1hbmVudFJlZGlyZWN0ID0gMzA4LFxuXG4gIEJhZFJlcXVlc3QgPSA0MDAsXG4gIFVuYXV0aG9yaXplZCA9IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkID0gNDAyLFxuICBGb3JiaWRkZW4gPSA0MDMsXG4gIE5vdEZvdW5kID0gNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkID0gNDA1LFxuICBOb3RBY2NlcHRhYmxlID0gNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQgPSA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0ID0gNDA4LFxuICBDb25mbGljdCA9IDQwOSxcbiAgR29uZSA9IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQgPSA0MTEsXG4gIFByZWNvbmRpdGlvbkZhaWxlZCA9IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlID0gNDEzLFxuICBVcmlUb29Mb25nID0gNDE0LFxuICBVbnN1cHBvcnRlZE1lZGlhVHlwZSA9IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZSA9IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQgPSA0MTcsXG4gIEltQVRlYXBvdCA9IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0ID0gNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5ID0gNDIyLFxuICBMb2NrZWQgPSA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3kgPSA0MjQsXG4gIFRvb0Vhcmx5ID0gNDI1LFxuICBVcGdyYWRlUmVxdWlyZWQgPSA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkID0gNDI4LFxuICBUb29NYW55UmVxdWVzdHMgPSA0MjksXG4gIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSA9IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMgPSA0NTEsXG5cbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvciA9IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQgPSA1MDEsXG4gIEJhZEdhdGV3YXkgPSA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZSA9IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQgPSA1MDQsXG4gIEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkID0gNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXMgPSA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2UgPSA1MDcsXG4gIExvb3BEZXRlY3RlZCA9IDUwOCxcbiAgTm90RXh0ZW5kZWQgPSA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkID0gNTExLFxufVxuIl19
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export * from './symfony.types';
|
|
2
|
-
export * from './symfony.utils';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvc3ltZm9ueS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3N5bWZvbnkudHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zeW1mb255LnV0aWxzJztcbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltZm9ueS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9zeW1mb255L3N5bWZvbnkudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBTdGF0dXNDb2RlIH0gZnJvbSAnLi4vcmVxdWVzdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ltZm9ueUVycm9yVHJhY2Uge1xuICBhcmdzOiBzdHJpbmdbXTtcbiAgY2xhc3M6IHN0cmluZztcbiAgZmlsZTogc3RyaW5nO1xuICBmdW5jdGlvbjogc3RyaW5nO1xuICBsaW5lOiBudW1iZXI7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICBzaG9ydF9jbGFzczogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ltZm9ueUVycm9yIHtcbiAgY2xhc3M6IHN0cmluZztcbiAgZGV0YWlsOiBzdHJpbmc7XG4gIHN0YXR1czogSHR0cFN0YXR1c0NvZGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRyYWNlOiBTeW1mb255RXJyb3JUcmFjZVtdO1xuICB0eXBlOiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
export const isSymfonyError = (error) => {
|
|
2
|
-
if (!error || typeof error !== 'object') {
|
|
3
|
-
return false;
|
|
4
|
-
}
|
|
5
|
-
const symfonyError = error;
|
|
6
|
-
return (symfonyError.class !== undefined &&
|
|
7
|
-
symfonyError.detail !== undefined &&
|
|
8
|
-
symfonyError.status !== undefined &&
|
|
9
|
-
symfonyError.title !== undefined &&
|
|
10
|
-
symfonyError.trace !== undefined &&
|
|
11
|
-
symfonyError.type !== undefined);
|
|
12
|
-
};
|
|
13
|
-
export const isSymfonyPagerfantaOutOfRangeError = (error) => {
|
|
14
|
-
if (!isSymfonyError(error)) {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
return error.class.startsWith('Pagerfanta') && error.class.endsWith('OutOfRangeCurrentPageException');
|
|
18
|
-
};
|
|
19
|
-
export const isSymfonyFormViolationListError = (error) => {
|
|
20
|
-
return typeof error === 'object' && error !== null && 'violations' in error;
|
|
21
|
-
};
|
|
22
|
-
export const isSymfonyListError = (error) => {
|
|
23
|
-
return (!!error &&
|
|
24
|
-
typeof error === 'object' &&
|
|
25
|
-
Array.isArray(error) &&
|
|
26
|
-
!!error.length &&
|
|
27
|
-
'message' in error[0] &&
|
|
28
|
-
'propertyPath' in error[0] &&
|
|
29
|
-
'invalidValue' in error[0]);
|
|
30
|
-
};
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltZm9ueS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9zeW1mb255L3N5bWZvbnkudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBYyxFQUF5QixFQUFFO0lBQ3RFLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsS0FBcUIsQ0FBQztJQUUzQyxPQUFPLENBQ0wsWUFBWSxDQUFDLEtBQUssS0FBSyxTQUFTO1FBQ2hDLFlBQVksQ0FBQyxNQUFNLEtBQUssU0FBUztRQUNqQyxZQUFZLENBQUMsTUFBTSxLQUFLLFNBQVM7UUFDakMsWUFBWSxDQUFDLEtBQUssS0FBSyxTQUFTO1FBQ2hDLFlBQVksQ0FBQyxLQUFLLEtBQUssU0FBUztRQUNoQyxZQUFZLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FDaEMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLENBQUMsS0FBYyxFQUF5QixFQUFFO0lBQzFGLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7QUFDeEcsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsQ0FBQyxLQUFjLEVBQWtDLEVBQUU7SUFDaEcsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDO0FBQzlFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBYyxFQUFnQyxFQUFFO0lBQ2pGLE9BQU8sQ0FDTCxDQUFDLENBQUMsS0FBSztRQUNQLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDcEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQ2QsU0FBUyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckIsY0FBYyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUIsY0FBYyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDM0IsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1WaW9sYXRpb25MaXN0VmlldywgRm9ybVZpb2xhdGlvblZpZXcgfSBmcm9tICdAZXRobGV0ZS90eXBlcyc7XG5pbXBvcnQgeyBTeW1mb255RXJyb3IgfSBmcm9tICcuL3N5bWZvbnkudHlwZXMnO1xuXG5leHBvcnQgY29uc3QgaXNTeW1mb255RXJyb3IgPSAoZXJyb3I6IHVua25vd24pOiBlcnJvciBpcyBTeW1mb255RXJyb3IgPT4ge1xuICBpZiAoIWVycm9yIHx8IHR5cGVvZiBlcnJvciAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzeW1mb255RXJyb3IgPSBlcnJvciBhcyBTeW1mb255RXJyb3I7XG5cbiAgcmV0dXJuIChcbiAgICBzeW1mb255RXJyb3IuY2xhc3MgIT09IHVuZGVmaW5lZCAmJlxuICAgIHN5bWZvbnlFcnJvci5kZXRhaWwgIT09IHVuZGVmaW5lZCAmJlxuICAgIHN5bWZvbnlFcnJvci5zdGF0dXMgIT09IHVuZGVmaW5lZCAmJlxuICAgIHN5bWZvbnlFcnJvci50aXRsZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgc3ltZm9ueUVycm9yLnRyYWNlICE9PSB1bmRlZmluZWQgJiZcbiAgICBzeW1mb255RXJyb3IudHlwZSAhPT0gdW5kZWZpbmVkXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTeW1mb255UGFnZXJmYW50YU91dE9mUmFuZ2VFcnJvciA9IChlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIFN5bWZvbnlFcnJvciA9PiB7XG4gIGlmICghaXNTeW1mb255RXJyb3IoZXJyb3IpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGVycm9yLmNsYXNzLnN0YXJ0c1dpdGgoJ1BhZ2VyZmFudGEnKSAmJiBlcnJvci5jbGFzcy5lbmRzV2l0aCgnT3V0T2ZSYW5nZUN1cnJlbnRQYWdlRXhjZXB0aW9uJyk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTeW1mb255Rm9ybVZpb2xhdGlvbkxpc3RFcnJvciA9IChlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIEZvcm1WaW9sYXRpb25MaXN0VmlldyA9PiB7XG4gIHJldHVybiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmIGVycm9yICE9PSBudWxsICYmICd2aW9sYXRpb25zJyBpbiBlcnJvcjtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1N5bWZvbnlMaXN0RXJyb3IgPSAoZXJyb3I6IHVua25vd24pOiBlcnJvciBpcyBGb3JtVmlvbGF0aW9uVmlld1tdID0+IHtcbiAgcmV0dXJuIChcbiAgICAhIWVycm9yICYmXG4gICAgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJlxuICAgIEFycmF5LmlzQXJyYXkoZXJyb3IpICYmXG4gICAgISFlcnJvci5sZW5ndGggJiZcbiAgICAnbWVzc2FnZScgaW4gZXJyb3JbMF0gJiZcbiAgICAncHJvcGVydHlQYXRoJyBpbiBlcnJvclswXSAmJlxuICAgICdpbnZhbGlkVmFsdWUnIGluIGVycm9yWzBdXG4gICk7XG59O1xuIl19
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { Injector, assertInInjectionContext, computed, inject } from '@angular/core';
|
|
2
|
-
import { toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
3
|
-
import { computedTillTruthy, createDestroy } from '@ethlete/core';
|
|
4
|
-
import { of, pairwise, startWith, switchMap, takeUntil, tap } from 'rxjs';
|
|
5
|
-
import { extractQuery, filterQueryStates, isQuery, isQueryStateFailure, isQueryStateLoading, isQueryStateSuccess, } from '../query';
|
|
6
|
-
export const addQueryContainerHandling = (obs, valueFn, config) => {
|
|
7
|
-
assertInInjectionContext(addQueryContainerHandling);
|
|
8
|
-
const { abortPrevious, abortOnDestroy, stopPreviousPolling } = config ?? {};
|
|
9
|
-
const injector = inject(Injector);
|
|
10
|
-
const destroy$ = createDestroy();
|
|
11
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
-
const tNode = injector._tNode;
|
|
13
|
-
const componentId = tNode?.index ?? -1;
|
|
14
|
-
obs
|
|
15
|
-
.pipe(takeUntil(destroy$), startWith(null), pairwise(), tap(([prevQuery, currQuery]) => {
|
|
16
|
-
const cleanQuery = (q) => {
|
|
17
|
-
if (!q?._hasDependents() && ((abortPrevious === undefined && q?.canBeCached) || abortPrevious)) {
|
|
18
|
-
q?.abort();
|
|
19
|
-
}
|
|
20
|
-
if (!q?._hasDependents() &&
|
|
21
|
-
((stopPreviousPolling === undefined && q?.canBeCached) || stopPreviousPolling) &&
|
|
22
|
-
q?.isPolling) {
|
|
23
|
-
q?.stopPolling();
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
if ((isQuery(prevQuery) || prevQuery === null) && (isQuery(currQuery) || currQuery === null)) {
|
|
27
|
-
prevQuery?._removeDependent(componentId);
|
|
28
|
-
currQuery?._addDependent(componentId);
|
|
29
|
-
cleanQuery(prevQuery);
|
|
30
|
-
}
|
|
31
|
-
else if ((Array.isArray(prevQuery) || prevQuery === null) &&
|
|
32
|
-
(Array.isArray(currQuery) || currQuery === null)) {
|
|
33
|
-
if (prevQuery) {
|
|
34
|
-
for (let i = 0; i < prevQuery.length; i++) {
|
|
35
|
-
prevQuery[i]?._removeDependent(componentId);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
if (currQuery) {
|
|
39
|
-
for (let i = 0; i < currQuery.length; i++) {
|
|
40
|
-
currQuery[i]?._addDependent(componentId);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
if (prevQuery) {
|
|
44
|
-
for (let i = 0; i < prevQuery.length; i++) {
|
|
45
|
-
cleanQuery(prevQuery[i]);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
else if ((isQuery(prevQuery) && Array.isArray(currQuery)) ||
|
|
50
|
-
(Array.isArray(prevQuery) && isQuery(currQuery))) {
|
|
51
|
-
throw new Error('Cannot mix queries and arrays of queries in the same query container.');
|
|
52
|
-
}
|
|
53
|
-
}))
|
|
54
|
-
.subscribe();
|
|
55
|
-
destroy$.subscribe(() => {
|
|
56
|
-
const query = valueFn();
|
|
57
|
-
const handleQuery = (q) => {
|
|
58
|
-
q?._removeDependent(componentId);
|
|
59
|
-
if (!q?._hasDependents() && ((q?.canBeCached && abortOnDestroy === undefined) || abortOnDestroy)) {
|
|
60
|
-
q?.abort();
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
if (isQuery(query)) {
|
|
64
|
-
handleQuery(query);
|
|
65
|
-
}
|
|
66
|
-
else if (Array.isArray(query)) {
|
|
67
|
-
for (const q of query) {
|
|
68
|
-
handleQuery(q);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
};
|
|
73
|
-
export function toQuerySignal(source, options) {
|
|
74
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
75
|
-
const s = toSignal(source, options);
|
|
76
|
-
addQueryContainerHandling(source, () => s(), options);
|
|
77
|
-
return s;
|
|
78
|
-
}
|
|
79
|
-
export function queryComputed(computation, options) {
|
|
80
|
-
const c = computed(computation, options);
|
|
81
|
-
const obs = toObservable(c, options);
|
|
82
|
-
addQueryContainerHandling(obs, () => c(), options);
|
|
83
|
-
return c;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Creates a signal that will only be reactive until the first query is created.
|
|
87
|
-
* All subsequent changes inside the computation will be ignored.
|
|
88
|
-
*/
|
|
89
|
-
export function queryComputedTillTruthy(computation, options) {
|
|
90
|
-
const c = computedTillTruthy(computed(computation, options));
|
|
91
|
-
const obs = toObservable(c, options);
|
|
92
|
-
addQueryContainerHandling(obs, () => c(), options);
|
|
93
|
-
return c;
|
|
94
|
-
}
|
|
95
|
-
export function queryArrayComputed(computation, options) {
|
|
96
|
-
const c = computed(computation, options);
|
|
97
|
-
const obs = toObservable(c, options);
|
|
98
|
-
addQueryContainerHandling(obs, () => c(), options);
|
|
99
|
-
return c;
|
|
100
|
-
}
|
|
101
|
-
export function toQuerySubject(source, options) {
|
|
102
|
-
const obs = toObservable(source, options);
|
|
103
|
-
addQueryContainerHandling(obs, () => source(), options);
|
|
104
|
-
return obs;
|
|
105
|
-
}
|
|
106
|
-
export function queryStateSignal(source, options) {
|
|
107
|
-
const { cacheResponse } = options ?? {};
|
|
108
|
-
return toSignal(toObservable(source).pipe(switchMap((q) => extractQuery(q)?.state$ ?? of(null)), switchMap((state) => {
|
|
109
|
-
if (cacheResponse) {
|
|
110
|
-
return of(state).pipe(filterQueryStates(["SUCCESS" /* QueryStateType.Success */, "FAILURE" /* QueryStateType.Failure */]));
|
|
111
|
-
}
|
|
112
|
-
return of(state);
|
|
113
|
-
})), {
|
|
114
|
-
initialValue: null,
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
export function queryStateResponseSignal(source, options) {
|
|
118
|
-
const s = queryStateSignal(source, options);
|
|
119
|
-
return computed(() => {
|
|
120
|
-
const state = s();
|
|
121
|
-
return isQueryStateSuccess(state) ? state.response : null;
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
export function queryStateErrorSignal(source) {
|
|
125
|
-
const s = queryStateSignal(source);
|
|
126
|
-
return computed(() => {
|
|
127
|
-
const state = s();
|
|
128
|
-
return isQueryStateFailure(state) ? state.error : null;
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
export function queryStateLoadingSignal(source) {
|
|
132
|
-
const s = queryStateSignal(source);
|
|
133
|
-
return computed(() => {
|
|
134
|
-
const state = s();
|
|
135
|
-
return isQueryStateLoading(state) ? state : null;
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi91dGlscy9kYXRhLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBeUIsUUFBUSxFQUFVLHdCQUF3QixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUF3QyxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQTRCLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BHLE9BQU8sRUFNTCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLG1CQUFtQixHQUNwQixNQUFNLFVBQVUsQ0FBQztBQStCbEIsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FDdkMsR0FBNkMsRUFDN0MsT0FBdUQsRUFDdkQsTUFBNkIsRUFDN0IsRUFBRTtJQUNGLHdCQUF3QixDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFFcEQsTUFBTSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBRTVFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxNQUFNLFFBQVEsR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUVqQyw4REFBOEQ7SUFDOUQsTUFBTSxLQUFLLEdBQUksUUFBZ0IsQ0FBQyxNQUFNLENBQUM7SUFDdkMsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FB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O1FBQ25CLE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBRWxCLE9BQU8sbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQXlELE1BQVM7SUFDdkcsTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFbkMsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ25CLE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBRWxCLE9BQU8sbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENyZWF0ZUNvbXB1dGVkT3B0aW9ucywgSW5qZWN0b3IsIFNpZ25hbCwgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0LCBjb21wdXRlZCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb09ic2VydmFibGVPcHRpb25zLCBUb1NpZ25hbE9wdGlvbnMsIHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBjb21wdXRlZFRpbGxUcnV0aHksIGNyZWF0ZURlc3Ryb3kgfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmliYWJsZSwgb2YsIHBhaXJ3aXNlLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEFueVF1ZXJ5LFxuICBBbnlRdWVyeUNvbGxlY3Rpb24sXG4gIFF1ZXJ5T2YsXG4gIFF1ZXJ5U3RhdGUsXG4gIFF1ZXJ5U3RhdGVUeXBlLFxuICBleHRyYWN0UXVlcnksXG4gIGZpbHRlclF1ZXJ5U3RhdGVzLFxuICBpc1F1ZXJ5LFxuICBpc1F1ZXJ5U3RhdGVGYWlsdXJlLFxuICBpc1F1ZXJ5U3RhdGVMb2FkaW5nLFxuICBpc1F1ZXJ5U3RhdGVTdWNjZXNzLFxufSBmcm9tICcuLi9xdWVyeSc7XG5pbXBvcnQgeyBRdWVyeURhdGFPZiB9IGZyb20gJy4uL3F1ZXJ5LWNyZWF0b3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5Q29udGFpbmVyQ29uZmlnIHtcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHByZXZpb3VzIHF1ZXJ5IHdpbGwgYmUgYWJvcnRlZCB3aGVuIGEgbmV3IHF1ZXJ5IGlzIHB1c2hlZCBpbnRvIHRoZSBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IHRydWUgLy8gT25seSBpZiB0aGUgcmVxdWVzdCBjYW4gYmUgY2FjaGVkIChHRVQsIE9QVElPTlMsIEhFQUQgYW5kIEdRTF9RVUVSWSkuIE90aGVyd2lzZSBmYWxzZS5cbiAgICovXG4gIGFib3J0UHJldmlvdXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBxdWVyeSB3aWxsIGJlIGFib3J0ZWQgd2hlbiB0aGUgY29udGFpbmVyIGlzIGRlc3Ryb3llZC5cbiAgICogQGRlZmF1bHQgdHJ1ZSAvLyBPbmx5IGlmIHRoZSByZXF1ZXN0IGNhbiBiZSBjYWNoZWQgKEdFVCwgT1BUSU9OUywgSEVBRCBhbmQgR1FMX1FVRVJZKS4gT3RoZXJ3aXNlIGZhbHNlLlxuICAgKi9cbiAgYWJvcnRPbkRlc3Ryb3k/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBwcmV2aW91cyBwb2xsaW5nIHdpbGwgYmUgc3RvcHBlZCB3aGVuIGEgbmV3IHF1ZXJ5IGlzIHB1c2hlZCBpbnRvIHRoZSBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IHRydWUgLy8gT25seSBpZiB0aGUgcXVlcnkgaGFzIG5vIG90aGVyIGRlcGVuZGVudHMgYW5kIHRoZSByZXF1ZXN0IGNhbiBiZSBjYWNoZWQgKEdFVCwgT1BUSU9OUywgSEVBRCBhbmQgR1FMX1FVRVJZKS4gT3RoZXJ3aXNlIGZhbHNlLlxuICAgKi9cbiAgc3RvcFByZXZpb3VzUG9sbGluZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlGaWx0ZXJDb25maWcge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSBjYWNoZWQgdW50aWwgdGhlIG5leHQgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgb3IgdGhlIHF1ZXJ5IGZhaWxzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2FjaGVSZXNwb25zZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nID0gKFxuICBvYnM6IE9ic2VydmFibGU8QW55UXVlcnkgfCBBbnlRdWVyeVtdIHwgbnVsbD4sXG4gIHZhbHVlRm46ICgpID0+IEFueVF1ZXJ5IHwgQW55UXVlcnlbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGNvbmZpZz86IFF1ZXJ5Q29udGFpbmVyQ29uZmlnLFxuKSA9PiB7XG4gIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nKTtcblxuICBjb25zdCB7IGFib3J0UHJldmlvdXMsIGFib3J0T25EZXN0cm95LCBzdG9wUHJldmlvdXNQb2xsaW5nIH0gPSBjb25maWcgPz8ge307XG5cbiAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBjb25zdCBkZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjb25zdCB0Tm9kZSA9IChpbmplY3RvciBhcyBhbnkpLl90Tm9kZTtcbiAgY29uc3QgY29tcG9uZW50SWQgPSB0Tm9kZT8uaW5kZXggPz8gLTE7XG5cbiAgb2JzXG4gICAgLnBpcGUoXG4gICAgICB0YWtlVW50aWwoZGVzdHJveSQpLFxuICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgcGFpcndpc2UoKSxcbiAgICAgIHRhcCgoW3ByZXZRdWVyeSwgY3VyclF1ZXJ5XSkgPT4ge1xuICAgICAgICBjb25zdCBjbGVhblF1ZXJ5ID0gKHE6IEFueVF1ZXJ5IHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICAgIGlmICghcT8uX2hhc0RlcGVuZGVudHMoKSAmJiAoKGFib3J0UHJldmlvdXMgPT09IHVuZGVmaW5lZCAmJiBxPy5jYW5CZUNhY2hlZCkgfHwgYWJvcnRQcmV2aW91cykpIHtcbiAgICAgICAgICAgIHE/LmFib3J0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXE/Ll9oYXNEZXBlbmRlbnRzKCkgJiZcbiAgICAgICAgICAgICgoc3RvcFByZXZpb3VzUG9sbGluZyA9PT0gdW5kZWZpbmVkICYmIHE/LmNhbkJlQ2FjaGVkKSB8fCBzdG9wUHJldmlvdXNQb2xsaW5nKSAmJlxuICAgICAgICAgICAgcT8uaXNQb2xsaW5nXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBxPy5zdG9wUG9sbGluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoKGlzUXVlcnkocHJldlF1ZXJ5KSB8fCBwcmV2UXVlcnkgPT09IG51bGwpICYmIChpc1F1ZXJ5KGN1cnJRdWVyeSkgfHwgY3VyclF1ZXJ5ID09PSBudWxsKSkge1xuICAgICAgICAgIHByZXZRdWVyeT8uX3JlbW92ZURlcGVuZGVudChjb21wb25lbnRJZCk7XG4gICAgICAgICAgY3VyclF1ZXJ5Py5fYWRkRGVwZW5kZW50KGNvbXBvbmVudElkKTtcblxuICAgICAgICAgIGNsZWFuUXVlcnkocHJldlF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAoQXJyYXkuaXNBcnJheShwcmV2UXVlcnkpIHx8IHByZXZRdWVyeSA9PT0gbnVsbCkgJiZcbiAgICAgICAgICAoQXJyYXkuaXNBcnJheShjdXJyUXVlcnkpIHx8IGN1cnJRdWVyeSA9PT0gbnVsbClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHByZXZRdWVyeSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2UXVlcnkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgcHJldlF1ZXJ5W2ldPy5fcmVtb3ZlRGVwZW5kZW50KGNvbXBvbmVudElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY3VyclF1ZXJ5KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJRdWVyeS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjdXJyUXVlcnlbaV0/Ll9hZGREZXBlbmRlbnQoY29tcG9uZW50SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwcmV2UXVlcnkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldlF1ZXJ5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNsZWFuUXVlcnkocHJldlF1ZXJ5W2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgKGlzUXVlcnkocHJldlF1ZXJ5KSAmJiBBcnJheS5pc0FycmF5KGN1cnJRdWVyeSkpIHx8XG4gICAgICAgICAgKEFycmF5LmlzQXJyYXkocHJldlF1ZXJ5KSAmJiBpc1F1ZXJ5KGN1cnJRdWVyeSkpXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG1peCBxdWVyaWVzIGFuZCBhcnJheXMgb2YgcXVlcmllcyBpbiB0aGUgc2FtZSBxdWVyeSBjb250YWluZXIuJyk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgIClcbiAgICAuc3Vic2NyaWJlKCk7XG5cbiAgZGVzdHJveSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICBjb25zdCBxdWVyeSA9IHZhbHVlRm4oKTtcblxuICAgIGNvbnN0IGhhbmRsZVF1ZXJ5ID0gKHE6IEFueVF1ZXJ5IHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgcT8uX3JlbW92ZURlcGVuZGVudChjb21wb25lbnRJZCk7XG5cbiAgICAgIGlmICghcT8uX2hhc0RlcGVuZGVudHMoKSAmJiAoKHE/LmNhbkJlQ2FjaGVkICYmIGFib3J0T25EZXN0cm95ID09PSB1bmRlZmluZWQpIHx8IGFib3J0T25EZXN0cm95KSkge1xuICAgICAgICBxPy5hYm9ydCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoaXNRdWVyeShxdWVyeSkpIHtcbiAgICAgIGhhbmRsZVF1ZXJ5KHF1ZXJ5KTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocXVlcnkpKSB7XG4gICAgICBmb3IgKGNvbnN0IHEgb2YgcXVlcnkpIHtcbiAgICAgICAgaGFuZGxlUXVlcnkocSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1F1ZXJ5U2lnbmFsPFQgZXh0ZW5kcyBBbnlRdWVyeSB8IG51bGw+KFxuICBzb3VyY2U6IE9ic2VydmFibGU8VD4gfCBTdWJzY3JpYmFibGU8VD4sXG4pOiBTaWduYWw8VCB8IHVuZGVmaW5lZD47XG5leHBvcnQgZnVuY3Rpb24gdG9RdWVyeVNpZ25hbDxUIGV4dGVuZHMgQW55UXVlcnkgfCBudWxsPihcbiAgc291cmNlOiBPYnNlcnZhYmxlPFQ+IHwgU3Vic2NyaWJhYmxlPFQ+LFxuICBvcHRpb25zOiBOb0luZmVyPFRvU2lnbmFsT3B0aW9uczxUIHwgdW5kZWZpbmVkPj4gJiB7XG4gICAgaW5pdGlhbFZhbHVlPzogdW5kZWZpbmVkO1xuICAgIHJlcXVpcmVTeW5jPzogZmFsc2U7XG4gIH0gJiBRdWVyeUNvbnRhaW5lckNvbmZpZyxcbik6IFNpZ25hbDxUIHwgdW5kZWZpbmVkPjtcbmV4cG9ydCBmdW5jdGlvbiB0b1F1ZXJ5U2lnbmFsPFQgZXh0ZW5kcyBBbnlRdWVyeSB8IG51bGw+KFxuICBzb3VyY2U6IE9ic2VydmFibGU8VD4gfCBTdWJzY3JpYmFibGU8VD4sXG4gIG9wdGlvbnM6IE5vSW5mZXI8VG9TaWduYWxPcHRpb25zPFQgfCBudWxsPj4gJiB7XG4gICAgaW5pdGlhbFZhbHVlPzogbnVsbDtcbiAgICByZXF1aXJlU3luYz86IGZhbHNlO1xuICB9ICYgUXVlcnlDb250YWluZXJDb25maWcsXG4pOiBTaWduYWw8VCB8IG51bGw+O1xuZXhwb3J0IGZ1bmN0aW9uIHRvUXVlcnlTaWduYWw8VCBleHRlbmRzIEFueVF1ZXJ5IHwgbnVsbD4oXG4gIHNvdXJjZTogT2JzZXJ2YWJsZTxUPiB8IFN1YnNjcmliYWJsZTxUPixcbiAgb3B0aW9uczogTm9JbmZlcjxUb1NpZ25hbE9wdGlvbnM8VD4+ICYge1xuICAgIGluaXRpYWxWYWx1ZT86IHVuZGVmaW5lZDtcbiAgICByZXF1aXJlU3luYzogdHJ1ZTtcbiAgfSAmIFF1ZXJ5Q29udGFpbmVyQ29uZmlnLFxuKTogU2lnbmFsPFQ+O1xuZXhwb3J0IGZ1bmN0aW9uIHRvUXVlcnlTaWduYWw8VCBleHRlbmRzIEFueVF1ZXJ5IHwgbnVsbCwgY29uc3QgVSBleHRlbmRzIFQ+KFxuICBzb3VyY2U6IE9ic2VydmFibGU8VD4gfCBTdWJzY3JpYmFibGU8VD4sXG4gIG9wdGlvbnM6IE5vSW5mZXI8VG9TaWduYWxPcHRpb25zPFQgfCBVPj4gJiB7XG4gICAgaW5pdGlhbFZhbHVlOiBVO1xuICAgIHJlcXVpcmVTeW5jPzogZmFsc2U7XG4gIH0gJiBRdWVyeUNvbnRhaW5lckNvbmZpZyxcbik6IFNpZ25hbDxUIHwgVT47XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1F1ZXJ5U2lnbmFsPFQgZXh0ZW5kcyBBbnlRdWVyeSB8IG51bGwsIFUgPSB1bmRlZmluZWQ+KFxuICBzb3VyY2U6IE9ic2VydmFibGU8VD4gfCBTdWJzY3JpYmFibGU8VD4sXG4gIG9wdGlvbnM/OiBUb1NpZ25hbE9wdGlvbnM8VCB8IFU+ICYgeyBpbml0aWFsVmFsdWU/OiBVIH0gJiBRdWVyeUNvbnRhaW5lckNvbmZpZyxcbik6IFNpZ25hbDxUIHwgVT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjb25zdCBzID0gdG9TaWduYWwoc291cmNlLCBvcHRpb25zIGFzIGFueSk7XG5cbiAgYWRkUXVlcnlDb250YWluZXJIYW5kbGluZyhzb3VyY2UgYXMgT2JzZXJ2YWJsZTxUPiwgKCkgPT4gcygpIGFzIFQsIG9wdGlvbnMpO1xuXG4gIHJldHVybiBzIGFzIFNpZ25hbDxUIHwgVT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUNvbXB1dGVkPFQgZXh0ZW5kcyBBbnlRdWVyeSB8IG51bGw+KFxuICBjb21wdXRhdGlvbjogKCkgPT4gVCxcbiAgb3B0aW9ucz86IENyZWF0ZUNvbXB1dGVkT3B0aW9uczxUPiAmIFF1ZXJ5Q29udGFpbmVyQ29uZmlnICYgVG9PYnNlcnZhYmxlT3B0aW9ucyxcbik6IFNpZ25hbDxUPiB7XG4gIGNvbnN0IGMgPSBjb21wdXRlZChjb21wdXRhdGlvbiwgb3B0aW9ucyk7XG4gIGNvbnN0IG9icyA9IHRvT2JzZXJ2YWJsZShjLCBvcHRpb25zKTtcblxuICBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nKG9icywgKCkgPT4gYygpLCBvcHRpb25zKTtcblxuICByZXR1cm4gYztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2lnbmFsIHRoYXQgd2lsbCBvbmx5IGJlIHJlYWN0aXZlIHVudGlsIHRoZSBmaXJzdCBxdWVyeSBpcyBjcmVhdGVkLlxuICogQWxsIHN1YnNlcXVlbnQgY2hhbmdlcyBpbnNpZGUgdGhlIGNvbXB1dGF0aW9uIHdpbGwgYmUgaWdub3JlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5Q29tcHV0ZWRUaWxsVHJ1dGh5PFQgZXh0ZW5kcyBBbnlRdWVyeSB8IG51bGw+KFxuICBjb21wdXRhdGlvbjogKCkgPT4gVCxcbiAgb3B0aW9ucz86IENyZWF0ZUNvbXB1dGVkT3B0aW9uczxUPiAmIFF1ZXJ5Q29udGFpbmVyQ29uZmlnICYgVG9PYnNlcnZhYmxlT3B0aW9ucyxcbik6IFNpZ25hbDxUIHwgbnVsbD4ge1xuICBjb25zdCBjID0gY29tcHV0ZWRUaWxsVHJ1dGh5KGNvbXB1dGVkKGNvbXB1dGF0aW9uLCBvcHRpb25zKSk7XG4gIGNvbnN0IG9icyA9IHRvT2JzZXJ2YWJsZShjLCBvcHRpb25zKTtcblxuICBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nKG9icywgKCkgPT4gYygpLCBvcHRpb25zKTtcblxuICByZXR1cm4gYztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QXJyYXlDb21wdXRlZDxUIGV4dGVuZHMgQW55UXVlcnlbXSB8IG51bGw+KFxuICBjb21wdXRhdGlvbjogKCkgPT4gVCxcbiAgb3B0aW9ucz86IENyZWF0ZUNvbXB1dGVkT3B0aW9uczxUPiAmIFF1ZXJ5Q29udGFpbmVyQ29uZmlnICYgVG9PYnNlcnZhYmxlT3B0aW9ucyxcbik6IFNpZ25hbDxUPiB7XG4gIGNvbnN0IGMgPSBjb21wdXRlZChjb21wdXRhdGlvbiwgb3B0aW9ucyk7XG4gIGNvbnN0IG9icyA9IHRvT2JzZXJ2YWJsZShjLCBvcHRpb25zKTtcblxuICBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nKG9icywgKCkgPT4gYygpLCBvcHRpb25zKTtcblxuICByZXR1cm4gYztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvUXVlcnlTdWJqZWN0PFQgZXh0ZW5kcyBBbnlRdWVyeSB8IG51bGw+KFxuICBzb3VyY2U6IFNpZ25hbDxUPixcbiAgb3B0aW9ucz86IFRvT2JzZXJ2YWJsZU9wdGlvbnMgJiBRdWVyeUNvbnRhaW5lckNvbmZpZyxcbik6IE9ic2VydmFibGU8VD4ge1xuICBjb25zdCBvYnMgPSB0b09ic2VydmFibGUoc291cmNlLCBvcHRpb25zKTtcblxuICBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nKG9icywgKCkgPT4gc291cmNlKCksIG9wdGlvbnMpO1xuXG4gIHJldHVybiBvYnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVN0YXRlU2lnbmFsPFQgZXh0ZW5kcyBTaWduYWw8QW55UXVlcnkgfCBBbnlRdWVyeUNvbGxlY3Rpb24gfCBudWxsPj4oXG4gIHNvdXJjZTogVCxcbiAgb3B0aW9ucz86IFF1ZXJ5RmlsdGVyQ29uZmlnLFxuKSB7XG4gIGNvbnN0IHsgY2FjaGVSZXNwb25zZSB9ID0gb3B0aW9ucyA/PyB7fTtcblxuICByZXR1cm4gdG9TaWduYWwoXG4gICAgdG9PYnNlcnZhYmxlKHNvdXJjZSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocSkgPT4gZXh0cmFjdFF1ZXJ5KHEpPy5zdGF0ZSQgPz8gb2YobnVsbCkpLFxuICAgICAgc3dpdGNoTWFwKChzdGF0ZSkgPT4ge1xuICAgICAgICBpZiAoY2FjaGVSZXNwb25zZSkge1xuICAgICAgICAgIHJldHVybiBvZihzdGF0ZSkucGlwZShmaWx0ZXJRdWVyeVN0YXRlcyhbUXVlcnlTdGF0ZVR5cGUuU3VjY2VzcywgUXVlcnlTdGF0ZVR5cGUuRmFpbHVyZV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvZihzdGF0ZSk7XG4gICAgICB9KSxcbiAgICApLFxuICAgIHtcbiAgICAgIGluaXRpYWxWYWx1ZTogbnVsbCxcbiAgICB9LFxuICApIGFzIFNpZ25hbDxRdWVyeVN0YXRlPFF1ZXJ5RGF0YU9mPFF1ZXJ5T2Y8UmV0dXJuVHlwZTxUPj4+PiB8IG51bGw+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTdGF0ZVJlc3BvbnNlU2lnbmFsPFQgZXh0ZW5kcyBTaWduYWw8QW55UXVlcnkgfCBBbnlRdWVyeUNvbGxlY3Rpb24gfCBudWxsPj4oXG4gIHNvdXJjZTogVCxcbiAgb3B0aW9ucz86IFF1ZXJ5RmlsdGVyQ29uZmlnLFxuKSB7XG4gIGNvbnN0IHMgPSBxdWVyeVN0YXRlU2lnbmFsKHNvdXJjZSwgb3B0aW9ucyk7XG5cbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IHMoKTtcblxuICAgIHJldHVybiBpc1F1ZXJ5U3RhdGVTdWNjZXNzKHN0YXRlKSA/IHN0YXRlLnJlc3BvbnNlIDogbnVsbDtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVN0YXRlRXJyb3JTaWduYWw8VCBleHRlbmRzIFNpZ25hbDxBbnlRdWVyeSB8IEFueVF1ZXJ5Q29sbGVjdGlvbiB8IG51bGw+Pihzb3VyY2U6IFQpIHtcbiAgY29uc3QgcyA9IHF1ZXJ5U3RhdGVTaWduYWwoc291cmNlKTtcblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gcygpO1xuXG4gICAgcmV0dXJuIGlzUXVlcnlTdGF0ZUZhaWx1cmUoc3RhdGUpID8gc3RhdGUuZXJyb3IgOiBudWxsO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5U3RhdGVMb2FkaW5nU2lnbmFsPFQgZXh0ZW5kcyBTaWduYWw8QW55UXVlcnkgfCBBbnlRdWVyeUNvbGxlY3Rpb24gfCBudWxsPj4oc291cmNlOiBUKSB7XG4gIGNvbnN0IHMgPSBxdWVyeVN0YXRlU2lnbmFsKHNvdXJjZSk7XG5cbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IHMoKTtcblxuICAgIHJldHVybiBpc1F1ZXJ5U3RhdGVMb2FkaW5nKHN0YXRlKSA/IHN0YXRlIDogbnVsbDtcbiAgfSk7XG59XG4iXX0=
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export const deepFreeze = (object) => {
|
|
2
|
-
// check if object is actually an object or frozen
|
|
3
|
-
if (!object || typeof object !== 'object' || Object.isFrozen(object)) {
|
|
4
|
-
return object;
|
|
5
|
-
}
|
|
6
|
-
// Retrieve the property names defined on object
|
|
7
|
-
const propNames = Object.getOwnPropertyNames(object);
|
|
8
|
-
// Freeze properties before freezing self
|
|
9
|
-
for (const name of propNames) {
|
|
10
|
-
const value = object[name];
|
|
11
|
-
if (value && typeof value === 'object') {
|
|
12
|
-
deepFreeze(value);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
return Object.freeze(object);
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcC1mcmVlemUudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi91dGlscy9kZWVwLWZyZWV6ZS51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFvQyxNQUFTLEVBQUUsRUFBRTtJQUN6RSxrREFBa0Q7SUFDbEQsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXJELHlDQUF5QztJQUV6QyxLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQzdCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQixJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxVQUFVLENBQUMsS0FBVSxDQUFDLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGRlZXBGcmVlemUgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihvYmplY3Q6IFQpID0+IHtcbiAgLy8gY2hlY2sgaWYgb2JqZWN0IGlzIGFjdHVhbGx5IGFuIG9iamVjdCBvciBmcm96ZW5cbiAgaWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcgfHwgT2JqZWN0LmlzRnJvemVuKG9iamVjdCkpIHtcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgLy8gUmV0cmlldmUgdGhlIHByb3BlcnR5IG5hbWVzIGRlZmluZWQgb24gb2JqZWN0XG4gIGNvbnN0IHByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG5cbiAgLy8gRnJlZXplIHByb3BlcnRpZXMgYmVmb3JlIGZyZWV6aW5nIHNlbGZcblxuICBmb3IgKGNvbnN0IG5hbWUgb2YgcHJvcE5hbWVzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvYmplY3RbbmFtZV07XG5cbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgZGVlcEZyZWV6ZSh2YWx1ZSBhcyBUKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShvYmplY3QpO1xufTtcbiJdfQ==
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dummy function for providing types while not breaking inference.
|
|
3
|
-
* **This function always returns null.**
|
|
4
|
-
* @see https://github.com/microsoft/TypeScript/issues/26242
|
|
5
|
-
* @returns null
|
|
6
|
-
*/
|
|
7
|
-
export const def = () => null;
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvdXRpbHMvZGVmLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBUyxFQUFFLENBQUMsSUFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRHVtbXkgZnVuY3Rpb24gZm9yIHByb3ZpZGluZyB0eXBlcyB3aGlsZSBub3QgYnJlYWtpbmcgaW5mZXJlbmNlLlxuICogKipUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIG51bGwuKipcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNjI0MlxuICogQHJldHVybnMgbnVsbFxuICovXG5leHBvcnQgY29uc3QgZGVmID0gPERhdGE+KCkgPT4gbnVsbCBhcyB1bmtub3duIGFzIERhdGE7XG4iXX0=
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export * from './data.utils';
|
|
2
|
-
export * from './deep-freeze.util';
|
|
3
|
-
export * from './def.util';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGF0YS51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2RlZXAtZnJlZXplLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWYudXRpbCc7XG4iXX0=
|