@formatjs/intl-localematcher 0.7.4 → 0.8.0

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.
@@ -1,6 +1,6 @@
1
1
  /**
2
- * https://tc39.es/ecma402/#sec-bestavailablelocale
3
- * @param availableLocales
4
- * @param locale
5
- */
2
+ * https://tc39.es/ecma402/#sec-bestavailablelocale
3
+ * @param availableLocales
4
+ * @param locale
5
+ */
6
6
  export declare function BestAvailableLocale(availableLocales: readonly string[], locale: string): string | undefined;
@@ -1,29 +1,29 @@
1
1
  // Cache for Set conversions to avoid repeated array->Set conversions
2
- var availableLocalesSetCache = new WeakMap();
2
+ const availableLocalesSetCache = new WeakMap();
3
3
  /**
4
- * https://tc39.es/ecma402/#sec-bestavailablelocale
5
- * @param availableLocales
6
- * @param locale
7
- */
4
+ * https://tc39.es/ecma402/#sec-bestavailablelocale
5
+ * @param availableLocales
6
+ * @param locale
7
+ */
8
8
  export function BestAvailableLocale(availableLocales, locale) {
9
- // Fast path: use Set for O(1) lookups instead of O(n) indexOf
10
- var availableSet = availableLocalesSetCache.get(availableLocales);
11
- if (!availableSet) {
12
- availableSet = new Set(availableLocales);
13
- availableLocalesSetCache.set(availableLocales, availableSet);
14
- }
15
- var candidate = locale;
16
- while (true) {
17
- if (availableSet.has(candidate)) {
18
- return candidate;
19
- }
20
- var pos = candidate.lastIndexOf('-');
21
- if (!~pos) {
22
- return undefined;
23
- }
24
- if (pos >= 2 && candidate[pos - 2] === '-') {
25
- pos -= 2;
26
- }
27
- candidate = candidate.slice(0, pos);
28
- }
9
+ // Fast path: use Set for O(1) lookups instead of O(n) indexOf
10
+ let availableSet = availableLocalesSetCache.get(availableLocales);
11
+ if (!availableSet) {
12
+ availableSet = new Set(availableLocales);
13
+ availableLocalesSetCache.set(availableLocales, availableSet);
14
+ }
15
+ let candidate = locale;
16
+ while (true) {
17
+ if (availableSet.has(candidate)) {
18
+ return candidate;
19
+ }
20
+ let pos = candidate.lastIndexOf("-");
21
+ if (!~pos) {
22
+ return undefined;
23
+ }
24
+ if (pos >= 2 && candidate[pos - 2] === "-") {
25
+ pos -= 2;
26
+ }
27
+ candidate = candidate.slice(0, pos);
28
+ }
29
29
  }
@@ -1,8 +1,8 @@
1
- import { LookupMatcherResult } from './types.js';
1
+ import type { LookupMatcherResult } from "./types.js";
2
2
  /**
3
- * https://tc39.es/ecma402/#sec-bestfitmatcher
4
- * @param availableLocales
5
- * @param requestedLocales
6
- * @param getDefaultLocale
7
- */
3
+ * https://tc39.es/ecma402/#sec-bestfitmatcher
4
+ * @param availableLocales
5
+ * @param requestedLocales
6
+ * @param getDefaultLocale
7
+ */
8
8
  export declare function BestFitMatcher(availableLocales: readonly string[], requestedLocales: readonly string[], getDefaultLocale: () => string): LookupMatcherResult;
