2026-05-29 15:34:15 +02:00
|
|
|
import Foundation
|
|
|
|
|
import SaplingLogging
|
|
|
|
|
import SaplingStorage
|
|
|
|
|
import SaplingWorkspace
|
|
|
|
|
|
|
|
|
|
struct AppDependencies {
|
|
|
|
|
let configurationStore: any ConfigurationStore
|
|
|
|
|
let workspaceManager: any WorkspaceManaging
|
|
|
|
|
let logger: SaplingLogger
|
|
|
|
|
|
|
|
|
|
static func live() -> AppDependencies {
|
|
|
|
|
let configurationStore = JSONConfigurationStore(
|
|
|
|
|
fileURL: supportDirectory().appendingPathComponent("Configuration.json")
|
|
|
|
|
)
|
2026-06-02 14:38:27 +02:00
|
|
|
let workspaceManager = LocalWorkspaceManager()
|
2026-05-29 15:34:15 +02:00
|
|
|
|
|
|
|
|
return AppDependencies(
|
|
|
|
|
configurationStore: configurationStore,
|
|
|
|
|
workspaceManager: workspaceManager,
|
|
|
|
|
logger: SaplingLogger()
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static func preview() -> AppDependencies {
|
|
|
|
|
let configurationStore = InMemoryConfigurationStore()
|
2026-06-02 14:38:27 +02:00
|
|
|
let workspaceManager = LocalWorkspaceManager()
|
2026-05-29 15:34:15 +02:00
|
|
|
|
|
|
|
|
return AppDependencies(
|
|
|
|
|
configurationStore: configurationStore,
|
|
|
|
|
workspaceManager: workspaceManager,
|
|
|
|
|
logger: SaplingLogger(subsystem: "app.sapling.Sapling.preview")
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static func supportDirectory() -> URL {
|
|
|
|
|
let baseURL = FileManager.default.urls(
|
|
|
|
|
for: .applicationSupportDirectory,
|
|
|
|
|
in: .userDomainMask
|
|
|
|
|
).first ?? FileManager.default.temporaryDirectory
|
|
|
|
|
|
|
|
|
|
return baseURL.appendingPathComponent("Sapling", isDirectory: true)
|
|
|
|
|
}
|
|
|
|
|
}
|