silvie
Version:
Typescript Back-end Framework
242 lines (241 loc) • 7.01 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _column = _interopRequireDefault(require("./column"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
class Table {
constructor(name) {
_defineProperty(this, "name", void 0);
_defineProperty(this, "columns", []);
_defineProperty(this, "relations", []);
this.name = name;
}
createColumn(name, type, size) {
const column = new _column.default(name, type, size);
this.columns.push(column);
return column;
}
getConstraints() {
const collection = {
indices: [],
fullTextIndices: [],
spatialIndices: [],
primaries: [],
uniques: []
};
this.columns.forEach(column => {
if (column.options.index) collection.indices.push(column);
if (column.options.fullTextIndex) collection.fullTextIndices.push(column);
if (column.options.spatialIndex) collection.spatialIndices.push(column);
if (column.options.primary) collection.primaries.push(column);
if (column.options.unique) collection.uniques.push(column);
});
return collection;
}
id() {
this.unsignedBigInteger('id').autoIncrement().primary();
}
tinyIncrements(name) {
return this.unsignedTinyInteger(name).autoIncrement().primary();
}
smallIncrements(name) {
return this.unsignedSmallInteger(name).autoIncrement().primary();
}
mediumIncrements(name) {
return this.unsignedMediumInteger(name).autoIncrement().primary();
}
increments(name) {
return this.unsignedInteger(name).autoIncrement().primary();
}
bigIncrements(name) {
return this.unsignedBigInteger(name).autoIncrement().primary();
}
tinyInteger(name) {
return this.createColumn(name, 'TinyInteger');
}
unsignedTinyInteger(name) {
return this.tinyInteger(name).unsigned();
}
smallInteger(name) {
return this.createColumn(name, 'SmallInteger');
}
unsignedSmallInteger(name) {
return this.smallInteger(name).unsigned();
}
mediumInteger(name) {
return this.createColumn(name, 'MediumInteger');
}
unsignedMediumInteger(name) {
return this.mediumInteger(name).unsigned();
}
integer(name) {
return this.createColumn(name, 'Integer');
}
unsignedInteger(name) {
return this.integer(name).unsigned();
}
bigInteger(name) {
return this.createColumn(name, 'BigInteger');
}
unsignedBigInteger(name) {
return this.bigInteger(name).unsigned();
}
bit(name) {
return this.createColumn(name, 'Bit');
}
boolean(name) {
return this.createColumn(name, 'Boolean');
}
decimal(name, precision, scale) {
return this.createColumn(name, 'Decimal').meta({
precision,
scale
});
}
unsignedDecimal(name, precision, scale) {
return this.decimal(name, precision, scale).unsigned();
}
float(name) {
return this.createColumn(name, 'Float');
}
double(name) {
return this.createColumn(name, 'Double');
}
year(name) {
return this.createColumn(name, 'Year');
}
date(name) {
return this.createColumn(name, 'Date');
}
time(name) {
return this.createColumn(name, 'Time');
}
datetime(name) {
return this.createColumn(name, 'DateTime');
}
timestamp(name) {
return this.createColumn(name, 'Timestamp');
}
timestamps() {
this.timestamp('created_at').useCurrent();
this.timestamp('updated_at').useCurrent();
}
character(name, length = 255) {
return this.createColumn(name, 'Character', length);
}
string(name, length = 255) {
return this.createColumn(name, 'String', length);
}
binary(name, length = 255) {
return this.createColumn(name, 'Binary', length);
}
tinyBlob(name) {
return this.createColumn(name, 'TinyBlob');
}
blob(name) {
return this.createColumn(name, 'Blob');
}
mediumBlob(name) {
return this.createColumn(name, 'MediumBlob');
}
longBlob(name) {
return this.createColumn(name, 'LongBlob');
}
tinyText(name) {
return this.createColumn(name, 'TinyText');
}
text(name) {
return this.createColumn(name, 'Text');
}
mediumText(name) {
return this.createColumn(name, 'MediumText');
}
longText(name) {
return this.createColumn(name, 'LongText');
}
enum(name, values) {
return this.createColumn(name, 'Enum').meta({
values
});
}
set(name, values) {
return this.createColumn(name, 'Set').meta({
values
});
}
geometry(name) {
return this.createColumn(name, 'Geometry');
}
point(name) {
return this.createColumn(name, 'Point');
}
lineString(name) {
return this.createColumn(name, 'LineString');
}
polygon(name) {
return this.createColumn(name, 'Polygon');
}
geometryCollection(name) {
return this.createColumn(name, 'GeometryCollection');
}
multiPoint(name) {
return this.createColumn(name, 'MultiPoint');
}
multiLineString(name) {
return this.createColumn(name, 'MultiLineString');
}
multiPolygon(name) {
return this.createColumn(name, 'MultiPolygon');
}
softDelete() {
return this.timestamp('deleted_at').nullable().default(null);
}
json(name) {
return this.createColumn(name, 'JSON');
}
ipAddress(name) {
return this.createColumn(name, 'String', 45);
}
macAddress(name) {
return this.createColumn(name, 'String', 17);
}
uuid(name) {
return this.createColumn(name, 'Character', 36);
}
foreign(foreignKey, primaryKey, table) {
if (!this.columns.find(column => column.name === foreignKey)) {
throw new Error(`Unknown column '${foreignKey}' in FK ${this.name}.${foreignKey} -> ${table}.${primaryKey}`);
}
this.relations.push({
foreignKey,
primaryKey,
table
});
}
modifyColumns(columnNames, optionName) {
this.columns.forEach(column => {
if (columnNames.includes(column.name)) column.options[optionName] = true;
});
}
primary(...columnNames) {
this.modifyColumns(columnNames, 'primary');
}
unique(...columnNames) {
this.modifyColumns(columnNames, 'unique');
}
index(...columnNames) {
this.modifyColumns(columnNames, 'index');
}
fullTextIndex(...columnNames) {
this.modifyColumns(columnNames, 'fullTextIndex');
}
spatialIndex(...columnNames) {
this.modifyColumns(columnNames, 'spatialIndex');
}
}
exports.default = Table;