@@ -1,31 +1,30 @@
1
- import { UNICODE_EXTENSION_SEQUENCE_REGEX, findBestMatch } from './utils.js';
1
+ import { UNICODE_EXTENSION_SEQUENCE_REGEX, findBestMatch } from "./utils.js";
2
2
  /**
3
- * https://tc39.es/ecma402/#sec-bestfitmatcher
4
- * @param availableLocales
5
- * @param requestedLocales
6
- * @param getDefaultLocale
7
- */
3
+ * https://tc39.es/ecma402/#sec-bestfitmatcher
4
+ * @param availableLocales
5
+ * @param requestedLocales
6
+ * @param getDefaultLocale
7
+ */
8
8
  export function BestFitMatcher(availableLocales, requestedLocales, getDefaultLocale) {
9
- var foundLocale;
10
- var extension;
11
- var noExtensionLocales = [];
12
- var noExtensionLocaleMap = requestedLocales.reduce(function (all, l) {
13
- var noExtensionLocale = l.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');
14
- noExtensionLocales.push(noExtensionLocale);
15
- all[noExtensionLocale] = l;
16
- return all;
17
- }, {});
18
- var result = findBestMatch(noExtensionLocales, availableLocales);
19
- if (result.matchedSupportedLocale && result.matchedDesiredLocale) {
20
- foundLocale = result.matchedSupportedLocale;
21
- extension =
22
- noExtensionLocaleMap[result.matchedDesiredLocale].slice(result.matchedDesiredLocale.length) || undefined;
23
- }
24
- if (!foundLocale) {
25
- return { locale: getDefaultLocale() };
26
- }
27
- return {
28
- locale: foundLocale,
29
- extension: extension,
30
- };
9
+ let foundLocale;
10
+ let extension;
11
+ const noExtensionLocales = [];
12
+ const noExtensionLocaleMap = requestedLocales.reduce((all, l) => {
13
+ const noExtensionLocale = l.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, "");
14
+ noExtensionLocales.push(noExtensionLocale);
15
+ all[noExtensionLocale] = l;
16
+ return all;
17
+ }, {});
18
+ const result = findBestMatch(noExtensionLocales, availableLocales);
19
+ if (result.matchedSupportedLocale && result.matchedDesiredLocale) {
20
+ foundLocale = result.matchedSupportedLocale;
21
+ extension = noExtensionLocaleMap[result.matchedDesiredLocale].slice(result.matchedDesiredLocale.length) || undefined;
22
+ }
23
+ if (!foundLocale) {
24
+ return { locale: getDefaultLocale() };
25
+ }
26
+ return {
27
+ locale: foundLocale,
28
+ extension
29
+ };
31
30
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist
3
- * @param locales
4
- */
2
+ * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist
3
+ * @param locales
4
+ */
5
5
  export declare function CanonicalizeLocaleList(locales?: string | readonly string[]): string[];
@@ -1,7 +1,7 @@
1
1
  /**
2
- * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist
3
- * @param locales
4
- */
2
+ * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist
3
+ * @param locales
4
+ */
5
5
  export function CanonicalizeLocaleList(locales) {
6
- return Intl.getCanonicalLocales(locales);
6
+ return Intl.getCanonicalLocales(locales);
7
7
  }
@@ -1,8 +1,8 @@
1
- import { invariant } from './utils.js';
1
+ import { invariant } from "./utils.js";
2
2
  export function CanonicalizeUValue(ukey, uvalue) {
3
- // TODO: Implement algorithm for CanonicalizeUValue per https://tc39.es/ecma402/#sec-canonicalizeuvalue
4
- var lowerValue = uvalue.toLowerCase();
5
- invariant(ukey !== undefined, "ukey must be defined");
6
- var canonicalized = lowerValue;
7
- return canonicalized;
3
+ // TODO: Implement algorithm for CanonicalizeUValue per https://tc39.es/ecma402/#sec-canonicalizeuvalue
4
+ let lowerValue = uvalue.toLowerCase();
5
+ invariant(ukey !== undefined, `ukey must be defined`);
6
+ let canonicalized = lowerValue;
7
+ return canonicalized;
8
8
  }
@@ -1,3 +1,3 @@
1
1
  export function CanonicalizeUnicodeLocaleId(locale) {
2
- return Intl.getCanonicalLocales(locale)[0];
2
+ return Intl.getCanonicalLocales(locale)[0];
3
3
  }
@@ -1,2 +1,2 @@
1
- import { Keyword } from './types.js';
1
+ import type { Keyword } from "./types.js";
2
2
  export declare function InsertUnicodeExtensionAndCanonicalize(locale: string, attributes: string[], keywords: Array<Keyword>): string;
