All files / src/query QueryParser.js

100% Statements 21/21
100% Branches 18/18
100% Functions 2/2
100% Lines 21/21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60                    108x     214x     108x 108x     108x   107x   106x   20x 20x       108x 108x   2x   106x 106x 106x 106x   37x   106x 106x         101x                 11x  
"use strict";
 
/**
 * Helper functionality for parsing query representes
 * in different formats into the one this package supports.
 */
class QueryParser
{
  constructor(config)
  {
    for (let property in config)
    {
      /** @private */
      this[property] = config[property];
    }
 
    this.fields = this.fields || {};
    this.sort = this.sort || [];
 
    // figure out a default field
    if (!this.fields[this.defaultField])
    {
      for (let [field, body] of Object.entries(this.fields))
      {
        if (body.default)
        {
          this.defaultField = field;
          break;
        }
      }
    }
    this.defaultField = this.defaultField || Object.keys(this.fields)[0];
    if (!this.fields[this.defaultField])
    {
      throw new Error('Could not determine default field');
    }
    const filters = this.fields[this.defaultField].filters;
    this.defaultFilter = filters[0];
    this.defaultExactFilter = this.defaultFilter + 'exact';
    if (filters.indexOf(this.defaultExactFilter) === -1)
    {
      this.defaultExactFilter = this.defaultFilter;
    }
    this.defaultSort = this.defaultSort || false;
    this.defaultSortOrder = this.defaultSortOrder || 'asc';
  }
 
  getDefault()
  {
    return {
      filter: [],
      sort: this.defaultSort,
      order: this.defaultSortOrder,
    };
  }
 
}
 
module.exports = QueryParser;