@formatjs/icu-messageformat-parser
Version:
Hand-written ICU MessageFormat parser with compatible output as [`intl-messageformat-parser`](https://www.npmjs.com/package/intl-messageformat-parser) but 6 - 10 times as fast.
48 lines (47 loc) • 1.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parse = void 0;
var tslib_1 = require("tslib");
var error_1 = require("./error");
var parser_1 = require("./parser");
var types_1 = require("./types");
function pruneLocation(els) {
els.forEach(function (el) {
delete el.location;
if (types_1.isSelectElement(el) || types_1.isPluralElement(el)) {
for (var k in el.options) {
delete el.options[k].location;
pruneLocation(el.options[k].value);
}
}
else if (types_1.isNumberElement(el) && types_1.isNumberSkeleton(el.style)) {
delete el.style.location;
}
else if ((types_1.isDateElement(el) || types_1.isTimeElement(el)) &&
types_1.isDateTimeSkeleton(el.style)) {
delete el.style.location;
}
else if (types_1.isTagElement(el)) {
pruneLocation(el.children);
}
});
}
function parse(message, opts) {
if (opts === void 0) { opts = {}; }
opts = tslib_1.__assign({ shouldParseSkeletons: true, requiresOtherClause: true }, opts);
var result = new parser_1.Parser(message, opts).parse();
if (result.err) {
var error = SyntaxError(error_1.ErrorKind[result.err.kind]);
// @ts-expect-error Assign to error object
error.location = result.err.location;
// @ts-expect-error Assign to error object
error.originalMessage = result.err.message;
throw error;
}
if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {
pruneLocation(result.val);
}
return result.val;
}
exports.parse = parse;
tslib_1.__exportStar(require("./types"), exports);