UNPKG

@bcc-code/feathers-arangodb

Version:
51 lines (50 loc) 1.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateFuzzyStatement = exports.isQueryTypeCorrect = void 0; const arangojs_1 = require("arangojs"); function isQueryTypeCorrect(query) { return ['string', 'number'].includes(typeof query); } exports.isQueryTypeCorrect = isQueryTypeCorrect; function generateFuzzyStatement(fields, query) { const modifiedQuery = determineQueryType(query); const searchStatements = []; for (const field of fields) { const statement = getSearchStatement(field, modifiedQuery); if (!statement) continue; searchStatements.push(statement); } if (!searchStatements.length) return undefined; const searchConditions = arangojs_1.aql.join(searchStatements, ' OR '); return searchConditions; } exports.generateFuzzyStatement = generateFuzzyStatement; function getSearchStatement(field, query) { if (typeof query.value !== field.type) return undefined; if (!field.isFuzzy) { return (0, arangojs_1.aql) `doc[${field.name}] == ${query.value}`; } if (query.exact) { return (0, arangojs_1.aql) `PHRASE(doc[${field.name}], ${query.value}, "space_delimited")`; } return (0, arangojs_1.aql) `NGRAM_MATCH(doc[${field.name}], ${query.value}, 0.6 , "fuzzy_search")`; } function determineQueryType(value) { let exact = false; if (typeof value === 'string' && hasQuotes(value)) { value = value.slice(1, -1); exact = true; } return { value, exact }; } const hasQuotes = (string) => { const quoteCharacters = ["'", "\""]; for (const quoteCharacter of quoteCharacters) { if (string.startsWith(quoteCharacter) && string.endsWith(quoteCharacter)) return true; } return false; };