longcelot-sheet-db
Version:
Google Sheets-backed staging database adapter for Node.js with schema-first design
41 lines • 1.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.defineTable = defineTable;
const columnBuilder_1 = require("./columnBuilder");
const SchemaError_1 = require("../errors/SchemaError");
const reservedColumns_1 = require("./reservedColumns");
function defineTable(input) {
const columns = {};
for (const [key, value] of Object.entries(input.columns)) {
if (value instanceof columnBuilder_1.ColumnBuilder) {
columns[key] = value.build();
}
else {
columns[key] = value;
}
}
const primaryColumns = Object.entries(columns).filter(([, col]) => col.primary);
if (primaryColumns.length > 1) {
const names = primaryColumns.map(([k]) => k).join(', ');
throw new SchemaError_1.SchemaError(`Table '${input.name}' has ${primaryColumns.length} primary columns (${names}). Only one primary() column is allowed.`, input.name);
}
const pkColumn = primaryColumns.length === 1 ? primaryColumns[0][0] : undefined;
const [ID, CREATED_AT, UPDATED_AT, DELETED_AT] = reservedColumns_1.RESERVED_COLUMN_NAMES;
if (input.timestamps) {
columns[CREATED_AT] = { type: 'date', readonly: true };
columns[UPDATED_AT] = { type: 'date', readonly: true };
}
if (input.softDelete) {
columns[DELETED_AT] = { type: 'date' };
}
columns[ID] = { type: 'string', required: true, unique: true, readonly: true };
return {
name: input.name,
actor: input.actor,
timestamps: input.timestamps,
softDelete: input.softDelete,
columns,
pkColumn,
};
}
//# sourceMappingURL=defineTable.js.map