join-monster
Version:
A GraphQL to SQL query execution layer for batch data fetching.
38 lines (37 loc) • 1.23 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _generatorics = _interopRequireDefault(require("generatorics"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
class AliasNamespace {
constructor(minify, aliasPrefix) {
this.minify = !!minify;
this.aliasPrefix = aliasPrefix ?? '';
this.mininym = _generatorics.default.baseNAll('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ#$');
this.usedTableAliases = new Set();
this.columnAssignments = {};
}
generate(type, name) {
if (this.minify) {
if (type === 'table') {
return `${this.aliasPrefix}${this.mininym.next().value.join('')}`;
}
if (!this.columnAssignments[name]) {
this.columnAssignments[name] = this.mininym.next().value.join('');
}
return this.columnAssignments[name];
}
if (type === 'column') {
return name;
}
name = this.aliasPrefix + name.replace(/\s+/g, '').replace(/[^a-zA-Z0-9]/g, '_').slice(0, 10);
while (this.usedTableAliases.has(name)) {
name += '$';
}
this.usedTableAliases.add(name);
return name;
}
}
exports.default = AliasNamespace;