@messageformat/icu-messageformat-1
Version:
Compile ICU MessageFormat 1 sources into MessageFormat 2 formatters
42 lines (41 loc) • 1.47 kB
JavaScript
import { parse } from '@messageformat/parser';
import { MessageFormat } from 'messageformat';
import { MF1Functions } from "./functions.js";
import { mf1ToMessageData } from "./mf1-to-message-data.js";
/**
* Compile an ICU MessageFormat 1 message into a {@link MessageFormat} instance.
*
* ```js
* import { mf1ToMessage } from '@messageformat/icu-messageformat-1';
*
* const msg = mf1ToMessage('en', 'The total is {V, number, ::currency/EUR}.');
* msg.format({ V: 4.2 });
* ```
*
* ```js
* 'The total is €4.20.'
* ```
*
* @param locales - The locale to use for the message.
* @param source - An ICU MessageFormat message, either in its syntax representation,
* as an array of `@messageformat/parser` {@link https://messageformat.github.io/messageformat/api/parser.parse/ | AST tokens},
* or as a {@link MF.Message | Model.Message} data structure.
* @param options - See {@link MF1Options} and {@link MessageFormatOptions}
*/
export function mf1ToMessage(locales, source, { strict, ...opt } = {}) {
let msg;
if (typeof source === 'string') {
const ast = parse(source, { strict });
msg = mf1ToMessageData(ast);
}
else if (Array.isArray(source)) {
msg = mf1ToMessageData(source);
}
else {
msg = source;
}
opt.functions = opt.functions
? Object.assign(Object.create(null), MF1Functions, opt.functions)
: MF1Functions;
return new MessageFormat(locales, msg, opt);
}