@waline/vercel 1.31.14 → 1.32.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@waline/vercel",
3
- "version": "1.31.14",
3
+ "version": "1.32.0",
4
4
  "description": "vercel server for waline comment system",
5
5
  "keywords": [
6
6
  "waline",
@@ -23,11 +23,11 @@
23
23
  "@mdit/plugin-sup": "0.8.0",
24
24
  "akismet": "^2.0.7",
25
25
  "deta": "^2.0.0",
26
- "dompurify": "^3.1.3",
26
+ "dompurify": "^3.1.4",
27
27
  "dy-node-ip2region": "^1.0.1",
28
28
  "fast-csv": "^5.0.1",
29
29
  "form-data": "^4.0.0",
30
- "jsdom": "^24.0.0",
30
+ "jsdom": "^24.1.0",
31
31
  "jsonwebtoken": "^9.0.2",
32
32
  "katex": "^0.16.10",
33
33
  "koa-compose": "^4.1.0",
@@ -18,14 +18,28 @@ module.exports = class extends BaseRest {
18
18
  const resp = await this.modelInstance.select({ url: ['IN', path] });
19
19
 
20
20
  if (think.isEmpty(resp)) {
21
- const data = type.reduce((o, field) => {
22
- o[field] = 0;
23
-
24
- return o;
25
- }, {});
21
+ const counters = new Array(path.length).fill(
22
+ type.length === 1 && deprecated
23
+ ? 0
24
+ : type.reduce((o, field) => {
25
+ o[field] = 0;
26
+
27
+ return o;
28
+ }, {}),
29
+ );
26
30
 
31
+ // - deprecated:
32
+ // - single path and single type: 0
33
+ // - single path and multiple type: {[type]: 0}
34
+ // - multiple path and single type: [0, 0]
35
+ // - multiple path and multiple type: [{[type]: 0},{[type]: 0}]
36
+ // - latest
37
+ // - single path and single type: [{[type]: 0}]
38
+ // - single path and multiple type: [{[type]: 0}]
39
+ // - multiple path and single type: [{[type]: 0}]
40
+ // - multiple path and multiple type: [{[type]: 0}]
27
41
  return this.jsonOrSuccess(
28
- type.length === 1 && deprecated ? data[type[0]] : data,
42
+ path.length === 1 && deprecated ? counters[0] : counters,
29
43
  );
30
44
  }
31
45
 
@@ -575,10 +575,15 @@ module.exports = class extends BaseRest {
575
575
  cmt.children.forEach((c) => {
576
576
  const parent = childCommentsMap.get(c.pid);
577
577
 
578
+ // fix https://github.com/walinejs/waline/issues/2518 avoid some abnormal comment data
579
+ if (!parent) {
580
+ return;
581
+ }
582
+
578
583
  c.reply_user = {
579
- nick: parent.nick,
580
- link: parent.link,
581
- avatar: parent.avatar,
584
+ nick: parent?.nick,
585
+ link: parent?.link,
586
+ avatar: parent?.avatar,
582
587
  };
583
588
  });
584
589
 
@@ -1,7 +1,9 @@
1
1
  const nunjucks = require('nunjucks');
2
2
  const { PasswordHash } = require('phpass');
3
3
 
4
- const locales = require('../locales/index.js');
4
+ const defaultLocales = require('../locales/index.js');
5
+
6
+ const defaultLang = 'en-us';
5
7
 
6
8
  module.exports = {
7
9
  success(...args) {
@@ -18,11 +20,19 @@ module.exports = {
18
20
  return this[this.ctx.state.deprecated ? 'json' : 'success'](...args);
19
21
  },
20
22
  locale(message, variables) {
21
- const { lang } = this.get();
22
- const locale = locales[(lang || 'zh-cn').toLowerCase()] || locales['zh-cn'];
23
+ const { userLang } = this.get();
24
+ const lang = (userLang || defaultLang).toLowerCase();
25
+
26
+ const customLocales = this.config('locales');
27
+ const locales = customLocales || defaultLocales;
28
+
29
+ const localMessage =
30
+ locales?.[lang]?.[message] ||
31
+ defaultLocales?.[lang]?.[message] ||
32
+ defaultLocales[defaultLang][message];
23
33
 
24
- if (locale?.[message]) {
25
- message = locale[message];
34
+ if (localMessage) {
35
+ message = localMessage;
26
36
  }
27
37
 
28
38
  return nunjucks.renderString(message, variables);
@@ -1,14 +1,11 @@
1
1
  const { katex: katexPlugin } = require('@mdit/plugin-katex');
2
- const {
3
- createMathjaxInstance,
4
- mathjax: mathjaxPlugin,
5
- } = require('@mdit/plugin-mathjax');
6
2
  const { sub: subPlugin } = require('@mdit/plugin-sub');
7
3
  const { sup: supPlugin } = require('@mdit/plugin-sup');
8
4
  const MarkdownIt = require('markdown-it');
9
5
  const emojiPlugin = require('markdown-it-emoji');
10
6
 
11
7
  const { resolveHighlighter } = require('./highlight.js');
8
+ const { mathjaxPlugin } = require('./mathjax.js');
12
9
  const { sanitize } = require('./xss.js');
13
10
 
14
11
  const getMarkdownParser = () => {
@@ -58,10 +55,7 @@ const getMarkdownParser = () => {
58
55
  output: 'mathml',
59
56
  });
60
57
  } else if (tex !== false) {
61
- markdownIt.use(
62
- mathjaxPlugin,
63
- createMathjaxInstance({ ...mathjax, output: 'svg' }),
64
- );
58
+ markdownIt.use(mathjaxPlugin, mathjax);
65
59
  }
66
60
 
67
61
  return (content) => sanitize(markdownIt.render(content));