fable-editor 1.0.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/LICENSE +21 -0
- package/README.md +175 -0
- package/dist/angular/LICENSE +21 -0
- package/dist/angular/README.md +175 -0
- package/dist/angular/angular/fable-editor.component.d.ts +29 -0
- package/dist/angular/angular/fable-editor.module.d.ts +7 -0
- package/dist/angular/angular/index.d.ts +2 -0
- package/dist/angular/core/config.d.ts +17 -0
- package/dist/angular/core/docx-import.d.ts +1 -0
- package/dist/angular/core/editor.d.ts +219 -0
- package/dist/angular/core/i18n.d.ts +139 -0
- package/dist/angular/core/icons.d.ts +2 -0
- package/dist/angular/core/index.d.ts +7 -0
- package/dist/angular/core/paste-engine.d.ts +6 -0
- package/dist/angular/core/types.d.ts +87 -0
- package/dist/angular/esm2022/angular/fable-editor.component.mjs +101 -0
- package/dist/angular/esm2022/angular/fable-editor.module.mjs +16 -0
- package/dist/angular/esm2022/angular/index.mjs +3 -0
- package/dist/angular/esm2022/core/config.mjs +122 -0
- package/dist/angular/esm2022/core/docx-import.mjs +391 -0
- package/dist/angular/esm2022/core/editor.mjs +2700 -0
- package/dist/angular/esm2022/core/i18n.mjs +278 -0
- package/dist/angular/esm2022/core/icons.mjs +89 -0
- package/dist/angular/esm2022/core/index.mjs +6 -0
- package/dist/angular/esm2022/core/paste-engine.mjs +482 -0
- package/dist/angular/esm2022/core/types.mjs +2 -0
- package/dist/angular/esm2022/fable-editor.mjs +5 -0
- package/dist/angular/esm2022/index.mjs +2 -0
- package/dist/angular/fesm2022/fable-editor.mjs +4176 -0
- package/dist/angular/fesm2022/fable-editor.mjs.map +1 -0
- package/dist/angular/index.d.ts +1 -0
- package/dist/core/config.d.ts +18 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/docx-import.d.ts +2 -0
- package/dist/core/docx-import.d.ts.map +1 -0
- package/dist/core/editor.css +1175 -0
- package/dist/core/editor.d.ts +221 -0
- package/dist/core/editor.d.ts.map +1 -0
- package/dist/core/i18n.d.ts +141 -0
- package/dist/core/i18n.d.ts.map +1 -0
- package/dist/core/icons.d.ts +3 -0
- package/dist/core/icons.d.ts.map +1 -0
- package/dist/core/index.cjs +12 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.mjs +2789 -0
- package/dist/core/paste-engine.d.ts +7 -0
- package/dist/core/paste-engine.d.ts.map +1 -0
- package/dist/core/types.d.ts +88 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/react/FableEditor.d.ts +13 -0
- package/dist/react/FableEditor.d.ts.map +1 -0
- package/dist/react/index.cjs +41 -0
- package/dist/react/index.d.ts +3 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.mjs +3471 -0
- package/package.json +105 -0
- package/style.css +1175 -0
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
const ALLOWED_TAGS = new Set([
|
|
2
|
+
'p',
|
|
3
|
+
'div',
|
|
4
|
+
'span',
|
|
5
|
+
'br',
|
|
6
|
+
'hr',
|
|
7
|
+
'a',
|
|
8
|
+
'b',
|
|
9
|
+
'strong',
|
|
10
|
+
'i',
|
|
11
|
+
'em',
|
|
12
|
+
'u',
|
|
13
|
+
's',
|
|
14
|
+
'strike',
|
|
15
|
+
'sub',
|
|
16
|
+
'sup',
|
|
17
|
+
'h1',
|
|
18
|
+
'h2',
|
|
19
|
+
'h3',
|
|
20
|
+
'h4',
|
|
21
|
+
'h5',
|
|
22
|
+
'h6',
|
|
23
|
+
'blockquote',
|
|
24
|
+
'pre',
|
|
25
|
+
'code',
|
|
26
|
+
'ul',
|
|
27
|
+
'ol',
|
|
28
|
+
'li',
|
|
29
|
+
'table',
|
|
30
|
+
'thead',
|
|
31
|
+
'tbody',
|
|
32
|
+
'tfoot',
|
|
33
|
+
'tr',
|
|
34
|
+
'td',
|
|
35
|
+
'th',
|
|
36
|
+
'caption',
|
|
37
|
+
'colgroup',
|
|
38
|
+
'col',
|
|
39
|
+
'img',
|
|
40
|
+
'figure',
|
|
41
|
+
'figcaption',
|
|
42
|
+
'mark'
|
|
43
|
+
]);
|
|
44
|
+
const ALLOWED_STYLES = new Set([
|
|
45
|
+
'text-align',
|
|
46
|
+
'direction',
|
|
47
|
+
'unicode-bidi',
|
|
48
|
+
'font-weight',
|
|
49
|
+
'font-style',
|
|
50
|
+
'text-decoration',
|
|
51
|
+
'text-decoration-line',
|
|
52
|
+
'color',
|
|
53
|
+
'background-color',
|
|
54
|
+
'background',
|
|
55
|
+
'background-image',
|
|
56
|
+
'background-position',
|
|
57
|
+
'background-repeat',
|
|
58
|
+
'background-size',
|
|
59
|
+
'font-size',
|
|
60
|
+
'font-family',
|
|
61
|
+
'line-height',
|
|
62
|
+
'letter-spacing',
|
|
63
|
+
'vertical-align',
|
|
64
|
+
'text-indent',
|
|
65
|
+
'margin',
|
|
66
|
+
'margin-top',
|
|
67
|
+
'margin-bottom',
|
|
68
|
+
'margin-left',
|
|
69
|
+
'margin-right',
|
|
70
|
+
'margin-inline-start',
|
|
71
|
+
'margin-inline-end',
|
|
72
|
+
'padding',
|
|
73
|
+
'padding-top',
|
|
74
|
+
'padding-bottom',
|
|
75
|
+
'padding-left',
|
|
76
|
+
'padding-right',
|
|
77
|
+
'width',
|
|
78
|
+
'height',
|
|
79
|
+
'min-width',
|
|
80
|
+
'max-width',
|
|
81
|
+
'min-height',
|
|
82
|
+
'max-height',
|
|
83
|
+
'border',
|
|
84
|
+
'border-top',
|
|
85
|
+
'border-right',
|
|
86
|
+
'border-bottom',
|
|
87
|
+
'border-left',
|
|
88
|
+
'border-color',
|
|
89
|
+
'border-style',
|
|
90
|
+
'border-width',
|
|
91
|
+
'border-radius',
|
|
92
|
+
'border-collapse',
|
|
93
|
+
'border-spacing',
|
|
94
|
+
'table-layout',
|
|
95
|
+
'float',
|
|
96
|
+
'display',
|
|
97
|
+
'box-sizing',
|
|
98
|
+
'list-style-type',
|
|
99
|
+
'white-space'
|
|
100
|
+
]);
|
|
101
|
+
const ALLOWED_ATTRS = {
|
|
102
|
+
'*': ['dir', 'lang', 'colspan', 'rowspan'],
|
|
103
|
+
a: ['href', 'target', 'rel', 'title'],
|
|
104
|
+
img: ['src', 'alt', 'width', 'height', 'title'],
|
|
105
|
+
col: ['span', 'width'],
|
|
106
|
+
td: ['width', 'valign'],
|
|
107
|
+
th: ['width', 'valign'],
|
|
108
|
+
table: ['width', 'cellpadding', 'cellspacing']
|
|
109
|
+
};
|
|
110
|
+
export function styleMap(el) {
|
|
111
|
+
const map = {};
|
|
112
|
+
const raw = el.getAttribute && el.getAttribute('style');
|
|
113
|
+
if (!raw)
|
|
114
|
+
return map;
|
|
115
|
+
raw.split(';').forEach((p) => {
|
|
116
|
+
const i = p.indexOf(':');
|
|
117
|
+
if (i < 1)
|
|
118
|
+
return;
|
|
119
|
+
map[p.slice(0, i).trim().toLowerCase()] = p.slice(i + 1).trim();
|
|
120
|
+
});
|
|
121
|
+
return map;
|
|
122
|
+
}
|
|
123
|
+
function preClean(html) {
|
|
124
|
+
return html
|
|
125
|
+
.replace(/<!--\[if !supportLists\]-->([\s\S]*?)<!--\[endif\]-->/gi, '$1')
|
|
126
|
+
.replace(/<!--\[if !supportLists\]>([\s\S]*?)<!\[endif\]-->/gi, '$1')
|
|
127
|
+
.replace(/<!\[if !supportLists\]>([\s\S]*?)<!\[endif\]>/gi, '$1')
|
|
128
|
+
.replace(/<!--\[if [\s\S]*?<!\[endif\]-->/gi, '')
|
|
129
|
+
.replace(/<!--[\s\S]*?-->/g, '')
|
|
130
|
+
.replace(/<(script|style|xml|title)[\s\S]*?<\/\1>/gi, '')
|
|
131
|
+
.replace(/<\/?(meta|link)[^>]*>/gi, '')
|
|
132
|
+
.replace(/<\?xml[\s\S]*?\?>/gi, '')
|
|
133
|
+
.replace(/<\/?(o|v|w|m|st1):[^>]*>/gi, '');
|
|
134
|
+
}
|
|
135
|
+
function markerType(mt) {
|
|
136
|
+
if (/^[0-9]+[\.\)،]/.test(mt))
|
|
137
|
+
return { ordered: true };
|
|
138
|
+
if (/^[٠-٩۰-۹]+/.test(mt))
|
|
139
|
+
return { ordered: true, style: 'arabic-indic' };
|
|
140
|
+
if (/^[ivxlc]{2,}[\.\)]/.test(mt))
|
|
141
|
+
return { ordered: true, style: 'lower-roman' };
|
|
142
|
+
if (/^[IVXLC]{2,}[\.\)]/.test(mt))
|
|
143
|
+
return { ordered: true, style: 'upper-roman' };
|
|
144
|
+
if (/^[a-z][\.\)]/.test(mt))
|
|
145
|
+
return { ordered: true, style: 'lower-alpha' };
|
|
146
|
+
if (/^[A-Z][\.\)]/.test(mt))
|
|
147
|
+
return { ordered: true, style: 'upper-alpha' };
|
|
148
|
+
if (/^[ء-ي][\.\)،-]/.test(mt))
|
|
149
|
+
return { ordered: true, style: 'arabic-indic' };
|
|
150
|
+
return { ordered: false };
|
|
151
|
+
}
|
|
152
|
+
function rebuildWordLists(doc) {
|
|
153
|
+
const isListP = (p) => {
|
|
154
|
+
const s = (p.getAttribute('style') || '') + ' ' + (p.className || '');
|
|
155
|
+
return /mso-list\s*:(?!\s*ignore)/i.test(s) || /MsoListParagraph/i.test(s);
|
|
156
|
+
};
|
|
157
|
+
const groups = [];
|
|
158
|
+
let cur = null;
|
|
159
|
+
Array.from(doc.body.querySelectorAll('p')).forEach((p) => {
|
|
160
|
+
if (!isListP(p)) {
|
|
161
|
+
cur = null;
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const prev = p.previousElementSibling;
|
|
165
|
+
if (cur && prev && cur[cur.length - 1] === prev)
|
|
166
|
+
cur.push(p);
|
|
167
|
+
else {
|
|
168
|
+
cur = [p];
|
|
169
|
+
groups.push(cur);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
groups.forEach((group) => {
|
|
173
|
+
const stack = [];
|
|
174
|
+
const rootAnchor = group[0];
|
|
175
|
+
group.forEach((p) => {
|
|
176
|
+
const style = p.getAttribute('style') || '';
|
|
177
|
+
const level = +(style.match(/level(\d+)/i)?.[1] || 1);
|
|
178
|
+
const marker = Array.from(p.querySelectorAll('span')).find((sp) => /mso-list\s*:\s*ignore/i.test(sp.getAttribute('style') || ''));
|
|
179
|
+
const mt = marker
|
|
180
|
+
? marker.textContent?.trim() || ''
|
|
181
|
+
: (p.textContent?.trim().match(/^\S{1,4}/) || [''])[0];
|
|
182
|
+
const { ordered, style: listStyle } = markerType(mt);
|
|
183
|
+
if (marker)
|
|
184
|
+
marker.remove();
|
|
185
|
+
while (stack.length && stack[stack.length - 1].level > level)
|
|
186
|
+
stack.pop();
|
|
187
|
+
if (!stack.length || stack[stack.length - 1].level < level) {
|
|
188
|
+
const list = doc.createElement(ordered ? 'ol' : 'ul');
|
|
189
|
+
if (ordered && listStyle)
|
|
190
|
+
list.style.listStyleType = listStyle;
|
|
191
|
+
if (stack.length) {
|
|
192
|
+
const par = stack[stack.length - 1].list;
|
|
193
|
+
(par.lastElementChild || par).appendChild(list);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
rootAnchor.parentNode.insertBefore(list, rootAnchor);
|
|
197
|
+
}
|
|
198
|
+
stack.push({ list, level });
|
|
199
|
+
}
|
|
200
|
+
const li = doc.createElement('li');
|
|
201
|
+
const keep = styleMap(p);
|
|
202
|
+
const kept = ['text-align', 'direction', 'unicode-bidi', 'color', 'font-size', 'font-family', 'background-color']
|
|
203
|
+
.filter((k) => keep[k])
|
|
204
|
+
.map((k) => k + ':' + keep[k])
|
|
205
|
+
.join(';');
|
|
206
|
+
if (kept)
|
|
207
|
+
li.setAttribute('style', kept);
|
|
208
|
+
if (p.getAttribute('dir'))
|
|
209
|
+
li.setAttribute('dir', p.getAttribute('dir'));
|
|
210
|
+
while (p.firstChild)
|
|
211
|
+
li.appendChild(p.firstChild);
|
|
212
|
+
stack[stack.length - 1].list.appendChild(li);
|
|
213
|
+
p.remove();
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
function fixGoogleDocs(doc) {
|
|
218
|
+
doc.querySelectorAll('b[id^="docs-internal-guid"]').forEach((b) => {
|
|
219
|
+
while (b.firstChild)
|
|
220
|
+
b.parentNode.insertBefore(b.firstChild, b);
|
|
221
|
+
b.remove();
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
function fixLegacyAttrs(doc) {
|
|
225
|
+
doc.querySelectorAll('table').forEach((tb) => {
|
|
226
|
+
const htmlTb = tb;
|
|
227
|
+
if (!styleMap(htmlTb)['border-collapse'])
|
|
228
|
+
htmlTb.style.borderCollapse = 'collapse';
|
|
229
|
+
});
|
|
230
|
+
doc.querySelectorAll('[align]').forEach((el) => {
|
|
231
|
+
const htmlEl = el;
|
|
232
|
+
const v = htmlEl.getAttribute('align').toLowerCase();
|
|
233
|
+
if (htmlEl.tagName.toLowerCase() === 'table') {
|
|
234
|
+
if (v === 'center') {
|
|
235
|
+
htmlEl.style.marginLeft = htmlEl.style.marginLeft || 'auto';
|
|
236
|
+
htmlEl.style.marginRight = htmlEl.style.marginRight || 'auto';
|
|
237
|
+
}
|
|
238
|
+
else if (v === 'right')
|
|
239
|
+
htmlEl.style.marginLeft = htmlEl.style.marginLeft || 'auto';
|
|
240
|
+
else if (v === 'left')
|
|
241
|
+
htmlEl.style.marginRight = htmlEl.style.marginRight || 'auto';
|
|
242
|
+
}
|
|
243
|
+
else if (['left', 'right', 'center', 'justify'].includes(v)) {
|
|
244
|
+
htmlEl.style.textAlign = htmlEl.style.textAlign || v;
|
|
245
|
+
// Word aligns tables by wrapping them in <div align=...>; text-align
|
|
246
|
+
// does not move a table box, so mirror the alignment onto the table.
|
|
247
|
+
Array.from(htmlEl.children).forEach((ch) => {
|
|
248
|
+
if (ch.tagName.toLowerCase() !== 'table')
|
|
249
|
+
return;
|
|
250
|
+
const tb = ch;
|
|
251
|
+
if (v === 'center') {
|
|
252
|
+
tb.style.marginLeft = tb.style.marginLeft || 'auto';
|
|
253
|
+
tb.style.marginRight = tb.style.marginRight || 'auto';
|
|
254
|
+
}
|
|
255
|
+
else if (v === 'right')
|
|
256
|
+
tb.style.marginLeft = tb.style.marginLeft || 'auto';
|
|
257
|
+
else if (v === 'left')
|
|
258
|
+
tb.style.marginRight = tb.style.marginRight || 'auto';
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
htmlEl.removeAttribute('align');
|
|
262
|
+
});
|
|
263
|
+
doc.querySelectorAll('center table').forEach((tb) => {
|
|
264
|
+
const htmlTb = tb;
|
|
265
|
+
htmlTb.style.marginLeft = htmlTb.style.marginLeft || 'auto';
|
|
266
|
+
htmlTb.style.marginRight = htmlTb.style.marginRight || 'auto';
|
|
267
|
+
});
|
|
268
|
+
doc.querySelectorAll('[bgcolor]').forEach((el) => {
|
|
269
|
+
const htmlEl = el;
|
|
270
|
+
htmlEl.style.backgroundColor = htmlEl.style.backgroundColor || htmlEl.getAttribute('bgcolor');
|
|
271
|
+
htmlEl.removeAttribute('bgcolor');
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
function sanitize(node, doc) {
|
|
275
|
+
Array.from(node.childNodes).forEach((child) => {
|
|
276
|
+
if (child.nodeType === Node.COMMENT_NODE) {
|
|
277
|
+
child.remove();
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
if (child.nodeType !== Node.ELEMENT_NODE)
|
|
281
|
+
return;
|
|
282
|
+
const el = child;
|
|
283
|
+
const tag = el.tagName.toLowerCase();
|
|
284
|
+
if (!ALLOWED_TAGS.has(tag)) {
|
|
285
|
+
if (tag === 'font') {
|
|
286
|
+
const span = doc.createElement('span');
|
|
287
|
+
if (el.getAttribute('style'))
|
|
288
|
+
span.setAttribute('style', el.getAttribute('style'));
|
|
289
|
+
if (el.getAttribute('color'))
|
|
290
|
+
span.style.color = el.getAttribute('color');
|
|
291
|
+
if (el.getAttribute('face'))
|
|
292
|
+
span.style.fontFamily = el.getAttribute('face');
|
|
293
|
+
const sz = el.getAttribute('size');
|
|
294
|
+
if (sz && !span.style.fontSize) {
|
|
295
|
+
const szMap = {
|
|
296
|
+
'1': '8pt',
|
|
297
|
+
'2': '10pt',
|
|
298
|
+
'3': '12pt',
|
|
299
|
+
'4': '14pt',
|
|
300
|
+
'5': '18pt',
|
|
301
|
+
'6': '24pt',
|
|
302
|
+
'7': '36pt'
|
|
303
|
+
};
|
|
304
|
+
if (szMap[sz])
|
|
305
|
+
span.style.fontSize = szMap[sz];
|
|
306
|
+
}
|
|
307
|
+
while (el.firstChild)
|
|
308
|
+
span.appendChild(el.firstChild);
|
|
309
|
+
el.replaceWith(span);
|
|
310
|
+
sanitize(span, doc);
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
sanitize(el, doc);
|
|
314
|
+
while (el.firstChild)
|
|
315
|
+
el.parentNode.insertBefore(el.firstChild, el);
|
|
316
|
+
el.remove();
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
const allowed = new Set([...(ALLOWED_ATTRS['*'] || []), ...(ALLOWED_ATTRS[tag] || [])]);
|
|
320
|
+
Array.from(el.attributes).forEach((a) => {
|
|
321
|
+
const n = a.name.toLowerCase();
|
|
322
|
+
if (n !== 'style' && !allowed.has(n))
|
|
323
|
+
el.removeAttribute(a.name);
|
|
324
|
+
});
|
|
325
|
+
if (tag === 'a') {
|
|
326
|
+
const href = el.getAttribute('href') || '';
|
|
327
|
+
if (!/^(https?:|mailto:|tel:|#)/i.test(href))
|
|
328
|
+
el.removeAttribute('href');
|
|
329
|
+
}
|
|
330
|
+
if (tag === 'img') {
|
|
331
|
+
const src = el.getAttribute('src') || '';
|
|
332
|
+
if (!/^(https?:|data:image\/|blob:)/i.test(src)) {
|
|
333
|
+
const ph = doc.createElement('span');
|
|
334
|
+
ph.textContent = '[local image — paste it separately]';
|
|
335
|
+
ph.setAttribute('style', 'color:#a33;font-style:italic;font-size:12px');
|
|
336
|
+
el.replaceWith(ph);
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
const styles = styleMap(el);
|
|
341
|
+
const kept = [];
|
|
342
|
+
for (const [k, v] of Object.entries(styles)) {
|
|
343
|
+
if (!ALLOWED_STYLES.has(k))
|
|
344
|
+
continue;
|
|
345
|
+
if (/expression|javascript|url\s*\(\s*['"]?\s*file:/i.test(v))
|
|
346
|
+
continue;
|
|
347
|
+
if (k === 'font-weight' && /^(400|normal)$/i.test(v))
|
|
348
|
+
continue;
|
|
349
|
+
if (k === 'font-style' && /^normal$/i.test(v))
|
|
350
|
+
continue;
|
|
351
|
+
if (k === 'text-decoration' && /^none$/i.test(v))
|
|
352
|
+
continue;
|
|
353
|
+
kept.push(k + ':' + v);
|
|
354
|
+
}
|
|
355
|
+
if (kept.length)
|
|
356
|
+
el.setAttribute('style', kept.join(';'));
|
|
357
|
+
else
|
|
358
|
+
el.removeAttribute('style');
|
|
359
|
+
el.removeAttribute('class');
|
|
360
|
+
sanitize(el, doc);
|
|
361
|
+
if (tag === 'span' && !el.attributes.length) {
|
|
362
|
+
while (el.firstChild)
|
|
363
|
+
el.parentNode.insertBefore(el.firstChild, el);
|
|
364
|
+
el.remove();
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
function extractStyleRules(raw) {
|
|
369
|
+
const rules = [];
|
|
370
|
+
const re = /<style[^>]*>([\s\S]*?)<\/style>/gi;
|
|
371
|
+
let m;
|
|
372
|
+
while ((m = re.exec(raw))) {
|
|
373
|
+
let css = m[1].replace(/<!--|-->/g, '').replace(/\/\*[\s\S]*?\*\//g, '');
|
|
374
|
+
css = css.replace(/@media[^{]*\{(?:[^{}]*\{[^{}]*\})*[^{}]*\}/gi, '');
|
|
375
|
+
css = css.replace(/@[\w-]+[^{]*\{[^{}]*\}/g, '');
|
|
376
|
+
let rm;
|
|
377
|
+
const rre = /([^{}]+)\{([^}]*)\}/g;
|
|
378
|
+
while ((rm = rre.exec(css))) {
|
|
379
|
+
const decls = rm[2]
|
|
380
|
+
.split(';')
|
|
381
|
+
.map((d) => {
|
|
382
|
+
const i = d.indexOf(':');
|
|
383
|
+
if (i < 1)
|
|
384
|
+
return null;
|
|
385
|
+
return [d.slice(0, i).trim().toLowerCase(), d.slice(i + 1).trim()];
|
|
386
|
+
})
|
|
387
|
+
.filter((d) => !!d && !!d[1]);
|
|
388
|
+
if (!decls.length)
|
|
389
|
+
continue;
|
|
390
|
+
rm[1]
|
|
391
|
+
.split(',')
|
|
392
|
+
.map((s) => s.trim())
|
|
393
|
+
.filter((s) => s && !s.startsWith('@'))
|
|
394
|
+
.forEach((sel) => rules.push({ sel, decls }));
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
return rules;
|
|
398
|
+
}
|
|
399
|
+
function applyStyleRules(doc, rules) {
|
|
400
|
+
if (!rules.length)
|
|
401
|
+
return;
|
|
402
|
+
const addMap = new Map();
|
|
403
|
+
rules.forEach(({ sel, decls }) => {
|
|
404
|
+
let els;
|
|
405
|
+
try {
|
|
406
|
+
els = doc.querySelectorAll(sel);
|
|
407
|
+
}
|
|
408
|
+
catch (e) {
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
els.forEach((el) => {
|
|
412
|
+
let m = addMap.get(el);
|
|
413
|
+
if (!m) {
|
|
414
|
+
m = {};
|
|
415
|
+
addMap.set(el, m);
|
|
416
|
+
}
|
|
417
|
+
decls.forEach(([k, v]) => {
|
|
418
|
+
m[k] = v;
|
|
419
|
+
});
|
|
420
|
+
});
|
|
421
|
+
});
|
|
422
|
+
addMap.forEach((m, el) => {
|
|
423
|
+
const have = styleMap(el);
|
|
424
|
+
const hasDir = el.hasAttribute('dir');
|
|
425
|
+
const hasAlign = el.hasAttribute('align');
|
|
426
|
+
const add = Object.entries(m).filter(([k]) => {
|
|
427
|
+
if (k in have)
|
|
428
|
+
return false;
|
|
429
|
+
if ((k === 'direction' || k === 'unicode-bidi') && hasDir)
|
|
430
|
+
return false;
|
|
431
|
+
if (k === 'text-align' && (hasAlign || hasDir))
|
|
432
|
+
return false;
|
|
433
|
+
if ((k === 'background' || k === 'background-color') && el.hasAttribute('bgcolor'))
|
|
434
|
+
return false;
|
|
435
|
+
return true;
|
|
436
|
+
});
|
|
437
|
+
if (!add.length)
|
|
438
|
+
return;
|
|
439
|
+
const prefix = add.map(([k, v]) => k + ':' + v).join(';');
|
|
440
|
+
const cur = el.getAttribute('style');
|
|
441
|
+
el.setAttribute('style', cur ? prefix + ';' + cur : prefix);
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
function normalizeArabicPresentation(s) {
|
|
445
|
+
return s.replace(/[ﭐ-﷿ﹰ-ﻼ]+/g, (m) => m.normalize('NFKC'));
|
|
446
|
+
}
|
|
447
|
+
function normalizeArabicText(doc) {
|
|
448
|
+
const w = doc.createTreeWalker(doc.body, NodeFilter.SHOW_TEXT, null);
|
|
449
|
+
let n;
|
|
450
|
+
while ((n = w.nextNode()))
|
|
451
|
+
if (/[ﭐ-﷿ﹰ-ﻼ]/.test(n.nodeValue || ''))
|
|
452
|
+
n.nodeValue = normalizeArabicPresentation(n.nodeValue || '');
|
|
453
|
+
}
|
|
454
|
+
export function cleanPastedHTML(raw, editorDir = 'ltr') {
|
|
455
|
+
const cssRules = extractStyleRules(raw);
|
|
456
|
+
const doc = new DOMParser().parseFromString(preClean(raw), 'text/html');
|
|
457
|
+
applyStyleRules(doc, cssRules);
|
|
458
|
+
if (/class="?Mso|mso-|urn:schemas-microsoft-com/i.test(doc.body.innerHTML))
|
|
459
|
+
rebuildWordLists(doc);
|
|
460
|
+
fixGoogleDocs(doc);
|
|
461
|
+
fixLegacyAttrs(doc);
|
|
462
|
+
sanitize(doc.body, doc);
|
|
463
|
+
normalizeArabicText(doc);
|
|
464
|
+
const emptyP = (el) => el && el.tagName === 'P' && !el.textContent?.trim() && !el.querySelector('img,table');
|
|
465
|
+
while (emptyP(doc.body.firstElementChild))
|
|
466
|
+
doc.body.firstElementChild.remove();
|
|
467
|
+
while (emptyP(doc.body.lastElementChild))
|
|
468
|
+
doc.body.lastElementChild.remove();
|
|
469
|
+
return doc.body.innerHTML.trim();
|
|
470
|
+
}
|
|
471
|
+
export function normalizeTextPaste(raw) {
|
|
472
|
+
const txt = normalizeArabicPresentation(raw).replace(/\r/g, '');
|
|
473
|
+
const esc = (s) => s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
474
|
+
if (/\n/.test(txt)) {
|
|
475
|
+
return txt
|
|
476
|
+
.split(/\n{2,}/)
|
|
477
|
+
.map((par) => `<p dir="auto">${esc(par).replace(/\n/g, '<br>') || '<br>'}</p>`)
|
|
478
|
+
.join('');
|
|
479
|
+
}
|
|
480
|
+
return esc(txt);
|
|
481
|
+
}
|
|
482
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzdGUtZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvcmUvcGFzdGUtZW5naW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDO0lBQzNCLEdBQUc7SUFDSCxLQUFLO0lBQ0wsTUFBTTtJQUNOLElBQUk7SUFDSixJQUFJO0lBQ0osR0FBRztJQUNILEdBQUc7SUFDSCxRQUFRO0lBQ1IsR0FBRztJQUNILElBQUk7SUFDSixHQUFHO0lBQ0gsR0FBRztJQUNILFFBQVE7SUFDUixLQUFLO0lBQ0wsS0FBSztJQUNMLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLFlBQVk7SUFDWixLQUFLO0lBQ0wsTUFBTTtJQUNOLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLE9BQU87SUFDUCxPQUFPO0lBQ1AsT0FBTztJQUNQLE9BQU87SUFDUCxJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixTQUFTO0lBQ1QsVUFBVTtJQUNWLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBUTtJQUNSLFlBQVk7SUFDWixNQUFNO0NBQ1AsQ0FBQyxDQUFDO0FBRUgsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDN0IsWUFBWTtJQUNaLFdBQVc7SUFDWCxjQUFjO0lBQ2QsYUFBYTtJQUNiLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsc0JBQXNCO0lBQ3RCLE9BQU87SUFDUCxrQkFBa0I7SUFDbEIsWUFBWTtJQUNaLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixXQUFXO0lBQ1gsYUFBYTtJQUNiLGFBQWE7SUFDYixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLGFBQWE7SUFDYixRQUFRO0lBQ1IsWUFBWTtJQUNaLGVBQWU7SUFDZixhQUFhO0lBQ2IsY0FB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QyxDQUFDO0lBQ2QsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBBTExPV0VEX1RBR1MgPSBuZXcgU2V0KFtcbiAgJ3AnLFxuICAnZGl2JyxcbiAgJ3NwYW4nLFxuICAnYnInLFxuICAnaHInLFxuICAnYScsXG4gICdiJyxcbiAgJ3N0cm9uZycsXG4gICdpJyxcbiAgJ2VtJyxcbiAgJ3UnLFxuICAncycsXG4gICdzdHJpa2UnLFxuICAnc3ViJyxcbiAgJ3N1cCcsXG4gICdoMScsXG4gICdoMicsXG4gICdoMycsXG4gICdoNCcsXG4gICdoNScsXG4gICdoNicsXG4gICdibG9ja3F1b3RlJyxcbiAgJ3ByZScsXG4gICdjb2RlJyxcbiAgJ3VsJyxcbiAgJ29sJyxcbiAgJ2xpJyxcbiAgJ3RhYmxlJyxcbiAgJ3RoZWFkJyxcbiAgJ3Rib2R5JyxcbiAgJ3Rmb290JyxcbiAgJ3RyJyxcbiAgJ3RkJyxcbiAgJ3RoJyxcbiAgJ2NhcHRpb24nLFxuICAnY29sZ3JvdXAnLFxuICAnY29sJyxcbiAgJ2ltZycsXG4gICdmaWd1cmUnLFxuICAnZmlnY2FwdGlvbicsXG4gICdtYXJrJ1xuXSk7XG5cbmNvbnN0IEFMTE9XRURfU1RZTEVTID0gbmV3IFNldChbXG4gICd0ZXh0LWFsaWduJyxcbiAgJ2RpcmVjdGlvbicsXG4gICd1bmljb2RlLWJpZGknLFxuICAnZm9udC13ZWlnaHQnLFxuICAnZm9udC1zdHlsZScsXG4gICd0ZXh0LWRlY29yYXRpb24nLFxuICAndGV4dC1kZWNvcmF0aW9uLWxpbmUnLFxuICAnY29sb3InLFxuICAnYmFja2dyb3VuZC1jb2xvcicsXG4gICdiYWNrZ3JvdW5kJyxcbiAgJ2JhY2tncm91bmQtaW1hZ2UnLFxuICAnYmFja2dyb3VuZC1wb3NpdGlvbicsXG4gICdiYWNrZ3JvdW5kLXJlcGVhdCcsXG4gICdiYWNrZ3JvdW5kLXNpemUnLFxuICAnZm9udC1zaXplJyxcbiAgJ2ZvbnQtZmFtaWx5JyxcbiAgJ2xpbmUtaGVpZ2h0JyxcbiAgJ2xldHRlci1zcGFjaW5nJyxcbiAgJ3ZlcnRpY2FsLWFsaWduJyxcbiAgJ3RleHQtaW5kZW50JyxcbiAgJ21hcmdpbicsXG4gICdtYXJnaW4tdG9wJyxcbiAgJ21hcmdpbi1ib3R0b20nLFxuICAnbWFyZ2luLWxlZnQnLFxuICAnbWFyZ2luLXJpZ2h0JyxcbiAgJ21hcmdpbi1pbmxpbmUtc3RhcnQnLFxuICAnbWFyZ2luLWlubGluZS1lbmQnLFxuICAncGFkZGluZycsXG4gICdwYWRkaW5nLXRvcCcsXG4gICdwYWRkaW5nLWJvdHRvbScsXG4gICdwYWRkaW5nLWxlZnQnLFxuICAncGFkZGluZy1yaWdodCcsXG4gICd3aWR0aCcsXG4gICdoZWlnaHQnLFxuICAnbWluLXdpZHRoJyxcbiAgJ21heC13aWR0aCcsXG4gICdtaW4taGVpZ2h0JyxcbiAgJ21heC1oZWlnaHQnLFxuICAnYm9yZGVyJyxcbiAgJ2JvcmRlci10b3AnLFxuICAnYm9yZGVyLXJpZ2h0JyxcbiAgJ2JvcmRlci1ib3R0b20nLFxuICAnYm9yZGVyLWxlZnQnLFxuICAnYm9yZGVyLWNvbG9yJyxcbiAgJ2JvcmRlci1zdHlsZScsXG4gICdib3JkZXItd2lkdGgnLFxuICAnYm9yZGVyLXJhZGl1cycsXG4gICdib3JkZXItY29sbGFwc2UnLFxuICAnYm9yZGVyLXNwYWNpbmcnLFxuICAndGFibGUtbGF5b3V0JyxcbiAgJ2Zsb2F0JyxcbiAgJ2Rpc3BsYXknLFxuICAnYm94LXNpemluZycsXG4gICdsaXN0LXN0eWxlLXR5cGUnLFxuICAnd2hpdGUtc3BhY2UnXG5dKTtcblxuY29uc3QgQUxMT1dFRF9BVFRSUzogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xuICAnKic6IFsnZGlyJywgJ2xhbmcnLCAnY29sc3BhbicsICdyb3dzcGFuJ10sXG4gIGE6IFsnaHJlZicsICd0YXJnZXQnLCAncmVsJywgJ3RpdGxlJ10sXG4gIGltZzogWydzcmMnLCAnYWx0JywgJ3dpZHRoJywgJ2hlaWdodCcsICd0aXRsZSddLFxuICBjb2w6IFsnc3BhbicsICd3aWR0aCddLFxuICB0ZDogWyd3aWR0aCcsICd2YWxpZ24nXSxcbiAgdGg6IFsnd2lkdGgnLCAndmFsaWduJ10sXG4gIHRhYmxlOiBbJ3dpZHRoJywgJ2NlbGxwYWRkaW5nJywgJ2NlbGxzcGFjaW5nJ11cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3R5bGVNYXAge1xuICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHlsZU1hcChlbDogRWxlbWVudCk6IFN0eWxlTWFwIHtcbiAgY29uc3QgbWFwOiBTdHlsZU1hcCA9IHt9O1xuICBjb25zdCByYXcgPSBlbC5nZXRBdHRyaWJ1dGUgJiYgZWwuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuICBpZiAoIXJhdykgcmV0dXJuIG1hcDtcbiAgcmF3LnNwbGl0KCc7JykuZm9yRWFjaCgocCkgPT4ge1xuICAgIGNvbnN0IGkgPSBwLmluZGV4T2YoJzonKTtcbiAgICBpZiAoaSA8IDEpIHJldHVybjtcbiAgICBtYXBbcC5zbGljZSgwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKV0gPSBwLnNsaWNlKGkgKyAxKS50cmltKCk7XG4gIH0pO1xuICByZXR1cm4gbWFwO1xufVxuXG5mdW5jdGlvbiBwcmVDbGVhbihodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaHRtbFxuICAgIC5yZXBsYWNlKC88IS0tXFxbaWYgIXN1cHBvcnRMaXN0c1xcXS0tPihbXFxzXFxTXSo/KTwhLS1cXFtlbmRpZlxcXS0tPi9naSwgJyQxJylcbiAgICAucmVwbGFjZSgvPCEtLVxcW2lmICFzdXBwb3J0TGlzdHNcXF0+KFtcXHNcXFNdKj8pPCFcXFtlbmRpZlxcXS0tPi9naSwgJyQxJylcbiAgICAucmVwbGFjZSgvPCFcXFtpZiAhc3VwcG9ydExpc3RzXFxdPihbXFxzXFxTXSo/KTwhXFxbZW5kaWZcXF0+L2dpLCAnJDEnKVxuICAgIC5yZXBsYWNlKC88IS0tXFxbaWYgW1xcc1xcU10qPzwhXFxbZW5kaWZcXF0tLT4vZ2ksICcnKVxuICAgIC5yZXBsYWNlKC88IS0tW1xcc1xcU10qPy0tPi9nLCAnJylcbiAgICAucmVwbGFjZSgvPChzY3JpcHR8c3R5bGV8eG1sfHRpdGxlKVtcXHNcXFNdKj88XFwvXFwxPi9naSwgJycpXG4gICAgLnJlcGxhY2UoLzxcXC8/KG1ldGF8bGluaylbXj5dKj4vZ2ksICcnKVxuICAgIC5yZXBsYWNlKC88XFw/eG1sW1xcc1xcU10qP1xcPz4vZ2ksICcnKVxuICAgIC5yZXBsYWNlKC88XFwvPyhvfHZ8d3xtfHN0MSk6W14+XSo+L2dpLCAnJyk7XG59XG5cbmludGVyZmFjZSBNYXJrZXJJbmZvIHtcbiAgb3JkZXJlZDogYm9vbGVhbjtcbiAgc3R5bGU/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIG1hcmtlclR5cGUobXQ6IHN0cmluZyk6IE1hcmtlckluZm8ge1xuICBpZiAoL15bMC05XStbXFwuXFwp2IxdLy50ZXN0KG10KSkgcmV0dXJuIHsgb3JkZXJlZDogdHJ1ZSB9O1xuICBpZiAoL15b2aAt2anbsC3buV0rLy50ZXN0KG10KSkgcmV0dXJuIHsgb3JkZXJlZDogdHJ1ZSwgc3R5bGU6ICdhcmFiaWMtaW5kaWMnIH07XG4gIGlmICgvXltpdnhsY117Mix9W1xcLlxcKV0vLnRlc3QobXQpKSByZXR1cm4geyBvcmRlcmVkOiB0cnVlLCBzdHlsZTogJ2xvd2VyLXJvbWFuJyB9O1xuICBpZiAoL15bSVZYTENdezIsfVtcXC5cXCldLy50ZXN0KG10KSkgcmV0dXJuIHsgb3JkZXJlZDogdHJ1ZSwgc3R5bGU6ICd1cHBlci1yb21hbicgfTtcbiAgaWYgKC9eW2Etel1bXFwuXFwpXS8udGVzdChtdCkpIHJldHVybiB7IG9yZGVyZWQ6IHRydWUsIHN0eWxlOiAnbG93ZXItYWxwaGEnIH07XG4gIGlmICgvXltBLVpdW1xcLlxcKV0vLnRlc3QobXQpKSByZXR1cm4geyBvcmRlcmVkOiB0cnVlLCBzdHlsZTogJ3VwcGVyLWFscGhhJyB9O1xuICBpZiAoL15b2KEt2YpdW1xcLlxcKdiMLV0vLnRlc3QobXQpKSByZXR1cm4geyBvcmRlcmVkOiB0cnVlLCBzdHlsZTogJ2FyYWJpYy1pbmRpYycgfTtcbiAgcmV0dXJuIHsgb3JkZXJlZDogZmFsc2UgfTtcbn1cblxuZnVuY3Rpb24gcmVidWlsZFdvcmRMaXN0cyhkb2M6IERvY3VtZW50KTogdm9pZCB7XG4gIGNvbnN0IGlzTGlzdFAgPSAocDogRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHMgPSAocC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJykgfHwgJycpICsgJyAnICsgKHAuY2xhc3NOYW1lIHx8ICcnKTtcbiAgICByZXR1cm4gL21zby1saXN0XFxzKjooPyFcXHMqaWdub3JlKS9pLnRlc3QocykgfHwgL01zb0xpc3RQYXJhZ3JhcGgvaS50ZXN0KHMpO1xuICB9O1xuICBjb25zdCBncm91cHM6IEhUTUxQYXJhZ3JhcGhFbGVtZW50W11bXSA9IFtdO1xuICBsZXQgY3VyOiBIVE1MUGFyYWdyYXBoRWxlbWVudFtdIHwgbnVsbCA9IG51bGw7XG4gIEFycmF5LmZyb20oZG9jLmJvZHkucXVlcnlTZWxlY3RvckFsbCgncCcpKS5mb3JFYWNoKChwKSA9PiB7XG4gICAgaWYgKCFpc0xpc3RQKHApKSB7XG4gICAgICBjdXIgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcmV2ID0gcC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgIGlmIChjdXIgJiYgcHJldiAmJiBjdXJbY3VyLmxlbmd0aCAtIDFdID09PSBwcmV2KSBjdXIucHVzaChwKTtcbiAgICBlbHNlIHtcbiAgICAgIGN1ciA9IFtwXTtcbiAgICAgIGdyb3Vwcy5wdXNoKGN1cik7XG4gICAgfVxuICB9KTtcbiAgZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgY29uc3Qgc3RhY2s6IHsgbGlzdDogSFRNTE9MaXN0RWxlbWVudCB8IEhUTUxVTGlzdEVsZW1lbnQ7IGxldmVsOiBudW1iZXIgfVtdID0gW107XG4gICAgY29uc3Qgcm9vdEFuY2hvciA9IGdyb3VwWzBdO1xuICAgIGdyb3VwLmZvckVhY2goKHApID0+IHtcbiAgICAgIGNvbnN0IHN0eWxlID0gcC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJykgfHwgJyc7XG4gICAgICBjb25zdCBsZXZlbCA9ICsoc3R5bGUubWF0Y2goL2xldmVsKFxcZCspL2kpPy5bMV0gfHwgMSk7XG4gICAgICBjb25zdCBtYXJrZXIgPSBBcnJheS5mcm9tKHAucXVlcnlTZWxlY3RvckFsbCgnc3BhbicpKS5maW5kKChzcCkgPT5cbiAgICAgICAgL21zby1saXN0XFxzKjpcXHMqaWdub3JlL2kudGVzdChzcC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJykgfHwgJycpXG4gICAgICApO1xuICAgICAgY29uc3QgbXQgPSBtYXJrZXJcbiAgICAgICAgPyBtYXJrZXIudGV4dENvbnRlbnQ/LnRyaW0oKSB8fCAnJ1xuICAgICAgICA6IChwLnRleHRDb250ZW50Py50cmltKCkubWF0Y2goL15cXFN7MSw0fS8pIHx8IFsnJ10pWzBdO1xuICAgICAgY29uc3QgeyBvcmRlcmVkLCBzdHlsZTogbGlzdFN0eWxlIH0gPSBtYXJrZXJUeXBlKG10KTtcbiAgICAgIGlmIChtYXJrZXIpIG1hcmtlci5yZW1vdmUoKTtcbiAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggJiYgc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0ubGV2ZWwgPiBsZXZlbCkgc3RhY2sucG9wKCk7XG4gICAgICBpZiAoIXN0YWNrLmxlbmd0aCB8fCBzdGFja1tzdGFjay5sZW5ndGggLSAxXS5sZXZlbCA8IGxldmVsKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBkb2MuY3JlYXRlRWxlbWVudChvcmRlcmVkID8gJ29sJyA6ICd1bCcpO1xuICAgICAgICBpZiAob3JkZXJlZCAmJiBsaXN0U3R5bGUpIGxpc3Quc3R5bGUubGlzdFN0eWxlVHlwZSA9IGxpc3RTdHlsZTtcbiAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHBhciA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdLmxpc3Q7XG4gICAgICAgICAgKHBhci5sYXN0RWxlbWVudENoaWxkIHx8IHBhcikuYXBwZW5kQ2hpbGQobGlzdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm9vdEFuY2hvci5wYXJlbnROb2RlIS5pbnNlcnRCZWZvcmUobGlzdCwgcm9vdEFuY2hvcik7XG4gICAgICAgIH1cbiAgICAgICAgc3RhY2sucHVzaCh7IGxpc3QsIGxldmVsIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgbGkgPSBkb2MuY3JlYXRlRWxlbWVudCgnbGknKTtcbiAgICAgIGNvbnN0IGtlZXAgPSBzdHlsZU1hcChwKTtcbiAgICAgIGNvbnN0IGtlcHQgPSBbJ3RleHQtYWxpZ24nLCAnZGlyZWN0aW9uJywgJ3VuaWNvZGUtYmlkaScsICdjb2xvcicsICdmb250LXNpemUnLCAnZm9udC1mYW1pbHknLCAnYmFja2dyb3VuZC1jb2xvciddXG4gICAgICAgIC5maWx0ZXIoKGspID0+IGtlZXBba10pXG4gICAgICAgIC5tYXAoKGspID0+IGsgKyAnOicgKyBrZWVwW2tdKVxuICAgICAgICAuam9pbignOycpO1xuICAgICAgaWYgKGtlcHQpIGxpLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBrZXB0KTtcbiAgICAgIGlmIChwLmdldEF0dHJpYnV0ZSgnZGlyJykpIGxpLnNldEF0dHJpYnV0ZSgnZGlyJywgcC5nZXRBdHRyaWJ1dGUoJ2RpcicpISk7XG4gICAgICB3aGlsZSAocC5maXJzdENoaWxkKSBsaS5hcHBlbmRDaGlsZChwLmZpcnN0Q2hpbGQpO1xuICAgICAgc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0ubGlzdC5hcHBlbmRDaGlsZChsaSk7XG4gICAgICBwLnJlbW92ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZml4R29vZ2xlRG9jcyhkb2M6IERvY3VtZW50KTogdm9pZCB7XG4gIGRvYy5xdWVyeVNlbGVjdG9yQWxsKCdiW2lkXj1cImRvY3MtaW50ZXJuYWwtZ3VpZFwiXScpLmZvckVhY2goKGIpID0+IHtcbiAgICB3aGlsZSAoYi5maXJzdENoaWxkKSBiLnBhcmVudE5vZGUhLmluc2VydEJlZm9yZShiLmZpcnN0Q2hpbGQsIGIpO1xuICAgIGIucmVtb3ZlKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmaXhMZWdhY3lBdHRycyhkb2M6IERvY3VtZW50KTogdm9pZCB7XG4gIGRvYy5xdWVyeVNlbGVjdG9yQWxsKCd0YWJsZScpLmZvckVhY2goKHRiKSA9PiB7XG4gICAgY29uc3QgaHRtbFRiID0gdGIgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKCFzdHlsZU1hcChodG1sVGIpWydib3JkZXItY29sbGFwc2UnXSkgaHRtbFRiLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gJ2NvbGxhcHNlJztcbiAgfSk7XG4gIGRvYy5xdWVyeVNlbGVjdG9yQWxsKCdbYWxpZ25dJykuZm9yRWFjaCgoZWwpID0+IHtcbiAgICBjb25zdCBodG1sRWwgPSBlbCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCB2ID0gaHRtbEVsLmdldEF0dHJpYnV0ZSgnYWxpZ24nKSEudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoaHRtbEVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RhYmxlJykge1xuICAgICAgaWYgKHYgPT09ICdjZW50ZXInKSB7XG4gICAgICAgIGh0bWxFbC5zdHlsZS5tYXJnaW5MZWZ0ID0gaHRtbEVsLnN0eWxlLm1hcmdpbkxlZnQgfHwgJ2F1dG8nO1xuICAgICAgICBodG1sRWwuc3R5bGUubWFyZ2luUmlnaHQgPSBodG1sRWwuc3R5bGUubWFyZ2luUmlnaHQgfHwgJ2F1dG8nO1xuICAgICAgfSBlbHNlIGlmICh2ID09PSAncmlnaHQnKSBodG1sRWwuc3R5bGUubWFyZ2luTGVmdCA9IGh0bWxFbC5zdHlsZS5tYXJnaW5MZWZ0IHx8ICdhdXRvJztcbiAgICAgIGVsc2UgaWYgKHYgPT09ICdsZWZ0JykgaHRtbEVsLnN0eWxlLm1hcmdpblJpZ2h0ID0gaHRtbEVsLnN0eWxlLm1hcmdpblJpZ2h0IHx8ICdhdXRvJztcbiAgICB9IGVsc2UgaWYgKFsnbGVmdCcsICdyaWdodCcsICdjZW50ZXInLCAnanVzdGlmeSddLmluY2x1ZGVzKHYpKSB7XG4gICAgICBodG1sRWwuc3R5bGUudGV4dEFsaWduID0gaHRtbEVsLnN0eWxlLnRleHRBbGlnbiB8fCB2O1xuICAgICAgLy8gV29yZCBhbGlnbnMgdGFibGVzIGJ5IHdyYXBwaW5nIHRoZW0gaW4gPGRpdiBhbGlnbj0uLi4+OyB0ZXh0LWFsaWduXG4gICAgICAvLyBkb2VzIG5vdCBtb3ZlIGEgdGFibGUgYm94LCBzbyBtaXJyb3IgdGhlIGFsaWdubWVudCBvbnRvIHRoZSB0YWJsZS5cbiAgICAgIEFycmF5LmZyb20oaHRtbEVsLmNoaWxkcmVuKS5mb3JFYWNoKChjaCkgPT4ge1xuICAgICAgICBpZiAoY2gudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAndGFibGUnKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHRiID0gY2ggYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICh2ID09PSAnY2VudGVyJykge1xuICAgICAgICAgIHRiLnN0eWxlLm1hcmdpbkxlZnQgPSB0Yi5zdHlsZS5tYXJnaW5MZWZ0IHx8ICdhdXRvJztcbiAgICAgICAgICB0Yi5zdHlsZS5tYXJnaW5SaWdodCA9IHRiLnN0eWxlLm1hcmdpblJpZ2h0IHx8ICdhdXRvJztcbiAgICAgICAgfSBlbHNlIGlmICh2ID09PSAncmlnaHQnKSB0Yi5zdHlsZS5tYXJnaW5MZWZ0ID0gdGIuc3R5bGUubWFyZ2luTGVmdCB8fCAnYXV0byc7XG4gICAgICAgIGVsc2UgaWYgKHYgPT09ICdsZWZ0JykgdGIuc3R5bGUubWFyZ2luUmlnaHQgPSB0Yi5zdHlsZS5tYXJnaW5SaWdodCB8fCAnYXV0byc7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaHRtbEVsLnJlbW92ZUF0dHJpYnV0ZSgnYWxpZ24nKTtcbiAgfSk7XG4gIGRvYy5xdWVyeVNlbGVjdG9yQWxsKCdjZW50ZXIgdGFibGUnKS5mb3JFYWNoKCh0YikgPT4ge1xuICAgIGNvbnN0IGh0bWxUYiA9IHRiIGFzIEhUTUxFbGVtZW50O1xuICAgIGh0bWxUYi5zdHlsZS5tYXJnaW5MZWZ0ID0gaHRtbFRiLnN0eWxlLm1hcmdpbkxlZnQgfHwgJ2F1dG8nO1xuICAgIGh0bWxUYi5zdHlsZS5tYXJnaW5SaWdodCA9IGh0bWxUYi5zdHlsZS5tYXJnaW5SaWdodCB8fCAnYXV0byc7XG4gIH0pO1xuICBkb2MucXVlcnlTZWxlY3RvckFsbCgnW2JnY29sb3JdJykuZm9yRWFjaCgoZWwpID0+IHtcbiAgICBjb25zdCBodG1sRWwgPSBlbCBhcyBIVE1MRWxlbWVudDtcbiAgICBodG1sRWwuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gaHRtbEVsLnN0eWxlLmJhY2tncm91bmRDb2xvciB8fCBodG1sRWwuZ2V0QXR0cmlidXRlKCdiZ2NvbG9yJykhO1xuICAgIGh0bWxFbC5yZW1vdmVBdHRyaWJ1dGUoJ2JnY29sb3InKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNhbml0aXplKG5vZGU6IE5vZGUsIGRvYzogRG9jdW1lbnQpOiB2b2lkIHtcbiAgQXJyYXkuZnJvbShub2RlLmNoaWxkTm9kZXMpLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSBOb2RlLkNPTU1FTlRfTk9ERSkge1xuICAgICAgY2hpbGQucmVtb3ZlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjaGlsZC5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHJldHVybjtcbiAgICBjb25zdCBlbCA9IGNoaWxkIGFzIEVsZW1lbnQ7XG4gICAgY29uc3QgdGFnID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghQUxMT1dFRF9UQUdTLmhhcyh0YWcpKSB7XG4gICAgICBpZiAodGFnID09PSAnZm9udCcpIHtcbiAgICAgICAgY29uc3Qgc3BhbiA9IGRvYy5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIGlmIChlbC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJykpIHNwYW4uc2V0QXR0cmlidXRlKCdzdHlsZScsIGVsLmdldEF0dHJpYnV0ZSgnc3R5bGUnKSEpO1xuICAgICAgICBpZiAoZWwuZ2V0QXR0cmlidXRlKCdjb2xvcicpKSBzcGFuLnN0eWxlLmNvbG9yID0gZWwuZ2V0QXR0cmlidXRlKCdjb2xvcicpITtcbiAgICAgICAgaWYgKGVsLmdldEF0dHJpYnV0ZSgnZmFjZScpKSBzcGFuLnN0eWxlLmZvbnRGYW1pbHkgPSBlbC5nZXRBdHRyaWJ1dGUoJ2ZhY2UnKSE7XG4gICAgICAgIGNvbnN0IHN6ID0gZWwuZ2V0QXR0cmlidXRlKCdzaXplJyk7XG4gICAgICAgIGlmIChzeiAmJiAhc3Bhbi5zdHlsZS5mb250U2l6ZSkge1xuICAgICAgICAgIGNvbnN0IHN6TWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAgICAgJzEnOiAnOHB0JyxcbiAgICAgICAgICAgICcyJzogJzEwcHQnLFxuICAgICAgICAgICAgJzMnOiAnMTJwdCcsXG4gICAgICAgICAgICAnNCc6ICcxNHB0JyxcbiAgICAgICAgICAgICc1JzogJzE4cHQnLFxuICAgICAgICAgICAgJzYnOiAnMjRwdCcsXG4gICAgICAgICAgICAnNyc6ICczNnB0J1xuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHN6TWFwW3N6XSkgc3Bhbi5zdHlsZS5mb250U2l6ZSA9IHN6TWFwW3N6XTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoZWwuZmlyc3RDaGlsZCkgc3Bhbi5hcHBlbmRDaGlsZChlbC5maXJzdENoaWxkKTtcbiAgICAgICAgZWwucmVwbGFjZVdpdGgoc3Bhbik7XG4gICAgICAgIHNhbml0aXplKHNwYW4sIGRvYyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNhbml0aXplKGVsLCBkb2MpO1xuICAgICAgd2hpbGUgKGVsLmZpcnN0Q2hpbGQpIGVsLnBhcmVudE5vZGUhLmluc2VydEJlZm9yZShlbC5maXJzdENoaWxkLCBlbCk7XG4gICAgICBlbC5yZW1vdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYWxsb3dlZCA9IG5ldyBTZXQoWy4uLihBTExPV0VEX0FUVFJTWycqJ10gfHwgW10pLCAuLi4oQUxMT1dFRF9BVFRSU1t0YWddIHx8IFtdKV0pO1xuICAgIEFycmF5LmZyb20oZWwuYXR0cmlidXRlcykuZm9yRWFjaCgoYSkgPT4ge1xuICAgICAgY29uc3QgbiA9IGEubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKG4gIT09ICdzdHlsZScgJiYgIWFsbG93ZWQuaGFzKG4pKSBlbC5yZW1vdmVBdHRyaWJ1dGUoYS5uYW1lKTtcbiAgICB9KTtcbiAgICBpZiAodGFnID09PSAnYScpIHtcbiAgICAgIGNvbnN0IGhyZWYgPSBlbC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJztcbiAgICAgIGlmICghL14oaHR0cHM/OnxtYWlsdG86fHRlbDp8IykvaS50ZXN0KGhyZWYpKSBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICB9XG4gICAgaWYgKHRhZyA9PT0gJ2ltZycpIHtcbiAgICAgIGNvbnN0IHNyYyA9IGVsLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJyc7XG4gICAgICBpZiAoIS9eKGh0dHBzPzp8ZGF0YTppbWFnZVxcL3xibG9iOikvaS50ZXN0KHNyYykpIHtcbiAgICAgICAgY29uc3QgcGggPSBkb2MuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICBwaC50ZXh0Q29udGVudCA9ICdbbG9jYWwgaW1hZ2Ug4oCUIHBhc3RlIGl0IHNlcGFyYXRlbHldJztcbiAgICAgICAgcGguc2V0QXR0cmlidXRlKCdzdHlsZScsICdjb2xvcjojYTMzO2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtc2l6ZToxMnB4Jyk7XG4gICAgICAgIGVsLnJlcGxhY2VXaXRoKHBoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzdHlsZXMgPSBzdHlsZU1hcChlbCk7XG4gICAgY29uc3Qga2VwdDogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhzdHlsZXMpKSB7XG4gICAgICBpZiAoIUFMTE9XRURfU1RZTEVTLmhhcyhrKSkgY29udGludWU7XG4gICAgICBpZiAoL2V4cHJlc3Npb258amF2YXNjcmlwdHx1cmxcXHMqXFwoXFxzKlsnXCJdP1xccypmaWxlOi9pLnRlc3QodikpIGNvbnRpbnVlO1xuICAgICAgaWYgKGsgPT09ICdmb250LXdlaWdodCcgJiYgL14oNDAwfG5vcm1hbCkkL2kudGVzdCh2KSkgY29udGludWU7XG4gICAgICBpZiAoayA9PT0gJ2ZvbnQtc3R5bGUnICYmIC9ebm9ybWFsJC9pLnRlc3QodikpIGNvbnRpbnVlO1xuICAgICAgaWYgKGsgPT09ICd0ZXh0LWRlY29yYXRpb24nICYmIC9ebm9uZSQvaS50ZXN0KHYpKSBjb250aW51ZTtcbiAgICAgIGtlcHQucHVzaChrICsgJzonICsgdik7XG4gICAgfVxuICAgIGlmIChrZXB0Lmxlbmd0aCkgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGtlcHQuam9pbignOycpKTtcbiAgICBlbHNlIGVsLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgc2FuaXRpemUoZWwsIGRvYyk7XG4gICAgaWYgKHRhZyA9PT0gJ3NwYW4nICYmICFlbC5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgd2hpbGUgKGVsLmZpcnN0Q2hpbGQpIGVsLnBhcmVudE5vZGUhLmluc2VydEJlZm9yZShlbC5maXJzdENoaWxkLCBlbCk7XG4gICAgICBlbC5yZW1vdmUoKTtcbiAgICB9XG4gIH0pO1xufVxuXG5pbnRlcmZhY2UgU3R5bGVSdWxlIHtcbiAgc2VsOiBzdHJpbmc7XG4gIGRlY2xzOiBbc3RyaW5nLCBzdHJpbmddW107XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RTdHlsZVJ1bGVzKHJhdzogc3RyaW5nKTogU3R5bGVSdWxlW10ge1xuICBjb25zdCBydWxlczogU3R5bGVSdWxlW10gPSBbXTtcbiAgY29uc3QgcmUgPSAvPHN0eWxlW14+XSo+KFtcXHNcXFNdKj8pPFxcL3N0eWxlPi9naTtcbiAgbGV0IG06IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG4gIHdoaWxlICgobSA9IHJlLmV4ZWMocmF3KSkpIHtcbiAgICBsZXQgY3NzID0gbVsxXS5yZXBsYWNlKC88IS0tfC0tPi9nLCAnJykucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy9nLCAnJyk7XG4gICAgY3NzID0gY3NzLnJlcGxhY2UoL0BtZWRpYVtee10qXFx7KD86W157fV0qXFx7W157fV0qXFx9KSpbXnt9XSpcXH0vZ2ksICcnKTtcbiAgICBjc3MgPSBjc3MucmVwbGFjZSgvQFtcXHctXStbXntdKlxce1tee31dKlxcfS9nLCAnJyk7XG4gICAgbGV0IHJtOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xuICAgIGNvbnN0IHJyZSA9IC8oW157fV0rKVxceyhbXn1dKilcXH0vZztcbiAgICB3aGlsZSAoKHJtID0gcnJlLmV4ZWMoY3NzKSkpIHtcbiAgICAgIGNvbnN0IGRlY2xzID0gcm1bMl1cbiAgICAgICAgLnNwbGl0KCc7JylcbiAgICAgICAgLm1hcCgoZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGkgPSBkLmluZGV4T2YoJzonKTtcbiAgICAgICAgICBpZiAoaSA8IDEpIHJldHVybiBudWxsO1xuICAgICAgICAgIHJldHVybiBbZC5zbGljZSgwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKSwgZC5zbGljZShpICsgMSkudHJpbSgpXSBhcyBbc3RyaW5nLCBzdHJpbmddO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChkKTogZCBpcyBbc3RyaW5nLCBzdHJpbmddID0+ICEhZCAmJiAhIWRbMV0pO1xuICAgICAgaWYgKCFkZWNscy5sZW5ndGgpIGNvbnRpbnVlO1xuICAgICAgcm1bMV1cbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLm1hcCgocykgPT4gcy50cmltKCkpXG4gICAgICAgIC5maWx0ZXIoKHMpID0+IHMgJiYgIXMuc3RhcnRzV2l0aCgnQCcpKVxuICAgICAgICAuZm9yRWFjaCgoc2VsKSA9PiBydWxlcy5wdXNoKHsgc2VsLCBkZWNscyB9KSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBydWxlcztcbn1cblxuZnVuY3Rpb24gYXBwbHlTdHlsZVJ1bGVzKGRvYzogRG9jdW1lbnQsIHJ1bGVzOiBTdHlsZVJ1bGVbXSk6IHZvaWQge1xuICBpZiAoIXJ1bGVzLmxlbmd0aCkgcmV0dXJuO1xuICBjb25zdCBhZGRNYXAgPSBuZXcgTWFwPEVsZW1lbnQsIHsgW2s6IHN0cmluZ106IHN0cmluZyB9PigpO1xuICBydWxlcy5mb3JFYWNoKCh7IHNlbCwgZGVjbHMgfSkgPT4ge1xuICAgIGxldCBlbHM6IE5vZGVMaXN0T2Y8RWxlbWVudD47XG4gICAgdHJ5IHtcbiAgICAgIGVscyA9IGRvYy5xdWVyeVNlbGVjdG9yQWxsKHNlbCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgIGxldCBtID0gYWRkTWFwLmdldChlbCk7XG4gICAgICBpZiAoIW0pIHtcbiAgICAgICAgbSA9IHt9O1xuICAgICAgICBhZGRNYXAuc2V0KGVsLCBtKTtcbiAgICAgIH1cbiAgICAgIGRlY2xzLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgICAgICBtIVtrXSA9IHY7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG4gIGFkZE1hcC5mb3JFYWNoKChtLCBlbCkgPT4ge1xuICAgIGNvbnN0IGhhdmUgPSBzdHlsZU1hcChlbCk7XG4gICAgY29uc3QgaGFzRGlyID0gZWwuaGFzQXR0cmlidXRlKCdkaXInKTtcbiAgICBjb25zdCBoYXNBbGlnbiA9IGVsLmhhc0F0dHJpYnV0ZSgnYWxpZ24nKTtcbiAgICBjb25zdCBhZGQgPSBPYmplY3QuZW50cmllcyhtKS5maWx0ZXIoKFtrXSkgPT4ge1xuICAgICAgaWYgKGsgaW4gaGF2ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKChrID09PSAnZGlyZWN0aW9uJyB8fCBrID09PSAndW5pY29kZS1iaWRpJykgJiYgaGFzRGlyKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoayA9PT0gJ3RleHQtYWxpZ24nICYmIChoYXNBbGlnbiB8fCBoYXNEaXIpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoKGsgPT09ICdiYWNrZ3JvdW5kJyB8fCBrID09PSAnYmFja2dyb3VuZC1jb2xvcicpICYmIGVsLmhhc0F0dHJpYnV0ZSgnYmdjb2xvcicpKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBpZiAoIWFkZC5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBwcmVmaXggPSBhZGQubWFwKChbaywgdl0pID0+IGsgKyAnOicgKyB2KS5qb2luKCc7Jyk7XG4gICAgY29uc3QgY3VyID0gZWwuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBjdXIgPyBwcmVmaXggKyAnOycgKyBjdXIgOiBwcmVmaXgpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQXJhYmljUHJlc2VudGF0aW9uKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1vvrZAt77e/77mwLe+7vF0rL2csIChtKSA9PiBtLm5vcm1hbGl6ZSgnTkZLQycpKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQXJhYmljVGV4dChkb2M6IERvY3VtZW50KTogdm9pZCB7XG4gIGNvbnN0IHcgPSBkb2MuY3JlYXRlVHJlZVdhbGtlcihkb2MuYm9keSwgTm9kZUZpbHRlci5TSE9XX1RFWFQsIG51bGwpO1xuICBsZXQgbjogTm9kZSB8IG51bGw7XG4gIHdoaWxlICgobiA9IHcubmV4dE5vZGUoKSkpXG4gICAgaWYgKC9b762QLe+3v++5sC3vu7xdLy50ZXN0KG4ubm9kZVZhbHVlIHx8ICcnKSkgbi5ub2RlVmFsdWUgPSBub3JtYWxpemVBcmFiaWNQcmVzZW50YXRpb24obi5ub2RlVmFsdWUgfHwgJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5QYXN0ZWRIVE1MKHJhdzogc3RyaW5nLCBlZGl0b3JEaXI6ICdsdHInIHwgJ3J0bCcgPSAnbHRyJyk6IHN0cmluZyB7XG4gIGNvbnN0IGNzc1J1bGVzID0gZXh0cmFjdFN0eWxlUnVsZXMocmF3KTtcbiAgY29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhwcmVDbGVhbihyYXcpLCAndGV4dC9odG1sJyk7XG4gIGFwcGx5U3R5bGVSdWxlcyhkb2MsIGNzc1J1bGVzKTtcbiAgaWYgKC9jbGFzcz1cIj9Nc298bXNvLXx1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tL2kudGVzdChkb2MuYm9keS5pbm5lckhUTUwpKSByZWJ1aWxkV29yZExpc3RzKGRvYyk7XG4gIGZpeEdvb2dsZURvY3MoZG9jKTtcbiAgZml4TGVnYWN5QXR0cnMoZG9jKTtcbiAgc2FuaXRpemUoZG9jLmJvZHksIGRvYyk7XG4gIG5vcm1hbGl6ZUFyYWJpY1RleHQoZG9jKTtcbiAgY29uc3QgZW1wdHlQID0gKGVsOiBFbGVtZW50IHwgbnVsbCkgPT4gZWwgJiYgZWwudGFnTmFtZSA9PT0gJ1AnICYmICFlbC50ZXh0Q29udGVudD8udHJpbSgpICYmICFlbC5xdWVyeVNlbGVjdG9yKCdpbWcsdGFibGUnKTtcbiAgd2hpbGUgKGVtcHR5UChkb2MuYm9keS5maXJzdEVsZW1lbnRDaGlsZCkpIGRvYy5ib2R5LmZpcnN0RWxlbWVudENoaWxkIS5yZW1vdmUoKTtcbiAgd2hpbGUgKGVtcHR5UChkb2MuYm9keS5sYXN0RWxlbWVudENoaWxkKSkgZG9jLmJvZHkubGFzdEVsZW1lbnRDaGlsZCEucmVtb3ZlKCk7XG4gIHJldHVybiBkb2MuYm9keS5pbm5lckhUTUwudHJpbSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVGV4dFBhc3RlKHJhdzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdHh0ID0gbm9ybWFsaXplQXJhYmljUHJlc2VudGF0aW9uKHJhdykucmVwbGFjZSgvXFxyL2csICcnKTtcbiAgY29uc3QgZXNjID0gKHM6IHN0cmluZykgPT4gcy5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG4gIGlmICgvXFxuLy50ZXN0KHR4dCkpIHtcbiAgICByZXR1cm4gdHh0XG4gICAgICAuc3BsaXQoL1xcbnsyLH0vKVxuICAgICAgLm1hcCgocGFyKSA9PiBgPHAgZGlyPVwiYXV0b1wiPiR7ZXNjKHBhcikucmVwbGFjZSgvXFxuL2csICc8YnI+JykgfHwgJzxicj4nfTwvcD5gKVxuICAgICAgLmpvaW4oJycpO1xuICB9XG4gIHJldHVybiBlc2ModHh0KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgRWRpdG9yTGFuZ3VhZ2UgPSAnZW4nIHwgJ2FyJztcblxuZXhwb3J0IGludGVyZmFjZSBUb29sYmFyR3JvdXBDb25maWcge1xuICBpdGVtczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUNvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IEFycmF5PHN0cmluZyB8IHsgbGFiZWw6IHN0cmluZzsgYWN0aW9uOiBzdHJpbmc7IHNob3J0Y3V0Pzogc3RyaW5nIH0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvckluaXRPcHRpb25zIHtcbiAgdGFyZ2V0OiBIVE1MRWxlbWVudDtcbiAgbGFuZ3VhZ2U/OiBFZGl0b3JMYW5ndWFnZTtcbiAgaGVpZ2h0PzogbnVtYmVyO1xuICBpbml0aWFsQ29udGVudD86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAoY29udGVudDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblJlYWR5PzogKGVkaXRvcjogRmFibGVFZGl0b3JBcGkpID0+IHZvaWQ7XG4gIC8qKiBgdHJ1ZWAvb21pdHRlZCA9IGRlZmF1bHQgbWVudSBzZXQgKGBmaWxlIGVkaXQgdmlldyBpbnNlcnQgZm9ybWF0IHRvb2xzIHRhYmxlIGhlbHBgKS5cbiAgICogIGBmYWxzZWAgPSBoaWRkZW4uIEEgc3RyaW5nIGlzIGEgc3BhY2Utc2VwYXJhdGVkIHN1YnNldC9yZW9yZGVyIG9mIHRob3NlIGtleXMsIGUuZy5cbiAgICogIGAnZmlsZSBlZGl0IHZpZXcgaW5zZXJ0IGZvcm1hdCB0b29scyB0YWJsZSBoZWxwJ2AuIFVua25vd24gdG9rZW5zIGFyZSBpZ25vcmVkIHdpdGggYVxuICAgKiAgY29uc29sZSB3YXJuaW5nOyByZWNvZ25pemVkIHRva2VucyByZW5kZXIgaW4gdGhlIG9yZGVyIGdpdmVuLCBkdXBsaWNhdGVzIGFyZSBkcm9wcGVkLiAqL1xuICBtZW51YmFyPzogYm9vbGVhbiB8IHN0cmluZztcbiAgLyoqIGB0cnVlYC9vbWl0dGVkID0gdGhlIGJ1aWx0LWluIGRlZmF1bHQgdG9vbGJhci4gYGZhbHNlYCA9IGhpZGRlbi4gQSBzdHJpbmcgbGF5cyBvdXRcbiAgICogIHRoZSB0b29sYmFyOiBgfGAgc2VwYXJhdGVzIHZpc3VhbCBncm91cHMsIHNwYWNlcyBzZXBhcmF0ZSBpdGVtcyB3aXRoaW4gYSBncm91cCwgZS5nLlxuICAgKiAgYCd1bmRvIHJlZG8gfCBib2xkIGl0YWxpYydgLiBVbmtub3duIHRva2VucyBhcmUgaWdub3JlZCB3aXRoIGEgY29uc29sZSB3YXJuaW5nLiAqL1xuICB0b29sYmFyPzogYm9vbGVhbiB8IHN0cmluZztcbiAgc3RhdHVzYmFyPzogYm9vbGVhbjtcbiAgcmVhZG9ubHk/OiBib29sZWFuO1xuICAvKiogU3RvcmFnZSBrZXkgc3VmZml4IGZvciB0aGUgYXV0b3NhdmVkIGRyYWZ0OyBkZWZhdWx0cyB0byB0aGUgcGFnZSBwYXRoLiAqL1xuICBkcmFmdEtleT86IHN0cmluZztcbiAgLyoqIE92ZXJyaWRlcyB0aGUgZm9udC1mYW1pbHkgbGlzdCBzaG93biBpbiB0aGUgdG9vbGJhcidzIGZvbnQgZHJvcGRvd24uIEFycmF5IG9mXG4gICAqICBgW2Rpc3BsYXlOYW1lLCBjc3NGb250RmFtaWx5VmFsdWVdYCB0dXBsZXMuIERlZmF1bHRzIHRvIGEgYnVpbHQtaW4gbGlzdC4gKi9cbiAgZm9udEZhbWlseUZvcm1hdHM/OiBbc3RyaW5nLCBzdHJpbmddW107XG4gIC8qKiBDdXN0b20gQ1NTIGZvciB0aGUgZWRpdGFibGUgY29udGVudCBhcmVhLiBCZWNhdXNlIEZhYmxlRWRpdG9yJ3MgZWRpdGFibGUgcmVnaW9uIGlzIGFcbiAgICogIHBsYWluIGBjb250ZW50ZWRpdGFibGVgIGRpdiAobm90IGFuIGlmcmFtZSksIHRoaXMgaXMgTk9UIGFyYml0cmFyeSBnbG9iYWwgQ1NTOiB0aGVcbiAgICogIGxpdGVyYWwgd29yZCBgYm9keWAgaW4geW91ciBDU1MgaXMgcmV3cml0dGVuIHRvIGEgc2VsZWN0b3Igc2NvcGVkIHRvIHRoaXMgZWRpdG9yXG4gICAqICBpbnN0YW5jZSdzIGNvbnRlbnQgZGl2LCBhbmQgZXZlcnkgb3RoZXIgc2VsZWN0b3IgaXMgdXNlZCB2ZXJiYXRpbSAoeW91clxuICAgKiAgcmVzcG9uc2liaWxpdHkgdG8gc2NvcGUpLiBJbnRlbmRlZCBmb3IgdGhlIGNvbW1vbiBwYXR0ZXJuIG9mXG4gICAqICBgYm9keSB7IGZvbnQtZmFtaWx5OiAuLi47IGZvbnQtc2l6ZTogLi4uIH1gIHBsdXMgYEBpbXBvcnRgIGZvbnQgZGVjbGFyYXRpb25zLiAqL1xuICBjb250ZW50U3R5bGU/OiBzdHJpbmc7XG4gIC8qKiBNSU1FIHR5cGVzIGFjY2VwdGVkIGJ5IHRoZSBuYXRpdmUgaW1hZ2UgZmlsZSBwaWNrZXIgKHRoZSBgYWNjZXB0YCBhdHRyaWJ1dGUpLlxuICAgKiAgRGVmYXVsdHMgdG8gYFsnaW1hZ2UvanBlZycsJ2ltYWdlL2pwZycsJ2ltYWdlL3BuZycsJ2ltYWdlL2dpZicsJ2ltYWdlL2JtcCcsJ2ltYWdlL3dlYnAnXWAuICovXG4gIGltYWdlRmlsZVR5cGVzPzogc3RyaW5nW107XG4gIC8qKiBDYWxsZWQgd2hlbiBhIHVzZXIgcGlja3Mgb3IgZHJvcHMgYW4gaW1hZ2UuIFJlc29sdmUgd2l0aCB0aGUgVVJMIHRvXG4gICAqICBpbnNlcnQgKGUuZy4gYWZ0ZXIgdXBsb2FkaW5nIHRvIFMzL0F6dXJlIEJsb2IveW91ciBvd24gc2VydmVyKS4gSWZcbiAgICogIG9taXR0ZWQsIGltYWdlcyBhcmUgaW5saW5lZCBhcyBiYXNlNjQgZGF0YSBVUklzIGluc3RlYWQuIFRoZSBob3N0IHJlc29sdmVzIGEgVVJMXG4gICAqICBhbmQgdGhlIGVuZ2luZSBvd25zIGFsbCBwbGFjZWhvbGRlci9wcm9ncmVzcy9pbnNlcnQgVUksIHNvIHRoZXJlJ3Mgbm8gc2VwYXJhdGVcbiAgICogIFwicGlja2VyXCIgY29uY2VwdCB0byBjb25maWd1cmUuICovXG4gIGltYWdlVXBsb2FkSGFuZGxlcj86IChmaWxlOiBGaWxlKSA9PiBQcm9taXNlPHN0cmluZz47XG4gIC8qKiBDYWxsZWQgd2hlbiBpbWFnZVVwbG9hZEhhbmRsZXIgcmVqZWN0cywgc28gdGhlIGhvc3QgYXBwIGNhbiBzdXJmYWNlIGl0LiAqL1xuICBvbkltYWdlVXBsb2FkRXJyb3I/OiAoZXJyb3I6IHVua25vd24sIGZpbGU6IEZpbGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFibGVFZGl0b3JBcGkge1xuICBnZXRDb250ZW50KCk6IHN0cmluZztcbiAgc2V0Q29udGVudChodG1sOiBzdHJpbmcpOiB2b2lkO1xuICBpbnNlcnRDb250ZW50KGh0bWw6IHN0cmluZyk6IHZvaWQ7XG4gIHNldExhbmd1YWdlKGxhbmc6IEVkaXRvckxhbmd1YWdlKTogdm9pZDtcbiAgZm9jdXMoKTogdm9pZDtcbiAgZGVzdHJveSgpOiB2b2lkO1xuICBpbXBvcnRXb3JkRmlsZShmaWxlOiBGaWxlKTogUHJvbWlzZTx2b2lkPjtcbiAgcmVzdG9yZURyYWZ0KCk6IGJvb2xlYW47XG4gIGdldFJldmlzaW9ucygpOiBBcnJheTx7IHRpbWU6IG51bWJlcjsgaHRtbDogc3RyaW5nIH0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ0J1dHRvbiB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHByaW1hcnk/OiBib29sZWFuO1xuICBhY3Rpb246ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUl0ZW1EZWYge1xuICBsYWJlbDogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBhY3Rpb24/OiAoKSA9PiB2b2lkO1xuICBzaG9ydGN1dD86IHN0cmluZztcbiAgcHJldmlld1N0eWxlPzogc3RyaW5nO1xuICBvbj86IGJvb2xlYW47XG4gIC8qKiBIb3ZlciBmbHlvdXQgc3VibWVudSBpdGVtcy4gKi9cbiAgc3ViPzogQXJyYXk8TWVudUl0ZW1EZWYgfCAnfCc+O1xuICAvKiogSG92ZXIgZmx5b3V0IHdpdGggY3VzdG9tIGNvbnRlbnQgKGUuZy4gdGhlIHRhYmxlIHNpemUgZ3JpZCkuICovXG4gIHN1YkJ1aWxkPzogKGVsOiBIVE1MRWxlbWVudCkgPT4gdm9pZDtcbiAgLyoqIENhbGxlZCB3aXRoIHRydWUvZmFsc2UgYXMgdGhlIHBvaW50ZXIgZW50ZXJzL2xlYXZlcyB0aGUgaXRlbSAoZS5nLiB0byBoaWdobGlnaHQgdGhlIHRhYmxlIHJvdy9jb2x1bW4gYW4gb3BlcmF0aW9uIHdpbGwgdGFyZ2V0KS4gKi9cbiAgaG92ZXI/OiAob246IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIFRhYmxlT3BlcmF0aW9uID1cbiAgfCAncm93YWJvdmUnXG4gIHwgJ3Jvd2JlbG93J1xuICB8ICdkZWxyb3cnXG4gIHwgJ2NvbGJlZm9yZSdcbiAgfCAnY29sYWZ0ZXInXG4gIHwgJ2RlbGNvbCdcbiAgfCAnZGVsdGFibGUnO1xuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFibGUtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ZhYmxlLWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './angular';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FuZ3VsYXInO1xuIl19
|