Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 4x 14x 14x 14x 14x 14x 17x 17x 17x 14x 14x 4x 10x 12x 20x 12x | import { type TFunctionArgs } from "./interface";
export type TemplateMessageFn = (args: TFunctionArgs) => string;
export type LocaleTemplateMessageFns = Map<string, TemplateMessageFn | false>;
/**
* Create an interpreter function for template locale message.
*
* `"a {{b}} c"` => `` `a ${args.b} c` ``
*/
export const createTemplateMessageFn = (message: string): TemplateMessageFn | false => {
const slices: string[] = [];
const keys: string[] = [];
const matchArgs = /{{(\S+?)}}/gi;
let slice: RegExpExecArray | null;
let pointer = 0;
while ((slice = matchArgs.exec(message))) {
slices.push(message.slice(pointer, slice.index), "");
keys.push(slice[1]);
pointer = slice.index + slice[0].length;
}
slices.push(message.slice(pointer));
if (keys.length <= 0) {
return false;
}
return (args: TFunctionArgs): string => {
for (let i = keys.length - 1; i >= 0; i--) {
slices[i * 2 + 1] = args[keys[i]] ?? keys[i];
}
return slices.join("");
};
};
|