@google-psat/i18n 0.9.0-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/.eslintrc.json +6 -0
- package/README.md +5 -0
- package/_locales/messages/en/messages.json +8158 -0
- package/_locales/messages/es/messages.json +7045 -0
- package/_locales/messages/hi/messages.json +7045 -0
- package/_locales/messages/ja/messages.json +7045 -0
- package/_locales/messages/ko/messages.json +7045 -0
- package/_locales/messages/pt_BR/messages.json +7045 -0
- package/dist/i18n.js +216 -0
- package/dist/index.js +23 -0
- package/dist-types/i18n.d.ts +75 -0
- package/dist-types/index.d.ts +1 -0
- package/package.json +41 -0
- package/scripts/merge-messages.cjs +61 -0
- package/tsconfig.json +17 -0
package/dist/i18n.js
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
/*
|
|
16
|
+
* Copyright 2023 Google LLC
|
|
17
|
+
*
|
|
18
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
19
|
+
* you may not use this file except in compliance with the License.
|
|
20
|
+
* You may obtain a copy of the License at
|
|
21
|
+
*
|
|
22
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
23
|
+
*
|
|
24
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
25
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
26
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
27
|
+
* See the License for the specific language governing permissions and
|
|
28
|
+
* limitations under the License.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* External dependencies.
|
|
32
|
+
*/
|
|
33
|
+
const fs_1 = require("fs");
|
|
34
|
+
const intl_messageformat_1 = require("intl-messageformat");
|
|
35
|
+
const path_1 = __importDefault(require("path"));
|
|
36
|
+
/**
|
|
37
|
+
* Class representing Internationalization (i18n) functionality.
|
|
38
|
+
*/
|
|
39
|
+
class I18n {
|
|
40
|
+
constructor() {
|
|
41
|
+
this.messages = {};
|
|
42
|
+
this.locale = 'en';
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Initializes the messages object with the provided messages.
|
|
46
|
+
* @param {object} messages - The messages object containing translations.
|
|
47
|
+
*/
|
|
48
|
+
initMessages(messages = {}) {
|
|
49
|
+
this.messages = messages;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Returns the locale string.
|
|
53
|
+
* @returns {string} The locale string.
|
|
54
|
+
*/
|
|
55
|
+
getLocale() {
|
|
56
|
+
var _a;
|
|
57
|
+
if (typeof chrome !== 'undefined' && ((_a = chrome === null || chrome === void 0 ? void 0 : chrome.i18n) === null || _a === void 0 ? void 0 : _a.getUILanguage)) {
|
|
58
|
+
return chrome.i18n.getUILanguage();
|
|
59
|
+
}
|
|
60
|
+
return this.locale;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Returns the messages object.
|
|
64
|
+
* @returns {object} The messages object.
|
|
65
|
+
*/
|
|
66
|
+
getMessages() {
|
|
67
|
+
return this.messages;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Creates an array of possible locale strings based on the provided locale.
|
|
71
|
+
* @param {string} locale - The locale string.
|
|
72
|
+
* @returns {string[]} An array of locale strings.
|
|
73
|
+
*/
|
|
74
|
+
createLocaleArray(locale) {
|
|
75
|
+
if (!locale) {
|
|
76
|
+
return ['en'];
|
|
77
|
+
}
|
|
78
|
+
return [
|
|
79
|
+
locale,
|
|
80
|
+
locale.replace(/_/g, '-'),
|
|
81
|
+
locale.replace(/-/g, '_'),
|
|
82
|
+
locale.split('-')[0],
|
|
83
|
+
locale.split('_')[0],
|
|
84
|
+
'en',
|
|
85
|
+
];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Asynchronously loads messages data using the provided locale.
|
|
89
|
+
* @param {string} locale - The locale string.
|
|
90
|
+
* @returns {Promise<void>} A promise that resolves when messages are loaded.
|
|
91
|
+
*/
|
|
92
|
+
fetchMessages(locale) {
|
|
93
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
94
|
+
const localeArray = this.createLocaleArray(locale);
|
|
95
|
+
let idx = 0;
|
|
96
|
+
const fetchWithRetry = () => __awaiter(this, void 0, void 0, function* () {
|
|
97
|
+
let res = {};
|
|
98
|
+
if (idx >= localeArray.length) {
|
|
99
|
+
return res;
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
const response = yield fetch(`/_locales/${localeArray[idx]}/messages.json`);
|
|
103
|
+
if (!response.ok) {
|
|
104
|
+
throw new Error(`Failed to fetch messages for locale ${localeArray[idx]}`);
|
|
105
|
+
}
|
|
106
|
+
const data = yield response.json();
|
|
107
|
+
res = data;
|
|
108
|
+
this.locale = localeArray[idx];
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
idx++;
|
|
112
|
+
res = yield fetchWithRetry();
|
|
113
|
+
}
|
|
114
|
+
return res;
|
|
115
|
+
});
|
|
116
|
+
const result = yield fetchWithRetry();
|
|
117
|
+
return result;
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Loads messages data for the CLI.
|
|
122
|
+
* @param {string} locale - The locale string.
|
|
123
|
+
*/
|
|
124
|
+
loadCLIMessagesData(locale) {
|
|
125
|
+
const localeArray = this.createLocaleArray(locale);
|
|
126
|
+
for (const _locale of localeArray) {
|
|
127
|
+
let localePath = '';
|
|
128
|
+
if ((0, fs_1.existsSync)(path_1.default.resolve(__dirname +
|
|
129
|
+
`../../node_modules/@google-psat/i18n/_locales/messages/${_locale}/messages.json`))) {
|
|
130
|
+
localePath = path_1.default.resolve(__dirname +
|
|
131
|
+
`../../node_modules/@google-psat/i18n/_locales/messages/${_locale}/messages.json`);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
localePath = path_1.default.resolve(__dirname + `../../../i18n/_locales/messages/${_locale}/messages.json`);
|
|
135
|
+
}
|
|
136
|
+
if ((0, fs_1.existsSync)(localePath)) {
|
|
137
|
+
const messages = JSON.parse((0, fs_1.readFileSync)(localePath, {
|
|
138
|
+
encoding: 'utf-8',
|
|
139
|
+
}));
|
|
140
|
+
this.initMessages(messages);
|
|
141
|
+
this.locale = _locale;
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Retrieves a translated message for a given key.
|
|
148
|
+
* @param {string} key - The key of the message to retrieve.
|
|
149
|
+
* @param {string[]} [substitutions] - An array of substitution values for placeholders in the message.
|
|
150
|
+
* @param {boolean} [escapeLt] - Whether to escape '<' characters.
|
|
151
|
+
* @returns {string} The translated message.
|
|
152
|
+
*/
|
|
153
|
+
getMessage(key, substitutions, escapeLt) {
|
|
154
|
+
var _a;
|
|
155
|
+
if (typeof chrome !== 'undefined' && ((_a = chrome === null || chrome === void 0 ? void 0 : chrome.i18n) === null || _a === void 0 ? void 0 : _a.getMessage)) {
|
|
156
|
+
try {
|
|
157
|
+
// @ts-ignore - Outdated definition.
|
|
158
|
+
const text = chrome.i18n.getMessage(key, substitutions, {
|
|
159
|
+
escapeLt: Boolean(escapeLt),
|
|
160
|
+
});
|
|
161
|
+
return text;
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
console.log(error);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return this._parseMessage(key, substitutions, escapeLt);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Parses a message with substitutions and placeholders.
|
|
171
|
+
* @param {string} key - The key of the message to parse.
|
|
172
|
+
* @param {string[]} [substitutions] - An array of substitution values for placeholders in the message.
|
|
173
|
+
* @param {boolean} [escapeLt] - Whether to escape '<' characters.
|
|
174
|
+
* @returns {string} The parsed message.
|
|
175
|
+
*/
|
|
176
|
+
_parseMessage(key, substitutions, escapeLt) {
|
|
177
|
+
var _a;
|
|
178
|
+
const messageObj = (_a = this.messages) === null || _a === void 0 ? void 0 : _a[key];
|
|
179
|
+
if (!messageObj) {
|
|
180
|
+
return '';
|
|
181
|
+
}
|
|
182
|
+
const message = messageObj.message
|
|
183
|
+
.split('$')
|
|
184
|
+
.map((part, idx) => (idx % 2 ? `{${part}}` : part))
|
|
185
|
+
.join('');
|
|
186
|
+
const placeholders = Object.entries(messageObj.placeholders || {}).reduce((acc, [placeholderKey, val]) => {
|
|
187
|
+
const idx = Number(val.content.substring(1)) - 1;
|
|
188
|
+
acc[placeholderKey] = (substitutions === null || substitutions === void 0 ? void 0 : substitutions[idx]) || '';
|
|
189
|
+
return acc;
|
|
190
|
+
}, {});
|
|
191
|
+
return new intl_messageformat_1.IntlMessageFormat(message, 'en', undefined, {
|
|
192
|
+
ignoreTag: escapeLt,
|
|
193
|
+
}).format(placeholders);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Returns messages wrapped with HTML tags.
|
|
197
|
+
* Prefix keys with 'header_{key}', 'body_{count}_{key}' to wrap with appropriate tags.
|
|
198
|
+
* @param keys - The keys of the messages to retrieve.
|
|
199
|
+
* @returns {string} The formatted messages.
|
|
200
|
+
*/
|
|
201
|
+
getFormattedMessages(keys) {
|
|
202
|
+
return keys === null || keys === void 0 ? void 0 : keys.map((key) => {
|
|
203
|
+
const [type] = key.split('_');
|
|
204
|
+
const message = this.getMessage(key);
|
|
205
|
+
switch (type) {
|
|
206
|
+
case 'header':
|
|
207
|
+
return `<h1 className='font-semibold'>${message}</h1>`;
|
|
208
|
+
case 'body':
|
|
209
|
+
return `<p>${message}</p>`;
|
|
210
|
+
default:
|
|
211
|
+
return message;
|
|
212
|
+
}
|
|
213
|
+
}).join('');
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
exports.default = new I18n();
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2023 Google LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.I18n = void 0;
|
|
22
|
+
var i18n_1 = require("./i18n");
|
|
23
|
+
Object.defineProperty(exports, "I18n", { enumerable: true, get: function () { return __importDefault(i18n_1).default; } });
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Class representing Internationalization (i18n) functionality.
|
|
3
|
+
*/
|
|
4
|
+
declare class I18n {
|
|
5
|
+
private messages;
|
|
6
|
+
private locale;
|
|
7
|
+
/**
|
|
8
|
+
* Initializes the messages object with the provided messages.
|
|
9
|
+
* @param {object} messages - The messages object containing translations.
|
|
10
|
+
*/
|
|
11
|
+
initMessages(messages?: {}): void;
|
|
12
|
+
/**
|
|
13
|
+
* Returns the locale string.
|
|
14
|
+
* @returns {string} The locale string.
|
|
15
|
+
*/
|
|
16
|
+
getLocale(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Returns the messages object.
|
|
19
|
+
* @returns {object} The messages object.
|
|
20
|
+
*/
|
|
21
|
+
getMessages(): {
|
|
22
|
+
[key: string]: {
|
|
23
|
+
message: string;
|
|
24
|
+
description: string;
|
|
25
|
+
placeholders: {
|
|
26
|
+
[key: string]: {
|
|
27
|
+
content: string;
|
|
28
|
+
example: string;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Creates an array of possible locale strings based on the provided locale.
|
|
35
|
+
* @param {string} locale - The locale string.
|
|
36
|
+
* @returns {string[]} An array of locale strings.
|
|
37
|
+
*/
|
|
38
|
+
private createLocaleArray;
|
|
39
|
+
/**
|
|
40
|
+
* Asynchronously loads messages data using the provided locale.
|
|
41
|
+
* @param {string} locale - The locale string.
|
|
42
|
+
* @returns {Promise<void>} A promise that resolves when messages are loaded.
|
|
43
|
+
*/
|
|
44
|
+
fetchMessages(locale: string): Promise<{}>;
|
|
45
|
+
/**
|
|
46
|
+
* Loads messages data for the CLI.
|
|
47
|
+
* @param {string} locale - The locale string.
|
|
48
|
+
*/
|
|
49
|
+
loadCLIMessagesData(locale: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* Retrieves a translated message for a given key.
|
|
52
|
+
* @param {string} key - The key of the message to retrieve.
|
|
53
|
+
* @param {string[]} [substitutions] - An array of substitution values for placeholders in the message.
|
|
54
|
+
* @param {boolean} [escapeLt] - Whether to escape '<' characters.
|
|
55
|
+
* @returns {string} The translated message.
|
|
56
|
+
*/
|
|
57
|
+
getMessage(key: string, substitutions?: string[], escapeLt?: boolean): string;
|
|
58
|
+
/**
|
|
59
|
+
* Parses a message with substitutions and placeholders.
|
|
60
|
+
* @param {string} key - The key of the message to parse.
|
|
61
|
+
* @param {string[]} [substitutions] - An array of substitution values for placeholders in the message.
|
|
62
|
+
* @param {boolean} [escapeLt] - Whether to escape '<' characters.
|
|
63
|
+
* @returns {string} The parsed message.
|
|
64
|
+
*/
|
|
65
|
+
private _parseMessage;
|
|
66
|
+
/**
|
|
67
|
+
* Returns messages wrapped with HTML tags.
|
|
68
|
+
* Prefix keys with 'header_{key}', 'body_{count}_{key}' to wrap with appropriate tags.
|
|
69
|
+
* @param keys - The keys of the messages to retrieve.
|
|
70
|
+
* @returns {string} The formatted messages.
|
|
71
|
+
*/
|
|
72
|
+
getFormattedMessages(keys: string[]): string;
|
|
73
|
+
}
|
|
74
|
+
declare const _default: I18n;
|
|
75
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as I18n } from './i18n';
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@google-psat/i18n",
|
|
3
|
+
"version": "0.9.0-1",
|
|
4
|
+
"description": "A package that handles internationalization and localization.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist-types/index.d.ts",
|
|
7
|
+
"source": "src/index.ts",
|
|
8
|
+
"customExports": {
|
|
9
|
+
".": {
|
|
10
|
+
"default": "./src/index.ts"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc --build",
|
|
15
|
+
"dev": "tsc-watch --build",
|
|
16
|
+
"build:remove": "rimraf dist dist-types tsconfig.tsbuildinfo",
|
|
17
|
+
"publish:local": "npm publish --registry=http://localhost:4873",
|
|
18
|
+
"publish:remote": "npm publish --access=public --registry=https://registry.npmjs.org",
|
|
19
|
+
"unpublish:local": "npm unpublish --registry=http://localhost:4873 --force",
|
|
20
|
+
"unpublish:remote": "npm unpublish --registry=https://registry.npmjs.org --force"
|
|
21
|
+
},
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"access": "public"
|
|
24
|
+
},
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "https://github.com/GoogleChromeLabs/ps-analysis-tool",
|
|
28
|
+
"directory": "packages/i18n"
|
|
29
|
+
},
|
|
30
|
+
"author": {
|
|
31
|
+
"name": "Google"
|
|
32
|
+
},
|
|
33
|
+
"license": "Apache-2.0",
|
|
34
|
+
"bugs": {
|
|
35
|
+
"url": "https://github.com/GoogleChromeLabs/ps-analysis-tool/issues"
|
|
36
|
+
},
|
|
37
|
+
"homepage": "https://github.com/GoogleChromeLabs/ps-analysis-tool",
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"intl-messageformat": "^10.5.11"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 Google LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* External dependencies.
|
|
18
|
+
*/
|
|
19
|
+
const fs = require('fs');
|
|
20
|
+
|
|
21
|
+
const PACKAGES = [
|
|
22
|
+
'cli',
|
|
23
|
+
'cli-dashboard',
|
|
24
|
+
'common',
|
|
25
|
+
'design-system',
|
|
26
|
+
'extension',
|
|
27
|
+
'library-detection',
|
|
28
|
+
];
|
|
29
|
+
const COMMON_PATH = 'packages/i18n/_locales';
|
|
30
|
+
const TARGET = `${COMMON_PATH}/messages/en/messages.json`;
|
|
31
|
+
|
|
32
|
+
const main = () => {
|
|
33
|
+
const messages = {};
|
|
34
|
+
|
|
35
|
+
PACKAGES.forEach((pkg) => {
|
|
36
|
+
const path = `${COMMON_PATH}/packages/${pkg}/messages.json`;
|
|
37
|
+
const data = fs.readFileSync(path, 'utf8') || '{}';
|
|
38
|
+
const parsed = JSON.parse(data);
|
|
39
|
+
|
|
40
|
+
Object.entries(parsed).forEach(([key, value]) => {
|
|
41
|
+
if (messages[key]) {
|
|
42
|
+
throw new Error(
|
|
43
|
+
`Duplicate key: ${key}, found in ${pkg}. Please resolve this conflict before continuing.`
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
messages[key] = value;
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
console.log(`Merged ${pkg} messages`);
|
|
51
|
+
|
|
52
|
+
fs.unlinkSync(path);
|
|
53
|
+
fs.writeFileSync(path, '{}');
|
|
54
|
+
|
|
55
|
+
console.log(`Deleted ${pkg} messages`);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
fs.writeFileSync(TARGET, JSON.stringify(messages, null, 2));
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
main();
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"jsx": "preserve",
|
|
4
|
+
"rootDir": "src",
|
|
5
|
+
"target": "es6",
|
|
6
|
+
"lib": ["es2021"],
|
|
7
|
+
"module": "commonjs",
|
|
8
|
+
"outDir": "dist",
|
|
9
|
+
"declarationDir": "dist-types",
|
|
10
|
+
"composite": true,
|
|
11
|
+
"strict": true,
|
|
12
|
+
"sourceMap": false,
|
|
13
|
+
"esModuleInterop": true,
|
|
14
|
+
"moduleResolution": "node"
|
|
15
|
+
},
|
|
16
|
+
"exclude": ["**/tests/**/*.ts", "dist/**", "dist-types/**"]
|
|
17
|
+
}
|