UNPKG

silvie

Version:

Typescript Back-end Framework

242 lines (241 loc) 7.01 kB
"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;