@bhsd/common 0.12.0 → 0.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -47,12 +47,23 @@ 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 获取解析配置的函数
53
63
  * @param langs 语言代码
64
+ * @param cdn CDN 地址
54
65
  */
55
- export declare const getWikiparse: (getConfig?: ConfigGetter, langs?: string | string[]) => Promise<void>;
66
+ export declare const getWikiparse: (getConfig?: ConfigGetter, langs?: string | string[], cdn?: string) => Promise<void>;
56
67
  /**
57
68
  * 获取LSP
58
69
  * @param obj 关联对象
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,11 +115,31 @@ 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
- const getWikiparse = async (getConfig, langs) => {
135
+ const getWikiparse = async (getConfig, langs, cdn) => {
119
136
  const dir = "extensions/dist";
120
- await loadScript(`npm/wikiparser-node/${dir}/base.min.js`, "wikiparse");
121
- await loadScript(`${wikiparse.CDN}/${dir}/lsp.min.js`, "wikiparse.LanguageService");
137
+ let src = cdn || `npm/wikiparser-node/${dir}/base.min.js`;
138
+ if (!src.endsWith(".js")) {
139
+ src = `${src}${src.endsWith("/") ? "" : "/"}${dir}/base.js`;
140
+ }
141
+ await loadScript(src, "wikiparse");
142
+ await loadScript(`${wikiparse.CDN}/${dir}/lsp.js`, "wikiparse.LanguageService");
122
143
  if (!configLoaded && typeof getConfig === "function") {
123
144
  configLoaded = true;
124
145
  try {
@@ -128,13 +149,11 @@ const getWikiparse = async (getConfig, langs) => {
128
149
  }
129
150
  if (!i18nLoaded && langs) {
130
151
  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
- }
152
+ const key = "wikiparse-i18n", { version } = wikiparse;
153
+ try {
154
+ wikiparse.setI18N(await setI18N(`${wikiparse.CDN}/i18n`, version, langs, key));
155
+ } catch {
156
+ setObject(key, { version, lang: "en" });
138
157
  }
139
158
  }
140
159
  };
package/dist/index.mjs CHANGED
@@ -76,11 +76,31 @@ 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
- const getWikiparse = async (getConfig, langs) => {
96
+ const getWikiparse = async (getConfig, langs, cdn) => {
81
97
  const dir = "extensions/dist";
82
- await loadScript(`npm/wikiparser-node/${dir}/base.min.js`, "wikiparse");
83
- await loadScript(`${wikiparse.CDN}/${dir}/lsp.min.js`, "wikiparse.LanguageService");
98
+ let src = cdn || `npm/wikiparser-node/${dir}/base.min.js`;
99
+ if (!src.endsWith(".js")) {
100
+ src = `${src}${src.endsWith("/") ? "" : "/"}${dir}/base.js`;
101
+ }
102
+ await loadScript(src, "wikiparse");
103
+ await loadScript(`${wikiparse.CDN}/${dir}/lsp.js`, "wikiparse.LanguageService");
84
104
  if (!configLoaded && typeof getConfig === "function") {
85
105
  configLoaded = true;
86
106
  try {
@@ -90,13 +110,11 @@ const getWikiparse = async (getConfig, langs) => {
90
110
  }
91
111
  if (!i18nLoaded && langs) {
92
112
  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
- }
113
+ const key = "wikiparse-i18n", { version } = wikiparse;
114
+ try {
115
+ wikiparse.setI18N(await setI18N(`${wikiparse.CDN}/i18n`, version, langs, key));
116
+ } catch {
117
+ setObject(key, { version, lang: "en" });
100
118
  }
101
119
  }
102
120
  };
@@ -143,6 +161,7 @@ export {
143
161
  rawurldecode,
144
162
  refreshStdout,
145
163
  sanitizeInlineStyle,
164
+ setI18N,
146
165
  setObject,
147
166
  splitColors
148
167
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bhsd/common",
3
- "version": "0.12.0",
3
+ "version": "0.13.1",
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
  }