diff --git a/spec/PKPass.ts b/spec/PKPass.ts index 7adce68..ffc6751 100644 --- a/spec/PKPass.ts +++ b/spec/PKPass.ts @@ -833,6 +833,16 @@ describe("PKPass", () => { expect(pass[filesSymbol]["en.lproj/pass.string"]).toBeUndefined(); expect(pass[localizationSymbol]["en"]).toBeUndefined(); }); + + it("should convert Windows paths to single UNIX slash", () => { + if (path.sep === "\\") { + pass.addBuffer("en.lproj\\icon@2x.png", Buffer.alloc(0)); + + expect(pass[filesSymbol]).toContain({ + "en.lproj/icon@2x.png": Buffer.alloc(0), + }); + } + }); }); describe("[importMetadataSymbol]", () => { diff --git a/src/PKPass.ts b/src/PKPass.ts index 75593ef..f7d5945 100644 --- a/src/PKPass.ts +++ b/src/PKPass.ts @@ -1,4 +1,5 @@ import { Stream } from "stream"; +import path from "path"; import FieldsArray from "./FieldsArray"; import Bundle, { filesSymbol } from "./Bundle"; import getModelFolderContents from "./getModelFolderContents"; @@ -435,6 +436,13 @@ export default class PKPass extends Bundle { return super.addBuffer(pathName, buffer); } + /** + * Converting Windows path to Unix path + * @example de.lproj\\icon.png => de.lproj/icon.png + */ + + const normalizedPathName = pathName.replace(path.sep, "/"); + /** * If a new pass.strings file is added, we want to * prevent it from being merged and, instead, save @@ -446,7 +454,7 @@ export default class PKPass extends Bundle { let match: RegExpMatchArray | null; - if ((match = pathName.match(translationsFileRegexp))) { + if ((match = normalizedPathName.match(translationsFileRegexp))) { const [, lang] = match; const parsedTranslations = Strings.parse(buffer).translations; @@ -460,7 +468,7 @@ export default class PKPass extends Bundle { return; } - return super.addBuffer(pathName, buffer); + return super.addBuffer(normalizedPathName, buffer); } /**