@bhsd/common 0.12.0 → 0.13.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.
package/dist/index.d.ts CHANGED
@@ -47,6 +47,16 @@ export declare const setObject: (key: string, value: unknown) => void;
47
47
  * @param baseVersion 基础版本号
48
48
  */
49
49
  export declare const compareVersion: (version: string, baseVersion: string) => boolean;
50
+ /**
51
+ * 加载 I18N
52
+ * @param url 下载地址
53
+ * @param cur 当前版本号
54
+ * @param languages 语言代码列表
55
+ * @param key 存储的键名
56
+ * @param i18n 已存储的I18N对象
57
+ * @throws `Error` 无法获取语言包
58
+ */
59
+ export declare const setI18N: (url: string, cur: string, languages: string[] | string, key: string, i18n?: Record<string, string>) => Promise<Record<string, string>>;
50
60
  /**
51
61
  * 加载 wikiparse
52
62
  * @param getConfig 获取解析配置的函数
package/dist/index.js CHANGED
@@ -32,6 +32,7 @@ __export(index_exports, {
32
32
  rawurldecode: () => rawurldecode,
33
33
  refreshStdout: () => refreshStdout,
34
34
  sanitizeInlineStyle: () => sanitizeInlineStyle,
35
+ setI18N: () => setI18N,
35
36
  setObject: () => setObject,
36
37
  splitColors: () => splitColors
37
38
  });
@@ -114,6 +115,22 @@ const compareVersion = (version, baseVersion) => {
114
115
  const [major, minor] = parseVersion(version), [baseMajor, baseMinor] = parseVersion(baseVersion);
115
116
  return major > baseMajor || major === baseMajor && minor >= baseMinor;
116
117
  };
118
+ const setI18N = async (url, cur, languages, key, i18n = getObject(key) ?? {}) => {
119
+ const { version, lang } = i18n, langs = Array.isArray(languages) ? languages : [languages];
120
+ if (version === cur && langs.includes(lang)) {
121
+ return i18n;
122
+ }
123
+ for (const language of langs) {
124
+ try {
125
+ const res = await fetch(`${url}/${language.toLowerCase()}.json`);
126
+ Object.assign(i18n, await res.json(), { version: cur, lang: language });
127
+ setObject(key, i18n);
128
+ return i18n;
129
+ } catch {
130
+ }
131
+ }
132
+ throw new Error(`Failed to fetch the localization for ${langs[0]}.`);
133
+ };
117
134
  let configLoaded = false, i18nLoaded = false;
118
135
  const getWikiparse = async (getConfig, langs) => {
119
136
  const dir = "extensions/dist";
@@ -128,13 +145,11 @@ const getWikiparse = async (getConfig, langs) => {
128
145
  }
129
146
  if (!i18nLoaded && langs) {
130
147
  i18nLoaded = true;
131
- for (const lang of Array.isArray(langs) ? langs : [langs]) {
132
- try {
133
- const i18n = await (await fetch(`${wikiparse.CDN}/i18n/${lang.toLowerCase()}.json`)).json();
134
- wikiparse.setI18N(i18n);
135
- break;
136
- } catch {
137
- }
148
+ const key = "wikiparse-i18n", { version } = wikiparse;
149
+ try {
150
+ wikiparse.setI18N(await setI18N(`${wikiparse.CDN}/i18n`, version, langs, key));
151
+ } catch {
152
+ setObject(key, { version, lang: "en" });
138
153
  }
139
154
  }
140
155
  };
package/dist/index.mjs CHANGED
@@ -76,6 +76,22 @@ const compareVersion = (version, baseVersion) => {
76
76
  const [major, minor] = parseVersion(version), [baseMajor, baseMinor] = parseVersion(baseVersion);
77
77
  return major > baseMajor || major === baseMajor && minor >= baseMinor;
78
78
  };
79
+ const setI18N = async (url, cur, languages, key, i18n = getObject(key) ?? {}) => {
80
+ const { version, lang } = i18n, langs = Array.isArray(languages) ? languages : [languages];
81
+ if (version === cur && langs.includes(lang)) {
82
+ return i18n;
83
+ }
84
+ for (const language of langs) {
85
+ try {
86
+ const res = await fetch(`${url}/${language.toLowerCase()}.json`);
87
+ Object.assign(i18n, await res.json(), { version: cur, lang: language });
88
+ setObject(key, i18n);
89
+ return i18n;
90
+ } catch {
91
+ }
92
+ }
93
+ throw new Error(`Failed to fetch the localization for ${langs[0]}.`);
94
+ };
79
95
  let configLoaded = false, i18nLoaded = false;
80
96
  const getWikiparse = async (getConfig, langs) => {
81
97
  const dir = "extensions/dist";
@@ -90,13 +106,11 @@ const getWikiparse = async (getConfig, langs) => {
90
106
  }
91
107
  if (!i18nLoaded && langs) {
92
108
  i18nLoaded = true;
93
- for (const lang of Array.isArray(langs) ? langs : [langs]) {
94
- try {
95
- const i18n = await (await fetch(`${wikiparse.CDN}/i18n/${lang.toLowerCase()}.json`)).json();
96
- wikiparse.setI18N(i18n);
97
- break;
98
- } catch {
99
- }
109
+ const key = "wikiparse-i18n", { version } = wikiparse;
110
+ try {
111
+ wikiparse.setI18N(await setI18N(`${wikiparse.CDN}/i18n`, version, langs, key));
112
+ } catch {
113
+ setObject(key, { version, lang: "en" });
100
114
  }
101
115
  }
102
116
  };
@@ -143,6 +157,7 @@ export {
143
157
  rawurldecode,
144
158
  refreshStdout,
145
159
  sanitizeInlineStyle,
160
+ setI18N,
146
161
  setObject,
147
162
  splitColors
148
163
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bhsd/common",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "license": "MIT",
5
5
  "author": "Bhsd",
6
6
  "files": [
@@ -62,6 +62,6 @@
62
62
  "eslint-plugin-unicorn": "^56.0.1",
63
63
  "stylelint": "^16.20.0",
64
64
  "typescript": "^5.8.2",
65
- "wikiparser-node": "^1.21.1"
65
+ "wikiparser-node": "^1.21.2"
66
66
  }
67
67
  }