pg-template-tag
Version:
ECMAScript 6 (2015) template tag function to write queries for node-postgres.
90 lines (77 loc) • 2.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
exports.default = SQLTag;
exports.sqlLiteral = sqlLiteral;
exports.join = join;
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var SqlLiteral = function () {
function SqlLiteral(parts, values) {
_classCallCheck(this, SqlLiteral);
this._parts = parts;
this._values = values;
}
_createClass(SqlLiteral, [{
key: "_resolve",
value: function _resolve() {
if (this._resolved === undefined) {
var context = { fragments: new Map(), values: [] };
var text = this._resolveFor(context);
this._resolved = { text: text, values: context.values };
}
return this._resolved;
}
}, {
key: "_resolveFor",
value: function _resolveFor(context) {
var _this = this;
var fragment = context.fragments.get(this);
if (fragment === undefined) {
fragment = this._parts.reduce(function (prev, curr, i) {
var child = _this._values[i - 1];
var mid = void 0;
if (child instanceof SqlLiteral) {
mid = child._resolveFor(context);
} else {
context.values.push(child);
mid = '$' + context.values.length;
}
return prev + mid + curr;
});
context.fragments.set(this, fragment);
}
return fragment;
}
}, {
key: "text",
get: function get() {
return this._resolve().text;
}
}, {
key: "values",
get: function get() {
return this._resolve().values;
}
}]);
return SqlLiteral;
}();
function SQLTag(parts) {
for (var _len = arguments.length, values = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
values[_key - 1] = arguments[_key];
}
return new SqlLiteral(parts, values);
}
function sqlLiteral(value) {
return new SqlLiteral([value]);
}
function join(array, separator) {
separator = separator || ",";
var parts = [""];
for (var i = 0; i < array.length - 1; i++) {
parts.push(separator);
}
parts.push("");
return new SqlLiteral(parts, array);
}