@waline/vercel 1.17.4 → 1.18.2

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/.eslintrc.yml CHANGED
@@ -1,2 +1,9 @@
1
1
  globals:
2
2
  think: readonly
3
+
4
+ overrides:
5
+ - files:
6
+ - '__tests__/**/*.spec.js'
7
+
8
+ parserOptions:
9
+ sourceType: module
@@ -1,6 +1,6 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
1
+ // Vitest Snapshot v1
2
2
 
3
- exports[`XSS test Should render 1`] = `
3
+ exports[`XSS test > Should render 1`] = `
4
4
  "<p>Waline is a good framework. :money:</p>
5
5
  <h2>特性</h2>
6
6
  <ul>
@@ -1,5 +1,7 @@
1
- const MarkdownIt = require('markdown-it');
2
- const { katexPlugin } = require('../src/service/markdown/katex');
1
+ import { describe, expect, it } from 'vitest';
2
+ import MarkdownIt from 'markdown-it';
3
+ import { katexPlugin } from '../src/service/markdown/katex';
4
+ import { vi } from 'vitest';
3
5
 
4
6
  const markdownIt = MarkdownIt({ linkify: true }).use(katexPlugin, {
5
7
  output: 'mathml',
@@ -46,7 +48,7 @@ describe('inline katex', () => {
46
48
  it('Should render error msg when content is wrong', () => {
47
49
  // eslint-disable-next-line @typescript-eslint/unbound-method
48
50
  const originalWarn = global.console.warn;
49
- global.console.warn = jest.fn();
51
+ global.console.warn = vi.fn();
50
52
 
51
53
  expect(markdownItWithError.render('$\\fra{a}{b}$')).toEqual(
52
54
  "<p><span class='katex-error' title='ParseError: KaTeX parse error: Undefined control sequence: \\fra at position 1: \\̲f̲r̲a̲{a}{b}'>\\fra{a}{b}</span></p>\n"
@@ -117,7 +119,7 @@ $$
117
119
  it('Should render error msg when content is wrong', () => {
118
120
  // eslint-disable-next-line @typescript-eslint/unbound-method
119
121
  const originalWarn = global.console.warn;
120
- global.console.warn = jest.fn();
122
+ global.console.warn = vi.fn();
121
123
  expect(markdownItWithError.render('$$\\fra{a}{b}$$')).toMatch(
122
124
  /<p class='katex-block katex-error' title='[\s\S]*?'>[\s\S]*?<\/p>/
123
125
  );
@@ -1,5 +1,6 @@
1
- const MarkdownIt = require('markdown-it');
2
- const { mathjaxPlugin } = require('../src/service/markdown/mathjax');
1
+ import { describe, expect, it } from 'vitest';
2
+ import MarkdownIt from 'markdown-it';
3
+ import { mathjaxPlugin } from '../src/service/markdown/mathjax';
3
4
 
4
5
  const markdownIt = MarkdownIt({ linkify: true }).use(mathjaxPlugin);
5
6
 
@@ -1,5 +1,7 @@
1
- const MarkdownIt = require('markdown-it');
2
- const { sanitize } = require('../src/service/markdown/xss');
1
+ import { describe, expect, it } from 'vitest';
2
+ import MarkdownIt from 'markdown-it';
3
+ import { sanitize } from '../src/service/markdown/xss';
4
+
3
5
  const parser = (content) =>
4
6
  sanitize(new MarkdownIt({ html: true }).render(content));
5
7
 
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
- const os = require('os');
2
- const path = require('path');
1
+ const os = require('node:os');
2
+ const path = require('node:path');
3
3
  const Application = require('thinkjs');
4
4
  const Loader = require('thinkjs/lib/loader');
5
5
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@waline/vercel",
3
- "version": "1.17.4",
3
+ "version": "1.18.2",
4
4
  "description": "vercel server for waline comment system",
5
5
  "keywords": [
6
6
  "waline",
@@ -47,5 +47,8 @@
47
47
  "think-router-rest": "^1.0.5",
48
48
  "thinkjs": "^3.2.14",
49
49
  "ua-parser-js": "^1.0.2"
50
+ },
51
+ "engines": {
52
+ "node": ">=14"
50
53
  }
51
54
  }
@@ -92,7 +92,7 @@ const markdown = {
92
92
 
93
93
  if (isFalse(MARKDOWN_HIGHLIGHT)) markdown.config.highlight = false;
94
94
 
95
- let avatarProxy = 'https://avatar.75cdn.workers.dev/';
95
+ let avatarProxy = '';
96
96
  if (AVATAR_PROXY) {
97
97
  avatarProxy = !isFalse(AVATAR_PROXY) ? AVATAR_PROXY : '';
98
98
  }
@@ -50,6 +50,7 @@ async function formatCmt(
50
50
  comment.addr = await think.ip2region(ip, { depth: isAdmin ? 3 : 1 });
51
51
  }
52
52
  comment.comment = markdownParser(comment.comment);
53
+ comment.like = Number(comment.like) || 0;
53
54
  return comment;
54
55
  }
55
56
 
@@ -97,6 +98,7 @@ module.exports = class extends BaseRest {
97
98
  'ip',
98
99
  'user_id',
99
100
  'sticky',
101
+ 'like',
100
102
  ],
101
103
  });
102
104
 
@@ -231,7 +233,7 @@ module.exports = class extends BaseRest {
231
233
  const where = { url };
232
234
  if (think.isEmpty(userInfo) || this.config('storage') === 'deta') {
233
235
  where.status = ['NOT IN', ['waiting', 'spam']];
234
- } else {
236
+ } else if (userInfo.type !== 'administrator') {
235
237
  where._complex = {
236
238
  _logic: 'or',
237
239
  status: ['NOT IN', ['waiting', 'spam']],
@@ -259,6 +261,7 @@ module.exports = class extends BaseRest {
259
261
  'ip',
260
262
  'user_id',
261
263
  'sticky',
264
+ 'like',
262
265
  ],
263
266
  };
264
267
 
@@ -568,13 +571,27 @@ module.exports = class extends BaseRest {
568
571
  }
569
572
 
570
573
  async putAction() {
571
- const data = this.post();
574
+ const { userInfo } = this.ctx.state;
575
+ let data = this.post();
572
576
  let oldData = await this.modelInstance.select({ objectId: this.id });
573
577
  if (think.isEmpty(oldData)) {
574
578
  return this.success();
575
579
  }
576
580
 
577
581
  oldData = oldData[0];
582
+ if (think.isEmpty(userInfo) || userInfo.type !== 'administrator') {
583
+ if (!think.isBoolean(data.like)) {
584
+ return this.success();
585
+ }
586
+
587
+ const likeIncMax = this.config('LIKE_INC_MAX') || 1;
588
+ data = {
589
+ like:
590
+ (Number(oldData.like) || 0) +
591
+ (data.like ? Math.ceil(Math.random() * likeIncMax) : -1),
592
+ };
593
+ }
594
+
578
595
  const preUpdateResp = await this.hook('preUpdate', {
579
596
  ...data,
580
597
  objectId: this.id,
@@ -1,5 +1,5 @@
1
- const fs = require('fs');
2
- const util = require('util');
1
+ const fs = require('node:fs');
2
+ const util = require('node:util');
3
3
  const BaseRest = require('./rest');
4
4
 
5
5
  const readFileAsync = util.promisify(fs.readFile);
@@ -1,4 +1,4 @@
1
- const qs = require('querystring');
1
+ const qs = require('node:querystring');
2
2
  const jwt = require('jsonwebtoken');
3
3
  const { PasswordHash } = require('phpass');
4
4
  const request = require('request-promise-native');
@@ -1,4 +1,4 @@
1
- const path = require('path');
1
+ const path = require('node:path');
2
2
 
3
3
  module.exports = class extends think.Controller {
4
4
  static get _REST() {
@@ -1,4 +1,4 @@
1
- const qs = require('querystring');
1
+ const qs = require('node:querystring');
2
2
  const { PasswordHash } = require('phpass');
3
3
  const BaseRest = require('./rest');
4
4
 
@@ -4,9 +4,10 @@ module.exports = class extends Base {
4
4
  await super.__before();
5
5
 
6
6
  const { type, path } = this.get();
7
+ const { like } = this.post();
7
8
  const isAllowedGet = this.isGet && (type !== 'list' || path);
8
-
9
- if (this.isPost || isAllowedGet) {
9
+ const isAllowedPut = this.ctx.isMethod('PUT') && think.isBoolean(like);
10
+ if (this.isPost || isAllowedGet || isAllowedPut) {
10
11
  return;
11
12
  }
12
13
 
@@ -207,7 +208,7 @@ module.exports = class extends Base {
207
208
  }
208
209
 
209
210
  /**
210
- * @api {POST} /comment/:id update comment data
211
+ * @api {PUT} /comment/:id update comment data
211
212
  * @apiGroup Comment
212
213
  * @apiVersion 0.0.1
213
214
  *
@@ -216,11 +217,22 @@ module.exports = class extends Base {
216
217
  * @apiParam {String} [link] post comment user link
217
218
  * @apiParam {String} [comment] post comment text
218
219
  * @apiParam {String} [url] the artcile url path of comment
220
+ * @apiParam {Boolean} [like] like comment
219
221
  *
220
222
  * @apiSuccess (200) {Number} errno 0
221
223
  * @apiSuccess (200) {String} errmsg return error message if error
222
224
  */
223
- putAction() {}
225
+ putAction() {
226
+ const { userInfo } = this.ctx.state;
227
+ if (think.isEmpty(userInfo) || userInfo.type !== 'administrator') {
228
+ this.rules = {
229
+ like: {
230
+ required: true,
231
+ boolean: true,
232
+ },
233
+ };
234
+ }
235
+ }
224
236
 
225
237
  /**
226
238
  * @api {DELETE} /comment/:id delete comment
@@ -1,4 +1,4 @@
1
- const path = require('path');
1
+ const path = require('node:path');
2
2
  const { parseString, writeToString } = require('fast-csv');
3
3
  const request = require('request-promise-native');
4
4
  const Base = require('./base');
package/vanilla.js CHANGED
@@ -1,4 +1,4 @@
1
- const path = require('path');
1
+ const path = require('node:path');
2
2
  const Application = require('thinkjs');
3
3
 
4
4
  const instance = new Application({