@touchvue/chat 1.0.0-beta.55 → 1.0.0-beta.57
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/es/index.mjs.map +1 -1
- package/es/node_modules/.pnpm/{dompurify@3.4.3 → dompurify@3.4.11}/node_modules/dompurify/dist/purify.es.mjs +939 -226
- package/es/node_modules/.pnpm/dompurify@3.4.11/node_modules/dompurify/dist/purify.es.mjs.map +1 -0
- package/es/node_modules/.pnpm/{linkify-it@5.0.0 → linkify-it@5.0.2}/node_modules/linkify-it/index.mjs +109 -105
- package/es/node_modules/.pnpm/linkify-it@5.0.2/node_modules/linkify-it/index.mjs.map +1 -0
- package/es/node_modules/.pnpm/{linkify-it@5.0.0 → linkify-it@5.0.2}/node_modules/linkify-it/lib/re.mjs +34 -30
- package/es/node_modules/.pnpm/linkify-it@5.0.2/node_modules/linkify-it/lib/re.mjs.map +1 -0
- package/es/node_modules/.pnpm/{markdown-it-deflist@3.0.0 → markdown-it-deflist@3.0.1}/node_modules/markdown-it-deflist/index.mjs +2 -1
- package/es/node_modules/.pnpm/markdown-it-deflist@3.0.1/node_modules/markdown-it-deflist/index.mjs.map +1 -0
- package/es/node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/index.mjs +1 -1
- package/es/package.json.mjs +1 -1
- package/es/packages/components/touchchat/component/AiRobot/face.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/AiRobot/letter.vue2.mjs +1 -1
- package/es/packages/components/touchchat/component/AiRobot/letter.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/AiRobot/meterialPrepare.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/AiRobot/start.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/CardView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/ImageFile.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/ImageView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/LinkView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/MarkLayer.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/ModuleSelect.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/Screenshot.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/ThoughtChain.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/UploadView.vue2.mjs +2 -2
- package/es/packages/components/touchchat/component/UploadView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/UploadView_api.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/index.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/TouchChat.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs +7 -39
- package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/useMessageRender.mjs +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs +26 -16
- package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/useScroll.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs +16 -4
- package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/HistoryList.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/SiderBarView.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs +139 -81
- package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/index.vue2.mjs +11 -1
- package/es/packages/components/touchchat/src/index.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/types/a2a.mjs.map +1 -1
- package/es/packages/components/touchchat/utils/a2aService.mjs +204 -104
- package/es/packages/components/touchchat/utils/a2aService.mjs.map +1 -1
- package/es/packages/components/touchchat/utils/chatRobot.mjs.map +1 -1
- package/es/packages/components/touchchat/utils/deepCloneDom.mjs.map +1 -1
- package/es/packages/components/touchchat/utils/hight-it.mjs.map +1 -1
- package/es/packages/components/touchchat/utils/markdown.mjs +23 -6
- package/es/packages/components/touchchat/utils/markdown.mjs.map +1 -1
- package/es/packages/components/touchchat/utils/socket.mjs.map +1 -1
- package/es/packages/components/touchchat/utils/tools.mjs +4 -4
- package/es/packages/components/touchchat/utils/tools.mjs.map +1 -1
- package/es/packages/components/touchchat/utils/uuid.mjs.map +1 -1
- package/es/packages/utils/config.mjs.map +1 -1
- package/es/packages/utils/types.mjs.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/node_modules/.pnpm/{dompurify@3.4.3 → dompurify@3.4.11}/node_modules/dompurify/dist/purify.es.js +939 -226
- package/lib/node_modules/.pnpm/dompurify@3.4.11/node_modules/dompurify/dist/purify.es.js.map +1 -0
- package/lib/node_modules/.pnpm/{linkify-it@5.0.0 → linkify-it@5.0.2}/node_modules/linkify-it/index.js +109 -105
- package/lib/node_modules/.pnpm/linkify-it@5.0.2/node_modules/linkify-it/index.js.map +1 -0
- package/lib/node_modules/.pnpm/{linkify-it@5.0.0 → linkify-it@5.0.2}/node_modules/linkify-it/lib/re.js +34 -30
- package/lib/node_modules/.pnpm/linkify-it@5.0.2/node_modules/linkify-it/lib/re.js.map +1 -0
- package/lib/node_modules/.pnpm/{markdown-it-deflist@3.0.0 → markdown-it-deflist@3.0.1}/node_modules/markdown-it-deflist/index.js +2 -1
- package/lib/node_modules/.pnpm/markdown-it-deflist@3.0.1/node_modules/markdown-it-deflist/index.js.map +1 -0
- package/lib/node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/index.js +1 -1
- package/lib/package.json.js +1 -1
- package/lib/packages/components/touchchat/component/AiRobot/face.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/AiRobot/letter.vue2.js +1 -1
- package/lib/packages/components/touchchat/component/AiRobot/letter.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/AiRobot/meterialPrepare.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/AiRobot/start.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/CardView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/ImageFile.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/ImageView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/LinkView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/MarkLayer.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/ModuleSelect.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/Screenshot.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/ThoughtChain.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/UploadView.vue2.js +2 -2
- package/lib/packages/components/touchchat/component/UploadView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/UploadView_api.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/index.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/TouchChat.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js +6 -38
- package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/useMessageRender.js +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js +26 -16
- package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/useScroll.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js +15 -3
- package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/HistoryList.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/SiderBarView.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js +139 -81
- package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/index.vue2.js +11 -1
- package/lib/packages/components/touchchat/src/index.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/types/a2a.js.map +1 -1
- package/lib/packages/components/touchchat/utils/a2aService.js +204 -104
- package/lib/packages/components/touchchat/utils/a2aService.js.map +1 -1
- package/lib/packages/components/touchchat/utils/chatRobot.js.map +1 -1
- package/lib/packages/components/touchchat/utils/deepCloneDom.js.map +1 -1
- package/lib/packages/components/touchchat/utils/hight-it.js.map +1 -1
- package/lib/packages/components/touchchat/utils/markdown.js +23 -6
- package/lib/packages/components/touchchat/utils/markdown.js.map +1 -1
- package/lib/packages/components/touchchat/utils/socket.js.map +1 -1
- package/lib/packages/components/touchchat/utils/tools.js +4 -4
- package/lib/packages/components/touchchat/utils/tools.js.map +1 -1
- package/lib/packages/components/touchchat/utils/uuid.js.map +1 -1
- package/lib/packages/utils/config.js.map +1 -1
- package/lib/packages/utils/types.js.map +1 -1
- package/package.json +1 -1
- package/es/node_modules/.pnpm/dompurify@3.4.3/node_modules/dompurify/dist/purify.es.mjs.map +0 -1
- package/es/node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/index.mjs.map +0 -1
- package/es/node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/lib/re.mjs.map +0 -1
- package/es/node_modules/.pnpm/markdown-it-deflist@3.0.0/node_modules/markdown-it-deflist/index.mjs.map +0 -1
- package/lib/node_modules/.pnpm/dompurify@3.4.3/node_modules/dompurify/dist/purify.es.js.map +0 -1
- package/lib/node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/index.js.map +0 -1
- package/lib/node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/lib/re.js.map +0 -1
- package/lib/node_modules/.pnpm/markdown-it-deflist@3.0.0/node_modules/markdown-it-deflist/index.js.map +0 -1
|
@@ -55,7 +55,7 @@ const defaultSchemas = {
|
|
|
55
55
|
if (!self.re.http) {
|
|
56
56
|
// compile lazily, because "host"-containing variables can change on tlds update.
|
|
57
57
|
self.re.http = new RegExp(
|
|
58
|
-
|
|
58
|
+
`^\\/\\/${self.re.src_auth}${self.re.src_host_port_strict}${self.re.src_path}`, 'i'
|
|
59
59
|
);
|
|
60
60
|
}
|
|
61
61
|
if (self.re.http.test(tail)) {
|
|
@@ -77,7 +77,7 @@ const defaultSchemas = {
|
|
|
77
77
|
self.re.src_auth +
|
|
78
78
|
// Don't allow single-level domains, because of false positives like '//test'
|
|
79
79
|
// with code comments
|
|
80
|
-
|
|
80
|
+
`(?:localhost|(?:(?:${self.re.src_domain})\\.)+${self.re.src_domain_root})` +
|
|
81
81
|
self.re.src_port +
|
|
82
82
|
self.re.src_host_terminator +
|
|
83
83
|
self.re.src_path,
|
|
@@ -101,7 +101,7 @@ const defaultSchemas = {
|
|
|
101
101
|
|
|
102
102
|
if (!self.re.mailto) {
|
|
103
103
|
self.re.mailto = new RegExp(
|
|
104
|
-
|
|
104
|
+
`^${self.re.src_email_name}@${self.re.src_host_strict}`, 'i'
|
|
105
105
|
);
|
|
106
106
|
}
|
|
107
107
|
if (self.re.mailto.test(tail)) {
|
|
@@ -113,17 +113,11 @@ const defaultSchemas = {
|
|
|
113
113
|
};
|
|
114
114
|
|
|
115
115
|
// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)
|
|
116
|
-
/* eslint-disable-next-line max-len */
|
|
117
116
|
const tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';
|
|
118
117
|
|
|
119
118
|
// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead
|
|
120
119
|
const tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|');
|
|
121
120
|
|
|
122
|
-
function resetScanCache (self) {
|
|
123
|
-
self.__index__ = -1;
|
|
124
|
-
self.__text_cache__ = '';
|
|
125
|
-
}
|
|
126
|
-
|
|
127
121
|
function createValidator (re) {
|
|
128
122
|
return function (text, pos) {
|
|
129
123
|
const tail = text.slice(pos);
|
|
@@ -162,8 +156,11 @@ function compile (self) {
|
|
|
162
156
|
function untpl (tpl) { return tpl.replace('%TLDS%', re$1.src_tlds) }
|
|
163
157
|
|
|
164
158
|
re$1.email_fuzzy = RegExp(untpl(re$1.tpl_email_fuzzy), 'i');
|
|
159
|
+
re$1.email_fuzzy_global = RegExp(untpl(re$1.tpl_email_fuzzy), 'ig');
|
|
165
160
|
re$1.link_fuzzy = RegExp(untpl(re$1.tpl_link_fuzzy), 'i');
|
|
161
|
+
re$1.link_fuzzy_global = RegExp(untpl(re$1.tpl_link_fuzzy), 'ig');
|
|
166
162
|
re$1.link_no_ip_fuzzy = RegExp(untpl(re$1.tpl_link_no_ip_fuzzy), 'i');
|
|
163
|
+
re$1.link_no_ip_fuzzy_global = RegExp(untpl(re$1.tpl_link_no_ip_fuzzy), 'ig');
|
|
167
164
|
re$1.host_fuzzy_test = RegExp(untpl(re$1.tpl_host_fuzzy_test), 'i');
|
|
168
165
|
|
|
169
166
|
//
|
|
@@ -175,7 +172,7 @@ function compile (self) {
|
|
|
175
172
|
self.__compiled__ = {}; // Reset compiled data
|
|
176
173
|
|
|
177
174
|
function schemaError (name, val) {
|
|
178
|
-
throw new Error(
|
|
175
|
+
throw new Error(`(LinkifyIt) Invalid schema "${name}": ${val}`)
|
|
179
176
|
}
|
|
180
177
|
|
|
181
178
|
Object.keys(self.__schemas__).forEach(function (name) {
|
|
@@ -249,20 +246,14 @@ function compile (self) {
|
|
|
249
246
|
.map(escapeRE)
|
|
250
247
|
.join('|');
|
|
251
248
|
// (?!_) cause 1.5x slowdown
|
|
252
|
-
self.re.schema_test = RegExp(
|
|
253
|
-
self.re.schema_search = RegExp(
|
|
254
|
-
self.re.schema_at_start = RegExp(
|
|
249
|
+
self.re.schema_test = RegExp(`(^|(?!_)(?:[><\uff5c]|${re$1.src_ZPCc}))(${slist})`, 'i');
|
|
250
|
+
self.re.schema_search = RegExp(`(^|(?!_)(?:[><\uff5c]|${re$1.src_ZPCc}))(${slist})`, 'ig');
|
|
251
|
+
self.re.schema_at_start = RegExp(`^${self.re.schema_search.source}`, 'i');
|
|
255
252
|
|
|
256
253
|
self.re.pretest = RegExp(
|
|
257
|
-
|
|
254
|
+
`(${self.re.schema_test.source})|(${self.re.host_fuzzy_test.source})|@`,
|
|
258
255
|
'i'
|
|
259
256
|
);
|
|
260
|
-
|
|
261
|
-
//
|
|
262
|
-
// Cleanup
|
|
263
|
-
//
|
|
264
|
-
|
|
265
|
-
resetScanCache(self);
|
|
266
257
|
}
|
|
267
258
|
|
|
268
259
|
/**
|
|
@@ -270,55 +261,45 @@ function compile (self) {
|
|
|
270
261
|
*
|
|
271
262
|
* Match result. Single element of array, returned by [[LinkifyIt#match]]
|
|
272
263
|
**/
|
|
273
|
-
function Match (
|
|
274
|
-
const
|
|
275
|
-
const end = self.__last_index__;
|
|
276
|
-
const text = self.__text_cache__.slice(start, end);
|
|
264
|
+
function Match (text, schema, index, lastIndex) {
|
|
265
|
+
const raw = text.slice(index, lastIndex);
|
|
277
266
|
|
|
278
267
|
/**
|
|
279
268
|
* Match#schema -> String
|
|
280
269
|
*
|
|
281
270
|
* Prefix (protocol) for matched string.
|
|
282
271
|
**/
|
|
283
|
-
this.schema =
|
|
272
|
+
this.schema = schema.toLowerCase();
|
|
284
273
|
/**
|
|
285
274
|
* Match#index -> Number
|
|
286
275
|
*
|
|
287
276
|
* First position of matched string.
|
|
288
277
|
**/
|
|
289
|
-
this.index =
|
|
278
|
+
this.index = index;
|
|
290
279
|
/**
|
|
291
280
|
* Match#lastIndex -> Number
|
|
292
281
|
*
|
|
293
282
|
* Next position after matched string.
|
|
294
283
|
**/
|
|
295
|
-
this.lastIndex =
|
|
284
|
+
this.lastIndex = lastIndex;
|
|
296
285
|
/**
|
|
297
286
|
* Match#raw -> String
|
|
298
287
|
*
|
|
299
288
|
* Matched string.
|
|
300
289
|
**/
|
|
301
|
-
this.raw =
|
|
290
|
+
this.raw = raw;
|
|
302
291
|
/**
|
|
303
292
|
* Match#text -> String
|
|
304
293
|
*
|
|
305
294
|
* Notmalized text of matched string.
|
|
306
295
|
**/
|
|
307
|
-
this.text =
|
|
296
|
+
this.text = raw;
|
|
308
297
|
/**
|
|
309
298
|
* Match#url -> String
|
|
310
299
|
*
|
|
311
300
|
* Normalized url of matched string.
|
|
312
301
|
**/
|
|
313
|
-
this.url =
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
function createMatch (self, shift) {
|
|
317
|
-
const match = new Match(self, shift);
|
|
318
|
-
|
|
319
|
-
self.__compiled__[match.schema].normalize(match, self);
|
|
320
|
-
|
|
321
|
-
return match
|
|
302
|
+
this.url = raw;
|
|
322
303
|
}
|
|
323
304
|
|
|
324
305
|
/**
|
|
@@ -373,12 +354,6 @@ function LinkifyIt (schemas, options) {
|
|
|
373
354
|
|
|
374
355
|
this.__opts__ = assign({}, defaultOptions, options);
|
|
375
356
|
|
|
376
|
-
// Cache last tested result. Used to skip repeating steps on next `match` call.
|
|
377
|
-
this.__index__ = -1;
|
|
378
|
-
this.__last_index__ = -1; // Next scan position
|
|
379
|
-
this.__schema__ = '';
|
|
380
|
-
this.__text_cache__ = '';
|
|
381
|
-
|
|
382
357
|
this.__schemas__ = assign({}, defaultSchemas, schemas);
|
|
383
358
|
this.__compiled__ = {};
|
|
384
359
|
|
|
@@ -420,69 +395,38 @@ LinkifyIt.prototype.set = function set (options) {
|
|
|
420
395
|
* Searches linkifiable pattern and returns `true` on success or `false` on fail.
|
|
421
396
|
**/
|
|
422
397
|
LinkifyIt.prototype.test = function test (text) {
|
|
423
|
-
// Reset scan cache
|
|
424
|
-
this.__text_cache__ = text;
|
|
425
|
-
this.__index__ = -1;
|
|
426
|
-
|
|
427
398
|
if (!text.length) { return false }
|
|
428
399
|
|
|
429
|
-
let m,
|
|
400
|
+
let m, re;
|
|
430
401
|
|
|
431
402
|
// try to scan for link with schema - that's the most simple rule
|
|
432
403
|
if (this.re.schema_test.test(text)) {
|
|
433
404
|
re = this.re.schema_search;
|
|
434
405
|
re.lastIndex = 0;
|
|
435
406
|
while ((m = re.exec(text)) !== null) {
|
|
436
|
-
|
|
437
|
-
if (len) {
|
|
438
|
-
this.__schema__ = m[2];
|
|
439
|
-
this.__index__ = m.index + m[1].length;
|
|
440
|
-
this.__last_index__ = m.index + m[0].length + len;
|
|
441
|
-
break
|
|
442
|
-
}
|
|
407
|
+
if (this.testSchemaAt(text, m[2], re.lastIndex)) { return true }
|
|
443
408
|
}
|
|
444
409
|
}
|
|
445
410
|
|
|
446
411
|
if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {
|
|
447
412
|
// guess schemaless links
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
if (this.__index__ < 0 || tld_pos < this.__index__) {
|
|
452
|
-
if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {
|
|
453
|
-
shift = ml.index + ml[1].length;
|
|
454
|
-
|
|
455
|
-
if (this.__index__ < 0 || shift < this.__index__) {
|
|
456
|
-
this.__schema__ = '';
|
|
457
|
-
this.__index__ = shift;
|
|
458
|
-
this.__last_index__ = ml.index + ml[0].length;
|
|
459
|
-
}
|
|
460
|
-
}
|
|
413
|
+
if (text.search(this.re.host_fuzzy_test) >= 0) {
|
|
414
|
+
if (text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy) !== null) {
|
|
415
|
+
return true
|
|
461
416
|
}
|
|
462
417
|
}
|
|
463
418
|
}
|
|
464
419
|
|
|
465
420
|
if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {
|
|
466
421
|
// guess schemaless emails
|
|
467
|
-
|
|
468
|
-
if (at_pos >= 0) {
|
|
422
|
+
if (text.indexOf('@') >= 0) {
|
|
469
423
|
// We can't skip this check, because this cases are possible:
|
|
470
424
|
// 192.168.1.1@gmail.com, my.in@example.com
|
|
471
|
-
if (
|
|
472
|
-
shift = me.index + me[1].length;
|
|
473
|
-
next = me.index + me[0].length;
|
|
474
|
-
|
|
475
|
-
if (this.__index__ < 0 || shift < this.__index__ ||
|
|
476
|
-
(shift === this.__index__ && next > this.__last_index__)) {
|
|
477
|
-
this.__schema__ = 'mailto:';
|
|
478
|
-
this.__index__ = shift;
|
|
479
|
-
this.__last_index__ = next;
|
|
480
|
-
}
|
|
481
|
-
}
|
|
425
|
+
if (text.match(this.re.email_fuzzy) !== null) { return true }
|
|
482
426
|
}
|
|
483
427
|
}
|
|
484
428
|
|
|
485
|
-
return
|
|
429
|
+
return false
|
|
486
430
|
};
|
|
487
431
|
|
|
488
432
|
/**
|
|
@@ -531,23 +475,88 @@ LinkifyIt.prototype.testSchemaAt = function testSchemaAt (text, schema, pos) {
|
|
|
531
475
|
**/
|
|
532
476
|
LinkifyIt.prototype.match = function match (text) {
|
|
533
477
|
const result = [];
|
|
534
|
-
|
|
478
|
+
const type_schemed = [];
|
|
479
|
+
const type_fuzzy_link = [];
|
|
480
|
+
const type_fuzzy_email = [];
|
|
481
|
+
let m, len, re;
|
|
482
|
+
|
|
483
|
+
function choose (a, b) {
|
|
484
|
+
if (!a) { return b }
|
|
485
|
+
if (!b) { return a }
|
|
486
|
+
if (a.index !== b.index) { return a.index < b.index ? a : b }
|
|
487
|
+
return a.lastIndex >= b.lastIndex ? a : b
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
if (!text.length) { return null }
|
|
491
|
+
|
|
492
|
+
// scan for links with schema
|
|
493
|
+
if (this.re.schema_test.test(text)) {
|
|
494
|
+
re = this.re.schema_search;
|
|
495
|
+
re.lastIndex = 0;
|
|
496
|
+
while ((m = re.exec(text)) !== null) {
|
|
497
|
+
len = this.testSchemaAt(text, m[2], re.lastIndex);
|
|
498
|
+
if (len) {
|
|
499
|
+
type_schemed.push({
|
|
500
|
+
schema: m[2],
|
|
501
|
+
index: m.index + m[1].length,
|
|
502
|
+
lastIndex: m.index + m[0].length + len
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
}
|
|
535
507
|
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
508
|
+
if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {
|
|
509
|
+
re = this.__opts__.fuzzyIP ? this.re.link_fuzzy_global : this.re.link_no_ip_fuzzy_global;
|
|
510
|
+
re.lastIndex = 0;
|
|
511
|
+
while ((m = re.exec(text)) !== null) {
|
|
512
|
+
type_fuzzy_link.push({
|
|
513
|
+
schema: '',
|
|
514
|
+
index: m.index + m[1].length,
|
|
515
|
+
lastIndex: m.index + m[0].length
|
|
516
|
+
});
|
|
517
|
+
}
|
|
540
518
|
}
|
|
541
519
|
|
|
542
|
-
|
|
543
|
-
|
|
520
|
+
if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {
|
|
521
|
+
re = this.re.email_fuzzy_global;
|
|
522
|
+
re.lastIndex = 0;
|
|
523
|
+
while ((m = re.exec(text)) !== null) {
|
|
524
|
+
type_fuzzy_email.push({
|
|
525
|
+
schema: 'mailto:',
|
|
526
|
+
index: m.index + m[1].length,
|
|
527
|
+
lastIndex: m.index + m[0].length
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
const indexes = [0, 0, 0];
|
|
533
|
+
let lastIndex = 0;
|
|
534
|
+
|
|
535
|
+
for (;;) {
|
|
536
|
+
const candidates = [
|
|
537
|
+
type_schemed[indexes[0]],
|
|
538
|
+
type_fuzzy_email[indexes[1]],
|
|
539
|
+
type_fuzzy_link[indexes[2]]
|
|
540
|
+
];
|
|
541
|
+
|
|
542
|
+
const candidate = choose(choose(candidates[0], candidates[1]), candidates[2]);
|
|
544
543
|
|
|
545
|
-
|
|
546
|
-
while (this.test(tail)) {
|
|
547
|
-
result.push(createMatch(this, shift));
|
|
544
|
+
if (!candidate) { break }
|
|
548
545
|
|
|
549
|
-
|
|
550
|
-
|
|
546
|
+
if (candidate === candidates[0]) {
|
|
547
|
+
indexes[0]++;
|
|
548
|
+
} else if (candidate === candidates[1]) {
|
|
549
|
+
indexes[1]++;
|
|
550
|
+
} else {
|
|
551
|
+
indexes[2]++;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
if (candidate.index < lastIndex) { continue }
|
|
555
|
+
|
|
556
|
+
const match = new Match(text, candidate.schema, candidate.index, candidate.lastIndex);
|
|
557
|
+
this.__compiled__[match.schema].normalize(match, this);
|
|
558
|
+
result.push(match);
|
|
559
|
+
lastIndex = candidate.lastIndex;
|
|
551
560
|
}
|
|
552
561
|
|
|
553
562
|
if (result.length) {
|
|
@@ -564,10 +573,6 @@ LinkifyIt.prototype.match = function match (text) {
|
|
|
564
573
|
* of the string, and null otherwise.
|
|
565
574
|
**/
|
|
566
575
|
LinkifyIt.prototype.matchAtStart = function matchAtStart (text) {
|
|
567
|
-
// Reset scan cache
|
|
568
|
-
this.__text_cache__ = text;
|
|
569
|
-
this.__index__ = -1;
|
|
570
|
-
|
|
571
576
|
if (!text.length) return null
|
|
572
577
|
|
|
573
578
|
const m = this.re.schema_at_start.exec(text);
|
|
@@ -576,11 +581,10 @@ LinkifyIt.prototype.matchAtStart = function matchAtStart (text) {
|
|
|
576
581
|
const len = this.testSchemaAt(text, m[2], m[0].length);
|
|
577
582
|
if (!len) return null
|
|
578
583
|
|
|
579
|
-
|
|
580
|
-
this.__index__ = m.index + m[1].length;
|
|
581
|
-
this.__last_index__ = m.index + m[0].length + len;
|
|
584
|
+
const match = new Match(text, m[2], m.index + m[1].length, m.index + m[0].length + len);
|
|
582
585
|
|
|
583
|
-
|
|
586
|
+
this.__compiled__[match.schema].normalize(match, this);
|
|
587
|
+
return match
|
|
584
588
|
};
|
|
585
589
|
|
|
586
590
|
/** chainable
|
|
@@ -628,10 +632,10 @@ LinkifyIt.prototype.normalize = function normalize (match) {
|
|
|
628
632
|
// Do minimal possible changes by default. Need to collect feedback prior
|
|
629
633
|
// to move forward https://github.com/markdown-it/linkify-it/issues/1
|
|
630
634
|
|
|
631
|
-
if (!match.schema) { match.url =
|
|
635
|
+
if (!match.schema) { match.url = `http://${match.url}`; }
|
|
632
636
|
|
|
633
637
|
if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {
|
|
634
|
-
match.url =
|
|
638
|
+
match.url = `mailto:${match.url}`;
|
|
635
639
|
}
|
|
636
640
|
};
|
|
637
641
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../../node_modules/.pnpm/linkify-it@5.0.2/node_modules/linkify-it/index.mjs"],"sourcesContent":["import reFactory from './lib/re.mjs'\n\n//\n// Helpers\n//\n\n// Merge objects\n//\nfunction assign (obj /* from1, from2, from3, ... */) {\n const sources = Array.prototype.slice.call(arguments, 1)\n\n sources.forEach(function (source) {\n if (!source) { return }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key]\n })\n })\n\n return obj\n}\n\nfunction _class (obj) { return Object.prototype.toString.call(obj) }\nfunction isString (obj) { return _class(obj) === '[object String]' }\nfunction isObject (obj) { return _class(obj) === '[object Object]' }\nfunction isRegExp (obj) { return _class(obj) === '[object RegExp]' }\nfunction isFunction (obj) { return _class(obj) === '[object Function]' }\n\nfunction escapeRE (str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&') }\n\n//\n\nconst defaultOptions = {\n fuzzyLink: true,\n fuzzyEmail: true,\n fuzzyIP: false\n}\n\nfunction isOptionsObj (obj) {\n return Object.keys(obj || {}).reduce(function (acc, k) {\n /* eslint-disable-next-line no-prototype-builtins */\n return acc || defaultOptions.hasOwnProperty(k)\n }, false)\n}\n\nconst defaultSchemas = {\n 'http:': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos)\n\n if (!self.re.http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.http = new RegExp(\n `^\\\\/\\\\/${self.re.src_auth}${self.re.src_host_port_strict}${self.re.src_path}`, 'i'\n )\n }\n if (self.re.http.test(tail)) {\n return tail.match(self.re.http)[0].length\n }\n return 0\n }\n },\n 'https:': 'http:',\n 'ftp:': 'http:',\n '//': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos)\n\n if (!self.re.no_http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.no_http = new RegExp(\n '^' +\n self.re.src_auth +\n // Don't allow single-level domains, because of false positives like '//test'\n // with code comments\n `(?:localhost|(?:(?:${self.re.src_domain})\\\\.)+${self.re.src_domain_root})` +\n self.re.src_port +\n self.re.src_host_terminator +\n self.re.src_path,\n\n 'i'\n )\n }\n\n if (self.re.no_http.test(tail)) {\n // should not be `://` & `///`, that protects from errors in protocol name\n if (pos >= 3 && text[pos - 3] === ':') { return 0 }\n if (pos >= 3 && text[pos - 3] === '/') { return 0 }\n return tail.match(self.re.no_http)[0].length\n }\n return 0\n }\n },\n 'mailto:': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos)\n\n if (!self.re.mailto) {\n self.re.mailto = new RegExp(\n `^${self.re.src_email_name}@${self.re.src_host_strict}`, 'i'\n )\n }\n if (self.re.mailto.test(tail)) {\n return tail.match(self.re.mailto)[0].length\n }\n return 0\n }\n }\n}\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nconst tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]'\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nconst tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|')\n\nfunction createValidator (re) {\n return function (text, pos) {\n const tail = text.slice(pos)\n\n if (re.test(tail)) {\n return tail.match(re)[0].length\n }\n return 0\n }\n}\n\nfunction createNormalizer () {\n return function (match, self) {\n self.normalize(match)\n }\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile (self) {\n // Load & clone RE patterns.\n const re = self.re = reFactory(self.__opts__)\n\n // Define dynamic patterns\n const tlds = self.__tlds__.slice()\n\n self.onCompile()\n\n if (!self.__tlds_replaced__) {\n tlds.push(tlds_2ch_src_re)\n }\n tlds.push(re.src_xn)\n\n re.src_tlds = tlds.join('|')\n\n function untpl (tpl) { return tpl.replace('%TLDS%', re.src_tlds) }\n\n re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i')\n re.email_fuzzy_global = RegExp(untpl(re.tpl_email_fuzzy), 'ig')\n re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i')\n re.link_fuzzy_global = RegExp(untpl(re.tpl_link_fuzzy), 'ig')\n re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i')\n re.link_no_ip_fuzzy_global = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'ig')\n re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i')\n\n //\n // Compile each schema\n //\n\n const aliases = []\n\n self.__compiled__ = {} // Reset compiled data\n\n function schemaError (name, val) {\n throw new Error(`(LinkifyIt) Invalid schema \"${name}\": ${val}`)\n }\n\n Object.keys(self.__schemas__).forEach(function (name) {\n const val = self.__schemas__[name]\n\n // skip disabled methods\n if (val === null) { return }\n\n const compiled = { validate: null, link: null }\n\n self.__compiled__[name] = compiled\n\n if (isObject(val)) {\n if (isRegExp(val.validate)) {\n compiled.validate = createValidator(val.validate)\n } else if (isFunction(val.validate)) {\n compiled.validate = val.validate\n } else {\n schemaError(name, val)\n }\n\n if (isFunction(val.normalize)) {\n compiled.normalize = val.normalize\n } else if (!val.normalize) {\n compiled.normalize = createNormalizer()\n } else {\n schemaError(name, val)\n }\n\n return\n }\n\n if (isString(val)) {\n aliases.push(name)\n return\n }\n\n schemaError(name, val)\n })\n\n //\n // Compile postponed aliases\n //\n\n aliases.forEach(function (alias) {\n if (!self.__compiled__[self.__schemas__[alias]]) {\n // Silently fail on missed schemas to avoid errons on disable.\n // schemaError(alias, self.__schemas__[alias]);\n return\n }\n\n self.__compiled__[alias].validate =\n self.__compiled__[self.__schemas__[alias]].validate\n self.__compiled__[alias].normalize =\n self.__compiled__[self.__schemas__[alias]].normalize\n })\n\n //\n // Fake record for guessed links\n //\n self.__compiled__[''] = { validate: null, normalize: createNormalizer() }\n\n //\n // Build schema condition\n //\n const slist = Object.keys(self.__compiled__)\n .filter(function (name) {\n // Filter disabled & fake schemas\n return name.length > 0 && self.__compiled__[name]\n })\n .map(escapeRE)\n .join('|')\n // (?!_) cause 1.5x slowdown\n self.re.schema_test = RegExp(`(^|(?!_)(?:[><\\uff5c]|${re.src_ZPCc}))(${slist})`, 'i')\n self.re.schema_search = RegExp(`(^|(?!_)(?:[><\\uff5c]|${re.src_ZPCc}))(${slist})`, 'ig')\n self.re.schema_at_start = RegExp(`^${self.re.schema_search.source}`, 'i')\n\n self.re.pretest = RegExp(\n `(${self.re.schema_test.source})|(${self.re.host_fuzzy_test.source})|@`,\n 'i'\n )\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match (text, schema, index, lastIndex) {\n const raw = text.slice(index, lastIndex)\n\n /**\n * Match#schema -> String\n *\n * Prefix (protocol) for matched string.\n **/\n this.schema = schema.toLowerCase()\n /**\n * Match#index -> Number\n *\n * First position of matched string.\n **/\n this.index = index\n /**\n * Match#lastIndex -> Number\n *\n * Next position after matched string.\n **/\n this.lastIndex = lastIndex\n /**\n * Match#raw -> String\n *\n * Matched string.\n **/\n this.raw = raw\n /**\n * Match#text -> String\n *\n * Notmalized text of matched string.\n **/\n this.text = raw\n /**\n * Match#url -> String\n *\n * Normalized url of matched string.\n **/\n this.url = raw\n}\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n * for example). `linkify-it` makes shure that prefix is not preceeded with\n * alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n * - _String_ - just alias to existing rule\n * - _Object_\n * - _validate_ - validator function (should return matched length on success),\n * or `RegExp`.\n * - _normalize_ - optional function to normalize text & url of matched result\n * (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n * like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt (schemas, options) {\n if (!(this instanceof LinkifyIt)) {\n return new LinkifyIt(schemas, options)\n }\n\n if (!options) {\n if (isOptionsObj(schemas)) {\n options = schemas\n schemas = {}\n }\n }\n\n this.__opts__ = assign({}, defaultOptions, options)\n\n this.__schemas__ = assign({}, defaultSchemas, schemas)\n this.__compiled__ = {}\n\n this.__tlds__ = tlds_default\n this.__tlds_replaced__ = false\n\n this.re = {}\n\n compile(this)\n}\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add (schema, definition) {\n this.__schemas__[schema] = definition\n compile(this)\n return this\n}\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set (options) {\n this.__opts__ = assign(this.__opts__, options)\n return this\n}\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test (text) {\n if (!text.length) { return false }\n\n let m, re\n\n // try to scan for link with schema - that's the most simple rule\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search\n re.lastIndex = 0\n while ((m = re.exec(text)) !== null) {\n if (this.testSchemaAt(text, m[2], re.lastIndex)) { return true }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n // guess schemaless links\n if (text.search(this.re.host_fuzzy_test) >= 0) {\n if (text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy) !== null) {\n return true\n }\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n // guess schemaless emails\n if (text.indexOf('@') >= 0) {\n // We can't skip this check, because this cases are possible:\n // 192.168.1.1@gmail.com, my.in@example.com\n if (text.match(this.re.email_fuzzy) !== null) { return true }\n }\n }\n\n return false\n}\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest (text) {\n return this.re.pretest.test(text)\n}\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt (text, schema, pos) {\n // If not supported schema check requested - terminate\n if (!this.__compiled__[schema.toLowerCase()]) {\n return 0\n }\n return this.__compiled__[schema.toLowerCase()].validate(text, pos, this)\n}\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n * protocol-neutral links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match (text) {\n const result = []\n const type_schemed = []\n const type_fuzzy_link = []\n const type_fuzzy_email = []\n let m, len, re\n\n function choose (a, b) {\n if (!a) { return b }\n if (!b) { return a }\n if (a.index !== b.index) { return a.index < b.index ? a : b }\n return a.lastIndex >= b.lastIndex ? a : b\n }\n\n if (!text.length) { return null }\n\n // scan for links with schema\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search\n re.lastIndex = 0\n while ((m = re.exec(text)) !== null) {\n len = this.testSchemaAt(text, m[2], re.lastIndex)\n if (len) {\n type_schemed.push({\n schema: m[2],\n index: m.index + m[1].length,\n lastIndex: m.index + m[0].length + len\n })\n }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n re = this.__opts__.fuzzyIP ? this.re.link_fuzzy_global : this.re.link_no_ip_fuzzy_global\n re.lastIndex = 0\n while ((m = re.exec(text)) !== null) {\n type_fuzzy_link.push({\n schema: '',\n index: m.index + m[1].length,\n lastIndex: m.index + m[0].length\n })\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n re = this.re.email_fuzzy_global\n re.lastIndex = 0\n while ((m = re.exec(text)) !== null) {\n type_fuzzy_email.push({\n schema: 'mailto:',\n index: m.index + m[1].length,\n lastIndex: m.index + m[0].length\n })\n }\n }\n\n const indexes = [0, 0, 0]\n let lastIndex = 0\n\n for (;;) {\n const candidates = [\n type_schemed[indexes[0]],\n type_fuzzy_email[indexes[1]],\n type_fuzzy_link[indexes[2]]\n ]\n\n const candidate = choose(choose(candidates[0], candidates[1]), candidates[2])\n\n if (!candidate) { break }\n\n if (candidate === candidates[0]) {\n indexes[0]++\n } else if (candidate === candidates[1]) {\n indexes[1]++\n } else {\n indexes[2]++\n }\n\n if (candidate.index < lastIndex) { continue }\n\n const match = new Match(text, candidate.schema, candidate.index, candidate.lastIndex)\n this.__compiled__[match.schema].normalize(match, this)\n result.push(match)\n lastIndex = candidate.lastIndex\n }\n\n if (result.length) {\n return result\n }\n\n return null\n}\n\n/**\n * LinkifyIt#matchAtStart(text) -> Match|null\n *\n * Returns fully-formed (not fuzzy) link if it starts at the beginning\n * of the string, and null otherwise.\n **/\nLinkifyIt.prototype.matchAtStart = function matchAtStart (text) {\n if (!text.length) return null\n\n const m = this.re.schema_at_start.exec(text)\n if (!m) return null\n\n const len = this.testSchemaAt(text, m[2], m[0].length)\n if (!len) return null\n\n const match = new Match(text, m[2], m.index + m[1].length, m.index + m[0].length + len)\n\n this.__compiled__[match.schema].normalize(match, this)\n return match\n}\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n * are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds (list, keepOld) {\n list = Array.isArray(list) ? list : [list]\n\n if (!keepOld) {\n this.__tlds__ = list.slice()\n this.__tlds_replaced__ = true\n compile(this)\n return this\n }\n\n this.__tlds__ = this.__tlds__.concat(list)\n .sort()\n .filter(function (el, idx, arr) {\n return el !== arr[idx - 1]\n })\n .reverse()\n\n compile(this)\n return this\n}\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize (match) {\n // Do minimal possible changes by default. Need to collect feedback prior\n // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n if (!match.schema) { match.url = `http://${match.url}` }\n\n if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n match.url = `mailto:${match.url}`\n }\n}\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile () {\n}\n\nexport default LinkifyIt\n"],"names":["re","reFactory"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,EAAE,GAAG,iCAAiC;AACrD,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAC;AAC1D;AACA,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,MAAM,EAAE;AACpC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE;AAC3B;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;AAC/C,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,EAAC;AAC5B,KAAK,EAAC;AACN,GAAG,EAAC;AACJ;AACA,EAAE,OAAO,GAAG;AACZ,CAAC;AACD;AACA,SAAS,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACpE,SAAS,QAAQ,EAAE,GAAG,EAAE,EAAE,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,iBAAiB,EAAE;AACpE,SAAS,QAAQ,EAAE,GAAG,EAAE,EAAE,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,iBAAiB,EAAE;AACpE,SAAS,QAAQ,EAAE,GAAG,EAAE,EAAE,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,iBAAiB,EAAE;AACpE,SAAS,UAAU,EAAE,GAAG,EAAE,EAAE,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,mBAAmB,EAAE;AACxE;AACA,SAAS,QAAQ,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,CAAC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,EAAE;AAC9E;AACA;AACA;AACA,MAAM,cAAc,GAAG;AACvB,EAAE,SAAS,EAAE,IAAI;AACjB,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,OAAO,EAAE,KAAK;AAChB,EAAC;AACD;AACA,SAAS,YAAY,EAAE,GAAG,EAAE;AAC5B,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE;AACzD;AACA,IAAI,OAAO,GAAG,IAAI,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;AAClD,GAAG,EAAE,KAAK,CAAC;AACX,CAAC;AACD;AACA,MAAM,cAAc,GAAG;AACvB,EAAE,OAAO,EAAE;AACX,IAAI,QAAQ,EAAE,UAAU,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;AACzC,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAC;AAClC;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;AACzB;AACA,QAAQ,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,MAAM;AACjC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG;AAC7F,UAAS;AACT,OAAO;AACP,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACnC,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;AACjD,OAAO;AACP,MAAM,OAAO,CAAC;AACd,KAAK;AACL,GAAG;AACH,EAAE,QAAQ,EAAE,OAAO;AACnB,EAAE,MAAM,EAAE,OAAO;AACjB,EAAE,IAAI,EAAE;AACR,IAAI,QAAQ,EAAE,UAAU,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;AACzC,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAC;AAClC;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;AAC5B;AACA,QAAQ,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,IAAI,MAAM;AACpC,UAAU,GAAG;AACb,UAAU,IAAI,CAAC,EAAE,CAAC,QAAQ;AAC1B;AACA;AACA,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;AACrF,UAAU,IAAI,CAAC,EAAE,CAAC,QAAQ;AAC1B,UAAU,IAAI,CAAC,EAAE,CAAC,mBAAmB;AACrC,UAAU,IAAI,CAAC,EAAE,CAAC,QAAQ;AAC1B;AACA,UAAU,GAAG;AACb,UAAS;AACT,OAAO;AACP;AACA,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACtC;AACA,QAAQ,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE;AAC3D,QAAQ,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE;AAC3D,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;AACpD,OAAO;AACP,MAAM,OAAO,CAAC;AACd,KAAK;AACL,GAAG;AACH,EAAE,SAAS,EAAE;AACb,IAAI,QAAQ,EAAE,UAAU,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;AACzC,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAC;AAClC;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;AAC3B,QAAQ,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,MAAM;AACnC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,GAAG;AACtE,UAAS;AACT,OAAO;AACP,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACrC,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;AACnD,OAAO;AACP,MAAM,OAAO,CAAC;AACd,KAAK;AACL,GAAG;AACH,EAAC;AACD;AACA;AACA,MAAM,eAAe,GAAG,0VAAyV;AACjX;AACA;AACA,MAAM,YAAY,GAAG,6EAA6E,CAAC,KAAK,CAAC,GAAG,EAAC;AAC7G;AACA,SAAS,eAAe,EAAE,EAAE,EAAE;AAC9B,EAAE,OAAO,UAAU,IAAI,EAAE,GAAG,EAAE;AAC9B,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAC;AAChC;AACA,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACvB,MAAM,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;AACrC,KAAK;AACL,IAAI,OAAO,CAAC;AACZ,GAAG;AACH,CAAC;AACD;AACA,SAAS,gBAAgB,IAAI;AAC7B,EAAE,OAAO,UAAU,KAAK,EAAE,IAAI,EAAE;AAChC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAC;AACzB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA,SAAS,OAAO,EAAE,IAAI,EAAE;AACxB;AACA,EAAE,MAAMA,IAAE,GAAG,IAAI,CAAC,EAAE,GAAGC,UAAS,CAAC,IAAI,CAAC,QAAQ,EAAC;AAC/C;AACA;AACA,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAE;AACpC;AACA,EAAE,IAAI,CAAC,SAAS,GAAE;AAClB;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAC;AAC9B,GAAG;AACH,EAAE,IAAI,CAAC,IAAI,CAACD,IAAE,CAAC,MAAM,EAAC;AACtB;AACA,EAAEA,IAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAC;AAC9B;AACA,EAAE,SAAS,KAAK,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAEA,IAAE,CAAC,QAAQ,CAAC,EAAE;AACpE;AACA,EAAEA,IAAE,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAACA,IAAE,CAAC,eAAe,CAAC,EAAE,GAAG,EAAC;AACzD,EAAEA,IAAE,CAAC,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAACA,IAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAC;AACjE,EAAEA,IAAE,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAACA,IAAE,CAAC,cAAc,CAAC,EAAE,GAAG,EAAC;AACvD,EAAEA,IAAE,CAAC,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAACA,IAAE,CAAC,cAAc,CAAC,EAAE,IAAI,EAAC;AAC/D,EAAEA,IAAE,CAAC,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAACA,IAAE,CAAC,oBAAoB,CAAC,EAAE,GAAG,EAAC;AACnE,EAAEA,IAAE,CAAC,uBAAuB,GAAG,MAAM,CAAC,KAAK,CAACA,IAAE,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAC;AAC3E,EAAEA,IAAE,CAAC,eAAe,GAAG,MAAM,CAAC,KAAK,CAACA,IAAE,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAC;AACjE;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,GAAG,GAAE;AACpB;AACA,EAAE,IAAI,CAAC,YAAY,GAAG,GAAE;AACxB;AACA,EAAE,SAAS,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE;AACnC,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,4BAA4B,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACnE,GAAG;AACH;AACA,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;AACxD,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAC;AACtC;AACA;AACA,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,EAAE,MAAM,EAAE;AAChC;AACA,IAAI,MAAM,QAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAE;AACnD;AACA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,SAAQ;AACtC;AACA,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;AACvB,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAClC,QAAQ,QAAQ,CAAC,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAC;AACzD,OAAO,MAAM,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC3C,QAAQ,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,SAAQ;AACxC,OAAO,MAAM;AACb,QAAQ,WAAW,CAAC,IAAI,EAAE,GAAG,EAAC;AAC9B,OAAO;AACP;AACA,MAAM,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACrC,QAAQ,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC,UAAS;AAC1C,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;AACjC,QAAQ,QAAQ,CAAC,SAAS,GAAG,gBAAgB,GAAE;AAC/C,OAAO,MAAM;AACb,QAAQ,WAAW,CAAC,IAAI,EAAE,GAAG,EAAC;AAC9B,OAAO;AACP;AACA,MAAM,MAAM;AACZ,KAAK;AACL;AACA,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;AACvB,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,EAAC;AACxB,MAAM,MAAM;AACZ,KAAK;AACL;AACA,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,EAAC;AAC1B,GAAG,EAAC;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;AACnC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;AACrD;AACA;AACA,MAAM,MAAM;AACZ,KAAK;AACL;AACA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,QAAQ;AACrC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,SAAQ;AACzD,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,SAAS;AACtC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,UAAS;AAC1D,GAAG,EAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAE;AAC3E;AACA;AACA;AACA;AACA,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AAC9C,KAAK,MAAM,CAAC,UAAU,IAAI,EAAE;AAC5B;AACA,MAAM,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACvD,KAAK,CAAC;AACN,KAAK,GAAG,CAAC,QAAQ,CAAC;AAClB,KAAK,IAAI,CAAC,GAAG,EAAC;AACd;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC,sBAAsB,EAAEA,IAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAC;AACvF,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,GAAG,MAAM,CAAC,CAAC,sBAAsB,EAAEA,IAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAC;AAC1F,EAAE,IAAI,CAAC,EAAE,CAAC,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAC;AAC3E;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,MAAM;AAC1B,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC;AAC3E,IAAI,GAAG;AACP,IAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;AAChD,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,GAAE;AACpC;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,MAAK;AACpB;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,SAAS,GAAG,UAAS;AAC5B;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,GAAG,GAAG,IAAG;AAChB;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,IAAI,GAAG,IAAG;AACjB;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,GAAG,GAAG,IAAG;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE;AACtC,EAAE,IAAI,EAAE,IAAI,YAAY,SAAS,CAAC,EAAE;AACpC,IAAI,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;AAC1C,GAAG;AACH;AACA,EAAE,IAAI,CAAC,OAAO,EAAE;AAChB,IAAI,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE;AAC/B,MAAM,OAAO,GAAG,QAAO;AACvB,MAAM,OAAO,GAAG,GAAE;AAClB,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,EAAC;AACrD;AACA,EAAE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,EAAC;AACxD,EAAE,IAAI,CAAC,YAAY,GAAG,GAAE;AACxB;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,aAAY;AAC9B,EAAE,IAAI,CAAC,iBAAiB,GAAG,MAAK;AAChC;AACA,EAAE,IAAI,CAAC,EAAE,GAAG,GAAE;AACd;AACA,EAAE,OAAO,CAAC,IAAI,EAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE;AAC5D,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,WAAU;AACvC,EAAE,OAAO,CAAC,IAAI,EAAC;AACf,EAAE,OAAO,IAAI;AACb,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,EAAE,OAAO,EAAE;AACjD,EAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAC;AAChD,EAAE,OAAO,IAAI;AACb,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE;AAChD,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,KAAK,EAAE;AACpC;AACA,EAAE,IAAI,CAAC,EAAE,GAAE;AACX;AACA;AACA,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACtC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,cAAa;AAC9B,IAAI,EAAE,CAAC,SAAS,GAAG,EAAC;AACpB,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;AACzC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,IAAI,EAAE;AACtE,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;AAC7D;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;AACnD,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;AACtG,QAAQ,OAAO,IAAI;AACnB,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;AAChE;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAChC;AACA;AACA,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,IAAI,EAAE;AACnE,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,KAAK;AACd,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,EAAE,IAAI,EAAE;AACtD,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AAC7E;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE;AAChD,IAAI,OAAO,CAAC;AACZ,GAAG;AACH,EAAE,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC;AAC1E,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,EAAE,IAAI,EAAE;AAClD,EAAE,MAAM,MAAM,GAAG,GAAE;AACnB,EAAE,MAAM,YAAY,GAAG,GAAE;AACzB,EAAE,MAAM,eAAe,GAAG,GAAE;AAC5B,EAAE,MAAM,gBAAgB,GAAG,GAAE;AAC7B,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAE;AAChB;AACA,EAAE,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE;AACzB,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE;AACxB,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE;AACxB,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE;AACjE,IAAI,OAAO,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC;AAC7C,GAAG;AACH;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,IAAI,EAAE;AACnC;AACA;AACA,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACtC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,cAAa;AAC9B,IAAI,EAAE,CAAC,SAAS,GAAG,EAAC;AACpB,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;AACzC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,EAAC;AACvD,MAAM,IAAI,GAAG,EAAE;AACf,QAAQ,YAAY,CAAC,IAAI,CAAC;AAC1B,UAAU,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACtB,UAAU,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;AACtC,UAAU,SAAS,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG;AAChD,SAAS,EAAC;AACV,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;AAC7D,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,iBAAiB,GAAG,IAAI,CAAC,EAAE,CAAC,wBAAuB;AAC5F,IAAI,EAAE,CAAC,SAAS,GAAG,EAAC;AACpB,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;AACzC,MAAM,eAAe,CAAC,IAAI,CAAC;AAC3B,QAAQ,MAAM,EAAE,EAAE;AAClB,QAAQ,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;AACpC,QAAQ,SAAS,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;AACxC,OAAO,EAAC;AACR,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;AAChE,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,mBAAkB;AACnC,IAAI,EAAE,CAAC,SAAS,GAAG,EAAC;AACpB,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;AACzC,MAAM,gBAAgB,CAAC,IAAI,CAAC;AAC5B,QAAQ,MAAM,EAAE,SAAS;AACzB,QAAQ,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;AACpC,QAAQ,SAAS,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;AACxC,OAAO,EAAC;AACR,KAAK;AACL,GAAG;AACH;AACA,EAAE,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC;AAC3B,EAAE,IAAI,SAAS,GAAG,EAAC;AACnB;AACA,EAAE,SAAS;AACX,IAAI,MAAM,UAAU,GAAG;AACvB,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9B,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClC,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjC,MAAK;AACL;AACA,IAAI,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAC;AACjF;AACA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE;AAC7B;AACA,IAAI,IAAI,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE;AACrC,MAAM,OAAO,CAAC,CAAC,CAAC,GAAE;AAClB,KAAK,MAAM,IAAI,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE;AAC5C,MAAM,OAAO,CAAC,CAAC,CAAC,GAAE;AAClB,KAAK,MAAM;AACX,MAAM,OAAO,CAAC,CAAC,CAAC,GAAE;AAClB,KAAK;AACL;AACA,IAAI,IAAI,SAAS,CAAC,KAAK,GAAG,SAAS,EAAE,EAAE,QAAQ,EAAE;AACjD;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,EAAC;AACzF,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAC;AAC1D,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAC;AACtB,IAAI,SAAS,GAAG,SAAS,CAAC,UAAS;AACnC,GAAG;AACH;AACA,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE;AACrB,IAAI,OAAO,MAAM;AACjB,GAAG;AACH;AACA,EAAE,OAAO,IAAI;AACb,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,IAAI,EAAE;AAChE,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI;AAC/B;AACA,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAC;AAC9C,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO,IAAI;AACrB;AACA,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAC;AACxD,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI;AACvB;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,EAAC;AACzF;AACA,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAC;AACxD,EAAE,OAAO,KAAK;AACd,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;AACzD,EAAE,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAC;AAC5C;AACA,EAAE,IAAI,CAAC,OAAO,EAAE;AAChB,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAE;AAChC,IAAI,IAAI,CAAC,iBAAiB,GAAG,KAAI;AACjC,IAAI,OAAO,CAAC,IAAI,EAAC;AACjB,IAAI,OAAO,IAAI;AACf,GAAG;AACH;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAC5C,KAAK,IAAI,EAAE;AACX,KAAK,MAAM,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;AACpC,MAAM,OAAO,EAAE,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAChC,KAAK,CAAC;AACN,KAAK,OAAO,GAAE;AACd;AACA,EAAE,OAAO,CAAC,IAAI,EAAC;AACf,EAAE,OAAO,IAAI;AACb,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,EAAE,KAAK,EAAE;AAC3D;AACA;AACA;AACA,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAC,EAAE;AAC1D;AACA,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AAClE,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAC;AACrC,GAAG;AACH,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,IAAI;AACtD;;;;","x_google_ignoreList":[0]}
|
|
@@ -29,7 +29,7 @@ function reFactory (opts) {
|
|
|
29
29
|
// All possible word characters (everything without punctuation, spaces & controls)
|
|
30
30
|
// Defined via punctuation & spaces to save space
|
|
31
31
|
// Should be something like \p{\L\N\S\M} (\w but without `_`)
|
|
32
|
-
re.src_pseudo_letter =
|
|
32
|
+
re.src_pseudo_letter = `(?:(?!${text_separators}|${re.src_ZPCc})${re.src_Any})`;
|
|
33
33
|
// The same as abothe but without [0-9]
|
|
34
34
|
// var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';
|
|
35
35
|
|
|
@@ -38,7 +38,9 @@ function reFactory (opts) {
|
|
|
38
38
|
'(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';
|
|
39
39
|
|
|
40
40
|
// Prohibit any of "@/[]()" in user/pass to avoid wrong domain fetch.
|
|
41
|
-
|
|
41
|
+
// Length is capped to exclude possible rescans till the end and avoid O(n^2)
|
|
42
|
+
// DoS. No standard limit, just take something reasonable.
|
|
43
|
+
re.src_auth = `(?:(?:(?!${re.src_ZCc}|[@/\\[\\]()]).){1,50}@)?`;
|
|
42
44
|
|
|
43
45
|
re.src_port =
|
|
44
46
|
|
|
@@ -46,23 +48,23 @@ function reFactory (opts) {
|
|
|
46
48
|
|
|
47
49
|
re.src_host_terminator =
|
|
48
50
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
+
`(?=$|${text_separators}|${re.src_ZPCc})` +
|
|
52
|
+
`(?!${opts['---'] ? '-(?!--)|' : '-|'}_|:\\d|\\.-|\\.(?!$|${re.src_ZPCc}))`;
|
|
51
53
|
|
|
52
54
|
re.src_path =
|
|
53
55
|
|
|
54
56
|
'(?:' +
|
|
55
57
|
'[/?#]' +
|
|
56
58
|
'(?:' +
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
`(?!${re.src_ZCc}|${text_separators}|[()[\\]{}.,"'?!\\-;]).|` +
|
|
60
|
+
`\\[(?:(?!${re.src_ZCc}|\\]).)*\\]|` +
|
|
61
|
+
`\\((?:(?!${re.src_ZCc}|[)]).)*\\)|` +
|
|
62
|
+
`\\{(?:(?!${re.src_ZCc}|[}]).)*\\}|` +
|
|
63
|
+
`\\"(?:(?!${re.src_ZCc}|["]).)+\\"|` +
|
|
64
|
+
`\\'(?:(?!${re.src_ZCc}|[']).)+\\'|` +
|
|
63
65
|
|
|
64
66
|
// allow `I'm_king` if no pair found
|
|
65
|
-
|
|
67
|
+
`\\'(?=${re.src_pseudo_letter}|[-])|` +
|
|
66
68
|
|
|
67
69
|
// google has many dots in "google search" links (#66, #81).
|
|
68
70
|
// github has ... in commit range links,
|
|
@@ -74,30 +76,32 @@ function reFactory (opts) {
|
|
|
74
76
|
// until more examples found.
|
|
75
77
|
'\\.{2,}[a-zA-Z0-9%/&]|' +
|
|
76
78
|
|
|
77
|
-
|
|
79
|
+
`\\.(?!${re.src_ZCc}|[.]|$)|` +
|
|
78
80
|
(opts['---']
|
|
79
81
|
? '\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate
|
|
80
82
|
: '\\-+|'
|
|
81
83
|
) +
|
|
82
84
|
// allow `,,,` in paths
|
|
83
|
-
|
|
85
|
+
`,(?!${re.src_ZCc}|$)|` +
|
|
84
86
|
|
|
85
87
|
// allow `;` if not followed by space-like char
|
|
86
|
-
|
|
88
|
+
`;(?!${re.src_ZCc}|$)|` +
|
|
87
89
|
|
|
88
90
|
// allow `!!!` in paths, but not at the end
|
|
89
|
-
|
|
91
|
+
`\\!+(?!${re.src_ZCc}|[!]|$)|` +
|
|
90
92
|
|
|
91
|
-
|
|
93
|
+
`\\?(?!${re.src_ZCc}|[?]|$)` +
|
|
92
94
|
')+' +
|
|
93
95
|
'|\\/' +
|
|
94
96
|
')?';
|
|
95
97
|
|
|
96
98
|
// Allow anything in markdown spec, forbid quote (") at the first position
|
|
97
99
|
// because emails enclosed in quotes are far more common
|
|
100
|
+
// Max name length capped to 64 chars (RFC 5321). This also prevents O(n^2)
|
|
101
|
+
// rescans to the end on inputs like `mailto:mailto:...`
|
|
98
102
|
re.src_email_name =
|
|
99
103
|
|
|
100
|
-
'[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]
|
|
104
|
+
'[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]{0,63}';
|
|
101
105
|
|
|
102
106
|
re.src_xn =
|
|
103
107
|
|
|
@@ -112,7 +116,7 @@ function reFactory (opts) {
|
|
|
112
116
|
'(?:' +
|
|
113
117
|
re.src_xn +
|
|
114
118
|
'|' +
|
|
115
|
-
re.src_pseudo_letter
|
|
119
|
+
`${re.src_pseudo_letter}{1,63}` +
|
|
116
120
|
')';
|
|
117
121
|
|
|
118
122
|
re.src_domain =
|
|
@@ -120,9 +124,9 @@ function reFactory (opts) {
|
|
|
120
124
|
'(?:' +
|
|
121
125
|
re.src_xn +
|
|
122
126
|
'|' +
|
|
123
|
-
|
|
127
|
+
`(?:${re.src_pseudo_letter})` +
|
|
124
128
|
'|' +
|
|
125
|
-
|
|
129
|
+
`(?:${re.src_pseudo_letter}(?:-|${re.src_pseudo_letter}){0,61}${re.src_pseudo_letter})` +
|
|
126
130
|
')';
|
|
127
131
|
|
|
128
132
|
re.src_host =
|
|
@@ -131,7 +135,7 @@ function reFactory (opts) {
|
|
|
131
135
|
// Don't need IP check, because digits are already allowed in normal domain names
|
|
132
136
|
// src_ip4 +
|
|
133
137
|
// '|' +
|
|
134
|
-
|
|
138
|
+
`(?:(?:(?:${re.src_domain})\\.)*${re.src_domain})`/* _root */ +
|
|
135
139
|
')';
|
|
136
140
|
|
|
137
141
|
re.tpl_host_fuzzy =
|
|
@@ -139,12 +143,12 @@ function reFactory (opts) {
|
|
|
139
143
|
'(?:' +
|
|
140
144
|
re.src_ip4 +
|
|
141
145
|
'|' +
|
|
142
|
-
|
|
146
|
+
`(?:(?:(?:${re.src_domain})\\.)+(?:%TLDS%))` +
|
|
143
147
|
')';
|
|
144
148
|
|
|
145
149
|
re.tpl_host_no_ip_fuzzy =
|
|
146
150
|
|
|
147
|
-
|
|
151
|
+
`(?:(?:(?:${re.src_domain})\\.)+(?:%TLDS%))`;
|
|
148
152
|
|
|
149
153
|
re.src_host_strict =
|
|
150
154
|
|
|
@@ -173,24 +177,24 @@ function reFactory (opts) {
|
|
|
173
177
|
// Rude test fuzzy links by host, for quick deny
|
|
174
178
|
re.tpl_host_fuzzy_test =
|
|
175
179
|
|
|
176
|
-
|
|
180
|
+
`localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:${re.src_ZPCc}|>|$))`;
|
|
177
181
|
|
|
178
182
|
re.tpl_email_fuzzy =
|
|
179
183
|
|
|
180
|
-
|
|
181
|
-
|
|
184
|
+
`(^|${text_separators}|"|\\(|${re.src_ZCc})` +
|
|
185
|
+
`(${re.src_email_name}@${re.tpl_host_fuzzy_strict})`;
|
|
182
186
|
|
|
183
187
|
re.tpl_link_fuzzy =
|
|
184
188
|
// Fuzzy link can't be prepended with .:/\- and non punctuation.
|
|
185
189
|
// but can start with > (markdown blockquote)
|
|
186
|
-
|
|
187
|
-
|
|
190
|
+
`(^|(?![.:/\\-_@])(?:[$+<=>^\`|\uff5c]|${re.src_ZPCc}))` +
|
|
191
|
+
`((?![$+<=>^\`|\uff5c])${re.tpl_host_port_fuzzy_strict}${re.src_path})`;
|
|
188
192
|
|
|
189
193
|
re.tpl_link_no_ip_fuzzy =
|
|
190
194
|
// Fuzzy link can't be prepended with .:/\- and non punctuation.
|
|
191
195
|
// but can start with > (markdown blockquote)
|
|
192
|
-
|
|
193
|
-
|
|
196
|
+
`(^|(?![.:/\\-_@])(?:[$+<=>^\`|\uff5c]|${re.src_ZPCc}))` +
|
|
197
|
+
`((?![$+<=>^\`|\uff5c])${re.tpl_host_port_no_ip_fuzzy_strict}${re.src_path})`;
|
|
194
198
|
|
|
195
199
|
return re
|
|
196
200
|
}
|