@vizzuality/layer-manager-utils
Version:
93 lines • 3.73 kB
JavaScript
;
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