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") ) let workspaceManager = LocalWorkspaceManager() return AppDependencies( configurationStore: configurationStore, workspaceManager: workspaceManager, logger: SaplingLogger() ) } static func preview() -> AppDependencies { let configurationStore = InMemoryConfigurationStore() let workspaceManager = LocalWorkspaceManager() 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) } }