sanitizeFilter.js 869 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. 'use strict';
  2. const hasDollarKeys = require('./hasDollarKeys');
  3. const { trustedSymbol } = require('./trusted');
  4. module.exports = function sanitizeFilter(filter) {
  5. if (filter == null || typeof filter !== 'object') {
  6. return filter;
  7. }
  8. if (Array.isArray(filter)) {
  9. for (const subfilter of filter) {
  10. sanitizeFilter(subfilter);
  11. }
  12. return filter;
  13. }
  14. const filterKeys = Object.keys(filter);
  15. for (const key of filterKeys) {
  16. const value = filter[key];
  17. if (value != null && value[trustedSymbol]) {
  18. continue;
  19. }
  20. if (key === '$and' || key === '$or') {
  21. sanitizeFilter(value);
  22. continue;
  23. }
  24. if (hasDollarKeys(value)) {
  25. const keys = Object.keys(value);
  26. if (keys.length === 1 && keys[0] === '$eq') {
  27. continue;
  28. }
  29. filter[key] = { $eq: filter[key] };
  30. }
  31. }
  32. return filter;
  33. };