UNPKG

longcelot-sheet-db

Version:

Google Sheets-backed staging database adapter for Node.js with schema-first design

41 lines 1.68 kB
"use strict"; 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