From de52a4d2227add760a17d15858b6f2b292dce5d1 Mon Sep 17 00:00:00 2001 From: EliezerMCR Date: Sun, 13 Oct 2024 14:32:17 -0400 Subject: [PATCH 1/2] translate editjs to edit.ts, add comments to disable eslint for js files --- dump.rdb | Bin 0 -> 56520 bytes src/dummy.js | 0 src/posts/edit.js | 445 +++++++++++++++++++++++++--------------------- src/posts/edit.ts | 405 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 647 insertions(+), 203 deletions(-) create mode 100644 dump.rdb create mode 100644 src/dummy.js create mode 100644 src/posts/edit.ts diff --git a/dump.rdb b/dump.rdb new file mode 100644 index 0000000000000000000000000000000000000000..6a9f5a1a1df7f4d88a0869ffda56c715420c66dd GIT binary patch literal 56520 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 literal 0 HcmV?d00001 diff --git a/src/dummy.js b/src/dummy.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/posts/edit.js b/src/posts/edit.js index a63f34cc48..0f89e7168c 100644 --- a/src/posts/edit.js +++ b/src/posts/edit.js @@ -1,8 +1,17 @@ -'use strict'; - +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +/* eslint-disable @typescript-eslint/no-require-imports */ +/* eslint-disable no-multi-spaces */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ const validator = require('validator'); const _ = require('lodash'); - const db = require('../database'); const meta = require('../meta'); const topics = require('../topics'); @@ -13,205 +22,235 @@ const pubsub = require('../pubsub'); const utils = require('../utils'); const slugify = require('../slugify'); const translator = require('../translator'); - +const cache = require('./cache'); module.exports = function (Posts) { - pubsub.on('post:edit', (pid) => { - require('./cache').del(pid); - }); - - Posts.edit = async function (data) { - const canEdit = await privileges.posts.canEdit(data.pid, data.uid); - if (!canEdit.flag) { - throw new Error(canEdit.message); - } - const postData = await Posts.getPostData(data.pid); - if (!postData) { - throw new Error('[[error:no-post]]'); - } - - const topicData = await topics.getTopicFields(postData.tid, [ - 'cid', 'mainPid', 'title', 'timestamp', 'scheduled', 'slug', 'tags', - ]); - - await scheduledTopicCheck(data, topicData); - - const oldContent = postData.content; // for diffing purposes - const editPostData = getEditPostData(data, topicData, postData); - - if (data.handle) { - editPostData.handle = data.handle; - } - - const result = await plugins.hooks.fire('filter:post.edit', { - req: data.req, - post: editPostData, - data: data, - uid: data.uid, - }); - - const [editor, topic] = await Promise.all([ - user.getUserFields(data.uid, ['username', 'userslug']), - editMainPost(data, postData, topicData), - ]); - - await Posts.setPostFields(data.pid, result.post); - const contentChanged = data.content !== oldContent || - topic.renamed || - topic.tagsupdated; - - if (meta.config.enablePostHistory === 1 && contentChanged) { - await Posts.diffs.save({ - pid: data.pid, - uid: data.uid, - oldContent: oldContent, - newContent: data.content, - edited: editPostData.edited, - topic, - }); - } - await Posts.uploads.sync(data.pid); - - // Normalize data prior to constructing returnPostData (match types with getPostSummaryByPids) - postData.deleted = !!postData.deleted; - - const returnPostData = { ...postData, ...result.post }; - returnPostData.cid = topic.cid; - returnPostData.topic = topic; - returnPostData.editedISO = utils.toISOString(editPostData.edited); - returnPostData.changed = contentChanged; - returnPostData.oldContent = oldContent; - returnPostData.newContent = data.content; - - await topics.notifyFollowers(returnPostData, data.uid, { - type: 'post-edit', - bodyShort: translator.compile('notifications:user-edited-post', editor.username, topic.title), - nid: `edit_post:${data.pid}:uid:${data.uid}`, - }); - await topics.syncBacklinks(returnPostData); - - plugins.hooks.fire('action:post.edit', { post: _.clone(returnPostData), data: data, uid: data.uid }); - - require('./cache').del(String(postData.pid)); - pubsub.publish('post:edit', String(postData.pid)); - - await Posts.parsePost(returnPostData); - - return { - topic: topic, - editor: editor, - post: returnPostData, - }; - }; - - async function editMainPost(data, postData, topicData) { - const { tid } = postData; - const title = data.title ? data.title.trim() : ''; - - const isMain = parseInt(data.pid, 10) === parseInt(topicData.mainPid, 10); - if (!isMain) { - return { - tid: tid, - cid: topicData.cid, - title: topicData.title, - isMainPost: false, - renamed: false, - tagsupdated: false, - }; - } - - const newTopicData = { - tid: tid, - cid: topicData.cid, - uid: postData.uid, - mainPid: data.pid, - timestamp: rescheduling(data, topicData) ? data.timestamp : topicData.timestamp, - }; - if (title) { - newTopicData.title = title; - newTopicData.slug = `${tid}/${slugify(title) || 'topic'}`; - } - - const tagsupdated = Array.isArray(data.tags) && - !_.isEqual(data.tags, topicData.tags.map(tag => tag.value)); - - if (tagsupdated) { - const canTag = await privileges.categories.can('topics:tag', topicData.cid, data.uid); - if (!canTag) { - throw new Error('[[error:no-privileges]]'); - } - await topics.validateTags(data.tags, topicData.cid, data.uid, tid); - } - - const results = await plugins.hooks.fire('filter:topic.edit', { - req: data.req, - topic: newTopicData, - data: data, - }); - await db.setObject(`topic:${tid}`, results.topic); - if (tagsupdated) { - await topics.updateTopicTags(tid, data.tags); - } - const tags = await topics.getTopicTagsObjects(tid); - - if (rescheduling(data, topicData)) { - await topics.scheduled.reschedule(newTopicData); - } - - newTopicData.tags = data.tags; - newTopicData.oldTitle = topicData.title; - const renamed = title && translator.escape(validator.escape(String(title))) !== topicData.title; - plugins.hooks.fire('action:topic.edit', { topic: newTopicData, uid: data.uid }); - return { - tid: tid, - cid: newTopicData.cid, - uid: postData.uid, - title: validator.escape(String(title)), - oldTitle: topicData.title, - slug: newTopicData.slug || topicData.slug, - isMainPost: true, - renamed: renamed, - tagsupdated: tagsupdated, - tags: tags, - oldTags: topicData.tags, - rescheduled: rescheduling(data, topicData), - }; - } - - async function scheduledTopicCheck(data, topicData) { - if (!topicData.scheduled) { - return; - } - const canSchedule = await privileges.categories.can('topics:schedule', topicData.cid, data.uid); - if (!canSchedule) { - throw new Error('[[error:no-privileges]]'); - } - const isMain = parseInt(data.pid, 10) === parseInt(topicData.mainPid, 10); - if (isMain && isNaN(data.timestamp)) { - throw new Error('[[error:invalid-data]]'); - } - } - - function getEditPostData(data, topicData, postData) { - const editPostData = { - content: data.content, - editor: data.uid, - }; - - // For posts in scheduled topics, if edited before, use edit timestamp - editPostData.edited = topicData.scheduled ? (postData.edited || postData.timestamp) + 1 : Date.now(); - - // if rescheduling the main post - if (rescheduling(data, topicData)) { - // For main posts, use timestamp coming from user (otherwise, it is ignored) - editPostData.edited = data.timestamp; - editPostData.timestamp = data.timestamp; - } - - return editPostData; - } - - function rescheduling(data, topicData) { - const isMain = parseInt(data.pid, 10) === parseInt(topicData.mainPid, 10); - return isMain && topicData.scheduled && topicData.timestamp !== data.timestamp; - } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + pubsub.on('post:edit', (pid) => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + cache.del(pid.toString()); + }); + function rescheduling(data, topicData) { + const isMain = parseInt(data.pid, 10) === + parseInt(topicData.mainPid, 10); + return (isMain && + topicData.scheduled && + topicData.timestamp !== data.timestamp); + } + function scheduledTopicCheck(data, topicData) { + return __awaiter(this, void 0, void 0, function* () { + if (!topicData.scheduled) { + return; + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const canSchedule = yield privileges.categories.can('topics:schedule', topicData.cid, data.uid); + if (!canSchedule) { + throw new Error('[[error:no-privileges]]'); + } + const isMain = parseInt(data.pid, 10) === + parseInt(topicData.mainPid, 10); + if (isMain && (data.timestamp === undefined || isNaN(data.timestamp))) { + throw new Error('[[error:invalid-data]]'); + } + }); + } + function getEditPostData(data, topicData, postData) { + const editPostData = { + content: data.content, + editor: data.uid, + edited: 0, + }; + editPostData.edited = topicData.scheduled ? (postData.edited || postData.timestamp) + 1 : Date.now(); + if (rescheduling(data, topicData)) { + editPostData.edited = data.timestamp; + editPostData.timestamp = data.timestamp; + } + return editPostData; + } + function editMainPost(data, postData, topicData) { + return __awaiter(this, void 0, void 0, function* () { + const { tid } = postData; + const title = data.title ? data.title.trim() : ''; + const isMain = parseInt(data.pid, 10) === + parseInt(topicData.mainPid, 10); + if (!isMain) { + return { + tid: tid, + cid: topicData.cid, + uid: postData.uid, + title: topicData.title, + oldTitle: topicData.title, + slug: topicData.slug, + isMainPost: false, + renamed: false, + tagsupdated: false, + tags: topicData.tags, + oldTags: topicData.tags, + rescheduled: false, + }; + } + const newTopicData = { + cid: topicData.cid, + uid: postData.uid, + mainPid: data.pid, + timestamp: rescheduling(data, topicData) ? data.timestamp : topicData.timestamp, + }; + if (title) { + newTopicData.title = title; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + newTopicData.slug = `${tid}/${slugify(title) || 'topic'}`; + } + const tagsupdated = Array.isArray(data.tags) && + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + !_.isEqual(data.tags, topicData.tags.map(tag => tag.value)); + if (tagsupdated) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const canTag = yield privileges.categories.can('topics:tag', topicData.cid, data.uid); + if (!canTag) { + throw new Error('[[error:no-privileges]]'); + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + yield topics.validateTags(data.tags, topicData.cid, data.uid, tid); + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const hookResult = yield plugins.hooks.fire('filter:topic.edit', { + req: data.req, + topic: newTopicData, + data: data, + }); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + yield db.setObject(`topic:${tid}`, hookResult.topic); + if (tagsupdated) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + yield topics.updateTopicTags(tid, data.tags); + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const tags = yield topics.getTopicTagsObjects(tid); + if (rescheduling(data, topicData)) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + yield topics.scheduled.reschedule(newTopicData); + } + const renamed = title && + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + translator.escape(validator.escape(String(title))) !== + topicData.title; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + yield plugins.hooks.fire('action:topic.edit', { + topic: newTopicData, + uid: data.uid, + }); + return { + tid: tid, + cid: newTopicData.cid, + uid: postData.uid, + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + title: validator.escape(String(title)), + oldTitle: topicData.title, + slug: newTopicData.slug || topicData.slug, + isMainPost: true, + renamed: renamed, + tagsupdated: tagsupdated, + tags: tags, + oldTags: topicData.tags, + rescheduled: rescheduling(data, topicData), + }; + }); + } + Posts.edit = function (data) { + return __awaiter(this, void 0, void 0, function* () { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const canEdit = yield privileges.posts.canEdit(data.pid, data.uid); + if (!canEdit.flag) { + throw new Error(canEdit.message || '[[error:no-privileges]]'); + } + const postData = yield Posts.getPostData(data.pid); + if (!postData) { + throw new Error('[[error:no-post]]'); + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const topicData = yield topics.getTopicFields(postData.tid, [ + 'cid', + 'mainPid', + 'title', + 'timestamp', + 'scheduled', + 'slug', + 'tags', + ]); + yield scheduledTopicCheck(data, topicData); + const oldContent = postData.content; + const editPostData = getEditPostData(data, topicData, postData); + if (data.handle) { + editPostData.handle = data.handle; + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const pluginResult = yield plugins.hooks.fire('filter:post.edit', { + req: data.req, + post: editPostData, + data: data, + uid: data.uid, + }); + const [editor, topic] = yield Promise.all([ + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + user.getUserFields(data.uid, ['username', 'userslug']), + editMainPost(data, postData, topicData), + ]); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + yield Posts.setPostFields(data.pid, pluginResult.post); + const contentChanged = + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + data.content !== oldContent || topic.renamed || topic.tagsupdated; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + if (meta.config.enablePostHistory === 1 && contentChanged) { + yield Posts.diffs.save({ + pid: data.pid, + uid: data.uid, + oldContent: oldContent, + newContent: data.content, + edited: editPostData.edited, + topic, + }); + } + yield Posts.uploads.sync(data.pid); + postData.deleted = !!postData.deleted; + const returnPostData = Object.assign(Object.assign({}, postData), pluginResult.post); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + returnPostData.cid = topic.cid; + returnPostData.topic = topic; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + returnPostData.editedISO = utils.toISOString(editPostData.edited); + returnPostData.changed = contentChanged; + returnPostData.oldContent = oldContent; + returnPostData.newContent = data.content; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + yield topics.notifyFollowers(returnPostData, data.uid, { + type: 'post-edit', + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + bodyShort: translator.compile('notifications:user-edited-post', + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + editor.username, + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + topic.title), + nid: `edit_post:${data.pid}:uid:${data.uid}`, + }); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + yield topics.syncBacklinks(returnPostData); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + yield plugins.hooks.fire('action:post.edit', { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + post: _.cloneDeep(returnPostData), + data: data, + uid: data.uid, + }); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + cache.del(String(postData.pid)); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + pubsub.publish('post:edit', String(postData.pid)); + yield Posts.parsePost(returnPostData); + return { + topic: topic, + editor: editor, + post: returnPostData, + }; + }); + }; }; diff --git a/src/posts/edit.ts b/src/posts/edit.ts new file mode 100644 index 0000000000..fbbd74725e --- /dev/null +++ b/src/posts/edit.ts @@ -0,0 +1,405 @@ +/* eslint-disable @typescript-eslint/no-require-imports */ +/* eslint-disable no-multi-spaces */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +const validator = require('validator'); +const _ = require('lodash'); +const db = require('../database'); +const meta = require('../meta'); +const topics = require('../topics'); +const user = require('../user'); +const privileges = require('../privileges'); +const plugins = require('../plugins'); +const pubsub = require('../pubsub'); +const utils = require('../utils'); +const slugify = require('../slugify'); +const translator = require('../translator'); +const cache = require('./cache'); + +interface EditData { + pid: number | string; + uid: number; + content: string; + handle?: string; + timestamp?: number; + title?: string; + tags?: string[]; + req?: Request; +} + +interface CanEditResult { + flag: boolean; + message?: string; +} + +interface PostData { + pid: number; + tid: number; + uid: number; + content: string; + edited?: number; + timestamp: number; + deleted?: boolean; +} + +interface TopicData { + cid: number; + uid: number; + mainPid: number | string; + title: string; + timestamp: number; + scheduled: boolean; + slug: string; + tags: Array<{ value: string }>; +} + +interface EditPostData { + content: string; + editor: number; + edited: number; + timestamp?: number; + handle?: string; +} + +interface ReturnPostData extends PostData { + cid: number; + topic: TopicResult; + editedISO: string; + changed: boolean; + oldContent: string; + newContent: string; +} + +interface TopicResult { + tid: number; + cid: number; + uid: number; + title: string; + oldTitle: string; + slug: string; + isMainPost: boolean; + renamed: boolean; + tagsupdated: boolean; + tags: Array<{ value: string }>; + oldTags: Array<{ value: string }>; + rescheduled: boolean; +} + +interface PostsModule { + edit(data: EditData): Promise<{ + topic: TopicResult; + editor: { username: string; userslug: string }; + post: ReturnPostData; + }>; + getPostData(pid: number | string): Promise; + setPostFields(pid: number | string, data: Partial): Promise; + diffs: { + save(diffData: any): Promise; + }; + uploads: { + sync(pid: number | string): Promise; + }; + parsePost(postData: ReturnPostData): Promise; +} + +module.exports = function (Posts: PostsModule) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + pubsub.on('post:edit', (pid: number | string) => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + cache.del(pid.toString()); + }); + + function rescheduling(data: EditData, topicData: TopicData): boolean { + const isMain = + parseInt(data.pid as string, 10) === + parseInt(topicData.mainPid as string, 10); + return ( + isMain && + topicData.scheduled && + topicData.timestamp !== data.timestamp + ); + } + + async function scheduledTopicCheck(data: EditData, topicData: TopicData) { + if (!topicData.scheduled) { + return; + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const canSchedule = await privileges.categories.can( + 'topics:schedule', + topicData.cid, + data.uid + ); + if (!canSchedule) { + throw new Error('[[error:no-privileges]]'); + } + const isMain = + parseInt(data.pid as string, 10) === + parseInt(topicData.mainPid as string, 10); + if (isMain && (data.timestamp === undefined || isNaN(data.timestamp))) { + throw new Error('[[error:invalid-data]]'); + } + } + + function getEditPostData( + data: EditData, + topicData: TopicData, + postData: PostData + ): EditPostData { + const editPostData: EditPostData = { + content: data.content, + editor: data.uid, + edited: 0, + }; + + editPostData.edited = topicData.scheduled ? (postData.edited || postData.timestamp) + 1 : Date.now(); + + if (rescheduling(data, topicData)) { + editPostData.edited = data.timestamp!; + editPostData.timestamp = data.timestamp; + } + + return editPostData; + } + + async function editMainPost( + data: EditData, + postData: PostData, + topicData: TopicData + ): Promise { + const { tid } = postData; + const title = data.title ? data.title.trim() : ''; + + const isMain = + parseInt(data.pid as string, 10) === + parseInt(topicData.mainPid as string, 10); + if (!isMain) { + return { + tid: tid, + cid: topicData.cid, + uid: postData.uid, + title: topicData.title, + oldTitle: topicData.title, + slug: topicData.slug, + isMainPost: false, + renamed: false, + tagsupdated: false, + tags: topicData.tags, + oldTags: topicData.tags, + rescheduled: false, + }; + } + + const newTopicData: Partial = { + cid: topicData.cid, + uid: postData.uid, + mainPid: data.pid, + timestamp: rescheduling(data, topicData) ? data.timestamp : topicData.timestamp, + }; + + if (title) { + newTopicData.title = title; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + newTopicData.slug = `${tid}/${slugify(title) || 'topic'}`; + } + + const tagsupdated = + Array.isArray(data.tags) && + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + !_.isEqual( + data.tags, + topicData.tags.map(tag => tag.value) + ); + + if (tagsupdated) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const canTag = await privileges.categories.can( + 'topics:tag', + topicData.cid, + data.uid + ); + if (!canTag) { + throw new Error('[[error:no-privileges]]'); + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + await topics.validateTags(data.tags, topicData.cid, data.uid, tid); + } + + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const hookResult = await plugins.hooks.fire('filter:topic.edit', { + req: data.req, + topic: newTopicData, + data: data, + }); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + await db.setObject(`topic:${tid}`, hookResult.topic); + + if (tagsupdated) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + await topics.updateTopicTags(tid, data.tags); + } + + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const tags = await topics.getTopicTagsObjects(tid); + + if (rescheduling(data, topicData)) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + await topics.scheduled.reschedule(newTopicData as TopicData); + } + + const renamed = + title && + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + translator.escape(validator.escape(String(title))) !== + topicData.title; + + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + await plugins.hooks.fire('action:topic.edit', { + topic: newTopicData, + uid: data.uid, + }); + + return { + tid: tid, + cid: newTopicData.cid, + uid: postData.uid, + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + title: validator.escape(String(title)), + oldTitle: topicData.title, + slug: newTopicData.slug || topicData.slug, + isMainPost: true, + renamed: renamed, + tagsupdated: tagsupdated, + tags: tags, + oldTags: topicData.tags, + rescheduled: rescheduling(data, topicData), + }; + } + + Posts.edit = async function (data: EditData) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const canEdit: CanEditResult = await privileges.posts.canEdit( + data.pid, + data.uid + ); + if (!canEdit.flag) { + throw new Error(canEdit.message || '[[error:no-privileges]]'); + } + + const postData: PostData = await Posts.getPostData(data.pid); + if (!postData) { + throw new Error('[[error:no-post]]'); + } + + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const topicData: TopicData = await topics.getTopicFields(postData.tid, [ + 'cid', + 'mainPid', + 'title', + 'timestamp', + 'scheduled', + 'slug', + 'tags', + ]); + + await scheduledTopicCheck(data, topicData); + + const oldContent: string = postData.content; + const editPostData: EditPostData = getEditPostData( + data, + topicData, + postData + ); + + if (data.handle) { + editPostData.handle = data.handle; + } + + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const pluginResult = await plugins.hooks.fire('filter:post.edit', { + req: data.req, + post: editPostData, + data: data, + uid: data.uid, + }); + + const [editor, topic] = await Promise.all([ + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + user.getUserFields(data.uid, ['username', 'userslug']), + editMainPost(data, postData, topicData), + ]); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + await Posts.setPostFields(data.pid, pluginResult.post); + const contentChanged = + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + data.content !== oldContent || topic.renamed || topic.tagsupdated; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + if (meta.config.enablePostHistory === 1 && contentChanged) { + await Posts.diffs.save({ + pid: data.pid, + uid: data.uid, + oldContent: oldContent, + newContent: data.content, + edited: editPostData.edited, + topic, + }); + } + + await Posts.uploads.sync(data.pid); + + postData.deleted = !!postData.deleted; + + const returnPostData: ReturnPostData = { + ...postData, + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + ...pluginResult.post, + }; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + returnPostData.cid = topic.cid; + returnPostData.topic = topic; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + returnPostData.editedISO = utils.toISOString(editPostData.edited); + returnPostData.changed = contentChanged; + returnPostData.oldContent = oldContent; + returnPostData.newContent = data.content; + + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + await topics.notifyFollowers(returnPostData, data.uid, { + type: 'post-edit', + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + bodyShort: translator.compile( + 'notifications:user-edited-post', + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + editor.username, + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + topic.title + ), + nid: `edit_post:${data.pid}:uid:${data.uid}`, + }); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + await topics.syncBacklinks(returnPostData); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + await plugins.hooks.fire('action:post.edit', { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + post: _.cloneDeep(returnPostData), + data: data, + uid: data.uid, + }); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + cache.del(String(postData.pid)); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + pubsub.publish('post:edit', String(postData.pid)); + + await Posts.parsePost(returnPostData); + + return { + topic: topic, + editor: editor, + post: returnPostData, + }; + }; +} From 11584a8418a2ad733be35cf1b90baa07f3cd8ef0 Mon Sep 17 00:00:00 2001 From: EliezerMCR Date: Tue, 15 Oct 2024 21:52:32 -0400 Subject: [PATCH 2/2] fix ts --- dump.rdb | Bin 56520 -> 57340 bytes src/posts/edit.js | 4 +++- src/posts/edit.ts | 11 +++++++---- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/dump.rdb b/dump.rdb index 6a9f5a1a1df7f4d88a0869ffda56c715420c66dd..822e8b2a94e6acbcb642b8505665dc3750f162ca 100644 GIT binary patch delta 4311 zcmbVPXK+(j8r73!$+n){aKQy67ul9A+v>7qiU3n$FT{ivx>cTx61P}3brYKu2t#N- zp*RFD0ZcZb#&4F;F?AS{B@jvyU^m*`%xp3VEG5~=1{UwV?;*#@%>LLN&l~IAckB0^ zbG~!W9}0VPB5bX(z@8RU^HW4ifb$mCadoGhUD1-CSXYCuu(64A)wyfA9?4_LL+9Nv z)`%WPinWevh>jHbAK??_aXC!lSE4%Z{n;Vk}uetl5nU-jgXvo;wB|0X3?w znvjy}L9=E7ZoH{x3b0?H#?S**u)V9nR;L_WXDHBlSl_K_Sj17Qz(V# z(hbLGd}unXCXrUHyQqh{!;Y$bTAVtgf#I4Gn(G`+3|of1au;LmJLRRyA`~X)V&%jP z+`KXo>+RW?S+pQxiQ;iPjW}FKli;_kKyOAKPOjgI{oHY64W8&#aPztPW{1hSb}dQM zD)K~2B(mm3jhsBX(G>_RXlU{l3Ym?SHFFD_i){ASae-!6U86GC_5=t~VI1lC0M9*Nh*RFx zShp_+-yjon%Mzh^GYJjP?!by}8$Yt0#5r-kovB1=gcdFP1`&Lm?AGGqSUFa0NJp%m zLNXRZ^l`X3T8W|FE|UEc5?~uPj(8Kcd>vLEOb`%3&@8lPZ%f4a+BIl%YDhba`Nz|7 z-kFGZk0(K2vI9|{vBH?(dKqe0e~B;i^~lYfhQ^$1MnzJlC0JrHbZ9yfQ{wUbP&Gz9 z)y2o@vKe9M1p*0iXgWbxBDSoK#&6v!EdDGS8{NzJxQ5qd_{Yf=2%oqN?^i1EZ_5ZTV&K_XBBAvNUqJ(EdGk&eq`!wD`$%kH7M}Ziax6D#oSC$)&7P08_w0 zGo6)1<{U^KnLz!G6{$_a3}m)Y_IueVkKgMsIbb|80MTWUQr0SDm7>{Mk;A_{C5ZtW zzJ-5AJBUH#LY9yu5p~%bDBe4ZTX|L~(JPVYk!Y)Hg?1ZJs4=fIMl3x@=}%jWp0KO} z!^%U6{ub#6#L0#p$QOu{vPX&Aa~g5cmlW-M$~jdwm2CYPO;|jOyS|jXA8wiG65qIBLZL3(zr6{W{nkxO9d zEYB8%h*B1t%rt`(%`}78(&9lg*txEYpE^2;VGP2YQ~*P8JDV!P?f&4d5voX0b_wIm zX0l}id5G9%yY04;60?abG*~UBLQAQ~ROmMPOyt$3hdsMj-HL5N>znVvL1mpEhWGeRBs5$^aFzbm#}X7YlK=X zKI*25nt_He&vGUpft`Qtjj9_;Erd-)tStAnQoJl+70^%dM*eaCqhU8 z1<8$FX^5`vLizAac#bB(Gk*s;u6VK^kUQuRYAUjctPL+$3$;ewA;*n(D*4*UNsNMJ zn;RPa9x&a>QdQBDV$9-%;YZxtW|UU;f?cH}gIycc7;>P1Kskrh!8K^nsBvj=IM!Zc zX|-PW&KlFBPgkVgq|}yZ1GFmC*=jidxEJcDj+s7XY~c)}`Ps>ZwdNAe_iUB_>G3lP zM--vU>WDELCL4?ni`8K^7nzL~+_4UAwc3qdm%+`IcuOs%2D8Cp^V&EQXW?8WHn-Vr zv6om&O8$Y&@i_1X;vlhx%lm^_@zZ800&UZ2%tvKoC}uc5^1vv@eO&F1x% z_-tmv279TY)Z%fQIjh&@GW$#xyUSv+_&AfrY;u`()=Yh76W83*R6n^P(~((B3{z7v zSL^2%b4}!vuhtcqm+4sY;)^IArV--s_cK0h{KGO*cUgpWCxP!wwOgHIWn)P=$~9q; zQAAYRdUq1((d=uqb@bdFBMk-0|+hLrppP9=lv#Ujax=cBVoRat^f zqmukh_*p_^(LvoQ5Qr>TwE{vxYUJ{Xq~{9Gra#ry9b}R`L4@w)-WCeyqtc%Xr@ z&L7jZ@&^N>7<_AX;>y`#JdE_%*wlXY#_>zH(%*UZFFC{+QqQ_|Mi%i5^l-`8wRZ;< zDt^m8azM(ohbI$>IuK)VLV>c+=i%Y-WrE!(z+vKiWA&F|7#50KB*t&~4ne(=A31&o zgP!gj;z{NyW%9;`K(oUb9@fZL?l{LVEr{Ql$ra8W|tHhKbfpKB!;9@Duof46%fATu=`t4s$C}-dw@vzDJA@ z9d&JkI4U-c?wg7jJ?`}g@wkmGU4msjzWwERR@G+-D!E00)6T>AYe|keg7^Y9c*mW$ zygD%^ve8w;&G&N)0?J^O)})TUn!=1?hupR19MeBuL5sOnKG?BoN{YiM$<`1-0k;>o)Nm(NxW z3cWXs-A$a@DAXyphd*Z|tWvE{-frwb9`Y0wd z(N1xj=w`>^>l7p2zNStJ4fy3=aO{jWbQ6+U=(v;X#6zYH*Yy`>nT>v&cy=kSUsL~V z3<`wZ^Y(MCEUEiBO1eKt)jGsBB;eu=Ln}>byGF-E z>4Gu216mqu8(dz8AT<6uLehd@agRlk5sa}Y1OA$N7b#?1R?yI+m*fOv^)Z~Q$urO4 zX{c`|H@>`}smCbE3MLul&90h&HfZiCl4J*yioz)q135vaI2b!eR@>ll)oQ}SYy9=3 zi=}5yF!sAJDhAanrCC8MnL0BVv$9%Wy@Cv83WKpLstcFymuiEywpom%S5^E(;^J_A zYJ;qpMxkt)m@Q1x(d&=QKpQ(}iH-l9m5;I;tx{FU$-E$jJo;o?WbgOMf8poUP%iz`}*`TDh6J`xB~YqyL#vMGquW_!-o`pE25ma_N$2FTjoKR5$(x%YnW_w)Mx z)GfJqQqpFL==bDG@4MF5+Dc+7Y!&ZTceso0bJnVrG1WCTYsHFkTaW0W=*P4##pp9< zp*=SY!!A?c9x_eLO+iDB5gl3!@@CUNry~8dk*==7+E@+`7VZ*riP$L(#)yr>zs{+! zTarc0NY4tztrj!glL&i`lFvTvN^m3T6=FcILW}Mc9d>W($B5cWB0&tn7^*bW`{YQS zv;^}z84h<<@STs7?q)G(7D{ximf={897gFH6!q%yeb$To{y9Meh6@%{ zt}4doOTs1&kIoN-QsIe$d@n>R+_C7;rgno8*;zi&8gxk6+J_(VIqc2#fn%-;x`txB zzv4&S^It%p&tBx1E61hKa74};#3#pN@Y8FdtdR6VBd+V>U`~}I@2~|=tkUABG+(R= zpV;NTMTezlKS0Ig2*ifwlPMD`dF}!#$Se;>hb@?J=v}SFk)!dr@;Ha=)0*~FGj7S~ z#j$h6Dg%Wfzn@b=_jg62>ogR@r=ip!-_=)WZri_n)N7nC^QnTz$yVo10Eo%@!X zI2P!NuE%4=DkqxkDH_utz19u;bs;$VbOR)zQCJ&yhHq~RApGis>j?7vo>dlff6>%V zM50kulfE5QIbyL?b=@G@AJYy zQ<0zip-SQq{r=?+j(Cl#^z;?M_)5trqlS)i$2^aH{Gubt1llRCxW4!@f1)6iplc_G zqZfT}+vTN^xH2OQVzQm; z$SG9k3vVx@mreIY?)**^wQ^8q1R$^bF0LM;96qhV&6#(o9(}Mob+e#AJya#pV+zbB zQ-!mb2MD5f642SeRkXdm3NuEHf%qoQ$*Y79xLM3!bW)fwlqzZYHdIiF?2mggLRKB zCSemid*iK}FfT~LJjFGtB+uFWBSC`CLQI)4H7>gZ}vj>kVK%(L;=#HZHF3n+FS(Xd>Y&fI|Xv6l)*F& z{&CBZ;NMNA3AK&bJn^8@f(vQB+^8l(L*NLA604%e@NmVym){c9_?wUy#hiu7y*;&ong~k-r`^hsbF~Dg zPc>uOkPq(~UN6OvM9V+innA?WAV@|iMi1S?mqCfN&FNmg@U(UkJ^kJ(8dH!{G;@Mf zNTK2>32MRK6v}6V56-59pzLHn69$F`b+~T*5*J&XO24jK$?NxP3IA4Asuz4q!^aJl zvG{P~%@YPO!P(^;y7Kh&6@fUQ@kT(A2C>Hv!n`z*hJ#74Nt$5%i3~MiNGda&=5Go* zhaScA{Hx3Sh+v2wGODzAwZdSaZlI$-QdGwKq$#xA$8?fOt|F1cK6Tyu+`itsPGV3%d-hgr-j$+ZREl_YwZ&V?tJN5N~azP+gt= z3^nW#46M6|=LGM$shy9ZiOKlKXV*dQgj^3w9E71r{; zw34*-()AR&=X8=FZ;?npmfnd`AJCVE`=3eRHd=u?CVY@cp27B7s%MW3-L z!)dfkGmKU1EeC`!NqBu5KFo^brx$98ph`BaIWzYwmxts>jfjgMi!>M9yAmed^zG#u z9O_@JWWNYA12qwrdFT3~e*TV50t17QRNgBk4c}hI>=j9=ebOI^yrk6QY zC9##2$nK8*Y8;)@ZwmO|=dq4p;JtZ2w}Q5ZSu2~^4Clfop0q=%7wmTSg{b8Jf7GaI zj6J@-lsJ>I9hotEjU5RAYHx`wW4RpzFa5n7e#z=H8XU)~HAw>XZ z!Exu>{qqr+ewxD{q*PDB+${uwaP-+zX+lG*nj)}t#7=`@rj(vrgAGGL>Ww||q7a8i zyt1~ew9;BvUt=>k>^L^$XKU!Oh(aB{78#>&t;s>+L5Ye~p!auF)7emlZ#^xk&`S>Y9aQU3uN4mX; setPostFields(pid: number | string, data: Partial): Promise; diffs: { + // eslint-disable-next-line @typescript-eslint/no-explicit-any save(diffData: any): Promise; }; uploads: { @@ -329,11 +330,13 @@ module.exports = function (Posts: PostsModule) { editMainPost(data, postData, topicData), ]); - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any, + @typescript-eslint/no-unsafe-member-access + */ await Posts.setPostFields(data.pid, pluginResult.post); const contentChanged = - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call - data.content !== oldContent || topic.renamed || topic.tagsupdated; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + data.content !== oldContent || topic.renamed || topic.tagsupdated; // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call if (meta.config.enablePostHistory === 1 && contentChanged) { await Posts.diffs.save({ @@ -402,4 +405,4 @@ module.exports = function (Posts: PostsModule) { post: returnPostData, }; }; -} +};