Merge pull request #1355 from vrtmrz/refactor/source-responsibility-layout

refactor: organise source files by ownership
This commit is contained in:
vorotamoroz authored and GitHub committed 2026-11-13 20:10:33 +09:00
commit daa450c6c7
115 files changed
+115 -103

No files matched your search

+2
View File
@@ -66,6 +66,8 @@ Always adhere to the following stylistic and spelling rules:
- `cli`: A Command Line Interface application. CLI unit tests are next to their source under [src/apps/cli](src/apps/cli), while CLI End-to-End tests are in [test/e2e-cli](test/e2e-cli) and run through the local [CLI package scripts](src/apps/cli/package.json).
- `webapp`: A Web-based application.
- `webpeer`: A Web-based peer utility.
5. **Source Ownership and Imports**:
- Follow [Source layout](devs.md#source-layout) when adding or moving code. Check ownership and dependency direction before introducing a helper directory, preserve established placements that already express their role, and keep the `src/common/core/` host-independent boundary intact.
---
+14 -6
View File
@@ -180,13 +180,21 @@ Use interaction-based, London School unit tests for the composition boundary. Ve
See [Service feature and legacy Module boundaries](docs/design_docs/service_feature_and_legacy_module_boundaries.md) for the selection criteria, current examples, reasons to avoid new `AbstractModule` subclasses, incremental migration guidance, and test shapes. Commonlib's [service feature composition guide](https://github.com/vrtmrz/livesync-commonlib/blob/main/docs/service-feature-composition.md) defines the shared host-neutral boundary. Fancy Kit's [shared runtime composition guide](https://github.com/vrtmrz/fancy-kit/blob/main/docs/runtime-composition.md) maps content application, cleanup, progress, and host adapters to their owning APIs, with their publication status and consumer responsibilities.
Legacy Modules remain grouped by directory:
### Source layout
- `core/` contains platform-independent core behaviour;
- `coreObsidian/` contains Obsidian-specific core behaviour;
- `essential/` contains required Modules;
- `features/` contains optional features; and
- `extras/` contains development and testing tools.
Place code with the feature or architectural role that owns its behaviour. A caller outside that feature does not make a private helper or dialogue contract common code. Preserve established names and locations when they already express that ownership; naming consistency alone is not a reason to move an existing module.
`src/common/` contains application-wide code and may include host-specific dependencies. Only `src/common/core/` defines a host-independent boundary, currently organised into `replication/` and `settings/`. Code in that subtree must not import Obsidian APIs, host-specific Modules or Views, or files elsewhere in `src/common/`. Keep translation, UI, and lifecycle helpers outside that boundary. Commonlib remains the owner of shared package contracts and implementations.
Keep Managers, ServiceModules, and serviceFeatures aligned with their corresponding Commonlib roles. Their implementations live under `src/managers/`, `src/serviceModules/`, and `src/serviceFeatures/`; host Service and Hub implementations remain under `src/modules/services/`. A helper directory is not a separate feature registration and does not imply that its contents can be enabled or removed independently.
Preserve existing feature entry files when organising their helpers. A small set of new helpers can use dotted names, such as `compatibilityReview.evaluation.ts`; a larger group can use a companion directory. Existing descriptive names, such as `fileRepairPresentation.ts`, remain valid. Keep closely related files at a level where their internal references stay within the same directory or its descendants. For example, the Joined Devices dialogue, view, command, and types share `src/serviceFeatures/joinedDevices/`.
Use relative imports (`./...`) for closely related code in the same directory or below it, and `@/...` for dependencies across feature or architectural boundaries, including dependencies located in ancestor directories. Application source must not use upward relative imports (`../...`); tests and build configuration may use them. If putting a private helper in a subdirectory makes it depend on its owner above, reconsider the grouping instead of using an alias to conceal that relationship. Keeping the files together, or using a dotted helper name, can preserve both ownership and import direction.
`src/features/` contains existing add-ons and feature implementations. Its location does not guarantee host independence: a feature may contain both shared logic and Obsidian adapters. `src/modules/` retains legacy Modules awaiting migration, their bases, Core start-up and lifecycle wiring, and existing host Service implementations. A Module's UI and helpers may stay with it in organised subdirectories even when those files do not inherit from `AbstractModule`. Moving files does not migrate that Module to a serviceFeature.
Within the legacy Module layer, `main/` contains application lifecycle wiring, `coreFeatures/` contains core behaviour, `coreObsidian/` contains Obsidian-specific core helpers, `essentialObsidian/` contains required Obsidian Modules and helpers, `features/` contains feature Modules and supporting code, and `extras/` contains development tools. Keep reusable host UI under `src/modules/services/LiveSyncUI/` and feature-owned dialogues with their feature. For example, SetupWizard dialogue contracts belong in `dialogs/setupDialogTypes.ts`, while connection probes and checks belong in `connection/`.
### UI commands and dialogue ownership
+11 -9
View File
@@ -10,6 +10,8 @@ status: accepted
This is the implemented architecture for Self-hosted LiveSync 1.0.24 with `@vrtmrz/livesync-commonlib` 0.1.21. It is an implementation overview for developers maintaining the composition or adding a built-in provider. The corresponding Commonlib source was inspected at commit `e770f617ff0fc88f4823226b0ab3aefdff50cc1e`.
Source-path update, 13th November, 2026: host-source references below follow the reorganised source layout. The original review date and version baseline are retained.
## Status, scope, and source-of-truth boundary
The plug-in repository is the source of truth for host composition, host scheduling, Obsidian/CLI/WebApp/WebPeer integration, provider declarations, and host-owned resource adapters. Commonlib is the source of truth for the provider contract, the active-publication state machine, typed replication runners, P2P service ownership, and Journal transport primitives. This repository consumes Commonlib as the published `0.1.21` package; it does not maintain a source mirror or a generated fallback.
@@ -20,7 +22,7 @@ The implementation has three built-in providers:
- Object Storage, composed by this repository; and
- P2P, composed by Commonlib's `useP2PReplicatorFeature` in each application runtime which supports it.
The catalogue is closed at host composition. `src/common/replicatorProviders.ts` exhaustively composes the central providers, while the Commonlib P2P feature composes its P2P provider. This is not a runtime third-party registry: a provider cannot be added by registering a name, loading a plug-in, or supplying a setting at runtime. Adding a provider means changing the relevant Commonlib and host composition, then shipping and testing that composition.
The catalogue is closed at host composition. `src/common/core/replication/providers.ts` exhaustively composes the central providers, while the Commonlib P2P feature composes its P2P provider. This is not a runtime third-party registry: a provider cannot be added by registering a name, loading a plug-in, or supplying a setting at runtime. Adding a provider means changing the relevant Commonlib and host composition, then shipping and testing that composition.
The three capability ADRs record the decisions which led to this shape. They are useful decision history, but this document describes the current implementation and its ownership boundaries rather than repeating the ADR sequence.
@@ -238,7 +240,7 @@ Suspension and retirement therefore have different guarantees. `ReplicatorServic
| Resource or probe | Owner | Lifetime and disposal rule |
| --- | --- | --- |
| Active Replicator publication | Commonlib `ReplicatorService` | Publication retirement fences admission, drains reservations, calls `closeReplication`, and completes the retirement. |
| Central connection probe | Host resource factory in `src/common/replicatorResources/connection.ts` | A caller-owned CouchDB or Object Storage snapshot backed by a concrete Replicator/connection; dispose it in `finally`. It does not replace the active publication. |
| Central connection probe | Host resource factory in `src/common/core/replication/resources/connection.ts` | A caller-owned CouchDB or Object Storage snapshot backed by a concrete Replicator/connection; dispose it in `finally`. It does not replace the active publication. |
| Preferred-tweak probe | Host `preferredTweak` resource factory | Read through the declared resource, then dispose the owned resource. |
| Security Seed probe | Host `securitySeed` resource factory and the replication preflight | Use `createRemoteResource` and `withOwnedRemoteResource`; reject an empty seed and always dispose the resource. It does not assume that an active Replicator exists. |
| Synchronisation-information probe | Host `synchronisationInformation` resource factory | Check or read through the resource and dispose it; an unavailable remote is not treated as a confirmed absence. |
@@ -272,13 +274,13 @@ A new provider is appropriate when a remote kind needs a distinct active Replica
1. **Define the canonical remote kind in Commonlib.** Add the `RemoteType` value and its setting type in `src/common/models/setting.const.ts` and `src/common/models/setting.type.ts`, update exports such as `src/common/types.ts`, and add defaults or persistence fields only where the provider needs them. Add focused setting and migration tests.
2. **Implement the Replicator in Commonlib.** Place the provider-specific Replicator and transport code under `src/replication/<provider>/`. Implement the minimal `ReplicatorInstance` contract, cancellation, and close semantics. Keep provider-specific operations on focused facets. Add unit tests for success, cancellation, failure, stop, and replacement-sensitive clean-up.
3. **Define effective configuration identity.** Include every setting which changes the live binding, and exclude profile labels or policy-only settings. Normalise two spellings only when the runtime genuinely treats them as equivalent. Put shared identity logic in Commonlib when the provider is shared there; put the host projection in `src/common/replicatorConfigurationIdentity.ts` when this repository owns it. Test that equivalent effective settings retain an instance and binding changes replace it. Never expose identity values in logs, UI, or persistence.
3. **Define effective configuration identity.** Include every setting which changes the live binding, and exclude profile labels or policy-only settings. Normalise two spellings only when the runtime genuinely treats them as equivalent. Put shared identity logic in Commonlib when the provider is shared there; put the host projection in `src/common/core/replication/configurationIdentity.ts` when this repository owns it. Test that equivalent effective settings retain an instance and binding changes replace it. Never expose identity values in logs, UI, or persistence.
4. **Add configuration and setup seams in Commonlib.** If the provider has a connection string, profile, migration, or document representation, update the applicable files, including `src/common/ConnectionString.ts`, `src/remoteConfigurations.ts`, `src/common/configForDoc.ts`, `src/API/processSetting.ts`, and their focused tests. These files are conditional: do not add a setting representation which the provider does not need.
5. **Declare the provider contract surface at its composition owner.** Add a central provider to the tuple and definition map in this repository's `src/common/replicatorProviders.ts`; add a P2P-like provider to the closed tuple owned by its Commonlib `serviceFeature`. In the definition, declare readiness, all four remote-resource capability entries, user and unattended OneShot runners, Continuous where applicable, `stopActiveTransfer`, and central administration where applicable. Extend `RemoteResource` kinds only for a genuinely cross-provider resource; do not encode provider-specific helpers as generic capabilities.
5. **Declare the provider contract surface at its composition owner.** Add a central provider to the tuple and definition map in this repository's `src/common/core/replication/providers.ts`; add a P2P-like provider to the closed tuple owned by its Commonlib `serviceFeature`. In the definition, declare readiness, all four remote-resource capability entries, user and unattended OneShot runners, Continuous where applicable, `stopActiveTransfer`, and central administration where applicable. Extend `RemoteResource` kinds only for a genuinely cross-provider resource; do not encode provider-specific helpers as generic capabilities.
6. **Implement stateful transport ownership, if required.** For a P2P-like provider, add a stable service owner, focused views, lifecycle ownership, binding identity, session retirement, and automation fences in Commonlib, then compose it through a `serviceFeature`. Keep any active adapter non-owning if the service owns a replaceable transport. Add lifecycle, stale-callback, probe, and database-replacement tests before host integration.
7. **Compose the provider in each supporting application.** Central definitions are registered by `LiveSyncBaseCore`. A dedicated stateful feature must be composed from the applicable hosts: `src/main.ts`, `src/apps/cli/main.ts`, `src/apps/webapp/WebAppRuntime.ts`, and `src/apps/webpeer/src/WebPeerRuntime.ts`. Each selected catalogue must remain exhaustive and closed; add no runtime provider registry.
8. **Add host-owned resources and administration.** Add or extend `src/common/replicatorResources/` for connection, preferred-tweak, Security Seed, and synchronisation-information probes. Add provider-specific central verification and mutations in `src/common/centralRemoteAdministration.ts` when applicable. Test ownership, snapshots, the distinction between unavailable and absent states, postconditions, and disposal.
9. **Integrate setup and user-facing configuration.** Update the relevant setup dialogue files under `src/modules/features/SetupWizard/dialogs/`, including `dialogs/setupDialogTypes.ts`, SetupManager or setup features, remote configuration handling, and message resources under `src/common/messagesYAML` plus generated baked messages where required. Follow the terminology and settings mappings in the repository documentation, and add setup, serialisation, and migration tests.
8. **Add host-owned resources and administration.** Add or extend `src/common/core/replication/resources/` for connection, preferred-tweak, Security Seed, and synchronisation-information probes. Add provider-specific central verification and mutations in `src/common/core/replication/centralRemoteAdministration.ts` when applicable. Test ownership, snapshots, the distinction between unavailable and absent states, postconditions, and disposal.
9. **Integrate setup and user-facing configuration.** Update setup dialogues under `src/modules/features/SetupWizard/dialogs/`, connection checks under `src/modules/features/SetupWizard/connection/`, and dialogue contracts in `src/modules/features/SetupWizard/dialogs/setupDialogTypes.ts`. The legacy `SetupManager` Module remains at `src/modules/features/SetupManager.ts`. Update remote configuration handling and message resources under `src/common/messagesYAML` plus generated baked messages where required. Follow the terminology and settings mappings in the repository documentation, and add setup, serialisation, and migration tests.
10. **Integrate host operations and triggers.** Adapt only the capability call sites which the provider supports. Check `src/serviceFeatures/replicationScheduling.ts`, `src/serviceFeatures/replication/`, CLI commands under `src/apps/cli/commands`, and application-specific lifecycle composition. Ensure unattended paths use `NO_INTERACTION`, periodic and resume fallback obey capability outcomes, and no caller reaches for `getNewReplicator` or the `LiveSyncBaseCore.replicator` compatibility getter.
11. **Validate the package boundary.** In Commonlib, run its focused unit tests, build or pack the exact candidate artefact, and test the downstream LiveSync consumer against that artefact. In this repository, run provider map, configuration-identity, resource, central-administration, scheduling, and replication-feature unit tests. Add a real remote integration test, CLI E2E coverage, or real Obsidian E2E coverage for every boundary the provider claims to support.
@@ -303,9 +305,9 @@ A provider is complete only when its source ownership, replacement fence, capabi
| Concern | Source and tests |
| --- | --- |
| Host composition and compatibility boundary | [`LiveSyncBaseCore.ts`](../../src/LiveSyncBaseCore.ts), [`main.ts`](../../src/main.ts), [`src/apps/cli/main.ts`](../../src/apps/cli/main.ts), [`WebAppRuntime.ts`](../../src/apps/webapp/WebAppRuntime.ts), [`WebPeerRuntime.ts`](../../src/apps/webpeer/src/WebPeerRuntime.ts) |
| Closed central provider map | [`replicatorProviders.ts`](../../src/common/replicatorProviders.ts), [`replicatorProviders.unit.spec.ts`](../../src/common/replicatorProviders.unit.spec.ts) |
| Provider identities and resources | [`replicatorConfigurationIdentity.ts`](../../src/common/replicatorConfigurationIdentity.ts), [`replicatorResources/`](../../src/common/replicatorResources/index.ts), [`replicatorResources.unit.spec.ts`](../../src/common/replicatorResources.unit.spec.ts) |
| Central administration and preflight | [`centralRemoteAdministration.ts`](../../src/common/centralRemoteAdministration.ts), [`centralRemoteAdministration.unit.spec.ts`](../../src/common/centralRemoteAdministration.unit.spec.ts), [`replication/preflight.ts`](../../src/serviceFeatures/replication/preflight.ts) |
| Closed central provider map | [`providers.ts`](../../src/common/core/replication/providers.ts), [`providers.unit.spec.ts`](../../src/common/core/replication/providers.unit.spec.ts) |
| Provider identities and resources | [`configurationIdentity.ts`](../../src/common/core/replication/configurationIdentity.ts), [`resources/`](../../src/common/core/replication/resources/index.ts), [`resources.unit.spec.ts`](../../src/common/core/replication/resources.unit.spec.ts) |
| Central administration and preflight | [`centralRemoteAdministration.ts`](../../src/common/core/replication/centralRemoteAdministration.ts), [`centralRemoteAdministration.unit.spec.ts`](../../src/common/core/replication/centralRemoteAdministration.unit.spec.ts), [`replication/preflight.ts`](../../src/serviceFeatures/replication/preflight.ts) |
| Host scheduling and replication feature | [`replicationScheduling.ts`](../../src/serviceFeatures/replicationScheduling.ts), [`replicationScheduling.unit.spec.ts`](../../src/serviceFeatures/replicationScheduling.unit.spec.ts), [`replication/index.ts`](../../src/serviceFeatures/replication/index.ts) |
| Service graph and bounded local activity | [`ObsidianServices.ts`](../../src/modules/services/ObsidianServices.ts), [`ObsidianServiceHub.ts`](../../src/modules/services/ObsidianServiceHub.ts) |
| Architecture guidance | [`devs.md`](../../devs.md), [Service feature and legacy Module boundaries](service_feature_and_legacy_module_boundaries.md), [Project glossary](../glossary.md), [Documentation style and vocabulary conventions](../terms.md), [`docs/settings.md`](../settings.md), [`docs/troubleshooting.md`](../troubleshooting.md) |
+1 -1
View File
@@ -28,7 +28,7 @@ import type { ServiceModules } from "@vrtmrz/livesync-commonlib/compat/interface
import { usePrepareDatabaseForUse } from "@vrtmrz/livesync-commonlib/compat/serviceFeatures/prepareDatabaseForUse";
import type { Constructor } from "@vrtmrz/livesync-commonlib/compat/common/utils.type";
import { useReplicationScheduling, type ReplicationSchedulingControl } from "./serviceFeatures/replicationScheduling";
import { createCentralReplicatorProviderDefinitions } from "./common/replicatorProviders";
import { createCentralReplicatorProviderDefinitions } from "./common/core/replication/providers";
import { useReplicationFeature } from "./serviceFeatures/replication";
import { useConflictResolutionFeature } from "./serviceFeatures/conflictResolution";
import { createInstanceLogFunction } from "@vrtmrz/livesync-commonlib/compat/services/lib/logUtils";
+1 -1
View File
@@ -1,5 +1,5 @@
import type { ObsidianLiveSyncSettings } from "@vrtmrz/livesync-commonlib/compat/common/types";
import { createNewVaultSettings } from "@/common/newVaultSettings.ts";
import { createNewVaultSettings } from "@/common/core/settings/newVaultSettings.ts";
export function createDefaultCliSettings(): ObsidianLiveSyncSettings {
return {
+1 -1
View File
@@ -27,7 +27,7 @@ import {
REMOTE_RESOURCE_KINDS,
USER_INITIATED_REPLICATION_AUTHORITY,
} from "@vrtmrz/livesync-commonlib/replication";
import { withOwnedRemoteResource } from "@/common/ownedRemoteResource";
import { withOwnedRemoteResource } from "@/common/core/replication/ownedRemoteResource";
import { runJournalSkipCommand } from "./journalSkip";
import {
isCentralRemoteAdministrationCommand,
+1 -1
View File
@@ -4,7 +4,7 @@ import {
type ObsidianLiveSyncSettings,
} from "@vrtmrz/livesync-commonlib/compat/common/types";
import type { RemoteConnectionProbe } from "@vrtmrz/livesync-commonlib/replication";
import { resolveInitialPathIdentity } from "@/common/initialPathIdentity";
import { resolveInitialPathIdentity } from "@/common/core/replication/initialPathIdentity";
/** Adopt an existing central remote only for the first explicit Fetch. */
export async function resolveInitialFetchPathIdentity(
@@ -4,7 +4,7 @@ import { createNewVaultSettings } from "@vrtmrz/livesync-commonlib/settings";
import {
getCouchDBReplicatorConfigurationIdentity,
getObjectStorageReplicatorConfigurationIdentity,
} from "./replicatorConfigurationIdentity";
} from "./configurationIdentity";
describe("active Replicator configuration identity", () => {
it("treats an absent headers-only CouchDB cache switch as off and leaves Object Storage unaffected", () => {
@@ -26,7 +26,7 @@ import { LiveSyncJournalReplicator } from "@vrtmrz/livesync-commonlib/compat/rep
import {
getCouchDBReplicatorConfigurationIdentity,
getObjectStorageReplicatorConfigurationIdentity,
} from "./replicatorConfigurationIdentity";
} from "./configurationIdentity";
import {
createCouchDBJoinedDevicesResourceFactory,
createObjectStorageJoinedDevicesResourceFactory,
@@ -38,7 +38,7 @@ import {
createObjectStorageConnectionProbeFactory,
createObjectStoragePreferredTweakProbeFactory,
createObjectStorageSecuritySeedResourceFactory,
} from "./replicatorResources";
} from "./resources";
import {
COUCHDB_CENTRAL_REMOTE_ADMINISTRATION_CAPABILITY,
OBJECT_STORAGE_CENTRAL_REMOTE_ADMINISTRATION_CAPABILITY,
@@ -38,7 +38,7 @@ vi.mock("@vrtmrz/livesync-commonlib/compat/replication/journal/LiveSyncJournalRe
},
}));
import { createCentralReplicatorProviderDefinitions } from "./replicatorProviders";
import { createCentralReplicatorProviderDefinitions } from "./providers";
describe("central Replicator provider definitions", () => {
it("keeps the retained remote-resource catalogue bounded", () => {
@@ -91,7 +91,7 @@ import {
createObjectStorageJoinedDevicesResourceFactory,
createObjectStoragePreferredTweakProbeFactory,
createObjectStorageSecuritySeedResourceFactory,
} from "./replicatorResources";
} from "./resources";
function createSettings(overrides: Partial<ObsidianLiveSyncSettings> = {}): ObsidianLiveSyncSettings {
return Object.assign(createNewVaultSettings(), {
File renamed without changes.
File renamed without changes.
@@ -16,7 +16,7 @@ import {
omitManagedTurnProfilesFromMarkdown,
preserveManagedTurnProfilesOnMarkdownImport,
redactTurnSettingsForReport,
} from "./turnSettingsPrivacy";
} from "./turnPrivacy";
class MemorySettingService extends SettingService {
saved?: ObsidianLiveSyncSettings;
@@ -47,7 +47,7 @@ vi.mock("@/common/events.ts", () => ({
vi.mock("@/common/translation", () => ({
$msg: vi.fn((message: string) => message),
}));
vi.mock("@/common/obsidianCommunityPlugins.ts", () => ({
vi.mock("@/features/HiddenFileCommon/obsidianCommunityPlugins.ts", () => ({
getObsidianCommunityPluginManager: vi.fn(),
}));
@@ -43,7 +43,7 @@ vi.mock("@/common/events.ts", () => ({
vi.mock("@/common/translation", () => ({
$msg: vi.fn((message: string) => message),
}));
vi.mock("@/common/obsidianCommunityPlugins.ts", () => ({
vi.mock("@/features/HiddenFileCommon/obsidianCommunityPlugins.ts", () => ({
getObsidianCommunityPluginManager: vi.fn(),
}));
@@ -26,7 +26,7 @@ vi.mock("@/common/events.ts", () => ({
eventHub: { onEvent: vi.fn() },
}));
vi.mock("@/common/translation", () => ({ $msg: (message: string) => message }));
vi.mock("@/common/obsidianCommunityPlugins.ts", () => ({ getObsidianCommunityPluginManager: vi.fn() }));
vi.mock("@/features/HiddenFileCommon/obsidianCommunityPlugins.ts", () => ({ getObsidianCommunityPluginManager: vi.fn() }));
import type { FilePathWithPrefix } from "@vrtmrz/livesync-commonlib/compat/common/types";
import { createOptionalFileSyncDatabase, optionalFileEntry } from "../../../test/fixtures/optionalFileSyncDatabase";
@@ -47,7 +47,7 @@ vi.mock("@/common/events.ts", () => ({
vi.mock("@/common/translation", () => ({
$msg: vi.fn((message: string) => message),
}));
vi.mock("@/common/obsidianCommunityPlugins.ts", () => ({
vi.mock("@/features/HiddenFileCommon/obsidianCommunityPlugins.ts", () => ({
getObsidianCommunityPluginManager: vi.fn(),
}));
@@ -43,7 +43,7 @@ vi.mock("@/common/events.ts", () => ({
vi.mock("@/common/translation", () => ({
$msg: vi.fn((message: string) => message),
}));
vi.mock("@/common/obsidianCommunityPlugins.ts", () => ({
vi.mock("@/features/HiddenFileCommon/obsidianCommunityPlugins.ts", () => ({
getObsidianCommunityPluginManager: vi.fn(),
}));
@@ -30,7 +30,7 @@ vi.mock("@/common/events.ts", () => ({
eventHub: { onEvent: vi.fn() },
}));
vi.mock("@/common/translation", () => ({ $msg: (message: string) => message }));
vi.mock("@/common/obsidianCommunityPlugins.ts", () => ({ getObsidianCommunityPluginManager: vi.fn() }));
vi.mock("@/features/HiddenFileCommon/obsidianCommunityPlugins.ts", () => ({ getObsidianCommunityPluginManager: vi.fn() }));
import { get } from "svelte/store";
import { getDocData } from "@vrtmrz/livesync-commonlib/compat/common/utils";
@@ -43,7 +43,7 @@ vi.mock("@/common/events.ts", () => ({
vi.mock("@/common/translation", () => ({
$msg: vi.fn((message: string) => message),
}));
vi.mock("@/common/obsidianCommunityPlugins.ts", () => ({
vi.mock("@/features/HiddenFileCommon/obsidianCommunityPlugins.ts", () => ({
getObsidianCommunityPluginManager: vi.fn(),
}));
@@ -50,7 +50,7 @@ vi.mock("@/common/events.ts", () => ({
vi.mock("@/common/translation", () => ({
$msg: vi.fn((message: string) => message),
}));
vi.mock("@/common/obsidianCommunityPlugins.ts", () => ({
vi.mock("@/features/HiddenFileCommon/obsidianCommunityPlugins.ts", () => ({
getObsidianCommunityPluginManager: vi.fn(),
}));
+1 -1
View File
@@ -67,7 +67,7 @@ import type { InjectableServiceHub } from "@vrtmrz/livesync-commonlib/compat/ser
import type { LiveSyncCore } from "@/main.ts";
import { LiveSyncError } from "@vrtmrz/livesync-commonlib/compat/common/LSError";
import type { OptionalSyncFeatureMode } from "@/features/optionalSyncFeatures.ts";
import { getObsidianCommunityPluginManager } from "@/common/obsidianCommunityPlugins.ts";
import { getObsidianCommunityPluginManager } from "@/features/HiddenFileCommon/obsidianCommunityPlugins.ts";
import { createModificationHandler } from "octagonal-wheels/modification";
import type { HandlerOutcome } from "@vrtmrz/livesync-commonlib/compat/services/lib/HandlerUtils";
@@ -59,7 +59,7 @@ import type { OptionalFileEventOptions } from "@vrtmrz/livesync-commonlib/compat
import { configureHiddenFileSyncMode, type ConfigureHiddenFileSyncResult } from "./configureHiddenFileSyncMode.ts";
import { performBatchWithProgress } from "./performBatchWithProgress.ts";
import type { OptionalSyncFeatureMode } from "@/features/optionalSyncFeatures.ts";
import { getObsidianCommunityPluginManager } from "@/common/obsidianCommunityPlugins.ts";
import { getObsidianCommunityPluginManager } from "@/features/HiddenFileCommon/obsidianCommunityPlugins.ts";
import { $msg } from "@/common/translation";
type SyncDirection = "push" | "pull" | "safe" | "pullForce" | "pushForce";
@@ -1,7 +1,7 @@
import { Menu, WorkspaceLeaf } from "@/deps.ts";
import ReplicatorPaneComponent from "./P2PReplicatorPane.svelte";
import { mount } from "svelte";
import { SvelteItemView } from "@/common/SvelteItemView.ts";
import { SvelteItemView } from "@/modules/coreObsidian/UI/SvelteItemView.ts";
import { unique } from "octagonal-wheels/collection";
import { LOG_LEVEL_NOTICE, REMOTE_P2P } from "@vrtmrz/livesync-commonlib/compat/common/types";
@@ -1,6 +1,6 @@
import { WorkspaceLeaf } from "@/deps.ts";
import { mount } from "svelte";
import { SvelteItemView } from "@/common/SvelteItemView.ts";
import { SvelteItemView } from "@/modules/coreObsidian/UI/SvelteItemView.ts";
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore.ts";
import type { P2PServiceViews } from "@vrtmrz/livesync-commonlib/p2p";
import P2PServerStatusPane from "./P2PServerStatusPane.svelte";
@@ -1,5 +1,5 @@
import type { ObsidianLiveSyncSettings, SettingsMigrationState } from "@vrtmrz/livesync-commonlib/settings";
import type { CompatibilityPause } from "@/common/databaseCompatibility.ts";
import type { CompatibilityPause } from "@/serviceFeatures/compatibilityReview.evaluation.ts";
import type { ReviewHarnessScenarioResult, ReviewHarnessScenarioStatus } from "./reviewHarnessTypes";
export type { ReviewHarnessScenarioResult, ReviewHarnessScenarioStatus } from "./reviewHarnessTypes";
@@ -1,6 +1,6 @@
import { describe, expect, it } from "vitest";
import { NEW_VAULT_SETTINGS, type SettingsMigrationState } from "@vrtmrz/livesync-commonlib/settings";
import type { CompatibilityPause } from "@/common/databaseCompatibility.ts";
import type { CompatibilityPause } from "@/serviceFeatures/compatibilityReview.evaluation.ts";
import {
REVIEW_HARNESS_SCENARIOS,
REVIEW_HARNESS_SCENARIO_IDS,
@@ -1,5 +1,5 @@
import type { ObsidianLiveSyncSettings, SettingsMigrationState } from "@vrtmrz/livesync-commonlib/settings";
import type { CompatibilityPause } from "@/common/databaseCompatibility.ts";
import type { CompatibilityPause } from "@/serviceFeatures/compatibilityReview.evaluation.ts";
import {
REVIEW_HARNESS_SCENARIOS,
REVIEW_HARNESS_STATE_KEY,
@@ -1,6 +1,6 @@
import { describe, expect, it, vi } from "vitest";
import { NEW_VAULT_SETTINGS, type SettingsMigrationState } from "@vrtmrz/livesync-commonlib/settings";
import type { CompatibilityPause } from "@/common/databaseCompatibility.ts";
import type { CompatibilityPause } from "@/serviceFeatures/compatibilityReview.evaluation.ts";
import { ReviewHarnessController, type ReviewHarnessRuntime } from "./reviewHarnessController";
function migration(): SettingsMigrationState {
@@ -14,7 +14,7 @@ import type { FileEventItemSentinel } from "@vrtmrz/livesync-commonlib/compat/ma
import type ObsidianLiveSyncPlugin from "@/main";
import type { LiveSyncCore } from "@/main";
import type { FileProcessingService } from "@vrtmrz/livesync-commonlib/compat/services/base/FileProcessingService";
import { InternalFileToUXFileInfoStub, TFileToUXFileInfoStub } from "@/modules/coreObsidian/storageLib/utilObsidian";
import { InternalFileToUXFileInfoStub, TFileToUXFileInfoStub } from "@/modules/coreObsidian/storage/utilObsidian";
/**
* Obsidian-specific type guard adapter
@@ -17,7 +17,7 @@ import { $msg, translateIfAvailable } from "@/common/translation";
import type { InjectableServiceHub } from "@vrtmrz/livesync-commonlib/compat/services/implements/injectable/InjectableServiceHub";
import type { LiveSyncCore } from "@/main.ts";
import { REMOTE_COUCHDB, REMOTE_P2P } from "@vrtmrz/livesync-commonlib/compat/common/models/setting.const";
import { withOwnedRemoteResource } from "@/common/ownedRemoteResource";
import { withOwnedRemoteResource } from "@/common/core/replication/ownedRemoteResource";
import {
CENTRAL_COMPATIBILITY_REJECTION_REASONS,
REMOTE_RESOURCE_KINDS,
File renamed without changes.
File renamed without changes.
@@ -1,7 +1,7 @@
import { WorkspaceLeaf } from "@/deps.ts";
import GlobalHistoryComponent from "./GlobalHistory.svelte";
import type ObsidianLiveSyncPlugin from "@/main.ts";
import { SvelteItemView } from "@/common/SvelteItemView.ts";
import { SvelteItemView } from "@/modules/coreObsidian/UI/SvelteItemView.ts";
import { mount } from "svelte";
export const VIEW_TYPE_GLOBAL_HISTORY = "global-history";
+1 -1
View File
@@ -1,7 +1,7 @@
import { WorkspaceLeaf } from "@/deps.ts";
import LogPaneComponent from "./LogPane.svelte";
import type ObsidianLiveSyncPlugin from "@/main.ts";
import { SvelteItemView } from "@/common/SvelteItemView.ts";
import { SvelteItemView } from "@/modules/coreObsidian/UI/SvelteItemView.ts";
import { $msg } from "@/common/translation";
import { mount } from "svelte";
export const VIEW_TYPE_LOG = "log-log";
@@ -8,7 +8,7 @@ vi.mock("@/deps.ts", () => ({
stringifyYaml: vi.fn(),
}));
vi.mock("./Log/LogPaneView.ts", () => ({ LogPaneView: class {}, VIEW_TYPE_LOG: "log" }));
vi.mock("@/common/reportTool.ts", () => ({ generateReport: vi.fn() }));
vi.mock("@/modules/features/ModuleLog/diagnostics/reportTool.ts", () => ({ generateReport: vi.fn() }));
vi.mock("@/common/utils.ts", () => ({ isValidPath: () => true }));
vi.mock("@/common/translation", () => ({ $msg: (key: string) => key }));
vi.mock("@/common/events.ts", () => ({
+2 -2
View File
@@ -65,11 +65,11 @@ import {
} from "@vrtmrz/livesync-commonlib/compat/services/lib/logUtils";
import { NetworkWarningStyles } from "@vrtmrz/livesync-commonlib/compat/common/models/setting.const";
import { compatGlobal } from "@vrtmrz/livesync-commonlib/compat/common/coreEnvFunctions";
import { generateReport } from "@/common/reportTool.ts";
import { generateReport } from "./ModuleLog/diagnostics/reportTool.ts";
import {
ANDROID_LINUX_PATH_COMPONENT_UTF8_WARNING_BOUNDARY,
findPathComponentsExceedingUtf8Limit,
} from "@/common/pathCompatibility.ts";
} from "./ModuleLog/diagnostics/pathCompatibility.ts";
// This module cannot be a core module because it depends on the Obsidian UI.
+1 -1
View File
@@ -11,7 +11,7 @@ vi.mock("./Log/LogPaneView.ts", () => ({ LogPaneView: class {}, VIEW_TYPE_LOG: "
vi.mock("./StatusBarRenderer.ts", () => ({
createStatusBarRenderer: vi.fn(() => ({ dispose: vi.fn() })),
}));
vi.mock("@/common/reportTool.ts", () => ({ generateReport: vi.fn() }));
vi.mock("@/modules/features/ModuleLog/diagnostics/reportTool.ts", () => ({ generateReport: vi.fn() }));
vi.mock("@/common/utils.ts", () => ({ isValidPath: () => true }));
vi.mock("@/common/translation", () => ({ $msg: (key: string) => key }));
vi.mock("@/common/events.ts", () => ({
@@ -1,9 +1,9 @@
import { redactTurnSettingsForReport } from "./turnSettingsPrivacy";
import { redactTurnSettingsForReport } from "@/common/core/settings/turnPrivacy";
import { REMOTE_COUCHDB, REMOTE_MINIO } from "@vrtmrz/livesync-commonlib/compat/common/models/setting.const";
import { DEFAULT_SETTINGS, type ObsidianLiveSyncSettings } from "@vrtmrz/livesync-commonlib/settings";
import { generateCredentialObject } from "@vrtmrz/livesync-commonlib/compat/replication/httplib";
import { parseHeaderValues } from "@vrtmrz/livesync-commonlib/compat/common/utils";
import { requestToCouchDBWithCredentials } from "./utils";
import { requestToCouchDBWithCredentials } from "@/common/utils";
import { LOG_LEVEL_VERBOSE, Logger } from "@vrtmrz/livesync-commonlib/compat/common/logger";
import { isCloudantURI } from "@vrtmrz/livesync-commonlib/compat/pouchdb/utils_couchdb";
import { compatGlobal } from "@vrtmrz/livesync-commonlib/compat/common/coreEnvFunctions";
@@ -4,7 +4,7 @@ import { REMOTE_P2P } from "@vrtmrz/livesync-commonlib/compat/common/types";
import type { LiveSyncBaseCore } from "@/LiveSyncBaseCore";
import { generateReport } from "./reportTool";
vi.mock("./utils", () => ({ requestToCouchDBWithCredentials: vi.fn() }));
vi.mock("../../../../common/utils", () => ({ requestToCouchDBWithCredentials: vi.fn() }));
vi.mock("@vrtmrz/livesync-commonlib/compat/common/coreEnvFunctions", () => ({
compatGlobal: { origin: "test", navigator: { userAgent: "test" } },
}));
@@ -1,6 +1,6 @@
import { type TFile } from "@/deps.ts";
import { eventHub } from "@/common/events.ts";
import { EVENT_REQUEST_SHOW_HISTORY } from "@/common/obsidianEvents.ts";
import { EVENT_REQUEST_SHOW_HISTORY } from "./DocumentHistory/events.ts";
import type { FilePathWithPrefix, LoadedEntry, DocumentID } from "@vrtmrz/livesync-commonlib/compat/common/types";
import { AbstractObsidianModule } from "@/modules/AbstractObsidianModule.ts";
import { DocumentHistoryModal } from "./DocumentHistory/DocumentHistoryModal.ts";
@@ -2,7 +2,7 @@ import {
hasManagedTurnSettings,
omitManagedTurnProfilesFromMarkdown,
preserveManagedTurnProfilesOnMarkdownImport,
} from "@/common/turnSettingsPrivacy";
} from "@/common/core/settings/turnPrivacy";
// import { PouchDB } from "../../lib/src/pouchdb/pouchdb-browser";
import { isObjectDifferent } from "octagonal-wheels/object";
import { EVENT_SETTING_SAVED, eventHub } from "@/common/events";
@@ -3,7 +3,7 @@ import { AbstractObsidianModule } from "@/modules/AbstractObsidianModule.ts";
// import { PouchDB } from "../../lib/src/pouchdb/pouchdb-browser";
import { EVENT_REQUEST_OPEN_SETTINGS, eventHub } from "@/common/events.ts";
import type { LiveSyncCore } from "@/main.ts";
import { openObsidianSettings } from "@/common/obsidianSettings.ts";
import { openObsidianSettings } from "@/modules/coreObsidian/UI/obsidianSettings.ts";
export class ModuleObsidianSettingDialogue extends AbstractObsidianModule {
settingTab!: ObsidianLiveSyncSettingTab;
@@ -54,7 +54,7 @@ import {
} from "./SettingPane.ts";
import { JournalSyncCore } from "@vrtmrz/livesync-commonlib/compat/replication/journal/JournalSyncCore";
import { MinioStorageAdapter } from "@vrtmrz/livesync-commonlib/compat/replication/journal/objectstore/MinioStorageAdapter";
import { closeObsidianSettings } from "@/common/obsidianSettings.ts";
import { closeObsidianSettings } from "@/modules/coreObsidian/UI/obsidianSettings.ts";
import {
createAdvancedSettingDefinitionGroups,
createExtraMenuSettingDefinitions,
@@ -75,8 +75,8 @@ import type {
} from "obsidian";
import { createExtraMenuSettingSpecGroup, createGeneralSettingSpecGroups } from "./GeneralSettingSpecs.ts";
import { SetupManager } from "@/modules/features/SetupManager.ts";
import { isP2PMainRemote } from "@/common/remoteConfiguration.ts";
import { withOwnedRemoteResource } from "@/common/ownedRemoteResource.ts";
import { isP2PMainRemote } from "@/common/core/settings/remoteConfiguration.ts";
import { withOwnedRemoteResource } from "@/common/core/replication/ownedRemoteResource.ts";
import {
getSyncGuardSettings,
isSyncGuardSettingKey,
@@ -23,7 +23,7 @@ import {
eventHub,
} from "@/common/events.ts";
import { HiddenFileSync } from "@/features/HiddenFileSync/CmdHiddenFileSync.ts";
import { EVENT_REQUEST_SHOW_HISTORY } from "@/common/obsidianEvents.ts";
import { EVENT_REQUEST_SHOW_HISTORY } from "@/modules/features/DocumentHistory/events.ts";
import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab.ts";
import type { PageFunctions } from "./SettingPane.ts";
import { setButtonDestructiveState } from "./settingComponentStyles.ts";
@@ -14,7 +14,7 @@ import { setButtonAdditionalActionState, setSettingAdditionalActionsState } from
import { PouchDB } from "@vrtmrz/livesync-commonlib/compat/pouchdb/pouchdb-browser";
import { ExtraSuffixIndexedDB } from "@vrtmrz/livesync-commonlib/compat/common/types";
import { migrateDatabases } from "./settingUtils.ts";
import { usesLegacyIndexedDBAdapter } from "@/common/compatibilitySettings.ts";
import { usesLegacyIndexedDBAdapter } from "@/common/core/settings/compatibilitySettings.ts";
import { $msg } from "@/common/translation";
export function panePatches(this: ObsidianLiveSyncSettingTab, paneEl: HTMLElement, { addPanel }: PageFunctions): void {
@@ -7,7 +7,7 @@ import {
type ObsidianLiveSyncSettings,
LOG_LEVEL_VERBOSE,
} from "@vrtmrz/livesync-commonlib/compat/common/types";
import { OPEN_JOINED_DEVICES } from "@/serviceFeatures/joinedDevicesCommand";
import { OPEN_JOINED_DEVICES } from "@/serviceFeatures/joinedDevices/command";
import { Menu, type ButtonComponent } from "@/deps.ts";
import { $msg } from "@/common/translation";
import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts";
@@ -111,7 +111,7 @@ vi.mock("./remoteConfigBuffer.ts", () => ({
syncActivatedRemoteSettings: vi.fn(),
}));
import { OPEN_JOINED_DEVICES } from "@/serviceFeatures/joinedDevicesCommand";
import { OPEN_JOINED_DEVICES } from "@/serviceFeatures/joinedDevices/command";
import { paneRemoteConfig } from "./PaneRemoteConfig.ts";
function createPanelElement(): HTMLElement {
@@ -12,8 +12,8 @@ import { isCloudantURI } from "@vrtmrz/livesync-commonlib/compat/pouchdb/utils_c
import { generateCredentialObject } from "@vrtmrz/livesync-commonlib/compat/replication/httplib";
import { compatGlobal } from "@vrtmrz/livesync-commonlib/compat/common/coreEnvFunctions";
import { isUnauthorizedError } from "@vrtmrz/livesync-commonlib/compat/common/utils.doc";
import { normaliseCouchDBConfiguration } from "@/common/couchdbConfiguration";
import { isCouchDBVersionAtLeast, normaliseResponseHeaderKeys } from "@/modules/features/couchDBDiagnosticValues";
import { normaliseCouchDBConfiguration } from "@/modules/features/SetupWizard/connection/couchdbConfiguration";
import { isCouchDBVersionAtLeast, normaliseResponseHeaderKeys } from "@/modules/features/SetupWizard/connection/couchDBDiagnosticValues";
export const checkConfig = async (
checkResultDiv: HTMLDivElement | undefined,
+3 -3
View File
@@ -8,7 +8,7 @@ import {
REMOTE_MINIO,
} from "@vrtmrz/livesync-commonlib/compat/common/types";
import { normaliseAcceptUnencryptedContent } from "@vrtmrz/livesync-commonlib/settings";
import { createNewVaultSettings } from "@/common/newVaultSettings";
import { createNewVaultSettings } from "@/common/core/settings/newVaultSettings";
import { upsertRemoteConfigurationInPlace } from "@vrtmrz/livesync-commonlib/remote-configurations";
import { isObjectDifferent } from "@vrtmrz/livesync-commonlib/compat/common/utils";
import Intro from "./SetupWizard/dialogs/Intro.svelte";
@@ -50,9 +50,9 @@ import {
applySettingsWithScheduledInitialisation,
type SetupInitialisationMode,
} from "@/serviceFeatures/setupObsidian/setupActivationLifecycle.ts";
import { isP2PMainRemote } from "@/common/remoteConfiguration.ts";
import { isP2PMainRemote } from "@/common/core/settings/remoteConfiguration.ts";
import { REMOTE_RESOURCE_KINDS } from "@vrtmrz/livesync-commonlib/replication";
import { resolveInitialPathIdentity } from "@/common/initialPathIdentity";
import { resolveInitialPathIdentity } from "@/common/core/replication/initialPathIdentity";
import type { P2PConnectionProbeAdmission } from "@vrtmrz/livesync-commonlib/p2p";
function copySettingsForRemoteProfileUpdate(settings: ObsidianLiveSyncSettings): ObsidianLiveSyncSettings {
@@ -9,7 +9,7 @@ import {
} from "@vrtmrz/livesync-commonlib/compat/common/types";
import { SettingService } from "@vrtmrz/livesync-commonlib/compat/services/base/SettingService";
import { ServiceContext } from "@vrtmrz/livesync-commonlib/context";
import { createNewVaultSettings } from "@/common/newVaultSettings";
import { createNewVaultSettings } from "@/common/core/settings/newVaultSettings";
import type {
P2PConnectionProbeAdmission,
P2PConnectionProbeAdmissionResult,
@@ -7,8 +7,8 @@ import { isCloudantURI } from "@vrtmrz/livesync-commonlib/compat/pouchdb/utils_c
import { generateCredentialObject } from "@vrtmrz/livesync-commonlib/compat/replication/httplib";
import { compatGlobal } from "@vrtmrz/livesync-commonlib/compat/common/coreEnvFunctions";
import { isUnauthorizedError } from "@vrtmrz/livesync-commonlib/compat/common/utils.doc";
import { normaliseCouchDBConfiguration } from "@/common/couchdbConfiguration";
import { isCouchDBVersionAtLeast, normaliseResponseHeaderKeys } from "@/modules/features/couchDBDiagnosticValues";
import { normaliseCouchDBConfiguration } from "./couchdbConfiguration";
import { isCouchDBVersionAtLeast, normaliseResponseHeaderKeys } from "./couchDBDiagnosticValues";
export type ResultMessage = { message: string; classes: string[] };
export type ResultErrorMessage = { message: string; result: "error"; classes: string[] };
@@ -1,5 +1,5 @@
import type { RemoteConnectionProbe, RemoteConnectionProbeResult } from "@vrtmrz/livesync-commonlib/replication";
import { withOwnedRemoteResource } from "@/common/ownedRemoteResource";
import { withOwnedRemoteResource } from "@/common/core/replication/ownedRemoteResource";
/** Run the selected CouchDB setup mode within one owned probe lifetime. */
export async function probeCouchDBConnection(
@@ -5,11 +5,11 @@
import type { ObsidianLiveSyncSettings } from "@vrtmrz/livesync-commonlib/compat/common/types";
import Decision from "@/modules/services/LiveSyncUI/components/Decision.svelte";
import UserDecisions from "@/modules/services/LiveSyncUI/components/UserDecisions.svelte";
import { checkConfig, type ConfigCheckResult, type ResultError, type ResultErrorMessage } from "./utilCheckCouchDB";
import { checkConfig, type ConfigCheckResult, type ResultError, type ResultErrorMessage } from "@/modules/features/SetupWizard/connection/couchDBChecks";
import { LOG_LEVEL_VERBOSE, Logger } from "octagonal-wheels/common/logger";
import { $msg as translateMessage } from "@/common/translation";
import { getDialogContext } from "@/modules/services/LiveSyncUI/svelteDialog";
import { getCouchDBServerFixConfirmation } from "./couchDBServerFixConfirmation";
import { getCouchDBServerFixConfirmation } from "@/modules/features/SetupWizard/connection/couchDBServerFixConfirmation";
type Props = {
trialRemoteSetting: ObsidianLiveSyncSettings;
};
@@ -20,7 +20,7 @@
import { copyTo, pickBucketSyncSettings } from "@vrtmrz/livesync-commonlib/compat/common/utils";
import { TYPE_CANCELLED, type SetupRemoteBucketResultType } from "./setupDialogTypes";
import { $msg as translateMessage } from "@/common/translation";
import { withOwnedRemoteResource } from "@/common/ownedRemoteResource";
import { withOwnedRemoteResource } from "@/common/core/replication/ownedRemoteResource";
import { REMOTE_RESOURCE_KINDS } from "@vrtmrz/livesync-commonlib/replication";
const default_setting = pickBucketSyncSettings(DEFAULT_SETTINGS);
@@ -27,7 +27,7 @@
type SetupRemoteCouchDBInitialData,
type SetupRemoteCouchDBResultType,
} from "./setupDialogTypes";
import { isValidCouchDBServerURL, probeCouchDBConnection } from "./couchDBConnectionProbe";
import { isValidCouchDBServerURL, probeCouchDBConnection } from "@/modules/features/SetupWizard/connection/couchDBConnectionProbe";
import { $msg as translateMessage } from "@/common/translation";
import { REMOTE_RESOURCE_KINDS } from "@vrtmrz/livesync-commonlib/replication";
@@ -44,7 +44,7 @@
} from "./setupDialogTypes";
import { LOG_LEVEL_VERBOSE, Logger } from "octagonal-wheels/common/logger";
import { $msg as translateMessage } from "@/common/translation";
import { coordinateP2PSetupConnectionProbe, probeP2PSetupConnection } from "./p2pSetupConnectionProbe";
import { coordinateP2PSetupConnectionProbe, probeP2PSetupConnection } from "@/modules/features/SetupWizard/connection/p2pSetupConnectionProbe";
const default_setting = pickP2PSyncSettings(DEFAULT_SETTINGS);
let syncSetting = $state<P2PConnectionInfo>({ ...default_setting });
+1 -1
View File
@@ -5,7 +5,7 @@ import { $msg } from "@/common/translation";
import type { Confirm, ConfirmActionLayout } from "@vrtmrz/livesync-commonlib/compat/interfaces/Confirm";
import { confirmAction, pickOne, promptPassword, promptText } from "@vrtmrz/obsidian-plugin-kit";
import type { ObsidianServiceContext } from "@/modules/services/ObsidianServiceContext";
import { confirmWithMessageWithWideButton } from "@/modules/coreObsidian/UILib/dialogs";
import { confirmWithMessageWithWideButton } from "@/modules/coreObsidian/UI/dialogs";
export class ObsidianConfirm<T extends ObsidianServiceContext = ObsidianServiceContext> implements Confirm {
private _context: T;
@@ -19,7 +19,7 @@ vi.mock("@vrtmrz/obsidian-plugin-kit", () => ({
promptText: mocks.promptText,
}));
vi.mock("@/modules/coreObsidian/UILib/dialogs", () => ({
vi.mock("@/modules/coreObsidian/UI/dialogs", () => ({
askSelectString: mocks.legacyAskSelectString,
askString: mocks.legacyAskString,
askYesNo: mocks.legacyAskYesNo,
@@ -1,7 +1,7 @@
import { describe, expect, it, vi } from "vitest";
import { InjectableReplicationService } from "@vrtmrz/livesync-commonlib/compat/services/implements/injectable/InjectableReplicationService";
import { ServiceContext } from "@vrtmrz/livesync-commonlib/compat/services/base/ServiceBase";
import { evaluateCompatibilityPause, legacyDatabaseCompatibilityVersionKey } from "./databaseCompatibility.ts";
import { evaluateCompatibilityPause, legacyDatabaseCompatibilityVersionKey } from "./compatibilityReview.evaluation.ts";
function migrationState(overrides: Record<string, unknown> = {}) {
return {
+1 -1
View File
@@ -10,7 +10,7 @@ import {
evaluateCompatibilityPause,
legacyDatabaseCompatibilityVersionKey,
type CompatibilityPause,
} from "@/common/databaseCompatibility.ts";
} from "./compatibilityReview.evaluation.ts";
export type CompatibilityReviewSummaryAction = "details" | "resume" | "keep-paused" | false;
export type CompatibilityReviewDetailsAction = "back" | false;
@@ -7,7 +7,7 @@ import {
COMPATIBILITY_PAUSE_SETTING_MESSAGE,
DATABASE_COMPATIBILITY_VERSION_KEY,
legacyDatabaseCompatibilityVersionKey,
} from "@/common/databaseCompatibility.ts";
} from "./compatibilityReview.evaluation.ts";
import {
CompatibilityReviewController,
type CompatibilityReviewUi,
@@ -1,4 +1,4 @@
import type { CompatibilityPause, CompatibilityPauseReason } from "@/common/databaseCompatibility.ts";
import type { CompatibilityPause, CompatibilityPauseReason } from "./compatibilityReview.evaluation.ts";
export function compatibilityReviewSummaryMarkdown(pause: CompatibilityPause): string {
const action = !pause.resumable
@@ -1,6 +1,6 @@
import { Notice } from "@/deps.ts";
import type { Confirm } from "@vrtmrz/livesync-commonlib/compat/interfaces/Confirm";
import type { CompatibilityPause } from "@/common/databaseCompatibility.ts";
import type { CompatibilityPause } from "./compatibilityReview.evaluation.ts";
import type {
CompatibilityReviewDetailsAction,
CompatibilityReviewSummaryAction,
Loaded 100 of 115 files, more files were not shown because too many files have changed in this diff. Show more