From 923f5f73091fe08f02d176b6895c2d95f78a92d1 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Mon, 14 Sep 2026 15:23:56 +0700 Subject: [PATCH 01/12] feat: Add the date filter any-approval --- src/CONST/index.ts | 2 + src/components/Search/types.ts | 1 + src/hooks/useAdvancedSearchFilters.ts | 11 +- src/hooks/useAutocompleteSuggestions.ts | 1 + src/languages/de.ts | 1 + src/languages/el.ts | 1 + src/languages/en.ts | 1 + src/languages/es.ts | 1 + src/languages/fr.ts | 1 + src/languages/it.ts | 1 + src/languages/ja.ts | 1 + src/languages/nl.ts | 1 + src/languages/pl.ts | 1 + src/languages/pt-BR.ts | 1 + src/languages/zh-hans.ts | 1 + src/libs/SearchAutocompleteUtils.ts | 1 + src/libs/SearchParser/autocompleteParser.js | 1090 +++++++++-------- .../SearchParser/autocompleteParser.peggy | 1 + src/libs/SearchParser/baseRules.peggy | 3 + src/libs/SearchParser/searchParser.js | 1088 ++++++++-------- src/libs/SearchParser/searchParser.peggy | 1 + src/libs/SearchUIUtils.ts | 9 + src/types/form/SearchAdvancedFiltersForm.ts | 33 + tests/unit/Search/SearchQueryUtilsTest.ts | 113 ++ tests/unit/SearchAutocompleteParserTest.ts | 28 + tests/unit/SearchParserTest.ts | 78 ++ .../hooks/useAutocompleteSuggestions.test.ts | 13 + 27 files changed, 1438 insertions(+), 1046 deletions(-) diff --git a/src/CONST/index.ts b/src/CONST/index.ts index 8c12f8a3cfc6..7a534f6cfb86 100644 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -7822,6 +7822,7 @@ const CONST = { IN: 'in', SUBMITTED: 'submitted', APPROVED: 'approved', + ANY_APPROVAL: 'any-approval', PAID: 'paid', EXPORTED: 'exported', POSTED: 'posted', @@ -7908,6 +7909,7 @@ const CONST = { IN: 'in', SUBMITTED: 'submitted', APPROVED: 'approved', + ANY_APPROVAL: 'any-approval', PAID: 'paid', EXPORTED: 'exported', POSTED: 'posted', diff --git a/src/components/Search/types.ts b/src/components/Search/types.ts index 73b599f5478e..aca4fd9d4738 100644 --- a/src/components/Search/types.ts +++ b/src/components/Search/types.ts @@ -337,6 +337,7 @@ type SearchDateFilterKeys = | typeof CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE | typeof CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED | typeof CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED + | typeof CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL | typeof CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID | typeof CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED | typeof CONST.SEARCH.SYNTAX_FILTER_KEYS.POSTED diff --git a/src/hooks/useAdvancedSearchFilters.ts b/src/hooks/useAdvancedSearchFilters.ts index 80df206ddea3..274818d1afd0 100644 --- a/src/hooks/useAdvancedSearchFilters.ts +++ b/src/hooks/useAdvancedSearchFilters.ts @@ -62,6 +62,7 @@ const typeFiltersKeys = { [ CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED, CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED, + CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED, CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED_TO, CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID, @@ -100,7 +101,13 @@ const typeFiltersKeys = { CONST.SEARCH.SYNTAX_FILTER_KEYS.ORDER_DEAL_NUMBERS, CONST.SEARCH.SYNTAX_FILTER_KEYS.KEYWORD, ], - [CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED, CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED, CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED, CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID], + [ + CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED, + CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED, + CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, + CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED, + CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID, + ], [ CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWAL_ID, CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWAL_TYPE, @@ -134,6 +141,7 @@ const typeFiltersKeys = { [ CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED, CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED, + CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED, CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID, CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID_BY, @@ -175,6 +183,7 @@ const typeFiltersKeys = { [ CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED, CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED, + CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED, CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED_TO, CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID, diff --git a/src/hooks/useAutocompleteSuggestions.ts b/src/hooks/useAutocompleteSuggestions.ts index 00f9b9c332f5..e2ffc95edc82 100644 --- a/src/hooks/useAutocompleteSuggestions.ts +++ b/src/hooks/useAutocompleteSuggestions.ts @@ -618,6 +618,7 @@ function useAutocompleteSuggestions({ case CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE: case CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED: case CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED: + case CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL: case CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID: case CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED: case CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWN: diff --git a/src/languages/de.ts b/src/languages/de.ts index 8401d1596967..590632c6c7ed 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -9553,6 +9553,7 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc past: 'Vergangenes', submitted: 'Eingereicht', approved: 'Genehmigt', + anyApproval: 'Beliebige Genehmigung', firstApprover: 'Erste:r Genehmiger:in', firstApproved: 'Zuerst genehmigt', paidBy: 'Bezahlt von', diff --git a/src/languages/el.ts b/src/languages/el.ts index ee582c483be2..7d3a42151e60 100644 --- a/src/languages/el.ts +++ b/src/languages/el.ts @@ -9758,6 +9758,7 @@ ${reportName}`, past: 'Παρελθόν', submitted: 'Υποβλήθηκε', approved: 'Εγκρίθηκε', + anyApproval: 'Οποιαδήποτε έγκριση', firstApprover: 'Πρώτος εγκρίνων', firstApproved: 'Πρώτη έγκριση', paidBy: 'Πληρώθηκε από', diff --git a/src/languages/en.ts b/src/languages/en.ts index ae8676e96fc7..f15dad93451d 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -9701,6 +9701,7 @@ const translations = { past: 'Past', submitted: 'Submitted', approved: 'Approved', + anyApproval: 'Any approval', firstApprover: 'First approver', firstApproved: 'First approved', paidBy: 'Paid by', diff --git a/src/languages/es.ts b/src/languages/es.ts index e8f4094813d5..692894d33cdc 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -9420,6 +9420,7 @@ ${reportName}`, past: 'Anterior', submitted: 'Envío', approved: 'Aprobación', + anyApproval: 'Cualquier aprobación', firstApprover: 'Primer aprobador', firstApproved: 'Primera aprobación', paidBy: 'Pagado por', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index c57e018546c4..e7acaaebe625 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -9573,6 +9573,7 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e past: 'Passé', submitted: 'Soumis', approved: 'Approuvé', + anyApproval: 'Toute approbation', firstApprover: 'Premier approbateur', firstApproved: 'Approuvé en premier', paidBy: 'Payé par', diff --git a/src/languages/it.ts b/src/languages/it.ts index 99ae8352bfc0..20d4e72139fa 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -9511,6 +9511,7 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`, past: 'Passato', submitted: 'Inviato', approved: 'Approvato', + anyApproval: 'Qualsiasi approvazione', firstApprover: 'Primo approvatore', firstApproved: 'Approvato per primo', paidBy: 'Pagato da', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index c0450874eb61..dd0c45d8696e 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -9388,6 +9388,7 @@ ${reportName}`, past: '過去', submitted: '送信済み', approved: '承認済み', + anyApproval: '任意の承認', firstApprover: '最初の承認者', firstApproved: '最初に承認済み', paidBy: '支払者', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 510de3dc2229..f8891b74d97f 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -9479,6 +9479,7 @@ er bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`, past: 'Verleden', submitted: 'Ingediend', approved: 'Goedgekeurd', + anyApproval: 'Elke goedkeuring', firstApprover: 'Eerste gemachtigde', firstApproved: 'Eerst goedgekeurd', paidBy: 'Betaald door', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 9403c8a34383..af8d3299dee4 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -9502,6 +9502,7 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`, past: 'Przeszłe', submitted: 'Przesłano', approved: 'Zatwierdzono', + anyApproval: 'Dowolna akceptacja', firstApprover: 'Pierwszy zatwierdzający', firstApproved: 'Najpierw zatwierdzono', paidBy: 'Zapłacone przez', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 7cde0d05774a..a0f8100eb826 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -9479,6 +9479,7 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`, past: 'Passado', submitted: 'Enviado', approved: 'Aprovado', + anyApproval: 'Qualquer aprovação', firstApprover: 'Primeira pessoa aprovadora', firstApproved: 'Primeira aprovada', paidBy: 'Pago por', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index e4c4427028c2..a4103ad5d42c 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -9140,6 +9140,7 @@ ${reportName}`, past: '过去', submitted: '已提交', approved: '已批准', + anyApproval: '任何批准', firstApprover: '首位审批人', firstApproved: '首次批准', paidBy: '付款人', diff --git a/src/libs/SearchAutocompleteUtils.ts b/src/libs/SearchAutocompleteUtils.ts index 049fe93d181b..30d96b74da75 100644 --- a/src/libs/SearchAutocompleteUtils.ts +++ b/src/libs/SearchAutocompleteUtils.ts @@ -244,6 +244,7 @@ function filterOutRangesWithCorrectValue( case CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE: case CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED: case CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED: + case CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL: case CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID: case CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED: case CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWN: diff --git a/src/libs/SearchParser/autocompleteParser.js b/src/libs/SearchParser/autocompleteParser.js index 61d1cdd36444..435b1a54b6f6 100644 --- a/src/libs/SearchParser/autocompleteParser.js +++ b/src/libs/SearchParser/autocompleteParser.js @@ -237,75 +237,77 @@ function peg$parse(input, options) { var peg$c51 = "workspace"; var peg$c52 = "submitted"; var peg$c53 = "approved"; - var peg$c54 = "paid"; - var peg$c55 = "exported"; - var peg$c56 = "posted"; - var peg$c57 = "withdrawn"; - var peg$c58 = "groupby"; - var peg$c59 = "group-by"; - var peg$c60 = "limit"; - var peg$c61 = "feed"; - var peg$c62 = "title"; - var peg$c63 = "submitteruserid"; - var peg$c64 = "submitter-user-id"; - var peg$c65 = "submitterpayrollid"; - var peg$c66 = "submitter-payroll-id"; - var peg$c67 = "orderdealnumbers"; - var peg$c68 = "order-deal-numbers"; - var peg$c69 = "assignee"; - var peg$c70 = "createdby"; - var peg$c71 = "created-by"; - var peg$c72 = "action"; - var peg$c73 = "total"; - var peg$c74 = "has"; - var peg$c75 = "is"; - var peg$c76 = "purchaseamount"; - var peg$c77 = "purchase-amount"; - var peg$c78 = "purchasecurrency"; - var peg$c79 = "purchase-currency"; - var peg$c80 = "amountdebited"; - var peg$c81 = "amount-debited"; - var peg$c82 = "amountreimbursed"; - var peg$c83 = "amount-reimbursed"; - var peg$c84 = "columns"; - var peg$c85 = "view"; - var peg$c86 = "per-diem"; - var peg$c87 = "drafts"; - var peg$c88 = "draft"; - var peg$c89 = "tax"; - var peg$c90 = "policy-name"; - var peg$c91 = "long-report-id"; - var peg$c92 = "exported-to"; - var peg$c93 = "exportedto"; - var peg$c94 = "exchange-rate"; - var peg$c95 = "reimbursable-total"; - var peg$c96 = "non-reimbursable-total"; - var peg$c97 = "group-from"; - var peg$c98 = "group-expenses"; - var peg$c99 = "group-total"; - var peg$c100 = "group-card"; - var peg$c101 = "group-feed"; - var peg$c102 = "group-bank-account"; - var peg$c103 = "group-withdrawn"; - var peg$c104 = "group-withdrawal-id"; - var peg$c105 = "group-amount-debited"; - var peg$c106 = "group-amount-reimbursed"; - var peg$c107 = "group-category"; - var peg$c108 = "group-tag"; - var peg$c109 = "group-merchant"; - var peg$c110 = "group-month"; - var peg$c111 = "group-week"; - var peg$c112 = "group-year"; - var peg$c113 = "group-quarter"; - var peg$c114 = "!="; - var peg$c115 = ">="; - var peg$c116 = ">"; - var peg$c117 = "<="; - var peg$c118 = "<"; - var peg$c119 = "\\"; - var peg$c120 = "\u201C"; - var peg$c121 = "\u201D"; - var peg$c122 = "\""; + var peg$c54 = "any-approval"; + var peg$c55 = "anyapproval"; + var peg$c56 = "paid"; + var peg$c57 = "exported"; + var peg$c58 = "posted"; + var peg$c59 = "withdrawn"; + var peg$c60 = "groupby"; + var peg$c61 = "group-by"; + var peg$c62 = "limit"; + var peg$c63 = "feed"; + var peg$c64 = "title"; + var peg$c65 = "submitteruserid"; + var peg$c66 = "submitter-user-id"; + var peg$c67 = "submitterpayrollid"; + var peg$c68 = "submitter-payroll-id"; + var peg$c69 = "orderdealnumbers"; + var peg$c70 = "order-deal-numbers"; + var peg$c71 = "assignee"; + var peg$c72 = "createdby"; + var peg$c73 = "created-by"; + var peg$c74 = "action"; + var peg$c75 = "total"; + var peg$c76 = "has"; + var peg$c77 = "is"; + var peg$c78 = "purchaseamount"; + var peg$c79 = "purchase-amount"; + var peg$c80 = "purchasecurrency"; + var peg$c81 = "purchase-currency"; + var peg$c82 = "amountdebited"; + var peg$c83 = "amount-debited"; + var peg$c84 = "amountreimbursed"; + var peg$c85 = "amount-reimbursed"; + var peg$c86 = "columns"; + var peg$c87 = "view"; + var peg$c88 = "per-diem"; + var peg$c89 = "drafts"; + var peg$c90 = "draft"; + var peg$c91 = "tax"; + var peg$c92 = "policy-name"; + var peg$c93 = "long-report-id"; + var peg$c94 = "exported-to"; + var peg$c95 = "exportedto"; + var peg$c96 = "exchange-rate"; + var peg$c97 = "reimbursable-total"; + var peg$c98 = "non-reimbursable-total"; + var peg$c99 = "group-from"; + var peg$c100 = "group-expenses"; + var peg$c101 = "group-total"; + var peg$c102 = "group-card"; + var peg$c103 = "group-feed"; + var peg$c104 = "group-bank-account"; + var peg$c105 = "group-withdrawn"; + var peg$c106 = "group-withdrawal-id"; + var peg$c107 = "group-amount-debited"; + var peg$c108 = "group-amount-reimbursed"; + var peg$c109 = "group-category"; + var peg$c110 = "group-tag"; + var peg$c111 = "group-merchant"; + var peg$c112 = "group-month"; + var peg$c113 = "group-week"; + var peg$c114 = "group-year"; + var peg$c115 = "group-quarter"; + var peg$c116 = "!="; + var peg$c117 = ">="; + var peg$c118 = ">"; + var peg$c119 = "<="; + var peg$c120 = "<"; + var peg$c121 = "\\"; + var peg$c122 = "\u201C"; + var peg$c123 = "\u201D"; + var peg$c124 = "\""; var peg$r0 = /^[ \t\r\n\xA0,:=<>!]/; var peg$r1 = /^[:=]/; @@ -379,92 +381,94 @@ function peg$parse(input, options) { var peg$e54 = peg$literalExpectation("workspace", true); var peg$e55 = peg$literalExpectation("submitted", true); var peg$e56 = peg$literalExpectation("approved", true); - var peg$e57 = peg$literalExpectation("paid", true); - var peg$e58 = peg$literalExpectation("exported", true); - var peg$e59 = peg$literalExpectation("posted", true); - var peg$e60 = peg$literalExpectation("withdrawn", true); - var peg$e61 = peg$literalExpectation("groupBy", true); - var peg$e62 = peg$literalExpectation("group-by", true); - var peg$e63 = peg$literalExpectation("limit", true); - var peg$e64 = peg$literalExpectation("feed", true); - var peg$e65 = peg$literalExpectation("title", true); - var peg$e66 = peg$literalExpectation("submitterUserID", true); - var peg$e67 = peg$literalExpectation("submitter-user-id", true); - var peg$e68 = peg$literalExpectation("submitterPayrollID", true); - var peg$e69 = peg$literalExpectation("submitter-payroll-id", true); - var peg$e70 = peg$literalExpectation("orderDealNumbers", true); - var peg$e71 = peg$literalExpectation("order-deal-numbers", true); - var peg$e72 = peg$literalExpectation("assignee", true); - var peg$e73 = peg$literalExpectation("createdBy", true); - var peg$e74 = peg$literalExpectation("created-by", true); - var peg$e75 = peg$literalExpectation("action", true); - var peg$e76 = peg$literalExpectation("total", true); - var peg$e77 = peg$literalExpectation("has", true); - var peg$e78 = peg$literalExpectation("is", true); - var peg$e79 = peg$literalExpectation("purchaseAmount", true); - var peg$e80 = peg$literalExpectation("purchase-amount", true); - var peg$e81 = peg$literalExpectation("purchaseCurrency", true); - var peg$e82 = peg$literalExpectation("purchase-currency", true); - var peg$e83 = peg$literalExpectation("amountDebited", true); - var peg$e84 = peg$literalExpectation("amount-debited", true); - var peg$e85 = peg$literalExpectation("amountReimbursed", true); - var peg$e86 = peg$literalExpectation("amount-reimbursed", true); - var peg$e87 = peg$literalExpectation("columns", true); - var peg$e88 = peg$literalExpectation("view", true); - var peg$e89 = peg$literalExpectation("per-diem", true); - var peg$e90 = peg$literalExpectation("drafts", true); - var peg$e91 = peg$literalExpectation("draft", true); - var peg$e92 = peg$literalExpectation("tax", true); - var peg$e93 = peg$literalExpectation("policy-name", true); - var peg$e94 = peg$literalExpectation("long-report-id", true); - var peg$e95 = peg$literalExpectation("exported-to", true); - var peg$e96 = peg$classExpectation([":", "="], false, false); - var peg$e97 = peg$literalExpectation("exportedTo", true); - var peg$e98 = peg$literalExpectation("exchange-rate", true); - var peg$e99 = peg$literalExpectation("reimbursable-total", true); - var peg$e100 = peg$literalExpectation("non-reimbursable-total", true); - var peg$e101 = peg$literalExpectation("group-from", true); - var peg$e102 = peg$literalExpectation("group-expenses", true); - var peg$e103 = peg$literalExpectation("group-total", true); - var peg$e104 = peg$literalExpectation("group-card", true); - var peg$e105 = peg$literalExpectation("group-feed", true); - var peg$e106 = peg$literalExpectation("group-bank-account", true); - var peg$e107 = peg$literalExpectation("group-withdrawn", true); - var peg$e108 = peg$literalExpectation("group-withdrawal-id", true); - var peg$e109 = peg$literalExpectation("group-amount-debited", true); - var peg$e110 = peg$literalExpectation("group-amount-reimbursed", true); - var peg$e111 = peg$literalExpectation("group-category", true); - var peg$e112 = peg$literalExpectation("group-tag", true); - var peg$e113 = peg$literalExpectation("group-merchant", true); - var peg$e114 = peg$literalExpectation("group-month", true); - var peg$e115 = peg$literalExpectation("group-week", true); - var peg$e116 = peg$literalExpectation("group-year", true); - var peg$e117 = peg$literalExpectation("group-quarter", true); - var peg$e118 = peg$otherExpectation("operator"); - var peg$e119 = peg$literalExpectation("!=", false); - var peg$e120 = peg$literalExpectation(">=", false); - var peg$e121 = peg$literalExpectation(">", false); - var peg$e122 = peg$literalExpectation("<=", false); - var peg$e123 = peg$literalExpectation("<", false); - var peg$e124 = peg$literalExpectation("\\", false); - var peg$e125 = peg$classExpectation([",", "\"", "\u201D", "\u201C", "\\"], false, false); - var peg$e126 = peg$otherExpectation("word"); - var peg$e127 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e128 = peg$otherExpectation("whitespace"); - var peg$e129 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); - var peg$e130 = peg$otherExpectation("quote"); - var peg$e131 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e132 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); - var peg$e133 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); - var peg$e134 = peg$literalExpectation("\u201C", false); - var peg$e135 = peg$literalExpectation("\u201D", false); - var peg$e136 = peg$literalExpectation("\"", false); - var peg$e137 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e138 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e139 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); - var peg$e140 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); - var peg$e141 = peg$classExpectation([","], false, false); - var peg$e142 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ","], false, false); + var peg$e57 = peg$literalExpectation("any-approval", true); + var peg$e58 = peg$literalExpectation("anyApproval", true); + var peg$e59 = peg$literalExpectation("paid", true); + var peg$e60 = peg$literalExpectation("exported", true); + var peg$e61 = peg$literalExpectation("posted", true); + var peg$e62 = peg$literalExpectation("withdrawn", true); + var peg$e63 = peg$literalExpectation("groupBy", true); + var peg$e64 = peg$literalExpectation("group-by", true); + var peg$e65 = peg$literalExpectation("limit", true); + var peg$e66 = peg$literalExpectation("feed", true); + var peg$e67 = peg$literalExpectation("title", true); + var peg$e68 = peg$literalExpectation("submitterUserID", true); + var peg$e69 = peg$literalExpectation("submitter-user-id", true); + var peg$e70 = peg$literalExpectation("submitterPayrollID", true); + var peg$e71 = peg$literalExpectation("submitter-payroll-id", true); + var peg$e72 = peg$literalExpectation("orderDealNumbers", true); + var peg$e73 = peg$literalExpectation("order-deal-numbers", true); + var peg$e74 = peg$literalExpectation("assignee", true); + var peg$e75 = peg$literalExpectation("createdBy", true); + var peg$e76 = peg$literalExpectation("created-by", true); + var peg$e77 = peg$literalExpectation("action", true); + var peg$e78 = peg$literalExpectation("total", true); + var peg$e79 = peg$literalExpectation("has", true); + var peg$e80 = peg$literalExpectation("is", true); + var peg$e81 = peg$literalExpectation("purchaseAmount", true); + var peg$e82 = peg$literalExpectation("purchase-amount", true); + var peg$e83 = peg$literalExpectation("purchaseCurrency", true); + var peg$e84 = peg$literalExpectation("purchase-currency", true); + var peg$e85 = peg$literalExpectation("amountDebited", true); + var peg$e86 = peg$literalExpectation("amount-debited", true); + var peg$e87 = peg$literalExpectation("amountReimbursed", true); + var peg$e88 = peg$literalExpectation("amount-reimbursed", true); + var peg$e89 = peg$literalExpectation("columns", true); + var peg$e90 = peg$literalExpectation("view", true); + var peg$e91 = peg$literalExpectation("per-diem", true); + var peg$e92 = peg$literalExpectation("drafts", true); + var peg$e93 = peg$literalExpectation("draft", true); + var peg$e94 = peg$literalExpectation("tax", true); + var peg$e95 = peg$literalExpectation("policy-name", true); + var peg$e96 = peg$literalExpectation("long-report-id", true); + var peg$e97 = peg$literalExpectation("exported-to", true); + var peg$e98 = peg$classExpectation([":", "="], false, false); + var peg$e99 = peg$literalExpectation("exportedTo", true); + var peg$e100 = peg$literalExpectation("exchange-rate", true); + var peg$e101 = peg$literalExpectation("reimbursable-total", true); + var peg$e102 = peg$literalExpectation("non-reimbursable-total", true); + var peg$e103 = peg$literalExpectation("group-from", true); + var peg$e104 = peg$literalExpectation("group-expenses", true); + var peg$e105 = peg$literalExpectation("group-total", true); + var peg$e106 = peg$literalExpectation("group-card", true); + var peg$e107 = peg$literalExpectation("group-feed", true); + var peg$e108 = peg$literalExpectation("group-bank-account", true); + var peg$e109 = peg$literalExpectation("group-withdrawn", true); + var peg$e110 = peg$literalExpectation("group-withdrawal-id", true); + var peg$e111 = peg$literalExpectation("group-amount-debited", true); + var peg$e112 = peg$literalExpectation("group-amount-reimbursed", true); + var peg$e113 = peg$literalExpectation("group-category", true); + var peg$e114 = peg$literalExpectation("group-tag", true); + var peg$e115 = peg$literalExpectation("group-merchant", true); + var peg$e116 = peg$literalExpectation("group-month", true); + var peg$e117 = peg$literalExpectation("group-week", true); + var peg$e118 = peg$literalExpectation("group-year", true); + var peg$e119 = peg$literalExpectation("group-quarter", true); + var peg$e120 = peg$otherExpectation("operator"); + var peg$e121 = peg$literalExpectation("!=", false); + var peg$e122 = peg$literalExpectation(">=", false); + var peg$e123 = peg$literalExpectation(">", false); + var peg$e124 = peg$literalExpectation("<=", false); + var peg$e125 = peg$literalExpectation("<", false); + var peg$e126 = peg$literalExpectation("\\", false); + var peg$e127 = peg$classExpectation([",", "\"", "\u201D", "\u201C", "\\"], false, false); + var peg$e128 = peg$otherExpectation("word"); + var peg$e129 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e130 = peg$otherExpectation("whitespace"); + var peg$e131 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); + var peg$e132 = peg$otherExpectation("quote"); + var peg$e133 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e134 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); + var peg$e135 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); + var peg$e136 = peg$literalExpectation("\u201C", false); + var peg$e137 = peg$literalExpectation("\u201D", false); + var peg$e138 = peg$literalExpectation("\"", false); + var peg$e139 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e140 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e141 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); + var peg$e142 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); + var peg$e143 = peg$classExpectation([","], false, false); + var peg$e144 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ","], false, false); var peg$f0 = function(ranges) { return { autocomplete, ranges }; }; var peg$f1 = function(filters) { return filters.filter(Boolean).flat(); }; @@ -564,95 +568,97 @@ function peg$parse(input, options) { var peg$f40 = function() { return "policyID"; }; var peg$f41 = function() { return "submitted"; }; var peg$f42 = function() { return "approved"; }; - var peg$f43 = function() { return "paid"; }; - var peg$f44 = function() { return "exported"; }; - var peg$f45 = function() { return "posted"; }; - var peg$f46 = function() { return "withdrawn"; }; - var peg$f47 = function() { return "groupBy"; }; - var peg$f48 = function() { return "limit"; }; - var peg$f49 = function() { return "feed"; }; - var peg$f50 = function() { return "title"; }; - var peg$f51 = function() { return "submitterUserID"; }; - var peg$f52 = function() { return "submitterPayrollID"; }; - var peg$f53 = function() { return "orderDealNumbers"; }; - var peg$f54 = function() { return "assignee"; }; - var peg$f55 = function() { return "createdBy"; }; - var peg$f56 = function() { return "action"; }; - var peg$f57 = function() {return "total"; }; - var peg$f58 = function() {return "has"; }; - var peg$f59 = function() {return "is"; }; - var peg$f60 = function() {return "purchaseAmount"}; - var peg$f61 = function() {return "purchaseCurrency"}; - var peg$f62 = function() {return "amountDebited"}; - var peg$f63 = function() {return "amountReimbursed"}; - var peg$f64 = function() { + var peg$f43 = function() { return "any-approval"; }; + var peg$f44 = function() { return "any-approval"; }; + var peg$f45 = function() { return "paid"; }; + var peg$f46 = function() { return "exported"; }; + var peg$f47 = function() { return "posted"; }; + var peg$f48 = function() { return "withdrawn"; }; + var peg$f49 = function() { return "groupBy"; }; + var peg$f50 = function() { return "limit"; }; + var peg$f51 = function() { return "feed"; }; + var peg$f52 = function() { return "title"; }; + var peg$f53 = function() { return "submitterUserID"; }; + var peg$f54 = function() { return "submitterPayrollID"; }; + var peg$f55 = function() { return "orderDealNumbers"; }; + var peg$f56 = function() { return "assignee"; }; + var peg$f57 = function() { return "createdBy"; }; + var peg$f58 = function() { return "action"; }; + var peg$f59 = function() {return "total"; }; + var peg$f60 = function() {return "has"; }; + var peg$f61 = function() {return "is"; }; + var peg$f62 = function() {return "purchaseAmount"}; + var peg$f63 = function() {return "purchaseCurrency"}; + var peg$f64 = function() {return "amountDebited"}; + var peg$f65 = function() {return "amountReimbursed"}; + var peg$f66 = function() { isColumnsContext = true; return "columns"; }; - var peg$f65 = function() {return "view"}; - var peg$f66 = function() { return isColumnsContext; }; - var peg$f67 = function() { return "perDiem"; }; - var peg$f68 = function() { return "drafts"; }; - var peg$f69 = function() { return "originalamount"; }; - var peg$f70 = function() { return "taxAmount"; }; - var peg$f71 = function() { return "taxrate"; }; - var peg$f72 = function() { return "policyname"; }; - var peg$f73 = function() { return "withdrawalID"; }; - var peg$f74 = function() { return "bankAccount"; }; - var peg$f75 = function() { return "reportID"; }; - var peg$f76 = function() { return "base62ReportID"; }; - var peg$f77 = function() { return "exportedto"; }; - var peg$f78 = function() { return "exportedTo"; }; - var peg$f79 = function() { return "exportedTo"; }; - var peg$f80 = function() { return "exchangeRate"; }; - var peg$f81 = function() { return "reimbursableTotal"; }; - var peg$f82 = function() { return "nonReimbursableTotal"; }; - var peg$f83 = function() { return "groupFrom"; }; - var peg$f84 = function() { return "groupExpenses"; }; - var peg$f85 = function() { return "groupTotal"; }; - var peg$f86 = function() { return "groupCard"; }; - var peg$f87 = function() { return "groupFeed"; }; - var peg$f88 = function() { return "groupBankAccount"; }; - var peg$f89 = function() { return "groupWithdrawn"; }; - var peg$f90 = function() { return "groupWithdrawalID"; }; - var peg$f91 = function() { return "groupAmountDebited"; }; - var peg$f92 = function() { return "groupAmountReimbursed"; }; - var peg$f93 = function() { return "amountDebited"; }; - var peg$f94 = function() { return "amountReimbursed"; }; - var peg$f95 = function() { return "groupCategory"; }; - var peg$f96 = function() { return "groupTag"; }; - var peg$f97 = function() { return "groupMerchant"; }; - var peg$f98 = function() { return "groupmonth"; }; - var peg$f99 = function() { return "groupweek"; }; - var peg$f100 = function() { return "groupyear"; }; - var peg$f101 = function() { return "groupquarter"; }; - var peg$f102 = function() { return "eq"; }; - var peg$f103 = function() { return "neq"; }; - var peg$f104 = function() { return "gte"; }; - var peg$f105 = function() { return "gt"; }; - var peg$f106 = function() { return "lte"; }; - var peg$f107 = function() { return "lt"; }; - var peg$f108 = function(o) { + var peg$f67 = function() {return "view"}; + var peg$f68 = function() { return isColumnsContext; }; + var peg$f69 = function() { return "perDiem"; }; + var peg$f70 = function() { return "drafts"; }; + var peg$f71 = function() { return "originalamount"; }; + var peg$f72 = function() { return "taxAmount"; }; + var peg$f73 = function() { return "taxrate"; }; + var peg$f74 = function() { return "policyname"; }; + var peg$f75 = function() { return "withdrawalID"; }; + var peg$f76 = function() { return "bankAccount"; }; + var peg$f77 = function() { return "reportID"; }; + var peg$f78 = function() { return "base62ReportID"; }; + var peg$f79 = function() { return "exportedto"; }; + var peg$f80 = function() { return "exportedTo"; }; + var peg$f81 = function() { return "exportedTo"; }; + var peg$f82 = function() { return "exchangeRate"; }; + var peg$f83 = function() { return "reimbursableTotal"; }; + var peg$f84 = function() { return "nonReimbursableTotal"; }; + var peg$f85 = function() { return "groupFrom"; }; + var peg$f86 = function() { return "groupExpenses"; }; + var peg$f87 = function() { return "groupTotal"; }; + var peg$f88 = function() { return "groupCard"; }; + var peg$f89 = function() { return "groupFeed"; }; + var peg$f90 = function() { return "groupBankAccount"; }; + var peg$f91 = function() { return "groupWithdrawn"; }; + var peg$f92 = function() { return "groupWithdrawalID"; }; + var peg$f93 = function() { return "groupAmountDebited"; }; + var peg$f94 = function() { return "groupAmountReimbursed"; }; + var peg$f95 = function() { return "amountDebited"; }; + var peg$f96 = function() { return "amountReimbursed"; }; + var peg$f97 = function() { return "groupCategory"; }; + var peg$f98 = function() { return "groupTag"; }; + var peg$f99 = function() { return "groupMerchant"; }; + var peg$f100 = function() { return "groupmonth"; }; + var peg$f101 = function() { return "groupweek"; }; + var peg$f102 = function() { return "groupyear"; }; + var peg$f103 = function() { return "groupquarter"; }; + var peg$f104 = function() { return "eq"; }; + var peg$f105 = function() { return "neq"; }; + var peg$f106 = function() { return "gte"; }; + var peg$f107 = function() { return "gt"; }; + var peg$f108 = function() { return "lte"; }; + var peg$f109 = function() { return "lt"; }; + var peg$f110 = function(o) { if (nameOperator) { expectingNestedQuote = (o === "eq"); // Use simple parser if no valid operator is found } isColumnsContext = false; return o; }; - var peg$f109 = function(c) { return c; }; - var peg$f110 = function(chars) { return chars.join("").trim(); }; - var peg$f111 = function() { + var peg$f111 = function(c) { return c; }; + var peg$f112 = function(chars) { return chars.join("").trim(); }; + var peg$f113 = function() { isColumnsContext = false; return "and"; }; - var peg$f112 = function() { return expectingNestedQuote; }; - var peg$f113 = function(start, inner, end) { //handle no-breaking space + var peg$f114 = function() { return expectingNestedQuote; }; + var peg$f115 = function(start, inner, end) { //handle no-breaking space return [...start, '"', ...inner, '"', ...end].join(""); }; - var peg$f114 = function(start) {return "“"}; - var peg$f115 = function(start) {return "”"}; - var peg$f116 = function(start) {return "\""}; - var peg$f117 = function(start, inner, end) { + var peg$f116 = function(start) {return "“"}; + var peg$f117 = function(start) {return "”"}; + var peg$f118 = function(start) {return "\""}; + var peg$f119 = function(start, inner, end) { return [...start, '"', ...inner, '"'].join(""); }; var peg$currPos = options.peg$currPos | 0; @@ -1131,53 +1137,56 @@ function peg$parse(input, options) { if (s1 === peg$FAILED) { s1 = peg$parsesubmitted(); if (s1 === peg$FAILED) { - s1 = peg$parseapproved(); + s1 = peg$parseanyApproval(); if (s1 === peg$FAILED) { - s1 = peg$parsepaid(); + s1 = peg$parseapproved(); if (s1 === peg$FAILED) { - s1 = peg$parseexportedTo(); + s1 = peg$parsepaid(); if (s1 === peg$FAILED) { - s1 = peg$parseexported(); + s1 = peg$parseexportedTo(); if (s1 === peg$FAILED) { - s1 = peg$parsewithdrawn(); + s1 = peg$parseexported(); if (s1 === peg$FAILED) { - s1 = peg$parseposted(); + s1 = peg$parsewithdrawn(); if (s1 === peg$FAILED) { - s1 = peg$parsehas(); + s1 = peg$parseposted(); if (s1 === peg$FAILED) { - s1 = peg$parseis(); + s1 = peg$parsehas(); if (s1 === peg$FAILED) { - s1 = peg$parsepurchaseCurrency(); + s1 = peg$parseis(); if (s1 === peg$FAILED) { - s1 = peg$parsepurchaseAmount(); + s1 = peg$parsepurchaseCurrency(); if (s1 === peg$FAILED) { - s1 = peg$parseamountDebited(); + s1 = peg$parsepurchaseAmount(); if (s1 === peg$FAILED) { - s1 = peg$parseamountReimbursed(); + s1 = peg$parseamountDebited(); if (s1 === peg$FAILED) { - s1 = peg$parseamount(); + s1 = peg$parseamountReimbursed(); if (s1 === peg$FAILED) { - s1 = peg$parsemerchant(); + s1 = peg$parseamount(); if (s1 === peg$FAILED) { - s1 = peg$parsedescription(); + s1 = peg$parsemerchant(); if (s1 === peg$FAILED) { - s1 = peg$parsereportID(); + s1 = peg$parsedescription(); if (s1 === peg$FAILED) { - s1 = peg$parsewithdrawalID(); + s1 = peg$parsereportID(); if (s1 === peg$FAILED) { - s1 = peg$parsetitle(); + s1 = peg$parsewithdrawalID(); if (s1 === peg$FAILED) { - s1 = peg$parsesubmitterUserID(); + s1 = peg$parsetitle(); if (s1 === peg$FAILED) { - s1 = peg$parsesubmitterPayrollID(); + s1 = peg$parsesubmitterUserID(); if (s1 === peg$FAILED) { - s1 = peg$parseorderDealNumbers(); + s1 = peg$parsesubmitterPayrollID(); if (s1 === peg$FAILED) { - s1 = peg$parsereportFieldDynamic(); + s1 = peg$parseorderDealNumbers(); if (s1 === peg$FAILED) { - s1 = peg$parsecolumns(); + s1 = peg$parsereportFieldDynamic(); if (s1 === peg$FAILED) { - s1 = peg$parselimit(); + s1 = peg$parsecolumns(); + if (s1 === peg$FAILED) { + s1 = peg$parselimit(); + } } } } @@ -2171,13 +2180,13 @@ function peg$parse(input, options) { return s0; } - function peg$parsepaid() { + function peg$parseanyApproval() { var s0, s1; s0 = peg$currPos; - s1 = input.substr(peg$currPos, 4); + s1 = input.substr(peg$currPos, 12); if (s1.toLowerCase() === peg$c54) { - peg$currPos += 4; + peg$currPos += 12; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$e57); } @@ -2187,6 +2196,41 @@ function peg$parse(input, options) { s1 = peg$f43(); } s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 11); + if (s1.toLowerCase() === peg$c55) { + peg$currPos += 11; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e58); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f44(); + } + s0 = s1; + } + + return s0; + } + + function peg$parsepaid() { + var s0, s1; + + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 4); + if (s1.toLowerCase() === peg$c56) { + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e59); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f45(); + } + s0 = s1; return s0; } @@ -2196,15 +2240,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c55) { + if (s1.toLowerCase() === peg$c57) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e58); } + if (peg$silentFails === 0) { peg$fail(peg$e60); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f44(); + s1 = peg$f46(); } s0 = s1; @@ -2216,15 +2260,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c56) { + if (s1.toLowerCase() === peg$c58) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e59); } + if (peg$silentFails === 0) { peg$fail(peg$e61); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f45(); + s1 = peg$f47(); } s0 = s1; @@ -2236,15 +2280,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 9); - if (s1.toLowerCase() === peg$c57) { + if (s1.toLowerCase() === peg$c59) { peg$currPos += 9; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e60); } + if (peg$silentFails === 0) { peg$fail(peg$e62); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f46(); + s1 = peg$f48(); } s0 = s1; @@ -2255,24 +2299,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 7); - if (s0.toLowerCase() === peg$c58) { + if (s0.toLowerCase() === peg$c60) { peg$currPos += 7; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e61); } + if (peg$silentFails === 0) { peg$fail(peg$e63); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c59) { + if (s1.toLowerCase() === peg$c61) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e62); } + if (peg$silentFails === 0) { peg$fail(peg$e64); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f47(); + s1 = peg$f49(); } s0 = s1; } @@ -2285,15 +2329,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c60) { + if (s1.toLowerCase() === peg$c62) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e63); } + if (peg$silentFails === 0) { peg$fail(peg$e65); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f48(); + s1 = peg$f50(); } s0 = s1; @@ -2305,15 +2349,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 4); - if (s1.toLowerCase() === peg$c61) { + if (s1.toLowerCase() === peg$c63) { peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e64); } + if (peg$silentFails === 0) { peg$fail(peg$e66); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f49(); + s1 = peg$f51(); } s0 = s1; @@ -2325,15 +2369,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c62) { + if (s1.toLowerCase() === peg$c64) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e65); } + if (peg$silentFails === 0) { peg$fail(peg$e67); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f50(); + s1 = peg$f52(); } s0 = s1; @@ -2344,24 +2388,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 15); - if (s0.toLowerCase() === peg$c63) { + if (s0.toLowerCase() === peg$c65) { peg$currPos += 15; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e66); } + if (peg$silentFails === 0) { peg$fail(peg$e68); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c64) { + if (s1.toLowerCase() === peg$c66) { peg$currPos += 17; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e67); } + if (peg$silentFails === 0) { peg$fail(peg$e69); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f51(); + s1 = peg$f53(); } s0 = s1; } @@ -2373,24 +2417,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 18); - if (s0.toLowerCase() === peg$c65) { + if (s0.toLowerCase() === peg$c67) { peg$currPos += 18; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e68); } + if (peg$silentFails === 0) { peg$fail(peg$e70); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 20); - if (s1.toLowerCase() === peg$c66) { + if (s1.toLowerCase() === peg$c68) { peg$currPos += 20; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e69); } + if (peg$silentFails === 0) { peg$fail(peg$e71); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f52(); + s1 = peg$f54(); } s0 = s1; } @@ -2402,24 +2446,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 16); - if (s0.toLowerCase() === peg$c67) { + if (s0.toLowerCase() === peg$c69) { peg$currPos += 16; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e70); } + if (peg$silentFails === 0) { peg$fail(peg$e72); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 18); - if (s1.toLowerCase() === peg$c68) { + if (s1.toLowerCase() === peg$c70) { peg$currPos += 18; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e71); } + if (peg$silentFails === 0) { peg$fail(peg$e73); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f53(); + s1 = peg$f55(); } s0 = s1; } @@ -2432,15 +2476,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c69) { + if (s1.toLowerCase() === peg$c71) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e72); } + if (peg$silentFails === 0) { peg$fail(peg$e74); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f54(); + s1 = peg$f56(); } s0 = s1; @@ -2451,24 +2495,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 9); - if (s0.toLowerCase() === peg$c70) { + if (s0.toLowerCase() === peg$c72) { peg$currPos += 9; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e73); } + if (peg$silentFails === 0) { peg$fail(peg$e75); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c71) { + if (s1.toLowerCase() === peg$c73) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e74); } + if (peg$silentFails === 0) { peg$fail(peg$e76); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f55(); + s1 = peg$f57(); } s0 = s1; } @@ -2481,15 +2525,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c72) { + if (s1.toLowerCase() === peg$c74) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e75); } + if (peg$silentFails === 0) { peg$fail(peg$e77); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f56(); + s1 = peg$f58(); } s0 = s1; @@ -2501,15 +2545,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c73) { + if (s1.toLowerCase() === peg$c75) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e76); } + if (peg$silentFails === 0) { peg$fail(peg$e78); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f57(); + s1 = peg$f59(); } s0 = s1; @@ -2521,15 +2565,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 3); - if (s1.toLowerCase() === peg$c74) { + if (s1.toLowerCase() === peg$c76) { peg$currPos += 3; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e77); } + if (peg$silentFails === 0) { peg$fail(peg$e79); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f58(); + s1 = peg$f60(); } s0 = s1; @@ -2541,15 +2585,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 2); - if (s1.toLowerCase() === peg$c75) { + if (s1.toLowerCase() === peg$c77) { peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e78); } + if (peg$silentFails === 0) { peg$fail(peg$e80); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f59(); + s1 = peg$f61(); } s0 = s1; @@ -2560,24 +2604,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 14); - if (s0.toLowerCase() === peg$c76) { + if (s0.toLowerCase() === peg$c78) { peg$currPos += 14; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e79); } + if (peg$silentFails === 0) { peg$fail(peg$e81); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c77) { + if (s1.toLowerCase() === peg$c79) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e80); } + if (peg$silentFails === 0) { peg$fail(peg$e82); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f60(); + s1 = peg$f62(); } s0 = s1; } @@ -2589,24 +2633,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 16); - if (s0.toLowerCase() === peg$c78) { + if (s0.toLowerCase() === peg$c80) { peg$currPos += 16; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e81); } + if (peg$silentFails === 0) { peg$fail(peg$e83); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c79) { + if (s1.toLowerCase() === peg$c81) { peg$currPos += 17; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e82); } + if (peg$silentFails === 0) { peg$fail(peg$e84); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f61(); + s1 = peg$f63(); } s0 = s1; } @@ -2618,24 +2662,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 13); - if (s0.toLowerCase() === peg$c80) { + if (s0.toLowerCase() === peg$c82) { peg$currPos += 13; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e83); } + if (peg$silentFails === 0) { peg$fail(peg$e85); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c81) { + if (s1.toLowerCase() === peg$c83) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e84); } + if (peg$silentFails === 0) { peg$fail(peg$e86); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f62(); + s1 = peg$f64(); } s0 = s1; } @@ -2647,24 +2691,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 16); - if (s0.toLowerCase() === peg$c82) { + if (s0.toLowerCase() === peg$c84) { peg$currPos += 16; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e85); } + if (peg$silentFails === 0) { peg$fail(peg$e87); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c83) { + if (s1.toLowerCase() === peg$c85) { peg$currPos += 17; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e86); } + if (peg$silentFails === 0) { peg$fail(peg$e88); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f63(); + s1 = peg$f65(); } s0 = s1; } @@ -2677,15 +2721,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 7); - if (s1.toLowerCase() === peg$c84) { + if (s1.toLowerCase() === peg$c86) { peg$currPos += 7; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e87); } + if (peg$silentFails === 0) { peg$fail(peg$e89); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f64(); + s1 = peg$f66(); } s0 = s1; @@ -2697,15 +2741,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 4); - if (s1.toLowerCase() === peg$c85) { + if (s1.toLowerCase() === peg$c87) { peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e88); } + if (peg$silentFails === 0) { peg$fail(peg$e90); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f65(); + s1 = peg$f67(); } s0 = s1; @@ -2717,7 +2761,7 @@ function peg$parse(input, options) { s0 = peg$currPos; peg$savedPos = peg$currPos; - s1 = peg$f66(); + s1 = peg$f68(); if (s1) { s1 = undefined; } else { @@ -2849,11 +2893,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c86) { + if (s1.toLowerCase() === peg$c88) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e89); } + if (peg$silentFails === 0) { peg$fail(peg$e91); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2868,7 +2912,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f67(); + s0 = peg$f69(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2886,19 +2930,19 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c87) { + if (s1.toLowerCase() === peg$c89) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e90); } + if (peg$silentFails === 0) { peg$fail(peg$e92); } } if (s1 === peg$FAILED) { s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c88) { + if (s1.toLowerCase() === peg$c90) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e91); } + if (peg$silentFails === 0) { peg$fail(peg$e93); } } } if (s1 !== peg$FAILED) { @@ -2914,7 +2958,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f68(); + s0 = peg$f70(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2932,11 +2976,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c77) { + if (s1.toLowerCase() === peg$c79) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e80); } + if (peg$silentFails === 0) { peg$fail(peg$e82); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2951,7 +2995,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f69(); + s0 = peg$f71(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -2969,11 +3013,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 3); - if (s1.toLowerCase() === peg$c89) { + if (s1.toLowerCase() === peg$c91) { peg$currPos += 3; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e92); } + if (peg$silentFails === 0) { peg$fail(peg$e94); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -2988,7 +3032,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f70(); + s0 = peg$f72(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3025,7 +3069,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f71(); + s0 = peg$f73(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3043,11 +3087,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c90) { + if (s1.toLowerCase() === peg$c92) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e93); } + if (peg$silentFails === 0) { peg$fail(peg$e95); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3062,7 +3106,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f72(); + s0 = peg$f74(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3099,7 +3143,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f73(); + s0 = peg$f75(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3136,7 +3180,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f74(); + s0 = peg$f76(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3154,11 +3198,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c91) { + if (s1.toLowerCase() === peg$c93) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e94); } + if (peg$silentFails === 0) { peg$fail(peg$e96); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3173,7 +3217,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f75(); + s0 = peg$f77(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3210,7 +3254,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f76(); + s0 = peg$f78(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3228,11 +3272,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c92) { + if (s1.toLowerCase() === peg$c94) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e95); } + if (peg$silentFails === 0) { peg$fail(peg$e97); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3247,7 +3291,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f77(); + s0 = peg$f79(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3272,7 +3316,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e96); } + if (peg$silentFails === 0) { peg$fail(peg$e98); } } if (s2 !== peg$FAILED) { s1 = [s1, s2]; @@ -3291,11 +3335,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c93) { + if (s1.toLowerCase() === peg$c95) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e97); } + if (peg$silentFails === 0) { peg$fail(peg$e99); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3310,7 +3354,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f78(); + s0 = peg$f80(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3322,11 +3366,11 @@ function peg$parse(input, options) { if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c92) { + if (s1.toLowerCase() === peg$c94) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e95); } + if (peg$silentFails === 0) { peg$fail(peg$e97); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3341,7 +3385,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f79(); + s0 = peg$f81(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3360,11 +3404,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 13); - if (s1.toLowerCase() === peg$c94) { + if (s1.toLowerCase() === peg$c96) { peg$currPos += 13; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e98); } + if (peg$silentFails === 0) { peg$fail(peg$e100); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3379,7 +3423,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f80(); + s0 = peg$f82(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3397,11 +3441,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 18); - if (s1.toLowerCase() === peg$c95) { + if (s1.toLowerCase() === peg$c97) { peg$currPos += 18; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e99); } + if (peg$silentFails === 0) { peg$fail(peg$e101); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3416,7 +3460,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f81(); + s0 = peg$f83(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3434,11 +3478,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 22); - if (s1.toLowerCase() === peg$c96) { + if (s1.toLowerCase() === peg$c98) { peg$currPos += 22; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e100); } + if (peg$silentFails === 0) { peg$fail(peg$e102); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3453,7 +3497,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f82(); + s0 = peg$f84(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3471,11 +3515,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c97) { + if (s1.toLowerCase() === peg$c99) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e101); } + if (peg$silentFails === 0) { peg$fail(peg$e103); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3490,7 +3534,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f83(); + s0 = peg$f85(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3508,11 +3552,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c98) { + if (s1.toLowerCase() === peg$c100) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e102); } + if (peg$silentFails === 0) { peg$fail(peg$e104); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3527,7 +3571,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f84(); + s0 = peg$f86(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3545,11 +3589,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c99) { + if (s1.toLowerCase() === peg$c101) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e103); } + if (peg$silentFails === 0) { peg$fail(peg$e105); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3564,7 +3608,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f85(); + s0 = peg$f87(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3582,11 +3626,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c100) { + if (s1.toLowerCase() === peg$c102) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e104); } + if (peg$silentFails === 0) { peg$fail(peg$e106); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3601,7 +3645,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f86(); + s0 = peg$f88(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3619,11 +3663,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c101) { + if (s1.toLowerCase() === peg$c103) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e105); } + if (peg$silentFails === 0) { peg$fail(peg$e107); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3638,7 +3682,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f87(); + s0 = peg$f89(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3656,11 +3700,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 18); - if (s1.toLowerCase() === peg$c102) { + if (s1.toLowerCase() === peg$c104) { peg$currPos += 18; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e106); } + if (peg$silentFails === 0) { peg$fail(peg$e108); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3675,7 +3719,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f88(); + s0 = peg$f90(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3693,11 +3737,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c103) { + if (s1.toLowerCase() === peg$c105) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e107); } + if (peg$silentFails === 0) { peg$fail(peg$e109); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3712,7 +3756,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f89(); + s0 = peg$f91(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3730,11 +3774,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 19); - if (s1.toLowerCase() === peg$c104) { + if (s1.toLowerCase() === peg$c106) { peg$currPos += 19; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e108); } + if (peg$silentFails === 0) { peg$fail(peg$e110); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3749,7 +3793,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f90(); + s0 = peg$f92(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3767,11 +3811,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 20); - if (s1.toLowerCase() === peg$c105) { + if (s1.toLowerCase() === peg$c107) { peg$currPos += 20; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e109); } + if (peg$silentFails === 0) { peg$fail(peg$e111); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3786,7 +3830,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f91(); + s0 = peg$f93(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3804,11 +3848,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 23); - if (s1.toLowerCase() === peg$c106) { + if (s1.toLowerCase() === peg$c108) { peg$currPos += 23; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e110); } + if (peg$silentFails === 0) { peg$fail(peg$e112); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3823,7 +3867,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f92(); + s0 = peg$f94(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3841,11 +3885,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c81) { + if (s1.toLowerCase() === peg$c83) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e84); } + if (peg$silentFails === 0) { peg$fail(peg$e86); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3860,7 +3904,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f93(); + s0 = peg$f95(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3878,11 +3922,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c83) { + if (s1.toLowerCase() === peg$c85) { peg$currPos += 17; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e86); } + if (peg$silentFails === 0) { peg$fail(peg$e88); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3897,7 +3941,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f94(); + s0 = peg$f96(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3915,11 +3959,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c107) { + if (s1.toLowerCase() === peg$c109) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e111); } + if (peg$silentFails === 0) { peg$fail(peg$e113); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3934,7 +3978,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f95(); + s0 = peg$f97(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3952,11 +3996,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 9); - if (s1.toLowerCase() === peg$c108) { + if (s1.toLowerCase() === peg$c110) { peg$currPos += 9; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e112); } + if (peg$silentFails === 0) { peg$fail(peg$e114); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3971,7 +4015,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f96(); + s0 = peg$f98(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3989,11 +4033,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c109) { + if (s1.toLowerCase() === peg$c111) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e113); } + if (peg$silentFails === 0) { peg$fail(peg$e115); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4008,7 +4052,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f97(); + s0 = peg$f99(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4026,11 +4070,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c110) { + if (s1.toLowerCase() === peg$c112) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e114); } + if (peg$silentFails === 0) { peg$fail(peg$e116); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4045,7 +4089,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f98(); + s0 = peg$f100(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4063,11 +4107,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c111) { + if (s1.toLowerCase() === peg$c113) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e115); } + if (peg$silentFails === 0) { peg$fail(peg$e117); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4082,7 +4126,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f99(); + s0 = peg$f101(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4100,11 +4144,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c112) { + if (s1.toLowerCase() === peg$c114) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e116); } + if (peg$silentFails === 0) { peg$fail(peg$e118); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4119,7 +4163,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f100(); + s0 = peg$f102(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4137,11 +4181,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 13); - if (s1.toLowerCase() === peg$c113) { + if (s1.toLowerCase() === peg$c115) { peg$currPos += 13; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e117); } + if (peg$silentFails === 0) { peg$fail(peg$e119); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4156,7 +4200,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f101(); + s0 = peg$f103(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4179,81 +4223,81 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e96); } + if (peg$silentFails === 0) { peg$fail(peg$e98); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f102(); + s1 = peg$f104(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c114) { - s1 = peg$c114; + if (input.substr(peg$currPos, 2) === peg$c116) { + s1 = peg$c116; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e119); } + if (peg$silentFails === 0) { peg$fail(peg$e121); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f103(); + s1 = peg$f105(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c115) { - s1 = peg$c115; + if (input.substr(peg$currPos, 2) === peg$c117) { + s1 = peg$c117; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e120); } + if (peg$silentFails === 0) { peg$fail(peg$e122); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f104(); + s1 = peg$f106(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 62) { - s1 = peg$c116; + s1 = peg$c118; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e121); } + if (peg$silentFails === 0) { peg$fail(peg$e123); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f105(); + s1 = peg$f107(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c117) { - s1 = peg$c117; + if (input.substr(peg$currPos, 2) === peg$c119) { + s1 = peg$c119; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e122); } + if (peg$silentFails === 0) { peg$fail(peg$e124); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f106(); + s1 = peg$f108(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 60) { - s1 = peg$c118; + s1 = peg$c120; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e123); } + if (peg$silentFails === 0) { peg$fail(peg$e125); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f107(); + s1 = peg$f109(); } s0 = s1; } @@ -4264,7 +4308,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e118); } + if (peg$silentFails === 0) { peg$fail(peg$e120); } } return s0; @@ -4277,7 +4321,7 @@ function peg$parse(input, options) { s1 = peg$parseoperator(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f108(s1); + s1 = peg$f110(s1); } s0 = s1; @@ -4289,11 +4333,11 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 92) { - s1 = peg$c119; + s1 = peg$c121; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e124); } + if (peg$silentFails === 0) { peg$fail(peg$e126); } } if (s1 !== peg$FAILED) { s2 = input.charAt(peg$currPos); @@ -4301,11 +4345,11 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e125); } + if (peg$silentFails === 0) { peg$fail(peg$e127); } } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f109(s2); + s0 = peg$f111(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4331,7 +4375,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e127); } + if (peg$silentFails === 0) { peg$fail(peg$e129); } } } if (s2 !== peg$FAILED) { @@ -4344,7 +4388,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e127); } + if (peg$silentFails === 0) { peg$fail(peg$e129); } } } } @@ -4353,13 +4397,13 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f110(s1); + s1 = peg$f112(s1); } s0 = s1; peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e126); } + if (peg$silentFails === 0) { peg$fail(peg$e128); } } return s0; @@ -4371,7 +4415,7 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = peg$parse_(); peg$savedPos = s0; - s1 = peg$f111(); + s1 = peg$f113(); s0 = s1; return s0; @@ -4387,7 +4431,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e129); } + if (peg$silentFails === 0) { peg$fail(peg$e131); } } while (s1 !== peg$FAILED) { s0.push(s1); @@ -4396,12 +4440,12 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e129); } + if (peg$silentFails === 0) { peg$fail(peg$e131); } } } peg$silentFails--; s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e128); } + if (peg$silentFails === 0) { peg$fail(peg$e130); } return s0; } @@ -4411,7 +4455,7 @@ function peg$parse(input, options) { s0 = peg$currPos; peg$savedPos = peg$currPos; - s1 = peg$f112(); + s1 = peg$f114(); if (s1) { s1 = undefined; } else { @@ -4448,7 +4492,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e131); } + if (peg$silentFails === 0) { peg$fail(peg$e133); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4457,7 +4501,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e131); } + if (peg$silentFails === 0) { peg$fail(peg$e133); } } } s2 = input.charAt(peg$currPos); @@ -4465,7 +4509,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e132); } + if (peg$silentFails === 0) { peg$fail(peg$e134); } } if (s2 !== peg$FAILED) { s3 = []; @@ -4476,7 +4520,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e133); } + if (peg$silentFails === 0) { peg$fail(peg$e135); } } } while (s4 !== peg$FAILED) { @@ -4488,7 +4532,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e133); } + if (peg$silentFails === 0) { peg$fail(peg$e135); } } } } @@ -4497,7 +4541,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e132); } + if (peg$silentFails === 0) { peg$fail(peg$e134); } } if (s4 !== peg$FAILED) { s5 = []; @@ -4506,7 +4550,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e127); } + if (peg$silentFails === 0) { peg$fail(peg$e129); } } while (s6 !== peg$FAILED) { s5.push(s6); @@ -4515,11 +4559,11 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e127); } + if (peg$silentFails === 0) { peg$fail(peg$e129); } } } peg$savedPos = s0; - s0 = peg$f113(s1, s3, s5); + s0 = peg$f115(s1, s3, s5); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4531,7 +4575,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e130); } + if (peg$silentFails === 0) { peg$fail(peg$e132); } } return s0; @@ -4548,7 +4592,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e131); } + if (peg$silentFails === 0) { peg$fail(peg$e133); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4557,7 +4601,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e131); } + if (peg$silentFails === 0) { peg$fail(peg$e133); } } } s2 = input.charAt(peg$currPos); @@ -4565,7 +4609,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e132); } + if (peg$silentFails === 0) { peg$fail(peg$e134); } } if (s2 !== peg$FAILED) { s3 = []; @@ -4576,7 +4620,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e133); } + if (peg$silentFails === 0) { peg$fail(peg$e135); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -4592,15 +4636,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c120; + s6 = peg$c122; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e134); } + if (peg$silentFails === 0) { peg$fail(peg$e136); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f114(s1); + s4 = peg$f116(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4623,15 +4667,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c121; + s6 = peg$c123; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e135); } + if (peg$silentFails === 0) { peg$fail(peg$e137); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f115(s1); + s4 = peg$f117(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4654,15 +4698,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c122; + s6 = peg$c124; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e136); } + if (peg$silentFails === 0) { peg$fail(peg$e138); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f116(s1); + s4 = peg$f118(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4684,7 +4728,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e133); } + if (peg$silentFails === 0) { peg$fail(peg$e135); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -4700,15 +4744,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c120; + s6 = peg$c122; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e134); } + if (peg$silentFails === 0) { peg$fail(peg$e136); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f114(s1); + s4 = peg$f116(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4731,15 +4775,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c121; + s6 = peg$c123; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e135); } + if (peg$silentFails === 0) { peg$fail(peg$e137); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f115(s1); + s4 = peg$f117(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4762,15 +4806,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c122; + s6 = peg$c124; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e136); } + if (peg$silentFails === 0) { peg$fail(peg$e138); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f116(s1); + s4 = peg$f118(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4787,7 +4831,7 @@ function peg$parse(input, options) { s4 = peg$parseclosingQuote(); if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f117(s1, s3, s4); + s0 = peg$f119(s1, s3, s4); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4799,7 +4843,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e130); } + if (peg$silentFails === 0) { peg$fail(peg$e132); } } return s0; @@ -4814,7 +4858,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e132); } + if (peg$silentFails === 0) { peg$fail(peg$e134); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4852,7 +4896,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e137); } + if (peg$silentFails === 0) { peg$fail(peg$e139); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4861,7 +4905,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e137); } + if (peg$silentFails === 0) { peg$fail(peg$e139); } } } s2 = []; @@ -4870,7 +4914,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e138); } + if (peg$silentFails === 0) { peg$fail(peg$e140); } } while (s3 !== peg$FAILED) { s2.push(s3); @@ -4879,7 +4923,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e138); } + if (peg$silentFails === 0) { peg$fail(peg$e140); } } } s3 = []; @@ -4888,7 +4932,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e139); } + if (peg$silentFails === 0) { peg$fail(peg$e141); } } while (s4 !== peg$FAILED) { s3.push(s4); @@ -4897,7 +4941,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e139); } + if (peg$silentFails === 0) { peg$fail(peg$e141); } } } s4 = peg$parseoperator(); @@ -4916,7 +4960,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e140); } + if (peg$silentFails === 0) { peg$fail(peg$e142); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4925,7 +4969,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e140); } + if (peg$silentFails === 0) { peg$fail(peg$e142); } } } s2 = peg$currPos; @@ -4972,7 +5016,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e141); } + if (peg$silentFails === 0) { peg$fail(peg$e143); } } } } @@ -4988,7 +5032,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e142); } + if (peg$silentFails === 0) { peg$fail(peg$e144); } } if (s0 === peg$FAILED) { s0 = peg$currPos; diff --git a/src/libs/SearchParser/autocompleteParser.peggy b/src/libs/SearchParser/autocompleteParser.peggy index 725be1cedd3a..96cd20d814cc 100644 --- a/src/libs/SearchParser/autocompleteParser.peggy +++ b/src/libs/SearchParser/autocompleteParser.peggy @@ -108,6 +108,7 @@ autocompleteKey "key" / action / date / submitted + / anyApproval / approved / paid / exportedTo diff --git a/src/libs/SearchParser/baseRules.peggy b/src/libs/SearchParser/baseRules.peggy index 19ed053e07a1..9ecf798b5667 100644 --- a/src/libs/SearchParser/baseRules.peggy +++ b/src/libs/SearchParser/baseRules.peggy @@ -79,6 +79,9 @@ policyID / "workspace"i { return "policyID"; } submitted = "submitted"i { return "submitted"; } approved = "approved"i { return "approved"; } +anyApproval + = "any-approval"i { return "any-approval"; } + / "anyApproval"i { return "any-approval"; } paid = "paid"i { return "paid"; } exported = "exported"i { return "exported"; } posted = "posted"i { return "posted"; } diff --git a/src/libs/SearchParser/searchParser.js b/src/libs/SearchParser/searchParser.js index e39f25116fe3..0f7d0fd1d53e 100644 --- a/src/libs/SearchParser/searchParser.js +++ b/src/libs/SearchParser/searchParser.js @@ -238,75 +238,77 @@ function peg$parse(input, options) { var peg$c51 = "workspace"; var peg$c52 = "submitted"; var peg$c53 = "approved"; - var peg$c54 = "paid"; - var peg$c55 = "exported"; - var peg$c56 = "posted"; - var peg$c57 = "withdrawn"; - var peg$c58 = "groupby"; - var peg$c59 = "group-by"; - var peg$c60 = "limit"; - var peg$c61 = "feed"; - var peg$c62 = "title"; - var peg$c63 = "submitteruserid"; - var peg$c64 = "submitter-user-id"; - var peg$c65 = "submitterpayrollid"; - var peg$c66 = "submitter-payroll-id"; - var peg$c67 = "orderdealnumbers"; - var peg$c68 = "order-deal-numbers"; - var peg$c69 = "assignee"; - var peg$c70 = "createdby"; - var peg$c71 = "created-by"; - var peg$c72 = "action"; - var peg$c73 = "total"; - var peg$c74 = "has"; - var peg$c75 = "is"; - var peg$c76 = "purchaseamount"; - var peg$c77 = "purchase-amount"; - var peg$c78 = "purchasecurrency"; - var peg$c79 = "purchase-currency"; - var peg$c80 = "amountdebited"; - var peg$c81 = "amount-debited"; - var peg$c82 = "amountreimbursed"; - var peg$c83 = "amount-reimbursed"; - var peg$c84 = "columns"; - var peg$c85 = "view"; - var peg$c86 = "per-diem"; - var peg$c87 = "drafts"; - var peg$c88 = "draft"; - var peg$c89 = "tax"; - var peg$c90 = "policy-name"; - var peg$c91 = "long-report-id"; - var peg$c92 = "exported-to"; - var peg$c93 = "exportedto"; - var peg$c94 = "exchange-rate"; - var peg$c95 = "reimbursable-total"; - var peg$c96 = "non-reimbursable-total"; - var peg$c97 = "group-from"; - var peg$c98 = "group-expenses"; - var peg$c99 = "group-total"; - var peg$c100 = "group-card"; - var peg$c101 = "group-feed"; - var peg$c102 = "group-bank-account"; - var peg$c103 = "group-withdrawn"; - var peg$c104 = "group-withdrawal-id"; - var peg$c105 = "group-amount-debited"; - var peg$c106 = "group-amount-reimbursed"; - var peg$c107 = "group-category"; - var peg$c108 = "group-tag"; - var peg$c109 = "group-merchant"; - var peg$c110 = "group-month"; - var peg$c111 = "group-week"; - var peg$c112 = "group-year"; - var peg$c113 = "group-quarter"; - var peg$c114 = "!="; - var peg$c115 = ">="; - var peg$c116 = ">"; - var peg$c117 = "<="; - var peg$c118 = "<"; - var peg$c119 = "\\"; - var peg$c120 = "\u201C"; - var peg$c121 = "\u201D"; - var peg$c122 = "\""; + var peg$c54 = "any-approval"; + var peg$c55 = "anyapproval"; + var peg$c56 = "paid"; + var peg$c57 = "exported"; + var peg$c58 = "posted"; + var peg$c59 = "withdrawn"; + var peg$c60 = "groupby"; + var peg$c61 = "group-by"; + var peg$c62 = "limit"; + var peg$c63 = "feed"; + var peg$c64 = "title"; + var peg$c65 = "submitteruserid"; + var peg$c66 = "submitter-user-id"; + var peg$c67 = "submitterpayrollid"; + var peg$c68 = "submitter-payroll-id"; + var peg$c69 = "orderdealnumbers"; + var peg$c70 = "order-deal-numbers"; + var peg$c71 = "assignee"; + var peg$c72 = "createdby"; + var peg$c73 = "created-by"; + var peg$c74 = "action"; + var peg$c75 = "total"; + var peg$c76 = "has"; + var peg$c77 = "is"; + var peg$c78 = "purchaseamount"; + var peg$c79 = "purchase-amount"; + var peg$c80 = "purchasecurrency"; + var peg$c81 = "purchase-currency"; + var peg$c82 = "amountdebited"; + var peg$c83 = "amount-debited"; + var peg$c84 = "amountreimbursed"; + var peg$c85 = "amount-reimbursed"; + var peg$c86 = "columns"; + var peg$c87 = "view"; + var peg$c88 = "per-diem"; + var peg$c89 = "drafts"; + var peg$c90 = "draft"; + var peg$c91 = "tax"; + var peg$c92 = "policy-name"; + var peg$c93 = "long-report-id"; + var peg$c94 = "exported-to"; + var peg$c95 = "exportedto"; + var peg$c96 = "exchange-rate"; + var peg$c97 = "reimbursable-total"; + var peg$c98 = "non-reimbursable-total"; + var peg$c99 = "group-from"; + var peg$c100 = "group-expenses"; + var peg$c101 = "group-total"; + var peg$c102 = "group-card"; + var peg$c103 = "group-feed"; + var peg$c104 = "group-bank-account"; + var peg$c105 = "group-withdrawn"; + var peg$c106 = "group-withdrawal-id"; + var peg$c107 = "group-amount-debited"; + var peg$c108 = "group-amount-reimbursed"; + var peg$c109 = "group-category"; + var peg$c110 = "group-tag"; + var peg$c111 = "group-merchant"; + var peg$c112 = "group-month"; + var peg$c113 = "group-week"; + var peg$c114 = "group-year"; + var peg$c115 = "group-quarter"; + var peg$c116 = "!="; + var peg$c117 = ">="; + var peg$c118 = ">"; + var peg$c119 = "<="; + var peg$c120 = "<"; + var peg$c121 = "\\"; + var peg$c122 = "\u201C"; + var peg$c123 = "\u201D"; + var peg$c124 = "\""; var peg$r0 = /^[^ \t\r\n\xA0]/; var peg$r1 = /^[ \t\r\n\xA0,:=<>!]/; @@ -383,92 +385,94 @@ function peg$parse(input, options) { var peg$e56 = peg$literalExpectation("workspace", true); var peg$e57 = peg$literalExpectation("submitted", true); var peg$e58 = peg$literalExpectation("approved", true); - var peg$e59 = peg$literalExpectation("paid", true); - var peg$e60 = peg$literalExpectation("exported", true); - var peg$e61 = peg$literalExpectation("posted", true); - var peg$e62 = peg$literalExpectation("withdrawn", true); - var peg$e63 = peg$literalExpectation("groupBy", true); - var peg$e64 = peg$literalExpectation("group-by", true); - var peg$e65 = peg$literalExpectation("limit", true); - var peg$e66 = peg$literalExpectation("feed", true); - var peg$e67 = peg$literalExpectation("title", true); - var peg$e68 = peg$literalExpectation("submitterUserID", true); - var peg$e69 = peg$literalExpectation("submitter-user-id", true); - var peg$e70 = peg$literalExpectation("submitterPayrollID", true); - var peg$e71 = peg$literalExpectation("submitter-payroll-id", true); - var peg$e72 = peg$literalExpectation("orderDealNumbers", true); - var peg$e73 = peg$literalExpectation("order-deal-numbers", true); - var peg$e74 = peg$literalExpectation("assignee", true); - var peg$e75 = peg$literalExpectation("createdBy", true); - var peg$e76 = peg$literalExpectation("created-by", true); - var peg$e77 = peg$literalExpectation("action", true); - var peg$e78 = peg$literalExpectation("total", true); - var peg$e79 = peg$literalExpectation("has", true); - var peg$e80 = peg$literalExpectation("is", true); - var peg$e81 = peg$literalExpectation("purchaseAmount", true); - var peg$e82 = peg$literalExpectation("purchase-amount", true); - var peg$e83 = peg$literalExpectation("purchaseCurrency", true); - var peg$e84 = peg$literalExpectation("purchase-currency", true); - var peg$e85 = peg$literalExpectation("amountDebited", true); - var peg$e86 = peg$literalExpectation("amount-debited", true); - var peg$e87 = peg$literalExpectation("amountReimbursed", true); - var peg$e88 = peg$literalExpectation("amount-reimbursed", true); - var peg$e89 = peg$literalExpectation("columns", true); - var peg$e90 = peg$literalExpectation("view", true); - var peg$e91 = peg$literalExpectation("per-diem", true); - var peg$e92 = peg$literalExpectation("drafts", true); - var peg$e93 = peg$literalExpectation("draft", true); - var peg$e94 = peg$literalExpectation("tax", true); - var peg$e95 = peg$literalExpectation("policy-name", true); - var peg$e96 = peg$literalExpectation("long-report-id", true); - var peg$e97 = peg$literalExpectation("exported-to", true); - var peg$e98 = peg$classExpectation([":", "="], false, false); - var peg$e99 = peg$literalExpectation("exportedTo", true); - var peg$e100 = peg$literalExpectation("exchange-rate", true); - var peg$e101 = peg$literalExpectation("reimbursable-total", true); - var peg$e102 = peg$literalExpectation("non-reimbursable-total", true); - var peg$e103 = peg$literalExpectation("group-from", true); - var peg$e104 = peg$literalExpectation("group-expenses", true); - var peg$e105 = peg$literalExpectation("group-total", true); - var peg$e106 = peg$literalExpectation("group-card", true); - var peg$e107 = peg$literalExpectation("group-feed", true); - var peg$e108 = peg$literalExpectation("group-bank-account", true); - var peg$e109 = peg$literalExpectation("group-withdrawn", true); - var peg$e110 = peg$literalExpectation("group-withdrawal-id", true); - var peg$e111 = peg$literalExpectation("group-amount-debited", true); - var peg$e112 = peg$literalExpectation("group-amount-reimbursed", true); - var peg$e113 = peg$literalExpectation("group-category", true); - var peg$e114 = peg$literalExpectation("group-tag", true); - var peg$e115 = peg$literalExpectation("group-merchant", true); - var peg$e116 = peg$literalExpectation("group-month", true); - var peg$e117 = peg$literalExpectation("group-week", true); - var peg$e118 = peg$literalExpectation("group-year", true); - var peg$e119 = peg$literalExpectation("group-quarter", true); - var peg$e120 = peg$otherExpectation("operator"); - var peg$e121 = peg$literalExpectation("!=", false); - var peg$e122 = peg$literalExpectation(">=", false); - var peg$e123 = peg$literalExpectation(">", false); - var peg$e124 = peg$literalExpectation("<=", false); - var peg$e125 = peg$literalExpectation("<", false); - var peg$e126 = peg$literalExpectation("\\", false); - var peg$e127 = peg$classExpectation([",", "\"", "\u201D", "\u201C", "\\"], false, false); - var peg$e128 = peg$otherExpectation("word"); - var peg$e129 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e130 = peg$otherExpectation("whitespace"); - var peg$e131 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); - var peg$e132 = peg$otherExpectation("quote"); - var peg$e133 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e134 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); - var peg$e135 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); - var peg$e136 = peg$literalExpectation("\u201C", false); - var peg$e137 = peg$literalExpectation("\u201D", false); - var peg$e138 = peg$literalExpectation("\"", false); - var peg$e139 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e140 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e141 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); - var peg$e142 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); - var peg$e143 = peg$classExpectation([","], false, false); - var peg$e144 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ","], false, false); + var peg$e59 = peg$literalExpectation("any-approval", true); + var peg$e60 = peg$literalExpectation("anyApproval", true); + var peg$e61 = peg$literalExpectation("paid", true); + var peg$e62 = peg$literalExpectation("exported", true); + var peg$e63 = peg$literalExpectation("posted", true); + var peg$e64 = peg$literalExpectation("withdrawn", true); + var peg$e65 = peg$literalExpectation("groupBy", true); + var peg$e66 = peg$literalExpectation("group-by", true); + var peg$e67 = peg$literalExpectation("limit", true); + var peg$e68 = peg$literalExpectation("feed", true); + var peg$e69 = peg$literalExpectation("title", true); + var peg$e70 = peg$literalExpectation("submitterUserID", true); + var peg$e71 = peg$literalExpectation("submitter-user-id", true); + var peg$e72 = peg$literalExpectation("submitterPayrollID", true); + var peg$e73 = peg$literalExpectation("submitter-payroll-id", true); + var peg$e74 = peg$literalExpectation("orderDealNumbers", true); + var peg$e75 = peg$literalExpectation("order-deal-numbers", true); + var peg$e76 = peg$literalExpectation("assignee", true); + var peg$e77 = peg$literalExpectation("createdBy", true); + var peg$e78 = peg$literalExpectation("created-by", true); + var peg$e79 = peg$literalExpectation("action", true); + var peg$e80 = peg$literalExpectation("total", true); + var peg$e81 = peg$literalExpectation("has", true); + var peg$e82 = peg$literalExpectation("is", true); + var peg$e83 = peg$literalExpectation("purchaseAmount", true); + var peg$e84 = peg$literalExpectation("purchase-amount", true); + var peg$e85 = peg$literalExpectation("purchaseCurrency", true); + var peg$e86 = peg$literalExpectation("purchase-currency", true); + var peg$e87 = peg$literalExpectation("amountDebited", true); + var peg$e88 = peg$literalExpectation("amount-debited", true); + var peg$e89 = peg$literalExpectation("amountReimbursed", true); + var peg$e90 = peg$literalExpectation("amount-reimbursed", true); + var peg$e91 = peg$literalExpectation("columns", true); + var peg$e92 = peg$literalExpectation("view", true); + var peg$e93 = peg$literalExpectation("per-diem", true); + var peg$e94 = peg$literalExpectation("drafts", true); + var peg$e95 = peg$literalExpectation("draft", true); + var peg$e96 = peg$literalExpectation("tax", true); + var peg$e97 = peg$literalExpectation("policy-name", true); + var peg$e98 = peg$literalExpectation("long-report-id", true); + var peg$e99 = peg$literalExpectation("exported-to", true); + var peg$e100 = peg$classExpectation([":", "="], false, false); + var peg$e101 = peg$literalExpectation("exportedTo", true); + var peg$e102 = peg$literalExpectation("exchange-rate", true); + var peg$e103 = peg$literalExpectation("reimbursable-total", true); + var peg$e104 = peg$literalExpectation("non-reimbursable-total", true); + var peg$e105 = peg$literalExpectation("group-from", true); + var peg$e106 = peg$literalExpectation("group-expenses", true); + var peg$e107 = peg$literalExpectation("group-total", true); + var peg$e108 = peg$literalExpectation("group-card", true); + var peg$e109 = peg$literalExpectation("group-feed", true); + var peg$e110 = peg$literalExpectation("group-bank-account", true); + var peg$e111 = peg$literalExpectation("group-withdrawn", true); + var peg$e112 = peg$literalExpectation("group-withdrawal-id", true); + var peg$e113 = peg$literalExpectation("group-amount-debited", true); + var peg$e114 = peg$literalExpectation("group-amount-reimbursed", true); + var peg$e115 = peg$literalExpectation("group-category", true); + var peg$e116 = peg$literalExpectation("group-tag", true); + var peg$e117 = peg$literalExpectation("group-merchant", true); + var peg$e118 = peg$literalExpectation("group-month", true); + var peg$e119 = peg$literalExpectation("group-week", true); + var peg$e120 = peg$literalExpectation("group-year", true); + var peg$e121 = peg$literalExpectation("group-quarter", true); + var peg$e122 = peg$otherExpectation("operator"); + var peg$e123 = peg$literalExpectation("!=", false); + var peg$e124 = peg$literalExpectation(">=", false); + var peg$e125 = peg$literalExpectation(">", false); + var peg$e126 = peg$literalExpectation("<=", false); + var peg$e127 = peg$literalExpectation("<", false); + var peg$e128 = peg$literalExpectation("\\", false); + var peg$e129 = peg$classExpectation([",", "\"", "\u201D", "\u201C", "\\"], false, false); + var peg$e130 = peg$otherExpectation("word"); + var peg$e131 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e132 = peg$otherExpectation("whitespace"); + var peg$e133 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); + var peg$e134 = peg$otherExpectation("quote"); + var peg$e135 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e136 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); + var peg$e137 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); + var peg$e138 = peg$literalExpectation("\u201C", false); + var peg$e139 = peg$literalExpectation("\u201D", false); + var peg$e140 = peg$literalExpectation("\"", false); + var peg$e141 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e142 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e143 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); + var peg$e144 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); + var peg$e145 = peg$classExpectation([","], false, false); + var peg$e146 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ","], false, false); var peg$f0 = function(filters) { return applyDefaults(filters); }; var peg$f1 = function(head, tail) { @@ -590,95 +594,97 @@ function peg$parse(input, options) { var peg$f40 = function() { return "policyID"; }; var peg$f41 = function() { return "submitted"; }; var peg$f42 = function() { return "approved"; }; - var peg$f43 = function() { return "paid"; }; - var peg$f44 = function() { return "exported"; }; - var peg$f45 = function() { return "posted"; }; - var peg$f46 = function() { return "withdrawn"; }; - var peg$f47 = function() { return "groupBy"; }; - var peg$f48 = function() { return "limit"; }; - var peg$f49 = function() { return "feed"; }; - var peg$f50 = function() { return "title"; }; - var peg$f51 = function() { return "submitterUserID"; }; - var peg$f52 = function() { return "submitterPayrollID"; }; - var peg$f53 = function() { return "orderDealNumbers"; }; - var peg$f54 = function() { return "assignee"; }; - var peg$f55 = function() { return "createdBy"; }; - var peg$f56 = function() { return "action"; }; - var peg$f57 = function() {return "total"; }; - var peg$f58 = function() {return "has"; }; - var peg$f59 = function() {return "is"; }; - var peg$f60 = function() {return "purchaseAmount"}; - var peg$f61 = function() {return "purchaseCurrency"}; - var peg$f62 = function() {return "amountDebited"}; - var peg$f63 = function() {return "amountReimbursed"}; - var peg$f64 = function() { + var peg$f43 = function() { return "any-approval"; }; + var peg$f44 = function() { return "any-approval"; }; + var peg$f45 = function() { return "paid"; }; + var peg$f46 = function() { return "exported"; }; + var peg$f47 = function() { return "posted"; }; + var peg$f48 = function() { return "withdrawn"; }; + var peg$f49 = function() { return "groupBy"; }; + var peg$f50 = function() { return "limit"; }; + var peg$f51 = function() { return "feed"; }; + var peg$f52 = function() { return "title"; }; + var peg$f53 = function() { return "submitterUserID"; }; + var peg$f54 = function() { return "submitterPayrollID"; }; + var peg$f55 = function() { return "orderDealNumbers"; }; + var peg$f56 = function() { return "assignee"; }; + var peg$f57 = function() { return "createdBy"; }; + var peg$f58 = function() { return "action"; }; + var peg$f59 = function() {return "total"; }; + var peg$f60 = function() {return "has"; }; + var peg$f61 = function() {return "is"; }; + var peg$f62 = function() {return "purchaseAmount"}; + var peg$f63 = function() {return "purchaseCurrency"}; + var peg$f64 = function() {return "amountDebited"}; + var peg$f65 = function() {return "amountReimbursed"}; + var peg$f66 = function() { isColumnsContext = true; return "columns"; }; - var peg$f65 = function() {return "view"}; - var peg$f66 = function() { return isColumnsContext; }; - var peg$f67 = function() { return "perDiem"; }; - var peg$f68 = function() { return "drafts"; }; - var peg$f69 = function() { return "originalamount"; }; - var peg$f70 = function() { return "taxAmount"; }; - var peg$f71 = function() { return "taxrate"; }; - var peg$f72 = function() { return "policyname"; }; - var peg$f73 = function() { return "withdrawalID"; }; - var peg$f74 = function() { return "bankAccount"; }; - var peg$f75 = function() { return "reportID"; }; - var peg$f76 = function() { return "base62ReportID"; }; - var peg$f77 = function() { return "exportedto"; }; - var peg$f78 = function() { return "exportedTo"; }; - var peg$f79 = function() { return "exportedTo"; }; - var peg$f80 = function() { return "exchangeRate"; }; - var peg$f81 = function() { return "reimbursableTotal"; }; - var peg$f82 = function() { return "nonReimbursableTotal"; }; - var peg$f83 = function() { return "groupFrom"; }; - var peg$f84 = function() { return "groupExpenses"; }; - var peg$f85 = function() { return "groupTotal"; }; - var peg$f86 = function() { return "groupCard"; }; - var peg$f87 = function() { return "groupFeed"; }; - var peg$f88 = function() { return "groupBankAccount"; }; - var peg$f89 = function() { return "groupWithdrawn"; }; - var peg$f90 = function() { return "groupWithdrawalID"; }; - var peg$f91 = function() { return "groupAmountDebited"; }; - var peg$f92 = function() { return "groupAmountReimbursed"; }; - var peg$f93 = function() { return "amountDebited"; }; - var peg$f94 = function() { return "amountReimbursed"; }; - var peg$f95 = function() { return "groupCategory"; }; - var peg$f96 = function() { return "groupTag"; }; - var peg$f97 = function() { return "groupMerchant"; }; - var peg$f98 = function() { return "groupmonth"; }; - var peg$f99 = function() { return "groupweek"; }; - var peg$f100 = function() { return "groupyear"; }; - var peg$f101 = function() { return "groupquarter"; }; - var peg$f102 = function() { return "eq"; }; - var peg$f103 = function() { return "neq"; }; - var peg$f104 = function() { return "gte"; }; - var peg$f105 = function() { return "gt"; }; - var peg$f106 = function() { return "lte"; }; - var peg$f107 = function() { return "lt"; }; - var peg$f108 = function(o) { + var peg$f67 = function() {return "view"}; + var peg$f68 = function() { return isColumnsContext; }; + var peg$f69 = function() { return "perDiem"; }; + var peg$f70 = function() { return "drafts"; }; + var peg$f71 = function() { return "originalamount"; }; + var peg$f72 = function() { return "taxAmount"; }; + var peg$f73 = function() { return "taxrate"; }; + var peg$f74 = function() { return "policyname"; }; + var peg$f75 = function() { return "withdrawalID"; }; + var peg$f76 = function() { return "bankAccount"; }; + var peg$f77 = function() { return "reportID"; }; + var peg$f78 = function() { return "base62ReportID"; }; + var peg$f79 = function() { return "exportedto"; }; + var peg$f80 = function() { return "exportedTo"; }; + var peg$f81 = function() { return "exportedTo"; }; + var peg$f82 = function() { return "exchangeRate"; }; + var peg$f83 = function() { return "reimbursableTotal"; }; + var peg$f84 = function() { return "nonReimbursableTotal"; }; + var peg$f85 = function() { return "groupFrom"; }; + var peg$f86 = function() { return "groupExpenses"; }; + var peg$f87 = function() { return "groupTotal"; }; + var peg$f88 = function() { return "groupCard"; }; + var peg$f89 = function() { return "groupFeed"; }; + var peg$f90 = function() { return "groupBankAccount"; }; + var peg$f91 = function() { return "groupWithdrawn"; }; + var peg$f92 = function() { return "groupWithdrawalID"; }; + var peg$f93 = function() { return "groupAmountDebited"; }; + var peg$f94 = function() { return "groupAmountReimbursed"; }; + var peg$f95 = function() { return "amountDebited"; }; + var peg$f96 = function() { return "amountReimbursed"; }; + var peg$f97 = function() { return "groupCategory"; }; + var peg$f98 = function() { return "groupTag"; }; + var peg$f99 = function() { return "groupMerchant"; }; + var peg$f100 = function() { return "groupmonth"; }; + var peg$f101 = function() { return "groupweek"; }; + var peg$f102 = function() { return "groupyear"; }; + var peg$f103 = function() { return "groupquarter"; }; + var peg$f104 = function() { return "eq"; }; + var peg$f105 = function() { return "neq"; }; + var peg$f106 = function() { return "gte"; }; + var peg$f107 = function() { return "gt"; }; + var peg$f108 = function() { return "lte"; }; + var peg$f109 = function() { return "lt"; }; + var peg$f110 = function(o) { if (nameOperator) { expectingNestedQuote = (o === "eq"); // Use simple parser if no valid operator is found } isColumnsContext = false; return o; }; - var peg$f109 = function(c) { return c; }; - var peg$f110 = function(chars) { return chars.join("").trim(); }; - var peg$f111 = function() { + var peg$f111 = function(c) { return c; }; + var peg$f112 = function(chars) { return chars.join("").trim(); }; + var peg$f113 = function() { isColumnsContext = false; return "and"; }; - var peg$f112 = function() { return expectingNestedQuote; }; - var peg$f113 = function(start, inner, end) { //handle no-breaking space + var peg$f114 = function() { return expectingNestedQuote; }; + var peg$f115 = function(start, inner, end) { //handle no-breaking space return [...start, '"', ...inner, '"', ...end].join(""); }; - var peg$f114 = function(start) {return "“"}; - var peg$f115 = function(start) {return "”"}; - var peg$f116 = function(start) {return "\""}; - var peg$f117 = function(start, inner, end) { + var peg$f116 = function(start) {return "“"}; + var peg$f117 = function(start) {return "”"}; + var peg$f118 = function(start) {return "\""}; + var peg$f119 = function(start, inner, end) { return [...start, '"', ...inner, '"'].join(""); }; var peg$currPos = options.peg$currPos | 0; @@ -1226,51 +1232,54 @@ function peg$parse(input, options) { if (s1 === peg$FAILED) { s1 = peg$parsesubmitted(); if (s1 === peg$FAILED) { - s1 = peg$parseapproved(); + s1 = peg$parseanyApproval(); if (s1 === peg$FAILED) { - s1 = peg$parsepaid(); + s1 = peg$parseapproved(); if (s1 === peg$FAILED) { - s1 = peg$parseexportedTo(); + s1 = peg$parsepaid(); if (s1 === peg$FAILED) { - s1 = peg$parseexported(); + s1 = peg$parseexportedTo(); if (s1 === peg$FAILED) { - s1 = peg$parseposted(); + s1 = peg$parseexported(); if (s1 === peg$FAILED) { - s1 = peg$parsewithdrawn(); + s1 = peg$parseposted(); if (s1 === peg$FAILED) { - s1 = peg$parsefeed(); + s1 = peg$parsewithdrawn(); if (s1 === peg$FAILED) { - s1 = peg$parsetitle(); + s1 = peg$parsefeed(); if (s1 === peg$FAILED) { - s1 = peg$parsesubmitterUserID(); + s1 = peg$parsetitle(); if (s1 === peg$FAILED) { - s1 = peg$parsesubmitterPayrollID(); + s1 = peg$parsesubmitterUserID(); if (s1 === peg$FAILED) { - s1 = peg$parseorderDealNumbers(); + s1 = peg$parsesubmitterPayrollID(); if (s1 === peg$FAILED) { - s1 = peg$parseassignee(); + s1 = peg$parseorderDealNumbers(); if (s1 === peg$FAILED) { - s1 = peg$parsecreatedBy(); + s1 = peg$parseassignee(); if (s1 === peg$FAILED) { - s1 = peg$parsereimbursable(); + s1 = peg$parsecreatedBy(); if (s1 === peg$FAILED) { - s1 = peg$parsebillable(); + s1 = peg$parsereimbursable(); if (s1 === peg$FAILED) { - s1 = peg$parseaction(); + s1 = peg$parsebillable(); if (s1 === peg$FAILED) { - s1 = peg$parsehas(); + s1 = peg$parseaction(); if (s1 === peg$FAILED) { - s1 = peg$parseis(); + s1 = peg$parsehas(); if (s1 === peg$FAILED) { - s1 = peg$parsepurchaseCurrency(); + s1 = peg$parseis(); if (s1 === peg$FAILED) { - s1 = peg$parsepurchaseAmount(); + s1 = peg$parsepurchaseCurrency(); if (s1 === peg$FAILED) { - s1 = peg$parsepolicyID(); + s1 = peg$parsepurchaseAmount(); if (s1 === peg$FAILED) { - s1 = peg$parsestatus(); + s1 = peg$parsepolicyID(); if (s1 === peg$FAILED) { - s1 = peg$parsereportFieldDynamic(); + s1 = peg$parsestatus(); + if (s1 === peg$FAILED) { + s1 = peg$parsereportFieldDynamic(); + } } } } @@ -2349,13 +2358,13 @@ function peg$parse(input, options) { return s0; } - function peg$parsepaid() { + function peg$parseanyApproval() { var s0, s1; s0 = peg$currPos; - s1 = input.substr(peg$currPos, 4); + s1 = input.substr(peg$currPos, 12); if (s1.toLowerCase() === peg$c54) { - peg$currPos += 4; + peg$currPos += 12; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$e59); } @@ -2365,6 +2374,41 @@ function peg$parse(input, options) { s1 = peg$f43(); } s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 11); + if (s1.toLowerCase() === peg$c55) { + peg$currPos += 11; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e60); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f44(); + } + s0 = s1; + } + + return s0; + } + + function peg$parsepaid() { + var s0, s1; + + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 4); + if (s1.toLowerCase() === peg$c56) { + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e61); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f45(); + } + s0 = s1; return s0; } @@ -2374,15 +2418,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c55) { + if (s1.toLowerCase() === peg$c57) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e60); } + if (peg$silentFails === 0) { peg$fail(peg$e62); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f44(); + s1 = peg$f46(); } s0 = s1; @@ -2394,15 +2438,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c56) { + if (s1.toLowerCase() === peg$c58) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e61); } + if (peg$silentFails === 0) { peg$fail(peg$e63); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f45(); + s1 = peg$f47(); } s0 = s1; @@ -2414,15 +2458,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 9); - if (s1.toLowerCase() === peg$c57) { + if (s1.toLowerCase() === peg$c59) { peg$currPos += 9; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e62); } + if (peg$silentFails === 0) { peg$fail(peg$e64); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f46(); + s1 = peg$f48(); } s0 = s1; @@ -2433,24 +2477,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 7); - if (s0.toLowerCase() === peg$c58) { + if (s0.toLowerCase() === peg$c60) { peg$currPos += 7; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e63); } + if (peg$silentFails === 0) { peg$fail(peg$e65); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c59) { + if (s1.toLowerCase() === peg$c61) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e64); } + if (peg$silentFails === 0) { peg$fail(peg$e66); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f47(); + s1 = peg$f49(); } s0 = s1; } @@ -2463,15 +2507,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c60) { + if (s1.toLowerCase() === peg$c62) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e65); } + if (peg$silentFails === 0) { peg$fail(peg$e67); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f48(); + s1 = peg$f50(); } s0 = s1; @@ -2483,15 +2527,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 4); - if (s1.toLowerCase() === peg$c61) { + if (s1.toLowerCase() === peg$c63) { peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e66); } + if (peg$silentFails === 0) { peg$fail(peg$e68); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f49(); + s1 = peg$f51(); } s0 = s1; @@ -2503,15 +2547,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c62) { + if (s1.toLowerCase() === peg$c64) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e67); } + if (peg$silentFails === 0) { peg$fail(peg$e69); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f50(); + s1 = peg$f52(); } s0 = s1; @@ -2522,24 +2566,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 15); - if (s0.toLowerCase() === peg$c63) { + if (s0.toLowerCase() === peg$c65) { peg$currPos += 15; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e68); } + if (peg$silentFails === 0) { peg$fail(peg$e70); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c64) { + if (s1.toLowerCase() === peg$c66) { peg$currPos += 17; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e69); } + if (peg$silentFails === 0) { peg$fail(peg$e71); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f51(); + s1 = peg$f53(); } s0 = s1; } @@ -2551,24 +2595,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 18); - if (s0.toLowerCase() === peg$c65) { + if (s0.toLowerCase() === peg$c67) { peg$currPos += 18; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e70); } + if (peg$silentFails === 0) { peg$fail(peg$e72); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 20); - if (s1.toLowerCase() === peg$c66) { + if (s1.toLowerCase() === peg$c68) { peg$currPos += 20; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e71); } + if (peg$silentFails === 0) { peg$fail(peg$e73); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f52(); + s1 = peg$f54(); } s0 = s1; } @@ -2580,24 +2624,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 16); - if (s0.toLowerCase() === peg$c67) { + if (s0.toLowerCase() === peg$c69) { peg$currPos += 16; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e72); } + if (peg$silentFails === 0) { peg$fail(peg$e74); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 18); - if (s1.toLowerCase() === peg$c68) { + if (s1.toLowerCase() === peg$c70) { peg$currPos += 18; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e73); } + if (peg$silentFails === 0) { peg$fail(peg$e75); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f53(); + s1 = peg$f55(); } s0 = s1; } @@ -2610,15 +2654,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c69) { + if (s1.toLowerCase() === peg$c71) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e74); } + if (peg$silentFails === 0) { peg$fail(peg$e76); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f54(); + s1 = peg$f56(); } s0 = s1; @@ -2629,24 +2673,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 9); - if (s0.toLowerCase() === peg$c70) { + if (s0.toLowerCase() === peg$c72) { peg$currPos += 9; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e75); } + if (peg$silentFails === 0) { peg$fail(peg$e77); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c71) { + if (s1.toLowerCase() === peg$c73) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e76); } + if (peg$silentFails === 0) { peg$fail(peg$e78); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f55(); + s1 = peg$f57(); } s0 = s1; } @@ -2659,15 +2703,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c72) { + if (s1.toLowerCase() === peg$c74) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e77); } + if (peg$silentFails === 0) { peg$fail(peg$e79); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f56(); + s1 = peg$f58(); } s0 = s1; @@ -2679,15 +2723,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c73) { + if (s1.toLowerCase() === peg$c75) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e78); } + if (peg$silentFails === 0) { peg$fail(peg$e80); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f57(); + s1 = peg$f59(); } s0 = s1; @@ -2699,15 +2743,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 3); - if (s1.toLowerCase() === peg$c74) { + if (s1.toLowerCase() === peg$c76) { peg$currPos += 3; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e79); } + if (peg$silentFails === 0) { peg$fail(peg$e81); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f58(); + s1 = peg$f60(); } s0 = s1; @@ -2719,15 +2763,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 2); - if (s1.toLowerCase() === peg$c75) { + if (s1.toLowerCase() === peg$c77) { peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e80); } + if (peg$silentFails === 0) { peg$fail(peg$e82); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f59(); + s1 = peg$f61(); } s0 = s1; @@ -2738,24 +2782,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 14); - if (s0.toLowerCase() === peg$c76) { + if (s0.toLowerCase() === peg$c78) { peg$currPos += 14; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e81); } + if (peg$silentFails === 0) { peg$fail(peg$e83); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c77) { + if (s1.toLowerCase() === peg$c79) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e82); } + if (peg$silentFails === 0) { peg$fail(peg$e84); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f60(); + s1 = peg$f62(); } s0 = s1; } @@ -2767,24 +2811,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 16); - if (s0.toLowerCase() === peg$c78) { + if (s0.toLowerCase() === peg$c80) { peg$currPos += 16; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e83); } + if (peg$silentFails === 0) { peg$fail(peg$e85); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c79) { + if (s1.toLowerCase() === peg$c81) { peg$currPos += 17; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e84); } + if (peg$silentFails === 0) { peg$fail(peg$e86); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f61(); + s1 = peg$f63(); } s0 = s1; } @@ -2796,24 +2840,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 13); - if (s0.toLowerCase() === peg$c80) { + if (s0.toLowerCase() === peg$c82) { peg$currPos += 13; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e85); } + if (peg$silentFails === 0) { peg$fail(peg$e87); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c81) { + if (s1.toLowerCase() === peg$c83) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e86); } + if (peg$silentFails === 0) { peg$fail(peg$e88); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f62(); + s1 = peg$f64(); } s0 = s1; } @@ -2825,24 +2869,24 @@ function peg$parse(input, options) { var s0, s1; s0 = input.substr(peg$currPos, 16); - if (s0.toLowerCase() === peg$c82) { + if (s0.toLowerCase() === peg$c84) { peg$currPos += 16; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e87); } + if (peg$silentFails === 0) { peg$fail(peg$e89); } } if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c83) { + if (s1.toLowerCase() === peg$c85) { peg$currPos += 17; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e88); } + if (peg$silentFails === 0) { peg$fail(peg$e90); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f63(); + s1 = peg$f65(); } s0 = s1; } @@ -2855,15 +2899,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 7); - if (s1.toLowerCase() === peg$c84) { + if (s1.toLowerCase() === peg$c86) { peg$currPos += 7; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e89); } + if (peg$silentFails === 0) { peg$fail(peg$e91); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f64(); + s1 = peg$f66(); } s0 = s1; @@ -2875,15 +2919,15 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 4); - if (s1.toLowerCase() === peg$c85) { + if (s1.toLowerCase() === peg$c87) { peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e90); } + if (peg$silentFails === 0) { peg$fail(peg$e92); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f65(); + s1 = peg$f67(); } s0 = s1; @@ -2895,7 +2939,7 @@ function peg$parse(input, options) { s0 = peg$currPos; peg$savedPos = peg$currPos; - s1 = peg$f66(); + s1 = peg$f68(); if (s1) { s1 = undefined; } else { @@ -3027,11 +3071,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 8); - if (s1.toLowerCase() === peg$c86) { + if (s1.toLowerCase() === peg$c88) { peg$currPos += 8; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e91); } + if (peg$silentFails === 0) { peg$fail(peg$e93); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3046,7 +3090,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f67(); + s0 = peg$f69(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3064,19 +3108,19 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 6); - if (s1.toLowerCase() === peg$c87) { + if (s1.toLowerCase() === peg$c89) { peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e92); } + if (peg$silentFails === 0) { peg$fail(peg$e94); } } if (s1 === peg$FAILED) { s1 = input.substr(peg$currPos, 5); - if (s1.toLowerCase() === peg$c88) { + if (s1.toLowerCase() === peg$c90) { peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e93); } + if (peg$silentFails === 0) { peg$fail(peg$e95); } } } if (s1 !== peg$FAILED) { @@ -3092,7 +3136,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f68(); + s0 = peg$f70(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3110,11 +3154,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c77) { + if (s1.toLowerCase() === peg$c79) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e82); } + if (peg$silentFails === 0) { peg$fail(peg$e84); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3129,7 +3173,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f69(); + s0 = peg$f71(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3147,11 +3191,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 3); - if (s1.toLowerCase() === peg$c89) { + if (s1.toLowerCase() === peg$c91) { peg$currPos += 3; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e94); } + if (peg$silentFails === 0) { peg$fail(peg$e96); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3166,7 +3210,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f70(); + s0 = peg$f72(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3203,7 +3247,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f71(); + s0 = peg$f73(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3221,11 +3265,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c90) { + if (s1.toLowerCase() === peg$c92) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e95); } + if (peg$silentFails === 0) { peg$fail(peg$e97); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3240,7 +3284,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f72(); + s0 = peg$f74(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3277,7 +3321,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f73(); + s0 = peg$f75(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3314,7 +3358,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f74(); + s0 = peg$f76(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3332,11 +3376,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c91) { + if (s1.toLowerCase() === peg$c93) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e96); } + if (peg$silentFails === 0) { peg$fail(peg$e98); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3351,7 +3395,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f75(); + s0 = peg$f77(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3388,7 +3432,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f76(); + s0 = peg$f78(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3406,11 +3450,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c92) { + if (s1.toLowerCase() === peg$c94) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e97); } + if (peg$silentFails === 0) { peg$fail(peg$e99); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3425,7 +3469,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f77(); + s0 = peg$f79(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3450,7 +3494,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e98); } + if (peg$silentFails === 0) { peg$fail(peg$e100); } } if (s2 !== peg$FAILED) { s1 = [s1, s2]; @@ -3469,11 +3513,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c93) { + if (s1.toLowerCase() === peg$c95) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e99); } + if (peg$silentFails === 0) { peg$fail(peg$e101); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3488,7 +3532,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f78(); + s0 = peg$f80(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3500,11 +3544,11 @@ function peg$parse(input, options) { if (s0 === peg$FAILED) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c92) { + if (s1.toLowerCase() === peg$c94) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e97); } + if (peg$silentFails === 0) { peg$fail(peg$e99); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3519,7 +3563,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f79(); + s0 = peg$f81(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3538,11 +3582,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 13); - if (s1.toLowerCase() === peg$c94) { + if (s1.toLowerCase() === peg$c96) { peg$currPos += 13; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e100); } + if (peg$silentFails === 0) { peg$fail(peg$e102); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3557,7 +3601,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f80(); + s0 = peg$f82(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3575,11 +3619,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 18); - if (s1.toLowerCase() === peg$c95) { + if (s1.toLowerCase() === peg$c97) { peg$currPos += 18; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e101); } + if (peg$silentFails === 0) { peg$fail(peg$e103); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3594,7 +3638,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f81(); + s0 = peg$f83(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3612,11 +3656,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 22); - if (s1.toLowerCase() === peg$c96) { + if (s1.toLowerCase() === peg$c98) { peg$currPos += 22; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e102); } + if (peg$silentFails === 0) { peg$fail(peg$e104); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3631,7 +3675,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f82(); + s0 = peg$f84(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3649,11 +3693,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c97) { + if (s1.toLowerCase() === peg$c99) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e103); } + if (peg$silentFails === 0) { peg$fail(peg$e105); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3668,7 +3712,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f83(); + s0 = peg$f85(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3686,11 +3730,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c98) { + if (s1.toLowerCase() === peg$c100) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e104); } + if (peg$silentFails === 0) { peg$fail(peg$e106); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3705,7 +3749,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f84(); + s0 = peg$f86(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3723,11 +3767,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c99) { + if (s1.toLowerCase() === peg$c101) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e105); } + if (peg$silentFails === 0) { peg$fail(peg$e107); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3742,7 +3786,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f85(); + s0 = peg$f87(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3760,11 +3804,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c100) { + if (s1.toLowerCase() === peg$c102) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e106); } + if (peg$silentFails === 0) { peg$fail(peg$e108); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3779,7 +3823,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f86(); + s0 = peg$f88(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3797,11 +3841,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c101) { + if (s1.toLowerCase() === peg$c103) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e107); } + if (peg$silentFails === 0) { peg$fail(peg$e109); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3816,7 +3860,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f87(); + s0 = peg$f89(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3834,11 +3878,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 18); - if (s1.toLowerCase() === peg$c102) { + if (s1.toLowerCase() === peg$c104) { peg$currPos += 18; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e108); } + if (peg$silentFails === 0) { peg$fail(peg$e110); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3853,7 +3897,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f88(); + s0 = peg$f90(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3871,11 +3915,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 15); - if (s1.toLowerCase() === peg$c103) { + if (s1.toLowerCase() === peg$c105) { peg$currPos += 15; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e109); } + if (peg$silentFails === 0) { peg$fail(peg$e111); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3890,7 +3934,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f89(); + s0 = peg$f91(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3908,11 +3952,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 19); - if (s1.toLowerCase() === peg$c104) { + if (s1.toLowerCase() === peg$c106) { peg$currPos += 19; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e110); } + if (peg$silentFails === 0) { peg$fail(peg$e112); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3927,7 +3971,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f90(); + s0 = peg$f92(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3945,11 +3989,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 20); - if (s1.toLowerCase() === peg$c105) { + if (s1.toLowerCase() === peg$c107) { peg$currPos += 20; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e111); } + if (peg$silentFails === 0) { peg$fail(peg$e113); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -3964,7 +4008,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f91(); + s0 = peg$f93(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -3982,11 +4026,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 23); - if (s1.toLowerCase() === peg$c106) { + if (s1.toLowerCase() === peg$c108) { peg$currPos += 23; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e112); } + if (peg$silentFails === 0) { peg$fail(peg$e114); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4001,7 +4045,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f92(); + s0 = peg$f94(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4019,11 +4063,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c81) { + if (s1.toLowerCase() === peg$c83) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e86); } + if (peg$silentFails === 0) { peg$fail(peg$e88); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4038,7 +4082,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f93(); + s0 = peg$f95(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4056,11 +4100,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 17); - if (s1.toLowerCase() === peg$c83) { + if (s1.toLowerCase() === peg$c85) { peg$currPos += 17; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e88); } + if (peg$silentFails === 0) { peg$fail(peg$e90); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4075,7 +4119,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f94(); + s0 = peg$f96(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4093,11 +4137,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c107) { + if (s1.toLowerCase() === peg$c109) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e113); } + if (peg$silentFails === 0) { peg$fail(peg$e115); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4112,7 +4156,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f95(); + s0 = peg$f97(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4130,11 +4174,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 9); - if (s1.toLowerCase() === peg$c108) { + if (s1.toLowerCase() === peg$c110) { peg$currPos += 9; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e114); } + if (peg$silentFails === 0) { peg$fail(peg$e116); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4149,7 +4193,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f96(); + s0 = peg$f98(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4167,11 +4211,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 14); - if (s1.toLowerCase() === peg$c109) { + if (s1.toLowerCase() === peg$c111) { peg$currPos += 14; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e115); } + if (peg$silentFails === 0) { peg$fail(peg$e117); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4186,7 +4230,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f97(); + s0 = peg$f99(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4204,11 +4248,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 11); - if (s1.toLowerCase() === peg$c110) { + if (s1.toLowerCase() === peg$c112) { peg$currPos += 11; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e116); } + if (peg$silentFails === 0) { peg$fail(peg$e118); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4223,7 +4267,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f98(); + s0 = peg$f100(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4241,11 +4285,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c111) { + if (s1.toLowerCase() === peg$c113) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e117); } + if (peg$silentFails === 0) { peg$fail(peg$e119); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4260,7 +4304,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f99(); + s0 = peg$f101(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4278,11 +4322,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 10); - if (s1.toLowerCase() === peg$c112) { + if (s1.toLowerCase() === peg$c114) { peg$currPos += 10; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e118); } + if (peg$silentFails === 0) { peg$fail(peg$e120); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4297,7 +4341,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f100(); + s0 = peg$f102(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4315,11 +4359,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = input.substr(peg$currPos, 13); - if (s1.toLowerCase() === peg$c113) { + if (s1.toLowerCase() === peg$c115) { peg$currPos += 13; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e119); } + if (peg$silentFails === 0) { peg$fail(peg$e121); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4334,7 +4378,7 @@ function peg$parse(input, options) { } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f101(); + s0 = peg$f103(); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4357,81 +4401,81 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e98); } + if (peg$silentFails === 0) { peg$fail(peg$e100); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f102(); + s1 = peg$f104(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c114) { - s1 = peg$c114; + if (input.substr(peg$currPos, 2) === peg$c116) { + s1 = peg$c116; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e121); } + if (peg$silentFails === 0) { peg$fail(peg$e123); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f103(); + s1 = peg$f105(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c115) { - s1 = peg$c115; + if (input.substr(peg$currPos, 2) === peg$c117) { + s1 = peg$c117; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e122); } + if (peg$silentFails === 0) { peg$fail(peg$e124); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f104(); + s1 = peg$f106(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 62) { - s1 = peg$c116; + s1 = peg$c118; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e123); } + if (peg$silentFails === 0) { peg$fail(peg$e125); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f105(); + s1 = peg$f107(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c117) { - s1 = peg$c117; + if (input.substr(peg$currPos, 2) === peg$c119) { + s1 = peg$c119; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e124); } + if (peg$silentFails === 0) { peg$fail(peg$e126); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f106(); + s1 = peg$f108(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 60) { - s1 = peg$c118; + s1 = peg$c120; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e125); } + if (peg$silentFails === 0) { peg$fail(peg$e127); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f107(); + s1 = peg$f109(); } s0 = s1; } @@ -4442,7 +4486,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e120); } + if (peg$silentFails === 0) { peg$fail(peg$e122); } } return s0; @@ -4455,7 +4499,7 @@ function peg$parse(input, options) { s1 = peg$parseoperator(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f108(s1); + s1 = peg$f110(s1); } s0 = s1; @@ -4467,11 +4511,11 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 92) { - s1 = peg$c119; + s1 = peg$c121; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e126); } + if (peg$silentFails === 0) { peg$fail(peg$e128); } } if (s1 !== peg$FAILED) { s2 = input.charAt(peg$currPos); @@ -4479,11 +4523,11 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e127); } + if (peg$silentFails === 0) { peg$fail(peg$e129); } } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f109(s2); + s0 = peg$f111(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4509,7 +4553,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e129); } + if (peg$silentFails === 0) { peg$fail(peg$e131); } } } if (s2 !== peg$FAILED) { @@ -4522,7 +4566,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e129); } + if (peg$silentFails === 0) { peg$fail(peg$e131); } } } } @@ -4531,13 +4575,13 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f110(s1); + s1 = peg$f112(s1); } s0 = s1; peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e128); } + if (peg$silentFails === 0) { peg$fail(peg$e130); } } return s0; @@ -4549,7 +4593,7 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = peg$parse_(); peg$savedPos = s0; - s1 = peg$f111(); + s1 = peg$f113(); s0 = s1; return s0; @@ -4565,7 +4609,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e131); } + if (peg$silentFails === 0) { peg$fail(peg$e133); } } while (s1 !== peg$FAILED) { s0.push(s1); @@ -4574,12 +4618,12 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e131); } + if (peg$silentFails === 0) { peg$fail(peg$e133); } } } peg$silentFails--; s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e130); } + if (peg$silentFails === 0) { peg$fail(peg$e132); } return s0; } @@ -4589,7 +4633,7 @@ function peg$parse(input, options) { s0 = peg$currPos; peg$savedPos = peg$currPos; - s1 = peg$f112(); + s1 = peg$f114(); if (s1) { s1 = undefined; } else { @@ -4626,7 +4670,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e133); } + if (peg$silentFails === 0) { peg$fail(peg$e135); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4635,7 +4679,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e133); } + if (peg$silentFails === 0) { peg$fail(peg$e135); } } } s2 = input.charAt(peg$currPos); @@ -4643,7 +4687,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e134); } + if (peg$silentFails === 0) { peg$fail(peg$e136); } } if (s2 !== peg$FAILED) { s3 = []; @@ -4654,7 +4698,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e135); } + if (peg$silentFails === 0) { peg$fail(peg$e137); } } } while (s4 !== peg$FAILED) { @@ -4666,7 +4710,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e135); } + if (peg$silentFails === 0) { peg$fail(peg$e137); } } } } @@ -4675,7 +4719,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e134); } + if (peg$silentFails === 0) { peg$fail(peg$e136); } } if (s4 !== peg$FAILED) { s5 = []; @@ -4684,7 +4728,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e129); } + if (peg$silentFails === 0) { peg$fail(peg$e131); } } while (s6 !== peg$FAILED) { s5.push(s6); @@ -4693,11 +4737,11 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e129); } + if (peg$silentFails === 0) { peg$fail(peg$e131); } } } peg$savedPos = s0; - s0 = peg$f113(s1, s3, s5); + s0 = peg$f115(s1, s3, s5); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4709,7 +4753,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e132); } + if (peg$silentFails === 0) { peg$fail(peg$e134); } } return s0; @@ -4726,7 +4770,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e133); } + if (peg$silentFails === 0) { peg$fail(peg$e135); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4735,7 +4779,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e133); } + if (peg$silentFails === 0) { peg$fail(peg$e135); } } } s2 = input.charAt(peg$currPos); @@ -4743,7 +4787,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e134); } + if (peg$silentFails === 0) { peg$fail(peg$e136); } } if (s2 !== peg$FAILED) { s3 = []; @@ -4754,7 +4798,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e135); } + if (peg$silentFails === 0) { peg$fail(peg$e137); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -4770,15 +4814,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c120; + s6 = peg$c122; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e136); } + if (peg$silentFails === 0) { peg$fail(peg$e138); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f114(s1); + s4 = peg$f116(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4801,15 +4845,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c121; + s6 = peg$c123; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e137); } + if (peg$silentFails === 0) { peg$fail(peg$e139); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f115(s1); + s4 = peg$f117(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4832,15 +4876,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c122; + s6 = peg$c124; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e138); } + if (peg$silentFails === 0) { peg$fail(peg$e140); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f116(s1); + s4 = peg$f118(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4862,7 +4906,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e135); } + if (peg$silentFails === 0) { peg$fail(peg$e137); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -4878,15 +4922,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c120; + s6 = peg$c122; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e136); } + if (peg$silentFails === 0) { peg$fail(peg$e138); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f114(s1); + s4 = peg$f116(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4909,15 +4953,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c121; + s6 = peg$c123; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e137); } + if (peg$silentFails === 0) { peg$fail(peg$e139); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f115(s1); + s4 = peg$f117(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4940,15 +4984,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c122; + s6 = peg$c124; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e138); } + if (peg$silentFails === 0) { peg$fail(peg$e140); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f116(s1); + s4 = peg$f118(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4965,7 +5009,7 @@ function peg$parse(input, options) { s4 = peg$parseclosingQuote(); if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f117(s1, s3, s4); + s0 = peg$f119(s1, s3, s4); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4977,7 +5021,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e132); } + if (peg$silentFails === 0) { peg$fail(peg$e134); } } return s0; @@ -4992,7 +5036,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e134); } + if (peg$silentFails === 0) { peg$fail(peg$e136); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -5030,7 +5074,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e139); } + if (peg$silentFails === 0) { peg$fail(peg$e141); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -5039,7 +5083,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e139); } + if (peg$silentFails === 0) { peg$fail(peg$e141); } } } s2 = []; @@ -5048,7 +5092,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e140); } + if (peg$silentFails === 0) { peg$fail(peg$e142); } } while (s3 !== peg$FAILED) { s2.push(s3); @@ -5057,7 +5101,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e140); } + if (peg$silentFails === 0) { peg$fail(peg$e142); } } } s3 = []; @@ -5066,7 +5110,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e141); } + if (peg$silentFails === 0) { peg$fail(peg$e143); } } while (s4 !== peg$FAILED) { s3.push(s4); @@ -5075,7 +5119,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e141); } + if (peg$silentFails === 0) { peg$fail(peg$e143); } } } s4 = peg$parseoperator(); @@ -5094,7 +5138,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e142); } + if (peg$silentFails === 0) { peg$fail(peg$e144); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -5103,7 +5147,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e142); } + if (peg$silentFails === 0) { peg$fail(peg$e144); } } } s2 = peg$currPos; @@ -5150,7 +5194,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e143); } + if (peg$silentFails === 0) { peg$fail(peg$e145); } } } } @@ -5166,7 +5210,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e144); } + if (peg$silentFails === 0) { peg$fail(peg$e146); } } if (s0 === peg$FAILED) { s0 = peg$currPos; diff --git a/src/libs/SearchParser/searchParser.peggy b/src/libs/SearchParser/searchParser.peggy index d8a0233f34bb..bdf8e7a5c646 100644 --- a/src/libs/SearchParser/searchParser.peggy +++ b/src/libs/SearchParser/searchParser.peggy @@ -286,6 +286,7 @@ key "key" / paidStatus / withdrawalID / submitted + / anyApproval / approved / paid / exportedTo diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts index 389a7c276f93..b8024a64845d 100644 --- a/src/libs/SearchUIUtils.ts +++ b/src/libs/SearchUIUtils.ts @@ -5853,6 +5853,11 @@ const FILTER_TO_SYNTAX_KEY = { [FILTER_KEYS.APPROVED_BEFORE]: CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED, [FILTER_KEYS.APPROVED_RANGE]: CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED, + [FILTER_KEYS.ANY_APPROVAL_ON]: CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, + [FILTER_KEYS.ANY_APPROVAL_AFTER]: CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, + [FILTER_KEYS.ANY_APPROVAL_BEFORE]: CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, + [FILTER_KEYS.ANY_APPROVAL_RANGE]: CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, + [FILTER_KEYS.PAID_ON]: CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID, [FILTER_KEYS.PAID_AFTER]: CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID, [FILTER_KEYS.PAID_BEFORE]: CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID, @@ -6076,6 +6081,10 @@ const FILTER_VIEW_MAP = { labelKey: 'search.filters.approved', icon: 'ThumbsUp', }, + [CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL]: { + labelKey: 'search.filters.anyApproval', + icon: 'ThumbsUp', + }, [CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED]: { labelKey: 'search.filters.submitted', icon: 'Send', diff --git a/src/types/form/SearchAdvancedFiltersForm.ts b/src/types/form/SearchAdvancedFiltersForm.ts index 010091d7e4ef..48f03b80aed5 100644 --- a/src/types/form/SearchAdvancedFiltersForm.ts +++ b/src/types/form/SearchAdvancedFiltersForm.ts @@ -38,6 +38,7 @@ const DATE_FILTER_KEYS: SearchDateFilterKeys[] = [ CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE, CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED, CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED, + CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID, CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED, CONST.SEARCH.SYNTAX_FILTER_KEYS.POSTED, @@ -98,6 +99,12 @@ const FILTER_KEYS = { APPROVED_BEFORE: 'approvedBefore', APPROVED_RANGE: 'approvedRange', + ANY_APPROVAL_NOT: 'any-approvalNot', + ANY_APPROVAL_ON: 'any-approvalOn', + ANY_APPROVAL_AFTER: 'any-approvalAfter', + ANY_APPROVAL_BEFORE: 'any-approvalBefore', + ANY_APPROVAL_RANGE: 'any-approvalRange', + PAID_NOT: 'paidNot', PAID_ON: 'paidOn', PAID_AFTER: 'paidAfter', @@ -344,6 +351,11 @@ const ALLOWED_TYPE_FILTERS: Record> = { FILTER_KEYS.APPROVED_AFTER, FILTER_KEYS.APPROVED_BEFORE, FILTER_KEYS.APPROVED_RANGE, + FILTER_KEYS.ANY_APPROVAL_ON, + FILTER_KEYS.ANY_APPROVAL_NOT, + FILTER_KEYS.ANY_APPROVAL_AFTER, + FILTER_KEYS.ANY_APPROVAL_BEFORE, + FILTER_KEYS.ANY_APPROVAL_RANGE, FILTER_KEYS.PAID_ON, FILTER_KEYS.PAID_NOT, FILTER_KEYS.PAID_AFTER, @@ -444,6 +456,11 @@ const ALLOWED_TYPE_FILTERS: Record> = { FILTER_KEYS.APPROVED_ON, FILTER_KEYS.APPROVED_RANGE, FILTER_KEYS.APPROVED_NOT, + FILTER_KEYS.ANY_APPROVAL_AFTER, + FILTER_KEYS.ANY_APPROVAL_BEFORE, + FILTER_KEYS.ANY_APPROVAL_ON, + FILTER_KEYS.ANY_APPROVAL_RANGE, + FILTER_KEYS.ANY_APPROVAL_NOT, FILTER_KEYS.PAID_AFTER, FILTER_KEYS.PAID_BEFORE, FILTER_KEYS.PAID_ON, @@ -542,6 +559,11 @@ const ALLOWED_TYPE_FILTERS: Record> = { FILTER_KEYS.APPROVED_AFTER, FILTER_KEYS.APPROVED_BEFORE, FILTER_KEYS.APPROVED_RANGE, + FILTER_KEYS.ANY_APPROVAL_ON, + FILTER_KEYS.ANY_APPROVAL_NOT, + FILTER_KEYS.ANY_APPROVAL_AFTER, + FILTER_KEYS.ANY_APPROVAL_BEFORE, + FILTER_KEYS.ANY_APPROVAL_RANGE, FILTER_KEYS.PAID_ON, FILTER_KEYS.PAID_NOT, FILTER_KEYS.PAID_AFTER, @@ -632,6 +654,11 @@ const ALLOWED_TYPE_FILTERS: Record> = { FILTER_KEYS.APPROVED_AFTER, FILTER_KEYS.APPROVED_BEFORE, FILTER_KEYS.APPROVED_RANGE, + FILTER_KEYS.ANY_APPROVAL_ON, + FILTER_KEYS.ANY_APPROVAL_NOT, + FILTER_KEYS.ANY_APPROVAL_AFTER, + FILTER_KEYS.ANY_APPROVAL_BEFORE, + FILTER_KEYS.ANY_APPROVAL_RANGE, FILTER_KEYS.PAID_ON, FILTER_KEYS.PAID_NOT, FILTER_KEYS.PAID_AFTER, @@ -745,6 +772,12 @@ type SearchAdvancedFiltersForm = Form< [FILTER_KEYS.APPROVED_BEFORE]: string; [FILTER_KEYS.APPROVED_RANGE]: string; + [FILTER_KEYS.ANY_APPROVAL_ON]: string; + [FILTER_KEYS.ANY_APPROVAL_NOT]: string; + [FILTER_KEYS.ANY_APPROVAL_AFTER]: string; + [FILTER_KEYS.ANY_APPROVAL_BEFORE]: string; + [FILTER_KEYS.ANY_APPROVAL_RANGE]: string; + [FILTER_KEYS.PAID_ON]: string; [FILTER_KEYS.PAID_NOT]: string; [FILTER_KEYS.PAID_AFTER]: string; diff --git a/tests/unit/Search/SearchQueryUtilsTest.ts b/tests/unit/Search/SearchQueryUtilsTest.ts index d8ed6b200426..33d36f81ebc3 100644 --- a/tests/unit/Search/SearchQueryUtilsTest.ts +++ b/tests/unit/Search/SearchQueryUtilsTest.ts @@ -54,6 +54,7 @@ import NAVIGATORS from '@src/NAVIGATORS'; import ONYXKEYS from '@src/ONYXKEYS'; import SCREENS from '@src/SCREENS'; import type {SearchAdvancedFiltersForm} from '@src/types/form'; +import FILTER_KEYS from '@src/types/form/SearchAdvancedFiltersForm'; import type * as OnyxTypes from '@src/types/onyx'; import type {Connections} from '@src/types/onyx/Policy'; @@ -1905,6 +1906,118 @@ describe('SearchQueryUtils', () => { }); }); + describe('any-approval date filter', () => { + test('round-trips the ON form', () => { + const filterValues: Partial = { + type: CONST.SEARCH.DATA_TYPES.EXPENSE, + [FILTER_KEYS.ANY_APPROVAL_ON]: CONST.SEARCH.DATE_PRESETS.LAST_MONTH, + }; + + const queryString = buildQueryStringFromFilterFormValues(filterValues); + expect(queryString).toBe(`type:expense ${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}:${CONST.SEARCH.DATE_PRESETS.LAST_MONTH}`); + + const queryJSON = buildSearchQueryJSON(queryString); + if (!queryJSON) { + throw new Error('Failed to parse query string'); + } + + const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}, {}); + expect(result[FILTER_KEYS.ANY_APPROVAL_ON]).toBe(CONST.SEARCH.DATE_PRESETS.LAST_MONTH); + expect(result[FILTER_KEYS.ANY_APPROVAL_AFTER]).toBeUndefined(); + expect(result[FILTER_KEYS.ANY_APPROVAL_BEFORE]).toBeUndefined(); + expect(result[FILTER_KEYS.ANY_APPROVAL_RANGE]).toBeUndefined(); + expect(result[FILTER_KEYS.ANY_APPROVAL_NOT]).toBeUndefined(); + }); + + test('round-trips the AFTER form', () => { + const filterValues: Partial = { + type: CONST.SEARCH.DATA_TYPES.EXPENSE, + [FILTER_KEYS.ANY_APPROVAL_AFTER]: '2026-04-01', + }; + + const queryString = buildQueryStringFromFilterFormValues(filterValues); + expect(queryString).toBe(`type:expense ${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}>2026-04-01`); + + const queryJSON = buildSearchQueryJSON(queryString); + if (!queryJSON) { + throw new Error('Failed to parse query string'); + } + + const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}, {}); + expect(result[FILTER_KEYS.ANY_APPROVAL_AFTER]).toBe('2026-04-01'); + expect(result[FILTER_KEYS.ANY_APPROVAL_ON]).toBeUndefined(); + expect(result[FILTER_KEYS.ANY_APPROVAL_BEFORE]).toBeUndefined(); + expect(result[FILTER_KEYS.ANY_APPROVAL_RANGE]).toBeUndefined(); + expect(result[FILTER_KEYS.ANY_APPROVAL_NOT]).toBeUndefined(); + }); + + test('round-trips the BEFORE form', () => { + const filterValues: Partial = { + type: CONST.SEARCH.DATA_TYPES.EXPENSE, + [FILTER_KEYS.ANY_APPROVAL_BEFORE]: '2026-04-30', + }; + + const queryString = buildQueryStringFromFilterFormValues(filterValues); + expect(queryString).toBe(`type:expense ${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}<2026-04-30`); + + const queryJSON = buildSearchQueryJSON(queryString); + if (!queryJSON) { + throw new Error('Failed to parse query string'); + } + + const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}, {}); + expect(result[FILTER_KEYS.ANY_APPROVAL_BEFORE]).toBe('2026-04-30'); + expect(result[FILTER_KEYS.ANY_APPROVAL_ON]).toBeUndefined(); + expect(result[FILTER_KEYS.ANY_APPROVAL_AFTER]).toBeUndefined(); + expect(result[FILTER_KEYS.ANY_APPROVAL_RANGE]).toBeUndefined(); + expect(result[FILTER_KEYS.ANY_APPROVAL_NOT]).toBeUndefined(); + }); + + test('round-trips the RANGE form', () => { + const filterValues: Partial = { + type: CONST.SEARCH.DATA_TYPES.EXPENSE, + [FILTER_KEYS.ANY_APPROVAL_RANGE]: '2026-04-01,2026-04-30', + }; + + const queryString = buildQueryStringFromFilterFormValues(filterValues); + expect(queryString).toBe(`type:expense ${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}>=2026-04-01 ${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}<=2026-04-30`); + + const queryJSON = buildSearchQueryJSON(queryString); + if (!queryJSON) { + throw new Error('Failed to parse query string'); + } + + const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}, {}); + expect(result[FILTER_KEYS.ANY_APPROVAL_RANGE]).toBe('2026-04-01,2026-04-30'); + expect(result[FILTER_KEYS.ANY_APPROVAL_ON]).toBeUndefined(); + expect(result[FILTER_KEYS.ANY_APPROVAL_AFTER]).toBeUndefined(); + expect(result[FILTER_KEYS.ANY_APPROVAL_BEFORE]).toBeUndefined(); + expect(result[FILTER_KEYS.ANY_APPROVAL_NOT]).toBeUndefined(); + }); + + test('round-trips the negated form', () => { + const filterValues: Partial = { + type: CONST.SEARCH.DATA_TYPES.EXPENSE, + [FILTER_KEYS.ANY_APPROVAL_NOT]: CONST.SEARCH.DATE_PRESETS.LAST_MONTH, + }; + + const queryString = buildQueryStringFromFilterFormValues(filterValues); + expect(queryString).toBe(`type:expense -${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}:${CONST.SEARCH.DATE_PRESETS.LAST_MONTH}`); + + const queryJSON = buildSearchQueryJSON(queryString); + if (!queryJSON) { + throw new Error('Failed to parse query string'); + } + + const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}, {}); + expect(result[FILTER_KEYS.ANY_APPROVAL_NOT]).toBe(CONST.SEARCH.DATE_PRESETS.LAST_MONTH); + expect(result[FILTER_KEYS.ANY_APPROVAL_ON]).toBeUndefined(); + expect(result[FILTER_KEYS.ANY_APPROVAL_AFTER]).toBeUndefined(); + expect(result[FILTER_KEYS.ANY_APPROVAL_BEFORE]).toBeUndefined(); + expect(result[FILTER_KEYS.ANY_APPROVAL_RANGE]).toBeUndefined(); + }); + }); + describe('shouldHighlight', () => { it('returns false if either input is empty', () => { expect(shouldHighlight('', 'test')).toBe(false); diff --git a/tests/unit/SearchAutocompleteParserTest.ts b/tests/unit/SearchAutocompleteParserTest.ts index 2d3a6b8bae56..f7842cf900f7 100644 --- a/tests/unit/SearchAutocompleteParserTest.ts +++ b/tests/unit/SearchAutocompleteParserTest.ts @@ -772,6 +772,34 @@ const nameFieldContinuationTests: Array<{query: string; expected: ExpectedAutoco }, description: 'Negates multiple from and has values', }, + { + query: 'any-approval:last-month', + expected: { + autocomplete: { + key: 'any-approval', + value: 'last-month', + negated: false, + start: 13, + length: 10, + }, + ranges: [{key: 'any-approval', value: 'last-month', negated: false, start: 13, length: 10}], + }, + description: 'any-approval date filter provides autocomplete', + }, + { + query: 'any-approval:', + expected: { + autocomplete: { + key: 'any-approval', + value: '', + negated: false, + start: 13, + length: 0, + }, + ranges: [], + }, + description: 'any-approval with an empty value still identifies the filter key', + }, ]; describe('autocomplete parser', () => { diff --git a/tests/unit/SearchParserTest.ts b/tests/unit/SearchParserTest.ts index f0686d918a7e..af72b7dcf294 100644 --- a/tests/unit/SearchParserTest.ts +++ b/tests/unit/SearchParserTest.ts @@ -727,6 +727,84 @@ const tests = [ }, }, }, + { + query: 'type:expense any-approval:last-month', + expected: { + type: CONST.SEARCH.DATA_TYPES.EXPENSE, + sortBy: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE, + sortOrder: CONST.SEARCH.SORT_ORDER.DESC, + view: 'table', + filters: { + operator: CONST.SEARCH.SYNTAX_OPERATORS.EQUAL_TO, + left: CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, + right: CONST.SEARCH.DATE_PRESETS.LAST_MONTH, + }, + }, + }, + { + query: 'type:expense any-approval>2026-04-01', + expected: { + type: CONST.SEARCH.DATA_TYPES.EXPENSE, + sortBy: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE, + sortOrder: CONST.SEARCH.SORT_ORDER.DESC, + view: 'table', + filters: { + operator: CONST.SEARCH.SYNTAX_OPERATORS.GREATER_THAN, + left: CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, + right: '2026-04-01', + }, + }, + }, + { + query: 'type:expense any-approval<2026-04-30', + expected: { + type: CONST.SEARCH.DATA_TYPES.EXPENSE, + sortBy: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE, + sortOrder: CONST.SEARCH.SORT_ORDER.DESC, + view: 'table', + filters: { + operator: CONST.SEARCH.SYNTAX_OPERATORS.LOWER_THAN, + left: CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, + right: '2026-04-30', + }, + }, + }, + { + query: 'type:expense any-approval>=2026-04-01 any-approval<=2026-04-30', + expected: { + type: CONST.SEARCH.DATA_TYPES.EXPENSE, + sortBy: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE, + sortOrder: CONST.SEARCH.SORT_ORDER.DESC, + view: 'table', + filters: { + operator: CONST.SEARCH.SYNTAX_OPERATORS.AND, + left: { + operator: CONST.SEARCH.SYNTAX_OPERATORS.GREATER_THAN_OR_EQUAL_TO, + left: CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, + right: '2026-04-01', + }, + right: { + operator: CONST.SEARCH.SYNTAX_OPERATORS.LOWER_THAN_OR_EQUAL_TO, + left: CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, + right: '2026-04-30', + }, + }, + }, + }, + { + query: 'type:expense -any-approval:last-month', + expected: { + type: CONST.SEARCH.DATA_TYPES.EXPENSE, + sortBy: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE, + sortOrder: CONST.SEARCH.SORT_ORDER.DESC, + view: 'table', + filters: { + operator: CONST.SEARCH.SYNTAX_OPERATORS.NOT_EQUAL_TO, + left: CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, + right: CONST.SEARCH.DATE_PRESETS.LAST_MONTH, + }, + }, + }, { query: 'type:expense group-by:from', expected: { diff --git a/tests/unit/hooks/useAutocompleteSuggestions.test.ts b/tests/unit/hooks/useAutocompleteSuggestions.test.ts index ed7b8f0d650f..93a5cb9edd97 100644 --- a/tests/unit/hooks/useAutocompleteSuggestions.test.ts +++ b/tests/unit/hooks/useAutocompleteSuggestions.test.ts @@ -425,6 +425,19 @@ describe('useAutocompleteSuggestions', () => { expect(result.current.at(0)?.filterKey).toBe(CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE); }); + it('suggests date presets after any-approval:', () => { + parseForAutocomplete.mockReturnValue({ + autocomplete: {key: CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, value: ''}, + ranges: [], + }); + + const {result} = renderHook(() => useAutocompleteSuggestions({...defaultParams, autocompleteQueryValue: 'any-approval:'})); + + expect(result.current.length).toBeGreaterThan(0); + expect(result.current.at(0)?.filterKey).toBe(CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL); + expect(result.current.map((item) => item.text)).toEqual(['today', 'yesterday', 'lastWeek', 'lastMonth'].sort()); + }); + it('returns boolean suggestions for reimbursable key', () => { parseForAutocomplete.mockReturnValue({ autocomplete: {key: CONST.SEARCH.SYNTAX_FILTER_KEYS.REIMBURSABLE, value: ''}, From 3bd09a6a125bdcbad3dac5111ac362a20936920f Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Fri, 18 Sep 2026 15:10:25 +0700 Subject: [PATCH 02/12] regenerate parser --- src/libs/SearchParser/autocompleteParser.js | 678 +++++++++++--------- src/libs/SearchParser/searchParser.js | 678 +++++++++++--------- 2 files changed, 756 insertions(+), 600 deletions(-) diff --git a/src/libs/SearchParser/autocompleteParser.js b/src/libs/SearchParser/autocompleteParser.js index e0e9a2e26af3..c6ba150b7947 100644 --- a/src/libs/SearchParser/autocompleteParser.js +++ b/src/libs/SearchParser/autocompleteParser.js @@ -237,76 +237,78 @@ function peg$parse(input, options) { var peg$c51 = "workspace"; var peg$c52 = "submitted"; var peg$c53 = "approved"; - var peg$c54 = "paid"; - var peg$c55 = "exported"; - var peg$c56 = "posted"; - var peg$c57 = "withdrawn"; - var peg$c58 = "groupby"; - var peg$c59 = "group-by"; - var peg$c60 = "limit"; - var peg$c61 = "feed"; - var peg$c62 = "title"; - var peg$c63 = "submitteruserid"; - var peg$c64 = "submitter-user-id"; - var peg$c65 = "submitterpayrollid"; - var peg$c66 = "submitter-payroll-id"; - var peg$c67 = "orderdealnumbers"; - var peg$c68 = "order-deal-numbers"; - var peg$c69 = "assignee"; - var peg$c70 = "createdby"; - var peg$c71 = "created-by"; - var peg$c72 = "action"; - var peg$c73 = "total"; - var peg$c74 = "has"; - var peg$c75 = "is"; - var peg$c76 = "purchaseamount"; - var peg$c77 = "purchase-amount"; - var peg$c78 = "purchasecurrency"; - var peg$c79 = "purchase-currency"; - var peg$c80 = "amountdebited"; - var peg$c81 = "amount-debited"; - var peg$c82 = "amountreimbursed"; - var peg$c83 = "amount-reimbursed"; - var peg$c84 = "columns"; - var peg$c85 = "view"; - var peg$c86 = "per-diem"; - var peg$c87 = "drafts"; - var peg$c88 = "draft"; - var peg$c89 = "tax"; - var peg$c90 = "policy-name"; - var peg$c91 = "long-report-id"; - var peg$c92 = "exported-to"; - var peg$c93 = "exportedto"; - var peg$c94 = "exchange-rate"; - var peg$c95 = "reimbursable-total"; - var peg$c96 = "non-reimbursable-total"; - var peg$c97 = "group-from"; - var peg$c98 = "group-expenses"; - var peg$c99 = "group-total"; - var peg$c100 = "group-card"; - var peg$c101 = "group-feed"; - var peg$c102 = "group-bank-account"; - var peg$c103 = "group-withdrawn"; - var peg$c104 = "group-withdrawal-id"; - var peg$c105 = "group-amount-debited"; - var peg$c106 = "group-amount-reimbursed"; - var peg$c107 = "group-category"; - var peg$c108 = "group-tag"; - var peg$c109 = "group-merchant"; - var peg$c110 = "group-day"; - var peg$c111 = "group-month"; - var peg$c112 = "group-week"; - var peg$c113 = "group-year"; - var peg$c114 = "group-quarter"; - var peg$c115 = "!="; - var peg$c116 = ">="; - var peg$c117 = ">"; - var peg$c118 = "<="; - var peg$c119 = "<"; - var peg$c120 = "\\"; - var peg$c121 = "\u201C"; - var peg$c122 = "\u201D"; - var peg$c123 = "\""; + var peg$c54 = "any-approval"; + var peg$c55 = "anyapproval"; + var peg$c56 = "paid"; + var peg$c57 = "exported"; + var peg$c58 = "posted"; + var peg$c59 = "withdrawn"; + var peg$c60 = "groupby"; + var peg$c61 = "group-by"; + var peg$c62 = "limit"; + var peg$c63 = "feed"; + var peg$c64 = "title"; + var peg$c65 = "submitteruserid"; + var peg$c66 = "submitter-user-id"; + var peg$c67 = "submitterpayrollid"; + var peg$c68 = "submitter-payroll-id"; + var peg$c69 = "orderdealnumbers"; + var peg$c70 = "order-deal-numbers"; + var peg$c71 = "assignee"; + var peg$c72 = "createdby"; + var peg$c73 = "created-by"; + var peg$c74 = "action"; + var peg$c75 = "total"; + var peg$c76 = "has"; + var peg$c77 = "is"; + var peg$c78 = "purchaseamount"; + var peg$c79 = "purchase-amount"; + var peg$c80 = "purchasecurrency"; + var peg$c81 = "purchase-currency"; + var peg$c82 = "amountdebited"; + var peg$c83 = "amount-debited"; + var peg$c84 = "amountreimbursed"; + var peg$c85 = "amount-reimbursed"; + var peg$c86 = "columns"; + var peg$c87 = "view"; + var peg$c88 = "per-diem"; + var peg$c89 = "drafts"; + var peg$c90 = "draft"; + var peg$c91 = "tax"; + var peg$c92 = "policy-name"; + var peg$c93 = "long-report-id"; + var peg$c94 = "exported-to"; + var peg$c95 = "exportedto"; + var peg$c96 = "exchange-rate"; + var peg$c97 = "reimbursable-total"; + var peg$c98 = "non-reimbursable-total"; + var peg$c99 = "group-from"; + var peg$c100 = "group-expenses"; + var peg$c101 = "group-total"; + var peg$c102 = "group-card"; + var peg$c103 = "group-feed"; + var peg$c104 = "group-bank-account"; + var peg$c105 = "group-withdrawn"; + var peg$c106 = "group-withdrawal-id"; + var peg$c107 = "group-amount-debited"; + var peg$c108 = "group-amount-reimbursed"; + var peg$c109 = "group-category"; + var peg$c110 = "group-tag"; + var peg$c111 = "group-merchant"; + var peg$c112 = "group-day"; + var peg$c113 = "group-month"; + var peg$c114 = "group-week"; + var peg$c115 = "group-year"; + var peg$c116 = "group-quarter"; + var peg$c117 = "!="; + var peg$c118 = ">="; + var peg$c119 = ">"; + var peg$c120 = "<="; + var peg$c121 = "<"; + var peg$c122 = "\\"; + var peg$c123 = "\u201C"; + var peg$c124 = "\u201D"; + var peg$c125 = "\""; var peg$r0 = /^[ \t\r\n\xA0,:=<>!]/; var peg$r1 = /^[:=]/; @@ -380,93 +382,95 @@ function peg$parse(input, options) { var peg$e54 = peg$literalExpectation("workspace", true); var peg$e55 = peg$literalExpectation("submitted", true); var peg$e56 = peg$literalExpectation("approved", true); - var peg$e57 = peg$literalExpectation("paid", true); - var peg$e58 = peg$literalExpectation("exported", true); - var peg$e59 = peg$literalExpectation("posted", true); - var peg$e60 = peg$literalExpectation("withdrawn", true); - var peg$e61 = peg$literalExpectation("groupBy", true); - var peg$e62 = peg$literalExpectation("group-by", true); - var peg$e63 = peg$literalExpectation("limit", true); - var peg$e64 = peg$literalExpectation("feed", true); - var peg$e65 = peg$literalExpectation("title", true); - var peg$e66 = peg$literalExpectation("submitterUserID", true); - var peg$e67 = peg$literalExpectation("submitter-user-id", true); - var peg$e68 = peg$literalExpectation("submitterPayrollID", true); - var peg$e69 = peg$literalExpectation("submitter-payroll-id", true); - var peg$e70 = peg$literalExpectation("orderDealNumbers", true); - var peg$e71 = peg$literalExpectation("order-deal-numbers", true); - var peg$e72 = peg$literalExpectation("assignee", true); - var peg$e73 = peg$literalExpectation("createdBy", true); - var peg$e74 = peg$literalExpectation("created-by", true); - var peg$e75 = peg$literalExpectation("action", true); - var peg$e76 = peg$literalExpectation("total", true); - var peg$e77 = peg$literalExpectation("has", true); - var peg$e78 = peg$literalExpectation("is", true); - var peg$e79 = peg$literalExpectation("purchaseAmount", true); - var peg$e80 = peg$literalExpectation("purchase-amount", true); - var peg$e81 = peg$literalExpectation("purchaseCurrency", true); - var peg$e82 = peg$literalExpectation("purchase-currency", true); - var peg$e83 = peg$literalExpectation("amountDebited", true); - var peg$e84 = peg$literalExpectation("amount-debited", true); - var peg$e85 = peg$literalExpectation("amountReimbursed", true); - var peg$e86 = peg$literalExpectation("amount-reimbursed", true); - var peg$e87 = peg$literalExpectation("columns", true); - var peg$e88 = peg$literalExpectation("view", true); - var peg$e89 = peg$literalExpectation("per-diem", true); - var peg$e90 = peg$literalExpectation("drafts", true); - var peg$e91 = peg$literalExpectation("draft", true); - var peg$e92 = peg$literalExpectation("tax", true); - var peg$e93 = peg$literalExpectation("policy-name", true); - var peg$e94 = peg$literalExpectation("long-report-id", true); - var peg$e95 = peg$literalExpectation("exported-to", true); - var peg$e96 = peg$classExpectation([":", "="], false, false); - var peg$e97 = peg$literalExpectation("exportedTo", true); - var peg$e98 = peg$literalExpectation("exchange-rate", true); - var peg$e99 = peg$literalExpectation("reimbursable-total", true); - var peg$e100 = peg$literalExpectation("non-reimbursable-total", true); - var peg$e101 = peg$literalExpectation("group-from", true); - var peg$e102 = peg$literalExpectation("group-expenses", true); - var peg$e103 = peg$literalExpectation("group-total", true); - var peg$e104 = peg$literalExpectation("group-card", true); - var peg$e105 = peg$literalExpectation("group-feed", true); - var peg$e106 = peg$literalExpectation("group-bank-account", true); - var peg$e107 = peg$literalExpectation("group-withdrawn", true); - var peg$e108 = peg$literalExpectation("group-withdrawal-id", true); - var peg$e109 = peg$literalExpectation("group-amount-debited", true); - var peg$e110 = peg$literalExpectation("group-amount-reimbursed", true); - var peg$e111 = peg$literalExpectation("group-category", true); - var peg$e112 = peg$literalExpectation("group-tag", true); - var peg$e113 = peg$literalExpectation("group-merchant", true); - var peg$e114 = peg$literalExpectation("group-day", true); - var peg$e115 = peg$literalExpectation("group-month", true); - var peg$e116 = peg$literalExpectation("group-week", true); - var peg$e117 = peg$literalExpectation("group-year", true); - var peg$e118 = peg$literalExpectation("group-quarter", true); - var peg$e119 = peg$otherExpectation("operator"); - var peg$e120 = peg$literalExpectation("!=", false); - var peg$e121 = peg$literalExpectation(">=", false); - var peg$e122 = peg$literalExpectation(">", false); - var peg$e123 = peg$literalExpectation("<=", false); - var peg$e124 = peg$literalExpectation("<", false); - var peg$e125 = peg$literalExpectation("\\", false); - var peg$e126 = peg$classExpectation([",", "\"", "\u201D", "\u201C", "\\"], false, false); - var peg$e127 = peg$otherExpectation("word"); - var peg$e128 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e129 = peg$otherExpectation("whitespace"); - var peg$e130 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); - var peg$e131 = peg$otherExpectation("quote"); - var peg$e132 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e133 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); - var peg$e134 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); - var peg$e135 = peg$literalExpectation("\u201C", false); - var peg$e136 = peg$literalExpectation("\u201D", false); - var peg$e137 = peg$literalExpectation("\"", false); - var peg$e138 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e139 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e140 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); - var peg$e141 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); - var peg$e142 = peg$classExpectation([","], false, false); - var peg$e143 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ","], false, false); + var peg$e57 = peg$literalExpectation("any-approval", true); + var peg$e58 = peg$literalExpectation("anyApproval", true); + var peg$e59 = peg$literalExpectation("paid", true); + var peg$e60 = peg$literalExpectation("exported", true); + var peg$e61 = peg$literalExpectation("posted", true); + var peg$e62 = peg$literalExpectation("withdrawn", true); + var peg$e63 = peg$literalExpectation("groupBy", true); + var peg$e64 = peg$literalExpectation("group-by", true); + var peg$e65 = peg$literalExpectation("limit", true); + var peg$e66 = peg$literalExpectation("feed", true); + var peg$e67 = peg$literalExpectation("title", true); + var peg$e68 = peg$literalExpectation("submitterUserID", true); + var peg$e69 = peg$literalExpectation("submitter-user-id", true); + var peg$e70 = peg$literalExpectation("submitterPayrollID", true); + var peg$e71 = peg$literalExpectation("submitter-payroll-id", true); + var peg$e72 = peg$literalExpectation("orderDealNumbers", true); + var peg$e73 = peg$literalExpectation("order-deal-numbers", true); + var peg$e74 = peg$literalExpectation("assignee", true); + var peg$e75 = peg$literalExpectation("createdBy", true); + var peg$e76 = peg$literalExpectation("created-by", true); + var peg$e77 = peg$literalExpectation("action", true); + var peg$e78 = peg$literalExpectation("total", true); + var peg$e79 = peg$literalExpectation("has", true); + var peg$e80 = peg$literalExpectation("is", true); + var peg$e81 = peg$literalExpectation("purchaseAmount", true); + var peg$e82 = peg$literalExpectation("purchase-amount", true); + var peg$e83 = peg$literalExpectation("purchaseCurrency", true); + var peg$e84 = peg$literalExpectation("purchase-currency", true); + var peg$e85 = peg$literalExpectation("amountDebited", true); + var peg$e86 = peg$literalExpectation("amount-debited", true); + var peg$e87 = peg$literalExpectation("amountReimbursed", true); + var peg$e88 = peg$literalExpectation("amount-reimbursed", true); + var peg$e89 = peg$literalExpectation("columns", true); + var peg$e90 = peg$literalExpectation("view", true); + var peg$e91 = peg$literalExpectation("per-diem", true); + var peg$e92 = peg$literalExpectation("drafts", true); + var peg$e93 = peg$literalExpectation("draft", true); + var peg$e94 = peg$literalExpectation("tax", true); + var peg$e95 = peg$literalExpectation("policy-name", true); + var peg$e96 = peg$literalExpectation("long-report-id", true); + var peg$e97 = peg$literalExpectation("exported-to", true); + var peg$e98 = peg$classExpectation([":", "="], false, false); + var peg$e99 = peg$literalExpectation("exportedTo", true); + var peg$e100 = peg$literalExpectation("exchange-rate", true); + var peg$e101 = peg$literalExpectation("reimbursable-total", true); + var peg$e102 = peg$literalExpectation("non-reimbursable-total", true); + var peg$e103 = peg$literalExpectation("group-from", true); + var peg$e104 = peg$literalExpectation("group-expenses", true); + var peg$e105 = peg$literalExpectation("group-total", true); + var peg$e106 = peg$literalExpectation("group-card", true); + var peg$e107 = peg$literalExpectation("group-feed", true); + var peg$e108 = peg$literalExpectation("group-bank-account", true); + var peg$e109 = peg$literalExpectation("group-withdrawn", true); + var peg$e110 = peg$literalExpectation("group-withdrawal-id", true); + var peg$e111 = peg$literalExpectation("group-amount-debited", true); + var peg$e112 = peg$literalExpectation("group-amount-reimbursed", true); + var peg$e113 = peg$literalExpectation("group-category", true); + var peg$e114 = peg$literalExpectation("group-tag", true); + var peg$e115 = peg$literalExpectation("group-merchant", true); + var peg$e116 = peg$literalExpectation("group-day", true); + var peg$e117 = peg$literalExpectation("group-month", true); + var peg$e118 = peg$literalExpectation("group-week", true); + var peg$e119 = peg$literalExpectation("group-year", true); + var peg$e120 = peg$literalExpectation("group-quarter", true); + var peg$e121 = peg$otherExpectation("operator"); + var peg$e122 = peg$literalExpectation("!=", false); + var peg$e123 = peg$literalExpectation(">=", false); + var peg$e124 = peg$literalExpectation(">", false); + var peg$e125 = peg$literalExpectation("<=", false); + var peg$e126 = peg$literalExpectation("<", false); + var peg$e127 = peg$literalExpectation("\\", false); + var peg$e128 = peg$classExpectation([",", "\"", "\u201D", "\u201C", "\\"], false, false); + var peg$e129 = peg$otherExpectation("word"); + var peg$e130 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e131 = peg$otherExpectation("whitespace"); + var peg$e132 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); + var peg$e133 = peg$otherExpectation("quote"); + var peg$e134 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e135 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); + var peg$e136 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); + var peg$e137 = peg$literalExpectation("\u201C", false); + var peg$e138 = peg$literalExpectation("\u201D", false); + var peg$e139 = peg$literalExpectation("\"", false); + var peg$e140 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e141 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e142 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); + var peg$e143 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); + var peg$e144 = peg$classExpectation([","], false, false); + var peg$e145 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ","], false, false); var peg$f0 = function(ranges) { return { autocomplete, ranges }; }; var peg$f1 = function(filters) { return filters.filter(Boolean).flat(); }; @@ -593,71 +597,71 @@ function peg$parse(input, options) { isColumnsContext = true; return "columns"; }; - var peg$f65 = function() {return "view"}; - var peg$f66 = function() { return isColumnsContext; }; - var peg$f67 = function() { return "perDiem"; }; - var peg$f68 = function() { return "drafts"; }; - var peg$f69 = function() { return "originalamount"; }; - var peg$f70 = function() { return "taxAmount"; }; - var peg$f71 = function() { return "taxrate"; }; - var peg$f72 = function() { return "policyname"; }; - var peg$f73 = function() { return "withdrawalID"; }; - var peg$f74 = function() { return "bankAccount"; }; - var peg$f75 = function() { return "reportID"; }; - var peg$f76 = function() { return "base62ReportID"; }; - var peg$f77 = function() { return "exportedto"; }; - var peg$f78 = function() { return "exportedTo"; }; - var peg$f79 = function() { return "exportedTo"; }; - var peg$f80 = function() { return "exchangeRate"; }; - var peg$f81 = function() { return "reimbursableTotal"; }; - var peg$f82 = function() { return "nonReimbursableTotal"; }; - var peg$f83 = function() { return "groupFrom"; }; - var peg$f84 = function() { return "groupExpenses"; }; - var peg$f85 = function() { return "groupTotal"; }; - var peg$f86 = function() { return "groupCard"; }; - var peg$f87 = function() { return "groupFeed"; }; - var peg$f88 = function() { return "groupBankAccount"; }; - var peg$f89 = function() { return "groupWithdrawn"; }; - var peg$f90 = function() { return "groupWithdrawalID"; }; - var peg$f91 = function() { return "groupAmountDebited"; }; - var peg$f92 = function() { return "groupAmountReimbursed"; }; - var peg$f93 = function() { return "amountDebited"; }; - var peg$f94 = function() { return "amountReimbursed"; }; - var peg$f95 = function() { return "groupCategory"; }; - var peg$f96 = function() { return "groupTag"; }; - var peg$f97 = function() { return "groupMerchant"; }; - var peg$f98 = function() { return "groupday"; }; - var peg$f99 = function() { return "groupmonth"; }; - var peg$f100 = function() { return "groupweek"; }; - var peg$f101 = function() { return "groupyear"; }; - var peg$f102 = function() { return "groupquarter"; }; - var peg$f103 = function() { return "eq"; }; - var peg$f104 = function() { return "neq"; }; - var peg$f105 = function() { return "gte"; }; - var peg$f106 = function() { return "gt"; }; - var peg$f107 = function() { return "lte"; }; - var peg$f108 = function() { return "lt"; }; - var peg$f109 = function(o) { + var peg$f67 = function() {return "view"}; + var peg$f68 = function() { return isColumnsContext; }; + var peg$f69 = function() { return "perDiem"; }; + var peg$f70 = function() { return "drafts"; }; + var peg$f71 = function() { return "originalamount"; }; + var peg$f72 = function() { return "taxAmount"; }; + var peg$f73 = function() { return "taxrate"; }; + var peg$f74 = function() { return "policyname"; }; + var peg$f75 = function() { return "withdrawalID"; }; + var peg$f76 = function() { return "bankAccount"; }; + var peg$f77 = function() { return "reportID"; }; + var peg$f78 = function() { return "base62ReportID"; }; + var peg$f79 = function() { return "exportedto"; }; + var peg$f80 = function() { return "exportedTo"; }; + var peg$f81 = function() { return "exportedTo"; }; + var peg$f82 = function() { return "exchangeRate"; }; + var peg$f83 = function() { return "reimbursableTotal"; }; + var peg$f84 = function() { return "nonReimbursableTotal"; }; + var peg$f85 = function() { return "groupFrom"; }; + var peg$f86 = function() { return "groupExpenses"; }; + var peg$f87 = function() { return "groupTotal"; }; + var peg$f88 = function() { return "groupCard"; }; + var peg$f89 = function() { return "groupFeed"; }; + var peg$f90 = function() { return "groupBankAccount"; }; + var peg$f91 = function() { return "groupWithdrawn"; }; + var peg$f92 = function() { return "groupWithdrawalID"; }; + var peg$f93 = function() { return "groupAmountDebited"; }; + var peg$f94 = function() { return "groupAmountReimbursed"; }; + var peg$f95 = function() { return "amountDebited"; }; + var peg$f96 = function() { return "amountReimbursed"; }; + var peg$f97 = function() { return "groupCategory"; }; + var peg$f98 = function() { return "groupTag"; }; + var peg$f99 = function() { return "groupMerchant"; }; + var peg$f100 = function() { return "groupday"; }; + var peg$f101 = function() { return "groupmonth"; }; + var peg$f102 = function() { return "groupweek"; }; + var peg$f103 = function() { return "groupyear"; }; + var peg$f104 = function() { return "groupquarter"; }; + var peg$f105 = function() { return "eq"; }; + var peg$f106 = function() { return "neq"; }; + var peg$f107 = function() { return "gte"; }; + var peg$f108 = function() { return "gt"; }; + var peg$f109 = function() { return "lte"; }; + var peg$f110 = function() { return "lt"; }; + var peg$f111 = function(o) { if (nameOperator) { expectingNestedQuote = (o === "eq"); // Use simple parser if no valid operator is found } isColumnsContext = false; return o; }; - var peg$f110 = function(c) { return c; }; - var peg$f111 = function(chars) { return chars.join("").trim(); }; - var peg$f112 = function() { + var peg$f112 = function(c) { return c; }; + var peg$f113 = function(chars) { return chars.join("").trim(); }; + var peg$f114 = function() { isColumnsContext = false; return "and"; }; - var peg$f113 = function() { return expectingNestedQuote; }; - var peg$f114 = function(start, inner, end) { //handle no-breaking space + var peg$f115 = function() { return expectingNestedQuote; }; + var peg$f116 = function(start, inner, end) { //handle no-breaking space return [...start, '"', ...inner, '"', ...end].join(""); }; - var peg$f115 = function(start) {return "“"}; - var peg$f116 = function(start) {return "”"}; - var peg$f117 = function(start) {return "\""}; - var peg$f118 = function(start, inner, end) { + var peg$f117 = function(start) {return "“"}; + var peg$f118 = function(start) {return "”"}; + var peg$f119 = function(start) {return "\""}; + var peg$f120 = function(start, inner, end) { return [...start, '"', ...inner, '"'].join(""); }; var peg$currPos = options.peg$currPos | 0; @@ -3993,7 +3997,7 @@ function peg$parse(input, options) { return s0; } - function peg$parsegroupDay() { + function peg$parsegroupTag() { var s0, s1, s2, s3; s0 = peg$currPos; @@ -4030,13 +4034,13 @@ function peg$parse(input, options) { return s0; } - function peg$parsegroupMonth() { + function peg$parsegroupMerchant() { var s0, s1, s2, s3; s0 = peg$currPos; - s1 = input.substr(peg$currPos, 11); + s1 = input.substr(peg$currPos, 14); if (s1.toLowerCase() === peg$c111) { - peg$currPos += 11; + peg$currPos += 14; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$e115); } @@ -4067,13 +4071,13 @@ function peg$parse(input, options) { return s0; } - function peg$parsegroupWeek() { + function peg$parsegroupDay() { var s0, s1, s2, s3; s0 = peg$currPos; - s1 = input.substr(peg$currPos, 11); + s1 = input.substr(peg$currPos, 9); if (s1.toLowerCase() === peg$c112) { - peg$currPos += 11; + peg$currPos += 9; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$e116); } @@ -4104,13 +4108,13 @@ function peg$parse(input, options) { return s0; } - function peg$parsegroupYear() { + function peg$parsegroupMonth() { var s0, s1, s2, s3; s0 = peg$currPos; - s1 = input.substr(peg$currPos, 10); + s1 = input.substr(peg$currPos, 11); if (s1.toLowerCase() === peg$c113) { - peg$currPos += 10; + peg$currPos += 11; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$e117); } @@ -4141,13 +4145,13 @@ function peg$parse(input, options) { return s0; } - function peg$parsegroupQuarter() { + function peg$parsegroupWeek() { var s0, s1, s2, s3; s0 = peg$currPos; - s1 = input.substr(peg$currPos, 13); + s1 = input.substr(peg$currPos, 10); if (s1.toLowerCase() === peg$c114) { - peg$currPos += 13; + peg$currPos += 10; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$e118); } @@ -4178,6 +4182,80 @@ function peg$parse(input, options) { return s0; } + function peg$parsegroupYear() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 10); + if (s1.toLowerCase() === peg$c115) { + peg$currPos += 10; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e119); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsewordBoundary(); + peg$silentFails--; + if (s3 !== peg$FAILED) { + peg$currPos = s2; + s2 = undefined; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f103(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsegroupQuarter() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 13); + if (s1.toLowerCase() === peg$c116) { + peg$currPos += 13; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e120); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsewordBoundary(); + peg$silentFails--; + if (s3 !== peg$FAILED) { + peg$currPos = s2; + s2 = undefined; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f104(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + function peg$parseoperator() { var s0, s1; @@ -4192,77 +4270,77 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f103(); + s1 = peg$f105(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c115) { - s1 = peg$c115; + if (input.substr(peg$currPos, 2) === peg$c117) { + s1 = peg$c117; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e120); } + if (peg$silentFails === 0) { peg$fail(peg$e122); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f104(); + s1 = peg$f106(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c116) { - s1 = peg$c116; + if (input.substr(peg$currPos, 2) === peg$c118) { + s1 = peg$c118; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e121); } + if (peg$silentFails === 0) { peg$fail(peg$e123); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f105(); + s1 = peg$f107(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 62) { - s1 = peg$c117; + s1 = peg$c119; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e122); } + if (peg$silentFails === 0) { peg$fail(peg$e124); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f106(); + s1 = peg$f108(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c118) { - s1 = peg$c118; + if (input.substr(peg$currPos, 2) === peg$c120) { + s1 = peg$c120; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e123); } + if (peg$silentFails === 0) { peg$fail(peg$e125); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f107(); + s1 = peg$f109(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 60) { - s1 = peg$c119; + s1 = peg$c121; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e124); } + if (peg$silentFails === 0) { peg$fail(peg$e126); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f108(); + s1 = peg$f110(); } s0 = s1; } @@ -4273,7 +4351,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e119); } + if (peg$silentFails === 0) { peg$fail(peg$e121); } } return s0; @@ -4286,7 +4364,7 @@ function peg$parse(input, options) { s1 = peg$parseoperator(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f109(s1); + s1 = peg$f111(s1); } s0 = s1; @@ -4298,11 +4376,11 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 92) { - s1 = peg$c120; + s1 = peg$c122; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e125); } + if (peg$silentFails === 0) { peg$fail(peg$e127); } } if (s1 !== peg$FAILED) { s2 = input.charAt(peg$currPos); @@ -4310,11 +4388,11 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e126); } + if (peg$silentFails === 0) { peg$fail(peg$e128); } } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f110(s2); + s0 = peg$f112(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4340,7 +4418,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e128); } + if (peg$silentFails === 0) { peg$fail(peg$e130); } } } if (s2 !== peg$FAILED) { @@ -4353,7 +4431,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e128); } + if (peg$silentFails === 0) { peg$fail(peg$e130); } } } } @@ -4362,13 +4440,13 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f111(s1); + s1 = peg$f113(s1); } s0 = s1; peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e127); } + if (peg$silentFails === 0) { peg$fail(peg$e129); } } return s0; @@ -4380,7 +4458,7 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = peg$parse_(); peg$savedPos = s0; - s1 = peg$f112(); + s1 = peg$f114(); s0 = s1; return s0; @@ -4396,7 +4474,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e130); } + if (peg$silentFails === 0) { peg$fail(peg$e132); } } while (s1 !== peg$FAILED) { s0.push(s1); @@ -4405,12 +4483,12 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e130); } + if (peg$silentFails === 0) { peg$fail(peg$e132); } } } peg$silentFails--; s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e129); } + if (peg$silentFails === 0) { peg$fail(peg$e131); } return s0; } @@ -4420,7 +4498,7 @@ function peg$parse(input, options) { s0 = peg$currPos; peg$savedPos = peg$currPos; - s1 = peg$f113(); + s1 = peg$f115(); if (s1) { s1 = undefined; } else { @@ -4457,7 +4535,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e132); } + if (peg$silentFails === 0) { peg$fail(peg$e134); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4466,7 +4544,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e132); } + if (peg$silentFails === 0) { peg$fail(peg$e134); } } } s2 = input.charAt(peg$currPos); @@ -4474,7 +4552,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e133); } + if (peg$silentFails === 0) { peg$fail(peg$e135); } } if (s2 !== peg$FAILED) { s3 = []; @@ -4485,7 +4563,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e134); } + if (peg$silentFails === 0) { peg$fail(peg$e136); } } } while (s4 !== peg$FAILED) { @@ -4497,7 +4575,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e134); } + if (peg$silentFails === 0) { peg$fail(peg$e136); } } } } @@ -4506,7 +4584,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e133); } + if (peg$silentFails === 0) { peg$fail(peg$e135); } } if (s4 !== peg$FAILED) { s5 = []; @@ -4515,7 +4593,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e128); } + if (peg$silentFails === 0) { peg$fail(peg$e130); } } while (s6 !== peg$FAILED) { s5.push(s6); @@ -4524,11 +4602,11 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e128); } + if (peg$silentFails === 0) { peg$fail(peg$e130); } } } peg$savedPos = s0; - s0 = peg$f114(s1, s3, s5); + s0 = peg$f116(s1, s3, s5); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4540,7 +4618,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e131); } + if (peg$silentFails === 0) { peg$fail(peg$e133); } } return s0; @@ -4557,7 +4635,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e132); } + if (peg$silentFails === 0) { peg$fail(peg$e134); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4566,7 +4644,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e132); } + if (peg$silentFails === 0) { peg$fail(peg$e134); } } } s2 = input.charAt(peg$currPos); @@ -4574,7 +4652,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e133); } + if (peg$silentFails === 0) { peg$fail(peg$e135); } } if (s2 !== peg$FAILED) { s3 = []; @@ -4585,7 +4663,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e134); } + if (peg$silentFails === 0) { peg$fail(peg$e136); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -4601,15 +4679,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c121; + s6 = peg$c123; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e135); } + if (peg$silentFails === 0) { peg$fail(peg$e137); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f115(s1); + s4 = peg$f117(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4632,15 +4710,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c122; + s6 = peg$c124; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e136); } + if (peg$silentFails === 0) { peg$fail(peg$e138); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f116(s1); + s4 = peg$f118(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4663,15 +4741,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c123; + s6 = peg$c125; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e137); } + if (peg$silentFails === 0) { peg$fail(peg$e139); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f117(s1); + s4 = peg$f119(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4693,7 +4771,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e134); } + if (peg$silentFails === 0) { peg$fail(peg$e136); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -4709,7 +4787,7 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c121; + s6 = peg$c123; peg$currPos++; } else { s6 = peg$FAILED; @@ -4740,7 +4818,7 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c122; + s6 = peg$c124; peg$currPos++; } else { s6 = peg$FAILED; @@ -4771,15 +4849,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c123; + s6 = peg$c125; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e137); } + if (peg$silentFails === 0) { peg$fail(peg$e139); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f117(s1); + s4 = peg$f119(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4796,7 +4874,7 @@ function peg$parse(input, options) { s4 = peg$parseclosingQuote(); if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f118(s1, s3, s4); + s0 = peg$f120(s1, s3, s4); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4808,7 +4886,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e131); } + if (peg$silentFails === 0) { peg$fail(peg$e133); } } return s0; @@ -4823,7 +4901,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e133); } + if (peg$silentFails === 0) { peg$fail(peg$e135); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -4861,7 +4939,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e138); } + if (peg$silentFails === 0) { peg$fail(peg$e140); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4870,7 +4948,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e138); } + if (peg$silentFails === 0) { peg$fail(peg$e140); } } } s2 = []; @@ -4879,7 +4957,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e139); } + if (peg$silentFails === 0) { peg$fail(peg$e141); } } while (s3 !== peg$FAILED) { s2.push(s3); @@ -4888,7 +4966,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e139); } + if (peg$silentFails === 0) { peg$fail(peg$e141); } } } s3 = []; @@ -4897,7 +4975,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e140); } + if (peg$silentFails === 0) { peg$fail(peg$e142); } } while (s4 !== peg$FAILED) { s3.push(s4); @@ -4906,7 +4984,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e140); } + if (peg$silentFails === 0) { peg$fail(peg$e142); } } } s4 = peg$parseoperator(); @@ -4925,7 +5003,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e141); } + if (peg$silentFails === 0) { peg$fail(peg$e143); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4934,7 +5012,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e141); } + if (peg$silentFails === 0) { peg$fail(peg$e143); } } } s2 = peg$currPos; @@ -4981,7 +5059,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e142); } + if (peg$silentFails === 0) { peg$fail(peg$e144); } } } } @@ -4997,7 +5075,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e143); } + if (peg$silentFails === 0) { peg$fail(peg$e145); } } if (s0 === peg$FAILED) { s0 = peg$currPos; diff --git a/src/libs/SearchParser/searchParser.js b/src/libs/SearchParser/searchParser.js index cce27bb8bdf5..4e5dbda8dbb8 100644 --- a/src/libs/SearchParser/searchParser.js +++ b/src/libs/SearchParser/searchParser.js @@ -238,76 +238,78 @@ function peg$parse(input, options) { var peg$c51 = "workspace"; var peg$c52 = "submitted"; var peg$c53 = "approved"; - var peg$c54 = "paid"; - var peg$c55 = "exported"; - var peg$c56 = "posted"; - var peg$c57 = "withdrawn"; - var peg$c58 = "groupby"; - var peg$c59 = "group-by"; - var peg$c60 = "limit"; - var peg$c61 = "feed"; - var peg$c62 = "title"; - var peg$c63 = "submitteruserid"; - var peg$c64 = "submitter-user-id"; - var peg$c65 = "submitterpayrollid"; - var peg$c66 = "submitter-payroll-id"; - var peg$c67 = "orderdealnumbers"; - var peg$c68 = "order-deal-numbers"; - var peg$c69 = "assignee"; - var peg$c70 = "createdby"; - var peg$c71 = "created-by"; - var peg$c72 = "action"; - var peg$c73 = "total"; - var peg$c74 = "has"; - var peg$c75 = "is"; - var peg$c76 = "purchaseamount"; - var peg$c77 = "purchase-amount"; - var peg$c78 = "purchasecurrency"; - var peg$c79 = "purchase-currency"; - var peg$c80 = "amountdebited"; - var peg$c81 = "amount-debited"; - var peg$c82 = "amountreimbursed"; - var peg$c83 = "amount-reimbursed"; - var peg$c84 = "columns"; - var peg$c85 = "view"; - var peg$c86 = "per-diem"; - var peg$c87 = "drafts"; - var peg$c88 = "draft"; - var peg$c89 = "tax"; - var peg$c90 = "policy-name"; - var peg$c91 = "long-report-id"; - var peg$c92 = "exported-to"; - var peg$c93 = "exportedto"; - var peg$c94 = "exchange-rate"; - var peg$c95 = "reimbursable-total"; - var peg$c96 = "non-reimbursable-total"; - var peg$c97 = "group-from"; - var peg$c98 = "group-expenses"; - var peg$c99 = "group-total"; - var peg$c100 = "group-card"; - var peg$c101 = "group-feed"; - var peg$c102 = "group-bank-account"; - var peg$c103 = "group-withdrawn"; - var peg$c104 = "group-withdrawal-id"; - var peg$c105 = "group-amount-debited"; - var peg$c106 = "group-amount-reimbursed"; - var peg$c107 = "group-category"; - var peg$c108 = "group-tag"; - var peg$c109 = "group-merchant"; - var peg$c110 = "group-day"; - var peg$c111 = "group-month"; - var peg$c112 = "group-week"; - var peg$c113 = "group-year"; - var peg$c114 = "group-quarter"; - var peg$c115 = "!="; - var peg$c116 = ">="; - var peg$c117 = ">"; - var peg$c118 = "<="; - var peg$c119 = "<"; - var peg$c120 = "\\"; - var peg$c121 = "\u201C"; - var peg$c122 = "\u201D"; - var peg$c123 = "\""; + var peg$c54 = "any-approval"; + var peg$c55 = "anyapproval"; + var peg$c56 = "paid"; + var peg$c57 = "exported"; + var peg$c58 = "posted"; + var peg$c59 = "withdrawn"; + var peg$c60 = "groupby"; + var peg$c61 = "group-by"; + var peg$c62 = "limit"; + var peg$c63 = "feed"; + var peg$c64 = "title"; + var peg$c65 = "submitteruserid"; + var peg$c66 = "submitter-user-id"; + var peg$c67 = "submitterpayrollid"; + var peg$c68 = "submitter-payroll-id"; + var peg$c69 = "orderdealnumbers"; + var peg$c70 = "order-deal-numbers"; + var peg$c71 = "assignee"; + var peg$c72 = "createdby"; + var peg$c73 = "created-by"; + var peg$c74 = "action"; + var peg$c75 = "total"; + var peg$c76 = "has"; + var peg$c77 = "is"; + var peg$c78 = "purchaseamount"; + var peg$c79 = "purchase-amount"; + var peg$c80 = "purchasecurrency"; + var peg$c81 = "purchase-currency"; + var peg$c82 = "amountdebited"; + var peg$c83 = "amount-debited"; + var peg$c84 = "amountreimbursed"; + var peg$c85 = "amount-reimbursed"; + var peg$c86 = "columns"; + var peg$c87 = "view"; + var peg$c88 = "per-diem"; + var peg$c89 = "drafts"; + var peg$c90 = "draft"; + var peg$c91 = "tax"; + var peg$c92 = "policy-name"; + var peg$c93 = "long-report-id"; + var peg$c94 = "exported-to"; + var peg$c95 = "exportedto"; + var peg$c96 = "exchange-rate"; + var peg$c97 = "reimbursable-total"; + var peg$c98 = "non-reimbursable-total"; + var peg$c99 = "group-from"; + var peg$c100 = "group-expenses"; + var peg$c101 = "group-total"; + var peg$c102 = "group-card"; + var peg$c103 = "group-feed"; + var peg$c104 = "group-bank-account"; + var peg$c105 = "group-withdrawn"; + var peg$c106 = "group-withdrawal-id"; + var peg$c107 = "group-amount-debited"; + var peg$c108 = "group-amount-reimbursed"; + var peg$c109 = "group-category"; + var peg$c110 = "group-tag"; + var peg$c111 = "group-merchant"; + var peg$c112 = "group-day"; + var peg$c113 = "group-month"; + var peg$c114 = "group-week"; + var peg$c115 = "group-year"; + var peg$c116 = "group-quarter"; + var peg$c117 = "!="; + var peg$c118 = ">="; + var peg$c119 = ">"; + var peg$c120 = "<="; + var peg$c121 = "<"; + var peg$c122 = "\\"; + var peg$c123 = "\u201C"; + var peg$c124 = "\u201D"; + var peg$c125 = "\""; var peg$r0 = /^[^ \t\r\n\xA0]/; var peg$r1 = /^[ \t\r\n\xA0,:=<>!]/; @@ -384,93 +386,95 @@ function peg$parse(input, options) { var peg$e56 = peg$literalExpectation("workspace", true); var peg$e57 = peg$literalExpectation("submitted", true); var peg$e58 = peg$literalExpectation("approved", true); - var peg$e59 = peg$literalExpectation("paid", true); - var peg$e60 = peg$literalExpectation("exported", true); - var peg$e61 = peg$literalExpectation("posted", true); - var peg$e62 = peg$literalExpectation("withdrawn", true); - var peg$e63 = peg$literalExpectation("groupBy", true); - var peg$e64 = peg$literalExpectation("group-by", true); - var peg$e65 = peg$literalExpectation("limit", true); - var peg$e66 = peg$literalExpectation("feed", true); - var peg$e67 = peg$literalExpectation("title", true); - var peg$e68 = peg$literalExpectation("submitterUserID", true); - var peg$e69 = peg$literalExpectation("submitter-user-id", true); - var peg$e70 = peg$literalExpectation("submitterPayrollID", true); - var peg$e71 = peg$literalExpectation("submitter-payroll-id", true); - var peg$e72 = peg$literalExpectation("orderDealNumbers", true); - var peg$e73 = peg$literalExpectation("order-deal-numbers", true); - var peg$e74 = peg$literalExpectation("assignee", true); - var peg$e75 = peg$literalExpectation("createdBy", true); - var peg$e76 = peg$literalExpectation("created-by", true); - var peg$e77 = peg$literalExpectation("action", true); - var peg$e78 = peg$literalExpectation("total", true); - var peg$e79 = peg$literalExpectation("has", true); - var peg$e80 = peg$literalExpectation("is", true); - var peg$e81 = peg$literalExpectation("purchaseAmount", true); - var peg$e82 = peg$literalExpectation("purchase-amount", true); - var peg$e83 = peg$literalExpectation("purchaseCurrency", true); - var peg$e84 = peg$literalExpectation("purchase-currency", true); - var peg$e85 = peg$literalExpectation("amountDebited", true); - var peg$e86 = peg$literalExpectation("amount-debited", true); - var peg$e87 = peg$literalExpectation("amountReimbursed", true); - var peg$e88 = peg$literalExpectation("amount-reimbursed", true); - var peg$e89 = peg$literalExpectation("columns", true); - var peg$e90 = peg$literalExpectation("view", true); - var peg$e91 = peg$literalExpectation("per-diem", true); - var peg$e92 = peg$literalExpectation("drafts", true); - var peg$e93 = peg$literalExpectation("draft", true); - var peg$e94 = peg$literalExpectation("tax", true); - var peg$e95 = peg$literalExpectation("policy-name", true); - var peg$e96 = peg$literalExpectation("long-report-id", true); - var peg$e97 = peg$literalExpectation("exported-to", true); - var peg$e98 = peg$classExpectation([":", "="], false, false); - var peg$e99 = peg$literalExpectation("exportedTo", true); - var peg$e100 = peg$literalExpectation("exchange-rate", true); - var peg$e101 = peg$literalExpectation("reimbursable-total", true); - var peg$e102 = peg$literalExpectation("non-reimbursable-total", true); - var peg$e103 = peg$literalExpectation("group-from", true); - var peg$e104 = peg$literalExpectation("group-expenses", true); - var peg$e105 = peg$literalExpectation("group-total", true); - var peg$e106 = peg$literalExpectation("group-card", true); - var peg$e107 = peg$literalExpectation("group-feed", true); - var peg$e108 = peg$literalExpectation("group-bank-account", true); - var peg$e109 = peg$literalExpectation("group-withdrawn", true); - var peg$e110 = peg$literalExpectation("group-withdrawal-id", true); - var peg$e111 = peg$literalExpectation("group-amount-debited", true); - var peg$e112 = peg$literalExpectation("group-amount-reimbursed", true); - var peg$e113 = peg$literalExpectation("group-category", true); - var peg$e114 = peg$literalExpectation("group-tag", true); - var peg$e115 = peg$literalExpectation("group-merchant", true); - var peg$e116 = peg$literalExpectation("group-day", true); - var peg$e117 = peg$literalExpectation("group-month", true); - var peg$e118 = peg$literalExpectation("group-week", true); - var peg$e119 = peg$literalExpectation("group-year", true); - var peg$e120 = peg$literalExpectation("group-quarter", true); - var peg$e121 = peg$otherExpectation("operator"); - var peg$e122 = peg$literalExpectation("!=", false); - var peg$e123 = peg$literalExpectation(">=", false); - var peg$e124 = peg$literalExpectation(">", false); - var peg$e125 = peg$literalExpectation("<=", false); - var peg$e126 = peg$literalExpectation("<", false); - var peg$e127 = peg$literalExpectation("\\", false); - var peg$e128 = peg$classExpectation([",", "\"", "\u201D", "\u201C", "\\"], false, false); - var peg$e129 = peg$otherExpectation("word"); - var peg$e130 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e131 = peg$otherExpectation("whitespace"); - var peg$e132 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); - var peg$e133 = peg$otherExpectation("quote"); - var peg$e134 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); - var peg$e135 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); - var peg$e136 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); - var peg$e137 = peg$literalExpectation("\u201C", false); - var peg$e138 = peg$literalExpectation("\u201D", false); - var peg$e139 = peg$literalExpectation("\"", false); - var peg$e140 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e141 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); - var peg$e142 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); - var peg$e143 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); - var peg$e144 = peg$classExpectation([","], false, false); - var peg$e145 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ","], false, false); + var peg$e59 = peg$literalExpectation("any-approval", true); + var peg$e60 = peg$literalExpectation("anyApproval", true); + var peg$e61 = peg$literalExpectation("paid", true); + var peg$e62 = peg$literalExpectation("exported", true); + var peg$e63 = peg$literalExpectation("posted", true); + var peg$e64 = peg$literalExpectation("withdrawn", true); + var peg$e65 = peg$literalExpectation("groupBy", true); + var peg$e66 = peg$literalExpectation("group-by", true); + var peg$e67 = peg$literalExpectation("limit", true); + var peg$e68 = peg$literalExpectation("feed", true); + var peg$e69 = peg$literalExpectation("title", true); + var peg$e70 = peg$literalExpectation("submitterUserID", true); + var peg$e71 = peg$literalExpectation("submitter-user-id", true); + var peg$e72 = peg$literalExpectation("submitterPayrollID", true); + var peg$e73 = peg$literalExpectation("submitter-payroll-id", true); + var peg$e74 = peg$literalExpectation("orderDealNumbers", true); + var peg$e75 = peg$literalExpectation("order-deal-numbers", true); + var peg$e76 = peg$literalExpectation("assignee", true); + var peg$e77 = peg$literalExpectation("createdBy", true); + var peg$e78 = peg$literalExpectation("created-by", true); + var peg$e79 = peg$literalExpectation("action", true); + var peg$e80 = peg$literalExpectation("total", true); + var peg$e81 = peg$literalExpectation("has", true); + var peg$e82 = peg$literalExpectation("is", true); + var peg$e83 = peg$literalExpectation("purchaseAmount", true); + var peg$e84 = peg$literalExpectation("purchase-amount", true); + var peg$e85 = peg$literalExpectation("purchaseCurrency", true); + var peg$e86 = peg$literalExpectation("purchase-currency", true); + var peg$e87 = peg$literalExpectation("amountDebited", true); + var peg$e88 = peg$literalExpectation("amount-debited", true); + var peg$e89 = peg$literalExpectation("amountReimbursed", true); + var peg$e90 = peg$literalExpectation("amount-reimbursed", true); + var peg$e91 = peg$literalExpectation("columns", true); + var peg$e92 = peg$literalExpectation("view", true); + var peg$e93 = peg$literalExpectation("per-diem", true); + var peg$e94 = peg$literalExpectation("drafts", true); + var peg$e95 = peg$literalExpectation("draft", true); + var peg$e96 = peg$literalExpectation("tax", true); + var peg$e97 = peg$literalExpectation("policy-name", true); + var peg$e98 = peg$literalExpectation("long-report-id", true); + var peg$e99 = peg$literalExpectation("exported-to", true); + var peg$e100 = peg$classExpectation([":", "="], false, false); + var peg$e101 = peg$literalExpectation("exportedTo", true); + var peg$e102 = peg$literalExpectation("exchange-rate", true); + var peg$e103 = peg$literalExpectation("reimbursable-total", true); + var peg$e104 = peg$literalExpectation("non-reimbursable-total", true); + var peg$e105 = peg$literalExpectation("group-from", true); + var peg$e106 = peg$literalExpectation("group-expenses", true); + var peg$e107 = peg$literalExpectation("group-total", true); + var peg$e108 = peg$literalExpectation("group-card", true); + var peg$e109 = peg$literalExpectation("group-feed", true); + var peg$e110 = peg$literalExpectation("group-bank-account", true); + var peg$e111 = peg$literalExpectation("group-withdrawn", true); + var peg$e112 = peg$literalExpectation("group-withdrawal-id", true); + var peg$e113 = peg$literalExpectation("group-amount-debited", true); + var peg$e114 = peg$literalExpectation("group-amount-reimbursed", true); + var peg$e115 = peg$literalExpectation("group-category", true); + var peg$e116 = peg$literalExpectation("group-tag", true); + var peg$e117 = peg$literalExpectation("group-merchant", true); + var peg$e118 = peg$literalExpectation("group-day", true); + var peg$e119 = peg$literalExpectation("group-month", true); + var peg$e120 = peg$literalExpectation("group-week", true); + var peg$e121 = peg$literalExpectation("group-year", true); + var peg$e122 = peg$literalExpectation("group-quarter", true); + var peg$e123 = peg$otherExpectation("operator"); + var peg$e124 = peg$literalExpectation("!=", false); + var peg$e125 = peg$literalExpectation(">=", false); + var peg$e126 = peg$literalExpectation(">", false); + var peg$e127 = peg$literalExpectation("<=", false); + var peg$e128 = peg$literalExpectation("<", false); + var peg$e129 = peg$literalExpectation("\\", false); + var peg$e130 = peg$classExpectation([",", "\"", "\u201D", "\u201C", "\\"], false, false); + var peg$e131 = peg$otherExpectation("word"); + var peg$e132 = peg$classExpectation([" ", ",", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e133 = peg$otherExpectation("whitespace"); + var peg$e134 = peg$classExpectation([" ", "\t", "\r", "\n", "\xA0"], false, false); + var peg$e135 = peg$otherExpectation("quote"); + var peg$e136 = peg$classExpectation([" ", ",", "\"", "\u201D", "\u201C", "\t", "\n", "\r", "\xA0"], true, false); + var peg$e137 = peg$classExpectation(["\"", ["\u201C", "\u201D"]], false, false); + var peg$e138 = peg$classExpectation(["\"", "\u201D", "\u201C", "\r", "\n"], true, false); + var peg$e139 = peg$literalExpectation("\u201C", false); + var peg$e140 = peg$literalExpectation("\u201D", false); + var peg$e141 = peg$literalExpectation("\"", false); + var peg$e142 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e143 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e144 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0"], false, false); + var peg$e145 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ["a", "z"], ["A", "Z"]], false, false); + var peg$e146 = peg$classExpectation([","], false, false); + var peg$e147 = peg$classExpectation([" ", "\t", "\n", "\r", "\xA0", ","], false, false); var peg$f0 = function(filters) { return applyDefaults(filters); }; var peg$f1 = function(head, tail) { @@ -619,71 +623,71 @@ function peg$parse(input, options) { isColumnsContext = true; return "columns"; }; - var peg$f65 = function() {return "view"}; - var peg$f66 = function() { return isColumnsContext; }; - var peg$f67 = function() { return "perDiem"; }; - var peg$f68 = function() { return "drafts"; }; - var peg$f69 = function() { return "originalamount"; }; - var peg$f70 = function() { return "taxAmount"; }; - var peg$f71 = function() { return "taxrate"; }; - var peg$f72 = function() { return "policyname"; }; - var peg$f73 = function() { return "withdrawalID"; }; - var peg$f74 = function() { return "bankAccount"; }; - var peg$f75 = function() { return "reportID"; }; - var peg$f76 = function() { return "base62ReportID"; }; - var peg$f77 = function() { return "exportedto"; }; - var peg$f78 = function() { return "exportedTo"; }; - var peg$f79 = function() { return "exportedTo"; }; - var peg$f80 = function() { return "exchangeRate"; }; - var peg$f81 = function() { return "reimbursableTotal"; }; - var peg$f82 = function() { return "nonReimbursableTotal"; }; - var peg$f83 = function() { return "groupFrom"; }; - var peg$f84 = function() { return "groupExpenses"; }; - var peg$f85 = function() { return "groupTotal"; }; - var peg$f86 = function() { return "groupCard"; }; - var peg$f87 = function() { return "groupFeed"; }; - var peg$f88 = function() { return "groupBankAccount"; }; - var peg$f89 = function() { return "groupWithdrawn"; }; - var peg$f90 = function() { return "groupWithdrawalID"; }; - var peg$f91 = function() { return "groupAmountDebited"; }; - var peg$f92 = function() { return "groupAmountReimbursed"; }; - var peg$f93 = function() { return "amountDebited"; }; - var peg$f94 = function() { return "amountReimbursed"; }; - var peg$f95 = function() { return "groupCategory"; }; - var peg$f96 = function() { return "groupTag"; }; - var peg$f97 = function() { return "groupMerchant"; }; - var peg$f98 = function() { return "groupday"; }; - var peg$f99 = function() { return "groupmonth"; }; - var peg$f100 = function() { return "groupweek"; }; - var peg$f101 = function() { return "groupyear"; }; - var peg$f102 = function() { return "groupquarter"; }; - var peg$f103 = function() { return "eq"; }; - var peg$f104 = function() { return "neq"; }; - var peg$f105 = function() { return "gte"; }; - var peg$f106 = function() { return "gt"; }; - var peg$f107 = function() { return "lte"; }; - var peg$f108 = function() { return "lt"; }; - var peg$f109 = function(o) { + var peg$f67 = function() {return "view"}; + var peg$f68 = function() { return isColumnsContext; }; + var peg$f69 = function() { return "perDiem"; }; + var peg$f70 = function() { return "drafts"; }; + var peg$f71 = function() { return "originalamount"; }; + var peg$f72 = function() { return "taxAmount"; }; + var peg$f73 = function() { return "taxrate"; }; + var peg$f74 = function() { return "policyname"; }; + var peg$f75 = function() { return "withdrawalID"; }; + var peg$f76 = function() { return "bankAccount"; }; + var peg$f77 = function() { return "reportID"; }; + var peg$f78 = function() { return "base62ReportID"; }; + var peg$f79 = function() { return "exportedto"; }; + var peg$f80 = function() { return "exportedTo"; }; + var peg$f81 = function() { return "exportedTo"; }; + var peg$f82 = function() { return "exchangeRate"; }; + var peg$f83 = function() { return "reimbursableTotal"; }; + var peg$f84 = function() { return "nonReimbursableTotal"; }; + var peg$f85 = function() { return "groupFrom"; }; + var peg$f86 = function() { return "groupExpenses"; }; + var peg$f87 = function() { return "groupTotal"; }; + var peg$f88 = function() { return "groupCard"; }; + var peg$f89 = function() { return "groupFeed"; }; + var peg$f90 = function() { return "groupBankAccount"; }; + var peg$f91 = function() { return "groupWithdrawn"; }; + var peg$f92 = function() { return "groupWithdrawalID"; }; + var peg$f93 = function() { return "groupAmountDebited"; }; + var peg$f94 = function() { return "groupAmountReimbursed"; }; + var peg$f95 = function() { return "amountDebited"; }; + var peg$f96 = function() { return "amountReimbursed"; }; + var peg$f97 = function() { return "groupCategory"; }; + var peg$f98 = function() { return "groupTag"; }; + var peg$f99 = function() { return "groupMerchant"; }; + var peg$f100 = function() { return "groupday"; }; + var peg$f101 = function() { return "groupmonth"; }; + var peg$f102 = function() { return "groupweek"; }; + var peg$f103 = function() { return "groupyear"; }; + var peg$f104 = function() { return "groupquarter"; }; + var peg$f105 = function() { return "eq"; }; + var peg$f106 = function() { return "neq"; }; + var peg$f107 = function() { return "gte"; }; + var peg$f108 = function() { return "gt"; }; + var peg$f109 = function() { return "lte"; }; + var peg$f110 = function() { return "lt"; }; + var peg$f111 = function(o) { if (nameOperator) { expectingNestedQuote = (o === "eq"); // Use simple parser if no valid operator is found } isColumnsContext = false; return o; }; - var peg$f110 = function(c) { return c; }; - var peg$f111 = function(chars) { return chars.join("").trim(); }; - var peg$f112 = function() { + var peg$f112 = function(c) { return c; }; + var peg$f113 = function(chars) { return chars.join("").trim(); }; + var peg$f114 = function() { isColumnsContext = false; return "and"; }; - var peg$f113 = function() { return expectingNestedQuote; }; - var peg$f114 = function(start, inner, end) { //handle no-breaking space + var peg$f115 = function() { return expectingNestedQuote; }; + var peg$f116 = function(start, inner, end) { //handle no-breaking space return [...start, '"', ...inner, '"', ...end].join(""); }; - var peg$f115 = function(start) {return "“"}; - var peg$f116 = function(start) {return "”"}; - var peg$f117 = function(start) {return "\""}; - var peg$f118 = function(start, inner, end) { + var peg$f117 = function(start) {return "“"}; + var peg$f118 = function(start) {return "”"}; + var peg$f119 = function(start) {return "\""}; + var peg$f120 = function(start, inner, end) { return [...start, '"', ...inner, '"'].join(""); }; var peg$currPos = options.peg$currPos | 0; @@ -4171,7 +4175,7 @@ function peg$parse(input, options) { return s0; } - function peg$parsegroupDay() { + function peg$parsegroupTag() { var s0, s1, s2, s3; s0 = peg$currPos; @@ -4208,13 +4212,13 @@ function peg$parse(input, options) { return s0; } - function peg$parsegroupMonth() { + function peg$parsegroupMerchant() { var s0, s1, s2, s3; s0 = peg$currPos; - s1 = input.substr(peg$currPos, 11); + s1 = input.substr(peg$currPos, 14); if (s1.toLowerCase() === peg$c111) { - peg$currPos += 11; + peg$currPos += 14; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$e117); } @@ -4245,13 +4249,13 @@ function peg$parse(input, options) { return s0; } - function peg$parsegroupWeek() { + function peg$parsegroupDay() { var s0, s1, s2, s3; s0 = peg$currPos; - s1 = input.substr(peg$currPos, 11); + s1 = input.substr(peg$currPos, 9); if (s1.toLowerCase() === peg$c112) { - peg$currPos += 11; + peg$currPos += 9; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$e118); } @@ -4282,13 +4286,13 @@ function peg$parse(input, options) { return s0; } - function peg$parsegroupYear() { + function peg$parsegroupMonth() { var s0, s1, s2, s3; s0 = peg$currPos; - s1 = input.substr(peg$currPos, 10); + s1 = input.substr(peg$currPos, 11); if (s1.toLowerCase() === peg$c113) { - peg$currPos += 10; + peg$currPos += 11; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$e119); } @@ -4319,13 +4323,13 @@ function peg$parse(input, options) { return s0; } - function peg$parsegroupQuarter() { + function peg$parsegroupWeek() { var s0, s1, s2, s3; s0 = peg$currPos; - s1 = input.substr(peg$currPos, 13); + s1 = input.substr(peg$currPos, 10); if (s1.toLowerCase() === peg$c114) { - peg$currPos += 13; + peg$currPos += 10; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$e120); } @@ -4356,6 +4360,80 @@ function peg$parse(input, options) { return s0; } + function peg$parsegroupYear() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 10); + if (s1.toLowerCase() === peg$c115) { + peg$currPos += 10; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e121); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsewordBoundary(); + peg$silentFails--; + if (s3 !== peg$FAILED) { + peg$currPos = s2; + s2 = undefined; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f103(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsegroupQuarter() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = input.substr(peg$currPos, 13); + if (s1.toLowerCase() === peg$c116) { + peg$currPos += 13; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e122); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsewordBoundary(); + peg$silentFails--; + if (s3 !== peg$FAILED) { + peg$currPos = s2; + s2 = undefined; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f104(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + function peg$parseoperator() { var s0, s1; @@ -4370,77 +4448,77 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f103(); + s1 = peg$f105(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c115) { - s1 = peg$c115; + if (input.substr(peg$currPos, 2) === peg$c117) { + s1 = peg$c117; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e122); } + if (peg$silentFails === 0) { peg$fail(peg$e124); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f104(); + s1 = peg$f106(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c116) { - s1 = peg$c116; + if (input.substr(peg$currPos, 2) === peg$c118) { + s1 = peg$c118; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e123); } + if (peg$silentFails === 0) { peg$fail(peg$e125); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f105(); + s1 = peg$f107(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 62) { - s1 = peg$c117; + s1 = peg$c119; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e124); } + if (peg$silentFails === 0) { peg$fail(peg$e126); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f106(); + s1 = peg$f108(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c118) { - s1 = peg$c118; + if (input.substr(peg$currPos, 2) === peg$c120) { + s1 = peg$c120; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e125); } + if (peg$silentFails === 0) { peg$fail(peg$e127); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f107(); + s1 = peg$f109(); } s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 60) { - s1 = peg$c119; + s1 = peg$c121; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e126); } + if (peg$silentFails === 0) { peg$fail(peg$e128); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f108(); + s1 = peg$f110(); } s0 = s1; } @@ -4451,7 +4529,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e121); } + if (peg$silentFails === 0) { peg$fail(peg$e123); } } return s0; @@ -4464,7 +4542,7 @@ function peg$parse(input, options) { s1 = peg$parseoperator(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f109(s1); + s1 = peg$f111(s1); } s0 = s1; @@ -4476,11 +4554,11 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 92) { - s1 = peg$c120; + s1 = peg$c122; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e127); } + if (peg$silentFails === 0) { peg$fail(peg$e129); } } if (s1 !== peg$FAILED) { s2 = input.charAt(peg$currPos); @@ -4488,11 +4566,11 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e128); } + if (peg$silentFails === 0) { peg$fail(peg$e130); } } if (s2 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f110(s2); + s0 = peg$f112(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4518,7 +4596,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e130); } + if (peg$silentFails === 0) { peg$fail(peg$e132); } } } if (s2 !== peg$FAILED) { @@ -4531,7 +4609,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e130); } + if (peg$silentFails === 0) { peg$fail(peg$e132); } } } } @@ -4540,13 +4618,13 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f111(s1); + s1 = peg$f113(s1); } s0 = s1; peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e129); } + if (peg$silentFails === 0) { peg$fail(peg$e131); } } return s0; @@ -4558,7 +4636,7 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = peg$parse_(); peg$savedPos = s0; - s1 = peg$f112(); + s1 = peg$f114(); s0 = s1; return s0; @@ -4574,7 +4652,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e132); } + if (peg$silentFails === 0) { peg$fail(peg$e134); } } while (s1 !== peg$FAILED) { s0.push(s1); @@ -4583,12 +4661,12 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e132); } + if (peg$silentFails === 0) { peg$fail(peg$e134); } } } peg$silentFails--; s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e131); } + if (peg$silentFails === 0) { peg$fail(peg$e133); } return s0; } @@ -4598,7 +4676,7 @@ function peg$parse(input, options) { s0 = peg$currPos; peg$savedPos = peg$currPos; - s1 = peg$f113(); + s1 = peg$f115(); if (s1) { s1 = undefined; } else { @@ -4635,7 +4713,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e134); } + if (peg$silentFails === 0) { peg$fail(peg$e136); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4644,7 +4722,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e134); } + if (peg$silentFails === 0) { peg$fail(peg$e136); } } } s2 = input.charAt(peg$currPos); @@ -4652,7 +4730,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e135); } + if (peg$silentFails === 0) { peg$fail(peg$e137); } } if (s2 !== peg$FAILED) { s3 = []; @@ -4663,7 +4741,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e136); } + if (peg$silentFails === 0) { peg$fail(peg$e138); } } } while (s4 !== peg$FAILED) { @@ -4675,7 +4753,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e136); } + if (peg$silentFails === 0) { peg$fail(peg$e138); } } } } @@ -4684,7 +4762,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e135); } + if (peg$silentFails === 0) { peg$fail(peg$e137); } } if (s4 !== peg$FAILED) { s5 = []; @@ -4693,7 +4771,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e130); } + if (peg$silentFails === 0) { peg$fail(peg$e132); } } while (s6 !== peg$FAILED) { s5.push(s6); @@ -4702,11 +4780,11 @@ function peg$parse(input, options) { peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e130); } + if (peg$silentFails === 0) { peg$fail(peg$e132); } } } peg$savedPos = s0; - s0 = peg$f114(s1, s3, s5); + s0 = peg$f116(s1, s3, s5); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4718,7 +4796,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e133); } + if (peg$silentFails === 0) { peg$fail(peg$e135); } } return s0; @@ -4735,7 +4813,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e134); } + if (peg$silentFails === 0) { peg$fail(peg$e136); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -4744,7 +4822,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e134); } + if (peg$silentFails === 0) { peg$fail(peg$e136); } } } s2 = input.charAt(peg$currPos); @@ -4752,7 +4830,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e135); } + if (peg$silentFails === 0) { peg$fail(peg$e137); } } if (s2 !== peg$FAILED) { s3 = []; @@ -4763,7 +4841,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e136); } + if (peg$silentFails === 0) { peg$fail(peg$e138); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -4779,15 +4857,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c121; + s6 = peg$c123; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e137); } + if (peg$silentFails === 0) { peg$fail(peg$e139); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f115(s1); + s4 = peg$f117(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4810,15 +4888,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c122; + s6 = peg$c124; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e138); } + if (peg$silentFails === 0) { peg$fail(peg$e140); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f116(s1); + s4 = peg$f118(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4841,15 +4919,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c123; + s6 = peg$c125; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e139); } + if (peg$silentFails === 0) { peg$fail(peg$e141); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f117(s1); + s4 = peg$f119(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4871,7 +4949,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e136); } + if (peg$silentFails === 0) { peg$fail(peg$e138); } } if (s4 === peg$FAILED) { s4 = peg$currPos; @@ -4887,7 +4965,7 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8220) { - s6 = peg$c121; + s6 = peg$c123; peg$currPos++; } else { s6 = peg$FAILED; @@ -4918,7 +4996,7 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 8221) { - s6 = peg$c122; + s6 = peg$c124; peg$currPos++; } else { s6 = peg$FAILED; @@ -4949,15 +5027,15 @@ function peg$parse(input, options) { } if (s5 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { - s6 = peg$c123; + s6 = peg$c125; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e139); } + if (peg$silentFails === 0) { peg$fail(peg$e141); } } if (s6 !== peg$FAILED) { peg$savedPos = s4; - s4 = peg$f117(s1); + s4 = peg$f119(s1); } else { peg$currPos = s4; s4 = peg$FAILED; @@ -4974,7 +5052,7 @@ function peg$parse(input, options) { s4 = peg$parseclosingQuote(); if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f118(s1, s3, s4); + s0 = peg$f120(s1, s3, s4); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -4986,7 +5064,7 @@ function peg$parse(input, options) { peg$silentFails--; if (s0 === peg$FAILED) { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e133); } + if (peg$silentFails === 0) { peg$fail(peg$e135); } } return s0; @@ -5001,7 +5079,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e135); } + if (peg$silentFails === 0) { peg$fail(peg$e137); } } if (s1 !== peg$FAILED) { s2 = peg$currPos; @@ -5039,7 +5117,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e140); } + if (peg$silentFails === 0) { peg$fail(peg$e142); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -5048,7 +5126,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e140); } + if (peg$silentFails === 0) { peg$fail(peg$e142); } } } s2 = []; @@ -5057,7 +5135,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e141); } + if (peg$silentFails === 0) { peg$fail(peg$e143); } } while (s3 !== peg$FAILED) { s2.push(s3); @@ -5066,7 +5144,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e141); } + if (peg$silentFails === 0) { peg$fail(peg$e143); } } } s3 = []; @@ -5075,7 +5153,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e142); } + if (peg$silentFails === 0) { peg$fail(peg$e144); } } while (s4 !== peg$FAILED) { s3.push(s4); @@ -5084,7 +5162,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s4 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e142); } + if (peg$silentFails === 0) { peg$fail(peg$e144); } } } s4 = peg$parseoperator(); @@ -5103,7 +5181,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e143); } + if (peg$silentFails === 0) { peg$fail(peg$e145); } } while (s2 !== peg$FAILED) { s1.push(s2); @@ -5112,7 +5190,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e143); } + if (peg$silentFails === 0) { peg$fail(peg$e145); } } } s2 = peg$currPos; @@ -5159,7 +5237,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e144); } + if (peg$silentFails === 0) { peg$fail(peg$e146); } } } } @@ -5175,7 +5253,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e145); } + if (peg$silentFails === 0) { peg$fail(peg$e147); } } if (s0 === peg$FAILED) { s0 = peg$currPos; From 498967a458c1e936a81773c7793e35be4fe26dee Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Thu, 24 Sep 2026 00:25:20 +0700 Subject: [PATCH 03/12] fix test --- tests/unit/Search/SearchQueryUtilsTest.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/unit/Search/SearchQueryUtilsTest.ts b/tests/unit/Search/SearchQueryUtilsTest.ts index e61d3729154b..3c2cf0226e42 100644 --- a/tests/unit/Search/SearchQueryUtilsTest.ts +++ b/tests/unit/Search/SearchQueryUtilsTest.ts @@ -2115,7 +2115,7 @@ describe('SearchQueryUtils', () => { throw new Error('Failed to parse query string'); } - const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}, {}); + const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}); expect(result[FILTER_KEYS.ANY_APPROVAL_ON]).toBe(CONST.SEARCH.DATE_PRESETS.LAST_MONTH); expect(result[FILTER_KEYS.ANY_APPROVAL_AFTER]).toBeUndefined(); expect(result[FILTER_KEYS.ANY_APPROVAL_BEFORE]).toBeUndefined(); @@ -2137,7 +2137,7 @@ describe('SearchQueryUtils', () => { throw new Error('Failed to parse query string'); } - const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}, {}); + const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}); expect(result[FILTER_KEYS.ANY_APPROVAL_AFTER]).toBe('2026-04-01'); expect(result[FILTER_KEYS.ANY_APPROVAL_ON]).toBeUndefined(); expect(result[FILTER_KEYS.ANY_APPROVAL_BEFORE]).toBeUndefined(); @@ -2159,7 +2159,7 @@ describe('SearchQueryUtils', () => { throw new Error('Failed to parse query string'); } - const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}, {}); + const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}); expect(result[FILTER_KEYS.ANY_APPROVAL_BEFORE]).toBe('2026-04-30'); expect(result[FILTER_KEYS.ANY_APPROVAL_ON]).toBeUndefined(); expect(result[FILTER_KEYS.ANY_APPROVAL_AFTER]).toBeUndefined(); @@ -2181,7 +2181,7 @@ describe('SearchQueryUtils', () => { throw new Error('Failed to parse query string'); } - const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}, {}); + const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}); expect(result[FILTER_KEYS.ANY_APPROVAL_RANGE]).toBe('2026-04-01,2026-04-30'); expect(result[FILTER_KEYS.ANY_APPROVAL_ON]).toBeUndefined(); expect(result[FILTER_KEYS.ANY_APPROVAL_AFTER]).toBeUndefined(); @@ -2203,7 +2203,7 @@ describe('SearchQueryUtils', () => { throw new Error('Failed to parse query string'); } - const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}, {}); + const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}); expect(result[FILTER_KEYS.ANY_APPROVAL_NOT]).toBe(CONST.SEARCH.DATE_PRESETS.LAST_MONTH); expect(result[FILTER_KEYS.ANY_APPROVAL_ON]).toBeUndefined(); expect(result[FILTER_KEYS.ANY_APPROVAL_AFTER]).toBeUndefined(); From f90a8a9131fd937a1d1c52629493dec10df5e638 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Thu, 24 Sep 2026 10:53:28 +0700 Subject: [PATCH 04/12] update query sent to backend --- src/CONST/index.ts | 2 +- src/libs/SearchParser/autocompleteParser.js | 20 ++++++------ src/libs/SearchParser/baseRules.peggy | 4 +-- src/libs/SearchParser/searchParser.js | 20 ++++++------ src/types/form/SearchAdvancedFiltersForm.ts | 10 +++--- tests/unit/Search/SearchQueryUtilsTest.ts | 2 +- tests/unit/SearchAutocompleteParserTest.ts | 32 +++++++++++++------ tests/unit/SearchParserTest.ts | 22 ++++++++++--- .../hooks/useAutocompleteSuggestions.test.ts | 4 +-- 9 files changed, 72 insertions(+), 44 deletions(-) diff --git a/src/CONST/index.ts b/src/CONST/index.ts index 532e5a76fe5e..2b10780d80e9 100644 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -7966,7 +7966,7 @@ const CONST = { IN: 'in', SUBMITTED: 'submitted', APPROVED: 'approved', - ANY_APPROVAL: 'any-approval', + ANY_APPROVAL: 'anyApproval', PAID: 'paid', EXPORTED: 'exported', POSTED: 'posted', diff --git a/src/libs/SearchParser/autocompleteParser.js b/src/libs/SearchParser/autocompleteParser.js index 540ac3f69354..0ff5660d6e5a 100644 --- a/src/libs/SearchParser/autocompleteParser.js +++ b/src/libs/SearchParser/autocompleteParser.js @@ -239,8 +239,8 @@ function peg$parse(input, options) { var peg$c53 = "workspace"; var peg$c54 = "submitted"; var peg$c55 = "approved"; - var peg$c56 = "any-approval"; - var peg$c57 = "anyapproval"; + var peg$c56 = "anyapproval"; + var peg$c57 = "any-approval"; var peg$c58 = "paid"; var peg$c59 = "exported"; var peg$c60 = "posted"; @@ -386,8 +386,8 @@ function peg$parse(input, options) { var peg$e56 = peg$literalExpectation("workspace", true); var peg$e57 = peg$literalExpectation("submitted", true); var peg$e58 = peg$literalExpectation("approved", true); - var peg$e59 = peg$literalExpectation("any-approval", true); - var peg$e60 = peg$literalExpectation("anyApproval", true); + var peg$e59 = peg$literalExpectation("anyApproval", true); + var peg$e60 = peg$literalExpectation("any-approval", true); var peg$e61 = peg$literalExpectation("paid", true); var peg$e62 = peg$literalExpectation("exported", true); var peg$e63 = peg$literalExpectation("posted", true); @@ -575,8 +575,8 @@ function peg$parse(input, options) { var peg$f41 = function() { return "policyID"; }; var peg$f42 = function() { return "submitted"; }; var peg$f43 = function() { return "approved"; }; - var peg$f44 = function() { return "any-approval"; }; - var peg$f45 = function() { return "any-approval"; }; + var peg$f44 = function() { return "anyApproval"; }; + var peg$f45 = function() { return "anyApproval"; }; var peg$f46 = function() { return "paid"; }; var peg$f47 = function() { return "exported"; }; var peg$f48 = function() { return "posted"; }; @@ -2224,9 +2224,9 @@ function peg$parse(input, options) { var s0, s1; s0 = peg$currPos; - s1 = input.substr(peg$currPos, 12); + s1 = input.substr(peg$currPos, 11); if (s1.toLowerCase() === peg$c56) { - peg$currPos += 12; + peg$currPos += 11; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$e59); } @@ -2238,9 +2238,9 @@ function peg$parse(input, options) { s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - s1 = input.substr(peg$currPos, 11); + s1 = input.substr(peg$currPos, 12); if (s1.toLowerCase() === peg$c57) { - peg$currPos += 11; + peg$currPos += 12; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$e60); } diff --git a/src/libs/SearchParser/baseRules.peggy b/src/libs/SearchParser/baseRules.peggy index 70aab3fd22cf..60f137c67ffc 100644 --- a/src/libs/SearchParser/baseRules.peggy +++ b/src/libs/SearchParser/baseRules.peggy @@ -83,8 +83,8 @@ policyID submitted = "submitted"i { return "submitted"; } approved = "approved"i { return "approved"; } anyApproval - = "any-approval"i { return "any-approval"; } - / "anyApproval"i { return "any-approval"; } + = "anyApproval"i { return "anyApproval"; } + / "any-approval"i { return "anyApproval"; } paid = "paid"i { return "paid"; } exported = "exported"i { return "exported"; } posted = "posted"i { return "posted"; } diff --git a/src/libs/SearchParser/searchParser.js b/src/libs/SearchParser/searchParser.js index 9fddcaee8824..66f776f411c2 100644 --- a/src/libs/SearchParser/searchParser.js +++ b/src/libs/SearchParser/searchParser.js @@ -240,8 +240,8 @@ function peg$parse(input, options) { var peg$c53 = "workspace"; var peg$c54 = "submitted"; var peg$c55 = "approved"; - var peg$c56 = "any-approval"; - var peg$c57 = "anyapproval"; + var peg$c56 = "anyapproval"; + var peg$c57 = "any-approval"; var peg$c58 = "paid"; var peg$c59 = "exported"; var peg$c60 = "posted"; @@ -390,8 +390,8 @@ function peg$parse(input, options) { var peg$e58 = peg$literalExpectation("workspace", true); var peg$e59 = peg$literalExpectation("submitted", true); var peg$e60 = peg$literalExpectation("approved", true); - var peg$e61 = peg$literalExpectation("any-approval", true); - var peg$e62 = peg$literalExpectation("anyApproval", true); + var peg$e61 = peg$literalExpectation("anyApproval", true); + var peg$e62 = peg$literalExpectation("any-approval", true); var peg$e63 = peg$literalExpectation("paid", true); var peg$e64 = peg$literalExpectation("exported", true); var peg$e65 = peg$literalExpectation("posted", true); @@ -601,8 +601,8 @@ function peg$parse(input, options) { var peg$f41 = function() { return "policyID"; }; var peg$f42 = function() { return "submitted"; }; var peg$f43 = function() { return "approved"; }; - var peg$f44 = function() { return "any-approval"; }; - var peg$f45 = function() { return "any-approval"; }; + var peg$f44 = function() { return "anyApproval"; }; + var peg$f45 = function() { return "anyApproval"; }; var peg$f46 = function() { return "paid"; }; var peg$f47 = function() { return "exported"; }; var peg$f48 = function() { return "posted"; }; @@ -2402,9 +2402,9 @@ function peg$parse(input, options) { var s0, s1; s0 = peg$currPos; - s1 = input.substr(peg$currPos, 12); + s1 = input.substr(peg$currPos, 11); if (s1.toLowerCase() === peg$c56) { - peg$currPos += 12; + peg$currPos += 11; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$e61); } @@ -2416,9 +2416,9 @@ function peg$parse(input, options) { s0 = s1; if (s0 === peg$FAILED) { s0 = peg$currPos; - s1 = input.substr(peg$currPos, 11); + s1 = input.substr(peg$currPos, 12); if (s1.toLowerCase() === peg$c57) { - peg$currPos += 11; + peg$currPos += 12; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$e62); } diff --git a/src/types/form/SearchAdvancedFiltersForm.ts b/src/types/form/SearchAdvancedFiltersForm.ts index 91d9f2448404..d0451a18b2df 100644 --- a/src/types/form/SearchAdvancedFiltersForm.ts +++ b/src/types/form/SearchAdvancedFiltersForm.ts @@ -100,11 +100,11 @@ const FILTER_KEYS = { APPROVED_BEFORE: 'approvedBefore', APPROVED_RANGE: 'approvedRange', - ANY_APPROVAL_NOT: 'any-approvalNot', - ANY_APPROVAL_ON: 'any-approvalOn', - ANY_APPROVAL_AFTER: 'any-approvalAfter', - ANY_APPROVAL_BEFORE: 'any-approvalBefore', - ANY_APPROVAL_RANGE: 'any-approvalRange', + ANY_APPROVAL_NOT: 'anyApprovalNot', + ANY_APPROVAL_ON: 'anyApprovalOn', + ANY_APPROVAL_AFTER: 'anyApprovalAfter', + ANY_APPROVAL_BEFORE: 'anyApprovalBefore', + ANY_APPROVAL_RANGE: 'anyApprovalRange', PAID_NOT: 'paidNot', PAID_ON: 'paidOn', diff --git a/tests/unit/Search/SearchQueryUtilsTest.ts b/tests/unit/Search/SearchQueryUtilsTest.ts index 3c2cf0226e42..d27b4bb91962 100644 --- a/tests/unit/Search/SearchQueryUtilsTest.ts +++ b/tests/unit/Search/SearchQueryUtilsTest.ts @@ -2100,7 +2100,7 @@ describe('SearchQueryUtils', () => { }); }); - describe('any-approval date filter', () => { + describe('anyApproval date filter', () => { test('round-trips the ON form', () => { const filterValues: Partial = { type: CONST.SEARCH.DATA_TYPES.EXPENSE, diff --git a/tests/unit/SearchAutocompleteParserTest.ts b/tests/unit/SearchAutocompleteParserTest.ts index f7842cf900f7..f96da9b18a04 100644 --- a/tests/unit/SearchAutocompleteParserTest.ts +++ b/tests/unit/SearchAutocompleteParserTest.ts @@ -773,32 +773,46 @@ const nameFieldContinuationTests: Array<{query: string; expected: ExpectedAutoco description: 'Negates multiple from and has values', }, { - query: 'any-approval:last-month', + query: 'anyApproval:last-month', expected: { autocomplete: { - key: 'any-approval', + key: 'anyApproval', value: 'last-month', negated: false, - start: 13, + start: 12, length: 10, }, - ranges: [{key: 'any-approval', value: 'last-month', negated: false, start: 13, length: 10}], + ranges: [{key: 'anyApproval', value: 'last-month', negated: false, start: 12, length: 10}], }, - description: 'any-approval date filter provides autocomplete', + description: 'anyApproval date filter provides autocomplete', }, { - query: 'any-approval:', + query: 'anyApproval:', expected: { autocomplete: { - key: 'any-approval', + key: 'anyApproval', value: '', negated: false, - start: 13, + start: 12, length: 0, }, ranges: [], }, - description: 'any-approval with an empty value still identifies the filter key', + description: 'anyApproval with an empty value still identifies the filter key', + }, + { + query: 'any-approval:last-month', + expected: { + autocomplete: { + key: 'anyApproval', + value: 'last-month', + negated: false, + start: 13, + length: 10, + }, + ranges: [{key: 'anyApproval', value: 'last-month', negated: false, start: 13, length: 10}], + }, + description: 'any-approval user-friendly alias maps to anyApproval', }, ]; diff --git a/tests/unit/SearchParserTest.ts b/tests/unit/SearchParserTest.ts index a9b6c6b503ea..605c297e0d8f 100644 --- a/tests/unit/SearchParserTest.ts +++ b/tests/unit/SearchParserTest.ts @@ -727,6 +727,20 @@ const tests = [ }, }, }, + { + query: 'type:expense anyApproval:last-month', + expected: { + type: CONST.SEARCH.DATA_TYPES.EXPENSE, + sortBy: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE, + sortOrder: CONST.SEARCH.SORT_ORDER.DESC, + view: 'table', + filters: { + operator: CONST.SEARCH.SYNTAX_OPERATORS.EQUAL_TO, + left: CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, + right: CONST.SEARCH.DATE_PRESETS.LAST_MONTH, + }, + }, + }, { query: 'type:expense any-approval:last-month', expected: { @@ -742,7 +756,7 @@ const tests = [ }, }, { - query: 'type:expense any-approval>2026-04-01', + query: 'type:expense anyApproval>2026-04-01', expected: { type: CONST.SEARCH.DATA_TYPES.EXPENSE, sortBy: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE, @@ -756,7 +770,7 @@ const tests = [ }, }, { - query: 'type:expense any-approval<2026-04-30', + query: 'type:expense anyApproval<2026-04-30', expected: { type: CONST.SEARCH.DATA_TYPES.EXPENSE, sortBy: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE, @@ -770,7 +784,7 @@ const tests = [ }, }, { - query: 'type:expense any-approval>=2026-04-01 any-approval<=2026-04-30', + query: 'type:expense anyApproval>=2026-04-01 anyApproval<=2026-04-30', expected: { type: CONST.SEARCH.DATA_TYPES.EXPENSE, sortBy: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE, @@ -792,7 +806,7 @@ const tests = [ }, }, { - query: 'type:expense -any-approval:last-month', + query: 'type:expense -anyApproval:last-month', expected: { type: CONST.SEARCH.DATA_TYPES.EXPENSE, sortBy: CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE, diff --git a/tests/unit/hooks/useAutocompleteSuggestions.test.ts b/tests/unit/hooks/useAutocompleteSuggestions.test.ts index 95057c3e0c67..bab009da3a7c 100644 --- a/tests/unit/hooks/useAutocompleteSuggestions.test.ts +++ b/tests/unit/hooks/useAutocompleteSuggestions.test.ts @@ -425,13 +425,13 @@ describe('useAutocompleteSuggestions', () => { expect(result.current.at(0)?.filterKey).toBe(CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE); }); - it('suggests date presets after any-approval:', () => { + it('suggests date presets after anyApproval:', () => { parseForAutocomplete.mockReturnValue({ autocomplete: {key: CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, value: ''}, ranges: [], }); - const {result} = renderHook(() => useAutocompleteSuggestions({...defaultParams, autocompleteQueryValue: 'any-approval:'})); + const {result} = renderHook(() => useAutocompleteSuggestions({...defaultParams, autocompleteQueryValue: 'anyApproval:'})); expect(result.current.length).toBeGreaterThan(0); expect(result.current.at(0)?.filterKey).toBe(CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL); From 84070bd79d7519775acf70808b239bcad3f50049 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Thu, 24 Sep 2026 12:43:10 +0700 Subject: [PATCH 05/12] fix typescript error --- src/hooks/useAutocompleteSuggestions.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/hooks/useAutocompleteSuggestions.ts b/src/hooks/useAutocompleteSuggestions.ts index d33a346c5582..6121e8bcf989 100644 --- a/src/hooks/useAutocompleteSuggestions.ts +++ b/src/hooks/useAutocompleteSuggestions.ts @@ -627,10 +627,16 @@ function useAutocompleteSuggestions({ mapKey: CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED_TO, })); } + case CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL: { + const filteredDatePresets = getDatePresets(autocompleteKey, true) + .filter((datePreset) => datePreset.toLowerCase().includes(autocompleteValue.toLowerCase()) && !alreadyAutocompletedKeys.has(datePreset.toLowerCase())) + .sort() + .slice(0, 10); + return filteredDatePresets.map((datePreset) => ({filterKey: CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.ANY_APPROVAL, text: datePreset})); + } case CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE: case CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED: case CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED: - case CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL: case CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID: case CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED: case CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWN: From 86f7f8ac5c90f2a620ffa92d306b8ead8d0d06c4 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Thu, 24 Sep 2026 12:48:00 +0700 Subject: [PATCH 06/12] fix test --- tests/unit/hooks/useAutocompleteSuggestions.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/hooks/useAutocompleteSuggestions.test.ts b/tests/unit/hooks/useAutocompleteSuggestions.test.ts index bab009da3a7c..2e4a73aa7b4c 100644 --- a/tests/unit/hooks/useAutocompleteSuggestions.test.ts +++ b/tests/unit/hooks/useAutocompleteSuggestions.test.ts @@ -434,7 +434,7 @@ describe('useAutocompleteSuggestions', () => { const {result} = renderHook(() => useAutocompleteSuggestions({...defaultParams, autocompleteQueryValue: 'anyApproval:'})); expect(result.current.length).toBeGreaterThan(0); - expect(result.current.at(0)?.filterKey).toBe(CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL); + expect(result.current.at(0)?.filterKey).toBe(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.ANY_APPROVAL); expect(result.current.map((item) => item.text)).toEqual(['today', 'yesterday', 'lastWeek', 'lastMonth'].sort()); }); From fa6fbae83c39346fa0e83f3f306cbda324cabecc Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Thu, 24 Sep 2026 12:58:29 +0700 Subject: [PATCH 07/12] refactor code --- src/hooks/useAutocompleteSuggestions.ts | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/hooks/useAutocompleteSuggestions.ts b/src/hooks/useAutocompleteSuggestions.ts index 6121e8bcf989..7001e68ce7d7 100644 --- a/src/hooks/useAutocompleteSuggestions.ts +++ b/src/hooks/useAutocompleteSuggestions.ts @@ -627,13 +627,7 @@ function useAutocompleteSuggestions({ mapKey: CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED_TO, })); } - case CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL: { - const filteredDatePresets = getDatePresets(autocompleteKey, true) - .filter((datePreset) => datePreset.toLowerCase().includes(autocompleteValue.toLowerCase()) && !alreadyAutocompletedKeys.has(datePreset.toLowerCase())) - .sort() - .slice(0, 10); - return filteredDatePresets.map((datePreset) => ({filterKey: CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.ANY_APPROVAL, text: datePreset})); - } + case CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL: case CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE: case CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED: case CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED: @@ -645,7 +639,8 @@ function useAutocompleteSuggestions({ .filter((datePreset) => datePreset.toLowerCase().includes(autocompleteValue.toLowerCase()) && !alreadyAutocompletedKeys.has(datePreset.toLowerCase())) .sort() .slice(0, 10); - return filteredDatePresets.map((datePreset) => ({filterKey: autocompleteKey, text: datePreset})); + const filterKey = autocompleteKey === CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL ? CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.ANY_APPROVAL : autocompleteKey; + return filteredDatePresets.map((datePreset) => ({filterKey, text: datePreset})); } default: { return []; From e3aada3ccbb0a6b954e0d6e7c826db3267e6a8e9 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Mon, 28 Sep 2026 12:34:34 +0700 Subject: [PATCH 08/12] refactor code --- src/hooks/useAutocompleteSuggestions.ts | 3 +-- tests/unit/hooks/useAutocompleteSuggestions.test.ts | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/hooks/useAutocompleteSuggestions.ts b/src/hooks/useAutocompleteSuggestions.ts index 7001e68ce7d7..bd1e4dfea495 100644 --- a/src/hooks/useAutocompleteSuggestions.ts +++ b/src/hooks/useAutocompleteSuggestions.ts @@ -639,8 +639,7 @@ function useAutocompleteSuggestions({ .filter((datePreset) => datePreset.toLowerCase().includes(autocompleteValue.toLowerCase()) && !alreadyAutocompletedKeys.has(datePreset.toLowerCase())) .sort() .slice(0, 10); - const filterKey = autocompleteKey === CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL ? CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.ANY_APPROVAL : autocompleteKey; - return filteredDatePresets.map((datePreset) => ({filterKey, text: datePreset})); + return filteredDatePresets.map((datePreset) => ({filterKey: getUserFriendlyKey(autocompleteKey), text: datePreset})); } default: { return []; diff --git a/tests/unit/hooks/useAutocompleteSuggestions.test.ts b/tests/unit/hooks/useAutocompleteSuggestions.test.ts index 2e4a73aa7b4c..bab009da3a7c 100644 --- a/tests/unit/hooks/useAutocompleteSuggestions.test.ts +++ b/tests/unit/hooks/useAutocompleteSuggestions.test.ts @@ -434,7 +434,7 @@ describe('useAutocompleteSuggestions', () => { const {result} = renderHook(() => useAutocompleteSuggestions({...defaultParams, autocompleteQueryValue: 'anyApproval:'})); expect(result.current.length).toBeGreaterThan(0); - expect(result.current.at(0)?.filterKey).toBe(CONST.SEARCH.SEARCH_USER_FRIENDLY_KEYS.ANY_APPROVAL); + expect(result.current.at(0)?.filterKey).toBe(CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL); expect(result.current.map((item) => item.text)).toEqual(['today', 'yesterday', 'lastWeek', 'lastMonth'].sort()); }); From 817d90961552b879fa0a06600ac20cc29ea9c9a0 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Tue, 29 Sep 2026 22:44:21 +0700 Subject: [PATCH 09/12] update translation --- src/languages/de.ts | 2 +- src/languages/pl.ts | 2 +- src/languages/zh-hans.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 86e4dcf7864f..f48ce7339931 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -9814,7 +9814,7 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc past: 'Vergangenes', submitted: 'Eingereicht', approved: 'Genehmigt', - anyApproval: 'Beliebige Genehmigung', + anyApproval: 'Jede Genehmigung', firstApprover: 'Erste:r Genehmiger:in', firstApproved: 'Zuerst genehmigt', paidBy: 'Bezahlt von', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 2977c6886742..b04b60a44303 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -9751,7 +9751,7 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`, past: 'Przeszłe', submitted: 'Przesłano', approved: 'Zatwierdzono', - anyApproval: 'Dowolna akceptacja', + anyApproval: 'Jakiekolwiek zatwierdzenie', firstApprover: 'Pierwszy zatwierdzający', firstApproved: 'Najpierw zatwierdzono', paidBy: 'Zapłacone przez', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 9796f14d1b5a..b64e0f76a6ed 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -9366,7 +9366,7 @@ ${reportName}`, past: '过去', submitted: '已提交', approved: '已批准', - anyApproval: '任何批准', + anyApproval: '任意审批', firstApprover: '首位审批人', firstApproved: '首次批准', paidBy: '付款人', From fa87b3466986d761974f1772de607cc70a72c9c4 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Thu, 1 Oct 2026 01:26:33 +0700 Subject: [PATCH 10/12] update any-approval datesets and filter list --- src/hooks/useAdvancedSearchFilters.ts | 10 +- src/libs/SearchUIUtils.ts | 1 + src/types/form/SearchAdvancedFiltersForm.ts | 15 -- tests/unit/Search/SearchQueryUtilsTest.ts | 144 +++++++----------- tests/unit/Search/SearchUIUtilsTest.ts | 17 +++ .../hooks/useAutocompleteSuggestions.test.ts | 2 + 6 files changed, 78 insertions(+), 111 deletions(-) diff --git a/src/hooks/useAdvancedSearchFilters.ts b/src/hooks/useAdvancedSearchFilters.ts index 6fcf1460a9fa..edf73d9d8470 100644 --- a/src/hooks/useAdvancedSearchFilters.ts +++ b/src/hooks/useAdvancedSearchFilters.ts @@ -99,13 +99,7 @@ const typeFiltersKeys = { CONST.SEARCH.SYNTAX_FILTER_KEYS.ORDER_DEAL_NUMBERS, CONST.SEARCH.SYNTAX_FILTER_KEYS.KEYWORD, ], - [ - CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED, - CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED, - CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, - CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED, - CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID, - ], + [CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED, CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED, CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED, CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID], [ CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWAL_ID, CONST.SEARCH.SYNTAX_FILTER_KEYS.WITHDRAWAL_TYPE, @@ -139,7 +133,6 @@ const typeFiltersKeys = { [ CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED, CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED, - CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED, CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID, CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID_BY, @@ -181,7 +174,6 @@ const typeFiltersKeys = { [ CONST.SEARCH.SYNTAX_FILTER_KEYS.SUBMITTED, CONST.SEARCH.SYNTAX_FILTER_KEYS.APPROVED, - CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED, CONST.SEARCH.SYNTAX_FILTER_KEYS.EXPORTED_TO, CONST.SEARCH.SYNTAX_FILTER_KEYS.PAID, diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts index 51a43ce7dc6d..de60b60dc7b0 100644 --- a/src/libs/SearchUIUtils.ts +++ b/src/libs/SearchUIUtils.ts @@ -5336,6 +5336,7 @@ function getDatePresets(filterKey: SearchDateFilterKeys, hasFeed: boolean): Sear switch (filterKey) { case CONST.SEARCH.SYNTAX_FILTER_KEYS.DATE: + case CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL: return commonPresets; case CONST.SEARCH.SYNTAX_FILTER_KEYS.POSTED: return [...commonPresets, CONST.SEARCH.DATE_PRESETS.NEVER, ...(hasFeed ? [CONST.SEARCH.DATE_PRESETS.LAST_STATEMENT] : [])]; diff --git a/src/types/form/SearchAdvancedFiltersForm.ts b/src/types/form/SearchAdvancedFiltersForm.ts index 7a697a85594e..3f1b4cee44c9 100644 --- a/src/types/form/SearchAdvancedFiltersForm.ts +++ b/src/types/form/SearchAdvancedFiltersForm.ts @@ -463,11 +463,6 @@ const ALLOWED_TYPE_FILTERS: Record> = { FILTER_KEYS.APPROVED_ON, FILTER_KEYS.APPROVED_RANGE, FILTER_KEYS.APPROVED_NOT, - FILTER_KEYS.ANY_APPROVAL_AFTER, - FILTER_KEYS.ANY_APPROVAL_BEFORE, - FILTER_KEYS.ANY_APPROVAL_ON, - FILTER_KEYS.ANY_APPROVAL_RANGE, - FILTER_KEYS.ANY_APPROVAL_NOT, FILTER_KEYS.PAID_AFTER, FILTER_KEYS.PAID_BEFORE, FILTER_KEYS.PAID_ON, @@ -566,11 +561,6 @@ const ALLOWED_TYPE_FILTERS: Record> = { FILTER_KEYS.APPROVED_AFTER, FILTER_KEYS.APPROVED_BEFORE, FILTER_KEYS.APPROVED_RANGE, - FILTER_KEYS.ANY_APPROVAL_ON, - FILTER_KEYS.ANY_APPROVAL_NOT, - FILTER_KEYS.ANY_APPROVAL_AFTER, - FILTER_KEYS.ANY_APPROVAL_BEFORE, - FILTER_KEYS.ANY_APPROVAL_RANGE, FILTER_KEYS.PAID_ON, FILTER_KEYS.PAID_NOT, FILTER_KEYS.PAID_AFTER, @@ -661,11 +651,6 @@ const ALLOWED_TYPE_FILTERS: Record> = { FILTER_KEYS.APPROVED_AFTER, FILTER_KEYS.APPROVED_BEFORE, FILTER_KEYS.APPROVED_RANGE, - FILTER_KEYS.ANY_APPROVAL_ON, - FILTER_KEYS.ANY_APPROVAL_NOT, - FILTER_KEYS.ANY_APPROVAL_AFTER, - FILTER_KEYS.ANY_APPROVAL_BEFORE, - FILTER_KEYS.ANY_APPROVAL_RANGE, FILTER_KEYS.PAID_ON, FILTER_KEYS.PAID_NOT, FILTER_KEYS.PAID_AFTER, diff --git a/tests/unit/Search/SearchQueryUtilsTest.ts b/tests/unit/Search/SearchQueryUtilsTest.ts index 485e0f5d3c39..7bee69b3ef35 100644 --- a/tests/unit/Search/SearchQueryUtilsTest.ts +++ b/tests/unit/Search/SearchQueryUtilsTest.ts @@ -2199,58 +2199,55 @@ describe('SearchQueryUtils', () => { }); describe('anyApproval date filter', () => { - test('round-trips the ON form', () => { - const filterValues: Partial = { - type: CONST.SEARCH.DATA_TYPES.EXPENSE, - [FILTER_KEYS.ANY_APPROVAL_ON]: CONST.SEARCH.DATE_PRESETS.LAST_MONTH, - }; - - const queryString = buildQueryStringFromFilterFormValues(filterValues); - expect(queryString).toBe(`type:expense ${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}:${CONST.SEARCH.DATE_PRESETS.LAST_MONTH}`); - - const queryJSON = buildSearchQueryJSON(queryString); - if (!queryJSON) { - throw new Error('Failed to parse query string'); - } - - const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}); - expect(result[FILTER_KEYS.ANY_APPROVAL_ON]).toBe(CONST.SEARCH.DATE_PRESETS.LAST_MONTH); - expect(result[FILTER_KEYS.ANY_APPROVAL_AFTER]).toBeUndefined(); - expect(result[FILTER_KEYS.ANY_APPROVAL_BEFORE]).toBeUndefined(); - expect(result[FILTER_KEYS.ANY_APPROVAL_RANGE]).toBeUndefined(); - expect(result[FILTER_KEYS.ANY_APPROVAL_NOT]).toBeUndefined(); - }); - - test('round-trips the AFTER form', () => { - const filterValues: Partial = { - type: CONST.SEARCH.DATA_TYPES.EXPENSE, - [FILTER_KEYS.ANY_APPROVAL_AFTER]: '2026-04-01', - }; - - const queryString = buildQueryStringFromFilterFormValues(filterValues); - expect(queryString).toBe(`type:expense ${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}>2026-04-01`); - - const queryJSON = buildSearchQueryJSON(queryString); - if (!queryJSON) { - throw new Error('Failed to parse query string'); - } - - const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}); - expect(result[FILTER_KEYS.ANY_APPROVAL_AFTER]).toBe('2026-04-01'); - expect(result[FILTER_KEYS.ANY_APPROVAL_ON]).toBeUndefined(); - expect(result[FILTER_KEYS.ANY_APPROVAL_BEFORE]).toBeUndefined(); - expect(result[FILTER_KEYS.ANY_APPROVAL_RANGE]).toBeUndefined(); - expect(result[FILTER_KEYS.ANY_APPROVAL_NOT]).toBeUndefined(); - }); + const anyApprovalFormKeys = [ + FILTER_KEYS.ANY_APPROVAL_ON, + FILTER_KEYS.ANY_APPROVAL_AFTER, + FILTER_KEYS.ANY_APPROVAL_BEFORE, + FILTER_KEYS.ANY_APPROVAL_RANGE, + FILTER_KEYS.ANY_APPROVAL_NOT, + ] as const; - test('round-trips the BEFORE form', () => { + test.each([ + { + modifier: 'ON', + formKey: FILTER_KEYS.ANY_APPROVAL_ON, + formValue: CONST.SEARCH.DATE_PRESETS.LAST_MONTH, + expectedQuery: `type:expense ${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}:${CONST.SEARCH.DATE_PRESETS.LAST_MONTH}`, + }, + { + modifier: 'AFTER', + formKey: FILTER_KEYS.ANY_APPROVAL_AFTER, + formValue: '2026-04-01', + expectedQuery: `type:expense ${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}>2026-04-01`, + }, + { + modifier: 'BEFORE', + formKey: FILTER_KEYS.ANY_APPROVAL_BEFORE, + formValue: '2026-04-30', + expectedQuery: `type:expense ${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}<2026-04-30`, + }, + { + modifier: 'RANGE', + formKey: FILTER_KEYS.ANY_APPROVAL_RANGE, + formValue: '2026-04-01,2026-04-30', + expectedQuery: `type:expense ${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}>=2026-04-01 ${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}<=2026-04-30`, + }, + { + modifier: 'negated', + formKey: FILTER_KEYS.ANY_APPROVAL_NOT, + formValue: CONST.SEARCH.DATE_PRESETS.LAST_MONTH, + expectedQuery: `type:expense -${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}:${CONST.SEARCH.DATE_PRESETS.LAST_MONTH}`, + }, + ])('round-trips the $modifier form', ({formKey, formValue, expectedQuery}) => { + // Given an expense search with an anyApproval date filter const filterValues: Partial = { type: CONST.SEARCH.DATA_TYPES.EXPENSE, - [FILTER_KEYS.ANY_APPROVAL_BEFORE]: '2026-04-30', + [formKey]: formValue, }; + // When the form is converted to a query and back const queryString = buildQueryStringFromFilterFormValues(filterValues); - expect(queryString).toBe(`type:expense ${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}<2026-04-30`); + expect(queryString).toBe(expectedQuery); const queryJSON = buildSearchQueryJSON(queryString); if (!queryJSON) { @@ -2258,55 +2255,28 @@ describe('SearchQueryUtils', () => { } const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}); - expect(result[FILTER_KEYS.ANY_APPROVAL_BEFORE]).toBe('2026-04-30'); - expect(result[FILTER_KEYS.ANY_APPROVAL_ON]).toBeUndefined(); - expect(result[FILTER_KEYS.ANY_APPROVAL_AFTER]).toBeUndefined(); - expect(result[FILTER_KEYS.ANY_APPROVAL_RANGE]).toBeUndefined(); - expect(result[FILTER_KEYS.ANY_APPROVAL_NOT]).toBeUndefined(); - }); - test('round-trips the RANGE form', () => { - const filterValues: Partial = { - type: CONST.SEARCH.DATA_TYPES.EXPENSE, - [FILTER_KEYS.ANY_APPROVAL_RANGE]: '2026-04-01,2026-04-30', - }; - - const queryString = buildQueryStringFromFilterFormValues(filterValues); - expect(queryString).toBe(`type:expense ${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}>=2026-04-01 ${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}<=2026-04-30`); - - const queryJSON = buildSearchQueryJSON(queryString); - if (!queryJSON) { - throw new Error('Failed to parse query string'); + // Then the original form key is preserved and the other anyApproval keys are empty + expect(result[formKey]).toBe(formValue); + for (const otherKey of anyApprovalFormKeys) { + if (otherKey !== formKey) { + expect(result[otherKey]).toBeUndefined(); + } } - - const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}); - expect(result[FILTER_KEYS.ANY_APPROVAL_RANGE]).toBe('2026-04-01,2026-04-30'); - expect(result[FILTER_KEYS.ANY_APPROVAL_ON]).toBeUndefined(); - expect(result[FILTER_KEYS.ANY_APPROVAL_AFTER]).toBeUndefined(); - expect(result[FILTER_KEYS.ANY_APPROVAL_BEFORE]).toBeUndefined(); - expect(result[FILTER_KEYS.ANY_APPROVAL_NOT]).toBeUndefined(); }); - test('round-trips the negated form', () => { + test('anyApproval date filters are dropped on an expense-report search', () => { + // Given an expense-report search with an anyApproval date filter const filterValues: Partial = { - type: CONST.SEARCH.DATA_TYPES.EXPENSE, - [FILTER_KEYS.ANY_APPROVAL_NOT]: CONST.SEARCH.DATE_PRESETS.LAST_MONTH, + type: CONST.SEARCH.DATA_TYPES.EXPENSE_REPORT, + [FILTER_KEYS.ANY_APPROVAL_ON]: CONST.SEARCH.DATE_PRESETS.LAST_MONTH, }; - const queryString = buildQueryStringFromFilterFormValues(filterValues); - expect(queryString).toBe(`type:expense -${CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL}:${CONST.SEARCH.DATE_PRESETS.LAST_MONTH}`); - - const queryJSON = buildSearchQueryJSON(queryString); - if (!queryJSON) { - throw new Error('Failed to parse query string'); - } + // When the form is converted to a query + const result = buildQueryStringFromFilterFormValues(filterValues); - const result = buildFilterFormValuesFromQuery(queryJSON, {}, {}, {}, {}, {}, {}); - expect(result[FILTER_KEYS.ANY_APPROVAL_NOT]).toBe(CONST.SEARCH.DATE_PRESETS.LAST_MONTH); - expect(result[FILTER_KEYS.ANY_APPROVAL_ON]).toBeUndefined(); - expect(result[FILTER_KEYS.ANY_APPROVAL_AFTER]).toBeUndefined(); - expect(result[FILTER_KEYS.ANY_APPROVAL_BEFORE]).toBeUndefined(); - expect(result[FILTER_KEYS.ANY_APPROVAL_RANGE]).toBeUndefined(); + // Then anyApproval is stripped because Auth only supports it for type:expense + expect(result).toBe(`type:${CONST.SEARCH.DATA_TYPES.EXPENSE_REPORT}`); }); }); diff --git a/tests/unit/Search/SearchUIUtilsTest.ts b/tests/unit/Search/SearchUIUtilsTest.ts index 4f74dc81ab82..28388c8061f2 100644 --- a/tests/unit/Search/SearchUIUtilsTest.ts +++ b/tests/unit/Search/SearchUIUtilsTest.ts @@ -14892,3 +14892,20 @@ describe('hasFilterContentValuesChanged', () => { } }); }); + +describe('getDatePresets', () => { + it('does not offer never for anyApproval', () => { + // Given anyApproval, which always matches an approval action + // When presets are requested + const presets = SearchUIUtils.getDatePresets(CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, false); + + // Then only the common date presets are returned, without never + expect(presets).toEqual([ + CONST.SEARCH.DATE_PRESETS.THIS_MONTH, + CONST.SEARCH.DATE_PRESETS.LAST_MONTH, + CONST.SEARCH.DATE_PRESETS.YEAR_TO_DATE, + CONST.SEARCH.DATE_PRESETS.LAST_12_MONTHS, + ]); + expect(presets).not.toContain(CONST.SEARCH.DATE_PRESETS.NEVER); + }); +}); diff --git a/tests/unit/hooks/useAutocompleteSuggestions.test.ts b/tests/unit/hooks/useAutocompleteSuggestions.test.ts index 8de1c4710646..42fc338bb91a 100644 --- a/tests/unit/hooks/useAutocompleteSuggestions.test.ts +++ b/tests/unit/hooks/useAutocompleteSuggestions.test.ts @@ -110,6 +110,7 @@ jest.mock('@hooks/useExportedToFilterOptions', () => ({ })); const {parseForAutocomplete} = jest.requireMock<{parseForAutocomplete: jest.Mock}>('@libs/SearchAutocompleteUtils'); +const {getUserFriendlyKey} = jest.requireMock<{getUserFriendlyKey: jest.Mock}>('@libs/SearchQueryUtils'); const {getExpensifyTeamExclusions} = jest.requireMock<{getExpensifyTeamExclusions: jest.Mock}>('@libs/PolicyUtils'); const mockedUseNetwork = jest.mocked(useNetwork); const mockedOpenSearchCategoryFiltersPage = jest.mocked(openSearchCategoryFiltersPage); @@ -437,6 +438,7 @@ describe('useAutocompleteSuggestions', () => { expect(result.current.length).toBeGreaterThan(0); expect(result.current.at(0)?.filterKey).toBe(CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL); expect(result.current.map((item) => item.text)).toEqual(['today', 'yesterday', 'lastWeek', 'lastMonth'].sort()); + expect(getUserFriendlyKey).toHaveBeenCalledWith(CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL); }); it('returns boolean suggestions for reimbursable key', () => { From b713c2518b418ba8c3dca3e728639647af6c748f Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Fri, 16 Oct 2026 21:39:21 +0700 Subject: [PATCH 11/12] Revert unintended Mobile-Expensify submodule change --- Mobile-Expensify | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mobile-Expensify b/Mobile-Expensify index c15d05c78653..01c8999192c6 160000 --- a/Mobile-Expensify +++ b/Mobile-Expensify @@ -1 +1 @@ -Subproject commit c15d05c78653f81d3f0844988bfdbf104aee5034 +Subproject commit 01c8999192c60d2883b6a93e8c28d4b9ee9db7af From 0de149b70d0aeaa3170469712ed250a8adefc1c6 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Fri, 16 Oct 2026 21:59:00 +0700 Subject: [PATCH 12/12] update test comment --- tests/unit/SearchAutocompleteParserTest.ts | 4 ++++ tests/unit/SearchParserTest.ts | 8 +++++++- tests/unit/hooks/useAutocompleteSuggestions.test.ts | 3 +++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/tests/unit/SearchAutocompleteParserTest.ts b/tests/unit/SearchAutocompleteParserTest.ts index d470b2397e28..fe17d9a0c552 100644 --- a/tests/unit/SearchAutocompleteParserTest.ts +++ b/tests/unit/SearchAutocompleteParserTest.ts @@ -841,8 +841,12 @@ describe('autocomplete parser', () => { describe('autocomplete parser - name field continuation detection', () => { test.each(nameFieldContinuationTests)(`$description: $query`, ({query, expected}) => { + // Given a partially typed search query, possibly using a user-friendly alias or an empty filter value + + // When the autocomplete parser processes it const result: unknown = parse(query); + // Then the active filter key/value and highlighted ranges are identified so the right suggestions can be shown expect(result).toEqual(expected); }); }); diff --git a/tests/unit/SearchParserTest.ts b/tests/unit/SearchParserTest.ts index 4cb9717a697c..dacf17412b7e 100644 --- a/tests/unit/SearchParserTest.ts +++ b/tests/unit/SearchParserTest.ts @@ -1927,7 +1927,13 @@ function parseSearchQueryWithoutRawFilters(query: string): Record { test.each(tests)(`parsing: $query`, ({query, expected}) => { - expect(parseSearchQueryWithoutRawFilters(query)).toEqual(expected); + // Given a raw search query string typed by the user (including filter aliases such as any-approval) + + // When the query is parsed into its structured representation + const result = parseSearchQueryWithoutRawFilters(query); + + // Then the parsed type, sort, view and filter tree match what the search API expects for that query + expect(result).toEqual(expected); }); }); diff --git a/tests/unit/hooks/useAutocompleteSuggestions.test.ts b/tests/unit/hooks/useAutocompleteSuggestions.test.ts index 431f3fb50330..8bfeb89e8f3e 100644 --- a/tests/unit/hooks/useAutocompleteSuggestions.test.ts +++ b/tests/unit/hooks/useAutocompleteSuggestions.test.ts @@ -432,13 +432,16 @@ describe('useAutocompleteSuggestions', () => { }); it('suggests date presets after anyApproval:', () => { + // Given the user has typed the anyApproval filter key with no value yet parseForAutocomplete.mockReturnValue({ autocomplete: {key: CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL, value: ''}, ranges: [], }); + // When the autocomplete suggestions are computed for that query const {result} = renderHook(() => useAutocompleteSuggestions({...defaultParams, autocompleteQueryValue: 'anyApproval:'})); + // Then the date presets are suggested for the anyApproval key, since it is a date filter like the other date keys expect(result.current.length).toBeGreaterThan(0); expect(result.current.at(0)?.filterKey).toBe(CONST.SEARCH.SYNTAX_FILTER_KEYS.ANY_APPROVAL); expect(result.current.map((item) => item.text)).toEqual(['today', 'yesterday', 'lastWeek', 'lastMonth'].sort());