Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 31 additions & 13 deletions Package.resolved

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,14 @@ let package = Package(
.package(url: "https://github.com/ReactiveX/RxSwift.git", from: "6.0.0"),
.package(url: "https://github.com/apple/swift-atomics.git", from: "1.0.2"),
.package(url: "https://github.com/apple/swift-collections", from: "1.1.0"),
.package(url: "https://github.com/VergeGroup/swift-concurrency-task-manager", from: "1.1.0"),
.package(url: "https://github.com/VergeGroup/swift-concurrency-task-manager", from: "3.0.0"),
.package(url: "https://github.com/VergeGroup/TypedComparator", from: "1.0.0"),
.package(url: "https://github.com/VergeGroup/Normalization", from: "1.2.1"),
.package(url: "https://github.com/VergeGroup/swift-macro-state-struct", from: "2.3.1"),
.package(url: "https://github.com/VergeGroup/Normalization", from: "2.0.0"),
.package(url: "https://github.com/VergeGroup/swift-macro-state-struct", from: "3.0.0"),

/// for testing
.package(url: "https://github.com/nalexn/ViewInspector.git", from: "0.10.0"),
.package(url: "https://github.com/swiftlang/swift-syntax.git", from: "600.0.0"),
.package(url: "https://github.com/swiftlang/swift-syntax.git", from: "602.0.0"),
.package(url: "https://github.com/pointfreeco/swift-macro-testing.git", from: "0.2.1")
],
targets: [
Expand Down
24 changes: 6 additions & 18 deletions Sources/Verge/Store/Store.swift
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ open class Store<State, Activity: Sendable>: EventEmitter<_StoreEvent<State, Act

// MARK: - Task

public let taskManager: TaskManagerActor = .init()
public let taskManager: TaskManager = .init()

let writer: Writer = .init()

Expand Down Expand Up @@ -265,9 +265,7 @@ open class Store<State, Activity: Sendable>: EventEmitter<_StoreEvent<State, Act

storeLifeCycleCancellable.cancel()

Task { [taskManager] in
await taskManager.cancelAll()
}
taskManager.cancelAll()
}

}
Expand Down Expand Up @@ -397,16 +395,11 @@ extension Store {
@discardableResult
public func task<Return>(
key: ConcurrencyTaskManager.TaskKey = .distinct(),
mode: ConcurrencyTaskManager.TaskManagerActor.Mode = .dropCurrent,
mode: ConcurrencyTaskManager.TaskManager.Mode = .dropCurrent,
priority: TaskPriority = .userInitiated,
@_inheritActorContext _ action: @Sendable @escaping () async throws -> Return
) -> Task<Return, Error> {

Task {
try await taskManager.task(key: key, mode: mode, priority: priority, action)
.value
}

return taskManager.task(key: key, mode: mode, priority: priority, action)
}

/**
Expand All @@ -427,16 +420,11 @@ extension Store {
@discardableResult
public func taskDetached<Return>(
key: ConcurrencyTaskManager.TaskKey = .distinct(),
mode: ConcurrencyTaskManager.TaskManagerActor.Mode = .dropCurrent,
mode: ConcurrencyTaskManager.TaskManager.Mode = .dropCurrent,
priority: TaskPriority = .userInitiated,
_ action: @Sendable @escaping () async throws -> Return
) -> Task<Return, Error> {

Task {
try await taskManager.taskDetached(key: key, mode: mode, priority: priority, action)
.value
}

return taskManager.taskDetached(key: key, mode: mode, priority: priority, action)
}

// MARK: - Internal
Expand Down
1 change: 0 additions & 1 deletion TaskManagerPlayground/TaskManagerPlayground/Book.swift
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import SwiftUI
import Verge
import VergeTaskManager

struct BookVergeTaskManager: View, PreviewProvider {
var body: some View {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import VergeNormalizationDerived
import XCTest
import os.lock

extension Store where State == DemoState {

Expand All @@ -24,10 +25,12 @@ final class VergeNormalizationDerivedTests: XCTestCase {
.table(.keyPath(\.book))
.derived(from: Book.TypedID.init("1"))

var received: [Book?] = []
let received: OSAllocatedUnfairLock<[Book?]> = .init(initialState: [])

derived.sinkState { value in
received.append(value.primitive.wrapped)
received.withLock {
$0.append(value.primitive.wrapped)
}
if value.primitive.wrapped != nil {
exp.fulfill()
}
Expand All @@ -42,7 +45,7 @@ final class VergeNormalizationDerivedTests: XCTestCase {

wait(for: [exp])

XCTAssertEqual(received, [nil, .init(rawID: "1", authorID: .init("muukii"))])
XCTAssertEqual(received.withLock { $0 }, [nil, .init(rawID: "1", authorID: .init("muukii"))])

withExtendedLifetime(derived, {})
}
Expand Down
9 changes: 6 additions & 3 deletions Tests/VergeTests/IsolatedContextTests.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@

import XCTest
import os.lock

@MainActor
fileprivate func isInMain() {}
Expand Down Expand Up @@ -42,17 +43,19 @@ final class IsolatedContextTests: XCTestCase {

let store = DemoStore()

var receivedState: DemoStore.State?
let receivedState: OSAllocatedUnfairLock<DemoStore.State?> = .init(initialState: nil)

let sub = store.sinkState { changes in
receivedState = changes.primitive
receivedState.withLock {
$0 = changes.primitive
}
}

store.commit {
$0.count = 100
}

XCTAssertEqual(receivedState?.count, 100)
XCTAssertEqual(receivedState.withLock { $0?.count }, 100)

withExtendedLifetime(sub, {})
}
Expand Down
Loading