@sync-in/server
Version:
The secure, open-source platform for file storage, sharing, collaboration, and sync
165 lines (164 loc) • 5.85 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;
},
get getTablesWithFileIdColumn () {
return getTablesWithFileIdColumn;
}
});
const _drizzleorm = require("drizzle-orm");
const _constants = require("./constants");
const _schema = /*#__PURE__*/ _interop_require_wildcard(require("./schema"));
function _getRequireWildcardCache(nodeInterop) {
if (typeof WeakMap !== "function") return null;
var cacheBabelInterop = new WeakMap();
var cacheNodeInterop = new WeakMap();
return (_getRequireWildcardCache = function(nodeInterop) {
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
})(nodeInterop);
}
function _interop_require_wildcard(obj, nodeInterop) {
if (!nodeInterop && obj && obj.__esModule) {
return obj;
}
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
return {
default: obj
};
}
var cache = _getRequireWildcardCache(nodeInterop);
if (cache && cache.has(obj)) {
return cache.get(obj);
}
var newObj = {
__proto__: null
};
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
for(var key in obj){
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
if (desc && (desc.get || desc.set)) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
newObj.default = obj;
if (cache) {
cache.set(obj, newObj);
}
return newObj;
}
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;
}
function getTablesWithFileIdColumn() {
return Object.entries(_schema).filter(([_table, columns])=>'fileId' in columns).map(([_table, columns])=>columns);
}
//# sourceMappingURL=utils.js.map