-function searchAttribute (sourceField, targetField) {
- if (sourceField) {
- return {
- [targetField]: {
- [Op.iLike]: `%${sourceField}%`
- }
- }
- } else {
- return {}
- }
-}
-
-interface QueryStringFilterPrefixes {
- [key: string]: string | { prefix: string, handler: Function, multiple?: boolean }
-}
-
-function parseQueryStringFilter (q: string, prefixes: QueryStringFilterPrefixes): {
- search: string
- [key: string]: string | number | string[] | number[]
-} {
- const tokens = q // tokenize only if we have a querystring
- ? [].concat.apply([], q.split('"').map((v, i) => i % 2 ? v : v.split(' '))).filter(Boolean) // split by space unless using double quotes
- : []
-
- // TODO: when Typescript supports Object.fromEntries, replace with the Object method
- function fromEntries<T> (entries: [keyof T, T[keyof T]][]): T {
- return entries.reduce(
- (acc, [ key, value ]) => ({ ...acc, [key]: value }),
- {} as T
- )
- }
-
- const objectMap = (obj, fn) => fromEntries(
- Object.entries(obj).map(
- ([ k, v ], i) => [ k, fn(v, k, i) ]
- )
- )