First stable version

This commit is contained in:
2026-03-08 07:50:38 +01:00
parent 7bbd179fa4
commit 3a4ba2ca6f
44 changed files with 1096 additions and 789 deletions
+13 -7
View File
@@ -1,11 +1,17 @@
import _ from "lodash";
import { DefaultFields } from "../types";
export default function ({ dbSchema }) {
const finaldbSchema = _.cloneDeep(dbSchema);
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = default_1;
const lodash_1 = __importDefault(require("lodash"));
const types_1 = require("../types");
function default_1({ dbSchema }) {
const finaldbSchema = lodash_1.default.cloneDeep(dbSchema);
finaldbSchema.tables = finaldbSchema.tables.map((t) => {
const newTable = _.cloneDeep(t);
newTable.fields = newTable.fields.filter((f) => !f.fieldName?.match(/^(id|created_at|updated_at)$/));
newTable.fields.unshift(...DefaultFields);
const newTable = lodash_1.default.cloneDeep(t);
newTable.fields = newTable.fields.filter((f) => { var _a; return !((_a = f.fieldName) === null || _a === void 0 ? void 0 : _a.match(/^(id|created_at|updated_at)$/)); });
newTable.fields.unshift(...types_1.DefaultFields);
return newTable;
});
return finaldbSchema;
+4 -1
View File
@@ -1,4 +1,7 @@
export default function grabBackupData({ backup_name }) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = grabBackupData;
function grabBackupData({ backup_name }) {
const backup_parts = backup_name.split("-");
const backup_date_timestamp = Number(backup_parts.pop());
const origin_backup_name = backup_parts.join("-");
+4 -1
View File
@@ -1,4 +1,7 @@
export default function grabDBBackupFileName({ config }) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = grabDBBackupFileName;
function grabDBBackupFileName({ config }) {
const new_db_file_name = `${config.db_name}-${Date.now()}`;
return new_db_file_name;
}
+14 -8
View File
@@ -1,14 +1,20 @@
import path from "path";
import grabDirNames from "../data/grab-dir-names";
import { AppData } from "../data/app-data";
export default function grabDBDir({ config }) {
const { ROOT_DIR } = grabDirNames();
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = grabDBDir;
const path_1 = __importDefault(require("path"));
const grab_dir_names_1 = __importDefault(require("../data/grab-dir-names"));
const app_data_1 = require("../data/app-data");
function grabDBDir({ config }) {
const { ROOT_DIR } = (0, grab_dir_names_1.default)();
let db_dir = ROOT_DIR;
if (config.db_dir) {
db_dir = config.db_dir;
}
const backup_dir_name = config.db_backup_dir || AppData["DefaultBackupDirName"];
const backup_dir = path.resolve(db_dir, backup_dir_name);
const db_file_path = path.resolve(db_dir, config.db_name);
const backup_dir_name = config.db_backup_dir || app_data_1.AppData["DefaultBackupDirName"];
const backup_dir = path_1.default.resolve(db_dir, backup_dir_name);
const db_file_path = path_1.default.resolve(db_dir, config.db_name);
return { db_dir, backup_dir, db_file_path };
}
+11 -5
View File
@@ -1,8 +1,14 @@
import grabDBDir from "../utils/grab-db-dir";
import fs from "fs";
export default function grabSortedBackups({ config }) {
const { backup_dir } = grabDBDir({ config });
const backups = fs.readdirSync(backup_dir);
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = grabSortedBackups;
const grab_db_dir_1 = __importDefault(require("../utils/grab-db-dir"));
const fs_1 = __importDefault(require("fs"));
function grabSortedBackups({ config }) {
const { backup_dir } = (0, grab_db_dir_1.default)({ config });
const backups = fs_1.default.readdirSync(backup_dir);
/**
* Order Backups. Most recent first.
*/
+4 -2
View File
@@ -1,5 +1,7 @@
import { ServerQueryEqualities } from "../types";
export default function sqlEqualityParser(eq) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = sqlEqualityParser;
function sqlEqualityParser(eq) {
switch (eq) {
case "EQUAL":
return "=";
+10 -4
View File
@@ -1,9 +1,15 @@
import sqlEqualityParser from "./sql-equality-parser";
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = sqlGenOperatorGen;
const sql_equality_parser_1 = __importDefault(require("./sql-equality-parser"));
/**
* # SQL Gen Operator Gen
* @description Generates an SQL operator for node module `mysql` or `serverless-mysql`
*/
export default function sqlGenOperatorGen({ fieldName, value, equality, queryObj, isValueFieldValue, }) {
function sqlGenOperatorGen({ fieldName, value, equality, queryObj, isValueFieldValue, }) {
if (queryObj.nullValue) {
return { str: `${fieldName} IS NULL` };
}
@@ -93,7 +99,7 @@ export default function sqlGenOperatorGen({ fieldName, value, equality, queryObj
}
else if (equality) {
return {
str: `${fieldName} ${sqlEqualityParser(equality)} ${finalValue}`,
str: `${fieldName} ${(0, sql_equality_parser_1.default)(equality)} ${finalValue}`,
param: finalParams,
};
}
@@ -113,7 +119,7 @@ export default function sqlGenOperatorGen({ fieldName, value, equality, queryObj
}
else if (equality) {
return {
str: `${fieldName} ${sqlEqualityParser(equality)} ?`,
str: `${fieldName} ${(0, sql_equality_parser_1.default)(equality)} ?`,
param: value,
};
}
+47 -43
View File
@@ -1,11 +1,17 @@
import { isUndefined } from "lodash";
import sqlGenOperatorGen from "./sql-gen-operator-gen";
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = sqlGenerator;
const lodash_1 = require("lodash");
const sql_gen_operator_gen_1 = __importDefault(require("./sql-gen-operator-gen"));
/**
* # SQL Query Generator
* @description Generates an SQL Query for node module `mysql` or `serverless-mysql`
*/
export default function sqlGenerator({ tableName, genObject, dbFullName, count }) {
const finalQuery = genObject?.query ? genObject.query : undefined;
function sqlGenerator({ tableName, genObject, dbFullName, count }) {
const finalQuery = (genObject === null || genObject === void 0 ? void 0 : genObject.query) ? genObject.query : undefined;
const queryKeys = finalQuery ? Object.keys(finalQuery) : undefined;
const sqlSearhValues = [];
const finalDbName = dbFullName ? `${dbFullName}.` : "";
@@ -14,7 +20,7 @@ export default function sqlGenerator({ tableName, genObject, dbFullName, count }
*/
function genSqlSrchStr({ queryObj, join, field, }) {
const finalFieldName = (() => {
if (queryObj?.tableName) {
if (queryObj === null || queryObj === void 0 ? void 0 : queryObj.tableName) {
return `${finalDbName}${queryObj.tableName}.${field}`;
}
if (join) {
@@ -24,6 +30,7 @@ export default function sqlGenerator({ tableName, genObject, dbFullName, count }
})();
let str = `${finalFieldName}=?`;
function grabValue(val) {
var _a;
const valueParsed = val;
if (!valueParsed)
return;
@@ -32,16 +39,16 @@ export default function sqlGenerator({ tableName, genObject, dbFullName, count }
: valueParsed
? valueParsed.fieldName && valueParsed.tableName
? `${valueParsed.tableName}.${valueParsed.fieldName}`
: valueParsed.value?.toString()
: (_a = valueParsed.value) === null || _a === void 0 ? void 0 : _a.toString()
: undefined;
const valueEquality = typeof valueParsed == "object"
? valueParsed.equality || queryObj.equality
: queryObj.equality;
const operatorStrParam = sqlGenOperatorGen({
const operatorStrParam = (0, sql_gen_operator_gen_1.default)({
queryObj,
equality: valueEquality,
fieldName: finalFieldName || "",
value: valueString?.toString() || "",
value: (valueString === null || valueString === void 0 ? void 0 : valueString.toString()) || "",
isValueFieldValue: Boolean(typeof valueParsed == "object" &&
valueParsed.fieldName &&
valueParsed.tableName),
@@ -66,7 +73,7 @@ export default function sqlGenerator({ tableName, genObject, dbFullName, count }
}
else if (typeof queryObj.value == "object") {
const operatorStrParam = grabValue(queryObj.value);
if (operatorStrParam?.str) {
if (operatorStrParam === null || operatorStrParam === void 0 ? void 0 : operatorStrParam.str) {
str = operatorStrParam.str;
if (operatorStrParam.param) {
sqlSearhValues.push(operatorStrParam.param);
@@ -77,7 +84,7 @@ export default function sqlGenerator({ tableName, genObject, dbFullName, count }
const valueParsed = queryObj.value
? String(queryObj.value)
: undefined;
const operatorStrParam = sqlGenOperatorGen({
const operatorStrParam = (0, sql_gen_operator_gen_1.default)({
equality: queryObj.equality,
fieldName: finalFieldName || "",
value: valueParsed,
@@ -128,49 +135,46 @@ export default function sqlGenerator({ tableName, genObject, dbFullName, count }
: mtch.target}`;
})()}`;
}
let fullTextMatchStr = genObject?.fullTextSearch
let fullTextMatchStr = (genObject === null || genObject === void 0 ? void 0 : genObject.fullTextSearch)
? ` MATCH(${genObject.fullTextSearch.fields
.map((f) => genObject.join ? `${tableName}.${String(f)}` : `${String(f)}`)
.join(",")}) AGAINST (? IN BOOLEAN MODE)`
: undefined;
const fullTextSearchStr = genObject?.fullTextSearch
const fullTextSearchStr = (genObject === null || genObject === void 0 ? void 0 : genObject.fullTextSearch)
? genObject.fullTextSearch.searchTerm
.split(` `)
.map((t) => `${t}`)
.join(" ")
: undefined;
let queryString = (() => {
var _a, _b, _c;
let str = "SELECT";
if (count) {
str += ` COUNT(*)`;
}
else if (genObject?.selectFields?.[0]) {
else if ((_a = genObject === null || genObject === void 0 ? void 0 : genObject.selectFields) === null || _a === void 0 ? void 0 : _a[0]) {
if (genObject.join) {
str += ` ${genObject.selectFields
?.map((fld) => typeof fld == "object"
str += ` ${(_b = genObject.selectFields) === null || _b === void 0 ? void 0 : _b.map((fld) => typeof fld == "object"
? `${finalDbName}${tableName}.${fld.fieldName.toString()}` +
(fld.alias ? ` as ${fld.alias}` : ``)
: `${finalDbName}${tableName}.${String(fld)}`)
.join(",")}`;
: `${finalDbName}${tableName}.${String(fld)}`).join(",")}`;
}
else {
str += ` ${genObject.selectFields
?.map((fld) => typeof fld == "object"
str += ` ${(_c = genObject.selectFields) === null || _c === void 0 ? void 0 : _c.map((fld) => typeof fld == "object"
? `${fld.fieldName.toString()}` +
(fld.alias ? ` as ${fld.alias}` : ``)
: fld)
.join(",")}`;
: fld).join(",")}`;
}
}
else {
if (genObject?.join) {
if (genObject === null || genObject === void 0 ? void 0 : genObject.join) {
str += ` ${finalDbName}${tableName}.*`;
}
else {
str += " *";
}
}
if (genObject?.countSubQueries) {
if (genObject === null || genObject === void 0 ? void 0 : genObject.countSubQueries) {
let countSqls = [];
for (let i = 0; i < genObject.countSubQueries.length; i++) {
const countSubQuery = genObject.countSubQueries[i];
@@ -201,13 +205,13 @@ export default function sqlGenerator({ tableName, genObject, dbFullName, count }
}
str += `, ${countSqls.join(",")}`;
}
if (genObject?.join && !count) {
if ((genObject === null || genObject === void 0 ? void 0 : genObject.join) && !count) {
const existingJoinTableNames = [tableName];
str +=
"," +
genObject.join
.flat()
.filter((j) => !isUndefined(j))
.filter((j) => !(0, lodash_1.isUndefined)(j))
.map((joinObj) => {
const joinTableName = joinObj.alias
? joinObj.alias
@@ -239,19 +243,19 @@ export default function sqlGenerator({ tableName, genObject, dbFullName, count }
.filter((_) => Boolean(_))
.join(",");
}
if (genObject?.fullTextSearch &&
if ((genObject === null || genObject === void 0 ? void 0 : genObject.fullTextSearch) &&
fullTextMatchStr &&
fullTextSearchStr) {
str += `, ${fullTextMatchStr} AS ${genObject.fullTextSearch.scoreAlias}`;
sqlSearhValues.push(fullTextSearchStr);
}
str += ` FROM ${finalDbName}${tableName}`;
if (genObject?.join) {
if (genObject === null || genObject === void 0 ? void 0 : genObject.join) {
str +=
" " +
genObject.join
.flat()
.filter((j) => !isUndefined(j))
.filter((j) => !(0, lodash_1.isUndefined)(j))
.map((join) => {
return (join.joinType +
" " +
@@ -280,20 +284,20 @@ export default function sqlGenerator({ tableName, genObject, dbFullName, count }
}
return str;
})();
const sqlSearhString = queryKeys?.map((field) => {
const queryObj = finalQuery?.[field];
const sqlSearhString = queryKeys === null || queryKeys === void 0 ? void 0 : queryKeys.map((field) => {
const queryObj = finalQuery === null || finalQuery === void 0 ? void 0 : finalQuery[field];
if (!queryObj)
return;
if (queryObj.__query) {
const subQueryGroup = queryObj.__query;
const subSearchKeys = Object.keys(subQueryGroup);
const subSearchString = subSearchKeys.map((_field) => {
const newSubQueryObj = subQueryGroup?.[_field];
const newSubQueryObj = subQueryGroup === null || subQueryGroup === void 0 ? void 0 : subQueryGroup[_field];
if (newSubQueryObj) {
return genSqlSrchStr({
queryObj: newSubQueryObj,
field: newSubQueryObj.fieldName || _field,
join: genObject?.join,
join: genObject === null || genObject === void 0 ? void 0 : genObject.join,
});
}
});
@@ -304,20 +308,20 @@ export default function sqlGenerator({ tableName, genObject, dbFullName, count }
return genSqlSrchStr({
queryObj,
field: queryObj.fieldName || field,
join: genObject?.join,
join: genObject === null || genObject === void 0 ? void 0 : genObject.join,
});
});
const cleanedUpSearchStr = sqlSearhString?.filter((str) => typeof str == "string");
const isSearchStr = cleanedUpSearchStr?.[0] && cleanedUpSearchStr.find((str) => str);
const cleanedUpSearchStr = sqlSearhString === null || sqlSearhString === void 0 ? void 0 : sqlSearhString.filter((str) => typeof str == "string");
const isSearchStr = (cleanedUpSearchStr === null || cleanedUpSearchStr === void 0 ? void 0 : cleanedUpSearchStr[0]) && cleanedUpSearchStr.find((str) => str);
if (isSearchStr) {
const stringOperator = genObject?.searchOperator || "AND";
const stringOperator = (genObject === null || genObject === void 0 ? void 0 : genObject.searchOperator) || "AND";
queryString += ` WHERE ${cleanedUpSearchStr.join(` ${stringOperator} `)}`;
}
if (genObject?.fullTextSearch && fullTextSearchStr && fullTextMatchStr) {
if ((genObject === null || genObject === void 0 ? void 0 : genObject.fullTextSearch) && fullTextSearchStr && fullTextMatchStr) {
queryString += `${isSearchStr ? " AND" : " WHERE"} ${fullTextMatchStr}`;
sqlSearhValues.push(fullTextSearchStr);
}
if (genObject?.group) {
if (genObject === null || genObject === void 0 ? void 0 : genObject.group) {
let group_by_txt = ``;
if (typeof genObject.group == "string") {
group_by_txt = genObject.group;
@@ -352,10 +356,10 @@ export default function sqlGenerator({ tableName, genObject, dbFullName, count }
function grabOrderString(order) {
let orderFields = [];
let orderSrt = ``;
if (genObject?.fullTextSearch && genObject.fullTextSearch.scoreAlias) {
if ((genObject === null || genObject === void 0 ? void 0 : genObject.fullTextSearch) && genObject.fullTextSearch.scoreAlias) {
orderFields.push(genObject.fullTextSearch.scoreAlias);
}
else if (genObject?.join) {
else if (genObject === null || genObject === void 0 ? void 0 : genObject.join) {
orderFields.push(`${finalDbName}${tableName}.${String(order.field)}`);
}
else {
@@ -364,7 +368,7 @@ export default function sqlGenerator({ tableName, genObject, dbFullName, count }
orderSrt += ` ${orderFields.join(", ")} ${order.strategy}`;
return orderSrt;
}
if (genObject?.order && !count) {
if ((genObject === null || genObject === void 0 ? void 0 : genObject.order) && !count) {
let orderSrt = ` ORDER BY`;
if (Array.isArray(genObject.order)) {
for (let i = 0; i < genObject.order.length; i++) {
@@ -381,9 +385,9 @@ export default function sqlGenerator({ tableName, genObject, dbFullName, count }
}
queryString += ` ${orderSrt}`;
}
if (genObject?.limit && !count)
if ((genObject === null || genObject === void 0 ? void 0 : genObject.limit) && !count)
queryString += ` LIMIT ${genObject.limit}`;
if (genObject?.offset && !count)
if ((genObject === null || genObject === void 0 ? void 0 : genObject.offset) && !count)
queryString += ` OFFSET ${genObject.offset}`;
return {
string: queryString,
+5 -2
View File
@@ -1,10 +1,13 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = sqlInsertGenerator;
/**
* # SQL Insert Generator
*/
export default function sqlInsertGenerator({ tableName, data, dbFullName, }) {
function sqlInsertGenerator({ tableName, data, dbFullName, }) {
const finalDbName = dbFullName ? `${dbFullName}.` : "";
try {
if (Array.isArray(data) && data?.[0]) {
if (Array.isArray(data) && (data === null || data === void 0 ? void 0 : data[0])) {
let insertKeys = [];
data.forEach((dt) => {
const kys = Object.keys(dt);
+17 -11
View File
@@ -1,19 +1,25 @@
import grabDBDir from "../utils/grab-db-dir";
import fs from "fs";
import grabSortedBackups from "./grab-sorted-backups";
import { AppData } from "../data/app-data";
import path from "path";
export default function trimBackups({ config }) {
const { backup_dir } = grabDBDir({ config });
const backups = grabSortedBackups({ config });
const max_backups = config.max_backups || AppData["MaxBackups"];
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = trimBackups;
const grab_db_dir_1 = __importDefault(require("../utils/grab-db-dir"));
const fs_1 = __importDefault(require("fs"));
const grab_sorted_backups_1 = __importDefault(require("./grab-sorted-backups"));
const app_data_1 = require("../data/app-data");
const path_1 = __importDefault(require("path"));
function trimBackups({ config }) {
const { backup_dir } = (0, grab_db_dir_1.default)({ config });
const backups = (0, grab_sorted_backups_1.default)({ config });
const max_backups = config.max_backups || app_data_1.AppData["MaxBackups"];
for (let i = 0; i < backups.length; i++) {
const backup_name = backups[i];
if (!backup_name)
continue;
if (i > max_backups - 1) {
const backup_file_to_unlink = path.join(backup_dir, backup_name);
fs.unlinkSync(backup_file_to_unlink);
const backup_file_to_unlink = path_1.default.join(backup_dir, backup_name);
fs_1.default.unlinkSync(backup_file_to_unlink);
}
}
}