@@ -1,32 +1,29 @@
1
- import { CanonicalizeUnicodeLocaleId } from './CanonicalizeUnicodeLocaleId.js';
2
- import { invariant } from './utils.js';
1
+ import { CanonicalizeUnicodeLocaleId } from "./CanonicalizeUnicodeLocaleId.js";
2
+ import { invariant } from "./utils.js";
3
3
  export function InsertUnicodeExtensionAndCanonicalize(locale, attributes, keywords) {
4
- invariant(locale.indexOf('-u-') === -1, 'Expected locale to not have a Unicode locale extension');
5
- var extension = '-u';
6
- for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {
7
- var attr = attributes_1[_i];
8
- extension += "-".concat(attr);
9
- }
10
- for (var _a = 0, keywords_1 = keywords; _a < keywords_1.length; _a++) {
11
- var kw = keywords_1[_a];
12
- var key = kw.key, value = kw.value;
13
- extension += "-".concat(key);
14
- if (value !== '') {
15
- extension += "-".concat(value);
16
- }
17
- }
18
- if (extension === '-u') {
19
- return CanonicalizeUnicodeLocaleId(locale);
20
- }
21
- var privateIndex = locale.indexOf('-x-');
22
- var newLocale;
23
- if (privateIndex === -1) {
24
- newLocale = locale + extension;
25
- }
26
- else {
27
- var preExtension = locale.slice(0, privateIndex);
28
- var postExtension = locale.slice(privateIndex);
29
- newLocale = preExtension + extension + postExtension;
30
- }
31
- return CanonicalizeUnicodeLocaleId(newLocale);
4
+ invariant(locale.indexOf("-u-") === -1, "Expected locale to not have a Unicode locale extension");
5
+ let extension = "-u";
6
+ for (const attr of attributes) {
7
+ extension += `-${attr}`;
8
+ }
9
+ for (const kw of keywords) {
10
+ const { key, value } = kw;
11
+ extension += `-${key}`;
12
+ if (value !== "") {
13
+ extension += `-${value}`;
14
+ }
15
+ }
16
+ if (extension === "-u") {
17
+ return CanonicalizeUnicodeLocaleId(locale);
18
+ }
19
+ let privateIndex = locale.indexOf("-x-");
20
+ let newLocale;
21
+ if (privateIndex === -1) {
22
+ newLocale = locale + extension;
23
+ } else {
24
+ let preExtension = locale.slice(0, privateIndex);
25
+ let postExtension = locale.slice(privateIndex);
26
+ newLocale = preExtension + extension + postExtension;
27
+ }
28
+ return CanonicalizeUnicodeLocaleId(newLocale);
32
29
  }
@@ -1,8 +1,8 @@
1
- import { LookupMatcherResult } from './types.js';
1
+ import type { LookupMatcherResult } from "./types.js";
2
2
  /**
3
- * https://tc39.es/ecma402/#sec-lookupmatcher
4
- * @param availableLocales
5
- * @param requestedLocales
6
- * @param getDefaultLocale
7
- */
3
+ * https://tc39.es/ecma402/#sec-lookupmatcher
4
+ * @param availableLocales
5
+ * @param requestedLocales
6
+ * @param getDefaultLocale
7
+ */
8
8
  export declare function LookupMatcher(availableLocales: readonly string[], requestedLocales: readonly string[], getDefaultLocale: () => string): LookupMatcherResult;
@@ -1,25 +1,24 @@
1
- import { BestAvailableLocale } from './BestAvailableLocale.js';
2
- import { UNICODE_EXTENSION_SEQUENCE_REGEX } from './utils.js';
1
+ import { BestAvailableLocale } from "./BestAvailableLocale.js";
2
+ import { UNICODE_EXTENSION_SEQUENCE_REGEX } from "./utils.js";
3
3
  /**
4
- * https://tc39.es/ecma402/#sec-lookupmatcher
5
- * @param availableLocales
6
- * @param requestedLocales
7
- * @param getDefaultLocale
8
- */
4
+ * https://tc39.es/ecma402/#sec-lookupmatcher
5
+ * @param availableLocales
6
+ * @param requestedLocales
7
+ * @param getDefaultLocale
8
+ */
9
9
  export function LookupMatcher(availableLocales, requestedLocales, getDefaultLocale) {
10
- var result = { locale: '' };
11
- for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {
12
- var locale = requestedLocales_1[_i];
13
- var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');
14
- var availableLocale = BestAvailableLocale(availableLocales, noExtensionLocale);
15
- if (availableLocale) {
16
- result.locale = availableLocale;
17
- if (locale !== noExtensionLocale) {
18
- result.extension = locale.slice(noExtensionLocale.length, locale.length);
19
- }
20
- return result;
21
- }
22
- }
23
- result.locale = getDefaultLocale();
24
- return result;
10
+ const result = { locale: "" };
11
+ for (const locale of requestedLocales) {
12
+ const noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, "");
13
+ const availableLocale = BestAvailableLocale(availableLocales, noExtensionLocale);
14
+ if (availableLocale) {
15
+ result.locale = availableLocale;
16
+ if (locale !== noExtensionLocale) {
17
+ result.extension = locale.slice(noExtensionLocale.length, locale.length);
18
+ }
19
+ return result;
20
+ }
21
+ }
22
+ result.locale = getDefaultLocale();
23
+ return result;
25
24
  }
