Aligned to eslint rules and fixed following things:

This commit may contains behavioural changes.

- Fix for the issue with corrupted log displays
- Wrap the activeDocument
- Reduced potential type errors and strengthened certain checks
- Made error handling more robust (by rewriting the error class)
This commit is contained in:
vorotamoroz
2026-06-01 05:28:03 +01:00
parent c80c294d93
commit 7c203a522a
16 changed files with 130 additions and 107 deletions
+4 -3
View File
@@ -71,6 +71,7 @@ import { PluginDialogModal } from "./PluginDialogModal.ts";
import { $msg } from "@/lib/src/common/i18n.ts";
import type { InjectableServiceHub } from "../../lib/src/services/InjectableServices.ts";
import type { LiveSyncCore } from "../../main.ts";
import { LiveSyncError } from "@lib/common/LSError.ts";
const d = "\u200b";
const d2 = "\n";
@@ -1069,10 +1070,10 @@ export class ConfigSync extends LiveSyncCommands {
}
const baseDir = this.configDir;
try {
if (!data.documentPath) throw "InternalError: Document path not exist";
if (!data.documentPath) throw new LiveSyncError("InternalError: Document path not exist");
const dx = await this.localDatabase.getDBEntry(data.documentPath);
if (dx == false) {
throw "Not found on database";
throw new LiveSyncError("Not found on database");
}
const loadedData = deserialize(getDocDataAsArray(dx.data), {}) as PluginDataEx;
for (const f of loadedData.files) {
@@ -1317,7 +1318,7 @@ export class ConfigSync extends LiveSyncCommands {
}
const docXDoc = await this.localDatabase.getDBEntryFromMeta(old, false, false);
if (docXDoc == false) {
throw "Could not load the document";
throw new LiveSyncError("Could not load the document");
}
const dataSrc = getDocData(docXDoc.data);
const dataStart = dataSrc.indexOf(DUMMY_END);
@@ -50,6 +50,7 @@ import { hiddenFilesEventCount, hiddenFilesProcessingCount } from "../../lib/src
import { EVENT_SETTING_SAVED, eventHub } from "../../common/events.ts";
import { Semaphore } from "octagonal-wheels/concurrency/semaphore";
import type { LiveSyncCore } from "../../main.ts";
import { tryGetFilePath } from "@lib/common/utils.doc.ts";
type SyncDirection = "push" | "pull" | "safe" | "pullForce" | "pushForce";
declare global {
@@ -1047,7 +1048,7 @@ Offline Changed files: ${processFiles.length}`;
}
notifyProgress();
} catch (ex) {
this._log(`Failed to process storage change file:${file}`, logLevel);
this._log(`Failed to process storage change file:${tryGetFilePath(file)}`, logLevel);
this._log(ex, LOG_LEVEL_VERBOSE);
}
});
@@ -1159,7 +1160,7 @@ Offline Changed files: ${files.length}`;
await this.trackDatabaseFileModification(path, "[Scanning]", true, onlyNew, file);
notifyProgress();
} catch (ex) {
this._log(`Failed to process database changes:${file}`);
this._log(`Failed to process database changes:${tryGetFilePath(file)}`);
this._log(ex, LOG_LEVEL_VERBOSE);
}
return;
@@ -16,9 +16,8 @@ import { serialized } from "octagonal-wheels/concurrency/lock_v2";
import { arrayToChunkedArray } from "octagonal-wheels/collection";
import { EVENT_ANALYSE_DB_USAGE, EVENT_REQUEST_PERFORM_GC_V3, eventHub } from "@/common/events";
import type { LiveSyncCouchDBReplicator } from "@/lib/src/replication/couchdb/LiveSyncReplicator";
import { delay, parseHeaderValues } from "@/lib/src/common/utils";
import { generateCredentialObject } from "@/lib/src/replication/httplib";
import { _requestToCouchDB } from "@/common/utils";
import { delay } from "@/lib/src/common/utils";
// import { _requestToCouchDB } from "@/common/utils";
const DB_KEY_SEQ = "gc-seq";
const DB_KEY_CHUNK_SET = "chunk-set";
const DB_KEY_DOC_USAGE_MAP = "doc-usage-map";
@@ -533,7 +532,7 @@ Success: ${successCount}, Errored: ${errored}`;
const docMap = new Map<DocumentID, Set<DocumentInfo>>();
const info = await db.info();
// Total number of revisions to process (approximate)
const maxSeq = new Number(info.update_seq);
const maxSeq = Number.parseInt(`${info.update_seq ?? 0}`, 10);
let processed = 0;
let read = 0;
let errored = 0;
@@ -759,68 +758,68 @@ Success: ${successCount}, Errored: ${errored}`;
}
}
/**
* Compact the database by temporarily setting the revision limit to 1.
* @returns
*/
async compactDatabaseWithRevLimit() {
// Temporarily set revs_limit to 1, perform compaction, and restore the original revs_limit.
// Very dangerous operation, so now suppressed.
return false;
const replicator = this.core.replicator as LiveSyncCouchDBReplicator;
const remote = await replicator.connectRemoteCouchDBWithSetting(this.settings, false, false, true);
if (!remote) {
this._notice("Failed to connect to remote for compaction.");
return;
}
if (typeof remote == "string") {
this._notice(`Failed to connect to remote for compaction. ${remote}`);
return;
}
const customHeaders = parseHeaderValues(this.settings.couchDB_CustomHeaders);
const credential = generateCredentialObject(this.settings);
const request = async (path: string, method: string = "GET", body: any = undefined) => {
const req = await _requestToCouchDB(
this.settings.couchDB_URI.replace(/\/+$/, "") +
(this.settings.couchDB_DBNAME ? `/${this.settings.couchDB_DBNAME}` : ""),
credential,
window.origin,
path,
body,
method,
customHeaders
);
return req;
};
let revsLimit = "";
const req = await request(`_revs_limit`, "GET");
if (req.status == 200) {
revsLimit = req.text.trim();
this._info(`Remote database _revs_limit: ${revsLimit}`);
} else {
this._notice(`Failed to get remote database _revs_limit. Status: ${req.status}`);
return;
}
const req2 = await request(`_revs_limit`, "PUT", 1);
if (req2.status == 200) {
this._info(`Set remote database _revs_limit to 1 for compaction.`);
}
try {
await this.compactDatabase();
} finally {
// Restore revs_limit
if (revsLimit) {
const req3 = await request(`_revs_limit`, "PUT", parseInt(revsLimit));
if (req3.status == 200) {
this._info(`Restored remote database _revs_limit to ${revsLimit}.`);
} else {
this._notice(
`Failed to restore remote database _revs_limit. Status: ${req3.status} / ${req3.text}`
);
}
}
}
}
// /**
// * Compact the database by temporarily setting the revision limit to 1.
// * @returns
// */
// async compactDatabaseWithRevLimit() {
// // Temporarily set revs_limit to 1, perform compaction, and restore the original revs_limit.
// // Very dangerous operation, so now suppressed.
// return Promise.resolve(false);
// const replicator = this.core.replicator as LiveSyncCouchDBReplicator;
// const remote = await replicator.connectRemoteCouchDBWithSetting(this.settings, false, false, true);
// if (!remote) {
// this._notice("Failed to connect to remote for compaction.");
// return;
// }
// if (typeof remote == "string") {
// this._notice(`Failed to connect to remote for compaction. ${remote}`);
// return;
// }
// const customHeaders = parseHeaderValues(this.settings.couchDB_CustomHeaders);
// const credential = generateCredentialObject(this.settings);
// const request = async (path: string, method: string = "GET", body: any = undefined) => {
// const req = await _requestToCouchDB(
// this.settings.couchDB_URI.replace(/\/+$/, "") +
// (this.settings.couchDB_DBNAME ? `/${this.settings.couchDB_DBNAME}` : ""),
// credential,
// window.origin,
// path,
// body,
// method,
// customHeaders
// );
// return req;
// };
// let revsLimit = "";
// const req = await request(`_revs_limit`, "GET");
// if (req.status == 200) {
// revsLimit = req.text.trim();
// this._info(`Remote database _revs_limit: ${revsLimit}`);
// } else {
// this._notice(`Failed to get remote database _revs_limit. Status: ${req.status}`);
// return;
// }
// const req2 = await request(`_revs_limit`, "PUT", 1);
// if (req2.status == 200) {
// this._info(`Set remote database _revs_limit to 1 for compaction.`);
// }
// try {
// await this.compactDatabase();
// } finally {
// // Restore revs_limit
// if (revsLimit) {
// const req3 = await request(`_revs_limit`, "PUT", parseInt(revsLimit));
// if (req3.status == 200) {
// this._info(`Restored remote database _revs_limit to ${revsLimit}.`);
// } else {
// this._notice(
// `Failed to restore remote database _revs_limit. Status: ${req3.status} / ${req3.text}`
// );
// }
// }
// }
// }
async gcv3() {
if (!this.isAvailable()) return;
const replicator = this.core.replicator as LiveSyncCouchDBReplicator;