securemark 0.244.2 → 0.247.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/.eslintrc.json +26 -0
- package/CHANGELOG.md +12 -0
- package/dist/index.js +9304 -0
- package/global.test.d.ts +6 -2
- package/index.ts +4 -0
- package/karma.conf.js +20 -39
- package/markdown.d.ts +31 -19
- package/package.json +29 -34
- package/src/parser/block/extension/table.test.ts +25 -30
- package/src/parser/block/extension/table.ts +38 -38
- package/src/parser/block/reply/quote.test.ts +1 -1
- package/src/parser/inline/math.test.ts +51 -20
- package/src/parser/inline/math.ts +24 -15
- package/src/parser/inline.test.ts +2 -1
- package/src/parser/inline.ts +3 -3
- package/src/renderer/render/code.ts +1 -1
- package/src/renderer/render/media/twitter.ts +2 -2
- package/tsconfig.json +10 -7
- package/webpack.config.js +129 -0
- package/dist/securemark.js +0 -8578
- package/gulpfile.js +0 -208
- package/package-lock.json +0 -11857
|
@@ -12,21 +12,24 @@ describe('Unit: parser/inline/math', () => {
|
|
|
12
12
|
assert.deepStrictEqual(inspect(parser('$$')), undefined);
|
|
13
13
|
assert.deepStrictEqual(inspect(parser('$$$')), undefined);
|
|
14
14
|
assert.deepStrictEqual(inspect(parser('$0 $')), undefined);
|
|
15
|
-
assert.deepStrictEqual(inspect(parser('
|
|
16
|
-
assert.deepStrictEqual(inspect(parser('
|
|
17
|
-
assert.deepStrictEqual(inspect(parser('
|
|
18
|
-
assert.deepStrictEqual(inspect(parser('
|
|
19
|
-
assert.deepStrictEqual(inspect(parser('
|
|
20
|
-
assert.deepStrictEqual(inspect(parser('$0 -$')), undefined);
|
|
21
|
-
assert.deepStrictEqual(inspect(parser('$0 - $')), undefined);
|
|
22
|
-
assert.deepStrictEqual(inspect(parser('$0 + $')), undefined);
|
|
23
|
-
assert.deepStrictEqual(inspect(parser('$-0$')), undefined);
|
|
24
|
-
assert.deepStrictEqual(inspect(parser('$-0$-1')), undefined);
|
|
25
|
-
assert.deepStrictEqual(inspect(parser('$-a$')), undefined);
|
|
26
|
-
assert.deepStrictEqual(inspect(parser('$-a$-b')), undefined);
|
|
15
|
+
assert.deepStrictEqual(inspect(parser('$-0, $-1')), undefined);
|
|
16
|
+
assert.deepStrictEqual(inspect(parser('$-0 and $-1')), undefined);
|
|
17
|
+
assert.deepStrictEqual(inspect(parser('$-0と$-1')), undefined);
|
|
18
|
+
assert.deepStrictEqual(inspect(parser('$-a $-b')), undefined);
|
|
19
|
+
assert.deepStrictEqual(inspect(parser('$-a\\ $-b')), undefined);
|
|
27
20
|
assert.deepStrictEqual(inspect(parser('$a $')), undefined);
|
|
28
|
-
assert.deepStrictEqual(inspect(parser('
|
|
29
|
-
assert.deepStrictEqual(inspect(parser('
|
|
21
|
+
assert.deepStrictEqual(inspect(parser('$-a"$-b"')), undefined);
|
|
22
|
+
assert.deepStrictEqual(inspect(parser('$-a\\"$-b\\"')), undefined);
|
|
23
|
+
assert.deepStrictEqual(inspect(parser('$a"$')), undefined);
|
|
24
|
+
assert.deepStrictEqual(inspect(parser('$-a($-b)')), undefined);
|
|
25
|
+
assert.deepStrictEqual(inspect(parser('$-a\\($-b\\)')), undefined);
|
|
26
|
+
assert.deepStrictEqual(inspect(parser('$a($')), undefined);
|
|
27
|
+
assert.deepStrictEqual(inspect(parser('$-a[$-b]')), undefined);
|
|
28
|
+
assert.deepStrictEqual(inspect(parser('$-a\\[$-b\\]')), undefined);
|
|
29
|
+
assert.deepStrictEqual(inspect(parser('$a[$')), undefined);
|
|
30
|
+
assert.deepStrictEqual(inspect(parser('$-a{$-b}')), undefined);
|
|
31
|
+
assert.deepStrictEqual(inspect(parser('$-a\\{$-b\\}')), undefined);
|
|
32
|
+
assert.deepStrictEqual(inspect(parser('$a{$')), undefined);
|
|
30
33
|
assert.deepStrictEqual(inspect(parser('$a$b')), undefined);
|
|
31
34
|
assert.deepStrictEqual(inspect(parser('$a$b$')), undefined);
|
|
32
35
|
assert.deepStrictEqual(inspect(parser('$ $')), undefined);
|
|
@@ -35,35 +38,46 @@ describe('Unit: parser/inline/math', () => {
|
|
|
35
38
|
assert.deepStrictEqual(inspect(parser('$\n$')), undefined);
|
|
36
39
|
assert.deepStrictEqual(inspect(parser('$a\\$\nb$')), undefined);
|
|
37
40
|
assert.deepStrictEqual(inspect(parser('$a\\$\\\nb$')), undefined);
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('$`"$')), undefined);
|
|
42
|
+
assert.deepStrictEqual(inspect(parser('$``a"$0')), undefined);
|
|
43
|
+
assert.deepStrictEqual(inspect(parser('$``a""$')), undefined);
|
|
44
|
+
assert.deepStrictEqual(inspect(parser('$```a""$')), undefined);
|
|
45
|
+
assert.deepStrictEqual(inspect(parser('$``\n"$')), undefined);
|
|
46
|
+
assert.deepStrictEqual(inspect(parser('$``a\\$\nb"$')), undefined);
|
|
47
|
+
assert.deepStrictEqual(inspect(parser('$``a\\$\\\nb"$')), undefined);
|
|
48
|
+
assert.deepStrictEqual(inspect(parser('$"$')), undefined);
|
|
49
|
+
assert.deepStrictEqual(inspect(parser('$}$')), undefined);
|
|
38
50
|
assert.deepStrictEqual(inspect(parser('${')), undefined);
|
|
39
51
|
assert.deepStrictEqual(inspect(parser('${a')), undefined);
|
|
40
52
|
assert.deepStrictEqual(inspect(parser('${$')), undefined);
|
|
41
53
|
assert.deepStrictEqual(inspect(parser('${}')), undefined);
|
|
42
54
|
assert.deepStrictEqual(inspect(parser('${a} $')), undefined);
|
|
43
|
-
assert.deepStrictEqual(inspect(parser('${a}b$')), undefined);
|
|
44
|
-
assert.deepStrictEqual(inspect(parser('${a}{b}$')), undefined);
|
|
45
55
|
assert.deepStrictEqual(inspect(parser('${a{b}$')), undefined);
|
|
46
56
|
assert.deepStrictEqual(inspect(parser('${a}b}$')), undefined);
|
|
57
|
+
assert.deepStrictEqual(inspect(parser('${$}$')), undefined);
|
|
47
58
|
assert.deepStrictEqual(inspect(parser('${\\}$')), undefined);
|
|
48
59
|
assert.deepStrictEqual(inspect(parser('${\n}$')), undefined);
|
|
49
60
|
assert.deepStrictEqual(inspect(parser('${a\\$\nb}$')), undefined);
|
|
50
61
|
assert.deepStrictEqual(inspect(parser('${a\\$\\\nb}$')), undefined);
|
|
62
|
+
assert.deepStrictEqual(inspect(parser('$\\begin{}$')), [['<span class="invalid" translate="no">$\\begin{}$</span>'], '']);
|
|
63
|
+
assert.deepStrictEqual(inspect(parser('$\\huge{}$')), [['<span class="invalid" translate="no">$\\huge{}$</span>'], '']);
|
|
64
|
+
assert.deepStrictEqual(inspect(parser('$\\Begin{}$')), [['<span class="invalid" translate="no">$\\Begin{}$</span>'], '']);
|
|
51
65
|
assert.deepStrictEqual(inspect(parser('${\\begin}$')), [['<span class="invalid" translate="no">${\\begin}$</span>'], '']);
|
|
52
|
-
assert.deepStrictEqual(inspect(parser('${\\Huge}$')), [['<span class="invalid" translate="no">${\\Huge}$</span>'], '']);
|
|
53
|
-
assert.deepStrictEqual(inspect(parser('${a}b$')), undefined);
|
|
54
66
|
assert.deepStrictEqual(inspect(parser(' ${a}$')), undefined);
|
|
55
67
|
});
|
|
56
68
|
|
|
57
69
|
it('basic', () => {
|
|
58
70
|
assert.deepStrictEqual(inspect(parser('$0$')), [['<span class="math" translate="no" data-src="$0$">$0$</span>'], '']);
|
|
59
71
|
assert.deepStrictEqual(inspect(parser('$0$$')), [['<span class="math" translate="no" data-src="$0$">$0$</span>'], '$']);
|
|
72
|
+
assert.deepStrictEqual(inspect(parser('$00$')), [['<span class="math" translate="no" data-src="$00$">$00$</span>'], '']);
|
|
73
|
+
assert.deepStrictEqual(inspect(parser('$-0$')), [['<span class="math" translate="no" data-src="$-0$">$-0$</span>'], '']);
|
|
60
74
|
assert.deepStrictEqual(inspect(parser('$0-1$')), [['<span class="math" translate="no" data-src="$0-1$">$0-1$</span>'], '']);
|
|
61
75
|
assert.deepStrictEqual(inspect(parser('$0+1$')), [['<span class="math" translate="no" data-src="$0+1$">$0+1$</span>'], '']);
|
|
62
76
|
assert.deepStrictEqual(inspect(parser('$0*1$')), [['<span class="math" translate="no" data-src="$0*1$">$0*1$</span>'], '']);
|
|
63
77
|
assert.deepStrictEqual(inspect(parser('$0/1$')), [['<span class="math" translate="no" data-src="$0/1$">$0/1$</span>'], '']);
|
|
64
78
|
assert.deepStrictEqual(inspect(parser('$a$')), [['<span class="math" translate="no" data-src="$a$">$a$</span>'], '']);
|
|
65
79
|
assert.deepStrictEqual(inspect(parser('$a$$')), [['<span class="math" translate="no" data-src="$a$">$a$</span>'], '$']);
|
|
66
|
-
assert.deepStrictEqual(inspect(parser('$a
|
|
80
|
+
assert.deepStrictEqual(inspect(parser('$a-b$')), [['<span class="math" translate="no" data-src="$a-b$">$a-b$</span>'], '']);
|
|
67
81
|
assert.deepStrictEqual(inspect(parser('$a+b$')), [['<span class="math" translate="no" data-src="$a+b$">$a+b$</span>'], '']);
|
|
68
82
|
assert.deepStrictEqual(inspect(parser('$a*b$')), [['<span class="math" translate="no" data-src="$a*b$">$a*b$</span>'], '']);
|
|
69
83
|
assert.deepStrictEqual(inspect(parser('$a/b$')), [['<span class="math" translate="no" data-src="$a/b$">$a/b$</span>'], '']);
|
|
@@ -71,6 +85,7 @@ describe('Unit: parser/inline/math', () => {
|
|
|
71
85
|
assert.deepStrictEqual(inspect(parser(`$a''$`)), [[`<span class="math" translate="no" data-src="$a''$">$a''$</span>`], '']);
|
|
72
86
|
assert.deepStrictEqual(inspect(parser('$a$[A](a)')), [['<span class="math" translate="no" data-src="$a$">$a$</span>'], '[A](a)']);
|
|
73
87
|
assert.deepStrictEqual(inspect(parser('$A$')), [['<span class="math" translate="no" data-src="$A$">$A$</span>'], '']);
|
|
88
|
+
assert.deepStrictEqual(inspect(parser('$-a$')), [['<span class="math" translate="no" data-src="$-a$">$-a$</span>'], '']);
|
|
74
89
|
assert.deepStrictEqual(inspect(parser('$\\$$')), [['<span class="math" translate="no" data-src="$\\$$">$\\$$</span>'], '']);
|
|
75
90
|
assert.deepStrictEqual(inspect(parser('$\\Pi$')), [['<span class="math" translate="no" data-src="$\\Pi$">$\\Pi$</span>'], '']);
|
|
76
91
|
assert.deepStrictEqual(inspect(parser('$\\ 0$')), [['<span class="math" translate="no" data-src="$\\ 0$">$\\ 0$</span>'], '']);
|
|
@@ -86,6 +101,18 @@ describe('Unit: parser/inline/math', () => {
|
|
|
86
101
|
assert.deepStrictEqual(inspect(parser('$f(x)$')), [['<span class="math" translate="no" data-src="$f(x)$">$f(x)$</span>'], '']);
|
|
87
102
|
assert.deepStrictEqual(inspect(parser('$f: x \\to y$')), [['<span class="math" translate="no" data-src="$f: x \\to y$">$f: x \\to y$</span>'], '']);
|
|
88
103
|
assert.deepStrictEqual(inspect(parser('$k$-space')), [['<span class="math" translate="no" data-src="$k$">$k$</span>'], '-space']);
|
|
104
|
+
assert.deepStrictEqual(inspect(parser('$`$')), [['<span class="math" translate="no" data-src="$`$">$`$</span>'], '']);
|
|
105
|
+
assert.deepStrictEqual(inspect(parser('$`"a$')), [['<span class="math" translate="no" data-src="$`"a$">$`"a$</span>'], '']);
|
|
106
|
+
assert.deepStrictEqual(inspect(parser('$``$')), [['<span class="math" translate="no" data-src="$``$">$``$</span>'], '']);
|
|
107
|
+
assert.deepStrictEqual(inspect(parser('$``"$')), [['<span class="math" translate="no" data-src="$``"$">$``"$</span>'], '']);
|
|
108
|
+
assert.deepStrictEqual(inspect(parser('$``""a$')), [['<span class="math" translate="no" data-src="$``""a$">$``""a$</span>'], '']);
|
|
109
|
+
assert.deepStrictEqual(inspect(parser('$``a"$')), [['<span class="math" translate="no" data-src="$``a"$">$``a"$</span>'], '']);
|
|
110
|
+
assert.deepStrictEqual(inspect(parser('$``$"$')), [['<span class="math" translate="no" data-src="$``$">$``$</span>'], '"$']);
|
|
111
|
+
assert.deepStrictEqual(inspect(parser('$``\\"$')), [['<span class="math" translate="no" data-src="$``\\"$">$``\\"$</span>'], '']);
|
|
112
|
+
assert.deepStrictEqual(inspect(parser('$``a``b"c"$')), [['<span class="math" translate="no" data-src="$``a``b"c"$">$``a``b"c"$</span>'], '']);
|
|
113
|
+
assert.deepStrictEqual(inspect(parser('$```"$')), [['<span class="math" translate="no" data-src="$```"$">$```"$</span>'], '']);
|
|
114
|
+
assert.deepStrictEqual(inspect(parser('$````""$')), [['<span class="math" translate="no" data-src="$````""$">$````""$</span>'], '']);
|
|
115
|
+
assert.deepStrictEqual(inspect(parser('$a{b}$')), [['<span class="math" translate="no" data-src="$a{b}$">$a{b}$</span>'], '']);
|
|
89
116
|
assert.deepStrictEqual(inspect(parser('${}$')), [['<span class="math" translate="no" data-src="${}$">${}$</span>'], '']);
|
|
90
117
|
assert.deepStrictEqual(inspect(parser('${ }$')), [['<span class="math" translate="no" data-src="${ }$">${ }$</span>'], '']);
|
|
91
118
|
assert.deepStrictEqual(inspect(parser('${a}$')), [['<span class="math" translate="no" data-src="${a}$">${a}$</span>'], '']);
|
|
@@ -97,10 +124,14 @@ describe('Unit: parser/inline/math', () => {
|
|
|
97
124
|
assert.deepStrictEqual(inspect(parser('${a }$')), [['<span class="math" translate="no" data-src="${a }$">${a }$</span>'], '']);
|
|
98
125
|
assert.deepStrictEqual(inspect(parser('${ a}$')), [['<span class="math" translate="no" data-src="${ a}$">${ a}$</span>'], '']);
|
|
99
126
|
assert.deepStrictEqual(inspect(parser('${ a }$')), [['<span class="math" translate="no" data-src="${ a }$">${ a }$</span>'], '']);
|
|
100
|
-
assert.deepStrictEqual(inspect(parser('${
|
|
127
|
+
assert.deepStrictEqual(inspect(parser('${``a"}$')), [['<span class="math" translate="no" data-src="${``a"}$">${``a"}$</span>'], '']);
|
|
101
128
|
assert.deepStrictEqual(inspect(parser('${\\a}$')), [['<span class="math" translate="no" data-src="${\\a}$">${\\a}$</span>'], '']);
|
|
102
129
|
assert.deepStrictEqual(inspect(parser('${\\$}$')), [['<span class="math" translate="no" data-src="${\\$}$">${\\$}$</span>'], '']);
|
|
103
130
|
assert.deepStrictEqual(inspect(parser('${\\\\}$')), [['<span class="math" translate="no" data-src="${\\\\}$">${\\\\}$</span>'], '']);
|
|
131
|
+
assert.deepStrictEqual(inspect(parser('${a}b$')), [['<span class="math" translate="no" data-src="${a}b$">${a}b$</span>'], '']);
|
|
132
|
+
assert.deepStrictEqual(inspect(parser('${a}b{c}$')), [['<span class="math" translate="no" data-src="${a}b{c}$">${a}b{c}$</span>'], '']);
|
|
133
|
+
assert.deepStrictEqual(inspect(parser('${a}{b}$')), [['<span class="math" translate="no" data-src="${a}{b}$">${a}{b}$</span>'], '']);
|
|
134
|
+
assert.deepStrictEqual(inspect(parser('${あ}$')), [['<span class="math" translate="no" data-src="${あ}$">${あ}$</span>'], '']);
|
|
104
135
|
});
|
|
105
136
|
|
|
106
137
|
it('nest', () => {
|
|
@@ -1,35 +1,34 @@
|
|
|
1
1
|
import { MathParser } from '../inline';
|
|
2
|
-
import { union, some, validate, rewrite, creator, surround, lazy } from '../../combinator';
|
|
2
|
+
import { union, some, validate, focus, rewrite, creator, surround, lazy } from '../../combinator';
|
|
3
3
|
import { escsource, str } from '../source';
|
|
4
4
|
import { html } from 'typed-dom/dom';
|
|
5
5
|
|
|
6
|
-
const
|
|
6
|
+
const syntax = /^(?:[ "([](?!\$)|\\{(?!\$)|\\[\\}$]?|^`|`(?!`)|[!#%&')\x2A-\x5A\]^_\x61-\x7A|~])+/;
|
|
7
|
+
const forbiddenCommand = /\\(?:begin|tiny|huge|large)(?![0-9a-z])/i;
|
|
7
8
|
|
|
8
9
|
export const math: MathParser = lazy(() => creator(validate('$', rewrite(
|
|
9
10
|
union([
|
|
10
|
-
surround(
|
|
11
|
-
'$',
|
|
12
|
-
// Latex's reserved characters: # $ % ^ & _ { } ~ \
|
|
13
|
-
// $[0-9]+ : Dollar
|
|
14
|
-
// $[A-z]*- : Label
|
|
15
|
-
// $[A-z]*(?!-) : Math
|
|
16
|
-
// $[\^_[({|] : Math
|
|
17
|
-
// $[#$%&] : Invalid first character in Latex syntax
|
|
18
|
-
str(/^(?![\s{}#$%&]|\d+(?:[,.]\d+)*[^-+*/=<>^_~\\$]|-[\da-z]|[a-z]+-)(?:\\\$|\x20(?!\$)|[\x21-\x23\x25-\x7E])+/i),
|
|
19
|
-
/^\$(?![0-9a-z])/i),
|
|
20
11
|
surround('$', bracket, '$'),
|
|
12
|
+
surround(
|
|
13
|
+
/^\$(?!\s)/,
|
|
14
|
+
some(union([
|
|
15
|
+
bracket,
|
|
16
|
+
quote,
|
|
17
|
+
str(syntax),
|
|
18
|
+
])),
|
|
19
|
+
/^\$(?![0-9A-Za-z])/),
|
|
21
20
|
]),
|
|
22
21
|
(source, { caches: { math: cache } = {} }) => [[
|
|
23
22
|
cache?.get(source)?.cloneNode(true) ||
|
|
24
23
|
html('span',
|
|
25
|
-
!
|
|
24
|
+
!forbiddenCommand.test(source)
|
|
26
25
|
? { class: 'math', translate: 'no', 'data-src': source }
|
|
27
26
|
: {
|
|
28
27
|
class: 'invalid',
|
|
29
28
|
translate: 'no',
|
|
30
29
|
'data-invalid-syntax': 'math',
|
|
31
30
|
'data-invalid-type': 'content',
|
|
32
|
-
'data-invalid-message': `"${source.match(
|
|
31
|
+
'data-invalid-message': `"${source.match(forbiddenCommand)![0]}" command is disallowed`,
|
|
33
32
|
},
|
|
34
33
|
source)
|
|
35
34
|
], '']))));
|
|
@@ -38,7 +37,17 @@ const bracket: MathParser.BracketParser = lazy(() => creator(surround(
|
|
|
38
37
|
'{',
|
|
39
38
|
some(union([
|
|
40
39
|
bracket,
|
|
41
|
-
some(escsource, /^(?:[{}]|\\?\n)/),
|
|
40
|
+
some(escsource, /^(?:[{}$]|\\?\n)/),
|
|
42
41
|
])),
|
|
43
42
|
'}',
|
|
44
43
|
true)));
|
|
44
|
+
|
|
45
|
+
const quote: MathParser.QuoteParser = lazy(() => creator(surround(
|
|
46
|
+
'``',
|
|
47
|
+
some(union([
|
|
48
|
+
quote,
|
|
49
|
+
bracket,
|
|
50
|
+
focus(/^(?:\\[\\{}$]|`(?!`)|[^`{}"$\n])*/, str(syntax)),
|
|
51
|
+
])),
|
|
52
|
+
/^"?/,
|
|
53
|
+
true)));
|
|
@@ -112,7 +112,8 @@ describe('Unit: parser/inline', () => {
|
|
|
112
112
|
assert.deepStrictEqual(inspect(parser('[$1]')), [['[', '$', '1', ']'], '']);
|
|
113
113
|
assert.deepStrictEqual(inspect(parser('[$1-2]')), [['[', '$', '1', '-', '2', ']'], '']);
|
|
114
114
|
assert.deepStrictEqual(inspect(parser('[$-1][$-2]')), [['<a class="label" data-label="$-1">$-1</a>', '<a class="label" data-label="$-2">$-2</a>'], '']);
|
|
115
|
-
assert.deepStrictEqual(inspect(parser('$-1$-2')), [['<a class="label" data-label="$-1">$-1</a>', '<a class="label" data-label="$-2">$-2</a>'], '']);
|
|
115
|
+
assert.deepStrictEqual(inspect(parser('$-1, $-2')), [['<a class="label" data-label="$-1">$-1</a>', ',', ' ', '<a class="label" data-label="$-2">$-2</a>'], '']);
|
|
116
|
+
assert.deepStrictEqual(inspect(parser('$-1 and $-2')), [['<a class="label" data-label="$-1">$-1</a>', ' ', 'and', ' ', '<a class="label" data-label="$-2">$-2</a>'], '']);
|
|
116
117
|
assert.deepStrictEqual(inspect(parser('$$-1')), [['$', '<a class="label" data-label="$-1">$-1</a>'], '']);
|
|
117
118
|
assert.deepStrictEqual(inspect(parser('[[#a]]')), [['<sup class="reference"><a href="/hashtags/a" class="hashtag">#a</a></sup>'], '']);
|
|
118
119
|
assert.deepStrictEqual(inspect(parser('[[$-1]]')), [['<sup class="reference"><a class="label" data-label="$-1">$-1</a></sup>'], '']);
|
package/src/parser/inline.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { annotation } from './inline/annotation';
|
|
|
5
5
|
import { reference } from './inline/reference';
|
|
6
6
|
import { template } from './inline/template';
|
|
7
7
|
import { comment } from './inline/comment';
|
|
8
|
+
import { math } from './inline/math';
|
|
8
9
|
import { extension } from './inline/extension';
|
|
9
10
|
import { ruby } from './inline/ruby';
|
|
10
11
|
import { link } from './inline/link';
|
|
@@ -16,7 +17,6 @@ import { emstrong } from './inline/emstrong';
|
|
|
16
17
|
import { emphasis } from './inline/emphasis';
|
|
17
18
|
import { strong } from './inline/strong';
|
|
18
19
|
import { code } from './inline/code';
|
|
19
|
-
import { math } from './inline/math';
|
|
20
20
|
import { media } from './inline/media';
|
|
21
21
|
import { htmlentity } from './inline/htmlentity';
|
|
22
22
|
import { shortmedia } from './inline/shortmedia';
|
|
@@ -30,6 +30,7 @@ export import AnnotationParser = InlineParser.AnnotationParser;
|
|
|
30
30
|
export import ReferenceParser = InlineParser.ReferenceParser;
|
|
31
31
|
export import TemplateParser = InlineParser.TemplateParser;
|
|
32
32
|
export import CommentParser = InlineParser.CommentParser;
|
|
33
|
+
export import MathParser = InlineParser.MathParser;
|
|
33
34
|
export import ExtensionParser = InlineParser.ExtensionParser;
|
|
34
35
|
export import RubyParser = InlineParser.RubyParser;
|
|
35
36
|
export import LinkParser = InlineParser.LinkParser;
|
|
@@ -41,7 +42,6 @@ export import EmStrongParser = InlineParser.EmStrongParser;
|
|
|
41
42
|
export import EmphasisParser = InlineParser.EmphasisParser;
|
|
42
43
|
export import StrongParser = InlineParser.StrongParser;
|
|
43
44
|
export import CodeParser = InlineParser.CodeParser;
|
|
44
|
-
export import MathParser = InlineParser.MathParser;
|
|
45
45
|
export import MediaParser = InlineParser.MediaParser;
|
|
46
46
|
export import HTMLEntityParser = InlineParser.HTMLEntityParser;
|
|
47
47
|
export import UnsafeHTMLEntityParser = InlineParser.UnsafeHTMLEntityParser;
|
|
@@ -55,6 +55,7 @@ export const inline: InlineParser = union([
|
|
|
55
55
|
reference,
|
|
56
56
|
template,
|
|
57
57
|
comment,
|
|
58
|
+
math,
|
|
58
59
|
extension,
|
|
59
60
|
ruby,
|
|
60
61
|
link,
|
|
@@ -67,7 +68,6 @@ export const inline: InlineParser = union([
|
|
|
67
68
|
strong,
|
|
68
69
|
emphasis,
|
|
69
70
|
code,
|
|
70
|
-
math,
|
|
71
71
|
htmlentity,
|
|
72
72
|
shortmedia,
|
|
73
73
|
autolink,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { window, document } from 'spica/global';
|
|
2
2
|
import { parse } from '../../../parser';
|
|
3
3
|
import { html as h, define } from 'typed-dom/dom';
|
|
4
|
-
import
|
|
4
|
+
import DOMPurify from 'dompurify';
|
|
5
5
|
|
|
6
6
|
declare global {
|
|
7
7
|
interface Window {
|
|
@@ -29,7 +29,7 @@ export function twitter(source: HTMLImageElement, url: URL): HTMLElement | undef
|
|
|
29
29
|
timeout: 10 * 1e3,
|
|
30
30
|
cache: true,
|
|
31
31
|
success({ html }): void {
|
|
32
|
-
el.innerHTML = sanitize(html);
|
|
32
|
+
el.innerHTML = DOMPurify.sanitize(html);
|
|
33
33
|
if (window.twttr) return void window.twttr.widgets.load(el);
|
|
34
34
|
const id = 'twitter-wjs';
|
|
35
35
|
if (document.getElementById(id)) return;
|
package/tsconfig.json
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
|
-
"target": "
|
|
3
|
+
"target": "ES2021",
|
|
4
4
|
"lib": [
|
|
5
|
-
"
|
|
6
|
-
"ES2021.Promise",
|
|
5
|
+
"ES2021",
|
|
7
6
|
"DOM",
|
|
8
7
|
"DOM.Iterable"
|
|
9
8
|
],
|
|
9
|
+
"outDir": "dist",
|
|
10
10
|
"module": "commonjs",
|
|
11
11
|
"moduleResolution": "node",
|
|
12
12
|
"esModuleInterop": true,
|
|
13
|
+
"sourceMap": true,
|
|
13
14
|
"strict": true,
|
|
14
15
|
"strictFunctionTypes": false,
|
|
15
16
|
"noUnusedParameters": true,
|
|
@@ -19,13 +20,15 @@
|
|
|
19
20
|
"suppressImplicitAnyIndexErrors": true,
|
|
20
21
|
"noFallthroughCasesInSwitch": true,
|
|
21
22
|
"noErrorTruncation": true,
|
|
22
|
-
"
|
|
23
|
-
"forceConsistentCasingInFileNames": true,
|
|
24
|
-
"removeComments": false
|
|
23
|
+
"forceConsistentCasingInFileNames": true
|
|
25
24
|
},
|
|
26
25
|
"include": [
|
|
27
26
|
"*.ts",
|
|
28
27
|
"src/**/*.ts",
|
|
29
|
-
"test/**/*.ts"
|
|
28
|
+
"test/**/*.ts",
|
|
29
|
+
"benchmark/**/*.ts"
|
|
30
|
+
],
|
|
31
|
+
"exclude": [
|
|
32
|
+
"node_modules"
|
|
30
33
|
]
|
|
31
34
|
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
const path = require('path');
|
|
2
|
+
const glob = require('glob');
|
|
3
|
+
const shell = cmd => require('child_process').execSync(cmd, { stdio: [0, 1, 2] });
|
|
4
|
+
const webpack = require('webpack');
|
|
5
|
+
const { mergeWithRules } = require('webpack-merge');
|
|
6
|
+
const ESLintPlugin = require('eslint-webpack-plugin');
|
|
7
|
+
const pkg = require('./package.json');
|
|
8
|
+
|
|
9
|
+
shell('rm -rf coverage');
|
|
10
|
+
|
|
11
|
+
module.exports = env => {
|
|
12
|
+
const merge = mergeWithRules({
|
|
13
|
+
entry: 'replace',
|
|
14
|
+
module: {
|
|
15
|
+
rules: {
|
|
16
|
+
test: 'match',
|
|
17
|
+
use: {
|
|
18
|
+
loader: 'match',
|
|
19
|
+
options: 'replace',
|
|
20
|
+
plugins: 'replace',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
plugins: 'append',
|
|
25
|
+
});
|
|
26
|
+
const config = {
|
|
27
|
+
mode: 'production',
|
|
28
|
+
externals: {
|
|
29
|
+
benchmark: 'Benchmark',
|
|
30
|
+
prismjs: 'Prism',
|
|
31
|
+
dompurify: 'DOMPurify',
|
|
32
|
+
},
|
|
33
|
+
resolve: {
|
|
34
|
+
extensions: ['.ts', '.js'],
|
|
35
|
+
},
|
|
36
|
+
entry: glob.sync('./{src,test}/**/*.ts'),
|
|
37
|
+
output: {
|
|
38
|
+
filename: 'index.js',
|
|
39
|
+
path: path.resolve(__dirname, 'dist'),
|
|
40
|
+
library: pkg.name,
|
|
41
|
+
libraryTarget: 'umd',
|
|
42
|
+
globalObject: 'this',
|
|
43
|
+
clean: true,
|
|
44
|
+
},
|
|
45
|
+
module: {
|
|
46
|
+
rules: [
|
|
47
|
+
{
|
|
48
|
+
test: /\.ts$/,
|
|
49
|
+
//exclude: /node_modules/,
|
|
50
|
+
use: [
|
|
51
|
+
{
|
|
52
|
+
loader: 'babel-loader',
|
|
53
|
+
options: {},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
loader: 'ts-loader',
|
|
57
|
+
options: {
|
|
58
|
+
onlyCompileBundledFiles: true,
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
plugins: [
|
|
66
|
+
new webpack.BannerPlugin({
|
|
67
|
+
banner: `${pkg.name} v${pkg.version} ${pkg.repository.url} | (c) 2017, ${pkg.author} | ${pkg.license} License`,
|
|
68
|
+
}),
|
|
69
|
+
],
|
|
70
|
+
performance: {
|
|
71
|
+
maxEntrypointSize: Infinity,
|
|
72
|
+
maxAssetSize: Infinity,
|
|
73
|
+
},
|
|
74
|
+
optimization: {
|
|
75
|
+
minimize: false,
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
switch (env.mode) {
|
|
79
|
+
case 'test':
|
|
80
|
+
return merge(config);
|
|
81
|
+
case 'lint':
|
|
82
|
+
return merge(config, {
|
|
83
|
+
entry: glob.sync('./!(node_modules)**/*.ts'),
|
|
84
|
+
plugins: [
|
|
85
|
+
new ESLintPlugin({
|
|
86
|
+
extensions: ['ts'],
|
|
87
|
+
}),
|
|
88
|
+
],
|
|
89
|
+
});
|
|
90
|
+
case 'bench':
|
|
91
|
+
return merge(config, {
|
|
92
|
+
entry: glob.sync('./benchmark/**/*.ts'),
|
|
93
|
+
module: {
|
|
94
|
+
rules: [
|
|
95
|
+
{
|
|
96
|
+
test: /\.ts$/,
|
|
97
|
+
use: [
|
|
98
|
+
{
|
|
99
|
+
loader: 'babel-loader',
|
|
100
|
+
options: {
|
|
101
|
+
plugins: ['babel-plugin-unassert'],
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
case 'dist':
|
|
110
|
+
return merge(config, {
|
|
111
|
+
entry: glob.sync('./index.ts'),
|
|
112
|
+
module: {
|
|
113
|
+
rules: [
|
|
114
|
+
{
|
|
115
|
+
test: /\.ts$/,
|
|
116
|
+
use: [
|
|
117
|
+
{
|
|
118
|
+
loader: 'babel-loader',
|
|
119
|
+
options: {
|
|
120
|
+
plugins: ['babel-plugin-unassert'],
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
};
|