@shuo-li/i18n 1.0.6 → 1.0.8
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/dist/{chunk-JPKSBSEO.cjs → chunk-2EV6FQIL.cjs} +14 -4
- package/dist/{chunk-X6D2MZ7M.js → chunk-5VHZCG34.js} +14 -4
- package/dist/index.cjs +47 -17
- package/dist/index.js +44 -14
- package/dist/mp/index.cjs +3 -3
- package/dist/mp/index.js +1 -1
- package/dist/native/index.cjs +3 -3
- package/dist/native/index.js +1 -1
- package/package.json +1 -1
|
@@ -231,6 +231,7 @@ var currentSig = null;
|
|
|
231
231
|
var currentPromise = null;
|
|
232
232
|
var resolvedStores = [];
|
|
233
233
|
var resolvedModules = [];
|
|
234
|
+
var resolvedStaticModules = [];
|
|
234
235
|
var resolvedLanguages = [];
|
|
235
236
|
var unloginPullStarted = false;
|
|
236
237
|
var managerOptions = null;
|
|
@@ -259,6 +260,7 @@ function closeSSE() {
|
|
|
259
260
|
loadedModules.clear();
|
|
260
261
|
loadingModules.clear();
|
|
261
262
|
unloginPullStarted = false;
|
|
263
|
+
resolvedStaticModules = [];
|
|
262
264
|
currentSig = null;
|
|
263
265
|
currentPromise = null;
|
|
264
266
|
}
|
|
@@ -334,11 +336,18 @@ async function _initI18n(options) {
|
|
|
334
336
|
resolvedStores = options.stores;
|
|
335
337
|
resolvedLanguages = _nullishCoalesce(options.languages, () => ( [options.langCode]));
|
|
336
338
|
resolvedModules = _nullishCoalesce(options.modules, () => ( []));
|
|
339
|
+
resolvedStaticModules = options.staticLocales ? [...new Set(
|
|
340
|
+
Object.values(options.staticLocales).flatMap((langModules) => Object.keys(langModules))
|
|
341
|
+
)] : [];
|
|
337
342
|
await storage.ensureStores(resolvedStores);
|
|
338
343
|
await checkCacheVersion(storage, options);
|
|
344
|
+
const allKnownModules = sortedModules();
|
|
339
345
|
for (const lang of resolvedLanguages) {
|
|
340
|
-
for (const m of
|
|
341
|
-
|
|
346
|
+
for (const m of allKnownModules) {
|
|
347
|
+
const data = getStaticLocale(m, lang);
|
|
348
|
+
if (Object.keys(data).length > 0) {
|
|
349
|
+
_i18next2.default.addResourceBundle(lang, m, data, true, false);
|
|
350
|
+
}
|
|
342
351
|
}
|
|
343
352
|
}
|
|
344
353
|
await injectCurrentLanguageModules(currentLang);
|
|
@@ -655,8 +664,9 @@ function buildSig(options) {
|
|
|
655
664
|
return [options.apiContext.baseURL, options.langCode, cgKeys].join("|");
|
|
656
665
|
}
|
|
657
666
|
function sortedModules() {
|
|
658
|
-
const
|
|
659
|
-
const
|
|
667
|
+
const all = [.../* @__PURE__ */ new Set([...resolvedStaticModules, ...resolvedModules])];
|
|
668
|
+
const priority = PRIORITY_MODULES.filter((m) => all.includes(m));
|
|
669
|
+
const rest = all.filter((m) => !PRIORITY_MODULES.includes(m));
|
|
660
670
|
return [...priority, ...rest];
|
|
661
671
|
}
|
|
662
672
|
function getStaticLocale(moduleCode, langCode) {
|
|
@@ -231,6 +231,7 @@ var currentSig = null;
|
|
|
231
231
|
var currentPromise = null;
|
|
232
232
|
var resolvedStores = [];
|
|
233
233
|
var resolvedModules = [];
|
|
234
|
+
var resolvedStaticModules = [];
|
|
234
235
|
var resolvedLanguages = [];
|
|
235
236
|
var unloginPullStarted = false;
|
|
236
237
|
var managerOptions = null;
|
|
@@ -259,6 +260,7 @@ function closeSSE() {
|
|
|
259
260
|
loadedModules.clear();
|
|
260
261
|
loadingModules.clear();
|
|
261
262
|
unloginPullStarted = false;
|
|
263
|
+
resolvedStaticModules = [];
|
|
262
264
|
currentSig = null;
|
|
263
265
|
currentPromise = null;
|
|
264
266
|
}
|
|
@@ -334,11 +336,18 @@ async function _initI18n(options) {
|
|
|
334
336
|
resolvedStores = options.stores;
|
|
335
337
|
resolvedLanguages = options.languages ?? [options.langCode];
|
|
336
338
|
resolvedModules = options.modules ?? [];
|
|
339
|
+
resolvedStaticModules = options.staticLocales ? [...new Set(
|
|
340
|
+
Object.values(options.staticLocales).flatMap((langModules) => Object.keys(langModules))
|
|
341
|
+
)] : [];
|
|
337
342
|
await storage.ensureStores(resolvedStores);
|
|
338
343
|
await checkCacheVersion(storage, options);
|
|
344
|
+
const allKnownModules = sortedModules();
|
|
339
345
|
for (const lang of resolvedLanguages) {
|
|
340
|
-
for (const m of
|
|
341
|
-
|
|
346
|
+
for (const m of allKnownModules) {
|
|
347
|
+
const data = getStaticLocale(m, lang);
|
|
348
|
+
if (Object.keys(data).length > 0) {
|
|
349
|
+
i18n.addResourceBundle(lang, m, data, true, false);
|
|
350
|
+
}
|
|
342
351
|
}
|
|
343
352
|
}
|
|
344
353
|
await injectCurrentLanguageModules(currentLang);
|
|
@@ -655,8 +664,9 @@ function buildSig(options) {
|
|
|
655
664
|
return [options.apiContext.baseURL, options.langCode, cgKeys].join("|");
|
|
656
665
|
}
|
|
657
666
|
function sortedModules() {
|
|
658
|
-
const
|
|
659
|
-
const
|
|
667
|
+
const all = [.../* @__PURE__ */ new Set([...resolvedStaticModules, ...resolvedModules])];
|
|
668
|
+
const priority = PRIORITY_MODULES.filter((m) => all.includes(m));
|
|
669
|
+
const rest = all.filter((m) => !PRIORITY_MODULES.includes(m));
|
|
660
670
|
return [...priority, ...rest];
|
|
661
671
|
}
|
|
662
672
|
function getStaticLocale(moduleCode, langCode) {
|
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
@@ -7,7 +7,7 @@ var _chunkAJJKJPNBcjs = require('./chunk-AJJKJPNB.cjs');
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _chunk2EV6FQILcjs = require('./chunk-2EV6FQIL.cjs');
|
|
11
11
|
|
|
12
12
|
// src/index.ts
|
|
13
13
|
var _i18next = require('i18next'); var _i18next2 = _interopRequireDefault(_i18next);
|
|
@@ -15,17 +15,17 @@ var _reacti18next = require('react-i18next');
|
|
|
15
15
|
|
|
16
16
|
// src/storage/indexeddb.ts
|
|
17
17
|
var DB_NAME = "i18n_cache";
|
|
18
|
-
var SCHEMA_VERSION = 2;
|
|
19
18
|
function resourceStoreName(name) {
|
|
20
19
|
return `i18n_resources_${name}`;
|
|
21
20
|
}
|
|
22
21
|
var dbInstance = null;
|
|
23
22
|
var dbOpenPromise = null;
|
|
24
23
|
var dbStoreNames = [];
|
|
25
|
-
function openDB(storeNames) {
|
|
24
|
+
function openDB(storeNames, version) {
|
|
26
25
|
return new Promise((resolve, reject) => {
|
|
27
|
-
const
|
|
28
|
-
|
|
26
|
+
const req = version !== void 0 ? indexedDB.open(DB_NAME, version) : indexedDB.open(DB_NAME);
|
|
27
|
+
req.onupgradeneeded = (event) => {
|
|
28
|
+
if (version === void 0) return;
|
|
29
29
|
const db = event.target.result;
|
|
30
30
|
for (const name of storeNames) {
|
|
31
31
|
const storeName = resourceStoreName(name);
|
|
@@ -36,8 +36,8 @@ function openDB(storeNames) {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
|
-
|
|
40
|
-
const db =
|
|
39
|
+
req.onsuccess = () => {
|
|
40
|
+
const db = req.result;
|
|
41
41
|
db.onversionchange = () => {
|
|
42
42
|
db.close();
|
|
43
43
|
dbInstance = null;
|
|
@@ -47,16 +47,23 @@ function openDB(storeNames) {
|
|
|
47
47
|
dbInstance = null;
|
|
48
48
|
dbOpenPromise = null;
|
|
49
49
|
};
|
|
50
|
-
|
|
50
|
+
const missing = storeNames.filter((n) => !db.objectStoreNames.contains(resourceStoreName(n)));
|
|
51
|
+
if (missing.length === 0 || version !== void 0) {
|
|
52
|
+
resolve(db);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const nextVersion = db.version + 1;
|
|
56
|
+
db.close();
|
|
57
|
+
openDB(storeNames, nextVersion).then(resolve).catch(reject);
|
|
51
58
|
};
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
req.onerror = () => reject(req.error);
|
|
60
|
+
req.onblocked = () => reject(new Error("[i18n] IndexedDB open blocked"));
|
|
54
61
|
});
|
|
55
62
|
}
|
|
56
|
-
function getDB(
|
|
63
|
+
function getDB() {
|
|
57
64
|
if (dbInstance) return Promise.resolve(dbInstance);
|
|
58
65
|
if (!dbOpenPromise) {
|
|
59
|
-
dbOpenPromise = openDB(
|
|
66
|
+
dbOpenPromise = openDB(dbStoreNames).then((db) => {
|
|
60
67
|
dbInstance = db;
|
|
61
68
|
dbOpenPromise = null;
|
|
62
69
|
return db;
|
|
@@ -83,8 +90,31 @@ async function withRetry(fn) {
|
|
|
83
90
|
}
|
|
84
91
|
var IndexedDBAdapter = class {
|
|
85
92
|
async ensureStores(stores) {
|
|
86
|
-
|
|
87
|
-
|
|
93
|
+
const storeNames = stores.map((s) => s.name);
|
|
94
|
+
dbStoreNames = storeNames;
|
|
95
|
+
if (dbInstance) {
|
|
96
|
+
const allExist = storeNames.every(
|
|
97
|
+
(n) => dbInstance.objectStoreNames.contains(resourceStoreName(n))
|
|
98
|
+
);
|
|
99
|
+
if (allExist) return;
|
|
100
|
+
const nextVersion = dbInstance.version + 1;
|
|
101
|
+
dbInstance.close();
|
|
102
|
+
dbInstance = null;
|
|
103
|
+
dbOpenPromise = null;
|
|
104
|
+
dbInstance = await openDB(storeNames, nextVersion);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (!dbOpenPromise) {
|
|
108
|
+
dbOpenPromise = openDB(storeNames).then((db) => {
|
|
109
|
+
dbInstance = db;
|
|
110
|
+
dbOpenPromise = null;
|
|
111
|
+
return db;
|
|
112
|
+
}).catch((err) => {
|
|
113
|
+
dbOpenPromise = null;
|
|
114
|
+
throw err;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
await dbOpenPromise;
|
|
88
118
|
}
|
|
89
119
|
async getRecord(storeName, key) {
|
|
90
120
|
return withRetry(async () => {
|
|
@@ -165,7 +195,7 @@ if (!_i18next2.default.isInitialized) {
|
|
|
165
195
|
}
|
|
166
196
|
});
|
|
167
197
|
}
|
|
168
|
-
var { initI18n, closeSSE, ensureModules, getResource, getAllRecordsByModule } =
|
|
198
|
+
var { initI18n, closeSSE, ensureModules, getResource, getAllRecordsByModule } = _chunk2EV6FQILcjs.createI18nManager.call(void 0, {
|
|
169
199
|
storage: new IndexedDBAdapter(),
|
|
170
200
|
createWorker: () => new (0, _chunkAJJKJPNBcjs.WebWorkerAdapter)(
|
|
171
201
|
new Worker(new URL("./workers/preload-worker.js", import.meta.url), { type: "module" })
|
|
@@ -181,4 +211,4 @@ var { initI18n, closeSSE, ensureModules, getResource, getAllRecordsByModule } =
|
|
|
181
211
|
|
|
182
212
|
|
|
183
213
|
|
|
184
|
-
exports.I18N_RESOURCES_UPDATED_EVENT =
|
|
214
|
+
exports.I18N_RESOURCES_UPDATED_EVENT = _chunk2EV6FQILcjs.I18N_RESOURCES_UPDATED_EVENT; exports.closeSSE = closeSSE; exports.emitI18nResourcesUpdated = _chunk2EV6FQILcjs.emitI18nResourcesUpdated; exports.ensureModules = ensureModules; exports.getAllRecordsByModule = getAllRecordsByModule; exports.getResource = getResource; exports.initI18n = initI18n; exports.useDict = _chunkAJJKJPNBcjs.useDict; exports.useTranslation = _chunkAJJKJPNBcjs.useTranslation;
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
I18N_RESOURCES_UPDATED_EVENT,
|
|
8
8
|
createI18nManager,
|
|
9
9
|
emitI18nResourcesUpdated
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-5VHZCG34.js";
|
|
11
11
|
|
|
12
12
|
// src/index.ts
|
|
13
13
|
import i18n from "i18next";
|
|
@@ -15,17 +15,17 @@ import { initReactI18next } from "react-i18next";
|
|
|
15
15
|
|
|
16
16
|
// src/storage/indexeddb.ts
|
|
17
17
|
var DB_NAME = "i18n_cache";
|
|
18
|
-
var SCHEMA_VERSION = 2;
|
|
19
18
|
function resourceStoreName(name) {
|
|
20
19
|
return `i18n_resources_${name}`;
|
|
21
20
|
}
|
|
22
21
|
var dbInstance = null;
|
|
23
22
|
var dbOpenPromise = null;
|
|
24
23
|
var dbStoreNames = [];
|
|
25
|
-
function openDB(storeNames) {
|
|
24
|
+
function openDB(storeNames, version) {
|
|
26
25
|
return new Promise((resolve, reject) => {
|
|
27
|
-
const
|
|
28
|
-
|
|
26
|
+
const req = version !== void 0 ? indexedDB.open(DB_NAME, version) : indexedDB.open(DB_NAME);
|
|
27
|
+
req.onupgradeneeded = (event) => {
|
|
28
|
+
if (version === void 0) return;
|
|
29
29
|
const db = event.target.result;
|
|
30
30
|
for (const name of storeNames) {
|
|
31
31
|
const storeName = resourceStoreName(name);
|
|
@@ -36,8 +36,8 @@ function openDB(storeNames) {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
|
-
|
|
40
|
-
const db =
|
|
39
|
+
req.onsuccess = () => {
|
|
40
|
+
const db = req.result;
|
|
41
41
|
db.onversionchange = () => {
|
|
42
42
|
db.close();
|
|
43
43
|
dbInstance = null;
|
|
@@ -47,16 +47,23 @@ function openDB(storeNames) {
|
|
|
47
47
|
dbInstance = null;
|
|
48
48
|
dbOpenPromise = null;
|
|
49
49
|
};
|
|
50
|
-
|
|
50
|
+
const missing = storeNames.filter((n) => !db.objectStoreNames.contains(resourceStoreName(n)));
|
|
51
|
+
if (missing.length === 0 || version !== void 0) {
|
|
52
|
+
resolve(db);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const nextVersion = db.version + 1;
|
|
56
|
+
db.close();
|
|
57
|
+
openDB(storeNames, nextVersion).then(resolve).catch(reject);
|
|
51
58
|
};
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
req.onerror = () => reject(req.error);
|
|
60
|
+
req.onblocked = () => reject(new Error("[i18n] IndexedDB open blocked"));
|
|
54
61
|
});
|
|
55
62
|
}
|
|
56
|
-
function getDB(
|
|
63
|
+
function getDB() {
|
|
57
64
|
if (dbInstance) return Promise.resolve(dbInstance);
|
|
58
65
|
if (!dbOpenPromise) {
|
|
59
|
-
dbOpenPromise = openDB(
|
|
66
|
+
dbOpenPromise = openDB(dbStoreNames).then((db) => {
|
|
60
67
|
dbInstance = db;
|
|
61
68
|
dbOpenPromise = null;
|
|
62
69
|
return db;
|
|
@@ -83,8 +90,31 @@ async function withRetry(fn) {
|
|
|
83
90
|
}
|
|
84
91
|
var IndexedDBAdapter = class {
|
|
85
92
|
async ensureStores(stores) {
|
|
86
|
-
|
|
87
|
-
|
|
93
|
+
const storeNames = stores.map((s) => s.name);
|
|
94
|
+
dbStoreNames = storeNames;
|
|
95
|
+
if (dbInstance) {
|
|
96
|
+
const allExist = storeNames.every(
|
|
97
|
+
(n) => dbInstance.objectStoreNames.contains(resourceStoreName(n))
|
|
98
|
+
);
|
|
99
|
+
if (allExist) return;
|
|
100
|
+
const nextVersion = dbInstance.version + 1;
|
|
101
|
+
dbInstance.close();
|
|
102
|
+
dbInstance = null;
|
|
103
|
+
dbOpenPromise = null;
|
|
104
|
+
dbInstance = await openDB(storeNames, nextVersion);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (!dbOpenPromise) {
|
|
108
|
+
dbOpenPromise = openDB(storeNames).then((db) => {
|
|
109
|
+
dbInstance = db;
|
|
110
|
+
dbOpenPromise = null;
|
|
111
|
+
return db;
|
|
112
|
+
}).catch((err) => {
|
|
113
|
+
dbOpenPromise = null;
|
|
114
|
+
throw err;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
await dbOpenPromise;
|
|
88
118
|
}
|
|
89
119
|
async getRecord(storeName, key) {
|
|
90
120
|
return withRetry(async () => {
|
package/dist/mp/index.cjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var _chunk2EV6FQILcjs = require('../chunk-2EV6FQIL.cjs');
|
|
6
6
|
|
|
7
7
|
// src/storage/wx-sqlite.ts
|
|
8
8
|
var DB_NAME = "i18n_cache";
|
|
@@ -181,7 +181,7 @@ function wxFetch(input, init) {
|
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
// src/mp/index.ts
|
|
184
|
-
var { initI18n, closeSSE, ensureModules, getResource, getAllRecordsByModule } =
|
|
184
|
+
var { initI18n, closeSSE, ensureModules, getResource, getAllRecordsByModule } = _chunk2EV6FQILcjs.createI18nManager.call(void 0, {
|
|
185
185
|
storage: new WxSQLiteAdapter(),
|
|
186
186
|
createWorker: () => new WxWorkerAdapter(wx.createWorker("workers/preload-worker-mp.js")),
|
|
187
187
|
fetchFn: wxFetch
|
|
@@ -194,4 +194,4 @@ var { initI18n, closeSSE, ensureModules, getResource, getAllRecordsByModule } =
|
|
|
194
194
|
|
|
195
195
|
|
|
196
196
|
|
|
197
|
-
exports.I18N_RESOURCES_UPDATED_EVENT =
|
|
197
|
+
exports.I18N_RESOURCES_UPDATED_EVENT = _chunk2EV6FQILcjs.I18N_RESOURCES_UPDATED_EVENT; exports.closeSSE = closeSSE; exports.emitI18nResourcesUpdated = _chunk2EV6FQILcjs.emitI18nResourcesUpdated; exports.ensureModules = ensureModules; exports.getAllRecordsByModule = getAllRecordsByModule; exports.getResource = getResource; exports.initI18n = initI18n;
|
package/dist/mp/index.js
CHANGED
package/dist/native/index.cjs
CHANGED
|
@@ -7,7 +7,7 @@ var _chunkAJJKJPNBcjs = require('../chunk-AJJKJPNB.cjs');
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _chunk2EV6FQILcjs = require('../chunk-2EV6FQIL.cjs');
|
|
11
11
|
|
|
12
12
|
// src/native/index.ts
|
|
13
13
|
var _i18next = require('i18next'); var _i18next2 = _interopRequireDefault(_i18next);
|
|
@@ -121,7 +121,7 @@ if (!_i18next2.default.isInitialized) {
|
|
|
121
121
|
}
|
|
122
122
|
});
|
|
123
123
|
}
|
|
124
|
-
var { initI18n, closeSSE, ensureModules, getResource, getAllRecordsByModule } =
|
|
124
|
+
var { initI18n, closeSSE, ensureModules, getResource, getAllRecordsByModule } = _chunk2EV6FQILcjs.createI18nManager.call(void 0, {
|
|
125
125
|
storage: new SQLiteAdapter(),
|
|
126
126
|
// Hermes Worker(RN 0.71+),API 与 Web Worker 一致
|
|
127
127
|
createWorker: () => new (0, _chunkAJJKJPNBcjs.WebWorkerAdapter)(
|
|
@@ -138,4 +138,4 @@ var { initI18n, closeSSE, ensureModules, getResource, getAllRecordsByModule } =
|
|
|
138
138
|
|
|
139
139
|
|
|
140
140
|
|
|
141
|
-
exports.I18N_RESOURCES_UPDATED_EVENT =
|
|
141
|
+
exports.I18N_RESOURCES_UPDATED_EVENT = _chunk2EV6FQILcjs.I18N_RESOURCES_UPDATED_EVENT; exports.closeSSE = closeSSE; exports.emitI18nResourcesUpdated = _chunk2EV6FQILcjs.emitI18nResourcesUpdated; exports.ensureModules = ensureModules; exports.getAllRecordsByModule = getAllRecordsByModule; exports.getResource = getResource; exports.initI18n = initI18n; exports.useDict = _chunkAJJKJPNBcjs.useDict; exports.useTranslation = _chunkAJJKJPNBcjs.useTranslation;
|
package/dist/native/index.js
CHANGED