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.
@@ -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('$0.$')), undefined);
16
- assert.deepStrictEqual(inspect(parser('$1,000.99.$')), undefined);
17
- assert.deepStrictEqual(inspect(parser('$0(a)$')), undefined);
18
- assert.deepStrictEqual(inspect(parser('$0[a]$')), undefined);
19
- assert.deepStrictEqual(inspect(parser('$0{a}$')), undefined);
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('$a-b$')), undefined);
29
- assert.deepStrictEqual(inspect(parser('$a-b$c-d')), undefined);
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 -b$')), [['<span class="math" translate="no" data-src="$a -b$">$a -b$</span>'], '']);
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="$`&quot;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="$``&quot;$">$``"$</span>'], '']);
108
+ assert.deepStrictEqual(inspect(parser('$``""a$')), [['<span class="math" translate="no" data-src="$``&quot;&quot;a$">$``""a$</span>'], '']);
109
+ assert.deepStrictEqual(inspect(parser('$``a"$')), [['<span class="math" translate="no" data-src="$``a&quot;$">$``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="$``\\&quot;$">$``\\"$</span>'], '']);
112
+ assert.deepStrictEqual(inspect(parser('$``a``b"c"$')), [['<span class="math" translate="no" data-src="$``a``b&quot;c&quot;$">$``a``b"c"$</span>'], '']);
113
+ assert.deepStrictEqual(inspect(parser('$```"$')), [['<span class="math" translate="no" data-src="$```&quot;$">$```"$</span>'], '']);
114
+ assert.deepStrictEqual(inspect(parser('$````""$')), [['<span class="math" translate="no" data-src="$````&quot;&quot;$">$````""$</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('${$}$')), [['<span class="math" translate="no" data-src="${$}$">${$}$</span>'], '']);
127
+ assert.deepStrictEqual(inspect(parser('${``a"}$')), [['<span class="math" translate="no" data-src="${``a&quot;}$">${``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 disallowedCommand = /\\(?:begin|tiny|huge|large)(?![0-9a-z])/i;
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
- !disallowedCommand.test(source)
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(disallowedCommand)![0]}" command is disallowed`,
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>'], '']);
@@ -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,4 +1,4 @@
1
- import * as Prism from 'prismjs';
1
+ import Prism from 'prismjs';
2
2
  import { Collection } from 'spica/collection';
3
3
 
4
4
  export function code(target: HTMLElement, cache?: Collection<string, HTMLElement>): void {
@@ -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 { sanitize } from 'dompurify';
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": "ES2019",
3
+ "target": "ES2021",
4
4
  "lib": [
5
- "ES2019",
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
- "rootDir": "./",
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
+ };