Let importer determine output file name.
This commit is contained in:
parent
2b1f21dbab
commit
ac708f4ae2
4 changed files with 9 additions and 12 deletions
|
@ -10,6 +10,7 @@ enum FigmaErrors: Error {
|
||||||
class FigmaImporter: Importer {
|
class FigmaImporter: Importer {
|
||||||
let key: String
|
let key: String
|
||||||
let token: String
|
let token: String
|
||||||
|
let outputName: String
|
||||||
|
|
||||||
required init(source: String) throws {
|
required init(source: String) throws {
|
||||||
// https://www.figma.com/file/:key/:title
|
// https://www.figma.com/file/:key/:title
|
||||||
|
@ -23,6 +24,7 @@ class FigmaImporter: Importer {
|
||||||
}
|
}
|
||||||
|
|
||||||
key = url.pathComponents[2]
|
key = url.pathComponents[2]
|
||||||
|
outputName = url.pathComponents[3]
|
||||||
|
|
||||||
guard let token = ProcessInfo.processInfo.environment["FIGMA_TOKEN"] else {
|
guard let token = ProcessInfo.processInfo.environment["FIGMA_TOKEN"] else {
|
||||||
throw FigmaErrors.missingToken
|
throw FigmaErrors.missingToken
|
||||||
|
|
|
@ -3,6 +3,8 @@ protocol Importer {
|
||||||
|
|
||||||
func read() async throws -> [String: ColorDef]
|
func read() async throws -> [String: ColorDef]
|
||||||
|
|
||||||
|
var outputName: String { get }
|
||||||
|
|
||||||
static var option: String { get }
|
static var option: String { get }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,11 @@ import Foundation
|
||||||
|
|
||||||
struct ListImporter: Importer {
|
struct ListImporter: Importer {
|
||||||
let input: String
|
let input: String
|
||||||
|
var outputName: String
|
||||||
|
|
||||||
init(source: String) {
|
init(source: String) {
|
||||||
input = source
|
input = source
|
||||||
|
outputName = URL(fileURLWithPath: source).deletingPathExtension().lastPathComponent
|
||||||
}
|
}
|
||||||
|
|
||||||
func read() throws -> [String: ColorDef] {
|
func read() throws -> [String: ColorDef] {
|
||||||
|
|
|
@ -113,7 +113,7 @@ public final class MakeColors: AsyncParsableCommand, Context {
|
||||||
let generator = formatter.type.init(context: self)
|
let generator = formatter.type.init(context: self)
|
||||||
let fileWrapper = try generator.generate(data: data)
|
let fileWrapper = try generator.generate(data: data)
|
||||||
|
|
||||||
try writeOutput(fileWrapper)
|
try writeOutput(fileWrapper, name: output ?? "\(importer.outputName).\(formatter.type.defaultExtension)")
|
||||||
}
|
}
|
||||||
|
|
||||||
func dump(data: [String: ColorDef]) throws {
|
func dump(data: [String: ColorDef]) throws {
|
||||||
|
@ -133,7 +133,7 @@ public final class MakeColors: AsyncParsableCommand, Context {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeOutput(_ wrapper: FileWrapper) throws {
|
func writeOutput(_ wrapper: FileWrapper, name: String) throws {
|
||||||
if shouldWriteToStdout {
|
if shouldWriteToStdout {
|
||||||
guard wrapper.isRegularFile, let contents = wrapper.regularFileContents else {
|
guard wrapper.isRegularFile, let contents = wrapper.regularFileContents else {
|
||||||
throw Errors.cannotWriteWrapperToStdout
|
throw Errors.cannotWriteWrapperToStdout
|
||||||
|
@ -141,19 +141,10 @@ public final class MakeColors: AsyncParsableCommand, Context {
|
||||||
|
|
||||||
FileHandle.standardOutput.write(contents)
|
FileHandle.standardOutput.write(contents)
|
||||||
} else {
|
} else {
|
||||||
let writeURL = outputURL(extension: formatter.type.defaultExtension)
|
let writeURL = URL(fileURLWithPath: name)
|
||||||
try wrapper.write(to: writeURL, options: .atomic, originalContentsURL: nil)
|
try wrapper.write(to: writeURL, options: .atomic, originalContentsURL: nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var shouldWriteToStdout: Bool { output == "-" || (input == "-" && output == nil) }
|
var shouldWriteToStdout: Bool { output == "-" || (input == "-" && output == nil) }
|
||||||
|
|
||||||
func outputURL(extension: String) -> URL {
|
|
||||||
if let output = output {
|
|
||||||
return URL(fileURLWithPath: output)
|
|
||||||
} else {
|
|
||||||
let basename = URL(fileURLWithPath: input).deletingPathExtension().lastPathComponent
|
|
||||||
return URL(fileURLWithPath: basename).appendingPathExtension(`extension`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue