UNPKG

mysql-query-placeholders

Version:
54 lines 1.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.queryBuilder = void 0; exports.queryBuilder = (query, data, options = { useNullForMissing: true }) => { const values = []; if (!data) { return { sql: query, values, }; } return { sql: query.replace(/(::?)([\w.]+)(\.?)/g, (_, prefix, key) => { const value = getObjectValue(data, key); if (typeof value !== 'undefined' && value !== null) { values.push(value); return prefix.replace(/:/g, '?'); } else if (options.useNullForMissing) { values.push(null); return prefix.replace(/:/g, '?'); } else { return errorMissingValue(key, query, data); } }), values, }; }; const getObjectValue = (object, keyName) => { const keys = keyName.split('.'); if (keys.length === 1) { if (typeof object === 'object') { if (keys[0] in object) { return object[keys[0]]; } return undefined; } return undefined; } else { const [parentKey, ...restElements] = keys; if (!object) return undefined; return getObjectValue(object[parentKey], restElements.join('.')); } }; const errorMissingValue = (key, query, data) => { throw new Error(`Missing value for statement. ${key} not provided for statement: ${query} Data provided: ${JSON.stringify(data)}`); }; //# sourceMappingURL=mqp.js.map