@waline/vercel 1.36.5 → 1.37.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/development.js +1 -0
- package/index.js +4 -3
- package/package.json +2 -2
- package/src/config/adapter.js +8 -5
- package/src/config/config.js +3 -3
- package/src/controller/article.js +2 -2
- package/src/controller/comment.js +24 -21
- package/src/controller/oauth.js +7 -4
- package/src/controller/rest.js +1 -1
- package/src/controller/user.js +9 -8
- package/src/controller/verification.js +3 -2
- package/src/extend/think.js +33 -19
- package/src/logic/base.js +25 -23
- package/src/logic/comment.js +7 -4
- package/src/logic/db.js +1 -1
- package/src/logic/token.js +2 -2
- package/src/middleware/dashboard.js +1 -0
- package/src/middleware/plugin.js +1 -1
- package/src/service/akismet.js +10 -3
- package/src/service/avatar.js +1 -1
- package/src/service/markdown/highlight.js +1 -1
- package/src/service/markdown/utils.js +5 -5
- package/src/service/markdown/xss.js +5 -10
- package/src/service/notify.js +56 -54
- package/src/service/storage/base.js +1 -1
- package/src/service/storage/cloudbase.js +9 -7
- package/src/service/storage/github.js +24 -18
- package/src/service/storage/leancloud.js +33 -26
- package/src/service/storage/mongodb.js +10 -6
- package/src/service/storage/mysql.js +4 -4
- package/src/service/storage/postgresql.js +5 -5
|
@@ -41,12 +41,14 @@ module.exports = class extends Base {
|
|
|
41
41
|
const handler = where[k][0].toUpperCase();
|
|
42
42
|
|
|
43
43
|
switch (handler) {
|
|
44
|
-
case 'IN':
|
|
44
|
+
case 'IN': {
|
|
45
45
|
instance.containedIn(k, where[k][1]);
|
|
46
46
|
break;
|
|
47
|
-
|
|
47
|
+
}
|
|
48
|
+
case 'NOT IN': {
|
|
48
49
|
instance.notContainedIn(k, where[k][1]);
|
|
49
50
|
break;
|
|
51
|
+
}
|
|
50
52
|
case 'LIKE': {
|
|
51
53
|
const first = where[k][1][0];
|
|
52
54
|
const last = where[k][1].slice(-1);
|
|
@@ -60,12 +62,14 @@ module.exports = class extends Base {
|
|
|
60
62
|
}
|
|
61
63
|
break;
|
|
62
64
|
}
|
|
63
|
-
case '!=':
|
|
65
|
+
case '!=': {
|
|
64
66
|
instance.notEqualTo(k, where[k][1]);
|
|
65
67
|
break;
|
|
66
|
-
|
|
68
|
+
}
|
|
69
|
+
case '>': {
|
|
67
70
|
instance.greaterThan(k, where[k][1]);
|
|
68
71
|
break;
|
|
72
|
+
}
|
|
69
73
|
}
|
|
70
74
|
}
|
|
71
75
|
}
|
|
@@ -113,11 +117,11 @@ module.exports = class extends Base {
|
|
|
113
117
|
instance.select(field);
|
|
114
118
|
}
|
|
115
119
|
|
|
116
|
-
const data = await instance.find().catch((
|
|
117
|
-
if (
|
|
120
|
+
const data = await instance.find().catch((err) => {
|
|
121
|
+
if (err.code === 101) {
|
|
118
122
|
return [];
|
|
119
123
|
}
|
|
120
|
-
throw
|
|
124
|
+
throw err;
|
|
121
125
|
});
|
|
122
126
|
|
|
123
127
|
return data.map((item) => item.toJSON());
|
|
@@ -126,7 +130,7 @@ module.exports = class extends Base {
|
|
|
126
130
|
async select(where, options = {}) {
|
|
127
131
|
let data = [];
|
|
128
132
|
let ret = [];
|
|
129
|
-
|
|
133
|
+
const offset = options.offset ?? 0;
|
|
130
134
|
|
|
131
135
|
do {
|
|
132
136
|
options.offset = offset + data.length;
|
|
@@ -206,34 +210,37 @@ module.exports = class extends Base {
|
|
|
206
210
|
return;
|
|
207
211
|
}
|
|
208
212
|
|
|
209
|
-
let count = cacheData[0]
|
|
213
|
+
let { count } = cacheData[0];
|
|
210
214
|
|
|
211
215
|
switch (method) {
|
|
212
|
-
case 'add':
|
|
216
|
+
case 'add': {
|
|
213
217
|
if (data.status === 'approved') {
|
|
214
218
|
count += 1;
|
|
215
219
|
}
|
|
216
220
|
break;
|
|
217
|
-
|
|
221
|
+
}
|
|
222
|
+
case 'udpate_status': {
|
|
218
223
|
if (data.status === 'approved') {
|
|
219
224
|
count += 1;
|
|
220
225
|
} else {
|
|
221
226
|
count -= 1;
|
|
222
227
|
}
|
|
223
228
|
break;
|
|
224
|
-
|
|
229
|
+
}
|
|
230
|
+
case 'delete': {
|
|
225
231
|
count -= 1;
|
|
226
232
|
break;
|
|
233
|
+
}
|
|
227
234
|
}
|
|
228
235
|
|
|
229
236
|
const currentTableName = this.tableName;
|
|
230
237
|
|
|
231
238
|
this.tableName = cacheTableName;
|
|
232
|
-
await this.update({ count }, { objectId: cacheData[0].objectId }).catch((
|
|
233
|
-
if (
|
|
239
|
+
await this.update({ count }, { objectId: cacheData[0].objectId }).catch((err) => {
|
|
240
|
+
if (err.code === 101) {
|
|
234
241
|
return;
|
|
235
242
|
}
|
|
236
|
-
throw
|
|
243
|
+
throw err;
|
|
237
244
|
});
|
|
238
245
|
this.tableName = currentTableName;
|
|
239
246
|
}
|
|
@@ -242,11 +249,11 @@ module.exports = class extends Base {
|
|
|
242
249
|
const instance = this.where(this.tableName, where);
|
|
243
250
|
|
|
244
251
|
if (!options.group) {
|
|
245
|
-
return instance.count(options).catch((
|
|
246
|
-
if (
|
|
252
|
+
return instance.count(options).catch((err) => {
|
|
253
|
+
if (err.code === 101) {
|
|
247
254
|
return 0;
|
|
248
255
|
}
|
|
249
|
-
throw
|
|
256
|
+
throw err;
|
|
250
257
|
});
|
|
251
258
|
}
|
|
252
259
|
|
|
@@ -254,7 +261,7 @@ module.exports = class extends Base {
|
|
|
254
261
|
const cacheData = await this._getCmtGroupByMailUserIdCache(options.group.join('_'), where);
|
|
255
262
|
|
|
256
263
|
if (!where._complex) {
|
|
257
|
-
if (cacheData.length) {
|
|
264
|
+
if (cacheData.length > 0) {
|
|
258
265
|
return cacheData;
|
|
259
266
|
}
|
|
260
267
|
|
|
@@ -262,7 +269,7 @@ module.exports = class extends Base {
|
|
|
262
269
|
const countsMap = {};
|
|
263
270
|
|
|
264
271
|
for (const count of counts) {
|
|
265
|
-
const key = options.group.map((item) => count[item]
|
|
272
|
+
const key = options.group.map((item) => count[item] ?? undefined).join('_');
|
|
266
273
|
|
|
267
274
|
if (!countsMap[key]) {
|
|
268
275
|
countsMap[key] = {};
|
|
@@ -286,7 +293,7 @@ module.exports = class extends Base {
|
|
|
286
293
|
const cacheDataMap = {};
|
|
287
294
|
|
|
288
295
|
for (const item of cacheData) {
|
|
289
|
-
const key = options.group.map((item) => item[item]
|
|
296
|
+
const key = options.group.map((item) => item[item] ?? undefined).join('_');
|
|
290
297
|
|
|
291
298
|
cacheDataMap[key] = item;
|
|
292
299
|
}
|
|
@@ -314,7 +321,7 @@ module.exports = class extends Base {
|
|
|
314
321
|
({
|
|
315
322
|
...groupFlatValue,
|
|
316
323
|
[groupName]: item,
|
|
317
|
-
})[item]
|
|
324
|
+
})[item] ?? undefined,
|
|
318
325
|
)
|
|
319
326
|
.join('_');
|
|
320
327
|
|
|
@@ -354,10 +361,10 @@ module.exports = class extends Base {
|
|
|
354
361
|
const Table = AV.Object.extend(this.tableName);
|
|
355
362
|
const instance = new Table();
|
|
356
363
|
|
|
357
|
-
const REVERSED_KEYS = ['objectId', 'createdAt', 'updatedAt'];
|
|
364
|
+
const REVERSED_KEYS = new Set(['objectId', 'createdAt', 'updatedAt']);
|
|
358
365
|
|
|
359
366
|
for (const k in data) {
|
|
360
|
-
if (REVERSED_KEYS.
|
|
367
|
+
if (REVERSED_KEYS.has(k)) {
|
|
361
368
|
continue;
|
|
362
369
|
}
|
|
363
370
|
instance.set(k, data[k]);
|
|
@@ -386,10 +393,10 @@ module.exports = class extends Base {
|
|
|
386
393
|
|
|
387
394
|
const updateData = typeof data === 'function' ? data(item.toJSON()) : data;
|
|
388
395
|
|
|
389
|
-
const REVERSED_KEYS = ['createdAt', 'updatedAt'];
|
|
396
|
+
const REVERSED_KEYS = new Set(['createdAt', 'updatedAt']);
|
|
390
397
|
|
|
391
398
|
for (const k in updateData) {
|
|
392
|
-
if (REVERSED_KEYS.
|
|
399
|
+
if (REVERSED_KEYS.has(k)) {
|
|
393
400
|
continue;
|
|
394
401
|
}
|
|
395
402
|
item.set(k, updateData[k]);
|
|
@@ -11,7 +11,7 @@ module.exports = class extends Base {
|
|
|
11
11
|
const filter = {};
|
|
12
12
|
const parseKey = (k) => (k === 'objectId' ? '_id' : k);
|
|
13
13
|
|
|
14
|
-
for (
|
|
14
|
+
for (const k in where) {
|
|
15
15
|
if (k === '_complex') {
|
|
16
16
|
continue;
|
|
17
17
|
}
|
|
@@ -29,7 +29,7 @@ module.exports = class extends Base {
|
|
|
29
29
|
const handler = where[k][0].toUpperCase();
|
|
30
30
|
|
|
31
31
|
switch (handler) {
|
|
32
|
-
case 'IN':
|
|
32
|
+
case 'IN': {
|
|
33
33
|
if (k === 'objectId') {
|
|
34
34
|
filter[parseKey(k)] = { $in: where[k][1].map(ObjectId) };
|
|
35
35
|
} else {
|
|
@@ -38,11 +38,13 @@ module.exports = class extends Base {
|
|
|
38
38
|
};
|
|
39
39
|
}
|
|
40
40
|
break;
|
|
41
|
-
|
|
41
|
+
}
|
|
42
|
+
case 'NOT IN': {
|
|
42
43
|
filter[parseKey(k)] = {
|
|
43
44
|
$nin: k === 'objectId' ? where[k][1].map(ObjectId) : where[k][1],
|
|
44
45
|
};
|
|
45
46
|
break;
|
|
47
|
+
}
|
|
46
48
|
case 'LIKE': {
|
|
47
49
|
const first = where[k][1][0];
|
|
48
50
|
const last = where[k][1].slice(-1);
|
|
@@ -61,12 +63,14 @@ module.exports = class extends Base {
|
|
|
61
63
|
}
|
|
62
64
|
break;
|
|
63
65
|
}
|
|
64
|
-
case '!=':
|
|
66
|
+
case '!=': {
|
|
65
67
|
filter[parseKey(k)] = { $ne: where[k][1] };
|
|
66
68
|
break;
|
|
67
|
-
|
|
69
|
+
}
|
|
70
|
+
case '>': {
|
|
68
71
|
filter[parseKey(k)] = { $gt: where[k][1] };
|
|
69
72
|
break;
|
|
73
|
+
}
|
|
70
74
|
}
|
|
71
75
|
}
|
|
72
76
|
}
|
|
@@ -108,7 +112,7 @@ module.exports = class extends Base {
|
|
|
108
112
|
instance.order(`${desc} DESC`);
|
|
109
113
|
}
|
|
110
114
|
if (limit || offset) {
|
|
111
|
-
instance.limit(offset
|
|
115
|
+
instance.limit(offset ?? 0, limit);
|
|
112
116
|
}
|
|
113
117
|
if (field) {
|
|
114
118
|
instance.field(field);
|
|
@@ -25,7 +25,7 @@ module.exports = class extends Base {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
if (Array.isArray(filter[k])) {
|
|
28
|
-
if (filter[k][0] === 'IN' &&
|
|
28
|
+
if (filter[k][0] === 'IN' && filter[k][1].length === 0) {
|
|
29
29
|
continue;
|
|
30
30
|
}
|
|
31
31
|
if (think.isDate(filter[k][1])) {
|
|
@@ -47,7 +47,7 @@ module.exports = class extends Base {
|
|
|
47
47
|
instance.order({ [desc]: 'DESC' });
|
|
48
48
|
}
|
|
49
49
|
if (limit || offset) {
|
|
50
|
-
instance.limit(offset
|
|
50
|
+
instance.limit(offset ?? 0, limit);
|
|
51
51
|
}
|
|
52
52
|
if (field) {
|
|
53
53
|
field.push('id');
|
|
@@ -80,8 +80,8 @@ module.exports = class extends Base {
|
|
|
80
80
|
}
|
|
81
81
|
const date = new Date();
|
|
82
82
|
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
data.createdAt ??= date;
|
|
84
|
+
data.updatedAt ??= date;
|
|
85
85
|
|
|
86
86
|
const instance = this.model(this.tableName);
|
|
87
87
|
const id = await instance.add(data);
|
|
@@ -49,7 +49,7 @@ module.exports = class extends MySQL {
|
|
|
49
49
|
|
|
50
50
|
data[key.toLowerCase()] =
|
|
51
51
|
val instanceof Date ? think.datetime(val, 'YYYY-MM-DD HH:mm:ss') : val;
|
|
52
|
-
//
|
|
52
|
+
// oxlint-disable-next-line typescript/no-dynamic-delete
|
|
53
53
|
delete data[key];
|
|
54
54
|
});
|
|
55
55
|
|
|
@@ -62,13 +62,13 @@ module.exports = class extends MySQL {
|
|
|
62
62
|
try {
|
|
63
63
|
if (Array.isArray(result)) {
|
|
64
64
|
result.forEach((r) => {
|
|
65
|
-
r.count = parseInt(r.count);
|
|
65
|
+
r.count = Number.parseInt(r.count);
|
|
66
66
|
});
|
|
67
67
|
} else {
|
|
68
|
-
result = parseInt(result);
|
|
68
|
+
result = Number.parseInt(result);
|
|
69
69
|
}
|
|
70
|
-
} catch (
|
|
71
|
-
console.log(
|
|
70
|
+
} catch (err) {
|
|
71
|
+
console.log(err);
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
return result;
|