@formatjs/icu-messageformat-parser 0.2.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +1 -1
- package/index.d.ts +2 -1
- package/index.d.ts.map +1 -1
- package/index.js +33 -6
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +34 -6
- package/lib/manipulator.d.ts +14 -0
- package/lib/manipulator.d.ts.map +1 -0
- package/lib/manipulator.js +52 -0
- package/lib/no-parser.d.ts +2 -0
- package/lib/no-parser.d.ts.map +1 -0
- package/lib/no-parser.js +3 -0
- package/lib/parser.d.ts +0 -7
- package/lib/parser.d.ts.map +1 -1
- package/lib/parser.js +5 -42
- package/lib/types.d.ts +1 -1
- package/lib/types.d.ts.map +1 -1
- package/manipulator.d.ts +14 -0
- package/manipulator.d.ts.map +1 -0
- package/manipulator.js +56 -0
- package/no-parser.d.ts +2 -0
- package/no-parser.d.ts.map +1 -0
- package/no-parser.js +7 -0
- package/package.json +2 -2
- package/parser.d.ts +0 -7
- package/parser.d.ts.map +1 -1
- package/parser.js +4 -42
- package/types.d.ts +1 -1
- package/types.d.ts.map +1 -1
package/LICENSE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
3
|
+
Copyright (c) 2021 FormatJS
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
6
|
|
package/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ParserOptions } from './parser';
|
|
2
|
-
|
|
2
|
+
import { MessageFormatElement } from './types';
|
|
3
|
+
export declare function parse(message: string, opts?: ParserOptions): MessageFormatElement[];
|
|
3
4
|
export * from './types';
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,aAAa,EAAC,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,aAAa,EAAC,MAAM,UAAU,CAAA;AAC9C,OAAO,EASL,oBAAoB,EACrB,MAAM,SAAS,CAAA;AAuBhB,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,0BAiB9D;AACD,cAAc,SAAS,CAAA"}
|
package/index.js
CHANGED
|
@@ -4,15 +4,42 @@ exports.parse = void 0;
|
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var error_1 = require("./error");
|
|
6
6
|
var parser_1 = require("./parser");
|
|
7
|
+
var types_1 = require("./types");
|
|
8
|
+
function pruneLocation(els) {
|
|
9
|
+
els.forEach(function (el) {
|
|
10
|
+
delete el.location;
|
|
11
|
+
if (types_1.isSelectElement(el) || types_1.isPluralElement(el)) {
|
|
12
|
+
for (var k in el.options) {
|
|
13
|
+
delete el.options[k].location;
|
|
14
|
+
pruneLocation(el.options[k].value);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
else if (types_1.isNumberElement(el) && types_1.isNumberSkeleton(el.style)) {
|
|
18
|
+
delete el.style.location;
|
|
19
|
+
}
|
|
20
|
+
else if ((types_1.isDateElement(el) || types_1.isTimeElement(el)) &&
|
|
21
|
+
types_1.isDateTimeSkeleton(el.style)) {
|
|
22
|
+
delete el.style.location;
|
|
23
|
+
}
|
|
24
|
+
else if (types_1.isTagElement(el)) {
|
|
25
|
+
pruneLocation(el.children);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
7
29
|
function parse(message, opts) {
|
|
30
|
+
if (opts === void 0) { opts = {}; }
|
|
31
|
+
opts = tslib_1.__assign({ shouldParseSkeletons: true }, opts);
|
|
8
32
|
var result = new parser_1.Parser(message, opts).parse();
|
|
9
|
-
if (result.
|
|
10
|
-
|
|
33
|
+
if (result.err) {
|
|
34
|
+
var error = SyntaxError(error_1.ErrorKind[result.err.kind]);
|
|
35
|
+
// @ts-expect-error Assign to error object
|
|
36
|
+
error.location = result.err.location;
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {
|
|
40
|
+
pruneLocation(result.val);
|
|
11
41
|
}
|
|
12
|
-
|
|
13
|
-
// @ts-expect-error Assign to error object
|
|
14
|
-
error.location = result.err.location;
|
|
15
|
-
throw error;
|
|
42
|
+
return result.val;
|
|
16
43
|
}
|
|
17
44
|
exports.parse = parse;
|
|
18
45
|
tslib_1.__exportStar(require("./types"), exports);
|
package/lib/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ParserOptions } from './parser';
|
|
2
|
-
|
|
2
|
+
import { MessageFormatElement } from './types';
|
|
3
|
+
export declare function parse(message: string, opts?: ParserOptions): MessageFormatElement[];
|
|
3
4
|
export * from './types';
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,aAAa,EAAC,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,aAAa,EAAC,MAAM,UAAU,CAAA;AAC9C,OAAO,EASL,oBAAoB,EACrB,MAAM,SAAS,CAAA;AAuBhB,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,0BAiB9D;AACD,cAAc,SAAS,CAAA"}
|
package/lib/index.js
CHANGED
|
@@ -1,13 +1,41 @@
|
|
|
1
|
+
import { __assign } from "tslib";
|
|
1
2
|
import { ErrorKind } from './error';
|
|
2
3
|
import { Parser } from './parser';
|
|
4
|
+
import { isDateElement, isDateTimeSkeleton, isNumberElement, isNumberSkeleton, isPluralElement, isSelectElement, isTagElement, isTimeElement, } from './types';
|
|
5
|
+
function pruneLocation(els) {
|
|
6
|
+
els.forEach(function (el) {
|
|
7
|
+
delete el.location;
|
|
8
|
+
if (isSelectElement(el) || isPluralElement(el)) {
|
|
9
|
+
for (var k in el.options) {
|
|
10
|
+
delete el.options[k].location;
|
|
11
|
+
pruneLocation(el.options[k].value);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
else if (isNumberElement(el) && isNumberSkeleton(el.style)) {
|
|
15
|
+
delete el.style.location;
|
|
16
|
+
}
|
|
17
|
+
else if ((isDateElement(el) || isTimeElement(el)) &&
|
|
18
|
+
isDateTimeSkeleton(el.style)) {
|
|
19
|
+
delete el.style.location;
|
|
20
|
+
}
|
|
21
|
+
else if (isTagElement(el)) {
|
|
22
|
+
pruneLocation(el.children);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
3
26
|
export function parse(message, opts) {
|
|
27
|
+
if (opts === void 0) { opts = {}; }
|
|
28
|
+
opts = __assign({ shouldParseSkeletons: true }, opts);
|
|
4
29
|
var result = new Parser(message, opts).parse();
|
|
5
|
-
if (result.
|
|
6
|
-
|
|
30
|
+
if (result.err) {
|
|
31
|
+
var error = SyntaxError(ErrorKind[result.err.kind]);
|
|
32
|
+
// @ts-expect-error Assign to error object
|
|
33
|
+
error.location = result.err.location;
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {
|
|
37
|
+
pruneLocation(result.val);
|
|
7
38
|
}
|
|
8
|
-
|
|
9
|
-
// @ts-expect-error Assign to error object
|
|
10
|
-
error.location = result.err.location;
|
|
11
|
-
throw error;
|
|
39
|
+
return result.val;
|
|
12
40
|
}
|
|
13
41
|
export * from './types';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { MessageFormatElement } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Hoist all selectors to the beginning of the AST & flatten the
|
|
4
|
+
* resulting options. E.g:
|
|
5
|
+
* "I have {count, plural, one{a dog} other{many dogs}}"
|
|
6
|
+
* becomes "{count, plural, one{I have a dog} other{I have many dogs}}".
|
|
7
|
+
* If there are multiple selectors, the order of which one is hoisted 1st
|
|
8
|
+
* is non-deterministic.
|
|
9
|
+
* The goal is to provide as many full sentences as possible since fragmented
|
|
10
|
+
* sentences are not translator-friendly
|
|
11
|
+
* @param ast AST
|
|
12
|
+
*/
|
|
13
|
+
export declare function hoistSelectors(ast: MessageFormatElement[]): MessageFormatElement[];
|
|
14
|
+
//# sourceMappingURL=manipulator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manipulator.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/manipulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,oBAAoB,EAErB,MAAM,SAAS,CAAA;AAkBhB;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,oBAAoB,EAAE,GAC1B,oBAAoB,EAAE,CAyBxB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { __spreadArray } from "tslib";
|
|
2
|
+
import { isPluralElement, isSelectElement, } from './types';
|
|
3
|
+
function cloneDeep(obj) {
|
|
4
|
+
if (Array.isArray(obj)) {
|
|
5
|
+
// @ts-expect-error meh
|
|
6
|
+
return __spreadArray([], obj.map(cloneDeep));
|
|
7
|
+
}
|
|
8
|
+
if (typeof obj === 'object') {
|
|
9
|
+
// @ts-expect-error meh
|
|
10
|
+
return Object.keys(obj).reduce(function (cloned, k) {
|
|
11
|
+
// @ts-expect-error meh
|
|
12
|
+
cloned[k] = cloneDeep(obj[k]);
|
|
13
|
+
return cloned;
|
|
14
|
+
}, {});
|
|
15
|
+
}
|
|
16
|
+
return obj;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Hoist all selectors to the beginning of the AST & flatten the
|
|
20
|
+
* resulting options. E.g:
|
|
21
|
+
* "I have {count, plural, one{a dog} other{many dogs}}"
|
|
22
|
+
* becomes "{count, plural, one{I have a dog} other{I have many dogs}}".
|
|
23
|
+
* If there are multiple selectors, the order of which one is hoisted 1st
|
|
24
|
+
* is non-deterministic.
|
|
25
|
+
* The goal is to provide as many full sentences as possible since fragmented
|
|
26
|
+
* sentences are not translator-friendly
|
|
27
|
+
* @param ast AST
|
|
28
|
+
*/
|
|
29
|
+
export function hoistSelectors(ast) {
|
|
30
|
+
var _loop_1 = function (i) {
|
|
31
|
+
var el = ast[i];
|
|
32
|
+
if (isPluralElement(el) || isSelectElement(el)) {
|
|
33
|
+
// pull this out of the ast and move it to the top
|
|
34
|
+
var cloned = cloneDeep(el);
|
|
35
|
+
var options_1 = cloned.options;
|
|
36
|
+
cloned.options = Object.keys(options_1).reduce(function (all, k) {
|
|
37
|
+
var newValue = hoistSelectors(__spreadArray(__spreadArray(__spreadArray([], ast.slice(0, i)), options_1[k].value), ast.slice(i + 1)));
|
|
38
|
+
all[k] = {
|
|
39
|
+
value: newValue,
|
|
40
|
+
};
|
|
41
|
+
return all;
|
|
42
|
+
}, {});
|
|
43
|
+
return { value: [cloned] };
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
for (var i = 0; i < ast.length; i++) {
|
|
47
|
+
var state_1 = _loop_1(i);
|
|
48
|
+
if (typeof state_1 === "object")
|
|
49
|
+
return state_1.value;
|
|
50
|
+
}
|
|
51
|
+
return ast;
|
|
52
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-parser.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/no-parser.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,SAIpB"}
|
package/lib/no-parser.js
ADDED
package/lib/parser.d.ts
CHANGED
|
@@ -38,13 +38,6 @@ export declare type Result<T, E> = {
|
|
|
38
38
|
val: null;
|
|
39
39
|
err: E;
|
|
40
40
|
};
|
|
41
|
-
export declare function parse(...args: ConstructorParameters<typeof Parser>): {
|
|
42
|
-
val: MessageFormatElement[];
|
|
43
|
-
err: null;
|
|
44
|
-
} | {
|
|
45
|
-
val: null;
|
|
46
|
-
err: ParserError;
|
|
47
|
-
};
|
|
48
41
|
export declare class Parser {
|
|
49
42
|
private message;
|
|
50
43
|
private position;
|
package/lib/parser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,WAAW,EAAC,MAAM,SAAS,CAAA;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,WAAW,EAAC,MAAM,SAAS,CAAA;AAC9C,OAAO,EAIL,oBAAoB,EAMrB,MAAM,SAAS,CAAA;AAYhB,MAAM,WAAW,QAAQ;IACvB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,oBAAY,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI;IAAC,GAAG,EAAE,CAAC,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAC,GAAG;IAAC,GAAG,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,CAAC,CAAA;CAAC,CAAA;AA6KpE,qBAAa,MAAM;IACjB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAU;IAE1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,oBAAoB,CAAC,CAAS;gBAE1B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;IAQxD,KAAK,IAAI,MAAM,CAAC,oBAAoB,EAAE,EAAE,WAAW,CAAC;IAOpD,OAAO,CAAC,YAAY;IA6DpB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,QAAQ;IAkFhB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,YAAY;IAuCpB,wBAAwB,IAAI,MAAM,GAAG,IAAI;IAczC;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAsDrB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,aAAa;IAsFrB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAejC,OAAO,CAAC,oBAAoB;IA+N5B,OAAO,CAAC,qBAAqB;IAe7B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAiDrC,OAAO,CAAC,6BAA6B;IAwBrC;;;;;;;;;OASG;IACH,OAAO,CAAC,6BAA6B;IA+GrC,OAAO,CAAC,sBAAsB;IAuC9B,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,aAAa;IASrB;;;OAGG;IACH,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,KAAK;IAcb,oDAAoD;IACpD,OAAO,CAAC,IAAI;IAgBZ;;;;;OAKG;IACH,OAAO,CAAC,MAAM;IAUd;;;OAGG;IACH,OAAO,CAAC,SAAS;IAYjB;;;OAGG;IACH,OAAO,CAAC,MAAM;IA0Bd,sFAAsF;IACtF,OAAO,CAAC,SAAS;IAMjB;;;OAGG;IACH,OAAO,CAAC,IAAI;CASb"}
|
package/lib/parser.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { __assign
|
|
1
|
+
import { __assign } from "tslib";
|
|
2
2
|
import { ErrorKind } from './error';
|
|
3
|
-
import {
|
|
3
|
+
import { SKELETON_TYPE, TYPE, } from './types';
|
|
4
4
|
import { SPACE_SEPARATOR_END_REGEX, SPACE_SEPARATOR_START_REGEX, } from './regex.generated';
|
|
5
5
|
import { parseNumberSkeleton, parseNumberSkeletonFromString, parseDateTimeSkeleton, } from '@formatjs/icu-skeleton-parser';
|
|
6
6
|
function createLocation(start, end) {
|
|
@@ -26,7 +26,7 @@ var isSafeInteger = hasNativeIsSafeInteger
|
|
|
26
26
|
// IE11 does not support y and u.
|
|
27
27
|
var REGEX_SUPPORTS_U_AND_Y = true;
|
|
28
28
|
try {
|
|
29
|
-
RE('', 'yu');
|
|
29
|
+
RE('([^\\p{White_Space}\\p{Pattern_Syntax}]*)', 'yu');
|
|
30
30
|
}
|
|
31
31
|
catch (_) {
|
|
32
32
|
REGEX_SUPPORTS_U_AND_Y = false;
|
|
@@ -146,42 +146,6 @@ else {
|
|
|
146
146
|
return fromCodePoint.apply(void 0, match);
|
|
147
147
|
};
|
|
148
148
|
}
|
|
149
|
-
function pruneLocation(els) {
|
|
150
|
-
els.forEach(function (el) {
|
|
151
|
-
delete el.location;
|
|
152
|
-
if (isSelectElement(el) || isPluralElement(el)) {
|
|
153
|
-
for (var k in el.options) {
|
|
154
|
-
delete el.options[k].location;
|
|
155
|
-
pruneLocation(el.options[k].value);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
else if (isNumberElement(el) && isNumberSkeleton(el.style)) {
|
|
159
|
-
delete el.style.location;
|
|
160
|
-
}
|
|
161
|
-
else if ((isDateElement(el) || isTimeElement(el)) &&
|
|
162
|
-
isDateTimeSkeleton(el.style)) {
|
|
163
|
-
delete el.style.location;
|
|
164
|
-
}
|
|
165
|
-
else if (isTagElement(el)) {
|
|
166
|
-
pruneLocation(el.children);
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
export function parse() {
|
|
171
|
-
var args = [];
|
|
172
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
173
|
-
args[_i] = arguments[_i];
|
|
174
|
-
}
|
|
175
|
-
var _ = args[0], opts = args[1];
|
|
176
|
-
var result = new (Parser.bind.apply(Parser, __spreadArray([void 0], args)))().parse();
|
|
177
|
-
if (result.err) {
|
|
178
|
-
return result;
|
|
179
|
-
}
|
|
180
|
-
if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {
|
|
181
|
-
pruneLocation(result.val);
|
|
182
|
-
}
|
|
183
|
-
return result;
|
|
184
|
-
}
|
|
185
149
|
var Parser = /** @class */ (function () {
|
|
186
150
|
function Parser(message, options) {
|
|
187
151
|
if (options === void 0) { options = {}; }
|
|
@@ -275,9 +239,8 @@ var Parser = /** @class */ (function () {
|
|
|
275
239
|
// Self closing tag
|
|
276
240
|
return {
|
|
277
241
|
val: {
|
|
278
|
-
type: TYPE.
|
|
279
|
-
value: tagName,
|
|
280
|
-
children: [],
|
|
242
|
+
type: TYPE.literal,
|
|
243
|
+
value: "<" + tagName + "/>",
|
|
281
244
|
location: createLocation(startPosition, this.clonePosition()),
|
|
282
245
|
},
|
|
283
246
|
err: null,
|
package/lib/types.d.ts
CHANGED
|
@@ -96,7 +96,7 @@ export interface PoundElement {
|
|
|
96
96
|
type: TYPE.pound;
|
|
97
97
|
location?: Location;
|
|
98
98
|
}
|
|
99
|
-
export declare type MessageFormatElement =
|
|
99
|
+
export declare type MessageFormatElement = ArgumentElement | DateElement | LiteralElement | NumberElement | PluralElement | PoundElement | SelectElement | TagElement | TimeElement;
|
|
100
100
|
export interface NumberSkeleton {
|
|
101
101
|
type: SKELETON_TYPE.number;
|
|
102
102
|
tokens: NumberSkeletonToken[];
|
package/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-messageformat-parser/types.ts"],"names":[],"mappings":"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"}
|
package/manipulator.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { MessageFormatElement } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Hoist all selectors to the beginning of the AST & flatten the
|
|
4
|
+
* resulting options. E.g:
|
|
5
|
+
* "I have {count, plural, one{a dog} other{many dogs}}"
|
|
6
|
+
* becomes "{count, plural, one{I have a dog} other{I have many dogs}}".
|
|
7
|
+
* If there are multiple selectors, the order of which one is hoisted 1st
|
|
8
|
+
* is non-deterministic.
|
|
9
|
+
* The goal is to provide as many full sentences as possible since fragmented
|
|
10
|
+
* sentences are not translator-friendly
|
|
11
|
+
* @param ast AST
|
|
12
|
+
*/
|
|
13
|
+
export declare function hoistSelectors(ast: MessageFormatElement[]): MessageFormatElement[];
|
|
14
|
+
//# sourceMappingURL=manipulator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manipulator.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/manipulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,oBAAoB,EAErB,MAAM,SAAS,CAAA;AAkBhB;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,oBAAoB,EAAE,GAC1B,oBAAoB,EAAE,CAyBxB"}
|
package/manipulator.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hoistSelectors = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var types_1 = require("./types");
|
|
6
|
+
function cloneDeep(obj) {
|
|
7
|
+
if (Array.isArray(obj)) {
|
|
8
|
+
// @ts-expect-error meh
|
|
9
|
+
return tslib_1.__spreadArray([], obj.map(cloneDeep));
|
|
10
|
+
}
|
|
11
|
+
if (typeof obj === 'object') {
|
|
12
|
+
// @ts-expect-error meh
|
|
13
|
+
return Object.keys(obj).reduce(function (cloned, k) {
|
|
14
|
+
// @ts-expect-error meh
|
|
15
|
+
cloned[k] = cloneDeep(obj[k]);
|
|
16
|
+
return cloned;
|
|
17
|
+
}, {});
|
|
18
|
+
}
|
|
19
|
+
return obj;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Hoist all selectors to the beginning of the AST & flatten the
|
|
23
|
+
* resulting options. E.g:
|
|
24
|
+
* "I have {count, plural, one{a dog} other{many dogs}}"
|
|
25
|
+
* becomes "{count, plural, one{I have a dog} other{I have many dogs}}".
|
|
26
|
+
* If there are multiple selectors, the order of which one is hoisted 1st
|
|
27
|
+
* is non-deterministic.
|
|
28
|
+
* The goal is to provide as many full sentences as possible since fragmented
|
|
29
|
+
* sentences are not translator-friendly
|
|
30
|
+
* @param ast AST
|
|
31
|
+
*/
|
|
32
|
+
function hoistSelectors(ast) {
|
|
33
|
+
var _loop_1 = function (i) {
|
|
34
|
+
var el = ast[i];
|
|
35
|
+
if (types_1.isPluralElement(el) || types_1.isSelectElement(el)) {
|
|
36
|
+
// pull this out of the ast and move it to the top
|
|
37
|
+
var cloned = cloneDeep(el);
|
|
38
|
+
var options_1 = cloned.options;
|
|
39
|
+
cloned.options = Object.keys(options_1).reduce(function (all, k) {
|
|
40
|
+
var newValue = hoistSelectors(tslib_1.__spreadArray(tslib_1.__spreadArray(tslib_1.__spreadArray([], ast.slice(0, i)), options_1[k].value), ast.slice(i + 1)));
|
|
41
|
+
all[k] = {
|
|
42
|
+
value: newValue,
|
|
43
|
+
};
|
|
44
|
+
return all;
|
|
45
|
+
}, {});
|
|
46
|
+
return { value: [cloned] };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
for (var i = 0; i < ast.length; i++) {
|
|
50
|
+
var state_1 = _loop_1(i);
|
|
51
|
+
if (typeof state_1 === "object")
|
|
52
|
+
return state_1.value;
|
|
53
|
+
}
|
|
54
|
+
return ast;
|
|
55
|
+
}
|
|
56
|
+
exports.hoistSelectors = hoistSelectors;
|
package/no-parser.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-parser.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/no-parser.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,SAIpB"}
|
package/no-parser.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parse = void 0;
|
|
4
|
+
function parse() {
|
|
5
|
+
throw new Error("You're trying to format an uncompiled message with react-intl without parser, please import from 'react-int' instead");
|
|
6
|
+
}
|
|
7
|
+
exports.parse = parse;
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@formatjs/icu-messageformat-parser",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@formatjs/ecma402-abstract": "1.6.4",
|
|
9
|
-
"@formatjs/icu-skeleton-parser": "1.1.
|
|
9
|
+
"@formatjs/icu-skeleton-parser": "1.1.1",
|
|
10
10
|
"tslib": "^2.1.0"
|
|
11
11
|
}
|
|
12
12
|
}
|
package/parser.d.ts
CHANGED
|
@@ -38,13 +38,6 @@ export declare type Result<T, E> = {
|
|
|
38
38
|
val: null;
|
|
39
39
|
err: E;
|
|
40
40
|
};
|
|
41
|
-
export declare function parse(...args: ConstructorParameters<typeof Parser>): {
|
|
42
|
-
val: MessageFormatElement[];
|
|
43
|
-
err: null;
|
|
44
|
-
} | {
|
|
45
|
-
val: null;
|
|
46
|
-
err: ParserError;
|
|
47
|
-
};
|
|
48
41
|
export declare class Parser {
|
|
49
42
|
private message;
|
|
50
43
|
private position;
|
package/parser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,WAAW,EAAC,MAAM,SAAS,CAAA;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,WAAW,EAAC,MAAM,SAAS,CAAA;AAC9C,OAAO,EAIL,oBAAoB,EAMrB,MAAM,SAAS,CAAA;AAYhB,MAAM,WAAW,QAAQ;IACvB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,oBAAY,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI;IAAC,GAAG,EAAE,CAAC,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAC,GAAG;IAAC,GAAG,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,CAAC,CAAA;CAAC,CAAA;AA6KpE,qBAAa,MAAM;IACjB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAU;IAE1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,oBAAoB,CAAC,CAAS;gBAE1B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;IAQxD,KAAK,IAAI,MAAM,CAAC,oBAAoB,EAAE,EAAE,WAAW,CAAC;IAOpD,OAAO,CAAC,YAAY;IA6DpB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,QAAQ;IAkFhB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,YAAY;IAuCpB,wBAAwB,IAAI,MAAM,GAAG,IAAI;IAczC;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAsDrB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,aAAa;IAsFrB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAejC,OAAO,CAAC,oBAAoB;IA+N5B,OAAO,CAAC,qBAAqB;IAe7B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAiDrC,OAAO,CAAC,6BAA6B;IAwBrC;;;;;;;;;OASG;IACH,OAAO,CAAC,6BAA6B;IA+GrC,OAAO,CAAC,sBAAsB;IAuC9B,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,aAAa;IASrB;;;OAGG;IACH,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,KAAK;IAcb,oDAAoD;IACpD,OAAO,CAAC,IAAI;IAgBZ;;;;;OAKG;IACH,OAAO,CAAC,MAAM;IAUd;;;OAGG;IACH,OAAO,CAAC,SAAS;IAYjB;;;OAGG;IACH,OAAO,CAAC,MAAM;IA0Bd,sFAAsF;IACtF,OAAO,CAAC,SAAS;IAMjB;;;OAGG;IACH,OAAO,CAAC,IAAI;CASb"}
|
package/parser.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Parser =
|
|
3
|
+
exports.Parser = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var error_1 = require("./error");
|
|
6
6
|
var types_1 = require("./types");
|
|
@@ -29,7 +29,7 @@ var isSafeInteger = hasNativeIsSafeInteger
|
|
|
29
29
|
// IE11 does not support y and u.
|
|
30
30
|
var REGEX_SUPPORTS_U_AND_Y = true;
|
|
31
31
|
try {
|
|
32
|
-
RE('', 'yu');
|
|
32
|
+
RE('([^\\p{White_Space}\\p{Pattern_Syntax}]*)', 'yu');
|
|
33
33
|
}
|
|
34
34
|
catch (_) {
|
|
35
35
|
REGEX_SUPPORTS_U_AND_Y = false;
|
|
@@ -149,43 +149,6 @@ else {
|
|
|
149
149
|
return fromCodePoint.apply(void 0, match);
|
|
150
150
|
};
|
|
151
151
|
}
|
|
152
|
-
function pruneLocation(els) {
|
|
153
|
-
els.forEach(function (el) {
|
|
154
|
-
delete el.location;
|
|
155
|
-
if (types_1.isSelectElement(el) || types_1.isPluralElement(el)) {
|
|
156
|
-
for (var k in el.options) {
|
|
157
|
-
delete el.options[k].location;
|
|
158
|
-
pruneLocation(el.options[k].value);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
else if (types_1.isNumberElement(el) && types_1.isNumberSkeleton(el.style)) {
|
|
162
|
-
delete el.style.location;
|
|
163
|
-
}
|
|
164
|
-
else if ((types_1.isDateElement(el) || types_1.isTimeElement(el)) &&
|
|
165
|
-
types_1.isDateTimeSkeleton(el.style)) {
|
|
166
|
-
delete el.style.location;
|
|
167
|
-
}
|
|
168
|
-
else if (types_1.isTagElement(el)) {
|
|
169
|
-
pruneLocation(el.children);
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
function parse() {
|
|
174
|
-
var args = [];
|
|
175
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
176
|
-
args[_i] = arguments[_i];
|
|
177
|
-
}
|
|
178
|
-
var _ = args[0], opts = args[1];
|
|
179
|
-
var result = new (Parser.bind.apply(Parser, tslib_1.__spreadArray([void 0], args)))().parse();
|
|
180
|
-
if (result.err) {
|
|
181
|
-
return result;
|
|
182
|
-
}
|
|
183
|
-
if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {
|
|
184
|
-
pruneLocation(result.val);
|
|
185
|
-
}
|
|
186
|
-
return result;
|
|
187
|
-
}
|
|
188
|
-
exports.parse = parse;
|
|
189
152
|
var Parser = /** @class */ (function () {
|
|
190
153
|
function Parser(message, options) {
|
|
191
154
|
if (options === void 0) { options = {}; }
|
|
@@ -279,9 +242,8 @@ var Parser = /** @class */ (function () {
|
|
|
279
242
|
// Self closing tag
|
|
280
243
|
return {
|
|
281
244
|
val: {
|
|
282
|
-
type: types_1.TYPE.
|
|
283
|
-
value: tagName,
|
|
284
|
-
children: [],
|
|
245
|
+
type: types_1.TYPE.literal,
|
|
246
|
+
value: "<" + tagName + "/>",
|
|
285
247
|
location: createLocation(startPosition, this.clonePosition()),
|
|
286
248
|
},
|
|
287
249
|
err: null,
|
package/types.d.ts
CHANGED
|
@@ -96,7 +96,7 @@ export interface PoundElement {
|
|
|
96
96
|
type: TYPE.pound;
|
|
97
97
|
location?: Location;
|
|
98
98
|
}
|
|
99
|
-
export declare type MessageFormatElement =
|
|
99
|
+
export declare type MessageFormatElement = ArgumentElement | DateElement | LiteralElement | NumberElement | PluralElement | PoundElement | SelectElement | TagElement | TimeElement;
|
|
100
100
|
export interface NumberSkeleton {
|
|
101
101
|
type: SKELETON_TYPE.number;
|
|
102
102
|
tokens: NumberSkeletonToken[];
|
package/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../packages/icu-messageformat-parser/types.ts"],"names":[],"mappings":"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"}
|