@formatjs/intl-getcanonicallocales 2.0.3 → 2.0.5

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.
Files changed (72) hide show
  1. package/index.d.ts +6 -0
  2. package/index.d.ts.map +1 -0
  3. package/index.js +42 -0
  4. package/lib/index.d.ts +6 -0
  5. package/lib/index.d.ts.map +1 -0
  6. package/lib/index.js +31 -0
  7. package/lib/polyfill.d.ts +2 -0
  8. package/lib/polyfill.d.ts.map +1 -0
  9. package/lib/polyfill.js +24 -0
  10. package/lib/should-polyfill.d.ts +2 -0
  11. package/lib/should-polyfill.d.ts.map +1 -0
  12. package/lib/should-polyfill.js +8 -0
  13. package/lib/src/aliases.generated.d.ts +5 -0
  14. package/lib/src/aliases.generated.d.ts.map +1 -0
  15. package/lib/src/aliases.generated.js +1137 -0
  16. package/lib/src/canonicalizer.d.ts +20 -0
  17. package/lib/src/canonicalizer.d.ts.map +1 -0
  18. package/lib/src/canonicalizer.js +219 -0
  19. package/lib/src/emitter.d.ts +4 -0
  20. package/lib/src/emitter.d.ts.map +1 -0
  21. package/lib/src/emitter.js +28 -0
  22. package/lib/src/likelySubtags.generated.d.ts +2 -0
  23. package/lib/src/likelySubtags.generated.d.ts.map +1 -0
  24. package/lib/src/likelySubtags.generated.js +1870 -0
  25. package/lib/src/parser.d.ts +10 -0
  26. package/lib/src/parser.d.ts.map +1 -0
  27. package/lib/src/parser.js +233 -0
  28. package/lib/src/types.d.ts +33 -0
  29. package/lib/src/types.d.ts.map +1 -0
  30. package/lib/src/types.js +1 -0
  31. package/package.json +2 -2
  32. package/polyfill.d.ts +2 -0
  33. package/polyfill.d.ts.map +1 -0
  34. package/polyfill.iife.js +3979 -0
  35. package/polyfill.js +26 -0
  36. package/should-polyfill.d.ts +2 -0
  37. package/should-polyfill.d.ts.map +1 -0
  38. package/should-polyfill.js +12 -0
  39. package/src/aliases.generated.d.ts +5 -0
  40. package/src/aliases.generated.d.ts.map +1 -0
  41. package/src/aliases.generated.js +1140 -0
  42. package/src/canonicalizer.d.ts +20 -0
  43. package/src/canonicalizer.d.ts.map +1 -0
  44. package/src/canonicalizer.js +224 -0
  45. package/src/emitter.d.ts +4 -0
  46. package/src/emitter.d.ts.map +1 -0
  47. package/src/emitter.js +33 -0
  48. package/src/likelySubtags.generated.d.ts +2 -0
  49. package/src/likelySubtags.generated.d.ts.map +1 -0
  50. package/src/likelySubtags.generated.js +1873 -0
  51. package/src/parser.d.ts +10 -0
  52. package/src/parser.d.ts.map +1 -0
  53. package/src/parser.js +243 -0
  54. package/src/types.d.ts +33 -0
  55. package/src/types.d.ts.map +1 -0
  56. package/src/types.js +2 -0
  57. package/BUILD +0 -116
  58. package/CHANGELOG.md +0 -290
  59. package/index.ts +0 -43
  60. package/polyfill.ts +0 -23
  61. package/scripts/aliases.ts +0 -70
  62. package/scripts/likely-subtags.ts +0 -20
  63. package/should-polyfill.ts +0 -10
  64. package/src/aliases.generated.ts +0 -1137
  65. package/src/canonicalizer.ts +0 -272
  66. package/src/emitter.ts +0 -39
  67. package/src/likelySubtags.generated.ts +0 -1870
  68. package/src/parser.ts +0 -259
  69. package/src/types.ts +0 -63
  70. package/tests/index.test.ts +0 -24
  71. package/tests/parser.test.ts +0 -204
  72. package/tsconfig.json +0 -5
