From 33cccec27409255926c01d5f73d052d36049b2e3 Mon Sep 17 00:00:00 2001 From: dankinsoid <30962149+dankinsoid@users.noreply.github.com> Date: Mon, 18 Mar 2024 18:21:11 +0300 Subject: [PATCH] 0.31.0 --- .swiftformat | 2 +- .../Search/Search.xcodeproj/project.pbxproj | 16 +- .../UserInterfaceState.xcuserstate | Bin 108001 -> 143740 bytes Examples/Search/Search/Search.swift | 177 +++++- Examples/Search/Search/SearchActions.swift | 55 -- Examples/Search/Search/SearchView.swift | 117 ---- .../UserInterfaceState.xcuserstate | Bin 40057 -> 40301 bytes .../SpeechClient/Client.swift | 3 +- .../SyncUps/SyncUps.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/swiftpm/Package.resolved | 4 +- .../IDEFindNavigatorScopes.plist} | 5 +- .../UserInterfaceState.xcuserstate | Bin 100701 -> 110018 bytes Examples/SyncUps/SyncUps/AppFeature.swift | 22 +- .../SyncUps/Dependencies/DataManager.swift | 3 +- .../SyncUps/Dependencies/OpenSettings.swift | 3 +- .../Dependencies/SpeechRecognizer.swift | 3 +- Examples/SyncUps/SyncUps/RecordMeeting.swift | 13 +- Examples/SyncUps/SyncUps/SyncUpDetail.swift | 20 +- Examples/SyncUps/SyncUps/SyncUpForm.swift | 2 +- Examples/SyncUps/SyncUps/SyncUpsList.swift | 19 +- .../SyncUpsUITests/SyncUpsUITests.swift | 3 +- .../xcshareddata/swiftpm/Package.resolved | 4 +- .../IDEFindNavigatorScopes.plist | 5 + .../UserInterfaceState.xcuserstate | Bin 71697 -> 69306 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 16 - Examples/TicTacToe/tic-tac-toe/Package.swift | 2 +- .../tic-tac-toe/Sources/AppCore/AppCore.swift | 4 +- .../Sources/AppSwiftUI/AppView.swift | 6 +- .../AuthenticationClient.swift | 3 +- .../Sources/GameSwiftUI/GameView.swift | 5 +- .../Sources/LoginCore/LoginCore.swift | 2 +- .../Sources/LoginSwiftUI/LoginView.swift | 12 +- .../LoginUIKit/LoginViewController.swift | 9 +- .../Sources/NewGameCore/NewGameCore.swift | 5 +- .../Sources/NewGameSwiftUI/NewGameView.swift | 3 - .../Sources/TwoFactorCore/TwoFactorCore.swift | 3 +- .../Todos/Todos.xcodeproj/project.pbxproj | 44 +- .../xcshareddata/swiftpm/Package.resolved | 32 ++ .../IDEFindNavigatorScopes.plist | 5 + .../UserInterfaceState.xcuserstate | Bin 0 -> 50137 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 6 + Examples/Todos/Todos/Todo.swift | 39 +- Examples/Todos/Todos/Todos.swift | 178 +++--- Examples/Todos/Todos/TodosApp.swift | 8 +- Examples/Todos/TodosTests/TodosTests.swift | 2 +- Examples/VoiceMemos/README.md | 9 - .../VoiceMemos.xcodeproj/project.pbxproj | 543 ------------------ .../contents.xcworkspacedata | 7 - .../xcschemes/VoiceMemos.xcscheme | 88 --- .../AppIcon.appiconset/AppIcon-60@2x.png | Bin 7569 -> 0 bytes .../AppIcon.appiconset/AppIcon-76@2x.png | Bin 9893 -> 0 bytes .../AppIcon.appiconset/AppIcon-iPadPro@2x.png | Bin 15226 -> 0 bytes .../AppIcon.appiconset/AppIcon.png | Bin 8460 -> 0 bytes .../AppIcon.appiconset/Contents.json | 103 ---- .../AppIcon.appiconset/transparent.png | Bin 221 -> 0 bytes .../VoiceMemos/Assets.xcassets/Contents.json | 6 - .../AudioPlayerClient/AudioPlayerClient.swift | 25 - .../LiveAudioPlayerClient.swift | 54 -- .../AudioRecorderClient.swift | 43 -- .../LiveAudioRecorderClient.swift | 105 ---- .../VoiceMemos/VoiceMemos/Dependencies.swift | 28 - Examples/VoiceMemos/VoiceMemos/Helpers.swift | 8 - Examples/VoiceMemos/VoiceMemos/Info.plist | 62 -- .../VoiceMemos/VoiceMemos/RecordingMemo.swift | 122 ---- .../VoiceMemos/VoiceMemos/VoiceMemo.swift | 145 ----- .../VoiceMemos/VoiceMemos/VoiceMemos.swift | 229 -------- .../VoiceMemos/VoiceMemos/VoiceMemosApp.swift | 15 - .../VoiceMemosTests/VoiceMemosTests.swift | 457 --------------- Package.swift | 6 +- README.md | 4 +- Sources/VDStore/Action.swift | 10 +- .../Dependencies/CancellableStorage.swift | 3 +- .../VDStore/Dependencies/TasksStorage.swift | 78 ++- Sources/VDStore/Macros.swift | 5 + Sources/VDStore/Store.swift | 35 +- Sources/VDStore/StoreDIValues.swift | 3 +- Sources/VDStore/StoreExtensions/ForEach.swift | 18 - .../VDStore/StoreExtensions/OnChange.swift | 5 +- Sources/VDStore/Utils/DIPublisher.swift | 6 +- Sources/VDStore/Utils/StoreBox.swift | 31 +- Sources/VDStore/ViewStore.swift | 7 + Sources/VDStoreMacros/ActionsMacro.swift | 30 +- Sources/VDStoreMacros/Extensions.swift | 4 + .../VDStoreMacros/VDStoreMacrosPlugin.swift | 1 + Tests/VDStoreTests/VDStoreTests.swift | 28 +- 85 files changed, 611 insertions(+), 2574 deletions(-) delete mode 100644 Examples/Search/Search/SearchActions.swift delete mode 100644 Examples/Search/Search/SearchView.swift rename Examples/{VoiceMemos/VoiceMemos.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist => SyncUps/SyncUps.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/IDEFindNavigatorScopes.plist} (72%) create mode 100644 Examples/TicTacToe/TicTacToe.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/IDEFindNavigatorScopes.plist create mode 100644 Examples/Todos/Todos.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 Examples/Todos/Todos.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/IDEFindNavigatorScopes.plist create mode 100644 Examples/Todos/Todos.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Examples/Todos/Todos.xcodeproj/xcuserdata/danil.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist delete mode 100644 Examples/VoiceMemos/README.md delete mode 100644 Examples/VoiceMemos/VoiceMemos.xcodeproj/project.pbxproj delete mode 100644 Examples/VoiceMemos/VoiceMemos.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 Examples/VoiceMemos/VoiceMemos.xcodeproj/xcshareddata/xcschemes/VoiceMemos.xcscheme delete mode 100644 Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/AppIcon-60@2x.png delete mode 100644 Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/AppIcon-76@2x.png delete mode 100644 Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/AppIcon-iPadPro@2x.png delete mode 100644 Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/AppIcon.png delete mode 100644 Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/transparent.png delete mode 100644 Examples/VoiceMemos/VoiceMemos/Assets.xcassets/Contents.json delete mode 100644 Examples/VoiceMemos/VoiceMemos/AudioPlayerClient/AudioPlayerClient.swift delete mode 100644 Examples/VoiceMemos/VoiceMemos/AudioPlayerClient/LiveAudioPlayerClient.swift delete mode 100644 Examples/VoiceMemos/VoiceMemos/AudioRecorderClient/AudioRecorderClient.swift delete mode 100644 Examples/VoiceMemos/VoiceMemos/AudioRecorderClient/LiveAudioRecorderClient.swift delete mode 100644 Examples/VoiceMemos/VoiceMemos/Dependencies.swift delete mode 100644 Examples/VoiceMemos/VoiceMemos/Helpers.swift delete mode 100644 Examples/VoiceMemos/VoiceMemos/Info.plist delete mode 100644 Examples/VoiceMemos/VoiceMemos/RecordingMemo.swift delete mode 100644 Examples/VoiceMemos/VoiceMemos/VoiceMemo.swift delete mode 100644 Examples/VoiceMemos/VoiceMemos/VoiceMemos.swift delete mode 100644 Examples/VoiceMemos/VoiceMemos/VoiceMemosApp.swift delete mode 100644 Examples/VoiceMemos/VoiceMemosTests/VoiceMemosTests.swift delete mode 100644 Sources/VDStore/StoreExtensions/ForEach.swift diff --git a/.swiftformat b/.swiftformat index 292e863..2040e52 100644 --- a/.swiftformat +++ b/.swiftformat @@ -7,8 +7,8 @@ --disable sortDeclarations --disable blankLinesAtStartOfScope --disable opaqueGenericParameters ---enable redundanttype --header "" +--enable redundanttype --enable organizeDeclarations --organizetypes markcategories --extensionacl on-extension diff --git a/Examples/Search/Search.xcodeproj/project.pbxproj b/Examples/Search/Search.xcodeproj/project.pbxproj index d47d3f3..ea0e793 100644 --- a/Examples/Search/Search.xcodeproj/project.pbxproj +++ b/Examples/Search/Search.xcodeproj/project.pbxproj @@ -7,12 +7,10 @@ objects = { /* Begin PBXBuildFile section */ - 832055D92B94A0F000AEABBB /* SearchActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 832055D82B94A0F000AEABBB /* SearchActions.swift */; }; - 832055DB2B94A11300AEABBB /* Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = 832055DA2B94A11300AEABBB /* Search.swift */; }; 83E5F5EF2A90165500C772A0 /* VDStore in Frameworks */ = {isa = PBXBuildFile; productRef = 83E5F5EE2A90165500C772A0 /* VDStore */; }; CA66690B242547B000A639B3 /* WeatherClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA66690A242547B000A639B3 /* WeatherClient.swift */; }; CA86E49D24253C2500357AD9 /* SearchApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA86E49C24253C2500357AD9 /* SearchApp.swift */; }; - CA86E49F24253C2500357AD9 /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA86E49E24253C2500357AD9 /* SearchView.swift */; }; + CA86E49F24253C2500357AD9 /* Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA86E49E24253C2500357AD9 /* Search.swift */; }; CA86E4A124253C2700357AD9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CA86E4A024253C2700357AD9 /* Assets.xcassets */; }; CA86E4B224253C2700357AD9 /* SearchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA86E4B124253C2700357AD9 /* SearchTests.swift */; }; /* End PBXBuildFile section */ @@ -51,12 +49,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 832055D82B94A0F000AEABBB /* SearchActions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchActions.swift; sourceTree = ""; }; - 832055DA2B94A11300AEABBB /* Search.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Search.swift; sourceTree = ""; }; CA66690A242547B000A639B3 /* WeatherClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeatherClient.swift; sourceTree = ""; }; CA86E49724253C2500357AD9 /* Search.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Search.app; sourceTree = BUILT_PRODUCTS_DIR; }; CA86E49C24253C2500357AD9 /* SearchApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchApp.swift; sourceTree = ""; }; - CA86E49E24253C2500357AD9 /* SearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = ""; }; + CA86E49E24253C2500357AD9 /* Search.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Search.swift; sourceTree = ""; }; CA86E4A024253C2700357AD9 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; CA86E4AD24253C2700357AD9 /* SearchTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SearchTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; CA86E4B124253C2700357AD9 /* SearchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchTests.swift; sourceTree = ""; }; @@ -115,9 +111,7 @@ isa = PBXGroup; children = ( CA86E49C24253C2500357AD9 /* SearchApp.swift */, - CA86E49E24253C2500357AD9 /* SearchView.swift */, - 832055D82B94A0F000AEABBB /* SearchActions.swift */, - 832055DA2B94A11300AEABBB /* Search.swift */, + CA86E49E24253C2500357AD9 /* Search.swift */, CA66690A242547B000A639B3 /* WeatherClient.swift */, CA86E4A024253C2700357AD9 /* Assets.xcassets */, ); @@ -241,10 +235,8 @@ buildActionMask = 2147483647; files = ( CA66690B242547B000A639B3 /* WeatherClient.swift in Sources */, - 832055D92B94A0F000AEABBB /* SearchActions.swift in Sources */, - 832055DB2B94A11300AEABBB /* Search.swift in Sources */, CA86E49D24253C2500357AD9 /* SearchApp.swift in Sources */, - CA86E49F24253C2500357AD9 /* SearchView.swift in Sources */, + CA86E49F24253C2500357AD9 /* Search.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Examples/Search/Search.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/UserInterfaceState.xcuserstate b/Examples/Search/Search.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/UserInterfaceState.xcuserstate index ae26b94a902d05e3f145c6249a822c2c2d4637fe..7dd89b8ea593bf0bfc999c3b177fab4c850177be 100644 GIT binary patch literal 143740 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�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 z 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 J@1cov{|A!&KMeo? diff --git a/Examples/Search/Search/Search.swift b/Examples/Search/Search/Search.swift index eb5af8e..e8921a6 100644 --- a/Examples/Search/Search/Search.swift +++ b/Examples/Search/Search/Search.swift @@ -1,6 +1,13 @@ -import Foundation +import SwiftUI +import VDStore -// MARK: - Search feature domain +private let readMe = """ +This application demonstrates live-searching with the VDStore. As you type the \ +events are debounced for 300ms, and when you stop typing an API request is made to load \ +locations. Then tapping on a location will load weather. +""" + +// MARK: - Search state struct Search: Equatable { @@ -23,3 +30,169 @@ struct Search: Equatable { } } } + +// MARK: - Search actions + +@Actions +extension Store { + + func searchQueryChanged(query: String) { + state.searchQuery = query + cancel(Self.searchQueryChangeDebounced) + guard query.isEmpty else { return } + state.results = [] + state.weather = nil + } + + @CancelInFlight + func searchQueryChangeDebounced() async { + try? await Task.sleep(nanoseconds: NSEC_PER_SEC / 3) + guard !state.searchQuery.isEmpty, !Task.isCancelled else { + return + } + do { + let response = try await di.weatherClient.search(state.searchQuery) + try Task.checkCancellation() + state.results = response.results + } catch { + guard !Task.isCancelled, !(error is CancellationError) else { return } + state.results = [] + } + } +} + +@Actions +extension Store { + + @CancelInFlight + func searchResultTapped(location: GeocodingSearch.Result) async { + state.resultForecastRequestInFlight = location + defer { state.resultForecastRequestInFlight = nil } + do { + let forecast = try await di.weatherClient.forecast(location) + state.weather = State.Weather( + id: location.id, + days: forecast.daily.time.indices.map { + State.Weather.Day( + date: forecast.daily.time[$0], + temperatureMax: forecast.daily.temperatureMax[$0], + temperatureMaxUnit: forecast.dailyUnits.temperatureMax, + temperatureMin: forecast.daily.temperatureMin[$0], + temperatureMinUnit: forecast.dailyUnits.temperatureMin + ) + } + ) + } catch { + state.weather = nil + } + } +} + +// MARK: - Search feature view + +struct SearchView: View { + + @ViewStore var state = Search() + + var body: some View { + NavigationStack { + VStack(alignment: .leading) { + Text(readMe) + .padding() + + HStack { + Image(systemName: "magnifyingglass") + TextField( + "New York, San Francisco, ...", + text: Binding { + state.searchQuery + } set: { text in + $state.searchQueryChanged(query: text) + } + ) + .textFieldStyle(.roundedBorder) + .autocapitalization(.none) + .disableAutocorrection(true) + } + .padding(.horizontal, 16) + + List { + ForEach(state.results) { location in + VStack(alignment: .leading) { + Button { + Task { + await $state.searchResultTapped(location: location) + } + } label: { + HStack { + Text(location.name) + + if state.resultForecastRequestInFlight?.id == location.id { + ProgressView() + } + } + } + + if location.id == state.weather?.id { + weatherView(locationWeather: state.weather) + } + } + } + } + + Button("Weather API provided by Open-Meteo") { + UIApplication.shared.open(URL(string: "https://open-meteo.com/en")!) + } + .foregroundColor(.gray) + .padding(.all, 16) + } + .navigationTitle("Search") + } + .task(id: state.searchQuery) { + await $state.searchQueryChangeDebounced() + } + } + + @ViewBuilder + func weatherView(locationWeather: Search.Weather?) -> some View { + if let locationWeather { + let days = locationWeather.days + .enumerated() + .map { idx, weather in formattedWeather(day: weather, isToday: idx == 0) } + + VStack(alignment: .leading) { + ForEach(days, id: \.self) { day in + Text(day) + } + } + .padding(.leading, 16) + } + } +} + +// MARK: - Private helpers + +private func formattedWeather(day: Search.Weather.Day, isToday: Bool) -> String { + let date = + isToday + ? "Today" + : dateFormatter.string(from: day.date).capitalized + let min = "\(day.temperatureMin)\(day.temperatureMinUnit)" + let max = "\(day.temperatureMax)\(day.temperatureMaxUnit)" + + return "\(date), \(min) – \(max)" +} + +private let dateFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateFormat = "EEEE" + return formatter +}() + +// MARK: - SwiftUI previews + +struct SearchView_Previews: PreviewProvider { + static var previews: some View { + SearchView() + } +} diff --git a/Examples/Search/Search/SearchActions.swift b/Examples/Search/Search/SearchActions.swift deleted file mode 100644 index 855f825..0000000 --- a/Examples/Search/Search/SearchActions.swift +++ /dev/null @@ -1,55 +0,0 @@ -import Foundation -import VDStore - -@Actions -extension Store { - - func searchQueryChanged(query: String) { - state.searchQuery = query - cancel(Self.searchQueryChangeDebounced) - guard query.isEmpty else { return } - state.results = [] - state.weather = nil - } - - func searchQueryChangeDebounced() async { - try? await Task.sleep(nanoseconds: NSEC_PER_SEC / 3) - guard !state.searchQuery.isEmpty, !Task.isCancelled else { - return - } - do { - let response = try await di.weatherClient.search(state.searchQuery) - guard !Task.isCancelled else { return } - state.results = response.results - } catch { - guard !Task.isCancelled, !(error is CancellationError) else { return } - state.results = [] - } - } -} - -@Actions -extension Store { - - func searchResultTapped(location: GeocodingSearch.Result) async { - state.resultForecastRequestInFlight = location - defer { state.resultForecastRequestInFlight = nil } - do { - let forecast = try await di.weatherClient.forecast(location) - state.weather = State.Weather( - id: location.id, - days: forecast.daily.time.indices.map { - State.Weather.Day( - date: forecast.daily.time[$0], - temperatureMax: forecast.daily.temperatureMax[$0], - temperatureMaxUnit: forecast.dailyUnits.temperatureMax, - temperatureMin: forecast.daily.temperatureMin[$0], - temperatureMinUnit: forecast.dailyUnits.temperatureMin - ) - } - ) - } catch { - state.weather = nil - } - } -} diff --git a/Examples/Search/Search/SearchView.swift b/Examples/Search/Search/SearchView.swift deleted file mode 100644 index 87bcf2c..0000000 --- a/Examples/Search/Search/SearchView.swift +++ /dev/null @@ -1,117 +0,0 @@ -import SwiftUI -import VDStore - -private let readMe = """ -This application demonstrates live-searching with the VDStore. As you type the \ -events are debounced for 300ms, and when you stop typing an API request is made to load \ -locations. Then tapping on a location will load weather. -""" - -// MARK: - Search feature view - -struct SearchView: View { - - @ViewStore var state = Search() - - var body: some View { - NavigationStack { - VStack(alignment: .leading) { - Text(readMe) - .padding() - - HStack { - Image(systemName: "magnifyingglass") - TextField( - "New York, San Francisco, ...", - text: Binding { - state.searchQuery - } set: { text in - $state.searchQueryChanged(query: text) - } - ) - .textFieldStyle(.roundedBorder) - .autocapitalization(.none) - .disableAutocorrection(true) - } - .padding(.horizontal, 16) - - List { - ForEach(state.results) { location in - VStack(alignment: .leading) { - Button { - Task { - await $state.searchResultTapped(location: location) - } - } label: { - HStack { - Text(location.name) - - if state.resultForecastRequestInFlight?.id == location.id { - ProgressView() - } - } - } - - if location.id == state.weather?.id { - weatherView(locationWeather: state.weather) - } - } - } - } - - Button("Weather API provided by Open-Meteo") { - UIApplication.shared.open(URL(string: "https://open-meteo.com/en")!) - } - .foregroundColor(.gray) - .padding(.all, 16) - } - .navigationTitle("Search") - } - .task(id: state.searchQuery) { - await $state.searchQueryChangeDebounced() - } - } - - @ViewBuilder - func weatherView(locationWeather: Search.Weather?) -> some View { - if let locationWeather { - let days = locationWeather.days - .enumerated() - .map { idx, weather in formattedWeather(day: weather, isToday: idx == 0) } - - VStack(alignment: .leading) { - ForEach(days, id: \.self) { day in - Text(day) - } - } - .padding(.leading, 16) - } - } -} - -// MARK: - Private helpers - -private func formattedWeather(day: Search.Weather.Day, isToday: Bool) -> String { - let date = - isToday - ? "Today" - : dateFormatter.string(from: day.date).capitalized - let min = "\(day.temperatureMin)\(day.temperatureMinUnit)" - let max = "\(day.temperatureMax)\(day.temperatureMaxUnit)" - - return "\(date), \(min) – \(max)" -} - -private let dateFormatter: DateFormatter = { - let formatter = DateFormatter() - formatter.dateFormat = "EEEE" - return formatter -}() - -// MARK: - SwiftUI previews - -struct SearchView_Previews: PreviewProvider { - static var previews: some View { - SearchView() - } -} diff --git a/Examples/SpeechRecognition/SpeechRecognition.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/UserInterfaceState.xcuserstate b/Examples/SpeechRecognition/SpeechRecognition.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/UserInterfaceState.xcuserstate index 19fbcb17cc3e189ec962200e5735d0b00f36e8cb..eccaccb417d354b39a955eba599b6f0323bd3b7d 100644 GIT binary patch delta 19630 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 RF@%~g@^sDb&d)LG{|8l~rmg@0 delta 19341 zcmb8X2V4|K|37{++jmc;N${=!7)$;Ti^sZ8BT%I z;S4w%u7+#iTDT6bha2EVxCw5CTi{l>6CQvE;URbeo`e_SC3qQLf#1X1@D98Se}OOI zd-xIl0ac#}NYDgN2t*G;i_jxniC%<)a3kCa5282WNq7<7gb(3Qgc1XZ2qK?HOR2Z$5IN#Yc7nz%{aQW3X_JH%b$9`Pe_pLjw%C7uz_i5J9M;vMmx_&@>@k_5?+ z0;xxukk+I<=}aof-lQk#OU9A$WCEE;CXvbHU^0bFC5Mn{2Nj zA@7op$tRSI0u-bOiliutrWlH)I(Heb)C9F-J$MMKT!{;Pt>2Zj0QBM37VuSnx+|=rRB6P ztw$TvCbSK0OWV=*w1Re{2htIABppRZ(}U<3I+l*3F&FC)ZZJ2QyUZiz8S|WZ$Gm4{EMSdTW7dQ< zWzAS~)`GQUtypW;hIL>StQ)KHW_{RTwl5pPMzE1=4m+I9W%Jm4wtyYM7P3WbFuyi+zIX^cZxgBo#D=M7rATP9qumoGxrPkn0w8s-tgV|9=sN> z&Fk>GydK|^*XIp*L*9rt<866o-i7z%y?AflhY#lm@)3L_AH_%WgZN~AFrUt6@OgYb z-^7pMRlLX}zL{^~$MWO&@%#jSGCz}7^RxKb{6c;aznovef6afxujJS9>-ppS3H~I1 zia)L5&+upYbNqS!0)LVJp1;N4=YQg#^3V9^{0sg)|3T0ebOc>NPv|M=3kHIrU?dm| zCW3`vFE|Lj1cl%u_zHalKOt1;CqxK?gcu=R$Pk7JnL?J3E#wHpg#w{eC=<$s8lhGg zEz}8Pgl1v9Fh!UuOcPXJ3*QJUg>Qv+VU_Tmuv%CntQFP?>xB)%Mq!h%S=b_M6%GoA zgu}uS;izy-I4+zJ&I#9q>%tA;rf^HRE&MF}B0Ljb$)TK(lX6N<%NaQ@7vw$UJ>^Dn zQ@NA8ms}z5E%%iB%KOLzoqB0E`|i@MOCj!XaBAZn)!n55moER?B!J_td0{QB}G5)fakudP%n>b&R;cGxYGe5S8h%=WV`zZGHOK z$U6VD`3Km9RBHZV6EZ2JzgnjNjun=qlTfk0m27A~C;4yd(-hq#>2Qd@yBN{Ox@S0$zl#zAah*?=3?#47n{WvaqKd%P}U9>i{r37AE~b! z_3N_?tXvM3gB9Rw@QpZL+%5iy042`43fjRc@Eurd_UE)r0k@(dWumcld7rtdT*aP;0ePBO001m31OiH=g;uqpPaiKU- zy~M;n{;2fSW8gSA0ZxjO#Hr$!;!JVYMNFQv`0n+1ju(bT=3({~6%^%H4UR0&%O5RH z#*?1XNk>I>ZBc>pf=ne7!DVnoJ;>C8XanD?qfBi)G=uyg4I)nKxaV^|cRl15xQ+X# zi!;P2>gn!!J++9gp8Fkls--)n9&gQ4dV-(ZKu=lAMerC;@dEn=T+p6D#P;} zoH!^=SyYx^t;{JKDb5k+s?Aq}3Y*O(jhTrAG%xDaxX9~_&6r`HBK^)>Uj6xbaa$z0p<%G83|PzUNl zJ=hcKLj!0iwu)`yGI6=MLi}3%MqDX=E4H^oW0`~WgBP*|w8Wp*m}#pptEHc{;udi$ z{@k`PJ|-FTgYIBuEA$Y*6K8es8G2zoLvOtH@gc4j*K{1Sw1#L=oeKa4!M-y6Rv0X< zYlR`=dNmqluYv>MK$(6U41?j~261B>jDV5iCULW9pI%y2p5MWS{OZgu*$>JuAE7MN zJTMllTq@4e=7-pXXlX2oR!G;Ql3}Ve>R^~6ZWniaHtOJliqgEl$Me+;I4nt7QI$U+ zG9{;U6t=Ar)nFFP&eGD091s?kSA=^bupg+Xs*6F(>3@n9Znk6G^7mtd2H48@c(Lk$~WT}LsU=6Gl_lXC^ zL*n7T)(p&r4VcdRqr?N^l%a!)YVtKJL<{FV|5^`SO`k1+&L%jqgZoE1xv$@&gX?gr z#C7o)X7zdJWOcNSj_Pm1!KtE5Tr3{zlJXqbD$#2$oCoK_1#lr;1Q)|4@GH1fJSm7v*J1Nym&#pC|+uZZJqS`8h!&;VtTb>dR^|M*AL?ObAoLj4&rG#FyeL@wNCy z{8fA_z7yYzAH?6<2`ddB2s^@FhPgmEVLtrc$%j7>fOslB5Fq}^h>e*s;UJjs#e5+8 zh#x!oKm=eR;Xyin@O_$}SzR;hM-0GRAo`1+T8S|6Pl*f0L?kf?YmfsG0RBvwBWBW{xJ_)qry%cT;-zy>0V$OfB<;Y2Qx zhX5xoK|l)uTHJ+z9|GMG=<&HzjoCvK5F@%sfq)zV<{z{m%D~EHL^)AGj6{G%fJZ?1 zixtE$$wo*|!8RgG%Rs#@!pKKs9R96&aH~V})3MN|bhHCAVf*$ zxJNxb*jGhNBId|kR}qtmDa2G_8u2ADotQz)B-F$#Vm1QW2wfJNNYTd zI4o{Jz(&&YF-gm||I)H{_uDoh9vU0b#gQ|_WgNp1XNhyfdEx?bk+_5a2IPo<69Uc% zxFCSLuVA28Wnamj64w#vC6QbqhKPd@@KmoWS*yOG&^GyrcqEbY0r3z4Hw4_~O)6@SIJd!<0{l95G0D<6t(3~{I$|TK5bJBvuZ0L(X z2m+x9^b=>rbQ!abAW{=Eb~XKfGI^w%M0^DLOU%ddpT6p|cu$J##IE3->_hg)rj7I? z{mB3_kPIS&$-ZO=8A|p;ARK{#2w>9@i9i$r(FkBo#vl-jKwLXHKtpjdLK9PwgCv5- zcM&{U6ICIQCUJXXa!fpkB!^-`lj#VjE1KAf%#>u1MP^F}0*MGDY0j9?$yzp@>Lo{z zMVJy~Ap(P2$zlXjBtj>Uh)GuB-u>1sLy&C6Jv3_d)CWPO?vC8K1&J63FO4TwVIDW)<3m6O+xe~ zIh~wA&O`u%%0XZ_0=a)#FimFg|4XU5n(&8g)o3-ZORI_hr&im^wKCV`3DFKCWVTr2KG@k5`nG7FAWz{Wl{|?+ zWh;3afhs9YRgvd$no3?EFCtKlK+Rv7B6)?p_MbT@d0pl}-b6qtS(8zs{a;hH327P9 zVWYZcc8`4UubUsrY^9rP#cmxpYvA}x`E}P_Psz73*OlZm@;Ui}d`Z3{Uz2ahUlFK7 zpdNt+1R4=&LSPI6Dg?xhMtv3lImJ;tPFBXqHd2DR$}s6ITcEWGRHoL(xvpMo|HaiKp9d-lrd#OnNns5j6+~N z0uvCJh`<*JOhRBX0#gu}iu2`Z2zsyf^fr?*nrILyXbKNThGK}A!8Qe%@8QvPTo)oiK~zrzMdlfY52R9s4I z(tsRgej62w(@#wWgG!*1{u(P8fq7B|p@-~<>?k!v?G!Z7WGFRE=GsQ3QyB;>Kwx1T zl}TkGun2+0>d8T4Vx;HhQG=xC^@%?=^|AE4j>(MBG~!8Yz*3vj^}J%LOd79*!kqmI zfu(I!IaPr`D39rLtr@qUn8&*r$mdy=LobT@Ernp@nH|X0Re1dwji(#fgK27f3Zgz zc_Q@%HHn%`O`)bz)2J`0>C_A=eI})*W>K@LIn-Qg9yK3iwA!vr62Z93- zOhvF1K^1~(1iwXaH-hI8{0R{>A}kQ$CHA`bcW6T`(S$b3)E?nu)Fozez0W(BX*yS^ z`$p7Cd6E8SH?Gw5eUqh?tJV(FQ)}4-sNEa{%g~V{HL>{T1FhCv{B4$2_TLxxm8(_G zwC-nPZqQt|N}b)(_w)9xn)cOrl9NAg-=%3^t3Dgv>+|;gn)dbT9s@6aKIbEv_KjIu zo*mQ39&7n|_eo9n<}9s{&RN>1pS19wk9OF zHoy*<#$oT-RvL%B=Q{EZ+LX4Cd}|nOE=8EH_MxQf6J2wXz|2bMPwz&8CB0=E&k z(@qC!@X{d~yfh9>5V+fg_s75RKI*_5k|^QDamKwayeSy(|CwRY!{{stYbFBsTWRdi zf6`#hqep147D!khNN9>AtPgRHWnxU1(^6~#2h$@Zus?s+-2t|iZkE7~rt9c>x`A$_ zo9HpLiWX^v05)S!5O|8fGX$_1d4T}d_$vfnBk-o3Zs`O&p%W~wnIiCO7ua`yf&JJ4 zw%>dSEVi9*yTC5SVCf#RcIl8*>(g<<(TRq3^m6)Z3GNC6-nY`cQuxQirzz?z}}ADOYfui z(+B8-^db5%eS|(rAEPmk|3pxRAV3fzNFYceNFhig$RNlf$gQGJb_(Jwv4}n|Wmxnj zEDFeXiUP`|3=3*$GAw9!_RZ6 zzSa6Vj2VMhWGiEips^;IQsZW0#+GsD&Q_f5h zmh->MT%9szhB6t_yweeMX=R2X=qky02$RF)b;y{>m1Nwjjmd}S5LDno*MAl&I+V#2 zcT`fl1}$SoYEV~5sNMg*Thfp@Q^Oz$buBZRsblJy2Bwi|V#Y8kMntf;dTp|Vy15he zcumg3Op;IscA*aL%z0qH4%A`HJPGxD1cSOzFT$w*d%n{($z{w63Hfpa`?fM)BN!qf zH(}bD)f(jANytO-+{r489Oo_4|%~e;C3^6n7zzCW`Xc&oL6oSzR4ni;n!Ps`@SSRFDnpzffPJ$fQ1vvqARdG|R9o%dtEwuyO>4Aee^WPy{i( zG7!Y{%0w^=!E6L`+S%?JysVA}FRL%%9o~f(PeN0@gT)CM=Q) zcWN<{GYVyKy$|~pw!ehC?!p@Xn*LK0K`wMoHM$K%g1RD=Ix(oKm|D|TOmaUTj zk4CV*m90mxK?8UUi!^{m32>uih%}W)NsGqp1a^`J?H3Z-G5_q&W2dtVCA2fxnXH4T%NksYV_v}4M23Of1*lX-{_6B>Cy~W;U@340foQ2?Q z1m_?)7r}W5&PNanW+8%$5M12O{@5vlhwLNvXPE>0Sdzh#E*UIEa0P;2<2Vt1(yq{g}_k=wzhH%f^8it=LD`h#>2^_mAwqFY_5l7cb4ON!KZu& zBLmL311)DHpgBv7Xq&pAZTU;RJ2l9-ei#|oAHmI?$hh$Ti7bYTlaR$CxV4qTPHme8 zSu)pAMi1jsB=v5W=AI_aeTRBlp{Y?Om!m z`-KE{5`xFOz)rBLsg& z5Ie`m2x8~>6v1Z*;>h#GDjsSC!P7j$vsiTwyda6S^-8z)d zD|_w-Zjup;fF}G zO+^IpSGa3nG>p&g&;y@^^*~Uc%{IHjD6fF8#8l)*@P&L4U(A>ArFFqeq$G?mDfw1RO2QahQnxsJWByzII}Pkr5^Qq`b}LpAVT|c#l)Hi7Ey3Q% zZ{j!eTllT~Hhw$5gWt*TLWCtEtPo+12pdG$BEk+4_K3jP91-Ev&hP1jeE?eUhcN6T z5^U!#*skIhM0iN3duvu8j~84ke;E-jU8t}AuNBDO=I=^a?;xUAD}N6WiVmy~_@5;( zVf-V^IKoW=^H>7ot{ynr%$R@4ztLcQEn)TitXop?ZvxJ}+WFu4kNh9}C;m@CCIA5n zgg_#~8xgn?>Whdzi10&%KOzDU5r~K&LX=YxQm7Xi)D59lq|hidsh5WK^%7KqDC^je)-^3JYZV?ZR|nhA>l53$ujT!W?0)Fi)6|@SANS9}xwJ7=egFL=+*S z7!f6iC`CkByUbQtB(uf*_)1tRvo7Sg5Pp?S;OSQ(q8bs(je8nK z0Jm)dUV+Pn?ZOUWr+`;o4I*k0F&Ytd%Y{9{USXfG9})G4Xh1|GBAV36P4oMm1lr4l zQ^INC3?jxLVk{yi{`K-iI4|H=w9AAG!bRZ{B26XEH`Ph)hUYC^}G4&k}*Vpwca z%qV5f@X~x-+Rs^rn_kLVG==`ZwD(&04f_H-sb7V+!X@Fo@S$UB*a~8?BScI_#FVdv z-(iFBhwuqDK#X>(cmNU85b-5`$A3Vo+F0YwN}-r7HATw0MD=vEK!q#+a#mC15B|P% z$p~EJ&rGh!%c-->QCfO<`+K-|bIBop`hOIqm{?iMzsG#aqU2aJTTb@z>n1I4=5tW1>HB zJOp@xr*NEO%=h9$@qX|^eiYvGy@dY``>aF!5&jt7<9!Nm@BV?m&fk&DhlfdGQ z+x~c)b`>@V6NO258}>B3w&x2Ag~fQGs#@_X-65P29^&oPJuok{<+^wawS(LpZ=3EX zkCqq6tK~KF(eeg)lUyZVAYUfmCqE!R)Z>1Sr&{`2W?JD|tF$(0ozOb3bxZ3{k8jRhiMPgj?|9Uj?pgA9;ZD+`)lo$D(!vR z$Fy&1Kh%Dy{ZWU};dFQ%xlVT-Egdr*YaJJzUOH|%eRTTi4A6K5yk>Xz%y(cP(gOOMpk)-%>K z)ic+#)U(!e(d(t>rstvOspqXXNKcimSEn~iuT`&2Z<*c-y?uJ8_0H*C(7UYnz1|Oc zZ}k4?Y24Gar+LrgJumdU-Sb}0`#m4_{JH02{T}*;`bPRD`nLL>`u_U;^rQ8M=%?!s z)6do)uAishtpBC{Ed4q9^Yj<%f2H55zf6Cp{!RT~41fV)Kp8LwoPl7_&7g;Ywt=q7 zpr?U>fx^JuptpgSfsa8S1Al`cgAjv$24Myf22lo?29pgI8>}=qY4D>VXJ}!lFibF1 z8Y087hT{#tFq~{S)v(pD-Eghpdc%!|n+*>b9ydH`c-ru+;T6NHhSv;l7~V2`V)(&G zZlrHyVdQG$Y2YvgAXV${!QfKj+ngpq2fQLa(B(MY2vqcKJ*BV;tmXsXedMl+0- z7_Bl|ZM4>Cz0pRa%|=^|4jCOWI%agz=(N!}qYFltjBXpfHs*{CjBSkj8;2Pu8mAej z8xJ$iGA=MKG%hwSH7+-9F`i?*(s;e`4&zTK$2sxWmo?QNQ8T4q{fI@+|} zw9#~osc1UYbe`!F)1{_urpry&o9;0E!St5tA7;Fn+^oBqmYJEEvze=z!pz-lfLXX% zlG$LhRI@a*GP4@92D6D~v&@#5Ej4R1TW-#ot8~mA&3l>mHy>o4YMy4EZvL(L2J=1U z2hGo#U$r1CSPM^!5Q_+lWQ!DwAr?a|axIE1$}PrPY_iyIamC`Q#Wjl?7PlH`{Nu-)_Itez*Nz`>XcX>~GlLvcF@mx@Uji{;B<2`}g+0*?+YEgttd` zbLioq?V#&m>0s^P=HTJr>EP|q&tZT=xI=`)V24zPG>3GD3Wr9AF%F_bv%^D&Hx6$d z-aGu}$T*rhnmbxLT07c0+B-TrIy<^LDjeM%!yE@XMmk12#yG|~CORfNrZ}cKraKOE ztaqI6xLf6T+lg>;a*A;(b(-w7(rLZZCZ{b<+nn}0op3tkbjInN(*>tXPIsN|J3Vmv z+3B&?JyX2liTtjh&g=-R{8-qp#~)z!_lx2v~n zAJ+iaVAoLB0j>jGGhK6Bb6xXYN4OTdmbs2}t#%#dI@-0~wb6CH>o(ULuAh2Y_loFM z-D_^IExj)HdZp_1d#_Ilpdb`-MNfsH!bD-Nuu|A4>=X_PFNLqdUlF7TQS?(}DM}TU zifToTqCwH55Eade8H!no#fo;tR>cm*ZpA*uLB$cpam5wI4~pxGTZ%i1dy1bF4;3HX zOx*gorMOkO&2n4p*6y~}ZG+opw;gV~-S)X1a69g%y5e@j?XKH1x0h~j+}^qU=JwH@ zbJun6>2B@r;O^w^>h9t0>F(p+$9V#EA3Uym-1NBPanIv^Z_wMa_ki97y(jfv*ZWfM*Pc3_Zk~NS z13ZI0Lp&or6Fmoe4)IL)%=FCm9PXLtS?Q_tto5w-Z1Pljsup>E>$%2rz2`>HZJs+l zcYE&jJmY!Z^Oon2oL~d#SvAz5Ts|yu-aCy$5;6dM9`%d1rVly;a^{c+c_v%Dc^bh4)JD zRoE=dyn@G?+-qvKHfh4e8PMpe4>3~ed2xce9C;Pd`9_<_Nn)o;4{r< zy3b6XSw0JWmiR37S?06CXN}KRpF=(;eNOwF^*Qfz)#tj;O`khH_k2`Od_MT{zTJGa ze06>GeT{rgeJy;geLa1>eSLlXd;@%geEa%_`u6t?^R4z>=6lZf&pyt5hW44#XJ?;d zeQxx5-se@H-~AXrxu2n5FF$|31ixgzRKKBq!~C-Sa{UVYiu_9bD*USazVMsk_od%V zzuA6s{TBEw_FL-L=C{IcrC+w~d>61bU|Yc6fI|W211<$z z3HTx4M!>CrhXFqa+6Q_D_6ZCK3=Zrc7#95 zB7>M9c~FlaoglrS0YPJeCI@W@+8nekXlKx#pnX9Hf(`{84LT8YI_O-`#h@!eKLp(f zx*c>c=%-+LaF1Y};GV&T!6w1x!B)Yx!4ARB!M%drgFSe3my=h5S$b| zICx0#z2N7;FN0qPzwJAw@8rHy`+nJXX5aU!5GsTT;X>pg6(NlwV?xA`mXQ4+XF|?} zTnM=wniX0aS{^zwv^w;w(Cr^t;vXPQM@f+xPeE z@7>?GzkmP3{V(*t)c;EV9|q(MC?7C#K-GXz1MUxaIpFnxUkAJoYY3YdHYsdM*q7mh z!qdXb!z;s8%JACo`tYW3F}x*weE1jPQ^H%rmxq5HzB0T$e0BJ`@D1Uc!ncNR58oMn zHT>N`lYv14a|TWrxN6{ufj>vk5j`SwB6>y`L|8^RMYu#LBHSZ9BfKMgBL+kajEIVe ziHMI#jHrlcj6e}B5#u8!M@)^F9x*ebHDYWCc?dn5L%A`V3yk2o1|CgNPg?T9Cl zczb9h6Uj$*i`0tLjnt1ciZqS1i1do|jr5BQhzyDhiR>R47CA67DsoU{Y-CB~q{uaq z=OW)k8Ak<24U1}wnjh5`wIXU|RD0CMs9jNeqV`1{h&mK?BCx)w zInnc@7e#*+-4?wfdPnr`=)KYVqYp+Oi9Q~EGWvA%x#$bgm!e+|(i-G7C}mLnprwNj z4f-(###qES#<;{NV%%f=V*15|#SDyziWw9W8-ky^T}-84u&Bcs5>$?-p+yZx(MEZxe4H?-(BzpBSGSpBA4HpA(-O zUl3myUmHI*en$MP__^^5;ups+jb9eOE`DSD=J;*#JL7l9?~UIdebd&16yV+ofNt|i<^xUEXKpYR~z=Y+=z zza=t>rim7b)`@nBj)^XbibRh@uSDNO|HQb&#Kh#pl*A#4>50P^AZaZ3lqmB zE>Ap`_)AjvB(J0)NwrCHk~SvoO4^%rAn8!j>7*-3SCg(K-AKBXbSLR)(u<_mNpF)r zB>kRjm~5Bqoa~zHmh6@6o2>Fn4oHqlPD)NrPD##9E=(>?E=#UT9+h01T$emCd3JJp z^6KPu$s3cmByUgNmAp6kK=R?_W63v@?{o zQwEP7ylC)&!4FcX6x)>0l&F-Ll=zgyl=PImlo2V#DP<`mQ>s!_Da|S4QYNZWCZ|kI zX;0ajvMXgz%KnriDaTVzrJPB*net1@^OTn6{KpVnx*zm^-k@R8ju>C z8k#yFbzo{#YD{W;YJO^AYH@05YI$m9sxq}Eb#!V&YE!Bzby4ch)Z0VA5W6AKLn?+$ z8?t)Hi6Iw$(*~r4 zr$wj5rX{2$r43K3NK>ZOq}8R3NkeI4)5fRGPHRisnzkctciO(RgK0<7j;EbUJDYYP z?Q+^LX;0Ihr@c&jo%S~EL)!0Ye+-okg+s}qRzpLE<_#S`w0-Egp>NW4(|f1Kr4LC@ zSEXmBXQvmXSEY|iAD!NiJ|D*a6Q`SdI4SJSVj z-%Nj!{yhC-2FM^X=nNsFTZUGKPKH&6BBOssct&K#pp3YT#EiiiLo(7cGBa{AYBK6F z8Zw$PR2j_~<1!{>e33CFV_L@ajMW*ZGF}W*=?wE3mN85m_SLXG!>$jzKkVVKUxqyy z_Uo`unX*inNoLZSY-Z0)!%UM*^GvHuo6L~Rn9Rh?n zUt~_poSv!9oSnHmbA9HK%;TA-GS6mS$h@3+HS>Drt<1Zb_cK3ae$4!oCCh?YR2G}X zXUSDrJ+id3bhF&E;*Ie9rFa*A_QIjZKIu{q;&Cgx1enU*snN1Zb#XI{>N zoUJ)ma()|bIy_`}!SG4Lza4&T_)o*14SzZO&G5Iw|IB4``CNH!_gt-9om`7t>s-5B z$6S}(Ub#`Zsks@sS-Cm61-V7JCAnp}jk&7aiMf+<=jJZTU6R|H`*rTh+*P@&b9dz) z&%KprQVV-fGS)OH{b)IdWL!MKfOI}3Y zh`h;ptMkt1y~{Vr_s>tuugO>CH|LMbpO8O2e}4YL{KffS<+tW9%U_qjF@H<`_WWJ> zd-AX6Kgxfa|2+Ry{=57S`5*H?6?7}mDljXsF0d_dC~z%MDGEFaJPZ02#1-Tfj3_8B zC@UCQP+d?{P*>1cpekrCm|L)*U{S%6f~5t^3cfB_Smu7C`y!_z*CIucdy!|6cad*Va#3~B+@kG8H;aj4hvM+!{Nm=~ z$;H!(XB4Z87ZtB4{-*fb;#I|~i`N$KD&AXsp!jg{vEmcO4~tcAia!*8EdEqNl+Yz? z314DVVp`%c(v1Cih_L5yCdrJ0|94t9pa}c7Q zvLDLsl|3)}SoUW*ET_uZa-qC?xkBls_nc zT>h;5W%=9k59J@rKUD}7h7~3i<`q^IwiWgjo)sY#VHE=_qAFBz6$ur|6)6?@6;%}z zDkfD-t(ab+u9#CXzhY6vR~2m)D=KzW?5@~bvA^PA#gU5R6{jlBRGhE4SaG@H)ky7; z-Xl{-HjHc?d3fagN}|%T(y7w5(yh{?(!a8QWq4&|<)F&A%7n_K%E6VXm3fsTDvK-2 zDo0jUReo8ysIs+kdF9ut%2kzXD%VwRsN7$9sPc5>*~%N0cPoFad{Ftg@@eIZ%2!pO zs(Y19m3@^{m1~t-RqrbAsyRZ)!s_#|buYOSdsQTAx)%)t-t3N4$ zl2BSIdntP>y_CMnKxMEpRM}sds2r?JRpu#+lqJe?WwmmYaYnd<4`l8CZ;C7CaGqyswT5$L``u`X-!2sG8=QaWxZbCf7`>nO?KHW=GB5 zngcb5YL3^OsyS10uI6^ly_)+qFKgb`ys!DaR#ppZsamF1zt*PKzSgPMwbrfHqc*rU zq_$seSnYz^Z)!KxZm!){yR&vr?f%+RwP$ND)LyQ=T6?|r=ICyt14oyPR?Qi`cl4Ff zk4L{5{ciMcqd(Slt23xGt~0B%th1>bU5DzX)v4>|)XlG3QrB9ytZqf!cXb=uYFOWJyy1Go(?&(3S7TITLSsf_QDar(sK(Ka4UJn7F5 zrcYypF*;*@yH8hq7i5$szZ%vGMa_vqWNecT8UPn)o2~s zh&H1=Xg@lL4x=;ZEIN;_jYQAUOY|E3ir%B&(Whq6Og1yke6zgSsM)01tl6@8e6zZF zcJtik1TEv!?mhCM^T8_1x==d&>3_{JP NJY4hHb#6KR{{T!kBc1>N diff --git a/Examples/SpeechRecognition/SpeechRecognition/SpeechClient/Client.swift b/Examples/SpeechRecognition/SpeechRecognition/SpeechClient/Client.swift index 38fc5a5..da75787 100644 --- a/Examples/SpeechRecognition/SpeechRecognition/SpeechClient/Client.swift +++ b/Examples/SpeechRecognition/SpeechRecognition/SpeechClient/Client.swift @@ -81,8 +81,7 @@ final actor ActorIsolated { extension StoreDIValues { - @StoreDIValue - var speechClient: SpeechClient = valueFor( + @StoreDIValue var speechClient: SpeechClient = valueFor( live: .liveValue, test: SpeechClient(), preview: .previewValue diff --git a/Examples/SyncUps/SyncUps.xcodeproj/project.pbxproj b/Examples/SyncUps/SyncUps.xcodeproj/project.pbxproj index 4270a1b..e8c1e07 100644 --- a/Examples/SyncUps/SyncUps.xcodeproj/project.pbxproj +++ b/Examples/SyncUps/SyncUps.xcodeproj/project.pbxproj @@ -669,7 +669,7 @@ repositoryURL = "https://github.com/dankinsoid/VDFlow"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 4.12.0; + minimumVersion = 4.26.0; }; }; /* End XCRemoteSwiftPackageReference section */ diff --git a/Examples/SyncUps/SyncUps.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Examples/SyncUps/SyncUps.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 40686ec..d742fc5 100644 --- a/Examples/SyncUps/SyncUps.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Examples/SyncUps/SyncUps.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -14,8 +14,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/dankinsoid/VDFlow", "state" : { - "revision" : "d53882224e3f88ac489d26231719cdb320213b5c", - "version" : "4.12.0" + "revision" : "c56440956274448d9a7efaa77e3f03b1d3104464", + "version" : "4.26.0" } } ], diff --git a/Examples/VoiceMemos/VoiceMemos.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Examples/SyncUps/SyncUps.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/IDEFindNavigatorScopes.plist similarity index 72% rename from Examples/VoiceMemos/VoiceMemos.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to Examples/SyncUps/SyncUps.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/IDEFindNavigatorScopes.plist index 18d9810..5dd5da8 100644 --- a/Examples/VoiceMemos/VoiceMemos.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ b/Examples/SyncUps/SyncUps.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/IDEFindNavigatorScopes.plist @@ -1,8 +1,5 @@ - - IDEDidComputeMac32BitWarning - - + diff --git a/Examples/SyncUps/SyncUps.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/UserInterfaceState.xcuserstate b/Examples/SyncUps/SyncUps.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/UserInterfaceState.xcuserstate index 0278141e396590f1bcbd184a75f86b163562ee1f..c1c62a3b7797b6507b76a87390b7b0ee35b48287 100644 GIT binary patch literal 110018 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 O|2@V3_n%O4)BgcIEY!sS literal 100701 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: SyncUpDetailDelegate { } func startMeeting(syncUp: SyncUp) { - state.path.record = RecordMeeting(syncUp: syncUp) + state.path.$record.select(with: RecordMeeting(syncUp: syncUp)) } } @@ -49,8 +49,8 @@ extension Store: RecordMeetingDelegate { state.syncUpsList.syncUps[i] = state.path.detail.syncUp } + @CancelInFlight func debounceSave(syncUps: [SyncUp]) async throws { - cancel(Self.debounceSave) try await di.continuousClock.sleep(for: .seconds(1)) try await di.dataManager.save(JSONEncoder().encode(syncUps), .syncUps) } @@ -72,11 +72,11 @@ struct AppView: View { @ViewStore var state: AppFeature init(state: AppFeature) { - self.state = state + _state = ViewStore(wrappedValue: state) } init(store: Store) { - _state = ViewStore(store: store) + _state = ViewStore(store) } var body: some View { @@ -98,7 +98,7 @@ struct AppView: View { private var listView: some View { SyncUpsListView(store: $state.syncUpsList) - .step($state.binding.path, \.$list) + .step($state.binding.path.$list) } private var detailView: some View { @@ -106,7 +106,7 @@ struct AppView: View { store: $state.path.detail .di(\.syncUpDetailDelegate, $state) ) - .step($state.binding.path, \.$detail) + .step($state.binding.path.$detail) } private var meetingView: some View { @@ -114,7 +114,7 @@ struct AppView: View { meeting: state.path.meeting.meeting, syncUp: state.path.meeting.syncUp ) - .step($state.binding.path, \.$meeting) + .step($state.binding.path.$meeting) } private var recordView: some View { @@ -122,7 +122,7 @@ struct AppView: View { store: $state.path.record .di(\.recordMeetingDelegate, $state) ) - .step($state.binding.path, \.$record) + .step($state.binding.path.$record) } } diff --git a/Examples/SyncUps/SyncUps/Dependencies/DataManager.swift b/Examples/SyncUps/SyncUps/Dependencies/DataManager.swift index c22c9d9..52b60c6 100644 --- a/Examples/SyncUps/SyncUps/Dependencies/DataManager.swift +++ b/Examples/SyncUps/SyncUps/Dependencies/DataManager.swift @@ -20,8 +20,7 @@ extension DataManager { extension StoreDIValues { - @StoreDIValue - var dataManager: DataManager = valueFor(live: DataManager.liveValue, test: DataManager.testValue) + @StoreDIValue var dataManager: DataManager = valueFor(live: DataManager.liveValue, test: DataManager.testValue) } extension DataManager { diff --git a/Examples/SyncUps/SyncUps/Dependencies/OpenSettings.swift b/Examples/SyncUps/SyncUps/Dependencies/OpenSettings.swift index 93077e2..85123c8 100644 --- a/Examples/SyncUps/SyncUps/Dependencies/OpenSettings.swift +++ b/Examples/SyncUps/SyncUps/Dependencies/OpenSettings.swift @@ -3,8 +3,7 @@ import VDStore extension StoreDIValues { - @StoreDIValue - var openSettings: @Sendable () async -> Void = Self.openSettings + @StoreDIValue var openSettings: @Sendable () async -> Void = Self.openSettings private static let openSettings: @Sendable () async -> Void = { await MainActor.run { diff --git a/Examples/SyncUps/SyncUps/Dependencies/SpeechRecognizer.swift b/Examples/SyncUps/SyncUps/Dependencies/SpeechRecognizer.swift index 8659af6..2bfdd6c 100644 --- a/Examples/SyncUps/SyncUps/Dependencies/SpeechRecognizer.swift +++ b/Examples/SyncUps/SyncUps/Dependencies/SpeechRecognizer.swift @@ -116,8 +116,7 @@ final actor ActorIsolated { extension StoreDIValues { - @StoreDIValue - var speechClient: SpeechClient = valueFor(live: .liveValue, test: .testValue, preview: .previewValue) + @StoreDIValue var speechClient: SpeechClient = valueFor(live: .liveValue, test: .testValue, preview: .previewValue) } struct SpeechRecognitionResult: Equatable { diff --git a/Examples/SyncUps/SyncUps/RecordMeeting.swift b/Examples/SyncUps/SyncUps/RecordMeeting.swift index 8fd0759..4af5544 100644 --- a/Examples/SyncUps/SyncUps/RecordMeeting.swift +++ b/Examples/SyncUps/SyncUps/RecordMeeting.swift @@ -5,7 +5,7 @@ import VDStore struct RecordMeeting: Equatable { - var alert = Alert() + var alert: Alert = .none var secondsElapsed = 0 var speakerIndex = 0 var syncUp: SyncUp @@ -19,6 +19,7 @@ struct RecordMeeting: Equatable { struct Alert: Equatable { var endMeeting = true var speechRecognizerFailed + var none } static let mock = RecordMeeting(syncUp: .engineeringMock) @@ -57,13 +58,13 @@ extension Store { } func endMeetingButtonTapped() { - state.alert.endMeeting = true + state.alert.$endMeeting.select(with: true) } func nextButtonTapped() { guard state.speakerIndex < state.syncUp.attendees.count - 1 else { - state.alert.endMeeting = false + state.alert.$endMeeting.select(with: false) return } state.speakerIndex += 1 @@ -123,7 +124,7 @@ extension Store { if !state.transcript.isEmpty { state.transcript += " ❌" } - state.alert.speechRecognizerFailed.select() + state.alert.$speechRecognizerFailed.select() } } @@ -132,11 +133,11 @@ struct RecordMeetingView: View { @ViewStore var state: RecordMeeting init(state: RecordMeeting) { - self.state = state + _state = ViewStore(wrappedValue: state) } init(store: Store) { - _state = ViewStore(store: store) + _state = ViewStore(store) } var body: some View { diff --git a/Examples/SyncUps/SyncUps/SyncUpDetail.swift b/Examples/SyncUps/SyncUps/SyncUpDetail.swift index b141144..ee99cf6 100644 --- a/Examples/SyncUps/SyncUps/SyncUpDetail.swift +++ b/Examples/SyncUps/SyncUps/SyncUpDetail.swift @@ -4,19 +4,21 @@ import VDStore struct SyncUpDetail: Equatable { - var destination = Destination() + var destination: Destination = .none var syncUp: SyncUp @Steps struct Destination: Equatable { - var alert = Alert() - var edit = SyncUpForm(syncUp: SyncUp(id: StoreDIValues.current.uuid())) + var alert: Alert = .none + var edit: SyncUpForm = .init(syncUp: SyncUp(id: StoreDIValues.current.uuid())) + var none @Steps struct Alert: Equatable { var confirmDeletion var speechRecognitionDenied var speechRecognitionRestricted + var none } } } @@ -41,7 +43,7 @@ extension Store { } func deleteButtonTapped() { - state.destination.alert.confirmDeletion.select() + state.destination.alert.$confirmDeletion.select() } func deleteMeetings(atOffsets indices: IndexSet) { @@ -70,7 +72,7 @@ extension Store { } func editButtonTapped() { - state.destination.edit = SyncUpForm(syncUp: state.syncUp) + state.destination.$edit.select(with: SyncUpForm(syncUp: state.syncUp)) } func startMeetingButtonTapped() { @@ -79,10 +81,10 @@ extension Store { di.syncUpDetailDelegate?.startMeeting(syncUp: state.syncUp) case .denied: - state.destination.alert.speechRecognitionDenied.select() + state.destination.alert.$speechRecognitionDenied.select() case .restricted: - state.destination.alert.speechRecognitionRestricted.select() + state.destination.alert.$speechRecognitionRestricted.select() @unknown default: break @@ -93,14 +95,14 @@ extension Store { struct SyncUpDetailView: View { @ViewStore var state: SyncUpDetail - @StateStep var feature = AppFeature.Path() + @StateStep var feature: AppFeature.Path = .list init(state: SyncUpDetail) { _state = ViewStore(wrappedValue: state) } init(store: Store) { - _state = ViewStore(store: store) + _state = ViewStore(store) } var body: some View { diff --git a/Examples/SyncUps/SyncUps/SyncUpForm.swift b/Examples/SyncUps/SyncUps/SyncUpForm.swift index 275a56f..e3c79fc 100644 --- a/Examples/SyncUps/SyncUps/SyncUpForm.swift +++ b/Examples/SyncUps/SyncUps/SyncUpForm.swift @@ -54,7 +54,7 @@ struct SyncUpFormView: View { } init(store: Store, focus: SyncUpForm.Field? = nil) { - _state = ViewStore(store: store) + _state = ViewStore(store) self.focus = focus } diff --git a/Examples/SyncUps/SyncUps/SyncUpsList.swift b/Examples/SyncUps/SyncUps/SyncUpsList.swift index 3f7edad..5214ea2 100644 --- a/Examples/SyncUps/SyncUps/SyncUpsList.swift +++ b/Examples/SyncUps/SyncUps/SyncUpsList.swift @@ -4,14 +4,14 @@ import VDStore struct SyncUpsList: Equatable { - var destination = Destination() + var destination: Destination var syncUps: [SyncUp] = [] init( - destination: Destination.Steps? = nil, + destination: Destination = .none, syncUps: () throws -> [SyncUp] = { [] } ) { - self.destination = Destination(destination) + self.destination = destination do { self.syncUps = try syncUps() } catch is DecodingError { @@ -24,8 +24,9 @@ struct SyncUpsList: Equatable { @Steps struct Destination: Equatable { - var add = SyncUpForm(syncUp: SyncUp(id: .init())) + var add: SyncUpForm = .init(syncUp: SyncUp(id: .init())) var confirmLoadMockData + var none } } @@ -33,7 +34,7 @@ struct SyncUpsList: Equatable { extension Store { func addSyncUpButtonTapped() { - state.destination.add = SyncUpForm(syncUp: SyncUp(id: di.uuid())) + state.destination.$add.select(with: SyncUpForm(syncUp: SyncUp(id: di.uuid()))) } func confirmAddSyncUpButtonTapped() { @@ -51,7 +52,7 @@ extension Store { } func destinationPresented() { - state.destination.confirmLoadMockData.select() + state.destination.$confirmLoadMockData.select() state.syncUps = [ .mock, .designMock, @@ -71,21 +72,21 @@ extension Store { struct SyncUpsListView: View { @ViewStore var state: SyncUpsList - @StateStep var feature = AppFeature.Path() + @StateStep var feature: AppFeature.Path = .list init(state: SyncUpsList) { _state = ViewStore(wrappedValue: state) } init(store: Store) { - _state = ViewStore(store: store) + _state = ViewStore(store) } var body: some View { List { ForEach(state.syncUps) { syncUp in Button { - feature.detail = SyncUpDetail(syncUp: syncUp) + feature.$detail.select(with: SyncUpDetail(syncUp: syncUp)) } label: { CardView(syncUp: syncUp) } diff --git a/Examples/SyncUps/SyncUpsUITests/SyncUpsUITests.swift b/Examples/SyncUps/SyncUpsUITests/SyncUpsUITests.swift index 7f73727..b5745aa 100644 --- a/Examples/SyncUps/SyncUpsUITests/SyncUpsUITests.swift +++ b/Examples/SyncUps/SyncUpsUITests/SyncUpsUITests.swift @@ -1,8 +1,7 @@ import XCTest final class SyncUpsUITests: XCTestCase { - @MainActor - var app: XCUIApplication! + @MainActor var app: XCUIApplication! @MainActor override func setUpWithError() throws { diff --git a/Examples/TicTacToe/TicTacToe.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Examples/TicTacToe/TicTacToe.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index aa0e350..3e5e11b 100644 --- a/Examples/TicTacToe/TicTacToe.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Examples/TicTacToe/TicTacToe.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -14,8 +14,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/dankinsoid/VDFlow", "state" : { - "revision" : "e80a2ebd4231739633e76aae116ab792bbb47bfe", - "version" : "4.21.0" + "revision" : "c56440956274448d9a7efaa77e3f03b1d3104464", + "version" : "4.26.0" } } ], diff --git a/Examples/TicTacToe/TicTacToe.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/IDEFindNavigatorScopes.plist b/Examples/TicTacToe/TicTacToe.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/IDEFindNavigatorScopes.plist new file mode 100644 index 0000000..5dd5da8 --- /dev/null +++ b/Examples/TicTacToe/TicTacToe.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/IDEFindNavigatorScopes.plist @@ -0,0 +1,5 @@ + + + + + diff --git a/Examples/TicTacToe/TicTacToe.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/UserInterfaceState.xcuserstate b/Examples/TicTacToe/TicTacToe.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/UserInterfaceState.xcuserstate index ec5eabdc292e8bdcf7b91f6f65b7d64d3e51188a..c306a51cf7afa4b3aec8b2f861be0ec8b1aa400a 100644 GIT binary patch literal 69306 zcmeF4cVHC77x-s(w)eZEcL*I)NazSc2qkn$LWg)HM~H-6$R#vIcEsKhdnEw@qgW6T zD`4+R01Ni6*n5}Xo88+`67r3|FMfZ&KM?P7x3}|VcIGp0-n^OJH@BpyFjkh5vKL{* zA%b`$AQ4GOoz`)2q%>9-EuP*nT$(q(5WZ!1EQ^**>lmGTS|qP57DV{mwYj!6A!}@8 zStNg0{G{DTMoLarS-33X;JX6Cw@5=eYKoen<|qyIMtx9U)DQJX1JFP;2%UrmqakQC z%0y$(SX78kLkmz5T8N5K6qTSws1(Ie87fDM(Q@RVRp?xF0lFAnhOR(Yp=;3%=w?)b z)}u}6DfBdY20e?OL(iiZ(2M9L^fGz{?MD018|W?cF8Tm{j6OqOps&$)=tuMm`W^j+ z1uS9-tJuI6Zi!pr*0>FBi#y>SxF=4=gYgi2G9HSD;dDG4XW-Fz5@j?mF%!?q;r%TgPqWHgR`wo4I?qE!;Nle(oXeVQwe4i+hrLihGWGo_m>lh1<*R z zhLa33f{Y}i$Y_#D#*ndO9GOI>l4)cP$t4A3J}D%pkp(11%E-m!5^^cIj9gAulPky? zawWNnTurVg6{M1EBDaxy$QE)h*-GvskB~>ntK>EEI(dWaCvTFs$lK%{@-BIgd_=w= zUy|?159AN>C;5x~O%C!BFZ1pA_Iw9Ef$zw7;yd$Q_^y06zB`}9_u>2U{rLX;5dLI- z6hE5JVN_%-|u{Ehrp z{yu&ie?PySe}I3Ge~5pWe}sROe~f>Ye~y2i-_2L^`}sHdxA>3vkNLm&zxjg#60pDt zMBoKM5CuulgrE=-8VN0gmO_HiQRpOe7LtTyVU#dh$P~s1V})_TcwvGtQJ5s0BIF3O zgxNx#kS`Po3x#4~v9LtAOt@TFEnFe25v~-j60R1m5v~=k6K)dL3%3dzggb=I!hOOv z;eKJeuv6G2ydmrt-W1*v-WJ{w-WA>x-WNU)J`_F`z81a_z7>8Jei06eNW>y15>XR% zv7^{Y>@0Q>yNcb!?qUzIr!E)q+{ zm{=y3i;Kl2;!^Ppag}(sc%gWaxJJBEyh^-Uyhgl5Tq|xD9}piD9}*uH9}yoFcZfU1 zUE*WnQ{s!_9&xYumiV^#j`)fAsd!LA5|%iLNW3ISq9jSOq)3L;NNOy#lv+t0rA|^; zshiYGN|nY)W2JG@cxi$(QJN&3B2AXEq-<%Llq*G~c~Y?yl}eCAI zx>~wMx>mYQx?Z|Lx<%R`-63t3?vu7j_e(pZozm;l8`6I1P3bM^ZRs89UFkjPedz<~ z6X`4IYw1VnC+RQgZ|R^c$+Fx|ZZCI`6XcF^C%LoSMeZthle^1Fav!;`e3Cp^9wCpE zN6Dk*O!*XfvV5AnKrWIO%EfY2E|C|>rE*Lzlb6aXWk;s+dGh)4Em0y-$kzbeJkoU_U$REmo$bZUz$$!fS6{KK= zQ;5PVf}$w45>T2d&6IXZd!>WYUFo3=S2C0l%1C9DGFr)0#wcTzamsk*6lIz+N6A$R zl=(`bvPdaaE>td3E>$j5E>~77S14lR24$mimvXmqkFrI%S9wTz zSlO%WQ(jeGQ(jlzQ1&ZtDsL%oEAJ>DD4#3eDBmi-D!(betDH*ImTD`twc18)tF}|y zs~yw?wWHce?WU%vz0`hce|4xjOifpZt7Fx1YQ7p#=cxtie6>(LO9_1RPR#nR_{@_sQ0Q{)$QsIb*K82`n3A8`ii<+eM8-^ zey{$Z{;2+>{;d9@{;K|_{;vL^{;45N(hSYinrKb6W?FNtz1Be+s14Fi(gtfow3D@= z+Au9$8?I$&qqT|JByEZ|Rm;^*)xz3bEl*pZ6=`Q{=V<3@=V|9_7ibr17ikx3muQ!2 zS7_I1w`gm%P1eqNqbp)Mcb`aYkRc4+CJ?K?LF-i?NjX=?OW|T z?KkarJ*bEDMtWntiQZIirZ?AH=q>eDdON*~-c?W1ll6Xje|>;HOi$Nm=ri?M`fPoU zo~xg#hxNI7o}RDI*Q0v5zF0p~U#UC#`T7NVgKpWp`X>E0y-L4bzf0ey z->*NSKdL{aKdnEbzoPHfU(;XL-_XC)zt?}zf7E}{f7XA|f7O4}f7k!e|J47||JDy0 z$iN0?5W_NTBVYuLkkQC!Y&0=i8J&$TMpvVo(cS26^f3k)gN^aV1Y@Ex$vDNxHgb$< z#w=s5G0!M878}cr(~XseW1MZAV_aZdXk2PsW~?!;G_EzSGj1|&HY$yE#zte4@v!lT z@u;!G*lFxC9y1;{o-m#?-Zb7a-ZtJb-ZkDc-ZwrlJ~Tcuel~tFel>nGemDLw{xtqF z6;m}eQ#TDWUTUJ6Mq8QI z7;CIG&Khq`u%=nltr^x#Yo4{(I?GyRU1Y7cuCT7QuD5QmZn4%{>#bX@+pNvjJ=T5J zHtRv_QEP{_(|X-{!`g4XX}x8=ZM|c?YrSW^Z+&2WVtr-(VEt(QY5ipjwrESXZ0mMo zyOrJ1?rL|l6YV5B)lRef*@Ntp?Wy)Od%8Wto@vjrXWMh^T>DfzY)9-OyVQ=^r`u=P zXWQr4=i2Alm)qCax7h3K_4X$FHoMBc)81llvmdmp?LGEhd!PNP{hIx{{f52Ye$#%- ze$W2Y{>uK^{@MP;J{Uj&9N+?4AQ)&7XcK4~NC_9j$KTsTq29^Yt2Alv5oE2CVxHzyTaAn}yz;%J^1M31+ zfh~b;f%^jw1s)FU3_KBdCh%P46Y3l47wR7x5E>X76gnw1 zI5Z@5a%gBMBQ!R2N@#LuMrdXzFO(mOgbG8ag%*WMLyJRagjR&k3SAt!By?%$ve4zB z)u9_gH->HsRfIN&?hM@(x;u1F=#kK)p&g-}p-`YCj<5z6UUTwYYP2N}pj7P3(YHJLggD``PwS!@RUjn5XQbj&LX$6}Qz zfPxO^kV@1DHFm(VYU51GwHsw-jF=iNT@Wh?=S4E2dF2Zu#bvp6$Nnk9Qw9u6?UmR! zV?=sl@ATnmiRpdP(i3}S^v@VDpm)EF^!_9KoLivIDD`&K6176DQ5)12wL|Su2b6$1 zqE3$Bh>qmQj^e0}=ID;$n2vQj>VmqWZm2uzfqJ4ul!TH|3hL$9&MB1aqvUl;KBVLe z$_tbior@?hQ(kdWa_zw6^5Wsq;Ke3U~ z(wxcTVzY+jmBIWeD{p>eVFWJL`wB8LBC)c<;&2(vvfyxfX(YU$Bw7gK+%sSXm7i;; zj0?xghDR5c6h+|sBsM3Dl|h!CwDfQcrd~{ZVcD|Dk&<%{Ik2yEtE zw|B9AcI;aH);JjrM@`nDp=cONcLGk(39UmJXapMRG;(@5V_BoOfkv-Yk=|v+U`m;5 z_o?dyRvkHT(MOgxeVLcgP1m`ubVr`gGVqH!4$VNRo6&eQ0Zl}c&?#s#%0k&F2Teg! z(KIyOY3wv{nmWy#=1vQzrPIo3?X+>)I_;eHo6$@(3(ZDzP%b(Zh0$D;hw@Pb%|iuF z2dAUc$?5ELak@I)obFB!r>B$XBss|pphm;W%jQEX6y~{&KfI_AzRVgIEhsF`T2eT# zEGKh%c41z2I4?UInVr2PIx?IGPz{fkMrKWjEEyGE7|F>TTUa*TO~DS&j2~v7bM0nz zi5~|D&KOow63<{xJca+YCKp$7u5H&Gh@UaT&CLC^8ZCjYz7#EE9lfk@VI*PLlhtGI zo2_e3LNz)aoq<-MGiP``z8DHS&HEUMO_`9D0a#bU?<=QG$eQSS5( z@}0vk@QTT$LhH4eM9Z=nj?gUitM)#mC=w7rH-G{b0sZJW8+S};^sP=XGIsKgh&Om37 zbJAwC9X)^^L=T~d(IeI`$zo#9S~Gr}3^jB-Xhna-Go zp;`~1|7$EQRE_qaz0(29SXpUdae*@=*B;ofck0ODY5hhfj!fw{EU|ZL@8O99dS#>} z_U}KU_wdva8NG*(?3Y_uGCx`zi4`s^FA76n%MF(7_qIDmsVgc~`Noh&EY$ytw^;HJ14ZthHRik;=oHSBWwP0NesN0Qw4v`M8==5^01 zFJU%b(vgPOk>}K;1TzSXgrmKJ1x|2gI4OH@XQ<#V zxGV04yE6-8E*QBp;csaKR5MsH4sxbD({km#b<=%!eQPsL%h@;{vh=3vH@?4uKVgy!LV=m~88wyYB8 z9b$AIEAzkM|Q8pZdWSFwYw}$T*~@HVm_M} zCN6Y!L}CF`60C#uNt>6}D=#gtCYxpWOs2+`x@l4 zU6@4tkdv)Z|zJg_dtqt-eL{ENQ~uV&YJxpR62zQS2?xc%yT^bFusH5@(Hb z5q!E5UZ8(k98#|yzezQ{E7xvS`^WjwCF2W=3m1j~f%bL&%ryJ(C@lVl3qZrSt@E7B z;>FBa0Lr#5DMjIB(eknpOTlTuY7@>$s4XS0G+I=Y#TJc|qVwi~JEAU0vBS{zUA46YfFB2vV;)@(Gqv@IbAhwK`@R#8T90=@Bf!hK z5GtO%7TBhZWFNuj@C&F(1%BSSv;x2AT*mwy;2A0^3w!M`?#RmUQ|-okQIkqsjrTa0 zJF6@4KIlSMK=+w6$L~DjBEw4hEngc6YyvFb9?}QfxpCG;ji&G_*?uP{vQ8; zf5boGpYbpFSNt3P9shy<#DC$x@j(u8nBzFY@tnYkoW#kT!l}-+&h^fX&dttRr_x#P zY;ZO?Rn8sGozC6P7H6xo&Drie=sfH^>g;qLbDnUXa-MOXb6#*>a$a$&oxRSh&g;&8 z=Pf7>r*j5pau#QE0WQdexJF!Kt_jzaYsNL_T5v77R$ObY4cC@y$F=7=a0y&Tt`pap z>%w*Ax^dmP9$Zf@kxO#kaek)QptvK&gDB3XxRBzN6kkp8?G!&o@qUWGqnu2+R+LMn z+(^pJpj?!4=Th!Q%H2b`rzp3da^F!RP|}i;Bua);GL4cbC95d8hLSrd*?EMn;nG}P zb6u_-{f8zBc!Ux`4<(jGBgtMb0RzVO|G2)FLtm#9MwT!yBmSM9*064?wd+>zp(6UXFAx;^rl>Uczv1rm*yL5Ic0@KvE+=*N#%24JIegJt|r|T zd`qsqt}emj3g?!B?<6@RvN%!{Es2ySyCX7uF9m}!ADm9%L*`#%!MsQ~wxoCgm>Y%V zbLYX-e@Se9*}O%OMT-{3t9=p-2B7j{$>6ljTL20y2A1W>qUe&EW{H2D5MEqZ;Ck`0 z$|5DP+BGuDEqFz)ebfJ61$VVAD|784k8_K>F4w;0|FgsdgCuOeGBF=K zyPjhms$GIp-4fiMYoA$L;zqTs5C+=Xj%A1CQt0 zdB-6~Xl&2?gAe~n%T>4;KbdRKI1U-tbR+*m?F-%D=J)jR(W*5%$49K@K;4|(?q>dM zu08WOTr5E635=*R!-;{hL#g z5A*FhhUo`g$uH;Hk@_V612ycC>+6d8#>gFR*1L1<{`F;j^hL1^5Ygh=P4$E;Z4Wra z|B19?3{KCw!uI9bBkB`YN38%!hvpverFJ=Aaz(=;F-{T&Zv5 z+AzcUM}G3d4Fhj<@%w%q-)iUkx|{Et|H00w`)bl*#|rpndi1C*_H9?}+s8+p9=Z9! zAF>bAFrGt&dyo49e0ALW+y~r;+(+EU+$Y?p+-Kb9+yUoZ=RN0r=L6?M=OgE1=M(2s z=d&vAOV?Akk^7eWj{6>OmKaMBXBowEEtmpwIALh7IEpR&e2YlbL$TPoiekN< z^nQwR;xHH&lO<#+Sw@zV)5#fR1v!&|JJqDvqS&T5Kyi@b5XFrsZcK3#iknsu8mICc zaxOU!sJwtt+03W1CB^M1EC2(Q9ZpdBFHm_6qw-n`+Y7vf3~~db@hX5GhvGI&Ki-MYqPT5c3X*>zVQ8~BmDtaB z8+pK^ayz3kfl+xUqq=P^s{Ir@$a9R!on#kzj66=BAWxE~$kXH*@+`%jDDF&g7mB-5 z+>PSy6!)OGC&h^rCsmQ><5a#(ULm`I$~}zAWS`1Ziu+OApHVsB1eN~+mG3huKcG0p zr}AS)rHA zTNjmW<|mx|ZJf%ac)mR1iAyEVF)9Z#Dt~2E_B|GryuvpEDtVRHc%3(Rlec)A5AZ=A zG~-DW52kns#V1odl;U9&r&Bzf;tYyMRPl{HD*5Jo3%(`Z$hT%xj`XPS)4oaw%g0WK%PJu$N+v2u*nakcw7Y! zO+3C~Z1O{S*eMU=IG@hO@d>~dKZ3C}u@+kaIXz*h9A`7t&vzU@(PMK0V>7Fs^nQvQ z{#3^16n-i{ji1iX;Air)_}Tm%K9}MgilPp25Hl9?2PRWh66IaPc(&Su2h zioh2#HgkP8=X#qFC@wfb=D$GZ5=Q1yicj^)Je`qw21;fxio;A_!W(ee#&79W{5g!t zvnkH2;LoKvzky6%$Y0_yc`;)$!kD^@F*&a`lfw0WW>@mpcpzTQK!nXy$4um>xQXAy zK)jj1gd-zv9822$4PiI`c&R{&FHjKE+&+Kj9+X=(NP8f>MtS6D5;uHQm2IHsv zXZ+{<0sagAOa3eVYyKM^>VRVSoUJ#x)ef ztnNCBuc!D1if^R&CW>#S_!f%SRtYD0SPDZu9VuimEGv90*ZVs1wi7z?`0GevGNUq! z;!2;&DNIMEk->bL07lgq@WQ$8>wwDkJ{@y}QyG(BhTU2rgel(8Kqe!?d{;vX1x!P3 zWK^BTsM=JEs(^T>pIKBW^-x^IP^_vak)L9zu!^C$Ojs_QE}S8(5Y7}<3XVVp=m2+6 zyqV%VDZY#1yD7eh;w=>4OYv5U@2e8dj-z-!Iajz4Zxk+OC~osne9-m(>|k@6ohM-Y z7ht@e!3YZCejmo0nTotcSj%1%Z>RVH?;T*AWHDG;rIw6>t2TAqqT7i{cR8PvwJ{z*aPw*2IQ`KlKCkf6JBIMJ}x{VJSjXSJS{vU zJS#jWJTJUJ@#7RfK{1#kPf`3d#m`U-{-Eb5exBkNs)U!~KvoNTguMXds|?5&eIR#J z{3^w-F(6+*0pz~`J}=utOdot`kXV|cA|vw+ zM&_Rk=zX=)`zZ{u8IUQOq9xj5Kn#i@v60wVY$7(L_)Uu6qWEo!-=X+jir=I7eTqMz z_(O_6suG)fWQwhYJz`tDQEbo1{MaY+bC=Ao8JXXlAoKW>DT24BLQJ9flQ@}T8jvaW z7W=Rl#h+6AnfDH4uC>Sb?R}Cs1jrP@t#_b8JelGz8b+o#Tpa1DN^t~Jm0to`;%G+J zSGC9rG#Y4MF#o#H>L#Jo6=1>$@W{5|3V2IQYUkOwKpQ%(RNIq?LL{{oQ9 z7?8^;{>uk)1q1R-l+0cf|INHU@CG=x^4t0x@jM12+`xb;#PcbK8wlgY;$@ITrb`#ZV)$$ zo5b71D)Dy8DU?$wr%_I)oIyF0au(%m$^|GFtP(fJsl3OV+=%x9m0T!JCD%AUx#3!z zVDevJ68t?C;uDl>%YvL-J+H!TWB?HEkf0 z`^48hBwu4lHe*QbXGk`$jU@Tir|Mnt1CPV^8HX+FN#v*aO#Fdy__=sM{6hRv{7U>< z{6_p%{7(Fya;+)XhH`Bw*N$@SDc6B=36$$dxlWYpTqVK=ANEiDmAnEKuu=SzaoEM@ zu)Dj4n8~zb$_WyWKZ%kGBubzoy2eSAOdwIR$a(BVxo)tnzJnNm+i zX0Q4r_=QcAh5(vUZ>f*eSL!GAmj*}!r9sk3(qPJ^QLZ=T`cSSf<@!;sKjj8cZXo3b zQSPKF3AX;Qf6{QzEh&v+Xb$$#1S7?BOL7?}$ov<`%wc3sq1+Ik%;`WTJYdZI2jjK( z&%bq9I#rs>m<&^HXoZwVxnT`tvOqe`W3rGjnGU*6Dq;$9cr7FYd`)JHq%se~7{hQx zJ&Ak@mrLg`3Qw2LkXA@%N-HHtqS9H?D(P&>jiTIW%4Je+4CTgBZXD&tQ*Hv~CQ@!v zm2_^L!VA5DTDp``2%5LZ)6bOM7ha6glhppybJbV!HbR3?Y*}e zGB!%guVVHoi-oL{317oOnoU*PaV#^Fblo9A=*DI2CgL&@w#xdNEPus0Z_gML$g zBYnq6{FZWs6%v?Xr!|nopQYbCh4?EYaRGzs4@P29Z4#9w@yui-d;5E2w!eoft|yV7 zLXp}29$A$&S(gpjlr7no19DIfQLcn?izru0xftcjC|6Fo#gtn@xuuj_Rwc*x_sGrV z7BcMbk=gzpZn;n53d)^Dxm8Rzo_zwvs=DR+7tMVamIkzs!idr|HTHgj>` z0Y=Gh?SAqAfKdhm>&yxn46Kz6gHawL4+9wGlfm)GIpBDd)4}n`(YhRu@`Qw;J>!l? z-p_Z8Jl@ri@;JujIl!fy&S0jsVD?jF$#WQ&*>a9NMV=~8lc&ow;rpi;II{MJ58KAUm5igH(1$mdY*ng()tfqXIJ@PoT2uwd?|x=)%I|n6zRgg)yPiaTijU-P7>XaupU9uepUI!g2jnm0 zFXgY~uPL{Ma`#ehE9LH^+&0SHPr2=sdw_BeQtqKD`P(>(KYEs<{3}E8VIRdEHJ0NO zCs;iGEGlptSA`-`?vXf)3V3|hE1GbCy(ssn%OZOR7X7EXDM6(Xu&9J6x3fZNOu1bR zV^L|Yv;wS@7ECQZ25M1h&D7%Kb*V++q&Qhhg3{S#QR&23d=gkxS~GwjuLZE5qNmai zSX2^~Bqdo%QF7(?e+|!hMhH}qR?m5aqUwVOZ(3f7K9C%J&sZ#oTEGj2? zEGk18i@SXmVRbX^(mAne{V(h^QzkGL!K+d2vk04f*7Hxo23&Z-rbo6E18+56Z)LhN zlW{nMa(gQjn4H3TaYG&lrktvHw{|J))-LWMNEN*_*E%oO1ZLFS)wdemMP1X)0Hz6usGhN+*_1;n{w|^?p?~gN4fVY_W|WT zq})eU%E~y0tCX{qbMQvxJjS8FNX>mlxvwb47OA-ti`4%Hh*vQXucn;8NUdDQKy=q% z6xab6Uw`2~1)bQ^Z|n+X9b*yftj{YHu(J*{ki|{P?F_3uN)==A3x?HZ#^RT?S(KJ1 z3{8qpVLJNxZdLC0u-wM5WJ}e@O7Ew5M0ti``KYo(*{SSO9#bAyo=~1to>D+Jf+OGu z%Kb>WpD6b;<$j^uuax_Za=%mVk1FNaIF>KUE%+w@OSq|va{f{^_cxnb=|5_o#%S<25qCE;pQ$zA7z^@sAehvHv=BH`;v6i=b@ss$*jf-0(#DyxdB zs+y{+hH6qGQX)~feUd1YsFY}w=#&_gz)x0{YI`WEjnu{jFjSiXig2sB=k_KcN?^+| zySI=uKY`-$Hyc%0d8<&nP!fm_)oOP@QL@-SHHobVdjG?H{|jv2l2cRF-TJBJE!qD!Xiu4)FP)E5`sv{YdE$T__ zrx>qJV^mI1C#sXwQ`E_7mYS{Rs8iIbl(eFxH6?8*X-i2vO4?J>fszDDI#SZ9N}V33 za<*qbs$oWDXP?ThzWqpgo`CXSfHKOUETN=}4`mFXJm!+1x?DYj;dnYF-73@-lyq+( zj#LGw5RBOBDu!bZrsj@eJ^DahsJgd%y`x^t5KL@9iZ$xZ48beatJJI2Yt(Di>(uMj z8`K-snGKgW#|e z2>uHQ-p3H!M#(@Q!3O|AVXyiSd%>1xN(OoFpcf4vk6r5H48+GM8C;=0LCKH?g7}R3 zya(cQ48)U}W_yw8#i6zJV&m<8X4UFGPaW=MEV2ddV^qtJF{9EPkPWNp6He`WwdL1fRu8 zl;p7IA^?_CPQdst!1xz~@o!2d#$nVjz*yJAQsOPG$(jlvYG81kQlWvtHMwCRYL*5M zk+0Nj@avE)@at$H@avH5y8JpVIwTD3e8d2)wa{9-L~5-VkyC+4EyOU+u7$B*&IBz9 zh}1f2owUwc7p<$-P3x}p(0Xc#luW1as24Jm!lPcuY)a-(l1s^{l!PgnTcxq*yTd;% zP3x`ofxqxLA4>9kBIi-EfRZ9c*+u{aePXp4NG$V?zo8-tSBi^B7DE^^2=wKeq_ zj@tFwjf}_}C|OaVfkAd=1BtBA)_X**V??fGKy6?|I<<(jOMIkm*Y5Nn+{_?6tDZD| zimloX2H}0$Htl|GyY_(gp!SgVu=a@dC?#i8at_$GIWiZ|yVf3lGBs48t`HsjnD@SJuKX5IV!B>U-@c zkHa4shga8=$WQTyE;0`P)c(@`)(+}O$2zAIo!12l&&nd#QF1*c(1&iM1p3g;l-xqe zT1qOabjjmT*F0sYTa3d>pTk>glws8g4v#;FdTZcNZ$k;(IqmMU*4qPzdIyxuUX-k7 zV>GZy#xO#qeNhmm+&Z4#vy{LBXG zgIyB!lNgD&*OSOkFSOe=`Z#?&C7UU^lajkAxto%EDA_{E zy_9UFQ^xcFVZj8FVQd6FVipASL;{kYxFBA*+mIV{vW3VCjU=T@)RXcQ}PUjC+v~us`RVl z5MCdL@MZ?#^FD+x`4H|o0pY&@;T;S@P!ccr5Z(L3 z?l<*z{Xs_J1C+d6p+7{)D-9%ZhyIvH;x0zwZU)s8jKu2NB=T$g%%0U@Ul4?((w}D} z?yV=0pQ2ia9YGa3%++75(DzXStKPFAAms!WcEAn2dnh)xpJc!OF=|q!zp1~azpcNc zzpKBezpsCwf2f1m@dhRPDS4BUw0j&LxKZCB;fKtY{FstYDEX9<&nWqv5?D2zQ5YLhR9L{`ok1Y)GB-*igdHl(i%f#> zl=Gsc3v=xzhab+2!4uE(N+EoEtskZqLQG4DG6&(dy%bp)W2b~m3&X__0PP6bepp9{ zMChG4tTb#;e~}o5J|o9;pG_*G0=)wTsH-x8Xq0@xQ-)3 z@)wuoyBC;v)Y%ORxSHceQikA$MkZY=4Bap&JOPq?N6Gh;{J?_WH33N2li(La%=*a@7A7^ju#7cQ zvsyn)fq0?t#Q3^?npnb~B@ZoA7^ZvmbX<@V!E*oNg)_-C;gtf|wl!Qy&7}s{U z`p@?AaHIL0(k|ZDj2=dE9c3o37`=>CcDp0_osvJClswd~6NlPW8-1Y``WgLMAXkVt z5S|#|gt;XU<*O_uWiRFkFNl<s_JjWGyniW0-Lb-?BTFMN6i2jJhG>AqXTscdZ+Q zdu(J`B;SP}PTDOi*`*K}$H7&a9%|I8b*IiflXE&2mlqZ7F-*%21R=_N{3^T{^bl5k zSQ%)Mx#bZ0z~LOlA=9(U^YS8*{7C+u#!bwo&0DgfE{H6P&49o0{41I{d_@aKaAXK! zKN5nj?QPSxo!P!aLPz+XRk%C?`OF(x6fR&P?wO{l@gfFf+YucJ@Jxbd|NCKcb26Eb zbO_2<-KA@{?lZi?6+^;l-p2?N#LlVg)&pcubgKc*O-wo>FnncV4>*|83;O+G7nbi` za%F0dI*%h61yBpr5p_eUs2|Ei{sQgki41!5O(L0i!_ z2p|6-gpPk4y#O}GTj)ddCHe+^hkn314&YX}6YhzVaeq7*g1e5#lW_q)>1r*!zpp z;(z0RAOs)z(~WIv3^WGKo{$v}uFfL0t%E}+p_Nbp?3>Ts5Mu;N-2i=Ms4>iFXACzo z+#d5cB?qC?P##epZ{S;y^Ni6(COHpW2<%Cz?J3Vup0E#avlH~B4)r6Sy{rT@#(y{o ziUlWisb3O1DXVN5Q$YXW%xs8z>z-MSAhfhG*$pGT=ibU|(pxzR(1Oz;kXNKMKfJ76 zxU5}juYoBkUd2r@rp~FUI5#%zI%5ip4(q8NxZ$t@1szf|BR6InxeyT zAf}}9jF#?E&`jQe0;A>HnlGo}QB}qQqsUlj6dO^a#8_mM8Zo1c@+#$Z%A1t8DIcVK zBg!|Sd^5_opnNOH^-vsV!wnThdF{BxiZa|-QIt3S-^EBX+z3*XxBh3bXAC!b6y*cQ zH&Te&8R8^nq7E&rbd%QM`tPLyx`KZ^t8#auCNGq#}AO-7Y*yK#rH*|^iV%edRPhw^PH z-;VO2&^u5*f$|+G--+^_H=!QJR(Ng08;#A(lxOBU-^G3J3Kl$^%`ADQ`Wu77o(chG zqDwMkBf&(-0;4=qJg4U9NEX!@g1Ey0i0wSSumG&2NWK@$aAaw8;e@QopoycUVKDvO z=$UMI%C(0u0nyS0v666JBs)C!P<*4@0sRIH=#!DwKe6BNw0?=b)6+8&2lVehATe$D zumNcqebf5(?>Edd?!0nA>hy5w)NpKy7f^X>VcGmFh=)_eT-x}W; z-y1&|KT>`mDV2UPB`I9L>l=8#i1FMNfBMXbb z-f??a`Z9LuVDrPZj|<1jYRb;IZR! zrp?SRC|Ty&<=8jZP49cn`*PRhG~1f(KwphmT2kbx!HMN%EF?MWSl*nBU2eS2*O~3j z4rpbA&xb%|x!Gl-hEM6$H)Bfnp*#T3)V_zl9+o9D)?@wR+2u~j%1!Ha=sdRyvmiQi zaY1H2RD0pPLg@9mc75FYE#ArOfl_ZZJDXk1u4XqA)Z1vvXHtF)<;PNf+^uF$Gto>k zzA-_~ji>ws%1?BA^`v@wvfE9QGGj3ajSJE3>+U?>Np26ywL8^!4ovaNUFXj+`>H3a z-tO$3!cK+IQIZZ*8y)Jts>2nX-wY?2!$5hMgUuo4$tGxs$&}Bcd^Y8C z)|=_(a8Mx7iKb9~x~oEF{LhrfICBD12+;CVD@Hf`(jXny2?EN=u`qAS5vf z3ZD!5!#fYu0VrMOS#s5Zd&TRMQ+k0G`wwU3+RYD%$!0ZoNJ8!3+*);|AH%sa8|9&5 zRF2L<*P}bp%V;;aQTCzN&>QF-^f@{J?v(G)pIE>KwsCXZ2DioSacA5I55Pn4P@Il4 z@I1T#UyN7dE%+r*E7!PI;!);&U5yXaGdlTQE61G55Qfe(v%;K4`C0WM%*M1?Fs9A< z&tux`i2C;(QN_Rp97ksSf zqPceKE=$0~D~Vh3UD_4K+LafF7l#Xr7~(dn20tOV5o(XMk)q1(}BaIQUx_M*4Z zCqTiM=qL0m##lY7eOve~>;1+49rM>n=dMl zlrEbD&fbNv_)yB0A<9alMMaTP76uxQObVC5d$G^N0<(mv+ahzJS!_lrKbP_#IG^&7 z_2we8)Qp*Bln40*l%G%eLY767xJ?6tY*rqqo8j}L(HJwXTQSRJL^!rAJDOPxwhGuT zr?AothvTuCZo#~$t>E8szh!~#4nuUFYaQ9ho2{jX%kt*45iC2hw9HMPJrBO^HP19x znhrooaaVJddG>TyM0TWf;SARA8ZMw8y;I8Il9#FV6EUpG(cljw+K^9!OhhUe3%MHodGVaLtcL z9k00%PwE=;O3*~L5*|?*mF87U{C_xWlHZEgnm4glyw1GdyurMY@{1^6O8FS&%b3M| zi@7##ahFqm@&Cf&Zh$hn&4halE6gg&FR3u^p#0MRsEqCgWwhl#E2Cu-1A&4XWrQ%| z5J5Z=K(Y44C;i_mrMv7&NCZwos2OU7+PSWD*z$||qCx0nG#rfrm--}>gQla|D2yVg z5EVg>kAZu48CroHbT&E<`v0Zq3Un2^4&8(*(5>h;&D|lz1Dxk3K@5xo-FG(a-32^fzb<0n6ZkH*pX*hEbz6j2Q{I3+|4SaIb14f$C9^ zd6eQ@k5r@~9T|sKQD?#=F|jNRuV`dyJTC84@Kvz@=b#>u4a)^VWHwAi-hIi|5m7Jm zMyTmJ1XCxZ!=!E!tUQGaBJDCFB@s~K#d&PnY2c2 zE8&vbWI=&#t{SyR9Z*8UdLC7GgM8N!z*Nl8{yp@Wo)$?bw@o=Pn6iu zy4WI~V`DFaWG{mh$e`EZ8O)5wB4)K+4a+3GQJ;TM{G4%~^nNIj6~8|kfCe5eJ;x2% zJo|_M&eiB77>$PfgIw}3$^*o8?waJY2f1RHFW9P(%mw1b~(-VFQ%4WhRgYc}wg&$dZxf)GDQ(u7jUA$+Mum!Zqi>V^y7I;OuTe2v#9*eG!2 zbhj6Ky60+i4J`To1KqaKlXpG3(eDB`%!+pbPhslS=w?_$Ui%LUIc=gRv=XgnLK#i# z=43C4jtn!`t|!*6MjK#ZdQ-#2ZV|8c#8#n1hSUNCMY{v+?>ieVV{674o{YPZS%F|I z*n;kbrSS$g?$&C#sCX<2o=8^Oo z)i61K7rpmSgzol)e!#R28+Hbu4`;5J^^`A))ecx1&qe1NX#<|3Kz+uRr2sZ-|0Uj#G}Z(yDPPPQ$$$E_91{DZB1_E*v|l zLnZEq2UNnwr~ZfBKzJY?RNE0$fd_k+Hw3lafKT=%5XX4Xv44;8l;p^dnDC_ZNyc55SU&rs` zPw)Z!CH{$%xu#q@t{a!i4dF7mv0OG+z%Axha_~e@ZVh(}cRRP0dzyQddzbr+`;PmI z5E39QNFq6jj35)pRFY5TktjKftR~l!b>t4Ro$P{$>o1UZ$=Bo;2$HSvjrk6IM?MjP z8c&4S!eRb2ei?r{e>Q&&zk$Dt-_AeI@8{ox_?mwTn$SpSEp!l)Ae`YCVY)C^SRj-^ zG`S0e8-?42t->P^)aymzJ>eVSR}qV<*k0@|4i?9WIS{udPh2jp60e4cA$N-Ri#x^F z#P`G>Bu>(#M(~jSE>em#T$(J+l=7v8(sFoY`8m?H(njfS=>d3h^loX7^p^CE^tUX* z6MLJ=?c_8$T^)@K_+8vfFlGZvYFM3VublCJX-d zyajB}ZQO$&U#@5hKe-EJ*`>@o3zo3!n1?mBrWxs@Y8G;tvlD*v)`?wlu(4obanZ8L z<;BI|u1qhA<}HY^%^&f-7L#FN9h}81j@w*qCH9EXF;`vgGikA6OhEK|Ir53P4&WHWSkjAYK z&td5PcI2i3@Oit7Jnl|E^G);Z3N+DaO8N6VkL0`Nd$7Yaz8ft0!FtlW-ONn1? zpPOI6{zLNs7r;W8iwi74O`BZvOB@QeHK=BNGcMc`tN=>A-4fw}L$ak$$?gg*Oiyl>p51uL%Azxu$gtn;Xk&Ee$hY{l40MlfC(<0A9QvZIp= z3+BV*9roQ?ePG|M)tB-c58V=A4X}oS`m_dGgRGOR!PXE9HpgtD{B4v6_xSCU2lx2q z4M0Y^H5}eYfcj)K+(`vEX+0GlXZRk`NCB^ky{%<&)e!QIjfVPzz6J+D70&jKv1ad; z)?+5q5o2Mk#oc?;8kjFH%4g(Hf{k;NBe1j*D+7Yu8y|e;Ct6u>XMi=yI>myO`nxE9 zH|6hHXJyMRVKX)lPuX2Xy*=1LRx`t5@$BPE&bCi3{OGm?Y;DR|2Fp2xdHxZv)@I>R zo2=Q^94ps4)e2j4tvoBA^7m5yT`C|dw5P%dDvYJV0xF#EEO^~2u;yEZ)@e}R3#=k* zp;c@}trBaIRcghIg;qJNljTSA%Gs58tj853+rDC$63hPX3rRAVxn0{r%FVDY+XwIRPd`}}Z zu2ElXCoHU-N4(>Za$&fz_|WN4S8mfxoaf6t^c&@OQGOfcAE*3Nl)ulpDA!J|+3Imb z&3aM~?Fp&b%Hp-}*?82g);ZR>)_Kz8@i(MZx#*yaYC+oEvG6D!gE z*7lj+1`HRYO6vj8j)xua&U(mtIM?n9jd27Thg#;yPE%<;!Y-!4=ficEl+P_H%=6km zF%~T^&0~9eYlvi<9zBicS6tGhNI^JO9`jbf*bQ>NV%uf0urtUgI-|%P%4>8HoRd)N9B*5qJGvxA=go^nVCb(c>F~4Iw!vdv67y|EOCh7$ zSIkfw3AaswxeLp`waUSEdW-|fp3P{nxHHyAl;0P>JJw=xXXEv!Xb-%$Rw z3hO({zs}a8TVzCv%EDfYc!POOb@+_@Wc}*i9BcgoH^=hsXga;($-{ zapo~7G%+7%KF`nf`8LkL#9fI-6jDNqQy z9&@1315oJUS2BlfUSPxNdA5Vfzi%2+^NrI5Ab%l8*!ER20`{C0S{a4vU*Y z{v?7;@6VT+l?&sce@VjsM7%Kz#49{cyk9OL3;eR-AJ!Mp`Ssa*PzfZ=V9i8Qe){^nB~Hhd6(hLA_W)&6nc9a761yp`*)-O3xS105Ql|A#&bgNA>%pVAY?qZ^oPGN zo?AQ;6UJH~g;)V8e1u2=I0((LhxYliE7(7v1j0iIl%E^<`iHyBPi_qk-n#93$frP% zXT#DU$Y%%#K#&LI1&{~UfxuD$D50WJ9`1yP;m{VREt-k8rCX6_H9@VtQJ-WtA{nf8evVaW>^ad2!p_S5D)5D*0cF%S?x4{Q5^?9PSNy) zSDS}3uxlR9E-)8C`L3<3{BMhzKPcgp7m~|h#9uQCm0Syq?3j&%TpalZj z=iw#`qysmHMryE2&%!MQq=Q)`9W1zXH5AjJS$4pGrpk*|6;wF=uc{2VGekOY7ZBL@ zg>>LhhVf56ws3E_4@5cegCL-D8tw}My8n)H-~sSph(O?h0?NTbl(YPRAe~tC_vr*Y z5)OHYL+(59XaVKuLzDxVm_q5qs=r7l{tVy+X^`Mv|DJggMEsX-g(pMIlOXH^PXhrc z-iKp{k(Met(i3ls|b3v!=>^VCTO0rUB906j#2Lf_^-@KSi$ z@6>4r0v6v<=LG?EUW8wQUxr_SUj>2vAYcgsBoMF$0h`~c^M;VBfD?(}QfN|HrQ;ty z=^|@ZERdhoJozo^WWVwyFd!&tpw1Ex+WqS;^MwvzwNU6RKHD*JgZIO^@B#QBdAUO#)!>JjY|+ph%E>x>0y9C00;zq1usHu0h;~`h0CA3BNm#|2$cma1}dr9$$bRGzj~94T8WTOd!}HbP&1-96}GFk1#+OBJcutT^*uv-zcL|O0`S^x>UZv?-f8*0Ju0&x)G3&9QnjaS8;M)-k1{J(@< zAR@aicQ}8y#NQXhAE#7!|(> zuV0=NIr0A-Ru|)E$^ww#-vGH9A!sHbZX;?CwTL=IJ)!~8h-gAIBcNsibQN+z;5Z26 zfj~Y8Kwr8L1Wtee)HW$TkNDC|Ky)q`UL)q42`3kUe0tIF8Yue@$NwL2Ea)X5p!@mM zB8~;Ugnux+Mm#_WItd7Ley;*R;4%nYm}i29zbFHc(ApadWdKqV1O!V7ek}to{&N}dg)Wiu z$n6lGkSL@AawBpRQW3cssf65u+=_(S6IVdsDhONyf$Jb}0|ah@z>gqs3j}@wfr|4; z$Q?-VgH&FAM@SX=7cB^km5X?SMsoK;3ArFJ*8K;l|2?3PdJv$H`XEsC1yD$6xeaJh zw&lr!zk(Inpb};N_t(&fG)D@Y7LXPoaQifp2m+Al@xK|3Ls}#41c8o=w1r0FfLaJ3 zD>n)Po$_~qZt8i^FB`@VqunyrRX(lS|YfiyxK6C(a*V1CCE}_8L}J%20>s51b85Dw-osU@*MC8c>x55L10XfF#z{jD)s`!mf(Xs%!{@J z|D!An|1OB*1Q+(}$^5D`TRhx#!$g-d_?>K7lV`HAk3ChnUT=XZzfZw(JX z1Mc1dki-kxU;LX*=HFc)XObPd^rY(};qTaj(Zc4P+=@2 z!UO{Iw-Edl`R=dwe-DBABM3ll&d@FOoMrhtyr6ejkPOeyci0F`wN_oC4Na-Hg68K^ zmpDV3cN0kU?zGNpo&UNJNckSIjtQyX)xz;x9)>5QdkVKVwQ#smr;WS5Ath^h!$L|tSr zq}#+ma!q>?iU<{wCb~khM7oFvq&z$bX$~2X-Y`fcL?lflPXv->iPS&>A}*vfc?(+w zlYni9sl#+2?En#G1*5tOA$J{T8v4>k+C z4|@T73wsY2f(ye%;F53!_$K&HxH^02o!~BTFL)q47=8$z4bO*{!*4*H zygN_>ZvblE-Gz_9@4?656Ywec415m$0I?haAXXw)L!B96ga`tTKqADT&WaR51|f%# zM`%FZ2P=d#RH`N-G7%>cm!Tr23o(coM@%9&K*^UD5{EQJl8`pYEMx)l1acTTg`5#p z5Zx}iQ`B2DNHj$BnrM~iZPB-4%fy7l^u!2a=3=R0*<#1U`ou=W?uko@ZxmM)r->gF z_Z2@UeoMSsyhglEyji?eyj`3lu~I@!0wZB4VI)D6u$Q1nxJ!6Rgi6Fnuq5In5+sr& zj!0xl9F@qCI4+Sd!Ic!2BuGX{CQGs<(rHrIZqzF>xQir52NR3FZl2(;AlXjK%miCoqNC!xR z(rMB;(x;_Mq|2nwN}rQ{CjFa?kj!eCwKBpo2pLfsaT!S&c^M@cjEtcSUB*WyP3E-B zd70}nKgl%9w8*r|w95?249W0hhGpht9?CqHc_#Bh=9SE6*`>0}WdT`b*?qEjSz}pK zSu+n7He5DQ_NeR`*|V}&Wh-SHWt(JMWcy_YWqGnAviD@iWFN~u zm3=PzQqD&%LM}t@h+LN3QMnws<8t|Og>pr5C*@Ad-IA-2tCG7dS1VU9*C^L4*DBX8 z$C2xjd$?iMhMgPsZwT6ux8e4N(GBn9CFD`^o8&jkZ;@A#*OJG`W94<__2doY@$$y< zCi1rO_VN^YCwUinntY6WntY~ww)`>qeECB8BKec@m*uPEYvfzyx$<}AN96CxPs&fr z&&uDIe=7e0wHif2*`VxD_9zO9igHG|qTEn)ln2TSbr9u?VxR(0L8uT^7%Bo4g*t?a zL9tMAs036JDh0(xrK1j`GEv#6W2jtI9%>RbjhaP0Ks`o1L%l@3M*W6*hx(|nL}9tY z3We1Q>l8#35DH=nk_s{k8x#~26cx58Y**N&prU|Q&`{7)*r%YYps#>eFi{{VkQE#h z92J}tdKK;|j44bgOl>sWXtmLLqwPlW#-feqH(uO$dE?bhcAMNc9oXc#$y;%?qPU`@ zqO_u{Vy$AQVz*+iV&CSSo3%D$He)yIZf0*jzBzw$;pQTxbxKl7GD>nv@=7!%hEjl1 zkWz@!l+tshmr6e?{j$Yni|-c3mVhlmTW)P>+S0P6ZA-^im95yVx?A3(YFO|3*HvGEqvR^w)@*2ZhO4#>2{0ll$9CuL?%O@Kdt&$0?iu9` z$~%;IL4&BO%8|-R$|=fh<#gp<<$KCw$`i^{D#j`{Dt0RNDioDsl?y7DRIaF8QS7 zb?9wq4KxOgMeCvs(MD(!Gy&~^rlJp^J<%cPNOUxsiH<`jpp(!k=;P>8bS1hPU4yPe zH=vu)E$B9M2f7p8gPumup&y_hp`W0iqhFzaLH~w+hyH;6v`1!-_8#XwtUaZBID4L{ z3#;!`H&rL8+p62EQ`FtnebxQd1Jy&+!_*_xqtuht+3FeUnd(Q?bJVY^*QqzFx2kuj z_o&}d=c*5?#5f1&4Mh!A4I>Rx4RZ~m21&zK!(PKt z!&!r-LDz`XIHVDy!P1D+NYqHtNYlvB$kfQzIHqw;QZpp=qLNt4Yyx(sa?JYkF#W zYx-zLX)-mFG*dKlGz&COXr9z8)hyRMr+GoMO0!M#p60mbl;*7F1I@>p&op0ZzSjIr z^PQH67D7u@OI%A*OGayhmV(wMEhVk3THCdZwLG-gS{JqMX#J`!t*xbPuN|r#qYY{& zXeVhO(azH@)GpFKrF}-bRJ&aJhW0J(O6}X)b=nQuW7?0kUugfV{fqWH?T^}@F-tKp z3=$)Y*?`%BQNgHT)G^waeHdMg9>x;mgbBigVj?inm>3L*Nx&py*q97VCZ-JY1Li#D zBIYvY8s;YECrl;gHl`L+kKtoJ>_hF--{-L}ec#o6z5AYF*J4Gn5?E=hEOs+?H&zw9 z2fG)mjopXU!Q!y`SR$5$wZ+C~Pt|9eWs?h0Vq0VGFTE*o)XJ*a~bFwhh~b z?ZNh8hp>0CqgX!n3HGhddL6iqsE&k=w2qt(N@tUflFl}rojQ6thB`(%COQNi3mu}4 zm5#NJosPW@MJHS*SEownp6(J|C0&B9w{D7VneJuXYq~deZ|TmKlf`C>m@r*lw`P zK*a!Upkbh8u+Ko(K;M9DKrx^iI2*VcxEpvFco`ft@H6l?2sAisaLJ(0;AcY#L#!dq zkY#w%@U~%#VY^|cVYlIs;ke5 zei;7@{}TT*{ulgj_;>gZ_)kVljFuY#Mk|dJjSP%DjZ%#+8F7t%GZr^iHzpZ78bd-I zV|Qa;<51%W<7nd;W6(I>IMF!UILA28xX`%R_>^&tF~_*qxX*aNc-VNp3CkqT zB+(?rB+VqlB-13@5%w)|rm?@ZT zGTUsXZ$>jqG&^h7Y4*}w%zTfzwRwPfr1>H9SaZ;vZGO}|*F4|+g!xJH)8-}SW#-q- ze>AT!uQsnWuQ%tLKQe!A{>uEd`CIc3=ASHvCy)>Sm;>b zEQl6Vi$IGIi*So53#J9jBHkj&BGn?@;)q45#aWAU78fioSzNWaVR6f%!lK%u#-h&R zp2hq9^85AnAK0I^|H}TJ{ZEN&h)AM1QHm%-R3z>qsu0mc4WbqiL&OqwiRMHikwmm5 z+7l_naAE>6m6%36Ogu`=A?6Vai06nGiI<7h#Cl>Qv4zMXb`g7teZ&dkQ_E$RfaNO7 zwU+BG;g+J75|+}Ia+WAdbxTc4ZOeU@I+l8thL*;brk3WG`z8Zt)sI%SRt;87R;^a;RvfD?t6{5qR^wJvR59to6pEN+?k%md5BtB_^G)0=RUTTf9HnjGzW?Nsi9$c9HcxGy+kCQJYm2hoWUFMm&331)vaOn}x~--y##YDH+Sbn2-j-rZ zwRN#|vprzzX?xJt*Op1LT!tMY1YcgRDu$ka1)KvJu&YOeVXMX=Hb@2RWD=L5?Cb z$#LXFatfJE&L@|XtI4(G268jGjm#l;lkbqZoDLjhQ?nslz*m&y=MUA`=P4bOr;Z|yXh#P} zrsE06YR9{dla4cv_Z=TPzH)r;_>sDVx{L}?S5if(5>#ob92G^~NY$m9Q?01hR6D98 z)rsm#b)yDSL#QA%iJC%9qh?aGsX5f+)N<+#YCE-)+C%N54p4d25h|ZLL7k?~QQuQP zIW2Ko<|O2_(rJy;I;Ztca3`dbn3I~5l~btGai?mhNoT-W(b>S+)!EzG*V*4W&^gLE z-Z{xR#W~G6!}*AFmUFT5Y3EYsv(D$8FFJQP4>^xI^PMN0XPxgmKXQKJ{NDMK3$#>- z3&KUrMcPHyMczfhMa2c{LUOTnv3GHFadx4(&|N%T4!Zcc1h^!+q`0tM(p?U_WVsx3 zIqs70a>Aw9<&;Z}%RSd6t{YvATzy?LU9Y(IxIT7$?fRSRJJ%01fVQ3nr-{-eXwo!U z+6LMV+HRUEZ4YfPO^aqnbEkRHd}z=#R$3@6oEAw-p{3D|(Q;`ev>#~aX_si%X*X#< z(JE=}v_aY<+EdyK+RwCKX>VyCXrJAdxdCpg+~nL)ZX4Yc-IUz6x$SV<<)-YW=C;R8 z!_C?)$Sv2c!tI{>GIu3+ygS_;bZ5I~xM#X&yBE5bx}SAF?|#Yss{3{Ko9?&Vo7`L7 zJKVe6d)@oopSi!MFQG4|1N1d?VY&z%PDjx<(N*Z`^u2U#x-MOhZb&zx+tS_W;q)jv zlg^^Y)060_^mO_WdNw_Wex81beuaLGeuI9CUO}&--=^2m8|Y2+3Hs*)n-1U)cpo@& z;KqUe11~++dq{Xld&qgndu;Vk_1NRF*F)O_>!ItR=ds_z%EQKk>_PFMdPI68d8Bz{ zcw~CycpUdA@HpXd!Q-+=wMV^2qeqJe$D_-m*Q3v4!sDsuGEcyBmFHT|^`3A~QBMg^ zX-_#%l&89&K2IG_Jx@bVBTo}gGfxXoqNlHCn&%bIKF?pgWW02}oV}P{1zsgy zhS9H>h>D(;(JYaO?%CGJ@5v+5#AEs(%!P(3f_v|O5R(& z_j+r48+)63@AtOyw)3|4cJy|F77d8>KJ1<4ea!o~cY$}2_bKlZ?{e>R-WROOmYa6YC! z=05v%j3Vcrboc1a8Ip=f1=d#aLpE{pLpI)B}!wjh~92jbE@|w%--M3cqTG2SxX`%C)o z^>_4V`k(f1^M4$$CSY5DQ2;T36kr=b4sZ>CCWZ(22LuI#280JB1SAKr12O_K1F{3I z1l$g22xtmu4d@K$4!9H0A21m(6Yw(N*MK(x?*o?vE(-(#R|bj)ZVJ>4#02UD>IE7G z8V3>rEdnhAtpn`>eF7PQ0f9k*A%Wq6QGv|B*uc2JgutZ0lEB8mxu8`+JA+6;VL>@T zH-q|uMuPZ36G2l!kAq$Z{TB2t=wtAb;AO!=!SG*74Uq_u3XuuX3?YX^hZKc0gxn8Z8@fHzG}I#$nvNJ6 z8X6wT3QY}73(W{U5}FlyH1t$xNoaZKxzLNDmqR;4?}qY2$3v$=?}t7NeG>XC^kdkX zFp)5Lm}r<(m`vD)FjSaw*uF5UFq<%P7$wXp%r(qC%p=S@%s0$GEFmm8EHx}GEF&y4 z>}Xg{*zvG}uoGd$Vbx(HVV}ZL;fCP{!w-jF3hxSk82&2!m+&{??;@5*tcwtdKtzZ| zNJdCU$VP07*cqW5p%$SYu{Xjdf)?Qs;T7Q%5fBj+5gHL5kra^{ksDDMQ5111qAcQU z#QBJe5!Dgx5&VdWi0O#Ah=&nRBA!RQiufhsO~m_1SR^u1EK(v;DpEF5K5}EEV&s;{ zZIL@7O(H!b(;_cL_C@{{B@?9`7l^B&Al^K;Ebt0-b>U2~|R9V#Zs2`&$ zqN<~6qw1shQIDdYN4<)A9rZTqL)53}CD9_$h-jJUtwhek(4M@Pp*gV71m$~`a%&#+c19+A-J|-59+XgBYV2(-^ZDix|roQjASZU`%Gr&6uH>cd@8g!&vv& zxY(1iKg3>$y&QWrwlcOcwmG&nwmp^;+Z8(;doOl8b}Du@_C8C91!sw~Bv~>n6l)`E zGiwV=gQdyBvj{A67LjGcvST^099aih;m}yk5mq)Uhn2@FWEHbcvr1WKS?5`GtVUKd ztCiKx>ST4Z?y&kmpD?TS;0L&vGd>BJew5#r3_ zh;deN)^VaKyBK#lt|qQNt~;(jZXk{qcQ0-% zZZd8dolPaIF2Oq@=fOMH;{C~0MqQW7D_ zHz_meR?=aL^MKTUp-{3>N>%KDT|DM~5ZQg)^&r>Lc< zr)Z{NQgl-EQtVP3QXEs9Qe0BpQs^ljDPAc)DSj#bDd{N}QhHNfri!IvQe9GGQj1cn zQkzm+Q#(>SQwLJ{sS~MFsk5mMQXi#0Nqw98A@wtR85>})WGk{&*&1w3HinI3>$CA} zW40aJf$hQeVf(QI*rDujb`<*%JB^*kE@T(8PqRzeavvREb{u|O?|9tt3&*>UKg<)# zQ^?z$rcfKd=w5K<6c5LFOgkW`RbkX~@4Agkbqg4+dy1uqId7JMrBT)4DQ zws2eF&O+rvwLB=#ikq`^s}lO`wKPY<4car)z#C1;kOS#f6dnYCw>&M2QT zKSMl2D*3Ubv81hpQ_@}1Uou#7w`8Q`*HWQUc&T)$Tq&w_Q>jv^a;aLWdZ}h9rW9Lh zR~lLhmgbh`m0m6Vv9z`HPU&drTZCdWC1j!3w{MfQsOXu!{JKq>9vvw2H$OSrtbs zaw@J?a4KdhK3A@<++B&OG^{kPBve{dT2?w#QY&35-6{`MdRE3(mQ@Z{zN=bZwW4ZO z)!Hi2Dut@8RlBP+tMsb$tMFCSssmL)RiRZ8Rnb*3RjjJgs!LUutFBd5Rkc-ds=BN0 zRB@{YtA4ItQVmqEs$N?St436dR*P5fuC}apst&0Rua2r_R()t<@dXUDZ9+FK=(St#TW4+xd3b?Gv}J-sawZc>7Ha zP$N~dvqrf_v&OK-w8pl^wZ^R`yoOa1Uz1dmT9aE-Qd3@YuI6IRm741{Kh`wXwA8fM zbk_9L^wn@{25Tm2Ue~Uvm8?~)HLSI&wXb!ob*`n=de!>WGHL^BgKJZ23u`ac-l}b@ z<Kf}>>e}lj z>t5F{ua~LcT~DaDsJE=QuD7dqsCTT-sL!oGU0+&%w*GwmrTVM&*X!%*IrVqyx%Gqf zckAcspEs;;KsKl~=r-s#;2TUDtQ%Y#+#5U^yc+@=Vj94P_=cp0?1qyKryEKd${TJp z+-j(7sBUO(7-<-9_@&`fCcjfWb~HePJxH9l>UYuetV+oa!w zZ!&2zYuevr)nwB|ZlW|fH3c<=Hib7uHbpnZG=WVCO-W6uO=(RTP3N0Bnw~a`G^3jx znwiZfnyZ`dHcvLsG~aK2*!-&bee{E9t4!;LR)to@ z)-A2uTX(gpw3@b>w-Q@Pt+uW9t&~>xRz_=JYe;K&Yg8+#^1=t+!k2 zS{qwiT1Q&%w?1lp+WMmP*S6(tE814It!<6&92R%joRkY z=GJzg&8y9)jnNj^7Sfj5mfm)_Ewe4VEvM~xTYg(%TXEZ|wli&YZDZ}r+7;VP+8OQH z?bq7xv_EbCwf$}ThxSh$D?4Bv$PV!isSeqW4IMi=c6X?D?CIFsq19p6;ojlZ;nU&Q z5!4ad5#ABmkj8^n>hP8 zx*UBDo@2r><5+O)I5ZBOCx%cd9c&B)4wyQGqf|jGph4YXG~{dXI1A|*OD&9Eu%d_dUs%VSa(Es zbT_Lzt~;?ixjVPJtouTDS9foBfA?Vb-R{xuvF^$4neLB0OL~^~tms+Yv#w`-k3`SL zp3Oa5dv^5f?osVQ_uzUAdhk6aJ(M2Lo`XGpJpnz;9(GSgPiD{2o>M&~J!L&V^xW)e z=xOR{>1pp7?77=B+QaYF?KSV+-)q@x-5cMV*<058L+^#&%e~inZ}$GwTh&|BTi@H% zd$)JAm)|?yJJ~zad%yQl?~~r=y)S!zz5~0Xe8>7u=$-sKb$6!wmh~z0>GT=*5&A6p zh<)~bv_5*DN1u0}PoH03R3EdC)feBF)R)p%)_1+{r@pGb+kFjv&3&zX?R~tynZAd8 zkNckW{oMCU-bL19_fz_v`osDo`=k3~`oaGA{-pjR z{U`cQ_Mho5?H}l$V}ka5K3@+*8~$+%oPZZWXtNThDFc-r;h&L)>BR9QPsj3HSNHiUH(+ z_<+=a%)r(G>;P`SV8Cd=bijOoI6xY(9k3s890(W)9ta%>ABY?{G!Q!wH;^!pJdiq& zHt@qh+rZ;N;X&0w@?i8}!C>X!(BSys)Zpyk{lOQ5ZwEgNei~Xjw0sB{LJWxwNe;;j zZ5TogVTTAq#39m<&5*+ob;x`jz{ECc`iIR-T|IB zFN_z#i{dePY+eR0lb6jq$-Bw>iC4v|;nnk+c&)q+UKg*I*U!7pd&GOfd&Yag`o1M+`>| z9~w>_P9HupoIRW~e0=!kaKmuxaK~`x@SS1q@Zd0Scy9RT;WxwYhChxh8xa~=IkI|0 zaztT7e*`~bGGaEef5d9UW`sOK83`T<8;Kk_G!i=!H&qqFtd>&moDl`fo6&;lrl^)$Px_xxlsLCjI6gO%x zYBXv+YB%aI>Nx5(${b~l#*ZeArjDkM9vRIZ%^A%bEgZc%dSmp*(Vs>uM{keTjy8-o zjkb=qk8(!u-&=8S`#tk}0rzt6RoxrD_l7UV-@sSkEAo~2%6v^ehL7dr`1*W9z7^kw zPv%qjPJ9>sA$}_VFh7fbl%K~hL##ruH$yoW=xv>jl z6=U6FcgDD5Lu12Z_r}J@rp9K+9*jL6UoyUY92j3YzIuG!xX3tSTy$JwTxwiqTyvZ} z9z9+(-Y|ZDV(rBC3DXIW3IB9 z{9*F^M$ z$`pD^V+uQkn=+U(nlhQPn{uBDn_^9+PUTJ&O`V!5nJS;UG<9|A#?-B;iYd+%cWPp4 za%yU7X6ohCyQz=UOQx4kub38@Mof!MOHRv7%S|gyt4w32t*2e5y{CPr{ilPbL#Jb= zS<`XT3De2bsnchto2T#3ESV9W*)XFpqd2o=X8X*p8I>9IjK+-djOmQojKz%Q3~9z@ z#%{)bhBA{fQ!z6;D>|z?>py#X_RcJSc4BsVc5e3J?Bm(bbF1cr=U{WlIq|tobKB>3 z&8f_x=d|arbGmc-bB1#kb9Qs?a|h@A<^tw|=c4AAbF8`exx~36^Qzz_%f9%{iY{Gv Ky!d-A@BaYqIkQdx literal 71697 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 bmEo0v(!OI((Y~**SH}MzSuhkV diff --git a/Examples/TicTacToe/TicTacToe.xcodeproj/xcuserdata/danil.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Examples/TicTacToe/TicTacToe.xcodeproj/xcuserdata/danil.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 600513d..8ae6d12 100644 --- a/Examples/TicTacToe/TicTacToe.xcodeproj/xcuserdata/danil.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/Examples/TicTacToe/TicTacToe.xcodeproj/xcuserdata/danil.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -3,20 +3,4 @@ uuid = "7B2C137B-197C-49F8-8812-740AE1314E0E" type = "1" version = "2.0"> - - - - - - diff --git a/Examples/TicTacToe/tic-tac-toe/Package.swift b/Examples/TicTacToe/tic-tac-toe/Package.swift index 21c2c73..5591f9a 100644 --- a/Examples/TicTacToe/tic-tac-toe/Package.swift +++ b/Examples/TicTacToe/tic-tac-toe/Package.swift @@ -27,7 +27,7 @@ let package = Package( ], dependencies: [ .package(name: "VDStore", path: "../../.."), - .package(url: "https://github.com/dankinsoid/VDFlow.git", from: "4.21.0"), + .package(url: "https://github.com/dankinsoid/VDFlow.git", from: "4.26.0"), ], targets: [ .target( diff --git a/Examples/TicTacToe/tic-tac-toe/Sources/AppCore/AppCore.swift b/Examples/TicTacToe/tic-tac-toe/Sources/AppCore/AppCore.swift index 3905e4d..3b379d8 100644 --- a/Examples/TicTacToe/tic-tac-toe/Sources/AppCore/AppCore.swift +++ b/Examples/TicTacToe/tic-tac-toe/Sources/AppCore/AppCore.swift @@ -7,8 +7,8 @@ import VDStore @Steps public struct TicTacToe: Equatable { - public var login: Login = Login() - public var newGame: NewGame = NewGame() + public var login: Login = .init() + public var newGame: NewGame = .init() } extension Store: LogoutButtonDelegate { diff --git a/Examples/TicTacToe/tic-tac-toe/Sources/AppSwiftUI/AppView.swift b/Examples/TicTacToe/tic-tac-toe/Sources/AppSwiftUI/AppView.swift index 0b0ae3f..6ea423d 100644 --- a/Examples/TicTacToe/tic-tac-toe/Sources/AppSwiftUI/AppView.swift +++ b/Examples/TicTacToe/tic-tac-toe/Sources/AppSwiftUI/AppView.swift @@ -1,7 +1,9 @@ import AppCore +import GameSwiftUI import LoginSwiftUI import NewGameSwiftUI import SwiftUI +import VDFlow import VDStore public struct AppView: View { @@ -18,8 +20,10 @@ public struct AppView: View { LoginView(store: $state.login) } case .newGame: - NavigationStack { + NavigationSteps(selection: $state.binding.newGame.flow.selected) { NewGameView(store: $state.newGame) + GameView(store: $state.newGame.flow.game) + .step($state.binding.newGame.flow.$game) } } } diff --git a/Examples/TicTacToe/tic-tac-toe/Sources/AuthenticationClient/AuthenticationClient.swift b/Examples/TicTacToe/tic-tac-toe/Sources/AuthenticationClient/AuthenticationClient.swift index efa87bf..cbb0bc4 100644 --- a/Examples/TicTacToe/tic-tac-toe/Sources/AuthenticationClient/AuthenticationClient.swift +++ b/Examples/TicTacToe/tic-tac-toe/Sources/AuthenticationClient/AuthenticationClient.swift @@ -74,6 +74,5 @@ public extension AuthenticationClient { public extension StoreDIValues { - @StoreDIValue - var authenticationClient = valueFor(live: AuthenticationClient.liveValue, test: AuthenticationClient()) + @StoreDIValue var authenticationClient = valueFor(live: AuthenticationClient.liveValue, test: AuthenticationClient()) } diff --git a/Examples/TicTacToe/tic-tac-toe/Sources/GameSwiftUI/GameView.swift b/Examples/TicTacToe/tic-tac-toe/Sources/GameSwiftUI/GameView.swift index 0f92be7..63895f9 100644 --- a/Examples/TicTacToe/tic-tac-toe/Sources/GameSwiftUI/GameView.swift +++ b/Examples/TicTacToe/tic-tac-toe/Sources/GameSwiftUI/GameView.swift @@ -12,7 +12,8 @@ public struct GameView: View { } public var body: some View { - GeometryReader { proxy in + Self._printChanges() + return GeometryReader { proxy in VStack(spacing: 0.0) { VStack { Text(state.title) @@ -28,7 +29,7 @@ public struct GameView: View { } .padding(.bottom, 48) - VStack { + VStack(spacing: 0.0) { rowView(row: 0, proxy: proxy) rowView(row: 1, proxy: proxy) rowView(row: 2, proxy: proxy) diff --git a/Examples/TicTacToe/tic-tac-toe/Sources/LoginCore/LoginCore.swift b/Examples/TicTacToe/tic-tac-toe/Sources/LoginCore/LoginCore.swift index 932f4e3..1262737 100644 --- a/Examples/TicTacToe/tic-tac-toe/Sources/LoginCore/LoginCore.swift +++ b/Examples/TicTacToe/tic-tac-toe/Sources/LoginCore/LoginCore.swift @@ -19,7 +19,7 @@ public struct Login: Sendable, Equatable { @Steps public struct Flow: Equatable, Sendable { - public var twoFactor: TwoFactor = TwoFactor(token: "") + public var twoFactor: TwoFactor = .init(token: "") public var alert = "" public var none } diff --git a/Examples/TicTacToe/tic-tac-toe/Sources/LoginSwiftUI/LoginView.swift b/Examples/TicTacToe/tic-tac-toe/Sources/LoginSwiftUI/LoginView.swift index 7850e4d..9e71c93 100644 --- a/Examples/TicTacToe/tic-tac-toe/Sources/LoginSwiftUI/LoginView.swift +++ b/Examples/TicTacToe/tic-tac-toe/Sources/LoginSwiftUI/LoginView.swift @@ -47,15 +47,15 @@ public struct LoginView: View { } label: { HStack { Text("Log in") - if state.isActivityIndicatorVisible { + if state.isLoginRequestInFlight { Spacer() ProgressView() } } } - .disabled(state.isLoginButtonDisabled) + .disabled(!state.isFormValid) } - .disabled(state.isFormDisabled) + .disabled(state.isLoginRequestInFlight) .alert(state.flow.alert, isPresented: $state.binding.flow.isSelected(.alert)) { Button("Ok") {} } @@ -66,12 +66,6 @@ public struct LoginView: View { } } -private extension Login { - var isActivityIndicatorVisible: Bool { isLoginRequestInFlight } - var isFormDisabled: Bool { isLoginRequestInFlight } - var isLoginButtonDisabled: Bool { !isFormValid } -} - #Preview { NavigationStack { LoginView( diff --git a/Examples/TicTacToe/tic-tac-toe/Sources/LoginUIKit/LoginViewController.swift b/Examples/TicTacToe/tic-tac-toe/Sources/LoginUIKit/LoginViewController.swift index 58b959b..58c1a13 100644 --- a/Examples/TicTacToe/tic-tac-toe/Sources/LoginUIKit/LoginViewController.swift +++ b/Examples/TicTacToe/tic-tac-toe/Sources/LoginUIKit/LoginViewController.swift @@ -99,13 +99,13 @@ public class LoginViewController: UIViewController { if state.email != emailTextField.text { emailTextField.text = state.email } - emailTextField.isEnabled = state.isEmailTextFieldEnabled + emailTextField.isEnabled = !state.isLoginRequestInFlight if passwordTextField.text != state.password { passwordTextField.text = state.password } - passwordTextField.isEnabled = state.isPasswordTextFieldEnabled + passwordTextField.isEnabled = !state.isLoginRequestInFlight loginButton.isEnabled = state.isLoginButtonEnabled - activityIndicator.isHidden = state.isActivityIndicatorHidden + activityIndicator.isHidden = !state.isLoginRequestInFlight if store.state.flow.selected == .alert, alertController == nil @@ -158,10 +158,7 @@ public class LoginViewController: UIViewController { } private extension Login { - var isActivityIndicatorHidden: Bool { !isLoginRequestInFlight } - var isEmailTextFieldEnabled: Bool { !isLoginRequestInFlight } var isLoginButtonEnabled: Bool { isFormValid && !isLoginRequestInFlight } - var isPasswordTextFieldEnabled: Bool { !isLoginRequestInFlight } } @Actions diff --git a/Examples/TicTacToe/tic-tac-toe/Sources/NewGameCore/NewGameCore.swift b/Examples/TicTacToe/tic-tac-toe/Sources/NewGameCore/NewGameCore.swift index 4575532..5bbcab3 100644 --- a/Examples/TicTacToe/tic-tac-toe/Sources/NewGameCore/NewGameCore.swift +++ b/Examples/TicTacToe/tic-tac-toe/Sources/NewGameCore/NewGameCore.swift @@ -10,7 +10,7 @@ public struct NewGame: Equatable { @Steps public struct Flow: Equatable { - public var game: Game = Game(oPlayerName: "", xPlayerName: "") + public var game: Game = .init(oPlayerName: "", xPlayerName: "") public var none } @@ -23,8 +23,7 @@ public protocol LogoutButtonDelegate { } public extension StoreDIValues { - @StoreDIValue - var logoutButtonDelegate: LogoutButtonDelegate? + @StoreDIValue var logoutButtonDelegate: LogoutButtonDelegate? } @Actions diff --git a/Examples/TicTacToe/tic-tac-toe/Sources/NewGameSwiftUI/NewGameView.swift b/Examples/TicTacToe/tic-tac-toe/Sources/NewGameSwiftUI/NewGameView.swift index 1a18ad0..5fa880d 100644 --- a/Examples/TicTacToe/tic-tac-toe/Sources/NewGameSwiftUI/NewGameView.swift +++ b/Examples/TicTacToe/tic-tac-toe/Sources/NewGameSwiftUI/NewGameView.swift @@ -44,9 +44,6 @@ public struct NewGameView: View { $state.di.logoutButtonDelegate?.logoutButtonTapped() } ) - .navigationDestination(isPresented: $state.binding.flow.isSelected(.game)) { - GameView(store: $state.flow.game) - } } } diff --git a/Examples/TicTacToe/tic-tac-toe/Sources/TwoFactorCore/TwoFactorCore.swift b/Examples/TicTacToe/tic-tac-toe/Sources/TwoFactorCore/TwoFactorCore.swift index 408db40..68ef20f 100644 --- a/Examples/TicTacToe/tic-tac-toe/Sources/TwoFactorCore/TwoFactorCore.swift +++ b/Examples/TicTacToe/tic-tac-toe/Sources/TwoFactorCore/TwoFactorCore.swift @@ -51,6 +51,5 @@ public protocol LoginDelegate { public extension StoreDIValues { - @StoreDIValue - var loginDelegate: LoginDelegate? + @StoreDIValue var loginDelegate: LoginDelegate? } diff --git a/Examples/Todos/Todos.xcodeproj/project.pbxproj b/Examples/Todos/Todos.xcodeproj/project.pbxproj index 924e4cf..6abe43a 100644 --- a/Examples/Todos/Todos.xcodeproj/project.pbxproj +++ b/Examples/Todos/Todos.xcodeproj/project.pbxproj @@ -3,12 +3,13 @@ archiveVersion = 1; classes = { }; - objectVersion = 52; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ + 8318EBE92BA76C760018B691 /* VDStore in Frameworks */ = {isa = PBXBuildFile; productRef = 8318EBE82BA76C760018B691 /* VDStore */; }; + 8318EBEF2BA84D320018B691 /* IdentifiedCollections in Frameworks */ = {isa = PBXBuildFile; productRef = 8318EBEE2BA84D320018B691 /* IdentifiedCollections */; }; CA93D060249BF4D000A6F65D /* Todo.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA93D05F249BF4D000A6F65D /* Todo.swift */; }; - DC1394322469E57000EE1157 /* ComposableArchitecture in Frameworks */ = {isa = PBXBuildFile; productRef = DC1394312469E57000EE1157 /* ComposableArchitecture */; }; DCBCB77624290F6C00DE1F59 /* TodosApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCBCB77524290F6C00DE1F59 /* TodosApp.swift */; }; DCBCB77A24290F6D00DE1F59 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DCBCB77924290F6D00DE1F59 /* Assets.xcassets */; }; DCBCB78B24290F6D00DE1F59 /* TodosTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCBCB78A24290F6D00DE1F59 /* TodosTests.swift */; }; @@ -51,7 +52,7 @@ /* Begin PBXFileReference section */ 23EDBE6A271CD8C7004F7430 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; CA93D05F249BF4D000A6F65D /* Todo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Todo.swift; sourceTree = ""; }; - DC85B441242D0286009784B0 /* swift-composable-architecture */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "swift-composable-architecture"; path = ../..; sourceTree = ""; }; + DC85B441242D0286009784B0 /* VDStore */ = {isa = PBXFileReference; lastKnownFileType = folder; name = VDStore; path = ../..; sourceTree = ""; }; DCBCB77024290F6C00DE1F59 /* Todos.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Todos.app; sourceTree = BUILT_PRODUCTS_DIR; }; DCBCB77524290F6C00DE1F59 /* TodosApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodosApp.swift; sourceTree = ""; }; DCBCB77924290F6D00DE1F59 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -65,7 +66,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DC1394322469E57000EE1157 /* ComposableArchitecture in Frameworks */, + 8318EBE92BA76C760018B691 /* VDStore in Frameworks */, + 8318EBEF2BA84D320018B691 /* IdentifiedCollections in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -79,14 +81,22 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 8318EBE72BA76C760018B691 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; DCBCB76724290F6C00DE1F59 = { isa = PBXGroup; children = ( - DC85B441242D0286009784B0 /* swift-composable-architecture */, + DC85B441242D0286009784B0 /* VDStore */, 23EDBE6A271CD8C7004F7430 /* README.md */, DCBCB77124290F6C00DE1F59 /* Products */, DCBCB77224290F6C00DE1F59 /* Todos */, DCBCB78924290F6D00DE1F59 /* TodosTests */, + 8318EBE72BA76C760018B691 /* Frameworks */, ); sourceTree = ""; }; @@ -136,7 +146,8 @@ ); name = Todos; packageProductDependencies = ( - DC1394312469E57000EE1157 /* ComposableArchitecture */, + 8318EBE82BA76C760018B691 /* VDStore */, + 8318EBEE2BA84D320018B691 /* IdentifiedCollections */, ); productName = Todos; productReference = DCBCB77024290F6C00DE1F59 /* Todos.app */; @@ -192,6 +203,7 @@ ); mainGroup = DCBCB76724290F6C00DE1F59; packageReferences = ( + 8318EBED2BA84D310018B691 /* XCRemoteSwiftPackageReference "swift-identified-collections" */, ); productRefGroup = DCBCB77124290F6C00DE1F59 /* Products */; projectDirPath = ""; @@ -493,10 +505,26 @@ }; /* End XCConfigurationList section */ +/* Begin XCRemoteSwiftPackageReference section */ + 8318EBED2BA84D310018B691 /* XCRemoteSwiftPackageReference "swift-identified-collections" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/pointfreeco/swift-identified-collections"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.0.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + /* Begin XCSwiftPackageProductDependency section */ - DC1394312469E57000EE1157 /* ComposableArchitecture */ = { + 8318EBE82BA76C760018B691 /* VDStore */ = { + isa = XCSwiftPackageProductDependency; + productName = VDStore; + }; + 8318EBEE2BA84D320018B691 /* IdentifiedCollections */ = { isa = XCSwiftPackageProductDependency; - productName = ComposableArchitecture; + package = 8318EBED2BA84D310018B691 /* XCRemoteSwiftPackageReference "swift-identified-collections" */; + productName = IdentifiedCollections; }; /* End XCSwiftPackageProductDependency section */ }; diff --git a/Examples/Todos/Todos.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Examples/Todos/Todos.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..f86e6bd --- /dev/null +++ b/Examples/Todos/Todos.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,32 @@ +{ + "pins" : [ + { + "identity" : "swift-collections", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-collections", + "state" : { + "revision" : "94cf62b3ba8d4bed62680a282d4c25f9c63c2efb", + "version" : "1.1.0" + } + }, + { + "identity" : "swift-identified-collections", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-identified-collections", + "state" : { + "revision" : "d1e45f3e1eee2c9193f5369fa9d70a6ddad635e8", + "version" : "1.0.0" + } + }, + { + "identity" : "swift-syntax", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-syntax.git", + "state" : { + "revision" : "64889f0c732f210a935a0ad7cda38f77f876262d", + "version" : "509.1.1" + } + } + ], + "version" : 2 +} diff --git a/Examples/Todos/Todos.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/IDEFindNavigatorScopes.plist b/Examples/Todos/Todos.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/IDEFindNavigatorScopes.plist new file mode 100644 index 0000000..5dd5da8 --- /dev/null +++ b/Examples/Todos/Todos.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/IDEFindNavigatorScopes.plist @@ -0,0 +1,5 @@ + + + + + diff --git a/Examples/Todos/Todos.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/UserInterfaceState.xcuserstate b/Examples/Todos/Todos.xcodeproj/project.xcworkspace/xcuserdata/danil.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..f71761541955eb431807ac123a42789e3413455e GIT binary patch literal 50137 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 Z)jh8JzajYb*Z;eKI=uS-DQMN1{{axIu(kjI literal 0 HcmV?d00001 diff --git a/Examples/Todos/Todos.xcodeproj/xcuserdata/danil.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Examples/Todos/Todos.xcodeproj/xcuserdata/danil.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..2098071 --- /dev/null +++ b/Examples/Todos/Todos.xcodeproj/xcuserdata/danil.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,6 @@ + + + diff --git a/Examples/Todos/Todos/Todo.swift b/Examples/Todos/Todos/Todo.swift index 2227fd0..ebcddc9 100644 --- a/Examples/Todos/Todos/Todo.swift +++ b/Examples/Todos/Todos/Todo.swift @@ -1,38 +1,37 @@ -import ComposableArchitecture import SwiftUI +import VDStore -@Reducer -struct Todo { - @ObservableState - struct State: Equatable, Identifiable { - var description = "" - let id: UUID - var isComplete = false - } +struct Todo: Equatable, Identifiable { - enum Action: BindableAction, Sendable { - case binding(BindingAction) - } + var description = "" + let id: UUID + var isComplete = false - var body: some Reducer { - BindingReducer() - } + static let mock = Todo( + description: "Call Mom", + id: UUID(), + isComplete: true + ) } struct TodoView: View { - @Bindable var store: StoreOf + @ViewStore var state: Todo + + init(store: Store) { + _state = ViewStore(store) + } var body: some View { HStack { Button { - store.isComplete.toggle() + state.isComplete.toggle() } label: { - Image(systemName: store.isComplete ? "checkmark.square" : "square") + Image(systemName: state.isComplete ? "checkmark.square" : "square") } .buttonStyle(.plain) - TextField("Untitled Todo", text: $store.description) + TextField("Untitled Todo", text: $state.binding.description) } - .foregroundColor(store.isComplete ? .gray : nil) + .foregroundColor(state.isComplete ? .gray : nil) } } diff --git a/Examples/Todos/Todos/Todos.swift b/Examples/Todos/Todos/Todos.swift index 556b820..4055782 100644 --- a/Examples/Todos/Todos/Todos.swift +++ b/Examples/Todos/Todos/Todos.swift @@ -1,5 +1,6 @@ -import ComposableArchitecture +import IdentifiedCollections import SwiftUI +import VDStore enum Filter: LocalizedStringKey, CaseIterable, Hashable { case all = "All" @@ -7,108 +8,78 @@ enum Filter: LocalizedStringKey, CaseIterable, Hashable { case completed = "Completed" } -@Reducer -struct Todos { - @ObservableState - struct State: Equatable { - var editMode: EditMode = .inactive - var filter: Filter = .all - var todos: IdentifiedArrayOf = [] - - var filteredTodos: IdentifiedArrayOf { - switch filter { - case .active: return todos.filter { !$0.isComplete } - case .all: return todos - case .completed: return todos.filter(\.isComplete) - } +struct Todos: Equatable { + + var editMode: EditMode = .inactive + var filter: Filter = .all + var todos: IdentifiedArrayOf = [] + + var filteredTodos: IdentifiedArrayOf { + switch filter { + case .active: return todos.filter { !$0.isComplete } + case .all: return todos + case .completed: return todos.filter(\.isComplete) } } +} + +@Actions +extension Store { - enum Action: BindableAction, Sendable { - case addTodoButtonTapped - case binding(BindingAction) - case clearCompletedButtonTapped - case delete(IndexSet) - case move(IndexSet, Int) - case sortCompletedTodos - case todos(IdentifiedActionOf) + func addTodoButtonTapped() { + state.todos.insert(Todo(id: di.uuid()), at: 0) } - @Dependency(\.continuousClock) var clock - @Dependency(\.uuid) var uuid - private enum CancelID { case todoCompletion } - - var body: some Reducer { - BindingReducer() - Reduce { state, action in - switch action { - case .addTodoButtonTapped: - state.todos.insert(Todo.State(id: uuid()), at: 0) - return .none - - case .binding: - return .none - - case .clearCompletedButtonTapped: - state.todos.removeAll(where: \.isComplete) - return .none - - case let .delete(indexSet): - let filteredTodos = state.filteredTodos - for index in indexSet { - state.todos.remove(id: filteredTodos[index].id) - } - return .none - - case var .move(source, destination): - if state.filter == .completed { - source = IndexSet( - source - .map { state.filteredTodos[$0] } - .compactMap { state.todos.index(id: $0.id) } - ) - destination = - (destination < state.filteredTodos.endIndex - ? state.todos.index(id: state.filteredTodos[destination].id) - : state.todos.endIndex) - ?? destination - } + func clearCompletedButtonTapped() { + state.todos.removeAll(where: \.isComplete) + } - state.todos.move(fromOffsets: source, toOffset: destination) + func delete(indexSet: IndexSet) { + let filteredTodos = state.filteredTodos + for index in indexSet { + state.todos.remove(id: filteredTodos[index].id) + } + } - return .run { send in - try await clock.sleep(for: .milliseconds(100)) - await send(.sortCompletedTodos) - } + func move(source: IndexSet, destination: Int) { + var source = source + var destination = destination + if state.filter == .completed { + let filtered = state.filteredTodos + source = IndexSet( + source + .map { filtered[$0] } + .compactMap { state.todos.index(id: $0.id) } + ) + destination = + (destination < filtered.endIndex + ? state.todos.index(id: filtered[destination].id) + : state.todos.endIndex) + ?? destination + } - case .sortCompletedTodos: - state.todos.sort { $1.isComplete && !$0.isComplete } - return .none + state.todos.move(fromOffsets: source, toOffset: destination) + } - case .todos(.element(id: _, action: .binding(\.isComplete))): - return .run { send in - try await clock.sleep(for: .seconds(1)) - await send(.sortCompletedTodos, animation: .default) - } - .cancellable(id: CancelID.todoCompletion, cancelInFlight: true) + @CancelInFlight + func todoIsCompletedChanged() async throws { + try await di.continuousClock.sleep(for: .seconds(1)) + sortCompletedTodos() + } - case .todos: - return .none - } - } - .forEach(\.todos, action: \.todos) { - Todo() - } + func sortCompletedTodos() { + state.todos.sort { $1.isComplete && !$0.isComplete } } } struct AppView: View { - @Bindable var store: StoreOf + + @ViewStore var todos: Todos var body: some View { NavigationStack { VStack(alignment: .leading) { - Picker("Filter", selection: $store.filter.animation()) { + Picker("Filter", selection: $todos.binding.filter) { ForEach(Filter.allCases, id: \.self) { filter in Text(filter.rawValue).tag(filter) } @@ -117,11 +88,17 @@ struct AppView: View { .padding(.horizontal) List { - ForEach(store.scope(state: \.filteredTodos, action: \.todos)) { store in - TodoView(store: store) + ForEach(todos.filteredTodos) { todo in + TodoView( + store: $todos.todos[id: todo.id].or(todo).onChange(of: \.isComplete) { _, _, _ in + Task { + try await $todos.todoIsCompletedChanged() + } + } + ) } - .onDelete { store.send(.delete($0)) } - .onMove { store.send(.move($0, $1)) } + .onDelete { $todos.delete(indexSet: $0) } + .onMove { $todos.move(source: $0, destination: $1) } } } .navigationTitle("Todos") @@ -129,30 +106,31 @@ struct AppView: View { trailing: HStack(spacing: 20) { EditButton() Button("Clear Completed") { - store.send(.clearCompletedButtonTapped, animation: .default) + $todos.clearCompletedButtonTapped() } - .disabled(!store.todos.contains(where: \.isComplete)) - Button("Add Todo") { store.send(.addTodoButtonTapped, animation: .default) } + .disabled(!todos.todos.contains(where: \.isComplete)) + Button("Add Todo") { $todos.addTodoButtonTapped() } } ) - .environment(\.editMode, $store.editMode) + .environment(\.editMode, $todos.binding.editMode) } + .animation(.default, value: todos) } } -extension IdentifiedArray where ID == Todo.State.ID, Element == Todo.State { +extension IdentifiedArrayOf { static let mock: Self = [ - Todo.State( + Todo( description: "Check Mail", id: UUID(), isComplete: false ), - Todo.State( + Todo( description: "Buy Milk", id: UUID(), isComplete: false ), - Todo.State( + Todo( description: "Call Mom", id: UUID(), isComplete: true @@ -161,9 +139,5 @@ extension IdentifiedArray where ID == Todo.State.ID, Element == Todo.State { } #Preview { - AppView( - store: Store(initialState: Todos.State(todos: .mock)) { - Todos() - } - ) + AppView(todos: Todos(todos: .mock)) } diff --git a/Examples/Todos/Todos/TodosApp.swift b/Examples/Todos/Todos/TodosApp.swift index dab6ba9..92c8d16 100644 --- a/Examples/Todos/Todos/TodosApp.swift +++ b/Examples/Todos/Todos/TodosApp.swift @@ -1,15 +1,11 @@ -import ComposableArchitecture import SwiftUI +import VDStore @main struct TodosApp: App { var body: some Scene { WindowGroup { - AppView( - store: Store(initialState: Todos.State()) { - Todos() - } - ) + AppView(todos: Todos()) } } } diff --git a/Examples/Todos/TodosTests/TodosTests.swift b/Examples/Todos/TodosTests/TodosTests.swift index 750dbfa..828b2d8 100644 --- a/Examples/Todos/TodosTests/TodosTests.swift +++ b/Examples/Todos/TodosTests/TodosTests.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +import VDStore import XCTest @testable import Todos diff --git a/Examples/VoiceMemos/README.md b/Examples/VoiceMemos/README.md deleted file mode 100644 index 2d90ff6..0000000 --- a/Examples/VoiceMemos/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Voice Memos - -This application demonstrates how to work with multiple dependencies and manage a complex state machine driven off of timers in the Composable Architecture. Some functionality includes: - -* Requesting the user’s permission to record audio. -* Prompting the user if insufficient permission is provided. -* Audio recording and playback. -* Handling errors that may occur during recording or playback. -* Stubbing dependencies to work with SwiftUI previews. diff --git a/Examples/VoiceMemos/VoiceMemos.xcodeproj/project.pbxproj b/Examples/VoiceMemos/VoiceMemos.xcodeproj/project.pbxproj deleted file mode 100644 index b25cb54..0000000 --- a/Examples/VoiceMemos/VoiceMemos.xcodeproj/project.pbxproj +++ /dev/null @@ -1,543 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 53; - objects = { - -/* Begin PBXBuildFile section */ - CA93D05C249BF42500A6F65D /* VoiceMemo.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA93D05B249BF42500A6F65D /* VoiceMemo.swift */; }; - CA93D05E249BF46E00A6F65D /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA93D05D249BF46E00A6F65D /* Helpers.swift */; }; - CABAB49028A2B5F900122307 /* RecordingMemo.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABAB48F28A2B5F900122307 /* RecordingMemo.swift */; }; - DC1394342469E59600EE1157 /* ComposableArchitecture in Frameworks */ = {isa = PBXBuildFile; productRef = DC1394332469E59600EE1157 /* ComposableArchitecture */; }; - DC52A010288F01B30092F7DB /* Dependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC52A00F288F01B30092F7DB /* Dependencies.swift */; }; - DC5BDCB024589177009C65A3 /* VoiceMemosApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC5BDCAF24589177009C65A3 /* VoiceMemosApp.swift */; }; - DC5BDCB224589177009C65A3 /* VoiceMemos.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC5BDCB124589177009C65A3 /* VoiceMemos.swift */; }; - DC5BDCB424589178009C65A3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DC5BDCB324589178009C65A3 /* Assets.xcassets */; }; - DC5BDCC524589179009C65A3 /* VoiceMemosTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC5BDCC424589179009C65A3 /* VoiceMemosTests.swift */; }; - DC5BDF362458939C009C65A3 /* AudioRecorderClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC5BDF352458939C009C65A3 /* AudioRecorderClient.swift */; }; - DC5BDF3A245893C1009C65A3 /* LiveAudioRecorderClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC5BDF39245893C1009C65A3 /* LiveAudioRecorderClient.swift */; }; - DC5BDF3D245893E6009C65A3 /* AudioPlayerClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC5BDF3C245893E6009C65A3 /* AudioPlayerClient.swift */; }; - DC5BDF3F24589406009C65A3 /* LiveAudioPlayerClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC5BDF3E24589406009C65A3 /* LiveAudioPlayerClient.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - DC5BDCC124589179009C65A3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DC5BDCA224589177009C65A3 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DC5BDCA924589177009C65A3; - remoteInfo = VoiceMemos; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - DC5BDF2E24589263009C65A3 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - DC5BDF3224589267009C65A3 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 23EDBE6B271CD8DD004F7430 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - CA93D05B249BF42500A6F65D /* VoiceMemo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoiceMemo.swift; sourceTree = ""; }; - CA93D05D249BF46E00A6F65D /* Helpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Helpers.swift; sourceTree = ""; }; - CABAB48F28A2B5F900122307 /* RecordingMemo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordingMemo.swift; sourceTree = ""; }; - DC52A00F288F01B30092F7DB /* Dependencies.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dependencies.swift; sourceTree = ""; }; - DC5BDCAA24589177009C65A3 /* VoiceMemos.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VoiceMemos.app; sourceTree = BUILT_PRODUCTS_DIR; }; - DC5BDCAF24589177009C65A3 /* VoiceMemosApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoiceMemosApp.swift; sourceTree = ""; }; - DC5BDCB124589177009C65A3 /* VoiceMemos.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoiceMemos.swift; sourceTree = ""; }; - DC5BDCB324589178009C65A3 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - DC5BDCBB24589178009C65A3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DC5BDCC024589179009C65A3 /* VoiceMemosTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VoiceMemosTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - DC5BDCC424589179009C65A3 /* VoiceMemosTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoiceMemosTests.swift; sourceTree = ""; }; - DC5BDF2A245891B7009C65A3 /* swift-composable-architecture */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "swift-composable-architecture"; path = ../..; sourceTree = ""; }; - DC5BDF352458939C009C65A3 /* AudioRecorderClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioRecorderClient.swift; sourceTree = ""; }; - DC5BDF39245893C1009C65A3 /* LiveAudioRecorderClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveAudioRecorderClient.swift; sourceTree = ""; }; - DC5BDF3C245893E6009C65A3 /* AudioPlayerClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioPlayerClient.swift; sourceTree = ""; }; - DC5BDF3E24589406009C65A3 /* LiveAudioPlayerClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveAudioPlayerClient.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - DC5BDCA724589177009C65A3 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DC1394342469E59600EE1157 /* ComposableArchitecture in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DC5BDCBD24589179009C65A3 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - CA71F02129A6A32F007AE0DD /* Frameworks */ = { - isa = PBXGroup; - children = ( - ); - name = Frameworks; - sourceTree = ""; - }; - DC5BDCA124589177009C65A3 = { - isa = PBXGroup; - children = ( - DC5BDF2A245891B7009C65A3 /* swift-composable-architecture */, - 23EDBE6B271CD8DD004F7430 /* README.md */, - DC5BDCAB24589177009C65A3 /* Products */, - DC5BDCAC24589177009C65A3 /* VoiceMemos */, - DC5BDCC324589179009C65A3 /* VoiceMemosTests */, - CA71F02129A6A32F007AE0DD /* Frameworks */, - ); - sourceTree = ""; - }; - DC5BDCAB24589177009C65A3 /* Products */ = { - isa = PBXGroup; - children = ( - DC5BDCAA24589177009C65A3 /* VoiceMemos.app */, - DC5BDCC024589179009C65A3 /* VoiceMemosTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - DC5BDCAC24589177009C65A3 /* VoiceMemos */ = { - isa = PBXGroup; - children = ( - DC5BDCBB24589178009C65A3 /* Info.plist */, - DC52A00F288F01B30092F7DB /* Dependencies.swift */, - CA93D05D249BF46E00A6F65D /* Helpers.swift */, - CABAB48F28A2B5F900122307 /* RecordingMemo.swift */, - CA93D05B249BF42500A6F65D /* VoiceMemo.swift */, - DC5BDCB124589177009C65A3 /* VoiceMemos.swift */, - DC5BDCAF24589177009C65A3 /* VoiceMemosApp.swift */, - DC5BDCB324589178009C65A3 /* Assets.xcassets */, - DC5BDF3B245893DB009C65A3 /* AudioPlayerClient */, - DC5BDF3424589389009C65A3 /* AudioRecorderClient */, - ); - path = VoiceMemos; - sourceTree = ""; - }; - DC5BDCC324589179009C65A3 /* VoiceMemosTests */ = { - isa = PBXGroup; - children = ( - DC5BDCC424589179009C65A3 /* VoiceMemosTests.swift */, - ); - path = VoiceMemosTests; - sourceTree = ""; - }; - DC5BDF3424589389009C65A3 /* AudioRecorderClient */ = { - isa = PBXGroup; - children = ( - DC5BDF352458939C009C65A3 /* AudioRecorderClient.swift */, - DC5BDF39245893C1009C65A3 /* LiveAudioRecorderClient.swift */, - ); - path = AudioRecorderClient; - sourceTree = ""; - }; - DC5BDF3B245893DB009C65A3 /* AudioPlayerClient */ = { - isa = PBXGroup; - children = ( - DC5BDF3C245893E6009C65A3 /* AudioPlayerClient.swift */, - DC5BDF3E24589406009C65A3 /* LiveAudioPlayerClient.swift */, - ); - path = AudioPlayerClient; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - DC5BDCA924589177009C65A3 /* VoiceMemos */ = { - isa = PBXNativeTarget; - buildConfigurationList = DC5BDCC924589179009C65A3 /* Build configuration list for PBXNativeTarget "VoiceMemos" */; - buildPhases = ( - DC5BDCA624589177009C65A3 /* Sources */, - DC5BDCA724589177009C65A3 /* Frameworks */, - DC5BDCA824589177009C65A3 /* Resources */, - DC5BDF2E24589263009C65A3 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - DCFC51462466F42900A0B8CF /* PBXTargetDependency */, - ); - name = VoiceMemos; - packageProductDependencies = ( - DC1394332469E59600EE1157 /* ComposableArchitecture */, - ); - productName = VoiceMemos; - productReference = DC5BDCAA24589177009C65A3 /* VoiceMemos.app */; - productType = "com.apple.product-type.application"; - }; - DC5BDCBF24589179009C65A3 /* VoiceMemosTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = DC5BDCCC24589179009C65A3 /* Build configuration list for PBXNativeTarget "VoiceMemosTests" */; - buildPhases = ( - DC5BDCBC24589179009C65A3 /* Sources */, - DC5BDCBD24589179009C65A3 /* Frameworks */, - DC5BDCBE24589179009C65A3 /* Resources */, - DC5BDF3224589267009C65A3 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - DC5BDCC224589179009C65A3 /* PBXTargetDependency */, - ); - name = VoiceMemosTests; - packageProductDependencies = ( - ); - productName = VoiceMemosTests; - productReference = DC5BDCC024589179009C65A3 /* VoiceMemosTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - DC5BDCA224589177009C65A3 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = YES; - LastSwiftUpdateCheck = 1140; - LastUpgradeCheck = 1430; - ORGANIZATIONNAME = "Point-Free"; - TargetAttributes = { - DC5BDCA924589177009C65A3 = { - CreatedOnToolsVersion = 11.4.1; - }; - DC5BDCBF24589179009C65A3 = { - CreatedOnToolsVersion = 11.4.1; - TestTargetID = DC5BDCA924589177009C65A3; - }; - }; - }; - buildConfigurationList = DC5BDCA524589177009C65A3 /* Build configuration list for PBXProject "VoiceMemos" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = DC5BDCA124589177009C65A3; - productRefGroup = DC5BDCAB24589177009C65A3 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - DC5BDCA924589177009C65A3 /* VoiceMemos */, - DC5BDCBF24589179009C65A3 /* VoiceMemosTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - DC5BDCA824589177009C65A3 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DC5BDCB424589178009C65A3 /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DC5BDCBE24589179009C65A3 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - DC5BDCA624589177009C65A3 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DC5BDF362458939C009C65A3 /* AudioRecorderClient.swift in Sources */, - DC5BDF3D245893E6009C65A3 /* AudioPlayerClient.swift in Sources */, - CA93D05E249BF46E00A6F65D /* Helpers.swift in Sources */, - DC5BDF3A245893C1009C65A3 /* LiveAudioRecorderClient.swift in Sources */, - DC5BDF3F24589406009C65A3 /* LiveAudioPlayerClient.swift in Sources */, - DC52A010288F01B30092F7DB /* Dependencies.swift in Sources */, - CA93D05C249BF42500A6F65D /* VoiceMemo.swift in Sources */, - DC5BDCB024589177009C65A3 /* VoiceMemosApp.swift in Sources */, - CABAB49028A2B5F900122307 /* RecordingMemo.swift in Sources */, - DC5BDCB224589177009C65A3 /* VoiceMemos.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DC5BDCBC24589179009C65A3 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DC5BDCC524589179009C65A3 /* VoiceMemosTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - DC5BDCC224589179009C65A3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DC5BDCA924589177009C65A3 /* VoiceMemos */; - targetProxy = DC5BDCC124589179009C65A3 /* PBXContainerItemProxy */; - }; - DCFC51462466F42900A0B8CF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - DC5BDCC724589179009C65A3 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_STRICT_CONCURRENCY = complete; - }; - name = Debug; - }; - DC5BDCC824589179009C65A3 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_STRICT_CONCURRENCY = complete; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - DC5BDCCA24589179009C65A3 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_STYLE = Automatic; - ENABLE_PREVIEWS = YES; - INFOPLIST_FILE = VoiceMemos/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = co.pointfree.VoiceMemos; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - DC5BDCCB24589179009C65A3 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_STYLE = Automatic; - ENABLE_PREVIEWS = YES; - INFOPLIST_FILE = VoiceMemos/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = co.pointfree.VoiceMemos; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - DC5BDCCD24589179009C65A3 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = VoiceMemos/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = co.pointfree.VoiceMemosTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/VoiceMemos.app/VoiceMemos"; - }; - name = Debug; - }; - DC5BDCCE24589179009C65A3 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = VoiceMemos/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = co.pointfree.VoiceMemosTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/VoiceMemos.app/VoiceMemos"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - DC5BDCA524589177009C65A3 /* Build configuration list for PBXProject "VoiceMemos" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DC5BDCC724589179009C65A3 /* Debug */, - DC5BDCC824589179009C65A3 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DC5BDCC924589179009C65A3 /* Build configuration list for PBXNativeTarget "VoiceMemos" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DC5BDCCA24589179009C65A3 /* Debug */, - DC5BDCCB24589179009C65A3 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DC5BDCCC24589179009C65A3 /* Build configuration list for PBXNativeTarget "VoiceMemosTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DC5BDCCD24589179009C65A3 /* Debug */, - DC5BDCCE24589179009C65A3 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCSwiftPackageProductDependency section */ - DC1394332469E59600EE1157 /* ComposableArchitecture */ = { - isa = XCSwiftPackageProductDependency; - productName = ComposableArchitecture; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = DC5BDCA224589177009C65A3 /* Project object */; -} diff --git a/Examples/VoiceMemos/VoiceMemos.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Examples/VoiceMemos/VoiceMemos.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/Examples/VoiceMemos/VoiceMemos.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/Examples/VoiceMemos/VoiceMemos.xcodeproj/xcshareddata/xcschemes/VoiceMemos.xcscheme b/Examples/VoiceMemos/VoiceMemos.xcodeproj/xcshareddata/xcschemes/VoiceMemos.xcscheme deleted file mode 100644 index ad4176d..0000000 --- a/Examples/VoiceMemos/VoiceMemos.xcodeproj/xcshareddata/xcschemes/VoiceMemos.xcscheme +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/AppIcon-60@2x.png b/Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/AppIcon-60@2x.png deleted file mode 100644 index b1516e5a122b534ae5a9d14706d6248718aeb03a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7569 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 diff --git a/Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/AppIcon-76@2x.png b/Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/AppIcon-76@2x.png deleted file mode 100644 index 869cd81f3aee14834f60b9fb9bb87b3ec53a2840..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9893 zcmV;WCR*8vP)0ssI2m!P+H001UzNkl2!7S zqV)L(sIv|Gp>f-9Xcjkwoea$kh9!O<2_GmnZpo)lBcUx%HR@?$o4>@6ddskB!fkuu z_(Og&Fzr24`VF<7=}H6Rr&C3rJz{)z5g0LE6+fMf+nYUIhU^JxW-}z`G&E<7^cqs! zd=}3~g2b5t4b%4Q^daIl>U3(S)6nenelPSb*)(KxHiVYpbB`hQMGT$MFm+-GZZ4tk zoOxDva4y=noGTdzpVO+mux5=1xVcpHp*<LFhK7-T+J?2;undn^Q|r};55uE4RD$a6OsiGr zlO=GZ1R5f_uARJ?4G-rt^tOIO$cB7kxa9w^OxtzJtek;hZ=$H{nLHJ*t~IFao^2S` z{WF9G49oO!6LG~&oLAeZ?%W(GI$eKl#4ueQ?ZiuHb-9*DTY6-BS|?3$}|YoZ}E4MYDr8=6H7^|U)%hV^ZRIR)(kcc zoiiG4l3(sO8k*MskT$;_i1rqi! zP0As5*026To=)VoiYh&Q8GB~@a13gE?~fQhx&7WZgr6`xPbOz8rE&T=pGxM(XBrd) z&}e1qCDnT-ZHF{cIbxqit%a=m3_1NCLynS8HJ=u6_j*It!-mGbq27%Tc{y=?frV{W zrxrE?xSN4}EnwHVTgccDMhtCWendy1VNehFkH4WWNDudhTDang`;<0v)Ilv`v-$}sO5=J@viJ9UQe zYQrgQb1o#Hs0)hK6@Qg=e#)DrIDXvXUYIe|g8g2+p#v)nZQ%{ol>Qs~(ahdcJfwhwXk`@9AGIWC!Dh&~GTKx9yKS$9cgUVmO&x z!!M=1@_Xyej-@J%!}~&(BPwa6Y*A`cccu0ImpZd>iX>UWc>k@ZIGnq?Bj+Ce+->cY zVbO(=^|SGw?h#;M1>2YXWy}|K8BK4m5X4RV-uJ39v#KldyXsls?dI|$L55jimh5{% zRf1!D|6VKmMd!?*yK0{k@@>4Pf;<^3O?DK@&ByA~VygBM?G}O0orze`(_gi`8y;lCA#*7vW>sD?f zph+i0@V#bMTs*o_jOZ3Wj=Y?{xf2e<#pjv}tJ_!hu04Q_C*y=BxpU^paPjKit{BLV zjMsLqJ{2sCrELp)n8Em<@P_Nri7|m{34*TW&e9;y;9WW6nO9w$a-M(UDNuqg&ZD1{P4%z)!M2E?poC0u-4T!d|g51NJd znuW<`3kzwzNc^Ft)k(Uq3 zy`+DMXOksjl{l9G-mz!Q*$lnD&%DxHX>DJQbIAE0Xzpcq zXKS=JH>Mqc?$<-a6MBdNyVrv?M$K}MP9!ksB4>gQ_f)_^Md`O)B9XVktm768gEAP) zL|Ay(Ul@!#l4OrKJ{p2?jr_E>ua4E`hHI%B$R1L4 zA$zE#XgkV!#U9cwQeo6&=LYLgnL=aW<54LGeLKvHZ3>)A4ZM8NUoiVi999_%iHRFZ zpS8~q)ObR9fzQ1j=HkB>Q{Kzn?dR&t1GPD~hqkv2qKD9QJ(O*&uNF`K2UiqCF(xrt ztFx?RkjQHXE}nraRA7S^#;3y5k(a&wW%|GMlIvN5ZLFb!(#NfH!#JvJ`+Ts{*~Y(7 zZ{f2l-mKe>*H#dqQY3 zVT?XhUz82UgThg95np(5o>fItQ2igglntKt+?tF0z0cJr>Pu`wd?%T;!Q_;U zxWLHT{NO$es4C*Oz>}FuNg<9(DB^F0a;45%LNh%BrDsf8-Uc2HJqdjYNWKvF=J_NK;(J zg$$zd&7dHj#Xvg~vz$`@u~wSd2u^hCN4mA6>*5E@fD%Ti3_2jvt)AQnZljC5m!0ja zkJXmgJt$!$u7@$fSgaR<8o7W8l-Maiv01_aQ}UnWTh_${^NeBf*}tw9=Qe|d&2Uz{ z+<=j>SQqyVX1a}y-R;}wp!r?F)^qi&wgsBpLmNz7vH%56){}X^1E%x+P#LST#sn=$ zjZ_!qE>4AK1>?t*DhD=2Z2XU_KQF*VWqu<(-mU!)4nZ*hCTL*l+jalS?#|w|1N?NN z@5^Pji-R;h>{nGxwpU~J@zf#frMt3%xT?jbh9VbFzZ;&Lat#Y)dLAlcC@@n4&Hi)e zm!5@9*UJ;p3s!)CDM9^r-Nqh12WTVSv2rgTtjarfkzEqyAf|`uv1`T1$|9Zwt;B#* z5>-Mi*kS37#%XwVp2`6gHe(8yB8*H1=l;4{63<{E*Z=_cvM%22LzU{1=>~EauhGN< zHnX*Tbx6Ie5ZAfI7}#XN1fjHy8_L+j$YlxYu3XYVGJ};xxOhQ4P!%Qx44@WP60_uQ z9k?jAS?Fc+_{}`7;s2JT22adFsjN>rdngei@C8gl8cEUO}=dMbgz%F-MDxyisJ1b8riuHIxgYhAC^aAVCZq#v2#@(ka8Rma7C)%j`z;*sA}(HL+8uLFr=s z`)+u3Z};$Qgq8T+`U92hJ=$ce1RZ9d*>((EFIlezV&w8YC{hJ0$gSL?$`nCdbfCQQ zx_=Hnr6W*{U~n8t{adFpYn)3**kt)A&NFX4@P_#b%ra5XP|V-K%Sg_ZP} z76KUL(JdlIsw(?shsrB&_~*x6CjyS+U>S(b{xOZM)PY>|Dl9=RCD53VK#>Fy5`{>49c zD!1q&FXdcU{_WHFb}iUBgn!+n|K0l5aM5kAj7b)8QGwQEsf;_mW<7~Y+Hg0}lqe7j zg_VJF?v?rl_+c<^rRAN*4}a$O;%y?gxtiv;;fMZjp9jnNyV>&+fKRGKy+9n5P@-9n zIn>32nw)4~IsaPZ;*SZ&9JY&Xaq+VJ?&i1fk$d?>`Ao0#xk!mxYjJOv6NHgDmwQXO zdy0}%&FWa`FXi9xFTzElj@s#jFG`p~TorM7ss5>5nML<+jBX1G=XBiLWMy;h%I@xO z!bSeu=jqDXJEim5f7l5Z*nCwNW=YQLB~%4Yg*?@9@h4T6315A(u##n>O#QK4g&*pT zl58PsTC8-JoZ4L7yLKSoi+eo|V(ayt?a}gS>9Dj~Eg&?4NQ7nX)Vm8KgIUv8%)M5- z_>TXhFya4XR1kYqiKJ9bJ&XU`uFiE^bFe|wI66mV)?$}rH&?e{;_WmK?(IeJb3nga z|3CF+!R$DWMPdKWfk1OF3^Ox4US?+c0mIA;kCHgDW60w`XTr(uu}=ABV^szn1iRj5V6V?s1wv=@I zpOY9CDZm8ggjXq2r-{h^FnOYm(Qvy*a5A0ZS^c-;@D~T(j}O$Z4}3gDwz@4$*;P8# zpO?3U+q2FKSwURzAq5N0{E83HdUKZ-{12Dv6}0{{Ax2Hs_NxEpSrijrnD_Lz8@p$5 zFqu5tI=V5~$*JTJNLx<%9~S%%?ubjTcN$~3w5qc)!grrtNJ8hCw18X;_LeMgv^;@t z-eg|%Hy^Fz$*E??t1j?T^ysWhF65ubsYMGkz&jm2QEi^Z?s$yldO`^MizMg#%?Dz4Jek0N-T&`%!P~?S$LR;$ z2FaMBQPv@H3rh)0sNknO6eaT3s0{;?#k0^RDg67m{tA^?;{A`>1Ka-x4i=Zf>NziI z-|2bGE;0Xk9Agi5AM8h?;Z?OA-pkwuQwGdLWQKFz_9GF_ldlE%h9pnYoRxRYW7*=X zoy1~qg0@@!t!}$}si4r8?b8WcCT3gD`P=cZ$A`P^|5s4PHn5p9J~u-+&hF4*NhU5N z7EKd^l3b5HW;y_w#VmUNJleB+7T@i(te-_bSC?WBjVnq+=6lCFQsAqqfheanIu4YHUTrsDYa<1zz^j?SSeEi`r#+lb z?Dk7O9pC@xl2%Bz3B49Q786c;2`sXE$ca4XZNH9&gY#-vZYtYj$~F>_+|9$GM?(t{ zugp&ZXHg%frY&Ic%lli!(C~b_k*_A*D5zcJLNIGAI2`t^iqTTErq1g?U>E7*sy0>5V>1WAfsxRS%hYtppaeyJdk58lDo71$=x4M9tafg zC1iH!=$$28<5yN9nxO7m(lXjLDJ5Cm z?T$y&FXuS+CzHFwYEIvdvY0Yp-Qjitc7L^3(GCJlP4bhdnXtYQhtD<}ueMsYT)y0H z`n~R#;SyhhYlCjyEwLdBC@~8PU<~*?D<=oXzQyTiGJPbfol<3OOW%C~j^0)o$(>#0 zSJpqlS@4J?Us;NSl|)0xT;=6_k`-QN31_oWfOGj&qhVNVlLczqi;{y{zxQRh ze6iJn!h$Lx1?fzl=_a6#JXI~{+|oOpw#CiRBAyUyQCLiFB)8+PBxjctS=Nind7S{4 z*LYR!GSn^wTz*ig5oJ!kTES>WvZ7LS;ZkV_5rGvXDp_I?mPOvKmqqJw^o&)PFSpx%zias@ z=s&M7D7T32uob#L%sF)Bg6FnJBa3_B=i*&~m!7K%Zj|1gIfHeklkRDTyyq%a)jpyb zF>(Phpy^CT%V}=Ju|=1pYSkrs>2~{Ps&3LjH)$gK!z3(z->dEq2h*u#i;qU3m=ki6 z21UI$Cz-CelK+QWsJP$v)N)8wpPyw(?eghHGjp(zue4_4MYD@gU&8Ms(V+jMdi`?U zlR~A8<^btw(RKfDaL^gy>yh1WHxqmeq4VrNF-0;3x^r@sDn>}|H5s@r$OApNN~xtV zqE0525LAHajBr-q`t>M!@`NrI`a_+GDH#*v=AdXKd;Wsw7F9nISVP$@f-!aB1~5 zWdJEye(|q(-5Uf2X}hZ=O&5{^7d!MMTp<|s@2T1n^%yJ>ju*`a9M6hBi0V%_TGU_* z`Mmt*zjzi0lj%xShl!-;I@#@oQkcd9M_0WoDxOX?k0)@=RjT%A;-jwJNXlTA0u`oN zX9_Dp{mB!XE?;V0s`dNd2AA@=80Dn-*%Z{3WrfTq>1DtaTsnG`naHMadD*+F3YV}_ z7vMvyMecFT;*5Zqg~ipN{&>T(OTRZjo4(l=|J$2P?yE)lvK$p(CwiWY7fCT;-MO;t z8*{AS=lVRK&J}I&#QJnv9trhyYj(%Uad9*zFyzcJq?qAjyXk@yPhH{+skyH0j z8QI(}UIoKQ#4pa=$}1#!CZT8}7+*W-7$>}=GY<-Aj13lO7*Vslg!is_jh(^Jyg{M5vsS%UprZT||MZNFwyoOG6CK&TD7>&j(|1 z!uBjXKkSdb9Sy$|4gWToJ%WA7yPIO$)peG_>V~ns5VeCj^G~~A*sHYwB2dOfi4I=7 zd3Hz}*2JqF|Ht%lRen2~{=m3M;ALt0PgLy@ySurCC(9a=0#s_NYc8hNc&VJ@mW0P^ zv5{>-*(r)WP@$!kwXdC=?XT6#S32I0=;cZ-vKJSq%=r28QF&i{f7`JN4q5^ucG;;U zS)8ndk$bfcE)<Cn3K`n<}Ss&4ONSbm0d%q{1zZH6}X)?7^zP@1F|$bm*c*qF#&b%4QX4N4)?x#1}`U;VKjASxj2SlOQ4;9oA5REA-IU& z4moK1St>~vsM>`>bwL+_k!P4FRAa?hV4RvPK#)#rCFsju5l+BJYIb04JFskqoxu+W zliv+t)eLHw0bB~d85$SEk)WM}YA{=x{)_iM57I?^XKKIYS>@H$BOObvm4f9|&e+o} zRJ%}di%NK@;p}drfNQSZbc(R#JO`qnL*+nYyBqULCxn+YFHr$5&fsEVl0_s+#7p+& z19EZp|66ZsI!PJ3b`3F*8dAjq!dVXVUZ5{?yVb76*#e9g6b$Mu)XR;Y@hlV$pp1yM zKo7XG!@@@rG~TLGB!XpZ7K(r3f3%M zV}Be?l2=sr;_A@Lzpww^M}O_+&QU9rg4i{r>I$coJ>8UZmoU;%dmLVh+CgFY?DdAb zZ}}%&=q}b5jdCNEv+PuK;jag?ABF72d*wU9xIE?eN!I3ON<#5?-LkzF4bN5v2QQ~5<(TB9VCa%xxQpfz0~lYs(GLGMs#jD-x3X`V8Lcy zexx^gtnPfYH@pQaZ?ET*#(Pc!mPG?Qv)52GPh_PUtNvlo$(bWOd5rD&QX{i=(B^`b zm+HRdP~WH(B%E!Mc&Zp{|GAov^S6%Or;fePdF-tfF}{vJ)EhoojT0_Zy-zx$`CsP% z_waSp8_m$vFg|w6F4~GUObfai80iVzgFFbw49XOiQ3+RCTU@eTiFvW+(~SLQp9+*` z3<{CJNU_o-Jm_A<`;3_-@TMo^>8O~leh}Y81GA;BaZSiu2A5NeA|JFNi!bK*zw1!eW z1ubAcDXpS|zTP6P<+z!cF;~!CD!`PDPX%^Rj*`<}tOfgtmmF9u%=QnP1MITSr=$Mf zaqxL>0-u0*wqPMu$ML?nQF6D-$x$jp=qH^q-z_Owe}}6P>`Hn()~+F+g@vx+f|6b3 zh+e>fKqHq@hOU9lvj0Ntp?w*lvr0T&$&f<&>GUFR~3m#znDG(oh*LobSV!PdSqeF3vvO9p&j_c_BR$F);XfcXI1?`ezdLNdxbT zJdL>td=x44LJj4ijS{nl%Jmo3ka6ZIdpVU$^049Qa-4k$ld+fogj>M25PY;Z-Y%OnE9s~4*_mU%7F5Z6c z$$(o#Q_!_C$~43hS(BlLJV)=M!pP7fNW-4BwuDrTl|*={jt><>!@$-Ts*#+Nf?cWb zGxU;nQWHMX8*h|-x}KULF%@JTaWi!*#l?T(?xry?T^MD{kc5_Itsx`2hJY4wDz{Nu zOk$%HEasY4)3==ZuTUig27I!+a(DtULXNZ@g4|xQkv4cCtJXKJGk2 zbVi6i=1VO5QtocveKOoqxjmE`0&O`vGSV=Ta*AlAL1Zhv?rA(1dpUmTl#DQjyDA4w zWMk*HSBXC3%)SXP6FWcHogip3#DeJJ3^8j4TIC_o=yLDFyBnmctHkX~GmNYn+FO`g zYKG7>xQiXx-zv$o)kM@S1tQdqvW$7j#X3krQKDwUXOH{uH%8uQj$f$uH|9@C*PV)8 zYD!Qib9SfH|733p3%~B87bm-ABqOn%pXd) zYn2*eqaDXa7}-}7dTa;NDO3AK?d{7Bxm+E<%S+Y1wTncyE@AT@5zPBUZ}zd?^ez8j zIabV2;%_d6U-M>z|NZ}MjnUR!>d0ufi5Q5Y{=u-#w*BvhApW8X*(B*Jw>~nu+F>oP zyHJphF3xyne7d-s8OFh8`VIXySyRC#8yQ2cnH8@cv#VceHGG}VT7CS!z1t?=Fg<>Y z7bj9zq@$TxvSExH3N(0f05w17)CSU*)4A5r=`)m4alq`De!$S8Na_31o9)IZPQ%*q}MfxjfgJZ8$MqsreSE#NxJa1+Q!EpAd zveA%*{teT3WD6;@i=1N~^plf6KpXu}jJRtt<{%g+DaJ?J4DA&ILlF!)v>J*ALufDz zU-ILIDL*;EV`e<+tOTy+PE3&;3KW+{&VK7fUMHXOlE+f-Hnith;>ErZckq#TYo4u! zI+GoSQ)1YX4o|0k8=IFlIOpgPZ((yodi>mNNVYrl8A3Enxq5jxUUE)iB;UDkOG9QF zLkjOFAuKFyK3G;cW{d;Hy5STJsaSCS#$YMr4iOghcjf1PFtWmu`Y4kWlD zoj^~Gah{XNQ>0Nf9JeuKO0*bWK5Xc?;Z!k%nPJMmuL4HPU#=1Fr>D|s=Q3+h@uba1 z+708#C>jjyc4I>_G8_4zVH(~qt`)*e#6_>9qbEp>ld$|8BNqlg$&k%;L$b$^bj%Ib z8K(T>rflXGvP#+SIT)&VQuOCO#ZW{;ZF55sxa~58PD4_aq;s!67?a>-e zdaVDQr?5eTz^dVzgQ|()@xg|W8$x0@Y+y)F94v#G2`>Z&5==!mHNKh@+>_cC7B+Fb zj;b<@ZaXvlv8`e8+q310GimoEGbEpuhqpgz*gc_VhVXpD z^WPX2$%(_;&yWck0gbex!DP>uVM6JdU(u7ki(D~z&lE%j4W5&wjk6)7QID{nhvY!E z8j>8}=>3MQt2yjH#MyjdvthE3ZJ#sL+C3N+ z8&0Wb5@wC`?eN5LH2n9E4TE2X#U@RNQg z44|qAQ>tPgXQKl*_Zg1WTYBhOhQ^Z(Up{8-ANjromyn?fp&IDO(TJs|7?Qamxktla XN$)>5c`(j700000NkvXXu0mjfLN#h7 diff --git a/Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/AppIcon-iPadPro@2x.png b/Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/AppIcon-iPadPro@2x.png deleted file mode 100644 index 94a32fd65c0f0b6cd8af035b2d10286b49c8732b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15226 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 diff --git a/Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/Contents.json b/Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 4f45077..0000000 --- a/Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" - }, - { - "filename" : "AppIcon-60@2x.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "filename" : "AppIcon.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "20x20" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "20x20" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "29x29" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "40x40" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" - }, - { - "filename" : "AppIcon-76@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "76x76" - }, - { - "filename" : "AppIcon-iPadPro@2x.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "83.5x83.5" - }, - { - "filename" : "transparent.png", - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/transparent.png b/Examples/VoiceMemos/VoiceMemos/Assets.xcassets/AppIcon.appiconset/transparent.png deleted file mode 100644 index bae1e0d7424038acc03d0981da831baf5752e49e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 221 zcmeAS@N?(olHy`uVBq!ia0y~yU;#2&7#M*hLwK5)9*|-x3GxeOU?`h>)&j_z=IP=X tQo;E4U?WJ$;RU~g Bool -} - -extension AudioPlayerClient: TestDependencyKey { - static let previewValue = Self( - play: { _ in - try await Task.sleep(for: .seconds(5)) - return true - } - ) - - static let testValue = Self() -} - -extension DependencyValues { - var audioPlayer: AudioPlayerClient { - get { self[AudioPlayerClient.self] } - set { self[AudioPlayerClient.self] = newValue } - } -} diff --git a/Examples/VoiceMemos/VoiceMemos/AudioPlayerClient/LiveAudioPlayerClient.swift b/Examples/VoiceMemos/VoiceMemos/AudioPlayerClient/LiveAudioPlayerClient.swift deleted file mode 100644 index 0768b55..0000000 --- a/Examples/VoiceMemos/VoiceMemos/AudioPlayerClient/LiveAudioPlayerClient.swift +++ /dev/null @@ -1,54 +0,0 @@ -@preconcurrency import AVFoundation -import Dependencies - -extension AudioPlayerClient: DependencyKey { - static let liveValue = Self { url in - let stream = AsyncThrowingStream { continuation in - do { - let delegate = try Delegate( - url: url, - didFinishPlaying: { successful in - continuation.yield(successful) - continuation.finish() - }, - decodeErrorDidOccur: { error in - continuation.finish(throwing: error) - } - ) - delegate.player.play() - continuation.onTermination = { _ in - delegate.player.stop() - } - } catch { - continuation.finish(throwing: error) - } - } - return try await stream.first(where: { _ in true }) ?? false - } -} - -private final class Delegate: NSObject, AVAudioPlayerDelegate, Sendable { - let didFinishPlaying: @Sendable (Bool) -> Void - let decodeErrorDidOccur: @Sendable (Error?) -> Void - let player: AVAudioPlayer - - init( - url: URL, - didFinishPlaying: @escaping @Sendable (Bool) -> Void, - decodeErrorDidOccur: @escaping @Sendable (Error?) -> Void - ) throws { - self.didFinishPlaying = didFinishPlaying - self.decodeErrorDidOccur = decodeErrorDidOccur - player = try AVAudioPlayer(contentsOf: url) - super.init() - player.delegate = self - } - - func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { - didFinishPlaying(flag) - } - - func audioPlayerDecodeErrorDidOccur(_ player: AVAudioPlayer, error: Error?) { - decodeErrorDidOccur(error) - } -} diff --git a/Examples/VoiceMemos/VoiceMemos/AudioRecorderClient/AudioRecorderClient.swift b/Examples/VoiceMemos/VoiceMemos/AudioRecorderClient/AudioRecorderClient.swift deleted file mode 100644 index 807c014..0000000 --- a/Examples/VoiceMemos/VoiceMemos/AudioRecorderClient/AudioRecorderClient.swift +++ /dev/null @@ -1,43 +0,0 @@ -import ComposableArchitecture -import Foundation - -@DependencyClient -struct AudioRecorderClient { - var currentTime: @Sendable () async -> TimeInterval? - var requestRecordPermission: @Sendable () async -> Bool = { false } - var startRecording: @Sendable (_ url: URL) async throws -> Bool - var stopRecording: @Sendable () async -> Void -} - -extension AudioRecorderClient: TestDependencyKey { - static var previewValue: Self { - let isRecording = ActorIsolated(false) - let currentTime = ActorIsolated(0.0) - - return Self( - currentTime: { await currentTime.value }, - requestRecordPermission: { true }, - startRecording: { _ in - await isRecording.setValue(true) - while await isRecording.value { - try await Task.sleep(for: .seconds(1)) - await currentTime.withValue { $0 += 1 } - } - return true - }, - stopRecording: { - await isRecording.setValue(false) - await currentTime.setValue(0) - } - ) - } - - static let testValue = Self() -} - -extension DependencyValues { - var audioRecorder: AudioRecorderClient { - get { self[AudioRecorderClient.self] } - set { self[AudioRecorderClient.self] = newValue } - } -} diff --git a/Examples/VoiceMemos/VoiceMemos/AudioRecorderClient/LiveAudioRecorderClient.swift b/Examples/VoiceMemos/VoiceMemos/AudioRecorderClient/LiveAudioRecorderClient.swift deleted file mode 100644 index 7a381de..0000000 --- a/Examples/VoiceMemos/VoiceMemos/AudioRecorderClient/LiveAudioRecorderClient.swift +++ /dev/null @@ -1,105 +0,0 @@ -import AVFoundation -import Dependencies - -extension AudioRecorderClient: DependencyKey { - static var liveValue: Self { - let audioRecorder = AudioRecorder() - return Self( - currentTime: { await audioRecorder.currentTime }, - requestRecordPermission: { await AudioRecorder.requestPermission() }, - startRecording: { url in try await audioRecorder.start(url: url) }, - stopRecording: { await audioRecorder.stop() } - ) - } -} - -private actor AudioRecorder { - var delegate: Delegate? - var recorder: AVAudioRecorder? - - var currentTime: TimeInterval? { - guard - let recorder, - recorder.isRecording - else { return nil } - return recorder.currentTime - } - - static func requestPermission() async -> Bool { - await AVAudioApplication.requestRecordPermission() - } - - func stop() { - recorder?.stop() - try? AVAudioSession.sharedInstance().setActive(false) - } - - func start(url: URL) async throws -> Bool { - stop() - - let stream = AsyncThrowingStream { continuation in - do { - self.delegate = Delegate( - didFinishRecording: { flag in - continuation.yield(flag) - continuation.finish() - try? AVAudioSession.sharedInstance().setActive(false) - }, - encodeErrorDidOccur: { error in - continuation.finish(throwing: error) - try? AVAudioSession.sharedInstance().setActive(false) - } - ) - let recorder = try AVAudioRecorder( - url: url, - settings: [ - AVFormatIDKey: Int(kAudioFormatMPEG4AAC), - AVSampleRateKey: 44100, - AVNumberOfChannelsKey: 1, - AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue, - ] - ) - self.recorder = recorder - recorder.delegate = self.delegate - - continuation.onTermination = { [recorder = UncheckedSendable(recorder)] _ in - recorder.wrappedValue.stop() - } - - try AVAudioSession.sharedInstance().setCategory( - .playAndRecord, mode: .default, options: .defaultToSpeaker - ) - try AVAudioSession.sharedInstance().setActive(true) - self.recorder?.record() - } catch { - continuation.finish(throwing: error) - } - } - - for try await didFinish in stream { - return didFinish - } - throw CancellationError() - } -} - -private final class Delegate: NSObject, AVAudioRecorderDelegate, Sendable { - let didFinishRecording: @Sendable (Bool) -> Void - let encodeErrorDidOccur: @Sendable (Error?) -> Void - - init( - didFinishRecording: @escaping @Sendable (Bool) -> Void, - encodeErrorDidOccur: @escaping @Sendable (Error?) -> Void - ) { - self.didFinishRecording = didFinishRecording - self.encodeErrorDidOccur = encodeErrorDidOccur - } - - func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully flag: Bool) { - didFinishRecording(flag) - } - - func audioRecorderEncodeErrorDidOccur(_ recorder: AVAudioRecorder, error: Error?) { - encodeErrorDidOccur(error) - } -} diff --git a/Examples/VoiceMemos/VoiceMemos/Dependencies.swift b/Examples/VoiceMemos/VoiceMemos/Dependencies.swift deleted file mode 100644 index 6e6af45..0000000 --- a/Examples/VoiceMemos/VoiceMemos/Dependencies.swift +++ /dev/null @@ -1,28 +0,0 @@ -import Dependencies -import SwiftUI - -extension DependencyValues { - var openSettings: @Sendable () async -> Void { - get { self[OpenSettingsKey.self] } - set { self[OpenSettingsKey.self] = newValue } - } - - private enum OpenSettingsKey: DependencyKey { - typealias Value = @Sendable () async -> Void - - static let liveValue: @Sendable () async -> Void = { - await MainActor.run { - UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!) - } - } - } - - var temporaryDirectory: @Sendable () -> URL { - get { self[TemporaryDirectoryKey.self] } - set { self[TemporaryDirectoryKey.self] = newValue } - } - - private enum TemporaryDirectoryKey: DependencyKey { - static let liveValue: @Sendable () -> URL = { URL(fileURLWithPath: NSTemporaryDirectory()) } - } -} diff --git a/Examples/VoiceMemos/VoiceMemos/Helpers.swift b/Examples/VoiceMemos/VoiceMemos/Helpers.swift deleted file mode 100644 index 75e3ff0..0000000 --- a/Examples/VoiceMemos/VoiceMemos/Helpers.swift +++ /dev/null @@ -1,8 +0,0 @@ -import Foundation - -let dateComponentsFormatter: DateComponentsFormatter = { - let formatter = DateComponentsFormatter() - formatter.allowedUnits = [.minute, .second] - formatter.zeroFormattingBehavior = .pad - return formatter -}() diff --git a/Examples/VoiceMemos/VoiceMemos/Info.plist b/Examples/VoiceMemos/VoiceMemos/Info.plist deleted file mode 100644 index 23a53a8..0000000 --- a/Examples/VoiceMemos/VoiceMemos/Info.plist +++ /dev/null @@ -1,62 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIApplicationSceneManifest - - UIApplicationSupportsMultipleScenes - - UISceneConfigurations - - UIWindowSceneSessionRoleApplication - - - UISceneConfigurationName - Default Configuration - UISceneDelegateClassName - $(PRODUCT_MODULE_NAME).SceneDelegate - - - - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - NSMicrophoneUsageDescription - Your microphone will be used to record your speech when you press the "Start Recording" button. - - diff --git a/Examples/VoiceMemos/VoiceMemos/RecordingMemo.swift b/Examples/VoiceMemos/VoiceMemos/RecordingMemo.swift deleted file mode 100644 index 38ee80b..0000000 --- a/Examples/VoiceMemos/VoiceMemos/RecordingMemo.swift +++ /dev/null @@ -1,122 +0,0 @@ -import ComposableArchitecture -import SwiftUI - -@Reducer -struct RecordingMemo { - @ObservableState - struct State: Equatable, Sendable { - var date: Date - var duration: TimeInterval = 0 - var mode: Mode = .recording - var url: URL - - enum Mode { - case recording - case encoding - } - } - - enum Action: Sendable { - case audioRecorderDidFinish(Result) - case delegate(Delegate) - case finalRecordingTime(TimeInterval) - case onTask - case timerUpdated - case stopButtonTapped - - @CasePathable - enum Delegate: Sendable { - case didFinish(Result) - } - } - - struct Failed: Equatable, Error {} - - @Dependency(\.audioRecorder) var audioRecorder - @Dependency(\.continuousClock) var clock - - var body: some Reducer { - Reduce { state, action in - switch action { - case .audioRecorderDidFinish(.success(true)): - return .send(.delegate(.didFinish(.success(state)))) - - case .audioRecorderDidFinish(.success(false)): - return .send(.delegate(.didFinish(.failure(Failed())))) - - case let .audioRecorderDidFinish(.failure(error)): - return .send(.delegate(.didFinish(.failure(error)))) - - case .delegate: - return .none - - case let .finalRecordingTime(duration): - state.duration = duration - return .none - - case .stopButtonTapped: - state.mode = .encoding - return .run { send in - if let currentTime = await audioRecorder.currentTime() { - await send(.finalRecordingTime(currentTime)) - } - await audioRecorder.stopRecording() - } - - case .onTask: - return .run { [url = state.url] send in - async let startRecording: Void = send( - .audioRecorderDidFinish( - Result { try await audioRecorder.startRecording(url: url) } - ) - ) - for await _ in clock.timer(interval: .seconds(1)) { - await send(.timerUpdated) - } - await startRecording - } - - case .timerUpdated: - state.duration += 1 - return .none - } - } - } -} - -struct RecordingMemoView: View { - let store: StoreOf - - var body: some View { - VStack(spacing: 12) { - Text("Recording") - .font(.title) - .colorMultiply(Color(Int(store.duration).isMultiple(of: 2) ? .systemRed : .label)) - .animation(.easeInOut(duration: 0.5), value: store.duration) - - if let formattedDuration = dateComponentsFormatter.string(from: store.duration) { - Text(formattedDuration) - .font(.body.monospacedDigit().bold()) - .foregroundColor(.black) - } - - ZStack { - Circle() - .foregroundColor(Color(.label)) - .frame(width: 74, height: 74) - - Button { - store.send(.stopButtonTapped, animation: .default) - } label: { - RoundedRectangle(cornerRadius: 4) - .foregroundColor(Color(.systemRed)) - .padding(17) - } - .frame(width: 70, height: 70) - } - } - .task { - await store.send(.onTask).finish() - } - } -} diff --git a/Examples/VoiceMemos/VoiceMemos/VoiceMemo.swift b/Examples/VoiceMemos/VoiceMemos/VoiceMemo.swift deleted file mode 100644 index 28fdcb0..0000000 --- a/Examples/VoiceMemos/VoiceMemos/VoiceMemo.swift +++ /dev/null @@ -1,145 +0,0 @@ -import ComposableArchitecture -import SwiftUI - -@Reducer -struct VoiceMemo { - @ObservableState - struct State: Equatable, Identifiable { - var date: Date - var duration: TimeInterval - var mode = Mode.notPlaying - var title = "" - var url: URL - - var id: URL { url } - - @CasePathable - @dynamicMemberLookup - enum Mode: Equatable { - case notPlaying - case playing(progress: Double) - } - } - - enum Action { - case audioPlayerClient(Result) - case delegate(Delegate) - case playButtonTapped - case timerUpdated(TimeInterval) - case titleTextFieldChanged(String) - - @CasePathable - enum Delegate { - case playbackStarted - case playbackFailed - } - } - - @Dependency(\.audioPlayer) var audioPlayer - @Dependency(\.continuousClock) var clock - private enum CancelID { case play } - - var body: some Reducer { - Reduce { state, action in - switch action { - case .audioPlayerClient(.failure): - state.mode = .notPlaying - return .merge( - .cancel(id: CancelID.play), - .send(.delegate(.playbackFailed)) - ) - - case .audioPlayerClient: - state.mode = .notPlaying - return .cancel(id: CancelID.play) - - case .delegate: - return .none - - case .playButtonTapped: - switch state.mode { - case .notPlaying: - state.mode = .playing(progress: 0) - - return .run { [url = state.url] send in - await send(.delegate(.playbackStarted)) - - async let playAudio: Void = send( - .audioPlayerClient(Result { try await audioPlayer.play(url: url) }) - ) - - var start: TimeInterval = 0 - for await _ in clock.timer(interval: .milliseconds(500)) { - start += 0.5 - await send(.timerUpdated(start)) - } - - await playAudio - } - .cancellable(id: CancelID.play, cancelInFlight: true) - - case .playing: - state.mode = .notPlaying - return .cancel(id: CancelID.play) - } - - case let .timerUpdated(time): - switch state.mode { - case .notPlaying: - break - case .playing: - state.mode = .playing(progress: time / state.duration) - } - return .none - - case let .titleTextFieldChanged(text): - state.title = text - return .none - } - } - } -} - -struct VoiceMemoView: View { - @Bindable var store: StoreOf - - var body: some View { - let currentTime = - store.mode.playing.map { $0 * store.duration } ?? store.duration - HStack { - TextField( - "Untitled, \(store.date.formatted(date: .numeric, time: .shortened))", - text: $store.title.sending(\.titleTextFieldChanged) - ) - - Spacer() - - dateComponentsFormatter.string(from: currentTime).map { - Text($0) - .font(.footnote.monospacedDigit()) - .foregroundColor(Color(.systemGray)) - } - - Button { - store.send(.playButtonTapped) - } label: { - Image(systemName: store.mode.is(\.playing) ? "stop.circle" : "play.circle") - .font(.system(size: 22)) - } - } - .buttonStyle(.borderless) - .frame(maxHeight: .infinity, alignment: .center) - .padding(.horizontal) - .listRowBackground(store.mode.is(\.playing) ? Color(.systemGray6) : .clear) - .listRowInsets(EdgeInsets()) - .background( - Color(.systemGray5) - .frame(maxWidth: store.mode.is(\.playing) ? .infinity : 0) - .animation( - store.mode.is(\.playing) ? .linear(duration: store.duration) : nil, - value: store.mode.is(\.playing) - ), - alignment: .leading - ) - } -} diff --git a/Examples/VoiceMemos/VoiceMemos/VoiceMemos.swift b/Examples/VoiceMemos/VoiceMemos/VoiceMemos.swift deleted file mode 100644 index 8b08169..0000000 --- a/Examples/VoiceMemos/VoiceMemos/VoiceMemos.swift +++ /dev/null @@ -1,229 +0,0 @@ -import AVFoundation -import ComposableArchitecture -import SwiftUI - -@Reducer -struct VoiceMemos { - @ObservableState - struct State: Equatable { - @Presents var alert: AlertState? - var audioRecorderPermission = RecorderPermission.undetermined - @Presents var recordingMemo: RecordingMemo.State? - var voiceMemos: IdentifiedArrayOf = [] - - enum RecorderPermission { - case allowed - case denied - case undetermined - } - } - - enum Action: Sendable { - case alert(PresentationAction) - case onDelete(IndexSet) - case openSettingsButtonTapped - case recordButtonTapped - case recordPermissionResponse(Bool) - case recordingMemo(PresentationAction) - case voiceMemos(IdentifiedActionOf) - - enum Alert: Equatable {} - } - - @Dependency(\.audioRecorder.requestRecordPermission) var requestRecordPermission - @Dependency(\.date) var date - @Dependency(\.openSettings) var openSettings - @Dependency(\.temporaryDirectory) var temporaryDirectory - @Dependency(\.uuid) var uuid - - var body: some Reducer { - Reduce { state, action in - switch action { - case .alert: - return .none - - case let .onDelete(indexSet): - state.voiceMemos.remove(atOffsets: indexSet) - return .none - - case .openSettingsButtonTapped: - return .run { _ in - await openSettings() - } - - case .recordButtonTapped: - switch state.audioRecorderPermission { - case .undetermined: - return .run { send in - await send(.recordPermissionResponse(requestRecordPermission())) - } - - case .denied: - state.alert = AlertState { TextState("Permission is required to record voice memos.") } - return .none - - case .allowed: - state.recordingMemo = newRecordingMemo - return .none - } - - case let .recordingMemo(.presented(.delegate(.didFinish(.success(recordingMemo))))): - state.recordingMemo = nil - state.voiceMemos.insert( - VoiceMemo.State( - date: recordingMemo.date, - duration: recordingMemo.duration, - url: recordingMemo.url - ), - at: 0 - ) - return .none - - case .recordingMemo(.presented(.delegate(.didFinish(.failure)))): - state.alert = AlertState { TextState("Voice memo recording failed.") } - state.recordingMemo = nil - return .none - - case .recordingMemo: - return .none - - case let .recordPermissionResponse(permission): - state.audioRecorderPermission = permission ? .allowed : .denied - if permission { - state.recordingMemo = newRecordingMemo - return .none - } else { - state.alert = AlertState { TextState("Permission is required to record voice memos.") } - return .none - } - - case let .voiceMemos(.element(id: id, action: .delegate(delegateAction))): - switch delegateAction { - case .playbackFailed: - state.alert = AlertState { TextState("Voice memo playback failed.") } - return .none - case .playbackStarted: - for memoID in state.voiceMemos.ids where memoID != id { - state.voiceMemos[id: memoID]?.mode = .notPlaying - } - return .none - } - - case .voiceMemos: - return .none - } - } - .ifLet(\.$alert, action: \.alert) - .ifLet(\.$recordingMemo, action: \.recordingMemo) { - RecordingMemo() - } - .forEach(\.voiceMemos, action: \.voiceMemos) { - VoiceMemo() - } - } - - private var newRecordingMemo: RecordingMemo.State { - RecordingMemo.State( - date: date.now, - url: temporaryDirectory() - .appendingPathComponent(uuid().uuidString) - .appendingPathExtension("m4a") - ) - } -} - -struct VoiceMemosView: View { - @Bindable var store: StoreOf - - var body: some View { - NavigationStack { - VStack { - List { - ForEach(store.scope(state: \.voiceMemos, action: \.voiceMemos)) { store in - VoiceMemoView(store: store) - } - .onDelete { store.send(.onDelete($0)) } - } - - Group { - if let store = store.scope( - state: \.recordingMemo, action: \.recordingMemo.presented - ) { - RecordingMemoView(store: store) - } else { - RecordButton(permission: store.audioRecorderPermission) { - store.send(.recordButtonTapped, animation: .spring()) - } settingsAction: { - store.send(.openSettingsButtonTapped) - } - } - } - .padding() - .frame(maxWidth: .infinity) - .background(Color(white: 0.95)) - } - .alert($store.scope(state: \.alert, action: \.alert)) - .navigationTitle("Voice memos") - } - } -} - -struct RecordButton: View { - let permission: VoiceMemos.State.RecorderPermission - let action: () -> Void - let settingsAction: () -> Void - - var body: some View { - ZStack { - Group { - Circle() - .foregroundColor(Color(.label)) - .frame(width: 74, height: 74) - - Button(action: action) { - RoundedRectangle(cornerRadius: 35) - .foregroundColor(Color(.systemRed)) - .padding(2) - } - .frame(width: 70, height: 70) - } - .opacity(permission == .denied ? 0.1 : 1) - - if permission == .denied { - VStack(spacing: 10) { - Text("Recording requires microphone access.") - .multilineTextAlignment(.center) - Button("Open Settings", action: settingsAction) - } - .frame(maxWidth: .infinity, maxHeight: 74) - } - } - } -} - -#Preview { - VoiceMemosView( - store: Store( - initialState: VoiceMemos.State( - voiceMemos: [ - VoiceMemo.State( - date: Date(), - duration: 5, - mode: .notPlaying, - title: "Functions", - url: URL(string: "https://www.pointfree.co/functions")! - ), - VoiceMemo.State( - date: Date(), - duration: 5, - mode: .notPlaying, - title: "", - url: URL(string: "https://www.pointfree.co/untitled")! - ), - ] - ) - ) { - VoiceMemos() - } - ) -} diff --git a/Examples/VoiceMemos/VoiceMemos/VoiceMemosApp.swift b/Examples/VoiceMemos/VoiceMemos/VoiceMemosApp.swift deleted file mode 100644 index f4a2b92..0000000 --- a/Examples/VoiceMemos/VoiceMemos/VoiceMemosApp.swift +++ /dev/null @@ -1,15 +0,0 @@ -import ComposableArchitecture -import SwiftUI - -@main -struct VoiceMemosApp: App { - var body: some Scene { - WindowGroup { - VoiceMemosView( - store: Store(initialState: VoiceMemos.State()) { - VoiceMemos()._printChanges() - } - ) - } - } -} diff --git a/Examples/VoiceMemos/VoiceMemosTests/VoiceMemosTests.swift b/Examples/VoiceMemos/VoiceMemosTests/VoiceMemosTests.swift deleted file mode 100644 index 59bd241..0000000 --- a/Examples/VoiceMemos/VoiceMemosTests/VoiceMemosTests.swift +++ /dev/null @@ -1,457 +0,0 @@ -import ComposableArchitecture -import XCTest - -@testable import VoiceMemos - -let deadbeefID = UUID(uuidString: "DEADBEEF-DEAD-BEEF-DEAD-BEEFDEADBEEF")! -let deadbeefURL = URL(fileURLWithPath: "/tmp/DEADBEEF-DEAD-BEEF-DEAD-BEEFDEADBEEF.m4a") - -final class VoiceMemosTests: XCTestCase { - @MainActor - func testRecordAndPlayback() async throws { - let didFinish = AsyncThrowingStream.makeStream(of: Bool.self) - let clock = TestClock() - let store = TestStore(initialState: VoiceMemos.State()) { - VoiceMemos() - } withDependencies: { - $0.audioPlayer.play = { @Sendable _ in - try await clock.sleep(for: .milliseconds(2500)) - return true - } - $0.audioRecorder.currentTime = { 2.5 } - $0.audioRecorder.requestRecordPermission = { true } - $0.audioRecorder.startRecording = { @Sendable _ in - try await didFinish.stream.first { _ in true }! - } - $0.audioRecorder.stopRecording = { - didFinish.continuation.yield(true) - didFinish.continuation.finish() - } - $0.date = .constant(Date(timeIntervalSinceReferenceDate: 0)) - $0.continuousClock = clock - $0.temporaryDirectory = { URL(fileURLWithPath: "/tmp") } - $0.uuid = .constant(deadbeefID) - } - - await store.send(.recordButtonTapped) - await store.receive(\.recordPermissionResponse) { - $0.audioRecorderPermission = .allowed - $0.recordingMemo = RecordingMemo.State( - date: Date(timeIntervalSinceReferenceDate: 0), - mode: .recording, - url: deadbeefURL - ) - } - await store.send(\.recordingMemo.onTask) - await store.send(\.recordingMemo.stopButtonTapped) { - $0.recordingMemo?.mode = .encoding - } - await store.receive(\.recordingMemo.finalRecordingTime) { - $0.recordingMemo?.duration = 2.5 - } - await store.receive(\.recordingMemo.audioRecorderDidFinish.success) - await store.receive(\.recordingMemo.delegate.didFinish.success) { - $0.recordingMemo = nil - $0.voiceMemos = [ - VoiceMemo.State( - date: Date(timeIntervalSinceReferenceDate: 0), - duration: 2.5, - mode: .notPlaying, - title: "", - url: deadbeefURL - ), - ] - } - await store.send(\.voiceMemos[id: deadbeefURL].playButtonTapped) { - $0.voiceMemos[id: deadbeefURL]?.mode = .playing(progress: 0) - } - await store.receive(\.voiceMemos[id: deadbeefURL].delegate.playbackStarted) - await clock.run() - - await store.receive(\.voiceMemos[id: deadbeefURL].timerUpdated) { - $0.voiceMemos[id: deadbeefURL]?.mode = .playing(progress: 0.2) - } - await store.receive(\.voiceMemos[id: deadbeefURL].timerUpdated) { - $0.voiceMemos[id: deadbeefURL]?.mode = .playing(progress: 0.4) - } - await store.receive(\.voiceMemos[id: deadbeefURL].timerUpdated) { - $0.voiceMemos[id: deadbeefURL]?.mode = .playing(progress: 0.6) - } - await store.receive(\.voiceMemos[id: deadbeefURL].timerUpdated) { - $0.voiceMemos[id: deadbeefURL]?.mode = .playing(progress: 0.8) - } - await store.receive(\.voiceMemos[id: deadbeefURL].audioPlayerClient.success) { - $0.voiceMemos[id: deadbeefURL]?.mode = .notPlaying - } - } - - @MainActor - func testRecordMemoHappyPath() async throws { - let didFinish = AsyncThrowingStream.makeStream(of: Bool.self) - let clock = TestClock() - let store = TestStore(initialState: VoiceMemos.State()) { - VoiceMemos() - } withDependencies: { - $0.audioRecorder.currentTime = { 2.5 } - $0.audioRecorder.requestRecordPermission = { true } - $0.audioRecorder.startRecording = { @Sendable _ in - try await didFinish.stream.first { _ in true }! - } - $0.audioRecorder.stopRecording = { - didFinish.continuation.yield(true) - didFinish.continuation.finish() - } - $0.date = .constant(Date(timeIntervalSinceReferenceDate: 0)) - $0.continuousClock = clock - $0.temporaryDirectory = { URL(fileURLWithPath: "/tmp") } - $0.uuid = .constant(UUID(uuidString: "DEADBEEF-DEAD-BEEF-DEAD-BEEFDEADBEEF")!) - } - - await store.send(.recordButtonTapped) - await clock.advance() - await store.receive(\.recordPermissionResponse) { - $0.audioRecorderPermission = .allowed - $0.recordingMemo = RecordingMemo.State( - date: Date(timeIntervalSinceReferenceDate: 0), - mode: .recording, - url: URL(fileURLWithPath: "/tmp/DEADBEEF-DEAD-BEEF-DEAD-BEEFDEADBEEF.m4a") - ) - } - let recordingMemoTask = await store.send(\.recordingMemo.onTask) - await clock.advance(by: .seconds(1)) - await store.receive(\.recordingMemo.timerUpdated) { - $0.recordingMemo?.duration = 1 - } - await clock.advance(by: .seconds(1)) - await store.receive(\.recordingMemo.timerUpdated) { - $0.recordingMemo?.duration = 2 - } - await clock.advance(by: .milliseconds(500)) - await store.send(\.recordingMemo.stopButtonTapped) { - $0.recordingMemo?.mode = .encoding - } - await store.receive(\.recordingMemo.finalRecordingTime) { - $0.recordingMemo?.duration = 2.5 - } - await store.receive(\.recordingMemo.audioRecorderDidFinish.success) - await store.receive(\.recordingMemo.delegate.didFinish.success) { - $0.recordingMemo = nil - $0.voiceMemos = [ - VoiceMemo.State( - date: Date(timeIntervalSinceReferenceDate: 0), - duration: 2.5, - mode: .notPlaying, - title: "", - url: URL(fileURLWithPath: "/tmp/DEADBEEF-DEAD-BEEF-DEAD-BEEFDEADBEEF.m4a") - ), - ] - } - await recordingMemoTask.cancel() - } - - @MainActor - func testPermissionDenied() async { - var didOpenSettings = false - let store = TestStore(initialState: VoiceMemos.State()) { - VoiceMemos() - } withDependencies: { - $0.audioRecorder.requestRecordPermission = { false } - $0.openSettings = { @MainActor in didOpenSettings = true } - } - - await store.send(.recordButtonTapped) - await store.receive(\.recordPermissionResponse) { - $0.alert = AlertState { TextState("Permission is required to record voice memos.") } - $0.audioRecorderPermission = .denied - } - await store.send(\.alert.dismiss) { - $0.alert = nil - } - await store.send(.openSettingsButtonTapped).finish() - XCTAssert(didOpenSettings) - } - - @MainActor - func testRecordMemoFailure() async { - struct SomeError: Error, Equatable {} - let didFinish = AsyncThrowingStream.makeStream(of: Bool.self) - let clock = TestClock() - let store = TestStore(initialState: VoiceMemos.State()) { - VoiceMemos() - } withDependencies: { - $0.audioRecorder.requestRecordPermission = { true } - $0.audioRecorder.startRecording = { @Sendable _ in - try await didFinish.stream.first { _ in true }! - } - $0.continuousClock = clock - $0.date = .constant(Date(timeIntervalSinceReferenceDate: 0)) - $0.temporaryDirectory = { URL(fileURLWithPath: "/tmp") } - $0.uuid = .constant(deadbeefID) - } - - await store.send(.recordButtonTapped) - await store.receive(\.recordPermissionResponse) { - $0.audioRecorderPermission = .allowed - $0.recordingMemo = RecordingMemo.State( - date: Date(timeIntervalSinceReferenceDate: 0), - mode: .recording, - url: deadbeefURL - ) - } - await store.send(\.recordingMemo.onTask) - - didFinish.continuation.finish(throwing: SomeError()) - await store.receive(\.recordingMemo.audioRecorderDidFinish.failure) - await store.receive(\.recordingMemo.delegate.didFinish.failure) { - $0.alert = AlertState { TextState("Voice memo recording failed.") } - $0.recordingMemo = nil - } - } - - /// Demonstration of how to write a non-exhaustive test for recording a memo and it failing to - /// record. - @MainActor - func testRecordMemoFailure_NonExhaustive() async { - struct SomeError: Error, Equatable {} - let didFinish = AsyncThrowingStream.makeStream(of: Bool.self) - let clock = TestClock() - let store = TestStore(initialState: VoiceMemos.State()) { - VoiceMemos() - } withDependencies: { - $0.audioRecorder.currentTime = { 2.5 } - $0.audioRecorder.requestRecordPermission = { true } - $0.audioRecorder.startRecording = { @Sendable _ in - try await didFinish.stream.first { _ in true }! - } - $0.continuousClock = clock - $0.date = .constant(Date(timeIntervalSinceReferenceDate: 0)) - $0.temporaryDirectory = { URL(fileURLWithPath: "/tmp") } - $0.uuid = .constant(deadbeefID) - } - store.exhaustivity = .off(showSkippedAssertions: true) - - await store.send(.recordButtonTapped) - await store.send(\.recordingMemo.onTask) - didFinish.continuation.finish(throwing: SomeError()) - await store.receive(\.recordingMemo.delegate.didFinish.failure) { - $0.alert = AlertState { TextState("Voice memo recording failed.") } - $0.recordingMemo = nil - } - } - - @MainActor - func testPlayMemoHappyPath() async { - let url = URL(fileURLWithPath: "pointfreeco/functions.m4a") - let clock = TestClock() - let store = TestStore( - initialState: VoiceMemos.State( - voiceMemos: [ - VoiceMemo.State( - date: Date(), - duration: 1.25, - mode: .notPlaying, - title: "", - url: url - ), - ] - ) - ) { - VoiceMemos() - } withDependencies: { - $0.audioPlayer.play = { @Sendable _ in - try await clock.sleep(for: .milliseconds(1250)) - return true - } - $0.continuousClock = clock - } - - await store.send(\.voiceMemos[id: url].playButtonTapped) { - $0.voiceMemos[id: url]?.mode = .playing(progress: 0) - } - await store.receive(\.voiceMemos[id: url].delegate.playbackStarted) - await clock.advance(by: .milliseconds(500)) - await store.receive(\.voiceMemos[id: url].timerUpdated) { - $0.voiceMemos[id: url]?.mode = .playing(progress: 0.4) - } - await clock.advance(by: .milliseconds(500)) - await store.receive(\.voiceMemos[id: url].timerUpdated) { - $0.voiceMemos[id: url]?.mode = .playing(progress: 0.8) - } - await clock.advance(by: .milliseconds(250)) - await store.receive(\.voiceMemos[id: url].audioPlayerClient.success) { - $0.voiceMemos[id: url]?.mode = .notPlaying - } - } - - @MainActor - func testPlayMemoFailure() async { - struct SomeError: Error, Equatable {} - - let url = URL(fileURLWithPath: "pointfreeco/functions.m4a") - let clock = TestClock() - let store = TestStore( - initialState: VoiceMemos.State( - voiceMemos: [ - VoiceMemo.State( - date: Date(), - duration: 30, - mode: .notPlaying, - title: "", - url: url - ), - ] - ) - ) { - VoiceMemos() - } withDependencies: { - $0.audioPlayer.play = { @Sendable _ in throw SomeError() } - $0.continuousClock = clock - } - - let task = await store.send(\.voiceMemos[id: url].playButtonTapped) { - $0.voiceMemos[id: url]?.mode = .playing(progress: 0) - } - await store.receive(\.voiceMemos[id: url].delegate.playbackStarted) - await store.receive(\.voiceMemos[id: url].audioPlayerClient.failure) { - $0.voiceMemos[id: url]?.mode = .notPlaying - } - await store.receive(\.voiceMemos[id: url].delegate.playbackFailed) { - $0.alert = AlertState { TextState("Voice memo playback failed.") } - } - await task.cancel() - } - - @MainActor - func testStopMemo() async { - let url = URL(fileURLWithPath: "pointfreeco/functions.m4a") - let store = TestStore( - initialState: VoiceMemos.State( - voiceMemos: [ - VoiceMemo.State( - date: Date(), - duration: 30, - mode: .playing(progress: 0.3), - title: "", - url: url - ), - ] - ) - ) { - VoiceMemos() - } - - await store.send(\.voiceMemos[id: url].playButtonTapped) { - $0.voiceMemos[id: url]?.mode = .notPlaying - } - } - - @MainActor - func testDeleteMemo() async { - let url = URL(fileURLWithPath: "pointfreeco/functions.m4a") - let store = TestStore( - initialState: VoiceMemos.State( - voiceMemos: [ - VoiceMemo.State( - date: Date(), - duration: 30, - mode: .playing(progress: 0.3), - title: "", - url: url - ), - ] - ) - ) { - VoiceMemos() - } - - await store.send(.onDelete([0])) { - $0.voiceMemos = [] - } - } - - @MainActor - func testDeleteMemos() async { - let date = Date() - let store = TestStore( - initialState: VoiceMemos.State( - voiceMemos: [ - VoiceMemo.State( - date: date, - duration: 30, - mode: .playing(progress: 0.3), - title: "Episode 1", - url: URL(fileURLWithPath: "pointfreeco/1.m4a") - ), - VoiceMemo.State( - date: date, - duration: 30, - mode: .playing(progress: 0.3), - title: "Episode 2", - url: URL(fileURLWithPath: "pointfreeco/2.m4a") - ), - VoiceMemo.State( - date: date, - duration: 30, - mode: .playing(progress: 0.3), - title: "Episode 3", - url: URL(fileURLWithPath: "pointfreeco/3.m4a") - ), - ] - ) - ) { - VoiceMemos() - } - - await store.send(.onDelete([1])) { - $0.voiceMemos = [ - VoiceMemo.State( - date: date, - duration: 30, - mode: .playing(progress: 0.3), - title: "Episode 1", - url: URL(fileURLWithPath: "pointfreeco/1.m4a") - ), - VoiceMemo.State( - date: date, - duration: 30, - mode: .playing(progress: 0.3), - title: "Episode 3", - url: URL(fileURLWithPath: "pointfreeco/3.m4a") - ), - ] - } - } - - @MainActor - func testDeleteMemoWhilePlaying() async { - let url = URL(fileURLWithPath: "pointfreeco/functions.m4a") - let clock = TestClock() - let store = TestStore( - initialState: VoiceMemos.State( - voiceMemos: [ - VoiceMemo.State( - date: Date(), - duration: 10, - mode: .notPlaying, - title: "", - url: url - ), - ] - ) - ) { - VoiceMemos() - } withDependencies: { - $0.audioPlayer.play = { @Sendable _ in try await Task.never() } - $0.continuousClock = clock - } - - await store.send(\.voiceMemos[id: url].playButtonTapped) { - $0.voiceMemos[id: url]?.mode = .playing(progress: 0) - } - await store.receive(\.voiceMemos[id: url].delegate.playbackStarted) - await store.send(.onDelete([0])) { - $0.voiceMemos = [] - } - await store.finish() - } -} diff --git a/Package.swift b/Package.swift index 79b3211..846743b 100644 --- a/Package.swift +++ b/Package.swift @@ -17,7 +17,11 @@ let package = Package( dependencies: [ ], targets: [ - .target(name: "VDStore", dependencies: []), + .target( + name: "VDStore", + dependencies: [ + ] + ), .testTarget(name: "VDStoreTests", dependencies: ["VDStore"]), ] ) diff --git a/README.md b/README.md index b6810c8..8d52c45 100644 --- a/README.md +++ b/README.md @@ -89,8 +89,8 @@ Also `@Actions` make all your `async` methods cancellable. @Actions extension Store { + @CancelInFlight func updateRates() async { - cancel(Self.updateRates) state.isLoading = true defer { state.isLoading = false } do { @@ -164,7 +164,7 @@ import PackageDescription let package = Package( name: "SomeProject", dependencies: [ - .package(url: "https://github.com/dankinsoid/VDStore.git", from: "0.30.0") + .package(url: "https://github.com/dankinsoid/VDStore.git", from: "0.31.0") ], targets: [ .target(name: "SomeProject", dependencies: ["VDStore"]) diff --git a/Sources/VDStore/Action.swift b/Sources/VDStore/Action.swift index 29e3b44..06671f0 100644 --- a/Sources/VDStore/Action.swift +++ b/Sources/VDStore/Action.swift @@ -60,10 +60,11 @@ public extension Store.Action { init( id: StoreActionID, + cancelInFlight: Bool = false, action: @escaping @Sendable (Store) -> @MainActor (Args) async -> T ) where Res == Task { self.init(id: id) { store, args in - store.task(id: id) { + store.task(id: id, cancelInFlight: cancelInFlight) { await action(store)(args) } } @@ -71,10 +72,11 @@ public extension Store.Action { init( id: StoreActionID, + cancelInFlight: Bool = false, action: @escaping @Sendable (Store) -> @MainActor (Args) async throws -> T ) where Res == Task { self.init(id: id) { store, args in - store.task(id: id) { + store.task(id: id, cancelInFlight: cancelInFlight) { try await action(store)(args) } } @@ -254,11 +256,13 @@ public extension Store { file: String = #fileID, line: UInt = #line, from function: String = #function, + cancelInFlight: Bool = false, action: @MainActor @escaping () async throws -> Res ) async throws -> Res { try await execute( Action>( id: id ?? StoreActionID(name: "anonymous", fileID: file, line: line), + cancelInFlight: cancelInFlight, action: { _ in { _ in try await action() } } @@ -276,11 +280,13 @@ public extension Store { file: String = #fileID, line: UInt = #line, from function: String = #function, + cancelInFlight: Bool = false, action: @MainActor @escaping () async -> Res ) async -> Res { await execute( Action>( id: id ?? StoreActionID(name: "anonymous", fileID: file, line: line), + cancelInFlight: cancelInFlight, action: { _ in { _ in await action() } } diff --git a/Sources/VDStore/Dependencies/CancellableStorage.swift b/Sources/VDStore/Dependencies/CancellableStorage.swift index de0d8b2..3bb8932 100644 --- a/Sources/VDStore/Dependencies/CancellableStorage.swift +++ b/Sources/VDStore/Dependencies/CancellableStorage.swift @@ -8,8 +8,7 @@ extension StoreDIValues { } /// Stores cancellables for Combine subscriptions. - @MainActor - public var cancellableSet: Set { + @MainActor public var cancellableSet: Set { get { cancellableStorage.set } nonmutating set { cancellableStorage.set = newValue } } diff --git a/Sources/VDStore/Dependencies/TasksStorage.swift b/Sources/VDStore/Dependencies/TasksStorage.swift index c811359..479e6ab 100644 --- a/Sources/VDStore/Dependencies/TasksStorage.swift +++ b/Sources/VDStore/Dependencies/TasksStorage.swift @@ -10,13 +10,13 @@ public extension StoreDIValues { } /// The storage of async tasks. Allows to store and cancel tasks. -@MainActor public final class TasksStorage { /// The shared instance of the storage. public static let shared = TasksStorage() + private let lock = NSRecursiveLock() - private var tasks: [AnyHashable: CancellableTask] = [:] + private var tasks: [AnyHashable: [UUID: CancellableTask]] = [:] var count: Int { tasks.count } @@ -24,25 +24,39 @@ public final class TasksStorage { /// Cancel a task by its cancellation id. public func cancel(id: AnyHashable) { - tasks[id]?.cancel() - remove(id: id) + lock.lock() + tasks[id]?.forEach { $0.value.cancel() } + tasks[id] = nil + lock.unlock() } - fileprivate func add(for id: AnyHashable, _ task: Task) { - cancel(id: id) - var isFinished = false - Task { [weak self] in - _ = try? await task.value - self?.remove(id: id) - isFinished = true + fileprivate func add(for id: AnyHashable, _ task: Task, cancelInFlight: Bool) { + if cancelInFlight { + cancel(id: id) } - if !isFinished { - tasks[id] = task + let uuid = UUID() + Task { [self] in + addTask(task, id: id, uuid: uuid) + defer { + remove(id: id, uuid: uuid) + } + _ = try await task.value } } - private func remove(id: AnyHashable) { - tasks[id] = nil + private func addTask(_ task: Task, id: AnyHashable, uuid: UUID) { + lock.lock() + tasks[id, default: [:]][uuid] = task + lock.unlock() + } + + private func remove(id: AnyHashable, uuid: UUID) { + lock.lock() + tasks[id]?[uuid] = nil + if tasks[id]?.isEmpty == true { + tasks[id] = nil + } + lock.unlock() } } @@ -56,24 +70,38 @@ extension Task: CancellableTask {} public extension Store { /// Create a throwing task with cancellation id. + /// - Parameters: + /// - id: The task's identifier. + /// - cancelInFlight: Determines if any in-flight tasks with the same identifier should be + /// canceled before starting this new one. + /// - task: The async throwing task. @discardableResult func task( id: AnyHashable, - _ task: @escaping @Sendable () async throws -> T + cancelInFlight: Bool = false, + _ task: @MainActor @escaping @Sendable () async throws -> T ) -> Task { - Task { - try await withDIValues(operation: task) + withDIValues { + Task(operation: task) + .store(in: di.tasksStorage, id: id, cancelInFlight: cancelInFlight) } - .store(in: di.tasksStorage, id: id) } /// Create a task with cancellation id. + /// - Parameters: + /// - id: The task's identifier. + /// - cancelInFlight: Determines if any in-flight tasks with the same identifier should be canceled before starting this new one. + /// - task: The async task. @discardableResult func task( id: AnyHashable, - _ task: @escaping @Sendable () async -> T + cancelInFlight: Bool = false, + _ task: @MainActor @escaping @Sendable () async -> T ) -> Task { - Task(operation: task).store(in: di.tasksStorage, id: id) + withDIValues { + Task(operation: task) + .store(in: di.tasksStorage, id: id, cancelInFlight: cancelInFlight) + } } /// Cancel an async store action. @@ -97,10 +125,14 @@ public extension Store { public extension Task { /// Store the task in the storage by it cancellation id. + /// - Parameters: + /// - id: The task's identifier. + /// - cancelInFlight: Determines if any in-flight tasks with the same identifier should be + /// canceled before starting this new one. @MainActor @discardableResult - func store(in storage: TasksStorage, id: AnyHashable) -> Task { - storage.add(for: id, self) + func store(in storage: TasksStorage, id: AnyHashable, cancelInFlight: Bool = false) -> Task { + storage.add(for: id, self, cancelInFlight: cancelInFlight) return self } } diff --git a/Sources/VDStore/Macros.swift b/Sources/VDStore/Macros.swift index 7fc75b2..2352fe1 100644 --- a/Sources/VDStore/Macros.swift +++ b/Sources/VDStore/Macros.swift @@ -8,6 +8,11 @@ import Foundation @attached(member, names: arbitrary) public macro Actions() = #externalMacro(module: "VDStoreMacros", type: "ActionsMacro") +/// Determines if any in-flight executions of the function should be canceled before starting this new one. +/// Works within `@Actions` extension only. +@attached(peer, names: arbitrary) +public macro CancelInFlight() = #externalMacro(module: "VDStoreMacros", type: "CancelInFlightMacro") + /// Creates an store DI variable and adds getters and setters. /// The initial value of the variable becomes the default value. @attached(accessor, names: named(get), named(set)) diff --git a/Sources/VDStore/Store.swift b/Sources/VDStore/Store.swift index baefdb6..d242a57 100644 --- a/Sources/VDStore/Store.swift +++ b/Sources/VDStore/Store.swift @@ -1,5 +1,5 @@ import Combine -import Foundation +import SwiftUI /// A store represents the runtime that powers the application. It is the object that you will pass /// around to views that need to interact with the application. @@ -82,7 +82,7 @@ import Foundation /// /// ### Thread safety /// -/// The `Store` class is isolated to main thread by @MainActor attribute. +/// The `Store` class is isolated to main actor by @MainActor attribute. @propertyWrapper @dynamicMemberLookup @MainActor @@ -333,16 +333,21 @@ public struct Store: Sendable { public extension Store where State: MutableCollection { - nonisolated subscript(_ index: State.Index) -> Store { - scope(index) - } - - nonisolated func scope(_ index: State.Index) -> Store { - scope { - $0[index] - } set: { - $0[index] = $1 - } + subscript(index: State.Index, or defaultValue: State.Element) -> Store { + scope( + get: { state in + guard state.indices.contains(index) else { + return defaultValue + } + return state[index] + }, + set: { state, newValue in + guard state.indices.contains(index) else { + return + } + state[index] = newValue + } + ) } } @@ -377,5 +382,7 @@ private extension Store { } } -@available(macOS 14.0, iOS 17.0, watchOS 10.0, tvOS 17.0, *) -extension Store: Observable {} +extension Store: Identifiable where State: Identifiable { + + public var id: State.ID { state.id } +} diff --git a/Sources/VDStore/StoreDIValues.swift b/Sources/VDStore/StoreDIValues.swift index 9c97ac6..bf2e16a 100644 --- a/Sources/VDStore/StoreDIValues.swift +++ b/Sources/VDStore/StoreDIValues.swift @@ -3,8 +3,7 @@ import Foundation /// The storage of injected dependencies. public struct StoreDIValues { - @TaskLocal - public static var current = StoreDIValues() + @TaskLocal public static var current = StoreDIValues() typealias Key = PartialKeyPath diff --git a/Sources/VDStore/StoreExtensions/ForEach.swift b/Sources/VDStore/StoreExtensions/ForEach.swift deleted file mode 100644 index 0963986..0000000 --- a/Sources/VDStore/StoreExtensions/ForEach.swift +++ /dev/null @@ -1,18 +0,0 @@ -import Foundation - -public extension Store where State: MutableCollection { - - @MainActor - func forEach(_ operation: (Store) throws -> Void) rethrows { - for index in state.indices { - try operation(self[index]) - } - } - - @MainActor - func forEach(_ operation: (Store) async throws -> Void) async rethrows { - for index in state.indices { - try await operation(self[index]) - } - } -} diff --git a/Sources/VDStore/StoreExtensions/OnChange.swift b/Sources/VDStore/StoreExtensions/OnChange.swift index 372eb0d..a62f92d 100644 --- a/Sources/VDStore/StoreExtensions/OnChange.swift +++ b/Sources/VDStore/StoreExtensions/OnChange.swift @@ -11,8 +11,11 @@ public extension Store { $0 } set: { let oldValue = $0[keyPath: keyPath] + let newValue = $1[keyPath: keyPath] $0 = $1 - operation(oldValue, $1[keyPath: keyPath], &$0) + if !isDuplicate(oldValue, newValue) { + operation(oldValue, newValue, &$0) + } } } diff --git a/Sources/VDStore/Utils/DIPublisher.swift b/Sources/VDStore/Utils/DIPublisher.swift index c6cabf3..b05fb48 100644 --- a/Sources/VDStore/Utils/DIPublisher.swift +++ b/Sources/VDStore/Utils/DIPublisher.swift @@ -48,8 +48,8 @@ struct DISubscriber: Subscriber { } func execute(_ operation: () -> T) -> T { -// StoreDIValues.$current.withValue(values) { - operation() -// } + StoreDIValues.$current.withValue(values) { + operation() + } } } diff --git a/Sources/VDStore/Utils/StoreBox.swift b/Sources/VDStore/Utils/StoreBox.swift index 2ba01d1..e00c92f 100644 --- a/Sources/VDStore/Utils/StoreBox.swift +++ b/Sources/VDStore/Utils/StoreBox.swift @@ -10,23 +10,19 @@ struct StoreBox: Publisher { nonmutating set { setter(newValue) } } - let willSet: AnyPublisher - let startUpdate: () -> Void - let endUpdate: () -> Void - let forceUpdate: () -> Void + var willSet: AnyPublisher { root.willSetPublisher } + + private let root: StoreRootBoxType private let getter: () -> Output private let setter: (Output) -> Void private let valuePublisher: AnyPublisher init(_ value: Output) { let rootBox = StoreRootBox(value) - willSet = rootBox.willSetPublisher + root = rootBox valuePublisher = rootBox.eraseToAnyPublisher() getter = { rootBox.state } setter = { rootBox.state = $0 } - startUpdate = rootBox.startUpdate - endUpdate = rootBox.endUpdate - forceUpdate = rootBox.forceUpdateIfNeeded } init( @@ -34,25 +30,34 @@ struct StoreBox: Publisher { get: @escaping (T) -> Output, set: @escaping (inout T, Output) -> Void ) { + root = parent.root valuePublisher = parent.valuePublisher.map(get).eraseToAnyPublisher() - willSet = parent.willSet getter = { get(parent.getter()) } setter = { var state = parent.getter() set(&state, $0) parent.setter(state) } - startUpdate = parent.startUpdate - endUpdate = parent.endUpdate - forceUpdate = parent.forceUpdate } + func startUpdate() { root.startUpdate() } + func endUpdate() { root.endUpdate() } + func forceUpdate() { root.forceUpdateIfNeeded() } + func receive(subscriber: S) where S: Subscriber, Never == S.Failure, Output == S.Input { valuePublisher.receive(subscriber: subscriber) } } -private final class StoreRootBox: Publisher { +private protocol StoreRootBoxType { + + var willSetPublisher: AnyPublisher { get } + func startUpdate() + func endUpdate() + func forceUpdateIfNeeded() +} + +private final class StoreRootBox: StoreRootBoxType, Publisher { typealias Output = State typealias Failure = Never diff --git a/Sources/VDStore/ViewStore.swift b/Sources/VDStore/ViewStore.swift index 66707fc..6f15b6f 100644 --- a/Sources/VDStore/ViewStore.swift +++ b/Sources/VDStore/ViewStore.swift @@ -26,6 +26,8 @@ public struct ViewStore: DynamicProperty { result = observable.wrappedValue.store case let .store(store): result = store + case let .state(state): + result = state.wrappedValue } return result.di(transformDI) } @@ -37,6 +39,10 @@ public struct ViewStore: DynamicProperty { public init(_ store: Store) { if store.di.isViewStore { property = .store(store) + } else if #available(macOS 14.0, iOS 17.0, watchOS 10.0, tvOS 17.0, *) { + property = .state( + SwiftUI.State(wrappedValue: store.di(\.isViewStore, true)) + ) } else { property = .stateObject( StateObject( @@ -54,6 +60,7 @@ public struct ViewStore: DynamicProperty { private enum Property: DynamicProperty { case stateObject(StateObject) + case state(SwiftUI.State>) case store(Store) } diff --git a/Sources/VDStoreMacros/ActionsMacro.swift b/Sources/VDStoreMacros/ActionsMacro.swift index f10acdd..544cbba 100644 --- a/Sources/VDStoreMacros/ActionsMacro.swift +++ b/Sources/VDStoreMacros/ActionsMacro.swift @@ -45,7 +45,7 @@ public struct ActionsMacro: MemberAttributeMacro, MemberMacro { } } -public struct ActionMacro: PeerMacro { +public struct CancelInFlightMacro: PeerMacro { public static func expansion( of node: AttributeSyntax, @@ -53,9 +53,12 @@ public struct ActionMacro: PeerMacro { in context: some MacroExpansionContext ) throws -> [DeclSyntax] { guard let funcDecl = declaration.as(FunctionDeclSyntax.self) else { - throw CustomError("@Action only works on functions") + throw CustomError("@CancelInFlight only works on functions") } - return try VDStoreMacros.expansion(of: node, funcDecl: funcDecl, in: context) + guard funcDecl.signature.effectSpecifiers?.asyncSpecifier != nil else { + throw CustomError("@CancelInFlight only works on async functions") + } + return [] } } @@ -116,21 +119,24 @@ private func expansion( default: break } + let cancelInFlight = isAsync && funcDecl.containsAttribute("CancelInFlight") let lineNumber = context.location(of: funcDecl)?.line.description ?? "#line" - let staticVarDecl = try VariableDeclSyntax(""" - static var \(raw: funcDecl.name.text): \(raw: varType) { - Action( - id: StoreActionID(name: "\(raw: funcDecl.name.text)", fileID: #fileID, line: \(raw: lineNumber)), - action: \(raw: actionBody) - ) - } - """) + let staticVarDecl = try VariableDeclSyntax( + """ + static var \(raw: funcDecl.name.text): \(raw: varType) { + Action( + id: StoreActionID(name: "\(raw: funcDecl.name.text)", fileID: #fileID, line: \(raw: lineNumber)),\(raw: cancelInFlight ? "\n cancelInFlight: true," : "") + action: \(raw: actionBody) + ) + } + """) var executeDecl = funcDecl executeDecl.remove(attribute: "Action") + executeDecl.remove(attribute: "CancelInFlight") executeDecl.remove(attribute: "_disfavoredOverload") // executeDecl.add(attribute: "MainActor") - // executeDecl.modifiers.remove(at: privateIndex) + // executeDecl.modifiers.remove(at: privateIndex) var parameterList = executeDecl.signature.parameterClause.parameters.map { FunctionParameterSyntax( leadingTrivia: .newline, diff --git a/Sources/VDStoreMacros/Extensions.swift b/Sources/VDStoreMacros/Extensions.swift index 84d80a4..d5e73cf 100644 --- a/Sources/VDStoreMacros/Extensions.swift +++ b/Sources/VDStoreMacros/Extensions.swift @@ -16,6 +16,10 @@ extension SyntaxCollection { extension FunctionDeclSyntax { + func containsAttribute(_ attribute: String) -> Bool { + attributes.contains(where: { $0.as(AttributeSyntax.self)?.attributeName.description == attribute }) + } + mutating func remove(attribute: String) { if let i = attributes.firstIndex(where: { $0.as(AttributeSyntax.self)?.attributeName.description == attribute }) { attributes.remove(at: i) diff --git a/Sources/VDStoreMacros/VDStoreMacrosPlugin.swift b/Sources/VDStoreMacros/VDStoreMacrosPlugin.swift index 190daa4..c037acc 100644 --- a/Sources/VDStoreMacros/VDStoreMacrosPlugin.swift +++ b/Sources/VDStoreMacros/VDStoreMacrosPlugin.swift @@ -12,6 +12,7 @@ struct VDStoreMacrosPlugin: CompilerPlugin { let providingMacros: [Macro.Type] = [ ActionsMacro.self, + CancelInFlightMacro.self, StoreDIValueMacro.self, StoreDIValuesMacro.self, ] diff --git a/Tests/VDStoreTests/VDStoreTests.swift b/Tests/VDStoreTests/VDStoreTests.swift index ea21259..55a3f14 100644 --- a/Tests/VDStoreTests/VDStoreTests.swift +++ b/Tests/VDStoreTests/VDStoreTests.swift @@ -125,7 +125,13 @@ final class VDStoreTests: XCTestCase { func testTasksMacroCancel() async { let store = Store(Counter()) - let value = await store.asyncTask() + let value = await store.cancellableTask() + XCTAssertEqual(value, 6) + } + + func testTaskMacroCancelInFlight() async { + let store = Store(Counter()) + let value = await store.cancellableInFlightTask() XCTAssertEqual(value, 6) } @@ -307,11 +313,23 @@ extension Store { @Actions extension Store { - func asyncTask() async -> Int { + func cancellableTask() async -> Int { + for i in 0 ..< 10 { + guard !Task.isCancelled else { return i } + if i == 5 { + cancel(Self.cancellableTask) + } + } + return 10 + } + + @CancelInFlight + func cancellableInFlightTask(ignore: Bool = false) async -> Int { + guard !ignore else { return -1 } for i in 0 ..< 10 { guard !Task.isCancelled else { return i } if i == 5 { - cancel(Self.asyncTask) + _ = await cancellableInFlightTask(ignore: true) } } return 10 @@ -327,7 +345,7 @@ class MockSomeService: SomeService {} extension StoreDIValues { var someService: SomeService { - get { self[\.someService] ?? MockSomeService() } - set { self[\.someService] = newValue } + get { get(\.someService, or: MockSomeService()) } + set { set(\.someService, newValue) } } }