@refinitiv-ui/i18n 0.0.0-build.1957399501.1

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/CHANGELOG.md ADDED
@@ -0,0 +1,153 @@
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
+
6
+ ## [5.2.6](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/i18n@5.2.5...@refinitiv-ui/i18n@5.2.6) (2022-01-12)
7
+
8
+ **Note:** Version bump only for package @refinitiv-ui/i18n
9
+
10
+
11
+
12
+
13
+
14
+ ## [5.2.5](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/i18n@5.2.4...@refinitiv-ui/i18n@5.2.5) (2021-12-21)
15
+
16
+ **Note:** Version bump only for package @refinitiv-ui/i18n
17
+
18
+
19
+
20
+
21
+
22
+ ## [5.2.4](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/i18n@5.2.3...@refinitiv-ui/i18n@5.2.4) (2021-12-15)
23
+
24
+ **Note:** Version bump only for package @refinitiv-ui/i18n
25
+
26
+
27
+
28
+
29
+
30
+ ## [5.2.3](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/i18n@5.2.2...@refinitiv-ui/i18n@5.2.3) (2021-12-07)
31
+
32
+ **Note:** Version bump only for package @refinitiv-ui/i18n
33
+
34
+
35
+
36
+
37
+
38
+ ## [5.2.2](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/i18n@5.2.1...@refinitiv-ui/i18n@5.2.2) (2021-12-03)
39
+
40
+ **Note:** Version bump only for package @refinitiv-ui/i18n
41
+
42
+
43
+
44
+
45
+
46
+ ## [5.2.1](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/i18n@5.2.0...@refinitiv-ui/i18n@5.2.1) (2021-11-22)
47
+
48
+ **Note:** Version bump only for package @refinitiv-ui/i18n
49
+
50
+
51
+
52
+
53
+
54
+ # [5.2.0](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/i18n@5.1.8...@refinitiv-ui/i18n@5.2.0) (2021-11-08)
55
+
56
+
57
+ ### Features
58
+
59
+ * Lit@2 upgrade ([dbda63b](https://github.com/Refinitiv/refinitiv-ui/commit/dbda63be97257f891cb1f2c5ff46b638c70e0b15))
60
+
61
+
62
+
63
+
64
+
65
+ ## [5.1.8](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/i18n@5.1.5...@refinitiv-ui/i18n@5.1.8) (2021-10-25)
66
+
67
+ **Note:** Version bump only for package @refinitiv-ui/i18n
68
+
69
+
70
+
71
+
72
+
73
+ ## [5.1.5](https://github.com/Refinitiv/refinitiv-ui/compare/@refinitiv-ui/i18n@5.1.4...@refinitiv-ui/i18n@5.1.5) (2021-10-11)
74
+
75
+
76
+ ### Bug Fixes
77
+
78
+ * remove source maps reference from the production build ([655d0bb](https://github.com/Refinitiv/refinitiv-ui/commit/655d0bb57290e5fe1276bf1a99bd7a0190d7a2f8))
79
+
80
+
81
+
82
+
83
+
84
+ ## [5.1.4](https://git.sami.int.thomsonreuters.com/elf/refinitiv-ui/compare/@refinitiv-ui/i18n@5.1.3...@refinitiv-ui/i18n@5.1.4) (2021-09-15)
85
+
86
+ **Note:** Version bump only for package @refinitiv-ui/i18n
87
+
88
+
89
+
90
+
91
+
92
+ ## [5.1.3](https://git.sami.int.thomsonreuters.com/elf/refinitiv-ui/compare/@refinitiv-ui/i18n@5.1.2...@refinitiv-ui/i18n@5.1.3) (2021-09-13)
93
+
94
+ **Note:** Version bump only for package @refinitiv-ui/i18n
95
+
96
+
97
+
98
+
99
+
100
+ ## [5.1.2](https://git.sami.int.thomsonreuters.com/elf/refinitiv-ui/compare/@refinitiv-ui/i18n@5.1.1...@refinitiv-ui/i18n@5.1.2) (2021-09-10)
101
+
102
+ **Note:** Version bump only for package @refinitiv-ui/i18n
103
+
104
+
105
+
106
+
107
+
108
+ ## [5.1.1](https://git.sami.int.thomsonreuters.com/elf/refinitiv-ui/compare/@refinitiv-ui/i18n@5.1.0...@refinitiv-ui/i18n@5.1.1) (2021-08-27)
109
+
110
+ **Note:** Version bump only for package @refinitiv-ui/i18n
111
+
112
+
113
+
114
+
115
+
116
+ # [5.1.0](https://git.sami.int.thomsonreuters.com/elf/refinitiv-ui/compare/@refinitiv-ui/i18n@5.0.0...@refinitiv-ui/i18n@5.1.0) (2021-07-30)
117
+
118
+
119
+ ### Features
120
+
121
+ * use latest FormatJS polyfills and ICU parser ([b7855e4](https://git.sami.int.thomsonreuters.com/elf/refinitiv-ui/commits/b7855e409d10d9c8b9f31a34953470549295a8ab))
122
+
123
+
124
+
125
+
126
+
127
+ # [5.0.0](https://git.sami.int.thomsonreuters.com/elf/refinitiv-ui/compare/@refinitiv-ui/i18n@5.0.0-beta.3...@refinitiv-ui/i18n@5.0.0) (2021-07-16)
128
+
129
+
130
+ ### Bug Fixes
131
+
132
+ * i18n linting ([9c46fdc](https://git.sami.int.thomsonreuters.com/elf/refinitiv-ui/commits/9c46fdcc5a4e0c01784c5820086b1de58c2d954c))
133
+
134
+
135
+ ### Features
136
+
137
+ * rollback files and folders that do not need to be changed ([83a382a](https://git.sami.int.thomsonreuters.com/elf/refinitiv-ui/commits/83a382a522c10895b4c31c69fe19f5f7d00c9f66))
138
+
139
+
140
+
141
+
142
+
143
+ # [5.0.0-beta.3](https://git.sami.int.thomsonreuters.com/elf/refinitiv-ui/compare/@refinitiv-ui/i18n@5.0.0-beta.1...@refinitiv-ui/i18n@5.0.0-beta.3) (2021-07-02)
144
+
145
+ **Note:** Version bump only for package @refinitiv-ui/i18n
146
+
147
+ # [5.0.0-beta.1](https://git.sami.int.thomsonreuters.com/elf/refinitiv-ui/compare/@refinitiv-ui/i18n@5.0.0-beta.0...@refinitiv-ui/i18n@5.0.0-beta.1) (2021-06-22)
148
+
149
+ **Note:** Version bump only for package @refinitiv-ui/i18n
150
+
151
+ # [5.0.0-beta.0](https://git.sami.int.thomsonreuters.com/elf/refinitiv-ui/compare/@refinitiv-ui/i18n@5.0.0-alpha.6...@refinitiv-ui/i18n@5.0.0-beta.0) (2021-06-22)
152
+
153
+ **Note:** Version bump only for package @refinitiv-ui/i18n
package/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright © 2021, Refinitiv.
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
package/README.md ADDED
@@ -0,0 +1,160 @@
1
+ # I18N
2
+
3
+ `@refinitiv-ui/i18n` provides wrappers and APIs around formatjs [IntlMessageFormat](https://formatjs.io/docs/intl-messageformat/) and `@refinitiv-ui/phrasebook`. In addition, it provides tools to observe `lang` attribute changes.
4
+
5
+ ## Usage
6
+
7
+ Use with `@refinitiv-ui/translate` to translate Element Framework components.
8
+
9
+ ## API Overview
10
+
11
+ `@refinitiv-ui/i18n` provides a set of APIs to facilities translations.
12
+
13
+ ### t()
14
+
15
+ `t` function is used to get the translation message from **Phrasebook**. Please refer to `@refinitiv-ui/phrasebook` documentation on how to populate phrasebooks.
16
+
17
+ ```js
18
+ // get translation for "element-scope" scope, "en" locale, "TRANSLATE_KEY" with options
19
+ const message = await t('element-scope', 'en', 'TRANSLATE_KEY', {
20
+ option: 'value',
21
+ });
22
+ ```
23
+
24
+ If the requested locale is not available, `t` always tries to resolve the translation from the default locale (`DEFAULT_LOCALE`). If translation cannot be found the requested _translation key_ is returned:
25
+
26
+ ```js
27
+ // outputs 'TRANSLATION_KEY'
28
+ const message = await t('element-scope', 'unknown-LOCALE', 'TRANSLATION_KEY');
29
+ ```
30
+
31
+ ### LangAttributeObserver
32
+
33
+ It is common that translations are applied based on `lang` HTML attribute. Please see [Language tag syntax](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang) to get additional information.
34
+
35
+ `LangAttributeObserver` utilizes [MutationObserver](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) to run a callback when `lang` attribute changes either on document level or on element level.
36
+
37
+ ```html
38
+ <!-- Define document level locale -->
39
+ <html lang="en-GB">
40
+ <body>
41
+ <!-- This paragraph uses document locale -->
42
+ <p id="first">This paragraph uses document locale</p>
43
+
44
+ <!-- Define element level locale -->
45
+ <p id="second" lang="ru">Этот параграф написан на русском.</p>
46
+ </body>
47
+ </html>
48
+ ```
49
+
50
+ ```js
51
+ const paragraph1 = document.getElementById('first');
52
+ const paragraph2 = document.getElementById('second');
53
+
54
+ // start observing lang changes
55
+ LangAttributeObserver.observe(paragraph1, () => {
56
+ console.log('First paragraph locale changes');
57
+ });
58
+ LangAttributeObserver.observe(paragraph2, () => {
59
+ console.log('Second paragraph locale changes');
60
+ });
61
+
62
+ // Outputs: 'First paragraph locale changes'
63
+ document.documentElement.lang = 'it';
64
+
65
+ // Outputs: 'Second paragraph locale changes'
66
+ paragraph2.lang = 'es';
67
+ ```
68
+
69
+ To stop observing `lang` changes and avoid memory leaks you **must** disconnect an element.
70
+
71
+ ```js
72
+ LangAttributeObserver.disconnect(paragraph1);
73
+ LangAttributeObserver.disconnect(paragraph2);
74
+ ```
75
+
76
+ ### clearCache() and clearCachedRecord()
77
+
78
+ `@refinitiv-ui/i18n` caches translations for efficient re-use. In rare scenarios, you might need to clear the cache manually.
79
+
80
+ ```js
81
+ // Clear all cached records
82
+ clearCache();
83
+
84
+ // Clear cached record for specific scope and locale
85
+ clearCachedRecord('element-scope', 'en');
86
+ ```
87
+
88
+ ### resolveLocale()
89
+
90
+ The function is used to get the most suitable locale for the scope by checking supported locales from Phrasebook.
91
+
92
+ ```js
93
+ // If supported locales for "element-scope" are "['en', 'zh-Hant', 'zh-Hans']"
94
+ resolveLocale('element-scope', 'en'); // resolved as "en"
95
+ resolveLocale('element-scope', 'en-GB'); // resolved as "en"
96
+ resolveLocale('element-scope', 'en-US'); // resolved as "en"
97
+ resolveLocale('element-scope', 'ru'); // resolved as "". No matching locales
98
+ resolveLocale('element-scope', 'zh'); // resolved as "". No matching locales
99
+ resolveLocale('element-scope', 'zh-Hant'); // resolved as "zh-Hant"
100
+ resolveLocale('element-scope', 'zh-Hant-HK'); // resolved as "zh-Hant"
101
+ ```
102
+
103
+ ## Technical Details
104
+
105
+ ### Locale resolution
106
+
107
+ `@refinitiv-ui/i18n` tries to match the best available locale or fallback to default if none is available.
108
+
109
+ For example, if the Phrasebooks defines the following locales: `['en', 'zh-Hant', 'zh-Hans']`. The list below shows how the locales will be resolved:
110
+
111
+ - en -> en
112
+ - en-GB -> en
113
+ - en-US -> en
114
+ - ru -> DEFAULT_LOCALE (en-GB) -> en
115
+ - zh -> DEFAULT_LOCALE (en-GB) -> en
116
+ - zh-Hant -> zh-Hant
117
+ - zh-Hant-HK -> zh-Hant
118
+
119
+ ### Caching
120
+
121
+ Creating instances of `Intl` formats is an expensive operation. `@refinitiv-ui/i18n` re-uses [Intl Format Cache](https://www.npmjs.com/package/intl-format-cache) to memoise translations.
122
+
123
+ ### Unicode Extension
124
+
125
+ Translate object supports [BCP47 unicode extensions](https://www.w3.org/International/multilingualweb/dublin/slides/23b-davis.pdf). You can provide unicode as part of `locale` or by passing `unicodeExtensions` to `t` function.
126
+
127
+ ```html
128
+ <!-- English locale with Islamic Calendar and 24h time format -->
129
+ <html lang="en-u-hc-h24-ca-islamic"></html>
130
+ ```
131
+
132
+ ```js
133
+ const message = await t(
134
+ 'element-scope',
135
+ 'en',
136
+ 'TRANSLATE_KEY',
137
+ {
138
+ option: 'value',
139
+ },
140
+ {
141
+ // English locale with Islamic Calendar and 24h time format
142
+ unicodeExtensions: {
143
+ hc: 'h24',
144
+ ca: 'islamic',
145
+ },
146
+ }
147
+ );
148
+ ```
149
+
150
+ Note that you cannot provide more than one list of unicode extensions. Therefore, if extensions are provided via html and JavaScript, the list is merged.
151
+
152
+ ## References
153
+
154
+ You can get additional information about internationalization:
155
+
156
+ - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl
157
+ - https://formatjs.io/
158
+ - https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang
159
+ - https://messageformat.github.io/messageformat/page-guide
160
+
@@ -0,0 +1,2 @@
1
+ declare const DEFAULT_LOCALE = "en-GB";
2
+ export { DEFAULT_LOCALE };
@@ -0,0 +1,2 @@
1
+ const DEFAULT_LOCALE = 'en-GB';
2
+ export { DEFAULT_LOCALE };
package/lib/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export type { TranslateOptions, TranslateMessage, TranslateParams, UnicodeExtensions, MessageFormats, MessageOptions } from './types';
2
+ export { LangObserverCallback, LangAttributeObserver } from './lang-attribute-observer.js';
3
+ export { t, clearCache, resolveLocale, clearCachedRecord } from './translate.js';
4
+ export { DEFAULT_LOCALE } from './constants.js';
package/lib/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { LangAttributeObserver } from './lang-attribute-observer.js';
2
+ export { t, clearCache, resolveLocale, clearCachedRecord } from './translate.js';
3
+ export { DEFAULT_LOCALE } from './constants.js';
@@ -0,0 +1,33 @@
1
+ declare type LangObserverCallback = () => void;
2
+ /**
3
+ * An abstract class to observe `lang` attribute changes
4
+ * on element and document element
5
+ */
6
+ declare abstract class LangAttributeObserver {
7
+ private static documentObserver;
8
+ private static elements;
9
+ private static callbacks;
10
+ private static startObserving;
11
+ private static stopObserving;
12
+ private static onDocumentLang;
13
+ private static documentChangeCallback;
14
+ /**
15
+ * Start observing `lang` changes on element
16
+ * @param element An element
17
+ * @param callback A callback to run when `lang` has changed
18
+ * @returns {void}
19
+ */
20
+ static observe(element: HTMLElement, callback: LangObserverCallback): void;
21
+ /**
22
+ * Disconnect `lang` element observer from element
23
+ * @param element An element
24
+ * @returns {void}
25
+ */
26
+ static disconnect(element: HTMLElement): void;
27
+ /**
28
+ * Get document element lang
29
+ * @returns lang
30
+ */
31
+ static get documentLang(): string;
32
+ }
33
+ export { LangObserverCallback, LangAttributeObserver };
@@ -0,0 +1,68 @@
1
+ /**
2
+ * MutationObserver configuration
3
+ */
4
+ const OBSERVER_CONFIG = {
5
+ attributes: true,
6
+ attributeFilter: ['lang']
7
+ };
8
+ /**
9
+ * An abstract class to observe `lang` attribute changes
10
+ * on element and document element
11
+ */
12
+ class LangAttributeObserver {
13
+ static startObserving(element, callback) {
14
+ const observer = new MutationObserver(() => callback());
15
+ observer.observe(element, OBSERVER_CONFIG);
16
+ return observer;
17
+ }
18
+ static stopObserving(observer) {
19
+ observer.disconnect();
20
+ }
21
+ static onDocumentLang() {
22
+ this.callbacks.forEach(this.documentChangeCallback);
23
+ }
24
+ static documentChangeCallback(callback, element) {
25
+ if (!element.lang) {
26
+ callback();
27
+ }
28
+ }
29
+ /**
30
+ * Start observing `lang` changes on element
31
+ * @param element An element
32
+ * @param callback A callback to run when `lang` has changed
33
+ * @returns {void}
34
+ */
35
+ static observe(element, callback) {
36
+ if (!this.documentObserver) {
37
+ this.documentObserver = this.startObserving(document.documentElement, this.onDocumentLang.bind(this));
38
+ }
39
+ this.callbacks.set(element, callback);
40
+ if (this.elements.has(element)) {
41
+ this.stopObserving(this.elements.get(element));
42
+ }
43
+ this.elements.set(element, this.startObserving(element, callback));
44
+ }
45
+ /**
46
+ * Disconnect `lang` element observer from element
47
+ * @param element An element
48
+ * @returns {void}
49
+ */
50
+ static disconnect(element) {
51
+ this.callbacks.delete(element);
52
+ if (!this.callbacks.size && this.documentObserver) {
53
+ this.stopObserving(this.documentObserver);
54
+ this.documentObserver = null;
55
+ }
56
+ }
57
+ /**
58
+ * Get document element lang
59
+ * @returns lang
60
+ */
61
+ static get documentLang() {
62
+ return document.documentElement.lang;
63
+ }
64
+ }
65
+ LangAttributeObserver.documentObserver = null;
66
+ LangAttributeObserver.elements = new WeakMap();
67
+ LangAttributeObserver.callbacks = new Map();
68
+ export { LangAttributeObserver };
@@ -0,0 +1,58 @@
1
+ import type { TranslateOptions, TranslateMessage, MessageFormats, MessageOptions } from './types';
2
+ declare abstract class Memoiser {
3
+ /**
4
+ * There is no right answer when to delete memoised function
5
+ * To crete a new intl object is expensive, as well as to keep all memoised functions in memory
6
+ * might not be what the developer want
7
+ * Therefore set a timer and delete memoised function if not in use
8
+ */
9
+ private static Timeout;
10
+ private static interval;
11
+ private static memoiseMap;
12
+ private static getMemoiseKey;
13
+ private static clearRecord;
14
+ private static setInterval;
15
+ private static intervalCallback;
16
+ private static clearInterval;
17
+ private static hasRecords;
18
+ /**
19
+ * Get IntlMessageFormat memoised function
20
+ * @param scope Scope
21
+ * @param locale Locale
22
+ * @param key Key
23
+ * @param message Message
24
+ * @param [formats] Override Formats
25
+ * @param [opts] Options
26
+ * @returns IntlMessageFormat
27
+ */
28
+ private static get;
29
+ /**
30
+ * Clear all cached records
31
+ * @param scope Scope
32
+ * @param locale Local
33
+ * @returns {void}
34
+ */
35
+ static clear(): void;
36
+ /**
37
+ * Delete cached record
38
+ * @param scope Scope
39
+ * @param locale Local
40
+ * @returns {void}
41
+ */
42
+ static delete(scope: string, locale: string): void;
43
+ /**
44
+ * Get a formatted localised string
45
+ * @param scope Scope
46
+ * @param locale Locale
47
+ * @param key Key
48
+ * @param message Message
49
+ * @param [options] Additional options to format the string
50
+ * @param [formats] Optional object with user defined options for format styles.
51
+ * @param [opts] Optional options.
52
+ * - formatters: Map containing memoized formatters for performance.
53
+ * - ignoreTag: Whether to treat HTML/XML tags as string literal instead of parsing them as tag token. When this is false we only allow simple tags without any attributes
54
+ * @returns formatted message
55
+ */
56
+ static format(scope: string, locale: string, key: string, message: TranslateMessage, options?: TranslateOptions, formats?: MessageFormats, opts?: MessageOptions): string;
57
+ }
58
+ export { Memoiser };
@@ -0,0 +1,123 @@
1
+ // see https://github.com/formatjs/formatjs/tree/main/packages/intl-format-cache
2
+ // to understand more why memoiser is required
3
+ import IntlMessageFormat from 'intl-messageformat';
4
+ import memoizeFormatConstructor from 'intl-format-cache';
5
+ class Memoiser {
6
+ static getMemoiseKey(scope, locale) {
7
+ return `${scope}|${locale}`;
8
+ }
9
+ static clearRecord(memoiseKey) {
10
+ delete this.memoiseMap[memoiseKey];
11
+ }
12
+ static setInterval() {
13
+ if (this.interval === null) {
14
+ this.interval = window.setInterval(() => this.intervalCallback(), this.Timeout);
15
+ }
16
+ }
17
+ static intervalCallback() {
18
+ const now = Date.now();
19
+ let memoiseKey;
20
+ for (memoiseKey in this.memoiseMap) {
21
+ const { time } = this.memoiseMap[memoiseKey];
22
+ if (now - time > this.Timeout) {
23
+ this.clearRecord(memoiseKey);
24
+ }
25
+ }
26
+ if (!this.hasRecords()) {
27
+ this.clearInterval();
28
+ }
29
+ }
30
+ static clearInterval() {
31
+ if (this.interval) {
32
+ clearInterval(this.interval);
33
+ this.interval = null;
34
+ }
35
+ }
36
+ static hasRecords() {
37
+ return Object.keys(this.memoiseMap).length > 0;
38
+ }
39
+ /**
40
+ * Get IntlMessageFormat memoised function
41
+ * @param scope Scope
42
+ * @param locale Locale
43
+ * @param key Key
44
+ * @param message Message
45
+ * @param [formats] Override Formats
46
+ * @param [opts] Options
47
+ * @returns IntlMessageFormat
48
+ */
49
+ static get(scope, locale, key, message, formats, opts) {
50
+ const memoiseKey = this.getMemoiseKey(scope, locale);
51
+ let memoised = this.memoiseMap[memoiseKey];
52
+ // set the formatter first
53
+ if (!memoised) {
54
+ memoised = {
55
+ formatter: memoizeFormatConstructor(IntlMessageFormat),
56
+ keys: {},
57
+ time: 0
58
+ };
59
+ this.memoiseMap[memoiseKey] = memoised;
60
+ }
61
+ // keys collection stores all memoised keys
62
+ const { keys, formatter } = memoised;
63
+ let format = keys[key];
64
+ if (!format) {
65
+ format = formatter(message, locale, formats, opts);
66
+ keys[key] = format;
67
+ }
68
+ // reset self timeout
69
+ memoised.time = Date.now();
70
+ this.setInterval();
71
+ return format;
72
+ }
73
+ /**
74
+ * Clear all cached records
75
+ * @param scope Scope
76
+ * @param locale Local
77
+ * @returns {void}
78
+ */
79
+ static clear() {
80
+ this.memoiseMap = {};
81
+ this.clearInterval();
82
+ }
83
+ /**
84
+ * Delete cached record
85
+ * @param scope Scope
86
+ * @param locale Local
87
+ * @returns {void}
88
+ */
89
+ static delete(scope, locale) {
90
+ const memoiseKey = this.getMemoiseKey(scope, locale);
91
+ this.clearRecord(memoiseKey);
92
+ if (!this.hasRecords()) {
93
+ this.clearInterval();
94
+ }
95
+ }
96
+ /**
97
+ * Get a formatted localised string
98
+ * @param scope Scope
99
+ * @param locale Locale
100
+ * @param key Key
101
+ * @param message Message
102
+ * @param [options] Additional options to format the string
103
+ * @param [formats] Optional object with user defined options for format styles.
104
+ * @param [opts] Optional options.
105
+ * - formatters: Map containing memoized formatters for performance.
106
+ * - ignoreTag: Whether to treat HTML/XML tags as string literal instead of parsing them as tag token. When this is false we only allow simple tags without any attributes
107
+ * @returns formatted message
108
+ */
109
+ static format(scope, locale, key, message, options, formats, opts) {
110
+ const intlMessage = this.get(scope, locale, key, message, formats, opts);
111
+ return String(intlMessage.format(options)); /* need casting as default return is unknown */
112
+ }
113
+ }
114
+ /**
115
+ * There is no right answer when to delete memoised function
116
+ * To crete a new intl object is expensive, as well as to keep all memoised functions in memory
117
+ * might not be what the developer want
118
+ * Therefore set a timer and delete memoised function if not in use
119
+ */
120
+ Memoiser.Timeout = 30 * 60 * 1000; // 30 minutes
121
+ Memoiser.interval = null; /* used to run through map to clean it */
122
+ Memoiser.memoiseMap = {};
123
+ export { Memoiser };
@@ -0,0 +1,39 @@
1
+ import type { TranslateOptions, TranslateParams } from './types';
2
+ /**
3
+ * Resolve translation from provided locale. For instance:
4
+ * if `supported=['en', 'zh-Hant', 'zh-Hans']`
5
+ * - en -> en
6
+ * - en-GB -> en
7
+ * - en-US -> en
8
+ * - ru -> ''
9
+ * - zh -> ''
10
+ * - zh-Hant -> zh-Hant
11
+ * - zh-Hant-HK -> zh-Hant
12
+ * @param scope Scope
13
+ * @param locale Locale to resolve
14
+ * @returns resolved locale
15
+ */
16
+ declare const resolveLocale: (scope: string, locale: string) => string;
17
+ /**
18
+ * Clear all cached records
19
+ * @returns {void}
20
+ */
21
+ declare const clearCache: () => void;
22
+ /**
23
+ * A helper method to clear cache for specific scope and locale
24
+ * @param scope Scope
25
+ * @param locale Locale
26
+ * @returns {void}
27
+ */
28
+ declare const clearCachedRecord: (scope: string, locale: string) => void;
29
+ /**
30
+ * Get translation message from Phrasebook
31
+ * @param scope Scope
32
+ * @param locale Locale
33
+ * @param key Translation key
34
+ * @param options Translate options as key value combination
35
+ * @param translateParams Translate parameters
36
+ * @returns Promise<message>
37
+ */
38
+ declare const t: (scope: string, locale: string, key: string, options?: TranslateOptions | undefined, translateParams?: TranslateParams | undefined) => Promise<string>;
39
+ export { t, resolveLocale, clearCache, clearCachedRecord };
@@ -0,0 +1,110 @@
1
+ import { Phrasebook } from '@refinitiv-ui/phrasebook';
2
+ import { supportedLocales } from '@formatjs/intl-utils';
3
+ import { DEFAULT_LOCALE } from './constants.js';
4
+ import { Memoiser } from './memoiser.js';
5
+ /**
6
+ * Resolve translation from provided locale. For instance:
7
+ * if `supported=['en', 'zh-Hant', 'zh-Hans']`
8
+ * - en -> en
9
+ * - en-GB -> en
10
+ * - en-US -> en
11
+ * - ru -> ''
12
+ * - zh -> ''
13
+ * - zh-Hant -> zh-Hant
14
+ * - zh-Hant-HK -> zh-Hant
15
+ * @param scope Scope
16
+ * @param locale Locale to resolve
17
+ * @returns resolved locale
18
+ */
19
+ const resolveLocale = (scope, locale) => {
20
+ if (!locale) {
21
+ return '';
22
+ }
23
+ const supported = Phrasebook.supported(scope);
24
+ // pick the first available locale in priority.
25
+ return supportedLocales(supported, [locale])[0] || '';
26
+ };
27
+ /**
28
+ * Clear all cached records
29
+ * @returns {void}
30
+ */
31
+ const clearCache = () => {
32
+ Memoiser.clear();
33
+ };
34
+ /**
35
+ * A helper method to clear cache for specific scope and locale
36
+ * @param scope Scope
37
+ * @param locale Locale
38
+ * @returns {void}
39
+ */
40
+ const clearCachedRecord = (scope, locale) => {
41
+ const resolvedLocale = resolveLocale(scope, locale);
42
+ if (resolvedLocale) {
43
+ Memoiser.delete(scope, locale);
44
+ }
45
+ };
46
+ /**
47
+ * Add unicode extensions to locale. E.g: 'en-u-hc-h24-ca-islamic'
48
+ * Note: if unicode extensions are passed with the locale itself, override those.
49
+ * @param locale Locale to add extension
50
+ * @param unicodeExtensions A list of extension
51
+ * @returns locale with unicode extensions
52
+ */
53
+ const parseUnicodeExtensions = (locale, unicodeExtensions) => {
54
+ if (!unicodeExtensions) {
55
+ return locale;
56
+ }
57
+ const extensions = [];
58
+ const localeUSplit = locale.split('-u-');
59
+ locale = localeUSplit[0];
60
+ const localeExtensions = {};
61
+ if (localeUSplit[1]) {
62
+ const split = localeUSplit[1].split('-'); // name-value pairs
63
+ while (split.length) {
64
+ const name = String(split.shift());
65
+ const value = split.shift() || '';
66
+ localeExtensions[name] = value;
67
+ }
68
+ }
69
+ unicodeExtensions = Object.assign(localeExtensions, unicodeExtensions);
70
+ for (const name in unicodeExtensions) {
71
+ extensions.push(name, unicodeExtensions[name]);
72
+ }
73
+ if (extensions.length) {
74
+ locale += `-u-${extensions.join('-')}`;
75
+ }
76
+ return locale;
77
+ };
78
+ /**
79
+ * Get translation message from Phrasebook
80
+ * @param scope Scope
81
+ * @param locale Locale
82
+ * @param key Translation key
83
+ * @param options Translate options as key value combination
84
+ * @param translateParams Translate parameters
85
+ * @returns Promise<message>
86
+ */
87
+ const t = (scope, locale, key, options, translateParams) => {
88
+ try {
89
+ let resolvedLocale = resolveLocale(scope, locale);
90
+ if (!resolvedLocale && locale !== DEFAULT_LOCALE) {
91
+ // requested locale is not found in scope. Fallback to default locale
92
+ locale = DEFAULT_LOCALE;
93
+ resolvedLocale = resolveLocale(scope, locale);
94
+ }
95
+ const translation = resolvedLocale ? Phrasebook.get(resolvedLocale, scope) : null;
96
+ if (!translation || !translation[key]) {
97
+ // eslint-disable-next-line no-console
98
+ console.warn(`elf-i18n: "${key}" is not found in scope: "${scope}", locale: "${locale}" translations`);
99
+ return Promise.resolve(key);
100
+ }
101
+ if (translateParams?.unicodeExtensions) {
102
+ locale = parseUnicodeExtensions(locale, translateParams?.unicodeExtensions);
103
+ }
104
+ return Promise.resolve(Memoiser.format(scope, locale, key, translation[key], options, translateParams?.formats, translateParams?.options));
105
+ }
106
+ catch (error) {
107
+ return Promise.reject(error);
108
+ }
109
+ };
110
+ export { t, resolveLocale, clearCache, clearCachedRecord };
package/lib/types.d.ts ADDED
@@ -0,0 +1,64 @@
1
+ import type { MessageFormatElement } from '@formatjs/icu-messageformat-parser';
2
+ import { Formats, Options } from 'intl-messageformat';
3
+ declare type TranslateOptions = {
4
+ [key: string]: unknown;
5
+ };
6
+ declare type TranslateMessage = string | MessageFormatElement[];
7
+ declare type MessageFormats = Partial<Formats>;
8
+ declare type MessageOptions = Options;
9
+ /**
10
+ * BCP 47 unicode extensions.
11
+ * Check http://unicode.org/reports/tr35/ for full list of extensions
12
+ */
13
+ declare type UnicodeExtensions = {
14
+ /**
15
+ * Numbering system
16
+ * For instance: 'thai', 'roman', 'latn'
17
+ */
18
+ nu?: string;
19
+ /**
20
+ * Calendar
21
+ * For instance: 'iso8601', 'gregory', 'persian'
22
+ */
23
+ ca?: string;
24
+ /**
25
+ * Hour cycle
26
+ * For instance: 'h11', 'h12', 'h23', 'h24'
27
+ */
28
+ hc?: string;
29
+ /**
30
+ * Custom extensions, like:
31
+ * cf - currency format
32
+ * cu - currency type
33
+ * em - emoji style
34
+ * and many others
35
+ */
36
+ [key: string]: string | undefined;
37
+ };
38
+ /**
39
+ * Translate parameters
40
+ */
41
+ declare type TranslateParams = {
42
+ /**
43
+ * BCP 47 unicode extensions
44
+ */
45
+ unicodeExtensions?: UnicodeExtensions;
46
+ /**
47
+ * Intl.IntlMessageFormat optional object with user defined options for format styles.
48
+ * e.g. to define custom date formatter, to be used with {{ date, date, calendar }}
49
+ * date: { calendar: { day: 'numeric', month: 'long', year: 'numeric', timeZone: 'UTC', calendar: 'gregory' } }
50
+ *
51
+ * See more: https://formatjs.io/docs/intl-messageformat
52
+ */
53
+ formats?: MessageFormats;
54
+ /**
55
+ * Intl.IntlMessageFormat optional options.
56
+ * - formatters: Map containing memoized formatters for performance.
57
+ * - ignoreTag: Whether to treat HTML/XML tags as string literal instead of parsing them as tag token.
58
+ * When this is false we only allow simple tags without any attributes
59
+ *
60
+ * See more: https://formatjs.io/docs/intl-messageformat
61
+ */
62
+ options?: MessageOptions;
63
+ };
64
+ export { TranslateOptions, TranslateParams, TranslateMessage, UnicodeExtensions, MessageFormats, MessageOptions };
package/lib/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@refinitiv-ui/i18n",
3
+ "version": "0.0.0-build.1957399501.1",
4
+ "description": "i18n support for Web Components",
5
+ "main": "./lib/index.js",
6
+ "module": "./lib/index.js",
7
+ "types": "./lib/index.d.ts",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git@github.com:Refinitiv/refinitiv-ui.git",
11
+ "directory": "packages/i18n"
12
+ },
13
+ "scripts": {
14
+ "build": "tsc --sourceMap --declarationMap",
15
+ "build:watch": "npm run build -- --watch --preserveWatchOutput",
16
+ "build:prod": "tsc",
17
+ "lint": "eslint .",
18
+ "lint:fix": "eslint . --fix",
19
+ "test": "npm run build && karma start ../../karma.config.js --package=i18n --include-snapshots=false",
20
+ "test:watch": "npm run test -- --watch",
21
+ "prepack": "npm run version",
22
+ "version": "node ../../scripts/version"
23
+ },
24
+ "author": "Refinitiv",
25
+ "license": "Apache-2.0",
26
+ "dependencies": {
27
+ "@formatjs/icu-messageformat-parser": "^2.0.15",
28
+ "@formatjs/intl-utils": "^3.8.4",
29
+ "intl-format-cache": "^4.3.1",
30
+ "intl-messageformat": "^9.10.0",
31
+ "tslib": "^2.3.1"
32
+ },
33
+ "devDependencies": {
34
+ "@refinitiv-ui/phrasebook": "0.0.0-build.1957399501.1",
35
+ "@refinitiv-ui/test-helpers": "0.0.0-build.1957399501.1"
36
+ },
37
+ "peerDependencies": {
38
+ "@refinitiv-ui/phrasebook": "0.0.0-build.1957399501.1"
39
+ },
40
+ "publishConfig": {
41
+ "access": "public"
42
+ },
43
+ "gitHead": "26ea94e19feb4424e683989d730348f843820412"
44
+ }
@@ -0,0 +1 @@
1
+ {"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/tslib/tslib.d.ts","./src/constants.ts","../../node_modules/@formatjs/ecma402-abstract/CanonicalizeLocaleList.d.ts","../../node_modules/@formatjs/ecma402-abstract/CanonicalizeTimeZoneName.d.ts","../../node_modules/@formatjs/ecma402-abstract/CoerceOptionsToObject.d.ts","../../node_modules/@formatjs/ecma402-abstract/GetNumberOption.d.ts","../../node_modules/@formatjs/ecma402-abstract/GetOption.d.ts","../../node_modules/@formatjs/ecma402-abstract/GetOptionsObject.d.ts","../../node_modules/@formatjs/ecma402-abstract/IsSanctionedSimpleUnitIdentifier.d.ts","../../node_modules/@formatjs/ecma402-abstract/IsValidTimeZoneName.d.ts","../../node_modules/@formatjs/ecma402-abstract/IsWellFormedCurrencyCode.d.ts","../../node_modules/@formatjs/ecma402-abstract/IsWellFormedUnitIdentifier.d.ts","../../node_modules/@formatjs/ecma402-abstract/types/core.d.ts","../../node_modules/@formatjs/ecma402-abstract/types/plural-rules.d.ts","../../node_modules/@formatjs/ecma402-abstract/types/number.d.ts","../../node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponent.d.ts","../../node_modules/@formatjs/ecma402-abstract/NumberFormat/ComputeExponentForMagnitude.d.ts","../../node_modules/@formatjs/ecma402-abstract/NumberFormat/CurrencyDigits.d.ts","../../node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToParts.d.ts","../../node_modules/@formatjs/ecma402-abstract/NumberFormat/FormatNumericToString.d.ts","../../node_modules/@formatjs/ecma402-abstract/NumberFormat/InitializeNumberFormat.d.ts","../../node_modules/@formatjs/ecma402-abstract/NumberFormat/PartitionNumberPattern.d.ts","../../node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatDigitOptions.d.ts","../../node_modules/@formatjs/ecma402-abstract/NumberFormat/SetNumberFormatUnitOptions.d.ts","../../node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawFixed.d.ts","../../node_modules/@formatjs/ecma402-abstract/NumberFormat/ToRawPrecision.d.ts","../../node_modules/@formatjs/ecma402-abstract/NumberFormat/format_to_parts.d.ts","../../node_modules/@formatjs/ecma402-abstract/PartitionPattern.d.ts","../../node_modules/@formatjs/ecma402-abstract/SupportedLocales.d.ts","../../node_modules/@formatjs/ecma402-abstract/utils.d.ts","../../node_modules/@formatjs/ecma402-abstract/data.d.ts","../../node_modules/@formatjs/ecma402-abstract/types/relative-time.d.ts","../../node_modules/@formatjs/ecma402-abstract/types/date-time.d.ts","../../node_modules/@formatjs/ecma402-abstract/types/list.d.ts","../../node_modules/@formatjs/ecma402-abstract/types/displaynames.d.ts","../../node_modules/@formatjs/ecma402-abstract/262.d.ts","../../node_modules/@formatjs/ecma402-abstract/index.d.ts","../../node_modules/@formatjs/icu-skeleton-parser/date-time.d.ts","../../node_modules/@formatjs/icu-skeleton-parser/number.d.ts","../../node_modules/@formatjs/icu-skeleton-parser/index.d.ts","../../node_modules/@formatjs/icu-messageformat-parser/types.d.ts","../../node_modules/@formatjs/icu-messageformat-parser/error.d.ts","../../node_modules/@formatjs/icu-messageformat-parser/parser.d.ts","../../node_modules/@formatjs/icu-messageformat-parser/index.d.ts","../../node_modules/intl-messageformat/src/formatters.d.ts","../../node_modules/intl-messageformat/src/core.d.ts","../../node_modules/intl-messageformat/src/error.d.ts","../../node_modules/intl-messageformat/index.d.ts","./src/types.ts","./src/lang-attribute-observer.ts","../phrasebook/lib/types.d.ts","../phrasebook/lib/translation.d.ts","../phrasebook/lib/index.d.ts","../../node_modules/@formatjs/intl-utils/src/diff.d.ts","../../node_modules/@formatjs/intl-utils/src/types.d.ts","../../node_modules/@formatjs/intl-utils/src/plural-rules-types.d.ts","../../node_modules/@formatjs/intl-utils/src/number-types.d.ts","../../node_modules/@formatjs/intl-utils/src/polyfill-utils.d.ts","../../node_modules/@formatjs/intl-utils/src/resolve-locale.d.ts","../../node_modules/@formatjs/intl-utils/src/units.d.ts","../../node_modules/@formatjs/intl-utils/src/relative-time-types.d.ts","../../node_modules/@formatjs/intl-utils/src/list-types.d.ts","../../node_modules/@formatjs/intl-utils/src/displaynames-types.d.ts","../../node_modules/@formatjs/intl-utils/src/invariant.d.ts","../../node_modules/@formatjs/intl-utils/index.d.ts","../../node_modules/intl-format-cache/index.d.ts","./src/memoiser.ts","./src/translate.ts","./src/index.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/globals.global.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/@types/accepts/index.d.ts","../../node_modules/@types/babel__code-frame/index.d.ts","../../node_modules/@babel/types/lib/index.d.ts","../../node_modules/@types/babel__generator/index.d.ts","../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/@types/babel__template/index.d.ts","../../node_modules/@types/babel__traverse/index.d.ts","../../node_modules/@types/babel__core/index.d.ts","../../node_modules/@types/connect/index.d.ts","../../node_modules/@types/body-parser/index.d.ts","../../node_modules/@types/browserslist-useragent/index.d.ts","../../node_modules/@types/caniuse-api/index.d.ts","../../node_modules/@types/chai/index.d.ts","../../node_modules/@types/chai-dom/index.d.ts","../../node_modules/moment/ts3.1-typings/moment.d.ts","../../node_modules/@types/chart.js/index.d.ts","../../node_modules/@types/qs/index.d.ts","../../node_modules/@types/co-body/index.d.ts","../../node_modules/@types/command-line-args/index.d.ts","../../node_modules/@types/command-line-usage/index.d.ts","../../node_modules/@types/component-emitter/index.d.ts","../../node_modules/@types/content-disposition/index.d.ts","../../node_modules/@types/convert-source-map/index.d.ts","../../node_modules/@types/cookie/index.d.ts","../../node_modules/@types/keygrip/index.d.ts","../../node_modules/@types/range-parser/index.d.ts","../../node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/mime/index.d.ts","../../node_modules/@types/serve-static/index.d.ts","../../node_modules/@types/express/index.d.ts","../../node_modules/@types/cookies/index.d.ts","../../node_modules/@types/cors/index.d.ts","../../node_modules/@types/d3-color/index.d.ts","../../node_modules/@types/d3-interpolate/index.d.ts","../../node_modules/@types/debounce/index.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/etag/index.d.ts","../../node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/glob/index.d.ts","../../node_modules/@types/graceful-fs/index.d.ts","../../node_modules/@types/http-assert/index.d.ts","../../node_modules/@types/http-errors/index.d.ts","../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../node_modules/@types/istanbul-lib-report/index.d.ts","../../node_modules/@types/istanbul-reports/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/koa-compose/index.d.ts","../../node_modules/@types/koa/index.d.ts","../../node_modules/@types/koa-compress/index.d.ts","../../node_modules/@types/koa-etag/index.d.ts","../../node_modules/@types/koa-send/index.d.ts","../../node_modules/@types/koa-static/index.d.ts","../../node_modules/@types/koa__cors/index.d.ts","../../node_modules/@types/lru-cache/index.d.ts","../../node_modules/@types/mime-types/index.d.ts","../../node_modules/@types/minimist/index.d.ts","../../node_modules/@types/mocha/index.d.ts","../../node_modules/@types/normalize-package-data/index.d.ts","../../node_modules/@types/parse-json/index.d.ts","../../node_modules/@types/parse5/lib/tree-adapters/default.d.ts","../../node_modules/@types/parse5/index.d.ts","../../node_modules/@types/path-is-inside/index.d.ts","../../node_modules/@types/prettier/index.d.ts","../../node_modules/@types/resolve/index.d.ts","../../node_modules/@types/sinonjs__fake-timers/index.d.ts","../../node_modules/@types/sinon/index.d.ts","../../node_modules/@types/sinon-chai/index.d.ts","../../node_modules/@types/stack-utils/index.d.ts","../../node_modules/@types/trusted-types/lib/index.d.ts","../../node_modules/@types/trusted-types/index.d.ts","../../node_modules/@types/whatwg-url/index.d.ts","../../node_modules/@types/ws/index.d.ts","../../node_modules/@types/yargs-parser/index.d.ts","../../node_modules/@types/yargs/index.d.ts"],"fileInfos":[{"version":"89f78430e422a0f06d13019d60d5a45b37ec2d28e67eb647f73b1b0d19a46b72","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940",{"version":"abba1071bfd89e55e88a054b0c851ea3e8a494c340d0f3fab19eb18f6afb0c9e","affectsGlobalScope":true},{"version":"927cb2b60048e1395b183bf74b2b80a75bdb1dbe384e1d9fac654313ea2fb136","affectsGlobalScope":true},{"version":"d8996609230d17e90484a2dd58f22668f9a05a3bfe00bfb1d6271171e54a31fb","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"4378fc8122ec9d1a685b01eb66c46f62aba6b239ca7228bb6483bcf8259ee493","affectsGlobalScope":true},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"1b3fe904465430e030c93239a348f05e1be80640d91f2f004c3512c2c2c89f34","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"d071129cba6a5f2700be09c86c07ad2791ab67d4e5ed1eb301d6746c62745ea4","affectsGlobalScope":true},{"version":"e8c9f4e445a489991ca1a4232667de3ac36b07ba75ea335971fbeacf2d26fe67","affectsGlobalScope":true},{"version":"10bbdc1981b8d9310ee75bfac28ee0477bb2353e8529da8cff7cb26c409cb5e8","affectsGlobalScope":true},"12f4cfe2fe60b810c3174537bc2ddb20c1067b7768643d12cb1266fd183afb75","9b7a271fe79492e92c3f40bf99eb0144fe64b8f5ecd09616cf590ea37d241b61","13f6a3df166c16f3dcf81a87c26d9803c7fd7895e7fcc71b7c149f52ee24b639","1ee5885d5027d5193ecacf31e8ed6b6f03a3a6de2e4fb37a3280b71e65915af1","494bf82a2bd0cf241e89fdb21dd46f273e530f49f6599a985b7852f7322fc192","0edc48b402f3efa10343c59746b269ec3cab88ea08be63d73014c78d372e94ab","ba9f6d4253a5b902ddb60345aead6f691b89292f9387068bf99d9928e839a9af","eabe0e0f52a2c58966cbbed77ea6b13ff3efdab453d411c88fbf91ba4964a5ff","257369022582c2220790c87a487fda57b264e1dcb16bb9ce34172345e7f933f3","5753b9cbd5ea496f68d4459b83a5091c0dbb33a896434d2f43c5f5b9e3f4ffa8","abbf59b2100d962d82f9c842c4a20cb5db35aee74175e5c942b361138870d8eb","f408d89ab81d183abcdaaf9961ebe9ef1a892064c5790b4b87af0b7d05a43240","eb974217eac7354c2ee28c68b1fefb3aebb5839c7da0dc8b2e1670eb1bb73fc3","20f33c814aaef326c0e3f2e37f627f8e3b22d85b0859a1b47c1013f1eaa0b628","4c32e274c22c133d96fa3bd1e66af0e213c88d37372598442247e1ea2b3f3616","b446fafdc7c077bec8f3117e200fd8e8606799ef212804a58bae3b7cd3ac353c","bfd64f97f7e12d92ad6c50caddd7a5e91080ccf15e887d4574646dda09b5b8d5","4475d3f490464dd09f29d5a590392ebc9f3026a79f2f0ba247f7b3f2acc01655","09eae5649c2133876c6c07137142b2786f858ef7f2269c24c2320dc950ab1866","f2061152503791189f5fcee1e6000e1db3601a60dba32011e6ee2c3a12f23510","03e162e0e48312346141962cf4dd2aa1569a58feff88a33ac579840d24c3d165","29f7e25ee9edb7ac875d3fea892e6328a439b55b6dd994431d55315dced635ae","a1e456a92e80e7884ed0bf9c83eac71e31a7ec949eb5982d36811154bed6fb1f","3a378f155a084b9722c89ffc3d2b2ab62f50603aa80fd5d5614ade949007a891","4a254ae095bd9e42bb24b0b539fa3ad0889089f0f56c7f8b63acf2adfd4ada66","ca32554db1a6962f85143e6e9216883c0e439408541d4379eac2b80aed60cb5f","64a89eb80302eca86236ef2f40dd6b914aa42f35a7384893e7fe864b6961695f","99bb361d32c05762ab4ac1d647f750eb2e280070e30011b5feff952327d07844","19a5ca90bcba89bd8fcb7e02c379ca017dce60050e1e7671bf45f68d921870cc","84747db6b80b4e5567c21a82cbaeda7a9810307ba4023ff5ffcd90e1f7713172","214c8b4c06c4858b93230b16745a7a480cef4524b0e7745ef64755ee9b81aaf6","dea3cf3a10d7caaededded8f0a794ce9f8b17da31ccbb8ee9159d7bd2fce42ac","51dc756ec3df8a7599ef0d16268cf7cd429d5d226ceb53cf8f85657a4ade6c29","4480de0ded16219521ccf012892091e5ec44863039c965ff1664f7f4799f4126","eeaf71356de97a805f3dfb0dd93a16196da7d2480955063a79216a8fd4f1414b","c38905d6fda359cf384b9306d6b9782a1b055e6670c7894b0ffda04c81b8e59a","6beedecf272c57713b780ee23040cf45adbfedb92f893b4be80ad11fe42c1cbe","3e873837e506db540c03f5e1069427b11ed7e1a016bd29c0d83fb4c4ea9d519f","b85018c97705258ff235ae9ac44d532ab3546eb5d0354123bd781e8bea3bdc18","4386eea018b5f6eadd8dc9dc407642369bea81dcaebe64dc30285e736b102343","69818b78af77862718c44e8236defa5fd318281de3ea1a8d43f3b350439589a4","cd41024509c20e761a3bd6ce8a976f1a79ae8193e1fdba46396744136d1b6bd0","81b6d7ff019d77399bdebae52a370011cea01943fc7c2016c3dc846839206df0","407bddb7f03e070e7969eb2bc19bf931cb76ddbe2761326b8ca1f0cccb6bd35b","1135099814b6525159e76fa51f295bf05942f0d9ef84c7030f0a7ad7563531f5","5cca0d064ddbcbde07a28b74038b3f5c6b9cd41d328fd927b060da5d3c59da7b","aa29954e994b2c4566ff98b0ca2313aeffcf60924aa140053efd916a15127c6a","4e799b631914398921cd8edda132320100399522cc3c8809d7c4dad89a697c5b","b4432e5754516015885b940e22df3a7d6f029cfab9645c23a1aec10affc945ff","f1b6f13db02a0064e1c50fe2b09f219b04422786b85491c8babdb3f43dc52a68","7a0f79b526b2c8d5ef2f01abd10b2ed16274f6824cfe88e5033fdb57fb4ba7dd","d6fb032aba2e16463502e909e7022a006430ba80f04eae6a86932b66aea29364","d63cf71176fe30f0a3120a95fd0669b130b40bd560ddccfd799b089a2d4ed6b6","93f1f0dd74f1f2816c40c13c916952d7dbcdb69606d86fb28d984dd2fba2a067","0366b3fa8d01da15186ac6a09eab7a43ade5d44b9b100fc7fa9d311a25fe505c","1eaedf821c75a94b7cbbd636643312bd53694decb71be681ac3e414a140b93e3","5f16227234824bb1d4a857c53c384217185f6f373b6863fbbc50136baa56a6cc","9291d6299e19b59a45f734ae6c97fc6f642c1009b772e138b91db197ff115eef","30ec44129f22584b60afdfcd7e783b8991ad6d50895a39c5bb3a267adf8563ad","e14cb76ee0ae7632f38c738a71f540b9ec9b4f5675704688dc6059addc813b34","b4423ffe74183f243190a9f0ecd74f71a6c4ee245c622222c1b647a6703bb76e","6503ce675bb2e46edc40560059b6a63b6535a25ceb414ae096ec8ea9ffc57a06","57dfc916942b39303628af26fe856b9fa0bf59e8b6e0c3cabb286b6a3921bea7","387d0471a01ff536b633ef7acf4a2eca9c64c6041ffe7b85794933510e5f99a7","16b42aa05bfdc4738eb95aba97209316f9a1cb7cc138a7b4ea3acc6f09cfd3c7","6967c67788bab272bd6661a60a8716a5916163525f1626a5a857e5a0639d8362","73739a929041eeda79c43209e739f230252343bd8e28463d2384c61ff5860029","f7a890b4366c8cb3b22ce22437dd13a18a8f26013a0da11232a5717c166976f4","82877fa6703de854be5c55043a87bc2a94d48b042669154a1eac03c210ba76b1","0cba3a5d7b81356222594442753cf90dd2892e5ccfe1d262aaca6896ba6c1380","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"c2ab70bbc7a24c42a790890739dd8a0ba9d2e15038b40dff8163a97a5d148c00","affectsGlobalScope":true},"422dbb183fdced59425ca072c8bd09efaa77ce4e2ab928ec0d8a1ce062d2a45a",{"version":"712ba0d43b44d144dfd01593f61af6e2e21cfae83e834d297643e7973e55ed61","affectsGlobalScope":true},"1dab5ab6bcf11de47ab9db295df8c4f1d92ffa750e8f095e88c71ce4c3299628","f71f46ccd5a90566f0a37b25b23bc4684381ab2180bdf6733f4e6624474e1894",{"version":"54e65985a3ee3cec182e6a555e20974ea936fc8b8d1738c14e8ed8a42bd921d4","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","98a3ebfa494b46265634a73459050befba5da8fdc6ca0ef9b7269421780f4ff3","34e5de87d983bc6aefef8b17658556e3157003e8d9555d3cb098c6bef0b5fbc8","cc0b61316c4f37393f1f9595e93b673f4184e9d07f4c127165a490ec4a928668","f27371653aded82b2b160f7a7033fb4a5b1534b6f6081ef7be1468f0f15327d3","c762cd6754b13a461c54b59d0ae0ab7aeef3c292c6cf889873f786ee4d8e75c9","f4ea7d5df644785bd9fbf419930cbaec118f0d8b4160037d2339b8e23c059e79",{"version":"bfea28e6162ed21a0aeed181b623dcf250aa79abf49e24a6b7e012655af36d81","affectsGlobalScope":true},"7a5459efa09ea82088234e6533a203d528c594b01787fb90fba148885a36e8b6","ae97e20f2e10dbeec193d6a2f9cd9a367a1e293e7d6b33b68bacea166afd7792","10d4796a130577d57003a77b95d8723530bbec84718e364aa2129fa8ffba0378","ad41bb744149e92adb06eb953da195115620a3f2ad48e7d3ae04d10762dae197","bf73c576885408d4a176f44a9035d798827cc5020d58284cb18d7573430d9022","7ae078ca42a670445ae0c6a97c029cb83d143d62abd1730efb33f68f0b2c0e82",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"5d0a9ea09d990b5788f867f1c79d4878f86f7384cb7dab38eecbf22f9efd063d","12eea70b5e11e924bb0543aea5eadc16ced318aa26001b453b0d561c2fd0bd1e","08777cd9318d294646b121838574e1dd7acbb22c21a03df84e1f2c87b1ad47f2","08a90bcdc717df3d50a2ce178d966a8c353fd23e5c392fd3594a6e39d9bb6304",{"version":"4cd4cff679c9b3d9239fd7bf70293ca4594583767526916af8e5d5a47d0219c7","affectsGlobalScope":true},"2a12d2da5ac4c4979401a3f6eaafa874747a37c365e4bc18aa2b171ae134d21b","002b837927b53f3714308ecd96f72ee8a053b8aeb28213d8ec6de23ed1608b66","1dc9c847473bb47279e398b22c740c83ea37a5c88bf66629666e3cf4c5b9f99c","a9e4a5a24bf2c44de4c98274975a1a705a0abbaad04df3557c2d3cd8b1727949","00fa7ce8bc8acc560dc341bbfdf37840a8c59e6a67c9bfa3fa5f36254df35db2","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff",{"version":"806ef4cac3b3d9fa4a48d849c8e084d7c72fcd7b16d76e06049a9ed742ff79c0","affectsGlobalScope":true},"44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","5f0ed51db151c2cdc4fa3bb0f44ce6066912ad001b607a34e65a96c52eb76248",{"version":"3345c276cab0e76dda86c0fb79104ff915a4580ba0f3e440870e183b1baec476","affectsGlobalScope":true},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","e383ff72aabf294913f8c346f5da1445ae6ad525836d28efd52cbadc01a361a6","f52fbf64c7e480271a9096763c4882d356b05cab05bf56a64e68a95313cd2ce2","59bdb65f28d7ce52ccfc906e9aaf422f8b8534b2d21c32a27d7819be5ad81df7",{"version":"3a2da34079a2567161c1359316a32e712404b56566c45332ac9dcee015ecce9f","affectsGlobalScope":true},"28a2e7383fd898c386ffdcacedf0ec0845e5d1a86b5a43f25b86bc315f556b79","3aff9c8c36192e46a84afe7b926136d520487155154ab9ba982a8b544ea8fc95","a880cf8d85af2e4189c709b0fea613741649c0e40fffb4360ec70762563d5de0","85bbf436a15bbeda4db888be3062d47f99c66fd05d7c50f0f6473a9151b6a070","9f9c49c95ecd25e0cb2587751925976cf64fd184714cb11e213749c80cf0f927","f0c75c08a71f9212c93a719a25fb0320d53f2e50ca89a812640e08f8ad8c408c",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"9cafe917bf667f1027b2bb62e2de454ecd2119c80873ad76fc41d941089753b8","6738101ae8e56cd3879ab3f99630ada7d78097fc9fd334df7e766216778ca219","b95f751a58d283cb5e32f2655361f6e2a27f0368f69edc463a3472aae21d1303","2ff9995137f3e5d68971388ec58af0c79721626323884513f9f5e2e996ac1fdd","cc957354aa3c94c9961ebf46282cfde1e81d107fc5785a61f62c67f1dd3ac2eb","1a7cc144992d79b062c22ac0309c6624dbb0d49bbddff7ea3b9daa0c17bcac0a","93de1c6dab503f053efe8d304cb522bb3a89feab8c98f307a674a4fae04773e9","3b043cf9a81854a72963fdb57d1884fc4da1cf5be69b5e0a4c5b751e58cb6d88","dd5647a9ccccb2b074dca8a02b00948ac293091ebe73fdf2e6e98f718819f669","6d829824ead8999f87b6df21200df3c6150391b894b4e80662caa462bd48d073","afc559c1b93df37c25aef6b3dfa2d64325b0e112e887ee18bf7e6f4ec383fc90","9eb49645576740f4fb4cca25cadbc0d7e61a218c215e8578dd899b01d5db89d4","d59cea1102bba38053ca19260e37bda2715df10d147c40db92035c0420489358",{"version":"c8747693e5872ad5ef3aa016731a06915e1c34dae987829d9aa5bd40c7a2c54b","affectsGlobalScope":true},{"version":"d95d76d79a0351572ec5b1a6cc1e5c4bce1be82eedeed7278d6f31ea1059fa69","affectsGlobalScope":true},"f97edc4d3b4dd0b32766e9633086497565c37657fb591cc84a35864db4bc2fc5","9f47decc2af980bb05b5c76464c08d23d28363ddf8d5352120f4026b083af8ac","ba601641fac98c229ccd4a303f747de376d761babb33229bb7153bed9356c9cc","495da6628b9474e31d0636d66c54448bb8d84dbce902e8f70539ef6a525a2d7b","629766229f541d92210f30a92b6038568ec165fab14b7ee53bdf13667da37ca3","29193c018378ca9c8033eaa974c02c1f503e8fcd8a2bf406057c53f7d3fa17a8","567a315b240a060518c532d38a46803b6d35e75dc14a9be435b6dc20c816741e","e4dfe0e169e1cb3c8dd0713972e94e2141595c840ed7387623ac8b29fc6c35b8","c1ea344dc311b2c539ed1e3b4e17e9f4853dc7f348366b51f1d8a09a40fb223f","117ffeecf6c55e25b6446f449ad079029b5e7317399b0a693858faaaea5ca73e","ce013414484233b24f42c0fcfca48a60bb66ab4e13c82953662305e8f1ee4925","16d51f964ec125ad2024cf03f0af444b3bc3ec3614d9345cc54d09bab45c9a4c",{"version":"d2f7baf43dfa349d4010cbd9d64d84cdf3ec26c65fa5f44c8f74f052bedd0b49","affectsGlobalScope":true},"84e3bbd6f80983d468260fdbfeeb431cc81f7ea98d284d836e4d168e36875e86","0b85cb069d0e427ba946e5eb2d86ef65ffd19867042810516d16919f6c1a5aec","15c88bfd1b8dc7231ff828ae8df5d955bae5ebca4cf2bcb417af5821e52299ae","eb96a2321f717bccc3e49e104e299152984b927ea4546b559ae631c06565819c","6fbd58e4015b9ae31ea977d4d549eb24a1102cc798b57ec5d70868b542c06612","c168e28f723898f77b8140887b06baced58aa902327aea3746571756f7a721b5","c24944ff5879b91478b153cf16802b9c6a10cfa3b7d85855813a08431ec2d36a","68c559681a043ca6d622debcce75c4d82446fec08e06bf1066f71d6c325f224e","89ccbe04e737ce613f5f04990271cfa84901446350b8551b0555ddf19319723b","7e510fb0ca02da05976eb0dbfeb42bdb0dc64b78acbb3b5ecf77ddd57ce08cda","8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","fd326577c62145816fe1acc306c734c2396487f76719d3785d4e825b34540b33","3ebae8c00411116a66fca65b08228ea0cf0b72724701f9b854442100aab55aba","e98185f4249720ace1921d59c1ff4612fa5c633a183fc9bf28e2e7b8e3c7fd51","6168414aa12d33d0fcfac4f9870aa81ce27e136db6faf182001a5f3792e1d720","8b06ac3faeacb8484d84ddb44571d8f410697f98d7bfa86c0fda60373a9f5215","7eb06594824ada538b1d8b48c3925a83e7db792f47a081a62cf3e5c4e23cf0ee","f5638f7c2f12a9a1a57b5c41b3c1ea7db3876c003bab68e6a57afd6bcc169af0","0359682c54e487c4cab2b53b2b4d35cc8dea4d9914bc6abcdb5701f8b8e745a4","5006668996956580886022c05108e32c742823e1b5652aff7914917233731518","0c52f5366c9146ad79b546e70162c659972a2798522806e8283f3137feab3965","d1494c6dbbe5fca590ca73ccd21d013e6617e9ea19773c9ca7c0f3214df86628","97395602cea957af0cf517d84b651a07e010192db667ba379d36bec40cdbef52","f88d8a4ba9ad0270309cf46121d3dc9fb055bea08ac3e699d2b4673b1e6a25ea","b6360d5b5a52a1d6fc6b9838135f766b638e7c7a03b227974344200be603c150","c2076e1fa255efd41a6f0b6b3b83d4340d88122073e98f9b223dcea8437ee46f","6d727c1f6a7122c04e4f7c164c5e6f460c21ada618856894cdaa6ac25e95f38c","c757372a092924f5c16eaf11a1475b80b95bb4dae49fe3242d2ad908f97d5abe","209e814e8e71aec74f69686a9506dd7610b97ab59dcee9446266446f72a76d05",{"version":"c4c03cf65951d980ba618ae9601d10438730803fc9c8a1f7b34af8739981e205","affectsGlobalScope":true},"6fa0008bf91a4cc9c8963bace4bba0bd6865cbfa29c3e3ccc461155660fb113a","2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b","fc37aca06f6b8b296c42412a2e75ab53d30cd1fa8a340a3bb328a723fd678377","5f2c582b9ef260cb9559a64221b38606378c1fabe17694592cdfe5975a6d7efa","a0b27b55228349ea85cecd9479ace1009697af44b66527f30526a1539d4e78ea","6209c901f30cc321f4b86800d11fad3d67e73a3308f19946b1bc642af0280298","8a19491eba2108d5c333c249699f40aff05ad312c04a17504573b27d91f0aede","550650516d34048712520ffb1fce4a02f2d837761ee45c7d9868a7a35e7b0343","24a09dc3e07d69b0a224dbd14b2994c40d1efd0954e759004b61b9e683dabe5f",{"version":"0fd3b5704bf037608646df5aa053fd06819ff69302ff6ada9736c300f79df852","affectsGlobalScope":true},"b0d10e46cfe3f6c476b69af02eaa38e4ccc7430221ce3109ae84bb9fb8282298","2fcd2d22b1f30555e785105597cd8f57ed50300e213c4f1bbca6ae149f782c38",{"version":"bb4248c7f953233ac52332088fac897d62b82be07244e551d87c5049600b6cf7","affectsGlobalScope":true},"0f048a7e91a4c764f08be48e156c9d274a038cb454d312427214ab4d34a9a5ab","bc81aff061c53a7140270555f4b22da4ecfe8601e8027cf5aa175fbdc7927c31","f7e133b20ee2669b6c0e5d7f0cd510868c57cd64b283e68c7f598e30ce9d76d2","6ba73232c9d3267ca36ddb83e335d474d2c0e167481e3dec416c782894e11438"],"options":{"declaration":true,"declarationMap":false,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"module":5,"noEmitHelpers":true,"outDir":"./lib","rootDir":"./src","sourceMap":false,"strict":true,"target":7},"fileIdsList":[[154,164],[154],[56,154],[44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,154],[54,154],[54,55,154],[54,56,154],[82,154],[82,84,154],[82,83,154],[78,81,154],[79,80,154],[78,154],[95,96,97,98,99,100,101,102,103,104,105,154],[96,154],[96,97,154],[98,154],[129,154,161],[154,164,165,166,167,168],[154,164,166],[129,154,161,170],[154,174],[154,176],[129,154,161,178],[129,154,161,170,186,191],[129,154],[154,194],[154,161],[126,129,154,161,178,187],[154,171,178,188,190],[126,127,154,161,199],[127,154,161],[154,204],[154,205],[154,209],[154,159,161,209],[154,198,209],[127,154,209],[154,209,212],[126,129,130,134,140,153,154,161,162,183,186,192,202,203,208],[111,154],[114,154],[115,120,154],[116,126,127,134,143,153,154],[116,117,126,134,154],[118,154],[119,120,127,135,154],[120,143,150,154],[121,123,126,134,154],[122,154],[123,124,154],[125,126,154],[126,154],[126,127,128,143,153,154],[126,127,128,143,154],[129,134,143,153,154],[126,127,129,130,134,143,150,153,154],[129,131,143,150,153,154],[111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160],[126,132,154],[133,153,154],[123,126,134,143,154],[135,154],[136,154],[114,137,154],[138,152,154,158],[139,154],[140,154],[126,141,154],[141,142,154,156],[126,143,144,145,154],[143,145,154],[143,144,154],[146,154],[147,154],[126,148,149,154],[148,149,154],[120,134,143,150,154],[151,154],[134,152,154],[115,129,140,153,154],[120,154],[143,154,155],[154,156],[154,157],[115,120,126,128,137,143,153,154,156,158],[143,154,159],[154,221],[154,222],[129,154,161,189],[154,174,227],[154,226],[154,230],[126,129,131,134,143,150,153,154,159,161],[154,234],[86,87,88,154],[85,86,154],[78,85,154],[42,154],[42,43,90,91,109,154],[42,89,90,107,154],[42,43,90,94,106,108,154],[42,85,89,154],[92,93,154],[92,154]],"referencedMap":[[166,1],[164,2],[77,2],[44,2],[45,2],[46,2],[47,2],[48,2],[49,2],[50,2],[51,2],[52,2],[53,2],[57,3],[58,3],[59,2],[60,3],[61,3],[62,3],[63,3],[64,3],[65,3],[66,3],[67,3],[68,3],[69,2],[70,2],[72,2],[78,4],[54,2],[74,2],[76,5],[75,5],[56,6],[55,7],[73,6],[71,2],[83,8],[85,9],[84,10],[82,11],[79,2],[81,12],[80,13],[106,14],[95,2],[104,15],[105,2],[103,15],[98,16],[97,15],[99,17],[102,16],[100,15],[96,2],[101,2],[162,18],[163,2],[169,19],[165,1],[167,20],[168,1],[171,21],[172,2],[173,2],[175,22],[174,2],[177,23],[179,24],[180,2],[181,2],[182,2],[170,18],[183,2],[184,2],[185,2],[192,25],[193,26],[194,2],[195,27],[196,2],[197,2],[198,28],[188,29],[191,30],[200,31],[201,32],[202,2],[203,2],[204,2],[205,33],[206,34],[207,2],[186,2],[208,35],[210,36],[211,37],[212,38],[213,39],[209,40],[214,35],[215,2],[216,2],[189,2],[199,2],[217,2],[218,2],[111,41],[112,41],[114,42],[115,43],[116,44],[117,45],[118,46],[119,47],[120,48],[121,49],[122,50],[123,51],[124,51],[125,52],[126,53],[127,54],[128,55],[113,2],[160,2],[129,56],[130,57],[131,58],[161,59],[132,60],[133,61],[134,62],[135,63],[136,64],[137,65],[138,66],[139,67],[140,68],[141,69],[142,70],[143,71],[145,72],[144,73],[146,74],[147,75],[148,76],[149,77],[150,78],[151,79],[152,80],[153,81],[154,82],[155,83],[156,84],[157,85],[158,86],[159,87],[219,2],[220,2],[222,88],[221,89],[223,2],[224,2],[178,2],[187,2],[225,28],[190,90],[228,91],[227,92],[226,2],[229,2],[231,93],[230,2],[232,28],[233,94],[234,2],[235,95],[107,2],[89,96],[87,97],[88,2],[86,98],[176,2],[42,2],[8,2],[9,2],[11,2],[10,2],[2,2],[12,2],[13,2],[14,2],[15,2],[16,2],[17,2],[18,2],[19,2],[3,2],[4,2],[23,2],[20,2],[21,2],[22,2],[24,2],[25,2],[26,2],[5,2],[27,2],[28,2],[29,2],[30,2],[6,2],[31,2],[32,2],[33,2],[34,2],[7,2],[39,2],[35,2],[36,2],[37,2],[38,2],[40,2],[1,2],[41,2],[43,99],[110,100],[91,99],[108,101],[109,102],[90,103],[94,104],[93,105],[92,2]],"exportedModulesMap":[[166,1],[164,2],[77,2],[44,2],[45,2],[46,2],[47,2],[48,2],[49,2],[50,2],[51,2],[52,2],[53,2],[57,3],[58,3],[59,2],[60,3],[61,3],[62,3],[63,3],[64,3],[65,3],[66,3],[67,3],[68,3],[69,2],[70,2],[72,2],[78,4],[54,2],[74,2],[76,5],[75,5],[56,6],[55,7],[73,6],[71,2],[83,8],[85,9],[84,10],[82,11],[79,2],[81,12],[80,13],[106,14],[95,2],[104,15],[105,2],[103,15],[98,16],[97,15],[99,17],[102,16],[100,15],[96,2],[101,2],[162,18],[163,2],[169,19],[165,1],[167,20],[168,1],[171,21],[172,2],[173,2],[175,22],[174,2],[177,23],[179,24],[180,2],[181,2],[182,2],[170,18],[183,2],[184,2],[185,2],[192,25],[193,26],[194,2],[195,27],[196,2],[197,2],[198,28],[188,29],[191,30],[200,31],[201,32],[202,2],[203,2],[204,2],[205,33],[206,34],[207,2],[186,2],[208,35],[210,36],[211,37],[212,38],[213,39],[209,40],[214,35],[215,2],[216,2],[189,2],[199,2],[217,2],[218,2],[111,41],[112,41],[114,42],[115,43],[116,44],[117,45],[118,46],[119,47],[120,48],[121,49],[122,50],[123,51],[124,51],[125,52],[126,53],[127,54],[128,55],[113,2],[160,2],[129,56],[130,57],[131,58],[161,59],[132,60],[133,61],[134,62],[135,63],[136,64],[137,65],[138,66],[139,67],[140,68],[141,69],[142,70],[143,71],[145,72],[144,73],[146,74],[147,75],[148,76],[149,77],[150,78],[151,79],[152,80],[153,81],[154,82],[155,83],[156,84],[157,85],[158,86],[159,87],[219,2],[220,2],[222,88],[221,89],[223,2],[224,2],[178,2],[187,2],[225,28],[190,90],[228,91],[227,92],[226,2],[229,2],[231,93],[230,2],[232,28],[233,94],[234,2],[235,95],[107,2],[89,96],[87,97],[88,2],[86,98],[176,2],[42,2],[8,2],[9,2],[11,2],[10,2],[2,2],[12,2],[13,2],[14,2],[15,2],[16,2],[17,2],[18,2],[19,2],[3,2],[4,2],[23,2],[20,2],[21,2],[22,2],[24,2],[25,2],[26,2],[5,2],[27,2],[28,2],[29,2],[30,2],[6,2],[31,2],[32,2],[33,2],[34,2],[7,2],[39,2],[35,2],[36,2],[37,2],[38,2],[40,2],[1,2],[41,2],[43,99],[110,100],[91,99],[108,101],[109,102],[90,103],[94,104],[93,105],[92,2]],"semanticDiagnosticsPerFile":[166,164,77,44,45,46,47,48,49,50,51,52,53,57,58,59,60,61,62,63,64,65,66,67,68,69,70,72,78,54,74,76,75,56,55,73,71,83,85,84,82,79,81,80,106,95,104,105,103,98,97,99,102,100,96,101,162,163,169,165,167,168,171,172,173,175,174,177,179,180,181,182,170,183,184,185,192,193,194,195,196,197,198,188,191,200,201,202,203,204,205,206,207,186,208,210,211,212,213,209,214,215,216,189,199,217,218,111,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,113,160,129,130,131,161,132,133,134,135,136,137,138,139,140,141,142,143,145,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,219,220,222,221,223,224,178,187,225,190,228,227,226,229,231,230,232,233,234,235,107,89,87,88,86,176,42,8,9,11,10,2,12,13,14,15,16,17,18,19,3,4,23,20,21,22,24,25,26,5,27,28,29,30,6,31,32,33,34,7,39,35,36,37,38,40,1,41,43,110,91,108,109,90,94,93,92]},"version":"4.5.5"}