@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 +153 -0
- package/LICENSE +13 -0
- package/README.md +160 -0
- package/lib/constants.d.ts +2 -0
- package/lib/constants.js +2 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +3 -0
- package/lib/lang-attribute-observer.d.ts +33 -0
- package/lib/lang-attribute-observer.js +68 -0
- package/lib/memoiser.d.ts +58 -0
- package/lib/memoiser.js +123 -0
- package/lib/translate.d.ts +39 -0
- package/lib/translate.js +110 -0
- package/lib/types.d.ts +64 -0
- package/lib/types.js +1 -0
- package/package.json +44 -0
- package/tsconfig.tsbuildinfo +1 -0
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
|
+
|
package/lib/constants.js
ADDED
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,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 };
|
package/lib/memoiser.js
ADDED
|
@@ -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 };
|
package/lib/translate.js
ADDED
|
@@ -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"}
|