mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-06-27 08:33:57 +00:00
Challenge: Make all modules testable, mockable and spied on!
This commit is contained in:
Vendored
+1
@@ -37,6 +37,7 @@ export declare class LiveSyncBaseCore<T extends ServiceContext = ServiceContext,
|
||||
*/
|
||||
_services: InjectableServiceHub<T> | undefined;
|
||||
get services(): InjectableServiceHub<T>;
|
||||
get context(): T;
|
||||
/**
|
||||
* Service Modules
|
||||
*/
|
||||
|
||||
Vendored
+1
-1
@@ -1,6 +1,6 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type PluginManifest, TFile } from "@/deps.ts";
|
||||
import type { PluginManifest, TFile } from "@/deps.ts";
|
||||
import { type DatabaseEntry, type EntryBody, type FilePath } from "@lib/common/types.ts";
|
||||
export type { CacheData, FileEventItem } from "@lib/common/types.ts";
|
||||
export interface PluginDataEntry extends DatabaseEntry {
|
||||
|
||||
-147
@@ -1,147 +0,0 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type PluginManifest } from "@/deps.ts";
|
||||
import type { EntryDoc, LoadedEntry, FilePathWithPrefix, FilePath, AnyEntry } from "@lib/common/types.ts";
|
||||
import { LiveSyncCommands } from "@/features/LiveSyncCommands.ts";
|
||||
import { PeriodicProcessor } from "@/common/PeriodicProcessor.ts";
|
||||
import { QueueProcessor } from "octagonal-wheels/concurrency/processor";
|
||||
import type ObsidianLiveSyncPlugin from "@/main.ts";
|
||||
import { PluginDialogModal } from "./PluginDialogModal.ts";
|
||||
import type { InjectableServiceHub } from "@lib/services/InjectableServices.ts";
|
||||
import type { LiveSyncCore } from "@/main.ts";
|
||||
declare global {
|
||||
interface OPTIONAL_SYNC_FEATURES {
|
||||
DISABLE: "DISABLE";
|
||||
CUSTOMIZE: "CUSTOMIZE";
|
||||
DISABLE_CUSTOM: "DISABLE_CUSTOM";
|
||||
}
|
||||
}
|
||||
export declare const pluginList: import("svelte/store").Writable<PluginDataExDisplay[]>;
|
||||
export declare const pluginIsEnumerating: import("svelte/store").Writable<boolean>;
|
||||
export declare const pluginV2Progress: import("svelte/store").Writable<number>;
|
||||
export type PluginDataExFile = {
|
||||
filename: string;
|
||||
data: string[];
|
||||
mtime: number;
|
||||
size: number;
|
||||
version?: string;
|
||||
hash?: string;
|
||||
displayName?: string;
|
||||
};
|
||||
export interface IPluginDataExDisplay {
|
||||
documentPath: FilePathWithPrefix;
|
||||
category: string;
|
||||
name: string;
|
||||
term: string;
|
||||
displayName?: string;
|
||||
files: (LoadedEntryPluginDataExFile | PluginDataExFile)[];
|
||||
version?: string;
|
||||
mtime: number;
|
||||
}
|
||||
export type PluginDataExDisplay = {
|
||||
documentPath: FilePathWithPrefix;
|
||||
category: string;
|
||||
name: string;
|
||||
term: string;
|
||||
displayName?: string;
|
||||
files: PluginDataExFile[];
|
||||
version?: string;
|
||||
mtime: number;
|
||||
};
|
||||
type LoadedEntryPluginDataExFile = LoadedEntry & PluginDataExFile;
|
||||
export declare const pluginManifests: Map<string, PluginManifest>;
|
||||
export declare const pluginManifestStore: import("svelte/store").Writable<Map<string, PluginManifest>>;
|
||||
export declare class PluginDataExDisplayV2 {
|
||||
documentPath: FilePathWithPrefix;
|
||||
category: string;
|
||||
term: string;
|
||||
files: LoadedEntryPluginDataExFile[];
|
||||
name: string;
|
||||
confKey: string;
|
||||
constructor(data: IPluginDataExDisplay);
|
||||
setFile(file: LoadedEntryPluginDataExFile): Promise<void>;
|
||||
deleteFile(filename: string): void;
|
||||
_displayName: string | undefined;
|
||||
_version: string | undefined;
|
||||
applyLoadedManifest(): void;
|
||||
get displayName(): string;
|
||||
get version(): string | undefined;
|
||||
get mtime(): number;
|
||||
}
|
||||
export type PluginDataEx = {
|
||||
documentPath?: FilePathWithPrefix;
|
||||
category: string;
|
||||
name: string;
|
||||
displayName?: string;
|
||||
term: string;
|
||||
files: PluginDataExFile[];
|
||||
version?: string;
|
||||
mtime: number;
|
||||
};
|
||||
export declare class ConfigSync extends LiveSyncCommands {
|
||||
constructor(plugin: ObsidianLiveSyncPlugin, core: LiveSyncCore);
|
||||
get configDir(): string;
|
||||
get kvDB(): import("../../lib/src/interfaces/KeyValueDatabase.ts").KeyValueDatabase;
|
||||
get useV2(): boolean;
|
||||
get useSyncPluginEtc(): boolean;
|
||||
isThisModuleEnabled(): boolean;
|
||||
pluginDialog?: PluginDialogModal;
|
||||
periodicPluginSweepProcessor: PeriodicProcessor;
|
||||
pluginList: IPluginDataExDisplay[];
|
||||
showPluginSyncModal(): void;
|
||||
hidePluginSyncModal(): void;
|
||||
onunload(): void;
|
||||
addRibbonIcon: (icon: string, title: string, callback: (evt: MouseEvent) => unknown) => HTMLElement;
|
||||
onload(): void;
|
||||
getFileCategory(filePath: string): "CONFIG" | "THEME" | "SNIPPET" | "PLUGIN_MAIN" | "PLUGIN_ETC" | "PLUGIN_DATA" | "";
|
||||
isTargetPath(filePath: string): boolean;
|
||||
private _everyOnDatabaseInitialized;
|
||||
_everyBeforeReplicate(showNotice: boolean): Promise<boolean>;
|
||||
_everyOnResumeProcess(): Promise<boolean>;
|
||||
_everyAfterResumeProcess(): Promise<boolean>;
|
||||
reloadPluginList(showMessage: boolean): Promise<void>;
|
||||
loadPluginData(path: FilePathWithPrefix): Promise<PluginDataExDisplay | false>;
|
||||
pluginScanProcessor: QueueProcessor<AnyEntry, never>;
|
||||
pluginScanProcessorV2: QueueProcessor<AnyEntry, never>;
|
||||
filenameToUnifiedKey(path: string, termOverRide?: string): FilePathWithPrefix;
|
||||
filenameWithUnifiedKey(path: string, termOverRide?: string): FilePathWithPrefix;
|
||||
unifiedKeyPrefixOfTerminal(termOverRide?: string): FilePathWithPrefix;
|
||||
parseUnifiedPath(unifiedPath: FilePathWithPrefix): {
|
||||
category: string;
|
||||
device: string;
|
||||
key: string;
|
||||
filename: string;
|
||||
pathV1: FilePathWithPrefix;
|
||||
};
|
||||
loadedManifest_mTime: Map<string, number>;
|
||||
createPluginDataExFileV2(unifiedPathV2: FilePathWithPrefix, loaded?: LoadedEntry): Promise<false | LoadedEntryPluginDataExFile>;
|
||||
createPluginDataFromV2(unifiedPathV2: FilePathWithPrefix): PluginDataExDisplayV2 | undefined;
|
||||
updatingV2Count: number;
|
||||
updatePluginListV2(showMessage: boolean, unifiedFilenameWithKey: FilePathWithPrefix): Promise<void>;
|
||||
migrateV1ToV2(showMessage: boolean, entry: AnyEntry): Promise<void>;
|
||||
updatePluginList(showMessage: boolean, updatedDocumentPath?: FilePathWithPrefix): Promise<void>;
|
||||
compareUsingDisplayData(dataA: IPluginDataExDisplay, dataB: IPluginDataExDisplay, compareEach?: boolean): Promise<boolean>;
|
||||
applyDataV2(data: PluginDataExDisplayV2, content?: string): Promise<boolean>;
|
||||
applyData(data: IPluginDataExDisplay, content?: string): Promise<boolean>;
|
||||
deleteData(data: PluginDataEx): Promise<boolean>;
|
||||
_anyModuleParsedReplicationResultItem(docs: PouchDB.Core.ExistingDocument<EntryDoc>): Promise<boolean>;
|
||||
_everyRealizeSettingSyncMode(): Promise<boolean>;
|
||||
recentProcessedInternalFiles: string[];
|
||||
makeEntryFromFile(path: FilePath): Promise<false | PluginDataExFile>;
|
||||
storeCustomisationFileV2(path: FilePath, term: string, force?: boolean): Promise<boolean | PouchDB.Core.Response | undefined>;
|
||||
storeCustomizationFiles(path: FilePath, termOverRide?: string): Promise<boolean | PouchDB.Core.Response | undefined>;
|
||||
_anyProcessOptionalFileEvent(path: FilePath): Promise<boolean>;
|
||||
watchVaultRawEventsAsync(path: FilePath): Promise<boolean>;
|
||||
scanAllConfigFiles(showMessage: boolean): Promise<void>;
|
||||
deleteConfigOnDatabase(prefixedFileName: FilePathWithPrefix, forceWrite?: boolean): Promise<boolean>;
|
||||
scanInternalFiles(): Promise<FilePath[]>;
|
||||
private _allAskUsingOptionalSyncFeature;
|
||||
private __askHiddenFileConfiguration;
|
||||
_anyGetOptionalConflictCheckMethod(path: FilePathWithPrefix): Promise<boolean | "newer">;
|
||||
private _allSuspendExtraSync;
|
||||
private _allConfigureOptionalSyncFeature;
|
||||
configureHiddenFileSync(mode: keyof OPTIONAL_SYNC_FEATURES): Promise<void>;
|
||||
getFiles(path: string, lastDepth: number): Promise<string[]>;
|
||||
onBindFunction(core: LiveSyncCore, services: InjectableServiceHub): void;
|
||||
}
|
||||
export {};
|
||||
@@ -1,59 +0,0 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type DocumentID, type EntryDoc, type EntryLeaf } from "@lib/common/types";
|
||||
import { LiveSyncCommands } from "@/features/LiveSyncCommands";
|
||||
type ChunkID = DocumentID;
|
||||
type NoteDocumentID = DocumentID;
|
||||
type Rev = string;
|
||||
type ChunkUsageMap = Map<NoteDocumentID, Map<Rev, Set<ChunkID>>>;
|
||||
export declare class LocalDatabaseMaintenance extends LiveSyncCommands {
|
||||
onunload(): void;
|
||||
onload(): void | Promise<void>;
|
||||
allChunks(includeDeleted?: boolean): Promise<{
|
||||
used: Set<string>;
|
||||
existing: Map<string, EntryLeaf>;
|
||||
}>;
|
||||
get database(): PouchDB.Database<EntryDoc>;
|
||||
clearHash(): void;
|
||||
confirm(title: string, message: string, affirmative?: string, negative?: string): Promise<boolean>;
|
||||
isAvailable(): boolean;
|
||||
/**
|
||||
* Resurrect deleted chunks that are still used in the database.
|
||||
*/
|
||||
resurrectChunks(): Promise<void>;
|
||||
/**
|
||||
* Commit deletion of files that are marked as deleted.
|
||||
* This method makes the deletion permanent, and the files will not be recovered.
|
||||
* After this, chunks that are used in the deleted files become ready for compaction.
|
||||
*/
|
||||
commitFileDeletion(): Promise<void>;
|
||||
/**
|
||||
* Commit deletion of chunks that are not used in the database.
|
||||
* This method makes the deletion permanent, and the chunks will not be recovered if the database run compaction.
|
||||
* After this, the database can shrink the database size by compaction.
|
||||
* It is recommended to compact the database after this operation (History should be kept once before compaction).
|
||||
*/
|
||||
commitChunkDeletion(): Promise<void>;
|
||||
/**
|
||||
* Compact the database.
|
||||
* This method removes all deleted chunks that are not used in the database.
|
||||
* Make sure all devices are synchronized before running this method.
|
||||
*/
|
||||
markUnusedChunks(): Promise<void>;
|
||||
removeUnusedChunks(): Promise<void>;
|
||||
scanUnusedChunks(): Promise<{
|
||||
chunkSet: Set<DocumentID>;
|
||||
chunkUsageMap: ChunkUsageMap;
|
||||
unusedSet: Set<DocumentID>;
|
||||
}>;
|
||||
/**
|
||||
* Track changes in the database and update the chunk usage map for garbage collection.
|
||||
* Note that this only able to perform without Fetch chunks on demand.
|
||||
*/
|
||||
trackChanges(fromStart?: boolean, showNotice?: boolean): Promise<void>;
|
||||
performGC(showingNotice?: boolean): Promise<void>;
|
||||
analyseDatabase(): Promise<void>;
|
||||
compactDatabase(): Promise<void>;
|
||||
gcv3(): Promise<void>;
|
||||
}
|
||||
export {};
|
||||
Vendored
+3
-4
@@ -1,10 +1,9 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { Plugin, type App, type PluginManifest } from "./deps";
|
||||
import { LiveSyncCommands } from "./features/LiveSyncCommands.ts";
|
||||
import type { ObsidianServiceContext } from "@lib/services/implements/obsidian/ObsidianServiceContext.ts";
|
||||
import { LiveSyncBaseCore } from "./LiveSyncBaseCore.ts";
|
||||
export type LiveSyncCore = LiveSyncBaseCore<ObsidianServiceContext, LiveSyncCommands>;
|
||||
import type { LiveSyncCore } from "./types.ts";
|
||||
export type { LiveSyncCore, NecessaryObsidianFeature, ObsidianServiceFeatureFunction } from "./types.ts";
|
||||
export { createObsidianServiceFeature } from "./types.ts";
|
||||
export default class ObsidianLiveSyncPlugin extends Plugin {
|
||||
core: LiveSyncCore;
|
||||
/**
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { AbstractModule } from "@/modules/AbstractModule.ts";
|
||||
import type { LiveSyncCore } from "@/main.ts";
|
||||
export declare class ModuleMigration extends AbstractModule {
|
||||
migrateUsingDoctor(skipRebuild?: boolean, activateReason?: string, forceRescan?: boolean): Promise<boolean>;
|
||||
migrateDisableBulkSend(): Promise<void>;
|
||||
initialMessage(): Promise<boolean>;
|
||||
askAgainForSetupURI(): Promise<boolean>;
|
||||
hasIncompleteDocs(force?: boolean): Promise<boolean>;
|
||||
hasCompromisedChunks(): Promise<boolean>;
|
||||
_everyOnFirstInitialize(): Promise<boolean>;
|
||||
_everyOnLayoutReady(): Promise<boolean>;
|
||||
onBindFunction(core: LiveSyncCore, services: typeof core.services): void;
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { AbstractObsidianModule } from "@/modules/AbstractObsidianModule.ts";
|
||||
import type { TFile } from "@/deps.ts";
|
||||
import { type ReactiveSource } from "octagonal-wheels/dataobject/reactive";
|
||||
import type { LiveSyncCore } from "@/main.ts";
|
||||
export declare class ModuleObsidianEvents extends AbstractObsidianModule {
|
||||
_everyOnloadStart(): Promise<boolean>;
|
||||
__performAppReload(): void;
|
||||
initialCallback: (() => void) | undefined;
|
||||
swapSaveCommand(): void;
|
||||
registerWatchEvents(): void;
|
||||
hasFocus: boolean;
|
||||
isLastHidden: boolean;
|
||||
setHasFocus(hasFocus: boolean): void;
|
||||
watchWindowVisibility(): void;
|
||||
watchOnline(): void;
|
||||
watchOnlineAsync(): Promise<void>;
|
||||
watchWindowVisibilityAsync(): Promise<void>;
|
||||
watchWorkspaceOpen(file: TFile | null): void;
|
||||
watchWorkspaceOpenAsync(file: TFile): Promise<void>;
|
||||
_everyOnLayoutReady(): Promise<boolean>;
|
||||
private _askReload;
|
||||
_totalProcessingCount?: ReactiveSource<number>;
|
||||
private _scheduleAppReload;
|
||||
_isReloadingScheduled(): boolean;
|
||||
onBindFunction(core: LiveSyncCore, services: typeof core.services): void;
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { LiveSyncCore } from "@/main.ts";
|
||||
import { AbstractModule } from "@/modules/AbstractModule.ts";
|
||||
export declare class ModuleObsidianMenu extends AbstractModule {
|
||||
_everyOnloadStart(): Promise<boolean>;
|
||||
onBindFunction(core: LiveSyncCore, services: typeof core.services): void;
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
export type { ModuleDev } from "../../serviceFeatures/devFeature/types.ts";
|
||||
@@ -0,0 +1,26 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { ItemView, WorkspaceLeaf } from "@/deps.ts";
|
||||
import TestPaneComponent from "./TestPane.svelte";
|
||||
import type ObsidianLiveSyncPlugin from "@/main.ts";
|
||||
import type { ModuleDev } from "@/modules/extras/ModuleDev.ts";
|
||||
export declare const VIEW_TYPE_TEST = "ols-pane-test";
|
||||
declare global {
|
||||
interface LSEvents {
|
||||
"debug-sync-status": string[];
|
||||
}
|
||||
}
|
||||
export declare class TestPaneView extends ItemView {
|
||||
component?: TestPaneComponent;
|
||||
plugin: ObsidianLiveSyncPlugin;
|
||||
moduleDev: ModuleDev;
|
||||
icon: string;
|
||||
title: string;
|
||||
navigation: boolean;
|
||||
getIcon(): string;
|
||||
constructor(leaf: WorkspaceLeaf, plugin: ObsidianLiveSyncPlugin, moduleDev: ModuleDev);
|
||||
getViewType(): string;
|
||||
getDisplayText(): string;
|
||||
onOpen(): Promise<void>;
|
||||
onClose(): Promise<void>;
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { AbstractObsidianModule } from "@/modules/AbstractObsidianModule.ts";
|
||||
export declare class ModuleObsidianGlobalHistory extends AbstractObsidianModule {
|
||||
_everyOnloadStart(): Promise<boolean>;
|
||||
showGlobalHistory(): void;
|
||||
onBindFunction(core: typeof this.core, services: typeof core.services): void;
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type FilePathWithPrefix, type diff_result } from "@lib/common/types.ts";
|
||||
import { AbstractObsidianModule } from "@/modules/AbstractObsidianModule.ts";
|
||||
import type { LiveSyncCore } from "@/main.ts";
|
||||
export declare class ModuleInteractiveConflictResolver extends AbstractObsidianModule {
|
||||
_everyOnloadStart(): Promise<boolean>;
|
||||
_anyResolveConflictByUI(filename: FilePathWithPrefix, conflictCheckResult: diff_result): Promise<boolean>;
|
||||
allConflictCheck(): Promise<void>;
|
||||
pickFileForResolve(): Promise<boolean>;
|
||||
_allScanStat(): Promise<boolean>;
|
||||
onBindFunction(core: LiveSyncCore, services: typeof core.services): void;
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type TFile } from "@/deps.ts";
|
||||
import type { FilePathWithPrefix, DocumentID } from "@lib/common/types.ts";
|
||||
import { AbstractObsidianModule } from "@/modules/AbstractObsidianModule.ts";
|
||||
export declare class ModuleObsidianDocumentHistory extends AbstractObsidianModule {
|
||||
_everyOnloadStart(): Promise<boolean>;
|
||||
showHistory(file: TFile | FilePathWithPrefix, id?: DocumentID): void;
|
||||
fileHistory(): Promise<void>;
|
||||
onBindFunction(core: typeof this.core, services: typeof core.services): void;
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type ObsidianLiveSyncSettings } from "@lib/common/types";
|
||||
import { AbstractModule } from "@/modules/AbstractModule.ts";
|
||||
import type { ServiceContext } from "@lib/services/base/ServiceBase.ts";
|
||||
import type { InjectableServiceHub } from "@lib/services/InjectableServices.ts";
|
||||
import type { LiveSyncCore } from "@/main.ts";
|
||||
export declare class ModuleObsidianSettingsAsMarkdown extends AbstractModule {
|
||||
_everyOnloadStart(): Promise<boolean>;
|
||||
extractSettingFromWholeText(data: string): {
|
||||
preamble: string;
|
||||
body: string;
|
||||
postscript: string;
|
||||
};
|
||||
parseSettingFromMarkdown(filename: string, data?: string): Promise<{
|
||||
preamble: string;
|
||||
body: string;
|
||||
postscript: string;
|
||||
}>;
|
||||
checkAndApplySettingFromMarkdown(filename: string, automated?: boolean): Promise<void>;
|
||||
generateSettingForMarkdown(settings?: ObsidianLiveSyncSettings, keepCredential?: boolean): Partial<ObsidianLiveSyncSettings>;
|
||||
saveSettingToMarkdown(filename: string): Promise<void>;
|
||||
onBindFunction(core: LiveSyncCore, services: InjectableServiceHub<ServiceContext>): void;
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { ObsidianLiveSyncSettingTab } from "./SettingDialogue/ObsidianLiveSyncSettingTab.ts";
|
||||
import { AbstractObsidianModule } from "@/modules/AbstractObsidianModule.ts";
|
||||
import type { LiveSyncCore } from "@/main.ts";
|
||||
export declare class ModuleObsidianSettingDialogue extends AbstractObsidianModule {
|
||||
settingTab: ObsidianLiveSyncSettingTab;
|
||||
_everyOnloadStart(): Promise<boolean>;
|
||||
openSetting(): void;
|
||||
get appId(): string;
|
||||
onBindFunction(core: LiveSyncCore, services: typeof core.services): void;
|
||||
}
|
||||
+1
-119
@@ -1,121 +1,3 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type ObsidianLiveSyncSettings } from "@lib/common/types.ts";
|
||||
import { AbstractModule } from "@/modules/AbstractModule.ts";
|
||||
/**
|
||||
* User modes for onboarding and setup
|
||||
*/
|
||||
export declare const enum UserMode {
|
||||
/**
|
||||
* New User Mode - for users who are new to the plugin
|
||||
*/
|
||||
NewUser = "new-user",
|
||||
/**
|
||||
* Existing User Mode - for users who have used the plugin before, or just configuring again
|
||||
*/
|
||||
ExistingUser = "existing-user",
|
||||
/**
|
||||
* Unknown User Mode - for cases where the user mode is not determined
|
||||
*/
|
||||
Unknown = "unknown",
|
||||
/**
|
||||
* Update User Mode - for users who are updating configuration. May be `existing-user` as well, but possibly they want to treat it differently.
|
||||
*/
|
||||
Update = "unknown" // eslint-disable-line @typescript-eslint/no-duplicate-enum-values -- Duplicate enum value
|
||||
}
|
||||
/**
|
||||
* Setup Manager to handle onboarding and configuration setup
|
||||
*/
|
||||
export declare class SetupManager extends AbstractModule {
|
||||
get dialogManager(): import("../../lib/src/UI/svelteDialog.ts").SvelteDialogManagerBase<import("../../lib/src/services/base/ServiceBase.ts").ServiceContext>;
|
||||
/**
|
||||
* Starts the onboarding process
|
||||
* @returns Promise that resolves to true if onboarding completed successfully, false otherwise
|
||||
*/
|
||||
startOnBoarding(): Promise<boolean>;
|
||||
/**
|
||||
* Handles the onboarding process based on user mode
|
||||
* @param userMode
|
||||
* @returns Promise that resolves to true if onboarding completed successfully, false otherwise
|
||||
*/
|
||||
onOnboard(userMode: UserMode): Promise<boolean>;
|
||||
/**
|
||||
* Handles setup using a setup URI
|
||||
* @param userMode
|
||||
* @param setupURI
|
||||
* @returns Promise that resolves to true if onboarding completed successfully, false otherwise
|
||||
*/
|
||||
onUseSetupURI(userMode: UserMode, setupURI?: string): Promise<boolean>;
|
||||
/**
|
||||
* Handles manual setup for CouchDB
|
||||
* @param userMode
|
||||
* @param currentSetting
|
||||
* @param activate Whether to activate the CouchDB as remote type
|
||||
* @returns Promise that resolves to true if setup completed successfully, false otherwise
|
||||
*/
|
||||
onCouchDBManualSetup(userMode: UserMode, currentSetting: ObsidianLiveSyncSettings, activate?: boolean): Promise<boolean>;
|
||||
/**
|
||||
* Handles manual setup for S3-compatible bucket
|
||||
* @param userMode
|
||||
* @param currentSetting
|
||||
* @param activate Whether to activate the Bucket as remote type
|
||||
* @returns Promise that resolves to true if setup completed successfully, false otherwise
|
||||
*/
|
||||
onBucketManualSetup(userMode: UserMode, currentSetting: ObsidianLiveSyncSettings, activate?: boolean): Promise<boolean>;
|
||||
/**
|
||||
* Handles manual setup for P2P
|
||||
* @param userMode
|
||||
* @param currentSetting
|
||||
* @param activate Whether to activate the P2P as remote type (as P2P Only setup)
|
||||
* @returns Promise that resolves to true if setup completed successfully, false otherwise
|
||||
*/
|
||||
onP2PManualSetup(userMode: UserMode, currentSetting: ObsidianLiveSyncSettings, activate?: boolean): Promise<boolean>;
|
||||
/**
|
||||
* Handles only E2EE configuration
|
||||
* @param userMode
|
||||
* @param currentSetting
|
||||
* @returns
|
||||
*/
|
||||
onlyE2EEConfiguration(userMode: UserMode, currentSetting: ObsidianLiveSyncSettings): Promise<boolean>;
|
||||
/**
|
||||
* Handles manual configuration flow (E2EE + select server)
|
||||
* @param originalSetting
|
||||
* @param userMode
|
||||
* @returns
|
||||
*/
|
||||
onConfigureManually(originalSetting: ObsidianLiveSyncSettings, userMode: UserMode): Promise<boolean>;
|
||||
/**
|
||||
* Handles server selection during manual configuration
|
||||
* @param currentSetting
|
||||
* @param userMode
|
||||
* @returns
|
||||
*/
|
||||
onSelectServer(currentSetting: ObsidianLiveSyncSettings, userMode: UserMode): Promise<boolean>;
|
||||
/**
|
||||
* Confirms and applies settings obtained from the wizard
|
||||
* @param newConf
|
||||
* @param _userMode
|
||||
* @param activate Whether to activate the remote type in the new settings
|
||||
* @param extra Extra function to run before applying settings
|
||||
* @returns Promise that resolves to true if settings applied successfully, false otherwise
|
||||
*/
|
||||
onConfirmApplySettingsFromWizard(newConf: ObsidianLiveSyncSettings, _userMode: UserMode, activate?: boolean, extra?: () => void): Promise<boolean>;
|
||||
/**
|
||||
* Prompts the user with QR code scanning instructions
|
||||
* @returns Promise that resolves to false as QR code instruction dialog does not yield settings directly
|
||||
*/
|
||||
onPromptQRCodeInstruction(): Promise<boolean>;
|
||||
/**
|
||||
* Decodes settings from a QR code string and applies them
|
||||
* @param qr QR code string containing encoded settings
|
||||
* @returns Promise that resolves to true if settings applied successfully, false otherwise
|
||||
*/
|
||||
decodeQR(qr: string): Promise<boolean>;
|
||||
/**
|
||||
* Applies the new settings to the core settings and saves them
|
||||
* @param newConf
|
||||
* @param userMode
|
||||
* @returns Promise that resolves to true if settings applied successfully, false otherwise
|
||||
*/
|
||||
applySetting(newConf: ObsidianLiveSyncSettings, userMode: UserMode): Promise<boolean>;
|
||||
}
|
||||
export { UserMode, getSetupManager, type SetupManagerAPI as SetupManager, } from "@/serviceFeatures/setupManager/index.ts";
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { ConfigSyncHost } from "./types.ts";
|
||||
/**
|
||||
* Registers commands, ribbon icons, and custom SVG icons for configuration synchronisation.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param handlers - Action triggers.
|
||||
*/
|
||||
export declare function registerConfigSyncCommands(host: ConfigSyncHost, handlers: {
|
||||
showPluginSyncModal: () => void;
|
||||
}): void;
|
||||
@@ -0,0 +1,27 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils";
|
||||
import type { FilePath } from "@lib/common/types.ts";
|
||||
import type { ConfigSyncHost } from "./types.ts";
|
||||
import type { ConfigSyncState } from "./state.ts";
|
||||
/**
|
||||
* Binds all required events for configuration synchronisation onto the application lifecycle and replicator.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The configuration sync state.
|
||||
* @param handlers - Event response triggers.
|
||||
*/
|
||||
export declare function bindConfigSyncEvents(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState, handlers: {
|
||||
showPluginSyncModal: () => void;
|
||||
watchVaultRawEventsAsync: (path: FilePath) => Promise<boolean>;
|
||||
}): void;
|
||||
/**
|
||||
* Configures the customisation synchronisation status.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The configuration sync state.
|
||||
* @param mode - The sync activation mode option.
|
||||
*/
|
||||
export declare function configureHiddenFileSync(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState, mode: "DISABLE" | "CUSTOMIZE" | "DISABLE_CUSTOM"): Promise<void>;
|
||||
@@ -0,0 +1,8 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { ConfigSyncServices, ConfigSyncModules } from "./types.ts";
|
||||
/**
|
||||
* A service feature hook that initialises and manages the configuration synchronisation module.
|
||||
* This sets up the scanning processors, watches for local/remote config changes, and binds UI dialogues.
|
||||
*/
|
||||
export declare const useConfigSync: import("@/types.ts").ObsidianServiceFeatureFunction<ConfigSyncServices, ConfigSyncModules, "plugin" | "app" | "liveSyncPlugin", void>;
|
||||
@@ -0,0 +1,128 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils";
|
||||
import type { FilePath, FilePathWithPrefix, LoadedEntry, AnyEntry } from "@lib/common/types.ts";
|
||||
import { QueueProcessor } from "octagonal-wheels/concurrency/processor";
|
||||
import type { ConfigSyncHost, IPluginDataExDisplay, PluginDataExDisplay, LoadedEntryPluginDataExFile, PluginDataExFile } from "./types.ts";
|
||||
import type { ConfigSyncState } from "./state.ts";
|
||||
/**
|
||||
* Class representing plugin configuration metadata and display structures for V2 synchronisation.
|
||||
*/
|
||||
export declare class PluginDataExDisplayV2 {
|
||||
documentPath: FilePathWithPrefix;
|
||||
category: string;
|
||||
term: string;
|
||||
files: LoadedEntryPluginDataExFile[];
|
||||
name: string;
|
||||
confKey: string;
|
||||
constructor(data: IPluginDataExDisplay);
|
||||
setFile(file: LoadedEntryPluginDataExFile): Promise<void>;
|
||||
deleteFile(filename: string): void;
|
||||
_displayName: string | undefined;
|
||||
_version: string | undefined;
|
||||
applyLoadedManifest(): void;
|
||||
get displayName(): string;
|
||||
get version(): string | undefined;
|
||||
get mtime(): number;
|
||||
}
|
||||
/**
|
||||
* Reloads the plugin list by clearing the cache and executing updates.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The configuration sync state.
|
||||
* @param showMessage - Whether to display progress messages.
|
||||
*/
|
||||
export declare function reloadPluginList(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState, showMessage: boolean): Promise<void>;
|
||||
/**
|
||||
* Loads plugin configuration data from the database.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param path - The database document path.
|
||||
* @returns Deserialised plugin display details, or false if not found.
|
||||
*/
|
||||
export declare function loadPluginData(host: ConfigSyncHost, log: LogFunction, path: FilePathWithPrefix): Promise<PluginDataExDisplay | false>;
|
||||
/**
|
||||
* Creates a V2 plugin metadata descriptor from the unified path.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param unifiedPathV2 - V2 unified path database key.
|
||||
* @returns Initialised plugin display descriptor.
|
||||
*/
|
||||
export declare function createPluginDataFromV2(host: ConfigSyncHost, unifiedPathV2: FilePathWithPrefix): PluginDataExDisplayV2 | undefined;
|
||||
/**
|
||||
* Creates a file entry structure from a V2 unified database document.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The configuration sync state.
|
||||
* @param unifiedPathV2 - V2 unified path database key.
|
||||
* @param loaded - Pre-fetched database document, if available.
|
||||
* @returns The V2 file descriptor.
|
||||
*/
|
||||
export declare function createPluginDataExFileV2(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState, unifiedPathV2: FilePathWithPrefix, loaded?: LoadedEntry): Promise<false | LoadedEntryPluginDataExFile>;
|
||||
/**
|
||||
* Updates the plugin display list for a V2 unified document path.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The configuration sync state.
|
||||
* @param showMessage - Whether to show notifications.
|
||||
* @param unifiedFilenameWithKey - Unified database document path.
|
||||
*/
|
||||
export declare function updatePluginListV2(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState, showMessage: boolean, unifiedFilenameWithKey: FilePathWithPrefix): Promise<void>;
|
||||
/**
|
||||
* Scans the database and updates the active configuration items list.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The configuration sync state.
|
||||
* @param showMessage - Whether to show progress messages.
|
||||
* @param updatedDocumentPath - Optional target document path to narrow update.
|
||||
*/
|
||||
export declare function updatePluginList(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState, showMessage: boolean, updatedDocumentPath?: FilePathWithPrefix): Promise<void>;
|
||||
/**
|
||||
* Migrates configuration sync structure V1 (single monolithic metadata doc) to V2 (split documents).
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param showMessage - Whether to show progress logs in UI.
|
||||
* @param entry - The database entry to migrate.
|
||||
*/
|
||||
export declare function migrateV1ToV2(host: ConfigSyncHost, log: LogFunction, showMessage: boolean, entry: AnyEntry): Promise<void>;
|
||||
/**
|
||||
* Helper to recursively list files in Obsidian storage up to a given depth.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param path - The folder path.
|
||||
* @param lastDepth - Remaining depth levels to traverse.
|
||||
* @returns Array of file paths found.
|
||||
*/
|
||||
export declare function getFiles(host: ConfigSyncHost, log: LogFunction, path: string, lastDepth: number): Promise<string[]>;
|
||||
/**
|
||||
* Scans internal configuration files in Obsidian storage config folder.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @returns Array of configuration file paths.
|
||||
*/
|
||||
export declare function scanInternalFiles(host: ConfigSyncHost, log: LogFunction): Promise<FilePath[]>;
|
||||
/**
|
||||
* Creates a file details entry from a local storage file.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param path - Local file path.
|
||||
* @returns File descriptor details, or false if stat fails.
|
||||
*/
|
||||
export declare function makeEntryFromFile(host: ConfigSyncHost, log: LogFunction, path: FilePath): Promise<false | PluginDataExFile>;
|
||||
/**
|
||||
* Creates a QueueProcessor for scanning V1 plugins.
|
||||
*/
|
||||
export declare function createPluginScanProcessor(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState): QueueProcessor<AnyEntry, never>;
|
||||
/**
|
||||
* Creates a QueueProcessor for scanning V2 plugins.
|
||||
*/
|
||||
export declare function createPluginScanProcessorV2(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState): QueueProcessor<AnyEntry, never>;
|
||||
@@ -0,0 +1,30 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { PeriodicProcessor } from "@/common/PeriodicProcessor.ts";
|
||||
import { QueueProcessor } from "octagonal-wheels/concurrency/processor";
|
||||
import type { PluginDialogModal } from "@/features/ConfigSync/PluginDialogModal.ts";
|
||||
import type { IPluginDataExDisplay } from "./types.ts";
|
||||
/**
|
||||
* Represents the runtime state of the configuration synchronisation feature.
|
||||
* This state is scoped to the feature lifecycle, containing active processors,
|
||||
* cached metadata, and UI dialogues.
|
||||
*/
|
||||
export interface ConfigSyncState {
|
||||
pluginList: IPluginDataExDisplay[];
|
||||
pluginDialog: PluginDialogModal | undefined;
|
||||
periodicPluginSweepProcessor: PeriodicProcessor | undefined;
|
||||
conflictResolutionProcessor: QueueProcessor<any, any> | undefined; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration
|
||||
loadedManifest_mTime: Map<string, number>;
|
||||
updatingV2Count: number;
|
||||
updatePluginListV2Task: (() => void) | undefined;
|
||||
pluginScanProcessor: QueueProcessor<any, any> | undefined; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration
|
||||
pluginScanProcessorV2: QueueProcessor<any, any> | undefined; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration
|
||||
recentProcessedInternalFiles: string[];
|
||||
}
|
||||
/**
|
||||
* Creates and initialises a new configuration synchronisation state object
|
||||
* with default values.
|
||||
*
|
||||
* @returns A freshly initialised {@link ConfigSyncState} object.
|
||||
*/
|
||||
export declare function createConfigSyncState(): ConfigSyncState;
|
||||
@@ -0,0 +1,32 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { PluginManifest } from "@/deps.ts";
|
||||
import type { PluginDataExDisplay } from "./types.ts";
|
||||
/**
|
||||
* A Svelte store holding the list of plug-ins and their synchronisation details for UI display.
|
||||
*/
|
||||
export declare const pluginList: import("svelte/store").Writable<PluginDataExDisplay[]>;
|
||||
/**
|
||||
* A Svelte store indicating whether the plug-in enumeration process is currently running.
|
||||
*/
|
||||
export declare const pluginIsEnumerating: import("svelte/store").Writable<boolean>;
|
||||
/**
|
||||
* A Svelte store representing the progress of version 2 plug-in synchronisation (from 0 to 1).
|
||||
*/
|
||||
export declare const pluginV2Progress: import("svelte/store").Writable<number>;
|
||||
/**
|
||||
* A local map caching plug-in manifests by their identifier keys.
|
||||
*/
|
||||
export declare const pluginManifests: Map<string, PluginManifest>;
|
||||
/**
|
||||
* A Svelte store wrapper around {@link pluginManifests} to notify subscribers of updates.
|
||||
*/
|
||||
export declare const pluginManifestStore: import("svelte/store").Writable<Map<string, PluginManifest>>;
|
||||
/**
|
||||
* Updates a plug-in's manifest inside {@link pluginManifests} and notifies the store subscribers
|
||||
* if the manifest has changed.
|
||||
*
|
||||
* @param key - The plug-in identifier key.
|
||||
* @param manifest - The new plug-in manifest data.
|
||||
*/
|
||||
export declare function setManifest(key: string, manifest: PluginManifest): void;
|
||||
@@ -0,0 +1,111 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils";
|
||||
import type { FilePath, FilePathWithPrefix } from "@lib/common/types.ts";
|
||||
import type { ConfigSyncHost, IPluginDataExDisplay, PluginDataEx } from "./types.ts";
|
||||
import type { ConfigSyncState } from "./state.ts";
|
||||
import { PluginDataExDisplayV2 } from "./pluginScanner.ts";
|
||||
/**
|
||||
* Checks whether the configuration synchronisation module is enabled in settings.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @returns True if enabled, false otherwise.
|
||||
*/
|
||||
export declare function isThisModuleEnabled(host: ConfigSyncHost): boolean;
|
||||
/**
|
||||
* Compares two plugin data sets by displaying a resolve modal dialog.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The configuration sync state.
|
||||
* @param dataA - Left hand configuration item.
|
||||
* @param dataB - Right hand configuration item.
|
||||
* @param compareEach - Whether to compare file by file.
|
||||
* @returns Promise resolving to true if applied successfully, false otherwise.
|
||||
*/
|
||||
export declare function compareUsingDisplayData(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState, dataA: IPluginDataExDisplay, dataB: IPluginDataExDisplay, compareEach?: boolean): Promise<boolean>;
|
||||
/**
|
||||
* Applies customization data for V2 split files.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The configuration sync state.
|
||||
* @param data - The plugin V2 display model.
|
||||
* @param content - Optional specific file content override.
|
||||
* @returns True if applied successfully, false otherwise.
|
||||
*/
|
||||
export declare function applyDataV2(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState, data: PluginDataExDisplayV2, content?: string): Promise<boolean>;
|
||||
/**
|
||||
* Applies configuration data to local storage and updates active systems.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The configuration sync state.
|
||||
* @param data - The configuration display description.
|
||||
* @param content - Optional merged file content.
|
||||
* @returns True if successful, false otherwise.
|
||||
*/
|
||||
export declare function applyData(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState, data: IPluginDataExDisplay, content?: string): Promise<boolean>;
|
||||
/**
|
||||
* Deletes configuration documents from the database and runs status updates.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The configuration sync state.
|
||||
* @param data - The target plugin configurations to clean up.
|
||||
* @returns True if successful, false otherwise.
|
||||
*/
|
||||
export declare function deleteData(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState, data: PluginDataEx): Promise<boolean>;
|
||||
/**
|
||||
* Stores a customization file in V2 database split format.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The configuration sync state.
|
||||
* @param path - Local file path.
|
||||
* @param term - Local terminal name.
|
||||
* @param force - True to bypass change verification checks.
|
||||
* @returns Database operation response structure.
|
||||
*/
|
||||
export declare function storeCustomisationFileV2(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState, path: FilePath, term: string, force?: boolean): Promise<any>; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration
|
||||
/**
|
||||
* Stores local customization files to database records.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The configuration sync state.
|
||||
* @param path - Local file path.
|
||||
* @param termOverRide - Device identifier override.
|
||||
* @returns DB operation response.
|
||||
*/
|
||||
export declare function storeCustomizationFiles(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState, path: FilePath, termOverRide?: string): Promise<any>; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration
|
||||
/**
|
||||
* Marks config file deleted in the database.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The configuration sync state.
|
||||
* @param prefixedFileName - Unified db file path.
|
||||
* @param forceWrite - Force deletion write operation.
|
||||
* @returns True if successfully marked deleted, false otherwise.
|
||||
*/
|
||||
export declare function deleteConfigOnDatabase(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState, prefixedFileName: FilePathWithPrefix, forceWrite?: boolean): Promise<boolean>;
|
||||
/**
|
||||
* Scans all customization config files, comparing local and DB databases.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The configuration sync state.
|
||||
* @param showMessage - True to print progress messages.
|
||||
*/
|
||||
export declare function scanAllConfigFiles(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState, showMessage: boolean): Promise<void>;
|
||||
/**
|
||||
* Monitors and processes Obsidian storage raw file events for synchronisation.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The configuration sync state.
|
||||
* @param path - The modified file path.
|
||||
* @returns True if processed, false otherwise.
|
||||
*/
|
||||
export declare function watchVaultRawEventsAsync(host: ConfigSyncHost, log: LogFunction, state: ConfigSyncState, path: FilePath): Promise<boolean>;
|
||||
@@ -0,0 +1,71 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { NecessaryObsidianServices } from "@/types.ts";
|
||||
import type { FilePathWithPrefix, LoadedEntry } from "@lib/common/types.ts";
|
||||
/**
|
||||
* A union of service keys required by the configuration synchronisation feature.
|
||||
*/
|
||||
export type ConfigSyncServices = "API" | "appLifecycle" | "setting" | "vault" | "path" | "database" | "databaseEvents" | "fileProcessing" | "keyValueDB" | "replication" | "conflict" | "control";
|
||||
/**
|
||||
* A union of service module keys required by the configuration synchronisation feature.
|
||||
*/
|
||||
export type ConfigSyncModules = "storageAccess" | "fileHandler";
|
||||
/**
|
||||
* The host type representing the injected service container with configuration synchronisation capabilities.
|
||||
*/
|
||||
export type ConfigSyncHost = NecessaryObsidianServices<ConfigSyncServices, ConfigSyncModules, "app" | "plugin">;
|
||||
/**
|
||||
* Represents metadata and content structure of an individual file within a plug-in.
|
||||
*/
|
||||
export type PluginDataExFile = {
|
||||
filename: string;
|
||||
data: string[];
|
||||
mtime: number;
|
||||
size: number;
|
||||
version?: string;
|
||||
hash?: string;
|
||||
displayName?: string;
|
||||
};
|
||||
/**
|
||||
* Defines the display properties and structure for a plug-in sync entry used in UI dialogues.
|
||||
*/
|
||||
export interface IPluginDataExDisplay {
|
||||
documentPath: FilePathWithPrefix;
|
||||
category: string;
|
||||
name: string;
|
||||
term: string;
|
||||
displayName?: string;
|
||||
files: (LoadedEntryPluginDataExFile | PluginDataExFile)[];
|
||||
version?: string;
|
||||
mtime: number;
|
||||
}
|
||||
/**
|
||||
* Represents the display model of a plug-in, including its category, file list, and modification time.
|
||||
*/
|
||||
export type PluginDataExDisplay = {
|
||||
documentPath: FilePathWithPrefix;
|
||||
category: string;
|
||||
name: string;
|
||||
term: string;
|
||||
displayName?: string;
|
||||
files: PluginDataExFile[];
|
||||
version?: string;
|
||||
mtime: number;
|
||||
};
|
||||
/**
|
||||
* Combines a database loaded entry with plug-in specific file metadata.
|
||||
*/
|
||||
export type LoadedEntryPluginDataExFile = LoadedEntry & PluginDataExFile;
|
||||
/**
|
||||
* Represents a plug-in's synchronisation schema payload stored in the database.
|
||||
*/
|
||||
export type PluginDataEx = {
|
||||
documentPath?: FilePathWithPrefix;
|
||||
category: string;
|
||||
name: string;
|
||||
displayName?: string;
|
||||
term: string;
|
||||
files: PluginDataExFile[];
|
||||
version?: string;
|
||||
mtime: number;
|
||||
};
|
||||
+130
@@ -0,0 +1,130 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { FilePathWithPrefix } from "@lib/common/types.ts";
|
||||
import type { PluginDataEx } from "./types.ts";
|
||||
/**
|
||||
* A zero-width space character used as a field delimiter in the custom serialisation format.
|
||||
*/
|
||||
export declare const d = "\u200B";
|
||||
/**
|
||||
* A newline character used as a record delimiter in the custom serialisation format.
|
||||
*/
|
||||
export declare const d2 = "\n";
|
||||
/**
|
||||
* Serialises a plugin data structure into a custom compact string format.
|
||||
*
|
||||
* @param data - The plugin data to serialise.
|
||||
* @returns The serialised compact string.
|
||||
*/
|
||||
export declare function serialize(data: PluginDataEx): string;
|
||||
/**
|
||||
* A placeholder header string used to represent the start of the serialised configuration chunk stream.
|
||||
*/
|
||||
export declare const DUMMY_HEAD: string;
|
||||
/**
|
||||
* A placeholder footer string used to represent the end of the serialised configuration chunk stream.
|
||||
*/
|
||||
export declare const DUMMY_END: string;
|
||||
/**
|
||||
* Splits source strings by compact format delimiters.
|
||||
*
|
||||
* @param sources - The source strings to split.
|
||||
* @returns Split string array.
|
||||
*/
|
||||
export declare function splitWithDelimiters(sources: string[]): string[];
|
||||
/**
|
||||
* Creates a tokenizer helper for deserialisation parsing.
|
||||
*
|
||||
* @param source - Split string token sources.
|
||||
* @returns Tokenizer helper object.
|
||||
*/
|
||||
export declare function getTokenizer(source: string[]): {
|
||||
next(): string;
|
||||
nextLine(): void;
|
||||
};
|
||||
/**
|
||||
* Deserialises tokenised array lines into a plugin data structure.
|
||||
*
|
||||
* @param str - The array lines to deserialise.
|
||||
* @returns Deserialised plugin data.
|
||||
*/
|
||||
export declare function deserialize2(str: string[]): PluginDataEx;
|
||||
/**
|
||||
* Deserialises file content string arrays into a target object representation.
|
||||
* Supports compact prefix format, JSON parsing, and YAML fallback.
|
||||
*
|
||||
* @param str - Content string lines.
|
||||
* @param def - Fallback default value.
|
||||
* @returns Deserialised object structure.
|
||||
*/
|
||||
export declare function deserialize<T>(str: string[], def: T): any; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration
|
||||
/**
|
||||
* Maps a configuration category and base path to a vault relative subdirectory.
|
||||
*
|
||||
* @param category - Configuration category.
|
||||
* @param configDir - The main system configuration directory path.
|
||||
* @returns Vault folder suffix path.
|
||||
*/
|
||||
export declare function categoryToFolder(category: string, configDir?: string): string;
|
||||
/**
|
||||
* Resolves local file category based on the system configuration directory.
|
||||
*
|
||||
* @param filePath - Local file path.
|
||||
* @param configDir - Vault system config folder name.
|
||||
* @param useV2 - Whether V2 plugin structure is active.
|
||||
* @param useSyncPluginEtc - Whether custom subfolders under plugins are synchronised.
|
||||
* @returns Category identifier.
|
||||
*/
|
||||
export declare function getFileCategory(filePath: string, configDir: string, useV2: boolean, useSyncPluginEtc: boolean): "CONFIG" | "THEME" | "SNIPPET" | "PLUGIN_MAIN" | "PLUGIN_ETC" | "PLUGIN_DATA" | "";
|
||||
/**
|
||||
* Checks if the file path is a valid customization sync path candidate.
|
||||
*
|
||||
* @param filePath - Target file path.
|
||||
* @param configDir - Vault configuration folder path.
|
||||
* @param useV2 - Whether V2 sync is enabled.
|
||||
* @param useSyncPluginEtc - Whether config files sync is enabled.
|
||||
* @returns True if path is a sync target.
|
||||
*/
|
||||
export declare function isTargetPath(filePath: string, configDir: string, useV2: boolean, useSyncPluginEtc: boolean): boolean;
|
||||
/**
|
||||
* Converts local path into unified database document path.
|
||||
*
|
||||
* @param path - Local file path.
|
||||
* @param term - Active device name.
|
||||
* @param configDir - Vault config directory name.
|
||||
* @param useV2 - Whether V2 is active.
|
||||
* @param useSyncPluginEtc - Whether sync plugin etc is active.
|
||||
* @returns The database path identifier.
|
||||
*/
|
||||
export declare function filenameToUnifiedKey(path: string, term: string, configDir: string, useV2: boolean, useSyncPluginEtc: boolean): FilePathWithPrefix;
|
||||
/**
|
||||
* Converts local path into V2 unified database document path.
|
||||
*
|
||||
* @param path - Local file path.
|
||||
* @param term - Active device name.
|
||||
* @param configDir - Vault config directory name.
|
||||
* @param useV2 - Whether V2 is active.
|
||||
* @param useSyncPluginEtc - Whether sync plugin etc is active.
|
||||
* @returns The database path identifier.
|
||||
*/
|
||||
export declare function filenameWithUnifiedKey(path: string, term: string, configDir: string, useV2: boolean, useSyncPluginEtc: boolean): FilePathWithPrefix;
|
||||
/**
|
||||
* Returns database prefix path filter for a terminal configuration.
|
||||
*
|
||||
* @param term - Active device name.
|
||||
* @returns Database path prefix string.
|
||||
*/
|
||||
export declare function unifiedKeyPrefixOfTerminal(term: string): FilePathWithPrefix;
|
||||
/**
|
||||
* Parses a V2 unified database path into its constituent components.
|
||||
*
|
||||
* @param unifiedPath - Unified path metadata document identifier.
|
||||
* @returns Parsed components.
|
||||
*/
|
||||
export declare function parseUnifiedPath(unifiedPath: FilePathWithPrefix): {
|
||||
category: string;
|
||||
device: string;
|
||||
key: string;
|
||||
filename: string;
|
||||
pathV1: FilePathWithPrefix;
|
||||
};
|
||||
@@ -0,0 +1,11 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils.ts";
|
||||
import type { DatabaseMaintenanceHost } from "./types.ts";
|
||||
/**
|
||||
* Registers commands and event listeners for database maintenance capabilities.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
*/
|
||||
export declare function registerDatabaseMaintenanceCommands(host: DatabaseMaintenanceHost, log: LogFunction): void;
|
||||
@@ -0,0 +1,11 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils.ts";
|
||||
import type { DatabaseMaintenanceHost } from "./types.ts";
|
||||
/**
|
||||
* Commands the remote CouchDB database to perform compaction and monitors its progress.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
*/
|
||||
export declare function compactDatabase(host: DatabaseMaintenanceHost, log: LogFunction): Promise<void>;
|
||||
@@ -0,0 +1,11 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils.ts";
|
||||
import type { DatabaseMaintenanceHost } from "./types.ts";
|
||||
/**
|
||||
* Analyses the database and details chunk utilisation, copying a TSV summary to the clipboard.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
*/
|
||||
export declare function analyseDatabase(host: DatabaseMaintenanceHost, log: LogFunction): Promise<void>;
|
||||
@@ -0,0 +1,80 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type DocumentID } from "@lib/common/types.ts";
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils.ts";
|
||||
import type { DatabaseMaintenanceHost } from "./types.ts";
|
||||
type ChunkID = DocumentID;
|
||||
type NoteDocumentID = DocumentID;
|
||||
type Rev = string;
|
||||
type ChunkUsageMap = Map<NoteDocumentID, Map<Rev, Set<ChunkID>>>;
|
||||
/**
|
||||
* Resurrects deleted chunks that are still referenced and used by files in the database.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
*/
|
||||
export declare function resurrectChunks(host: DatabaseMaintenanceHost, log: LogFunction): Promise<void>;
|
||||
/**
|
||||
* Commits the deletion of files marked as deleted, removing them permanently from the database.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
*/
|
||||
export declare function commitFileDeletion(host: DatabaseMaintenanceHost, log: LogFunction): Promise<void>;
|
||||
/**
|
||||
* Permanently deletes chunks already marked as deleted.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
*/
|
||||
export declare function commitChunkDeletion(host: DatabaseMaintenanceHost, log: LogFunction): Promise<void>;
|
||||
/**
|
||||
* Marks chunks that are not referenced by any files in the database as deleted.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
*/
|
||||
export declare function markUnusedChunks(host: DatabaseMaintenanceHost, log: LogFunction): Promise<void>;
|
||||
/**
|
||||
* Directly removes unused chunks from the local database.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
*/
|
||||
export declare function removeUnusedChunks(host: DatabaseMaintenanceHost, log: LogFunction): Promise<void>;
|
||||
/**
|
||||
* Scans key-value store logs to calculate unused chunks.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @returns Scan summary.
|
||||
*/
|
||||
export declare function scanUnusedChunks(host: DatabaseMaintenanceHost): Promise<{
|
||||
chunkSet: Set<DocumentID>;
|
||||
chunkUsageMap: ChunkUsageMap;
|
||||
unusedSet: Set<DocumentID>;
|
||||
}>;
|
||||
/**
|
||||
* Tracks database changes to maintain the chunk usage map cache.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
* @param fromStart - Whether to force scan from the beginning of sequence.
|
||||
* @param showNotice - Whether to show log notices to user.
|
||||
*/
|
||||
export declare function trackChanges(host: DatabaseMaintenanceHost, log: LogFunction, fromStart?: boolean, showNotice?: boolean): Promise<void>;
|
||||
/**
|
||||
* Perfroms the legacy Garbage Collection process, scanning and removing unreferenced chunks.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
* @param showingNotice - Whether to show log notices to user.
|
||||
*/
|
||||
export declare function performGC(host: DatabaseMaintenanceHost, log: LogFunction, showingNotice?: boolean): Promise<void>;
|
||||
/**
|
||||
* Runs Garbage Collection V3, which validates synchronization progress across connected nodes before deleting.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
*/
|
||||
export declare function gcv3(host: DatabaseMaintenanceHost, log: LogFunction): Promise<void>;
|
||||
export {};
|
||||
@@ -0,0 +1,18 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { DatabaseMaintenanceServices } from "./types.ts";
|
||||
/**
|
||||
* A service feature hook that initialises and manages the database maintenance module.
|
||||
* This registers maintenance commands and provides database compaction, diagnostic, and garbage collection utilities.
|
||||
*/
|
||||
export declare const useDatabaseMaintenance: import("@/types.ts").ObsidianServiceFeatureFunction<DatabaseMaintenanceServices, "storageAccess", "plugin", {
|
||||
gcv3: () => Promise<void>;
|
||||
analyseDatabase: () => Promise<void>;
|
||||
compactDatabase: () => Promise<void>;
|
||||
performGC: (showingNotice?: boolean) => Promise<void>;
|
||||
resurrectChunks: () => Promise<void>;
|
||||
commitFileDeletion: () => Promise<void>;
|
||||
commitChunkDeletion: () => Promise<void>;
|
||||
markUnusedChunks: () => Promise<void>;
|
||||
removeUnusedChunks: () => Promise<void>;
|
||||
}>;
|
||||
@@ -0,0 +1,15 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { NecessaryObsidianServices } from "@/types.ts";
|
||||
/**
|
||||
* A union of service keys required by the database maintenance feature.
|
||||
*/
|
||||
export type DatabaseMaintenanceServices = "API" | "setting" | "UI" | "database" | "keyValueDB" | "replication" | "replicator";
|
||||
/**
|
||||
* A union of service module keys required by the database maintenance feature.
|
||||
*/
|
||||
export type DatabaseMaintenanceModules = "storageAccess";
|
||||
/**
|
||||
* The host type representing the injected service container with database maintenance capabilities.
|
||||
*/
|
||||
export type DatabaseMaintenanceHost = NecessaryObsidianServices<DatabaseMaintenanceServices, DatabaseMaintenanceModules, "plugin">;
|
||||
@@ -0,0 +1,49 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type LOG_LEVEL } from "@lib/common/types.ts";
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils.ts";
|
||||
import type { DatabaseMaintenanceHost } from "./types.ts";
|
||||
/**
|
||||
* Checks if garbage collection can be performed based on plug-in settings.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
* @returns True if garbage collection is available, false otherwise.
|
||||
*/
|
||||
export declare function isGCAvailable(host: DatabaseMaintenanceHost, log: LogFunction): boolean;
|
||||
/**
|
||||
* Shows a confirmation dialogue to the user with customiseable options.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param title - The title of the dialogue.
|
||||
* @param message - The body message of the dialogue.
|
||||
* @param affirmative - The positive confirmation label.
|
||||
* @param negative - The negative cancellation label.
|
||||
* @returns A promise resolving to true if approved, false otherwise.
|
||||
*/
|
||||
export declare function confirmDialogue(host: DatabaseMaintenanceHost, title: string, message: string, affirmative?: string, negative?: string): Promise<boolean>;
|
||||
/**
|
||||
* Retrieves all chunk information from the local database.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
* @param includeDeleted - Whether to include deleted chunks in the scan.
|
||||
* @returns A promise resolving to the retrieved chunk collections.
|
||||
*/
|
||||
export declare function retrieveAllChunks(host: DatabaseMaintenanceHost, log: LogFunction, includeDeleted?: boolean): Promise<{
|
||||
used: Set<string>;
|
||||
existing: Map<string, import("@lib/common/types.ts").EntryLeaf>;
|
||||
}>;
|
||||
/**
|
||||
* Creates a progress bar tracker that logs lifecycle states.
|
||||
*
|
||||
* @param log - The logger function.
|
||||
* @param prefix - A text prefix to prepend to all progress messages.
|
||||
* @param level - The log level for progress updates.
|
||||
* @returns An object to log, perform once-off updates, or finish the progress.
|
||||
*/
|
||||
export declare function createProgressBar(log: LogFunction, prefix?: string, level?: LOG_LEVEL): {
|
||||
log: (msg: string) => void;
|
||||
once: (msg: string) => void;
|
||||
done: (msg?: string) => void;
|
||||
};
|
||||
@@ -0,0 +1,30 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { DevFeatureHost } from "./types.ts";
|
||||
import type { DevFeatureState } from "./state.ts";
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils";
|
||||
/**
|
||||
* Commits a log entry for missing translation keys inside local settings directory.
|
||||
*
|
||||
* @param host - The service feature host context.
|
||||
* @param log - The logger function.
|
||||
* @param key - The missing translation key.
|
||||
*/
|
||||
export declare function onMissingTranslation(host: DevFeatureHost, log: LogFunction, key: string): Promise<void>;
|
||||
/**
|
||||
* Automatically creates a conflicted revision for testing conflict resolution.
|
||||
*
|
||||
* @param host - The service feature host context.
|
||||
*/
|
||||
export declare function createConflict(host: DevFeatureHost): Promise<void>;
|
||||
/**
|
||||
* Appends a test result to the Svelte writable store.
|
||||
*
|
||||
* @param state - The active feature state.
|
||||
* @param name - The test name or category.
|
||||
* @param key - The unique test identifier.
|
||||
* @param result - True if passed, false if failed.
|
||||
* @param summary - Optional summary message.
|
||||
* @param message - Optional detailed stacktrace or assertion info.
|
||||
*/
|
||||
export declare function addTestResult(state: DevFeatureState, name: string, key: string, result: boolean, summary?: string, message?: string): void;
|
||||
@@ -0,0 +1,8 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { DevFeatureServices, DevFeatureModules } from "./types.ts";
|
||||
/**
|
||||
* A service feature hook that initialises dev/testing utilities.
|
||||
* Handles missing translation captures, test panels, and debugging commands.
|
||||
*/
|
||||
export declare const useDevFeature: import("@/types.ts").ObsidianServiceFeatureFunction<DevFeatureServices, DevFeatureModules, "app" | "liveSyncPlugin", void>;
|
||||
@@ -0,0 +1,13 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type Writable } from "svelte/store";
|
||||
/**
|
||||
* Interface representing the state of the dev feature, including test results.
|
||||
*/
|
||||
export interface DevFeatureState {
|
||||
testResults: Writable<[boolean, string, string][]>;
|
||||
}
|
||||
/**
|
||||
* Creates the initial state object.
|
||||
*/
|
||||
export declare function createInitialState(): DevFeatureState;
|
||||
@@ -0,0 +1,22 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { NecessaryObsidianServices } from "@/types.ts";
|
||||
import { type Writable } from "svelte/store";
|
||||
/**
|
||||
* Service keys required by the development utility feature.
|
||||
*/
|
||||
export type DevFeatureServices = "API" | "setting" | "appLifecycle" | "test" | "path" | "vault" | "keyValueDB" | "database" | "UI";
|
||||
/**
|
||||
* Service modules required by the development utility feature.
|
||||
*/
|
||||
export type DevFeatureModules = "storageAccess" | "databaseFileAccess";
|
||||
/**
|
||||
* The host type representing the injected service container with dev capabilities.
|
||||
*/
|
||||
export type DevFeatureHost = NecessaryObsidianServices<DevFeatureServices, DevFeatureModules, "app" | "liveSyncPlugin">;
|
||||
/**
|
||||
* Interface for the dev feature matching the shape expected by Svelte test panes.
|
||||
*/
|
||||
export interface ModuleDev {
|
||||
testResults: Writable<[boolean, string, string][]>;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { GlobalHistoryHost } from "./types.ts";
|
||||
/**
|
||||
* Shows the global vault history window.
|
||||
*
|
||||
* @param host - The service feature host context.
|
||||
*/
|
||||
export declare function showGlobalHistory(host: GlobalHistoryHost): void;
|
||||
@@ -0,0 +1,8 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { GlobalHistoryServices } from "./types.ts";
|
||||
/**
|
||||
* A service feature hook that initialises and manages the Global History view.
|
||||
* Registers the global history view and ribbon command.
|
||||
*/
|
||||
export declare const useGlobalHistory: import("@/types.ts").ObsidianServiceFeatureFunction<GlobalHistoryServices, never, "liveSyncPlugin", void>;
|
||||
@@ -0,0 +1,15 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { NecessaryObsidianServices } from "@/types.ts";
|
||||
/**
|
||||
* Service keys required by the global history feature.
|
||||
*/
|
||||
export type GlobalHistoryServices = "API" | "appLifecycle";
|
||||
/**
|
||||
* Service modules required by the global history feature.
|
||||
*/
|
||||
export type GlobalHistoryModules = never;
|
||||
/**
|
||||
* The host type representing the injected service container with global history capabilities.
|
||||
*/
|
||||
export type GlobalHistoryHost = NecessaryObsidianServices<GlobalHistoryServices, never, "liveSyncPlugin">;
|
||||
@@ -0,0 +1,10 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { HiddenFileSyncHost } from "./types.ts";
|
||||
export declare function registerHiddenFileSyncCommands(host: HiddenFileSyncHost, handlers: {
|
||||
isReady: () => boolean;
|
||||
initialiseInternalFileSync: (mode: "safe", showNotice: boolean) => Promise<void>;
|
||||
scanAllStorageChanges: (showNotice: boolean) => Promise<boolean>;
|
||||
scanAllDatabaseChanges: (showNotice: boolean) => Promise<boolean>;
|
||||
applyOfflineChanges: (showNotice: boolean) => Promise<void>;
|
||||
}): void;
|
||||
@@ -0,0 +1,71 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { QueueProcessor } from "octagonal-wheels/concurrency/processor";
|
||||
import type { FilePathWithPrefix, LoadedEntry, MetaEntry, DocumentID } from "@lib/common/types.ts";
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils";
|
||||
import type { HiddenFileSyncHost } from "./types.ts";
|
||||
import type { HiddenFileSyncState } from "./state.ts";
|
||||
/**
|
||||
* Enqueues a file path for a conflict check if it is not already pending.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param path - The prefix-marked document path.
|
||||
*/
|
||||
export declare function queueConflictCheck(host: HiddenFileSyncHost, state: HiddenFileSyncState, path: FilePathWithPrefix): void;
|
||||
/**
|
||||
* Marks a conflict check as finished by removing the path from the pending conflicts set.
|
||||
*
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param path - The prefix-marked document path.
|
||||
*/
|
||||
export declare function finishConflictCheck(state: HiddenFileSyncState, path: FilePathWithPrefix): void;
|
||||
/**
|
||||
* Re-enqueues a file path for conflict check processing, clearing the previous state first.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param path - The prefix-marked document path.
|
||||
*/
|
||||
export declare function requeueConflictCheck(host: HiddenFileSyncHost, state: HiddenFileSyncState, path: FilePathWithPrefix): void;
|
||||
/**
|
||||
* Scans the database for any conflicted hidden file entries and enqueues them for resolution.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
*/
|
||||
export declare function resolveConflictOnInternalFiles(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState): Promise<void>;
|
||||
/**
|
||||
* Resolves a conflict automatically by keeping the revision with the newer modification timestamp and removing the older one.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param id - The Document ID in the database.
|
||||
* @param path - The prefix-marked file path.
|
||||
* @param currentDoc - The current metadata document version.
|
||||
* @param currentRev - The revision of the current document.
|
||||
* @param conflictedRev - The conflicted revision to compare.
|
||||
*/
|
||||
export declare function resolveByNewerEntry(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, id: DocumentID, path: FilePathWithPrefix, currentDoc: MetaEntry, currentRev: string, conflictedRev: string): Promise<void>;
|
||||
/**
|
||||
* Opens a JSON interactive merge dialogue to let the user resolve conflict revisions manually.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param docA - Loaded entry revision A.
|
||||
* @param docB - Loaded entry revision B.
|
||||
* @returns A promise resolving to true if the merge dialogue was successfully completed; otherwise, false.
|
||||
*/
|
||||
export declare function showJSONMergeDialogAndMerge(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, docA: LoadedEntry, docB: LoadedEntry): Promise<boolean>;
|
||||
/**
|
||||
* Creates a QueueProcessor configuration to handle hidden file conflict resolution sequentially.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @returns A QueueProcessor managing file paths with conflicts.
|
||||
*/
|
||||
export declare function createConflictResolutionProcessor(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState): QueueProcessor<FilePathWithPrefix, any>; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration
|
||||
@@ -0,0 +1,131 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { UXFileInfo, UXStat, FilePath, UXDataWriteOptions, MetaEntry, LoadedEntry } from "@lib/common/types.ts";
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils";
|
||||
import type { InternalFileInfo } from "@/common/types.ts";
|
||||
import type { HiddenFileSyncHost } from "./types.ts";
|
||||
import type { HiddenFileSyncState } from "./state.ts";
|
||||
/**
|
||||
* Ensures that the directory structure for a given path exists in the storage.
|
||||
* If the directory does not exist, it will be created recursively.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param path - The file path for which the parent directories should be ensured.
|
||||
*/
|
||||
export declare function ensureDir(host: HiddenFileSyncHost, path: FilePath): Promise<void>;
|
||||
/**
|
||||
* Writes data directly to a hidden storage file and returns the updated file metadata.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param path - The destination file path.
|
||||
* @param data - The text or binary data to be written.
|
||||
* @param opt - Optional metadata settings such as modification time and creation time.
|
||||
* @returns The metadata of the written file, or null if the write operation failed.
|
||||
*/
|
||||
export declare function writeFile(host: HiddenFileSyncHost, path: FilePath, data: string | ArrayBuffer, opt?: UXDataWriteOptions): Promise<UXStat | null>;
|
||||
/**
|
||||
* Internal helper to remove a file from the hidden storage.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param path - The target file path to be removed.
|
||||
* @returns 'OK' if the file was successfully removed, 'ALREADY' if it did not exist, or false on failure.
|
||||
*/
|
||||
export declare function __removeFile(host: HiddenFileSyncHost, log: LogFunction, path: FilePath): Promise<"OK" | "ALREADY" | false>;
|
||||
/**
|
||||
* Triggers a storage synchronisation event to notify other modules of a file modification.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param path - The modified file path.
|
||||
*/
|
||||
export declare function triggerEvent(host: HiddenFileSyncHost, log: LogFunction, path: FilePath): Promise<void>;
|
||||
/**
|
||||
* Internal helper to delete a hidden file and trigger its respective event notifications.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param storageFilePath - The path of the file to be deleted.
|
||||
* @returns 'OK' if deleted, 'ALREADY' if not found, or false if the operation failed.
|
||||
*/
|
||||
export declare function __deleteFile(host: HiddenFileSyncHost, log: LogFunction, storageFilePath: FilePath): Promise<false | "OK" | "ALREADY">;
|
||||
/**
|
||||
* Internal helper to check whether a storage file needs to be written by comparing its contents with target data.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param storageFilePath - The path of the storage file.
|
||||
* @param content - The target content to compare against.
|
||||
* @returns True if the contents differ or an error occurs; false if they are identical.
|
||||
*/
|
||||
export declare function __checkIsNeedToWriteFile(host: HiddenFileSyncHost, log: LogFunction, storageFilePath: FilePath, content: string | ArrayBuffer): Promise<boolean>;
|
||||
/**
|
||||
* Internal helper to write a database entry back to a local storage file.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param storageFilePath - The path of the target file in the storage.
|
||||
* @param fileOnDB - The loaded database entry.
|
||||
* @param force - If true, writes the file regardless of content equivalence.
|
||||
* @returns The file metadata on success, or false on failure.
|
||||
*/
|
||||
export declare function __writeFile(host: HiddenFileSyncHost, log: LogFunction, storageFilePath: FilePath, fileOnDB: LoadedEntry, force: boolean): Promise<false | UXStat>;
|
||||
/**
|
||||
* Loads a hidden file from local storage, wrapping it in a `UXFileInfo` structure.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param path - The local file path.
|
||||
* @returns A structure containing the file name, path, metadata, and body content.
|
||||
*/
|
||||
export declare function loadFileWithInfo(host: HiddenFileSyncHost, path: FilePath): Promise<UXFileInfo>;
|
||||
/**
|
||||
* Internal helper to load the base database document entry for a given file.
|
||||
* Returns a template for a new entry if the file does not exist in the database.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param file - The target file path.
|
||||
* @param includeContent - Whether to load the content of the document.
|
||||
* @returns The loaded database entry.
|
||||
*/
|
||||
export declare function __loadBaseSaveData(host: HiddenFileSyncHost, file: FilePath, includeContent?: boolean): Promise<LoadedEntry | false>;
|
||||
/**
|
||||
* Saves a local hidden file's content and metadata into the database.
|
||||
* Confirms that the file content has changed before submitting updates to save database storage.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param file - The runtime file description containing metadata and body.
|
||||
* @param forceWrite - If true, saves the file to the database even if the content is identical.
|
||||
* @returns True if the update succeeded, undefined if skipped, or false on failure.
|
||||
*/
|
||||
export declare function storeInternalFileToDatabase(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, file: InternalFileInfo | UXFileInfo, forceWrite?: boolean): Promise<boolean | undefined>;
|
||||
/**
|
||||
* Marks a hidden file as deleted in the database.
|
||||
* It also cleans up any conflicting revisions associated with the file.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param filenameSrc - The name of the file being deleted.
|
||||
* @param forceWrite - Unused parameter retained for interface compatibility.
|
||||
* @returns True if deletion succeeds, undefined if ignored, or false on error.
|
||||
*/
|
||||
export declare function deleteInternalFileOnDatabase(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, filenameSrc: FilePath, forceWrite?: boolean): Promise<boolean | undefined>;
|
||||
/**
|
||||
* Extracts a hidden file's metadata and content from the database and writes it to local storage.
|
||||
* Evaluates whether writing is required based on timestamp differences, deletion markings, and conflict states.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param storageFilePath - The local file destination path.
|
||||
* @param force - If true, ignores cache check optimizations and forces the file to be written.
|
||||
* @param metaEntry - The pre-fetched metadata of the database document, if available.
|
||||
* @param preventDoubleProcess - If true, skips processing if this database key revision matches the cache.
|
||||
* @param onlyNew - If true, writes the file only when the database version has a newer modification time.
|
||||
* @param includeDeletion - Whether to apply deletion when checking newer times.
|
||||
* @param queueNotification - Optional callback to queue notification for reload events.
|
||||
* @returns True if processed successfully, undefined if skipped, or false on failure.
|
||||
*/
|
||||
export declare function extractInternalFileFromDatabase(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, storageFilePath: FilePath, force?: boolean, metaEntry?: MetaEntry | LoadedEntry, preventDoubleProcess?: boolean, onlyNew?: boolean, includeDeletion?: boolean, queueNotification?: (key: FilePath) => void): Promise<boolean | undefined>;
|
||||
@@ -0,0 +1,24 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { FilePath, FilePathWithPrefix, LoadedEntry } from "@lib/common/types.ts";
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils";
|
||||
import type { HiddenFileSyncHost } from "./types.ts";
|
||||
import type { HiddenFileSyncState } from "./state.ts";
|
||||
export declare function bindHiddenFileSyncEvents(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, handlers: {
|
||||
updateSettingCache: () => void;
|
||||
isThisModuleEnabled: () => boolean;
|
||||
isDatabaseReady: () => boolean;
|
||||
isReady: () => boolean;
|
||||
scanAllStorageChanges: (showNotice: boolean) => Promise<boolean>;
|
||||
performStartupScan: (showNotice: boolean) => Promise<void>;
|
||||
trackStorageFileModification: (path: FilePath) => Promise<boolean>;
|
||||
queueConflictCheck: (path: FilePathWithPrefix) => void;
|
||||
processOptionalSyncFiles: (doc: LoadedEntry) => Promise<boolean>;
|
||||
suspendExtraSync: () => Promise<boolean>;
|
||||
askUsingOptionalSyncFeature: (opt: {
|
||||
enableFetch?: boolean;
|
||||
enableOverwrite?: boolean;
|
||||
}) => Promise<boolean>;
|
||||
configureOptionalSyncFeature: (feature: keyof OPTIONAL_SYNC_FEATURES) => Promise<boolean>;
|
||||
isTargetFile: (path: FilePath) => Promise<boolean>;
|
||||
}): void;
|
||||
@@ -0,0 +1,4 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { HiddenFileSyncModules, HiddenFileSyncServices } from "./types.ts";
|
||||
export declare const useHiddenFileSync: import("@/types.ts").ObsidianServiceFeatureFunction<HiddenFileSyncServices, HiddenFileSyncModules, "app", void>;
|
||||
@@ -0,0 +1,68 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { FilePath, MetaEntry } from "@lib/common/types.ts";
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils";
|
||||
import type { HiddenFileSyncHost } from "./types.ts";
|
||||
import type { HiddenFileSyncState } from "./state.ts";
|
||||
/**
|
||||
* Adopts the current local storage files as already processed, updating their cache keys to match their actual current file states.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param targetFiles - A list of target files, or false to adopt all local storage files.
|
||||
*/
|
||||
export declare function adoptCurrentStorageFilesAsProcessed(host: HiddenFileSyncHost, state: HiddenFileSyncState, targetFiles: FilePath[] | false): Promise<void>;
|
||||
/**
|
||||
* Adopts the current database files as already processed, updating their cache keys to match their actual current database states.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param targetFiles - A list of target files, or false to adopt all database files.
|
||||
*/
|
||||
export declare function adoptCurrentDatabaseFilesAsProcessed(host: HiddenFileSyncHost, state: HiddenFileSyncState, targetFiles: FilePath[] | false): Promise<void>;
|
||||
/**
|
||||
* Compares and merges files between the storage and local database based on their modification timestamps.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param showNotice - Whether to show progress notifications.
|
||||
* @param targetFiles - A list of target files to merge, or false to merge all.
|
||||
* @returns A list of all file names processed during the merge.
|
||||
*/
|
||||
export declare function rebuildMerging(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, showNotice: boolean, targetFiles?: FilePath[] | false): Promise<FilePath[]>;
|
||||
/**
|
||||
* Rebuilds database entries from the local storage files.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param showNotice - Whether to show progress notifications.
|
||||
* @param targetFiles - A list of target files, or false to process all files.
|
||||
* @param onlyNew - If true, only updates database records if they are newer than the storage version.
|
||||
* @returns A list of file paths processed.
|
||||
*/
|
||||
export declare function rebuildFromStorage(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, showNotice: boolean, targetFiles?: FilePath[] | false, onlyNew?: boolean): Promise<FilePath[]>;
|
||||
/**
|
||||
* Rebuilds local storage files from the database entries.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param showNotice - Whether to show progress notifications.
|
||||
* @param targetFiles - A list of target files, or false to process all files.
|
||||
* @param onlyNew - If true, only overwrites local files if the database version is newer.
|
||||
* @returns A list of metadata entries processed.
|
||||
*/
|
||||
export declare function rebuildFromDatabase(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, showNotice: boolean, targetFiles?: FilePath[] | false, onlyNew?: boolean): Promise<MetaEntry[]>;
|
||||
/**
|
||||
* Initialises or synchronises the hidden files synchronisation state based on a specified direction.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param direction - The direction of synchronisation ('pull', 'push', 'safe', 'pullForce', or 'pushForce').
|
||||
* @param showMessage - Whether to display progress status alerts in the UI.
|
||||
* @param targetFilesSrc - Specific source file paths to synchronise, or false for all.
|
||||
*/
|
||||
export declare function initialiseInternalFileSync(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, direction?: "pull" | "push" | "safe" | "pullForce" | "pushForce", showMessage?: boolean, targetFilesSrc?: string[] | false): Promise<void>;
|
||||
@@ -0,0 +1,46 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils";
|
||||
import type { HiddenFileSyncHost } from "./types.ts";
|
||||
import type { HiddenFileSyncState } from "./state.ts";
|
||||
/**
|
||||
* Checks whether the hidden file synchronisation module is enabled in the current settings.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @returns True if the synchronisation of internal/hidden files is enabled; otherwise, false.
|
||||
*/
|
||||
export declare function isThisModuleEnabled(host: HiddenFileSyncHost): boolean;
|
||||
/**
|
||||
* Checks whether the local database is ready and available for operations.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @returns True if the database is ready; otherwise, false.
|
||||
*/
|
||||
export declare function isDatabaseReady(host: HiddenFileSyncHost): boolean;
|
||||
/**
|
||||
* Determines if the hidden file synchronisation module is ready to execute.
|
||||
* It checks if the application lifecycle is ready, is not suspended, and the module is enabled.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @returns True if the module is ready; otherwise, false.
|
||||
*/
|
||||
export declare function isReady(host: HiddenFileSyncHost, state: HiddenFileSyncState): boolean;
|
||||
/**
|
||||
* Clears the cached configuration and regular expressions when settings are updated.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
*/
|
||||
export declare function updateSettingCache(host: HiddenFileSyncHost, state: HiddenFileSyncState): void;
|
||||
/**
|
||||
* Performs the initial synchronisation scan during startup.
|
||||
* It invokes the offline changes application handler to process pending local and database modifications.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param showNotice - Whether to show system notices for the progress of the operations.
|
||||
* @param applyOfflineChanges - The callback function to apply offline modifications.
|
||||
*/
|
||||
export declare function performStartupScan(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, showNotice: boolean, applyOfflineChanges: (showNotice: boolean) => Promise<void>): Promise<void>;
|
||||
@@ -0,0 +1,48 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { Semaphore } from "octagonal-wheels/concurrency/semaphore";
|
||||
import { QueueProcessor } from "octagonal-wheels/concurrency/processor";
|
||||
import { PeriodicProcessor } from "@/common/PeriodicProcessor.ts";
|
||||
import type { FilePathWithPrefix } from "@lib/common/types.ts";
|
||||
import type { CustomRegExp } from "@lib/common/utils.ts";
|
||||
/**
|
||||
* Represents the mutable runtime state for the hidden file synchronisation module.
|
||||
*/
|
||||
export interface HiddenFileSyncState {
|
||||
/** Processor for executing periodic internal/hidden file scanning. */
|
||||
periodicInternalFileScanProcessor: PeriodicProcessor | undefined;
|
||||
/** Map tracking the last processed file key for each local file path. */
|
||||
_fileInfoLastProcessed: Map<string, string>;
|
||||
/** Map tracking the last known modification timestamp for each local file path. */
|
||||
_fileInfoLastKnown: Map<string, number>;
|
||||
/** Map tracking the last processed database document key for each path. */
|
||||
_databaseInfoLastProcessed: Map<string, string>;
|
||||
/** Map tracking the last known database document timestamp for each path. */
|
||||
_databaseInfoLastKnown: Map<string, number>;
|
||||
/** Unused map for tracking deleted files. */
|
||||
_databaseInfoLastDeleted: Map<string, string>;
|
||||
/** Unused map for tracking deleted file timestamps. */
|
||||
_databaseInfoLastKnownDeleted: Map<string, number>;
|
||||
/** Semaphore to serialize operations on individual files and prevent race conditions. */
|
||||
semaphore: ReturnType<typeof Semaphore>;
|
||||
/** Set containing the prefix-marked document paths currently pending conflict checks. */
|
||||
pendingConflictChecks: Set<FilePathWithPrefix>;
|
||||
/** Processor executing the conflict resolution queue sequentially. */
|
||||
conflictResolutionProcessor: QueueProcessor<FilePathWithPrefix, void> | undefined;
|
||||
/** Cached regular expressions for file matching settings. */
|
||||
cacheFileRegExps: Map<string, CustomRegExp[][]>;
|
||||
/** Cached ignore file paths dictated by customisation sync. */
|
||||
cacheCustomisationSyncIgnoredFiles: Map<string, string[]>;
|
||||
/** Queued folder paths that have changed and require reload notification. */
|
||||
queuedNotificationFiles: Set<string>;
|
||||
/** Whether the synchronisation operations are temporarily suspended. */
|
||||
suspended: boolean;
|
||||
/** Notice count index for progress keys. */
|
||||
noticeIndex: number;
|
||||
}
|
||||
/**
|
||||
* Creates and initialises a new runtime state object for the hidden file synchronisation feature.
|
||||
*
|
||||
* @returns An initialised HiddenFileSyncState object.
|
||||
*/
|
||||
export declare function createHiddenFileSyncState(): HiddenFileSyncState;
|
||||
@@ -0,0 +1,131 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type MetaEntry, type LoadedEntry, type UXFileInfo, type UXStat, type FilePath } from "@lib/common/types.ts";
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils";
|
||||
import type { HiddenFileSyncHost } from "./types.ts";
|
||||
import type { HiddenFileSyncState } from "./state.ts";
|
||||
/**
|
||||
* Extracts the modification timestamp (mtime) from various entry types for comparison.
|
||||
* If the entry represents a deleted file, it returns 0 unless `includeDeleted` is true.
|
||||
*
|
||||
* @param doc - The document entry or file info stat.
|
||||
* @param includeDeleted - Whether to return mtime for deleted entries.
|
||||
* @returns The modification timestamp, or 0 if empty or deleted.
|
||||
*/
|
||||
export declare function getComparingMTime(doc: (MetaEntry | LoadedEntry | false) | UXFileInfo | UXStat | null | undefined, includeDeleted?: boolean): number;
|
||||
/**
|
||||
* Converts a storage file stat object into a unique cache key representation.
|
||||
*
|
||||
* @param stat - The storage file metadata.
|
||||
* @returns A string key in the format: "mtime-size".
|
||||
*/
|
||||
export declare function statToKey(stat: UXStat | null): string;
|
||||
/**
|
||||
* Converts a database document entry into a unique cache key representation.
|
||||
*
|
||||
* @param doc - The database document metadata or loaded entry.
|
||||
* @returns A string key representing mtime, size, revision, and deletion status.
|
||||
*/
|
||||
export declare function docToKey(doc: LoadedEntry | MetaEntry): string;
|
||||
/**
|
||||
* Calculates the storage metadata key for a given file path.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param file - The target file path.
|
||||
* @param stat - Pre-fetched metadata stat, if available.
|
||||
* @returns The calculated key string.
|
||||
*/
|
||||
export declare function fileToStatKey(host: HiddenFileSyncHost, file: FilePath, stat?: UXStat | null): Promise<string>;
|
||||
/**
|
||||
* Updates the cached state for the last processed storage file metadata.
|
||||
*
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param file - The target file path.
|
||||
* @param keySrc - The metadata stat or key string representation to cache.
|
||||
*/
|
||||
export declare function updateLastProcessedFile(state: HiddenFileSyncState, file: FilePath, keySrc: string | UXStat): void;
|
||||
/**
|
||||
* Fetches file stats from the storage and updates the cached state for the last processed file.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param file - The target file path.
|
||||
* @param stat - Pre-fetched metadata stat, if available.
|
||||
*/
|
||||
export declare function updateLastProcessedAsActualFile(host: HiddenFileSyncHost, state: HiddenFileSyncState, file: FilePath, stat?: UXStat | null): Promise<void>;
|
||||
/**
|
||||
* Clears the last processed storage cache marks for target files or all files.
|
||||
*
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param targetFiles - A list of target files, or false to clear all cached marks.
|
||||
*/
|
||||
export declare function resetLastProcessedFile(log: LogFunction, state: HiddenFileSyncState, targetFiles: FilePath[] | false): void;
|
||||
/**
|
||||
* Retrieves the modification timestamp of the last processed storage file.
|
||||
*
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param file - The target file path.
|
||||
* @returns The cached modification timestamp.
|
||||
*/
|
||||
export declare function getLastProcessedFileMTime(state: HiddenFileSyncState, file: FilePath): number;
|
||||
/**
|
||||
* Retrieves the cache key for the last processed storage file.
|
||||
*
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param file - The target file path.
|
||||
* @returns The cached key string.
|
||||
*/
|
||||
export declare function getLastProcessedFileKey(state: HiddenFileSyncState, file: FilePath): string | undefined;
|
||||
/**
|
||||
* Retrieves the cache key for the last processed database document.
|
||||
*
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param file - The target file path.
|
||||
* @returns The cached key string.
|
||||
*/
|
||||
export declare function getLastProcessedDatabaseKey(state: HiddenFileSyncState, file: FilePath): string | undefined;
|
||||
/**
|
||||
* Updates the cached state for the last processed database document key.
|
||||
*
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param file - The target file path.
|
||||
* @param keySrc - The database document metadata or key representation to cache.
|
||||
*/
|
||||
export declare function updateLastProcessedDatabase(state: HiddenFileSyncState, file: FilePath, keySrc: string | MetaEntry | LoadedEntry): void;
|
||||
/**
|
||||
* Updates both storage file and database cache records for a path, registering changes in the path manager.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param path - The target file path.
|
||||
* @param db - The loaded database document entry.
|
||||
* @param stat - The storage metadata status.
|
||||
*/
|
||||
export declare function updateLastProcessed(host: HiddenFileSyncHost, state: HiddenFileSyncState, path: FilePath, db: MetaEntry | LoadedEntry, stat: UXStat): void;
|
||||
/**
|
||||
* Updates both storage file and database cache records for a path to represent deletion, clearing path manager records.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param path - The target file path.
|
||||
* @param db - The database entry representing deletion, or false if not stored.
|
||||
*/
|
||||
export declare function updateLastProcessedDeletion(host: HiddenFileSyncHost, state: HiddenFileSyncState, path: FilePath, db: MetaEntry | LoadedEntry | false): void;
|
||||
/**
|
||||
* Fetches database document metadata and updates the database cache key for the path.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param file - The target file path.
|
||||
* @param doc - Optional pre-fetched metadata of the database document.
|
||||
*/
|
||||
export declare function updateLastProcessedAsActualDatabase(host: HiddenFileSyncHost, state: HiddenFileSyncState, file: FilePath, doc?: MetaEntry | LoadedEntry | null | false): Promise<void>;
|
||||
/**
|
||||
* Clears the last processed database cache marks for target files or all files.
|
||||
*
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param targetFiles - A list of target files, or false to clear all cached marks.
|
||||
*/
|
||||
export declare function resetLastProcessedDatabase(log: LogFunction, state: HiddenFileSyncState, targetFiles: FilePath[] | false): void;
|
||||
@@ -0,0 +1,289 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { FilePath, LoadedEntry, MetaEntry, DocumentID } from "@lib/common/types.ts";
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils";
|
||||
import { type CustomRegExp } from "@lib/common/utils.ts";
|
||||
import type { HiddenFileSyncHost } from "./types.ts";
|
||||
import type { HiddenFileSyncState } from "./state.ts";
|
||||
/**
|
||||
* Generates a progress logger that tracks long-running synchronisation operations.
|
||||
*
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param prefix - The message prefix to prepend to log statements.
|
||||
* @param level - The log level to use.
|
||||
* @returns An object containing `log`, `once`, and `done` progress log methods.
|
||||
*/
|
||||
export declare function getProgress(log: LogFunction, state: HiddenFileSyncState, prefix?: string, level?: any): { // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration
|
||||
log: (msg: string) => void;
|
||||
once: (msg: string) => void;
|
||||
done: (msg?: string) => void;
|
||||
};
|
||||
/**
|
||||
* Parses ignore and target custom regular expression filters from settings, caching the compiled filters.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @returns Compiled regular expressions for target and ignored files.
|
||||
*/
|
||||
export declare function parseRegExpSettings(host: HiddenFileSyncHost, state: HiddenFileSyncState): {
|
||||
ignoreFilter: CustomRegExp[];
|
||||
targetFilter: CustomRegExp[];
|
||||
};
|
||||
/**
|
||||
* Checks if a given file path is matched by target patterns and not ignored by ignore patterns.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param path - The file path to check.
|
||||
* @returns True if the path is a synchronisation target based on pattern settings; otherwise, false.
|
||||
*/
|
||||
export declare function isTargetFileInPatterns(host: HiddenFileSyncHost, state: HiddenFileSyncState, path: string): boolean;
|
||||
/**
|
||||
* Determines which files are synchronised by the customisation sync feature and should be ignored by this module.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @returns A list of ignored file path strings.
|
||||
*/
|
||||
export declare function getCustomisationSynchronizationIgnoredFiles(host: HiddenFileSyncHost, state: HiddenFileSyncState): string[];
|
||||
/**
|
||||
* Checks whether a path is not ignored due to customisation synchronisation settings.
|
||||
*
|
||||
* @param host - The service feature host providing access to services.
|
||||
* @param state - The runtime state of the hidden file synchronisation module.
|
||||
* @param path - The file path to check.
|
||||
* @returns True if not ignored by customisation synchronisation; otherwise, false.
|
||||
*/
|
||||
export declare function isNotIgnoredByCustomisationSync(host: HiddenFileSyncHost, state: HiddenFileSyncState, path: string): boolean;
|
||||
/**
|
||||
* Verifies if the path represents a hidden configuration file.
|
||||
* Configuration files start with '.' and are not within the '.trash' folder.
|
||||
*
|
||||
* @param path - The file path to verify.
|
||||
* @returns True if the path represents a hidden file; otherwise, false.
|
||||
*/
|
||||
export declare function isHiddenFileSyncHandlingPath(path: FilePath): boolean;
|
||||
/**
|
||||
* Validates if the path is a synchronisation target, checking pattern filters, customisation sync rules, hidden file rules, and ignore file rules.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state.
|
||||
* @param path - The target file path.
|
||||
* @returns True if the file should be synchronised; otherwise, false.
|
||||
*/
|
||||
export declare function isTargetFile(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, path: FilePath): Promise<boolean>;
|
||||
/**
|
||||
* Executes a function sequentially for an event using locks and semaphores to prevent race conditions during file processing.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param state - The runtime state.
|
||||
* @param file - The file path.
|
||||
* @param fn - The function to run.
|
||||
*/
|
||||
export declare function serializedForEvent<T>(host: HiddenFileSyncHost, state: HiddenFileSyncState, file: FilePath, fn: () => Promise<T>): Promise<T>;
|
||||
/**
|
||||
* Recursively lists files inside the specified directory path that pass the verification check function.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param state - The runtime state.
|
||||
* @param path - The directory path to list.
|
||||
* @param checkFunction - The verification callback.
|
||||
* @returns A list of file paths.
|
||||
*/
|
||||
export declare function getFiles(host: HiddenFileSyncHost, state: HiddenFileSyncState, path: string, checkFunction: (path: FilePath) => Promise<boolean> | boolean): Promise<string[]>;
|
||||
/**
|
||||
* Scans the local workspace vault for hidden configuration files that are target synchronisation candidates.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param state - The runtime state.
|
||||
* @returns A list of hidden file paths.
|
||||
*/
|
||||
export declare function scanInternalFileNames(host: HiddenFileSyncHost, state: HiddenFileSyncState): Promise<FilePath[]>;
|
||||
/**
|
||||
* Queries the local database for all hidden configuration file metadata documents.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state.
|
||||
* @returns A list of database metadata entries.
|
||||
*/
|
||||
export declare function getAllDatabaseFiles(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState): Promise<MetaEntry[]>;
|
||||
/**
|
||||
* Tracks scanned storage changes, synchronising them to the database in bulk.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state.
|
||||
* @param processFiles - The list of local files to process.
|
||||
* @param showNotice - Whether to show system notices.
|
||||
* @param onlyNew - If true, only updates database files if they are newer.
|
||||
* @param forceWriteAll - If true, forces database updates.
|
||||
* @param includeDeleted - Whether to process deleted files.
|
||||
*/
|
||||
export declare function trackScannedStorageChanges(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, processFiles: FilePath[], showNotice?: boolean, onlyNew?: boolean, forceWriteAll?: boolean, includeDeleted?: boolean): Promise<void>;
|
||||
/**
|
||||
* Scans all local storage files and compares them with the cache to track any new changes to be saved to the database.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state.
|
||||
* @param showNotice - Whether to show progress notices.
|
||||
* @param onlyNew - If true, only synchronises newer files.
|
||||
* @param forceWriteAll - If true, forces file updates.
|
||||
* @param includeDeleted - Whether to process deleted files.
|
||||
* @returns True if scanning and updates succeeded; otherwise, false.
|
||||
*/
|
||||
export declare function scanAllStorageChanges(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, showNotice?: boolean, onlyNew?: boolean, forceWriteAll?: boolean, includeDeleted?: boolean): Promise<boolean>;
|
||||
/**
|
||||
* Tracks a single storage file modification, saving updates or deleting database records accordingly.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state.
|
||||
* @param path - The local storage path.
|
||||
* @param onlyNew - If true, only updates the database if the storage file is newer.
|
||||
* @param forceWrite - If true, forces database updates.
|
||||
* @param includeDeleted - Whether to track deletions.
|
||||
* @returns True if modification tracking succeeded, or false if skipped/failed.
|
||||
*/
|
||||
export declare function trackStorageFileModification(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, path: FilePath, onlyNew?: boolean, forceWrite?: boolean, includeDeleted?: boolean): Promise<boolean | undefined>;
|
||||
/**
|
||||
* Applies offline database and storage modifications by comparing differences on untracked files.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state.
|
||||
* @param showNotice - Whether to show notifications.
|
||||
*/
|
||||
export declare function applyOfflineChanges(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, showNotice: boolean): Promise<void>;
|
||||
/**
|
||||
* Tracks scanned database changes, writing updates to the local storage in bulk.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state.
|
||||
* @param processFiles - Database entries to track.
|
||||
* @param showNotice - Whether to show notices.
|
||||
* @param onlyNew - If true, only overwrites local files if the database entry is newer.
|
||||
* @param forceWriteAll - If true, forces local file updates.
|
||||
* @param includeDeletion - Whether to apply database deletions.
|
||||
*/
|
||||
export declare function trackScannedDatabaseChange(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, processFiles: MetaEntry[], showNotice?: boolean, onlyNew?: boolean, forceWriteAll?: boolean, includeDeletion?: boolean): Promise<void>;
|
||||
/**
|
||||
* Scans the database for changed metadata documents to update the local storage.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state.
|
||||
* @param showNotice - Whether to show notices.
|
||||
* @param onlyNew - If true, only updates the local storage if database changes are newer.
|
||||
* @param forceWriteAll - If true, forces storage updates.
|
||||
* @param includeDeletion - Whether to apply deletions.
|
||||
* @returns True if database scan and application succeeded; otherwise, false.
|
||||
*/
|
||||
export declare function scanAllDatabaseChanges(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, showNotice?: boolean, onlyNew?: boolean, forceWriteAll?: boolean, includeDeletion?: boolean): Promise<boolean>;
|
||||
/**
|
||||
* Processes a single database file modification, resolving conflicts or updating the local storage.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state.
|
||||
* @param storageFilePath - The local file path.
|
||||
* @param reason - The log context string.
|
||||
* @param preventDoubleProcess - If true, skips processing if this database key revision matches the cache.
|
||||
* @param onlyNew - If true, only overwrites if database entries are newer.
|
||||
* @param metaEntry - Pre-fetched database metadata, if available.
|
||||
* @param includeDeletion - Whether to apply database deletions.
|
||||
* @returns True if database tracking succeeded.
|
||||
*/
|
||||
export declare function trackDatabaseFileModification(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, storageFilePath: FilePath, reason: string, preventDoubleProcess: boolean, onlyNew: boolean, metaEntry?: MetaEntry | LoadedEntry, includeDeletion?: boolean): Promise<boolean | undefined>;
|
||||
/**
|
||||
* Event handler triggered when synchronised files change in the database.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state.
|
||||
* @param doc - The loaded database document entry.
|
||||
* @returns True if database change processing was handled; otherwise, false.
|
||||
*/
|
||||
export declare function processOptionalSyncFiles(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, doc: LoadedEntry): Promise<boolean>;
|
||||
/**
|
||||
* Extracts and formats key metadata properties from a database document.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param doc - The database document metadata or loaded entry.
|
||||
* @returns Formatted metadata property strings.
|
||||
*/
|
||||
export declare function getDocProps(host: HiddenFileSyncHost, doc: MetaEntry | LoadedEntry): {
|
||||
id: DocumentID;
|
||||
rev: string;
|
||||
revDisplay: string;
|
||||
prefixedPath: DocumentID;
|
||||
path: FilePath;
|
||||
isDeleted: boolean;
|
||||
shortenedId: string;
|
||||
shortenedPath: string;
|
||||
};
|
||||
/**
|
||||
* Extracts the numerical revision sequence prefix from a PouchDB revision string.
|
||||
*
|
||||
* @param rev - The PouchDB revision string.
|
||||
* @returns The numerical prefix string of the revision.
|
||||
*/
|
||||
export declare function displayRev(rev: string): string;
|
||||
/**
|
||||
* Returns a callback wrapper that invokes the inner function only once every N invocations.
|
||||
*
|
||||
* @param n - The step frequency threshold.
|
||||
* @param func - The inner function callback.
|
||||
* @returns The step count logging wrapper function.
|
||||
*/
|
||||
export declare function onlyInNTimes(n: number, func: (progress: number) => void): () => void;
|
||||
/**
|
||||
* Queues folder change notifications to warn the user about plugin or configuration updates.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param state - The runtime state.
|
||||
* @param key - The file path that was updated.
|
||||
*/
|
||||
export declare function queueNotification(host: HiddenFileSyncHost, state: HiddenFileSyncState, key: FilePath): void;
|
||||
/**
|
||||
* Triggers user notifications and prompt dialogues for reloading plug-ins or reloading the Obsidian application.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param state - The runtime state.
|
||||
*/
|
||||
export declare function notifyConfigChange(host: HiddenFileSyncHost, state: HiddenFileSyncState): void;
|
||||
/**
|
||||
* Temporarily suspends hidden file synchronisation settings during initial replications.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param state - The runtime state.
|
||||
* @returns True if setting change was applied.
|
||||
*/
|
||||
export declare function suspendExtraSync(host: HiddenFileSyncHost, state: HiddenFileSyncState): Promise<boolean>;
|
||||
/**
|
||||
* Prompts the user with dialogue choices to configure hidden file synchronisation modes.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state.
|
||||
* @param opt - Configuration options specifying available modes.
|
||||
* @returns True if configuration completed.
|
||||
*/
|
||||
export declare function askUsingOptionalSyncFeature(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, opt: {
|
||||
enableFetch?: boolean;
|
||||
enableOverwrite?: boolean;
|
||||
}): Promise<boolean>;
|
||||
/**
|
||||
* Applies settings and initialises synchronisation based on the selected mode.
|
||||
*
|
||||
* @param host - The service feature host.
|
||||
* @param log - The logging function.
|
||||
* @param state - The runtime state.
|
||||
* @param feature - The selected configuration feature mode ('FETCH', 'OVERWRITE', 'MERGE', 'DISABLE', or 'DISABLE_HIDDEN').
|
||||
* @returns True if setting change was applied; otherwise, false.
|
||||
*/
|
||||
export declare function configureOptionalSyncFeature(host: HiddenFileSyncHost, log: LogFunction, state: HiddenFileSyncState, feature: keyof any): Promise<boolean>; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration
|
||||
@@ -0,0 +1,6 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { NecessaryObsidianServices } from "@/types.ts";
|
||||
export type HiddenFileSyncServices = "API" | "appLifecycle" | "setting" | "vault" | "path" | "database" | "databaseEvents" | "fileProcessing" | "keyValueDB" | "replication" | "conflict" | "control";
|
||||
export type HiddenFileSyncModules = "storageAccess" | "fileHandler";
|
||||
export type HiddenFileSyncHost = NecessaryObsidianServices<HiddenFileSyncServices, HiddenFileSyncModules, "app">;
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type FilePathWithPrefix, type diff_result } from "@lib/common/types.ts";
|
||||
import type { ConflictResolverHost } from "./types.ts";
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils";
|
||||
/**
|
||||
* Resolves a conflict using the user interface modal, one-by-one.
|
||||
*
|
||||
* @param host - The service feature host context.
|
||||
* @param log - The logger function.
|
||||
* @param filename - The path of the conflicted file.
|
||||
* @param conflictCheckResult - The result of conflict detection / diff.
|
||||
* @returns A promise resolving to true if successfully resolved, otherwise false.
|
||||
*/
|
||||
export declare function resolveConflictByUI(host: ConflictResolverHost, log: LogFunction, filename: FilePathWithPrefix, conflictCheckResult: diff_result): Promise<boolean>;
|
||||
/**
|
||||
* Iteratively prompts the user to resolve all conflicted files.
|
||||
*
|
||||
* @param host - The service feature host context.
|
||||
* @param log - The logger function.
|
||||
*/
|
||||
export declare function allConflictCheck(host: ConflictResolverHost, log: LogFunction): Promise<void>;
|
||||
/**
|
||||
* Prompts the user to pick a file from the list of conflicted files.
|
||||
*
|
||||
* @param host - The service feature host context.
|
||||
* @param log - The logger function.
|
||||
* @returns A promise resolving to true if a file was selected and queued for checking, otherwise false.
|
||||
*/
|
||||
export declare function pickFileForResolve(host: ConflictResolverHost, log: LogFunction): Promise<boolean>;
|
||||
/**
|
||||
* Scans the database for conflicted files and displays a safety popup if any are found.
|
||||
*
|
||||
* @param host - The service feature host context.
|
||||
* @param log - The logger function.
|
||||
* @returns A promise resolving to true if execution completes successfully, otherwise false.
|
||||
*/
|
||||
export declare function allScanStat(host: ConflictResolverHost, log: LogFunction): Promise<boolean>;
|
||||
@@ -0,0 +1,8 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { ConflictResolverServices } from "./types.ts";
|
||||
/**
|
||||
* A service feature hook that initialises and manages the Interactive Conflict Resolver.
|
||||
* Registers conflict resolution commands and handles user-interactive resolution flows.
|
||||
*/
|
||||
export declare const useInteractiveConflictResolver: import("@lib/interfaces/ServiceModule.ts").ServiceFeatureFunction<ConflictResolverServices, "databaseFileAccess", void>;
|
||||
@@ -0,0 +1,15 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type NecessaryServices } from "@lib/interfaces/ServiceModule";
|
||||
/**
|
||||
* A union of service keys required by the interactive conflict resolver feature.
|
||||
*/
|
||||
export type ConflictResolverServices = "API" | "setting" | "UI" | "database" | "conflict" | "appLifecycle" | "replication" | "path";
|
||||
/**
|
||||
* A union of service module keys required by the interactive conflict resolver feature.
|
||||
*/
|
||||
export type ConflictResolverModules = "databaseFileAccess";
|
||||
/**
|
||||
* The host type representing the injected service container with conflict resolution capabilities.
|
||||
*/
|
||||
export type ConflictResolverHost = NecessaryServices<ConflictResolverServices, ConflictResolverModules>;
|
||||
@@ -0,0 +1,7 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { LogFeatureServices } from "./types.ts";
|
||||
/**
|
||||
* A service feature hook that initialises and manages logging, status display, and debug report generation.
|
||||
*/
|
||||
export declare const useLogFeature: import("@lib/interfaces/ServiceModule.ts").ServiceFeatureFunction<LogFeatureServices, "storageAccess", void>;
|
||||
@@ -0,0 +1,18 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type LOG_LEVEL } from "@lib/common/types.ts";
|
||||
import type { LogFeatureHost } from "./types.ts";
|
||||
import type { LogFeatureState } from "./state.ts";
|
||||
export declare const MARK_DONE = "\u2009\u2009";
|
||||
export declare function addLog(state: LogFeatureState, log: string): void;
|
||||
export declare function addDisplayLog(state: LogFeatureState, log: string): void;
|
||||
export declare function redactLog(log: string): string;
|
||||
export declare function writeLogToTheFile(host: LogFeatureHost, now: Date, vaultName: string, newMessage: string): void;
|
||||
export declare function processAddLog(host: LogFeatureHost, state: LogFeatureState, message: unknown, level?: LOG_LEVEL, key?: string): void;
|
||||
export declare function adjustStatusDivPosition(host: LogFeatureHost, state: LogFeatureState): void;
|
||||
export declare function getActiveFileStatus(host: LogFeatureHost): Promise<string>;
|
||||
export declare function setFileStatus(host: LogFeatureHost, state: LogFeatureState): Promise<void>;
|
||||
export declare function updateMessageArea(host: LogFeatureHost, state: LogFeatureState): Promise<void>;
|
||||
export declare function onActiveLeafChange(host: LogFeatureHost, state: LogFeatureState): void;
|
||||
export declare function applyStatusBarText(host: LogFeatureHost, state: LogFeatureState): void;
|
||||
export declare function observeForLogs(host: LogFeatureHost, state: LogFeatureState): void;
|
||||
@@ -0,0 +1,42 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { reactiveSource, type ReactiveValue } from "octagonal-wheels/dataobject/reactive";
|
||||
import { P2PLogCollector } from "@lib/replication/trystero/P2PLogCollector.ts";
|
||||
import { Notice } from "@/deps.ts";
|
||||
import type { LogEntry } from "@lib/mock_and_interop/stores.ts";
|
||||
/**
|
||||
* Interface representing the internal state of the logging and status display feature.
|
||||
*/
|
||||
export interface LogFeatureState {
|
||||
statusBar?: HTMLElement;
|
||||
statusDiv?: HTMLElement;
|
||||
statusLine?: HTMLDivElement;
|
||||
logMessage?: HTMLDivElement;
|
||||
logHistory?: HTMLDivElement;
|
||||
messageArea?: HTMLDivElement;
|
||||
statusBarLabels?: ReactiveValue<{
|
||||
message: string;
|
||||
status: string;
|
||||
}>;
|
||||
statusLog: ReturnType<typeof reactiveSource<string>>;
|
||||
activeFileStatus: ReturnType<typeof reactiveSource<string>>;
|
||||
notifies: {
|
||||
[key: string]: {
|
||||
notice: Notice;
|
||||
count: number;
|
||||
};
|
||||
};
|
||||
p2pLogCollector: P2PLogCollector;
|
||||
nextFrameQueue?: number;
|
||||
logLines: {
|
||||
ttl: number;
|
||||
message: string;
|
||||
}[];
|
||||
recentLogEntries: ReturnType<typeof reactiveSource<LogEntry[]>>;
|
||||
logForDump: string[];
|
||||
logForDisplay: string[];
|
||||
}
|
||||
/**
|
||||
* Creates the initial state object.
|
||||
*/
|
||||
export declare function createInitialState(): LogFeatureState;
|
||||
@@ -0,0 +1,15 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type NecessaryServices } from "@lib/interfaces/ServiceModule";
|
||||
/**
|
||||
* Service keys required by the logging and status bar feature.
|
||||
*/
|
||||
export type LogFeatureServices = "API" | "setting" | "replication" | "conflict" | "fileProcessing" | "appLifecycle" | "vault" | "replicator" | "UI";
|
||||
/**
|
||||
* Service modules required by the logging and status bar feature.
|
||||
*/
|
||||
export type LogFeatureModules = "storageAccess";
|
||||
/**
|
||||
* The host type representing the injected service container with logging capabilities.
|
||||
*/
|
||||
export type LogFeatureHost = NecessaryServices<LogFeatureServices, LogFeatureModules>;
|
||||
@@ -0,0 +1,3 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
export declare const useMigrationFeature: import("@/types.ts").ObsidianServiceFeatureFunction<"path" | "setting" | "UI" | "appLifecycle" | "API" | "database" | "replicator" | "vault" | "keyValueDB", "storageAccess" | "fileHandler" | "rebuilder", never, void>;
|
||||
@@ -0,0 +1,21 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type TFile } from "@/deps.ts";
|
||||
import type { FilePathWithPrefix, DocumentID } from "@lib/common/types.ts";
|
||||
import type { DocumentHistoryHost } from "./types.ts";
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils";
|
||||
/**
|
||||
* Opens the document history modal dialogue for a given file.
|
||||
*
|
||||
* @param host - The service feature host context.
|
||||
* @param file - The file path or TFile reference to query history.
|
||||
* @param id - Optional CouchDB document identifier.
|
||||
*/
|
||||
export declare function showHistory(host: DocumentHistoryHost, file: TFile | FilePathWithPrefix, id?: DocumentID): void;
|
||||
/**
|
||||
* Displays a list of all local documents, prompting the user to select one to view its history.
|
||||
*
|
||||
* @param host - The service feature host context.
|
||||
* @param log - The logger function.
|
||||
*/
|
||||
export declare function fileHistory(host: DocumentHistoryHost, log: LogFunction): Promise<void>;
|
||||
@@ -0,0 +1,8 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { DocumentHistoryServices } from "./types.ts";
|
||||
/**
|
||||
* A service feature hook that initialises and manages Obsidian Document History commands.
|
||||
* Registers ribbon commands and listens to history request events.
|
||||
*/
|
||||
export declare const useObsidianDocumentHistory: import("@lib/interfaces/ServiceModule.ts").ServiceFeatureFunction<DocumentHistoryServices, never, void>;
|
||||
@@ -0,0 +1,15 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type NecessaryServices } from "@lib/interfaces/ServiceModule";
|
||||
/**
|
||||
* Service keys required by the Obsidian document history feature.
|
||||
*/
|
||||
export type DocumentHistoryServices = "API" | "vault" | "database" | "UI" | "path" | "appLifecycle";
|
||||
/**
|
||||
* Service modules required by the Obsidian document history feature.
|
||||
*/
|
||||
export type DocumentHistoryModules = never;
|
||||
/**
|
||||
* The host type representing the injected service container with document history capabilities.
|
||||
*/
|
||||
export type DocumentHistoryHost = NecessaryServices<DocumentHistoryServices, DocumentHistoryModules>;
|
||||
@@ -0,0 +1,34 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils.ts";
|
||||
import type { ObsidianEventsHost } from "./types.ts";
|
||||
import type { ObsidianEventsState } from "./state.ts";
|
||||
/**
|
||||
* Executes a restart and reload of the Obsidian application.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
*/
|
||||
export declare function performAppReload(host: ObsidianEventsHost): void;
|
||||
/**
|
||||
* Asks the user if they want to restart and reload Obsidian now, scheduling or executing it.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
* @param message - An optional custom message to display in the dialogue.
|
||||
*/
|
||||
export declare function askReload(host: ObsidianEventsHost, log: LogFunction, message?: string): void;
|
||||
/**
|
||||
* Schedules an application reload, waiting for all background tasks to stabilise to 0.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
* @param state - The runtime state of the Obsidian events module.
|
||||
*/
|
||||
export declare function scheduleAppReload(host: ObsidianEventsHost, log: LogFunction, state: ObsidianEventsState): void;
|
||||
/**
|
||||
* Checks if an application reload has already been scheduled.
|
||||
*
|
||||
* @param state - The runtime state of the Obsidian events module.
|
||||
* @returns True if scheduled, false otherwise.
|
||||
*/
|
||||
export declare function isReloadingScheduled(state: ObsidianEventsState): boolean;
|
||||
@@ -0,0 +1,8 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { ObsidianEventsServices } from "./types.ts";
|
||||
/**
|
||||
* A service feature hook that initialises and manages Obsidian application event bindings.
|
||||
* This hooks into vault file changes, window focus, visibility states, and schedules restarts.
|
||||
*/
|
||||
export declare const useObsidianEvents: import("@lib/interfaces/ServiceModule").ServiceFeatureFunction<ObsidianEventsServices, never, void>;
|
||||
@@ -0,0 +1,13 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils.ts";
|
||||
import type { ObsidianEventsHost } from "./types.ts";
|
||||
import type { ObsidianEventsState } from "./state.ts";
|
||||
/**
|
||||
* Swaps the default Obsidian save command callback to trigger a synchronisation sweep.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
* @param state - The runtime state of the Obsidian events module.
|
||||
*/
|
||||
export declare function swapSaveCommand(host: ObsidianEventsHost, log: LogFunction, state: ObsidianEventsState): void;
|
||||
@@ -0,0 +1,18 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type ReactiveSource } from "octagonal-wheels/dataobject/reactive";
|
||||
/**
|
||||
* Represents the runtime state of the Obsidian events module.
|
||||
*/
|
||||
export interface ObsidianEventsState {
|
||||
initialCallback: (() => void) | undefined;
|
||||
hasFocus: boolean;
|
||||
isLastHidden: boolean;
|
||||
totalProcessingCount: ReactiveSource<number> | undefined;
|
||||
}
|
||||
/**
|
||||
* Creates and initialises a new Obsidian events state object.
|
||||
*
|
||||
* @returns A freshly initialised {@link ObsidianEventsState} object.
|
||||
*/
|
||||
export declare function createObsidianEventsState(): ObsidianEventsState;
|
||||
@@ -0,0 +1,15 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type NecessaryServices } from "@lib/interfaces/ServiceModule";
|
||||
/**
|
||||
* A union of service keys required by the Obsidian events management feature.
|
||||
*/
|
||||
export type ObsidianEventsServices = "API" | "setting" | "appLifecycle" | "control" | "replication" | "vault" | "fileProcessing" | "conflict" | "database" | "UI";
|
||||
/**
|
||||
* A union of service module keys required by the Obsidian events management feature.
|
||||
*/
|
||||
export type ObsidianEventsModules = never;
|
||||
/**
|
||||
* The host type representing the injected service container with Obsidian events capabilities.
|
||||
*/
|
||||
export type ObsidianEventsHost = NecessaryServices<ObsidianEventsServices, ObsidianEventsModules>;
|
||||
@@ -0,0 +1,60 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { TFile } from "@/deps.ts";
|
||||
import type { LogFunction } from "@lib/services/lib/logUtils.ts";
|
||||
import type { ObsidianEventsHost } from "./types.ts";
|
||||
import type { ObsidianEventsState } from "./state.ts";
|
||||
/**
|
||||
* Sets the focus status and triggers visibility check scheduling.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
* @param state - The runtime state of the Obsidian events module.
|
||||
* @param hasFocus - The new focus status.
|
||||
*/
|
||||
export declare function setHasFocus(host: ObsidianEventsHost, log: LogFunction, state: ObsidianEventsState, hasFocus: boolean): void;
|
||||
/**
|
||||
* Schedules a task to check and apply window visibility transitions.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
* @param state - The runtime state of the Obsidian events module.
|
||||
*/
|
||||
export declare function watchWindowVisibility(host: ObsidianEventsHost, log: LogFunction, state: ObsidianEventsState): void;
|
||||
/**
|
||||
* Asynchronously processes window visibility transitions, suspending or resuming replication channels.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
* @param state - The runtime state of the Obsidian events module.
|
||||
*/
|
||||
export declare function watchWindowVisibilityAsync(host: ObsidianEventsHost, log: LogFunction, state: ObsidianEventsState): Promise<void>;
|
||||
/**
|
||||
* Schedules a task to check online recovery and vault rescanning.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
*/
|
||||
export declare function watchOnline(host: ObsidianEventsHost, log: LogFunction): void;
|
||||
/**
|
||||
* Asynchronously checks if online recovery is required, performing a vault scan if the network recovers.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
*/
|
||||
export declare function watchOnlineAsync(host: ObsidianEventsHost): Promise<void>;
|
||||
/**
|
||||
* Schedules a task to process files opened in the workspace.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
* @param file - The file that was opened.
|
||||
*/
|
||||
export declare function watchWorkspaceOpen(host: ObsidianEventsHost, log: LogFunction, file: TFile | null): void;
|
||||
/**
|
||||
* Asynchronously handles workspace file open events, running replication and checking for conflicts.
|
||||
*
|
||||
* @param host - The service container host.
|
||||
* @param log - The logger function.
|
||||
* @param file - The file that was opened.
|
||||
*/
|
||||
export declare function watchWorkspaceOpenAsync(host: ObsidianEventsHost, log: LogFunction, file: TFile): Promise<void>;
|
||||
@@ -0,0 +1,8 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
/**
|
||||
* Obsidian Menu Feature
|
||||
*
|
||||
* Provides Obsidian-specific UI elements like ribbon icons and commands.
|
||||
*/
|
||||
export declare const useObsidianMenuFeature: import("@/types.ts").ObsidianServiceFeatureFunction<"replication" | "appLifecycle" | "conflict", never, "plugin", void>;
|
||||
@@ -0,0 +1,32 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type ObsidianLiveSyncSettings } from "@lib/common/types.ts";
|
||||
export declare const SETTING_HEADER = "````yaml:livesync-setting\n";
|
||||
export declare const SETTING_FOOTER = "\n````";
|
||||
/**
|
||||
* Extracts the YAML settings block from the full text of a markdown file.
|
||||
*
|
||||
* Returns the preamble (text before the block), the body (YAML content), and
|
||||
* the postscript (text after the block). If no block is found, the entire
|
||||
* `data` string is returned as the preamble with empty body and postscript.
|
||||
*/
|
||||
export declare const extractSettingFromWholeText: (data: string) => {
|
||||
preamble: string;
|
||||
body: string;
|
||||
postscript: string;
|
||||
};
|
||||
/**
|
||||
* Strips sensitive / internal-only fields from a settings snapshot so that it
|
||||
* is safe to serialise into a markdown file.
|
||||
*
|
||||
* If `keepCredential` is true (or `writeCredentialsForSettingSync` is set on
|
||||
* the settings object) the credential fields are retained; otherwise they are
|
||||
* removed.
|
||||
*/
|
||||
export declare const generateSettingForMarkdownPure: (settings: ObsidianLiveSyncSettings, keepCredential?: boolean) => Partial<ObsidianLiveSyncSettings>;
|
||||
/**
|
||||
* Obsidian Settings as Markdown Feature
|
||||
*
|
||||
* Allows saving and loading settings to/from a markdown file.
|
||||
*/
|
||||
export declare const useObsidianSettingAsMarkdownFeature: import("@/types.ts").ObsidianServiceFeatureFunction<"setting" | "UI" | "appLifecycle" | "API", "storageAccess" | "rebuilder", "plugin", void>;
|
||||
@@ -0,0 +1,7 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { SettingDialogueServices } from "./types.ts";
|
||||
/**
|
||||
* A service feature hook that registers the plug-in setting tab and listens to settings dialogue triggers.
|
||||
*/
|
||||
export declare const useObsidianSettingDialogue: import("@lib/interfaces/ServiceModule.ts").ServiceFeatureFunction<SettingDialogueServices, never, void>;
|
||||
@@ -0,0 +1,17 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { SettingDialogueHost } from "./types.ts";
|
||||
import type { SettingDialogueState } from "./state.ts";
|
||||
/**
|
||||
* Opens the Obsidian settings panel and navigates to the Self-hosted LiveSync tab.
|
||||
*
|
||||
* @param host - The service feature host context.
|
||||
*/
|
||||
export declare function openSetting(host: SettingDialogueHost): void;
|
||||
/**
|
||||
* Opens settings and automatically launches the minimal setup configuration wizard.
|
||||
*
|
||||
* @param host - The service feature host context.
|
||||
* @param state - The state object holding the settings tab reference.
|
||||
*/
|
||||
export declare function openSettingWizard(host: SettingDialogueHost, state: SettingDialogueState): Promise<void>;
|
||||
@@ -0,0 +1,13 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import type { ObsidianLiveSyncSettingTab } from "@/modules/features/SettingDialogue/ObsidianLiveSyncSettingTab.ts";
|
||||
/**
|
||||
* Interface representing the internal state of the setting dialogue feature.
|
||||
*/
|
||||
export interface SettingDialogueState {
|
||||
settingTab?: ObsidianLiveSyncSettingTab;
|
||||
}
|
||||
/**
|
||||
* Creates the initial state object.
|
||||
*/
|
||||
export declare function createInitialState(): SettingDialogueState;
|
||||
@@ -0,0 +1,15 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type NecessaryServices } from "@lib/interfaces/ServiceModule";
|
||||
/**
|
||||
* Service keys required by the Obsidian setting tab dialogue feature.
|
||||
*/
|
||||
export type SettingDialogueServices = "API" | "appLifecycle";
|
||||
/**
|
||||
* Service modules required by the Obsidian setting tab dialogue feature.
|
||||
*/
|
||||
export type SettingDialogueModules = never;
|
||||
/**
|
||||
* The host type representing the injected service container with setting tab capabilities.
|
||||
*/
|
||||
export type SettingDialogueHost = NecessaryServices<SettingDialogueServices, SettingDialogueModules>;
|
||||
@@ -0,0 +1,27 @@
|
||||
// @ts-nocheck
|
||||
// REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 0563f26
|
||||
import { type ObsidianLiveSyncSettings } from "@lib/common/types.ts";
|
||||
export declare const enum UserMode {
|
||||
NewUser = "new-user",
|
||||
ExistingUser = "existing-user",
|
||||
Unknown = "unknown",
|
||||
Update = "unknown" // eslint-disable-line @typescript-eslint/no-duplicate-enum-values -- Duplicate enum value
|
||||
}
|
||||
export interface SetupManagerAPI {
|
||||
startOnBoarding(): Promise<boolean>;
|
||||
onOnboard(userMode: UserMode): Promise<boolean>;
|
||||
onUseSetupURI(userMode: UserMode, setupURI?: string): Promise<boolean>;
|
||||
onCouchDBManualSetup(userMode: UserMode, currentSetting: ObsidianLiveSyncSettings, activate?: boolean): Promise<boolean>;
|
||||
onBucketManualSetup(userMode: UserMode, currentSetting: ObsidianLiveSyncSettings, activate?: boolean): Promise<boolean>;
|
||||
onP2PManualSetup(userMode: UserMode, currentSetting: ObsidianLiveSyncSettings, activate?: boolean): Promise<boolean>;
|
||||
onlyE2EEConfiguration(userMode: UserMode, currentSetting: ObsidianLiveSyncSettings): Promise<boolean>;
|
||||
onConfigureManually(originalSetting: ObsidianLiveSyncSettings, userMode: UserMode): Promise<boolean>;
|
||||
onSelectServer(currentSetting: ObsidianLiveSyncSettings, userMode: UserMode): Promise<boolean>;
|
||||
onConfirmApplySettingsFromWizard(newConf: ObsidianLiveSyncSettings, _userMode: UserMode, activate?: boolean, extra?: () => void): Promise<boolean>;
|
||||
onPromptQRCodeInstruction(): Promise<boolean>;
|
||||
decodeQR(qr: string): Promise<boolean>;
|
||||
applySetting(newConf: ObsidianLiveSyncSettings, userMode: UserMode): Promise<boolean>;
|
||||
dialogManager: any; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration
|
||||
}
|
||||
export declare const getSetupManager: () => SetupManagerAPI;
|
||||
export declare const useSetupManagerFeature: import("@/types.ts").ObsidianServiceFeatureFunction<"setting" | "UI" | "appLifecycle" | "API" | "replicator", "rebuilder", never, SetupManagerAPI>;
|
||||
Vendored
+26
@@ -5,6 +5,10 @@ import type { Rebuilder } from "@lib/interfaces/DatabaseRebuilder";
|
||||
import type { IFileHandler } from "@lib/interfaces/FileHandler";
|
||||
import type { StorageAccess } from "@lib/interfaces/StorageAccess";
|
||||
import type { IServiceHub } from "@lib/services/base/IService";
|
||||
import type { LiveSyncBaseCore } from "./LiveSyncBaseCore.ts";
|
||||
import type { ObsidianServiceContext } from "@lib/services/implements/obsidian/ObsidianServiceContext.ts";
|
||||
import type { LiveSyncCommands } from "./features/LiveSyncCommands.ts";
|
||||
import type { ObsidianServiceHub } from "./modules/services/ObsidianServiceHub.ts";
|
||||
export interface ServiceModules {
|
||||
storageAccess: StorageAccess;
|
||||
/**
|
||||
@@ -24,3 +28,25 @@ export interface LiveSyncHost {
|
||||
services: IServiceHub;
|
||||
serviceModules: ServiceModules;
|
||||
}
|
||||
export type LiveSyncCore = LiveSyncBaseCore<ObsidianServiceContext, LiveSyncCommands>;
|
||||
/**
|
||||
* Extends the standard `{ services, serviceModules }` host shape with a typed
|
||||
* `context` slice from `ObsidianServiceContext`.
|
||||
*
|
||||
* Use this as the host type for features built with `createServiceFeature` that
|
||||
* also need type-safe access to Obsidian-specific context properties such as
|
||||
* `app` or `plugin`.
|
||||
*
|
||||
* @typeParam T - Service keys (same constraint as `NecessaryObsidianFeature`).
|
||||
* @typeParam U - Service module keys from `ServiceModules`.
|
||||
* @typeParam C - Keys of `ObsidianServiceContext` to expose (e.g. `"app" | "plugin"`).
|
||||
*/
|
||||
export type NecessaryObsidianFeature<T extends keyof ObsidianServiceHub, U extends keyof ServiceModules = never, C extends keyof ObsidianServiceContext = never> = {
|
||||
services: Pick<ObsidianServiceHub, T>;
|
||||
serviceModules: Pick<ServiceModules, U>;
|
||||
context: Pick<ObsidianServiceContext, C>;
|
||||
};
|
||||
/** Alias to keep backward compatibility with defined feature hosts */
|
||||
export type NecessaryObsidianServices<T extends keyof ObsidianServiceHub, U extends keyof ServiceModules = never, C extends keyof ObsidianServiceContext = never> = NecessaryObsidianFeature<T, U, C>;
|
||||
export type ObsidianServiceFeatureFunction<T extends keyof ObsidianServiceHub, U extends keyof ServiceModules, C extends keyof ObsidianServiceContext, TR> = (host: NecessaryObsidianFeature<T, U, C>) => TR;
|
||||
export declare function createObsidianServiceFeature<T extends keyof ObsidianServiceHub, U extends keyof ServiceModules = never, C extends keyof ObsidianServiceContext = never, TR = void>(featureFunction: ObsidianServiceFeatureFunction<T, U, C, TR>): ObsidianServiceFeatureFunction<T, U, C, TR>;
|
||||
|
||||
Reference in New Issue
Block a user