manifest
Version:
Self-hosted Manifest LLM router with embedded server, SQLite database, and dashboard
71 lines • 2.58 kB
JavaScript
;
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