feat: Working create command.

This commit is contained in:
2024-11-29 18:55:00 -05:00
parent 58e0f0e4b5
commit 84b002c997
8 changed files with 332 additions and 60 deletions

View File

@@ -1,6 +1,7 @@
import Dependencies
import DependenciesMacros
import Foundation
import ShellClient
public extension DependencyValues {
var cliClient: CliClient {
@@ -14,6 +15,23 @@ public struct CliClient: Sendable {
public var decoder: @Sendable () -> JSONDecoder = { .init() }
public var encoder: @Sendable () -> JSONEncoder = { .init() }
public var loadConfiguration: @Sendable () throws -> Configuration
public var runCommand: @Sendable ([String], Bool, ShellCommand.Shell) async throws -> Void
public func runCommand(
quiet: Bool,
shell: ShellCommand.Shell,
_ args: [String]
) async throws {
try await runCommand(args, quiet, shell)
}
public func runCommand(
quiet: Bool,
shell: ShellCommand.Shell,
_ args: String...
) async throws {
try await runCommand(args, quiet, shell)
}
}
extension CliClient: DependencyKey {
@@ -41,6 +59,22 @@ extension CliClient: DependencyKey {
}
return try .fromEnv(env, encoder: encoder, decoder: decoder)
} runCommand: { args, quiet, shell in
@Dependency(\.asyncShellClient) var shellClient
if !quiet {
try await shellClient.foreground(.init(
shell: shell,
environment: ProcessInfo.processInfo.environment,
in: nil,
args
))
}
try await shellClient.background(.init(
shell: shell,
environment: ProcessInfo.processInfo.environment,
in: nil,
args
))
}
}

View File

@@ -66,13 +66,13 @@ private struct LiveFileClient: @unchecked Sendable {
@Dependency(\.logger) var logger
logger.trace("Begin load file for: \(path(for: url))")
// if url.absoluteString.split(separator: ".json").count > 0 {
// // Handle json file.
// let data = try Data(contentsOf: url)
// let dict = (try? decoder.decode([String: String].self, from: data)) ?? [:]
// env.merge(dict, uniquingKeysWith: { $1 })
// return
// }
if url.absoluteString.contains(".json") {
// Handle json file.
let data = try Data(contentsOf: url)
let dict = (try? decoder.decode([String: String].self, from: data)) ?? [:]
env.merge(dict, uniquingKeysWith: { $1 })
return
}
let string = try String(contentsOfFile: path(for: url), encoding: .utf8)
@@ -82,7 +82,9 @@ private struct LiveFileClient: @unchecked Sendable {
for line in lines {
logger.trace("Line: \(line)")
let strippedLine = line.trimmingCharacters(in: .whitespacesAndNewlines)
let splitLine = strippedLine.split(separator: "=")
let splitLine = strippedLine.split(separator: "=").map {
$0.replacingOccurrences(of: "\"", with: "")
}
logger.trace("Split Line: \(splitLine)")
guard splitLine.count >= 2 else { continue }