UNPKG

@vizzuality/layer-manager-utils

Version:
93 lines 3.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.replace = exports.concatenation = exports.substitution = void 0; /** * Params should have this format => { key:'xxx', key2:'xxx' } * Keys to search should be in this format {{key}} * * @param {String} originalStr * @param {Object} params */ const substitution = (originalStr, params = {}) => { let str = originalStr; Object.keys(params).forEach((key) => { const value = params[key]; const isObject = value != null && typeof value === 'object' && Object.prototype.toString.call(value) === '[object Object]'; if (Array.isArray(value) || isObject) { str = str .replace(new RegExp(`"{{${key}}}"`, 'g'), JSON.stringify(value)) .replace(new RegExp(`'{{${key}}}'`, 'g'), JSON.stringify(value)) .replace(new RegExp(`\`{{${key}}}\``, 'g'), JSON.stringify(value)) .replace(new RegExp(`"{${key}}"`, 'g'), JSON.stringify(value)) .replace(new RegExp(`'{${key}}'`, 'g'), JSON.stringify(value)) .replace(new RegExp(`\`{${key}}\``, 'g'), JSON.stringify(value)); } if (typeof value === 'number' || typeof value === 'boolean') { str = str .replace(new RegExp(`"{{${key}}}"`, 'g'), value) .replace(new RegExp(`'{{${key}}}'`, 'g'), value) .replace(new RegExp(`\`{{${key}}}\``, 'g'), value) .replace(new RegExp(`"{${key}}"`, 'g'), value) .replace(new RegExp(`'{${key}}'`, 'g'), value) .replace(new RegExp(`\`{${key}}\``, 'g'), value); } str = str .replace(new RegExp(`{{${key}}}`, 'g'), value.toString()) .replace(new RegExp(`{${key}}`, 'g'), value.toString()); }); return str; }; exports.substitution = substitution; /** * Params should have this format => { where1: { { key:'xxx', key2:'xxx' } }}, * Keys to search should be in this format {{key}} * @param {String} originalStr * @param {Object} params */ const concatenation = (originalStr, params = {}) => { let result = originalStr; Object.keys(params).forEach((key) => { let sql = `${Object.keys(params[key]) .map((k) => { const value = params[key][k]; if (Array.isArray(value) && !!value.length) { const mappedValue = value.map((v) => (typeof v !== 'number' ? `'${v}'` : v)); return `${k} IN (${mappedValue.join(', ')})`; } if (!Array.isArray(value) && value) { return typeof value !== 'number' ? `${k} = '${value}'` : `${k} = ${value}`; } return null; }) .filter((value) => !!value) .join(' AND ')}`; if (sql && key.startsWith('where')) sql = `WHERE ${sql}`; else if (sql && key.startsWith('and')) sql = `AND ${sql}`; else sql = ''; result = (0, exports.substitution)(result, { [key]: sql }); }); return result; }; exports.concatenation = concatenation; /** * Replace function * @param {String} string * @param {Object} params * @param {Object} sqlParams */ const replace = (originalStr, params = {}, sqlParams = {}) => { let str = originalStr; if (typeof str === 'string') { str = (0, exports.substitution)(str, params); str = (0, exports.concatenation)(str, sqlParams); } return str; }; exports.replace = replace; exports.default = { substitution: exports.substitution, concatenation: exports.concatenation, replace: exports.replace }; //# sourceMappingURL=query.js.map