UNPKG

@sync-in/server

Version:

The secure, open-source platform for file storage, sharing, collaboration, and sync

117 lines (116 loc) 4.14 kB
/* * 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