- Add bun test suite: SQL generator and value unit tests, plus MariaDB integration tests gated on BUN_MARIADB_TEST_DB - schema: add --dry-run and require confirmation (or --yes) before dropping tables/columns; block unapproved destructive statements - Always AND targetId with the query, regardless of searchOperator - Initialize lazily on first call; init throws instead of exiting - Generate IN (?, ?, ...) lists for IN / NOT IN - Share value binding between insert and update (booleans, embeddings, function values, "" -> NULL for non-text columns) - Keep Buffers and convert BigInt/Date without a JSON round-trip - DbSQL: report success for empty SELECT results - Run update() in a transaction with row locking - Key the client cache on the full connection config - Consolidate identifier quoting, drop dead code, merge column lookup - Read CLI version from package.json, pin @types/bun, chmod CLI on compile - Rebuild dist Co-Authored-By: Claude Opus 5.5 <[email protected]>
23 lines
977 B
JavaScript
23 lines
977 B
JavaScript
import fs from "fs";
|
|
import path from "path";
|
|
import _ from "lodash";
|
|
import { AppData } from "../data/app-data";
|
|
import grabDBDir from "./grab-db-dir";
|
|
import grabSortedExports from "./grab-sorted-exports";
|
|
export default function trimExports({ config }) {
|
|
const { export_dir } = grabDBDir({ config });
|
|
// Only consider archives written by `export` (`{db_name}-{timestamp}.tar.gz|zip`)
|
|
const exportNamePattern = new RegExp(`^${_.escapeRegExp(config.db_name)}-\\d+\\.(tar\\.gz|zip)$`);
|
|
const exports = grabSortedExports({ config }).filter((name) => exportNamePattern.test(name) &&
|
|
fs.statSync(path.join(export_dir, name)).isFile());
|
|
const max_exports = config.max_exports || AppData["MaxExports"];
|
|
for (let i = 0; i < exports.length; i++) {
|
|
const export_name = exports[i];
|
|
if (!export_name)
|
|
continue;
|
|
if (i > max_exports - 1) {
|
|
fs.unlinkSync(path.join(export_dir, export_name));
|
|
}
|
|
}
|
|
}
|