@@ -0,0 +1,20 @@
1
+ import { UnicodeLocaleId, UnicodeLanguageId } from './types';
2
+ /**
3
+ * CAVEAT: We don't do this section in the spec bc they have no JSON data
4
+ * Use the bcp47 data to replace keys, types, tfields, and tvalues by their canonical forms. See Section 3.6.4 U Extension Data Files) and Section 3.7.1 T Extension Data Files. The aliases are in the alias attribute value, while the canonical is in the name attribute value. For example,
5
+ Because of the following bcp47 data:
6
+ <key name="ms"…>…<type name="uksystem" … alias="imperial" … />…</key>
7
+ We get the following transformation:
8
+ en-u-ms-imperial ⇒ en-u-ms-uksystem
9
+ * @param lang
10
+ */
11
+ export declare function canonicalizeUnicodeLanguageId(unicodeLanguageId: UnicodeLanguageId): UnicodeLanguageId;
12
+ /**
13
+ * Canonicalize based on
14
+ * https://www.unicode.org/reports/tr35/tr35.html#Canonical_Unicode_Locale_Identifiers
15
+ * https://tc39.es/ecma402/#sec-canonicalizeunicodelocaleid
16
+ * IMPORTANT: This modifies the object inline
17
+ * @param locale
18
+ */
19
+ export declare function canonicalizeUnicodeLocaleId(locale: UnicodeLocaleId): UnicodeLocaleId;
20
+ //# sourceMappingURL=canonicalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonicalizer.d.ts","sourceRoot":"","sources":["canonicalizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAiB,iBAAiB,EAAC,MAAM,SAAS,CAAA;AA4DzE;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC3C,iBAAiB,EAAE,iBAAiB,GACnC,iBAAiB,CAmKnB;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,eAAe,GACtB,eAAe,CA0BjB"}
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.canonicalizeUnicodeLocaleId = exports.canonicalizeUnicodeLanguageId = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var aliases_generated_1 = require("./aliases.generated");
6
+ var parser_1 = require("./parser");
7
+ var likelySubtags_generated_1 = require("./likelySubtags.generated");
8
+ var emitter_1 = require("./emitter");
9
+ function canonicalizeAttrs(strs) {
10
+ return Object.keys(strs.reduce(function (all, str) {
11
+ all[str.toLowerCase()] = 1;
12
+ return all;
13
+ }, {})).sort();
14
+ }
15
+ function canonicalizeKVs(arr) {
16
+ var all = {};
17
+ var result = [];
18
+ for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {
19
+ var kv = arr_1[_i];
20
+ if (kv[0] in all) {
21
+ continue;
22
+ }
23
+ all[kv[0]] = 1;
24
+ if (!kv[1] || kv[1] === 'true') {
25
+ result.push([kv[0].toLowerCase()]);
26
+ }
27
+ else {
28
+ result.push([kv[0].toLowerCase(), kv[1].toLowerCase()]);
29
+ }
30
+ }
31
+ return result.sort(compareKV);
32
+ }
33
+ function compareKV(t1, t2) {
34
+ return t1[0] < t2[0] ? -1 : t1[0] > t2[0] ? 1 : 0;
35
+ }
36
+ function compareExtension(e1, e2) {
37
+ return e1.type < e2.type ? -1 : e1.type > e2.type ? 1 : 0;
38
+ }
39
+ function mergeVariants(v1, v2) {
40
+ var result = tslib_1.__spreadArray([], v1, true);
41
+ for (var _i = 0, v2_1 = v2; _i < v2_1.length; _i++) {
42
+ var v = v2_1[_i];
43
+ if (v1.indexOf(v) < 0) {
44
+ result.push(v);
45
+ }
46
+ }
47
+ return result;
48
+ }
49
+ /**
50
+ * CAVEAT: We don't do this section in the spec bc they have no JSON data
51
+ * Use the bcp47 data to replace keys, types, tfields, and tvalues by their canonical forms. See Section 3.6.4 U Extension Data Files) and Section 3.7.1 T Extension Data Files. The aliases are in the alias attribute value, while the canonical is in the name attribute value. For example,
52
+ Because of the following bcp47 data:
53
+ <key name="ms"…>…<type name="uksystem" … alias="imperial" … />…</key>
54
+ We get the following transformation:
55
+ en-u-ms-imperial ⇒ en-u-ms-uksystem
56
+ * @param lang
57
+ */
58
+ function canonicalizeUnicodeLanguageId(unicodeLanguageId) {
59
+ /**
60
+ * If the language subtag matches the type attribute of a languageAlias element in Supplemental Data, replace the language subtag with the replacement value.
61
+ * 1. If there are additional subtags in the replacement value, add them to the result, but only if there is no corresponding subtag already in the tag.
62
+ * 2. Five special deprecated grandfathered codes (such as i-default) are in type attributes, and are also replaced.
63
+ */
64
+ // From https://github.com/unicode-org/icu/blob/master/icu4j/main/classes/core/src/com/ibm/icu/util/ULocale.java#L1246
65
+ // Try language _ variant
66
+ var finalLangAst = unicodeLanguageId;
67
+ if (unicodeLanguageId.variants.length) {
68
+ var replacedLang_1 = '';
69
+ for (var _i = 0, _a = unicodeLanguageId.variants; _i < _a.length; _i++) {
70
+ var variant = _a[_i];
71
+ if ((replacedLang_1 =
72
+ aliases_generated_1.languageAlias[(0, emitter_1.emitUnicodeLanguageId)({
73
+ lang: unicodeLanguageId.lang,
74
+ variants: [variant],
75
+ })])) {
76
+ var replacedLangAst = (0, parser_1.parseUnicodeLanguageId)(replacedLang_1.split(parser_1.SEPARATOR));
77
+ finalLangAst = {
78
+ lang: replacedLangAst.lang,
79
+ script: finalLangAst.script || replacedLangAst.script,
80
+ region: finalLangAst.region || replacedLangAst.region,
81
+ variants: mergeVariants(finalLangAst.variants, replacedLangAst.variants),
82
+ };
83
+ break;
84
+ }
85
+ }
86
+ }
87
+ // language _ script _ country
88
+ // ug-Arab-CN -> ug-CN
89
+ if (finalLangAst.script && finalLangAst.region) {
90
+ var replacedLang_2 = aliases_generated_1.languageAlias[(0, emitter_1.emitUnicodeLanguageId)({
91
+ lang: finalLangAst.lang,
92
+ script: finalLangAst.script,
93
+ region: finalLangAst.region,
94
+ variants: [],
95
+ })];
96
+ if (replacedLang_2) {
97
+ var replacedLangAst = (0, parser_1.parseUnicodeLanguageId)(replacedLang_2.split(parser_1.SEPARATOR));
98
+ finalLangAst = {
99
+ lang: replacedLangAst.lang,
100
+ script: replacedLangAst.script,
101
+ region: replacedLangAst.region,
102
+ variants: finalLangAst.variants,
103
+ };
104
+ }
105
+ }
106
+ // language _ country
107
+ // eg. az_AZ -> az_Latn_A
108
+ if (finalLangAst.region) {
109
+ var replacedLang_3 = aliases_generated_1.languageAlias[(0, emitter_1.emitUnicodeLanguageId)({
110
+ lang: finalLangAst.lang,
111
+ region: finalLangAst.region,
112
+ variants: [],
113
+ })];
114
+ if (replacedLang_3) {
115
+ var replacedLangAst = (0, parser_1.parseUnicodeLanguageId)(replacedLang_3.split(parser_1.SEPARATOR));
116
+ finalLangAst = {
117
+ lang: replacedLangAst.lang,
118
+ script: finalLangAst.script || replacedLangAst.script,
119
+ region: replacedLangAst.region,
120
+ variants: finalLangAst.variants,
121
+ };
122
+ }
123
+ }
124
+ // only language
125
+ // e.g. twi -> ak
126
+ var replacedLang = aliases_generated_1.languageAlias[(0, emitter_1.emitUnicodeLanguageId)({
127
+ lang: finalLangAst.lang,
128
+ variants: [],
129
+ })];
130
+ if (replacedLang) {
131
+ var replacedLangAst = (0, parser_1.parseUnicodeLanguageId)(replacedLang.split(parser_1.SEPARATOR));
132
+ finalLangAst = {
133
+ lang: replacedLangAst.lang,
134
+ script: finalLangAst.script || replacedLangAst.script,
135
+ region: finalLangAst.region || replacedLangAst.region,
136
+ variants: finalLangAst.variants,
137
+ };
138
+ }
139
+ if (finalLangAst.region) {
140
+ var region = finalLangAst.region.toUpperCase();
141
+ var regionAlias = aliases_generated_1.territoryAlias[region];
142
+ var replacedRegion = void 0;
143
+ if (regionAlias) {
144
+ var regions = regionAlias.split(' ');
145
+ replacedRegion = regions[0];
146
+ var likelySubtag = likelySubtags_generated_1.likelySubtags[(0, emitter_1.emitUnicodeLanguageId)({
147
+ lang: finalLangAst.lang,
148
+ script: finalLangAst.script,
149
+ variants: [],
150
+ })];
151
+ if (likelySubtag) {
152
+ var likelyRegion = (0, parser_1.parseUnicodeLanguageId)(likelySubtag.split(parser_1.SEPARATOR)).region;
153
+ if (likelyRegion && regions.indexOf(likelyRegion) > -1) {
154
+ replacedRegion = likelyRegion;
155
+ }
156
+ }
157
+ }
158
+ if (replacedRegion) {
159
+ finalLangAst.region = replacedRegion;
160
+ }
161
+ finalLangAst.region = finalLangAst.region.toUpperCase();
162
+ }
163
+ if (finalLangAst.script) {
164
+ finalLangAst.script =
165
+ finalLangAst.script[0].toUpperCase() +
166
+ finalLangAst.script.slice(1).toLowerCase();
167
+ if (aliases_generated_1.scriptAlias[finalLangAst.script]) {
168
+ finalLangAst.script = aliases_generated_1.scriptAlias[finalLangAst.script];
169
+ }
170
+ }
171
+ if (finalLangAst.variants.length) {
172
+ for (var i = 0; i < finalLangAst.variants.length; i++) {
173
+ var variant = finalLangAst.variants[i].toLowerCase();
174
+ if (aliases_generated_1.variantAlias[variant]) {
175
+ var alias = aliases_generated_1.variantAlias[variant];
176
+ if ((0, parser_1.isUnicodeVariantSubtag)(alias)) {
177
+ finalLangAst.variants[i] = alias;
178
+ }
179
+ else if ((0, parser_1.isUnicodeLanguageSubtag)(alias)) {
180
+ // Yes this can happen per the spec
181
+ finalLangAst.lang = alias;
182
+ }
183
+ }
184
+ }
185
+ finalLangAst.variants.sort();
186
+ }
187
+ return finalLangAst;
188
+ }
189
+ exports.canonicalizeUnicodeLanguageId = canonicalizeUnicodeLanguageId;
190
+ /**
191
+ * Canonicalize based on
192
+ * https://www.unicode.org/reports/tr35/tr35.html#Canonical_Unicode_Locale_Identifiers
193
+ * https://tc39.es/ecma402/#sec-canonicalizeunicodelocaleid
194
+ * IMPORTANT: This modifies the object inline
195
+ * @param locale
196
+ */
197
+ function canonicalizeUnicodeLocaleId(locale) {
198
+ locale.lang = canonicalizeUnicodeLanguageId(locale.lang);
199
+ if (locale.extensions) {
200
+ for (var _i = 0, _a = locale.extensions; _i < _a.length; _i++) {
201
+ var extension = _a[_i];
202
+ switch (extension.type) {
203
+ case 'u':
204
+ extension.keywords = canonicalizeKVs(extension.keywords);
205
+ if (extension.attributes) {
206
+ extension.attributes = canonicalizeAttrs(extension.attributes);
207
+ }
208
+ break;
209
+ case 't':
210
+ if (extension.lang) {
211
+ extension.lang = canonicalizeUnicodeLanguageId(extension.lang);
212
+ }
213
+ extension.fields = canonicalizeKVs(extension.fields);
214
+ break;
215
+ default:
216
+ extension.value = extension.value.toLowerCase();
217
+ break;
218
+ }
219
+ }
220
+ locale.extensions.sort(compareExtension);
221
+ }
222
+ return locale;
223
+ }
224
+ exports.canonicalizeUnicodeLocaleId = canonicalizeUnicodeLocaleId;
@@ -0,0 +1,4 @@
1
+ import { UnicodeLanguageId, UnicodeLocaleId } from './types';
2
+ export declare function emitUnicodeLanguageId(lang?: UnicodeLanguageId): string;
3
+ export declare function emitUnicodeLocaleId({ lang, extensions, }: UnicodeLocaleId): string;
4
+ //# sourceMappingURL=emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAE,eAAe,EAAC,MAAM,SAAS,CAAA;AAE1D,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAOtE;AAED,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,UAAU,GACX,EAAE,eAAe,GAAG,MAAM,CAwB1B"}
package/src/emitter.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emitUnicodeLocaleId = exports.emitUnicodeLanguageId = void 0;
4
+ var tslib_1 = require("tslib");
5
+ function emitUnicodeLanguageId(lang) {
6
+ if (!lang) {
7
+ return '';
8
+ }
9
+ return tslib_1.__spreadArray([lang.lang, lang.script, lang.region], (lang.variants || []), true).filter(Boolean)
10
+ .join('-');
11
+ }
12
+ exports.emitUnicodeLanguageId = emitUnicodeLanguageId;
13
+ function emitUnicodeLocaleId(_a) {
14
+ var lang = _a.lang, extensions = _a.extensions;
15
+ var chunks = [emitUnicodeLanguageId(lang)];
16
+ for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {
17
+ var ext = extensions_1[_i];
18
+ chunks.push(ext.type);
19
+ switch (ext.type) {
20
+ case 'u':
21
+ chunks.push.apply(chunks, tslib_1.__spreadArray(tslib_1.__spreadArray([], ext.attributes, false), ext.keywords.reduce(function (all, kv) { return all.concat(kv); }, []), false));
22
+ break;
23
+ case 't':
24
+ chunks.push.apply(chunks, tslib_1.__spreadArray([emitUnicodeLanguageId(ext.lang)], ext.fields.reduce(function (all, kv) { return all.concat(kv); }, []), false));
25
+ break;
26
+ default:
27
+ chunks.push(ext.value);
28
+ break;
29
+ }
30
+ }
31
+ return chunks.filter(Boolean).join('-');
32
+ }
33
+ exports.emitUnicodeLocaleId = emitUnicodeLocaleId;
@@ -0,0 +1,2 @@
1
+ export declare const likelySubtags: Record<string, string>;
2
+ //# sourceMappingURL=likelySubtags.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"likelySubtags.generated.d.ts","sourceRoot":"","sources":["likelySubtags.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA20DhD,CAAC"}