@shuo-li/i18n 1.0.0

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.
@@ -0,0 +1,231 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+
4
+
5
+ var _chunkJDOLFHBScjs = require('../chunk-JDOLFHBS.cjs');
6
+
7
+ // src/storage/wx-sqlite.ts
8
+ var DB_NAME = "i18n_cache";
9
+ var SCHEMA_VERSION = 2;
10
+ function resourceTable(name) {
11
+ return `i18n_resources_${name}`;
12
+ }
13
+ var dbInstance = null;
14
+ function getDB() {
15
+ if (dbInstance) return Promise.resolve(dbInstance);
16
+ return new Promise((resolve, reject) => {
17
+ const db = wx.openDatabase({
18
+ name: DB_NAME,
19
+ success: () => {
20
+ dbInstance = db;
21
+ resolve(db);
22
+ },
23
+ fail: (err) => reject(new Error(`[i18n] wx.openDatabase failed: ${JSON.stringify(err)}`))
24
+ });
25
+ });
26
+ }
27
+ function exec(db, sql, args = []) {
28
+ return new Promise((resolve, reject) => {
29
+ db.transaction((tx) => {
30
+ tx.executeSql(
31
+ sql,
32
+ args,
33
+ (_tx, result) => resolve(result),
34
+ (_tx, err) => {
35
+ reject(err);
36
+ return true;
37
+ }
38
+ );
39
+ });
40
+ });
41
+ }
42
+ var WxSQLiteAdapter = class {
43
+ async ensureSchemaVersion(stores) {
44
+ const db = await getDB();
45
+ await exec(db, `
46
+ CREATE TABLE IF NOT EXISTS i18n_meta (
47
+ key TEXT PRIMARY KEY,
48
+ value TEXT NOT NULL
49
+ )
50
+ `);
51
+ const stored = await this.getMeta("schema_version");
52
+ const storedVersion = Number(_nullishCoalesce(stored, () => ( 0)));
53
+ if (storedVersion === 0) {
54
+ await this.createTables(stores);
55
+ await this.setMeta("schema_version", String(SCHEMA_VERSION));
56
+ } else if (storedVersion < SCHEMA_VERSION) {
57
+ for (const store of stores) {
58
+ await exec(db, `DROP TABLE IF EXISTS ${resourceTable(store.name)}`);
59
+ }
60
+ await this.createTables(stores);
61
+ await this.setMeta("schema_version", String(SCHEMA_VERSION));
62
+ } else if (storedVersion > SCHEMA_VERSION) {
63
+ throw new Error(`[i18n] wx.openDatabase schema version ${storedVersion} > current ${SCHEMA_VERSION}`);
64
+ }
65
+ }
66
+ async createTables(stores) {
67
+ const db = await getDB();
68
+ for (const store of stores) {
69
+ const table = resourceTable(store.name);
70
+ await exec(db, `
71
+ CREATE TABLE IF NOT EXISTS ${table} (
72
+ key TEXT PRIMARY KEY,
73
+ module_code TEXT NOT NULL,
74
+ lang_code TEXT NOT NULL,
75
+ version INTEGER NOT NULL DEFAULT 0,
76
+ resources TEXT NOT NULL
77
+ )
78
+ `);
79
+ await exec(
80
+ db,
81
+ `CREATE INDEX IF NOT EXISTS idx_${store.name}_module ON ${table}(module_code)`
82
+ );
83
+ await exec(
84
+ db,
85
+ `CREATE INDEX IF NOT EXISTS idx_${store.name}_language ON ${table}(lang_code)`
86
+ );
87
+ }
88
+ }
89
+ async getRecord(storeName, key) {
90
+ const db = await getDB();
91
+ const result = await exec(
92
+ db,
93
+ `SELECT * FROM ${resourceTable(storeName)} WHERE key = ?`,
94
+ [key]
95
+ );
96
+ if (result.rows.length === 0) return void 0;
97
+ return rowToRecord(result.rows.item(0));
98
+ }
99
+ async putRecord(storeName, record) {
100
+ const db = await getDB();
101
+ await exec(
102
+ db,
103
+ `INSERT OR REPLACE INTO ${resourceTable(storeName)}
104
+ (key, module_code, lang_code, version, resources)
105
+ VALUES (?, ?, ?, ?, ?)`,
106
+ [
107
+ record.key,
108
+ record.moduleCode,
109
+ record.langCode,
110
+ record.version,
111
+ JSON.stringify(record.resources)
112
+ ]
113
+ );
114
+ }
115
+ async getAllByModule(storeName, moduleCode) {
116
+ const db = await getDB();
117
+ const result = await exec(
118
+ db,
119
+ `SELECT * FROM ${resourceTable(storeName)} WHERE module_code = ?`,
120
+ [moduleCode]
121
+ );
122
+ const records = [];
123
+ for (let i = 0; i < result.rows.length; i++) {
124
+ records.push(rowToRecord(result.rows.item(i)));
125
+ }
126
+ return records;
127
+ }
128
+ async clearStore(storeName) {
129
+ const db = await getDB();
130
+ await exec(db, `DELETE FROM ${resourceTable(storeName)}`);
131
+ }
132
+ async getMeta(key) {
133
+ const db = await getDB();
134
+ const result = await exec(db, "SELECT value FROM i18n_meta WHERE key = ?", [key]);
135
+ if (result.rows.length === 0) return null;
136
+ return result.rows.item(0).value;
137
+ }
138
+ async setMeta(key, value) {
139
+ const db = await getDB();
140
+ await exec(db, "INSERT OR REPLACE INTO i18n_meta (key, value) VALUES (?, ?)", [key, value]);
141
+ }
142
+ async hasLoginResources(stores) {
143
+ const db = await getDB();
144
+ for (const store of stores) {
145
+ const result = await exec(
146
+ db,
147
+ `SELECT key FROM ${resourceTable(store.name)}
148
+ WHERE key NOT LIKE 'UNLOGIN_%' LIMIT 1`
149
+ );
150
+ if (result.rows.length > 0) return true;
151
+ }
152
+ return false;
153
+ }
154
+ };
155
+ function rowToRecord(row) {
156
+ return {
157
+ key: row.key,
158
+ moduleCode: row.module_code,
159
+ langCode: row.lang_code,
160
+ version: row.version,
161
+ resources: JSON.parse(row.resources)
162
+ };
163
+ }
164
+
165
+ // src/adapters/wx-worker-adapter.ts
166
+ var WxWorkerAdapter = class {
167
+ constructor(worker) {
168
+ this.worker = worker;
169
+ }
170
+ postMessage(data) {
171
+ this.worker.postMessage(data);
172
+ }
173
+ onMessage(handler) {
174
+ this.worker.onMessage((res) => handler(res));
175
+ }
176
+ terminate() {
177
+ this.worker.terminate();
178
+ }
179
+ };
180
+
181
+ // src/polyfills/wx-fetch.ts
182
+ function toPlainHeaders(h) {
183
+ if (!h) return {};
184
+ if (h instanceof Headers) {
185
+ const r = {};
186
+ h.forEach((v, k) => {
187
+ r[k] = v;
188
+ });
189
+ return r;
190
+ }
191
+ if (Array.isArray(h)) return Object.fromEntries(h);
192
+ return h;
193
+ }
194
+ function wxFetch(input, init) {
195
+ return new Promise((resolve, reject) => {
196
+ const body = _optionalChain([init, 'optionalAccess', _ => _.body]) ? JSON.parse(String(init.body)) : void 0;
197
+ wx.request({
198
+ url: input,
199
+ method: _nullishCoalesce(_optionalChain([init, 'optionalAccess', _2 => _2.method]), () => ( "GET")),
200
+ header: toPlainHeaders(_optionalChain([init, 'optionalAccess', _3 => _3.headers])),
201
+ data: body,
202
+ success: (res) => {
203
+ resolve(
204
+ new Response(JSON.stringify(res.data), {
205
+ status: res.statusCode,
206
+ headers: res.header
207
+ })
208
+ );
209
+ },
210
+ fail: (err) => {
211
+ reject(new Error(err.errMsg));
212
+ }
213
+ });
214
+ });
215
+ }
216
+
217
+ // src/mp/index.ts
218
+ var { initI18n, closeSSE, ensureModules, getResource, getAllRecordsByModule } = _chunkJDOLFHBScjs.createI18nManager.call(void 0, {
219
+ storage: new WxSQLiteAdapter(),
220
+ createWorker: () => new WxWorkerAdapter(wx.createWorker("workers/preload-worker-mp.js")),
221
+ fetchFn: wxFetch
222
+ });
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+
231
+ exports.I18N_RESOURCES_UPDATED_EVENT = _chunkJDOLFHBScjs.I18N_RESOURCES_UPDATED_EVENT; exports.closeSSE = closeSSE; exports.emitI18nResourcesUpdated = _chunkJDOLFHBScjs.emitI18nResourcesUpdated; exports.ensureModules = ensureModules; exports.getAllRecordsByModule = getAllRecordsByModule; exports.getResource = getResource; exports.initI18n = initI18n;
@@ -0,0 +1,10 @@
1
+ import { c as closeSSE$1, e as ensureModules$1, g as getAllRecordsByModule$1, a as getResource$1, i as initI18n$1 } from '../cacheEvents-kOPDM3Ed.cjs';
2
+ export { I as I18N_RESOURCES_UPDATED_EVENT, b as I18nInitOptions, P as PullLangBlock, R as ResourceRecord, S as SSEMessage, d as StandardPullParams, f as StoreConfig, h as emitI18nResourcesUpdated } from '../cacheEvents-kOPDM3Ed.cjs';
3
+
4
+ declare const initI18n: typeof initI18n$1;
5
+ declare const closeSSE: typeof closeSSE$1;
6
+ declare const ensureModules: typeof ensureModules$1;
7
+ declare const getResource: typeof getResource$1;
8
+ declare const getAllRecordsByModule: typeof getAllRecordsByModule$1;
9
+
10
+ export { closeSSE, ensureModules, getAllRecordsByModule, getResource, initI18n };
@@ -0,0 +1,10 @@
1
+ import { c as closeSSE$1, e as ensureModules$1, g as getAllRecordsByModule$1, a as getResource$1, i as initI18n$1 } from '../cacheEvents-kOPDM3Ed.js';
2
+ export { I as I18N_RESOURCES_UPDATED_EVENT, b as I18nInitOptions, P as PullLangBlock, R as ResourceRecord, S as SSEMessage, d as StandardPullParams, f as StoreConfig, h as emitI18nResourcesUpdated } from '../cacheEvents-kOPDM3Ed.js';
3
+
4
+ declare const initI18n: typeof initI18n$1;
5
+ declare const closeSSE: typeof closeSSE$1;
6
+ declare const ensureModules: typeof ensureModules$1;
7
+ declare const getResource: typeof getResource$1;
8
+ declare const getAllRecordsByModule: typeof getAllRecordsByModule$1;
9
+
10
+ export { closeSSE, ensureModules, getAllRecordsByModule, getResource, initI18n };
@@ -0,0 +1,231 @@
1
+ import {
2
+ I18N_RESOURCES_UPDATED_EVENT,
3
+ createI18nManager,
4
+ emitI18nResourcesUpdated
5
+ } from "../chunk-ONDHZEK4.js";
6
+
7
+ // src/storage/wx-sqlite.ts
8
+ var DB_NAME = "i18n_cache";
9
+ var SCHEMA_VERSION = 2;
10
+ function resourceTable(name) {
11
+ return `i18n_resources_${name}`;
12
+ }
13
+ var dbInstance = null;
14
+ function getDB() {
15
+ if (dbInstance) return Promise.resolve(dbInstance);
16
+ return new Promise((resolve, reject) => {
17
+ const db = wx.openDatabase({
18
+ name: DB_NAME,
19
+ success: () => {
20
+ dbInstance = db;
21
+ resolve(db);
22
+ },
23
+ fail: (err) => reject(new Error(`[i18n] wx.openDatabase failed: ${JSON.stringify(err)}`))
24
+ });
25
+ });
26
+ }
27
+ function exec(db, sql, args = []) {
28
+ return new Promise((resolve, reject) => {
29
+ db.transaction((tx) => {
30
+ tx.executeSql(
31
+ sql,
32
+ args,
33
+ (_tx, result) => resolve(result),
34
+ (_tx, err) => {
35
+ reject(err);
36
+ return true;
37
+ }
38
+ );
39
+ });
40
+ });
41
+ }
42
+ var WxSQLiteAdapter = class {
43
+ async ensureSchemaVersion(stores) {
44
+ const db = await getDB();
45
+ await exec(db, `
46
+ CREATE TABLE IF NOT EXISTS i18n_meta (
47
+ key TEXT PRIMARY KEY,
48
+ value TEXT NOT NULL
49
+ )
50
+ `);
51
+ const stored = await this.getMeta("schema_version");
52
+ const storedVersion = Number(stored ?? 0);
53
+ if (storedVersion === 0) {
54
+ await this.createTables(stores);
55
+ await this.setMeta("schema_version", String(SCHEMA_VERSION));
56
+ } else if (storedVersion < SCHEMA_VERSION) {
57
+ for (const store of stores) {
58
+ await exec(db, `DROP TABLE IF EXISTS ${resourceTable(store.name)}`);
59
+ }
60
+ await this.createTables(stores);
61
+ await this.setMeta("schema_version", String(SCHEMA_VERSION));
62
+ } else if (storedVersion > SCHEMA_VERSION) {
63
+ throw new Error(`[i18n] wx.openDatabase schema version ${storedVersion} > current ${SCHEMA_VERSION}`);
64
+ }
65
+ }
66
+ async createTables(stores) {
67
+ const db = await getDB();
68
+ for (const store of stores) {
69
+ const table = resourceTable(store.name);
70
+ await exec(db, `
71
+ CREATE TABLE IF NOT EXISTS ${table} (
72
+ key TEXT PRIMARY KEY,
73
+ module_code TEXT NOT NULL,
74
+ lang_code TEXT NOT NULL,
75
+ version INTEGER NOT NULL DEFAULT 0,
76
+ resources TEXT NOT NULL
77
+ )
78
+ `);
79
+ await exec(
80
+ db,
81
+ `CREATE INDEX IF NOT EXISTS idx_${store.name}_module ON ${table}(module_code)`
82
+ );
83
+ await exec(
84
+ db,
85
+ `CREATE INDEX IF NOT EXISTS idx_${store.name}_language ON ${table}(lang_code)`
86
+ );
87
+ }
88
+ }
89
+ async getRecord(storeName, key) {
90
+ const db = await getDB();
91
+ const result = await exec(
92
+ db,
93
+ `SELECT * FROM ${resourceTable(storeName)} WHERE key = ?`,
94
+ [key]
95
+ );
96
+ if (result.rows.length === 0) return void 0;
97
+ return rowToRecord(result.rows.item(0));
98
+ }
99
+ async putRecord(storeName, record) {
100
+ const db = await getDB();
101
+ await exec(
102
+ db,
103
+ `INSERT OR REPLACE INTO ${resourceTable(storeName)}
104
+ (key, module_code, lang_code, version, resources)
105
+ VALUES (?, ?, ?, ?, ?)`,
106
+ [
107
+ record.key,
108
+ record.moduleCode,
109
+ record.langCode,
110
+ record.version,
111
+ JSON.stringify(record.resources)
112
+ ]
113
+ );
114
+ }
115
+ async getAllByModule(storeName, moduleCode) {
116
+ const db = await getDB();
117
+ const result = await exec(
118
+ db,
119
+ `SELECT * FROM ${resourceTable(storeName)} WHERE module_code = ?`,
120
+ [moduleCode]
121
+ );
122
+ const records = [];
123
+ for (let i = 0; i < result.rows.length; i++) {
124
+ records.push(rowToRecord(result.rows.item(i)));
125
+ }
126
+ return records;
127
+ }
128
+ async clearStore(storeName) {
129
+ const db = await getDB();
130
+ await exec(db, `DELETE FROM ${resourceTable(storeName)}`);
131
+ }
132
+ async getMeta(key) {
133
+ const db = await getDB();
134
+ const result = await exec(db, "SELECT value FROM i18n_meta WHERE key = ?", [key]);
135
+ if (result.rows.length === 0) return null;
136
+ return result.rows.item(0).value;
137
+ }
138
+ async setMeta(key, value) {
139
+ const db = await getDB();
140
+ await exec(db, "INSERT OR REPLACE INTO i18n_meta (key, value) VALUES (?, ?)", [key, value]);
141
+ }
142
+ async hasLoginResources(stores) {
143
+ const db = await getDB();
144
+ for (const store of stores) {
145
+ const result = await exec(
146
+ db,
147
+ `SELECT key FROM ${resourceTable(store.name)}
148
+ WHERE key NOT LIKE 'UNLOGIN_%' LIMIT 1`
149
+ );
150
+ if (result.rows.length > 0) return true;
151
+ }
152
+ return false;
153
+ }
154
+ };
155
+ function rowToRecord(row) {
156
+ return {
157
+ key: row.key,
158
+ moduleCode: row.module_code,
159
+ langCode: row.lang_code,
160
+ version: row.version,
161
+ resources: JSON.parse(row.resources)
162
+ };
163
+ }
164
+
165
+ // src/adapters/wx-worker-adapter.ts
166
+ var WxWorkerAdapter = class {
167
+ constructor(worker) {
168
+ this.worker = worker;
169
+ }
170
+ postMessage(data) {
171
+ this.worker.postMessage(data);
172
+ }
173
+ onMessage(handler) {
174
+ this.worker.onMessage((res) => handler(res));
175
+ }
176
+ terminate() {
177
+ this.worker.terminate();
178
+ }
179
+ };
180
+
181
+ // src/polyfills/wx-fetch.ts
182
+ function toPlainHeaders(h) {
183
+ if (!h) return {};
184
+ if (h instanceof Headers) {
185
+ const r = {};
186
+ h.forEach((v, k) => {
187
+ r[k] = v;
188
+ });
189
+ return r;
190
+ }
191
+ if (Array.isArray(h)) return Object.fromEntries(h);
192
+ return h;
193
+ }
194
+ function wxFetch(input, init) {
195
+ return new Promise((resolve, reject) => {
196
+ const body = init?.body ? JSON.parse(String(init.body)) : void 0;
197
+ wx.request({
198
+ url: input,
199
+ method: init?.method ?? "GET",
200
+ header: toPlainHeaders(init?.headers),
201
+ data: body,
202
+ success: (res) => {
203
+ resolve(
204
+ new Response(JSON.stringify(res.data), {
205
+ status: res.statusCode,
206
+ headers: res.header
207
+ })
208
+ );
209
+ },
210
+ fail: (err) => {
211
+ reject(new Error(err.errMsg));
212
+ }
213
+ });
214
+ });
215
+ }
216
+
217
+ // src/mp/index.ts
218
+ var { initI18n, closeSSE, ensureModules, getResource, getAllRecordsByModule } = createI18nManager({
219
+ storage: new WxSQLiteAdapter(),
220
+ createWorker: () => new WxWorkerAdapter(wx.createWorker("workers/preload-worker-mp.js")),
221
+ fetchFn: wxFetch
222
+ });
223
+ export {
224
+ I18N_RESOURCES_UPDATED_EVENT,
225
+ closeSSE,
226
+ emitI18nResourcesUpdated,
227
+ ensureModules,
228
+ getAllRecordsByModule,
229
+ getResource,
230
+ initI18n
231
+ };
@@ -0,0 +1,175 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
+
3
+
4
+
5
+ var _chunkAJJKJPNBcjs = require('../chunk-AJJKJPNB.cjs');
6
+
7
+
8
+
9
+
10
+ var _chunkJDOLFHBScjs = require('../chunk-JDOLFHBS.cjs');
11
+
12
+ // src/native/index.ts
13
+ var _i18next = require('i18next'); var _i18next2 = _interopRequireDefault(_i18next);
14
+ var _reacti18next = require('react-i18next');
15
+
16
+ // src/storage/sqlite.ts
17
+ var DB_NAME = "i18n_cache";
18
+ var SCHEMA_VERSION = 2;
19
+ function resourceTable(name) {
20
+ return `i18n_resources_${name}`;
21
+ }
22
+ var dbInstance = null;
23
+ async function getDB() {
24
+ if (dbInstance) return dbInstance;
25
+ const { open } = await Promise.resolve().then(() => _interopRequireWildcard(require("@op-engineering/op-sqlite")));
26
+ dbInstance = open({ name: DB_NAME });
27
+ return dbInstance;
28
+ }
29
+ async function execute(sql, params = []) {
30
+ const db = await getDB();
31
+ return db.executeAsync(sql, params);
32
+ }
33
+ var SQLiteAdapter = class {
34
+ async ensureSchemaVersion(stores) {
35
+ await execute(`
36
+ CREATE TABLE IF NOT EXISTS i18n_meta (
37
+ key TEXT PRIMARY KEY,
38
+ value TEXT NOT NULL
39
+ )
40
+ `);
41
+ const stored = await this.getMeta("schema_version");
42
+ const storedVersion = Number(_nullishCoalesce(stored, () => ( 0)));
43
+ if (storedVersion === 0) {
44
+ await this.createTables(stores);
45
+ await this.setMeta("schema_version", String(SCHEMA_VERSION));
46
+ } else if (storedVersion < SCHEMA_VERSION) {
47
+ for (const store of stores) {
48
+ await execute(`DROP TABLE IF EXISTS ${resourceTable(store.name)}`);
49
+ }
50
+ await this.createTables(stores);
51
+ await this.setMeta("schema_version", String(SCHEMA_VERSION));
52
+ } else if (storedVersion > SCHEMA_VERSION) {
53
+ throw new Error(`[i18n] SQLite schema version ${storedVersion} > current ${SCHEMA_VERSION}`);
54
+ }
55
+ }
56
+ async createTables(stores) {
57
+ for (const store of stores) {
58
+ const table = resourceTable(store.name);
59
+ await execute(`
60
+ CREATE TABLE IF NOT EXISTS ${table} (
61
+ key TEXT PRIMARY KEY,
62
+ module_code TEXT NOT NULL,
63
+ lang_code TEXT NOT NULL,
64
+ version INTEGER NOT NULL DEFAULT 0,
65
+ resources TEXT NOT NULL
66
+ )
67
+ `);
68
+ await execute(
69
+ `CREATE INDEX IF NOT EXISTS idx_${store.name}_module ON ${table}(module_code)`
70
+ );
71
+ await execute(
72
+ `CREATE INDEX IF NOT EXISTS idx_${store.name}_language ON ${table}(lang_code)`
73
+ );
74
+ }
75
+ }
76
+ async getRecord(storeName, key) {
77
+ const { rows } = await execute(
78
+ `SELECT * FROM ${resourceTable(storeName)} WHERE key = ?`,
79
+ [key]
80
+ );
81
+ if (!rows.length) return void 0;
82
+ return rowToRecord(rows[0]);
83
+ }
84
+ async putRecord(storeName, record) {
85
+ await execute(
86
+ `INSERT OR REPLACE INTO ${resourceTable(storeName)}
87
+ (key, module_code, lang_code, version, resources)
88
+ VALUES (?, ?, ?, ?, ?)`,
89
+ [
90
+ record.key,
91
+ record.moduleCode,
92
+ record.langCode,
93
+ record.version,
94
+ JSON.stringify(record.resources)
95
+ ]
96
+ );
97
+ }
98
+ async getAllByModule(storeName, moduleCode) {
99
+ const { rows } = await execute(
100
+ `SELECT * FROM ${resourceTable(storeName)} WHERE module_code = ?`,
101
+ [moduleCode]
102
+ );
103
+ return rows.map((r) => rowToRecord(r));
104
+ }
105
+ async clearStore(storeName) {
106
+ await execute(`DELETE FROM ${resourceTable(storeName)}`);
107
+ }
108
+ async getMeta(key) {
109
+ const { rows } = await execute("SELECT value FROM i18n_meta WHERE key = ?", [key]);
110
+ if (!rows.length) return null;
111
+ return rows[0].value;
112
+ }
113
+ async setMeta(key, value) {
114
+ await execute(
115
+ "INSERT OR REPLACE INTO i18n_meta (key, value) VALUES (?, ?)",
116
+ [key, value]
117
+ );
118
+ }
119
+ async hasLoginResources(stores) {
120
+ for (const store of stores) {
121
+ const { rows } = await execute(
122
+ `SELECT key FROM ${resourceTable(store.name)}
123
+ WHERE key NOT LIKE 'UNLOGIN_%' LIMIT 1`
124
+ );
125
+ if (rows.length > 0) return true;
126
+ }
127
+ return false;
128
+ }
129
+ };
130
+ function rowToRecord(row) {
131
+ return {
132
+ key: row.key,
133
+ moduleCode: row.module_code,
134
+ langCode: row.lang_code,
135
+ version: row.version,
136
+ resources: JSON.parse(row.resources)
137
+ };
138
+ }
139
+
140
+ // src/native/index.ts
141
+ if (!_i18next2.default.isInitialized) {
142
+ void _i18next2.default.use(_reacti18next.initReactI18next).init({
143
+ lng: "__loading__",
144
+ fallbackLng: "zh_CN",
145
+ ns: ["COMMON"],
146
+ defaultNS: "COMMON",
147
+ resources: {},
148
+ interpolation: { escapeValue: false },
149
+ react: {
150
+ useSuspense: false,
151
+ bindI18n: "languageChanged",
152
+ bindI18nStore: "added removed",
153
+ transSupportBasicHtmlNodes: true,
154
+ transKeepBasicHtmlNodesFor: ["br", "p", "strong", "i", "em", "b", "a", "span"]
155
+ }
156
+ });
157
+ }
158
+ var { initI18n, closeSSE, ensureModules, getResource, getAllRecordsByModule } = _chunkJDOLFHBScjs.createI18nManager.call(void 0, {
159
+ storage: new SQLiteAdapter(),
160
+ // Hermes Worker(RN 0.71+),API 与 Web Worker 一致
161
+ createWorker: () => new (0, _chunkAJJKJPNBcjs.WebWorkerAdapter)(
162
+ new Worker("./workers/preload-worker-rn", { type: "module" })
163
+ )
164
+ });
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+ exports.I18N_RESOURCES_UPDATED_EVENT = _chunkJDOLFHBScjs.I18N_RESOURCES_UPDATED_EVENT; exports.closeSSE = closeSSE; exports.emitI18nResourcesUpdated = _chunkJDOLFHBScjs.emitI18nResourcesUpdated; exports.ensureModules = ensureModules; exports.getAllRecordsByModule = getAllRecordsByModule; exports.getResource = getResource; exports.initI18n = initI18n; exports.useDict = _chunkAJJKJPNBcjs.useDict; exports.useTranslation = _chunkAJJKJPNBcjs.useTranslation;
@@ -0,0 +1,12 @@
1
+ import { c as closeSSE$1, e as ensureModules$1, g as getAllRecordsByModule$1, a as getResource$1, i as initI18n$1 } from '../cacheEvents-kOPDM3Ed.cjs';
2
+ export { I as I18N_RESOURCES_UPDATED_EVENT, b as I18nInitOptions, P as PullLangBlock, R as ResourceRecord, S as SSEMessage, d as StandardPullParams, f as StoreConfig, h as emitI18nResourcesUpdated } from '../cacheEvents-kOPDM3Ed.cjs';
3
+ export { u as useDict } from '../hooks-ClO29Chr.cjs';
4
+ export { useTranslation } from 'react-i18next';
5
+
6
+ declare const initI18n: typeof initI18n$1;
7
+ declare const closeSSE: typeof closeSSE$1;
8
+ declare const ensureModules: typeof ensureModules$1;
9
+ declare const getResource: typeof getResource$1;
10
+ declare const getAllRecordsByModule: typeof getAllRecordsByModule$1;
11
+
12
+ export { closeSSE, ensureModules, getAllRecordsByModule, getResource, initI18n };
@@ -0,0 +1,12 @@
1
+ import { c as closeSSE$1, e as ensureModules$1, g as getAllRecordsByModule$1, a as getResource$1, i as initI18n$1 } from '../cacheEvents-kOPDM3Ed.js';
2
+ export { I as I18N_RESOURCES_UPDATED_EVENT, b as I18nInitOptions, P as PullLangBlock, R as ResourceRecord, S as SSEMessage, d as StandardPullParams, f as StoreConfig, h as emitI18nResourcesUpdated } from '../cacheEvents-kOPDM3Ed.js';
3
+ export { u as useDict } from '../hooks-ClO29Chr.js';
4
+ export { useTranslation } from 'react-i18next';
5
+
6
+ declare const initI18n: typeof initI18n$1;
7
+ declare const closeSSE: typeof closeSSE$1;
8
+ declare const ensureModules: typeof ensureModules$1;
9
+ declare const getResource: typeof getResource$1;
10
+ declare const getAllRecordsByModule: typeof getAllRecordsByModule$1;
11
+
12
+ export { closeSSE, ensureModules, getAllRecordsByModule, getResource, initI18n };