lcd-i18n-core 9.0.0-alpha.3 → 9.0.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +2 -354
- package/lib/index.js.map +1 -1
- package/lib/storage.d.ts +75 -74
- package/lib/storage.d.ts.map +1 -0
- package/lib/storage.js +313 -0
- package/lib/storage.js.map +1 -0
- package/lib/string-format.d.ts +8 -7
- package/lib/string-format.d.ts.map +1 -0
- package/lib/string-format.js +56 -0
- package/lib/string-format.js.map +1 -0
- package/package.json +4 -4
package/lib/index.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export * from './storage';
|
|
1
|
+
export * from './storage';
|
|
2
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -1,354 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import localforage from 'localforage';
|
|
4
|
-
|
|
5
|
-
/*! *****************************************************************************
|
|
6
|
-
Copyright (c) Microsoft Corporation.
|
|
7
|
-
|
|
8
|
-
Permission to use, copy, modify, and/or distribute this software for any
|
|
9
|
-
purpose with or without fee is hereby granted.
|
|
10
|
-
|
|
11
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
12
|
-
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
13
|
-
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
14
|
-
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
15
|
-
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
16
|
-
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
17
|
-
PERFORMANCE OF THIS SOFTWARE.
|
|
18
|
-
***************************************************************************** */
|
|
19
|
-
|
|
20
|
-
var __assign = function() {
|
|
21
|
-
__assign = Object.assign || function __assign(t) {
|
|
22
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
23
|
-
s = arguments[i];
|
|
24
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
25
|
-
}
|
|
26
|
-
return t;
|
|
27
|
-
};
|
|
28
|
-
return __assign.apply(this, arguments);
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
function __awaiter(thisArg, _arguments, P, generator) {
|
|
32
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
33
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
34
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
35
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
36
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
37
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
function __generator(thisArg, body) {
|
|
42
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
43
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
44
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
45
|
-
function step(op) {
|
|
46
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
47
|
-
while (_) try {
|
|
48
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
49
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
50
|
-
switch (op[0]) {
|
|
51
|
-
case 0: case 1: t = op; break;
|
|
52
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
53
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
54
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
55
|
-
default:
|
|
56
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
57
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
58
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
59
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
60
|
-
if (t[2]) _.ops.pop();
|
|
61
|
-
_.trys.pop(); continue;
|
|
62
|
-
}
|
|
63
|
-
op = body.call(thisArg, _);
|
|
64
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
65
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
var SEP = '$.$';
|
|
70
|
-
/**
|
|
71
|
-
* 格式化
|
|
72
|
-
* @param {string} template string format
|
|
73
|
-
* @param {...any} res input params
|
|
74
|
-
*/
|
|
75
|
-
var format = function (template, _params) {
|
|
76
|
-
var args = _params;
|
|
77
|
-
var idx = 0;
|
|
78
|
-
var state = 'UNDEFINED';
|
|
79
|
-
var cache = [];
|
|
80
|
-
var s = template.replace(/([{}])\1|[{](.*?)[}]/g, function (match, literal, _key) {
|
|
81
|
-
if (literal != null) {
|
|
82
|
-
return literal;
|
|
83
|
-
}
|
|
84
|
-
var base = "{" + _key + "}";
|
|
85
|
-
var key = _key;
|
|
86
|
-
if (key.length > 0) {
|
|
87
|
-
if (state === 'IMPLICIT') {
|
|
88
|
-
console.warn('cannot switch from implicit to explicit numbering');
|
|
89
|
-
return base;
|
|
90
|
-
}
|
|
91
|
-
state = 'EXPLICIT';
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
if (state === 'EXPLICIT') {
|
|
95
|
-
console.warn('cannot switch from explicit to implicit numbering');
|
|
96
|
-
return base;
|
|
97
|
-
}
|
|
98
|
-
state = 'IMPLICIT';
|
|
99
|
-
key = String(idx);
|
|
100
|
-
idx += 1;
|
|
101
|
-
}
|
|
102
|
-
var path = key.split('.');
|
|
103
|
-
// const value = (/^\d+$/.test(path[0]) ? path : ['0'].concat(path))
|
|
104
|
-
// .reduce((maybe, k) => maybe.reduce((_, x) => (x != null && k in Object(x) ? [typeof x[k] === 'function' ? x[k]() : x[k]] : []), []), [args])
|
|
105
|
-
// .reduce((_, x) => x, base);
|
|
106
|
-
var value = path
|
|
107
|
-
.reduce(function (maybe, k) { return maybe.reduce(function (_, x) { return (x != null && k in Object(x) ? [x[k]] : []); }, []); }, [args])
|
|
108
|
-
.reduce(function (_, x) { return x; }, base);
|
|
109
|
-
cache.push(value);
|
|
110
|
-
return SEP;
|
|
111
|
-
});
|
|
112
|
-
var hasElement = cache.some(function (n) { return React.isValidElement(n); });
|
|
113
|
-
if (hasElement) {
|
|
114
|
-
var I18NComponent = function () {
|
|
115
|
-
return (React.createElement(React.Fragment, null, s.split(SEP).map(function (x, i) {
|
|
116
|
-
return (React.createElement(React.Fragment, { key: i },
|
|
117
|
-
x,
|
|
118
|
-
cache[i] && React.isValidElement(cache[i]) ? React.cloneElement(cache[i]) : cache[i]));
|
|
119
|
-
})));
|
|
120
|
-
};
|
|
121
|
-
return React.createElement(I18NComponent, null);
|
|
122
|
-
}
|
|
123
|
-
return s
|
|
124
|
-
.split(SEP)
|
|
125
|
-
.map(function (x, i) { return "" + x + (cache[i] || ''); })
|
|
126
|
-
.join('');
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
localforage.config({
|
|
130
|
-
driver: [localforage.WEBSQL, localforage.LOCALSTORAGE],
|
|
131
|
-
name: 'rrcTranslation',
|
|
132
|
-
storeName: 'rrcTranslationStore',
|
|
133
|
-
});
|
|
134
|
-
var translateStorage = {};
|
|
135
|
-
var enableMissingReport = true;
|
|
136
|
-
var enableUsedReport = false;
|
|
137
|
-
var cloudSetting;
|
|
138
|
-
/** 缺失词条存储 */
|
|
139
|
-
var missingSet = new Set();
|
|
140
|
-
/** 已使用词条存储 */
|
|
141
|
-
var usedMap = new Map();
|
|
142
|
-
/** 默认存储键的前缀 */
|
|
143
|
-
var DEFAULT_STORAGE_KEY = '@@SESSION/TRANSLATIONS';
|
|
144
|
-
/** 默认轮询间隔 */
|
|
145
|
-
var DEFAULT_LOOP_MS = 5 * 60;
|
|
146
|
-
function fetchBBLDictionary(request) {
|
|
147
|
-
var _a;
|
|
148
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
149
|
-
var npid;
|
|
150
|
-
return __generator(this, function (_b) {
|
|
151
|
-
npid = request.npid;
|
|
152
|
-
window['i18n_callback'] = request.callback;
|
|
153
|
-
// 内网地址 : 'https://bbl.biz.sheincorp.cn/api/translation'}?npid=${npid}&callback=i18n_callback`
|
|
154
|
-
fetch(((_a = request.url) !== null && _a !== void 0 ? _a : 'https://cloud-now.sheincorp.cn/trans/api/translation') + "?npid=" + npid + "&callback=i18n_callback", {
|
|
155
|
-
method: 'GET',
|
|
156
|
-
mode: 'cors',
|
|
157
|
-
credentials: 'omit',
|
|
158
|
-
})
|
|
159
|
-
.then(function (x) { return x.text(); })
|
|
160
|
-
.then(function (x) {
|
|
161
|
-
var sum = new Function("" + x);
|
|
162
|
-
sum();
|
|
163
|
-
});
|
|
164
|
-
return [2 /*return*/];
|
|
165
|
-
});
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
function synchronizeBBL(request) {
|
|
169
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
170
|
-
var npid, url, persistBBL, ms, callback;
|
|
171
|
-
return __generator(this, function (_a) {
|
|
172
|
-
npid = request.npid, url = request.url, persistBBL = request.persistBBL, ms = request.ms, callback = request.callback;
|
|
173
|
-
fetchBBLDictionary({
|
|
174
|
-
npid: npid,
|
|
175
|
-
url: url,
|
|
176
|
-
callback: function (data) {
|
|
177
|
-
persistBBL({ transData: data });
|
|
178
|
-
callback === null || callback === void 0 ? void 0 : callback({ transData: data });
|
|
179
|
-
},
|
|
180
|
-
});
|
|
181
|
-
setTimeout(function () { return synchronizeBBL(request); }, ms);
|
|
182
|
-
return [2 /*return*/];
|
|
183
|
-
});
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
/** 创建于云配置交互的对象 */
|
|
187
|
-
function createCloudSetting(options) {
|
|
188
|
-
var projectName = options.projectName;
|
|
189
|
-
function createFetcher(key) {
|
|
190
|
-
return function (value) {
|
|
191
|
-
return fetch("https://cloud-now.sheincorp.cn/api/options", {
|
|
192
|
-
method: 'POST',
|
|
193
|
-
headers: { 'content-type': 'application/json' },
|
|
194
|
-
body: JSON.stringify({
|
|
195
|
-
appKey: 'e72abef04a9d3cf488ce0156',
|
|
196
|
-
selfUpdate: true,
|
|
197
|
-
uid: 'lcd',
|
|
198
|
-
category: "i18n-" + key + "-key__" + projectName,
|
|
199
|
-
key: "i18n-" + key + "-key__" + projectName,
|
|
200
|
-
value: value,
|
|
201
|
-
}),
|
|
202
|
-
});
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
var missingFetch = createFetcher('warn');
|
|
206
|
-
var usedFetch = createFetcher('used');
|
|
207
|
-
var sendMissing = debounce(function (value) {
|
|
208
|
-
missingFetch(Array.from(value));
|
|
209
|
-
value.clear();
|
|
210
|
-
}, 5000);
|
|
211
|
-
var sendUsed = debounce(function (value) {
|
|
212
|
-
usedFetch(Array.from(value.values()).map(function (x) { return (__assign(__assign({}, x), { qty: String(x.qty) })); }));
|
|
213
|
-
value.clear();
|
|
214
|
-
}, 5000);
|
|
215
|
-
return {
|
|
216
|
-
sendMissing: sendMissing,
|
|
217
|
-
sendUsed: sendUsed,
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
function transformLocale(locale) {
|
|
221
|
-
return locale === 'EN' ? 'US' : locale;
|
|
222
|
-
}
|
|
223
|
-
function translate(_a) {
|
|
224
|
-
var _b, _c, _d;
|
|
225
|
-
var _e = _a.uniqId, uniqId = _e === void 0 ? 'default' : _e, keys = _a.keys, $locale = _a.locale;
|
|
226
|
-
var peristKey = DEFAULT_STORAGE_KEY + "/" + uniqId.toUpperCase();
|
|
227
|
-
var data = (_b = translateStorage[peristKey]) !== null && _b !== void 0 ? _b : {};
|
|
228
|
-
var transData = data.transData, locale = data.locale, fallback = data.fallback;
|
|
229
|
-
var _f = keys === null || keys === void 0 ? void 0 : keys.map(function (x) {
|
|
230
|
-
if (React.isValidElement(x)) {
|
|
231
|
-
return x;
|
|
232
|
-
}
|
|
233
|
-
return String(x);
|
|
234
|
-
}), template = _f[0], _params = _f.slice(1);
|
|
235
|
-
/** 模板异常,直接返回空字符串 */
|
|
236
|
-
if (!template) {
|
|
237
|
-
return '';
|
|
238
|
-
}
|
|
239
|
-
/** 词典不存在,直接返回模板 */
|
|
240
|
-
if (!transData) {
|
|
241
|
-
return format(template, _params);
|
|
242
|
-
}
|
|
243
|
-
/** 词条元数据不存在,直接返回模板 */
|
|
244
|
-
var textMeta = transData[template];
|
|
245
|
-
if (!textMeta) {
|
|
246
|
-
/** 缺失词条 */
|
|
247
|
-
if (enableMissingReport) {
|
|
248
|
-
missingSet.add(template);
|
|
249
|
-
(_c = cloudSetting === null || cloudSetting === void 0 ? void 0 : cloudSetting.sendMissing) === null || _c === void 0 ? void 0 : _c.call(cloudSetting, missingSet);
|
|
250
|
-
}
|
|
251
|
-
/** 缺失词条 */
|
|
252
|
-
return format(template, _params);
|
|
253
|
-
}
|
|
254
|
-
var localeText = textMeta[$locale !== null && $locale !== void 0 ? $locale : locale] || textMeta[fallback];
|
|
255
|
-
/** 如果对应的语种不存在,并且降级语种也不存在,那么直接返回模板 */
|
|
256
|
-
if (!localeText) {
|
|
257
|
-
return format(template, _params);
|
|
258
|
-
}
|
|
259
|
-
/** 词条使用量统计 */
|
|
260
|
-
if (enableUsedReport) {
|
|
261
|
-
var nid = textMeta.nid;
|
|
262
|
-
if (usedMap.has(nid)) {
|
|
263
|
-
usedMap.get(nid).qty += 1;
|
|
264
|
-
}
|
|
265
|
-
else {
|
|
266
|
-
usedMap.set(nid, { id: nid, qty: 1 });
|
|
267
|
-
}
|
|
268
|
-
(_d = cloudSetting === null || cloudSetting === void 0 ? void 0 : cloudSetting.sendUsed) === null || _d === void 0 ? void 0 : _d.call(cloudSetting, usedMap);
|
|
269
|
-
}
|
|
270
|
-
/** 词条使用量统计 */
|
|
271
|
-
return format(localeText, _params);
|
|
272
|
-
}
|
|
273
|
-
function configurationBBL(options) {
|
|
274
|
-
var _a, _b, _c;
|
|
275
|
-
var npid = options.npid, url = options.url, seconds = options.seconds, loc = options.locale, fallback = options.fallback, projectName = options.projectName, initialTransData = options.initialTransData;
|
|
276
|
-
if (!npid) {
|
|
277
|
-
throw new Error('i18n: 缺少npid!');
|
|
278
|
-
}
|
|
279
|
-
enableMissingReport = (_a = options === null || options === void 0 ? void 0 : options.enableMissingReport) !== null && _a !== void 0 ? _a : true;
|
|
280
|
-
enableUsedReport = (_b = options === null || options === void 0 ? void 0 : options.enableUsedReport) !== null && _b !== void 0 ? _b : false;
|
|
281
|
-
var locale = transformLocale(loc);
|
|
282
|
-
var peristKey = DEFAULT_STORAGE_KEY + "/" + ((_c = options.uniqId) !== null && _c !== void 0 ? _c : 'default').toUpperCase();
|
|
283
|
-
translateStorage[peristKey] = {
|
|
284
|
-
fallback: fallback,
|
|
285
|
-
locale: locale,
|
|
286
|
-
projectName: projectName,
|
|
287
|
-
transData: initialTransData,
|
|
288
|
-
};
|
|
289
|
-
cloudSetting = createCloudSetting({
|
|
290
|
-
projectName: projectName,
|
|
291
|
-
});
|
|
292
|
-
/** 持久化bbl */
|
|
293
|
-
function persistBBL(domainData) {
|
|
294
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
295
|
-
var data;
|
|
296
|
-
return __generator(this, function (_a) {
|
|
297
|
-
data = __assign({ locale: locale,
|
|
298
|
-
fallback: fallback,
|
|
299
|
-
projectName: projectName }, domainData);
|
|
300
|
-
translateStorage[peristKey] = data;
|
|
301
|
-
localforage.setItem(peristKey, data);
|
|
302
|
-
return [2 /*return*/];
|
|
303
|
-
});
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
|
-
localforage.getItem(peristKey).then(function (x) {
|
|
307
|
-
translateStorage[peristKey] = x;
|
|
308
|
-
});
|
|
309
|
-
var synchronize = function (callback) {
|
|
310
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
311
|
-
return __generator(this, function (_a) {
|
|
312
|
-
synchronizeBBL({
|
|
313
|
-
ms: (seconds !== null && seconds !== void 0 ? seconds : DEFAULT_LOOP_MS) * 1000,
|
|
314
|
-
persistBBL: persistBBL,
|
|
315
|
-
npid: npid,
|
|
316
|
-
url: url,
|
|
317
|
-
callback: callback,
|
|
318
|
-
});
|
|
319
|
-
return [2 /*return*/];
|
|
320
|
-
});
|
|
321
|
-
});
|
|
322
|
-
};
|
|
323
|
-
var getDictionary = function () { var _a; return (_a = translateStorage[peristKey]) === null || _a === void 0 ? void 0 : _a['transData']; };
|
|
324
|
-
var t = function () {
|
|
325
|
-
var keys = [];
|
|
326
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
327
|
-
keys[_i] = arguments[_i];
|
|
328
|
-
}
|
|
329
|
-
return translate({ uniqId: options.uniqId, keys: keys });
|
|
330
|
-
};
|
|
331
|
-
return {
|
|
332
|
-
t: t,
|
|
333
|
-
getT: function (locale) {
|
|
334
|
-
translateStorage[peristKey] && (translateStorage[peristKey].locale = locale);
|
|
335
|
-
return function () {
|
|
336
|
-
var keys = [];
|
|
337
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
338
|
-
keys[_i] = arguments[_i];
|
|
339
|
-
}
|
|
340
|
-
return translate({ uniqId: options.uniqId, keys: keys, locale: locale });
|
|
341
|
-
};
|
|
342
|
-
},
|
|
343
|
-
synchronize: synchronize,
|
|
344
|
-
getDictionary: getDictionary,
|
|
345
|
-
};
|
|
346
|
-
}
|
|
347
|
-
var getStorage = function (uniqId) {
|
|
348
|
-
if (uniqId === void 0) { uniqId = 'default'; }
|
|
349
|
-
var peristKey = DEFAULT_STORAGE_KEY + "/" + uniqId.toUpperCase();
|
|
350
|
-
return translateStorage[peristKey];
|
|
351
|
-
};
|
|
352
|
-
|
|
353
|
-
export { DEFAULT_LOOP_MS, DEFAULT_STORAGE_KEY, configurationBBL, getStorage, translate };
|
|
354
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
export * from "./storage";
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/string-format.tsx","../src/storage.ts"],"sourcesContent":["import React from 'react';\n\nconst SEP = '$.$';\n/**\n * 格式化\n * @param {string} template string format\n * @param {...any} res input params\n */\nconst format = (template, _params) => {\n const args = _params;\n let idx = 0;\n let state = 'UNDEFINED';\n let cache = [];\n\n const s = template.replace(/([{}])\\1|[{](.*?)[}]/g, (match, literal, _key) => {\n if (literal != null) {\n return literal;\n }\n const base = `{${_key}}`;\n\n let key = _key;\n if (key.length > 0) {\n if (state === 'IMPLICIT') {\n console.warn('cannot switch from implicit to explicit numbering');\n return base;\n }\n state = 'EXPLICIT';\n } else {\n if (state === 'EXPLICIT') {\n console.warn('cannot switch from explicit to implicit numbering');\n return base;\n }\n state = 'IMPLICIT';\n key = String(idx);\n idx += 1;\n }\n\n const path = key.split('.');\n // const value = (/^\\d+$/.test(path[0]) ? path : ['0'].concat(path))\n // .reduce((maybe, k) => maybe.reduce((_, x) => (x != null && k in Object(x) ? [typeof x[k] === 'function' ? x[k]() : x[k]] : []), []), [args])\n // .reduce((_, x) => x, base);\n const value = path\n .reduce((maybe, k) => maybe.reduce((_, x) => (x != null && k in Object(x) ? [x[k]] : []), []), [args])\n .reduce((_, x) => x, base);\n cache.push(value);\n return SEP;\n });\n\n const hasElement = cache.some(n => React.isValidElement(n));\n\n if (hasElement) {\n const I18NComponent = function() {\n return (\n <>\n {s.split(SEP).map((x, i) => {\n return (\n <React.Fragment key={i}>\n {x}\n {cache[i] && React.isValidElement(cache[i]) ? React.cloneElement(cache[i]) : cache[i]}\n </React.Fragment>\n );\n })}\n </>\n );\n };\n\n return <I18NComponent />;\n }\n\n return s\n .split(SEP)\n .map((x, i) => `${x}${cache[i] || ''}`)\n .join('');\n};\n\nexport { format };\n","import { format } from './string-format';\nimport debounce from 'lodash.debounce';\nimport localforage from 'localforage';\nimport React from 'react';\n\nlocalforage.config({\n driver: [localforage.WEBSQL, localforage.LOCALSTORAGE],\n name: 'rrcTranslation',\n storeName: 'rrcTranslationStore',\n});\n\nconst translateStorage: TranslateStorage = {};\n\nlet enableMissingReport = true;\nlet enableUsedReport = false;\n\nlet cloudSetting;\n\n/** 缺失词条存储 */\nconst missingSet = new Set();\n/** 已使用词条存储 */\nconst usedMap = new Map();\n\nexport interface Ref<T extends any> {\n current: T;\n}\n\nexport interface PlainObject {\n [name: string]: any;\n}\n\nexport interface TranslateStorage {\n [name: string]: PlainObject;\n}\n\nexport interface ConfigurationBBLOptions {\n /** 本地化语种 */\n locale?: string;\n /** 没有找到对应翻译信息的情况下采用的语种 */\n fallback?: string;\n /** 系统标识 */\n npid: number;\n /** bbl数据词典请求地址 */\n url?: string;\n /** 支持多词典策略 */\n uniqId?: string;\n /** 系统名称 */\n projectName: string;\n /** 轮询时间间隔,秒为单位 */\n seconds?: number;\n /** 是否开启字条缺失上报功能 */\n enableMissingReport?: boolean;\n /** 是否开启字条是否已使用功能 */\n enableUsedReport?: boolean;\n /** 初始化词条 */\n initialTransData?: { [name: string]: any };\n}\n/** 默认存储键的前缀 */\nexport const DEFAULT_STORAGE_KEY = '@@SESSION/TRANSLATIONS';\n/** 默认轮询间隔 */\nexport const DEFAULT_LOOP_MS = 5 * 60;\n\nexport interface FetchBBLDictionaryRequest {\n npid: number;\n url?: string;\n callback: (data: PlainObject) => void;\n}\n\nasync function fetchBBLDictionary(request: FetchBBLDictionaryRequest) {\n const { npid } = request;\n window['i18n_callback'] = request.callback;\n // 内网地址 : 'https://bbl.biz.sheincorp.cn/api/translation'}?npid=${npid}&callback=i18n_callback`\n fetch(`${request.url ?? 'https://cloud-now.sheincorp.cn/trans/api/translation'}?npid=${npid}&callback=i18n_callback`, {\n method: 'GET',\n mode: 'cors',\n credentials: 'omit',\n })\n .then(x => x.text())\n .then(x => {\n const sum = new Function(`${x}`);\n sum();\n });\n}\n\nexport interface PersistBBLDomain {\n transData: PlainObject | null | undefined;\n locale: string;\n fallback: string;\n projectName: string;\n}\n\nexport interface PersistBBLRequest {\n domainData: PlainObject;\n}\n\nexport interface SynchronizeRequest {\n ms: number;\n npid: number;\n url: string;\n persistBBL: (data: PlainObject) => Promise<void>;\n callback?: (domainData: PlainObject) => void;\n}\n\nasync function synchronizeBBL(request: SynchronizeRequest) {\n const { npid, url, persistBBL, ms, callback } = request;\n\n fetchBBLDictionary({\n npid,\n url,\n callback: data => {\n persistBBL({ transData: data });\n callback?.({ transData: data });\n },\n });\n setTimeout(() => synchronizeBBL(request), ms);\n}\n\nexport interface CreateCloudSettingOptions {\n projectName: string;\n}\n\n/** 创建于云配置交互的对象 */\nfunction createCloudSetting(options: CreateCloudSettingOptions) {\n const { projectName } = options;\n function createFetcher(key: 'used' | 'warn') {\n return <T>(value: T) =>\n fetch(`https://cloud-now.sheincorp.cn/api/options`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n appKey: 'e72abef04a9d3cf488ce0156',\n selfUpdate: true,\n uid: 'lcd',\n category: `i18n-${key}-key__${projectName}`,\n key: `i18n-${key}-key__${projectName}`,\n value: value,\n }),\n });\n }\n\n const missingFetch = createFetcher('warn');\n const usedFetch = createFetcher('used');\n\n const sendMissing = debounce((value: Set<any>) => {\n missingFetch(Array.from(value));\n value.clear();\n }, 5000);\n\n const sendUsed = debounce((value: Map<number, { id: number; qty: number }>) => {\n usedFetch(Array.from(value.values()).map(x => ({ ...x, qty: String(x.qty) })));\n value.clear();\n }, 5000);\n\n return {\n sendMissing,\n sendUsed,\n };\n}\n\nfunction transformLocale(locale) {\n return locale === 'EN' ? 'US' : locale;\n}\n\nexport interface TranslateOptions {\n uniqId?: string;\n keys: any[];\n locale?: string;\n}\n\nexport function translate({ uniqId = 'default', keys, locale: $locale }: TranslateOptions) {\n const peristKey = `${DEFAULT_STORAGE_KEY}/${uniqId.toUpperCase()}`;\n\n const data = translateStorage[peristKey] ?? {};\n\n const { transData, locale, fallback } = data;\n const [template, ..._params] = keys?.map(x => {\n if (React.isValidElement(x)) {\n return x;\n }\n return String(x);\n });\n\n /** 模板异常,直接返回空字符串 */\n if (!template) {\n return '';\n }\n\n /** 词典不存在,直接返回模板 */\n if (!transData) {\n return format(template, _params);\n }\n /** 词条元数据不存在,直接返回模板 */\n const textMeta = transData[template as never];\n\n if (!textMeta) {\n /** 缺失词条 */\n if (enableMissingReport) {\n missingSet.add(template);\n cloudSetting?.sendMissing?.(missingSet);\n }\n /** 缺失词条 */\n return format(template, _params);\n }\n\n const localeText = textMeta[$locale ?? locale] || textMeta[fallback];\n /** 如果对应的语种不存在,并且降级语种也不存在,那么直接返回模板 */\n if (!localeText) {\n return format(template, _params);\n }\n\n /** 词条使用量统计 */\n if (enableUsedReport) {\n const nid = textMeta.nid;\n if (usedMap.has(nid)) {\n usedMap.get(nid).qty += 1;\n } else {\n usedMap.set(nid, { id: nid, qty: 1 });\n }\n cloudSetting?.sendUsed?.(usedMap);\n }\n /** 词条使用量统计 */\n\n return format(localeText, _params);\n}\n\nexport function configurationBBL(options: ConfigurationBBLOptions) {\n const { npid, url, seconds, locale: loc, fallback, projectName, initialTransData } = options;\n if (!npid) {\n throw new Error('i18n: 缺少npid!');\n }\n\n enableMissingReport = options?.enableMissingReport ?? true;\n enableUsedReport = options?.enableUsedReport ?? false;\n const locale = transformLocale(loc);\n const peristKey = `${DEFAULT_STORAGE_KEY}/${(options.uniqId ?? 'default').toUpperCase()}`;\n translateStorage[peristKey] = {\n fallback,\n locale,\n projectName,\n transData: initialTransData,\n };\n cloudSetting = createCloudSetting({\n projectName: projectName,\n });\n\n /** 持久化bbl */\n async function persistBBL(domainData: PlainObject) {\n const data = {\n locale,\n fallback,\n projectName,\n ...domainData,\n };\n translateStorage[peristKey] = data;\n localforage.setItem(peristKey, data);\n }\n\n localforage.getItem(peristKey).then(x => {\n translateStorage[peristKey] = x;\n });\n\n const synchronize = async function(callback?: (domainData: PlainObject) => void) {\n synchronizeBBL({\n ms: (seconds ?? DEFAULT_LOOP_MS) * 1000,\n persistBBL,\n npid,\n url,\n callback,\n });\n };\n\n const getDictionary = () => translateStorage[peristKey]?.['transData'];\n\n const t = (...keys: any[]) => translate({ uniqId: options.uniqId, keys });\n\n return {\n t,\n getT: (locale: string) => {\n translateStorage[peristKey] && (translateStorage[peristKey].locale = locale);\n\n return (...keys: any[]) => translate({ uniqId: options.uniqId, keys, locale });\n },\n synchronize,\n getDictionary,\n };\n}\nexport const getStorage = (uniqId: string = 'default') => {\n const peristKey = `${DEFAULT_STORAGE_KEY}/${uniqId.toUpperCase()}`;\n return translateStorage[peristKey];\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../index.ts"],"sourcesContent":["export * from './storage';\n"],"mappings":"AAAA"}
|
package/lib/storage.d.ts
CHANGED
|
@@ -1,74 +1,75 @@
|
|
|
1
|
-
export interface Ref<T extends any> {
|
|
2
|
-
current: T;
|
|
3
|
-
}
|
|
4
|
-
export interface PlainObject {
|
|
5
|
-
[name: string]: any;
|
|
6
|
-
}
|
|
7
|
-
export interface TranslateStorage {
|
|
8
|
-
[name: string]: PlainObject;
|
|
9
|
-
}
|
|
10
|
-
export interface ConfigurationBBLOptions {
|
|
11
|
-
/** 本地化语种 */
|
|
12
|
-
locale?: string;
|
|
13
|
-
/** 没有找到对应翻译信息的情况下采用的语种 */
|
|
14
|
-
fallback?: string;
|
|
15
|
-
/** 系统标识 */
|
|
16
|
-
npid: number;
|
|
17
|
-
/** bbl数据词典请求地址 */
|
|
18
|
-
url?: string;
|
|
19
|
-
/** 支持多词典策略 */
|
|
20
|
-
uniqId?: string;
|
|
21
|
-
/** 系统名称 */
|
|
22
|
-
projectName: string;
|
|
23
|
-
/** 轮询时间间隔,秒为单位 */
|
|
24
|
-
seconds?: number;
|
|
25
|
-
/** 是否开启字条缺失上报功能 */
|
|
26
|
-
enableMissingReport?: boolean;
|
|
27
|
-
/** 是否开启字条是否已使用功能 */
|
|
28
|
-
enableUsedReport?: boolean;
|
|
29
|
-
/** 初始化词条 */
|
|
30
|
-
initialTransData?: {
|
|
31
|
-
[name: string]: any;
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
/** 默认存储键的前缀 */
|
|
35
|
-
export declare const DEFAULT_STORAGE_KEY = "@@SESSION/TRANSLATIONS";
|
|
36
|
-
/** 默认轮询间隔 */
|
|
37
|
-
export declare const DEFAULT_LOOP_MS: number;
|
|
38
|
-
export interface FetchBBLDictionaryRequest {
|
|
39
|
-
npid: number;
|
|
40
|
-
url?: string;
|
|
41
|
-
callback: (data: PlainObject) => void;
|
|
42
|
-
}
|
|
43
|
-
export interface PersistBBLDomain {
|
|
44
|
-
transData: PlainObject | null | undefined;
|
|
45
|
-
locale: string;
|
|
46
|
-
fallback: string;
|
|
47
|
-
projectName: string;
|
|
48
|
-
}
|
|
49
|
-
export interface PersistBBLRequest {
|
|
50
|
-
domainData: PlainObject;
|
|
51
|
-
}
|
|
52
|
-
export interface SynchronizeRequest {
|
|
53
|
-
ms: number;
|
|
54
|
-
npid: number;
|
|
55
|
-
url: string;
|
|
56
|
-
persistBBL: (data: PlainObject) => Promise<void>;
|
|
57
|
-
callback?: (domainData: PlainObject) => void;
|
|
58
|
-
}
|
|
59
|
-
export interface CreateCloudSettingOptions {
|
|
60
|
-
projectName: string;
|
|
61
|
-
}
|
|
62
|
-
export interface TranslateOptions {
|
|
63
|
-
uniqId?: string;
|
|
64
|
-
keys: any[];
|
|
65
|
-
locale?: string;
|
|
66
|
-
}
|
|
67
|
-
export declare function translate({ uniqId, keys, locale: $locale }: TranslateOptions): any;
|
|
68
|
-
export declare function configurationBBL(options: ConfigurationBBLOptions): {
|
|
69
|
-
t: (...keys: any[]) => any;
|
|
70
|
-
getT: (locale: string) => (...keys: any[]) => any;
|
|
71
|
-
synchronize: (callback?: (domainData: PlainObject) => void) => Promise<void>;
|
|
72
|
-
getDictionary: () => any;
|
|
73
|
-
};
|
|
74
|
-
export declare const getStorage: (uniqId?: string) => PlainObject;
|
|
1
|
+
export interface Ref<T extends any> {
|
|
2
|
+
current: T;
|
|
3
|
+
}
|
|
4
|
+
export interface PlainObject {
|
|
5
|
+
[name: string]: any;
|
|
6
|
+
}
|
|
7
|
+
export interface TranslateStorage {
|
|
8
|
+
[name: string]: PlainObject;
|
|
9
|
+
}
|
|
10
|
+
export interface ConfigurationBBLOptions {
|
|
11
|
+
/** 本地化语种 */
|
|
12
|
+
locale?: string;
|
|
13
|
+
/** 没有找到对应翻译信息的情况下采用的语种 */
|
|
14
|
+
fallback?: string;
|
|
15
|
+
/** 系统标识 */
|
|
16
|
+
npid: number;
|
|
17
|
+
/** bbl数据词典请求地址 */
|
|
18
|
+
url?: string;
|
|
19
|
+
/** 支持多词典策略 */
|
|
20
|
+
uniqId?: string;
|
|
21
|
+
/** 系统名称 */
|
|
22
|
+
projectName: string;
|
|
23
|
+
/** 轮询时间间隔,秒为单位 */
|
|
24
|
+
seconds?: number;
|
|
25
|
+
/** 是否开启字条缺失上报功能 */
|
|
26
|
+
enableMissingReport?: boolean;
|
|
27
|
+
/** 是否开启字条是否已使用功能 */
|
|
28
|
+
enableUsedReport?: boolean;
|
|
29
|
+
/** 初始化词条 */
|
|
30
|
+
initialTransData?: {
|
|
31
|
+
[name: string]: any;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/** 默认存储键的前缀 */
|
|
35
|
+
export declare const DEFAULT_STORAGE_KEY = "@@SESSION/TRANSLATIONS";
|
|
36
|
+
/** 默认轮询间隔 */
|
|
37
|
+
export declare const DEFAULT_LOOP_MS: number;
|
|
38
|
+
export interface FetchBBLDictionaryRequest {
|
|
39
|
+
npid: number;
|
|
40
|
+
url?: string;
|
|
41
|
+
callback: (data: PlainObject) => void;
|
|
42
|
+
}
|
|
43
|
+
export interface PersistBBLDomain {
|
|
44
|
+
transData: PlainObject | null | undefined;
|
|
45
|
+
locale: string;
|
|
46
|
+
fallback: string;
|
|
47
|
+
projectName: string;
|
|
48
|
+
}
|
|
49
|
+
export interface PersistBBLRequest {
|
|
50
|
+
domainData: PlainObject;
|
|
51
|
+
}
|
|
52
|
+
export interface SynchronizeRequest {
|
|
53
|
+
ms: number;
|
|
54
|
+
npid: number;
|
|
55
|
+
url: string;
|
|
56
|
+
persistBBL: (data: PlainObject) => Promise<void>;
|
|
57
|
+
callback?: (domainData: PlainObject) => void;
|
|
58
|
+
}
|
|
59
|
+
export interface CreateCloudSettingOptions {
|
|
60
|
+
projectName: string;
|
|
61
|
+
}
|
|
62
|
+
export interface TranslateOptions {
|
|
63
|
+
uniqId?: string;
|
|
64
|
+
keys: any[];
|
|
65
|
+
locale?: string;
|
|
66
|
+
}
|
|
67
|
+
export declare function translate({ uniqId, keys, locale: $locale }: TranslateOptions): any;
|
|
68
|
+
export declare function configurationBBL(options: ConfigurationBBLOptions): {
|
|
69
|
+
t: (...keys: any[]) => any;
|
|
70
|
+
getT: (locale: string) => (...keys: any[]) => any;
|
|
71
|
+
synchronize: (callback?: (domainData: PlainObject) => void) => Promise<void>;
|
|
72
|
+
getDictionary: () => any;
|
|
73
|
+
};
|
|
74
|
+
export declare const getStorage: (uniqId?: string) => PlainObject;
|
|
75
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,GAAG,CAAC,CAAC,SAAS,GAAG;IAChC,OAAO,EAAE,CAAC,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,oBAAoB;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY;IACZ,gBAAgB,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CAC5C;AACD,eAAe;AACf,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAC5D,aAAa;AACb,eAAO,MAAM,eAAe,QAAS,CAAC;AAEtC,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;CACvC;AAkBD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,WAAW,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,KAAK,IAAI,CAAC;CAC9C;AAgBD,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;CACrB;AA4CD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,SAAS,CAAC,EAAE,MAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,gBAAgB,OAsDxF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB;iBAgD3C,GAAG,EAAE;mBAIR,MAAM,eAGF,GAAG,EAAE;0CAnBiC,WAAW,KAAK,IAAI;;EAwBhF;AACD,eAAO,MAAM,UAAU,YAAY,MAAM,gBAGxC,CAAC"}
|
package/lib/storage.js
ADDED
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == typeof value && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator.return && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, catch: function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
|
|
2
|
+
function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }
|
|
3
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
5
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
6
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
7
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
8
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
9
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
10
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
11
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
12
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
13
|
+
import { format } from "./string-format";
|
|
14
|
+
import debounce from 'lodash.debounce';
|
|
15
|
+
import localforage from 'localforage';
|
|
16
|
+
import React from 'react';
|
|
17
|
+
localforage.config({
|
|
18
|
+
driver: [localforage.WEBSQL, localforage.LOCALSTORAGE],
|
|
19
|
+
name: 'rrcTranslation',
|
|
20
|
+
storeName: 'rrcTranslationStore'
|
|
21
|
+
});
|
|
22
|
+
var translateStorage = {};
|
|
23
|
+
var enableMissingReport = true;
|
|
24
|
+
var enableUsedReport = false;
|
|
25
|
+
var cloudSetting;
|
|
26
|
+
|
|
27
|
+
/** 缺失词条存储 */
|
|
28
|
+
var missingSet = new Set();
|
|
29
|
+
/** 已使用词条存储 */
|
|
30
|
+
var usedMap = new Map();
|
|
31
|
+
/** 默认存储键的前缀 */
|
|
32
|
+
export var DEFAULT_STORAGE_KEY = '@@SESSION/TRANSLATIONS';
|
|
33
|
+
/** 默认轮询间隔 */
|
|
34
|
+
export var DEFAULT_LOOP_MS = 5 * 60;
|
|
35
|
+
function fetchBBLDictionary(_x) {
|
|
36
|
+
return _fetchBBLDictionary.apply(this, arguments);
|
|
37
|
+
}
|
|
38
|
+
function _fetchBBLDictionary() {
|
|
39
|
+
_fetchBBLDictionary = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(request) {
|
|
40
|
+
var _request$url;
|
|
41
|
+
var npid;
|
|
42
|
+
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
43
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
44
|
+
case 0:
|
|
45
|
+
npid = request.npid;
|
|
46
|
+
window['i18n_callback'] = request.callback;
|
|
47
|
+
// 内网地址 : 'https://bbl.biz.sheincorp.cn/api/translation'}?npid=${npid}&callback=i18n_callback`
|
|
48
|
+
fetch(`${(_request$url = request.url) !== null && _request$url !== void 0 ? _request$url : 'https://cloud-now.sheincorp.cn/trans/api/translation'}?npid=${npid}&callback=i18n_callback`, {
|
|
49
|
+
method: 'GET',
|
|
50
|
+
mode: 'cors',
|
|
51
|
+
credentials: 'omit'
|
|
52
|
+
}).then(x => x.text()).then(x => {
|
|
53
|
+
var sum = new Function(`${x}`);
|
|
54
|
+
sum();
|
|
55
|
+
});
|
|
56
|
+
case 3:
|
|
57
|
+
case "end":
|
|
58
|
+
return _context3.stop();
|
|
59
|
+
}
|
|
60
|
+
}, _callee3);
|
|
61
|
+
}));
|
|
62
|
+
return _fetchBBLDictionary.apply(this, arguments);
|
|
63
|
+
}
|
|
64
|
+
function synchronizeBBL(_x2) {
|
|
65
|
+
return _synchronizeBBL.apply(this, arguments);
|
|
66
|
+
}
|
|
67
|
+
function _synchronizeBBL() {
|
|
68
|
+
_synchronizeBBL = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(request) {
|
|
69
|
+
var npid, url, persistBBL, ms, _callback;
|
|
70
|
+
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
|
71
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
72
|
+
case 0:
|
|
73
|
+
npid = request.npid, url = request.url, persistBBL = request.persistBBL, ms = request.ms, _callback = request.callback;
|
|
74
|
+
fetchBBLDictionary({
|
|
75
|
+
npid,
|
|
76
|
+
url,
|
|
77
|
+
callback: data => {
|
|
78
|
+
persistBBL({
|
|
79
|
+
transData: data
|
|
80
|
+
});
|
|
81
|
+
_callback === null || _callback === void 0 ? void 0 : _callback({
|
|
82
|
+
transData: data
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
setTimeout(() => synchronizeBBL(request), ms);
|
|
87
|
+
case 3:
|
|
88
|
+
case "end":
|
|
89
|
+
return _context4.stop();
|
|
90
|
+
}
|
|
91
|
+
}, _callee4);
|
|
92
|
+
}));
|
|
93
|
+
return _synchronizeBBL.apply(this, arguments);
|
|
94
|
+
}
|
|
95
|
+
/** 创建于云配置交互的对象 */
|
|
96
|
+
function createCloudSetting(options) {
|
|
97
|
+
var projectName = options.projectName;
|
|
98
|
+
function createFetcher(key) {
|
|
99
|
+
return value => fetch(`https://cloud-now.sheincorp.cn/api/options`, {
|
|
100
|
+
method: 'POST',
|
|
101
|
+
headers: {
|
|
102
|
+
'content-type': 'application/json'
|
|
103
|
+
},
|
|
104
|
+
body: JSON.stringify({
|
|
105
|
+
appKey: 'e72abef04a9d3cf488ce0156',
|
|
106
|
+
selfUpdate: true,
|
|
107
|
+
uid: 'lcd',
|
|
108
|
+
category: `i18n-${key}-key__${projectName}`,
|
|
109
|
+
key: `i18n-${key}-key__${projectName}`,
|
|
110
|
+
value: value
|
|
111
|
+
})
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
var missingFetch = createFetcher('warn');
|
|
115
|
+
var usedFetch = createFetcher('used');
|
|
116
|
+
var sendMissing = debounce(value => {
|
|
117
|
+
missingFetch(Array.from(value));
|
|
118
|
+
value.clear();
|
|
119
|
+
}, 5000);
|
|
120
|
+
var sendUsed = debounce(value => {
|
|
121
|
+
usedFetch(Array.from(value.values()).map(x => _objectSpread(_objectSpread({}, x), {}, {
|
|
122
|
+
qty: String(x.qty)
|
|
123
|
+
})));
|
|
124
|
+
value.clear();
|
|
125
|
+
}, 5000);
|
|
126
|
+
return {
|
|
127
|
+
sendMissing,
|
|
128
|
+
sendUsed
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
function transformLocale(locale) {
|
|
132
|
+
return locale === 'EN' ? 'US' : locale;
|
|
133
|
+
}
|
|
134
|
+
export function translate(_ref) {
|
|
135
|
+
var _translateStorage$per;
|
|
136
|
+
var _ref$uniqId = _ref.uniqId,
|
|
137
|
+
uniqId = _ref$uniqId === void 0 ? 'default' : _ref$uniqId,
|
|
138
|
+
keys = _ref.keys,
|
|
139
|
+
$locale = _ref.locale;
|
|
140
|
+
var peristKey = `${DEFAULT_STORAGE_KEY}/${uniqId.toUpperCase()}`;
|
|
141
|
+
var data = (_translateStorage$per = translateStorage[peristKey]) !== null && _translateStorage$per !== void 0 ? _translateStorage$per : {};
|
|
142
|
+
var transData = data.transData,
|
|
143
|
+
locale = data.locale,
|
|
144
|
+
fallback = data.fallback;
|
|
145
|
+
var _keys$map = keys === null || keys === void 0 ? void 0 : keys.map(x => {
|
|
146
|
+
if ( /*#__PURE__*/React.isValidElement(x)) {
|
|
147
|
+
return x;
|
|
148
|
+
}
|
|
149
|
+
return String(x);
|
|
150
|
+
}),
|
|
151
|
+
_keys$map2 = _toArray(_keys$map),
|
|
152
|
+
template = _keys$map2[0],
|
|
153
|
+
_params = _keys$map2.slice(1);
|
|
154
|
+
|
|
155
|
+
/** 模板异常,直接返回空字符串 */
|
|
156
|
+
if (!template) {
|
|
157
|
+
return '';
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/** 词典不存在,直接返回模板 */
|
|
161
|
+
if (!transData) {
|
|
162
|
+
return format(template, _params);
|
|
163
|
+
}
|
|
164
|
+
/** 词条元数据不存在,直接返回模板 */
|
|
165
|
+
var textMeta = transData[template];
|
|
166
|
+
if (!textMeta) {
|
|
167
|
+
/** 缺失词条 */
|
|
168
|
+
if (enableMissingReport) {
|
|
169
|
+
var _cloudSetting, _cloudSetting$sendMis;
|
|
170
|
+
missingSet.add(template);
|
|
171
|
+
(_cloudSetting = cloudSetting) === null || _cloudSetting === void 0 ? void 0 : (_cloudSetting$sendMis = _cloudSetting.sendMissing) === null || _cloudSetting$sendMis === void 0 ? void 0 : _cloudSetting$sendMis.call(_cloudSetting, missingSet);
|
|
172
|
+
}
|
|
173
|
+
/** 缺失词条 */
|
|
174
|
+
return format(template, _params);
|
|
175
|
+
}
|
|
176
|
+
var localeText = textMeta[$locale !== null && $locale !== void 0 ? $locale : locale] || textMeta[fallback];
|
|
177
|
+
/** 如果对应的语种不存在,并且降级语种也不存在,那么直接返回模板 */
|
|
178
|
+
if (!localeText) {
|
|
179
|
+
return format(template, _params);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/** 词条使用量统计 */
|
|
183
|
+
if (enableUsedReport) {
|
|
184
|
+
var _cloudSetting2, _cloudSetting2$sendUs;
|
|
185
|
+
var nid = textMeta.nid;
|
|
186
|
+
if (usedMap.has(nid)) {
|
|
187
|
+
usedMap.get(nid).qty += 1;
|
|
188
|
+
} else {
|
|
189
|
+
usedMap.set(nid, {
|
|
190
|
+
id: nid,
|
|
191
|
+
qty: 1
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
(_cloudSetting2 = cloudSetting) === null || _cloudSetting2 === void 0 ? void 0 : (_cloudSetting2$sendUs = _cloudSetting2.sendUsed) === null || _cloudSetting2$sendUs === void 0 ? void 0 : _cloudSetting2$sendUs.call(_cloudSetting2, usedMap);
|
|
195
|
+
}
|
|
196
|
+
/** 词条使用量统计 */
|
|
197
|
+
|
|
198
|
+
return format(localeText, _params);
|
|
199
|
+
}
|
|
200
|
+
export function configurationBBL(options) {
|
|
201
|
+
var _options$enableMissin, _options$enableUsedRe, _options$uniqId;
|
|
202
|
+
var npid = options.npid,
|
|
203
|
+
url = options.url,
|
|
204
|
+
seconds = options.seconds,
|
|
205
|
+
loc = options.locale,
|
|
206
|
+
fallback = options.fallback,
|
|
207
|
+
projectName = options.projectName,
|
|
208
|
+
initialTransData = options.initialTransData;
|
|
209
|
+
if (!npid) {
|
|
210
|
+
throw new Error('i18n: 缺少npid!');
|
|
211
|
+
}
|
|
212
|
+
enableMissingReport = (_options$enableMissin = options === null || options === void 0 ? void 0 : options.enableMissingReport) !== null && _options$enableMissin !== void 0 ? _options$enableMissin : true;
|
|
213
|
+
enableUsedReport = (_options$enableUsedRe = options === null || options === void 0 ? void 0 : options.enableUsedReport) !== null && _options$enableUsedRe !== void 0 ? _options$enableUsedRe : false;
|
|
214
|
+
var locale = transformLocale(loc);
|
|
215
|
+
var peristKey = `${DEFAULT_STORAGE_KEY}/${((_options$uniqId = options.uniqId) !== null && _options$uniqId !== void 0 ? _options$uniqId : 'default').toUpperCase()}`;
|
|
216
|
+
translateStorage[peristKey] = {
|
|
217
|
+
fallback,
|
|
218
|
+
locale,
|
|
219
|
+
projectName,
|
|
220
|
+
transData: initialTransData
|
|
221
|
+
};
|
|
222
|
+
cloudSetting = createCloudSetting({
|
|
223
|
+
projectName: projectName
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
/** 持久化bbl */
|
|
227
|
+
function persistBBL(_x3) {
|
|
228
|
+
return _persistBBL.apply(this, arguments);
|
|
229
|
+
}
|
|
230
|
+
function _persistBBL() {
|
|
231
|
+
_persistBBL = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(domainData) {
|
|
232
|
+
var data;
|
|
233
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
234
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
235
|
+
case 0:
|
|
236
|
+
data = _objectSpread({
|
|
237
|
+
locale,
|
|
238
|
+
fallback,
|
|
239
|
+
projectName
|
|
240
|
+
}, domainData);
|
|
241
|
+
translateStorage[peristKey] = data;
|
|
242
|
+
localforage.setItem(peristKey, data);
|
|
243
|
+
case 3:
|
|
244
|
+
case "end":
|
|
245
|
+
return _context2.stop();
|
|
246
|
+
}
|
|
247
|
+
}, _callee2);
|
|
248
|
+
}));
|
|
249
|
+
return _persistBBL.apply(this, arguments);
|
|
250
|
+
}
|
|
251
|
+
localforage.getItem(peristKey).then(x => {
|
|
252
|
+
translateStorage[peristKey] = x;
|
|
253
|
+
});
|
|
254
|
+
var synchronize = /*#__PURE__*/function () {
|
|
255
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(callback) {
|
|
256
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
257
|
+
while (1) switch (_context.prev = _context.next) {
|
|
258
|
+
case 0:
|
|
259
|
+
synchronizeBBL({
|
|
260
|
+
ms: (seconds !== null && seconds !== void 0 ? seconds : DEFAULT_LOOP_MS) * 1000,
|
|
261
|
+
persistBBL,
|
|
262
|
+
npid,
|
|
263
|
+
url,
|
|
264
|
+
callback
|
|
265
|
+
});
|
|
266
|
+
case 1:
|
|
267
|
+
case "end":
|
|
268
|
+
return _context.stop();
|
|
269
|
+
}
|
|
270
|
+
}, _callee);
|
|
271
|
+
}));
|
|
272
|
+
return function synchronize(_x4) {
|
|
273
|
+
return _ref2.apply(this, arguments);
|
|
274
|
+
};
|
|
275
|
+
}();
|
|
276
|
+
var getDictionary = () => {
|
|
277
|
+
var _translateStorage$per2;
|
|
278
|
+
return (_translateStorage$per2 = translateStorage[peristKey]) === null || _translateStorage$per2 === void 0 ? void 0 : _translateStorage$per2['transData'];
|
|
279
|
+
};
|
|
280
|
+
var t = function t() {
|
|
281
|
+
for (var _len = arguments.length, keys = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
282
|
+
keys[_key] = arguments[_key];
|
|
283
|
+
}
|
|
284
|
+
return translate({
|
|
285
|
+
uniqId: options.uniqId,
|
|
286
|
+
keys
|
|
287
|
+
});
|
|
288
|
+
};
|
|
289
|
+
return {
|
|
290
|
+
t,
|
|
291
|
+
getT: locale => {
|
|
292
|
+
translateStorage[peristKey] && (translateStorage[peristKey].locale = locale);
|
|
293
|
+
return function () {
|
|
294
|
+
for (var _len2 = arguments.length, keys = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
295
|
+
keys[_key2] = arguments[_key2];
|
|
296
|
+
}
|
|
297
|
+
return translate({
|
|
298
|
+
uniqId: options.uniqId,
|
|
299
|
+
keys,
|
|
300
|
+
locale
|
|
301
|
+
});
|
|
302
|
+
};
|
|
303
|
+
},
|
|
304
|
+
synchronize,
|
|
305
|
+
getDictionary
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
export var getStorage = function getStorage() {
|
|
309
|
+
var uniqId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'default';
|
|
310
|
+
var peristKey = `${DEFAULT_STORAGE_KEY}/${uniqId.toUpperCase()}`;
|
|
311
|
+
return translateStorage[peristKey];
|
|
312
|
+
};
|
|
313
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","names":["_regeneratorRuntime","exports","Op","Object","prototype","hasOwn","hasOwnProperty","defineProperty","obj","key","desc","value","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","call","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","undefined","return","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","_catch","thrown","delegateYield","_toArray","arr","_arrayWithHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableRest","o","minLen","_arrayLikeToArray","n","toString","Array","from","test","len","arr2","isArray","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","apply","_objectSpread","target","arguments","source","_defineProperty","getOwnPropertyDescriptors","defineProperties","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","format","debounce","localforage","React","config","driver","WEBSQL","LOCALSTORAGE","storeName","translateStorage","enableMissingReport","enableUsedReport","cloudSetting","missingSet","Set","usedMap","Map","DEFAULT_STORAGE_KEY","DEFAULT_LOOP_MS","fetchBBLDictionary","_x","_fetchBBLDictionary","_callee3","request","_request$url","npid","_callee3$","_context3","window","callback","fetch","url","mode","credentials","x","text","sum","Function","synchronizeBBL","_x2","_synchronizeBBL","_callee4","persistBBL","ms","_callback","_callee4$","_context4","data","transData","setTimeout","createCloudSetting","options","projectName","createFetcher","headers","body","JSON","stringify","appKey","selfUpdate","uid","category","missingFetch","usedFetch","sendMissing","clear","sendUsed","map","qty","String","transformLocale","locale","translate","_ref","_translateStorage$per","_ref$uniqId","uniqId","$locale","peristKey","toUpperCase","fallback","_keys$map","isValidElement","_keys$map2","template","_params","textMeta","_cloudSetting","_cloudSetting$sendMis","add","localeText","_cloudSetting2","_cloudSetting2$sendUs","nid","has","get","set","id","configurationBBL","_options$enableMissin","_options$enableUsedRe","_options$uniqId","seconds","initialTransData","_x3","_persistBBL","_callee2","domainData","_callee2$","_context2","setItem","getItem","synchronize","_ref2","_callee","_callee$","_context","_x4","getDictionary","_translateStorage$per2","t","_len","_key","getT","_len2","_key2","getStorage"],"sources":["../storage.ts"],"sourcesContent":["import { format } from './string-format';\nimport debounce from 'lodash.debounce';\nimport localforage from 'localforage';\nimport React from 'react';\n\nlocalforage.config({\n driver: [localforage.WEBSQL, localforage.LOCALSTORAGE],\n name: 'rrcTranslation',\n storeName: 'rrcTranslationStore',\n});\n\nconst translateStorage: TranslateStorage = {};\n\nlet enableMissingReport = true;\nlet enableUsedReport = false;\n\nlet cloudSetting;\n\n/** 缺失词条存储 */\nconst missingSet = new Set();\n/** 已使用词条存储 */\nconst usedMap = new Map();\n\nexport interface Ref<T extends any> {\n current: T;\n}\n\nexport interface PlainObject {\n [name: string]: any;\n}\n\nexport interface TranslateStorage {\n [name: string]: PlainObject;\n}\n\nexport interface ConfigurationBBLOptions {\n /** 本地化语种 */\n locale?: string;\n /** 没有找到对应翻译信息的情况下采用的语种 */\n fallback?: string;\n /** 系统标识 */\n npid: number;\n /** bbl数据词典请求地址 */\n url?: string;\n /** 支持多词典策略 */\n uniqId?: string;\n /** 系统名称 */\n projectName: string;\n /** 轮询时间间隔,秒为单位 */\n seconds?: number;\n /** 是否开启字条缺失上报功能 */\n enableMissingReport?: boolean;\n /** 是否开启字条是否已使用功能 */\n enableUsedReport?: boolean;\n /** 初始化词条 */\n initialTransData?: { [name: string]: any };\n}\n/** 默认存储键的前缀 */\nexport const DEFAULT_STORAGE_KEY = '@@SESSION/TRANSLATIONS';\n/** 默认轮询间隔 */\nexport const DEFAULT_LOOP_MS = 5 * 60;\n\nexport interface FetchBBLDictionaryRequest {\n npid: number;\n url?: string;\n callback: (data: PlainObject) => void;\n}\n\nasync function fetchBBLDictionary(request: FetchBBLDictionaryRequest) {\n const { npid } = request;\n window['i18n_callback'] = request.callback;\n // 内网地址 : 'https://bbl.biz.sheincorp.cn/api/translation'}?npid=${npid}&callback=i18n_callback`\n fetch(`${request.url ?? 'https://cloud-now.sheincorp.cn/trans/api/translation'}?npid=${npid}&callback=i18n_callback`, {\n method: 'GET',\n mode: 'cors',\n credentials: 'omit',\n })\n .then(x => x.text())\n .then(x => {\n const sum = new Function(`${x}`);\n sum();\n });\n}\n\nexport interface PersistBBLDomain {\n transData: PlainObject | null | undefined;\n locale: string;\n fallback: string;\n projectName: string;\n}\n\nexport interface PersistBBLRequest {\n domainData: PlainObject;\n}\n\nexport interface SynchronizeRequest {\n ms: number;\n npid: number;\n url: string;\n persistBBL: (data: PlainObject) => Promise<void>;\n callback?: (domainData: PlainObject) => void;\n}\n\nasync function synchronizeBBL(request: SynchronizeRequest) {\n const { npid, url, persistBBL, ms, callback } = request;\n\n fetchBBLDictionary({\n npid,\n url,\n callback: data => {\n persistBBL({ transData: data });\n callback?.({ transData: data });\n },\n });\n setTimeout(() => synchronizeBBL(request), ms);\n}\n\nexport interface CreateCloudSettingOptions {\n projectName: string;\n}\n\n/** 创建于云配置交互的对象 */\nfunction createCloudSetting(options: CreateCloudSettingOptions) {\n const { projectName } = options;\n function createFetcher(key: 'used' | 'warn') {\n return <T>(value: T) =>\n fetch(`https://cloud-now.sheincorp.cn/api/options`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n appKey: 'e72abef04a9d3cf488ce0156',\n selfUpdate: true,\n uid: 'lcd',\n category: `i18n-${key}-key__${projectName}`,\n key: `i18n-${key}-key__${projectName}`,\n value: value,\n }),\n });\n }\n\n const missingFetch = createFetcher('warn');\n const usedFetch = createFetcher('used');\n\n const sendMissing = debounce((value: Set<any>) => {\n missingFetch(Array.from(value));\n value.clear();\n }, 5000);\n\n const sendUsed = debounce((value: Map<number, { id: number; qty: number }>) => {\n usedFetch(Array.from(value.values()).map(x => ({ ...x, qty: String(x.qty) })));\n value.clear();\n }, 5000);\n\n return {\n sendMissing,\n sendUsed,\n };\n}\n\nfunction transformLocale(locale) {\n return locale === 'EN' ? 'US' : locale;\n}\n\nexport interface TranslateOptions {\n uniqId?: string;\n keys: any[];\n locale?: string;\n}\n\nexport function translate({ uniqId = 'default', keys, locale: $locale }: TranslateOptions) {\n const peristKey = `${DEFAULT_STORAGE_KEY}/${uniqId.toUpperCase()}`;\n\n const data = translateStorage[peristKey] ?? {};\n\n const { transData, locale, fallback } = data;\n const [template, ..._params] = keys?.map(x => {\n if (React.isValidElement(x)) {\n return x;\n }\n return String(x);\n });\n\n /** 模板异常,直接返回空字符串 */\n if (!template) {\n return '';\n }\n\n /** 词典不存在,直接返回模板 */\n if (!transData) {\n return format(template, _params);\n }\n /** 词条元数据不存在,直接返回模板 */\n const textMeta = transData[template as never];\n\n if (!textMeta) {\n /** 缺失词条 */\n if (enableMissingReport) {\n missingSet.add(template);\n cloudSetting?.sendMissing?.(missingSet);\n }\n /** 缺失词条 */\n return format(template, _params);\n }\n\n const localeText = textMeta[$locale ?? locale] || textMeta[fallback];\n /** 如果对应的语种不存在,并且降级语种也不存在,那么直接返回模板 */\n if (!localeText) {\n return format(template, _params);\n }\n\n /** 词条使用量统计 */\n if (enableUsedReport) {\n const nid = textMeta.nid;\n if (usedMap.has(nid)) {\n usedMap.get(nid).qty += 1;\n } else {\n usedMap.set(nid, { id: nid, qty: 1 });\n }\n cloudSetting?.sendUsed?.(usedMap);\n }\n /** 词条使用量统计 */\n\n return format(localeText, _params);\n}\n\nexport function configurationBBL(options: ConfigurationBBLOptions) {\n const { npid, url, seconds, locale: loc, fallback, projectName, initialTransData } = options;\n if (!npid) {\n throw new Error('i18n: 缺少npid!');\n }\n\n enableMissingReport = options?.enableMissingReport ?? true;\n enableUsedReport = options?.enableUsedReport ?? false;\n const locale = transformLocale(loc);\n const peristKey = `${DEFAULT_STORAGE_KEY}/${(options.uniqId ?? 'default').toUpperCase()}`;\n translateStorage[peristKey] = {\n fallback,\n locale,\n projectName,\n transData: initialTransData,\n };\n cloudSetting = createCloudSetting({\n projectName: projectName,\n });\n\n /** 持久化bbl */\n async function persistBBL(domainData: PlainObject) {\n const data = {\n locale,\n fallback,\n projectName,\n ...domainData,\n };\n translateStorage[peristKey] = data;\n localforage.setItem(peristKey, data);\n }\n\n localforage.getItem(peristKey).then(x => {\n translateStorage[peristKey] = x;\n });\n\n const synchronize = async function(callback?: (domainData: PlainObject) => void) {\n synchronizeBBL({\n ms: (seconds ?? DEFAULT_LOOP_MS) * 1000,\n persistBBL,\n npid,\n url,\n callback,\n });\n };\n\n const getDictionary = () => translateStorage[peristKey]?.['transData'];\n\n const t = (...keys: any[]) => translate({ uniqId: options.uniqId, keys });\n\n return {\n t,\n getT: (locale: string) => {\n translateStorage[peristKey] && (translateStorage[peristKey].locale = locale);\n\n return (...keys: any[]) => translate({ uniqId: options.uniqId, keys, locale });\n },\n synchronize,\n getDictionary,\n };\n}\nexport const getStorage = (uniqId: string = 'default') => {\n const peristKey = `${DEFAULT_STORAGE_KEY}/${uniqId.toUpperCase()}`;\n return translateStorage[peristKey];\n};\n"],"mappings":"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"}
|
package/lib/string-format.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 格式化
|
|
3
|
-
* @param {string} template string format
|
|
4
|
-
* @param {...any} res input params
|
|
5
|
-
*/
|
|
6
|
-
declare const format: (template: any, _params: any) => any;
|
|
7
|
-
export { format };
|
|
1
|
+
/**
|
|
2
|
+
* 格式化
|
|
3
|
+
* @param {string} template string format
|
|
4
|
+
* @param {...any} res input params
|
|
5
|
+
*/
|
|
6
|
+
declare const format: (template: any, _params: any) => any;
|
|
7
|
+
export { format };
|
|
8
|
+
//# sourceMappingURL=string-format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string-format.d.ts","sourceRoot":"","sources":["../src/string-format.tsx"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,QAAA,MAAM,MAAM,sCAiEX,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
var SEP = '$.$';
|
|
3
|
+
/**
|
|
4
|
+
* 格式化
|
|
5
|
+
* @param {string} template string format
|
|
6
|
+
* @param {...any} res input params
|
|
7
|
+
*/
|
|
8
|
+
var format = (template, _params) => {
|
|
9
|
+
var args = _params;
|
|
10
|
+
var idx = 0;
|
|
11
|
+
var state = 'UNDEFINED';
|
|
12
|
+
var cache = [];
|
|
13
|
+
var s = template.replace(/([{}])\1|[{](.*?)[}]/g, (match, literal, _key) => {
|
|
14
|
+
if (literal != null) {
|
|
15
|
+
return literal;
|
|
16
|
+
}
|
|
17
|
+
var base = `{${_key}}`;
|
|
18
|
+
var key = _key;
|
|
19
|
+
if (key.length > 0) {
|
|
20
|
+
if (state === 'IMPLICIT') {
|
|
21
|
+
console.warn('cannot switch from implicit to explicit numbering');
|
|
22
|
+
return base;
|
|
23
|
+
}
|
|
24
|
+
state = 'EXPLICIT';
|
|
25
|
+
} else {
|
|
26
|
+
if (state === 'EXPLICIT') {
|
|
27
|
+
console.warn('cannot switch from explicit to implicit numbering');
|
|
28
|
+
return base;
|
|
29
|
+
}
|
|
30
|
+
state = 'IMPLICIT';
|
|
31
|
+
key = String(idx);
|
|
32
|
+
idx += 1;
|
|
33
|
+
}
|
|
34
|
+
var path = key.split('.');
|
|
35
|
+
// const value = (/^\d+$/.test(path[0]) ? path : ['0'].concat(path))
|
|
36
|
+
// .reduce((maybe, k) => maybe.reduce((_, x) => (x != null && k in Object(x) ? [typeof x[k] === 'function' ? x[k]() : x[k]] : []), []), [args])
|
|
37
|
+
// .reduce((_, x) => x, base);
|
|
38
|
+
var value = path.reduce((maybe, k) => maybe.reduce((_, x) => x != null && k in Object(x) ? [x[k]] : [], []), [args]).reduce((_, x) => x, base);
|
|
39
|
+
cache.push(value);
|
|
40
|
+
return SEP;
|
|
41
|
+
});
|
|
42
|
+
var hasElement = cache.some(n => /*#__PURE__*/React.isValidElement(n));
|
|
43
|
+
if (hasElement) {
|
|
44
|
+
var I18NComponent = function I18NComponent() {
|
|
45
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, s.split(SEP).map((x, i) => {
|
|
46
|
+
return /*#__PURE__*/React.createElement(React.Fragment, {
|
|
47
|
+
key: i
|
|
48
|
+
}, x, cache[i] && /*#__PURE__*/React.isValidElement(cache[i]) ? /*#__PURE__*/React.cloneElement(cache[i]) : cache[i]);
|
|
49
|
+
}));
|
|
50
|
+
};
|
|
51
|
+
return /*#__PURE__*/React.createElement(I18NComponent, null);
|
|
52
|
+
}
|
|
53
|
+
return s.split(SEP).map((x, i) => `${x}${cache[i] || ''}`).join('');
|
|
54
|
+
};
|
|
55
|
+
export { format };
|
|
56
|
+
//# sourceMappingURL=string-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string-format.js","names":["React","SEP","format","template","_params","args","idx","state","cache","s","replace","match","literal","_key","base","key","length","console","warn","String","path","split","value","reduce","maybe","k","_","x","Object","push","hasElement","some","n","isValidElement","I18NComponent","createElement","Fragment","map","i","cloneElement","join"],"sources":["../string-format.tsx"],"sourcesContent":["import React from 'react';\n\nconst SEP = '$.$';\n/**\n * 格式化\n * @param {string} template string format\n * @param {...any} res input params\n */\nconst format = (template, _params) => {\n const args = _params;\n let idx = 0;\n let state = 'UNDEFINED';\n let cache = [];\n\n const s = template.replace(/([{}])\\1|[{](.*?)[}]/g, (match, literal, _key) => {\n if (literal != null) {\n return literal;\n }\n const base = `{${_key}}`;\n\n let key = _key;\n if (key.length > 0) {\n if (state === 'IMPLICIT') {\n console.warn('cannot switch from implicit to explicit numbering');\n return base;\n }\n state = 'EXPLICIT';\n } else {\n if (state === 'EXPLICIT') {\n console.warn('cannot switch from explicit to implicit numbering');\n return base;\n }\n state = 'IMPLICIT';\n key = String(idx);\n idx += 1;\n }\n\n const path = key.split('.');\n // const value = (/^\\d+$/.test(path[0]) ? path : ['0'].concat(path))\n // .reduce((maybe, k) => maybe.reduce((_, x) => (x != null && k in Object(x) ? [typeof x[k] === 'function' ? x[k]() : x[k]] : []), []), [args])\n // .reduce((_, x) => x, base);\n const value = path\n .reduce((maybe, k) => maybe.reduce((_, x) => (x != null && k in Object(x) ? [x[k]] : []), []), [args])\n .reduce((_, x) => x, base);\n cache.push(value);\n return SEP;\n });\n\n const hasElement = cache.some(n => React.isValidElement(n));\n\n if (hasElement) {\n const I18NComponent = function() {\n return (\n <>\n {s.split(SEP).map((x, i) => {\n return (\n <React.Fragment key={i}>\n {x}\n {cache[i] && React.isValidElement(cache[i]) ? React.cloneElement(cache[i]) : cache[i]}\n </React.Fragment>\n );\n })}\n </>\n );\n };\n\n return <I18NComponent />;\n }\n\n return s\n .split(SEP)\n .map((x, i) => `${x}${cache[i] || ''}`)\n .join('');\n};\n\nexport { format };\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lcd-i18n-core",
|
|
3
|
-
"version": "9.0.0-alpha.
|
|
3
|
+
"version": "9.0.0-alpha.5",
|
|
4
4
|
"description": "> TODO: description",
|
|
5
5
|
"author": "10015448 <519495771@qq.com>",
|
|
6
6
|
"homepage": "",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"localforage": "^1.9.0",
|
|
22
22
|
"lodash.debounce": "^4.0.8",
|
|
23
23
|
"query-string": "^6.13.8",
|
|
24
|
-
"@vve/create-react-context": "9.0.0-alpha.
|
|
24
|
+
"@vve/create-react-context": "9.0.0-alpha.5"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
27
|
"react": ">=15",
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
},
|
|
40
40
|
"gitHead": "f34305f0d8a335e0953d3a5df8a32a8d5507a6f0",
|
|
41
41
|
"scripts": {
|
|
42
|
-
"build": "
|
|
43
|
-
"build:w": "
|
|
42
|
+
"build": "lecp",
|
|
43
|
+
"build:w": "lecp -w",
|
|
44
44
|
"test": "jest --runInBand",
|
|
45
45
|
"test:w": "jest --runInBand --watch"
|
|
46
46
|
}
|