@ethlete/query 0.1.0-next.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/README.md +7 -0
- package/esm2020/ethlete-query.mjs +5 -0
- package/esm2020/index.mjs +12 -0
- package/esm2020/lib/auth/auth-provider.types.mjs +2 -0
- package/esm2020/lib/auth/auth-provider.utils.mjs +22 -0
- package/esm2020/lib/auth/basic-auth-provider.mjs +16 -0
- package/esm2020/lib/auth/bearer-auth-provider.mjs +85 -0
- package/esm2020/lib/auth/custom-header-auth-provider.mjs +13 -0
- package/esm2020/lib/auth/index.mjs +6 -0
- package/esm2020/lib/directives/index.mjs +4 -0
- package/esm2020/lib/directives/infinity-query-trigger.directive.mjs +54 -0
- package/esm2020/lib/directives/infinity-query.directive.mjs +129 -0
- package/esm2020/lib/directives/query.directive.mjs +101 -0
- package/esm2020/lib/gql/gql.mjs +23 -0
- package/esm2020/lib/gql/index.mjs +2 -0
- package/esm2020/lib/infinite-query/index.mjs +4 -0
- package/esm2020/lib/infinite-query/infinity-query.mjs +161 -0
- package/esm2020/lib/infinite-query/infinity-query.types.mjs +2 -0
- package/esm2020/lib/infinite-query/infinity-query.utils.mjs +3 -0
- package/esm2020/lib/logger/index.mjs +2 -0
- package/esm2020/lib/logger/logger.mjs +16 -0
- package/esm2020/lib/query/index.mjs +4 -0
- package/esm2020/lib/query/query.mjs +164 -0
- package/esm2020/lib/query/query.types.mjs +2 -0
- package/esm2020/lib/query/query.utils.mjs +42 -0
- package/esm2020/lib/query-client/index.mjs +4 -0
- package/esm2020/lib/query-client/query-client.mjs +88 -0
- package/esm2020/lib/query-client/query-client.types.mjs +2 -0
- package/esm2020/lib/query-client/query-client.utils.mjs +16 -0
- package/esm2020/lib/query-form/index.mjs +4 -0
- package/esm2020/lib/query-form/query-form.mjs +121 -0
- package/esm2020/lib/query-form/query-form.types.mjs +2 -0
- package/esm2020/lib/query-form/query-form.utils.mjs +74 -0
- package/esm2020/lib/query-store/index.mjs +2 -0
- package/esm2020/lib/query-store/query-store.mjs +64 -0
- package/esm2020/lib/request/index.mjs +4 -0
- package/esm2020/lib/request/request.mjs +19 -0
- package/esm2020/lib/request/request.types.mjs +2 -0
- package/esm2020/lib/request/request.util.mjs +206 -0
- package/esm2020/lib/utils/deep-freeze.util.mjs +13 -0
- package/esm2020/lib/utils/def.util.mjs +8 -0
- package/esm2020/lib/utils/index.mjs +3 -0
- package/fesm2015/ethlete-query.mjs +1393 -0
- package/fesm2015/ethlete-query.mjs.map +1 -0
- package/fesm2020/ethlete-query.mjs +1412 -0
- package/fesm2020/ethlete-query.mjs.map +1 -0
- package/index.d.ts +11 -0
- package/lib/auth/auth-provider.types.d.ts +103 -0
- package/lib/auth/auth-provider.utils.d.ts +8 -0
- package/lib/auth/basic-auth-provider.d.ts +12 -0
- package/lib/auth/bearer-auth-provider.d.ts +21 -0
- package/lib/auth/custom-header-auth-provider.d.ts +11 -0
- package/lib/auth/index.d.ts +5 -0
- package/lib/directives/index.d.ts +3 -0
- package/lib/directives/infinity-query-trigger.directive.d.ts +15 -0
- package/lib/directives/infinity-query.directive.d.ts +43 -0
- package/lib/directives/query.directive.d.ts +36 -0
- package/lib/gql/gql.d.ts +2 -0
- package/lib/gql/index.d.ts +1 -0
- package/lib/infinite-query/index.d.ts +3 -0
- package/lib/infinite-query/infinity-query.d.ts +32 -0
- package/lib/infinite-query/infinity-query.types.d.ts +91 -0
- package/lib/infinite-query/infinity-query.utils.d.ts +5 -0
- package/lib/logger/index.d.ts +1 -0
- package/lib/logger/logger.d.ts +12 -0
- package/lib/query/index.d.ts +3 -0
- package/lib/query/query.d.ts +24 -0
- package/lib/query/query.types.d.ts +128 -0
- package/lib/query/query.utils.d.ts +14 -0
- package/lib/query-client/index.d.ts +3 -0
- package/lib/query-client/query-client.d.ts +22 -0
- package/lib/query-client/query-client.types.d.ts +47 -0
- package/lib/query-client/query-client.utils.d.ts +4 -0
- package/lib/query-form/index.d.ts +3 -0
- package/lib/query-form/query-form.d.ts +30 -0
- package/lib/query-form/query-form.types.d.ts +43 -0
- package/lib/query-form/query-form.utils.d.ts +8 -0
- package/lib/query-store/index.d.ts +1 -0
- package/lib/query-store/query-store.d.ts +18 -0
- package/lib/request/index.d.ts +3 -0
- package/lib/request/request.d.ts +9 -0
- package/lib/request/request.types.d.ts +16 -0
- package/lib/request/request.util.d.ts +20 -0
- package/lib/utils/deep-freeze.util.d.ts +1 -0
- package/lib/utils/def.util.d.ts +7 -0
- package/lib/utils/index.d.ts +2 -0
- package/package.json +34 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY2xpZW50LnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL3F1ZXJ5LWNsaWVudC9xdWVyeS1jbGllbnQudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUXVlcnkgfSBmcm9tICcuLi9xdWVyeS9xdWVyeSc7XG5pbXBvcnQgeyBCYXNlQXJndW1lbnRzLCBFbXB0eU9iamVjdCwgUm91dGVUeXBlLCBXaXRoSGVhZGVycyB9IGZyb20gJy4uL3F1ZXJ5L3F1ZXJ5LnR5cGVzJztcbmltcG9ydCB7IENhY2hlQWRhcHRlckZuLCBNZXRob2QgYXMgTWV0aG9kVHlwZSB9IGZyb20gJy4uL3JlcXVlc3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5Q2xpZW50Q29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBhcGkgYmFzZSByb3V0ZS5cbiAgICogQGV4YW1wbGUgJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJ1xuICAgKi9cbiAgYmFzZVJvdXRlOiBgaHR0cHM6Ly8ke3N0cmluZ31gIHwgYGh0dHA6Ly9sb2NhbGhvc3Q6JHtzdHJpbmd9YDtcblxuICAvKipcbiAgICogTG9nZ2luZyBjb25maWd1cmF0aW9uIGZvciBkZWJ1Z2dpbmcuXG4gICAqL1xuICBsb2dnaW5nPzoge1xuICAgIC8qKlxuICAgICAqIExvZyBhbGwgcXVlcnkgc3RhdGUgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBxdWVyeVN0YXRlQ2hhbmdlcz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBMb2cgcXVlcnkgc3RhdGUgZ2FyYmFnZSBjb2xsZWN0b3IgcnVucy5cbiAgICAgKi9cbiAgICBxdWVyeVN0YXRlR2FyYmFnZUNvbGxlY3Rvcj86IGJvb2xlYW47XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlcXVlc3Qgb3B0aW9ucy5cbiAgICovXG4gIHJlcXVlc3Q/OiB7XG4gICAgLyoqXG4gICAgICogQWRhcHRlciBmdW5jdGlvbiB1c2VkIGZvciBleHRyYWN0aW5nIHRoZSB0aW1lIHVudGlsIHRoZSByZXNwb25zZSBpcyBpbnZhbGlkLlxuICAgICAqIFRoZSBkZWZhdWx0IHVzZXMgdGhlIGBjYWNoZS1jb250cm9sYCAoYG1heC1hZ2VgICYgYHMtbWF4YWdlYCksIGBhZ2VgIGFuZCBgZXhwaXJlc2AgaGVhZGVycy5cbiAgICAgKiBTaG91bGQgcmV0dXJuIGEgbnVtYmVyIGluIHNlY29uZHMuXG4gICAgICovXG4gICAgY2FjaGVBZGFwdGVyPzogQ2FjaGVBZGFwdGVyRm47XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q3JlYXRvcjxcbiAgQXJndW1lbnRzIGV4dGVuZHMgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCxcbiAgTWV0aG9kIGV4dGVuZHMgTWV0aG9kVHlwZSxcbiAgUmVzcG9uc2UsXG4gIFJvdXRlIGV4dGVuZHMgUm91dGVUeXBlPEFyZ3VtZW50cz4sXG4gIFJlc3BvbnNlVHJhbnNmb3JtZXIgZXh0ZW5kcyBSZXNwb25zZVRyYW5zZm9ybWVyVHlwZTxSZXNwb25zZT4gPSBEZWZhdWx0UmVzcG9uc2VUcmFuc2Zvcm1lcjxSZXNwb25zZT4sXG4+ID0gKEFyZ3VtZW50cyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gID8ge1xuICAgICAgcHJlcGFyZTogKGFyZ3M6IEFyZ3VtZW50cyAmIFdpdGhIZWFkZXJzKSA9PiBRdWVyeTxSZXNwb25zZSwgQXJndW1lbnRzLCBSb3V0ZSwgTWV0aG9kLCBSZXNwb25zZVRyYW5zZm9ybWVyPjtcbiAgICB9XG4gIDoge1xuICAgICAgcHJlcGFyZTogKFxuICAgICAgICBhcmdzPzogKEFyZ3VtZW50cyBleHRlbmRzIEVtcHR5T2JqZWN0ID8gQXJndW1lbnRzIDogRW1wdHlPYmplY3QpICYgV2l0aEhlYWRlcnMsXG4gICAgICApID0+IFF1ZXJ5PFJlc3BvbnNlLCBBcmd1bWVudHMsIFJvdXRlLCBNZXRob2QsIFJlc3BvbnNlVHJhbnNmb3JtZXI+O1xuICAgIH0pICYge1xuICBiZWhhdmlvclN1YmplY3Q6IDxUIGV4dGVuZHMgUXVlcnk8UmVzcG9uc2UsIEFyZ3VtZW50cywgUm91dGUsIE1ldGhvZCwgUmVzcG9uc2VUcmFuc2Zvcm1lcj4+KFxuICAgIGluaXRpYWxWYWx1ZT86IFQgfCBudWxsLFxuICApID0+IEJlaGF2aW9yU3ViamVjdDxUIHwgbnVsbD47XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgQW55UXVlcnlDcmVhdG9yID0gUXVlcnlDcmVhdG9yPGFueSwgYW55LCBhbnksIGFueSwgYW55PjtcblxuZXhwb3J0IHR5cGUgUXVlcnlDcmVhdG9yQXJnczxUIGV4dGVuZHMgQW55UXVlcnlDcmVhdG9yPiA9IFBhcmFtZXRlcnM8VFsncHJlcGFyZSddPlswXTtcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VUcmFuc2Zvcm1lclR5cGU8UmVzcG9uc2U+ID0gKHJlc3BvbnNlOiBSZXNwb25zZSkgPT4gdW5rbm93bjtcbmV4cG9ydCB0eXBlIERlZmF1bHRSZXNwb25zZVRyYW5zZm9ybWVyPFJlc3BvbnNlPiA9IChyZXNwb25zZTogUmVzcG9uc2UpID0+IFJlc3BvbnNlO1xuXG5leHBvcnQgdHlwZSBRdWVyeUNyZWF0b3JSZXR1cm5UeXBlPFQgZXh0ZW5kcyBBbnlRdWVyeUNyZWF0b3I+ID0gUmV0dXJuVHlwZTxUWydwcmVwYXJlJ10+O1xuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const shouldCacheQuery = (method) => {
|
|
2
|
+
return method === 'GET' || method === 'OPTIONS' || method === 'HEAD' || method === 'GQL_QUERY';
|
|
3
|
+
};
|
|
4
|
+
export const buildGqlCacheKey = (
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
6
|
+
config, args) => {
|
|
7
|
+
const { query } = config;
|
|
8
|
+
const variables = args?.variables || {};
|
|
9
|
+
const queryWithoutNewLinesAndWhitespace = query.replace(/\s/g, '');
|
|
10
|
+
const queryFirst50Chars = queryWithoutNewLinesAndWhitespace.slice(0, 50);
|
|
11
|
+
const queryMiddle25Chars = queryWithoutNewLinesAndWhitespace.slice(queryWithoutNewLinesAndWhitespace.length / 2 - 25, queryWithoutNewLinesAndWhitespace.length / 2 + 25);
|
|
12
|
+
const queryLast50Chars = queryWithoutNewLinesAndWhitespace.slice(-50);
|
|
13
|
+
const vars = JSON.stringify(variables);
|
|
14
|
+
return `${queryFirst50Chars}...${queryMiddle25Chars}...${queryLast50Chars}...${vars}`;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY2xpZW50LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL3F1ZXJ5LWNsaWVudC9xdWVyeS1jbGllbnQudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtJQUNqRCxPQUFPLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLEtBQUssTUFBTSxJQUFJLE1BQU0sS0FBSyxXQUFXLENBQUM7QUFDakcsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUc7QUFDOUIsOERBQThEO0FBQzlELE1BQTBDLEVBQzFDLElBQStCLEVBQy9CLEVBQUU7SUFDRixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLE1BQU0sU0FBUyxHQUFHLElBQUksRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDO0lBRXhDLE1BQU0saUNBQWlDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFbkUsTUFBTSxpQkFBaUIsR0FBRyxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sa0JBQWtCLEdBQUcsaUNBQWlDLENBQUMsS0FBSyxDQUNoRSxpQ0FBaUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFDakQsaUNBQWlDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQ2xELENBQUM7SUFDRixNQUFNLGdCQUFnQixHQUFHLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXRFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFdkMsT0FBTyxHQUFHLGlCQUFpQixNQUFNLGtCQUFrQixNQUFNLGdCQUFnQixNQUFNLElBQUksRUFBRSxDQUFDO0FBQ3hGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VBcmd1bWVudHMsIEdxbFF1ZXJ5Q29uZmlnIH0gZnJvbSAnLi4vcXVlcnkvcXVlcnkudHlwZXMnO1xuaW1wb3J0IHsgTWV0aG9kIH0gZnJvbSAnLi4vcmVxdWVzdCc7XG5cbmV4cG9ydCBjb25zdCBzaG91bGRDYWNoZVF1ZXJ5ID0gKG1ldGhvZDogTWV0aG9kKSA9PiB7XG4gIHJldHVybiBtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ09QVElPTlMnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnIHx8IG1ldGhvZCA9PT0gJ0dRTF9RVUVSWSc7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRHcWxDYWNoZUtleSA9IChcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgY29uZmlnOiBHcWxRdWVyeUNvbmZpZzxhbnksIGFueSwgYW55LCBhbnk+LFxuICBhcmdzOiBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkLFxuKSA9PiB7XG4gIGNvbnN0IHsgcXVlcnkgfSA9IGNvbmZpZztcbiAgY29uc3QgdmFyaWFibGVzID0gYXJncz8udmFyaWFibGVzIHx8IHt9O1xuXG4gIGNvbnN0IHF1ZXJ5V2l0aG91dE5ld0xpbmVzQW5kV2hpdGVzcGFjZSA9IHF1ZXJ5LnJlcGxhY2UoL1xccy9nLCAnJyk7XG5cbiAgY29uc3QgcXVlcnlGaXJzdDUwQ2hhcnMgPSBxdWVyeVdpdGhvdXROZXdMaW5lc0FuZFdoaXRlc3BhY2Uuc2xpY2UoMCwgNTApO1xuICBjb25zdCBxdWVyeU1pZGRsZTI1Q2hhcnMgPSBxdWVyeVdpdGhvdXROZXdMaW5lc0FuZFdoaXRlc3BhY2Uuc2xpY2UoXG4gICAgcXVlcnlXaXRob3V0TmV3TGluZXNBbmRXaGl0ZXNwYWNlLmxlbmd0aCAvIDIgLSAyNSxcbiAgICBxdWVyeVdpdGhvdXROZXdMaW5lc0FuZFdoaXRlc3BhY2UubGVuZ3RoIC8gMiArIDI1LFxuICApO1xuICBjb25zdCBxdWVyeUxhc3Q1MENoYXJzID0gcXVlcnlXaXRob3V0TmV3TGluZXNBbmRXaGl0ZXNwYWNlLnNsaWNlKC01MCk7XG5cbiAgY29uc3QgdmFycyA9IEpTT04uc3RyaW5naWZ5KHZhcmlhYmxlcyk7XG5cbiAgcmV0dXJuIGAke3F1ZXJ5Rmlyc3Q1MENoYXJzfS4uLiR7cXVlcnlNaWRkbGUyNUNoYXJzfS4uLiR7cXVlcnlMYXN0NTBDaGFyc30uLi4ke3ZhcnN9YDtcbn07XG4iXX0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './query-form';
|
|
2
|
+
export * from './query-form.utils';
|
|
3
|
+
export * from './query-form.types';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnktZm9ybS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWZvcm0nO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1mb3JtLnV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktZm9ybS50eXBlcyc7XG4iXX0=
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { FormGroup } from '@angular/forms';
|
|
3
|
+
import { ActivatedRoute, Router } from '@angular/router';
|
|
4
|
+
import { combineLatest, concat, debounceTime, distinctUntilChanged, map, startWith, take, tap } from 'rxjs';
|
|
5
|
+
export class QueryField {
|
|
6
|
+
constructor(data) {
|
|
7
|
+
this.data = data;
|
|
8
|
+
this.changes$ = this._setupChangesObservable();
|
|
9
|
+
this._currentDebounceTimeout = null;
|
|
10
|
+
}
|
|
11
|
+
get control() {
|
|
12
|
+
return this.data.control;
|
|
13
|
+
}
|
|
14
|
+
setValue(value) {
|
|
15
|
+
if (this._currentDebounceTimeout !== null) {
|
|
16
|
+
clearTimeout(this._currentDebounceTimeout);
|
|
17
|
+
}
|
|
18
|
+
if (this.data.debounce) {
|
|
19
|
+
this._currentDebounceTimeout = window.setTimeout(() => {
|
|
20
|
+
this.control.setValue(value);
|
|
21
|
+
}, this.data.debounce);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
this.control.setValue(value);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
_setupChangesObservable() {
|
|
28
|
+
const obs = this.control.valueChanges.pipe(startWith(this.control.value));
|
|
29
|
+
if (!this.data.debounce) {
|
|
30
|
+
return obs;
|
|
31
|
+
}
|
|
32
|
+
// The initial value should get emitted immediately
|
|
33
|
+
// concat switches to the debounced observable after the first observable is completed
|
|
34
|
+
return concat(obs.pipe(take(1)), this.control.valueChanges.pipe(debounceTime(this.data.debounce)));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
38
|
+
export class QueryForm {
|
|
39
|
+
constructor(_fields) {
|
|
40
|
+
this._fields = _fields;
|
|
41
|
+
this._router = inject(Router, { optional: true });
|
|
42
|
+
this._activatedRoute = inject(ActivatedRoute, { optional: true });
|
|
43
|
+
this._defaultValues = this._extractDefaultValues();
|
|
44
|
+
this.form = this._setupFormGroup();
|
|
45
|
+
}
|
|
46
|
+
observe(options) {
|
|
47
|
+
return combineLatest(Object.values(this._fields).map((field) => field.changes$)).pipe(map(() => this.form.getRawValue()), distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)), tap((values) => {
|
|
48
|
+
if (options?.syncViaUrlQueryParams !== false) {
|
|
49
|
+
this._syncViaUrlQueryParams(values);
|
|
50
|
+
}
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
setFormValueFromUrlQueryParams() {
|
|
54
|
+
if (!this._activatedRoute) {
|
|
55
|
+
throw new Error('Cannot set form value from url query params without ActivatedRoute');
|
|
56
|
+
}
|
|
57
|
+
const queryParams = this._activatedRoute.snapshot.queryParams;
|
|
58
|
+
for (const [key, field] of Object.entries(this._fields)) {
|
|
59
|
+
const value = queryParams[key];
|
|
60
|
+
if (value === undefined) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const deserializedValue = field.data.queryParamTransformFn?.(value) ?? value;
|
|
64
|
+
field.setValue(deserializedValue);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
updateFormOnUrlQueryParamsChange() {
|
|
68
|
+
if (!this._activatedRoute) {
|
|
69
|
+
throw new Error('Cannot update form on url query params change without ActivatedRoute');
|
|
70
|
+
}
|
|
71
|
+
return this._activatedRoute.queryParams.pipe(tap(() => this.setFormValueFromUrlQueryParams()));
|
|
72
|
+
}
|
|
73
|
+
_getDefaultValue(key) {
|
|
74
|
+
return this._defaultValues[key] ?? null;
|
|
75
|
+
}
|
|
76
|
+
_isDefaultValue(key, value) {
|
|
77
|
+
const normalizedValue = Array.isArray(value) ? JSON.stringify(value) : value;
|
|
78
|
+
return this._getDefaultValue(key) === normalizedValue;
|
|
79
|
+
}
|
|
80
|
+
_setupFormGroup() {
|
|
81
|
+
const group = new FormGroup({});
|
|
82
|
+
for (const [key, field] of Object.entries(this._fields)) {
|
|
83
|
+
group.addControl(key, field.control);
|
|
84
|
+
}
|
|
85
|
+
return group;
|
|
86
|
+
}
|
|
87
|
+
_extractDefaultValues() {
|
|
88
|
+
const defaultValues = {};
|
|
89
|
+
for (const [key, field] of Object.entries(this._fields)) {
|
|
90
|
+
const value = field.control.value;
|
|
91
|
+
if (value === null || value === undefined) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (Array.isArray(value)) {
|
|
95
|
+
defaultValues[key] = JSON.stringify(value);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
defaultValues[key] = value;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return defaultValues;
|
|
102
|
+
}
|
|
103
|
+
_syncViaUrlQueryParams(values) {
|
|
104
|
+
if (!this._router || !this._activatedRoute) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const queryParams = structuredClone(this._activatedRoute.snapshot.queryParams);
|
|
108
|
+
for (const [key, value] of Object.entries(values)) {
|
|
109
|
+
if (this._isDefaultValue(key, value) || this._fields[key].data.appendToUrl === false) {
|
|
110
|
+
delete queryParams[key];
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
queryParams[key] = value;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
this._router.navigate([], {
|
|
117
|
+
queryParams,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFjLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3hILE1BQU0sT0FBTyxVQUFVO0lBU3JCLFlBQW1CLElBQTBCO1FBQTFCLFNBQUksR0FBSixJQUFJLENBQXNCO1FBUjdDLGFBQVEsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQU1sQyw0QkFBdUIsR0FBa0IsSUFBSSxDQUFDO0lBRU4sQ0FBQztJQU5qRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFNRCxRQUFRLENBQUMsS0FBZTtRQUN0QixJQUFJLElBQUksQ0FBQyx1QkFBdUIsS0FBSyxJQUFJLEVBQUU7WUFDekMsWUFBWSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN0QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLENBQUMsRUFBRSxJQUFJLENB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LENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgY29uY2F0LCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIE9ic2VydmFibGUsIHN0YXJ0V2l0aCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBRdWVyeUZvcm1Hcm91cCwgUXVlcnlGaWVsZE9wdGlvbnMsIFF1ZXJ5Rm9ybVZhbHVlIH0gZnJvbSAnLi9xdWVyeS1mb3JtLnR5cGVzJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5RmllbGQ8VD4ge1xuICBjaGFuZ2VzJCA9IHRoaXMuX3NldHVwQ2hhbmdlc09ic2VydmFibGUoKTtcblxuICBnZXQgY29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmNvbnRyb2w7XG4gIH1cblxuICBwcml2YXRlIF9jdXJyZW50RGVib3VuY2VUaW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0YTogUXVlcnlGaWVsZE9wdGlvbnM8VD4pIHt9XG5cbiAgc2V0VmFsdWUodmFsdWU6IFQgfCBudWxsKSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnREZWJvdW5jZVRpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jdXJyZW50RGVib3VuY2VUaW1lb3V0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhLmRlYm91bmNlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50RGVib3VuY2VUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgfSwgdGhpcy5kYXRhLmRlYm91bmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cENoYW5nZXNPYnNlcnZhYmxlKCkge1xuICAgIGNvbnN0IG9icyA9IHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5jb250cm9sLnZhbHVlKSk7XG5cbiAgICBpZiAoIXRoaXMuZGF0YS5kZWJvdW5jZSkge1xuICAgICAgcmV0dXJuIG9icztcbiAgICB9XG5cbiAgICAvLyBUaGUgaW5pdGlhbCB2YWx1ZSBzaG91bGQgZ2V0IGVtaXR0ZWQgaW1tZWRpYXRlbHlcbiAgICAvLyBjb25jYXQgc3dpdGNoZXMgdG8gdGhlIGRlYm91bmNlZCBvYnNlcnZhYmxlIGFmdGVyIHRoZSBmaXJzdCBvYnNlcnZhYmxlIGlzIGNvbXBsZXRlZFxuICAgIHJldHVybiBjb25jYXQob2JzLnBpcGUodGFrZSgxKSksIHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kYXRhLmRlYm91bmNlKSkpO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgY2xhc3MgUXVlcnlGb3JtPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBRdWVyeUZpZWxkPGFueT4+PiB7XG4gIHByaXZhdGUgX3JvdXRlciA9IGluamVjdChSb3V0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIF9kZWZhdWx0VmFsdWVzID0gdGhpcy5fZXh0cmFjdERlZmF1bHRWYWx1ZXMoKTtcblxuICBmb3JtID0gdGhpcy5fc2V0dXBGb3JtR3JvdXAoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9maWVsZHM6IFQpIHt9XG5cbiAgb2JzZXJ2ZShvcHRpb25zPzogeyBzeW5jVmlhVXJsUXVlcnlQYXJhbXM/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChPYmplY3QudmFsdWVzKHRoaXMuX2ZpZWxkcykubWFwKChmaWVsZCkgPT4gZmllbGQuY2hhbmdlcyQpKS5waXBlKFxuICAgICAgbWFwKCgpID0+IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBKU09OLnN0cmluZ2lmeShhKSA9PT0gSlNPTi5zdHJpbmdpZnkoYikpLFxuICAgICAgdGFwKCh2YWx1ZXMpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LnN5bmNWaWFVcmxRdWVyeVBhcmFtcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLl9zeW5jVmlhVXJsUXVlcnlQYXJhbXModmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgfSksXG5cbiAgICAgIC8vIFRoaXMgdHlwZSBjYXN0IGlzIG5lZWRlZCBzaW5jZSBuZy1wYWNrYWdyIHdpbGwgYnJlYWsgdGhlIHR5cGUgaW5mZXJlbmNlIG90aGVyd2lzZS5cbiAgICApIGFzIE9ic2VydmFibGU8UXVlcnlGb3JtVmFsdWU8VD4+O1xuICB9XG5cbiAgc2V0Rm9ybVZhbHVlRnJvbVVybFF1ZXJ5UGFyYW1zKCkge1xuICAgIGlmICghdGhpcy5fYWN0aXZhdGVkUm91dGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNldCBmb3JtIHZhbHVlIGZyb20gdXJsIHF1ZXJ5IHBhcmFtcyB3aXRob3V0IEFjdGl2YXRlZFJvdXRlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcblxuICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2ZpZWxkcykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlQYXJhbXNba2V5XTtcblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZFZhbHVlID0gZmllbGQuZGF0YS5xdWVyeVBhcmFtVHJhbnNmb3JtRm4/Lih2YWx1ZSkgPz8gdmFsdWU7XG5cbiAgICAgIGZpZWxkLnNldFZhbHVlKGRlc2VyaWFsaXplZFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVGb3JtT25VcmxRdWVyeVBhcmFtc0NoYW5nZSgpIHtcbiAgICBpZiAoIXRoaXMuX2FjdGl2YXRlZFJvdXRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1cGRhdGUgZm9ybSBvbiB1cmwgcXVlcnkgcGFyYW1zIGNoYW5nZSB3aXRob3V0IEFjdGl2YXRlZFJvdXRlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnBpcGUodGFwKCgpID0+IHRoaXMuc2V0Rm9ybVZhbHVlRnJvbVVybFF1ZXJ5UGFyYW1zKCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldERlZmF1bHRWYWx1ZShrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWVzW2tleV0gPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX2lzRGVmYXVsdFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogdmFsdWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGtleSkgPT09IG5vcm1hbGl6ZWRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwRm9ybUdyb3VwKCkge1xuICAgIGNvbnN0IGdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSBhcyBRdWVyeUZvcm1Hcm91cDxUPik7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9maWVsZHMpKSB7XG4gICAgICBncm91cC5hZGRDb250cm9sKGtleSwgZmllbGQuY29udHJvbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG5cbiAgcHJpdmF0ZSBfZXh0cmFjdERlZmF1bHRWYWx1ZXMoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2ZpZWxkcykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQuY29udHJvbC52YWx1ZTtcblxuICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBkZWZhdWx0VmFsdWVzW2tleV0gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0VmFsdWVzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlcztcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNWaWFVcmxRdWVyeVBhcmFtcyh2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gICAgaWYgKCF0aGlzLl9yb3V0ZXIgfHwgIXRoaXMuX2FjdGl2YXRlZFJvdXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMpO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWVzKSkge1xuICAgICAgaWYgKHRoaXMuX2lzRGVmYXVsdFZhbHVlKGtleSwgdmFsdWUpIHx8IHRoaXMuX2ZpZWxkc1trZXldLmRhdGEuYXBwZW5kVG9VcmwgPT09IGZhbHNlKSB7XG4gICAgICAgIGRlbGV0ZSBxdWVyeVBhcmFtc1trZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgcXVlcnlQYXJhbXMsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUXVlcnlGaWVsZCB9IGZyb20gJy4vcXVlcnktZm9ybSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlGaWVsZE9wdGlvbnM8VCA9IHVua25vd24+IHtcbiAgLyoqXG4gICAqIERlYm91bmNlIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgZGVib3VuY2U/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgZm9yIHRoZSBmaWVsZC5cbiAgICovXG4gIGNvbnRyb2w6IEZvcm1Db250cm9sPFQgfCBudWxsPjtcblxuICAvKipcbiAgICogQXBwZW5kIHRoZSBmaWVsZCdzIHZhbHVlIHRvIHRoZSB1cmwuXG4gICAqXG4gICAqIFRoZSBmaWVsZCB3b250IGJlIGFwcGVuZGVkIHRvIHRoZSB1cmwgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICogLSBJdCBpcyB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgKiAtIEl0IGlzIGFuIGVtcHR5IHN0cmluZ1xuICAgKiAtIEl0IGlzIGBudWxsYFxuICAgKiAtIEl0IGlzIGB1bmRlZmluZWRgXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGFwcGVuZFRvVXJsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IHRyYW5zZm9ybXMgdGhlIHRoZSB2YWx1ZSBnb3R0ZW4gZnJvbSB0aGUgdXJsIHF1ZXJ5IHBhcmFtcyB0byBhIHZhbHVlIHJlcXVpcmVkIGJ5IHRoZSBmaWVsZC5cbiAgICogRS5nLiBmb3IgYSBudW1iZXIgZmllbGQsIHRoZSB2YWx1ZSBmcm9tIHRoZSB1cmwgcXVlcnkgcGFyYW1zIGlzIGEgc3RyaW5nLCBidXQgdGhlIGZpZWxkIHJlcXVpcmVzIGEgbnVtYmVyLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGNvbW1vbiB0cmFuc2Zvcm1hdGlvbnMgYXJlIGFscmVhZHkgaW1wbGVtZW50ZWQ6XG4gICAqIC0gYHRyYW5zZm9ybVRvTnVtYmVyYFxuICAgKiAtIGB0cmFuc2Zvcm1Ub051bWJlckFycmF5YFxuICAgKiAtIGB0cmFuc2Zvcm1Ub0Jvb2xlYW5gXG4gICAqIC0gYHRyYW5zZm9ybVRvQm9vbGVhbkFycmF5YFxuICAgKiAtIGB0cmFuc2Zvcm1Ub0RhdGVgIChleHBlY3RzIGEgc3RyaW5nIGluIHRoZSBkZWZhdWx0IGpzIGZvcm1hdClcbiAgICogLSBgdHJhbnNmb3JtVG9EYXRlQXJyYXlgIChleHBlY3RzIHN0cmluZ3MgaW4gdGhlIGRlZmF1bHQganMgZm9ybWF0KVxuICAgKi9cbiAgcXVlcnlQYXJhbVRyYW5zZm9ybUZuPzogKHZhbDogdW5rbm93bikgPT4gVCB8IG51bGw7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBRdWVyeUZvcm1Hcm91cDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUXVlcnlGaWVsZDxhbnk+Pj4gPSB7XG4gIFtQcm9wZXJ0eSBpbiBrZXlvZiBUXTogVFtQcm9wZXJ0eV1bJ2NvbnRyb2wnXTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBRdWVyeUZvcm1WYWx1ZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUXVlcnlGaWVsZDxhbnk+Pj4gPSB7XG4gIFtQcm9wZXJ0eSBpbiBrZXlvZiBUXTogVFtQcm9wZXJ0eV1bJ2NvbnRyb2wnXVsndmFsdWUnXTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export const transformToString = (value) => {
|
|
2
|
+
if (typeof value === 'string') {
|
|
3
|
+
return value;
|
|
4
|
+
}
|
|
5
|
+
return null;
|
|
6
|
+
};
|
|
7
|
+
export const transformToStringArray = (value) => {
|
|
8
|
+
if (Array.isArray(value)) {
|
|
9
|
+
return value.map(transformToString).filter(Boolean);
|
|
10
|
+
}
|
|
11
|
+
else if (typeof value === 'string') {
|
|
12
|
+
return [transformToString(value)];
|
|
13
|
+
}
|
|
14
|
+
return null;
|
|
15
|
+
};
|
|
16
|
+
export const transformToNumber = (value) => {
|
|
17
|
+
if (typeof value === 'number') {
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
if (typeof value === 'string') {
|
|
21
|
+
return Number(value);
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
};
|
|
25
|
+
export const transformToNumberArray = (value) => {
|
|
26
|
+
if (Array.isArray(value)) {
|
|
27
|
+
return value.map(transformToNumber).filter((item) => item !== null);
|
|
28
|
+
}
|
|
29
|
+
else if (typeof value === 'number') {
|
|
30
|
+
return [value];
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
};
|
|
34
|
+
export const transformToBoolean = (value) => {
|
|
35
|
+
if (typeof value === 'boolean') {
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
if (typeof value === 'string') {
|
|
39
|
+
return value === 'true' || value === '1';
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
};
|
|
43
|
+
export const transformToBooleanArray = (value) => {
|
|
44
|
+
if (Array.isArray(value)) {
|
|
45
|
+
return value.map(transformToBoolean).filter((item) => item !== null);
|
|
46
|
+
}
|
|
47
|
+
else if (typeof value === 'string' || typeof value === 'boolean') {
|
|
48
|
+
return [transformToBoolean(value)];
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
};
|
|
52
|
+
export const transformToDate = (value) => {
|
|
53
|
+
if (value instanceof Date) {
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
56
|
+
if (typeof value === 'string') {
|
|
57
|
+
const date = new Date(value);
|
|
58
|
+
if (isNaN(date.getTime())) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
return date;
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
};
|
|
65
|
+
export const transformToDateArray = (value) => {
|
|
66
|
+
if (Array.isArray(value)) {
|
|
67
|
+
return value.map(transformToDate).filter((item) => item !== null);
|
|
68
|
+
}
|
|
69
|
+
else if (typeof value === 'string' || value instanceof Date) {
|
|
70
|
+
return [transformToDate(value)];
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRTtJQUNsRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEtBQWMsRUFBRSxFQUFFO0lBQ3ZELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN4QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFhLENBQUM7S0FDakU7U0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUNwQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQWEsQ0FBQztLQUMvQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRTtJQUNsRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDdEI7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUU7SUFDdkQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBYSxDQUFDO0tBQ2pGO1NBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBYSxDQUFDO0tBQzVCO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQWMsRUFBRSxFQUFFO0lBQ25ELElBQUksT0FBTyxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQzlCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLEtBQUssS0FBSyxNQUFNLElBQUksS0FBSyxLQUFLLEdBQUcsQ0FBQztLQUMxQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRTtJQUN4RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDeEIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFjLENBQUM7S0FDbkY7U0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFDbEUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFjLENBQUM7S0FDakQ7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQWMsRUFBRSxFQUFFO0lBQ2hELElBQUksS0FBSyxZQUFZLElBQUksRUFBRTtRQUN6QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0IsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUU7SUFDckQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLENBQVcsQ0FBQztLQUM3RTtTQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUU7UUFDN0QsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBVyxDQUFDO0tBQzNDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdHJhbnNmb3JtVG9TdHJpbmcgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Ub1N0cmluZ0FycmF5ID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAodHJhbnNmb3JtVG9TdHJpbmcpLmZpbHRlcihCb29sZWFuKSBhcyBzdHJpbmdbXTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIFt0cmFuc2Zvcm1Ub1N0cmluZyh2YWx1ZSldIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtVG9OdW1iZXIgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Ub051bWJlckFycmF5ID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAodHJhbnNmb3JtVG9OdW1iZXIpLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gbnVsbCkgYXMgbnVtYmVyW107XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBbdmFsdWVdIGFzIG51bWJlcltdO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtVG9Cb29sZWFuID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSAnMSc7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtVG9Cb29sZWFuQXJyYXkgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcCh0cmFuc2Zvcm1Ub0Jvb2xlYW4pLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gbnVsbCkgYXMgYm9vbGVhbltdO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gW3RyYW5zZm9ybVRvQm9vbGVhbih2YWx1ZSldIGFzIGJvb2xlYW5bXTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVRvRGF0ZSA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblxuICAgIGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVRvRGF0ZUFycmF5ID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAodHJhbnNmb3JtVG9EYXRlKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IG51bGwpIGFzIERhdGVbXTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBbdHJhbnNmb3JtVG9EYXRlKHZhbHVlKV0gYXMgRGF0ZVtdO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './query-store';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnktc3RvcmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3F1ZXJ5LXN0b3JlJztcbiJdfQ==
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export class QueryStore {
|
|
2
|
+
constructor(_config) {
|
|
3
|
+
this._config = _config;
|
|
4
|
+
this._store = new Map();
|
|
5
|
+
this._garbageCollector = null;
|
|
6
|
+
}
|
|
7
|
+
add(id, query) {
|
|
8
|
+
this._store.set(id, query);
|
|
9
|
+
this._initGarbageCollector();
|
|
10
|
+
this._logState(id, query, 'SET');
|
|
11
|
+
}
|
|
12
|
+
get(id) {
|
|
13
|
+
return this._store.get(id) ?? null;
|
|
14
|
+
}
|
|
15
|
+
remove(id) {
|
|
16
|
+
this._store.delete(id);
|
|
17
|
+
this._logState(id, null, 'REMOVE');
|
|
18
|
+
}
|
|
19
|
+
_logState(key, item, operation) {
|
|
20
|
+
if (!this._config?.enableChangeLogging)
|
|
21
|
+
return;
|
|
22
|
+
const stateAsJson = {};
|
|
23
|
+
this._store.forEach((value, key) => {
|
|
24
|
+
stateAsJson[key] = value;
|
|
25
|
+
});
|
|
26
|
+
console.log(`%c[${operation}] ${key}`, 'font-weight: bold');
|
|
27
|
+
console.log({ operation, key, item });
|
|
28
|
+
console.log(stateAsJson);
|
|
29
|
+
}
|
|
30
|
+
_initGarbageCollector() {
|
|
31
|
+
if (this._garbageCollector !== null) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
this._logGarbageCollector('Start');
|
|
35
|
+
this._garbageCollector = window.setInterval(() => {
|
|
36
|
+
this._runGarbageCollector();
|
|
37
|
+
}, 15000);
|
|
38
|
+
}
|
|
39
|
+
_stopGarbageCollector() {
|
|
40
|
+
if (this._garbageCollector !== null) {
|
|
41
|
+
window.clearInterval(this._garbageCollector);
|
|
42
|
+
this._garbageCollector = null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
_runGarbageCollector() {
|
|
46
|
+
this._logGarbageCollector('Collecting...');
|
|
47
|
+
this._store.forEach((item, key) => {
|
|
48
|
+
if (item.isExpired) {
|
|
49
|
+
this.remove(key);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
this._logGarbageCollector('Collection done');
|
|
53
|
+
if (!this._store.size) {
|
|
54
|
+
this._stopGarbageCollector();
|
|
55
|
+
this._logGarbageCollector('Stop');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
_logGarbageCollector(action) {
|
|
59
|
+
if (!this._config?.enableGarbageCollectorLogging)
|
|
60
|
+
return;
|
|
61
|
+
console.log(`%cGC: ${action}`, 'color: yellow; font-weight: bold');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnktc3RvcmUvcXVlcnktc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLFVBQVU7SUFJckIsWUFDVSxPQUdQO1FBSE8sWUFBTyxHQUFQLE9BQU8sQ0FHZDtRQVBjLFdBQU0sR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztRQUM5QyxzQkFBaUIsR0FBa0IsSUFBSSxDQUFDO0lBTzdDLENBQUM7SUFFSixHQUFHLENBQUMsRUFBVSxFQUFFLEtBQWU7UUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTNCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRTdCLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsR0FBRyxDQUFDLEVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNyQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQVU7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV2QixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLFNBQVMsQ0FBQyxHQUFrQixFQUFFLElBQXFCLEVBQUUsU0FBaUI7UUFDNUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsbUJBQW1CO1lBQUUsT0FBTztRQUUvQyxNQUFNLFdBQVcsR0FBNkIsRUFBRSxDQUFDO1FBRWpELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2pDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sU0FBUyxLQUFLLEdBQUcsRUFBRSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFFNUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssSUFBSSxFQUFFO1lBQ25DLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDL0MsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLEVBQUU7WUFDbkMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDaEMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2xCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDckIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLE1BQWM7UUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsNkJBQTZCO1lBQUUsT0FBTztRQUV6RCxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsTUFBTSxFQUFFLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbnlRdWVyeSB9IGZyb20gJy4uL3F1ZXJ5JztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5U3RvcmUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdG9yZSA9IG5ldyBNYXA8c3RyaW5nLCBBbnlRdWVyeT4oKTtcbiAgcHJpdmF0ZSBfZ2FyYmFnZUNvbGxlY3RvcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY29uZmlnPzoge1xuICAgICAgZW5hYmxlQ2hhbmdlTG9nZ2luZz86IGJvb2xlYW47XG4gICAgICBlbmFibGVHYXJiYWdlQ29sbGVjdG9yTG9nZ2luZz86IGJvb2xlYW47XG4gICAgfSxcbiAgKSB7fVxuXG4gIGFkZChpZDogc3RyaW5nLCBxdWVyeTogQW55UXVlcnkpIHtcbiAgICB0aGlzLl9zdG9yZS5zZXQoaWQsIHF1ZXJ5KTtcblxuICAgIHRoaXMuX2luaXRHYXJiYWdlQ29sbGVjdG9yKCk7XG5cbiAgICB0aGlzLl9sb2dTdGF0ZShpZCwgcXVlcnksICdTRVQnKTtcbiAgfVxuXG4gIGdldChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlLmdldChpZCkgPz8gbnVsbDtcbiAgfVxuXG4gIHJlbW92ZShpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc3RvcmUuZGVsZXRlKGlkKTtcblxuICAgIHRoaXMuX2xvZ1N0YXRlKGlkLCBudWxsLCAnUkVNT1ZFJyk7XG4gIH1cblxuICBwcml2YXRlIF9sb2dTdGF0ZShrZXk6IHN0cmluZyB8IG51bGwsIGl0ZW06IEFueVF1ZXJ5IHwgbnVsbCwgb3BlcmF0aW9uOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZz8uZW5hYmxlQ2hhbmdlTG9nZ2luZykgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3RhdGVBc0pzb246IFJlY29yZDxzdHJpbmcsIEFueVF1ZXJ5PiA9IHt9O1xuXG4gICAgdGhpcy5fc3RvcmUuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgc3RhdGVBc0pzb25ba2V5XSA9IHZhbHVlO1xuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coYCVjWyR7b3BlcmF0aW9ufV0gJHtrZXl9YCwgJ2ZvbnQtd2VpZ2h0OiBib2xkJyk7XG5cbiAgICBjb25zb2xlLmxvZyh7IG9wZXJhdGlvbiwga2V5LCBpdGVtIH0pO1xuICAgIGNvbnNvbGUubG9nKHN0YXRlQXNKc29uKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRHYXJiYWdlQ29sbGVjdG9yKCkge1xuICAgIGlmICh0aGlzLl9nYXJiYWdlQ29sbGVjdG9yICE9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nR2FyYmFnZUNvbGxlY3RvcignU3RhcnQnKTtcblxuICAgIHRoaXMuX2dhcmJhZ2VDb2xsZWN0b3IgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5fcnVuR2FyYmFnZUNvbGxlY3RvcigpO1xuICAgIH0sIDE1MDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX3N0b3BHYXJiYWdlQ29sbGVjdG9yKCkge1xuICAgIGlmICh0aGlzLl9nYXJiYWdlQ29sbGVjdG9yICE9PSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLl9nYXJiYWdlQ29sbGVjdG9yKTtcbiAgICAgIHRoaXMuX2dhcmJhZ2VDb2xsZWN0b3IgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3J1bkdhcmJhZ2VDb2xsZWN0b3IoKSB7XG4gICAgdGhpcy5fbG9nR2FyYmFnZUNvbGxlY3RvcignQ29sbGVjdGluZy4uLicpO1xuXG4gICAgdGhpcy5fc3RvcmUuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XG4gICAgICBpZiAoaXRlbS5pc0V4cGlyZWQpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ0dhcmJhZ2VDb2xsZWN0b3IoJ0NvbGxlY3Rpb24gZG9uZScpO1xuXG4gICAgaWYgKCF0aGlzLl9zdG9yZS5zaXplKSB7XG4gICAgICB0aGlzLl9zdG9wR2FyYmFnZUNvbGxlY3RvcigpO1xuICAgICAgdGhpcy5fbG9nR2FyYmFnZUNvbGxlY3RvcignU3RvcCcpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2xvZ0dhcmJhZ2VDb2xsZWN0b3IoYWN0aW9uOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZz8uZW5hYmxlR2FyYmFnZUNvbGxlY3RvckxvZ2dpbmcpIHJldHVybjtcblxuICAgIGNvbnNvbGUubG9nKGAlY0dDOiAke2FjdGlvbn1gLCAnY29sb3I6IHllbGxvdzsgZm9udC13ZWlnaHQ6IGJvbGQnKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './request';
|
|
2
|
+
export * from './request.types';
|
|
3
|
+
export * from './request.util';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcmVxdWVzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3JlcXVlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXF1ZXN0LnR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVxdWVzdC51dGlsJztcbiJdfQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { buildRequestError, buildTimestampFromSeconds, extractExpiresInSeconds } from './request.util';
|
|
2
|
+
export const request = async (options) => {
|
|
3
|
+
try {
|
|
4
|
+
const response = await fetch(options.route, options.init);
|
|
5
|
+
if (!response.ok) {
|
|
6
|
+
throw response;
|
|
7
|
+
}
|
|
8
|
+
const data = (await response.json());
|
|
9
|
+
const expiresInSeconds = options.cacheAdapter
|
|
10
|
+
? options.cacheAdapter(response.headers)
|
|
11
|
+
: extractExpiresInSeconds(response.headers);
|
|
12
|
+
const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);
|
|
13
|
+
return { data, expiresInTimestamp };
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
throw await buildRequestError(error);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9yZXF1ZXN0L3JlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkcsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBc0IsT0FJakQsRUFBRSxFQUFFO0lBQ0gsSUFBSTtRQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQ2hCLE1BQU0sUUFBUSxDQUFDO1NBQ2hCO1FBRUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBYSxDQUFDO1FBRWpELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLFlBQVk7WUFDM0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUN4QyxDQUFDLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTlDLE1BQU0sa0JBQWtCLEdBQUcseUJBQXlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV2RSxPQUFPLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLENBQUM7S0FDckM7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN0QztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhY2hlQWRhcHRlckZuIH0gZnJvbSAnLi9yZXF1ZXN0LnR5cGVzJztcbmltcG9ydCB7IGJ1aWxkUmVxdWVzdEVycm9yLCBidWlsZFRpbWVzdGFtcEZyb21TZWNvbmRzLCBleHRyYWN0RXhwaXJlc0luU2Vjb25kcyB9IGZyb20gJy4vcmVxdWVzdC51dGlsJztcblxuZXhwb3J0IGNvbnN0IHJlcXVlc3QgPSBhc3luYyA8UmVzcG9uc2UgPSB1bmtub3duPihvcHRpb25zOiB7XG4gIHJvdXRlOiBzdHJpbmc7XG4gIGluaXQ/OiBSZXF1ZXN0SW5pdDtcbiAgY2FjaGVBZGFwdGVyPzogQ2FjaGVBZGFwdGVyRm47XG59KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChvcHRpb25zLnJvdXRlLCBvcHRpb25zLmluaXQpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIFJlc3BvbnNlO1xuXG4gICAgY29uc3QgZXhwaXJlc0luU2Vjb25kcyA9IG9wdGlvbnMuY2FjaGVBZGFwdGVyXG4gICAgICA/IG9wdGlvbnMuY2FjaGVBZGFwdGVyKHJlc3BvbnNlLmhlYWRlcnMpXG4gICAgICA6IGV4dHJhY3RFeHBpcmVzSW5TZWNvbmRzKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgY29uc3QgZXhwaXJlc0luVGltZXN0YW1wID0gYnVpbGRUaW1lc3RhbXBGcm9tU2Vjb25kcyhleHBpcmVzSW5TZWNvbmRzKTtcblxuICAgIHJldHVybiB7IGRhdGEsIGV4cGlyZXNJblRpbWVzdGFtcCB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGF3YWl0IGJ1aWxkUmVxdWVzdEVycm9yKGVycm9yKTtcbiAgfVxufTtcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9yZXF1ZXN0L3JlcXVlc3QudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIE1ldGhvZCA9XG4gIHwgJ0dFVCdcbiAgfCAnUE9TVCdcbiAgfCAnUFVUJ1xuICB8ICdERUxFVEUnXG4gIHwgJ1BBVENIJ1xuICB8ICdIRUFEJ1xuICB8ICdPUFRJT05TJ1xuICB8ICdUUkFDRSdcbiAgfCAnQ09OTkVDVCdcbiAgfCAnUFVSR0UnXG4gIHwgJ0xJTksnXG4gIHwgJ1VOTElOSydcbiAgfCAnR1FMX1FVRVJZJ1xuICB8ICdHUUxfTVVUQVRFJ1xuICB8ICdDVVNUT00nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RFcnJvcjxEZXRhaWwgPSB1bmtub3duPiB7XG4gIGNvZGU6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBkZXRhaWw6IERldGFpbDtcbiAgcmF3OiB1bmtub3duO1xufVxuXG5leHBvcnQgdHlwZSBQYXJhbVByaW1pdGl2ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBQYXJhbXMgPSBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCBQYXJhbVByaW1pdGl2ZSB8IFBhcmFtQXJyYXk+O1xuXG5leHBvcnQgdHlwZSBQYXJhbUFycmF5ID0gQXJyYXk8UGFyYW1QcmltaXRpdmU+O1xuXG5leHBvcnQgdHlwZSBVbmZpbHRlcmVkUGFyYW1QcmltaXRpdmUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgUXVlcnlQYXJhbXMgPSBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCBVbmZpbHRlcmVkUGFyYW1QcmltaXRpdmUgfCBVbmZpbHRlcmVkUGFyYW1BcnJheT47XG5cbmV4cG9ydCB0eXBlIFBhdGhQYXJhbXMgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+O1xuXG5leHBvcnQgdHlwZSBVbmZpbHRlcmVkUGFyYW1BcnJheSA9IEFycmF5PFVuZmlsdGVyZWRQYXJhbVByaW1pdGl2ZT47XG5cbmV4cG9ydCB0eXBlIENhY2hlQWRhcHRlckZuID0gKGhlYWRlcnM6IEhlYWRlcnMpID0+IG51bWJlciB8IG51bGw7XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RIZWFkZXJzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiJdfQ==
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { invalidBaseRouteError, invalidBodyError, invalidRouteError, pathParamsMissingInRouteFunctionError, } from '../logger';
|
|
2
|
+
export const isRequestError = (error) => error instanceof Object && 'code' in error && 'message' in error;
|
|
3
|
+
export const isAbortRequestError = (error) => isRequestError(error) && error.code === -1;
|
|
4
|
+
export const buildRoute = (options) => {
|
|
5
|
+
if (options.base.endsWith('/')) {
|
|
6
|
+
throw invalidBaseRouteError(options.base);
|
|
7
|
+
}
|
|
8
|
+
let route = null;
|
|
9
|
+
if (typeof options.route === 'function') {
|
|
10
|
+
if (!options.pathParams) {
|
|
11
|
+
throw pathParamsMissingInRouteFunctionError(options.route({}));
|
|
12
|
+
}
|
|
13
|
+
route = options.route(options.pathParams);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
route = options.route ?? null;
|
|
17
|
+
}
|
|
18
|
+
if (route && !route.startsWith('/')) {
|
|
19
|
+
throw invalidRouteError(route);
|
|
20
|
+
}
|
|
21
|
+
if (options.queryParams) {
|
|
22
|
+
const queryString = buildQueryString(options.queryParams);
|
|
23
|
+
if (queryString) {
|
|
24
|
+
route = route ? `${route}?${queryString}` : `/?${queryString}`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return `${options.base}${route ?? ''}`;
|
|
28
|
+
};
|
|
29
|
+
export const buildQueryString = (params) => {
|
|
30
|
+
const validParams = filterInvalidParams(params);
|
|
31
|
+
const queryString = Object.keys(validParams)
|
|
32
|
+
.map((key) => Array.isArray(validParams[key])
|
|
33
|
+
? buildQueryArrayString(key, validParams[key])
|
|
34
|
+
: `${key}=${encodeURIComponent(validParams[key])}`)
|
|
35
|
+
.join('&');
|
|
36
|
+
return queryString || null;
|
|
37
|
+
};
|
|
38
|
+
export const buildQueryArrayString = (key, array) => {
|
|
39
|
+
const uriBrackets = encodeURIComponent('[]');
|
|
40
|
+
return array
|
|
41
|
+
.slice()
|
|
42
|
+
.map((item) => `${key}${uriBrackets}=${encodeURIComponent(item)}`)
|
|
43
|
+
.join('&');
|
|
44
|
+
};
|
|
45
|
+
export const isFetchResponse = (response) => typeof response === 'object' &&
|
|
46
|
+
response !== null &&
|
|
47
|
+
'status' in response &&
|
|
48
|
+
'statusText' in response &&
|
|
49
|
+
'json' in response &&
|
|
50
|
+
typeof response['json'] === 'function';
|
|
51
|
+
export const filterInvalidParams = (params) => {
|
|
52
|
+
const filteredParams = Object.entries(params)
|
|
53
|
+
.map(([key, value]) => {
|
|
54
|
+
if (!Array.isArray(value)) {
|
|
55
|
+
return [key, value];
|
|
56
|
+
}
|
|
57
|
+
return [key, value.filter((v) => isParamValid(v))];
|
|
58
|
+
})
|
|
59
|
+
.filter(([, value]) => isParamValid(value))
|
|
60
|
+
.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
|
|
61
|
+
return filteredParams;
|
|
62
|
+
};
|
|
63
|
+
export const isParamValid = (primitive) => {
|
|
64
|
+
if (primitive === undefined || primitive === null || primitive === '') {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
if (typeof primitive === 'string' && primitive.trim() === '') {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
if (typeof primitive === 'number' && isNaN(primitive)) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
return true;
|
|
74
|
+
};
|
|
75
|
+
export const extractExpiresInSeconds = (headers) => {
|
|
76
|
+
const cacheControl = headers.get('cache-control');
|
|
77
|
+
const age = headers.get('age');
|
|
78
|
+
const expires = headers.get('expires');
|
|
79
|
+
// In seconds
|
|
80
|
+
let expiresIn = null;
|
|
81
|
+
let maxAge = null;
|
|
82
|
+
if (cacheControl?.includes('no-cache')) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
if (cacheControl?.includes('max-age')) {
|
|
86
|
+
maxAge = parseInt(cacheControl.split('max-age=')[1]);
|
|
87
|
+
}
|
|
88
|
+
else if (cacheControl?.includes('s-maxage')) {
|
|
89
|
+
maxAge = parseInt(cacheControl.split('s-maxage=')[1]);
|
|
90
|
+
}
|
|
91
|
+
if (maxAge && age) {
|
|
92
|
+
const ageSeconds = parseInt(age);
|
|
93
|
+
expiresIn = maxAge - ageSeconds;
|
|
94
|
+
}
|
|
95
|
+
else if (expires) {
|
|
96
|
+
// Used by some apis to tell the response will never expire
|
|
97
|
+
// In this case we let the response expire after 1 hour
|
|
98
|
+
if (expires === '-1') {
|
|
99
|
+
expiresIn = 3600;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
const expiresDate = new Date(expires);
|
|
103
|
+
// check if the date is valid
|
|
104
|
+
if (expiresDate.toString() !== 'Invalid Date') {
|
|
105
|
+
expiresIn = Math.floor((expiresDate.getTime() - Date.now()) / 1000);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return expiresIn;
|
|
110
|
+
};
|
|
111
|
+
export const buildTimestampFromSeconds = (seconds) => {
|
|
112
|
+
if (seconds === null) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
return new Date(Date.now() + seconds * 1000).getTime();
|
|
116
|
+
};
|
|
117
|
+
export const buildRequestError = async (error) => {
|
|
118
|
+
if (error instanceof DOMException && error.code === error.ABORT_ERR) {
|
|
119
|
+
const err = {
|
|
120
|
+
code: -1,
|
|
121
|
+
message: 'Request aborted',
|
|
122
|
+
detail: null,
|
|
123
|
+
raw: error,
|
|
124
|
+
};
|
|
125
|
+
return err;
|
|
126
|
+
}
|
|
127
|
+
if (error instanceof SyntaxError) {
|
|
128
|
+
const err = {
|
|
129
|
+
code: -3,
|
|
130
|
+
message: 'Syntax error',
|
|
131
|
+
detail: null,
|
|
132
|
+
raw: error,
|
|
133
|
+
};
|
|
134
|
+
return err;
|
|
135
|
+
}
|
|
136
|
+
if (error instanceof Error) {
|
|
137
|
+
const err = {
|
|
138
|
+
code: -2,
|
|
139
|
+
message: `${error.name}: ${error.message}`,
|
|
140
|
+
detail: null,
|
|
141
|
+
raw: error,
|
|
142
|
+
};
|
|
143
|
+
return err;
|
|
144
|
+
}
|
|
145
|
+
if (isFetchResponse(error)) {
|
|
146
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
147
|
+
let detail;
|
|
148
|
+
try {
|
|
149
|
+
detail = await error.text();
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
detail = null;
|
|
153
|
+
}
|
|
154
|
+
const err = {
|
|
155
|
+
code: error.status,
|
|
156
|
+
message: error.statusText,
|
|
157
|
+
detail,
|
|
158
|
+
raw: error,
|
|
159
|
+
};
|
|
160
|
+
return err;
|
|
161
|
+
}
|
|
162
|
+
const err = {
|
|
163
|
+
code: 0,
|
|
164
|
+
message: 'Unknown error',
|
|
165
|
+
detail: null,
|
|
166
|
+
raw: error,
|
|
167
|
+
};
|
|
168
|
+
return err;
|
|
169
|
+
};
|
|
170
|
+
export const buildBody = (body) => {
|
|
171
|
+
if (body === undefined || body === null) {
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
if (typeof body === 'string') {
|
|
175
|
+
return body;
|
|
176
|
+
}
|
|
177
|
+
if (typeof body === 'object') {
|
|
178
|
+
return JSON.stringify(body);
|
|
179
|
+
}
|
|
180
|
+
if (body instanceof FormData) {
|
|
181
|
+
return body;
|
|
182
|
+
}
|
|
183
|
+
throw invalidBodyError(body);
|
|
184
|
+
};
|
|
185
|
+
export const transformMethod = (method) => {
|
|
186
|
+
if (method === 'GQL_QUERY' || method === 'GQL_MUTATE') {
|
|
187
|
+
return 'POST';
|
|
188
|
+
}
|
|
189
|
+
return method;
|
|
190
|
+
};
|
|
191
|
+
export const guessContentType = (body) => {
|
|
192
|
+
if (body === null || body === undefined) {
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
if (typeof body === 'string') {
|
|
196
|
+
return 'text/plain';
|
|
197
|
+
}
|
|
198
|
+
if (body instanceof FormData) {
|
|
199
|
+
return 'multipart/form-data';
|
|
200
|
+
}
|
|
201
|
+
if (typeof body === 'object') {
|
|
202
|
+
return 'application/json';
|
|
203
|
+
}
|
|
204
|
+
return null;
|
|
205
|
+
};
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL3JlcXVlc3QvcmVxdWVzdC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixxQ0FBcUMsR0FDdEMsTUFBTSxXQUFXLENBQUM7QUFHbkIsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBYyxFQUF5QixFQUFFLENBQ3RFLEtBQUssWUFBWSxNQUFNLElBQUksTUFBTSxJQUFJLEtBQUssSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBYyxFQUF5QixFQUFFLENBQzNFLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BSzFCLEVBQUUsRUFBRTtJQUNILElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDOUIsTUFBTSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDM0M7SUFFRCxJQUFJLEtBQUssR0FBa0IsSUFBSSxDQUFDO0lBRWhDLElBQUksT0FBTyxPQUFPLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtRQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtZQUN2QixNQUFNLHFDQUFxQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNoRTtRQUVELEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUMzQztTQUFNO1FBQ0wsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0tBQy9CO0lBRUQsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ25DLE1BQU0saUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDaEM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7UUFDdkIsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTFELElBQUksV0FBVyxFQUFFO1lBQ2YsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssV0FBVyxFQUFFLENBQUM7U0FDaEU7S0FDRjtJQUVELE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUN6QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE1BQW1CLEVBQUUsRUFBRTtJQUN0RCxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVoRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUN6QyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNYLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBZSxDQUFDO1FBQzVELENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUE4QixDQUFDLEVBQUUsQ0FDbEY7U0FDQSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFYixPQUFPLFdBQVcsSUFBSSxJQUFJLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBaUIsRUFBRSxFQUFFO0lBQ3RFLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTdDLE9BQU8sS0FBSztTQUNULEtBQUssRUFBRTtTQUNQLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsV0FBVyxJQUFJLGtCQUFrQixDQUFDLElBQWlDLENBQUMsRUFBRSxDQUFDO1NBQzlGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLFFBQWlCLEVBQXdCLEVBQUUsQ0FDekUsT0FBTyxRQUFRLEtBQUssUUFBUTtJQUM1QixRQUFRLEtBQUssSUFBSTtJQUNqQixRQUFRLElBQUksUUFBUTtJQUNwQixZQUFZLElBQUksUUFBUTtJQUN4QixNQUFNLElBQUksUUFBUTtJQUNsQixPQUFRLFFBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssVUFBVSxDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsTUFBbUIsRUFBRSxFQUFFO0lBQ3pELE1BQU0sY0FBYyxHQUFXLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekIsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNyQjtRQUVELE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDLENBQUM7U0FDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFpQyxDQUFDLENBQUM7U0FDdEUsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTNFLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLFNBQW1DLEVBQUUsRUFBRTtJQUNsRSxJQUFJLFNBQVMsS0FBSyxTQUFTLElBQUksU0FBUyxLQUFLLElBQUksSUFBSSxTQUFTLEtBQUssRUFBRSxFQUFFO1FBQ3JFLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzVELE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDckQsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxPQUFnQixFQUFFLEVBQUU7SUFDMUQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNsRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFdkMsYUFBYTtJQUNiLElBQUksU0FBUyxHQUFrQixJQUFJLENBQUM7SUFDcEMsSUFBSSxNQUFNLEdBQWtCLElBQUksQ0FBQztJQUVqQyxJQUFJLFlBQVksRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDdEMsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELElBQUksWUFBWSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUNyQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0RDtTQUFNLElBQUksWUFBWSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUM3QyxNQUFNLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN2RDtJQUVELElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRTtRQUNqQixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFakMsU0FBUyxHQUFHLE1BQU0sR0FBRyxVQUFVLENBQUM7S0FDakM7U0FBTSxJQUFJLE9BQU8sRUFBRTtRQUNsQiwyREFBMkQ7UUFDM0QsdURBQXVEO1FBQ3ZELElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtZQUNwQixTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ2xCO2FBQU07WUFDTCxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV0Qyw2QkFBNkI7WUFDN0IsSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssY0FBYyxFQUFFO2dCQUM3QyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQzthQUNyRTtTQUNGO0tBQ0Y7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLE9BQXNCLEVBQUUsRUFBRTtJQUNsRSxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7UUFDcEIsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN6RCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEVBQTJCLEtBQWMsRUFBRSxFQUFFO0lBQ2pGLElBQUksS0FBSyxZQUFZLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxTQUFTLEVBQUU7UUFDbkUsTUFBTSxHQUFHLEdBQXVCO1lBQzlCLElBQUksRUFBRSxDQUFDLENBQUM7WUFDUixPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLE1BQU0sRUFBRSxJQUFJO1lBQ1osR0FBRyxFQUFFLEtBQUs7U0FDWCxDQUFDO1FBRUYsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUVELElBQUksS0FBSyxZQUFZLFdBQVcsRUFBRTtRQUNoQyxNQUFNLEdBQUcsR0FBdUI7WUFDOUIsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNSLE9BQU8sRUFBRSxjQUFjO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJO1lBQ1osR0FBRyxFQUFFLEtBQUs7U0FDWCxDQUFDO1FBRUYsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUVELElBQUksS0FBSyxZQUFZLEtBQUssRUFBRTtRQUMxQixNQUFNLEdBQUcsR0FBdUI7WUFDOUIsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNSLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUMxQyxNQUFNLEVBQUUsSUFBSTtZQUNaLEdBQUcsRUFBRSxLQUFLO1NBQ1gsQ0FBQztRQUVGLE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFFRCxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUMxQiw4REFBOEQ7UUFDOUQsSUFBSSxNQUFXLENBQUM7UUFFaEIsSUFBSTtZQUNGLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUM3QjtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osTUFBTSxHQUFHLElBQUksQ0FBQztTQUNmO1FBRUQsTUFBTSxHQUFHLEdBQWdDO1lBQ3ZDLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNsQixPQUFPLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDekIsTUFBTTtZQUNOLEdBQUcsRUFBRSxLQUFLO1NBQ1gsQ0FBQztRQUVGLE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFFRCxNQUFNLEdBQUcsR0FBdUI7UUFDOUIsSUFBSSxFQUFFLENBQUM7UUFDUCxPQUFPLEVBQUUsZUFBZTtRQUN4QixNQUFNLEVBQUUsSUFBSTtRQUNaLEdBQUcsRUFBRSxLQUFLO0tBQ1gsQ0FBQztJQUVGLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBYSxFQUFFLEVBQUU7SUFDekMsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7UUFDdkMsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUM1QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDN0I7SUFFRCxJQUFJLElBQUksWUFBWSxRQUFRLEVBQUU7UUFDNUIsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUU7SUFDaEQsSUFBSSxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sS0FBSyxZQUFZLEVBQUU7UUFDckQsT0FBTyxNQUFNLENBQUM7S0FDZjtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBYSxFQUFFLEVBQUU7SUFDaEQsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDdkMsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1FBQzVCLE9BQU8sWUFBWSxDQUFDO0tBQ3JCO0lBRUQsSUFBSSxJQUFJLFlBQVksUUFBUSxFQUFFO1FBQzVCLE9BQU8scUJBQXFCLENBQUM7S0FDOUI7SUFFRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUM1QixPQUFPLGtCQUFrQixDQUFDO0tBQzNCO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBpbnZhbGlkQmFzZVJvdXRlRXJyb3IsXG4gIGludmFsaWRCb2R5RXJyb3IsXG4gIGludmFsaWRSb3V0ZUVycm9yLFxuICBwYXRoUGFyYW1zTWlzc2luZ0luUm91dGVGdW5jdGlvbkVycm9yLFxufSBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgUXVlcnlQYXJhbXMsIFBhcmFtcywgUmVxdWVzdEVycm9yLCBQYXJhbUFycmF5LCBVbmZpbHRlcmVkUGFyYW1QcmltaXRpdmUsIE1ldGhvZCB9IGZyb20gJy4vcmVxdWVzdC50eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBpc1JlcXVlc3RFcnJvciA9IChlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIFJlcXVlc3RFcnJvciA9PlxuICBlcnJvciBpbnN0YW5jZW9mIE9iamVjdCAmJiAnY29kZScgaW4gZXJyb3IgJiYgJ21lc3NhZ2UnIGluIGVycm9yO1xuXG5leHBvcnQgY29uc3QgaXNBYm9ydFJlcXVlc3RFcnJvciA9IChlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIFJlcXVlc3RFcnJvciA9PlxuICBpc1JlcXVlc3RFcnJvcihlcnJvcikgJiYgZXJyb3IuY29kZSA9PT0gLTE7XG5cbmV4cG9ydCBjb25zdCBidWlsZFJvdXRlID0gKG9wdGlvbnM6IHtcbiAgYmFzZTogc3RyaW5nO1xuICByb3V0ZTogKChhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gc3RyaW5nKSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHBhdGhQYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcXVlcnlQYXJhbXM/OiBRdWVyeVBhcmFtcztcbn0pID0+IHtcbiAgaWYgKG9wdGlvbnMuYmFzZS5lbmRzV2l0aCgnLycpKSB7XG4gICAgdGhyb3cgaW52YWxpZEJhc2VSb3V0ZUVycm9yKG9wdGlvbnMuYmFzZSk7XG4gIH1cblxuICBsZXQgcm91dGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5yb3V0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICghb3B0aW9ucy5wYXRoUGFyYW1zKSB7XG4gICAgICB0aHJvdyBwYXRoUGFyYW1zTWlzc2luZ0luUm91dGVGdW5jdGlvbkVycm9yKG9wdGlvbnMucm91dGUoe30pKTtcbiAgICB9XG5cbiAgICByb3V0ZSA9IG9wdGlvbnMucm91dGUob3B0aW9ucy5wYXRoUGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICByb3V0ZSA9IG9wdGlvbnMucm91dGUgPz8gbnVsbDtcbiAgfVxuXG4gIGlmIChyb3V0ZSAmJiAhcm91dGUuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgdGhyb3cgaW52YWxpZFJvdXRlRXJyb3Iocm91dGUpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMucXVlcnlQYXJhbXMpIHtcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IGJ1aWxkUXVlcnlTdHJpbmcob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG5cbiAgICBpZiAocXVlcnlTdHJpbmcpIHtcbiAgICAgIHJvdXRlID0gcm91dGUgPyBgJHtyb3V0ZX0/JHtxdWVyeVN0cmluZ31gIDogYC8/JHtxdWVyeVN0cmluZ31gO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBgJHtvcHRpb25zLmJhc2V9JHtyb3V0ZSA/PyAnJ31gO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkUXVlcnlTdHJpbmcgPSAocGFyYW1zOiBRdWVyeVBhcmFtcykgPT4ge1xuICBjb25zdCB2YWxpZFBhcmFtcyA9IGZpbHRlckludmFsaWRQYXJhbXMocGFyYW1zKTtcblxuICBjb25zdCBxdWVyeVN0cmluZyA9IE9iamVjdC5rZXlzKHZhbGlkUGFyYW1zKVxuICAgIC5tYXAoKGtleSkgPT5cbiAgICAgIEFycmF5LmlzQXJyYXkodmFsaWRQYXJhbXNba2V5XSlcbiAgICAgICAgPyBidWlsZFF1ZXJ5QXJyYXlTdHJpbmcoa2V5LCB2YWxpZFBhcmFtc1trZXldIGFzIFBhcmFtQXJyYXkpXG4gICAgICAgIDogYCR7a2V5fT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWxpZFBhcmFtc1trZXldIGFzIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4pfWAsXG4gICAgKVxuICAgIC5qb2luKCcmJyk7XG5cbiAgcmV0dXJuIHF1ZXJ5U3RyaW5nIHx8IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRRdWVyeUFycmF5U3RyaW5nID0gKGtleTogc3RyaW5nLCBhcnJheTogUGFyYW1BcnJheSkgPT4ge1xuICBjb25zdCB1cmlCcmFja2V0cyA9IGVuY29kZVVSSUNvbXBvbmVudCgnW10nKTtcblxuICByZXR1cm4gYXJyYXlcbiAgICAuc2xpY2UoKVxuICAgIC5tYXAoKGl0ZW0pID0+IGAke2tleX0ke3VyaUJyYWNrZXRzfT0ke2VuY29kZVVSSUNvbXBvbmVudChpdGVtIGFzIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4pfWApXG4gICAgLmpvaW4oJyYnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0ZldGNoUmVzcG9uc2UgPSAocmVzcG9uc2U6IHVua25vd24pOiByZXNwb25zZSBpcyBSZXNwb25zZSA9PlxuICB0eXBlb2YgcmVzcG9uc2UgPT09ICdvYmplY3QnICYmXG4gIHJlc3BvbnNlICE9PSBudWxsICYmXG4gICdzdGF0dXMnIGluIHJlc3BvbnNlICYmXG4gICdzdGF0dXNUZXh0JyBpbiByZXNwb25zZSAmJlxuICAnanNvbicgaW4gcmVzcG9uc2UgJiZcbiAgdHlwZW9mIChyZXNwb25zZSBhcyBSZXNwb25zZSlbJ2pzb24nXSA9PT0gJ2Z1bmN0aW9uJztcblxuZXhwb3J0IGNvbnN0IGZpbHRlckludmFsaWRQYXJhbXMgPSAocGFyYW1zOiBRdWVyeVBhcmFtcykgPT4ge1xuICBjb25zdCBmaWx0ZXJlZFBhcmFtczogUGFyYW1zID0gT2JqZWN0LmVudHJpZXMocGFyYW1zKVxuICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gW2tleSwgdmFsdWVdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW2tleSwgdmFsdWUuZmlsdGVyKCh2KSA9PiBpc1BhcmFtVmFsaWQodikpXTtcbiAgICB9KVxuICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gaXNQYXJhbVZhbGlkKHZhbHVlIGFzIFVuZmlsdGVyZWRQYXJhbVByaW1pdGl2ZSkpXG4gICAgLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+ICh7IC4uLmFjYywgW2tleSBhcyBzdHJpbmddOiB2YWx1ZSB9KSwge30pO1xuXG4gIHJldHVybiBmaWx0ZXJlZFBhcmFtcztcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BhcmFtVmFsaWQgPSAocHJpbWl0aXZlOiBVbmZpbHRlcmVkUGFyYW1QcmltaXRpdmUpID0+IHtcbiAgaWYgKHByaW1pdGl2ZSA9PT0gdW5kZWZpbmVkIHx8IHByaW1pdGl2ZSA9PT0gbnVsbCB8fCBwcmltaXRpdmUgPT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwcmltaXRpdmUgPT09ICdzdHJpbmcnICYmIHByaW1pdGl2ZS50cmltKCkgPT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwcmltaXRpdmUgPT09ICdudW1iZXInICYmIGlzTmFOKHByaW1pdGl2ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0RXhwaXJlc0luU2Vjb25kcyA9IChoZWFkZXJzOiBIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IGNhY2hlQ29udHJvbCA9IGhlYWRlcnMuZ2V0KCdjYWNoZS1jb250cm9sJyk7XG4gIGNvbnN0IGFnZSA9IGhlYWRlcnMuZ2V0KCdhZ2UnKTtcbiAgY29uc3QgZXhwaXJlcyA9IGhlYWRlcnMuZ2V0KCdleHBpcmVzJyk7XG5cbiAgLy8gSW4gc2Vjb25kc1xuICBsZXQgZXhwaXJlc0luOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgbGV0IG1heEFnZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgaWYgKGNhY2hlQ29udHJvbD8uaW5jbHVkZXMoJ25vLWNhY2hlJykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjYWNoZUNvbnRyb2w/LmluY2x1ZGVzKCdtYXgtYWdlJykpIHtcbiAgICBtYXhBZ2UgPSBwYXJzZUludChjYWNoZUNvbnRyb2wuc3BsaXQoJ21heC1hZ2U9JylbMV0pO1xuICB9IGVsc2UgaWYgKGNhY2hlQ29udHJvbD8uaW5jbHVkZXMoJ3MtbWF4YWdlJykpIHtcbiAgICBtYXhBZ2UgPSBwYXJzZUludChjYWNoZUNvbnRyb2wuc3BsaXQoJ3MtbWF4YWdlPScpWzFdKTtcbiAgfVxuXG4gIGlmIChtYXhBZ2UgJiYgYWdlKSB7XG4gICAgY29uc3QgYWdlU2Vjb25kcyA9IHBhcnNlSW50KGFnZSk7XG5cbiAgICBleHBpcmVzSW4gPSBtYXhBZ2UgLSBhZ2VTZWNvbmRzO1xuICB9IGVsc2UgaWYgKGV4cGlyZXMpIHtcbiAgICAvLyBVc2VkIGJ5IHNvbWUgYXBpcyB0byB0ZWxsIHRoZSByZXNwb25zZSB3aWxsIG5ldmVyIGV4cGlyZVxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBsZXQgdGhlIHJlc3BvbnNlIGV4cGlyZSBhZnRlciAxIGhvdXJcbiAgICBpZiAoZXhwaXJlcyA9PT0gJy0xJykge1xuICAgICAgZXhwaXJlc0luID0gMzYwMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXhwaXJlc0RhdGUgPSBuZXcgRGF0ZShleHBpcmVzKTtcblxuICAgICAgLy8gY2hlY2sgaWYgdGhlIGRhdGUgaXMgdmFsaWRcbiAgICAgIGlmIChleHBpcmVzRGF0ZS50b1N0cmluZygpICE9PSAnSW52YWxpZCBEYXRlJykge1xuICAgICAgICBleHBpcmVzSW4gPSBNYXRoLmZsb29yKChleHBpcmVzRGF0ZS5nZXRUaW1lKCkgLSBEYXRlLm5vdygpKSAvIDEwMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHBpcmVzSW47XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRUaW1lc3RhbXBGcm9tU2Vjb25kcyA9IChzZWNvbmRzOiBudW1iZXIgfCBudWxsKSA9PiB7XG4gIGlmIChzZWNvbmRzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5ub3coKSArIHNlY29uZHMgKiAxMDAwKS5nZXRUaW1lKCk7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRSZXF1ZXN0RXJyb3IgPSBhc3luYyA8RXJyb3JSZXNwb25zZSA9IHVua25vd24+KGVycm9yOiB1bmtub3duKSA9PiB7XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiAmJiBlcnJvci5jb2RlID09PSBlcnJvci5BQk9SVF9FUlIpIHtcbiAgICBjb25zdCBlcnI6IFJlcXVlc3RFcnJvcjxudWxsPiA9IHtcbiAgICAgIGNvZGU6IC0xLFxuICAgICAgbWVzc2FnZTogJ1JlcXVlc3QgYWJvcnRlZCcsXG4gICAgICBkZXRhaWw6IG51bGwsXG4gICAgICByYXc6IGVycm9yLFxuICAgIH07XG5cbiAgICByZXR1cm4gZXJyO1xuICB9XG5cbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICBjb25zdCBlcnI6IFJlcXVlc3RFcnJvcjxudWxsPiA9IHtcbiAgICAgIGNvZGU6IC0zLFxuICAgICAgbWVzc2FnZTogJ1N5bnRheCBlcnJvcicsXG4gICAgICBkZXRhaWw6IG51bGwsXG4gICAgICByYXc6IGVycm9yLFxuICAgIH07XG5cbiAgICByZXR1cm4gZXJyO1xuICB9XG5cbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICBjb25zdCBlcnI6IFJlcXVlc3RFcnJvcjxudWxsPiA9IHtcbiAgICAgIGNvZGU6IC0yLFxuICAgICAgbWVzc2FnZTogYCR7ZXJyb3IubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gLFxuICAgICAgZGV0YWlsOiBudWxsLFxuICAgICAgcmF3OiBlcnJvcixcbiAgICB9O1xuXG4gICAgcmV0dXJuIGVycjtcbiAgfVxuXG4gIGlmIChpc0ZldGNoUmVzcG9uc2UoZXJyb3IpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBsZXQgZGV0YWlsOiBhbnk7XG5cbiAgICB0cnkge1xuICAgICAgZGV0YWlsID0gYXdhaXQgZXJyb3IudGV4dCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZGV0YWlsID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBlcnI6IFJlcXVlc3RFcnJvcjxFcnJvclJlc3BvbnNlPiA9IHtcbiAgICAgIGNvZGU6IGVycm9yLnN0YXR1cyxcbiAgICAgIG1lc3NhZ2U6IGVycm9yLnN0YXR1c1RleHQsXG4gICAgICBkZXRhaWwsXG4gICAgICByYXc6IGVycm9yLFxuICAgIH07XG5cbiAgICByZXR1cm4gZXJyO1xuICB9XG5cbiAgY29uc3QgZXJyOiBSZXF1ZXN0RXJyb3I8bnVsbD4gPSB7XG4gICAgY29kZTogMCxcbiAgICBtZXNzYWdlOiAnVW5rbm93biBlcnJvcicsXG4gICAgZGV0YWlsOiBudWxsLFxuICAgIHJhdzogZXJyb3IsXG4gIH07XG5cbiAgcmV0dXJuIGVycjtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZEJvZHkgPSAoYm9keTogdW5rbm93bikgPT4ge1xuICBpZiAoYm9keSA9PT0gdW5kZWZpbmVkIHx8IGJvZHkgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG4gIH1cblxuICBpZiAoYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICB0aHJvdyBpbnZhbGlkQm9keUVycm9yKGJvZHkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybU1ldGhvZCA9IChtZXRob2Q6IE1ldGhvZCkgPT4ge1xuICBpZiAobWV0aG9kID09PSAnR1FMX1FVRVJZJyB8fCBtZXRob2QgPT09ICdHUUxfTVVUQVRFJykge1xuICAgIHJldHVybiAnUE9TVCc7XG4gIH1cblxuICByZXR1cm4gbWV0aG9kO1xufTtcblxuZXhwb3J0IGNvbnN0IGd1ZXNzQ29udGVudFR5cGUgPSAoYm9keTogdW5rbm93bikgPT4ge1xuICBpZiAoYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gJ3RleHQvcGxhaW4nO1xuICB9XG5cbiAgaWYgKGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgIHJldHVybiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc7XG4gIH1cblxuICBpZiAodHlwZW9mIGJvZHkgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbiJdfQ==
|