123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- 'use strict';
- exports.__esModule = true;
- exports.charsMap = exports.charsRegex = undefined;
- var _stringify = require('babel-runtime/core-js/json/stringify');
- var _stringify2 = _interopRequireDefault(_stringify);
- var _typeof2 = require('babel-runtime/helpers/typeof');
- var _typeof3 = _interopRequireDefault(_typeof2);
- exports.makeEscape = makeEscape;
- exports.escapeObject = escapeObject;
- exports.arrayToList = arrayToList;
- exports.bufferToString = bufferToString;
- exports.escapeString = escapeString;
- exports.dateToString = dateToString;
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /*eslint max-len: 0, no-var:0 */
- var charsRegex = exports.charsRegex = /[\0\b\t\n\r\x1a\"\'\\]/g; // eslint-disable-line no-control-regex
- var charsMap = exports.charsMap = {
- '\0': '\\0',
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\r': '\\r',
- '\x1a': '\\Z',
- '"': '\\"',
- '\'': '\\\'',
- '\\': '\\\\'
- };
- function wrapEscape(escapeFn) {
- return function finalEscape(val) {
- var ctx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- return escapeFn(val, finalEscape, ctx);
- };
- }
- function makeEscape() {
- var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- var finalEscapeDate = config.escapeDate || dateToString;
- var finalEscapeArray = config.escapeArray || arrayToList;
- var finalEscapeBuffer = config.escapeBuffer || bufferToString;
- var finalEscapeString = config.escapeString || escapeString;
- var finalEscapeObject = config.escapeObject || escapeObject;
- var finalWrap = config.wrap || wrapEscape;
- function escapeFn(val, finalEscape, ctx) {
- if (val === undefined || val === null) {
- return 'NULL';
- }
- switch (typeof val === 'undefined' ? 'undefined' : (0, _typeof3.default)(val)) {
- case 'boolean':
- return val ? 'true' : 'false';
- case 'number':
- return val + '';
- case 'object':
- if (val instanceof Date) {
- val = finalEscapeDate(val, finalEscape, ctx);
- } else if (Array.isArray(val)) {
- return finalEscapeArray(val, finalEscape, ctx);
- } else if (Buffer.isBuffer(val)) {
- return finalEscapeBuffer(val, finalEscape, ctx);
- } else {
- return finalEscapeObject(val, finalEscape, ctx);
- }
- }
- return finalEscapeString(val, finalEscape, ctx);
- }
- return finalWrap ? finalWrap(escapeFn) : escapeFn;
- }
- function escapeObject(val, finalEscape, ctx) {
- if (typeof val.toSQL === 'function') {
- return val.toSQL(ctx);
- } else {
- return (0, _stringify2.default)(val);
- }
- }
- function arrayToList(array, finalEscape, ctx) {
- var sql = '';
- for (var i = 0; i < array.length; i++) {
- var val = array[i];
- if (Array.isArray(val)) {
- sql += (i === 0 ? '' : ', ') + '(' + arrayToList(val, finalEscape, ctx) + ')';
- } else {
- sql += (i === 0 ? '' : ', ') + finalEscape(val, ctx);
- }
- }
- return sql;
- }
- function bufferToString(buffer) {
- return "X" + escapeString(buffer.toString('hex'));
- }
- function escapeString(val, finalEscape, ctx) {
- var chunkIndex = charsRegex.lastIndex = 0;
- var escapedVal = '';
- var match;
- while (match = charsRegex.exec(val)) {
- escapedVal += val.slice(chunkIndex, match.index) + charsMap[match[0]];
- chunkIndex = charsRegex.lastIndex;
- }
- if (chunkIndex === 0) {
- // Nothing was escaped
- return "'" + val + "'";
- }
- if (chunkIndex < val.length) {
- return "'" + escapedVal + val.slice(chunkIndex) + "'";
- }
- return "'" + escapedVal + "'";
- }
- function dateToString(date, finalEscape, ctx) {
- var timeZone = ctx.timeZone || 'local';
- var dt = new Date(date);
- var year;
- var month;
- var day;
- var hour;
- var minute;
- var second;
- var millisecond;
- if (timeZone === 'local') {
- year = dt.getFullYear();
- month = dt.getMonth() + 1;
- day = dt.getDate();
- hour = dt.getHours();
- minute = dt.getMinutes();
- second = dt.getSeconds();
- millisecond = dt.getMilliseconds();
- } else {
- var tz = convertTimezone(timeZone);
- if (tz !== false && tz !== 0) {
- dt.setTime(dt.getTime() + tz * 60000);
- }
- year = dt.getUTCFullYear();
- month = dt.getUTCMonth() + 1;
- day = dt.getUTCDate();
- hour = dt.getUTCHours();
- minute = dt.getUTCMinutes();
- second = dt.getUTCSeconds();
- millisecond = dt.getUTCMilliseconds();
- }
- // YYYY-MM-DD HH:mm:ss.mmm
- return zeroPad(year, 4) + '-' + zeroPad(month, 2) + '-' + zeroPad(day, 2) + ' ' + zeroPad(hour, 2) + ':' + zeroPad(minute, 2) + ':' + zeroPad(second, 2) + '.' + zeroPad(millisecond, 3);
- }
- function zeroPad(number, length) {
- number = number.toString();
- while (number.length < length) {
- number = '0' + number;
- }
- return number;
- }
- function convertTimezone(tz) {
- if (tz === 'Z') {
- return 0;
- }
- var m = tz.match(/([\+\-\s])(\d\d):?(\d\d)?/);
- if (m) {
- return (m[1] == '-' ? -1 : 1) * (parseInt(m[2], 10) + (m[3] ? parseInt(m[3], 10) : 0) / 60) * 60;
- }
- return false;
- }
|