mirror of
https://github.com/marcogll/passkit-generator.git
synced 2026-03-15 18:25:24 +00:00
86 lines
1.8 KiB
TypeScript
86 lines
1.8 KiB
TypeScript
import { EOL } from "os";
|
|
|
|
// ************************************ //
|
|
// *** UTILS FOR PASS.STRINGS FILES *** //
|
|
// ************************************ //
|
|
|
|
/**
|
|
* Parses a string file to convert it to
|
|
* an object
|
|
*
|
|
* @param buffer
|
|
* @returns
|
|
*/
|
|
|
|
export function parse(buffer: Buffer) {
|
|
const fileAsString = buffer.toString("utf8");
|
|
const translationRowRegex = /"(?<key>.+)"\s+=\s+"(?<value>.+)";\n?/;
|
|
const commentRowRegex = /\/\*\s*(.+)\s*\*\//;
|
|
|
|
let translations: [placeholder: string, value: string][] = [];
|
|
let comments: string[] = [];
|
|
|
|
let blockStartPoint = 0;
|
|
let blockEndPoint = 0;
|
|
|
|
do {
|
|
if (
|
|
/** New Line, new life */
|
|
/\n/.test(fileAsString[blockEndPoint]) ||
|
|
/** EOF */
|
|
blockEndPoint === fileAsString.length
|
|
) {
|
|
let match: RegExpMatchArray;
|
|
|
|
const section = fileAsString.substring(
|
|
blockStartPoint,
|
|
blockEndPoint + 1,
|
|
);
|
|
|
|
if ((match = section.match(translationRowRegex))) {
|
|
const {
|
|
groups: { key, value },
|
|
} = match;
|
|
|
|
translations.push([key, value]);
|
|
} else if ((match = section.match(commentRowRegex))) {
|
|
const [, content] = match;
|
|
|
|
comments.push(content.trimEnd());
|
|
}
|
|
|
|
/** Skipping \n and going to the next block. */
|
|
blockEndPoint += 2;
|
|
blockStartPoint = blockEndPoint - 1;
|
|
} else {
|
|
blockEndPoint += 1;
|
|
}
|
|
} while (blockEndPoint <= fileAsString.length);
|
|
|
|
return {
|
|
translations,
|
|
comments,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Creates a strings file buffer
|
|
*
|
|
* @param translations
|
|
* @returns
|
|
*/
|
|
|
|
export function create(translations: { [key: string]: string }): Buffer {
|
|
const stringContents = [];
|
|
|
|
const translationsEntries = Object.entries(translations);
|
|
|
|
for (let i = 0; i < translationsEntries.length; i++) {
|
|
const [key, value] = translationsEntries[i];
|
|
|
|
stringContents.push(`"${key}" = "${value}";`);
|
|
}
|
|
|
|
return Buffer.from(stringContents.join(EOL));
|
|
}
|