@@ -1,6 +1,6 @@
1
1
  /**
2
- * https://tc39.es/ecma402/#sec-lookupsupportedlocales
3
- * @param availableLocales
4
- * @param requestedLocales
5
- */
2
+ * https://tc39.es/ecma402/#sec-lookupsupportedlocales
3
+ * @param availableLocales
4
+ * @param requestedLocales
5
+ */
6
6
  export declare function LookupSupportedLocales(availableLocales: string[], requestedLocales: string[]): string[];
@@ -1,19 +1,18 @@
1
- import { BestAvailableLocale } from './BestAvailableLocale.js';
2
- import { UNICODE_EXTENSION_SEQUENCE_REGEX } from './utils.js';
1
+ import { BestAvailableLocale } from "./BestAvailableLocale.js";
2
+ import { UNICODE_EXTENSION_SEQUENCE_REGEX } from "./utils.js";
3
3
  /**
4
- * https://tc39.es/ecma402/#sec-lookupsupportedlocales
5
- * @param availableLocales
6
- * @param requestedLocales
7
- */
4
+ * https://tc39.es/ecma402/#sec-lookupsupportedlocales
5
+ * @param availableLocales
6
+ * @param requestedLocales
7
+ */
8
8
  export function LookupSupportedLocales(availableLocales, requestedLocales) {
9
- var subset = [];
10
- for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {
11
- var locale = requestedLocales_1[_i];
12
- var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, '');
13
- var availableLocale = BestAvailableLocale(availableLocales, noExtensionLocale);
14
- if (availableLocale) {
15
- subset.push(availableLocale);
16
- }
17
- }
18
- return subset;
9
+ const subset = [];
10
+ for (const locale of requestedLocales) {
11
+ const noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, "");
12
+ const availableLocale = BestAvailableLocale(availableLocales, noExtensionLocale);
13
+ if (availableLocale) {
14
+ subset.push(availableLocale);
15
+ }
16
+ }
17
+ return subset;
19
18
  }
@@ -1,14 +1,15 @@
1
1
  export interface ResolveLocaleResult {
2
- locale: string;
3
- dataLocale: string;
4
- [k: string]: any;
2
+ locale: string;
3
+ dataLocale: string;
4
+ [k: string]: any;
5
5
  }
