diff --git a/_types/src/lib/src/managers/EntryManager/EntryManager.d.ts b/_types/src/lib/src/managers/EntryManager/EntryManager.d.ts index f284247..3f92b71 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: never; }; get isOnDemandChunkEnabled(): boolean; isTargetFile(filenameSrc: string): boolean; diff --git a/_types/src/lib/src/replication/trystero/TrysteroReplicator.d.ts b/_types/src/lib/src/replication/trystero/TrysteroReplicator.d.ts index f0a395f..91355fe 100644 --- a/_types/src/lib/src/replication/trystero/TrysteroReplicator.d.ts +++ b/_types/src/lib/src/replication/trystero/TrysteroReplicator.d.ts @@ -57,7 +57,6 @@ export type AllReplicationClientStatus = { export declare class TrysteroReplicator { _env: ReplicatorHostEnv; server?: P2PHost; - replicationStatus(): {}; get settings(): import("@lib/common/models/setting.type").P2PSyncSetting; get db(): PouchDB.Database; get deviceName(): string; diff --git a/generate-types.mjs b/generate-types.mjs index b1b34cf..0092274 100644 --- a/generate-types.mjs +++ b/generate-types.mjs @@ -4,9 +4,18 @@ try { fs.rmSync("./_types", { recursive: true, force: true }); console.log("[Postbuild] Generating type definitions for fallback..."); execSync("npx tsc -p tsconfig.types.json", { stdio: "inherit" }); + console.log("[Postbuild] Type definitions generated successfully."); } catch (error) { // Ignore compiler errors from tsc so that pre-existing type errors in the submodule // do not block the build from succeeding. console.warn("[Postbuild] Type definitions generated with some compilation warnings."); } + +try { + console.log("[Postbuild] Type definitions generated successfully. Adding ignore comments..."); + execSync("Deno run -A ./utilsdeno/types-add-ignore.ts", { stdio: "inherit" }); + console.log("[Postbuild] Ignore comments added successfully."); +} catch (error) { + console.warn("[Postbuild] Failed to add ignore comments to type definitions."); +} diff --git a/src/apps/cli/adapters/NodeConversionAdapter.ts b/src/apps/cli/adapters/NodeConversionAdapter.ts index 8578e14..40f2434 100644 --- a/src/apps/cli/adapters/NodeConversionAdapter.ts +++ b/src/apps/cli/adapters/NodeConversionAdapter.ts @@ -1,4 +1,4 @@ -import * as path from "path"; +import { nodePath as path } from "@cli/lib/nodeModules"; import type { UXFileInfoStub, UXFolderInfo } from "@lib/common/models/fileaccess.type"; import type { IConversionAdapter } from "@lib/serviceModules/adapters"; import type { NodeFile, NodeFolder } from "./NodeTypes"; diff --git a/src/apps/cli/adapters/NodeFileSystemAdapter.ts b/src/apps/cli/adapters/NodeFileSystemAdapter.ts index 5fb70f4..3adcfae 100644 --- a/src/apps/cli/adapters/NodeFileSystemAdapter.ts +++ b/src/apps/cli/adapters/NodeFileSystemAdapter.ts @@ -1,5 +1,4 @@ -import * as fs from "fs/promises"; -import * as path from "path"; +import { nodePath as path, fs } from "@cli/lib/nodeModules"; import type { FilePath } from "@lib/common/models/db.type"; import type { UXStat } from "@lib/common/models/fileaccess.type"; import type { IFileSystemAdapter } from "@lib/serviceModules/adapters"; diff --git a/src/apps/cli/adapters/NodePathAdapter.ts b/src/apps/cli/adapters/NodePathAdapter.ts index 6b3c3de..0e48b7b 100644 --- a/src/apps/cli/adapters/NodePathAdapter.ts +++ b/src/apps/cli/adapters/NodePathAdapter.ts @@ -1,4 +1,4 @@ -import * as path from "path"; +import { nodePath as path } from "@cli/lib/nodeModules"; import type { FilePath } from "@lib/common/models/db.type"; import type { IPathAdapter } from "@lib/serviceModules/adapters"; import type { NodeFile } from "./NodeTypes"; diff --git a/src/apps/cli/adapters/NodeStorageAdapter.ts b/src/apps/cli/adapters/NodeStorageAdapter.ts index d84486a..e5acaba 100644 --- a/src/apps/cli/adapters/NodeStorageAdapter.ts +++ b/src/apps/cli/adapters/NodeStorageAdapter.ts @@ -1,5 +1,4 @@ -import * as fs from "fs/promises"; -import * as path from "path"; +import { nodePath as path, fs } from "@cli/lib/nodeModules"; import type { UXDataWriteOptions } from "@lib/common/models/fileaccess.type"; import type { IStorageAdapter } from "@lib/serviceModules/adapters"; import type { NodeStat } from "./NodeTypes"; diff --git a/src/apps/cli/adapters/NodeVaultAdapter.ts b/src/apps/cli/adapters/NodeVaultAdapter.ts index f91077c..5602995 100644 --- a/src/apps/cli/adapters/NodeVaultAdapter.ts +++ b/src/apps/cli/adapters/NodeVaultAdapter.ts @@ -1,5 +1,4 @@ -import * as fs from "fs/promises"; -import * as path from "path"; +import { nodePath as path, fs } from "@cli/lib/nodeModules"; import type { UXDataWriteOptions } from "@lib/common/models/fileaccess.type"; import type { IVaultAdapter } from "@lib/serviceModules/adapters"; import type { NodeFile, NodeFolder } from "./NodeTypes"; diff --git a/src/apps/cli/commands/p2p.ts b/src/apps/cli/commands/p2p.ts index e579ba4..42e10f7 100644 --- a/src/apps/cli/commands/p2p.ts +++ b/src/apps/cli/commands/p2p.ts @@ -2,13 +2,14 @@ import { P2P_DEFAULT_SETTINGS } from "@lib/common/models/setting.const.defaults" import { LiveSyncTrysteroReplicator } from "@lib/replication/trystero/LiveSyncTrysteroReplicator"; import type { ServiceContext } from "@lib/services/base/ServiceBase"; import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore"; +import { compatGlobal } from "@lib/common/coreEnvFunctions"; type CLIP2PPeer = { peerId: string; name: string; }; function delay(ms: number): Promise { - return new Promise((resolve) => setTimeout(resolve, ms)); + return new Promise((resolve) => compatGlobal.setTimeout(resolve, ms)); } export function parseTimeoutSeconds(value: string, commandName: string): number { diff --git a/src/apps/cli/commands/runCommand.ts b/src/apps/cli/commands/runCommand.ts index 254c5a6..8354b4f 100644 --- a/src/apps/cli/commands/runCommand.ts +++ b/src/apps/cli/commands/runCommand.ts @@ -10,14 +10,14 @@ import { performFullScan } from "@lib/serviceFeatures/offlineScanner"; import { activateRemoteConfiguration, createRemoteConfigurationId } from "@lib/serviceFeatures/remoteConfig"; import { UnresolvedErrorManager } from "@lib/services/base/UnresolvedErrorManager"; import { stripAllPrefixes } from "@lib/string_and_binary/path"; -import * as fs from "fs/promises"; -import * as path from "path"; +import { nodePath as path, fs } from "@cli/lib/nodeModules"; import { collectPeers, openP2PHost, parseTimeoutSeconds, syncWithPeer } from "./p2p"; import type { CLICommandContext, CLIOptions } from "./types"; import { promptForPassphrase, readStdinAsUtf8, toArrayBuffer, toDatabaseRelativePath } from "./utils"; import type { EntryMilestoneInfo } from "@lib/common/models/db.definition"; import type { LiveSyncCouchDBReplicator } from "@lib/replication/couchdb/LiveSyncReplicator"; import type { LiveSyncJournalReplicator } from "@lib/replication/journal/LiveSyncJournalReplicator"; +import { compatGlobal } from "@lib/common/coreEnvFunctions"; function redactConnectionString(uri: string): string { return uri.replace(/\/\/([^@/]+)@/u, "//***@"); @@ -156,11 +156,11 @@ export async function runCommand(options: CLIOptions, context: CLICommandContext ); } } - pollTimer = setTimeout(poll as unknown as () => void, currentIntervalMs); + pollTimer = compatGlobal.setTimeout(poll as unknown as () => void, currentIntervalMs); }; - let pollTimer: ReturnType = setTimeout(poll as unknown as () => void, currentIntervalMs); + let pollTimer: number = compatGlobal.setTimeout(poll as unknown as () => void, currentIntervalMs); core.services.appLifecycle.onUnload.addHandler(async () => { - clearTimeout(pollTimer); + compatGlobal.clearTimeout(pollTimer); return await Promise.resolve(true); }); } else { diff --git a/src/apps/cli/commands/utils.ts b/src/apps/cli/commands/utils.ts index b596a71..1d2ec53 100644 --- a/src/apps/cli/commands/utils.ts +++ b/src/apps/cli/commands/utils.ts @@ -1,6 +1,4 @@ -import * as path from "path"; -import * as readline from "node:readline/promises"; - +import { nodePath as path, readline } from "@cli/lib/nodeModules"; export function toArrayBuffer(data: Buffer): ArrayBuffer { return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer; } diff --git a/src/apps/cli/lib/nodeModules.ts b/src/apps/cli/lib/nodeModules.ts new file mode 100644 index 0000000..01f6414 --- /dev/null +++ b/src/apps/cli/lib/nodeModules.ts @@ -0,0 +1,6 @@ +import * as nodePath from "node:path"; +import * as nodeFs from "node:fs"; +import * as fs from "node:fs/promises"; +import * as readline from "node:readline/promises"; +import type { Stats } from "node:fs"; +export { nodePath, nodeFs, fs, readline, type Stats }; diff --git a/src/apps/cli/main.ts b/src/apps/cli/main.ts index 0d1d640..177f015 100644 --- a/src/apps/cli/main.ts +++ b/src/apps/cli/main.ts @@ -3,9 +3,8 @@ * Command-line version of Self-hosted LiveSync plugin for syncing vaults without Obsidian */ -import * as fs from "fs/promises"; -import * as fsSync from "fs"; -import * as path from "path"; +import { nodePath as path, fs, nodeFs as fsSync } from "@cli/lib/nodeModules"; + import { NodeServiceContext, NodeServiceHub } from "./services/NodeServiceHub"; import { configureNodeLocalStorage, ensureGlobalNodeLocalStorage } from "./services/NodeLocalStorage"; import { LiveSyncBaseCore } from "@/LiveSyncBaseCore"; diff --git a/src/apps/cli/managers/CLIStorageEventManagerAdapter.ts b/src/apps/cli/managers/CLIStorageEventManagerAdapter.ts index 66cc712..ac95d20 100644 --- a/src/apps/cli/managers/CLIStorageEventManagerAdapter.ts +++ b/src/apps/cli/managers/CLIStorageEventManagerAdapter.ts @@ -1,3 +1,4 @@ +import { nodePath as path, fs, type Stats } from "@cli/lib/nodeModules"; import type { FilePath } from "@lib/common/models/db.type"; import type { FileEventItem, UXFileInfoStub, UXInternalFileInfoStub } from "@lib/common/models/fileaccess.type"; import type { @@ -11,9 +12,6 @@ import type { } from "@lib/managers/adapters"; import type { FileEventItemSentinel } from "@lib/managers/StorageEventManager"; import { watch as chokidarWatch, type FSWatcher } from "chokidar"; -import type { Stats } from "fs"; -import * as fs from "fs/promises"; -import * as path from "path"; import type { NodeFile, NodeFolder } from "@cli/adapters/NodeTypes"; import type { IgnoreRules } from "@cli/serviceModules/IgnoreRules"; diff --git a/src/apps/cli/serviceModules/IgnoreRules.ts b/src/apps/cli/serviceModules/IgnoreRules.ts index 0b7fc41..f03edc6 100644 --- a/src/apps/cli/serviceModules/IgnoreRules.ts +++ b/src/apps/cli/serviceModules/IgnoreRules.ts @@ -1,6 +1,4 @@ -import * as fs from "fs/promises"; -import * as path from "path"; - +import { fs, nodePath as path } from "@cli/lib/nodeModules"; import { minimatch } from "minimatch"; /** diff --git a/src/apps/cli/services/NodeKeyValueDBService.ts b/src/apps/cli/services/NodeKeyValueDBService.ts index 676e754..2d0fd78 100644 --- a/src/apps/cli/services/NodeKeyValueDBService.ts +++ b/src/apps/cli/services/NodeKeyValueDBService.ts @@ -1,3 +1,4 @@ +import { nodeFs, nodePath } from "@cli/lib/nodeModules"; import { LOG_LEVEL_NOTICE, LOG_LEVEL_VERBOSE } from "@lib/common/logger"; import type { KeyValueDatabase } from "@lib/interfaces/KeyValueDatabase"; import type { IKeyValueDBService, IVaultService } from "@lib/services/base/IService"; @@ -5,8 +6,6 @@ import { ServiceBase, type ServiceContext } from "@lib/services/base/ServiceBase import type { InjectableAppLifecycleService } from "@lib/services/implements/injectable/InjectableAppLifecycleService"; import type { InjectableDatabaseEventService } from "@lib/services/implements/injectable/InjectableDatabaseEventService"; import { createInstanceLogFunction } from "@lib/services/lib/logUtils"; -import * as nodeFs from "node:fs"; -import * as nodePath from "node:path"; import type { SimpleStore } from "octagonal-wheels/databases/SimpleStoreBase"; const NODE_KV_TYPED_KEY = "__nodeKvType"; diff --git a/src/apps/cli/services/NodeLocalStorage.ts b/src/apps/cli/services/NodeLocalStorage.ts index 53bb122..9b6e771 100644 --- a/src/apps/cli/services/NodeLocalStorage.ts +++ b/src/apps/cli/services/NodeLocalStorage.ts @@ -1,5 +1,4 @@ -import * as nodeFs from "node:fs"; -import * as nodePath from "node:path"; +import { nodeFs, nodePath } from "@cli/lib/nodeModules"; type LocalStorageShape = { getItem(key: string): string | null; diff --git a/src/apps/cli/services/NodeServiceHub.ts b/src/apps/cli/services/NodeServiceHub.ts index 78bc51c..3b6e0f5 100644 --- a/src/apps/cli/services/NodeServiceHub.ts +++ b/src/apps/cli/services/NodeServiceHub.ts @@ -18,13 +18,14 @@ import { InjectableServiceHub } from "@lib/services/implements/injectable/Inject import { InjectableTestService } from "@lib/services/implements/injectable/InjectableTestService"; import { InjectableTweakValueService } from "@lib/services/implements/injectable/InjectableTweakValueService"; import { InjectableVaultServiceCompat } from "@lib/services/implements/injectable/InjectableVaultService"; -import * as nodePath from "node:path"; + // import { HeadlessDatabaseService } from "@lib/services/implements/headless/HeadlessDatabaseService"; import type { ObsidianLiveSyncSettings } from "@lib/common/models/setting.type"; import { DatabaseService } from "@lib/services/base/DatabaseService"; import type { ServiceInstances } from "@lib/services/ServiceHub"; import { NodeKeyValueDBService } from "./NodeKeyValueDBService"; import { NodeSettingService } from "./NodeSettingService"; +import { nodePath } from "@cli/lib/nodeModules"; export class NodeServiceContext extends ServiceContext { databasePath: string; diff --git a/src/apps/webapp/main.ts b/src/apps/webapp/main.ts index 02e9736..4293aa6 100644 --- a/src/apps/webapp/main.ts +++ b/src/apps/webapp/main.ts @@ -19,6 +19,7 @@ import { SetupManager } from "@/modules/features/SetupManager"; import { useSetupManagerHandlersFeature } from "@/serviceFeatures/setupObsidian/setupManagerHandlers"; import { useP2PReplicatorCommands } from "@lib/replication/trystero/useP2PReplicatorCommands"; import { useP2PReplicatorFeature } from "@lib/replication/trystero/useP2PReplicatorFeature"; +import { compatGlobal } from "@lib/common/coreEnvFunctions"; const SETTINGS_DIR = ".livesync"; const SETTINGS_FILE = "settings.json"; @@ -103,7 +104,7 @@ class LiveSyncWebApp { console.log("[AppLifecycle] Restart requested"); await this.shutdown(); await this.initialize(); - setTimeout(() => { + compatGlobal.setTimeout(() => { window.location.reload(); }, 1000); })(); diff --git a/src/apps/webpeer/src/P2PReplicatorShim.ts b/src/apps/webpeer/src/P2PReplicatorShim.ts index 2840e94..447ca33 100644 --- a/src/apps/webpeer/src/P2PReplicatorShim.ts +++ b/src/apps/webpeer/src/P2PReplicatorShim.ts @@ -34,6 +34,7 @@ import { SimpleStoreIDBv2 } from "octagonal-wheels/databases/SimpleStoreIDBv2"; import type { BrowserAPIService } from "@lib/services/implements/browser/BrowserAPIService"; import type { InjectableSettingService } from "@lib/services/implements/injectable/InjectableSettingService"; import { LiveSyncTrysteroReplicator } from "@lib/replication/trystero/LiveSyncTrysteroReplicator"; +import { compatGlobal } from "@lib/common/coreEnvFunctions"; function addToList(item: string, list: string) { return unique( @@ -153,7 +154,7 @@ export class P2PReplicatorShim implements P2PReplicatorBase { this._initP2PReplicator(); - setTimeout(() => { + compatGlobal.setTimeout(() => { if (this.settings.P2P_AutoStart && this.settings.P2P_Enabled) { void this.open(); } diff --git a/utilsdeno/types-add-ignore.ts b/utilsdeno/types-add-ignore.ts index f837ec8..0e6109c 100644 --- a/utilsdeno/types-add-ignore.ts +++ b/utilsdeno/types-add-ignore.ts @@ -35,7 +35,7 @@ function processFile(filePath: string) { return updatedSourceText; } -const targetDir = `../_types/`; +const targetDir = `./_types/`; async function processDir(dirPath: string) { for await (const entry of Deno.readDir(dirPath)) {