diff --git a/AGENTS.md b/AGENTS.md index a84f2832..f39dee6f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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. --- diff --git a/devs.md b/devs.md index 60041e48..5dfb8c30 100644 --- a/devs.md +++ b/devs.md @@ -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 diff --git a/docs/design_docs/replicator_architecture.md b/docs/design_docs/replicator_architecture.md index b56298c5..b7e98179 100644 --- a/docs/design_docs/replicator_architecture.md +++ b/docs/design_docs/replicator_architecture.md @@ -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//`. 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) | diff --git a/src/LiveSyncBaseCore.ts b/src/LiveSyncBaseCore.ts index 3ae88b72..b322ec0f 100644 --- a/src/LiveSyncBaseCore.ts +++ b/src/LiveSyncBaseCore.ts @@ -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"; diff --git a/src/apps/cli/cliSettingsDefaults.ts b/src/apps/cli/cliSettingsDefaults.ts index ac73c3a5..d0095935 100644 --- a/src/apps/cli/cliSettingsDefaults.ts +++ b/src/apps/cli/cliSettingsDefaults.ts @@ -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 { diff --git a/src/apps/cli/commands/runCommand.ts b/src/apps/cli/commands/runCommand.ts index e5fd166f..84d65182 100644 --- a/src/apps/cli/commands/runCommand.ts +++ b/src/apps/cli/commands/runCommand.ts @@ -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, diff --git a/src/apps/cli/initialFetchPathIdentity.ts b/src/apps/cli/initialFetchPathIdentity.ts index 74ba909e..a2b6eb3a 100644 --- a/src/apps/cli/initialFetchPathIdentity.ts +++ b/src/apps/cli/initialFetchPathIdentity.ts @@ -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( diff --git a/src/common/centralRemoteAdministration.ts b/src/common/core/replication/centralRemoteAdministration.ts similarity index 100% rename from src/common/centralRemoteAdministration.ts rename to src/common/core/replication/centralRemoteAdministration.ts diff --git a/src/common/centralRemoteAdministration.unit.spec.ts b/src/common/core/replication/centralRemoteAdministration.unit.spec.ts similarity index 100% rename from src/common/centralRemoteAdministration.unit.spec.ts rename to src/common/core/replication/centralRemoteAdministration.unit.spec.ts diff --git a/src/common/replicatorConfigurationIdentity.ts b/src/common/core/replication/configurationIdentity.ts similarity index 100% rename from src/common/replicatorConfigurationIdentity.ts rename to src/common/core/replication/configurationIdentity.ts diff --git a/src/common/replicatorConfigurationIdentity.unit.spec.ts b/src/common/core/replication/configurationIdentity.unit.spec.ts similarity index 99% rename from src/common/replicatorConfigurationIdentity.unit.spec.ts rename to src/common/core/replication/configurationIdentity.unit.spec.ts index 65195ef6..1be44a84 100644 --- a/src/common/replicatorConfigurationIdentity.unit.spec.ts +++ b/src/common/core/replication/configurationIdentity.unit.spec.ts @@ -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", () => { diff --git a/src/common/initialPathIdentity.ts b/src/common/core/replication/initialPathIdentity.ts similarity index 100% rename from src/common/initialPathIdentity.ts rename to src/common/core/replication/initialPathIdentity.ts diff --git a/src/common/initialPathIdentity.unit.spec.ts b/src/common/core/replication/initialPathIdentity.unit.spec.ts similarity index 100% rename from src/common/initialPathIdentity.unit.spec.ts rename to src/common/core/replication/initialPathIdentity.unit.spec.ts diff --git a/src/common/ownedRemoteResource.ts b/src/common/core/replication/ownedRemoteResource.ts similarity index 100% rename from src/common/ownedRemoteResource.ts rename to src/common/core/replication/ownedRemoteResource.ts diff --git a/src/common/ownedRemoteResource.unit.spec.ts b/src/common/core/replication/ownedRemoteResource.unit.spec.ts similarity index 100% rename from src/common/ownedRemoteResource.unit.spec.ts rename to src/common/core/replication/ownedRemoteResource.unit.spec.ts diff --git a/src/common/replicatorProviders.ts b/src/common/core/replication/providers.ts similarity index 99% rename from src/common/replicatorProviders.ts rename to src/common/core/replication/providers.ts index 19b13d38..5529047d 100644 --- a/src/common/replicatorProviders.ts +++ b/src/common/core/replication/providers.ts @@ -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, diff --git a/src/common/replicatorProviders.unit.spec.ts b/src/common/core/replication/providers.unit.spec.ts similarity index 99% rename from src/common/replicatorProviders.unit.spec.ts rename to src/common/core/replication/providers.unit.spec.ts index 8bf02b6d..c5df108a 100644 --- a/src/common/replicatorProviders.unit.spec.ts +++ b/src/common/core/replication/providers.unit.spec.ts @@ -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", () => { diff --git a/src/common/replicatorResources.unit.spec.ts b/src/common/core/replication/resources.unit.spec.ts similarity index 99% rename from src/common/replicatorResources.unit.spec.ts rename to src/common/core/replication/resources.unit.spec.ts index 2b2f799e..7225ed0a 100644 --- a/src/common/replicatorResources.unit.spec.ts +++ b/src/common/core/replication/resources.unit.spec.ts @@ -91,7 +91,7 @@ import { createObjectStorageJoinedDevicesResourceFactory, createObjectStoragePreferredTweakProbeFactory, createObjectStorageSecuritySeedResourceFactory, -} from "./replicatorResources"; +} from "./resources"; function createSettings(overrides: Partial = {}): ObsidianLiveSyncSettings { return Object.assign(createNewVaultSettings(), { diff --git a/src/common/replicatorResources/connection.ts b/src/common/core/replication/resources/connection.ts similarity index 100% rename from src/common/replicatorResources/connection.ts rename to src/common/core/replication/resources/connection.ts diff --git a/src/common/replicatorResources/index.ts b/src/common/core/replication/resources/index.ts similarity index 100% rename from src/common/replicatorResources/index.ts rename to src/common/core/replication/resources/index.ts diff --git a/src/common/replicatorResources/initialFetchFastForward.ts b/src/common/core/replication/resources/initialFetchFastForward.ts similarity index 100% rename from src/common/replicatorResources/initialFetchFastForward.ts rename to src/common/core/replication/resources/initialFetchFastForward.ts diff --git a/src/common/replicatorResources/joinedDevices.ts b/src/common/core/replication/resources/joinedDevices.ts similarity index 100% rename from src/common/replicatorResources/joinedDevices.ts rename to src/common/core/replication/resources/joinedDevices.ts diff --git a/src/common/replicatorResources/preferredTweak.ts b/src/common/core/replication/resources/preferredTweak.ts similarity index 100% rename from src/common/replicatorResources/preferredTweak.ts rename to src/common/core/replication/resources/preferredTweak.ts diff --git a/src/common/replicatorResources/securitySeed.ts b/src/common/core/replication/resources/securitySeed.ts similarity index 100% rename from src/common/replicatorResources/securitySeed.ts rename to src/common/core/replication/resources/securitySeed.ts diff --git a/src/common/replicatorResources/shared.ts b/src/common/core/replication/resources/shared.ts similarity index 100% rename from src/common/replicatorResources/shared.ts rename to src/common/core/replication/resources/shared.ts diff --git a/src/common/replicatorResources/shared.unit.spec.ts b/src/common/core/replication/resources/shared.unit.spec.ts similarity index 100% rename from src/common/replicatorResources/shared.unit.spec.ts rename to src/common/core/replication/resources/shared.unit.spec.ts diff --git a/src/common/replicatorResources/synchronisationInformation.ts b/src/common/core/replication/resources/synchronisationInformation.ts similarity index 100% rename from src/common/replicatorResources/synchronisationInformation.ts rename to src/common/core/replication/resources/synchronisationInformation.ts diff --git a/src/common/compatibilitySettings.ts b/src/common/core/settings/compatibilitySettings.ts similarity index 100% rename from src/common/compatibilitySettings.ts rename to src/common/core/settings/compatibilitySettings.ts diff --git a/src/common/compatibilitySettings.unit.spec.ts b/src/common/core/settings/compatibilitySettings.unit.spec.ts similarity index 100% rename from src/common/compatibilitySettings.unit.spec.ts rename to src/common/core/settings/compatibilitySettings.unit.spec.ts diff --git a/src/common/newVaultSettings.ts b/src/common/core/settings/newVaultSettings.ts similarity index 100% rename from src/common/newVaultSettings.ts rename to src/common/core/settings/newVaultSettings.ts diff --git a/src/common/newVaultSettings.unit.spec.ts b/src/common/core/settings/newVaultSettings.unit.spec.ts similarity index 100% rename from src/common/newVaultSettings.unit.spec.ts rename to src/common/core/settings/newVaultSettings.unit.spec.ts diff --git a/src/common/remoteConfiguration.ts b/src/common/core/settings/remoteConfiguration.ts similarity index 100% rename from src/common/remoteConfiguration.ts rename to src/common/core/settings/remoteConfiguration.ts diff --git a/src/common/turnSettingsPrivacy.ts b/src/common/core/settings/turnPrivacy.ts similarity index 100% rename from src/common/turnSettingsPrivacy.ts rename to src/common/core/settings/turnPrivacy.ts diff --git a/src/common/turnSettingsPrivacy.unit.spec.ts b/src/common/core/settings/turnPrivacy.unit.spec.ts similarity index 99% rename from src/common/turnSettingsPrivacy.unit.spec.ts rename to src/common/core/settings/turnPrivacy.unit.spec.ts index 451db93b..9abece89 100644 --- a/src/common/turnSettingsPrivacy.unit.spec.ts +++ b/src/common/core/settings/turnPrivacy.unit.spec.ts @@ -16,7 +16,7 @@ import { omitManagedTurnProfilesFromMarkdown, preserveManagedTurnProfilesOnMarkdownImport, redactTurnSettingsForReport, -} from "./turnSettingsPrivacy"; +} from "./turnPrivacy"; class MemorySettingService extends SettingService { saved?: ObsidianLiveSyncSettings; diff --git a/src/features/ConfigSync/CmdConfigSync.applyContent.unit.spec.ts b/src/features/ConfigSync/CmdConfigSync.applyContent.unit.spec.ts index 95e7cab2..32a68f3a 100644 --- a/src/features/ConfigSync/CmdConfigSync.applyContent.unit.spec.ts +++ b/src/features/ConfigSync/CmdConfigSync.applyContent.unit.spec.ts @@ -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(), })); diff --git a/src/features/ConfigSync/CmdConfigSync.applySettings.unit.spec.ts b/src/features/ConfigSync/CmdConfigSync.applySettings.unit.spec.ts index 76e8ab68..a4704783 100644 --- a/src/features/ConfigSync/CmdConfigSync.applySettings.unit.spec.ts +++ b/src/features/ConfigSync/CmdConfigSync.applySettings.unit.spec.ts @@ -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(), })); diff --git a/src/features/ConfigSync/CmdConfigSync.catalogue.unit.spec.ts b/src/features/ConfigSync/CmdConfigSync.catalogue.unit.spec.ts index ddfce2b0..4a341826 100644 --- a/src/features/ConfigSync/CmdConfigSync.catalogue.unit.spec.ts +++ b/src/features/ConfigSync/CmdConfigSync.catalogue.unit.spec.ts @@ -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"; diff --git a/src/features/ConfigSync/CmdConfigSync.command.unit.spec.ts b/src/features/ConfigSync/CmdConfigSync.command.unit.spec.ts index 6124c4bd..82a17b1f 100644 --- a/src/features/ConfigSync/CmdConfigSync.command.unit.spec.ts +++ b/src/features/ConfigSync/CmdConfigSync.command.unit.spec.ts @@ -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(), })); diff --git a/src/features/ConfigSync/CmdConfigSync.completion.unit.spec.ts b/src/features/ConfigSync/CmdConfigSync.completion.unit.spec.ts index 147ee857..8683896b 100644 --- a/src/features/ConfigSync/CmdConfigSync.completion.unit.spec.ts +++ b/src/features/ConfigSync/CmdConfigSync.completion.unit.spec.ts @@ -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(), })); diff --git a/src/features/ConfigSync/CmdConfigSync.queue.unit.spec.ts b/src/features/ConfigSync/CmdConfigSync.queue.unit.spec.ts index 98f4000d..c40fb203 100644 --- a/src/features/ConfigSync/CmdConfigSync.queue.unit.spec.ts +++ b/src/features/ConfigSync/CmdConfigSync.queue.unit.spec.ts @@ -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"; diff --git a/src/features/ConfigSync/CmdConfigSync.readiness.unit.spec.ts b/src/features/ConfigSync/CmdConfigSync.readiness.unit.spec.ts index 5035a924..07457b22 100644 --- a/src/features/ConfigSync/CmdConfigSync.readiness.unit.spec.ts +++ b/src/features/ConfigSync/CmdConfigSync.readiness.unit.spec.ts @@ -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(), })); diff --git a/src/features/ConfigSync/CmdConfigSync.scanAllConfigFiles.unit.spec.ts b/src/features/ConfigSync/CmdConfigSync.scanAllConfigFiles.unit.spec.ts index 85e763f3..7a4cabce 100644 --- a/src/features/ConfigSync/CmdConfigSync.scanAllConfigFiles.unit.spec.ts +++ b/src/features/ConfigSync/CmdConfigSync.scanAllConfigFiles.unit.spec.ts @@ -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(), })); diff --git a/src/features/ConfigSync/CmdConfigSync.ts b/src/features/ConfigSync/CmdConfigSync.ts index 41219d05..cf12fb07 100644 --- a/src/features/ConfigSync/CmdConfigSync.ts +++ b/src/features/ConfigSync/CmdConfigSync.ts @@ -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"; diff --git a/src/common/obsidianCommunityPlugins.ts b/src/features/HiddenFileCommon/obsidianCommunityPlugins.ts similarity index 100% rename from src/common/obsidianCommunityPlugins.ts rename to src/features/HiddenFileCommon/obsidianCommunityPlugins.ts diff --git a/src/features/HiddenFileSync/CmdHiddenFileSync.ts b/src/features/HiddenFileSync/CmdHiddenFileSync.ts index c5d42bde..bc9fb8e2 100644 --- a/src/features/HiddenFileSync/CmdHiddenFileSync.ts +++ b/src/features/HiddenFileSync/CmdHiddenFileSync.ts @@ -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"; diff --git a/src/features/P2PSync/P2PReplicator/P2PReplicatorPaneView.ts b/src/features/P2PSync/P2PReplicator/P2PReplicatorPaneView.ts index 2b9e1d84..daa1ee21 100644 --- a/src/features/P2PSync/P2PReplicator/P2PReplicatorPaneView.ts +++ b/src/features/P2PSync/P2PReplicator/P2PReplicatorPaneView.ts @@ -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"; diff --git a/src/features/P2PSync/P2PReplicator/P2PServerStatusPaneView.ts b/src/features/P2PSync/P2PReplicator/P2PServerStatusPaneView.ts index 0a5eed05..21d9af5b 100644 --- a/src/features/P2PSync/P2PReplicator/P2PServerStatusPaneView.ts +++ b/src/features/P2PSync/P2PReplicator/P2PServerStatusPaneView.ts @@ -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"; diff --git a/src/features/ReviewHarness/reviewHarnessContract.ts b/src/features/ReviewHarness/reviewHarnessContract.ts index fa953f48..f7ddb38b 100644 --- a/src/features/ReviewHarness/reviewHarnessContract.ts +++ b/src/features/ReviewHarness/reviewHarnessContract.ts @@ -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"; diff --git a/src/features/ReviewHarness/reviewHarnessContract.unit.spec.ts b/src/features/ReviewHarness/reviewHarnessContract.unit.spec.ts index 127a6c71..38c677e5 100644 --- a/src/features/ReviewHarness/reviewHarnessContract.unit.spec.ts +++ b/src/features/ReviewHarness/reviewHarnessContract.unit.spec.ts @@ -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, diff --git a/src/features/ReviewHarness/reviewHarnessController.ts b/src/features/ReviewHarness/reviewHarnessController.ts index 1cec69aa..f5a56c71 100644 --- a/src/features/ReviewHarness/reviewHarnessController.ts +++ b/src/features/ReviewHarness/reviewHarnessController.ts @@ -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, diff --git a/src/features/ReviewHarness/reviewHarnessController.unit.spec.ts b/src/features/ReviewHarness/reviewHarnessController.unit.spec.ts index 2b00cd23..56b7835e 100644 --- a/src/features/ReviewHarness/reviewHarnessController.unit.spec.ts +++ b/src/features/ReviewHarness/reviewHarnessController.unit.spec.ts @@ -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 { diff --git a/src/managers/ObsidianStorageEventManagerAdapter.ts b/src/managers/ObsidianStorageEventManagerAdapter.ts index 02ab66db..efa0b6c5 100644 --- a/src/managers/ObsidianStorageEventManagerAdapter.ts +++ b/src/managers/ObsidianStorageEventManagerAdapter.ts @@ -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 diff --git a/src/modules/coreFeatures/ModuleResolveMismatchedTweaks.ts b/src/modules/coreFeatures/ModuleResolveMismatchedTweaks.ts index 4053b6c9..06944431 100644 --- a/src/modules/coreFeatures/ModuleResolveMismatchedTweaks.ts +++ b/src/modules/coreFeatures/ModuleResolveMismatchedTweaks.ts @@ -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, diff --git a/src/common/SvelteItemView.ts b/src/modules/coreObsidian/UI/SvelteItemView.ts similarity index 100% rename from src/common/SvelteItemView.ts rename to src/modules/coreObsidian/UI/SvelteItemView.ts diff --git a/src/modules/coreObsidian/UILib/dialogs.ts b/src/modules/coreObsidian/UI/dialogs.ts similarity index 100% rename from src/modules/coreObsidian/UILib/dialogs.ts rename to src/modules/coreObsidian/UI/dialogs.ts diff --git a/src/common/obsidianSettings.ts b/src/modules/coreObsidian/UI/obsidianSettings.ts similarity index 100% rename from src/common/obsidianSettings.ts rename to src/modules/coreObsidian/UI/obsidianSettings.ts diff --git a/src/modules/coreObsidian/storageLib/utilObsidian.ts b/src/modules/coreObsidian/storage/utilObsidian.ts similarity index 100% rename from src/modules/coreObsidian/storageLib/utilObsidian.ts rename to src/modules/coreObsidian/storage/utilObsidian.ts diff --git a/src/common/obsidianEvents.ts b/src/modules/features/DocumentHistory/events.ts similarity index 100% rename from src/common/obsidianEvents.ts rename to src/modules/features/DocumentHistory/events.ts diff --git a/src/modules/features/GlobalHistory/GlobalHistoryView.ts b/src/modules/features/GlobalHistory/GlobalHistoryView.ts index 9a404ed4..f04f53c9 100644 --- a/src/modules/features/GlobalHistory/GlobalHistoryView.ts +++ b/src/modules/features/GlobalHistory/GlobalHistoryView.ts @@ -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"; diff --git a/src/modules/features/Log/LogPaneView.ts b/src/modules/features/Log/LogPaneView.ts index 0e7b8bb2..6afab35c 100644 --- a/src/modules/features/Log/LogPaneView.ts +++ b/src/modules/features/Log/LogPaneView.ts @@ -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"; diff --git a/src/modules/features/ModuleLog.diagnostics.unit.spec.ts b/src/modules/features/ModuleLog.diagnostics.unit.spec.ts index 5cb215c2..d70506e5 100644 --- a/src/modules/features/ModuleLog.diagnostics.unit.spec.ts +++ b/src/modules/features/ModuleLog.diagnostics.unit.spec.ts @@ -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", () => ({ diff --git a/src/modules/features/ModuleLog.ts b/src/modules/features/ModuleLog.ts index 45aa95d2..ca65bb54 100644 --- a/src/modules/features/ModuleLog.ts +++ b/src/modules/features/ModuleLog.ts @@ -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. diff --git a/src/modules/features/ModuleLog.unit.spec.ts b/src/modules/features/ModuleLog.unit.spec.ts index 9071814a..01d6978e 100644 --- a/src/modules/features/ModuleLog.unit.spec.ts +++ b/src/modules/features/ModuleLog.unit.spec.ts @@ -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", () => ({ diff --git a/src/common/pathCompatibility.ts b/src/modules/features/ModuleLog/diagnostics/pathCompatibility.ts similarity index 100% rename from src/common/pathCompatibility.ts rename to src/modules/features/ModuleLog/diagnostics/pathCompatibility.ts diff --git a/src/common/pathCompatibility.unit.spec.ts b/src/modules/features/ModuleLog/diagnostics/pathCompatibility.unit.spec.ts similarity index 100% rename from src/common/pathCompatibility.unit.spec.ts rename to src/modules/features/ModuleLog/diagnostics/pathCompatibility.unit.spec.ts diff --git a/src/common/reportTool.ts b/src/modules/features/ModuleLog/diagnostics/reportTool.ts similarity index 97% rename from src/common/reportTool.ts rename to src/modules/features/ModuleLog/diagnostics/reportTool.ts index 5c10cbf6..d7ea006c 100644 --- a/src/common/reportTool.ts +++ b/src/modules/features/ModuleLog/diagnostics/reportTool.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"; diff --git a/src/common/reportTool.unit.spec.ts b/src/modules/features/ModuleLog/diagnostics/reportTool.unit.spec.ts similarity index 96% rename from src/common/reportTool.unit.spec.ts rename to src/modules/features/ModuleLog/diagnostics/reportTool.unit.spec.ts index 8436b313..19f673a3 100644 --- a/src/common/reportTool.unit.spec.ts +++ b/src/modules/features/ModuleLog/diagnostics/reportTool.unit.spec.ts @@ -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" } }, })); diff --git a/src/modules/features/ModuleObsidianDocumentHistory.ts b/src/modules/features/ModuleObsidianDocumentHistory.ts index b5e8efb0..5ac1b58c 100644 --- a/src/modules/features/ModuleObsidianDocumentHistory.ts +++ b/src/modules/features/ModuleObsidianDocumentHistory.ts @@ -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"; diff --git a/src/modules/features/ModuleObsidianSettingAsMarkdown.ts b/src/modules/features/ModuleObsidianSettingAsMarkdown.ts index 251d7f41..f5837e57 100644 --- a/src/modules/features/ModuleObsidianSettingAsMarkdown.ts +++ b/src/modules/features/ModuleObsidianSettingAsMarkdown.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"; diff --git a/src/modules/features/ModuleObsidianSettingTab.ts b/src/modules/features/ModuleObsidianSettingTab.ts index ccb51bbd..830b3f56 100644 --- a/src/modules/features/ModuleObsidianSettingTab.ts +++ b/src/modules/features/ModuleObsidianSettingTab.ts @@ -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; diff --git a/src/modules/features/SettingDialogue/ObsidianLiveSyncSettingTab.ts b/src/modules/features/SettingDialogue/ObsidianLiveSyncSettingTab.ts index ec1beb99..ac7adc99 100644 --- a/src/modules/features/SettingDialogue/ObsidianLiveSyncSettingTab.ts +++ b/src/modules/features/SettingDialogue/ObsidianLiveSyncSettingTab.ts @@ -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, diff --git a/src/modules/features/SettingDialogue/PaneHatch.ts b/src/modules/features/SettingDialogue/PaneHatch.ts index 46425648..b165028d 100644 --- a/src/modules/features/SettingDialogue/PaneHatch.ts +++ b/src/modules/features/SettingDialogue/PaneHatch.ts @@ -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"; diff --git a/src/modules/features/SettingDialogue/PanePatches.ts b/src/modules/features/SettingDialogue/PanePatches.ts index 7fecc6d1..b9522c31 100644 --- a/src/modules/features/SettingDialogue/PanePatches.ts +++ b/src/modules/features/SettingDialogue/PanePatches.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 { diff --git a/src/modules/features/SettingDialogue/PaneRemoteConfig.ts b/src/modules/features/SettingDialogue/PaneRemoteConfig.ts index 31b2c194..1e3e40c7 100644 --- a/src/modules/features/SettingDialogue/PaneRemoteConfig.ts +++ b/src/modules/features/SettingDialogue/PaneRemoteConfig.ts @@ -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"; diff --git a/src/modules/features/SettingDialogue/PaneRemoteConfig.unit.spec.ts b/src/modules/features/SettingDialogue/PaneRemoteConfig.unit.spec.ts index 265011a2..581467a5 100644 --- a/src/modules/features/SettingDialogue/PaneRemoteConfig.unit.spec.ts +++ b/src/modules/features/SettingDialogue/PaneRemoteConfig.unit.spec.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 { diff --git a/src/modules/features/SettingDialogue/utilFixCouchDBSetting.ts b/src/modules/features/SettingDialogue/utilFixCouchDBSetting.ts index 246ce622..bfa81599 100644 --- a/src/modules/features/SettingDialogue/utilFixCouchDBSetting.ts +++ b/src/modules/features/SettingDialogue/utilFixCouchDBSetting.ts @@ -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, diff --git a/src/modules/features/SetupManager.ts b/src/modules/features/SetupManager.ts index 82fea814..df69c289 100644 --- a/src/modules/features/SetupManager.ts +++ b/src/modules/features/SetupManager.ts @@ -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 { diff --git a/src/modules/features/SetupManager.unit.spec.ts b/src/modules/features/SetupManager.unit.spec.ts index abac4c50..39f4928a 100644 --- a/src/modules/features/SetupManager.unit.spec.ts +++ b/src/modules/features/SetupManager.unit.spec.ts @@ -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, diff --git a/src/modules/features/SetupWizard/dialogs/utilCheckCouchDB.ts b/src/modules/features/SetupWizard/connection/couchDBChecks.ts similarity index 99% rename from src/modules/features/SetupWizard/dialogs/utilCheckCouchDB.ts rename to src/modules/features/SetupWizard/connection/couchDBChecks.ts index 507b2da8..8d6ff69c 100644 --- a/src/modules/features/SetupWizard/dialogs/utilCheckCouchDB.ts +++ b/src/modules/features/SetupWizard/connection/couchDBChecks.ts @@ -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[] }; diff --git a/src/modules/features/SetupWizard/dialogs/couchDBConnectionProbe.ts b/src/modules/features/SetupWizard/connection/couchDBConnectionProbe.ts similarity index 89% rename from src/modules/features/SetupWizard/dialogs/couchDBConnectionProbe.ts rename to src/modules/features/SetupWizard/connection/couchDBConnectionProbe.ts index 31dd30cb..50a1377a 100644 --- a/src/modules/features/SetupWizard/dialogs/couchDBConnectionProbe.ts +++ b/src/modules/features/SetupWizard/connection/couchDBConnectionProbe.ts @@ -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( diff --git a/src/modules/features/SetupWizard/dialogs/couchDBConnectionProbe.unit.spec.ts b/src/modules/features/SetupWizard/connection/couchDBConnectionProbe.unit.spec.ts similarity index 100% rename from src/modules/features/SetupWizard/dialogs/couchDBConnectionProbe.unit.spec.ts rename to src/modules/features/SetupWizard/connection/couchDBConnectionProbe.unit.spec.ts diff --git a/src/modules/features/couchDBDiagnosticValues.ts b/src/modules/features/SetupWizard/connection/couchDBDiagnosticValues.ts similarity index 100% rename from src/modules/features/couchDBDiagnosticValues.ts rename to src/modules/features/SetupWizard/connection/couchDBDiagnosticValues.ts diff --git a/src/modules/features/couchDBDiagnosticValues.unit.spec.ts b/src/modules/features/SetupWizard/connection/couchDBDiagnosticValues.unit.spec.ts similarity index 100% rename from src/modules/features/couchDBDiagnosticValues.unit.spec.ts rename to src/modules/features/SetupWizard/connection/couchDBDiagnosticValues.unit.spec.ts diff --git a/src/modules/features/SetupWizard/dialogs/couchDBServerFixConfirmation.ts b/src/modules/features/SetupWizard/connection/couchDBServerFixConfirmation.ts similarity index 100% rename from src/modules/features/SetupWizard/dialogs/couchDBServerFixConfirmation.ts rename to src/modules/features/SetupWizard/connection/couchDBServerFixConfirmation.ts diff --git a/src/modules/features/SetupWizard/dialogs/couchDBServerFixConfirmation.unit.spec.ts b/src/modules/features/SetupWizard/connection/couchDBServerFixConfirmation.unit.spec.ts similarity index 100% rename from src/modules/features/SetupWizard/dialogs/couchDBServerFixConfirmation.unit.spec.ts rename to src/modules/features/SetupWizard/connection/couchDBServerFixConfirmation.unit.spec.ts diff --git a/src/common/couchdbConfiguration.ts b/src/modules/features/SetupWizard/connection/couchdbConfiguration.ts similarity index 100% rename from src/common/couchdbConfiguration.ts rename to src/modules/features/SetupWizard/connection/couchdbConfiguration.ts diff --git a/src/modules/features/SetupWizard/dialogs/p2pSetupConnectionProbe.ts b/src/modules/features/SetupWizard/connection/p2pSetupConnectionProbe.ts similarity index 100% rename from src/modules/features/SetupWizard/dialogs/p2pSetupConnectionProbe.ts rename to src/modules/features/SetupWizard/connection/p2pSetupConnectionProbe.ts diff --git a/src/modules/features/SetupWizard/dialogs/p2pSetupConnectionProbe.unit.spec.ts b/src/modules/features/SetupWizard/connection/p2pSetupConnectionProbe.unit.spec.ts similarity index 100% rename from src/modules/features/SetupWizard/dialogs/p2pSetupConnectionProbe.unit.spec.ts rename to src/modules/features/SetupWizard/connection/p2pSetupConnectionProbe.unit.spec.ts diff --git a/src/modules/features/SetupWizard/dialogs/PanelCouchDBCheck.svelte b/src/modules/features/SetupWizard/dialogs/PanelCouchDBCheck.svelte index 17cd4e5c..988521c9 100644 --- a/src/modules/features/SetupWizard/dialogs/PanelCouchDBCheck.svelte +++ b/src/modules/features/SetupWizard/dialogs/PanelCouchDBCheck.svelte @@ -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; }; diff --git a/src/modules/features/SetupWizard/dialogs/SetupRemoteBucket.svelte b/src/modules/features/SetupWizard/dialogs/SetupRemoteBucket.svelte index 5ca7ca14..50265ad5 100644 --- a/src/modules/features/SetupWizard/dialogs/SetupRemoteBucket.svelte +++ b/src/modules/features/SetupWizard/dialogs/SetupRemoteBucket.svelte @@ -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); diff --git a/src/modules/features/SetupWizard/dialogs/SetupRemoteCouchDB.svelte b/src/modules/features/SetupWizard/dialogs/SetupRemoteCouchDB.svelte index 2c640ee0..8bbc3010 100644 --- a/src/modules/features/SetupWizard/dialogs/SetupRemoteCouchDB.svelte +++ b/src/modules/features/SetupWizard/dialogs/SetupRemoteCouchDB.svelte @@ -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"; diff --git a/src/modules/features/SetupWizard/dialogs/SetupRemoteP2P.svelte b/src/modules/features/SetupWizard/dialogs/SetupRemoteP2P.svelte index 210633b5..224ac817 100644 --- a/src/modules/features/SetupWizard/dialogs/SetupRemoteP2P.svelte +++ b/src/modules/features/SetupWizard/dialogs/SetupRemoteP2P.svelte @@ -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({ ...default_setting }); diff --git a/src/modules/services/ObsidianConfirm.ts b/src/modules/services/ObsidianConfirm.ts index a2e3c493..ad94f978 100644 --- a/src/modules/services/ObsidianConfirm.ts +++ b/src/modules/services/ObsidianConfirm.ts @@ -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 implements Confirm { private _context: T; diff --git a/src/modules/services/ObsidianConfirm.unit.spec.ts b/src/modules/services/ObsidianConfirm.unit.spec.ts index 18fe29b0..f0672944 100644 --- a/src/modules/services/ObsidianConfirm.unit.spec.ts +++ b/src/modules/services/ObsidianConfirm.unit.spec.ts @@ -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, diff --git a/src/common/databaseCompatibility.ts b/src/serviceFeatures/compatibilityReview.evaluation.ts similarity index 100% rename from src/common/databaseCompatibility.ts rename to src/serviceFeatures/compatibilityReview.evaluation.ts diff --git a/src/common/databaseCompatibility.unit.spec.ts b/src/serviceFeatures/compatibilityReview.evaluation.unit.spec.ts similarity index 99% rename from src/common/databaseCompatibility.unit.spec.ts rename to src/serviceFeatures/compatibilityReview.evaluation.unit.spec.ts index 052af472..c8b86aa7 100644 --- a/src/common/databaseCompatibility.unit.spec.ts +++ b/src/serviceFeatures/compatibilityReview.evaluation.unit.spec.ts @@ -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 = {}) { return { diff --git a/src/serviceFeatures/compatibilityReview.ts b/src/serviceFeatures/compatibilityReview.ts index bdc7b90a..1ba2ddec 100644 --- a/src/serviceFeatures/compatibilityReview.ts +++ b/src/serviceFeatures/compatibilityReview.ts @@ -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; diff --git a/src/serviceFeatures/compatibilityReview.unit.spec.ts b/src/serviceFeatures/compatibilityReview.unit.spec.ts index 61a508f0..8d8f80fc 100644 --- a/src/serviceFeatures/compatibilityReview.unit.spec.ts +++ b/src/serviceFeatures/compatibilityReview.unit.spec.ts @@ -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, diff --git a/src/serviceFeatures/compatibilityReviewMarkdown.ts b/src/serviceFeatures/compatibilityReviewMarkdown.ts index 8fbdd108..6e66c51f 100644 --- a/src/serviceFeatures/compatibilityReviewMarkdown.ts +++ b/src/serviceFeatures/compatibilityReviewMarkdown.ts @@ -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 diff --git a/src/serviceFeatures/compatibilityReviewObsidian.ts b/src/serviceFeatures/compatibilityReviewObsidian.ts index 623b111d..fe2184a2 100644 --- a/src/serviceFeatures/compatibilityReviewObsidian.ts +++ b/src/serviceFeatures/compatibilityReviewObsidian.ts @@ -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, diff --git a/src/serviceFeatures/compatibilityReviewObsidian.unit.spec.ts b/src/serviceFeatures/compatibilityReviewObsidian.unit.spec.ts index 056f6fb6..22790d65 100644 --- a/src/serviceFeatures/compatibilityReviewObsidian.unit.spec.ts +++ b/src/serviceFeatures/compatibilityReviewObsidian.unit.spec.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from "vitest"; -import type { CompatibilityPause } from "@/common/databaseCompatibility.ts"; +import type { CompatibilityPause } from "./compatibilityReview.evaluation.ts"; import { compatibilityReviewDetailsMarkdown } from "./compatibilityReviewMarkdown.ts"; import { ObsidianCompatibilityReviewUi } from "./compatibilityReviewObsidian.ts"; diff --git a/src/modules/services/LiveSyncUI/dialogues/JoinedDevicesDialog.svelte b/src/serviceFeatures/joinedDevices/JoinedDevicesDialog.svelte similarity index 99% rename from src/modules/services/LiveSyncUI/dialogues/JoinedDevicesDialog.svelte rename to src/serviceFeatures/joinedDevices/JoinedDevicesDialog.svelte index 7ae1b3ac..df172808 100644 --- a/src/modules/services/LiveSyncUI/dialogues/JoinedDevicesDialog.svelte +++ b/src/serviceFeatures/joinedDevices/JoinedDevicesDialog.svelte @@ -8,7 +8,7 @@ JoinedDeviceRow, JoinedDevicesDialogOptions, JoinedDevicesView, - } from "@/serviceFeatures/joinedDevicesDialogTypes"; + } from "./types"; const { setResult, getInitialData }: GuestDialogProps<"close", JoinedDevicesDialogOptions> = $props(); let options = $state(); diff --git a/src/serviceFeatures/joinedDevicesCommand.ts b/src/serviceFeatures/joinedDevices/command.ts similarity index 100% rename from src/serviceFeatures/joinedDevicesCommand.ts rename to src/serviceFeatures/joinedDevices/command.ts diff --git a/src/serviceFeatures/joinedDevicesDialogTypes.ts b/src/serviceFeatures/joinedDevices/types.ts similarity index 100% rename from src/serviceFeatures/joinedDevicesDialogTypes.ts rename to src/serviceFeatures/joinedDevices/types.ts diff --git a/src/serviceFeatures/joinedDevices.ts b/src/serviceFeatures/joinedDevices/view.ts similarity index 97% rename from src/serviceFeatures/joinedDevices.ts rename to src/serviceFeatures/joinedDevices/view.ts index 64bcc2cd..a95c7237 100644 --- a/src/serviceFeatures/joinedDevices.ts +++ b/src/serviceFeatures/joinedDevices/view.ts @@ -1,5 +1,5 @@ import type { JoinedDevice, JoinedDevicesSnapshot } from "@vrtmrz/livesync-commonlib/replication"; -import type { JoinedDevicesView } from "./joinedDevicesDialogTypes"; +import type { JoinedDevicesView } from "./types"; /** Compare recognised SemVer values; unknown development labels have no ordering. */ export function comparePluginVersions(left: string, right: string): number | undefined { diff --git a/src/serviceFeatures/joinedDevices.unit.spec.ts b/src/serviceFeatures/joinedDevices/view.unit.spec.ts similarity index 98% rename from src/serviceFeatures/joinedDevices.unit.spec.ts rename to src/serviceFeatures/joinedDevices/view.unit.spec.ts index a5e4f8c8..503c996f 100644 --- a/src/serviceFeatures/joinedDevices.unit.spec.ts +++ b/src/serviceFeatures/joinedDevices/view.unit.spec.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { comparePluginVersions, differentDeviceVersions, joinedDevicesView } from "./joinedDevices"; +import { comparePluginVersions, differentDeviceVersions, joinedDevicesView } from "./view"; import type { JoinedDevicesSnapshot } from "@vrtmrz/livesync-commonlib/replication"; const empty: JoinedDevicesSnapshot = { milestonePresent: false, locked: false, cleaned: false, devices: [] }; diff --git a/src/serviceFeatures/redFlag.ts b/src/serviceFeatures/redFlag.ts index 73285df1..36fb024e 100644 --- a/src/serviceFeatures/redFlag.ts +++ b/src/serviceFeatures/redFlag.ts @@ -18,7 +18,7 @@ import { askAndPerformFastSetupOnScheduledFetchAll } from "./redFlag.simpleFetch import { deleteFetchFlags } from "./redFlag.fetchState"; import { ConnectionStringParser } from "@vrtmrz/livesync-commonlib/compat/common/ConnectionString"; import { activateRemoteConfiguration } from "@vrtmrz/livesync-commonlib/remote-configurations"; -import { isP2PMainRemote } from "@/common/remoteConfiguration"; +import { isP2PMainRemote } from "@/common/core/settings/remoteConfiguration"; import { $msg } from "@/common/translation"; /** diff --git a/src/serviceFeatures/replication/preflight.ts b/src/serviceFeatures/replication/preflight.ts index 6ab3a152..b0c51926 100644 --- a/src/serviceFeatures/replication/preflight.ts +++ b/src/serviceFeatures/replication/preflight.ts @@ -1,5 +1,5 @@ import { $msg } from "@/common/translation"; -import { withOwnedRemoteResource } from "@/common/ownedRemoteResource"; +import { withOwnedRemoteResource } from "@/common/core/replication/ownedRemoteResource"; import { LOG_LEVEL_INFO, LOG_LEVEL_NOTICE, LOG_LEVEL_VERBOSE, Logger } from "octagonal-wheels/common/logger"; import { MARK_LOG_NETWORK_ERROR } from "@vrtmrz/livesync-commonlib/compat/services/lib/logUtils"; import { UnresolvedErrorManager } from "@vrtmrz/livesync-commonlib/compat/services/base/UnresolvedErrorManager"; diff --git a/src/serviceFeatures/startupLifecycle/bulkSettingMigration.ts b/src/serviceFeatures/startupLifecycle/bulkSettingMigration.ts index 26ef0a5f..c9573809 100644 --- a/src/serviceFeatures/startupLifecycle/bulkSettingMigration.ts +++ b/src/serviceFeatures/startupLifecycle/bulkSettingMigration.ts @@ -1,7 +1,7 @@ import { LOG_LEVEL_NOTICE } from "@vrtmrz/livesync-commonlib/compat/common/logger"; import type { LogFunction } from "@vrtmrz/livesync-commonlib/compat/services/lib/logUtils"; import { $msg } from "@/common/translation"; -import { disableLegacyBulkChunkPreSend } from "@/common/compatibilitySettings"; +import { disableLegacyBulkChunkPreSend } from "@/common/core/settings/compatibilitySettings"; import type { LegacyBulkSendSettings } from "./types"; /** Collaborators required to persist the obsolete bulk-send setting migration. */ diff --git a/src/serviceFeatures/useJoinedDevices.ts b/src/serviceFeatures/useJoinedDevices.ts index 6baa9529..854f6da3 100644 --- a/src/serviceFeatures/useJoinedDevices.ts +++ b/src/serviceFeatures/useJoinedDevices.ts @@ -8,16 +8,16 @@ import { } from "@vrtmrz/livesync-commonlib/compat/common/types"; import { REMOTE_RESOURCE_KINDS, type JoinedDevicesSnapshot } from "@vrtmrz/livesync-commonlib/replication"; import type { ObsidianNoticeGroups } from "@/modules/services/ObsidianNoticeGroups"; -import JoinedDevicesDialog from "@/modules/services/LiveSyncUI/dialogues/JoinedDevicesDialog.svelte"; -import { withOwnedRemoteResource } from "@/common/ownedRemoteResource"; +import JoinedDevicesDialog from "./joinedDevices/JoinedDevicesDialog.svelte"; +import { withOwnedRemoteResource } from "@/common/core/replication/ownedRemoteResource"; import { getCouchDBReplicatorConfigurationIdentity, getObjectStorageReplicatorConfigurationIdentity, -} from "@/common/replicatorConfigurationIdentity"; +} from "@/common/core/replication/configurationIdentity"; import { $msg } from "@/common/translation"; -import { OPEN_JOINED_DEVICES } from "./joinedDevicesCommand"; -import { differentDeviceVersions, joinedDevicesView } from "./joinedDevices"; -import type { JoinedDevicesDialogOptions } from "./joinedDevicesDialogTypes"; +import { OPEN_JOINED_DEVICES } from "./joinedDevices/command"; +import { differentDeviceVersions, joinedDevicesView } from "./joinedDevices/view"; +import type { JoinedDevicesDialogOptions } from "./joinedDevices/types"; type JoinedDevicesHost = NecessaryServices< "API" | "UI" | "setting" | "database" | "replicator" | "replication" | "appLifecycle", diff --git a/src/serviceFeatures/useJoinedDevices.unit.spec.ts b/src/serviceFeatures/useJoinedDevices.unit.spec.ts index 0c5670c2..265c9d14 100644 --- a/src/serviceFeatures/useJoinedDevices.unit.spec.ts +++ b/src/serviceFeatures/useJoinedDevices.unit.spec.ts @@ -3,14 +3,14 @@ import { UICommandRegistry } from "@vrtmrz/livesync-commonlib/ui-commands"; import { createNewVaultSettings } from "@vrtmrz/livesync-commonlib/settings"; import { REMOTE_COUCHDB } from "@vrtmrz/livesync-commonlib/compat/common/types"; import type { JoinedDevicesSnapshot } from "@vrtmrz/livesync-commonlib/replication"; -import type { JoinedDevicesDialogOptions } from "./joinedDevicesDialogTypes"; -vi.mock("@/modules/services/LiveSyncUI/dialogues/JoinedDevicesDialog.svelte", () => ({ default: {} })); +import type { JoinedDevicesDialogOptions } from "./joinedDevices/types"; +vi.mock("@/serviceFeatures/joinedDevices/JoinedDevicesDialog.svelte", () => ({ default: {} })); vi.mock("@/common/translation", () => ({ $msg: (message: string, values: Record = {}) => message.replace(/\$\{([^}]+)\}/g, (placeholder, key: string) => values[key] ?? placeholder), })); import { useJoinedDevicesFeature } from "./useJoinedDevices"; -import { OPEN_JOINED_DEVICES } from "./joinedDevicesCommand"; +import { OPEN_JOINED_DEVICES } from "./joinedDevices/command"; function fixture() { const settings = { diff --git a/src/serviceFeatures/useReviewHarness.unit.spec.ts b/src/serviceFeatures/useReviewHarness.unit.spec.ts index c73070a7..77b0ebd3 100644 --- a/src/serviceFeatures/useReviewHarness.unit.spec.ts +++ b/src/serviceFeatures/useReviewHarness.unit.spec.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from "vitest"; -import type { CompatibilityPause } from "@/common/databaseCompatibility.ts"; +import type { CompatibilityPause } from "@/serviceFeatures/compatibilityReview.evaluation.ts"; import { REVIEW_HARNESS_STATE_KEY } from "@/features/ReviewHarness/reviewHarnessController.ts"; import { useReviewHarness } from "./useReviewHarness.ts"; diff --git a/src/serviceModules/FileSystemAdapters/ObsidianConversionAdapter.ts b/src/serviceModules/FileSystemAdapters/ObsidianConversionAdapter.ts index 179d4d9d..e4ae76bf 100644 --- a/src/serviceModules/FileSystemAdapters/ObsidianConversionAdapter.ts +++ b/src/serviceModules/FileSystemAdapters/ObsidianConversionAdapter.ts @@ -1,6 +1,6 @@ import type { UXFileInfoStub, UXFolderInfo } from "@vrtmrz/livesync-commonlib/compat/common/types"; import type { IConversionAdapter } from "@vrtmrz/livesync-commonlib/compat/serviceModules/adapters"; -import { TFileToUXFileInfoStub, TFolderToUXFileInfoStub } from "@/modules/coreObsidian/storageLib/utilObsidian"; +import { TFileToUXFileInfoStub, TFolderToUXFileInfoStub } from "@/modules/coreObsidian/storage/utilObsidian"; import type { TFile, TFolder } from "obsidian"; /** diff --git a/test/e2e-obsidian/runner/liveSyncWorkflow.ts b/test/e2e-obsidian/runner/liveSyncWorkflow.ts index e256fc10..7fdb3e97 100644 --- a/test/e2e-obsidian/runner/liveSyncWorkflow.ts +++ b/test/e2e-obsidian/runner/liveSyncWorkflow.ts @@ -1,6 +1,6 @@ import { evalObsidianJson } from "./cli.ts"; import { SERVICE_CONTEXT_MEMBERS } from "../../contracts/serviceContext.ts"; -import { DATABASE_COMPATIBILITY_VERSION_KEY } from "../../../src/common/databaseCompatibility.ts"; +import { DATABASE_COMPATIBILITY_VERSION_KEY } from "../../../src/serviceFeatures/compatibilityReview.evaluation.ts"; import { CURRENT_SETTING_VERSION } from "@vrtmrz/livesync-commonlib/compat/common/models/setting.const"; import { type ObsidianLiveSyncSettings, VER } from "@vrtmrz/livesync-commonlib/compat/common/types"; import { upsertRemoteConfigurationInPlace } from "@vrtmrz/livesync-commonlib/remote-configurations"; diff --git a/utils/cli-ci.unit.spec.ts b/utils/cli-ci.unit.spec.ts index dd60faf0..900e4d6c 100644 --- a/utils/cli-ci.unit.spec.ts +++ b/utils/cli-ci.unit.spec.ts @@ -92,7 +92,7 @@ describe("CLI CI selection", () => { "src/apps/cli/main.ts", "src/LiveSyncBaseCore.ts", "src/serviceFeatures/replicationScheduling.ts", - "src/common/replicatorProviders.ts", + "src/common/core/replication/providers.ts", "src/common/messages/en.ts", "src/modules/AbstractModule.ts", "src/modules/main/ModuleLiveSyncMain.ts",