@sync-in/server
Version:
The secure, open-source platform for file storage, sharing, collaboration, and sync
117 lines (116 loc) • 4.14 kB
JavaScript
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: Object.getOwnPropertyDescriptor(all, name).get
});
}
_export(exports, {
get concatDistinctObjectsInArray () {
return concatDistinctObjectsInArray;
},
get convertToSelect () {
return convertToSelect;
},
get convertToWhere () {
return convertToWhere;
},
get dateTimeUTC () {
return dateTimeUTC;
},
get dbCheckAffectedRows () {
return dbCheckAffectedRows;
},
get dbCheckConnection () {
return dbCheckConnection;
},
get dbCloseConnection () {
return dbCloseConnection;
},
get dbGetInsertedId () {
return dbGetInsertedId;
}
});
const _drizzleorm = require("drizzle-orm");
const _constants = require("./constants");
async function dbGetConnection(app, mode = 'pool') {
const db = await app.resolve(_constants.DB_TOKEN_PROVIDER);
let connection = db['session'].client;
if (mode === 'pool') {
connection = connection.pool;
}
return {
db,
connection
};
}
async function dbCloseConnection(app, mode = 'pool') {
const connection = (await dbGetConnection(app, mode)).connection;
await connection.end();
}
async function dbCheckConnection(app, mode = 'pool') {
const db = (await dbGetConnection(app, mode)).db;
return Array.isArray(await db.execute((0, _drizzleorm.sql)`select 1`));
}
function dbCheckAffectedRows(queryResult, expected, throwError = true) {
const affectedRows = queryResult.at(0).affectedRows;
if (affectedRows !== expected) {
if (throwError) {
throw new Error(`The number of rows affected does not match : ${affectedRows}`);
}
return false;
}
return true;
}
function dbGetInsertedId(queryResult) {
const insertedId = queryResult.at(0).insertId;
if (!insertedId) {
throw new Error(`Record was not inserted : ${insertedId}`);
}
return insertedId;
}
function convertToSelect(table, fields) {
const select = {};
for (const f of fields){
select[f] = table[f];
}
return select;
}
function convertToWhere(table, filters) {
// only handles AND operator
return Object.entries(filters).map(([k, v])=>{
if (v === null) return (0, _drizzleorm.isNull)(table[k]);
if (Array.isArray(v)) return (0, _drizzleorm.inArray)(table[k], v);
return (0, _drizzleorm.eq)(table[k], v);
});
}
const dateTimeUTC = (dateField)=>(0, _drizzleorm.sql)`CONCAT(${(0, _drizzleorm.sql)`${dateField}`}, 'Z')`;
function concatDistinctObjectsInArray(mustBeNotNull, object) {
/* Concat json objects in array (only one nesting level is supported) */ const expr = (0, _drizzleorm.sql)`IFNULL(CONCAT('[', GROUP_CONCAT(DISTINCT IF(${mustBeNotNull} IS NULL, NULL, JSON_OBJECT(`;
const keys = Object.keys(object);
keys.forEach((k, index)=>{
if (object[k].constructor.name === 'Object') {
expr.append((0, _drizzleorm.sql)`${_drizzleorm.sql.raw(`'${k}'`)},JSON_OBJECT(`);
const subKeys = Object.keys(object[k]);
subKeys.forEach((subK, subIndex)=>{
expr.append((0, _drizzleorm.sql)`${_drizzleorm.sql.raw(`'${subK}'`)},${(0, _drizzleorm.sql)`${object[k][subK]}`}${subIndex === subKeys.length - 1 ? (0, _drizzleorm.sql)`)` : (0, _drizzleorm.sql)`,`}`);
});
} else {
expr.append((0, _drizzleorm.sql)`${_drizzleorm.sql.raw(`'${k}'`)},${(0, _drizzleorm.sql)`${object[k]}`}`);
}
if (index !== keys.length - 1) {
expr.append((0, _drizzleorm.sql)`,`);
}
});
expr.append((0, _drizzleorm.sql)`))), ']'), JSON_ARRAY())`);
expr.mapWith(JSON.parse);
return expr;
}
//# sourceMappingURL=utils.js.map