spb/prisme Public MIT
Navigateur iOS intelligent — chaque page comprise localement avant d'être affichée. SwiftUI · WebKit · Foundation Models, 100% on-device.
Swift 96.7%
JavaScript 3.3%
1//2// IdentityContainerStore.swift3// Prisme4//5// Author: Simon-Pierre Boucher <contact@spboucher.ai>6//78import Foundation9import Observation10import WebKit1112/// Owns the list of identity containers and hands out their partitioned13/// `WKWebsiteDataStore`s. Container IDs are persisted in UserDefaults so the14/// same data stores are recovered across launches.15@MainActor16@Observable17final class IdentityContainerStore {18 private static let defaultsKey = "prisme.identityContainers"1920 private(set) var all: [IdentityContainer]2122 init() {23 if let data = UserDefaults.standard.data(forKey: Self.defaultsKey),24 let decoded = try? JSONDecoder().decode([IdentityContainer].self, from: data),25 !decoded.isEmpty {26 all = decoded27 } else {28 all = IdentityContainer.makeDefaults()29 persist()30 }31 }3233 func container(for id: IdentityContainer.ID) -> IdentityContainer? {34 all.first { $0.id == id }35 }3637 /// The partitioned data store for a container. Same UUID → same38 /// persistent store, fully isolated from every other container.39 func dataStore(for id: IdentityContainer.ID) -> WKWebsiteDataStore {40 WKWebsiteDataStore(forIdentifier: id)41 }4243 private func persist() {44 if let data = try? JSONEncoder().encode(all) {45 UserDefaults.standard.set(data, forKey: Self.defaultsKey)46 }47 }48}49