feat: Working create command.
This commit is contained in:
@@ -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
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user