UNPKG

manifest

Version:

Self-hosted Manifest LLM router with embedded server, SQLite database, and dashboard

71 lines 2.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.detectDialect = detectDialect; exports.timestampType = timestampType; exports.timestampDefault = timestampDefault; exports.computeCutoff = computeCutoff; exports.sqlNow = sqlNow; exports.sqlHourBucket = sqlHourBucket; exports.sqlDateBucket = sqlDateBucket; exports.sqlCastFloat = sqlCastFloat; exports.sqlSanitizeCost = sqlSanitizeCost; exports.portableSql = portableSql; exports.sqlCastInterval = sqlCastInterval; function detectDialect(dsType) { return dsType === 'sqljs' ? 'sqlite' : 'postgres'; } function timestampType() { return process.env['MANIFEST_MODE'] === 'local' ? 'datetime' : 'timestamp'; } function timestampDefault() { return process.env['MANIFEST_MODE'] === 'local' ? () => 'CURRENT_TIMESTAMP' : () => 'NOW()'; } function computeCutoff(interval) { const ms = intervalToMs(interval); const cutoff = new Date(Date.now() - ms); return formatLocalIso(cutoff); } function intervalToMs(interval) { const match = interval.match(/^(\d+)\s+(hour|hours|day|days)$/); if (!match) { console.warn(`sql-dialect: unrecognized interval "${interval}", defaulting to 24 hours`); return 24 * 60 * 60 * 1000; } const n = parseInt(match[1], 10); const unit = match[2]; return unit.startsWith('hour') ? n * 3600_000 : n * 86400_000; } function sqlNow() { return formatLocalIso(new Date()); } function sqlHourBucket(col, dialect) { if (dialect === 'sqlite') { return `strftime('%Y-%m-%dT%H:00:00', ${col})`; } return `to_char(date_trunc('hour', ${col}), 'YYYY-MM-DD"T"HH24:MI:SS')`; } function sqlDateBucket(col, dialect) { return dialect === 'sqlite' ? `strftime('%Y-%m-%d', ${col})` : `to_char(${col}::date, 'YYYY-MM-DD')`; } function sqlCastFloat(col, dialect) { return dialect === 'sqlite' ? `CAST(${col} AS REAL)` : `${col}::float`; } function sqlSanitizeCost(col) { return `CASE WHEN ${col} >= 0 THEN ${col} ELSE NULL END`; } function portableSql(sql, dialect) { if (dialect === 'postgres') return sql; return sql.replace(/\$\d+/g, '?'); } function sqlCastInterval(paramName, dialect) { return dialect === 'sqlite' ? `:${paramName}` : `CAST(:${paramName} AS interval)`; } function formatLocalIso(d) { const pad = (n) => String(n).padStart(2, '0'); return (`${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}` + `T${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`); } //# sourceMappingURL=sql-dialect.js.map