@ethlete/query 4.4.0 → 4.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -19,7 +19,7 @@ export const buildRoute = (options) => {
19
19
  throw invalidRouteError(route);
20
20
  }
21
21
  if (options.queryParams) {
22
- const queryString = buildQueryString(options.queryParams);
22
+ const queryString = buildQueryString(options.queryParams, options.queryParamConfig);
23
23
  if (queryString) {
24
24
  route = route ? `${route}?${queryString}` : `/?${queryString}`;
25
25
  }
@@ -220,4 +220,4 @@ export const shouldRetryRequest = (config) => {
220
220
  }
221
221
  return { retry: false };
222
222
  };
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL3JlcXVlc3QvcmVxdWVzdC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1RyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFVaEUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQWMsS0FBYyxFQUE0QixFQUFFLENBQ3RGLEtBQUssWUFBWSxNQUFNLElBQUksUUFBUSxJQUFJLEtBQUssSUFBSSxZQUFZLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUM7QUFFMUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsT0FNMUIsRUFBRSxFQUFFO0lBQ0gsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUM5QixNQUFNLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMzQztJQUVELElBQUksS0FBSyxHQUFrQixJQUFJLENBQUM7SUFFaEMsSUFBSSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQ3ZCLE1BQU0scUNBQXFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQzNDO1NBQU07UUFDTCxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7S0FDL0I7SUFFRCxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxV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LEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLENBQUM7S0FDbEQ7SUFFRCxzQkFBc0I7SUFDdEIsSUFBSSxNQUFNLDZDQUFtQyxFQUFFO1FBQzdDLE1BQU0sVUFBVSxHQUNkLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFbEMsSUFBSSxVQUFVLEVBQUU7WUFDZCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDaEY7UUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztLQUNsRDtJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDMUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW52YWxpZEJhc2VSb3V0ZUVycm9yLCBpbnZhbGlkUm91dGVFcnJvciwgcGF0aFBhcmFtc01pc3NpbmdJblJvdXRlRnVuY3Rpb25FcnJvciB9IGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBpc1N5bWZvbnlQYWdlcmZhbnRhT3V0T2ZSYW5nZUVycm9yIH0gZnJvbSAnLi4vc3ltZm9ueSc7XG5pbXBvcnQge1xuICBCdWlsZFF1ZXJ5U3RyaW5nQ29uZmlnLFxuICBNZXRob2QsXG4gIFF1ZXJ5UGFyYW1zLFxuICBSZXF1ZXN0RXJyb3IsXG4gIFJlcXVlc3RIZWFkZXJzLFxuICBSZXF1ZXN0UmV0cnlGbixcbn0gZnJvbSAnLi9yZXF1ZXN0LnR5cGVzJztcblxuZXhwb3J0IGNvbnN0IGlzUmVxdWVzdEVycm9yID0gPFQgPSB1bmtub3duPihlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIFJlcXVlc3RFcnJvcjxUPiA9PlxuICBlcnJvciBpbnN0YW5jZW9mIE9iamVjdCAmJiAnc3RhdHVzJyBpbiBlcnJvciAmJiAnc3RhdHVzVGV4dCcgaW4gZXJyb3IgJiYgJ3VybCcgaW4gZXJyb3I7XG5cbmV4cG9ydCBjb25zdCBidWlsZFJvdXRlID0gKG9wdGlvbnM6IHtcbiAgYmFzZTogc3RyaW5nO1xuICByb3V0ZTogKChhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gc3RyaW5nKSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHBhdGhQYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcXVlcnlQYXJhbXM/OiBRdWVyeVBhcmFtcztcbiAgcXVlcnlQYXJhbUNvbmZpZz86IEJ1aWxkUXVlcnlTdHJpbmdDb25maWc7XG59KSA9PiB7XG4gIGlmIChvcHRpb25zLmJhc2UuZW5kc1dpdGgoJy8nKSkge1xuICAgIHRocm93IGludmFsaWRCYXNlUm91dGVFcnJvcihvcHRpb25zLmJhc2UpO1xuICB9XG5cbiAgbGV0IHJvdXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMucm91dGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoIW9wdGlvbnMucGF0aFBhcmFtcykge1xuICAgICAgdGhyb3cgcGF0aFBhcmFtc01pc3NpbmdJblJvdXRlRnVuY3Rpb25FcnJvcihvcHRpb25zLnJvdXRlKHt9KSk7XG4gICAgfVxuXG4gICAgcm91dGUgPSBvcHRpb25zLnJvdXRlKG9wdGlvbnMucGF0aFBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgcm91dGUgPSBvcHRpb25zLnJvdXRlID8/IG51bGw7XG4gIH1cblxuICBpZiAocm91dGUgJiYgIXJvdXRlLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHRocm93IGludmFsaWRSb3V0ZUVycm9yKHJvdXRlKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnF1ZXJ5UGFyYW1zKSB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBidWlsZFF1ZXJ5U3RyaW5nKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXG4gICAgaWYgKHF1ZXJ5U3RyaW5nKSB7XG4gICAgICByb3V0ZSA9IHJvdXRlID8gYCR7cm91dGV9PyR7cXVlcnlTdHJpbmd9YCA6IGAvPyR7cXVlcnlTdHJpbmd9YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYCR7b3B0aW9ucy5iYXNlfSR7cm91dGUgPz8gJyd9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZFF1ZXJ5U3RyaW5nID0gKHBhcmFtczogUXVlcnlQYXJhbXMsIGNvbmZpZz86IEJ1aWxkUXVlcnlTdHJpbmdDb25maWcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3Qgb2JqZWN0Tm90YXRpb24gPSBjb25maWc/Lm9iamVjdE5vdGF0aW9uID8/ICdicmFja2V0JztcbiAgY29uc3Qgd3JpdGVBcnJheUluZGV4ZXMgPSBjb25maWc/LndyaXRlQXJyYXlJbmRleGVzID8/IGZhbHNlO1xuXG4gIGNvbnN0IHF1ZXJ5UGFyYW1zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZ1bmN0aW9uIHByb2Nlc3NWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgW2luZGV4LCBhcnJheVZhbHVlXSBvZiB2YWx1ZS5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3QgbmVzdGVkS2V5ID0gd3JpdGVBcnJheUluZGV4ZXMgPyBgJHtrZXl9WyR7aW5kZXh9XWAgOiBgJHtrZXl9W11gO1xuXG4gICAgICAgIHByb2Nlc3NWYWx1ZShuZXN0ZWRLZXksIGFycmF5VmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgZm9yIChjb25zdCBbb2JqS2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgICBjb25zdCBuZXN0ZWRLZXkgPSBvYmplY3ROb3RhdGlvbiA9PT0gJ2RvdCcgPyBgJHtrZXl9LiR7b2JqS2V5fWAgOiBgJHtrZXl9WyR7b2JqS2V5fV1gO1xuICAgICAgICBwcm9jZXNzVmFsdWUobmVzdGVkS2V5LCB2YWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlbmNvZGVkS2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSk7XG4gICAgICBjb25zdCBlbmNvZGVkVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgIHF1ZXJ5UGFyYW1zLnB1c2goYCR7ZW5jb2RlZEtleX09JHtlbmNvZGVkVmFsdWV9YCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKHBhcmFtcykpIHtcbiAgICBwcm9jZXNzVmFsdWUoa2V5LCB2YWwpO1xuICB9XG5cbiAgcmV0dXJuIHF1ZXJ5UGFyYW1zLmxlbmd0aCA/IHF1ZXJ5UGFyYW1zLmpvaW4oJyYnKSA6IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdEV4cGlyZXNJblNlY29uZHMgPSAoaGVhZGVyczogUmVxdWVzdEhlYWRlcnMpID0+IHtcbiAgY29uc3QgY2FjaGVDb250cm9sID0gaGVhZGVyc1snY2FjaGUtY29udHJvbCddO1xuICBjb25zdCBhZ2UgPSBoZWFkZXJzWydhZ2UnXTtcbiAgY29uc3QgZXhwaXJlcyA9IGhlYWRlcnNbJ2V4cGlyZXMnXTtcblxuICAvLyBJbiBzZWNvbmRzXG4gIGxldCBleHBpcmVzSW46IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBsZXQgbWF4QWdlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBpZiAoY2FjaGVDb250cm9sPy5pbmNsdWRlcygnbm8tY2FjaGUnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNhY2hlQ29udHJvbD8uaW5jbHVkZXMoJ21heC1hZ2UnKSkge1xuICAgIG1heEFnZSA9IHBhcnNlSW50KGNhY2hlQ29udHJvbC5zcGxpdCgnbWF4LWFnZT0nKVsxXSk7XG4gIH0gZWxzZSBpZiAoY2FjaGVDb250cm9sPy5pbmNsdWRlcygncy1tYXhhZ2UnKSkge1xuICAgIG1heEFnZSA9IHBhcnNlSW50KGNhY2hlQ29udHJvbC5zcGxpdCgncy1tYXhhZ2U9JylbMV0pO1xuICB9XG5cbiAgaWYgKG1heEFnZSAmJiBhZ2UpIHtcbiAgICBjb25zdCBhZ2VTZWNvbmRzID0gcGFyc2VJbnQoYWdlKTtcblxuICAgIGV4cGlyZXNJbiA9IG1heEFnZSAtIGFnZVNlY29uZHM7XG4gIH0gZWxzZSBpZiAobWF4QWdlKSB7XG4gICAgZXhwaXJlc0luID0gbWF4QWdlIC8gMjsgLy8gV2UgYXNzdW1lIHRoZSByZXNwb25zZSBpcyBoYWxmIHdheSB0byBpdHMgZXhwaXJhdGlvblxuICB9IGVsc2UgaWYgKGV4cGlyZXMpIHtcbiAgICAvLyBVc2VkIGJ5IHNvbWUgYXBpcyB0byB0ZWxsIHRoZSByZXNwb25zZSB3aWxsIG5ldmVyIGV4cGlyZVxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBsZXQgdGhlIHJlc3BvbnNlIGV4cGlyZSBhZnRlciAxIGhvdXJcbiAgICBpZiAoZXhwaXJlcyA9PT0gJy0xJykge1xuICAgICAgZXhwaXJlc0luID0gMzYwMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXhwaXJlc0RhdGUgPSBuZXcgRGF0ZShleHBpcmVzKTtcblxuICAgICAgLy8gY2hlY2sgaWYgdGhlIGRhdGUgaXMgdmFsaWRcbiAgICAgIGlmIChleHBpcmVzRGF0ZS50b1N0cmluZygpICE9PSAnSW52YWxpZCBEYXRlJykge1xuICAgICAgICBleHBpcmVzSW4gPSBNYXRoLmZsb29yKChleHBpcmVzRGF0ZS5nZXRUaW1lKCkgLSBEYXRlLm5vdygpKSAvIDEwMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHBpcmVzSW47XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRUaW1lc3RhbXBGcm9tU2Vjb25kcyA9IChzZWNvbmRzOiBudW1iZXIgfCBudWxsKSA9PiB7XG4gIGlmIChzZWNvbmRzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5ub3coKSArIHNlY29uZHMgKiAxMDAwKS5nZXRUaW1lKCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplQm9keSA9IChib2R5OiB1bmtub3duKTogQXJyYXlCdWZmZXIgfCBVUkxTZWFyY2hQYXJhbXMgfCBCbG9iIHwgRm9ybURhdGEgfCBzdHJpbmcgfCBudWxsID0+IHtcbiAgaWYgKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoXG4gICAgYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8XG4gICAgYm9keSBpbnN0YW5jZW9mIEJsb2IgfHxcbiAgICBib2R5IGluc3RhbmNlb2YgRm9ybURhdGEgfHxcbiAgICBib2R5IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zIHx8XG4gICAgdHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnXG4gICkge1xuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgYm9keSA9PT0gJ2Jvb2xlYW4nIHx8IEFycmF5LmlzQXJyYXkoYm9keSkpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG4gIH1cblxuICByZXR1cm4gKGJvZHkgYXMgYW55KS50b1N0cmluZygpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybU1ldGhvZCA9IChjb25maWc6IHsgbWV0aG9kOiBNZXRob2Q7IHRyYW5zZmVyVmlhPzogJ0dFVCcgfCAnUE9TVCcgfSkgPT4ge1xuICBpZiAoY29uZmlnLm1ldGhvZCA9PT0gJ0dRTF9RVUVSWScgfHwgY29uZmlnLm1ldGhvZCA9PT0gJ0dRTF9NVVRBVEUnKSB7XG4gICAgaWYgKCFjb25maWcudHJhbnNmZXJWaWEpIHtcbiAgICAgIHJldHVybiAnUE9TVCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZy50cmFuc2ZlclZpYTtcbiAgfVxuXG4gIHJldHVybiBjb25maWcubWV0aG9kO1xufTtcblxuZXhwb3J0IGNvbnN0IGRldGVjdENvbnRlbnRUeXBlSGVhZGVyID0gKGJvZHk6IHVua25vd24pID0+IHtcbiAgLy8gQW4gZW1wdHkgYm9keSBoYXMgbm8gY29udGVudCB0eXBlLlxuICBpZiAoYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIEZvcm1EYXRhIGJvZGllcyByZWx5IG9uIHRoZSBicm93c2VyJ3MgY29udGVudCB0eXBlIGFzc2lnbm1lbnQuXG4gIGlmIChib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBCbG9icyB1c3VhbGx5IGhhdmUgdGhlaXIgb3duIGNvbnRlbnQgdHlwZS4gSWYgaXQgZG9lc24ndCwgdGhlblxuICAvLyBubyB0eXBlIGNhbiBiZSBpbmZlcnJlZC5cbiAgaWYgKGJvZHkgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgcmV0dXJuIGJvZHkudHlwZSB8fCBudWxsO1xuICB9XG4gIC8vIEFycmF5IGJ1ZmZlcnMgaGF2ZSB1bmtub3duIGNvbnRlbnRzIGFuZCB0aHVzIG5vIHR5cGUgY2FuIGJlIGluZmVycmVkLlxuICBpZiAoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gVGVjaG5pY2FsbHksIHN0cmluZ3MgY291bGQgYmUgYSBmb3JtIG9mIEpTT04gZGF0YSwgYnV0IGl0J3Mgc2FmZSBlbm91Z2hcbiAgLy8gdG8gYXNzdW1lIHRoZXkncmUgcGxhaW4gc3RyaW5ncy5cbiAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiAndGV4dC9wbGFpbic7XG4gIH1cblxuICAvLyBBcnJheXMsIG9iamVjdHMsIGJvb2xlYW4gYW5kIG51bWJlcnMgd2lsbCBiZSBlbmNvZGVkIGFzIEpTT04uXG4gIGlmICh0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGJvZHkgPT09ICdudW1iZXInIHx8IHR5cGVvZiBib2R5ID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICB9XG4gIC8vIE5vIHR5cGUgY291bGQgYmUgaW5mZXJyZWQuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc0hlYWRlciA9IChoZWFkZXJzOiBSZXF1ZXN0SGVhZGVycywgaGVhZGVyOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGhlYWRlcnMpLnNvbWUoKGtleSkgPT4ga2V5LnRvTG93ZXJDYXNlKCkgPT09IGhlYWRlci50b0xvd2VyQ2FzZSgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JFYWNoSGVhZGVyID0gKGhlYWRlcnM6IFJlcXVlc3RIZWFkZXJzLCBjYWxsYmFjazogKHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nKSA9PiB2b2lkKSA9PiB7XG4gIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGNhbGxiYWNrKGtleSwgdmFsdWUpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUFsbFhoclJlc3BvbnNlSGVhZGVycyA9ICh4aHI6IFhNTEh0dHBSZXF1ZXN0KSA9PiB7XG4gIGNvbnN0IGhlYWRlcnMgPSB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7XG4gIGNvbnN0IHBhcnNlZEhlYWRlcnM6IFJlcXVlc3RIZWFkZXJzID0ge307XG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIGhlYWRlcnMuc3BsaXQoJ1xcbicpKSB7XG4gICAgY29uc3QgaW5kZXggPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICBjb25zdCBuYW1lID0gbGluZS5zbGljZSgwLCBpbmRleCk7XG4gICAgICBjb25zdCBrZXkgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCB2YWx1ZSA9IGxpbmUuc2xpY2UoaW5kZXggKyAxKS50cmltKCk7XG5cbiAgICAgIHBhcnNlZEhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWRIZWFkZXJzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlc3BvbnNlVXJsID0gKHhocjogWE1MSHR0cFJlcXVlc3QpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgaWYgKCdyZXNwb25zZVVSTCcgaW4geGhyICYmIHhoci5yZXNwb25zZVVSTCkge1xuICAgIHJldHVybiB4aHIucmVzcG9uc2VVUkw7XG4gIH1cbiAgaWYgKC9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpIHtcbiAgICByZXR1cm4geGhyLmdldFJlc3BvbnNlSGVhZGVyKCdYLVJlcXVlc3QtVVJMJyk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmV0cnlSZXF1ZXN0OiBSZXF1ZXN0UmV0cnlGbiA9IChjb25maWcpID0+IHtcbiAgY29uc3QgZGVmYXVsdFJldHJ5RGVsYXkgPSAxMDAwICsgMTAwMCAqIGNvbmZpZy5jdXJyZW50UmV0cnlDb3VudDtcblxuICBpZiAoY29uZmlnLmN1cnJlbnRSZXRyeUNvdW50ID4gMykge1xuICAgIHJldHVybiB7IHJldHJ5OiBmYWxzZSB9O1xuICB9XG5cbiAgaWYgKCFpc1JlcXVlc3RFcnJvcihjb25maWcuZXJyb3IpKSB7XG4gICAgcmV0dXJuIHsgcmV0cnk6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCB7IHN0YXR1cywgZGV0YWlsIH0gPSBjb25maWcuZXJyb3I7XG5cbiAgLy8gUmV0cnkgb24gNXh4IGVycm9yc1xuICBpZiAoc3RhdHVzID49IDUwMCkge1xuICAgIC8vIERvbid0IHJldHJ5IGlmIGEgcmVxdWVzdGVkIHBhZ2UgaXMgb3V0IG9mIHJhbmdlXG4gICAgaWYgKGlzU3ltZm9ueVBhZ2VyZmFudGFPdXRPZlJhbmdlRXJyb3IoZGV0YWlsKSkge1xuICAgICAgcmV0dXJuIHsgcmV0cnk6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcmV0cnk6IHRydWUsIGRlbGF5OiBkZWZhdWx0UmV0cnlEZWxheSB9O1xuICB9XG5cbiAgLy8gUmV0cnkgb24gNDA4IG9yIDQyNSBlcnJvcnNcbiAgaWYgKHN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuUmVxdWVzdFRpbWVvdXQgfHwgc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5Ub29FYXJseSkge1xuICAgIHJldHVybiB7IHJldHJ5OiB0cnVlLCBkZWxheTogZGVmYXVsdFJldHJ5RGVsYXkgfTtcbiAgfVxuXG4gIC8vIFJldHJ5IG9uIDQyOSBlcnJvcnNcbiAgaWYgKHN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgY29uc3QgcmV0cnlBZnRlciA9XG4gICAgICBjb25maWcuaGVhZGVyc1sncmV0cnktYWZ0ZXInXSB8fFxuICAgICAgY29uZmlnLmhlYWRlcnNbJ1JldHJ5LUFmdGVyJ10gfHxcbiAgICAgIGNvbmZpZy5oZWFkZXJzWyd4LXJldHJ5LWFmdGVyJ10gfHxcbiAgICAgIGNvbmZpZy5oZWFkZXJzWydYLVJldHJ5LUFmdGVyJ107XG5cbiAgICBpZiAocmV0cnlBZnRlcikge1xuICAgICAgY29uc3QgZGVsYXkgPSBwYXJzZUludChyZXRyeUFmdGVyKSAqIDEwMDA7XG4gICAgICByZXR1cm4geyByZXRyeTogdHJ1ZSwgZGVsYXk6IE51bWJlci5pc05hTihkZWxheSkgPyBkZWZhdWx0UmV0cnlEZWxheSA6IGRlbGF5IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcmV0cnk6IHRydWUsIGRlbGF5OiBkZWZhdWx0UmV0cnlEZWxheSB9O1xuICB9XG5cbiAgcmV0dXJuIHsgcmV0cnk6IGZhbHNlIH07XG59O1xuXG5leHBvcnQgY29uc3QgZW51bSBIdHRwU3RhdHVzQ29kZSB7XG4gIFVua25vd24gPSAwLFxuXG4gIENvbnRpbnVlID0gMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHMgPSAxMDEsXG4gIFByb2Nlc3NpbmcgPSAxMDIsXG4gIEVhcmx5SGludHMgPSAxMDMsXG5cbiAgT2sgPSAyMDAsXG4gIENyZWF0ZWQgPSAyMDEsXG4gIEFjY2VwdGVkID0gMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24gPSAyMDMsXG4gIE5vQ29udGVudCA9IDIwNCxcbiAgUmVzZXRDb250ZW50ID0gMjA1LFxuICBQYXJ0aWFsQ29udGVudCA9IDIwNixcbiAgTXVsdGlTdGF0dXMgPSAyMDcsXG4gIEFscmVhZHlSZXBvcnRlZCA9IDIwOCxcbiAgSW1Vc2VkID0gMjI2LFxuXG4gIE11bHRpcGxlQ2hvaWNlcyA9IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseSA9IDMwMSxcbiAgRm91bmQgPSAzMDIsXG4gIFNlZU90aGVyID0gMzAzLFxuICBOb3RNb2RpZmllZCA9IDMwNCxcbiAgVXNlUHJveHkgPSAzMDUsXG4gIFVudXNlZCA9IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3QgPSAzMDcsXG4gIFBlcm1hbmVudFJlZGlyZWN0ID0gMzA4LFxuXG4gIEJhZFJlcXVlc3QgPSA0MDAsXG4gIFVuYXV0aG9yaXplZCA9IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkID0gNDAyLFxuICBGb3JiaWRkZW4gPSA0MDMsXG4gIE5vdEZvdW5kID0gNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkID0gNDA1LFxuICBOb3RBY2NlcHRhYmxlID0gNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQgPSA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0ID0gNDA4LFxuICBDb25mbGljdCA9IDQwOSxcbiAgR29uZSA9IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQgPSA0MTEsXG4gIFByZWNvbmRpdGlvbkZhaWxlZCA9IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlID0gNDEzLFxuICBVcmlUb29Mb25nID0gNDE0LFxuICBVbnN1cHBvcnRlZE1lZGlhVHlwZSA9IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZSA9IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQgPSA0MTcsXG4gIEltQVRlYXBvdCA9IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0ID0gNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5ID0gNDIyLFxuICBMb2NrZWQgPSA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3kgPSA0MjQsXG4gIFRvb0Vhcmx5ID0gNDI1LFxuICBVcGdyYWRlUmVxdWlyZWQgPSA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkID0gNDI4LFxuICBUb29NYW55UmVxdWVzdHMgPSA0MjksXG4gIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSA9IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMgPSA0NTEsXG5cbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvciA9IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQgPSA1MDEsXG4gIEJhZEdhdGV3YXkgPSA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZSA9IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQgPSA1MDQsXG4gIEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkID0gNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXMgPSA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2UgPSA1MDcsXG4gIExvb3BEZXRlY3RlZCA9IDUwOCxcbiAgTm90RXh0ZW5kZWQgPSA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkID0gNTExLFxufVxuIl19
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL3JlcXVlc3QvcmVxdWVzdC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1RyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFVaEUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQWMsS0FBYyxFQUE0QixFQUFFLENBQ3RGLEtBQUssWUFBWSxNQUFNLElBQUksUUFBUSxJQUFJLEtBQUssSUFBSSxZQUFZLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUM7QUFFMUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsT0FNMUIsRUFBRSxFQUFFO0lBQ0gsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUM5QixNQUFNLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMzQztJQUVELElBQUksS0FBSyxHQUFrQixJQUFJLENBQUM7SUFFaEMsSUFBSSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQ3ZCLE1BQU0scUNBQXFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQzNDO1NBQU07UUFDTCxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7S0FDL0I7SUFFRCxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxV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QixFQUFFO1FBQ2xGLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxDQUFDO0tBQ2xEO0lBRUQsc0JBQXNCO0lBQ3RCLElBQUksTUFBTSw2Q0FBbUMsRUFBRTtRQUM3QyxNQUFNLFVBQVUsR0FDZCxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUM3QixNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUM3QixNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUMvQixNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWxDLElBQUksVUFBVSxFQUFFO1lBQ2QsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUMxQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2hGO1FBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLENBQUM7S0FDbEQ7SUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzFCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludmFsaWRCYXNlUm91dGVFcnJvciwgaW52YWxpZFJvdXRlRXJyb3IsIHBhdGhQYXJhbXNNaXNzaW5nSW5Sb3V0ZUZ1bmN0aW9uRXJyb3IgfSBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgaXNTeW1mb255UGFnZXJmYW50YU91dE9mUmFuZ2VFcnJvciB9IGZyb20gJy4uL3N5bWZvbnknO1xuaW1wb3J0IHtcbiAgQnVpbGRRdWVyeVN0cmluZ0NvbmZpZyxcbiAgTWV0aG9kLFxuICBRdWVyeVBhcmFtcyxcbiAgUmVxdWVzdEVycm9yLFxuICBSZXF1ZXN0SGVhZGVycyxcbiAgUmVxdWVzdFJldHJ5Rm4sXG59IGZyb20gJy4vcmVxdWVzdC50eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBpc1JlcXVlc3RFcnJvciA9IDxUID0gdW5rbm93bj4oZXJyb3I6IHVua25vd24pOiBlcnJvciBpcyBSZXF1ZXN0RXJyb3I8VD4gPT5cbiAgZXJyb3IgaW5zdGFuY2VvZiBPYmplY3QgJiYgJ3N0YXR1cycgaW4gZXJyb3IgJiYgJ3N0YXR1c1RleHQnIGluIGVycm9yICYmICd1cmwnIGluIGVycm9yO1xuXG5leHBvcnQgY29uc3QgYnVpbGRSb3V0ZSA9IChvcHRpb25zOiB7XG4gIGJhc2U6IHN0cmluZztcbiAgcm91dGU6ICgoYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHN0cmluZykgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwYXRoUGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHF1ZXJ5UGFyYW1zPzogUXVlcnlQYXJhbXM7XG4gIHF1ZXJ5UGFyYW1Db25maWc/OiBCdWlsZFF1ZXJ5U3RyaW5nQ29uZmlnO1xufSkgPT4ge1xuICBpZiAob3B0aW9ucy5iYXNlLmVuZHNXaXRoKCcvJykpIHtcbiAgICB0aHJvdyBpbnZhbGlkQmFzZVJvdXRlRXJyb3Iob3B0aW9ucy5iYXNlKTtcbiAgfVxuXG4gIGxldCByb3V0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLnJvdXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhdGhQYXJhbXMpIHtcbiAgICAgIHRocm93IHBhdGhQYXJhbXNNaXNzaW5nSW5Sb3V0ZUZ1bmN0aW9uRXJyb3Iob3B0aW9ucy5yb3V0ZSh7fSkpO1xuICAgIH1cblxuICAgIHJvdXRlID0gb3B0aW9ucy5yb3V0ZShvcHRpb25zLnBhdGhQYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIHJvdXRlID0gb3B0aW9ucy5yb3V0ZSA/PyBudWxsO1xuICB9XG5cbiAgaWYgKHJvdXRlICYmICFyb3V0ZS5zdGFydHNXaXRoKCcvJykpIHtcbiAgICB0aHJvdyBpbnZhbGlkUm91dGVFcnJvcihyb3V0ZSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5xdWVyeVBhcmFtcykge1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gYnVpbGRRdWVyeVN0cmluZyhvcHRpb25zLnF1ZXJ5UGFyYW1zLCBvcHRpb25zLnF1ZXJ5UGFyYW1Db25maWcpO1xuXG4gICAgaWYgKHF1ZXJ5U3RyaW5nKSB7XG4gICAgICByb3V0ZSA9IHJvdXRlID8gYCR7cm91dGV9PyR7cXVlcnlTdHJpbmd9YCA6IGAvPyR7cXVlcnlTdHJpbmd9YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYCR7b3B0aW9ucy5iYXNlfSR7cm91dGUgPz8gJyd9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZFF1ZXJ5U3RyaW5nID0gKHBhcmFtczogUXVlcnlQYXJhbXMsIGNvbmZpZz86IEJ1aWxkUXVlcnlTdHJpbmdDb25maWcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3Qgb2JqZWN0Tm90YXRpb24gPSBjb25maWc/Lm9iamVjdE5vdGF0aW9uID8/ICdicmFja2V0JztcbiAgY29uc3Qgd3JpdGVBcnJheUluZGV4ZXMgPSBjb25maWc/LndyaXRlQXJyYXlJbmRleGVzID8/IGZhbHNlO1xuXG4gIGNvbnN0IHF1ZXJ5UGFyYW1zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZ1bmN0aW9uIHByb2Nlc3NWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgW2luZGV4LCBhcnJheVZhbHVlXSBvZiB2YWx1ZS5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3QgbmVzdGVkS2V5ID0gd3JpdGVBcnJheUluZGV4ZXMgPyBgJHtrZXl9WyR7aW5kZXh9XWAgOiBgJHtrZXl9W11gO1xuXG4gICAgICAgIHByb2Nlc3NWYWx1ZShuZXN0ZWRLZXksIGFycmF5VmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgZm9yIChjb25zdCBbb2JqS2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgICBjb25zdCBuZXN0ZWRLZXkgPSBvYmplY3ROb3RhdGlvbiA9PT0gJ2RvdCcgPyBgJHtrZXl9LiR7b2JqS2V5fWAgOiBgJHtrZXl9WyR7b2JqS2V5fV1gO1xuICAgICAgICBwcm9jZXNzVmFsdWUobmVzdGVkS2V5LCB2YWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlbmNvZGVkS2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSk7XG4gICAgICBjb25zdCBlbmNvZGVkVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgIHF1ZXJ5UGFyYW1zLnB1c2goYCR7ZW5jb2RlZEtleX09JHtlbmNvZGVkVmFsdWV9YCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKHBhcmFtcykpIHtcbiAgICBwcm9jZXNzVmFsdWUoa2V5LCB2YWwpO1xuICB9XG5cbiAgcmV0dXJuIHF1ZXJ5UGFyYW1zLmxlbmd0aCA/IHF1ZXJ5UGFyYW1zLmpvaW4oJyYnKSA6IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdEV4cGlyZXNJblNlY29uZHMgPSAoaGVhZGVyczogUmVxdWVzdEhlYWRlcnMpID0+IHtcbiAgY29uc3QgY2FjaGVDb250cm9sID0gaGVhZGVyc1snY2FjaGUtY29udHJvbCddO1xuICBjb25zdCBhZ2UgPSBoZWFkZXJzWydhZ2UnXTtcbiAgY29uc3QgZXhwaXJlcyA9IGhlYWRlcnNbJ2V4cGlyZXMnXTtcblxuICAvLyBJbiBzZWNvbmRzXG4gIGxldCBleHBpcmVzSW46IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBsZXQgbWF4QWdlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBpZiAoY2FjaGVDb250cm9sPy5pbmNsdWRlcygnbm8tY2FjaGUnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNhY2hlQ29udHJvbD8uaW5jbHVkZXMoJ21heC1hZ2UnKSkge1xuICAgIG1heEFnZSA9IHBhcnNlSW50KGNhY2hlQ29udHJvbC5zcGxpdCgnbWF4LWFnZT0nKVsxXSk7XG4gIH0gZWxzZSBpZiAoY2FjaGVDb250cm9sPy5pbmNsdWRlcygncy1tYXhhZ2UnKSkge1xuICAgIG1heEFnZSA9IHBhcnNlSW50KGNhY2hlQ29udHJvbC5zcGxpdCgncy1tYXhhZ2U9JylbMV0pO1xuICB9XG5cbiAgaWYgKG1heEFnZSAmJiBhZ2UpIHtcbiAgICBjb25zdCBhZ2VTZWNvbmRzID0gcGFyc2VJbnQoYWdlKTtcblxuICAgIGV4cGlyZXNJbiA9IG1heEFnZSAtIGFnZVNlY29uZHM7XG4gIH0gZWxzZSBpZiAobWF4QWdlKSB7XG4gICAgZXhwaXJlc0luID0gbWF4QWdlIC8gMjsgLy8gV2UgYXNzdW1lIHRoZSByZXNwb25zZSBpcyBoYWxmIHdheSB0byBpdHMgZXhwaXJhdGlvblxuICB9IGVsc2UgaWYgKGV4cGlyZXMpIHtcbiAgICAvLyBVc2VkIGJ5IHNvbWUgYXBpcyB0byB0ZWxsIHRoZSByZXNwb25zZSB3aWxsIG5ldmVyIGV4cGlyZVxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBsZXQgdGhlIHJlc3BvbnNlIGV4cGlyZSBhZnRlciAxIGhvdXJcbiAgICBpZiAoZXhwaXJlcyA9PT0gJy0xJykge1xuICAgICAgZXhwaXJlc0luID0gMzYwMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXhwaXJlc0RhdGUgPSBuZXcgRGF0ZShleHBpcmVzKTtcblxuICAgICAgLy8gY2hlY2sgaWYgdGhlIGRhdGUgaXMgdmFsaWRcbiAgICAgIGlmIChleHBpcmVzRGF0ZS50b1N0cmluZygpICE9PSAnSW52YWxpZCBEYXRlJykge1xuICAgICAgICBleHBpcmVzSW4gPSBNYXRoLmZsb29yKChleHBpcmVzRGF0ZS5nZXRUaW1lKCkgLSBEYXRlLm5vdygpKSAvIDEwMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHBpcmVzSW47XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRUaW1lc3RhbXBGcm9tU2Vjb25kcyA9IChzZWNvbmRzOiBudW1iZXIgfCBudWxsKSA9PiB7XG4gIGlmIChzZWNvbmRzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5ub3coKSArIHNlY29uZHMgKiAxMDAwKS5nZXRUaW1lKCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplQm9keSA9IChib2R5OiB1bmtub3duKTogQXJyYXlCdWZmZXIgfCBVUkxTZWFyY2hQYXJhbXMgfCBCbG9iIHwgRm9ybURhdGEgfCBzdHJpbmcgfCBudWxsID0+IHtcbiAgaWYgKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoXG4gICAgYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8XG4gICAgYm9keSBpbnN0YW5jZW9mIEJsb2IgfHxcbiAgICBib2R5IGluc3RhbmNlb2YgRm9ybURhdGEgfHxcbiAgICBib2R5IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zIHx8XG4gICAgdHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnXG4gICkge1xuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgYm9keSA9PT0gJ2Jvb2xlYW4nIHx8IEFycmF5LmlzQXJyYXkoYm9keSkpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG4gIH1cblxuICByZXR1cm4gKGJvZHkgYXMgYW55KS50b1N0cmluZygpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybU1ldGhvZCA9IChjb25maWc6IHsgbWV0aG9kOiBNZXRob2Q7IHRyYW5zZmVyVmlhPzogJ0dFVCcgfCAnUE9TVCcgfSkgPT4ge1xuICBpZiAoY29uZmlnLm1ldGhvZCA9PT0gJ0dRTF9RVUVSWScgfHwgY29uZmlnLm1ldGhvZCA9PT0gJ0dRTF9NVVRBVEUnKSB7XG4gICAgaWYgKCFjb25maWcudHJhbnNmZXJWaWEpIHtcbiAgICAgIHJldHVybiAnUE9TVCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZy50cmFuc2ZlclZpYTtcbiAgfVxuXG4gIHJldHVybiBjb25maWcubWV0aG9kO1xufTtcblxuZXhwb3J0IGNvbnN0IGRldGVjdENvbnRlbnRUeXBlSGVhZGVyID0gKGJvZHk6IHVua25vd24pID0+IHtcbiAgLy8gQW4gZW1wdHkgYm9keSBoYXMgbm8gY29udGVudCB0eXBlLlxuICBpZiAoYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIEZvcm1EYXRhIGJvZGllcyByZWx5IG9uIHRoZSBicm93c2VyJ3MgY29udGVudCB0eXBlIGFzc2lnbm1lbnQuXG4gIGlmIChib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBCbG9icyB1c3VhbGx5IGhhdmUgdGhlaXIgb3duIGNvbnRlbnQgdHlwZS4gSWYgaXQgZG9lc24ndCwgdGhlblxuICAvLyBubyB0eXBlIGNhbiBiZSBpbmZlcnJlZC5cbiAgaWYgKGJvZHkgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgcmV0dXJuIGJvZHkudHlwZSB8fCBudWxsO1xuICB9XG4gIC8vIEFycmF5IGJ1ZmZlcnMgaGF2ZSB1bmtub3duIGNvbnRlbnRzIGFuZCB0aHVzIG5vIHR5cGUgY2FuIGJlIGluZmVycmVkLlxuICBpZiAoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gVGVjaG5pY2FsbHksIHN0cmluZ3MgY291bGQgYmUgYSBmb3JtIG9mIEpTT04gZGF0YSwgYnV0IGl0J3Mgc2FmZSBlbm91Z2hcbiAgLy8gdG8gYXNzdW1lIHRoZXkncmUgcGxhaW4gc3RyaW5ncy5cbiAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiAndGV4dC9wbGFpbic7XG4gIH1cblxuICAvLyBBcnJheXMsIG9iamVjdHMsIGJvb2xlYW4gYW5kIG51bWJlcnMgd2lsbCBiZSBlbmNvZGVkIGFzIEpTT04uXG4gIGlmICh0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGJvZHkgPT09ICdudW1iZXInIHx8IHR5cGVvZiBib2R5ID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICB9XG4gIC8vIE5vIHR5cGUgY291bGQgYmUgaW5mZXJyZWQuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc0hlYWRlciA9IChoZWFkZXJzOiBSZXF1ZXN0SGVhZGVycywgaGVhZGVyOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGhlYWRlcnMpLnNvbWUoKGtleSkgPT4ga2V5LnRvTG93ZXJDYXNlKCkgPT09IGhlYWRlci50b0xvd2VyQ2FzZSgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JFYWNoSGVhZGVyID0gKGhlYWRlcnM6IFJlcXVlc3RIZWFkZXJzLCBjYWxsYmFjazogKHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nKSA9PiB2b2lkKSA9PiB7XG4gIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGNhbGxiYWNrKGtleSwgdmFsdWUpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUFsbFhoclJlc3BvbnNlSGVhZGVycyA9ICh4aHI6IFhNTEh0dHBSZXF1ZXN0KSA9PiB7XG4gIGNvbnN0IGhlYWRlcnMgPSB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7XG4gIGNvbnN0IHBhcnNlZEhlYWRlcnM6IFJlcXVlc3RIZWFkZXJzID0ge307XG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIGhlYWRlcnMuc3BsaXQoJ1xcbicpKSB7XG4gICAgY29uc3QgaW5kZXggPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICBjb25zdCBuYW1lID0gbGluZS5zbGljZSgwLCBpbmRleCk7XG4gICAgICBjb25zdCBrZXkgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCB2YWx1ZSA9IGxpbmUuc2xpY2UoaW5kZXggKyAxKS50cmltKCk7XG5cbiAgICAgIHBhcnNlZEhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWRIZWFkZXJzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlc3BvbnNlVXJsID0gKHhocjogWE1MSHR0cFJlcXVlc3QpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgaWYgKCdyZXNwb25zZVVSTCcgaW4geGhyICYmIHhoci5yZXNwb25zZVVSTCkge1xuICAgIHJldHVybiB4aHIucmVzcG9uc2VVUkw7XG4gIH1cbiAgaWYgKC9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpIHtcbiAgICByZXR1cm4geGhyLmdldFJlc3BvbnNlSGVhZGVyKCdYLVJlcXVlc3QtVVJMJyk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmV0cnlSZXF1ZXN0OiBSZXF1ZXN0UmV0cnlGbiA9IChjb25maWcpID0+IHtcbiAgY29uc3QgZGVmYXVsdFJldHJ5RGVsYXkgPSAxMDAwICsgMTAwMCAqIGNvbmZpZy5jdXJyZW50UmV0cnlDb3VudDtcblxuICBpZiAoY29uZmlnLmN1cnJlbnRSZXRyeUNvdW50ID4gMykge1xuICAgIHJldHVybiB7IHJldHJ5OiBmYWxzZSB9O1xuICB9XG5cbiAgaWYgKCFpc1JlcXVlc3RFcnJvcihjb25maWcuZXJyb3IpKSB7XG4gICAgcmV0dXJuIHsgcmV0cnk6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCB7IHN0YXR1cywgZGV0YWlsIH0gPSBjb25maWcuZXJyb3I7XG5cbiAgLy8gUmV0cnkgb24gNXh4IGVycm9yc1xuICBpZiAoc3RhdHVzID49IDUwMCkge1xuICAgIC8vIERvbid0IHJldHJ5IGlmIGEgcmVxdWVzdGVkIHBhZ2UgaXMgb3V0IG9mIHJhbmdlXG4gICAgaWYgKGlzU3ltZm9ueVBhZ2VyZmFudGFPdXRPZlJhbmdlRXJyb3IoZGV0YWlsKSkge1xuICAgICAgcmV0dXJuIHsgcmV0cnk6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcmV0cnk6IHRydWUsIGRlbGF5OiBkZWZhdWx0UmV0cnlEZWxheSB9O1xuICB9XG5cbiAgLy8gUmV0cnkgb24gNDA4IG9yIDQyNSBlcnJvcnNcbiAgaWYgKHN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuUmVxdWVzdFRpbWVvdXQgfHwgc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5Ub29FYXJseSkge1xuICAgIHJldHVybiB7IHJldHJ5OiB0cnVlLCBkZWxheTogZGVmYXVsdFJldHJ5RGVsYXkgfTtcbiAgfVxuXG4gIC8vIFJldHJ5IG9uIDQyOSBlcnJvcnNcbiAgaWYgKHN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgY29uc3QgcmV0cnlBZnRlciA9XG4gICAgICBjb25maWcuaGVhZGVyc1sncmV0cnktYWZ0ZXInXSB8fFxuICAgICAgY29uZmlnLmhlYWRlcnNbJ1JldHJ5LUFmdGVyJ10gfHxcbiAgICAgIGNvbmZpZy5oZWFkZXJzWyd4LXJldHJ5LWFmdGVyJ10gfHxcbiAgICAgIGNvbmZpZy5oZWFkZXJzWydYLVJldHJ5LUFmdGVyJ107XG5cbiAgICBpZiAocmV0cnlBZnRlcikge1xuICAgICAgY29uc3QgZGVsYXkgPSBwYXJzZUludChyZXRyeUFmdGVyKSAqIDEwMDA7XG4gICAgICByZXR1cm4geyByZXRyeTogdHJ1ZSwgZGVsYXk6IE51bWJlci5pc05hTihkZWxheSkgPyBkZWZhdWx0UmV0cnlEZWxheSA6IGRlbGF5IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcmV0cnk6IHRydWUsIGRlbGF5OiBkZWZhdWx0UmV0cnlEZWxheSB9O1xuICB9XG5cbiAgcmV0dXJuIHsgcmV0cnk6IGZhbHNlIH07XG59O1xuXG5leHBvcnQgY29uc3QgZW51bSBIdHRwU3RhdHVzQ29kZSB7XG4gIFVua25vd24gPSAwLFxuXG4gIENvbnRpbnVlID0gMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHMgPSAxMDEsXG4gIFByb2Nlc3NpbmcgPSAxMDIsXG4gIEVhcmx5SGludHMgPSAxMDMsXG5cbiAgT2sgPSAyMDAsXG4gIENyZWF0ZWQgPSAyMDEsXG4gIEFjY2VwdGVkID0gMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24gPSAyMDMsXG4gIE5vQ29udGVudCA9IDIwNCxcbiAgUmVzZXRDb250ZW50ID0gMjA1LFxuICBQYXJ0aWFsQ29udGVudCA9IDIwNixcbiAgTXVsdGlTdGF0dXMgPSAyMDcsXG4gIEFscmVhZHlSZXBvcnRlZCA9IDIwOCxcbiAgSW1Vc2VkID0gMjI2LFxuXG4gIE11bHRpcGxlQ2hvaWNlcyA9IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseSA9IDMwMSxcbiAgRm91bmQgPSAzMDIsXG4gIFNlZU90aGVyID0gMzAzLFxuICBOb3RNb2RpZmllZCA9IDMwNCxcbiAgVXNlUHJveHkgPSAzMDUsXG4gIFVudXNlZCA9IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3QgPSAzMDcsXG4gIFBlcm1hbmVudFJlZGlyZWN0ID0gMzA4LFxuXG4gIEJhZFJlcXVlc3QgPSA0MDAsXG4gIFVuYXV0aG9yaXplZCA9IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkID0gNDAyLFxuICBGb3JiaWRkZW4gPSA0MDMsXG4gIE5vdEZvdW5kID0gNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkID0gNDA1LFxuICBOb3RBY2NlcHRhYmxlID0gNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQgPSA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0ID0gNDA4LFxuICBDb25mbGljdCA9IDQwOSxcbiAgR29uZSA9IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQgPSA0MTEsXG4gIFByZWNvbmRpdGlvbkZhaWxlZCA9IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlID0gNDEzLFxuICBVcmlUb29Mb25nID0gNDE0LFxuICBVbnN1cHBvcnRlZE1lZGlhVHlwZSA9IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZSA9IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQgPSA0MTcsXG4gIEltQVRlYXBvdCA9IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0ID0gNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5ID0gNDIyLFxuICBMb2NrZWQgPSA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3kgPSA0MjQsXG4gIFRvb0Vhcmx5ID0gNDI1LFxuICBVcGdyYWRlUmVxdWlyZWQgPSA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkID0gNDI4LFxuICBUb29NYW55UmVxdWVzdHMgPSA0MjksXG4gIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSA9IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMgPSA0NTEsXG5cbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvciA9IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQgPSA1MDEsXG4gIEJhZEdhdGV3YXkgPSA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZSA9IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQgPSA1MDQsXG4gIEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkID0gNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXMgPSA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2UgPSA1MDcsXG4gIExvb3BEZXRlY3RlZCA9IDUwOCxcbiAgTm90RXh0ZW5kZWQgPSA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkID0gNTExLFxufVxuIl19
@@ -87,7 +87,7 @@ const buildRoute = (options) => {
87
87
  throw invalidRouteError(route);
88
88
  }
