Skip to content

Commit 1985e7d

Browse files
committed
Fix crash when image contains cyrillic characters in name
Closes #44
1 parent f7c5740 commit 1985e7d

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

Sources/FigmaExport/Subcommands/ExportImages.swift

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -221,14 +221,14 @@ extension FigmaExportCommand {
221221

222222
// Download files to user's temp directory
223223
logger.info("Downloading remote files...")
224-
let remoteFiles = images.flatMap { asset -> [FileContents] in
225-
let lightFiles = makeRemoteFiles(
224+
let remoteFiles = try images.flatMap { asset -> [FileContents] in
225+
let lightFiles = try makeRemoteFiles(
226226
images: asset.light.images,
227227
dark: false,
228228
outputDirectory: tempDirectoryURL
229229
)
230-
let darkFiles = asset.dark.flatMap { darkImagePack -> [FileContents] in
231-
makeRemoteFiles(images: darkImagePack.images, dark: true, outputDirectory: tempDirectoryURL)
230+
let darkFiles = try asset.dark.flatMap { darkImagePack -> [FileContents] in
231+
try makeRemoteFiles(images: darkImagePack.images, dark: true, outputDirectory: tempDirectoryURL)
232232
} ?? []
233233
return lightFiles + darkFiles
234234
}
@@ -284,9 +284,12 @@ extension FigmaExportCommand {
284284
/// - images: Dictionary of images. Key = scale, value = image info
285285
/// - dark: Dark mode?
286286
/// - outputDirectory: URL of the output directory
287-
private func makeRemoteFiles(images: [Image], dark: Bool, outputDirectory: URL) -> [FileContents] {
288-
images.map { image -> FileContents in
289-
let fileURL = URL(string: "\(image.name).\(image.format)")!
287+
private func makeRemoteFiles(images: [Image], dark: Bool, outputDirectory: URL) throws -> [FileContents] {
288+
try images.map { image -> FileContents in
289+
guard let name = image.name.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed),
290+
let fileURL = URL(string: "\(name).\(image.format)") else {
291+
throw FigmaExportError.invalidFileName(image.name)
292+
}
290293
let scale = image.scale.value
291294
let dest = Destination(
292295
directory: outputDirectory

Sources/FigmaExport/main.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@ import Foundation
33

44
enum FigmaExportError: LocalizedError {
55

6+
case invalidFileName(String)
67
case stylesNotFound
78
case componentsNotFound
89
case accessTokenNotFound
910
case colorsAssetsFolderNotSpecified
1011

1112
var errorDescription: String? {
1213
switch self {
14+
case .invalidFileName(let name):
15+
return "File name is invalid: \(name)"
1316
case .stylesNotFound:
1417
return "Color/Text styles not found in the Figma file. Have you published Styles to the Library?"
1518
case .componentsNotFound:

0 commit comments

Comments
 (0)