@stormzx/sqlbuilder
Version:
A simple sql builder.
66 lines (49 loc) • 2.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.alias = alias;
exports.isAlias = isAlias;
var _sqlstring = require("sqlstring");
var _raw = require("./raw");
var _lodash = _interopRequireWildcard(require("lodash"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function proxyTable(table, nickname, options) {
let snakecase = (options === null || options === void 0 ? void 0 : options.snakecase) ?? nickname.snakecase ?? true;
nickname = (0, _lodash.isString)(nickname) ? nickname : null;
return new Proxy(() => {}, {
get(target, p, receiver) {
if (p === Symbol.toStringTag) {
return '__alias__';
}
if (p === Symbol.toPrimitive) {
return () => nickname ? `${(0, _sqlstring.escapeId)(table)} as ${(0, _sqlstring.escapeId)(nickname)}` : (0, _sqlstring.escapeId)(table);
}
return proxyColumn(table, nickname, snakecase ? _lodash.default.snakeCase(p) : p);
},
apply(target, thisArg, args) {
return args.map(row => _lodash.default.isArray(row) ? proxyColumn(table, nickname, row[0]).as(row[1]) : proxyColumn(table, nickname, row));
}
});
}
function proxyColumn(table, nickname, column) {
let c = (0, _raw.raw)(`${(0, _sqlstring.escapeId)(nickname ?? table)}.${(0, _sqlstring.escapeId)(column)}`);
return new Proxy(() => {}, {
get(target, p, receiver) {
if (p === 'as') {
return nickname => (0, _raw.raw)(`${c} as ${(0, _sqlstring.escapeId)(nickname)}`);
}
if (_lodash.default.isString(p)) {
return (0, _raw.raw)(`${c} ${p}`);
}
return c[p];
}
});
}
function alias(table, nickname, options) {
return isAlias(table) ? table : proxyTable(table, nickname, options);
}
function isAlias(table) {
return Object.prototype.toString.call(table) === '[object __alias__]';
}