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 | 2x 14x 14x 14x 14x 14x 14x 17x 17x 17x 17x 14x 14x 4x 4x 10x 12x 20x 20x 12x 12x 10x | 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(""); }; }; |