@@ -5,7 +5,7 @@ const escapeRegExp = str => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
55
66const parseValue = value => {
77 if ( ! value ) return '' ;
8- let trimmed = value . trim ( ) ;
8+ const trimmed = value . trim ( ) ;
99 if (
1010 ( trimmed . startsWith ( '"' ) && trimmed . endsWith ( '"' ) ) ||
1111 ( trimmed . startsWith ( "'" ) && trimmed . endsWith ( "'" ) )
@@ -39,7 +39,7 @@ export const parseScopedSearchQuery = queryString => {
3939 const query = queryString . trim ( ) ;
4040
4141 while ( currentPos < query . length ) {
42- let remainingQuery = query . substring ( currentPos ) . trim ( ) ;
42+ const remainingQuery = query . substring ( currentPos ) . trim ( ) ;
4343
4444 const logicalMatch = LOGICAL_OPERATORS . find ( op => {
4545 const pattern = new RegExp ( `^${ escapeRegExp ( op ) } \\s+` , 'i' ) ;
@@ -51,73 +51,73 @@ export const parseScopedSearchQuery = queryString => {
5151 while ( currentPos < query . length && query [ currentPos ] === ' ' ) {
5252 currentPos ++ ;
5353 }
54- continue ;
55- }
56-
57- let foundFilter = false ;
58-
59- for ( const operator of OPERATORS ) {
60- const operatorPattern = new RegExp (
61- `^([^\\s]+)\\s*${ escapeRegExp ( operator ) } \\s*` ,
62- 'i'
63- ) ;
64- const match = remainingQuery . match ( operatorPattern ) ;
65-
66- if ( match ) {
67- const field = match [ 1 ] ;
68- currentPos += match [ 0 ] . length ;
69-
70- let value = '' ;
71- remainingQuery = query . substring ( currentPos ) ;
72-
73- if ( remainingQuery [ 0 ] === '"' || remainingQuery [ 0 ] === "'" ) {
74- const quoteChar = remainingQuery [ 0 ] ;
75- let endQuotePos = 1 ;
76- while (
77- endQuotePos < remainingQuery . length &&
78- remainingQuery [ endQuotePos ] !== quoteChar
79- ) {
80- if (
81- remainingQuery [ endQuotePos ] === '\\' &&
82- endQuotePos + 1 < remainingQuery . length
54+ } else {
55+ let foundFilter = false ;
56+
57+ // eslint-disable-next-line no-unused-vars
58+ for ( const operator of OPERATORS ) {
59+ const operatorPattern = new RegExp (
60+ `^([^\\s]+)\\s*${ escapeRegExp ( operator ) } \\s*` ,
61+ 'i'
62+ ) ;
63+ const match = remainingQuery . match ( operatorPattern ) ;
64+
65+ if ( match ) {
66+ const field = match [ 1 ] ;
67+ currentPos += match [ 0 ] . length ;
68+
69+ let value = '' ;
70+ const valueQuery = query . substring ( currentPos ) ;
71+
72+ if ( valueQuery [ 0 ] === '"' || valueQuery [ 0 ] === "'" ) {
73+ const quoteChar = valueQuery [ 0 ] ;
74+ let endQuotePos = 1 ;
75+ while (
76+ endQuotePos < valueQuery . length &&
77+ valueQuery [ endQuotePos ] !== quoteChar
8378 ) {
84- endQuotePos += 2 ;
79+ if (
80+ valueQuery [ endQuotePos ] === '\\' &&
81+ endQuotePos + 1 < valueQuery . length
82+ ) {
83+ endQuotePos += 2 ;
84+ } else {
85+ endQuotePos ++ ;
86+ }
87+ }
88+ if ( endQuotePos < valueQuery . length ) {
89+ value = valueQuery . substring ( 0 , endQuotePos + 1 ) ;
90+ currentPos += endQuotePos + 1 ;
8591 } else {
86- endQuotePos ++ ;
92+ value = valueQuery . substring ( 0 , endQuotePos ) ;
93+ currentPos += endQuotePos ;
8794 }
88- }
89- if ( endQuotePos < remainingQuery . length ) {
90- value = remainingQuery . substring ( 0 , endQuotePos + 1 ) ;
91- currentPos += endQuotePos + 1 ;
9295 } else {
93- value = remainingQuery . substring ( 0 , endQuotePos ) ;
94- currentPos += endQuotePos ;
95- }
96- } else {
97- const valueMatch = remainingQuery . match ( / ^ ( [ ^ \s ] + ) / ) ;
98- if ( valueMatch ) {
99- value = valueMatch [ 1 ] ;
100- currentPos += value . length ;
96+ const valueMatch = valueQuery . match ( / ^ ( [ ^ \s ] + ) / ) ;
97+ if ( valueMatch ) {
98+ [ , value ] = valueMatch ;
99+ currentPos += value . length ;
100+ }
101101 }
102- }
103102
104- filters . push ( {
105- field,
106- operator,
107- value : parseValue ( value ) ,
108- } ) ;
103+ filters . push ( {
104+ field,
105+ operator,
106+ value : parseValue ( value ) ,
107+ } ) ;
109108
110- foundFilter = true ;
111- break ;
109+ foundFilter = true ;
110+ break ;
111+ }
112112 }
113- }
114113
115- if ( ! foundFilter ) {
116- currentPos ++ ;
117- }
114+ if ( ! foundFilter ) {
115+ currentPos ++ ;
116+ }
118117
119- while ( currentPos < query . length && query [ currentPos ] === ' ' ) {
120- currentPos ++ ;
118+ while ( currentPos < query . length && query [ currentPos ] === ' ' ) {
119+ currentPos ++ ;
120+ }
121121 }
122122 }
123123
@@ -130,8 +130,7 @@ export const convertFiltersToQuery = filters => {
130130 }
131131
132132 return filters
133- . map ( filter => {
134- const { field, operator, value } = filter ;
133+ . map ( ( { field, operator, value } ) => {
135134 if ( ! field || ! operator ) return '' ;
136135 return `${ field } ${ operator } ${ formatValue ( value ) } ` ;
137136 } )
@@ -159,9 +158,8 @@ export const updateFilterInQuery = (queryString, filterToUpdate, newFilter) => {
159158 return convertFiltersToQuery ( filters ) ;
160159} ;
161160
162- export const removeFilterFromQuery = ( queryString , filterToRemove ) => {
163- return updateFilterInQuery ( queryString , filterToRemove , null ) ;
164- } ;
161+ export const removeFilterFromQuery = ( queryString , filterToRemove ) =>
162+ updateFilterInQuery ( queryString , filterToRemove , null ) ;
165163
166164export const addFilterToQuery = ( queryString , newFilter ) => {
167165 const filters = parseScopedSearchQuery ( queryString ) ;
0 commit comments