(ts) use markdown-it in admin and add typings for it

This commit is contained in:
Valentyne Stigloher 2024-06-14 20:53:33 +02:00
parent 043c1cce2d
commit b8ea0c8f54
6 changed files with 46 additions and 11 deletions

View File

@ -1,7 +1,7 @@
<script lang="ts">
import spelling from '../plugins/spelling.ts';
import { escapeHtml } from '../src/helpers.ts';
import { safeInlineMarkdown } from '../src/simpleMarkdown.js';
import { safeInlineMarkdown } from '../src/simpleMarkdown.ts';
export default spelling.extend({
props: {

View File

@ -53,7 +53,6 @@
"markdown-it-mark": "^4.0.0",
"markdown-it-sub": "^2.0.0",
"markdown-it-sup": "^2.0.0",
"marked": "0.7.0",
"mastodon": "^1.2.2",
"memorystore": "^1.6.7",
"multer": "^1.4.5-lts.1",
@ -106,6 +105,7 @@
"@types/jsonwebtoken": "^8.5.9",
"@types/lodash": "^4.14.197",
"@types/luxon": "^1.27.1",
"@types/markdown-it": "^14.0.1",
"@types/multer": "1.4.5",
"@types/node": "^20.11.5",
"@types/node-fetch": "^2.6.11",

22
pnpm-lock.yaml generated
View File

@ -122,9 +122,6 @@ dependencies:
markdown-it-sup:
specifier: ^2.0.0
version: 2.0.0
marked:
specifier: 0.7.0
version: 0.7.0
mastodon:
specifier: ^1.2.2
version: 1.2.2
@ -277,6 +274,9 @@ devDependencies:
'@types/luxon':
specifier: ^1.27.1
version: 1.27.1
'@types/markdown-it':
specifier: ^14.0.1
version: 14.1.1
'@types/multer':
specifier: 1.4.5
version: 1.4.5
@ -4867,6 +4867,10 @@ packages:
resolution: {integrity: sha512-OdhItUN0/Cx9+sWumdb3dxASoA0yStnZahvKcaSQmSR5qd7hZ6zhSriSQGUU3F8GkzFpIILKzut4xn9/GvhusA==}
dev: true
/@types/linkify-it@5.0.0:
resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==}
dev: true
/@types/lodash@4.14.197:
resolution: {integrity: sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==}
@ -4874,6 +4878,17 @@ packages:
resolution: {integrity: sha512-cPiXpOvPFDr2edMnOXlz3UBDApwUfR+cpizvxCy0n3vp9bz/qe8BWzHPIEFcy+ogUOyjKuCISgyq77ELZPmkkg==}
dev: true
/@types/markdown-it@14.1.1:
resolution: {integrity: sha512-4NpsnpYl2Gt1ljyBGrKMxFYAYvpqbnnkgP/i/g+NLpjEUa3obn1XJCur9YbEXKDAkaXqsR1LbDnGEJ0MmKFxfg==}
dependencies:
'@types/linkify-it': 5.0.0
'@types/mdurl': 2.0.0
dev: true
/@types/mdurl@2.0.0:
resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
dev: true
/@types/mime@1.3.5:
resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
dev: true
@ -11754,6 +11769,7 @@ packages:
resolution: {integrity: sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==}
engines: {node: '>=0.10.0'}
hasBin: true
dev: true
/mastodon@1.2.2:
resolution: {integrity: sha512-ixcYkzn6SorH8U2jNc1vwiX89EiVMjzd2aDYFtr191YY9rdoVo+owI6cQo2EjUnzg2RN9WxyBJ9KDuw+R4lt+w==}

View File

@ -10,7 +10,7 @@ import { caches } from '../../src/cache.ts';
import mailer from '../../src/mailer.ts';
import { profilesSnapshot } from './profile.ts';
import { archiveBan, liftBan } from '../ban.ts';
import marked from 'marked';
import markdownit from 'markdown-it';
import { loadCurrentUser } from './user.ts';
import { encodeTime, decodeTime, ulid } from 'ulid';
import Suml from 'suml';
@ -619,6 +619,8 @@ router.post('/admin/overwrite-sensitive/:username', handleErrorAsync(async (req,
return res.json(req.body.sensitive);
}));
const md = markdownit({ html: true });
router.get('/admin/moderation', handleErrorAsync(async (req, res) => {
if (!req.isGranted('panel')) {
return res.status(401).json({ error: 'Unauthorised' });
@ -630,10 +632,10 @@ router.get('/admin/moderation', handleErrorAsync(async (req, res) => {
susRegexes: fs.readFileSync(`${dir}/sus.txt`).toString('utf-8')
.split('\n')
.filter((x) => !!x && !x.startsWith('#')),
rulesUsers: marked(fs.readFileSync(`${dir}/rules-users.md`).toString('utf-8')),
rulesTerminology: marked(fs.readFileSync(`${dir}/rules-terminology.md`).toString('utf-8')),
rulesSources: marked(fs.readFileSync(`${dir}/rules-sources.md`).toString('utf-8')),
timesheets: marked(fs.readFileSync(`${dir}/timesheets.md`).toString('utf-8')),
rulesUsers: md.render(fs.readFileSync(`${dir}/rules-users.md`).toString('utf-8')),
rulesTerminology: md.render(fs.readFileSync(`${dir}/rules-terminology.md`).toString('utf-8')),
rulesSources: md.render(fs.readFileSync(`${dir}/rules-sources.md`).toString('utf-8')),
timesheets: md.render(fs.readFileSync(`${dir}/timesheets.md`).toString('utf-8')),
});
}));

View File

@ -15,4 +15,4 @@ const md = markdownit('zero')
.use(sup)
.use(mark);
export const safeInlineMarkdown = (text) => md.renderInline(text);
export const safeInlineMarkdown = (text: string): string => md.renderInline(text);

17
types/markdown-it.ts Normal file
View File

@ -0,0 +1,17 @@
declare module 'markdown-it-sub' {
import type { PluginSimple } from 'markdown-it';
const plugin: PluginSimple;
export default plugin;
}
declare module 'markdown-it-sup' {
import type { PluginSimple } from 'markdown-it';
const plugin: PluginSimple;
export default plugin;
}
declare module 'markdown-it-mark' {
import type { PluginSimple } from 'markdown-it';
const plugin: PluginSimple;
export default plugin;
}