Initial hDiyanetProxy backend scaffold (Express + MySQL + Diyanet setup)
This commit is contained in:
79
node_modules/pg-hstore/lib/index.js
generated
vendored
Normal file
79
node_modules/pg-hstore/lib/index.js
generated
vendored
Normal file
@@ -0,0 +1,79 @@
|
||||
(function () {
|
||||
var _ = require('underscore');
|
||||
|
||||
function sanitize_input(input) {
|
||||
// http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html [4.1.2.1-4.1.2.2]
|
||||
// single quotes (') must be replaced with double single quotes ('')
|
||||
input = input.replace(/'/g, '\'\'');
|
||||
// backslashes (\) must be replaced with double backslashes (\\)
|
||||
input = input.replace(/\\/g, '\\\\');
|
||||
// double quotes (") must be replaced with escaped quotes (\\")
|
||||
input = input.replace(/"/g, '\\"');
|
||||
return input;
|
||||
}
|
||||
|
||||
function to_string(input, sanitize) {
|
||||
switch(typeof input) {
|
||||
case 'boolean':
|
||||
case 'number':
|
||||
case 'object':
|
||||
return String(input);
|
||||
case 'string':
|
||||
return sanitize ? sanitize_input(input) : input;
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = function (options) {
|
||||
options = _.defaults({}, options, { sanitize: false });
|
||||
|
||||
return {
|
||||
stringify: function (data, callback) {
|
||||
var hstore = Object.keys(data).map(function (key) {
|
||||
if (data[key] === null) {
|
||||
return '"'+to_string(key, options.sanitize)+'"=>NULL';
|
||||
} else {
|
||||
return '"'+to_string(key, options.sanitize)+'"=>"'+to_string(data[key], options.sanitize)+'"';
|
||||
}
|
||||
});
|
||||
var joined = hstore.join();
|
||||
if (!callback || callback === null) return joined;
|
||||
callback(joined);
|
||||
},
|
||||
|
||||
parse: function(string, callback) {
|
||||
var result = {},
|
||||
//using [\s\S] to match any character, including line feed and carriage return,
|
||||
r = /(["])(?:\\\1|\\\\|[\s\S])*?\1|NULL/g,
|
||||
matches = string.match(r),
|
||||
i,
|
||||
l,
|
||||
clean = function (value) {
|
||||
// Remove leading double quotes
|
||||
value = value.replace(/^\"|\"$/g, "");
|
||||
// Unescape quotes
|
||||
value = value.replace(/\\"/g, "\"");
|
||||
//Unescape backslashes
|
||||
value = value.replace(/\\\\/g,"\\");
|
||||
//Unescape single quotes
|
||||
value = value.replace(/''/g,"'");
|
||||
|
||||
return value;
|
||||
};
|
||||
|
||||
if(matches) {
|
||||
for (i = 0, l = matches.length; i < l; i+= 2) {
|
||||
if (matches[i] && matches[i + 1]) {
|
||||
var key = clean(matches[i]);
|
||||
var value = matches[i + 1];
|
||||
result[key] = value=="NULL"?null:clean(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!callback || callback === null) return result;
|
||||
callback(result);
|
||||
}
|
||||
};
|
||||
};
|
||||
})();
|
||||
Reference in New Issue
Block a user