aboutsummaryrefslogtreecommitdiffhomepage
path: root/shared/core-utils/renderer
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2023-07-31 14:34:36 +0200
committerChocobozzz <me@florianbigard.com>2023-08-11 15:02:33 +0200
commit3a4992633ee62d5edfbb484d9c6bcb3cf158489d (patch)
treee4510b39bdac9c318fdb4b47018d08f15368b8f0 /shared/core-utils/renderer
parent04d1da5621d25d59bd5fa1543b725c497bf5d9a8 (diff)
downloadPeerTube-3a4992633ee62d5edfbb484d9c6bcb3cf158489d.tar.gz
PeerTube-3a4992633ee62d5edfbb484d9c6bcb3cf158489d.tar.zst
PeerTube-3a4992633ee62d5edfbb484d9c6bcb3cf158489d.zip
Migrate server to ESM
Sorry for the very big commit that may lead to git log issues and merge conflicts, but it's a major step forward: * Server can be faster at startup because imports() are async and we can easily lazy import big modules * Angular doesn't seem to support ES import (with .js extension), so we had to correctly organize peertube into a monorepo: * Use yarn workspace feature * Use typescript reference projects for dependencies * Shared projects have been moved into "packages", each one is now a node module (with a dedicated package.json/tsconfig.json) * server/tools have been moved into apps/ and is now a dedicated app bundled and published on NPM so users don't have to build peertube cli tools manually * server/tests have been moved into packages/ so we don't compile them every time we want to run the server * Use isolatedModule option: * Had to move from const enum to const (https://www.typescriptlang.org/docs/handbook/enums.html#objects-vs-enums) * Had to explictely specify "type" imports when used in decorators * Prefer tsx (that uses esbuild under the hood) instead of ts-node to load typescript files (tests with mocha or scripts): * To reduce test complexity as esbuild doesn't support decorator metadata, we only test server files that do not import server models * We still build tests files into js files for a faster CI * Remove unmaintained peertube CLI import script * Removed some barrels to speed up execution (less imports)
Diffstat (limited to 'shared/core-utils/renderer')
-rw-r--r--shared/core-utils/renderer/html.ts71
-rw-r--r--shared/core-utils/renderer/index.ts2
-rw-r--r--shared/core-utils/renderer/markdown.ts24
3 files changed, 0 insertions, 97 deletions
diff --git a/shared/core-utils/renderer/html.ts b/shared/core-utils/renderer/html.ts
deleted file mode 100644
index 365bf7612..000000000
--- a/shared/core-utils/renderer/html.ts
+++ /dev/null
@@ -1,71 +0,0 @@
1export function getDefaultSanitizeOptions () {
2 return {
3 allowedTags: [ 'a', 'p', 'span', 'br', 'strong', 'em', 'ul', 'ol', 'li' ],
4 allowedSchemes: [ 'http', 'https' ],
5 allowedAttributes: {
6 'a': [ 'href', 'class', 'target', 'rel' ],
7 '*': [ 'data-*' ]
8 },
9 transformTags: {
10 a: (tagName: string, attribs: any) => {
11 let rel = 'noopener noreferrer'
12 if (attribs.rel === 'me') rel += ' me'
13
14 return {
15 tagName,
16 attribs: Object.assign(attribs, {
17 target: '_blank',
18 rel
19 })
20 }
21 }
22 }
23 }
24}
25
26export function getTextOnlySanitizeOptions () {
27 return {
28 allowedTags: [] as string[]
29 }
30}
31
32export function getCustomMarkupSanitizeOptions (additionalAllowedTags: string[] = []) {
33 const base = getDefaultSanitizeOptions()
34
35 return {
36 allowedTags: [
37 ...base.allowedTags,
38 ...additionalAllowedTags,
39 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'img'
40 ],
41 allowedSchemes: [
42 ...base.allowedSchemes,
43
44 'mailto'
45 ],
46 allowedAttributes: {
47 ...base.allowedAttributes,
48
49 'img': [ 'src', 'alt' ],
50 '*': [ 'data-*', 'style' ]
51 }
52 }
53}
54
55// Thanks: https://stackoverflow.com/a/12034334
56export function escapeHTML (stringParam: string) {
57 if (!stringParam) return ''
58
59 const entityMap: { [id: string ]: string } = {
60 '&': '&amp;',
61 '<': '&lt;',
62 '>': '&gt;',
63 '"': '&quot;',
64 '\'': '&#39;',
65 '/': '&#x2F;',
66 '`': '&#x60;',
67 '=': '&#x3D;'
68 }
69
70 return String(stringParam).replace(/[&<>"'`=/]/g, s => entityMap[s])
71}
diff --git a/shared/core-utils/renderer/index.ts b/shared/core-utils/renderer/index.ts
deleted file mode 100644
index 0ad29d782..000000000
--- a/shared/core-utils/renderer/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
1export * from './markdown'
2export * from './html'
diff --git a/shared/core-utils/renderer/markdown.ts b/shared/core-utils/renderer/markdown.ts
deleted file mode 100644
index ddf608d7b..000000000
--- a/shared/core-utils/renderer/markdown.ts
+++ /dev/null
@@ -1,24 +0,0 @@
1export const TEXT_RULES = [
2 'linkify',
3 'autolink',
4 'emphasis',
5 'link',
6 'newline',
7 'entity',
8 'list'
9]
10
11export const TEXT_WITH_HTML_RULES = TEXT_RULES.concat([
12 'html_inline',
13 'html_block'
14])
15
16export const ENHANCED_RULES = TEXT_RULES.concat([ 'image' ])
17export const ENHANCED_WITH_HTML_RULES = TEXT_WITH_HTML_RULES.concat([ 'image' ])
18
19export const COMPLETE_RULES = ENHANCED_WITH_HTML_RULES.concat([
20 'block',
21 'inline',
22 'heading',
23 'paragraph'
24])