From a7172b00d1cdc28ba22f0b6555a69f134c2d8321 Mon Sep 17 00:00:00 2001 From: tada5hi Date: Fri, 21 Oct 2022 19:54:39 +0200 Subject: [PATCH] fix: remove filter-value-config format --- src/parameter/filters/build.ts | 34 --------------- src/parameter/filters/type.ts | 15 ++----- src/parameter/filters/utils/operator.ts | 55 ------------------------- src/parameter/filters/utils/value.ts | 6 +-- test/unit/build.spec.ts | 50 ++++------------------ test/unit/filters.spec.ts | 24 ----------- 6 files changed, 14 insertions(+), 170 deletions(-) diff --git a/src/parameter/filters/build.ts b/src/parameter/filters/build.ts index ff8f44be..89e5f83b 100644 --- a/src/parameter/filters/build.ts +++ b/src/parameter/filters/build.ts @@ -8,20 +8,8 @@ import { merge } from 'smob'; import { ObjectLiteral } from '../../type'; import { FiltersBuildInput } from './type'; -import { FilterInputOperatorValue } from './constants'; -import { isFilterValueConfig } from './utils'; import { flattenNestedObject } from '../../utils'; -const OperatorWeight = { - [FilterInputOperatorValue.NEGATION]: 0, - [FilterInputOperatorValue.LIKE]: 50, - [FilterInputOperatorValue.LESS_THAN_EQUAL]: 150, - [FilterInputOperatorValue.LESS_THAN]: 450, - [FilterInputOperatorValue.MORE_THAN_EQUAL]: 1350, - [FilterInputOperatorValue.MORE_THAN]: 4050, - [FilterInputOperatorValue.IN]: 13105, -}; - export function buildQueryFilters( data?: FiltersBuildInput, ) : Record { @@ -44,28 +32,6 @@ export function buildQueryFilters( return true; } - if (isFilterValueConfig(input)) { - if (typeof input.value === 'undefined') { - input.value = null; - } - - if (Array.isArray(input.value)) { - // todo: check array elements are string - input.value = input.value.join(','); - } - - if (Array.isArray(input.operator)) { - // merge operators - input.operator = input.operator - .sort((a, b) => OperatorWeight[a] - OperatorWeight[b]) - .join('') as FilterInputOperatorValue; - } - - output[key] = `${input.operator}${input.value}`; - - return true; - } - return undefined; }, }); diff --git a/src/parameter/filters/type.ts b/src/parameter/filters/type.ts index 5d85aaab..9cd9681c 100644 --- a/src/parameter/filters/type.ts +++ b/src/parameter/filters/type.ts @@ -13,7 +13,7 @@ import { RelationsParseOutput } from '../relations'; import { ParseAllowedKeys, } from '../type'; -import { FilterComparisonOperator, FilterInputOperatorValue } from './constants'; +import { FilterComparisonOperator } from './constants'; // ----------------------------------------------------------- @@ -22,25 +22,18 @@ type FilterValueInput = FilterValueInputPrimitive | null | undefined; export type FilterValueSimple = V extends string | number ? (V | V[]) : V; export type FilterValueWithOperator = V extends string | number ? - `!${V}` | `!~${V}` | `~${V}` | `<${V}` | `<=${V}` | `>${V}` | `>=${V}` | null | '!null' : - V extends boolean ? null | '!null' : never; + V | `!${V}` | `!~${V}` | `~${V}` | `<${V}` | `<=${V}` | `>${V}` | `>=${V}` | null | '!null' : + V extends boolean ? V | null | '!null' : never; export type FilterValue = V extends string | number ? (FilterValueSimple | FilterValueWithOperator | Array>) : V; -export type FilterValueConfig = { - operator: `${FilterInputOperatorValue}` | (`${FilterInputOperatorValue}`)[]; - value: FilterValueSimple -}; - // ----------------------------------------------------------- // Build // ----------------------------------------------------------- -export type FiltersBuildInputValue = T extends OnlyScalar ? - T | FilterValue | FilterValueConfig : - never; +export type FiltersBuildInputValue = T extends OnlyScalar ? T | FilterValue : never; export type FiltersBuildInput> = { [K in keyof T]?: Flatten extends Record ? diff --git a/src/parameter/filters/utils/operator.ts b/src/parameter/filters/utils/operator.ts index 4316cce3..d2b02ac6 100644 --- a/src/parameter/filters/utils/operator.ts +++ b/src/parameter/filters/utils/operator.ts @@ -5,9 +5,7 @@ * view the LICENSE file that was distributed with this source code. */ -import { hasOwnProperty, isSimpleValue } from '../../../utils'; import { FilterComparisonOperator, FilterInputOperatorValue } from '../constants'; -import { FilterValueConfig } from '../type'; function matchOperator(key: string, value: string, position: 'start' | 'end' | 'global') : string | undefined { switch (position) { @@ -98,56 +96,3 @@ export function parseFilterValue(input: string) : { FilterComparisonOperator.EQUAL, }; } - -export function isFilterValueConfig(data: unknown) : data is FilterValueConfig { - if (typeof data !== 'object' || data === null) { - return false; - } - - if (hasOwnProperty(data, 'operator')) { - const operators : string[] = Object.values(FilterInputOperatorValue); - - if (typeof data.operator === 'string') { - if (operators.indexOf(data.operator) === -1) { - return false; - } - } else if (Array.isArray(data.operator)) { - for (let i = 0; i < data.operator.length; i++) { - if (typeof data.operator[i] !== 'string') { - return false; - } - - if (operators.indexOf(data.operator[i]) === -1) { - return false; - } - } - } else { - return false; - } - } else { - return false; - } - - if (hasOwnProperty(data, 'value')) { - if ( - !isSimpleValue(data.value, { - withNull: true, - withUndefined: true, - }) - ) { - if (Array.isArray(data.value)) { - for (let i = 0; i < data.value.length; i++) { - if (!isSimpleValue(data.value[i])) { - return false; - } - } - } else { - return false; - } - } - } else { - return false; - } - - return true; -} diff --git a/src/parameter/filters/utils/value.ts b/src/parameter/filters/utils/value.ts index 4e2c53c0..00c58739 100644 --- a/src/parameter/filters/utils/value.ts +++ b/src/parameter/filters/utils/value.ts @@ -5,9 +5,9 @@ * view the LICENSE file that was distributed with this source code. */ -import { FilterValue } from '../type'; +import { FilterValue, FilterValueSimple } from '../type'; -export function transformFilterValue(input: FilterValue) : FilterValue { +export function transformFilterValue(input: FilterValue) : FilterValueSimple { if (typeof input === 'string') { const lower = input.trim().toLowerCase(); @@ -40,7 +40,7 @@ export function transformFilterValue(input: FilterValue) : FilterValue { } return (input as unknown[]) - .filter((n) => n === 0 || !!n) as FilterValue; + .filter((n) => n === 0 || !!n) as FilterValueSimple; } if (typeof input === 'undefined' || input === null) { diff --git a/test/unit/build.spec.ts b/test/unit/build.spec.ts index 14375954..781129e0 100644 --- a/test/unit/build.spec.ts +++ b/test/unit/build.spec.ts @@ -6,7 +6,7 @@ */ import { - FilterInputOperatorValue, Parameter, SortDirection, URLParameter, buildQuery, DEFAULT_ID, + Parameter, SortDirection, URLParameter, buildQuery, DEFAULT_ID, } from '../../src'; import { buildURLQueryString } from '../../src/utils'; @@ -97,10 +97,7 @@ describe('src/build.ts', () => { record = buildQuery({ filter: { - id: { - operator: FilterInputOperatorValue.LIKE, - value: 1, - }, + id: '~1', }, }); expect(record).toEqual(buildURLQueryString({ [URLParameter.FILTERS]: { id: '~1' } })); @@ -108,10 +105,7 @@ describe('src/build.ts', () => { // with lessThan record = buildQuery({ filter: { - id: { - operator: FilterInputOperatorValue.LESS_THAN, - value: 1, - }, + id: '<1', }, }); expect(record).toEqual(buildURLQueryString({ [URLParameter.FILTERS]: { id: '<1' } })); @@ -119,10 +113,7 @@ describe('src/build.ts', () => { // with lessThanEqual record = buildQuery({ filter: { - id: { - operator: FilterInputOperatorValue.LESS_THAN_EQUAL, - value: 1, - }, + id: '<=1', }, }); expect(record).toEqual(buildURLQueryString({ [URLParameter.FILTERS]: { id: '<=1' } })); @@ -130,10 +121,7 @@ describe('src/build.ts', () => { // with moreThan record = buildQuery({ filter: { - id: { - operator: FilterInputOperatorValue.MORE_THAN, - value: 1, - }, + id: '>1', }, }); expect(record).toEqual(buildURLQueryString({ [URLParameter.FILTERS]: { id: '>1' } })); @@ -141,10 +129,7 @@ describe('src/build.ts', () => { // with moreThanEqual record = buildQuery({ filter: { - id: { - operator: FilterInputOperatorValue.MORE_THAN_EQUAL, - value: 1, - }, + id: '>=1', }, }); expect(record).toEqual(buildURLQueryString({ [URLParameter.FILTERS]: { id: '>=1' } })); @@ -160,30 +145,9 @@ describe('src/build.ts', () => { // with negation & like operator record = buildQuery({ filter: { - id: { - operator: [ - FilterInputOperatorValue.NEGATION, - FilterInputOperatorValue.LIKE, - ], - value: [1, 2, 3], - }, - }, - }); - expect(record).toEqual(buildURLQueryString({ [URLParameter.FILTERS]: { id: '!~1,2,3' } })); - - // with wrong operator order :) - record = buildQuery({ - filter: { - id: { - operator: [ - FilterInputOperatorValue.LIKE, - FilterInputOperatorValue.NEGATION, - ], - value: [1, 2, 3], - }, + id: ['!~1', 2, 3], }, }); - expect(record).toEqual(buildURLQueryString({ [URLParameter.FILTERS]: { id: '!~1,2,3' } })); }); diff --git a/test/unit/filters.spec.ts b/test/unit/filters.spec.ts index 8bd9083e..1a16fa4f 100644 --- a/test/unit/filters.spec.ts +++ b/test/unit/filters.spec.ts @@ -6,7 +6,6 @@ */ import { - isFilterValueConfig, FiltersParseOptions, FiltersParseOutput, parseQueryFilters, @@ -385,27 +384,4 @@ describe('src/filter/index.ts', () => { }, ] as FiltersParseOutput); }); - - it('should determine filter operator config', () => { - let data = isFilterValueConfig({ - value: 1, - operator: '<' - }); - - expect(data).toBeTruthy(); - - data = isFilterValueConfig({ - value: 1, - operator: {} - }) - - expect(data).toBeFalsy(); - - data = isFilterValueConfig({ - value: {}, - operator: '<' - }); - - expect(data).toBeFalsy(); - }) });