6
6
  /**
7
- * https://tc39.es/ecma402/#sec-resolvelocale
8
- */
9
- export declare function ResolveLocale<K extends string, D extends {
10
- [k in K]: any;
11
- }>(availableLocales: Set<string> | readonly string[], requestedLocales: readonly string[], options: {
12
- localeMatcher: string;
13
- [k: string]: string;
7
+ * https://tc39.es/ecma402/#sec-resolvelocale
8
+ */
9
+ export declare function ResolveLocale<
10
+ K extends string,
11
+ D extends { [k in K] : any }
12
+ >(availableLocales: Set<string> | readonly string[], requestedLocales: readonly string[], options: {
13
+ localeMatcher: string;
14
+ [k: string]: string;
14
15
  }, relevantExtensionKeys: K[], localeData: Record<string, D | undefined>, getDefaultLocale: () => string): ResolveLocaleResult;
@@ -1,100 +1,95 @@
1
- import { BestFitMatcher } from './BestFitMatcher.js';
2
- import { CanonicalizeUValue } from './CanonicalizeUValue.js';
3
- import { InsertUnicodeExtensionAndCanonicalize } from './InsertUnicodeExtensionAndCanonicalize.js';
4
- import { LookupMatcher } from './LookupMatcher.js';
5
- import { UnicodeExtensionComponents } from './UnicodeExtensionComponents.js';
6
- import { invariant } from './utils.js';
1
+ import { BestFitMatcher } from "./BestFitMatcher.js";
2
+ import { CanonicalizeUValue } from "./CanonicalizeUValue.js";
3
+ import { InsertUnicodeExtensionAndCanonicalize } from "./InsertUnicodeExtensionAndCanonicalize.js";
4
+ import { LookupMatcher } from "./LookupMatcher.js";
5
+ import { UnicodeExtensionComponents } from "./UnicodeExtensionComponents.js";
6
+ import { invariant } from "./utils.js";
7
7
  /**
8
- * https://tc39.es/ecma402/#sec-resolvelocale
9
- */
8
+ * https://tc39.es/ecma402/#sec-resolvelocale
9
+ */
10
10
  export function ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData, getDefaultLocale) {
11
- var _a;
12
- var matcher = options.localeMatcher;
13
- var r;
14
- if (matcher === 'lookup') {
15
- r = LookupMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);
16
- }
17
- else {
18
- r = BestFitMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);
19
- }
20
- if (r == null) {
21
- r = {
22
- locale: getDefaultLocale(),
23
- extension: '',
24
- };
25
- }
26
- var foundLocale = r.locale;
27
- var foundLocaleData = localeData[foundLocale];
28
- // TODO: We can't really guarantee that the locale data is available
29
- // invariant(
30
- // foundLocaleData !== undefined,
31
- // `Missing locale data for ${foundLocale}`
32
- // )
33
- var result = { locale: 'en', dataLocale: foundLocale };
34
- var components;
35
- var keywords;
36
- if (r.extension) {
37
- components = UnicodeExtensionComponents(r.extension);
38
- keywords = components.keywords;
39
- }
40
- else {
41
- keywords = [];
42
- }
43
- var supportedKeywords = [];
44
- var _loop_1 = function (key) {
45
- // TODO: Shouldn't default to empty array, see TODO above
46
- var keyLocaleData = (_a = foundLocaleData === null || foundLocaleData === void 0 ? void 0 : foundLocaleData[key]) !== null && _a !== void 0 ? _a : [];
47
- invariant(Array.isArray(keyLocaleData), "keyLocaleData for ".concat(key, " must be an array"));
48
- var value = keyLocaleData[0];
49
- invariant(value === undefined || typeof value === 'string', "value must be a string or undefined");
50
- var supportedKeyword = void 0;
51
- var entry = keywords.find(function (k) { return k.key === key; });
52
- if (entry) {
53
- var requestedValue = entry.value;
54
- if (requestedValue !== '') {
55
- if (keyLocaleData.indexOf(requestedValue) > -1) {
56
- value = requestedValue;
57
- supportedKeyword = {
58
- key: key,
59
- value: value,
60
- };
61
- }
62
- }
63
- else if (keyLocaleData.indexOf('true') > -1) {
64
- value = 'true';
65
- supportedKeyword = {
66
- key: key,
67
- value: value,
68
- };
69
- }
70
- }
71
- var optionsValue = options[key];
72
- invariant(optionsValue == null || typeof optionsValue === 'string', "optionsValue must be a string or undefined");
73
- if (typeof optionsValue === 'string') {
74
- var ukey = key.toLowerCase();
75
- optionsValue = CanonicalizeUValue(ukey, optionsValue);
76
- if (optionsValue === '') {
77
- optionsValue = 'true';
78
- }
79
- }
80
- if (optionsValue !== value && keyLocaleData.indexOf(optionsValue) > -1) {
81
- value = optionsValue;
82
- supportedKeyword = undefined;
83
- }
84
- if (supportedKeyword) {
85
- supportedKeywords.push(supportedKeyword);
86
- }
87
- result[key] = value;
88
- };
89
- for (var _i = 0, relevantExtensionKeys_1 = relevantExtensionKeys; _i < relevantExtensionKeys_1.length; _i++) {
90
- var key = relevantExtensionKeys_1[_i];
91
- _loop_1(key);
92
- }
93
- var supportedAttributes = [];
94
- if (supportedKeywords.length > 0) {
95
- supportedAttributes = [];
96
- foundLocale = InsertUnicodeExtensionAndCanonicalize(foundLocale, supportedAttributes, supportedKeywords);
97
- }
98
- result.locale = foundLocale;
99
- return result;
11
+ const matcher = options.localeMatcher;
12
+ let r;
13
+ if (matcher === "lookup") {
14
+ r = LookupMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);
15
+ } else {
16
+ r = BestFitMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);
17
+ }
18
+ if (r == null) {
19
+ r = {
20
+ locale: getDefaultLocale(),
21
+ extension: ""
22
+ };
23
+ }
24
+ let foundLocale = r.locale;
25
+ let foundLocaleData = localeData[foundLocale];
26
+ // TODO: We can't really guarantee that the locale data is available
27
+ // invariant(
28
+ // foundLocaleData !== undefined,
29
+ // `Missing locale data for ${foundLocale}`
30
+ // )
31
+ const result = {
32
+ locale: "en",
33
+ dataLocale: foundLocale
34
+ };
35
+ let components;
36
+ let keywords;
37
+ if (r.extension) {
38
+ components = UnicodeExtensionComponents(r.extension);
39
+ keywords = components.keywords;
40
+ } else {
41
+ keywords = [];
42
+ }
43
+ let supportedKeywords = [];
44
+ for (const key of relevantExtensionKeys) {
45
+ // TODO: Shouldn't default to empty array, see TODO above
46
+ let keyLocaleData = foundLocaleData?.[key] ?? [];
47
+ invariant(Array.isArray(keyLocaleData), `keyLocaleData for ${key} must be an array`);
48
+ let value = keyLocaleData[0];
49
+ invariant(value === undefined || typeof value === "string", `value must be a string or undefined`);
50
+ let supportedKeyword;
51
+ let entry = keywords.find((k) => k.key === key);
52
+ if (entry) {
53
+ let requestedValue = entry.value;
54
+ if (requestedValue !== "") {
55
+ if (keyLocaleData.indexOf(requestedValue) > -1) {
56
+ value = requestedValue;
57
+ supportedKeyword = {
58
+ key,
59
+ value
60
+ };
61
+ }
62
+ } else if (keyLocaleData.indexOf("true") > -1) {
63
+ value = "true";
64
+ supportedKeyword = {
65
+ key,
66
+ value
67
+ };
68
+ }
69
+ }
70
+ let optionsValue = options[key];
71
+ invariant(optionsValue == null || typeof optionsValue === "string", `optionsValue must be a string or undefined`);
72
+ if (typeof optionsValue === "string") {
73
+ let ukey = key.toLowerCase();
74
+ optionsValue = CanonicalizeUValue(ukey, optionsValue);
75
+ if (optionsValue === "") {
76
+ optionsValue = "true";
77
+ }
78
+ }
79
+ if (optionsValue !== value && keyLocaleData.indexOf(optionsValue) > -1) {
80
+ value = optionsValue;
81
+ supportedKeyword = undefined;
82
+ }
83
+ if (supportedKeyword) {
84
+ supportedKeywords.push(supportedKeyword);
85
+ }
86
+ result[key] = value;
87
+ }
88
+ let supportedAttributes = [];
89
+ if (supportedKeywords.length > 0) {
90
+ supportedAttributes = [];
91
+ foundLocale = InsertUnicodeExtensionAndCanonicalize(foundLocale, supportedAttributes, supportedKeywords);
92
+ }
93
+ result.locale = foundLocale;
94
+ return result;
100
95
  }
@@ -1,5 +1,5 @@
1
- import { Keyword } from './types.js';
1
+ import type { Keyword } from "./types.js";
2
2
  export declare function UnicodeExtensionComponents(extension: string): {
3
- attributes: string[];
4
- keywords: Array<Keyword>;
3
+ attributes: string[];
4
+ keywords: Array<Keyword>;
5
5
  };