From b2c6916ac749adb0479a2eb41fed85717e6762d4 Mon Sep 17 00:00:00 2001 From: vorotamoroz Date: Fri, 19 Jun 2026 06:28:34 +0100 Subject: [PATCH] more tweaks --- _types/src/lib/src/common/configForDoc.d.ts | 6 +- .../lib/src/common/models/setting.type.d.ts | 2 +- .../src/common/models/shared.type.util.d.ts | 2 +- _types/src/lib/src/common/utils.d.ts | 6 +- .../managers/EntryManager/EntryManager.d.ts | 2 +- _types/src/lib/src/pouchdb/compress.d.ts | 6 +- _types/src/lib/src/pouchdb/encryption.d.ts | 4 +- .../LiveSyncAbstractReplicator.d.ts | 2 +- .../src/replication/SyncParamsHandler.d.ts | 2 +- .../couchdb/LiveSyncReplicator.d.ts | 2 +- .../journal/JournalSyncAbstract.d.ts | 6 +- .../journal/LiveSyncJournalReplicator.d.ts | 2 +- .../journal/LiveSyncJournalReplicatorEnv.d.ts | 2 +- .../trystero/LiveSyncTrysteroReplicator.d.ts | 2 +- .../trystero/TrysteroReplicator.d.ts | 2 +- .../lib/src/rpc/pouchdb/RpcPouchDBProxy.d.ts | 11 +- .../src/serviceModules/FileAccessBase.d.ts | 8 +- .../src/lib/src/services/base/IService.d.ts | 2 +- .../lib/src/services/base/RemoteService.d.ts | 2 +- .../lib/src/services/lib/HandlerUtils.d.ts | 6 +- .../lib/src/string_and_binary/convert.d.ts | 2 +- _types/src/lib/src/worker/bgWorker.d.ts | 4 +- _types/src/lib/src/worker/bgWorker.mock.d.ts | 4 +- _types/src/lib/src/worker/universalTypes.d.ts | 2 +- .../DocumentHistory/DocumentHistoryModal.d.ts | 2 +- _types/src/modules/features/SetupManager.d.ts | 2 +- src/apps/cli/entrypoint.ts | 4 +- src/apps/cli/services/NodeLocalStorage.ts | 4 +- src/apps/cli/tsconfig.json | 2 +- src/apps/webapp/tsconfig.json | 2 +- src/apps/webpeer/tsconfig.app.json | 2 +- utilsdeno/types-add-ignore.ts | 144 +++++++++++++++--- 32 files changed, 179 insertions(+), 72 deletions(-) diff --git a/_types/src/lib/src/common/configForDoc.d.ts b/_types/src/lib/src/common/configForDoc.d.ts index cc55793..55c7e2b 100644 --- a/_types/src/lib/src/common/configForDoc.d.ts +++ b/_types/src/lib/src/common/configForDoc.d.ts @@ -26,7 +26,7 @@ type BaseRule = { valueDisplayFunc?: (settings: Partial) => string; obsoleteValues?: TValue[]; }; -type NumberRuleExact = BaseRule<"number", number> & {}; +type NumberRuleExact = BaseRule<"number", number> & {}; // eslint-disable-line @typescript-eslint/no-empty-object-type, @typescript-eslint/ban-types -- Empty object type type NumberRuleRange = BaseRule<"number", number> & { min?: number; max?: number; @@ -37,8 +37,8 @@ type StringRangeRule = BaseRule<"string", string> & { maxLength?: number; regexp?: string; }; -type StringRule = BaseRule<"string", string> & {}; -type BooleanRule = BaseRule<"boolean", boolean> & {}; +type StringRule = BaseRule<"string", string> & {}; // eslint-disable-line @typescript-eslint/no-empty-object-type, @typescript-eslint/ban-types -- Empty object type +type BooleanRule = BaseRule<"boolean", boolean> & {}; // eslint-disable-line @typescript-eslint/no-empty-object-type, @typescript-eslint/ban-types -- Empty object type export type RuleForType = T extends number ? NumberRuleExact | NumberRuleRange : T extends string ? StringRule | StringRangeRule : T extends boolean ? BooleanRule : never; type DoctorCheckSettings = Omit, "remoteConfigurations" | "pluginSyncExtendedSetting">; export type DoctorRegulation = { diff --git a/_types/src/lib/src/common/models/setting.type.d.ts b/_types/src/lib/src/common/models/setting.type.d.ts index 936efee..e69105b 100644 --- a/_types/src/lib/src/common/models/setting.type.d.ts +++ b/_types/src/lib/src/common/models/setting.type.d.ts @@ -891,7 +891,7 @@ export interface RemoteConfigurations { */ P2P_ActiveRemoteConfigurationId: string; } -interface ObsidianLiveSyncSettings_PluginSetting extends SyncMethodSettings, UISettings, FileHandlingSettings, MergeBehaviourSettings, EncryptedUserSettings, PeriodicReplicationSettings, InternalFileSettings, PluginSyncSettings, ModeSettings, ExtraTweakSettings, BetaTweakSettings, ObsoleteSettings, DebugModeSettings, SettingSyncSettings, SafetyValveSettings, DataOnSettings, RemoteConfigurations { +interface ObsidianLiveSyncSettings_PluginSetting extends SyncMethodSettings, UISettings, FileHandlingSettings, MergeBehaviourSettings, EncryptedUserSettings, PeriodicReplicationSettings, InternalFileSettings, PluginSyncSettings, ModeSettings, ExtraTweakSettings, BetaTweakSettings, ObsoleteSettings, DebugModeSettings, SettingSyncSettings, SafetyValveSettings, DataOnSettings, RemoteConfigurations { // eslint-disable-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-empty-interface -- Empty interface } export type RemoteDBSettings = CouchDBConnection & BucketSyncSetting & RemoteTypeSettings & EncryptionSettings & ChunkSettings & EdenSettings & DataOnRemoteDBSettings & ObsoleteRemoteDBSettings & OnDemandChunkSettings & BetaRemoteDBSettings & ReplicationSetting & RemoteDBTweakSettings & FileHandlingSettings & ProcessingBehaviourSettings & OptionalAndNotExposedRemoteDBSettings & CrossPlatformInteroperabilitySettings & ConflictHandlingSettings & EdgeCaseHandlingSettings & DeletedFileMetadataSettings & P2PSyncSetting & RemoteConfigurations; export type ObsidianLiveSyncSettings = ObsidianLiveSyncSettings_PluginSetting & RemoteDBSettings & LocalDBSettings; diff --git a/_types/src/lib/src/common/models/shared.type.util.d.ts b/_types/src/lib/src/common/models/shared.type.util.d.ts index 418b888..85895e8 100644 --- a/_types/src/lib/src/common/models/shared.type.util.d.ts +++ b/_types/src/lib/src/common/models/shared.type.util.d.ts @@ -6,4 +6,4 @@ export type CustomRegExpSourceList = TaggedType = { [K in keyof T]: T[K]; -} & {}; +} & {}; // eslint-disable-line @typescript-eslint/no-empty-object-type, @typescript-eslint/ban-types -- Empty object type diff --git a/_types/src/lib/src/common/utils.d.ts b/_types/src/lib/src/common/utils.d.ts index 3566374..528e26e 100644 --- a/_types/src/lib/src/common/utils.d.ts +++ b/_types/src/lib/src/common/utils.d.ts @@ -27,11 +27,11 @@ export declare const Parallels: (ps?: Set>) => { export declare function allSettledWithConcurrencyLimit(processes: Promise[], limit: number): Promise; export declare function getDocData(doc: string | string[]): string; export declare function getDocDataAsArray(doc: string | string[]): string[]; -export declare function getDocDataAsArrayBuffer(doc: string | string[] | ArrayBuffer): Uint8Array; +export declare function getDocDataAsArrayBuffer(doc: string | string[] | ArrayBuffer): Uint8Array; export declare function isTextBlob(blob: Blob): boolean; export declare function createTextBlob(data: string | string[]): Blob; -export declare function createBinaryBlob(data: Uint8Array | ArrayBuffer): Blob; -export declare function createBlob(data: string | string[] | Uint8Array | ArrayBuffer | Blob): Blob; +export declare function createBinaryBlob(data: Uint8Array | ArrayBuffer): Blob; +export declare function createBlob(data: string | string[] | Uint8Array | ArrayBuffer | Blob): Blob; export declare function isTextDocument(doc: LoadedEntry): boolean; export declare function readAsBlob(doc: LoadedEntry): Blob; export declare function readContent(doc: LoadedEntry): string | ArrayBuffer; diff --git a/_types/src/lib/src/managers/EntryManager/EntryManager.d.ts b/_types/src/lib/src/managers/EntryManager/EntryManager.d.ts index 8070e7b..04b65c2 100644 --- a/_types/src/lib/src/managers/EntryManager/EntryManager.d.ts +++ b/_types/src/lib/src/managers/EntryManager/EntryManager.d.ts @@ -25,7 +25,7 @@ export declare class EntryManager { setting: ISettingService; path: IPathService; }; - serviceModules: {}; + serviceModules: {}; // eslint-disable-line @typescript-eslint/no-empty-object-type, @typescript-eslint/ban-types -- Empty object type }; get isOnDemandChunkEnabled(): boolean; isTargetFile(filenameSrc: string): boolean; diff --git a/_types/src/lib/src/pouchdb/compress.d.ts b/_types/src/lib/src/pouchdb/compress.d.ts index b1e8174..96518a0 100644 --- a/_types/src/lib/src/pouchdb/compress.d.ts +++ b/_types/src/lib/src/pouchdb/compress.d.ts @@ -2,11 +2,11 @@ import * as fflate from "fflate"; import type { EntryDoc } from "@lib/common/types"; export declare function _compressText(text: string): Promise; -export declare const wrappedInflate: (data: Uint8Array, opts: fflate.AsyncInflateOptions) => Promise>; -export declare const wrappedDeflate: (data: Uint8Array, opts: fflate.AsyncDeflateOptions) => Promise>; +export declare const wrappedInflate: (data: Uint8Array, opts: fflate.AsyncInflateOptions) => Promise; +export declare const wrappedDeflate: (data: Uint8Array, opts: fflate.AsyncDeflateOptions) => Promise; export declare function _decompressText(compressed: string, _useUTF16?: boolean): Promise; export declare function compressDoc(doc: EntryDoc): Promise; export declare function decompressDoc(doc: EntryDoc): Promise; -export declare function wrapFflateFunc(func: (data: T, opts: U, cb: fflate.FlateCallback) => unknown): (data: T, opts: U) => Promise>; +export declare function wrapFflateFunc(func: (data: T, opts: U, cb: fflate.FlateCallback) => unknown): (data: T, opts: U) => Promise; export declare const replicationFilter: (db: PouchDB.Database, compress: boolean) => void; export declare const MARK_SHIFT_COMPRESSED = "\u000ELZ\u001D"; diff --git a/_types/src/lib/src/pouchdb/encryption.d.ts b/_types/src/lib/src/pouchdb/encryption.d.ts index ed91dda..57c5026 100644 --- a/_types/src/lib/src/pouchdb/encryption.d.ts +++ b/_types/src/lib/src/pouchdb/encryption.d.ts @@ -7,11 +7,11 @@ export declare const encryptHKDF: typeof encryptHKDFWorker; export declare const decryptHKDF: typeof decryptHKDFWorker; export declare let preprocessOutgoing: (doc: AnyEntry | EntryLeaf) => Promise; export declare let preprocessIncoming: (doc: EntryDoc) => Promise; -export declare function getConfiguredFunctionsForEncryption(passphrase: string, useDynamicIterationCount: boolean, migrationDecrypt: boolean, getPBKDF2Salt: () => Promise>, algorithm: E2EEAlgorithm): { +export declare function getConfiguredFunctionsForEncryption(passphrase: string, useDynamicIterationCount: boolean, migrationDecrypt: boolean, getPBKDF2Salt: () => Promise, algorithm: E2EEAlgorithm): { incoming: (doc: AnyEntry | EntryLeaf) => Promise; outgoing: (doc: EntryDoc) => Promise; }; -export declare const enableEncryption: (db: PouchDB.Database, passphrase: string, useDynamicIterationCount: boolean, migrationDecrypt: boolean, getPBKDF2Salt: () => Promise>, algorithm: E2EEAlgorithm) => void; +export declare const enableEncryption: (db: PouchDB.Database, passphrase: string, useDynamicIterationCount: boolean, migrationDecrypt: boolean, getPBKDF2Salt: () => Promise, algorithm: E2EEAlgorithm) => void; export declare function disableEncryption(): void; export declare const EDEN_ENCRYPTED_KEY: DocumentID; export declare const EDEN_ENCRYPTED_KEY_HKDF: DocumentID; diff --git a/_types/src/lib/src/replication/LiveSyncAbstractReplicator.d.ts b/_types/src/lib/src/replication/LiveSyncAbstractReplicator.d.ts index a875958..f1f99ba 100644 --- a/_types/src/lib/src/replication/LiveSyncAbstractReplicator.d.ts +++ b/_types/src/lib/src/replication/LiveSyncAbstractReplicator.d.ts @@ -39,7 +39,7 @@ export declare abstract class LiveSyncAbstractReplicator { get rawDatabase(): PouchDB.Database; get currentSettings(): import("@lib/common/types.ts").ObsidianLiveSyncSettings; sendChunks(setting: RemoteDBSettings, remoteDB: PouchDB.Database | undefined, showResult: boolean, fromSeq?: number | string): Promise; - abstract getReplicationPBKDF2Salt(setting: RemoteDBSettings, refresh?: boolean): Promise>; + abstract getReplicationPBKDF2Salt(setting: RemoteDBSettings, refresh?: boolean): Promise; ensurePBKDF2Salt(setting: RemoteDBSettings, showMessage?: boolean, useCache?: boolean): Promise; env: LiveSyncReplicatorEnv; initializeDatabaseForReplication(): Promise; diff --git a/_types/src/lib/src/replication/SyncParamsHandler.d.ts b/_types/src/lib/src/replication/SyncParamsHandler.d.ts index f9f4abb..27096a6 100644 --- a/_types/src/lib/src/replication/SyncParamsHandler.d.ts +++ b/_types/src/lib/src/replication/SyncParamsHandler.d.ts @@ -21,7 +21,7 @@ type CreateSyncParamsHanderOptions = { }; export type SyncParamsHandler = { fetch: (refresh?: boolean) => Promise; - getPBKDF2Salt: (refresh?: boolean) => Promise>; + getPBKDF2Salt: (refresh?: boolean) => Promise; }; export declare function createSyncParamsHanderForServer(key: string, options: CreateSyncParamsHanderOptions): SyncParamsHandler; export declare function clearHandlers(): void; diff --git a/_types/src/lib/src/replication/couchdb/LiveSyncReplicator.d.ts b/_types/src/lib/src/replication/couchdb/LiveSyncReplicator.d.ts index 28b939a..af42cfc 100644 --- a/_types/src/lib/src/replication/couchdb/LiveSyncReplicator.d.ts +++ b/_types/src/lib/src/replication/couchdb/LiveSyncReplicator.d.ts @@ -12,7 +12,7 @@ export declare class LiveSyncCouchDBReplicator extends LiveSyncAbstractReplicato getInitialSyncParameters(setting: RemoteDBSettings): Promise; getSyncParameters(setting: RemoteDBSettings): Promise; putSyncParameters(setting: RemoteDBSettings, params: SyncParameters): Promise; - getReplicationPBKDF2Salt(setting: RemoteDBSettings, refresh?: boolean): Promise>; + getReplicationPBKDF2Salt(setting: RemoteDBSettings, refresh?: boolean): Promise; migrate(from: number, to: number): Promise; terminateSync(): void; openReplication(setting: RemoteDBSettings, keepAlive: boolean, showResult: boolean, ignoreCleanLock: boolean): Promise; diff --git a/_types/src/lib/src/replication/journal/JournalSyncAbstract.d.ts b/_types/src/lib/src/replication/journal/JournalSyncAbstract.d.ts index 0c77833..ed8de78 100644 --- a/_types/src/lib/src/replication/journal/JournalSyncAbstract.d.ts +++ b/_types/src/lib/src/replication/journal/JournalSyncAbstract.d.ts @@ -60,12 +60,12 @@ export declare abstract class JournalSyncAbstract { abstract listFiles(from: string, limit?: number): Promise; abstract isAvailable(): Promise; getRemoteKey(): string; - getReplicationPBKDF2Salt(refresh?: boolean): Promise>; + getReplicationPBKDF2Salt(refresh?: boolean): Promise; isEncryptionPrevented(fileName: string): boolean; private decryptDataV2; private decryptDataV1; - decryptDownloaded(key: string, encrypted: Uint8Array, set: RemoteDBSettings): Promise>; - encryptForUpload(key: string, data: Uint8Array, set: RemoteDBSettings): Promise>; + decryptDownloaded(key: string, encrypted: Uint8Array, set: RemoteDBSettings): Promise; + encryptForUpload(key: string, data: Uint8Array, set: RemoteDBSettings): Promise; _createJournalPack(override?: number | string): Promise<{ changes: (EntryDoc & PouchDB.Core.GetMeta)[]; hasNext: boolean; diff --git a/_types/src/lib/src/replication/journal/LiveSyncJournalReplicator.d.ts b/_types/src/lib/src/replication/journal/LiveSyncJournalReplicator.d.ts index de71412..986328e 100644 --- a/_types/src/lib/src/replication/journal/LiveSyncJournalReplicator.d.ts +++ b/_types/src/lib/src/replication/journal/LiveSyncJournalReplicator.d.ts @@ -12,7 +12,7 @@ export declare class LiveSyncJournalReplicator extends LiveSyncAbstractReplicato get client(): JournalSyncMinio; get simpleStore(): SimpleStore; _client: JournalSyncMinio; - getReplicationPBKDF2Salt(setting: RemoteDBSettings, refresh?: boolean): Promise>; + getReplicationPBKDF2Salt(setting: RemoteDBSettings, refresh?: boolean): Promise; setupJournalSyncClient(): JournalSyncMinio; ensureBucketIsCompatible(deviceNodeID: string, currentVersionRange: ChunkVersionRange): Promise; constructor(env: LiveSyncJournalReplicatorEnv); diff --git a/_types/src/lib/src/replication/journal/LiveSyncJournalReplicatorEnv.d.ts b/_types/src/lib/src/replication/journal/LiveSyncJournalReplicatorEnv.d.ts index dbb80bf..96024d6 100644 --- a/_types/src/lib/src/replication/journal/LiveSyncJournalReplicatorEnv.d.ts +++ b/_types/src/lib/src/replication/journal/LiveSyncJournalReplicatorEnv.d.ts @@ -1,4 +1,4 @@ // REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 6de1db1 import type { LiveSyncReplicatorEnv } from "@lib/replication/LiveSyncAbstractReplicator"; -export interface LiveSyncJournalReplicatorEnv extends LiveSyncReplicatorEnv { +export interface LiveSyncJournalReplicatorEnv extends LiveSyncReplicatorEnv { // eslint-disable-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-empty-interface -- Empty interface } diff --git a/_types/src/lib/src/replication/trystero/LiveSyncTrysteroReplicator.d.ts b/_types/src/lib/src/replication/trystero/LiveSyncTrysteroReplicator.d.ts index 734ad4f..ab453b2 100644 --- a/_types/src/lib/src/replication/trystero/LiveSyncTrysteroReplicator.d.ts +++ b/_types/src/lib/src/replication/trystero/LiveSyncTrysteroReplicator.d.ts @@ -23,7 +23,7 @@ export declare class LiveSyncTrysteroReplicator extends LiveSyncAbstractReplicat get rawReplicator(): TrysteroReplicator | undefined; get rawHost(): P2PHost | undefined; get isChunkSendingSupported(): boolean; - getReplicationPBKDF2Salt(_setting: RemoteDBSettings, _refresh?: boolean): Promise>; + getReplicationPBKDF2Salt(_setting: RemoteDBSettings, _refresh?: boolean): Promise; terminateSync(): void; private _buildEnv; open(): Promise; diff --git a/_types/src/lib/src/replication/trystero/TrysteroReplicator.d.ts b/_types/src/lib/src/replication/trystero/TrysteroReplicator.d.ts index e087aef..9f92065 100644 --- a/_types/src/lib/src/replication/trystero/TrysteroReplicator.d.ts +++ b/_types/src/lib/src/replication/trystero/TrysteroReplicator.d.ts @@ -57,7 +57,7 @@ export type AllReplicationClientStatus = { export declare class TrysteroReplicator { _env: ReplicatorHostEnv; server?: P2PHost; - replicationStatus(): {}; + replicationStatus(): {}; // eslint-disable-line @typescript-eslint/no-empty-object-type, @typescript-eslint/ban-types -- Empty object type get settings(): import("@lib/common/types").P2PSyncSetting; get db(): PouchDB.Database; get deviceName(): string; diff --git a/_types/src/lib/src/rpc/pouchdb/RpcPouchDBProxy.d.ts b/_types/src/lib/src/rpc/pouchdb/RpcPouchDBProxy.d.ts index 5904824..3ae6664 100644 --- a/_types/src/lib/src/rpc/pouchdb/RpcPouchDBProxy.d.ts +++ b/_types/src/lib/src/rpc/pouchdb/RpcPouchDBProxy.d.ts @@ -1,5 +1,4 @@ // REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 6de1db1 -import EventEmitter from "events"; import type { RpcSession } from "@lib/rpc/RpcSession"; /** * A PouchDB-compatible proxy that forwards all database operations to a remote @@ -74,3 +73,13 @@ export declare class RpcPouchDBProxy extends EventEmitter { revsDiff(diff: PouchDB.Core.RevisionDiffOptions): Promise; allDocs(opts?: PouchDB.Core.AllDocsOptions): Promise>; } + +class EventEmitter { + on(event: string | symbol, listener: (...args: any[]) => void): this; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration + once(event: string | symbol, listener: (...args: any[]) => void): this; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration + off(event: string | symbol, listener: (...args: any[]) => void): this; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration + emit(event: string | symbol, ...args: any[]): boolean; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration + addListener(event: string | symbol, listener: (...args: any[]) => void): this; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration + removeAllListeners(event: string | symbol): this; +} diff --git a/_types/src/lib/src/serviceModules/FileAccessBase.d.ts b/_types/src/lib/src/serviceModules/FileAccessBase.d.ts index e8e7990..a415439 100644 --- a/_types/src/lib/src/serviceModules/FileAccessBase.d.ts +++ b/_types/src/lib/src/serviceModules/FileAccessBase.d.ts @@ -5,7 +5,7 @@ import type { IAPIService, IPathService, ISettingService, IVaultService } from " import { createInstanceLogFunction } from "@lib/services/lib/logUtils.ts"; import type { FileWithFileStat } from "@lib/common/models/fileaccess.type"; import type { IFileSystemAdapter } from "./adapters"; -export declare function toArrayBuffer(arr: Uint8Array | ArrayBuffer | DataView): ArrayBuffer; +export declare function toArrayBuffer(arr: Uint8Array | ArrayBuffer | DataView): ArrayBuffer; export interface FileAccessBaseDependencies { vaultService: IVaultService; storageAccessManager: IStorageAccessManager; @@ -59,7 +59,7 @@ export declare class FileAccessBase | string): Promise; adapterReadBinary(file: ExtractFile | string): Promise; adapterReadAuto(file: ExtractFile | string): Promise; - adapterWrite(file: ExtractFile | string, data: string | ArrayBuffer | Uint8Array, options?: UXDataWriteOptions): Promise; + adapterWrite(file: ExtractFile | string, data: string | ArrayBuffer | Uint8Array, options?: UXDataWriteOptions): Promise; adapterList(basePath: string): Promise<{ files: string[]; folders: string[]; @@ -68,8 +68,8 @@ export declare class FileAccessBase): Promise; vaultReadBinary(file: ExtractFile): Promise; vaultReadAuto(file: ExtractFile): Promise; - vaultModify(file: ExtractFile, data: string | ArrayBuffer | Uint8Array, options?: UXDataWriteOptions): Promise; - vaultCreate(path: string, data: string | ArrayBuffer | Uint8Array, options?: UXDataWriteOptions): Promise>; + vaultModify(file: ExtractFile, data: string | ArrayBuffer | Uint8Array, options?: UXDataWriteOptions): Promise; + vaultCreate(path: string, data: string | ArrayBuffer | Uint8Array, options?: UXDataWriteOptions): Promise>; trigger(name: string, ...data: unknown[]): void; reconcileInternalFile(path: string): Promise; /** diff --git a/_types/src/lib/src/services/base/IService.d.ts b/_types/src/lib/src/services/base/IService.d.ts index 5b45197..6f1688f 100644 --- a/_types/src/lib/src/services/base/IService.d.ts +++ b/_types/src/lib/src/services/base/IService.d.ts @@ -126,7 +126,7 @@ export interface IReplicationService { markResolved(): Promise; } export interface IRemoteService { - connect(uri: string, auth: CouchDBCredentials, disableRequestURI: boolean, passphrase: string | false, useDynamicIterationCount: boolean, performSetup: boolean, skipInfo: boolean, compression: boolean, customHeaders: Record, useRequestAPI: boolean, getPBKDF2Salt: () => Promise>): Promise, useRequestAPI: boolean, getPBKDF2Salt: () => Promise): Promise; info: PouchDB.Core.DatabaseInfo; }>; diff --git a/_types/src/lib/src/services/base/RemoteService.d.ts b/_types/src/lib/src/services/base/RemoteService.d.ts index 8efd9ec..5455541 100644 --- a/_types/src/lib/src/services/base/RemoteService.d.ts +++ b/_types/src/lib/src/services/base/RemoteService.d.ts @@ -50,7 +50,7 @@ export declare abstract class RemoteService; - connect(uri: string, auth: CouchDBCredentials, disableRequestURI: boolean, passphrase: string | false, useDynamicIterationCount: boolean, performSetup: boolean, skipInfo: boolean, compression: boolean, customHeaders: Record, useRequestAPI: boolean, getPBKDF2Salt: () => Promise>): Promise, useRequestAPI: boolean, getPBKDF2Salt: () => Promise): Promise; info: PouchDB.Core.DatabaseInfo; }>; diff --git a/_types/src/lib/src/services/lib/HandlerUtils.d.ts b/_types/src/lib/src/services/lib/HandlerUtils.d.ts index 6b285e6..e3a7696 100644 --- a/_types/src/lib/src/services/lib/HandlerUtils.d.ts +++ b/_types/src/lib/src/services/lib/HandlerUtils.d.ts @@ -60,7 +60,7 @@ export interface DispatcherHandler { /** * An interface for dispatch handlers that can add and remove handler functions. */ -export interface DispatchHandler extends DispatcherHandler, MultiRegisterHandler { +export interface DispatchHandler extends DispatcherHandler, MultiRegisterHandler { // eslint-disable-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-empty-interface -- Empty interface } /** * A binder that allows assigning and invoking a single handler function. @@ -312,9 +312,9 @@ export interface BooleanMultipleHandlerFunction void; } -export interface MultiBinderInstance extends InvokableHandler, MultiRegisterHandler { +export interface MultiBinderInstance extends InvokableHandler, MultiRegisterHandler { // eslint-disable-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-empty-interface -- Empty interface } -export interface BooleanMultiBinderInstance extends InvokableBooleanHandler, MultiRegisterHandler { +export interface BooleanMultiBinderInstance extends InvokableBooleanHandler, MultiRegisterHandler { // eslint-disable-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-empty-interface -- Empty interface } export declare function allFunction Promise>(name?: string): BooleanMultipleHandlerFunction; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration export declare function bailFirstFailureFunction Promise>(name?: string): BooleanMultipleHandlerFunction; // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration diff --git a/_types/src/lib/src/string_and_binary/convert.d.ts b/_types/src/lib/src/string_and_binary/convert.d.ts index df051fa..446d4db 100644 --- a/_types/src/lib/src/string_and_binary/convert.d.ts +++ b/_types/src/lib/src/string_and_binary/convert.d.ts @@ -1,7 +1,7 @@ // REPO: https://github.com/vrtmrz/livesync-commonlib Commit hash: 6de1db1 import { arrayBufferToBase64, base64ToArrayBuffer, base64ToArrayBufferInternalBrowser, readString, writeString, tryConvertBase64ToArrayBuffer } from "octagonal-wheels/binary"; export { arrayBufferToBase64, base64ToArrayBuffer, base64ToArrayBufferInternalBrowser, readString, writeString, tryConvertBase64ToArrayBuffer, }; -export declare function arrayBufferToBase64Single(buffer: Uint8Array | ArrayBuffer): Promise; +export declare function arrayBufferToBase64Single(buffer: Uint8Array | ArrayBuffer): Promise; export { uint8ArrayToHexString, hexStringToUint8Array } from "octagonal-wheels/binary/hex"; export { encodeBinaryEach, decodeToArrayBuffer } from "octagonal-wheels/binary/encodedUTF16"; export { decodeBinary, encodeBinary } from "octagonal-wheels/binary"; diff --git a/_types/src/lib/src/worker/bgWorker.d.ts b/_types/src/lib/src/worker/bgWorker.d.ts index fa42901..55c3225 100644 --- a/_types/src/lib/src/worker/bgWorker.d.ts +++ b/_types/src/lib/src/worker/bgWorker.d.ts @@ -11,8 +11,8 @@ export declare function splitPieces2WorkerV2(dataSrc: Blob, pieceSize: number, p export declare function splitPieces2WorkerRabinKarp(dataSrc: Blob, pieceSize: number, plainSplit: boolean, minimumChunkSize: number, filename?: string, useSegmenter?: boolean): () => AsyncGenerator; export declare function encryptWorker(input: string, passphrase: string, autoCalculateIterations: boolean): Promise; export declare function decryptWorker(input: string, passphrase: string, autoCalculateIterations: boolean): Promise; -export declare function encryptHKDFWorker(input: string, passphrase: string, pbkdf2Salt: Uint8Array): Promise; -export declare function decryptHKDFWorker(input: string, passphrase: string, pbkdf2Salt: Uint8Array): Promise; +export declare function encryptHKDFWorker(input: string, passphrase: string, pbkdf2Salt: Uint8Array): Promise; +export declare function decryptHKDFWorker(input: string, passphrase: string, pbkdf2Salt: Uint8Array): Promise; export declare const tasks: Map; /** * Remove a completed (or aborted) task from both the tasks map and its worker's taskKeys set. diff --git a/_types/src/lib/src/worker/bgWorker.mock.d.ts b/_types/src/lib/src/worker/bgWorker.mock.d.ts index 5cb4877..3d58f5d 100644 --- a/_types/src/lib/src/worker/bgWorker.mock.d.ts +++ b/_types/src/lib/src/worker/bgWorker.mock.d.ts @@ -31,8 +31,8 @@ export declare function splitPieces2WorkerV2(dataSrc: Blob, pieceSize: number, p export declare function splitPieces2WorkerRabinKarp(dataSrc: Blob, pieceSize: number, plainSplit: boolean, minimumChunkSize: number, filename?: string, useSegmenter?: boolean): () => AsyncGenerator; export declare function encryptWorker(input: string, passphrase: string, autoCalculateIterations: boolean): Promise; export declare function decryptWorker(input: string, passphrase: string, autoCalculateIterations: boolean): Promise; -export declare function encryptHKDFWorker(input: string, passphrase: string, pbkdf2Salt: Uint8Array): Promise; -export declare function decryptHKDFWorker(input: string, passphrase: string, pbkdf2Salt: Uint8Array): Promise; +export declare function encryptHKDFWorker(input: string, passphrase: string, pbkdf2Salt: Uint8Array): Promise; +export declare function decryptHKDFWorker(input: string, passphrase: string, pbkdf2Salt: Uint8Array): Promise; export declare function startWorker(data: Omit): EncryptHKDFProcessItem; export declare function startWorker(data: Omit): EncryptProcessItem; export declare function startWorker(data: Omit): SplitProcessItem; diff --git a/_types/src/lib/src/worker/universalTypes.d.ts b/_types/src/lib/src/worker/universalTypes.d.ts index 6fe94a5..9dfb6ff 100644 --- a/_types/src/lib/src/worker/universalTypes.d.ts +++ b/_types/src/lib/src/worker/universalTypes.d.ts @@ -12,7 +12,7 @@ export type EncryptHKDFArguments = { type: "encryptHKDF" | "decryptHKDF"; input: string; passphrase: string; - pbkdf2Salt: Uint8Array; + pbkdf2Salt: Uint8Array; }; export type SplitArguments = { key: number; diff --git a/_types/src/modules/features/DocumentHistory/DocumentHistoryModal.d.ts b/_types/src/modules/features/DocumentHistory/DocumentHistoryModal.d.ts index 2bb69a4..f94a842 100644 --- a/_types/src/modules/features/DocumentHistory/DocumentHistoryModal.d.ts +++ b/_types/src/modules/features/DocumentHistory/DocumentHistoryModal.d.ts @@ -39,7 +39,7 @@ export declare class DocumentHistoryModal extends Modal { loadRevs(initialRev?: string): Promise; BlobURLs: Map; revokeURL(key: string): void; - generateBlobURL(key: string, data: Uint8Array): string; + generateBlobURL(key: string, data: Uint8Array): string; prepareContentView(usePreformatted?: boolean): void; appendTextDiff(diff: [number, string][]): void; appendSearchHighlightedText(container: HTMLElement, text: string): void; diff --git a/_types/src/modules/features/SetupManager.d.ts b/_types/src/modules/features/SetupManager.d.ts index 5ce55d9..da3b39d 100644 --- a/_types/src/modules/features/SetupManager.d.ts +++ b/_types/src/modules/features/SetupManager.d.ts @@ -20,7 +20,7 @@ export declare const enum UserMode { /** * 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" + Update = "unknown" // eslint-disable-line @typescript-eslint/no-duplicate-enum-values -- Duplicate enum value } /** * Setup Manager to handle onboarding and configuration setup diff --git a/src/apps/cli/entrypoint.ts b/src/apps/cli/entrypoint.ts index 9627000..5c6069c 100644 --- a/src/apps/cli/entrypoint.ts +++ b/src/apps/cli/entrypoint.ts @@ -4,9 +4,9 @@ import * as polyfill from "werift"; import { main } from "./main"; const rtcPolyfillCtor = (polyfill as any).RTCPeerConnection; -if (typeof (globalThis as any).RTCPeerConnection === "undefined" && typeof rtcPolyfillCtor === "function") { +if (typeof (global as any).RTCPeerConnection === "undefined" && typeof rtcPolyfillCtor === "function") { // Fill only the standard WebRTC global in Node CLI runtime. - (globalThis as any).RTCPeerConnection = rtcPolyfillCtor; + (global as any).RTCPeerConnection = rtcPolyfillCtor; } main().catch((error) => { diff --git a/src/apps/cli/services/NodeLocalStorage.ts b/src/apps/cli/services/NodeLocalStorage.ts index 418f225..a62df61 100644 --- a/src/apps/cli/services/NodeLocalStorage.ts +++ b/src/apps/cli/services/NodeLocalStorage.ts @@ -83,8 +83,8 @@ function createNodeLocalStorageShim(): LocalStorageShape { } export function ensureGlobalNodeLocalStorage() { - if (!("localStorage" in globalThis) || typeof (globalThis as any).localStorage?.getItem !== "function") { - (globalThis as any).localStorage = createNodeLocalStorageShim(); + if (!("localStorage" in global) || typeof (global as any).localStorage?.getItem !== "function") { + (global as any).localStorage = createNodeLocalStorageShim(); } } diff --git a/src/apps/cli/tsconfig.json b/src/apps/cli/tsconfig.json index 6edb103..c0f4df3 100644 --- a/src/apps/cli/tsconfig.json +++ b/src/apps/cli/tsconfig.json @@ -24,7 +24,7 @@ /* Path mapping */ "paths": { "@/*": ["../../*"], - "@lib/*": ["../../lib/src/*"] + "@lib/*": ["../../lib/src/*", "../../../_types/src/lib/src/*"] } }, "include": ["*.ts", "**/*.ts", "**/*.tsx"], diff --git a/src/apps/webapp/tsconfig.json b/src/apps/webapp/tsconfig.json index 58ad90c..e219871 100644 --- a/src/apps/webapp/tsconfig.json +++ b/src/apps/webapp/tsconfig.json @@ -24,7 +24,7 @@ // "baseUrl": ".", "paths": { "@/*": ["../../*"], - "@lib/*": ["../../lib/src/*"] + "@lib/*": ["../../lib/src/*", "../../../_types/src/lib/src/*"] } }, "include": ["*.ts", "**/*.ts", "**/*.tsx", "**/*.svelte"], diff --git a/src/apps/webpeer/tsconfig.app.json b/src/apps/webpeer/tsconfig.app.json index ebea849..245721e 100644 --- a/src/apps/webpeer/tsconfig.app.json +++ b/src/apps/webpeer/tsconfig.app.json @@ -19,7 +19,7 @@ "moduleDetection": "force", "paths": { "@/*": ["../../*"], - "@lib/*": ["../../lib/src/*"] + "@lib/*": ["../../lib/src/*", "../../../_types/src/lib/src/*"] } }, "include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"], diff --git a/utilsdeno/types-add-ignore.ts b/utilsdeno/types-add-ignore.ts index 0471fba..04620fb 100644 --- a/utilsdeno/types-add-ignore.ts +++ b/utilsdeno/types-add-ignore.ts @@ -1,43 +1,141 @@ import { Project, SyntaxKind } from "npm:ts-morph"; -function processFile(filePath: string,origin: string, repoHash: string): string { +function processFile(filePath: string, origin: string, repoHash: string): string { const project = new Project(); const sourceFile = project.addSourceFileAtPath(filePath); - // 0. insert a commit hash comment at the top of the file - sourceFile.insertText(0, `// REPO: ${origin} Commit hash: ${repoHash}\n`); - - // 1. Collect all 'any' type nodes in the file - const anyTypeNodes = sourceFile.getDescendantsOfKind(SyntaxKind.AnyKeyword); - const sourceText = sourceFile.getFullText(); - const lineBreak = sourceText.includes("\r\n") ? "\r\n" : "\n"; - const lines = sourceText.split(/\r?\n/); - const targetLines = new Set(); let updated = false; - // 2. Collect the line numbers that contain 'any' - anyTypeNodes.forEach((anyNode: any) => { - const { line } = sourceFile.getLineAndColumnAtPos(anyNode.getStart()); - targetLines.add(line - 1); + // 0. insert a commit hash comment at the top of the file + sourceFile.insertText(0, `// REPO: ${origin} Commit hash: ${repoHash}\n`); + updated = true; + + // 1. Replacements for Uint8Array and DataView + let sourceText = sourceFile.getFullText(); + if (sourceText.includes("Uint8Array") || sourceText.includes("DataView")) { + sourceText = sourceText.replace(/Uint8Array/g, "Uint8Array"); + sourceText = sourceText.replace(/DataView/g, "DataView"); + sourceFile.replaceWithText(sourceText); + updated = true; + } + + // 2. Remove EventEmitter import from "events" and declare class EventEmitter inline + const imports = sourceFile.getImportDeclarations(); + imports.forEach((importDecl) => { + if (importDecl.getModuleSpecifierValue() === "events") { + const defaultImport = importDecl.getDefaultImport(); + if (defaultImport && defaultImport.getText() === "EventEmitter") { + importDecl.remove(); + sourceFile.addClass({ + name: "EventEmitter", + isExported: false, + methods: [ + { name: "on", parameters: [{ name: "event", type: "string | symbol" }, { name: "listener", type: "(...args: any[]) => void" }], returnType: "this" }, + { name: "once", parameters: [{ name: "event", type: "string | symbol" }, { name: "listener", type: "(...args: any[]) => void" }], returnType: "this" }, + { name: "off", parameters: [{ name: "event", type: "string | symbol" }, { name: "listener", type: "(...args: any[]) => void" }], returnType: "this" }, + { name: "emit", parameters: [{ name: "event", type: "string | symbol" }, { name: "args", isRestParameter: true, type: "any[]" }], returnType: "boolean" }, + { name: "addListener", parameters: [{ name: "event", type: "string | symbol" }, { name: "listener", type: "(...args: any[]) => void" }], returnType: "this" }, + { name: "removeListener", parameters: [{ name: "event", type: "string | symbol" }, { name: "listener", type: "(...args: any[]) => void" }], returnType: "this" }, + { name: "removeAllListeners", parameters: [{ name: "event", isOptional: true, type: "string | symbol" }], returnType: "this" }, + ] + }); + updated = true; + } + } }); - // 3. Add an inline disable only to lines that contain 'any' - for (const lineIndex of targetLines) { + // 3. Collect targets for inline disable comments + const targetAnyLines = new Set(); + const targetEmptyObjectLines = new Set(); + const targetEmptyInterfaceLines = new Set(); + const targetDuplicateEnumLines = new Set(); + + // 3.1. 'any' type nodes + const anyTypeNodes = sourceFile.getDescendantsOfKind(SyntaxKind.AnyKeyword); + anyTypeNodes.forEach((anyNode: any) => { + const { line } = sourceFile.getLineAndColumnAtPos(anyNode.getStart()); + targetAnyLines.add(line - 1); + }); + + // 3.2. Empty object type literals {} + const typeLiterals = sourceFile.getDescendantsOfKind(SyntaxKind.TypeLiteral); + typeLiterals.forEach((node) => { + if (node.getMembers().length === 0) { + const { line } = sourceFile.getLineAndColumnAtPos(node.getStart()); + targetEmptyObjectLines.add(line - 1); + } + }); + + // 3.3. Empty interfaces + const interfaces = sourceFile.getInterfaces(); + interfaces.forEach((node) => { + if (node.getMembers().length === 0) { + const { line } = sourceFile.getLineAndColumnAtPos(node.getStart()); + targetEmptyInterfaceLines.add(line - 1); + } + }); + + // 3.4. Duplicate enum member values + const enums = sourceFile.getEnums(); + enums.forEach((enumDecl) => { + const values = new Set(); + enumDecl.getMembers().forEach((member) => { + const initValue = member.getInitializer()?.getText(); + if (initValue) { + if (values.has(initValue)) { + const { line } = sourceFile.getLineAndColumnAtPos(member.getStart()); + targetDuplicateEnumLines.add(line - 1); + } else { + values.add(initValue); + } + } + }); + }); + + // 4. Inject ignore comments line by line + const finalSourceText = sourceFile.getFullText(); + const lineBreak = finalSourceText.includes("\r\n") ? "\r\n" : "\n"; + const lines = finalSourceText.split(/\r?\n/); + + // 4.1. Add inline disable to lines that contain 'any' + for (const lineIndex of targetAnyLines) { const line = lines[lineIndex]; - if (!line) { - continue; - } - if (line.includes("eslint-disable-line @typescript-eslint/no-explicit-any")) { - continue; - } + if (!line) continue; + if (line.includes("eslint-disable-line @typescript-eslint/no-explicit-any")) continue; lines[lineIndex] = `${line} // eslint-disable-line @typescript-eslint/no-explicit-any -- Only type declaration`; updated = true; } + // 4.2. Add inline disable to lines that contain empty object {} + for (const lineIndex of targetEmptyObjectLines) { + const line = lines[lineIndex]; + if (!line) continue; + if (line.includes("eslint-disable-line") || line.includes("eslint-disable-next-line")) continue; + lines[lineIndex] = `${line} // eslint-disable-line @typescript-eslint/no-empty-object-type, @typescript-eslint/ban-types -- Empty object type`; + updated = true; + } + + // 4.3. Add inline disable to lines that contain empty interface + for (const lineIndex of targetEmptyInterfaceLines) { + const line = lines[lineIndex]; + if (!line) continue; + if (line.includes("eslint-disable-line") || line.includes("eslint-disable-next-line")) continue; + lines[lineIndex] = `${line} // eslint-disable-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-empty-interface -- Empty interface`; + updated = true; + } + + // 4.4. Add inline disable to lines with duplicate enums + for (const lineIndex of targetDuplicateEnumLines) { + const line = lines[lineIndex]; + if (!line) continue; + if (line.includes("eslint-disable-line") || line.includes("eslint-disable-next-line")) continue; + lines[lineIndex] = `${line} // eslint-disable-line @typescript-eslint/no-duplicate-enum-values -- Duplicate enum value`; + updated = true; + } + const updatedSourceText = lines.join(lineBreak); if (updated) { console.log(`Processed file: ${filePath}`); } - // Output the result return updatedSourceText; }