89
89
  if (options.queryParams) {
90
- const queryString = buildQueryString(options.queryParams);
90
+ const queryString = buildQueryString(options.queryParams, options.queryParamConfig);
91
91
  if (queryString) {
92
92
  route = route ? `${route}?${queryString}` : `/?${queryString}`;
93
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ethlete-query.mjs","sources":["../../../../libs/query/src/lib/auth/custom-header-auth-provider.ts","../../../../libs/query/src/lib/auth/basic-auth-provider.ts","../../../../libs/query/src/lib/logger/logger.ts","../../../../libs/query/src/lib/symfony/symfony.utils.ts","../../../../libs/query/src/lib/request/request.util.ts","../../../../libs/query/src/lib/request/request.ts","../../../../libs/query/src/lib/gql/gql.ts","../../../../libs/query/src/lib/query/query.utils.ts","../../../../libs/query/src/lib/query/query.ts","../../../../libs/query/src/lib/auth/auth-provider.utils.ts","../../../../libs/query/src/lib/auth/bearer-auth-provider.ts","../../../../libs/query/src/lib/directives/query.directive.ts","../../../../libs/query/src/lib/infinite-query/infinity-query.ts","../../../../libs/query/src/lib/infinite-query/infinity-query.utils.ts","../../../../libs/query/src/lib/directives/infinity-query.directive.ts","../../../../libs/query/src/lib/directives/infinity-query-trigger.directive.ts","../../../../libs/query/src/lib/entity/entity-store.ts","../../../../libs/query/src/lib/entity/entity.utils.ts","../../../../libs/query/src/lib/query-creator/query-creator.ts","../../../../libs/query/src/lib/query-store/query-store.ts","../../../../libs/query/src/lib/query-client/query-client.ts","../../../../libs/query/src/lib/query-client/query-client.utils.ts","../../../../libs/query/src/lib/query-form/query-form.ts","../../../../libs/query/src/lib/query-form/query-form.utils.ts","../../../../libs/query/src/lib/utils/deep-freeze.util.ts","../../../../libs/query/src/lib/utils/def.util.ts","../../../../libs/query/src/ethlete-query.ts"],"sourcesContent":["import { AuthProvider, AuthProviderCustomHeaderConfig } from './auth-provider.types';\n\nexport class CustomHeaderAuthProvider implements AuthProvider {\n get header() {\n return { [this._config.name]: this._config.value };\n }\n\n constructor(private _config: AuthProviderCustomHeaderConfig) {}\n\n cleanUp(): void {\n // noop\n }\n}\n","import { AuthProvider, AuthProviderBasicConfig } from './auth-provider.types';\n\nexport class BasicAuthProvider implements AuthProvider {\n get header() {\n return { Authorization: `Basic ${this._basicAuthString}` };\n }\n\n private get _basicAuthString() {\n return btoa(`${this._config.username}:${this._config.password}`);\n }\n\n constructor(private _config: AuthProviderBasicConfig) {}\n\n cleanUp(): void {\n // noop\n }\n}\n","export const buildErrorMessage = (code: string, message: string) => `[@ethlete\\\\query:${code}] ${message}`;\n\nexport class QueryError extends Error {\n data?: unknown;\n\n constructor(code: string, message: string, data?: unknown) {\n super(buildErrorMessage(code, message));\n this.name = 'QueryError';\n this.data = data;\n }\n}\n\nexport const invalidBaseRouteError = (data: unknown) =>\n new QueryError('001', 'The baseRoute must not end with a slash', data);\n\nexport const invalidRouteError = (data: unknown) => new QueryError('002', 'The route must start with a slash', data);\n\nexport const pathParamsMissingInRouteFunctionError = (data: unknown) =>\n new QueryError('003', 'The route is a function but pathParams are missing', data);\n\nexport const queryStateAlreadyHasKeyError = (data: unknown) =>\n new QueryError('004', 'The query state already contains the provided key', data);\n\nexport const queryStateDoesNotContainKeyError = (data: unknown) =>\n new QueryError('005', 'The query state does not contain the provided key', data);\n\nexport const queryStateCannotTransformError = (data: unknown) =>\n new QueryError('006', 'The query state cannot be transformed because it is not loading', data);\n\nexport const invalidBodyError = (data: unknown) => new QueryError('007', 'The body is not valid or upsupported', data);\n","import { SymfonyError } from './symfony.types';\n\nexport const isSymfonyError = (error: unknown): error is SymfonyError => {\n if (!error || typeof error !== 'object') {\n return false;\n }\n\n const symfonyError = error as SymfonyError;\n\n return (\n symfonyError.class !== undefined &&\n symfonyError.detail !== undefined &&\n symfonyError.status !== undefined &&\n symfonyError.title !== undefined &&\n symfonyError.trace !== undefined &&\n symfonyError.type !== undefined\n );\n};\n\nexport const isSymfonyPagerfantaOutOfRangeError = (error: unknown): error is SymfonyError => {\n if (!isSymfonyError(error)) {\n return false;\n }\n\n return error.class.startsWith('Pagerfanta') && error.class.endsWith('OutOfRangeCurrentPageException');\n};\n","import { invalidBaseRouteError, invalidRouteError, pathParamsMissingInRouteFunctionError } from '../logger';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../symfony';\nimport {\n BuildQueryStringConfig,\n Method,\n QueryParams,\n RequestError,\n RequestHeaders,\n RequestRetryFn,\n} from './request.types';\n\nexport const isRequestError = <T = unknown>(error: unknown): error is RequestError<T> =>\n error instanceof Object && 'status' in error && 'statusText' in error && 'url' in error;\n\nexport const buildRoute = (options: {\n base: string;\n route: ((args: Record<string, unknown>) => string) | string | null | undefined;\n pathParams?: Record<string, unknown>;\n queryParams?: QueryParams;\n queryParamConfig?: BuildQueryStringConfig;\n}) => {\n if (options.base.endsWith('/')) {\n throw invalidBaseRouteError(options.base);\n }\n\n let route: string | null = null;\n\n if (typeof options.route === 'function') {\n if (!options.pathParams) {\n throw pathParamsMissingInRouteFunctionError(options.route({}));\n }\n\n route = options.route(options.pathParams);\n } else {\n route = options.route ?? null;\n }\n\n if (route && !route.startsWith('/')) {\n throw invalidRouteError(route);\n }\n\n if (options.queryParams) {\n const queryString = buildQueryString(options.queryParams);\n\n if (queryString) {\n route = route ? `${route}?${queryString}` : `/?${queryString}`;\n }\n }\n\n return `${options.base}${route ?? ''}`;\n};\n\nexport const buildQueryString = (params: QueryParams, config?: BuildQueryStringConfig): string | null => {\n const objectNotation = config?.objectNotation ?? 'bracket';\n const writeArrayIndexes = config?.writeArrayIndexes ?? false;\n\n const queryParams: string[] = [];\n\n function processValue(key: string, value: unknown) {\n if (Array.isArray(value)) {\n for (const [index, arrayValue] of value.entries()) {\n const nestedKey = writeArrayIndexes ? `${key}[${index}]` : `${key}[]`;\n\n processValue(nestedKey, arrayValue);\n }\n } else if (typeof value === 'object' && value !== null) {\n for (const [objKey, val] of Object.entries(value)) {\n const nestedKey = objectNotation === 'dot' ? `${key}.${objKey}` : `${key}[${objKey}]`;\n processValue(nestedKey, val);\n }\n } else {\n const encodedKey = encodeURIComponent(key);\n const encodedValue = encodeURIComponent(value as string);\n queryParams.push(`${encodedKey}=${encodedValue}`);\n }\n }\n\n for (const [key, val] of Object.entries(params)) {\n processValue(key, val);\n }\n\n return queryParams.length ? queryParams.join('&') : null;\n};\n\nexport const extractExpiresInSeconds = (headers: RequestHeaders) => {\n const cacheControl = headers['cache-control'];\n const age = headers['age'];\n const expires = headers['expires'];\n\n // In seconds\n let expiresIn: number | null = null;\n let maxAge: number | null = null;\n\n if (cacheControl?.includes('no-cache')) {\n return null;\n }\n\n if (cacheControl?.includes('max-age')) {\n maxAge = parseInt(cacheControl.split('max-age=')[1]);\n } else if (cacheControl?.includes('s-maxage')) {\n maxAge = parseInt(cacheControl.split('s-maxage=')[1]);\n }\n\n if (maxAge && age) {\n const ageSeconds = parseInt(age);\n\n expiresIn = maxAge - ageSeconds;\n } else if (maxAge) {\n expiresIn = maxAge / 2; // We assume the response is half way to its expiration\n } else if (expires) {\n // Used by some apis to tell the response will never expire\n // In this case we let the response expire after 1 hour\n if (expires === '-1') {\n expiresIn = 3600;\n } else {\n const expiresDate = new Date(expires);\n\n // check if the date is valid\n if (expiresDate.toString() !== 'Invalid Date') {\n expiresIn = Math.floor((expiresDate.getTime() - Date.now()) / 1000);\n }\n }\n }\n\n return expiresIn;\n};\n\nexport const buildTimestampFromSeconds = (seconds: number | null) => {\n if (seconds === null) {\n return null;\n }\n\n return new Date(Date.now() + seconds * 1000).getTime();\n};\n\nexport const serializeBody = (body: unknown): ArrayBuffer | URLSearchParams | Blob | FormData | string | null => {\n if (body === null || body === undefined) {\n return null;\n }\n\n if (\n body instanceof ArrayBuffer ||\n body instanceof Blob ||\n body instanceof FormData ||\n body instanceof URLSearchParams ||\n typeof body === 'string'\n ) {\n return body;\n }\n\n if (typeof body === 'object' || typeof body === 'boolean' || Array.isArray(body)) {\n return JSON.stringify(body);\n }\n\n return (body as any).toString();\n};\n\nexport const transformMethod = (config: { method: Method; transferVia?: 'GET' | 'POST' }) => {\n if (config.method === 'GQL_QUERY' || config.method === 'GQL_MUTATE') {\n if (!config.transferVia) {\n return 'POST';\n }\n\n return config.transferVia;\n }\n\n return config.method;\n};\n\nexport const detectContentTypeHeader = (body: unknown) => {\n // An empty body has no content type.\n if (body === null) {\n return null;\n }\n // FormData bodies rely on the browser's content type assignment.\n if (body instanceof FormData) {\n return null;\n }\n // Blobs usually have their own content type. If it doesn't, then\n // no type can be inferred.\n if (body instanceof Blob) {\n return body.type || null;\n }\n // Array buffers have unknown contents and thus no type can be inferred.\n if (body instanceof ArrayBuffer) {\n return null;\n }\n // Technically, strings could be a form of JSON data, but it's safe enough\n // to assume they're plain strings.\n if (typeof body === 'string') {\n return 'text/plain';\n }\n\n // Arrays, objects, boolean and numbers will be encoded as JSON.\n if (typeof body === 'object' || typeof body === 'number' || typeof body === 'boolean') {\n return 'application/json';\n }\n // No type could be inferred.\n return null;\n};\n\nexport const hasHeader = (headers: RequestHeaders, header: string) => {\n return Object.keys(headers).some((key) => key.toLowerCase() === header.toLowerCase());\n};\n\nexport const forEachHeader = (headers: RequestHeaders, callback: (value: string, key: string) => void) => {\n Object.entries(headers).forEach(([key, value]) => {\n callback(key, value);\n });\n};\n\nexport const parseAllXhrResponseHeaders = (xhr: XMLHttpRequest) => {\n const headers = xhr.getAllResponseHeaders();\n const parsedHeaders: RequestHeaders = {};\n\n for (const line of headers.split('\\n')) {\n const index = line.indexOf(':');\n if (index > 0) {\n const name = line.slice(0, index);\n const key = name.toLowerCase();\n const value = line.slice(index + 1).trim();\n\n parsedHeaders[key] = value;\n }\n }\n\n return parsedHeaders;\n};\n\nexport const getResponseUrl = (xhr: XMLHttpRequest): string | null => {\n if ('responseURL' in xhr && xhr.responseURL) {\n return xhr.responseURL;\n }\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL');\n }\n return null;\n};\n\nexport const shouldRetryRequest: RequestRetryFn = (config) => {\n const defaultRetryDelay = 1000 + 1000 * config.currentRetryCount;\n\n if (config.currentRetryCount > 3) {\n return { retry: false };\n }\n\n if (!isRequestError(config.error)) {\n return { retry: false };\n }\n\n const { status, detail } = config.error;\n\n // Retry on 5xx errors\n if (status >= 500) {\n // Don't retry if a requested page is out of range\n if (isSymfonyPagerfantaOutOfRangeError(detail)) {\n return { retry: false };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 408 or 425 errors\n if (status === HttpStatusCode.RequestTimeout || status === HttpStatusCode.TooEarly) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 429 errors\n if (status === HttpStatusCode.TooManyRequests) {\n const retryAfter =\n config.headers['retry-after'] ||\n config.headers['Retry-After'] ||\n config.headers['x-retry-after'] ||\n config.headers['X-Retry-After'];\n\n if (retryAfter) {\n const delay = parseInt(retryAfter) * 1000;\n return { retry: true, delay: Number.isNaN(delay) ? defaultRetryDelay : delay };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n return { retry: false };\n};\n\nexport const enum HttpStatusCode {\n Unknown = 0,\n\n Continue = 100,\n SwitchingProtocols = 101,\n Processing = 102,\n EarlyHints = 103,\n\n Ok = 200,\n Created = 201,\n Accepted = 202,\n NonAuthoritativeInformation = 203,\n NoContent = 204,\n ResetContent = 205,\n PartialContent = 206,\n MultiStatus = 207,\n AlreadyReported = 208,\n ImUsed = 226,\n\n MultipleChoices = 300,\n MovedPermanently = 301,\n Found = 302,\n SeeOther = 303,\n NotModified = 304,\n UseProxy = 305,\n Unused = 306,\n TemporaryRedirect = 307,\n PermanentRedirect = 308,\n\n BadRequest = 400,\n Unauthorized = 401,\n PaymentRequired = 402,\n Forbidden = 403,\n NotFound = 404,\n MethodNotAllowed = 405,\n NotAcceptable = 406,\n ProxyAuthenticationRequired = 407,\n RequestTimeout = 408,\n Conflict = 409,\n Gone = 410,\n LengthRequired = 411,\n PreconditionFailed = 412,\n PayloadTooLarge = 413,\n UriTooLong = 414,\n UnsupportedMediaType = 415,\n RangeNotSatisfiable = 416,\n ExpectationFailed = 417,\n ImATeapot = 418,\n MisdirectedRequest = 421,\n UnprocessableEntity = 422,\n Locked = 423,\n FailedDependency = 424,\n TooEarly = 425,\n UpgradeRequired = 426,\n PreconditionRequired = 428,\n TooManyRequests = 429,\n RequestHeaderFieldsTooLarge = 431,\n UnavailableForLegalReasons = 451,\n\n InternalServerError = 500,\n NotImplemented = 501,\n BadGateway = 502,\n ServiceUnavailable = 503,\n GatewayTimeout = 504,\n HttpVersionNotSupported = 505,\n VariantAlsoNegotiates = 506,\n InsufficientStorage = 507,\n LoopDetected = 508,\n NotExtended = 510,\n NetworkAuthenticationRequired = 511,\n}\n","import { Observable, Observer } from 'rxjs';\nimport { PartialXhrState, RequestConfig, RequestError, RequestEvent } from './request.types';\nimport {\n HttpStatusCode,\n buildTimestampFromSeconds,\n detectContentTypeHeader,\n extractExpiresInSeconds,\n forEachHeader,\n getResponseUrl,\n hasHeader,\n parseAllXhrResponseHeaders,\n serializeBody,\n shouldRetryRequest,\n} from './request.util';\n\nconst XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n\nexport const request = <Response = unknown>(config: RequestConfig): Observable<RequestEvent<Response>> => {\n const headers = config.headers || {};\n const responseType = config.responseType || 'json';\n const body = config.body || null;\n const url = config.urlWithParams.split('?')[0];\n const retryFn = config.retryFn || shouldRetryRequest;\n let currentRetryCount = 0;\n let retryTimeout: number | null = null;\n\n return new Observable((observer: Observer<RequestEvent<Response>>) => {\n const xhr = new XMLHttpRequest();\n const reqBody = serializeBody(body);\n\n const setupXhr = () => {\n xhr.open(config.method, config.urlWithParams);\n if (config.withCredentials) {\n xhr.withCredentials = true;\n }\n\n forEachHeader(headers, (name, value) => xhr.setRequestHeader(name, value));\n\n if (!hasHeader(headers, 'Accept')) {\n xhr.setRequestHeader('Accept', 'application/json, text/plain, */*');\n }\n\n if (!hasHeader(headers, 'Content-Type')) {\n const detectedType = detectContentTypeHeader(body);\n\n if (detectedType) {\n xhr.setRequestHeader('Content-Type', detectedType);\n }\n }\n\n xhr.responseType = responseType !== 'json' ? responseType : 'text';\n };\n\n setupXhr();\n\n const partialFromXhr = (): PartialXhrState => {\n const statusText = xhr.statusText || 'OK';\n const headers = parseAllXhrResponseHeaders(xhr);\n const _url = getResponseUrl(xhr) || url;\n\n return { headers, status: xhr.status, statusText, url: _url };\n };\n\n const handleRetry = (error: RequestError) => {\n const newRetryCount = currentRetryCount + 1;\n const { headers } = partialFromXhr();\n const { retry, delay } = retryFn({ currentRetryCount: newRetryCount, headers, error });\n\n if (!retry) {\n observer.next({ type: 'failure', headers, error });\n observer.complete();\n return;\n }\n\n const _delay = delay ?? 1000;\n observer.next({ type: 'delay-retry', headers, retryNumber: newRetryCount, retryDelay: _delay });\n\n retryTimeout = window.setTimeout(() => {\n setupXhr();\n xhr.send(reqBody);\n currentRetryCount = newRetryCount;\n observer.next({ type: 'start', headers, isRetry: true, retryNumber: currentRetryCount, retryDelay: _delay });\n }, _delay);\n };\n\n const onLoad = () => {\n const { headers, statusText, url } = partialFromXhr();\n\n let { status } = partialFromXhr();\n\n let body: unknown | null = null;\n\n if (status !== HttpStatusCode.NoContent) {\n body = typeof xhr.response === 'undefined' ? xhr.responseText : xhr.response;\n }\n\n if (status === 0) {\n status = body ? HttpStatusCode.Ok : 0;\n }\n\n let ok = status >= 200 && status < 300;\n\n if (responseType === 'json' && typeof body === 'string') {\n const originalBody = body;\n body = body.replace(XSSI_PREFIX, '');\n try {\n body = body !== '' ? JSON.parse(body as string) : null;\n } catch (error) {\n body = originalBody;\n\n if (ok) {\n ok = false;\n body = { error, text: body };\n }\n }\n }\n\n if (ok) {\n const successEvent: RequestEvent<Response> = {\n type: 'success',\n headers,\n response: body as Response,\n };\n\n const expiresInSeconds = config.cacheAdapter?.(headers) ?? extractExpiresInSeconds(headers);\n const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);\n\n if (expiresInTimestamp) {\n successEvent.expiresInTimestamp = expiresInTimestamp;\n }\n\n observer.next(successEvent);\n\n observer.complete();\n } else {\n handleRetry({\n url,\n detail: body,\n status,\n statusText,\n });\n }\n };\n\n const onError = (error: Event) => {\n const { url } = partialFromXhr();\n\n handleRetry({\n url,\n detail: error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n });\n };\n\n const onDownProgress = (event: ProgressEvent) => {\n const { headers } = partialFromXhr();\n\n const progress: RequestEvent = {\n type: 'download-progress',\n headers,\n progress: {\n current: event.loaded,\n },\n };\n\n if (event.lengthComputable) {\n const progressPercent = (event.loaded / event.total) * 100;\n progress.progress.percentage = Math.round(progressPercent * 100) / 100;\n progress.progress.total = event.total;\n }\n\n if (responseType === 'text' && !!xhr.responseText) {\n progress.partialText = xhr.responseText;\n }\n\n observer.next(progress);\n };\n\n const onUpProgress = (event: ProgressEvent) => {\n const { headers } = partialFromXhr();\n\n const progress: RequestEvent = {\n type: 'upload-progress',\n headers,\n progress: {\n current: event.loaded,\n },\n };\n\n if (event.lengthComputable) {\n const progressPercent = (event.loaded / event.total) * 100;\n progress.progress.percentage = Math.round(progressPercent * 100) / 100;\n progress.progress.total = event.total;\n }\n\n observer.next(progress);\n };\n\n xhr.addEventListener('load', onLoad);\n xhr.addEventListener('error', onError);\n xhr.addEventListener('timeout', onError);\n xhr.addEventListener('abort', onError);\n\n if (config.reportProgress) {\n xhr.addEventListener('progress', onDownProgress);\n\n if (reqBody !== null && xhr.upload) {\n xhr.upload.addEventListener('progress', onUpProgress);\n }\n }\n\n xhr.send(reqBody);\n observer.next({ type: 'start', headers });\n\n return () => {\n xhr.removeEventListener('error', onError);\n xhr.removeEventListener('abort', onError);\n xhr.removeEventListener('load', onLoad);\n xhr.removeEventListener('timeout', onError);\n\n if (retryTimeout) {\n window.clearTimeout(retryTimeout);\n }\n\n if (config.reportProgress) {\n xhr.removeEventListener('progress', onDownProgress);\n\n if (reqBody !== null && xhr.upload) {\n xhr.upload.removeEventListener('progress', onUpProgress);\n }\n }\n\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n\n observer.next({ type: 'cancel', headers });\n };\n });\n};\n","const getOpName = /(query|mutation) ?([\\w\\d-_]+)? ?\\(.*?\\)? \\{/;\n\nexport const transformGql = (str: string) => {\n str = Array.isArray(str) ? str.join('') : str;\n const name = getOpName.exec(str);\n return function (variables: Record<string, unknown> | null | undefined) {\n const data: Record<string, unknown> = { query: str };\n if (variables) data['variables'] = JSON.stringify(variables);\n if (name && name.length) {\n const operationName = name[2];\n if (operationName) data['operationName'] = name[2];\n }\n return data as { query: string; variables?: string; operationName?: string };\n };\n};\n\nexport const gql = (strings: TemplateStringsArray, ...values: string[]) => {\n const str = strings.reduce((acc, cur, i) => {\n return acc + cur + (values[i] || '');\n }, '');\n return str;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isDevMode } from '@angular/core';\nimport { Paginated } from '@ethlete/types';\nimport { BehaviorSubject, filter, Observable, of, switchMap, takeWhile, tap } from 'rxjs';\nimport { EntityStore } from '../entity';\nimport { transformGql } from '../gql';\nimport { QueryClient } from '../query-client';\nimport {\n AnyQueryCreator,\n QueryArgsOf,\n QueryCreator,\n QueryDataOf,\n QueryResponseOf,\n QueryStoreIdOf,\n QueryStoreOf,\n} from '../query-creator';\nimport { QueryForm } from '../query-form';\nimport { HttpStatusCode, Method, RequestHeaders, RequestHeadersMethodMap, transformMethod } from '../request';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../symfony';\nimport {\n AnyGqlQueryConfig,\n AnyQuery,\n AnyQueryCollection,\n AnyQueryCollectionData,\n AnyQueryCreatorCollection,\n AnyRestQueryConfig,\n BaseArguments,\n Cancelled,\n Failure,\n GqlQueryConfig,\n Loading,\n Prepared,\n QueryCollectionOf,\n QueryState,\n QueryStateResponseOf,\n QueryStateType,\n ResetPageOnErrorOperatorConfig,\n RouteType,\n Success,\n} from './query.types';\n\ntype OmitNull<T> = T extends null ? never : T;\n\nexport function filterSuccess() {\n return function <T extends QueryState | null, Response extends QueryStateResponseOf<OmitNull<T>>>(\n source: Observable<T>,\n ) {\n return source.pipe(filter((value) => isQueryStateSuccess(value))) as Observable<Success<Response>>;\n };\n}\n\nexport function ignoreAutoRefresh() {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => !isAutoRefresh(value))) as Observable<T>;\n };\n}\n\nexport function filterFailure() {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => isQueryStateFailure(value))) as Observable<Failure>;\n };\n}\n\nexport function filterQueryStates(allowedStates: QueryStateType[]) {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => value && allowedStates.includes(value.type))) as Observable<T>;\n };\n}\n\nexport function takeUntilResponse(config?: { excludeNull?: boolean }) {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(\n takeWhile((value) => {\n if (config?.excludeNull && value === null) {\n return false;\n }\n\n return isQueryStateLoading(value) || value === null;\n }, true),\n );\n };\n}\n\nexport function filterNull() {\n return function <T>(source: Observable<T>) {\n return source.pipe(filter((value): value is OmitNull<T> => value !== null));\n };\n}\n\nexport function switchQueryState() {\n return function <T extends AnyQuery | null, Data extends QueryDataOf<T>>(source: Observable<T>) {\n return source.pipe(switchMap((value) => value?.state$ ?? of(null))) as Observable<QueryState<Data> | null>;\n };\n}\n\nexport function switchQueryCollectionState() {\n return function <T extends AnyQueryCollection | null, Data extends AnyQueryCollectionData<OmitNull<T>>>(\n source: Observable<T>,\n ) {\n return source.pipe(switchMap((value) => value?.query.state$ ?? of(null))) as Observable<QueryState<Data> | null>;\n };\n}\n\nexport const resetPageOnError =\n <T extends AnyQuery | null | undefined, J extends QueryForm<any>>(config: ResetPageOnErrorOperatorConfig<J>) =>\n (source: Observable<T>) => {\n const { queryForm, pageControlKey = 'page' } = config;\n\n if (isDevMode() && !queryForm.form.controls[pageControlKey]) {\n console.warn(`resetPageOnError: queryForm.form.controls[\"${pageControlKey}\"] is undefined`);\n }\n\n return source.pipe(\n switchMap((q) => {\n if (!q) {\n return of(q);\n }\n\n return q.state$.pipe(\n tap((state) => {\n if (!isQueryStateFailure(state)) {\n return;\n }\n\n switch (state.error.status) {\n // The page is invalid (in prod mode, code is 416)\n case HttpStatusCode.RangeNotSatisfiable:\n queryForm.form.controls[pageControlKey]?.patchValue(1);\n break;\n\n // The page might be invalid (in dev mode, code is 500)\n case HttpStatusCode.InternalServerError:\n if (isSymfonyPagerfantaOutOfRangeError(state.error.detail)) {\n queryForm.form.controls[pageControlKey].patchValue(1);\n }\n break;\n }\n }),\n takeUntilResponse(),\n );\n }),\n );\n };\n\nexport const isQueryStateLoading = (state: QueryState | null | undefined): state is Loading =>\n state?.type === QueryStateType.Loading;\n\nexport const isQueryStateSuccess = (state: QueryState | null | undefined): state is Success =>\n state?.type === QueryStateType.Success;\n\nexport const isQueryStateFailure = (state: QueryState | null | undefined): state is Failure =>\n state?.type === QueryStateType.Failure;\n\nexport const isQueryStateCancelled = (state: QueryState | null | undefined): state is Cancelled =>\n state?.type === QueryStateType.Cancelled;\n\nexport const isQueryStatePrepared = (state: QueryState | null | undefined): state is Prepared =>\n state?.type === QueryStateType.Prepared;\n\nexport const isAutoRefresh = (state: QueryState | null | undefined): boolean => state?.meta.triggeredVia === 'auto';\n\nexport const mergeHeaders = (...headers: Array<RequestHeaders | null | undefined>) => {\n return headers.reduce((acc, headers) => {\n if (!headers) {\n return acc;\n }\n\n return {\n ...acc,\n ...headers,\n };\n }, {});\n};\n\nexport const isGqlQueryConfig = <\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends RouteType<Arguments> | undefined,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n>(\n config: unknown,\n): config is GqlQueryConfig<Route, Response, Arguments, Store, Data, Id> => {\n if (!config || typeof config !== 'object' || Array.isArray(config)) {\n return false;\n }\n\n if (!('query' in config)) {\n return false;\n }\n\n return true;\n};\n\nexport const isQuery = <T extends AnyQuery>(query: unknown): query is T => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n\n if (!('state$' in query)) {\n return false;\n }\n\n return true;\n};\n\nexport const createQueryCollection = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n) => new BehaviorSubject<R | null>(null);\n\nexport const extractQuery = <T extends AnyQuery | AnyQueryCollection | null>(v: T) =>\n (isQuery(v) ? v : v?.query) ?? null;\n\nexport const getDefaultHeaders = (\n headers: RequestHeaders | RequestHeadersMethodMap | null | undefined,\n method: Method,\n) => {\n if (!headers) {\n return {};\n }\n\n if (method in headers) {\n return (headers[method] ?? {}) as RequestHeaders;\n }\n\n return headers as RequestHeaders;\n};\n\nexport const castQueryCreatorTypes = <\n QC extends AnyQueryCreator,\n Arguments extends QueryArgsOf<QC>,\n Response extends QueryResponseOf<QC>,\n Store extends QueryStoreOf<QC>,\n Data extends QueryDataOf<QC>,\n Route extends RouteType<Arguments>,\n Id extends QueryStoreIdOf<QC>,\n OverrideArguments extends BaseArguments | undefined,\n OverrideResponse extends Response | undefined,\n>(config: {\n creator: QC;\n args?: OverrideArguments;\n response?: OverrideResponse;\n}) => {\n if (config.args?.pathParams) {\n console.error(config);\n\n throw new Error('Path params cannot be overridden in castQueryCreatorTypes. Create a new query creator instead.');\n }\n\n return config.creator as unknown as QueryCreator<OverrideArguments, OverrideResponse, Route, Store, Data, Id>;\n};\n\nexport const computeQueryMethod = (config: { config: AnyRestQueryConfig | AnyGqlQueryConfig; client: QueryClient }) => {\n let method: Method;\n\n if (isGqlQueryConfig(config.config)) {\n const transferVia = config.config.transferVia ?? config.client.config.request?.gql?.transferVia;\n method = transformMethod({ method: config.config.method, transferVia });\n } else {\n method = transformMethod({ method: config.config.method });\n }\n\n return method;\n};\n\nexport const computeQueryBody = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n method: Method;\n args?: BaseArguments;\n}) => {\n let body: unknown;\n\n if (\n config.method === 'GET' ||\n config.method === 'HEAD' ||\n config.method === 'OPTIONS' ||\n (isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia)))\n ) {\n return undefined;\n }\n\n if (isGqlQueryConfig(config.config)) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n\n body = query(config.args?.variables);\n } else {\n body = config.args?.body;\n }\n\n return body;\n};\n\nexport const computeQueryAuthHeader = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n}) => {\n let authHeader: Record<string, string> | null = null;\n\n if (config.config.secure) {\n const header = config.client.authProvider?.header;\n\n if (header) {\n authHeader = header;\n }\n } else if (config.client.authProvider?.header) {\n if (config.config.secure === undefined || config.config.secure) {\n authHeader = config.client.authProvider.header;\n }\n }\n\n return authHeader;\n};\n\nexport const computeQueryHeaders = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n args?: BaseArguments;\n}) => {\n const authHeader = computeQueryAuthHeader(config);\n\n const mergedHeaders =\n mergeHeaders(\n getDefaultHeaders(config.client.config.request?.headers, config.config.method),\n authHeader,\n config.args?.headers,\n ) || undefined;\n\n return mergedHeaders;\n};\n\nexport const computeQueryQueryParams = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n args?: BaseArguments;\n}) => {\n if (\n isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia))\n ) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n\n let params = query(config.args?.variables);\n\n if (config.args?.queryParams) {\n params = { ...params, ...config.args?.queryParams };\n }\n\n return params;\n }\n\n return config.args?.queryParams;\n};\n\nexport const paginatedEntityValueUpdater =\n <\n T extends Paginated<unknown>,\n Args extends BaseArguments,\n Entity,\n J extends T extends Paginated<infer X> ? X : never,\n >(\n findFn: (val: J, entity: Entity) => boolean,\n ) =>\n ({ response, rawResponse, entity }: { rawResponse: T; response: T; args: Args; entity: Entity }) => {\n const indexOfEntityRaw = rawResponse.items.findIndex((item) => findFn(item as J, entity));\n const indexOfEntity = response.items.findIndex((item) => findFn(item as J, entity));\n\n if (indexOfEntity === -1 || indexOfEntityRaw === -1) {\n return null;\n }\n\n const newRawResponse = {\n ...rawResponse,\n items: [\n ...rawResponse.items.slice(0, indexOfEntityRaw),\n entity,\n ...rawResponse.items.slice(indexOfEntityRaw + 1),\n ],\n };\n\n const newResponse = {\n ...response,\n items: [...response.items.slice(0, indexOfEntity), entity, ...response.items.slice(indexOfEntity + 1)],\n };\n\n return {\n response: newResponse,\n rawResponse: newRawResponse,\n };\n };\n","import { BehaviorSubjectWithSubscriberCount } from '@ethlete/core';\nimport {\n filter,\n interval,\n map,\n Observable,\n of,\n shareReplay,\n skip,\n Subject,\n Subscription,\n switchMap,\n takeUntil,\n takeWhile,\n tap,\n} from 'rxjs';\nimport { isBearerAuthProvider } from '../auth';\nimport { EntityStore } from '../entity';\nimport { QueryClient } from '../query-client';\nimport { HttpStatusCode, request, RequestEvent } from '../request';\nimport {\n BaseArguments,\n ExecuteQueryOptions,\n GqlQueryConfig,\n PollConfig,\n QueryAutoRefreshConfig,\n QueryState,\n QueryStateMeta,\n QueryStateType,\n RestQueryConfig,\n RouteType,\n} from './query.types';\nimport {\n computeQueryBody,\n computeQueryHeaders,\n computeQueryMethod,\n isGqlQueryConfig,\n isQueryStateLoading,\n isQueryStateSuccess,\n takeUntilResponse,\n} from './query.utils';\n\nexport class Query<\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> {\n private _currentId = 0;\n private _pollingSubscription: Subscription | null = null;\n private _requestSubscription: Subscription | null = null;\n private _onAbort$ = new Subject<void>();\n private _currentPollConfig: PollConfig | null = null;\n\n /**\n * @internal\n */\n _isPollingPaused = false;\n\n private readonly _state$ = new BehaviorSubjectWithSubscriberCount<QueryState<Response>>({\n type: QueryStateType.Prepared,\n meta: { id: this._currentId, triggeredVia: 'program' },\n });\n\n private get _nextId() {\n return ++this._currentId;\n }\n\n get state$(): Observable<QueryState<Data>> {\n return this._state$.pipe(\n switchMap((s) => this._transformState(s)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n /**\n * The current state of the query.\n *\n * **Warning!** This differs from the `state$` observable in that it does not use the query store. Thus, the response data might be outdated.\n * Use `state$` (or `firstValueFrom(state$)`) the most up-to-date data.\n */\n get rawState() {\n return this._state$.value;\n }\n\n get isExpired() {\n if (!isQueryStateSuccess(this._state$.value)) {\n return false;\n }\n\n const ts = this._state$.value.meta.expiresAt;\n\n if (!ts) {\n return true;\n }\n\n return ts < Date.now();\n }\n\n get isInUse() {\n return this._state$.subscriberCount > 0;\n }\n\n get isPolling() {\n return !!this._pollingSubscription;\n }\n\n get autoRefreshOnConfig() {\n const base = this._queryConfig.autoRefreshOn ?? {};\n\n const transformed: Readonly<QueryAutoRefreshConfig> = {\n queryClientDefaultHeadersChange: base.queryClientDefaultHeadersChange ?? true,\n windowFocus: base.windowFocus ?? true,\n };\n\n return transformed;\n }\n\n /**\n * @internal\n */\n get _enableSmartPolling() {\n return this._queryConfig.enableSmartPolling ?? true;\n }\n\n /**\n * @internal\n */\n get _arguments() {\n return this._args;\n }\n\n get store() {\n return this._queryConfig.entity?.store ?? null;\n }\n\n constructor(\n private _client: QueryClient,\n private _queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n private _routeWithParams: Route,\n private _args: Arguments,\n ) {}\n\n execute(options: ExecuteQueryOptions = {}) {\n const { skipCache = false, _triggeredVia: triggeredVia = 'program' } = options;\n const { authProvider } = this._client;\n const queryConfig = this._queryConfig;\n\n if (!this.isExpired && !skipCache && isQueryStateSuccess(this.rawState)) {\n return this;\n }\n\n if (queryConfig.secure && !authProvider) {\n throw new Error('Cannot execute secure query without auth provider');\n }\n\n const id = this._nextId;\n const meta: QueryStateMeta = { id, triggeredVia };\n\n if (isQueryStateLoading(this.rawState)) {\n this.abort();\n }\n\n this._state$.next({ type: QueryStateType.Loading, meta });\n\n const method = computeQueryMethod({ config: queryConfig, client: this._client });\n const body = computeQueryBody({ config: queryConfig, client: this._client, args: this._args, method });\n const headers = computeQueryHeaders({ client: this._client, config: queryConfig, args: this._args });\n\n this._requestSubscription = request<Response>({\n urlWithParams: this._routeWithParams,\n method,\n body,\n headers,\n reportProgress: queryConfig.reportProgress,\n responseType: queryConfig.responseType,\n withCredentials: queryConfig.withCredentials,\n cacheAdapter: this._client.config.request?.cacheAdapter,\n retryFn: this._client.config.request?.retryFn,\n })\n .pipe(\n takeUntil(this._onAbort$),\n tap((state) => this._updateEntityState(state, meta, options)),\n )\n .subscribe();\n\n return this;\n }\n\n abort() {\n this._onAbort$.next();\n\n return this;\n }\n\n poll(config: PollConfig) {\n if (this._pollingSubscription) {\n return this;\n }\n\n this._currentPollConfig = config;\n\n const interval$ = interval(config.interval);\n const poll$ = interval$.pipe(\n skip(config.triggerImmediately ? 0 : 1),\n takeUntil(config.takeUntil),\n takeWhile(() => !this._isPollingPaused),\n filter(() => !isQueryStateLoading(this._state$.value)),\n );\n\n this._pollingSubscription = poll$.subscribe({\n next: () => this.execute({ skipCache: true, _triggeredVia: 'poll' }),\n complete: () => this.stopPolling(),\n });\n\n return this;\n }\n\n stopPolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._currentPollConfig = null;\n\n return this;\n }\n\n pausePolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n\n this._isPollingPaused = true;\n\n return this;\n }\n\n resumePolling() {\n if (!this._isPollingPaused || !this._currentPollConfig) {\n return this;\n }\n\n this._isPollingPaused = false;\n\n return this.poll({ ...this._currentPollConfig, triggerImmediately: true });\n }\n\n /**\n * @internal\n */\n _destroy() {\n this._state$.complete();\n this._onAbort$.complete();\n this._pollingSubscription?.unsubscribe();\n this._requestSubscription?.unsubscribe();\n }\n\n private _getBearerAuthProvider() {\n const authProvider = this._client.authProvider;\n\n if (authProvider && isBearerAuthProvider(authProvider)) {\n return authProvider;\n }\n\n return null;\n }\n\n private _updateEntityState(\n requestEvent: RequestEvent<Response>,\n meta: QueryStateMeta,\n options?: ExecuteQueryOptions,\n ) {\n switch (requestEvent.type) {\n case 'start':\n case 'delay-retry': {\n const { type, retryDelay, retryNumber } = requestEvent;\n const newMeta: QueryStateMeta = { ...meta, isWaitingForRetry: type === 'delay-retry', retryDelay, retryNumber };\n\n this._state$.next({\n type: QueryStateType.Loading,\n meta: newMeta,\n });\n break;\n }\n\n case 'upload-progress':\n case 'download-progress': {\n this._state$.next({\n type: QueryStateType.Loading,\n progress: requestEvent.progress,\n partialText: 'partialText' in requestEvent ? requestEvent.partialText : undefined,\n meta,\n });\n\n break;\n }\n\n case 'success': {\n const { response, expiresInTimestamp } = requestEvent;\n const isGql = isGqlQueryConfig(this._queryConfig);\n const responseData =\n isGql && typeof response === 'object' && !!response && 'data' in response\n ? (response['data'] as Response)\n : (response as Response);\n\n if (this._queryConfig.entity && this._queryConfig.entity.set) {\n const id = this._queryConfig.entity?.id({ args: this._args, response: responseData });\n\n this._queryConfig.entity?.set({\n args: this._args,\n response: responseData,\n id,\n store: this._queryConfig.entity.store,\n });\n }\n\n this._state$.next({\n type: QueryStateType.Success,\n response: responseData,\n meta: { ...meta, expiresAt: expiresInTimestamp },\n });\n\n break;\n }\n\n case 'failure': {\n const { error } = requestEvent;\n const failure = () => this._state$.next({ type: QueryStateType.Failure, error, meta });\n const bearerAuthProvider = this._getBearerAuthProvider();\n\n if (\n !bearerAuthProvider ||\n options?._isUnauthorizedRetry ||\n error.status !== HttpStatusCode.Unauthorized ||\n !bearerAuthProvider.shouldRefreshOnUnauthorizedResponse\n ) {\n return failure();\n }\n\n const query = bearerAuthProvider._refreshQuery();\n if (!query) return failure();\n\n query.state$\n .pipe(\n takeUntilResponse(),\n takeUntil(this._onAbort$),\n tap((state) =>\n isQueryStateSuccess(state) ? this.execute({ ...options, _isUnauthorizedRetry: true }) : failure(),\n ),\n )\n .subscribe();\n\n break;\n }\n\n case 'cancel': {\n this._state$.next({\n type: QueryStateType.Cancelled,\n meta,\n });\n\n break;\n }\n }\n }\n\n private _transformState(s: QueryState<Response>): Observable<QueryState<Data>> {\n if (!isQueryStateSuccess(s) || !this._queryConfig.entity?.get) {\n return of(s) as Observable<QueryState<Data>>;\n }\n\n const id = this._queryConfig.entity.id({ args: this._args, response: s.response });\n\n return this._queryConfig.entity\n .get({ args: this._args, id, response: s.response, store: this._queryConfig.entity.store })\n .pipe(map((v) => ({ ...s, response: v })));\n }\n}\n","import { AnyQueryCreator } from '../query-creator';\nimport { AuthProvider } from './auth-provider.types';\nimport { BasicAuthProvider } from './basic-auth-provider';\nimport { BearerAuthProvider } from './bearer-auth-provider';\nimport { CustomHeaderAuthProvider } from './custom-header-auth-provider';\n\nexport const isBasicAuthProvider = (authProvider: AuthProvider): authProvider is BasicAuthProvider =>\n authProvider instanceof BasicAuthProvider;\n\nexport const isBearerAuthProvider = <T extends AnyQueryCreator>(\n authProvider: AuthProvider,\n): authProvider is BearerAuthProvider<T> => authProvider instanceof BearerAuthProvider;\n\nexport const isCustomHeaderAuthProvider = (authProvider: AuthProvider): authProvider is CustomHeaderAuthProvider =>\n authProvider instanceof CustomHeaderAuthProvider;\n\nexport const decryptBearer = <Result = Record<string, unknown>>(token: string) => {\n try {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n atob(base64)\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join(''),\n );\n\n return JSON.parse(jsonPayload) as Result;\n } catch (error) {\n console.error(`Invalid bearer token: ${token}`, error);\n\n return null;\n }\n};\n","import { deleteCookie, getCookie, setCookie } from '@ethlete/core';\nimport { BehaviorSubject, Subject, takeUntil, tap, timer } from 'rxjs';\nimport {\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n switchQueryState,\n takeUntilResponse,\n} from '../query';\nimport { AnyQueryCreator, ConstructQuery, QueryResponseOf } from '../query-creator';\nimport {\n AuthBearerRefreshStrategy,\n AuthProvider,\n AuthProviderBearerConfig,\n TokenResponse,\n} from './auth-provider.types';\nimport { decryptBearer } from './auth-provider.utils';\n\nexport class BearerAuthProvider<T extends AnyQueryCreator> implements AuthProvider {\n private readonly _destroy$ = new Subject<boolean>();\n private readonly _currentRefreshQuery$ = new BehaviorSubject<ConstructQuery<T> | null>(null);\n\n private readonly _tokens$ = new BehaviorSubject<TokenResponse>({\n token: null,\n refreshToken: null,\n });\n\n get header() {\n return { Authorization: `Bearer ${this._tokens$.getValue().token}` };\n }\n\n get tokens$() {\n return this._tokens$.asObservable();\n }\n\n get tokens() {\n return this._tokens$.getValue();\n }\n\n get currentRefreshQuery$() {\n return this._currentRefreshQuery$.asObservable();\n }\n\n get currentRefreshQuery() {\n return this._currentRefreshQuery$.getValue();\n }\n\n get shouldRefreshOnUnauthorizedResponse() {\n return (\n !!this._config.refreshConfig &&\n (this._config.refreshConfig.refreshOnUnauthorizedResponse === undefined ||\n this._config.refreshConfig.refreshOnUnauthorizedResponse)\n );\n }\n\n constructor(private _config: AuthProviderBearerConfig<T>) {\n const cookieEnabled = _config.refreshConfig?.cookieEnabled ?? true;\n const cookieToken =\n _config.refreshConfig?.cookieName && cookieEnabled ? getCookie(_config.refreshConfig.cookieName) ?? null : null;\n\n this._tokens$.next({\n token: _config.token || null,\n refreshToken: _config.refreshConfig?.token || cookieToken || null,\n });\n\n if (!this.tokens.token && !this.tokens.refreshToken) {\n if (!_config.refreshConfig?.cookieName) {\n console.error(\n 'A BearerAuthProvider was created without token or refresh token. You should provide at least a cookieName where the refresh token might be stored.',\n );\n }\n\n return;\n }\n\n if (this.tokens.token) {\n this._prepareForRefresh();\n\n if (this.tokens.refreshToken && this._config.refreshConfig?.cookieName && cookieEnabled) {\n setCookie(this._config.refreshConfig.cookieName, this.tokens.refreshToken);\n }\n } else if (this.tokens.refreshToken) {\n this._refreshQuery();\n }\n }\n\n cleanUp(): void {\n this._destroy$.next(true);\n this._destroy$.unsubscribe();\n this._currentRefreshQuery$.next(null);\n\n if (this._config.refreshConfig?.cookieName) {\n deleteCookie(this._config.refreshConfig.cookieName, '/');\n }\n }\n\n enableCookie() {\n if (!this._config.refreshConfig?.cookieName) {\n throw new Error('No cookie name was provided');\n }\n\n if (!this.tokens.refreshToken) {\n throw new Error('No refresh token was provided');\n }\n\n this._config.refreshConfig.cookieEnabled = true;\n\n setCookie(this._config.refreshConfig.cookieName, this.tokens.refreshToken);\n }\n\n disableCookie() {\n if (!this._config.refreshConfig?.cookieName) {\n throw new Error('No cookie name was provided');\n }\n\n this._config.refreshConfig.cookieEnabled = false;\n\n deleteCookie(this._config.refreshConfig.cookieName, '/');\n }\n\n private _prepareForRefresh() {\n if (!this.tokens.token || !this._config.refreshConfig) {\n return;\n }\n\n const bearer = decryptBearer(this.tokens.token);\n\n if (!bearer) {\n return;\n }\n\n const expiresInPropertyName = this._config.refreshConfig.expiresInPropertyName || 'exp';\n const expiresIn = bearer[expiresInPropertyName] as number | undefined;\n const fiveMinutes = 5 * 60 * 1000;\n const refreshBuffer = this._config.refreshConfig.refreshBuffer ?? fiveMinutes;\n\n if (expiresIn === undefined) {\n throw new Error(`Bearer token does not contain an '${expiresInPropertyName}' property`);\n }\n\n const remainingTime = new Date(expiresIn * 1000).getTime() - refreshBuffer - new Date().getTime();\n\n const strategy = this._config.refreshConfig.strategy ?? AuthBearerRefreshStrategy.BeforeExpiration;\n\n switch (strategy) {\n case AuthBearerRefreshStrategy.BeforeExpiration:\n timer(remainingTime)\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => this._refreshQuery());\n break;\n }\n }\n\n /**\n * @internal\n */\n _refreshQuery() {\n const currentQuery = this._currentRefreshQuery$.getValue();\n\n if (isQueryStateLoading(currentQuery?.rawState)) {\n return currentQuery;\n }\n\n const currentRefreshToken = this.tokens.refreshToken;\n\n if (!currentRefreshToken || !this._config.refreshConfig) {\n return;\n }\n\n const args = this._config.refreshConfig.requestArgsAdapter?.({\n token: this.tokens.token,\n refreshToken: currentRefreshToken,\n }) ?? {\n body: { refreshToken: currentRefreshToken },\n };\n\n const query = this._config.refreshConfig.queryCreator.prepare(args).execute({ skipCache: true });\n\n this._currentRefreshQuery$.next(query as ConstructQuery<T>);\n\n this._currentRefreshQuery$\n .pipe(\n switchQueryState(),\n tap((state) => {\n if (isQueryStateSuccess(state)) {\n if (this._config.refreshConfig?.responseAdapter) {\n const tokens = this._config.refreshConfig.responseAdapter(state.response as QueryResponseOf<T>);\n\n this._tokens$.next(tokens);\n } else {\n this._tokens$.next({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n token: (state.response as any)['token'],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n refreshToken: (state.response as any)['refreshToken'],\n });\n }\n const cookieEnabled = this._config.refreshConfig?.cookieEnabled ?? true;\n\n if (this._config.refreshConfig?.cookieName && this.tokens.refreshToken && cookieEnabled) {\n setCookie(this._config.refreshConfig.cookieName, this.tokens.refreshToken);\n }\n\n this._prepareForRefresh();\n } else if (isQueryStateFailure(state)) {\n this._tokens$.next({ token: null, refreshToken: null });\n\n if (this._config.refreshConfig?.cookieName) {\n deleteCookie(this._config.refreshConfig.cookieName, '/');\n }\n }\n }),\n takeUntilResponse(),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n return query;\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n inject,\n} from '@angular/core';\nimport { Subscription, tap } from 'rxjs';\nimport {\n AnyQuery,\n AnyQueryCollection,\n QueryOf,\n QueryState,\n isQuery,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n} from '../query';\nimport { QueryDataOf } from '../query-creator';\nimport { RequestError, RequestProgress } from '../request';\n\ninterface QueryContext<Q extends AnyQuery | null> {\n /**\n * The queries's response data.\n */\n $implicit: QueryDataOf<Q> | null;\n\n /**\n * The queries's response data.\n */\n etQuery: QueryDataOf<Q> | null;\n\n /**\n * Is true when the query is triggered by user interaction.\n */\n loading: boolean;\n\n /**\n * Is true when the query is triggered by either polling or auto refresh event.\n */\n refreshing: boolean;\n\n /**\n * The query's progress state.\n */\n progress: RequestProgress | null;\n\n /**\n * The query's error state.\n */\n error: RequestError<unknown> | null;\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[etQuery]',\n standalone: true,\n})\nexport class QueryDirective<Q extends AnyQuery | AnyQueryCollection | null> implements OnInit, OnDestroy {\n private _mainTemplateRef = inject<TemplateRef<QueryContext<QueryOf<Q>>>>(TemplateRef);\n private _viewContainerRef = inject(ViewContainerRef);\n private _errorHandler = inject(ErrorHandler);\n private _cdr = inject(ChangeDetectorRef);\n\n private _isMainViewCreated = false;\n private _subscription: Subscription | null = null;\n\n private readonly _viewContext: QueryContext<QueryOf<Q>> = {\n $implicit: null,\n etQuery: null,\n loading: false,\n refreshing: false,\n error: null,\n progress: null,\n };\n\n @Input('etQuery')\n get query(): Q {\n return this._query;\n }\n set query(v: Q) {\n this._query = v;\n\n this._subscribeToQuery();\n }\n private _query!: Q;\n\n @Input('etQueryCache')\n get cache(): boolean {\n return this._cache;\n }\n set cache(v: boolean) {\n this._cache = v;\n }\n private _cache = false;\n\n static ngTemplateContextGuard<Q extends AnyQuery | AnyQueryCollection | null>(\n dir: QueryDirective<Q>,\n ctx: unknown,\n ): ctx is QueryContext<QueryOf<Q>> {\n return true;\n }\n\n ngOnInit(): void {\n this._renderMainView();\n }\n\n ngOnDestroy(): void {\n this._subscription?.unsubscribe();\n }\n\n private _subscribeToQuery(): void {\n this._subscription?.unsubscribe();\n this._subscription = null;\n\n if (!this.query) {\n this._viewContext.$implicit = null;\n this._viewContext.etQuery = null;\n this._viewContext.loading = false;\n this._viewContext.refreshing = false;\n this._viewContext.error = null;\n this._viewContext.progress = null;\n return;\n }\n\n const query = isQuery(this.query) ? this.query : this.query.query;\n\n const sub = query.state$.pipe(tap((state) => this._updateView(state))).subscribe();\n\n this._subscription = sub;\n }\n\n private _updateView(state: QueryState) {\n if (isQueryStateLoading(state)) {\n this._viewContext.progress = state.progress ?? null;\n this._viewContext.refreshing = state.meta.triggeredVia === 'auto' || state.meta.triggeredVia === 'poll';\n\n if (!this._viewContext.refreshing) {\n this._viewContext.loading = true;\n }\n } else {\n this._viewContext.loading = false;\n this._viewContext.refreshing = false;\n this._viewContext.progress = null;\n }\n\n if (isQueryStateSuccess(state)) {\n this._viewContext.etQuery = state.response as QueryDataOf<QueryOf<Q>>;\n this._viewContext.$implicit = state.response as QueryDataOf<QueryOf<Q>>;\n } else if (!this.cache) {\n this._viewContext.etQuery = null;\n this._viewContext.$implicit = null;\n }\n\n if (isQueryStateFailure(state)) {\n this._viewContext.error = state.error;\n\n this._errorHandler.handleError(state.error);\n } else {\n this._viewContext.error = null;\n }\n\n this._cdr.markForCheck();\n }\n\n private _renderMainView(): void {\n if (!this._isMainViewCreated) {\n this._isMainViewCreated = true;\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);\n }\n }\n}\n","import { BehaviorSubject, combineLatest, map, of, shareReplay, switchMap, tap } from 'rxjs';\nimport { isQueryStateSuccess } from '../query';\nimport { AnyQueryCreator, ConstructQuery, QueryArgsOf, QueryResponseOf } from '../query-creator';\nimport { InfinityQueryConfig, InfinityQueryParamLocation } from './infinity-query.types';\n\nexport class InfinityQuery<\n QueryCreator extends AnyQueryCreator,\n Query extends ConstructQuery<QueryCreator>,\n Args extends QueryArgsOf<QueryCreator>,\n QueryResponse extends QueryResponseOf<QueryCreator>,\n InfinityResponse extends unknown[],\n> {\n private readonly _queries$ = new BehaviorSubject<Query[]>([]);\n private readonly _currentPage$ = new BehaviorSubject<number | null>(null);\n private readonly _currentCalculatedPage$ = new BehaviorSubject<number | null>(null);\n private readonly _totalPages$ = new BehaviorSubject<number | null>(null);\n private readonly _itemsPerPage$ = new BehaviorSubject<number>(this._config.limitParam?.value ?? 10);\n\n private readonly _data$ = this._queries$.pipe(\n switchMap((queries) => {\n if (!queries.length) {\n return of([]);\n }\n\n return combineLatest(queries.map((query) => query.state$.pipe(map((state) => ({ state, query })))));\n }),\n tap((states) => {\n const lastState = states[states.length - 1].state;\n const lastQuery = states[states.length - 1].query;\n\n if (!isQueryStateSuccess(lastState)) {\n return;\n }\n\n const totalPages =\n this._config.response.totalPagesExtractor?.({\n response: lastState.response as QueryResponse,\n itemsPerPage: this.itemsPerPage,\n arguments: lastQuery._arguments,\n }) ??\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (lastState.response as any)?.totalPages ??\n null;\n\n this._totalPages$.next(totalPages);\n }),\n map((stateMaps) => {\n const fullData = stateMaps.reduce((acc, stateMap) => {\n if (isQueryStateSuccess(stateMap.state)) {\n let data = this._config?.response.valueExtractor(stateMap.state.response as QueryResponse);\n\n if (this._config.response.reverse) {\n data = [...data].reverse() as InfinityResponse;\n }\n\n if (this._config.response.appendItemsTo === 'start') {\n acc.unshift(...data);\n } else {\n acc.push(...data);\n }\n }\n return acc;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }, [] as any as InfinityResponse);\n\n return fullData;\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n private readonly _lastQuery$ = this._queries$.pipe(\n map((queries) => queries[queries.length - 1] ?? null),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n get currentPage$() {\n return this._currentPage$.asObservable();\n }\n\n get currentPage() {\n return this._currentPage$.getValue();\n }\n\n get currentCalculatedPage$() {\n return this._currentCalculatedPage$.asObservable();\n }\n\n get currentCalculatedPage() {\n return this._currentCalculatedPage$.getValue();\n }\n\n get totalPages$() {\n return this._totalPages$.asObservable();\n }\n\n get totalPages() {\n return this._totalPages$.getValue();\n }\n\n get itemsPerPage$() {\n return this._itemsPerPage$.asObservable();\n }\n\n get itemsPerPage() {\n return this._itemsPerPage$.getValue();\n }\n\n get data$() {\n return this._data$;\n }\n\n get currentQuery$() {\n return this._lastQuery$;\n }\n\n constructor(private _config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>) {}\n\n nextPage() {\n const newPage = (this._currentPage$.value ?? 0) + 1;\n const calculatedPage =\n this._config?.pageParam?.valueCalculator?.({\n page: newPage,\n totalPages: this.totalPages,\n itemsPerPage: this.itemsPerPage,\n }) ?? newPage;\n\n if (this.totalPages !== null && calculatedPage > this.totalPages) {\n console.error(\n 'Cannot load more pages, already at the end. Make sure to not render the infinity query trigger using *ngIf canLoadMore',\n );\n return;\n }\n\n const args = this._prepareArgs(this._config, calculatedPage);\n\n const query = this._config.queryCreator.prepare(args).execute() as Query;\n\n this._queries$.next([...this._queries$.value, query]);\n\n this._currentPage$.next(newPage);\n this._currentCalculatedPage$.next(calculatedPage);\n }\n\n reset(\n newConfig?: Omit<\n InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n 'queryCreator' | 'response'\n >,\n ) {\n this._config = { ...this._config, ...(newConfig ?? {}) };\n\n this._currentPage$.next(null);\n this._currentCalculatedPage$.next(null);\n this._totalPages$.next(null);\n this._itemsPerPage$.next(this._config.limitParam?.value ?? 10);\n this._queries$.next([]);\n\n this.nextPage();\n }\n\n private _prepareArgs(config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>, page: number) {\n const pageParamLocation = this._getPageParamLocation(config?.pageParam?.location);\n\n const pageArgs = {\n [pageParamLocation]: {\n [config?.pageParam?.key ?? 'page']: page,\n },\n };\n\n const limitParamLocation = this._getPageParamLocation(config?.limitParam?.location);\n\n const limitArgs = {\n [limitParamLocation]: {\n [config?.limitParam?.key ?? 'limit']: config?.limitParam?.value ?? 10,\n },\n };\n\n const defaultConfig = config?.defaultArgs ?? {};\n\n const mergedArgs =\n pageParamLocation === limitParamLocation\n ? {\n ...defaultConfig,\n [pageParamLocation]: {\n ...(config?.defaultArgs?.[pageParamLocation] ?? {}),\n ...pageArgs[limitParamLocation],\n ...limitArgs[limitParamLocation],\n },\n }\n : {\n ...defaultConfig,\n [pageParamLocation]: {\n ...(config?.defaultArgs?.[pageParamLocation] ?? {}),\n ...pageArgs[pageParamLocation],\n },\n [limitParamLocation]: {\n ...(config?.defaultArgs?.[limitParamLocation] ?? {}),\n ...limitArgs[limitParamLocation],\n },\n };\n\n return mergedArgs;\n }\n\n private _getPageParamLocation(location: InfinityQueryParamLocation | undefined) {\n const loc = location ?? 'query';\n\n switch (loc) {\n case 'path':\n return 'pathParams';\n case 'query':\n return 'queryParams';\n case 'body':\n return 'body';\n case 'header':\n return 'headers';\n case 'variable':\n return 'variables';\n default:\n throw new Error(`Invalid pageParamLocation: ${loc}`);\n }\n }\n}\n","import { AnyQueryCreator, QueryArgsOf, QueryResponseOf } from '../query-creator';\nimport { InfinityQueryConfig, PageParamCalculatorOptions } from './infinity-query.types';\n\nexport const createInfinityQueryConfig = <\n QueryCreator extends AnyQueryCreator,\n Args extends QueryArgsOf<QueryCreator>,\n QueryResponse extends QueryResponseOf<QueryCreator>,\n InfinityResponse extends unknown[],\n>(\n config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n) => config;\n\nexport const skipPaginationPageParamCalculator = ({ page, itemsPerPage }: PageParamCalculatorOptions) =>\n itemsPerPage * (page - 1);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n inject,\n InjectionToken,\n Input,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { createDestroy, DelayableDirective } from '@ethlete/core';\nimport { BehaviorSubject, combineLatest, skip, Subject, takeUntil, tap, withLatestFrom } from 'rxjs';\nimport { InfinityQuery, InfinityQueryConfig, InfinityQueryOf } from '../infinite-query';\nimport {\n BaseArguments,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n switchQueryState,\n} from '../query';\nimport { AnyQueryCreator, ConstructQuery } from '../query-creator';\nimport { RequestError } from '../request';\n\ninterface InfinityQueryContext<\n Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments | undefined, any, unknown[]>,\n> {\n $implicit: Q['response']['arrayType'] | null;\n etInfinityQuery: Q['response']['arrayType'] | null;\n loading: boolean;\n error: RequestError<unknown> | null;\n\n isFirstLoad: boolean;\n canLoadMore: boolean;\n currentPage: number | null;\n currentCalculatedPage: number | null;\n totalPages: number | null;\n itemsPerPage: number | null;\n\n currentQuery: ConstructQuery<Q['queryCreator']> | null;\n}\n\nexport const INFINITY_QUERY_TOKEN = new InjectionToken<InfinityQueryDirective<any>>('INFINITY_QUERY_TOKEN');\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[etInfinityQuery]',\n exportAs: 'etInfinityQuery',\n standalone: true,\n providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }],\n hostDirectives: [DelayableDirective],\n})\nexport class InfinityQueryDirective<\n Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments | undefined, any, unknown[]>,\n> implements OnInit\n{\n private readonly _queryConfigChanged$ = new Subject<boolean>();\n private readonly _viewContext: InfinityQueryContext<Q> = {\n $implicit: null,\n etInfinityQuery: null,\n loading: false,\n error: null,\n\n isFirstLoad: false,\n canLoadMore: false,\n currentPage: null,\n currentCalculatedPage: null,\n totalPages: null,\n itemsPerPage: null,\n\n currentQuery: null,\n };\n private _infinityQueryInstance: InfinityQueryOf<Q> | null = null;\n\n private readonly _destroy$ = createDestroy();\n private readonly _cdr = inject(ChangeDetectorRef);\n private readonly _viewContainerRef = inject(ViewContainerRef);\n private readonly _mainTemplateRef = inject(TemplateRef<InfinityQueryContext<Q>>);\n private readonly _errorHandler = inject(ErrorHandler);\n private readonly _delayable = inject(DelayableDirective, { host: true });\n\n private readonly _data$ = new BehaviorSubject<Q['response']['arrayType']>([]);\n\n private _didReceiveFirstData$ = new BehaviorSubject(false);\n private _isMainViewCreated = false;\n\n @Input('etInfinityQuery')\n get infinityQuery(): Q {\n return this._infinityQuery;\n }\n set infinityQuery(v: Q) {\n this._cleanup();\n\n this._infinityQuery = v;\n this._infinityQueryInstance = this._setupInfinityQuery(v);\n this.loadNextPage();\n }\n private _infinityQuery!: Q;\n\n get context() {\n return this._viewContext;\n }\n\n get instance() {\n return this._infinityQueryInstance;\n }\n\n get data$() {\n return this._data$.asObservable();\n }\n\n get data() {\n return this._data$.getValue();\n }\n\n static ngTemplateContextGuard<\n Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments | undefined, any, unknown[]>,\n >(dir: InfinityQueryDirective<Q>, ctx: unknown): ctx is InfinityQueryContext<Q> {\n return true;\n }\n\n ngOnInit(): void {\n this._renderMainView();\n }\n\n private _setupInfinityQuery(config: Q) {\n const instance = new InfinityQuery(config) as unknown as InfinityQueryOf<Q>;\n\n combineLatest([\n instance.currentQuery$.pipe(switchQueryState(), withLatestFrom(instance.currentQuery$)),\n this._delayable.isDelayed$,\n this._didReceiveFirstData$,\n ])\n .pipe(\n tap(([[state, currentQuery], isDelayed, didReceiveFirstData]) => {\n this._viewContext.currentPage = instance.currentPage;\n this._viewContext.totalPages = instance.totalPages;\n this._viewContext.itemsPerPage = instance.itemsPerPage;\n this._viewContext.canLoadMore =\n (instance.totalPages && instance.currentPage && instance.totalPages > instance.currentPage) || false;\n this._viewContext.currentCalculatedPage = instance.currentCalculatedPage;\n\n this._viewContext.currentQuery = currentQuery;\n\n if (isQueryStateLoading(state) || isDelayed || (!didReceiveFirstData && isQueryStateSuccess(state))) {\n this._viewContext.loading = true;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = this.context.etInfinityQuery === null;\n } else if (isQueryStateFailure(state)) {\n this._viewContext.loading = false;\n this._viewContext.error = state.error;\n this._viewContext.isFirstLoad = false;\n this._errorHandler.handleError(state.error);\n } else if (isQueryStateSuccess(state)) {\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = false;\n } else {\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.etInfinityQuery = null;\n this._viewContext.$implicit = null;\n\n this._viewContext.isFirstLoad = false;\n this._viewContext.canLoadMore = false;\n this._viewContext.currentPage = null;\n this._viewContext.itemsPerPage = null;\n this._viewContext.totalPages = null;\n\n this._viewContext.currentQuery = null;\n\n this._data$.next([]);\n }\n\n this._cdr.markForCheck();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._queryConfigChanged$),\n )\n .subscribe();\n\n instance.data$\n .pipe(\n skip(1),\n tap((data) => {\n this._viewContext.etInfinityQuery = this._viewContext.$implicit = data as Q['response']['arrayType'] | null;\n this._data$.next(data);\n\n if (!this._didReceiveFirstData$.getValue()) {\n this._didReceiveFirstData$.next(true);\n }\n\n this._cdr.markForCheck();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._queryConfigChanged$),\n )\n .subscribe();\n\n return instance;\n }\n\n loadNextPage() {\n if (!this._infinityQueryInstance) {\n return;\n }\n\n if (this._viewContext.loading) {\n return;\n }\n\n this._infinityQueryInstance.nextPage();\n }\n\n reset(newConfig?: Omit<Q, 'queryCreator' | 'response'>) {\n if (!this._infinityQueryInstance) {\n return;\n }\n\n this._infinityQueryInstance.reset(newConfig as any);\n }\n\n private _renderMainView(): void {\n if (!this._isMainViewCreated) {\n this._isMainViewCreated = true;\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);\n }\n }\n\n private _cleanup() {\n this._queryConfigChanged$.next(true);\n\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.etInfinityQuery = null;\n this._viewContext.$implicit = null;\n\n this._viewContext.isFirstLoad = false;\n this._viewContext.canLoadMore = false;\n this._viewContext.currentPage = null;\n this._viewContext.itemsPerPage = null;\n this._viewContext.totalPages = null;\n\n this._viewContext.currentQuery = null;\n\n this._data$.next([]);\n }\n}\n","import { Directive, ElementRef, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { fromEvent, Subject, takeUntil } from 'rxjs';\nimport { INFINITY_QUERY_TOKEN } from './infinity-query.directive';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[etInfinityQueryTrigger], et-infinity-query-trigger',\n standalone: true,\n})\nexport class InfinityQueryTriggerDirective implements OnInit, OnDestroy {\n private _elementRef = inject(ElementRef<HTMLElement>);\n private _infinityQuery = inject(INFINITY_QUERY_TOKEN);\n\n private _destroy = new Subject<boolean>();\n private _observer: IntersectionObserver | null = null;\n\n click$ = fromEvent(this._elementRef.nativeElement, 'click');\n\n @Input()\n scrollContainerSelector: string | null = null;\n\n ngOnInit(): void {\n const isInteractive = this._elementRef.nativeElement.hasAttribute('etInfinityQueryTrigger');\n\n if (isInteractive) {\n this.click$.pipe(takeUntil(this._destroy)).subscribe(() => this._infinityQuery.loadNextPage());\n } else {\n this._setupIntersectionObserver();\n }\n }\n\n ngOnDestroy(): void {\n this._destroy.next(true);\n this._destroy.unsubscribe();\n this._observer?.disconnect();\n }\n\n private _setupIntersectionObserver(): void {\n this._observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n\n if (entry.isIntersecting && !this._infinityQuery.context.loading) {\n this._infinityQuery.loadNextPage();\n }\n },\n {\n root: this.scrollContainerSelector ? document.querySelector(this.scrollContainerSelector) : null,\n rootMargin: '0px',\n threshold: [0.25, 0.5, 0.75, 1],\n },\n );\n\n this._observer.observe(this._elementRef.nativeElement);\n }\n}\n","import { Observable, Subject, debounceTime, filter, map, shareReplay, startWith } from 'rxjs';\nimport { EntityKey, EntityStoreConfig } from './entity.types';\n\nclass EntityStoreError extends Error {\n constructor(message: string, public detail?: unknown) {\n super(message);\n this.name = 'EntityStoreError';\n }\n}\n\nexport class EntityStore<T> {\n private readonly _dictionary = new Map<EntityKey, T>();\n\n private readonly _change$ = new Subject<EntityKey | EntityKey[]>();\n\n constructor(private readonly _config: EntityStoreConfig) {}\n\n select(key: EntityKey): Observable<T | null>;\n select(keys: EntityKey[]): Observable<T[]>;\n select(keyOrKeys: EntityKey | EntityKey[]): Observable<T | null> | Observable<T[]> {\n if (Array.isArray(keyOrKeys)) {\n return this._selectMany(keyOrKeys);\n }\n\n return this._select(keyOrKeys);\n }\n\n /**\n * **Note:** Prefer `select` over `selectWhere` when possible.\n */\n selectWhere(predicate: (value: T) => boolean): Observable<T[]> {\n return this._change$.pipe(\n startWith(null),\n debounceTime(0),\n map(() => Array.from(this._dictionary.values()).filter(predicate)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n set(key: EntityKey, value: T): void;\n set(keys: EntityKey[], values: T[]): void;\n set(keyOrKeys: EntityKey | EntityKey[], valueOrValues: T | T[]) {\n if (Array.isArray(keyOrKeys)) {\n if (!Array.isArray(valueOrValues)) {\n throw new EntityStoreError('When setting multiple keys, values must be an array', {\n keyOrValues: keyOrKeys,\n valueOrValues,\n });\n }\n\n for (let i = 0; i < keyOrKeys.length; i++) {\n this._set(keyOrKeys[i], valueOrValues[i]);\n }\n } else {\n this._set(keyOrKeys, valueOrValues as T);\n }\n\n this._change$.next(keyOrKeys);\n }\n\n remove(key: EntityKey): void;\n remove(keys: EntityKey[]): void;\n remove(keyOrKeys: EntityKey | EntityKey[]) {\n if (Array.isArray(keyOrKeys)) {\n for (const key of keyOrKeys) {\n this._remove(key);\n }\n } else {\n this._remove(keyOrKeys);\n }\n\n this._change$.next(keyOrKeys);\n }\n\n logState() {\n console.log('EntityStore:', this._config.name, {\n dictionary: this._dictionary,\n });\n }\n\n private _select(key: EntityKey): Observable<T | null> {\n if (this._config.logActions) {\n console.log('EntityStore: select', this._config.name, key);\n }\n\n return this._change$.pipe(\n startWith(null),\n filter((v) => {\n if (v === null) {\n return true;\n }\n\n if (Array.isArray(v)) {\n return v.includes(key);\n }\n\n return v === key;\n }),\n map(() => this._dictionary.get(key) ?? null),\n );\n }\n\n private _selectMany(keys: EntityKey[]): Observable<T[]> {\n if (this._config.logActions) {\n console.log('EntityStore: selectMany', this._config.name, keys);\n }\n\n return this._change$.pipe(\n startWith(null),\n filter((v) => {\n if (v === null) {\n return true;\n }\n\n if (Array.isArray(v)) {\n return keys.some((key) => v.includes(key));\n }\n\n return keys.includes(v);\n }),\n map(() => keys.map((key) => this._dictionary.get(key)).filter((value): value is T => value !== undefined)),\n );\n }\n\n private _set(key: EntityKey, value: T) {\n if (this._config.logActions) {\n console.log('EntityStore: set', this._config.name, key, value);\n }\n\n this._dictionary.set(key, value);\n }\n\n private _remove(key: EntityKey) {\n if (this._config.logActions) {\n console.log('EntityStore: remove', this._config.name, key);\n }\n\n this._dictionary.delete(key);\n }\n}\n","import { Paginated } from '@ethlete/types';\nimport { map } from 'rxjs';\n\nexport function mapToPaginated<T>(response: Paginated<T>) {\n return map((items) => ({ ...response, items } as Paginated<T>));\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { EntityStore } from '../entity';\nimport { Query, computeQueryQueryParams, isGqlQueryConfig } from '../query';\nimport { QueryClient, buildGqlCacheKey, shouldCacheQuery } from '../query-client';\nimport { QueryStore } from '../query-store';\nimport { BaseArguments, GqlQueryConfig, RestQueryConfig, RouteType, WithHeaders } from '../query/query.types';\nimport { buildRoute } from '../request';\nimport { QueryPrepareFn } from './query-creator.types';\n\nexport class QueryCreator<\n Arguments extends BaseArguments | undefined,\n Response,\n Route extends RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> {\n constructor(\n private _queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n private _client: QueryClient,\n private _store: QueryStore,\n ) {}\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n prepare: QueryPrepareFn<Arguments, Response, Route, Store, Data, Id> = (args?: Arguments & WithHeaders) => {\n const route = buildRoute({\n base: this._client.config.baseRoute,\n route: this._queryConfig.route,\n pathParams: args?.pathParams,\n queryParams: computeQueryQueryParams({ config: this._queryConfig, client: this._client, args }),\n queryParamConfig: this._client.config.request?.queryParams,\n }) as Route;\n\n const cacheKey = isGqlQueryConfig(this._queryConfig) ? buildGqlCacheKey(this._queryConfig, args) : route;\n\n if (shouldCacheQuery(this._queryConfig.method)) {\n const existingQuery = this._store.get<Query<Response, Arguments, Route, Store, Data, Id>>(cacheKey);\n\n if (existingQuery) {\n return existingQuery;\n }\n }\n\n const query = new Query<Response, Arguments, Route, Store, Data, Id>(\n this._client,\n this._queryConfig,\n route,\n args ?? ({} as Arguments),\n );\n\n if (shouldCacheQuery(this._queryConfig.method)) {\n this._store.add(cacheKey, query);\n }\n\n return query;\n };\n\n behaviorSubject = (initialValue?: ReturnType<typeof this.prepare> | null) =>\n new BehaviorSubject<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n}\n","import { fromEvent, take, takeUntil, timer } from 'rxjs';\nimport { AnyQuery } from '../query';\n\nexport class QueryStore {\n private readonly _store = new Map<string, AnyQuery>();\n private _garbageCollector: number | null = null;\n private _isInLowResourceMode = false;\n private _lastBlurTimestamp = Date.now();\n\n constructor(\n private _config?: {\n enableChangeLogging?: boolean;\n enableGarbageCollectorLogging?: boolean;\n autoRefreshQueriesOnWindowFocus?: boolean;\n enableSmartPolling?: boolean;\n },\n ) {\n this._initSmartQueryHandling();\n }\n\n add(id: string, query: AnyQuery) {\n this._store.set(id, query);\n\n this._initGarbageCollector();\n\n this._logState(id, query, 'SET');\n }\n\n get<T extends AnyQuery>(id: string): T | null {\n return (this._store.get(id) as T) ?? null;\n }\n\n remove(id: string) {\n this.get(id)?._destroy();\n this._store.delete(id);\n\n this._logState(id, null, 'REMOVE');\n }\n\n forEach(callback: (value: AnyQuery, key: string) => void) {\n for (const [key, query] of this._store) {\n callback(query, key);\n }\n }\n\n refreshQueriesInUse(config?: { ignoreCacheValidity?: boolean; purgeUnused?: boolean }) {\n const { ignoreCacheValidity, purgeUnused } = config ?? {};\n\n for (const [key, query] of this._store) {\n if (\n query.isInUse &&\n (query.isExpired || ignoreCacheValidity) &&\n query.autoRefreshOnConfig.queryClientDefaultHeadersChange\n ) {\n query.execute({ skipCache: true, _triggeredVia: 'auto' });\n } else if (purgeUnused && !query.isInUse) {\n this.remove(key);\n }\n }\n }\n\n private _initSmartQueryHandling() {\n const windowBlur$ = fromEvent<Event>(window, 'blur');\n const windowFocus$ = fromEvent<Event>(window, 'focus');\n\n windowBlur$.subscribe(() => {\n timer(5000)\n .pipe(takeUntil(windowFocus$), take(1))\n .subscribe(() => {\n this._lastBlurTimestamp = Date.now();\n this._isInLowResourceMode = true;\n this._stopGarbageCollector();\n\n if (this._config?.enableSmartPolling) {\n this.forEach((query) => {\n if (!query.isPolling || !query._enableSmartPolling) {\n return;\n }\n\n query.pausePolling();\n });\n }\n });\n });\n\n windowFocus$.subscribe(() => {\n if (!this._isInLowResourceMode) {\n return;\n }\n\n this._isInLowResourceMode = false;\n\n if (this._config?.enableSmartPolling || this._config?.autoRefreshQueriesOnWindowFocus) {\n this.forEach((query) => {\n if (this._config?.enableSmartPolling && query._isPollingPaused) {\n query.resumePolling();\n }\n\n if (Date.now() - this._lastBlurTimestamp > 15000) {\n if (\n this._config?.autoRefreshQueriesOnWindowFocus &&\n query.isExpired &&\n query.isInUse &&\n query.autoRefreshOnConfig.windowFocus\n ) {\n query.execute({ skipCache: true, _triggeredVia: 'auto' });\n }\n }\n });\n }\n\n this._initGarbageCollector();\n });\n }\n\n private _logState(key: string | null, item: AnyQuery | null, operation: string) {\n if (!this._config?.enableChangeLogging) return;\n\n const stateAsJson: Record<string, AnyQuery> = {};\n\n this._store.forEach((value, key) => {\n stateAsJson[key] = value;\n });\n\n console.log(`%c[${operation}] ${key}`, 'font-weight: bold');\n\n console.log({ operation, key, item });\n console.log(stateAsJson);\n }\n\n private _initGarbageCollector() {\n if (this._garbageCollector !== null) {\n return;\n }\n\n this._logGarbageCollector('Start');\n\n this._garbageCollector = window.setInterval(() => {\n this._runGarbageCollector();\n }, 15000);\n }\n\n private _stopGarbageCollector() {\n if (this._garbageCollector !== null) {\n window.clearInterval(this._garbageCollector);\n this._garbageCollector = null;\n this._logGarbageCollector('Stop');\n }\n }\n\n private _runGarbageCollector() {\n this._logGarbageCollector('Collecting...');\n\n this._store.forEach((item, key) => {\n if (item.isExpired && !item.isInUse) {\n this.remove(key);\n }\n });\n\n this._logGarbageCollector('Collection done');\n\n if (!this._store.size) {\n this._stopGarbageCollector();\n }\n }\n\n private _logGarbageCollector(action: string) {\n if (!this._config?.enableGarbageCollectorLogging) return;\n\n console.log(`%cGC: ${action}`, 'color: yellow; font-weight: bold');\n }\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { AuthProvider } from '../auth';\nimport { EntityStore } from '../entity';\nimport {\n BaseArguments,\n GqlQueryConfig,\n GqlQueryConfigWithoutMethod,\n QueryConfigWithoutMethod,\n RestQueryConfig,\n RouteType,\n} from '../query';\nimport { QueryCreator } from '../query-creator';\nimport { QueryStore } from '../query-store';\nimport { RequestHeaders, RequestHeadersMethodMap } from '../request';\nimport { QueryClientConfig } from './query-client.types';\n\nexport class QueryClient {\n private readonly _store: QueryStore;\n\n get config() {\n return this._clientConfig;\n }\n\n get authProvider() {\n return this._authProvider$.getValue() ?? this._clientConfig.parent?._authProvider$.getValue() ?? null;\n }\n get authProvider$() {\n return this._authProvider$.asObservable() ?? this._clientConfig.parent?._authProvider$.asObservable() ?? null;\n }\n private readonly _authProvider$ = new BehaviorSubject<AuthProvider | null>(null);\n\n constructor(private _clientConfig: QueryClientConfig) {\n this._store = new QueryStore({\n enableChangeLogging: _clientConfig.logging?.queryStateChanges,\n enableGarbageCollectorLogging: _clientConfig.logging?.queryStateGarbageCollector,\n autoRefreshQueriesOnWindowFocus: _clientConfig.request?.autoRefreshQueriesOnWindowFocus ?? true,\n enableSmartPolling: _clientConfig.request?.enableSmartPolling ?? true,\n });\n }\n\n get = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GET',\n });\n\n post = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'POST',\n });\n\n put = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'PUT',\n });\n\n patch = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'PATCH',\n });\n\n delete = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'DELETE',\n });\n\n gqlQuery = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GQL_QUERY',\n });\n\n gqlMutate = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GQL_MUTATE',\n });\n\n fetch = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined,\n Id,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n Data = Response,\n >(\n queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n ) => new QueryCreator<Arguments, Response, Route, Store, Data, Id>(queryConfig, this, this._store);\n\n setAuthProvider = (authProvider: AuthProvider) => {\n if (this.authProvider) {\n throw new Error('The auth provider is already set. Please call clearAuthProvider() first.');\n }\n\n this._authProvider$.next(authProvider);\n };\n\n setDefaultHeaders = (config: {\n headers: RequestHeaders | RequestHeadersMethodMap | null;\n refreshQueriesInUse?: boolean;\n }) => {\n if (!this._clientConfig.request) {\n this._clientConfig.request = {\n headers: config.headers ?? undefined,\n };\n } else {\n this._clientConfig.request.headers = config.headers ?? undefined;\n }\n\n if (config.refreshQueriesInUse) {\n this._store.refreshQueriesInUse({ purgeUnused: true, ignoreCacheValidity: true });\n }\n };\n\n clearAuthProvider = () => {\n this.authProvider?.cleanUp();\n this._authProvider$.next(null);\n };\n}\n","import { AnyGqlQueryConfig, BaseArguments } from '../query/query.types';\nimport { Method } from '../request';\n\nexport const shouldCacheQuery = (method: Method) => {\n return method === 'GET' || method === 'OPTIONS' || method === 'HEAD' || method === 'GQL_QUERY';\n};\n\nexport const buildGqlCacheKey = (config: AnyGqlQueryConfig, args: BaseArguments | undefined) => {\n const { query } = config;\n const variables = args?.variables || {};\n\n const queryWithoutNewLinesAndWhitespace = query.replace(/\\s/g, '');\n\n const queryFirst50Chars = queryWithoutNewLinesAndWhitespace.slice(0, 50);\n const queryMiddle25Chars = queryWithoutNewLinesAndWhitespace.slice(\n queryWithoutNewLinesAndWhitespace.length / 2 - 25,\n queryWithoutNewLinesAndWhitespace.length / 2 + 25,\n );\n const queryLast50Chars = queryWithoutNewLinesAndWhitespace.slice(-50);\n\n const vars = JSON.stringify(variables);\n\n return `${queryFirst50Chars}...${queryMiddle25Chars}...${queryLast50Chars}...${vars}`;\n};\n","import { NgZone, assertInInjectionContext, inject, isDevMode } from '@angular/core';\nimport { AbstractControl, FormGroup, ɵValue } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ET_PROPERTY_REMOVED, RouterStateService, clone, createDestroy, equal } from '@ethlete/core';\nimport {\n BehaviorSubject,\n Subject,\n concat,\n debounceTime,\n map,\n startWith,\n take,\n takeUntil,\n tap,\n withLatestFrom,\n} from 'rxjs';\nimport {\n QueryFieldOptions,\n QueryFormGroupControls,\n QueryFormObserveOptions,\n QueryFormValue,\n QueryFormValueEvent,\n} from './query-form.types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class QueryFormGroup<T extends { [K in keyof T]: AbstractControl<any, any> } = any> extends FormGroup<T> {\n override patchValue(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: 0 extends 1 & T ? { [key: string]: any } : Partial<{ [K in keyof T]: ɵValue<T[K]> }>,\n options?: { onlySelf?: boolean | undefined; emitEvent?: boolean | undefined } | undefined,\n ): void {\n super.patchValue(value, options);\n }\n}\n\nexport class QueryField<T> {\n changes$ = this._setupChangesObservable();\n\n get control() {\n return this.data.control;\n }\n\n private _currentDebounceTimeout: number | null = null;\n\n constructor(public data: QueryFieldOptions<T>) {}\n\n setValue(value: T | null, options?: { skipDebounce?: boolean }) {\n if (this._currentDebounceTimeout !== null) {\n clearTimeout(this._currentDebounceTimeout);\n this._currentDebounceTimeout = null;\n }\n\n if (value === this.control.value) {\n return;\n }\n\n if (this.data.debounce && !options?.skipDebounce) {\n this._currentDebounceTimeout = window.setTimeout(() => {\n this.control.setValue(value);\n }, this.data.debounce);\n } else {\n this.control.setValue(value);\n }\n }\n\n private _setupChangesObservable() {\n const obs = this.control.valueChanges.pipe(startWith(this.control.value));\n\n if (!this.data.debounce) {\n return obs;\n }\n\n // The initial value should get emitted immediately\n // concat switches to the debounced observable after the first observable is completed\n return concat(obs.pipe(take(1)), this.control.valueChanges.pipe(debounceTime(this.data.debounce)));\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class QueryForm<T extends Record<string, QueryField<any>>> {\n private readonly _destroy$ = createDestroy();\n private readonly _unobserveTrigger$ = new Subject<boolean>();\n private readonly _router = inject(Router);\n private readonly _activatedRoute = inject(ActivatedRoute);\n private readonly _defaultValues = this._extractDefaultValues();\n private readonly _routerStateService = inject(RouterStateService);\n private readonly _zone = inject(NgZone);\n\n private _isObserving = false;\n\n readonly form = this._setupFormGroup();\n\n private readonly _lastFormValue$ = new BehaviorSubject<{ id: number; data: QueryFormValue<T> } | null>(null);\n private readonly _currentFormValue$ = new BehaviorSubject<{ id: number; data: QueryFormValue<T> }>({\n id: 0,\n data: this._formValue,\n });\n\n private get _formValue() {\n return this.form.getRawValue() as QueryFormValue<T>;\n }\n\n private readonly _changes$ = new BehaviorSubject<QueryFormValueEvent<T>>({\n previousValue: null,\n currentValue: this.form.getRawValue() as QueryFormValue<T>,\n });\n\n readonly changes$ = this._currentFormValue$.pipe(withLatestFrom(this._lastFormValue$)).pipe(\n map(([currentValueEvent, previousValueEvent]) => {\n return {\n previousValue: previousValueEvent?.data ?? null,\n currentValue: currentValueEvent.data,\n };\n }),\n );\n\n get controls() {\n return this.form.controls;\n }\n\n get value() {\n return this._changes$.value.currentValue;\n }\n\n constructor(private _fields: T) {\n assertInInjectionContext(QueryForm);\n }\n\n observe(options?: QueryFormObserveOptions) {\n if (this._isObserving) {\n if (isDevMode()) {\n console.warn('QueryForm.observe() was called multiple times. This is not supported.');\n }\n return;\n }\n\n this._isObserving = true;\n\n this.setFormValueFromUrlQueryParams({\n queryParams: this._routerStateService.queryParams,\n });\n\n this.form.valueChanges\n .pipe(\n startWith(null),\n tap(() => {\n this._lastFormValue$.next(clone(this._currentFormValue$.value));\n this._currentFormValue$.next({ id: this._currentFormValue$.value.id + 1, data: clone(this._formValue) });\n }),\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n )\n .subscribe();\n\n this._currentFormValue$\n .pipe(\n tap((currentValueEvent) => {\n const previousValueEvent = this._lastFormValue$.value;\n const currentValue = currentValueEvent.data;\n\n if (options?.writeToQueryParams !== false) {\n this._syncViaUrlQueryParams(currentValueEvent.data, options?.replaceUrl);\n }\n\n const didResetValues = this._handleQueryFormResets(previousValueEvent?.data ?? null, currentValue);\n\n if (didResetValues) {\n return;\n }\n\n if (this._currentFormValue$.value.id !== currentValueEvent.id) {\n return;\n }\n\n this._changes$.next({\n previousValue: previousValueEvent?.data ?? null,\n currentValue: currentValueEvent.data,\n });\n }),\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n )\n .subscribe();\n\n if (options?.syncOnNavigation !== false) {\n this._routerStateService.queryParamChanges$\n .pipe(\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n tap((changes) => this.setFormValueFromUrlQueryParams({ queryParams: changes })),\n )\n .subscribe();\n }\n }\n\n private _handleQueryFormResets(previousValue: QueryFormValue<T> | null, currentValue: QueryFormValue<T>) {\n let didResetValues = false;\n\n for (const formFieldKey in this._fields) {\n const resets = this._fields[formFieldKey].data.isResetBy;\n\n if (!resets) continue;\n\n const resetConditionKeys = Array.isArray(resets) ? resets : [resets];\n\n for (const resetConditionKey of resetConditionKeys) {\n if (!(resetConditionKey in this._fields)) {\n if (isDevMode()) {\n console.warn(`The field \"${resetConditionKey}\" is not defined in the QueryForm. Is it a typo?`, this);\n }\n\n continue;\n }\n\n if (\n previousValue &&\n currentValue &&\n !equal(previousValue[resetConditionKey], currentValue[resetConditionKey])\n ) {\n const defaultValueForKeyToReset = this._defaultValues[formFieldKey];\n const currentValueForKeyToReset = currentValue[formFieldKey];\n\n if (equal(defaultValueForKeyToReset, currentValueForKeyToReset)) {\n continue;\n }\n\n this.form.controls[formFieldKey].setValue(defaultValueForKeyToReset);\n\n didResetValues = true;\n\n break;\n }\n }\n }\n\n return didResetValues;\n }\n\n unobserve() {\n this._unobserveTrigger$.next(true);\n }\n\n setFormValueFromUrlQueryParams(options: { queryParams: Record<string, unknown>; skipDebounce?: boolean }) {\n for (const [key, field] of Object.entries(this._fields)) {\n const value = options.queryParams[key];\n\n const valueDoesNotExist = value === undefined;\n\n if (valueDoesNotExist) continue;\n\n const valueGotRemoved = value === ET_PROPERTY_REMOVED;\n\n if (valueGotRemoved) {\n field.setValue(this._getDefaultValue(key), { skipDebounce: options?.skipDebounce ?? true });\n\n continue;\n }\n\n const deserializedValue = field.data.queryParamToValueTransformFn?.(value) ?? value;\n const valueIsEqualToCurrent = equal(deserializedValue, field.control.value);\n\n if (valueIsEqualToCurrent) continue;\n\n field.setValue(deserializedValue, { skipDebounce: options?.skipDebounce ?? true });\n }\n }\n\n private _getDefaultValue(key: string) {\n return this._defaultValues[key] ?? null;\n }\n\n private _isDefaultValue(key: string, value: unknown) {\n const normalizedValue = Array.isArray(value) ? JSON.stringify(value) : value;\n\n return this._getDefaultValue(key) === normalizedValue;\n }\n\n private _setupFormGroup() {\n const group = new QueryFormGroup({} as QueryFormGroupControls<T>);\n\n for (const [key, field] of Object.entries(this._fields)) {\n group.addControl(key, field.control);\n }\n\n return group;\n }\n\n private _extractDefaultValues() {\n const defaultValues: Record<string, unknown> = {};\n\n for (const [key, field] of Object.entries(this._fields)) {\n const value = field.control.value;\n\n if (value === null || value === undefined) {\n continue;\n }\n\n if (Array.isArray(value)) {\n defaultValues[key] = JSON.stringify(value);\n } else {\n defaultValues[key] = value;\n }\n }\n\n return defaultValues;\n }\n\n private _syncViaUrlQueryParams(values: QueryFormValue<T>, replaceUrl?: boolean) {\n const queryParams = { ...clone(this._activatedRoute.snapshot.queryParams) };\n\n for (const [key, value] of Object.entries(values)) {\n if (!this._fields[key]) {\n console.warn(`The field \"${key}\" is not defined in the QueryForm. Is it a typo?`, this);\n continue;\n }\n\n if (this._isDefaultValue(key, value) || this._fields[key].data.appendToUrl === false) {\n delete queryParams[key];\n } else {\n queryParams[key] = this._fields[key].data.valueToQueryParamTransformFn\n ? this._fields[key].data.valueToQueryParamTransformFn?.(value)\n : value;\n }\n }\n\n this._zone.run(() => {\n this._router.navigate([], {\n queryParams,\n replaceUrl,\n });\n });\n }\n}\n","export const transformToString = (value: unknown) => {\n if (typeof value === 'string') {\n return value;\n }\n\n return null;\n};\n\nexport const transformToStringArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToString).filter(Boolean) as string[];\n } else if (typeof value === 'string') {\n return [transformToString(value)] as string[];\n }\n\n return null;\n};\n\nexport const transformToNumber = (value: unknown) => {\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n return Number(value);\n }\n return null;\n};\n\nexport const transformToNumberArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToNumber).filter((item) => item !== null) as number[];\n } else if (typeof value === 'number') {\n return [value] as number[];\n }\n\n return null;\n};\n\nexport const transformToBoolean = (value: unknown) => {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n return value === 'true' || value === '1';\n }\n return null;\n};\n\nexport const transformToBooleanArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToBoolean).filter((item) => item !== null) as boolean[];\n } else if (typeof value === 'string' || typeof value === 'boolean') {\n return [transformToBoolean(value)] as boolean[];\n }\n\n return null;\n};\n\nexport const transformToDate = (value: unknown) => {\n if (value instanceof Date) {\n return value;\n }\n if (typeof value === 'string') {\n const date = new Date(value);\n\n if (isNaN(date.getTime())) {\n return null;\n }\n\n return date;\n }\n return null;\n};\n\nexport const transformToDateArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToDate).filter((item) => item !== null) as Date[];\n } else if (typeof value === 'string' || value instanceof Date) {\n return [transformToDate(value)] as Date[];\n }\n\n return null;\n};\n\nexport const transformToSort = (value: unknown) => {\n if (typeof value === 'string') {\n const [active, direction] = value.split(':');\n\n return {\n active,\n direction: direction as 'asc' | 'desc',\n };\n }\n\n return null;\n};\n\nexport const transformToSortQueryParam = (value: unknown) => {\n if (typeof value === 'string') {\n return value;\n }\n if (value && typeof value === 'object' && 'active' in value && 'direction' in value) {\n const valAsSort = value as {\n active: string;\n direction: 'asc' | 'desc';\n };\n\n return valAsSort.direction ? `${valAsSort.active}:${valAsSort.direction}` : null;\n }\n\n return null;\n};\n","export const deepFreeze = <T extends Record<string, unknown>>(object: T) => {\n // check if object is actually an object or frozen\n if (!object || typeof object !== 'object' || Object.isFrozen(object)) {\n return object;\n }\n\n // Retrieve the property names defined on object\n const propNames = Object.getOwnPropertyNames(object);\n\n // Freeze properties before freezing self\n\n for (const name of propNames) {\n const value = object[name];\n\n if (value && typeof value === 'object') {\n deepFreeze(value as T);\n }\n }\n\n return Object.freeze(object);\n};\n","/**\n * Dummy function for providing types while not breaking inference.\n * **This function always returns null.**\n * @see https://github.com/microsoft/TypeScript/issues/26242\n * @returns null\n */\nexport const def = <Data>() => null as unknown as Data;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ethlete-query.mjs","sources":["../../../../libs/query/src/lib/auth/custom-header-auth-provider.ts","../../../../libs/query/src/lib/auth/basic-auth-provider.ts","../../../../libs/query/src/lib/logger/logger.ts","../../../../libs/query/src/lib/symfony/symfony.utils.ts","../../../../libs/query/src/lib/request/request.util.ts","../../../../libs/query/src/lib/request/request.ts","../../../../libs/query/src/lib/gql/gql.ts","../../../../libs/query/src/lib/query/query.utils.ts","../../../../libs/query/src/lib/query/query.ts","../../../../libs/query/src/lib/auth/auth-provider.utils.ts","../../../../libs/query/src/lib/auth/bearer-auth-provider.ts","../../../../libs/query/src/lib/directives/query.directive.ts","../../../../libs/query/src/lib/infinite-query/infinity-query.ts","../../../../libs/query/src/lib/infinite-query/infinity-query.utils.ts","../../../../libs/query/src/lib/directives/infinity-query.directive.ts","../../../../libs/query/src/lib/directives/infinity-query-trigger.directive.ts","../../../../libs/query/src/lib/entity/entity-store.ts","../../../../libs/query/src/lib/entity/entity.utils.ts","../../../../libs/query/src/lib/query-creator/query-creator.ts","../../../../libs/query/src/lib/query-store/query-store.ts","../../../../libs/query/src/lib/query-client/query-client.ts","../../../../libs/query/src/lib/query-client/query-client.utils.ts","../../../../libs/query/src/lib/query-form/query-form.ts","../../../../libs/query/src/lib/query-form/query-form.utils.ts","../../../../libs/query/src/lib/utils/deep-freeze.util.ts","../../../../libs/query/src/lib/utils/def.util.ts","../../../../libs/query/src/ethlete-query.ts"],"sourcesContent":["import { AuthProvider, AuthProviderCustomHeaderConfig } from './auth-provider.types';\n\nexport class CustomHeaderAuthProvider implements AuthProvider {\n get header() {\n return { [this._config.name]: this._config.value };\n }\n\n constructor(private _config: AuthProviderCustomHeaderConfig) {}\n\n cleanUp(): void {\n // noop\n }\n}\n","import { AuthProvider, AuthProviderBasicConfig } from './auth-provider.types';\n\nexport class BasicAuthProvider implements AuthProvider {\n get header() {\n return { Authorization: `Basic ${this._basicAuthString}` };\n }\n\n private get _basicAuthString() {\n return btoa(`${this._config.username}:${this._config.password}`);\n }\n\n constructor(private _config: AuthProviderBasicConfig) {}\n\n cleanUp(): void {\n // noop\n }\n}\n","export const buildErrorMessage = (code: string, message: string) => `[@ethlete\\\\query:${code}] ${message}`;\n\nexport class QueryError extends Error {\n data?: unknown;\n\n constructor(code: string, message: string, data?: unknown) {\n super(buildErrorMessage(code, message));\n this.name = 'QueryError';\n this.data = data;\n }\n}\n\nexport const invalidBaseRouteError = (data: unknown) =>\n new QueryError('001', 'The baseRoute must not end with a slash', data);\n\nexport const invalidRouteError = (data: unknown) => new QueryError('002', 'The route must start with a slash', data);\n\nexport const pathParamsMissingInRouteFunctionError = (data: unknown) =>\n new QueryError('003', 'The route is a function but pathParams are missing', data);\n\nexport const queryStateAlreadyHasKeyError = (data: unknown) =>\n new QueryError('004', 'The query state already contains the provided key', data);\n\nexport const queryStateDoesNotContainKeyError = (data: unknown) =>\n new QueryError('005', 'The query state does not contain the provided key', data);\n\nexport const queryStateCannotTransformError = (data: unknown) =>\n new QueryError('006', 'The query state cannot be transformed because it is not loading', data);\n\nexport const invalidBodyError = (data: unknown) => new QueryError('007', 'The body is not valid or upsupported', data);\n","import { SymfonyError } from './symfony.types';\n\nexport const isSymfonyError = (error: unknown): error is SymfonyError => {\n if (!error || typeof error !== 'object') {\n return false;\n }\n\n const symfonyError = error as SymfonyError;\n\n return (\n symfonyError.class !== undefined &&\n symfonyError.detail !== undefined &&\n symfonyError.status !== undefined &&\n symfonyError.title !== undefined &&\n symfonyError.trace !== undefined &&\n symfonyError.type !== undefined\n );\n};\n\nexport const isSymfonyPagerfantaOutOfRangeError = (error: unknown): error is SymfonyError => {\n if (!isSymfonyError(error)) {\n return false;\n }\n\n return error.class.startsWith('Pagerfanta') && error.class.endsWith('OutOfRangeCurrentPageException');\n};\n","import { invalidBaseRouteError, invalidRouteError, pathParamsMissingInRouteFunctionError } from '../logger';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../symfony';\nimport {\n BuildQueryStringConfig,\n Method,\n QueryParams,\n RequestError,\n RequestHeaders,\n RequestRetryFn,\n} from './request.types';\n\nexport const isRequestError = <T = unknown>(error: unknown): error is RequestError<T> =>\n error instanceof Object && 'status' in error && 'statusText' in error && 'url' in error;\n\nexport const buildRoute = (options: {\n base: string;\n route: ((args: Record<string, unknown>) => string) | string | null | undefined;\n pathParams?: Record<string, unknown>;\n queryParams?: QueryParams;\n queryParamConfig?: BuildQueryStringConfig;\n}) => {\n if (options.base.endsWith('/')) {\n throw invalidBaseRouteError(options.base);\n }\n\n let route: string | null = null;\n\n if (typeof options.route === 'function') {\n if (!options.pathParams) {\n throw pathParamsMissingInRouteFunctionError(options.route({}));\n }\n\n route = options.route(options.pathParams);\n } else {\n route = options.route ?? null;\n }\n\n if (route && !route.startsWith('/')) {\n throw invalidRouteError(route);\n }\n\n if (options.queryParams) {\n const queryString = buildQueryString(options.queryParams, options.queryParamConfig);\n\n if (queryString) {\n route = route ? `${route}?${queryString}` : `/?${queryString}`;\n }\n }\n\n return `${options.base}${route ?? ''}`;\n};\n\nexport const buildQueryString = (params: QueryParams, config?: BuildQueryStringConfig): string | null => {\n const objectNotation = config?.objectNotation ?? 'bracket';\n const writeArrayIndexes = config?.writeArrayIndexes ?? false;\n\n const queryParams: string[] = [];\n\n function processValue(key: string, value: unknown) {\n if (Array.isArray(value)) {\n for (const [index, arrayValue] of value.entries()) {\n const nestedKey = writeArrayIndexes ? `${key}[${index}]` : `${key}[]`;\n\n processValue(nestedKey, arrayValue);\n }\n } else if (typeof value === 'object' && value !== null) {\n for (const [objKey, val] of Object.entries(value)) {\n const nestedKey = objectNotation === 'dot' ? `${key}.${objKey}` : `${key}[${objKey}]`;\n processValue(nestedKey, val);\n }\n } else {\n const encodedKey = encodeURIComponent(key);\n const encodedValue = encodeURIComponent(value as string);\n queryParams.push(`${encodedKey}=${encodedValue}`);\n }\n }\n\n for (const [key, val] of Object.entries(params)) {\n processValue(key, val);\n }\n\n return queryParams.length ? queryParams.join('&') : null;\n};\n\nexport const extractExpiresInSeconds = (headers: RequestHeaders) => {\n const cacheControl = headers['cache-control'];\n const age = headers['age'];\n const expires = headers['expires'];\n\n // In seconds\n let expiresIn: number | null = null;\n let maxAge: number | null = null;\n\n if (cacheControl?.includes('no-cache')) {\n return null;\n }\n\n if (cacheControl?.includes('max-age')) {\n maxAge = parseInt(cacheControl.split('max-age=')[1]);\n } else if (cacheControl?.includes('s-maxage')) {\n maxAge = parseInt(cacheControl.split('s-maxage=')[1]);\n }\n\n if (maxAge && age) {\n const ageSeconds = parseInt(age);\n\n expiresIn = maxAge - ageSeconds;\n } else if (maxAge) {\n expiresIn = maxAge / 2; // We assume the response is half way to its expiration\n } else if (expires) {\n // Used by some apis to tell the response will never expire\n // In this case we let the response expire after 1 hour\n if (expires === '-1') {\n expiresIn = 3600;\n } else {\n const expiresDate = new Date(expires);\n\n // check if the date is valid\n if (expiresDate.toString() !== 'Invalid Date') {\n expiresIn = Math.floor((expiresDate.getTime() - Date.now()) / 1000);\n }\n }\n }\n\n return expiresIn;\n};\n\nexport const buildTimestampFromSeconds = (seconds: number | null) => {\n if (seconds === null) {\n return null;\n }\n\n return new Date(Date.now() + seconds * 1000).getTime();\n};\n\nexport const serializeBody = (body: unknown): ArrayBuffer | URLSearchParams | Blob | FormData | string | null => {\n if (body === null || body === undefined) {\n return null;\n }\n\n if (\n body instanceof ArrayBuffer ||\n body instanceof Blob ||\n body instanceof FormData ||\n body instanceof URLSearchParams ||\n typeof body === 'string'\n ) {\n return body;\n }\n\n if (typeof body === 'object' || typeof body === 'boolean' || Array.isArray(body)) {\n return JSON.stringify(body);\n }\n\n return (body as any).toString();\n};\n\nexport const transformMethod = (config: { method: Method; transferVia?: 'GET' | 'POST' }) => {\n if (config.method === 'GQL_QUERY' || config.method === 'GQL_MUTATE') {\n if (!config.transferVia) {\n return 'POST';\n }\n\n return config.transferVia;\n }\n\n return config.method;\n};\n\nexport const detectContentTypeHeader = (body: unknown) => {\n // An empty body has no content type.\n if (body === null) {\n return null;\n }\n // FormData bodies rely on the browser's content type assignment.\n if (body instanceof FormData) {\n return null;\n }\n // Blobs usually have their own content type. If it doesn't, then\n // no type can be inferred.\n if (body instanceof Blob) {\n return body.type || null;\n }\n // Array buffers have unknown contents and thus no type can be inferred.\n if (body instanceof ArrayBuffer) {\n return null;\n }\n // Technically, strings could be a form of JSON data, but it's safe enough\n // to assume they're plain strings.\n if (typeof body === 'string') {\n return 'text/plain';\n }\n\n // Arrays, objects, boolean and numbers will be encoded as JSON.\n if (typeof body === 'object' || typeof body === 'number' || typeof body === 'boolean') {\n return 'application/json';\n }\n // No type could be inferred.\n return null;\n};\n\nexport const hasHeader = (headers: RequestHeaders, header: string) => {\n return Object.keys(headers).some((key) => key.toLowerCase() === header.toLowerCase());\n};\n\nexport const forEachHeader = (headers: RequestHeaders, callback: (value: string, key: string) => void) => {\n Object.entries(headers).forEach(([key, value]) => {\n callback(key, value);\n });\n};\n\nexport const parseAllXhrResponseHeaders = (xhr: XMLHttpRequest) => {\n const headers = xhr.getAllResponseHeaders();\n const parsedHeaders: RequestHeaders = {};\n\n for (const line of headers.split('\\n')) {\n const index = line.indexOf(':');\n if (index > 0) {\n const name = line.slice(0, index);\n const key = name.toLowerCase();\n const value = line.slice(index + 1).trim();\n\n parsedHeaders[key] = value;\n }\n }\n\n return parsedHeaders;\n};\n\nexport const getResponseUrl = (xhr: XMLHttpRequest): string | null => {\n if ('responseURL' in xhr && xhr.responseURL) {\n return xhr.responseURL;\n }\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL');\n }\n return null;\n};\n\nexport const shouldRetryRequest: RequestRetryFn = (config) => {\n const defaultRetryDelay = 1000 + 1000 * config.currentRetryCount;\n\n if (config.currentRetryCount > 3) {\n return { retry: false };\n }\n\n if (!isRequestError(config.error)) {\n return { retry: false };\n }\n\n const { status, detail } = config.error;\n\n // Retry on 5xx errors\n if (status >= 500) {\n // Don't retry if a requested page is out of range\n if (isSymfonyPagerfantaOutOfRangeError(detail)) {\n return { retry: false };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 408 or 425 errors\n if (status === HttpStatusCode.RequestTimeout || status === HttpStatusCode.TooEarly) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 429 errors\n if (status === HttpStatusCode.TooManyRequests) {\n const retryAfter =\n config.headers['retry-after'] ||\n config.headers['Retry-After'] ||\n config.headers['x-retry-after'] ||\n config.headers['X-Retry-After'];\n\n if (retryAfter) {\n const delay = parseInt(retryAfter) * 1000;\n return { retry: true, delay: Number.isNaN(delay) ? defaultRetryDelay : delay };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n return { retry: false };\n};\n\nexport const enum HttpStatusCode {\n Unknown = 0,\n\n Continue = 100,\n SwitchingProtocols = 101,\n Processing = 102,\n EarlyHints = 103,\n\n Ok = 200,\n Created = 201,\n Accepted = 202,\n NonAuthoritativeInformation = 203,\n NoContent = 204,\n ResetContent = 205,\n PartialContent = 206,\n MultiStatus = 207,\n AlreadyReported = 208,\n ImUsed = 226,\n\n MultipleChoices = 300,\n MovedPermanently = 301,\n Found = 302,\n SeeOther = 303,\n NotModified = 304,\n UseProxy = 305,\n Unused = 306,\n TemporaryRedirect = 307,\n PermanentRedirect = 308,\n\n BadRequest = 400,\n Unauthorized = 401,\n PaymentRequired = 402,\n Forbidden = 403,\n NotFound = 404,\n MethodNotAllowed = 405,\n NotAcceptable = 406,\n ProxyAuthenticationRequired = 407,\n RequestTimeout = 408,\n Conflict = 409,\n Gone = 410,\n LengthRequired = 411,\n PreconditionFailed = 412,\n PayloadTooLarge = 413,\n UriTooLong = 414,\n UnsupportedMediaType = 415,\n RangeNotSatisfiable = 416,\n ExpectationFailed = 417,\n ImATeapot = 418,\n MisdirectedRequest = 421,\n UnprocessableEntity = 422,\n Locked = 423,\n FailedDependency = 424,\n TooEarly = 425,\n UpgradeRequired = 426,\n PreconditionRequired = 428,\n TooManyRequests = 429,\n RequestHeaderFieldsTooLarge = 431,\n UnavailableForLegalReasons = 451,\n\n InternalServerError = 500,\n NotImplemented = 501,\n BadGateway = 502,\n ServiceUnavailable = 503,\n GatewayTimeout = 504,\n HttpVersionNotSupported = 505,\n VariantAlsoNegotiates = 506,\n InsufficientStorage = 507,\n LoopDetected = 508,\n NotExtended = 510,\n NetworkAuthenticationRequired = 511,\n}\n","import { Observable, Observer } from 'rxjs';\nimport { PartialXhrState, RequestConfig, RequestError, RequestEvent } from './request.types';\nimport {\n HttpStatusCode,\n buildTimestampFromSeconds,\n detectContentTypeHeader,\n extractExpiresInSeconds,\n forEachHeader,\n getResponseUrl,\n hasHeader,\n parseAllXhrResponseHeaders,\n serializeBody,\n shouldRetryRequest,\n} from './request.util';\n\nconst XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n\nexport const request = <Response = unknown>(config: RequestConfig): Observable<RequestEvent<Response>> => {\n const headers = config.headers || {};\n const responseType = config.responseType || 'json';\n const body = config.body || null;\n const url = config.urlWithParams.split('?')[0];\n const retryFn = config.retryFn || shouldRetryRequest;\n let currentRetryCount = 0;\n let retryTimeout: number | null = null;\n\n return new Observable((observer: Observer<RequestEvent<Response>>) => {\n const xhr = new XMLHttpRequest();\n const reqBody = serializeBody(body);\n\n const setupXhr = () => {\n xhr.open(config.method, config.urlWithParams);\n if (config.withCredentials) {\n xhr.withCredentials = true;\n }\n\n forEachHeader(headers, (name, value) => xhr.setRequestHeader(name, value));\n\n if (!hasHeader(headers, 'Accept')) {\n xhr.setRequestHeader('Accept', 'application/json, text/plain, */*');\n }\n\n if (!hasHeader(headers, 'Content-Type')) {\n const detectedType = detectContentTypeHeader(body);\n\n if (detectedType) {\n xhr.setRequestHeader('Content-Type', detectedType);\n }\n }\n\n xhr.responseType = responseType !== 'json' ? responseType : 'text';\n };\n\n setupXhr();\n\n const partialFromXhr = (): PartialXhrState => {\n const statusText = xhr.statusText || 'OK';\n const headers = parseAllXhrResponseHeaders(xhr);\n const _url = getResponseUrl(xhr) || url;\n\n return { headers, status: xhr.status, statusText, url: _url };\n };\n\n const handleRetry = (error: RequestError) => {\n const newRetryCount = currentRetryCount + 1;\n const { headers } = partialFromXhr();\n const { retry, delay } = retryFn({ currentRetryCount: newRetryCount, headers, error });\n\n if (!retry) {\n observer.next({ type: 'failure', headers, error });\n observer.complete();\n return;\n }\n\n const _delay = delay ?? 1000;\n observer.next({ type: 'delay-retry', headers, retryNumber: newRetryCount, retryDelay: _delay });\n\n retryTimeout = window.setTimeout(() => {\n setupXhr();\n xhr.send(reqBody);\n currentRetryCount = newRetryCount;\n observer.next({ type: 'start', headers, isRetry: true, retryNumber: currentRetryCount, retryDelay: _delay });\n }, _delay);\n };\n\n const onLoad = () => {\n const { headers, statusText, url } = partialFromXhr();\n\n let { status } = partialFromXhr();\n\n let body: unknown | null = null;\n\n if (status !== HttpStatusCode.NoContent) {\n body = typeof xhr.response === 'undefined' ? xhr.responseText : xhr.response;\n }\n\n if (status === 0) {\n status = body ? HttpStatusCode.Ok : 0;\n }\n\n let ok = status >= 200 && status < 300;\n\n if (responseType === 'json' && typeof body === 'string') {\n const originalBody = body;\n body = body.replace(XSSI_PREFIX, '');\n try {\n body = body !== '' ? JSON.parse(body as string) : null;\n } catch (error) {\n body = originalBody;\n\n if (ok) {\n ok = false;\n body = { error, text: body };\n }\n }\n }\n\n if (ok) {\n const successEvent: RequestEvent<Response> = {\n type: 'success',\n headers,\n response: body as Response,\n };\n\n const expiresInSeconds = config.cacheAdapter?.(headers) ?? extractExpiresInSeconds(headers);\n const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);\n\n if (expiresInTimestamp) {\n successEvent.expiresInTimestamp = expiresInTimestamp;\n }\n\n observer.next(successEvent);\n\n observer.complete();\n } else {\n handleRetry({\n url,\n detail: body,\n status,\n statusText,\n });\n }\n };\n\n const onError = (error: Event) => {\n const { url } = partialFromXhr();\n\n handleRetry({\n url,\n detail: error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n });\n };\n\n const onDownProgress = (event: ProgressEvent) => {\n const { headers } = partialFromXhr();\n\n const progress: RequestEvent = {\n type: 'download-progress',\n headers,\n progress: {\n current: event.loaded,\n },\n };\n\n if (event.lengthComputable) {\n const progressPercent = (event.loaded / event.total) * 100;\n progress.progress.percentage = Math.round(progressPercent * 100) / 100;\n progress.progress.total = event.total;\n }\n\n if (responseType === 'text' && !!xhr.responseText) {\n progress.partialText = xhr.responseText;\n }\n\n observer.next(progress);\n };\n\n const onUpProgress = (event: ProgressEvent) => {\n const { headers } = partialFromXhr();\n\n const progress: RequestEvent = {\n type: 'upload-progress',\n headers,\n progress: {\n current: event.loaded,\n },\n };\n\n if (event.lengthComputable) {\n const progressPercent = (event.loaded / event.total) * 100;\n progress.progress.percentage = Math.round(progressPercent * 100) / 100;\n progress.progress.total = event.total;\n }\n\n observer.next(progress);\n };\n\n xhr.addEventListener('load', onLoad);\n xhr.addEventListener('error', onError);\n xhr.addEventListener('timeout', onError);\n xhr.addEventListener('abort', onError);\n\n if (config.reportProgress) {\n xhr.addEventListener('progress', onDownProgress);\n\n if (reqBody !== null && xhr.upload) {\n xhr.upload.addEventListener('progress', onUpProgress);\n }\n }\n\n xhr.send(reqBody);\n observer.next({ type: 'start', headers });\n\n return () => {\n xhr.removeEventListener('error', onError);\n xhr.removeEventListener('abort', onError);\n xhr.removeEventListener('load', onLoad);\n xhr.removeEventListener('timeout', onError);\n\n if (retryTimeout) {\n window.clearTimeout(retryTimeout);\n }\n\n if (config.reportProgress) {\n xhr.removeEventListener('progress', onDownProgress);\n\n if (reqBody !== null && xhr.upload) {\n xhr.upload.removeEventListener('progress', onUpProgress);\n }\n }\n\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n\n observer.next({ type: 'cancel', headers });\n };\n });\n};\n","const getOpName = /(query|mutation) ?([\\w\\d-_]+)? ?\\(.*?\\)? \\{/;\n\nexport const transformGql = (str: string) => {\n str = Array.isArray(str) ? str.join('') : str;\n const name = getOpName.exec(str);\n return function (variables: Record<string, unknown> | null | undefined) {\n const data: Record<string, unknown> = { query: str };\n if (variables) data['variables'] = JSON.stringify(variables);\n if (name && name.length) {\n const operationName = name[2];\n if (operationName) data['operationName'] = name[2];\n }\n return data as { query: string; variables?: string; operationName?: string };\n };\n};\n\nexport const gql = (strings: TemplateStringsArray, ...values: string[]) => {\n const str = strings.reduce((acc, cur, i) => {\n return acc + cur + (values[i] || '');\n }, '');\n return str;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isDevMode } from '@angular/core';\nimport { Paginated } from '@ethlete/types';\nimport { BehaviorSubject, filter, Observable, of, switchMap, takeWhile, tap } from 'rxjs';\nimport { EntityStore } from '../entity';\nimport { transformGql } from '../gql';\nimport { QueryClient } from '../query-client';\nimport {\n AnyQueryCreator,\n QueryArgsOf,\n QueryCreator,\n QueryDataOf,\n QueryResponseOf,\n QueryStoreIdOf,\n QueryStoreOf,\n} from '../query-creator';\nimport { QueryForm } from '../query-form';\nimport { HttpStatusCode, Method, RequestHeaders, RequestHeadersMethodMap, transformMethod } from '../request';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../symfony';\nimport {\n AnyGqlQueryConfig,\n AnyQuery,\n AnyQueryCollection,\n AnyQueryCollectionData,\n AnyQueryCreatorCollection,\n AnyRestQueryConfig,\n BaseArguments,\n Cancelled,\n Failure,\n GqlQueryConfig,\n Loading,\n Prepared,\n QueryCollectionOf,\n QueryState,\n QueryStateResponseOf,\n QueryStateType,\n ResetPageOnErrorOperatorConfig,\n RouteType,\n Success,\n} from './query.types';\n\ntype OmitNull<T> = T extends null ? never : T;\n\nexport function filterSuccess() {\n return function <T extends QueryState | null, Response extends QueryStateResponseOf<OmitNull<T>>>(\n source: Observable<T>,\n ) {\n return source.pipe(filter((value) => isQueryStateSuccess(value))) as Observable<Success<Response>>;\n };\n}\n\nexport function ignoreAutoRefresh() {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => !isAutoRefresh(value))) as Observable<T>;\n };\n}\n\nexport function filterFailure() {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => isQueryStateFailure(value))) as Observable<Failure>;\n };\n}\n\nexport function filterQueryStates(allowedStates: QueryStateType[]) {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => value && allowedStates.includes(value.type))) as Observable<T>;\n };\n}\n\nexport function takeUntilResponse(config?: { excludeNull?: boolean }) {\n return function <T extends QueryState | null>(source: Observable<T>) {\n return source.pipe(\n takeWhile((value) => {\n if (config?.excludeNull && value === null) {\n return false;\n }\n\n return isQueryStateLoading(value) || value === null;\n }, true),\n );\n };\n}\n\nexport function filterNull() {\n return function <T>(source: Observable<T>) {\n return source.pipe(filter((value): value is OmitNull<T> => value !== null));\n };\n}\n\nexport function switchQueryState() {\n return function <T extends AnyQuery | null, Data extends QueryDataOf<T>>(source: Observable<T>) {\n return source.pipe(switchMap((value) => value?.state$ ?? of(null))) as Observable<QueryState<Data> | null>;\n };\n}\n\nexport function switchQueryCollectionState() {\n return function <T extends AnyQueryCollection | null, Data extends AnyQueryCollectionData<OmitNull<T>>>(\n source: Observable<T>,\n ) {\n return source.pipe(switchMap((value) => value?.query.state$ ?? of(null))) as Observable<QueryState<Data> | null>;\n };\n}\n\nexport const resetPageOnError =\n <T extends AnyQuery | null | undefined, J extends QueryForm<any>>(config: ResetPageOnErrorOperatorConfig<J>) =>\n (source: Observable<T>) => {\n const { queryForm, pageControlKey = 'page' } = config;\n\n if (isDevMode() && !queryForm.form.controls[pageControlKey]) {\n console.warn(`resetPageOnError: queryForm.form.controls[\"${pageControlKey}\"] is undefined`);\n }\n\n return source.pipe(\n switchMap((q) => {\n if (!q) {\n return of(q);\n }\n\n return q.state$.pipe(\n tap((state) => {\n if (!isQueryStateFailure(state)) {\n return;\n }\n\n switch (state.error.status) {\n // The page is invalid (in prod mode, code is 416)\n case HttpStatusCode.RangeNotSatisfiable:\n queryForm.form.controls[pageControlKey]?.patchValue(1);\n break;\n\n // The page might be invalid (in dev mode, code is 500)\n case HttpStatusCode.InternalServerError:\n if (isSymfonyPagerfantaOutOfRangeError(state.error.detail)) {\n queryForm.form.controls[pageControlKey].patchValue(1);\n }\n break;\n }\n }),\n takeUntilResponse(),\n );\n }),\n );\n };\n\nexport const isQueryStateLoading = (state: QueryState | null | undefined): state is Loading =>\n state?.type === QueryStateType.Loading;\n\nexport const isQueryStateSuccess = (state: QueryState | null | undefined): state is Success =>\n state?.type === QueryStateType.Success;\n\nexport const isQueryStateFailure = (state: QueryState | null | undefined): state is Failure =>\n state?.type === QueryStateType.Failure;\n\nexport const isQueryStateCancelled = (state: QueryState | null | undefined): state is Cancelled =>\n state?.type === QueryStateType.Cancelled;\n\nexport const isQueryStatePrepared = (state: QueryState | null | undefined): state is Prepared =>\n state?.type === QueryStateType.Prepared;\n\nexport const isAutoRefresh = (state: QueryState | null | undefined): boolean => state?.meta.triggeredVia === 'auto';\n\nexport const mergeHeaders = (...headers: Array<RequestHeaders | null | undefined>) => {\n return headers.reduce((acc, headers) => {\n if (!headers) {\n return acc;\n }\n\n return {\n ...acc,\n ...headers,\n };\n }, {});\n};\n\nexport const isGqlQueryConfig = <\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends RouteType<Arguments> | undefined,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n>(\n config: unknown,\n): config is GqlQueryConfig<Route, Response, Arguments, Store, Data, Id> => {\n if (!config || typeof config !== 'object' || Array.isArray(config)) {\n return false;\n }\n\n if (!('query' in config)) {\n return false;\n }\n\n return true;\n};\n\nexport const isQuery = <T extends AnyQuery>(query: unknown): query is T => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n\n if (!('state$' in query)) {\n return false;\n }\n\n return true;\n};\n\nexport const createQueryCollection = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n) => new BehaviorSubject<R | null>(null);\n\nexport const extractQuery = <T extends AnyQuery | AnyQueryCollection | null>(v: T) =>\n (isQuery(v) ? v : v?.query) ?? null;\n\nexport const getDefaultHeaders = (\n headers: RequestHeaders | RequestHeadersMethodMap | null | undefined,\n method: Method,\n) => {\n if (!headers) {\n return {};\n }\n\n if (method in headers) {\n return (headers[method] ?? {}) as RequestHeaders;\n }\n\n return headers as RequestHeaders;\n};\n\nexport const castQueryCreatorTypes = <\n QC extends AnyQueryCreator,\n Arguments extends QueryArgsOf<QC>,\n Response extends QueryResponseOf<QC>,\n Store extends QueryStoreOf<QC>,\n Data extends QueryDataOf<QC>,\n Route extends RouteType<Arguments>,\n Id extends QueryStoreIdOf<QC>,\n OverrideArguments extends BaseArguments | undefined,\n OverrideResponse extends Response | undefined,\n>(config: {\n creator: QC;\n args?: OverrideArguments;\n response?: OverrideResponse;\n}) => {\n if (config.args?.pathParams) {\n console.error(config);\n\n throw new Error('Path params cannot be overridden in castQueryCreatorTypes. Create a new query creator instead.');\n }\n\n return config.creator as unknown as QueryCreator<OverrideArguments, OverrideResponse, Route, Store, Data, Id>;\n};\n\nexport const computeQueryMethod = (config: { config: AnyRestQueryConfig | AnyGqlQueryConfig; client: QueryClient }) => {\n let method: Method;\n\n if (isGqlQueryConfig(config.config)) {\n const transferVia = config.config.transferVia ?? config.client.config.request?.gql?.transferVia;\n method = transformMethod({ method: config.config.method, transferVia });\n } else {\n method = transformMethod({ method: config.config.method });\n }\n\n return method;\n};\n\nexport const computeQueryBody = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n method: Method;\n args?: BaseArguments;\n}) => {\n let body: unknown;\n\n if (\n config.method === 'GET' ||\n config.method === 'HEAD' ||\n config.method === 'OPTIONS' ||\n (isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia)))\n ) {\n return undefined;\n }\n\n if (isGqlQueryConfig(config.config)) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n\n body = query(config.args?.variables);\n } else {\n body = config.args?.body;\n }\n\n return body;\n};\n\nexport const computeQueryAuthHeader = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n}) => {\n let authHeader: Record<string, string> | null = null;\n\n if (config.config.secure) {\n const header = config.client.authProvider?.header;\n\n if (header) {\n authHeader = header;\n }\n } else if (config.client.authProvider?.header) {\n if (config.config.secure === undefined || config.config.secure) {\n authHeader = config.client.authProvider.header;\n }\n }\n\n return authHeader;\n};\n\nexport const computeQueryHeaders = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n args?: BaseArguments;\n}) => {\n const authHeader = computeQueryAuthHeader(config);\n\n const mergedHeaders =\n mergeHeaders(\n getDefaultHeaders(config.client.config.request?.headers, config.config.method),\n authHeader,\n config.args?.headers,\n ) || undefined;\n\n return mergedHeaders;\n};\n\nexport const computeQueryQueryParams = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: QueryClient;\n args?: BaseArguments;\n}) => {\n if (\n isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia))\n ) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n\n let params = query(config.args?.variables);\n\n if (config.args?.queryParams) {\n params = { ...params, ...config.args?.queryParams };\n }\n\n return params;\n }\n\n return config.args?.queryParams;\n};\n\nexport const paginatedEntityValueUpdater =\n <\n T extends Paginated<unknown>,\n Args extends BaseArguments,\n Entity,\n J extends T extends Paginated<infer X> ? X : never,\n >(\n findFn: (val: J, entity: Entity) => boolean,\n ) =>\n ({ response, rawResponse, entity }: { rawResponse: T; response: T; args: Args; entity: Entity }) => {\n const indexOfEntityRaw = rawResponse.items.findIndex((item) => findFn(item as J, entity));\n const indexOfEntity = response.items.findIndex((item) => findFn(item as J, entity));\n\n if (indexOfEntity === -1 || indexOfEntityRaw === -1) {\n return null;\n }\n\n const newRawResponse = {\n ...rawResponse,\n items: [\n ...rawResponse.items.slice(0, indexOfEntityRaw),\n entity,\n ...rawResponse.items.slice(indexOfEntityRaw + 1),\n ],\n };\n\n const newResponse = {\n ...response,\n items: [...response.items.slice(0, indexOfEntity), entity, ...response.items.slice(indexOfEntity + 1)],\n };\n\n return {\n response: newResponse,\n rawResponse: newRawResponse,\n };\n };\n","import { BehaviorSubjectWithSubscriberCount } from '@ethlete/core';\nimport {\n filter,\n interval,\n map,\n Observable,\n of,\n shareReplay,\n skip,\n Subject,\n Subscription,\n switchMap,\n takeUntil,\n takeWhile,\n tap,\n} from 'rxjs';\nimport { isBearerAuthProvider } from '../auth';\nimport { EntityStore } from '../entity';\nimport { QueryClient } from '../query-client';\nimport { HttpStatusCode, request, RequestEvent } from '../request';\nimport {\n BaseArguments,\n ExecuteQueryOptions,\n GqlQueryConfig,\n PollConfig,\n QueryAutoRefreshConfig,\n QueryState,\n QueryStateMeta,\n QueryStateType,\n RestQueryConfig,\n RouteType,\n} from './query.types';\nimport {\n computeQueryBody,\n computeQueryHeaders,\n computeQueryMethod,\n isGqlQueryConfig,\n isQueryStateLoading,\n isQueryStateSuccess,\n takeUntilResponse,\n} from './query.utils';\n\nexport class Query<\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> {\n private _currentId = 0;\n private _pollingSubscription: Subscription | null = null;\n private _requestSubscription: Subscription | null = null;\n private _onAbort$ = new Subject<void>();\n private _currentPollConfig: PollConfig | null = null;\n\n /**\n * @internal\n */\n _isPollingPaused = false;\n\n private readonly _state$ = new BehaviorSubjectWithSubscriberCount<QueryState<Response>>({\n type: QueryStateType.Prepared,\n meta: { id: this._currentId, triggeredVia: 'program' },\n });\n\n private get _nextId() {\n return ++this._currentId;\n }\n\n get state$(): Observable<QueryState<Data>> {\n return this._state$.pipe(\n switchMap((s) => this._transformState(s)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n /**\n * The current state of the query.\n *\n * **Warning!** This differs from the `state$` observable in that it does not use the query store. Thus, the response data might be outdated.\n * Use `state$` (or `firstValueFrom(state$)`) the most up-to-date data.\n */\n get rawState() {\n return this._state$.value;\n }\n\n get isExpired() {\n if (!isQueryStateSuccess(this._state$.value)) {\n return false;\n }\n\n const ts = this._state$.value.meta.expiresAt;\n\n if (!ts) {\n return true;\n }\n\n return ts < Date.now();\n }\n\n get isInUse() {\n return this._state$.subscriberCount > 0;\n }\n\n get isPolling() {\n return !!this._pollingSubscription;\n }\n\n get autoRefreshOnConfig() {\n const base = this._queryConfig.autoRefreshOn ?? {};\n\n const transformed: Readonly<QueryAutoRefreshConfig> = {\n queryClientDefaultHeadersChange: base.queryClientDefaultHeadersChange ?? true,\n windowFocus: base.windowFocus ?? true,\n };\n\n return transformed;\n }\n\n /**\n * @internal\n */\n get _enableSmartPolling() {\n return this._queryConfig.enableSmartPolling ?? true;\n }\n\n /**\n * @internal\n */\n get _arguments() {\n return this._args;\n }\n\n get store() {\n return this._queryConfig.entity?.store ?? null;\n }\n\n constructor(\n private _client: QueryClient,\n private _queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n private _routeWithParams: Route,\n private _args: Arguments,\n ) {}\n\n execute(options: ExecuteQueryOptions = {}) {\n const { skipCache = false, _triggeredVia: triggeredVia = 'program' } = options;\n const { authProvider } = this._client;\n const queryConfig = this._queryConfig;\n\n if (!this.isExpired && !skipCache && isQueryStateSuccess(this.rawState)) {\n return this;\n }\n\n if (queryConfig.secure && !authProvider) {\n throw new Error('Cannot execute secure query without auth provider');\n }\n\n const id = this._nextId;\n const meta: QueryStateMeta = { id, triggeredVia };\n\n if (isQueryStateLoading(this.rawState)) {\n this.abort();\n }\n\n this._state$.next({ type: QueryStateType.Loading, meta });\n\n const method = computeQueryMethod({ config: queryConfig, client: this._client });\n const body = computeQueryBody({ config: queryConfig, client: this._client, args: this._args, method });\n const headers = computeQueryHeaders({ client: this._client, config: queryConfig, args: this._args });\n\n this._requestSubscription = request<Response>({\n urlWithParams: this._routeWithParams,\n method,\n body,\n headers,\n reportProgress: queryConfig.reportProgress,\n responseType: queryConfig.responseType,\n withCredentials: queryConfig.withCredentials,\n cacheAdapter: this._client.config.request?.cacheAdapter,\n retryFn: this._client.config.request?.retryFn,\n })\n .pipe(\n takeUntil(this._onAbort$),\n tap((state) => this._updateEntityState(state, meta, options)),\n )\n .subscribe();\n\n return this;\n }\n\n abort() {\n this._onAbort$.next();\n\n return this;\n }\n\n poll(config: PollConfig) {\n if (this._pollingSubscription) {\n return this;\n }\n\n this._currentPollConfig = config;\n\n const interval$ = interval(config.interval);\n const poll$ = interval$.pipe(\n skip(config.triggerImmediately ? 0 : 1),\n takeUntil(config.takeUntil),\n takeWhile(() => !this._isPollingPaused),\n filter(() => !isQueryStateLoading(this._state$.value)),\n );\n\n this._pollingSubscription = poll$.subscribe({\n next: () => this.execute({ skipCache: true, _triggeredVia: 'poll' }),\n complete: () => this.stopPolling(),\n });\n\n return this;\n }\n\n stopPolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._currentPollConfig = null;\n\n return this;\n }\n\n pausePolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n\n this._isPollingPaused = true;\n\n return this;\n }\n\n resumePolling() {\n if (!this._isPollingPaused || !this._currentPollConfig) {\n return this;\n }\n\n this._isPollingPaused = false;\n\n return this.poll({ ...this._currentPollConfig, triggerImmediately: true });\n }\n\n /**\n * @internal\n */\n _destroy() {\n this._state$.complete();\n this._onAbort$.complete();\n this._pollingSubscription?.unsubscribe();\n this._requestSubscription?.unsubscribe();\n }\n\n private _getBearerAuthProvider() {\n const authProvider = this._client.authProvider;\n\n if (authProvider && isBearerAuthProvider(authProvider)) {\n return authProvider;\n }\n\n return null;\n }\n\n private _updateEntityState(\n requestEvent: RequestEvent<Response>,\n meta: QueryStateMeta,\n options?: ExecuteQueryOptions,\n ) {\n switch (requestEvent.type) {\n case 'start':\n case 'delay-retry': {\n const { type, retryDelay, retryNumber } = requestEvent;\n const newMeta: QueryStateMeta = { ...meta, isWaitingForRetry: type === 'delay-retry', retryDelay, retryNumber };\n\n this._state$.next({\n type: QueryStateType.Loading,\n meta: newMeta,\n });\n break;\n }\n\n case 'upload-progress':\n case 'download-progress': {\n this._state$.next({\n type: QueryStateType.Loading,\n progress: requestEvent.progress,\n partialText: 'partialText' in requestEvent ? requestEvent.partialText : undefined,\n meta,\n });\n\n break;\n }\n\n case 'success': {\n const { response, expiresInTimestamp } = requestEvent;\n const isGql = isGqlQueryConfig(this._queryConfig);\n const responseData =\n isGql && typeof response === 'object' && !!response && 'data' in response\n ? (response['data'] as Response)\n : (response as Response);\n\n if (this._queryConfig.entity && this._queryConfig.entity.set) {\n const id = this._queryConfig.entity?.id({ args: this._args, response: responseData });\n\n this._queryConfig.entity?.set({\n args: this._args,\n response: responseData,\n id,\n store: this._queryConfig.entity.store,\n });\n }\n\n this._state$.next({\n type: QueryStateType.Success,\n response: responseData,\n meta: { ...meta, expiresAt: expiresInTimestamp },\n });\n\n break;\n }\n\n case 'failure': {\n const { error } = requestEvent;\n const failure = () => this._state$.next({ type: QueryStateType.Failure, error, meta });\n const bearerAuthProvider = this._getBearerAuthProvider();\n\n if (\n !bearerAuthProvider ||\n options?._isUnauthorizedRetry ||\n error.status !== HttpStatusCode.Unauthorized ||\n !bearerAuthProvider.shouldRefreshOnUnauthorizedResponse\n ) {\n return failure();\n }\n\n const query = bearerAuthProvider._refreshQuery();\n if (!query) return failure();\n\n query.state$\n .pipe(\n takeUntilResponse(),\n takeUntil(this._onAbort$),\n tap((state) =>\n isQueryStateSuccess(state) ? this.execute({ ...options, _isUnauthorizedRetry: true }) : failure(),\n ),\n )\n .subscribe();\n\n break;\n }\n\n case 'cancel': {\n this._state$.next({\n type: QueryStateType.Cancelled,\n meta,\n });\n\n break;\n }\n }\n }\n\n private _transformState(s: QueryState<Response>): Observable<QueryState<Data>> {\n if (!isQueryStateSuccess(s) || !this._queryConfig.entity?.get) {\n return of(s) as Observable<QueryState<Data>>;\n }\n\n const id = this._queryConfig.entity.id({ args: this._args, response: s.response });\n\n return this._queryConfig.entity\n .get({ args: this._args, id, response: s.response, store: this._queryConfig.entity.store })\n .pipe(map((v) => ({ ...s, response: v })));\n }\n}\n","import { AnyQueryCreator } from '../query-creator';\nimport { AuthProvider } from './auth-provider.types';\nimport { BasicAuthProvider } from './basic-auth-provider';\nimport { BearerAuthProvider } from './bearer-auth-provider';\nimport { CustomHeaderAuthProvider } from './custom-header-auth-provider';\n\nexport const isBasicAuthProvider = (authProvider: AuthProvider): authProvider is BasicAuthProvider =>\n authProvider instanceof BasicAuthProvider;\n\nexport const isBearerAuthProvider = <T extends AnyQueryCreator>(\n authProvider: AuthProvider,\n): authProvider is BearerAuthProvider<T> => authProvider instanceof BearerAuthProvider;\n\nexport const isCustomHeaderAuthProvider = (authProvider: AuthProvider): authProvider is CustomHeaderAuthProvider =>\n authProvider instanceof CustomHeaderAuthProvider;\n\nexport const decryptBearer = <Result = Record<string, unknown>>(token: string) => {\n try {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n atob(base64)\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join(''),\n );\n\n return JSON.parse(jsonPayload) as Result;\n } catch (error) {\n console.error(`Invalid bearer token: ${token}`, error);\n\n return null;\n }\n};\n","import { deleteCookie, getCookie, setCookie } from '@ethlete/core';\nimport { BehaviorSubject, Subject, takeUntil, tap, timer } from 'rxjs';\nimport {\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n switchQueryState,\n takeUntilResponse,\n} from '../query';\nimport { AnyQueryCreator, ConstructQuery, QueryResponseOf } from '../query-creator';\nimport {\n AuthBearerRefreshStrategy,\n AuthProvider,\n AuthProviderBearerConfig,\n TokenResponse,\n} from './auth-provider.types';\nimport { decryptBearer } from './auth-provider.utils';\n\nexport class BearerAuthProvider<T extends AnyQueryCreator> implements AuthProvider {\n private readonly _destroy$ = new Subject<boolean>();\n private readonly _currentRefreshQuery$ = new BehaviorSubject<ConstructQuery<T> | null>(null);\n\n private readonly _tokens$ = new BehaviorSubject<TokenResponse>({\n token: null,\n refreshToken: null,\n });\n\n get header() {\n return { Authorization: `Bearer ${this._tokens$.getValue().token}` };\n }\n\n get tokens$() {\n return this._tokens$.asObservable();\n }\n\n get tokens() {\n return this._tokens$.getValue();\n }\n\n get currentRefreshQuery$() {\n return this._currentRefreshQuery$.asObservable();\n }\n\n get currentRefreshQuery() {\n return this._currentRefreshQuery$.getValue();\n }\n\n get shouldRefreshOnUnauthorizedResponse() {\n return (\n !!this._config.refreshConfig &&\n (this._config.refreshConfig.refreshOnUnauthorizedResponse === undefined ||\n this._config.refreshConfig.refreshOnUnauthorizedResponse)\n );\n }\n\n constructor(private _config: AuthProviderBearerConfig<T>) {\n const cookieEnabled = _config.refreshConfig?.cookieEnabled ?? true;\n const cookieToken =\n _config.refreshConfig?.cookieName && cookieEnabled ? getCookie(_config.refreshConfig.cookieName) ?? null : null;\n\n this._tokens$.next({\n token: _config.token || null,\n refreshToken: _config.refreshConfig?.token || cookieToken || null,\n });\n\n if (!this.tokens.token && !this.tokens.refreshToken) {\n if (!_config.refreshConfig?.cookieName) {\n console.error(\n 'A BearerAuthProvider was created without token or refresh token. You should provide at least a cookieName where the refresh token might be stored.',\n );\n }\n\n return;\n }\n\n if (this.tokens.token) {\n this._prepareForRefresh();\n\n if (this.tokens.refreshToken && this._config.refreshConfig?.cookieName && cookieEnabled) {\n setCookie(this._config.refreshConfig.cookieName, this.tokens.refreshToken);\n }\n } else if (this.tokens.refreshToken) {\n this._refreshQuery();\n }\n }\n\n cleanUp(): void {\n this._destroy$.next(true);\n this._destroy$.unsubscribe();\n this._currentRefreshQuery$.next(null);\n\n if (this._config.refreshConfig?.cookieName) {\n deleteCookie(this._config.refreshConfig.cookieName, '/');\n }\n }\n\n enableCookie() {\n if (!this._config.refreshConfig?.cookieName) {\n throw new Error('No cookie name was provided');\n }\n\n if (!this.tokens.refreshToken) {\n throw new Error('No refresh token was provided');\n }\n\n this._config.refreshConfig.cookieEnabled = true;\n\n setCookie(this._config.refreshConfig.cookieName, this.tokens.refreshToken);\n }\n\n disableCookie() {\n if (!this._config.refreshConfig?.cookieName) {\n throw new Error('No cookie name was provided');\n }\n\n this._config.refreshConfig.cookieEnabled = false;\n\n deleteCookie(this._config.refreshConfig.cookieName, '/');\n }\n\n private _prepareForRefresh() {\n if (!this.tokens.token || !this._config.refreshConfig) {\n return;\n }\n\n const bearer = decryptBearer(this.tokens.token);\n\n if (!bearer) {\n return;\n }\n\n const expiresInPropertyName = this._config.refreshConfig.expiresInPropertyName || 'exp';\n const expiresIn = bearer[expiresInPropertyName] as number | undefined;\n const fiveMinutes = 5 * 60 * 1000;\n const refreshBuffer = this._config.refreshConfig.refreshBuffer ?? fiveMinutes;\n\n if (expiresIn === undefined) {\n throw new Error(`Bearer token does not contain an '${expiresInPropertyName}' property`);\n }\n\n const remainingTime = new Date(expiresIn * 1000).getTime() - refreshBuffer - new Date().getTime();\n\n const strategy = this._config.refreshConfig.strategy ?? AuthBearerRefreshStrategy.BeforeExpiration;\n\n switch (strategy) {\n case AuthBearerRefreshStrategy.BeforeExpiration:\n timer(remainingTime)\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => this._refreshQuery());\n break;\n }\n }\n\n /**\n * @internal\n */\n _refreshQuery() {\n const currentQuery = this._currentRefreshQuery$.getValue();\n\n if (isQueryStateLoading(currentQuery?.rawState)) {\n return currentQuery;\n }\n\n const currentRefreshToken = this.tokens.refreshToken;\n\n if (!currentRefreshToken || !this._config.refreshConfig) {\n return;\n }\n\n const args = this._config.refreshConfig.requestArgsAdapter?.({\n token: this.tokens.token,\n refreshToken: currentRefreshToken,\n }) ?? {\n body: { refreshToken: currentRefreshToken },\n };\n\n const query = this._config.refreshConfig.queryCreator.prepare(args).execute({ skipCache: true });\n\n this._currentRefreshQuery$.next(query as ConstructQuery<T>);\n\n this._currentRefreshQuery$\n .pipe(\n switchQueryState(),\n tap((state) => {\n if (isQueryStateSuccess(state)) {\n if (this._config.refreshConfig?.responseAdapter) {\n const tokens = this._config.refreshConfig.responseAdapter(state.response as QueryResponseOf<T>);\n\n this._tokens$.next(tokens);\n } else {\n this._tokens$.next({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n token: (state.response as any)['token'],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n refreshToken: (state.response as any)['refreshToken'],\n });\n }\n const cookieEnabled = this._config.refreshConfig?.cookieEnabled ?? true;\n\n if (this._config.refreshConfig?.cookieName && this.tokens.refreshToken && cookieEnabled) {\n setCookie(this._config.refreshConfig.cookieName, this.tokens.refreshToken);\n }\n\n this._prepareForRefresh();\n } else if (isQueryStateFailure(state)) {\n this._tokens$.next({ token: null, refreshToken: null });\n\n if (this._config.refreshConfig?.cookieName) {\n deleteCookie(this._config.refreshConfig.cookieName, '/');\n }\n }\n }),\n takeUntilResponse(),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n return query;\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n inject,\n} from '@angular/core';\nimport { Subscription, tap } from 'rxjs';\nimport {\n AnyQuery,\n AnyQueryCollection,\n QueryOf,\n QueryState,\n isQuery,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n} from '../query';\nimport { QueryDataOf } from '../query-creator';\nimport { RequestError, RequestProgress } from '../request';\n\ninterface QueryContext<Q extends AnyQuery | null> {\n /**\n * The queries's response data.\n */\n $implicit: QueryDataOf<Q> | null;\n\n /**\n * The queries's response data.\n */\n etQuery: QueryDataOf<Q> | null;\n\n /**\n * Is true when the query is triggered by user interaction.\n */\n loading: boolean;\n\n /**\n * Is true when the query is triggered by either polling or auto refresh event.\n */\n refreshing: boolean;\n\n /**\n * The query's progress state.\n */\n progress: RequestProgress | null;\n\n /**\n * The query's error state.\n */\n error: RequestError<unknown> | null;\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[etQuery]',\n standalone: true,\n})\nexport class QueryDirective<Q extends AnyQuery | AnyQueryCollection | null> implements OnInit, OnDestroy {\n private _mainTemplateRef = inject<TemplateRef<QueryContext<QueryOf<Q>>>>(TemplateRef);\n private _viewContainerRef = inject(ViewContainerRef);\n private _errorHandler = inject(ErrorHandler);\n private _cdr = inject(ChangeDetectorRef);\n\n private _isMainViewCreated = false;\n private _subscription: Subscription | null = null;\n\n private readonly _viewContext: QueryContext<QueryOf<Q>> = {\n $implicit: null,\n etQuery: null,\n loading: false,\n refreshing: false,\n error: null,\n progress: null,\n };\n\n @Input('etQuery')\n get query(): Q {\n return this._query;\n }\n set query(v: Q) {\n this._query = v;\n\n this._subscribeToQuery();\n }\n private _query!: Q;\n\n @Input('etQueryCache')\n get cache(): boolean {\n return this._cache;\n }\n set cache(v: boolean) {\n this._cache = v;\n }\n private _cache = false;\n\n static ngTemplateContextGuard<Q extends AnyQuery | AnyQueryCollection | null>(\n dir: QueryDirective<Q>,\n ctx: unknown,\n ): ctx is QueryContext<QueryOf<Q>> {\n return true;\n }\n\n ngOnInit(): void {\n this._renderMainView();\n }\n\n ngOnDestroy(): void {\n this._subscription?.unsubscribe();\n }\n\n private _subscribeToQuery(): void {\n this._subscription?.unsubscribe();\n this._subscription = null;\n\n if (!this.query) {\n this._viewContext.$implicit = null;\n this._viewContext.etQuery = null;\n this._viewContext.loading = false;\n this._viewContext.refreshing = false;\n this._viewContext.error = null;\n this._viewContext.progress = null;\n return;\n }\n\n const query = isQuery(this.query) ? this.query : this.query.query;\n\n const sub = query.state$.pipe(tap((state) => this._updateView(state))).subscribe();\n\n this._subscription = sub;\n }\n\n private _updateView(state: QueryState) {\n if (isQueryStateLoading(state)) {\n this._viewContext.progress = state.progress ?? null;\n this._viewContext.refreshing = state.meta.triggeredVia === 'auto' || state.meta.triggeredVia === 'poll';\n\n if (!this._viewContext.refreshing) {\n this._viewContext.loading = true;\n }\n } else {\n this._viewContext.loading = false;\n this._viewContext.refreshing = false;\n this._viewContext.progress = null;\n }\n\n if (isQueryStateSuccess(state)) {\n this._viewContext.etQuery = state.response as QueryDataOf<QueryOf<Q>>;\n this._viewContext.$implicit = state.response as QueryDataOf<QueryOf<Q>>;\n } else if (!this.cache) {\n this._viewContext.etQuery = null;\n this._viewContext.$implicit = null;\n }\n\n if (isQueryStateFailure(state)) {\n this._viewContext.error = state.error;\n\n this._errorHandler.handleError(state.error);\n } else {\n this._viewContext.error = null;\n }\n\n this._cdr.markForCheck();\n }\n\n private _renderMainView(): void {\n if (!this._isMainViewCreated) {\n this._isMainViewCreated = true;\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);\n }\n }\n}\n","import { BehaviorSubject, combineLatest, map, of, shareReplay, switchMap, tap } from 'rxjs';\nimport { isQueryStateSuccess } from '../query';\nimport { AnyQueryCreator, ConstructQuery, QueryArgsOf, QueryResponseOf } from '../query-creator';\nimport { InfinityQueryConfig, InfinityQueryParamLocation } from './infinity-query.types';\n\nexport class InfinityQuery<\n QueryCreator extends AnyQueryCreator,\n Query extends ConstructQuery<QueryCreator>,\n Args extends QueryArgsOf<QueryCreator>,\n QueryResponse extends QueryResponseOf<QueryCreator>,\n InfinityResponse extends unknown[],\n> {\n private readonly _queries$ = new BehaviorSubject<Query[]>([]);\n private readonly _currentPage$ = new BehaviorSubject<number | null>(null);\n private readonly _currentCalculatedPage$ = new BehaviorSubject<number | null>(null);\n private readonly _totalPages$ = new BehaviorSubject<number | null>(null);\n private readonly _itemsPerPage$ = new BehaviorSubject<number>(this._config.limitParam?.value ?? 10);\n\n private readonly _data$ = this._queries$.pipe(\n switchMap((queries) => {\n if (!queries.length) {\n return of([]);\n }\n\n return combineLatest(queries.map((query) => query.state$.pipe(map((state) => ({ state, query })))));\n }),\n tap((states) => {\n const lastState = states[states.length - 1].state;\n const lastQuery = states[states.length - 1].query;\n\n if (!isQueryStateSuccess(lastState)) {\n return;\n }\n\n const totalPages =\n this._config.response.totalPagesExtractor?.({\n response: lastState.response as QueryResponse,\n itemsPerPage: this.itemsPerPage,\n arguments: lastQuery._arguments,\n }) ??\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (lastState.response as any)?.totalPages ??\n null;\n\n this._totalPages$.next(totalPages);\n }),\n map((stateMaps) => {\n const fullData = stateMaps.reduce((acc, stateMap) => {\n if (isQueryStateSuccess(stateMap.state)) {\n let data = this._config?.response.valueExtractor(stateMap.state.response as QueryResponse);\n\n if (this._config.response.reverse) {\n data = [...data].reverse() as InfinityResponse;\n }\n\n if (this._config.response.appendItemsTo === 'start') {\n acc.unshift(...data);\n } else {\n acc.push(...data);\n }\n }\n return acc;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }, [] as any as InfinityResponse);\n\n return fullData;\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n private readonly _lastQuery$ = this._queries$.pipe(\n map((queries) => queries[queries.length - 1] ?? null),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n get currentPage$() {\n return this._currentPage$.asObservable();\n }\n\n get currentPage() {\n return this._currentPage$.getValue();\n }\n\n get currentCalculatedPage$() {\n return this._currentCalculatedPage$.asObservable();\n }\n\n get currentCalculatedPage() {\n return this._currentCalculatedPage$.getValue();\n }\n\n get totalPages$() {\n return this._totalPages$.asObservable();\n }\n\n get totalPages() {\n return this._totalPages$.getValue();\n }\n\n get itemsPerPage$() {\n return this._itemsPerPage$.asObservable();\n }\n\n get itemsPerPage() {\n return this._itemsPerPage$.getValue();\n }\n\n get data$() {\n return this._data$;\n }\n\n get currentQuery$() {\n return this._lastQuery$;\n }\n\n constructor(private _config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>) {}\n\n nextPage() {\n const newPage = (this._currentPage$.value ?? 0) + 1;\n const calculatedPage =\n this._config?.pageParam?.valueCalculator?.({\n page: newPage,\n totalPages: this.totalPages,\n itemsPerPage: this.itemsPerPage,\n }) ?? newPage;\n\n if (this.totalPages !== null && calculatedPage > this.totalPages) {\n console.error(\n 'Cannot load more pages, already at the end. Make sure to not render the infinity query trigger using *ngIf canLoadMore',\n );\n return;\n }\n\n const args = this._prepareArgs(this._config, calculatedPage);\n\n const query = this._config.queryCreator.prepare(args).execute() as Query;\n\n this._queries$.next([...this._queries$.value, query]);\n\n this._currentPage$.next(newPage);\n this._currentCalculatedPage$.next(calculatedPage);\n }\n\n reset(\n newConfig?: Omit<\n InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n 'queryCreator' | 'response'\n >,\n ) {\n this._config = { ...this._config, ...(newConfig ?? {}) };\n\n this._currentPage$.next(null);\n this._currentCalculatedPage$.next(null);\n this._totalPages$.next(null);\n this._itemsPerPage$.next(this._config.limitParam?.value ?? 10);\n this._queries$.next([]);\n\n this.nextPage();\n }\n\n private _prepareArgs(config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>, page: number) {\n const pageParamLocation = this._getPageParamLocation(config?.pageParam?.location);\n\n const pageArgs = {\n [pageParamLocation]: {\n [config?.pageParam?.key ?? 'page']: page,\n },\n };\n\n const limitParamLocation = this._getPageParamLocation(config?.limitParam?.location);\n\n const limitArgs = {\n [limitParamLocation]: {\n [config?.limitParam?.key ?? 'limit']: config?.limitParam?.value ?? 10,\n },\n };\n\n const defaultConfig = config?.defaultArgs ?? {};\n\n const mergedArgs =\n pageParamLocation === limitParamLocation\n ? {\n ...defaultConfig,\n [pageParamLocation]: {\n ...(config?.defaultArgs?.[pageParamLocation] ?? {}),\n ...pageArgs[limitParamLocation],\n ...limitArgs[limitParamLocation],\n },\n }\n : {\n ...defaultConfig,\n [pageParamLocation]: {\n ...(config?.defaultArgs?.[pageParamLocation] ?? {}),\n ...pageArgs[pageParamLocation],\n },\n [limitParamLocation]: {\n ...(config?.defaultArgs?.[limitParamLocation] ?? {}),\n ...limitArgs[limitParamLocation],\n },\n };\n\n return mergedArgs;\n }\n\n private _getPageParamLocation(location: InfinityQueryParamLocation | undefined) {\n const loc = location ?? 'query';\n\n switch (loc) {\n case 'path':\n return 'pathParams';\n case 'query':\n return 'queryParams';\n case 'body':\n return 'body';\n case 'header':\n return 'headers';\n case 'variable':\n return 'variables';\n default:\n throw new Error(`Invalid pageParamLocation: ${loc}`);\n }\n }\n}\n","import { AnyQueryCreator, QueryArgsOf, QueryResponseOf } from '../query-creator';\nimport { InfinityQueryConfig, PageParamCalculatorOptions } from './infinity-query.types';\n\nexport const createInfinityQueryConfig = <\n QueryCreator extends AnyQueryCreator,\n Args extends QueryArgsOf<QueryCreator>,\n QueryResponse extends QueryResponseOf<QueryCreator>,\n InfinityResponse extends unknown[],\n>(\n config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n) => config;\n\nexport const skipPaginationPageParamCalculator = ({ page, itemsPerPage }: PageParamCalculatorOptions) =>\n itemsPerPage * (page - 1);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n inject,\n InjectionToken,\n Input,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { createDestroy, DelayableDirective } from '@ethlete/core';\nimport { BehaviorSubject, combineLatest, skip, Subject, takeUntil, tap, withLatestFrom } from 'rxjs';\nimport { InfinityQuery, InfinityQueryConfig, InfinityQueryOf } from '../infinite-query';\nimport {\n BaseArguments,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n switchQueryState,\n} from '../query';\nimport { AnyQueryCreator, ConstructQuery } from '../query-creator';\nimport { RequestError } from '../request';\n\ninterface InfinityQueryContext<\n Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments | undefined, any, unknown[]>,\n> {\n $implicit: Q['response']['arrayType'] | null;\n etInfinityQuery: Q['response']['arrayType'] | null;\n loading: boolean;\n error: RequestError<unknown> | null;\n\n isFirstLoad: boolean;\n canLoadMore: boolean;\n currentPage: number | null;\n currentCalculatedPage: number | null;\n totalPages: number | null;\n itemsPerPage: number | null;\n\n currentQuery: ConstructQuery<Q['queryCreator']> | null;\n}\n\nexport const INFINITY_QUERY_TOKEN = new InjectionToken<InfinityQueryDirective<any>>('INFINITY_QUERY_TOKEN');\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[etInfinityQuery]',\n exportAs: 'etInfinityQuery',\n standalone: true,\n providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }],\n hostDirectives: [DelayableDirective],\n})\nexport class InfinityQueryDirective<\n Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments | undefined, any, unknown[]>,\n> implements OnInit\n{\n private readonly _queryConfigChanged$ = new Subject<boolean>();\n private readonly _viewContext: InfinityQueryContext<Q> = {\n $implicit: null,\n etInfinityQuery: null,\n loading: false,\n error: null,\n\n isFirstLoad: false,\n canLoadMore: false,\n currentPage: null,\n currentCalculatedPage: null,\n totalPages: null,\n itemsPerPage: null,\n\n currentQuery: null,\n };\n private _infinityQueryInstance: InfinityQueryOf<Q> | null = null;\n\n private readonly _destroy$ = createDestroy();\n private readonly _cdr = inject(ChangeDetectorRef);\n private readonly _viewContainerRef = inject(ViewContainerRef);\n private readonly _mainTemplateRef = inject(TemplateRef<InfinityQueryContext<Q>>);\n private readonly _errorHandler = inject(ErrorHandler);\n private readonly _delayable = inject(DelayableDirective, { host: true });\n\n private readonly _data$ = new BehaviorSubject<Q['response']['arrayType']>([]);\n\n private _didReceiveFirstData$ = new BehaviorSubject(false);\n private _isMainViewCreated = false;\n\n @Input('etInfinityQuery')\n get infinityQuery(): Q {\n return this._infinityQuery;\n }\n set infinityQuery(v: Q) {\n this._cleanup();\n\n this._infinityQuery = v;\n this._infinityQueryInstance = this._setupInfinityQuery(v);\n this.loadNextPage();\n }\n private _infinityQuery!: Q;\n\n get context() {\n return this._viewContext;\n }\n\n get instance() {\n return this._infinityQueryInstance;\n }\n\n get data$() {\n return this._data$.asObservable();\n }\n\n get data() {\n return this._data$.getValue();\n }\n\n static ngTemplateContextGuard<\n Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments | undefined, any, unknown[]>,\n >(dir: InfinityQueryDirective<Q>, ctx: unknown): ctx is InfinityQueryContext<Q> {\n return true;\n }\n\n ngOnInit(): void {\n this._renderMainView();\n }\n\n private _setupInfinityQuery(config: Q) {\n const instance = new InfinityQuery(config) as unknown as InfinityQueryOf<Q>;\n\n combineLatest([\n instance.currentQuery$.pipe(switchQueryState(), withLatestFrom(instance.currentQuery$)),\n this._delayable.isDelayed$,\n this._didReceiveFirstData$,\n ])\n .pipe(\n tap(([[state, currentQuery], isDelayed, didReceiveFirstData]) => {\n this._viewContext.currentPage = instance.currentPage;\n this._viewContext.totalPages = instance.totalPages;\n this._viewContext.itemsPerPage = instance.itemsPerPage;\n this._viewContext.canLoadMore =\n (instance.totalPages && instance.currentPage && instance.totalPages > instance.currentPage) || false;\n this._viewContext.currentCalculatedPage = instance.currentCalculatedPage;\n\n this._viewContext.currentQuery = currentQuery;\n\n if (isQueryStateLoading(state) || isDelayed || (!didReceiveFirstData && isQueryStateSuccess(state))) {\n this._viewContext.loading = true;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = this.context.etInfinityQuery === null;\n } else if (isQueryStateFailure(state)) {\n this._viewContext.loading = false;\n this._viewContext.error = state.error;\n this._viewContext.isFirstLoad = false;\n this._errorHandler.handleError(state.error);\n } else if (isQueryStateSuccess(state)) {\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = false;\n } else {\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.etInfinityQuery = null;\n this._viewContext.$implicit = null;\n\n this._viewContext.isFirstLoad = false;\n this._viewContext.canLoadMore = false;\n this._viewContext.currentPage = null;\n this._viewContext.itemsPerPage = null;\n this._viewContext.totalPages = null;\n\n this._viewContext.currentQuery = null;\n\n this._data$.next([]);\n }\n\n this._cdr.markForCheck();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._queryConfigChanged$),\n )\n .subscribe();\n\n instance.data$\n .pipe(\n skip(1),\n tap((data) => {\n this._viewContext.etInfinityQuery = this._viewContext.$implicit = data as Q['response']['arrayType'] | null;\n this._data$.next(data);\n\n if (!this._didReceiveFirstData$.getValue()) {\n this._didReceiveFirstData$.next(true);\n }\n\n this._cdr.markForCheck();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._queryConfigChanged$),\n )\n .subscribe();\n\n return instance;\n }\n\n loadNextPage() {\n if (!this._infinityQueryInstance) {\n return;\n }\n\n if (this._viewContext.loading) {\n return;\n }\n\n this._infinityQueryInstance.nextPage();\n }\n\n reset(newConfig?: Omit<Q, 'queryCreator' | 'response'>) {\n if (!this._infinityQueryInstance) {\n return;\n }\n\n this._infinityQueryInstance.reset(newConfig as any);\n }\n\n private _renderMainView(): void {\n if (!this._isMainViewCreated) {\n this._isMainViewCreated = true;\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);\n }\n }\n\n private _cleanup() {\n this._queryConfigChanged$.next(true);\n\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.etInfinityQuery = null;\n this._viewContext.$implicit = null;\n\n this._viewContext.isFirstLoad = false;\n this._viewContext.canLoadMore = false;\n this._viewContext.currentPage = null;\n this._viewContext.itemsPerPage = null;\n this._viewContext.totalPages = null;\n\n this._viewContext.currentQuery = null;\n\n this._data$.next([]);\n }\n}\n","import { Directive, ElementRef, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { fromEvent, Subject, takeUntil } from 'rxjs';\nimport { INFINITY_QUERY_TOKEN } from './infinity-query.directive';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[etInfinityQueryTrigger], et-infinity-query-trigger',\n standalone: true,\n})\nexport class InfinityQueryTriggerDirective implements OnInit, OnDestroy {\n private _elementRef = inject(ElementRef<HTMLElement>);\n private _infinityQuery = inject(INFINITY_QUERY_TOKEN);\n\n private _destroy = new Subject<boolean>();\n private _observer: IntersectionObserver | null = null;\n\n click$ = fromEvent(this._elementRef.nativeElement, 'click');\n\n @Input()\n scrollContainerSelector: string | null = null;\n\n ngOnInit(): void {\n const isInteractive = this._elementRef.nativeElement.hasAttribute('etInfinityQueryTrigger');\n\n if (isInteractive) {\n this.click$.pipe(takeUntil(this._destroy)).subscribe(() => this._infinityQuery.loadNextPage());\n } else {\n this._setupIntersectionObserver();\n }\n }\n\n ngOnDestroy(): void {\n this._destroy.next(true);\n this._destroy.unsubscribe();\n this._observer?.disconnect();\n }\n\n private _setupIntersectionObserver(): void {\n this._observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n\n if (entry.isIntersecting && !this._infinityQuery.context.loading) {\n this._infinityQuery.loadNextPage();\n }\n },\n {\n root: this.scrollContainerSelector ? document.querySelector(this.scrollContainerSelector) : null,\n rootMargin: '0px',\n threshold: [0.25, 0.5, 0.75, 1],\n },\n );\n\n this._observer.observe(this._elementRef.nativeElement);\n }\n}\n","import { Observable, Subject, debounceTime, filter, map, shareReplay, startWith } from 'rxjs';\nimport { EntityKey, EntityStoreConfig } from './entity.types';\n\nclass EntityStoreError extends Error {\n constructor(message: string, public detail?: unknown) {\n super(message);\n this.name = 'EntityStoreError';\n }\n}\n\nexport class EntityStore<T> {\n private readonly _dictionary = new Map<EntityKey, T>();\n\n private readonly _change$ = new Subject<EntityKey | EntityKey[]>();\n\n constructor(private readonly _config: EntityStoreConfig) {}\n\n select(key: EntityKey): Observable<T | null>;\n select(keys: EntityKey[]): Observable<T[]>;\n select(keyOrKeys: EntityKey | EntityKey[]): Observable<T | null> | Observable<T[]> {\n if (Array.isArray(keyOrKeys)) {\n return this._selectMany(keyOrKeys);\n }\n\n return this._select(keyOrKeys);\n }\n\n /**\n * **Note:** Prefer `select` over `selectWhere` when possible.\n */\n selectWhere(predicate: (value: T) => boolean): Observable<T[]> {\n return this._change$.pipe(\n startWith(null),\n debounceTime(0),\n map(() => Array.from(this._dictionary.values()).filter(predicate)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n set(key: EntityKey, value: T): void;\n set(keys: EntityKey[], values: T[]): void;\n set(keyOrKeys: EntityKey | EntityKey[], valueOrValues: T | T[]) {\n if (Array.isArray(keyOrKeys)) {\n if (!Array.isArray(valueOrValues)) {\n throw new EntityStoreError('When setting multiple keys, values must be an array', {\n keyOrValues: keyOrKeys,\n valueOrValues,\n });\n }\n\n for (let i = 0; i < keyOrKeys.length; i++) {\n this._set(keyOrKeys[i], valueOrValues[i]);\n }\n } else {\n this._set(keyOrKeys, valueOrValues as T);\n }\n\n this._change$.next(keyOrKeys);\n }\n\n remove(key: EntityKey): void;\n remove(keys: EntityKey[]): void;\n remove(keyOrKeys: EntityKey | EntityKey[]) {\n if (Array.isArray(keyOrKeys)) {\n for (const key of keyOrKeys) {\n this._remove(key);\n }\n } else {\n this._remove(keyOrKeys);\n }\n\n this._change$.next(keyOrKeys);\n }\n\n logState() {\n console.log('EntityStore:', this._config.name, {\n dictionary: this._dictionary,\n });\n }\n\n private _select(key: EntityKey): Observable<T | null> {\n if (this._config.logActions) {\n console.log('EntityStore: select', this._config.name, key);\n }\n\n return this._change$.pipe(\n startWith(null),\n filter((v) => {\n if (v === null) {\n return true;\n }\n\n if (Array.isArray(v)) {\n return v.includes(key);\n }\n\n return v === key;\n }),\n map(() => this._dictionary.get(key) ?? null),\n );\n }\n\n private _selectMany(keys: EntityKey[]): Observable<T[]> {\n if (this._config.logActions) {\n console.log('EntityStore: selectMany', this._config.name, keys);\n }\n\n return this._change$.pipe(\n startWith(null),\n filter((v) => {\n if (v === null) {\n return true;\n }\n\n if (Array.isArray(v)) {\n return keys.some((key) => v.includes(key));\n }\n\n return keys.includes(v);\n }),\n map(() => keys.map((key) => this._dictionary.get(key)).filter((value): value is T => value !== undefined)),\n );\n }\n\n private _set(key: EntityKey, value: T) {\n if (this._config.logActions) {\n console.log('EntityStore: set', this._config.name, key, value);\n }\n\n this._dictionary.set(key, value);\n }\n\n private _remove(key: EntityKey) {\n if (this._config.logActions) {\n console.log('EntityStore: remove', this._config.name, key);\n }\n\n this._dictionary.delete(key);\n }\n}\n","import { Paginated } from '@ethlete/types';\nimport { map } from 'rxjs';\n\nexport function mapToPaginated<T>(response: Paginated<T>) {\n return map((items) => ({ ...response, items } as Paginated<T>));\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { EntityStore } from '../entity';\nimport { Query, computeQueryQueryParams, isGqlQueryConfig } from '../query';\nimport { QueryClient, buildGqlCacheKey, shouldCacheQuery } from '../query-client';\nimport { QueryStore } from '../query-store';\nimport { BaseArguments, GqlQueryConfig, RestQueryConfig, RouteType, WithHeaders } from '../query/query.types';\nimport { buildRoute } from '../request';\nimport { QueryPrepareFn } from './query-creator.types';\n\nexport class QueryCreator<\n Arguments extends BaseArguments | undefined,\n Response,\n Route extends RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> {\n constructor(\n private _queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n private _client: QueryClient,\n private _store: QueryStore,\n ) {}\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n prepare: QueryPrepareFn<Arguments, Response, Route, Store, Data, Id> = (args?: Arguments & WithHeaders) => {\n const route = buildRoute({\n base: this._client.config.baseRoute,\n route: this._queryConfig.route,\n pathParams: args?.pathParams,\n queryParams: computeQueryQueryParams({ config: this._queryConfig, client: this._client, args }),\n queryParamConfig: this._client.config.request?.queryParams,\n }) as Route;\n\n const cacheKey = isGqlQueryConfig(this._queryConfig) ? buildGqlCacheKey(this._queryConfig, args) : route;\n\n if (shouldCacheQuery(this._queryConfig.method)) {\n const existingQuery = this._store.get<Query<Response, Arguments, Route, Store, Data, Id>>(cacheKey);\n\n if (existingQuery) {\n return existingQuery;\n }\n }\n\n const query = new Query<Response, Arguments, Route, Store, Data, Id>(\n this._client,\n this._queryConfig,\n route,\n args ?? ({} as Arguments),\n );\n\n if (shouldCacheQuery(this._queryConfig.method)) {\n this._store.add(cacheKey, query);\n }\n\n return query;\n };\n\n behaviorSubject = (initialValue?: ReturnType<typeof this.prepare> | null) =>\n new BehaviorSubject<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n}\n","import { fromEvent, take, takeUntil, timer } from 'rxjs';\nimport { AnyQuery } from '../query';\n\nexport class QueryStore {\n private readonly _store = new Map<string, AnyQuery>();\n private _garbageCollector: number | null = null;\n private _isInLowResourceMode = false;\n private _lastBlurTimestamp = Date.now();\n\n constructor(\n private _config?: {\n enableChangeLogging?: boolean;\n enableGarbageCollectorLogging?: boolean;\n autoRefreshQueriesOnWindowFocus?: boolean;\n enableSmartPolling?: boolean;\n },\n ) {\n this._initSmartQueryHandling();\n }\n\n add(id: string, query: AnyQuery) {\n this._store.set(id, query);\n\n this._initGarbageCollector();\n\n this._logState(id, query, 'SET');\n }\n\n get<T extends AnyQuery>(id: string): T | null {\n return (this._store.get(id) as T) ?? null;\n }\n\n remove(id: string) {\n this.get(id)?._destroy();\n this._store.delete(id);\n\n this._logState(id, null, 'REMOVE');\n }\n\n forEach(callback: (value: AnyQuery, key: string) => void) {\n for (const [key, query] of this._store) {\n callback(query, key);\n }\n }\n\n refreshQueriesInUse(config?: { ignoreCacheValidity?: boolean; purgeUnused?: boolean }) {\n const { ignoreCacheValidity, purgeUnused } = config ?? {};\n\n for (const [key, query] of this._store) {\n if (\n query.isInUse &&\n (query.isExpired || ignoreCacheValidity) &&\n query.autoRefreshOnConfig.queryClientDefaultHeadersChange\n ) {\n query.execute({ skipCache: true, _triggeredVia: 'auto' });\n } else if (purgeUnused && !query.isInUse) {\n this.remove(key);\n }\n }\n }\n\n private _initSmartQueryHandling() {\n const windowBlur$ = fromEvent<Event>(window, 'blur');\n const windowFocus$ = fromEvent<Event>(window, 'focus');\n\n windowBlur$.subscribe(() => {\n timer(5000)\n .pipe(takeUntil(windowFocus$), take(1))\n .subscribe(() => {\n this._lastBlurTimestamp = Date.now();\n this._isInLowResourceMode = true;\n this._stopGarbageCollector();\n\n if (this._config?.enableSmartPolling) {\n this.forEach((query) => {\n if (!query.isPolling || !query._enableSmartPolling) {\n return;\n }\n\n query.pausePolling();\n });\n }\n });\n });\n\n windowFocus$.subscribe(() => {\n if (!this._isInLowResourceMode) {\n return;\n }\n\n this._isInLowResourceMode = false;\n\n if (this._config?.enableSmartPolling || this._config?.autoRefreshQueriesOnWindowFocus) {\n this.forEach((query) => {\n if (this._config?.enableSmartPolling && query._isPollingPaused) {\n query.resumePolling();\n }\n\n if (Date.now() - this._lastBlurTimestamp > 15000) {\n if (\n this._config?.autoRefreshQueriesOnWindowFocus &&\n query.isExpired &&\n query.isInUse &&\n query.autoRefreshOnConfig.windowFocus\n ) {\n query.execute({ skipCache: true, _triggeredVia: 'auto' });\n }\n }\n });\n }\n\n this._initGarbageCollector();\n });\n }\n\n private _logState(key: string | null, item: AnyQuery | null, operation: string) {\n if (!this._config?.enableChangeLogging) return;\n\n const stateAsJson: Record<string, AnyQuery> = {};\n\n this._store.forEach((value, key) => {\n stateAsJson[key] = value;\n });\n\n console.log(`%c[${operation}] ${key}`, 'font-weight: bold');\n\n console.log({ operation, key, item });\n console.log(stateAsJson);\n }\n\n private _initGarbageCollector() {\n if (this._garbageCollector !== null) {\n return;\n }\n\n this._logGarbageCollector('Start');\n\n this._garbageCollector = window.setInterval(() => {\n this._runGarbageCollector();\n }, 15000);\n }\n\n private _stopGarbageCollector() {\n if (this._garbageCollector !== null) {\n window.clearInterval(this._garbageCollector);\n this._garbageCollector = null;\n this._logGarbageCollector('Stop');\n }\n }\n\n private _runGarbageCollector() {\n this._logGarbageCollector('Collecting...');\n\n this._store.forEach((item, key) => {\n if (item.isExpired && !item.isInUse) {\n this.remove(key);\n }\n });\n\n this._logGarbageCollector('Collection done');\n\n if (!this._store.size) {\n this._stopGarbageCollector();\n }\n }\n\n private _logGarbageCollector(action: string) {\n if (!this._config?.enableGarbageCollectorLogging) return;\n\n console.log(`%cGC: ${action}`, 'color: yellow; font-weight: bold');\n }\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { AuthProvider } from '../auth';\nimport { EntityStore } from '../entity';\nimport {\n BaseArguments,\n GqlQueryConfig,\n GqlQueryConfigWithoutMethod,\n QueryConfigWithoutMethod,\n RestQueryConfig,\n RouteType,\n} from '../query';\nimport { QueryCreator } from '../query-creator';\nimport { QueryStore } from '../query-store';\nimport { RequestHeaders, RequestHeadersMethodMap } from '../request';\nimport { QueryClientConfig } from './query-client.types';\n\nexport class QueryClient {\n private readonly _store: QueryStore;\n\n get config() {\n return this._clientConfig;\n }\n\n get authProvider() {\n return this._authProvider$.getValue() ?? this._clientConfig.parent?._authProvider$.getValue() ?? null;\n }\n get authProvider$() {\n return this._authProvider$.asObservable() ?? this._clientConfig.parent?._authProvider$.asObservable() ?? null;\n }\n private readonly _authProvider$ = new BehaviorSubject<AuthProvider | null>(null);\n\n constructor(private _clientConfig: QueryClientConfig) {\n this._store = new QueryStore({\n enableChangeLogging: _clientConfig.logging?.queryStateChanges,\n enableGarbageCollectorLogging: _clientConfig.logging?.queryStateGarbageCollector,\n autoRefreshQueriesOnWindowFocus: _clientConfig.request?.autoRefreshQueriesOnWindowFocus ?? true,\n enableSmartPolling: _clientConfig.request?.enableSmartPolling ?? true,\n });\n }\n\n get = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GET',\n });\n\n post = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'POST',\n });\n\n put = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'PUT',\n });\n\n patch = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'PATCH',\n });\n\n delete = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'DELETE',\n });\n\n gqlQuery = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GQL_QUERY',\n });\n\n gqlMutate = <\n Route extends RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GQL_MUTATE',\n });\n\n fetch = <\n Route extends RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined,\n Id,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n Data = Response,\n >(\n queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n ) => new QueryCreator<Arguments, Response, Route, Store, Data, Id>(queryConfig, this, this._store);\n\n setAuthProvider = (authProvider: AuthProvider) => {\n if (this.authProvider) {\n throw new Error('The auth provider is already set. Please call clearAuthProvider() first.');\n }\n\n this._authProvider$.next(authProvider);\n };\n\n setDefaultHeaders = (config: {\n headers: RequestHeaders | RequestHeadersMethodMap | null;\n refreshQueriesInUse?: boolean;\n }) => {\n if (!this._clientConfig.request) {\n this._clientConfig.request = {\n headers: config.headers ?? undefined,\n };\n } else {\n this._clientConfig.request.headers = config.headers ?? undefined;\n }\n\n if (config.refreshQueriesInUse) {\n this._store.refreshQueriesInUse({ purgeUnused: true, ignoreCacheValidity: true });\n }\n };\n\n clearAuthProvider = () => {\n this.authProvider?.cleanUp();\n this._authProvider$.next(null);\n };\n}\n","import { AnyGqlQueryConfig, BaseArguments } from '../query/query.types';\nimport { Method } from '../request';\n\nexport const shouldCacheQuery = (method: Method) => {\n return method === 'GET' || method === 'OPTIONS' || method === 'HEAD' || method === 'GQL_QUERY';\n};\n\nexport const buildGqlCacheKey = (config: AnyGqlQueryConfig, args: BaseArguments | undefined) => {\n const { query } = config;\n const variables = args?.variables || {};\n\n const queryWithoutNewLinesAndWhitespace = query.replace(/\\s/g, '');\n\n const queryFirst50Chars = queryWithoutNewLinesAndWhitespace.slice(0, 50);\n const queryMiddle25Chars = queryWithoutNewLinesAndWhitespace.slice(\n queryWithoutNewLinesAndWhitespace.length / 2 - 25,\n queryWithoutNewLinesAndWhitespace.length / 2 + 25,\n );\n const queryLast50Chars = queryWithoutNewLinesAndWhitespace.slice(-50);\n\n const vars = JSON.stringify(variables);\n\n return `${queryFirst50Chars}...${queryMiddle25Chars}...${queryLast50Chars}...${vars}`;\n};\n","import { NgZone, assertInInjectionContext, inject, isDevMode } from '@angular/core';\nimport { AbstractControl, FormGroup, ɵValue } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ET_PROPERTY_REMOVED, RouterStateService, clone, createDestroy, equal } from '@ethlete/core';\nimport {\n BehaviorSubject,\n Subject,\n concat,\n debounceTime,\n map,\n startWith,\n take,\n takeUntil,\n tap,\n withLatestFrom,\n} from 'rxjs';\nimport {\n QueryFieldOptions,\n QueryFormGroupControls,\n QueryFormObserveOptions,\n QueryFormValue,\n QueryFormValueEvent,\n} from './query-form.types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class QueryFormGroup<T extends { [K in keyof T]: AbstractControl<any, any> } = any> extends FormGroup<T> {\n override patchValue(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: 0 extends 1 & T ? { [key: string]: any } : Partial<{ [K in keyof T]: ɵValue<T[K]> }>,\n options?: { onlySelf?: boolean | undefined; emitEvent?: boolean | undefined } | undefined,\n ): void {\n super.patchValue(value, options);\n }\n}\n\nexport class QueryField<T> {\n changes$ = this._setupChangesObservable();\n\n get control() {\n return this.data.control;\n }\n\n private _currentDebounceTimeout: number | null = null;\n\n constructor(public data: QueryFieldOptions<T>) {}\n\n setValue(value: T | null, options?: { skipDebounce?: boolean }) {\n if (this._currentDebounceTimeout !== null) {\n clearTimeout(this._currentDebounceTimeout);\n this._currentDebounceTimeout = null;\n }\n\n if (value === this.control.value) {\n return;\n }\n\n if (this.data.debounce && !options?.skipDebounce) {\n this._currentDebounceTimeout = window.setTimeout(() => {\n this.control.setValue(value);\n }, this.data.debounce);\n } else {\n this.control.setValue(value);\n }\n }\n\n private _setupChangesObservable() {\n const obs = this.control.valueChanges.pipe(startWith(this.control.value));\n\n if (!this.data.debounce) {\n return obs;\n }\n\n // The initial value should get emitted immediately\n // concat switches to the debounced observable after the first observable is completed\n return concat(obs.pipe(take(1)), this.control.valueChanges.pipe(debounceTime(this.data.debounce)));\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class QueryForm<T extends Record<string, QueryField<any>>> {\n private readonly _destroy$ = createDestroy();\n private readonly _unobserveTrigger$ = new Subject<boolean>();\n private readonly _router = inject(Router);\n private readonly _activatedRoute = inject(ActivatedRoute);\n private readonly _defaultValues = this._extractDefaultValues();\n private readonly _routerStateService = inject(RouterStateService);\n private readonly _zone = inject(NgZone);\n\n private _isObserving = false;\n\n readonly form = this._setupFormGroup();\n\n private readonly _lastFormValue$ = new BehaviorSubject<{ id: number; data: QueryFormValue<T> } | null>(null);\n private readonly _currentFormValue$ = new BehaviorSubject<{ id: number; data: QueryFormValue<T> }>({\n id: 0,\n data: this._formValue,\n });\n\n private get _formValue() {\n return this.form.getRawValue() as QueryFormValue<T>;\n }\n\n private readonly _changes$ = new BehaviorSubject<QueryFormValueEvent<T>>({\n previousValue: null,\n currentValue: this.form.getRawValue() as QueryFormValue<T>,\n });\n\n readonly changes$ = this._currentFormValue$.pipe(withLatestFrom(this._lastFormValue$)).pipe(\n map(([currentValueEvent, previousValueEvent]) => {\n return {\n previousValue: previousValueEvent?.data ?? null,\n currentValue: currentValueEvent.data,\n };\n }),\n );\n\n get controls() {\n return this.form.controls;\n }\n\n get value() {\n return this._changes$.value.currentValue;\n }\n\n constructor(private _fields: T) {\n assertInInjectionContext(QueryForm);\n }\n\n observe(options?: QueryFormObserveOptions) {\n if (this._isObserving) {\n if (isDevMode()) {\n console.warn('QueryForm.observe() was called multiple times. This is not supported.');\n }\n return;\n }\n\n this._isObserving = true;\n\n this.setFormValueFromUrlQueryParams({\n queryParams: this._routerStateService.queryParams,\n });\n\n this.form.valueChanges\n .pipe(\n startWith(null),\n tap(() => {\n this._lastFormValue$.next(clone(this._currentFormValue$.value));\n this._currentFormValue$.next({ id: this._currentFormValue$.value.id + 1, data: clone(this._formValue) });\n }),\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n )\n .subscribe();\n\n this._currentFormValue$\n .pipe(\n tap((currentValueEvent) => {\n const previousValueEvent = this._lastFormValue$.value;\n const currentValue = currentValueEvent.data;\n\n if (options?.writeToQueryParams !== false) {\n this._syncViaUrlQueryParams(currentValueEvent.data, options?.replaceUrl);\n }\n\n const didResetValues = this._handleQueryFormResets(previousValueEvent?.data ?? null, currentValue);\n\n if (didResetValues) {\n return;\n }\n\n if (this._currentFormValue$.value.id !== currentValueEvent.id) {\n return;\n }\n\n this._changes$.next({\n previousValue: previousValueEvent?.data ?? null,\n currentValue: currentValueEvent.data,\n });\n }),\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n )\n .subscribe();\n\n if (options?.syncOnNavigation !== false) {\n this._routerStateService.queryParamChanges$\n .pipe(\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n tap((changes) => this.setFormValueFromUrlQueryParams({ queryParams: changes })),\n )\n .subscribe();\n }\n }\n\n private _handleQueryFormResets(previousValue: QueryFormValue<T> | null, currentValue: QueryFormValue<T>) {\n let didResetValues = false;\n\n for (const formFieldKey in this._fields) {\n const resets = this._fields[formFieldKey].data.isResetBy;\n\n if (!resets) continue;\n\n const resetConditionKeys = Array.isArray(resets) ? resets : [resets];\n\n for (const resetConditionKey of resetConditionKeys) {\n if (!(resetConditionKey in this._fields)) {\n if (isDevMode()) {\n console.warn(`The field \"${resetConditionKey}\" is not defined in the QueryForm. Is it a typo?`, this);\n }\n\n continue;\n }\n\n if (\n previousValue &&\n currentValue &&\n !equal(previousValue[resetConditionKey], currentValue[resetConditionKey])\n ) {\n const defaultValueForKeyToReset = this._defaultValues[formFieldKey];\n const currentValueForKeyToReset = currentValue[formFieldKey];\n\n if (equal(defaultValueForKeyToReset, currentValueForKeyToReset)) {\n continue;\n }\n\n this.form.controls[formFieldKey].setValue(defaultValueForKeyToReset);\n\n didResetValues = true;\n\n break;\n }\n }\n }\n\n return didResetValues;\n }\n\n unobserve() {\n this._unobserveTrigger$.next(true);\n }\n\n setFormValueFromUrlQueryParams(options: { queryParams: Record<string, unknown>; skipDebounce?: boolean }) {\n for (const [key, field] of Object.entries(this._fields)) {\n const value = options.queryParams[key];\n\n const valueDoesNotExist = value === undefined;\n\n if (valueDoesNotExist) continue;\n\n const valueGotRemoved = value === ET_PROPERTY_REMOVED;\n\n if (valueGotRemoved) {\n field.setValue(this._getDefaultValue(key), { skipDebounce: options?.skipDebounce ?? true });\n\n continue;\n }\n\n const deserializedValue = field.data.queryParamToValueTransformFn?.(value) ?? value;\n const valueIsEqualToCurrent = equal(deserializedValue, field.control.value);\n\n if (valueIsEqualToCurrent) continue;\n\n field.setValue(deserializedValue, { skipDebounce: options?.skipDebounce ?? true });\n }\n }\n\n private _getDefaultValue(key: string) {\n return this._defaultValues[key] ?? null;\n }\n\n private _isDefaultValue(key: string, value: unknown) {\n const normalizedValue = Array.isArray(value) ? JSON.stringify(value) : value;\n\n return this._getDefaultValue(key) === normalizedValue;\n }\n\n private _setupFormGroup() {\n const group = new QueryFormGroup({} as QueryFormGroupControls<T>);\n\n for (const [key, field] of Object.entries(this._fields)) {\n group.addControl(key, field.control);\n }\n\n return group;\n }\n\n private _extractDefaultValues() {\n const defaultValues: Record<string, unknown> = {};\n\n for (const [key, field] of Object.entries(this._fields)) {\n const value = field.control.value;\n\n if (value === null || value === undefined) {\n continue;\n }\n\n if (Array.isArray(value)) {\n defaultValues[key] = JSON.stringify(value);\n } else {\n defaultValues[key] = value;\n }\n }\n\n return defaultValues;\n }\n\n private _syncViaUrlQueryParams(values: QueryFormValue<T>, replaceUrl?: boolean) {\n const queryParams = { ...clone(this._activatedRoute.snapshot.queryParams) };\n\n for (const [key, value] of Object.entries(values)) {\n if (!this._fields[key]) {\n console.warn(`The field \"${key}\" is not defined in the QueryForm. Is it a typo?`, this);\n continue;\n }\n\n if (this._isDefaultValue(key, value) || this._fields[key].data.appendToUrl === false) {\n delete queryParams[key];\n } else {\n queryParams[key] = this._fields[key].data.valueToQueryParamTransformFn\n ? this._fields[key].data.valueToQueryParamTransformFn?.(value)\n : value;\n }\n }\n\n this._zone.run(() => {\n this._router.navigate([], {\n queryParams,\n replaceUrl,\n });\n });\n }\n}\n","export const transformToString = (value: unknown) => {\n if (typeof value === 'string') {\n return value;\n }\n\n return null;\n};\n\nexport const transformToStringArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToString).filter(Boolean) as string[];\n } else if (typeof value === 'string') {\n return [transformToString(value)] as string[];\n }\n\n return null;\n};\n\nexport const transformToNumber = (value: unknown) => {\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n return Number(value);\n }\n return null;\n};\n\nexport const transformToNumberArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToNumber).filter((item) => item !== null) as number[];\n } else if (typeof value === 'number') {\n return [value] as number[];\n }\n\n return null;\n};\n\nexport const transformToBoolean = (value: unknown) => {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n return value === 'true' || value === '1';\n }\n return null;\n};\n\nexport const transformToBooleanArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToBoolean).filter((item) => item !== null) as boolean[];\n } else if (typeof value === 'string' || typeof value === 'boolean') {\n return [transformToBoolean(value)] as boolean[];\n }\n\n return null;\n};\n\nexport const transformToDate = (value: unknown) => {\n if (value instanceof Date) {\n return value;\n }\n if (typeof value === 'string') {\n const date = new Date(value);\n\n if (isNaN(date.getTime())) {\n return null;\n }\n\n return date;\n }\n return null;\n};\n\nexport const transformToDateArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToDate).filter((item) => item !== null) as Date[];\n } else if (typeof value === 'string' || value instanceof Date) {\n return [transformToDate(value)] as Date[];\n }\n\n return null;\n};\n\nexport const transformToSort = (value: unknown) => {\n if (typeof value === 'string') {\n const [active, direction] = value.split(':');\n\n return {\n active,\n direction: direction as 'asc' | 'desc',\n };\n }\n\n return null;\n};\n\nexport const transformToSortQueryParam = (value: unknown) => {\n if (typeof value === 'string') {\n return value;\n }\n if (value && typeof value === 'object' && 'active' in value && 'direction' in value) {\n const valAsSort = value as {\n active: string;\n direction: 'asc' | 'desc';\n };\n\n return valAsSort.direction ? `${valAsSort.active}:${valAsSort.direction}` : null;\n }\n\n return null;\n};\n","export const deepFreeze = <T extends Record<string, unknown>>(object: T) => {\n // check if object is actually an object or frozen\n if (!object || typeof object !== 'object' || Object.isFrozen(object)) {\n return object;\n }\n\n // Retrieve the property names defined on object\n const propNames = Object.getOwnPropertyNames(object);\n\n // Freeze properties before freezing self\n\n for (const name of propNames) {\n const value = object[name];\n\n if (value && typeof value === 'object') {\n deepFreeze(value as T);\n }\n }\n\n return Object.freeze(object);\n};\n","/**\n * Dummy function for providing types while not breaking inference.\n * **This function always returns null.**\n * @see https://github.com/microsoft/TypeScript/issues/26242\n * @returns null\n */\nexport const def = <Data>() => null as unknown as Data;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ethlete/query",
3
- "version": "4.4.0",
3
+ "version": "4.4.1",
4
4
  "dependencies": {
5
5
  "tslib": "^2.5.0"
6
6
  },