@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.
Files changed (125) hide show
  1. package/es/index.mjs.map +1 -1
  2. package/es/node_modules/.pnpm/{dompurify@3.4.3 → dompurify@3.4.11}/node_modules/dompurify/dist/purify.es.mjs +939 -226
  3. package/es/node_modules/.pnpm/dompurify@3.4.11/node_modules/dompurify/dist/purify.es.mjs.map +1 -0
  4. package/es/node_modules/.pnpm/{linkify-it@5.0.0 → linkify-it@5.0.2}/node_modules/linkify-it/index.mjs +109 -105
  5. package/es/node_modules/.pnpm/linkify-it@5.0.2/node_modules/linkify-it/index.mjs.map +1 -0
  6. package/es/node_modules/.pnpm/{linkify-it@5.0.0 → linkify-it@5.0.2}/node_modules/linkify-it/lib/re.mjs +34 -30
  7. package/es/node_modules/.pnpm/linkify-it@5.0.2/node_modules/linkify-it/lib/re.mjs.map +1 -0
  8. 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
  9. package/es/node_modules/.pnpm/markdown-it-deflist@3.0.1/node_modules/markdown-it-deflist/index.mjs.map +1 -0
  10. package/es/node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/index.mjs +1 -1
  11. package/es/package.json.mjs +1 -1
  12. package/es/packages/components/touchchat/component/AiRobot/face.vue2.mjs.map +1 -1
  13. package/es/packages/components/touchchat/component/AiRobot/letter.vue2.mjs +1 -1
  14. package/es/packages/components/touchchat/component/AiRobot/letter.vue2.mjs.map +1 -1
  15. package/es/packages/components/touchchat/component/AiRobot/meterialPrepare.vue2.mjs.map +1 -1
  16. package/es/packages/components/touchchat/component/AiRobot/start.vue2.mjs.map +1 -1
  17. package/es/packages/components/touchchat/component/CardView.vue2.mjs.map +1 -1
  18. package/es/packages/components/touchchat/component/ImageFile.vue2.mjs.map +1 -1
  19. package/es/packages/components/touchchat/component/ImageView.vue2.mjs.map +1 -1
  20. package/es/packages/components/touchchat/component/LinkView.vue2.mjs.map +1 -1
  21. package/es/packages/components/touchchat/component/MarkLayer.vue2.mjs.map +1 -1
  22. package/es/packages/components/touchchat/component/ModuleSelect.vue2.mjs.map +1 -1
  23. package/es/packages/components/touchchat/component/Screenshot.vue2.mjs.map +1 -1
  24. package/es/packages/components/touchchat/component/ThoughtChain.vue2.mjs.map +1 -1
  25. package/es/packages/components/touchchat/component/UploadView.vue2.mjs +2 -2
  26. package/es/packages/components/touchchat/component/UploadView.vue2.mjs.map +1 -1
  27. package/es/packages/components/touchchat/component/UploadView_api.vue2.mjs.map +1 -1
  28. package/es/packages/components/touchchat/index.mjs.map +1 -1
  29. package/es/packages/components/touchchat/src/AiChat/Chat/TouchChat.mjs.map +1 -1
  30. package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs +7 -39
  31. package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs.map +1 -1
  32. package/es/packages/components/touchchat/src/AiChat/Chat/useMessageRender.mjs +1 -1
  33. package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs +26 -16
  34. package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs.map +1 -1
  35. package/es/packages/components/touchchat/src/AiChat/Chat/useScroll.mjs.map +1 -1
  36. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs +16 -4
  37. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs.map +1 -1
  38. package/es/packages/components/touchchat/src/AiChat/HistoryList.vue2.mjs.map +1 -1
  39. package/es/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.mjs.map +1 -1
  40. package/es/packages/components/touchchat/src/AiChat/SiderBarView.vue2.mjs.map +1 -1
  41. package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs +139 -81
  42. package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs.map +1 -1
  43. package/es/packages/components/touchchat/src/index.vue2.mjs +11 -1
  44. package/es/packages/components/touchchat/src/index.vue2.mjs.map +1 -1
  45. package/es/packages/components/touchchat/src/types/a2a.mjs.map +1 -1
  46. package/es/packages/components/touchchat/utils/a2aService.mjs +204 -104
  47. package/es/packages/components/touchchat/utils/a2aService.mjs.map +1 -1
  48. package/es/packages/components/touchchat/utils/chatRobot.mjs.map +1 -1
  49. package/es/packages/components/touchchat/utils/deepCloneDom.mjs.map +1 -1
  50. package/es/packages/components/touchchat/utils/hight-it.mjs.map +1 -1
  51. package/es/packages/components/touchchat/utils/markdown.mjs +23 -6
  52. package/es/packages/components/touchchat/utils/markdown.mjs.map +1 -1
  53. package/es/packages/components/touchchat/utils/socket.mjs.map +1 -1
  54. package/es/packages/components/touchchat/utils/tools.mjs +4 -4
  55. package/es/packages/components/touchchat/utils/tools.mjs.map +1 -1
  56. package/es/packages/components/touchchat/utils/uuid.mjs.map +1 -1
  57. package/es/packages/utils/config.mjs.map +1 -1
  58. package/es/packages/utils/types.mjs.map +1 -1
  59. package/lib/index.js.map +1 -1
  60. package/lib/node_modules/.pnpm/{dompurify@3.4.3 → dompurify@3.4.11}/node_modules/dompurify/dist/purify.es.js +939 -226
  61. package/lib/node_modules/.pnpm/dompurify@3.4.11/node_modules/dompurify/dist/purify.es.js.map +1 -0
  62. package/lib/node_modules/.pnpm/{linkify-it@5.0.0 → linkify-it@5.0.2}/node_modules/linkify-it/index.js +109 -105
  63. package/lib/node_modules/.pnpm/linkify-it@5.0.2/node_modules/linkify-it/index.js.map +1 -0
  64. package/lib/node_modules/.pnpm/{linkify-it@5.0.0 → linkify-it@5.0.2}/node_modules/linkify-it/lib/re.js +34 -30
  65. package/lib/node_modules/.pnpm/linkify-it@5.0.2/node_modules/linkify-it/lib/re.js.map +1 -0
  66. 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
  67. package/lib/node_modules/.pnpm/markdown-it-deflist@3.0.1/node_modules/markdown-it-deflist/index.js.map +1 -0
  68. package/lib/node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/index.js +1 -1
  69. package/lib/package.json.js +1 -1
  70. package/lib/packages/components/touchchat/component/AiRobot/face.vue2.js.map +1 -1
  71. package/lib/packages/components/touchchat/component/AiRobot/letter.vue2.js +1 -1
  72. package/lib/packages/components/touchchat/component/AiRobot/letter.vue2.js.map +1 -1
  73. package/lib/packages/components/touchchat/component/AiRobot/meterialPrepare.vue2.js.map +1 -1
  74. package/lib/packages/components/touchchat/component/AiRobot/start.vue2.js.map +1 -1
  75. package/lib/packages/components/touchchat/component/CardView.vue2.js.map +1 -1
  76. package/lib/packages/components/touchchat/component/ImageFile.vue2.js.map +1 -1
  77. package/lib/packages/components/touchchat/component/ImageView.vue2.js.map +1 -1
  78. package/lib/packages/components/touchchat/component/LinkView.vue2.js.map +1 -1
  79. package/lib/packages/components/touchchat/component/MarkLayer.vue2.js.map +1 -1
  80. package/lib/packages/components/touchchat/component/ModuleSelect.vue2.js.map +1 -1
  81. package/lib/packages/components/touchchat/component/Screenshot.vue2.js.map +1 -1
  82. package/lib/packages/components/touchchat/component/ThoughtChain.vue2.js.map +1 -1
  83. package/lib/packages/components/touchchat/component/UploadView.vue2.js +2 -2
  84. package/lib/packages/components/touchchat/component/UploadView.vue2.js.map +1 -1
  85. package/lib/packages/components/touchchat/component/UploadView_api.vue2.js.map +1 -1
  86. package/lib/packages/components/touchchat/index.js.map +1 -1
  87. package/lib/packages/components/touchchat/src/AiChat/Chat/TouchChat.js.map +1 -1
  88. package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js +6 -38
  89. package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js.map +1 -1
  90. package/lib/packages/components/touchchat/src/AiChat/Chat/useMessageRender.js +1 -1
  91. package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js +26 -16
  92. package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js.map +1 -1
  93. package/lib/packages/components/touchchat/src/AiChat/Chat/useScroll.js.map +1 -1
  94. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js +15 -3
  95. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js.map +1 -1
  96. package/lib/packages/components/touchchat/src/AiChat/HistoryList.vue2.js.map +1 -1
  97. package/lib/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.js.map +1 -1
  98. package/lib/packages/components/touchchat/src/AiChat/SiderBarView.vue2.js.map +1 -1
  99. package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js +139 -81
  100. package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js.map +1 -1
  101. package/lib/packages/components/touchchat/src/index.vue2.js +11 -1
  102. package/lib/packages/components/touchchat/src/index.vue2.js.map +1 -1
  103. package/lib/packages/components/touchchat/src/types/a2a.js.map +1 -1
  104. package/lib/packages/components/touchchat/utils/a2aService.js +204 -104
  105. package/lib/packages/components/touchchat/utils/a2aService.js.map +1 -1
  106. package/lib/packages/components/touchchat/utils/chatRobot.js.map +1 -1
  107. package/lib/packages/components/touchchat/utils/deepCloneDom.js.map +1 -1
  108. package/lib/packages/components/touchchat/utils/hight-it.js.map +1 -1
  109. package/lib/packages/components/touchchat/utils/markdown.js +23 -6
  110. package/lib/packages/components/touchchat/utils/markdown.js.map +1 -1
  111. package/lib/packages/components/touchchat/utils/socket.js.map +1 -1
  112. package/lib/packages/components/touchchat/utils/tools.js +4 -4
  113. package/lib/packages/components/touchchat/utils/tools.js.map +1 -1
  114. package/lib/packages/components/touchchat/utils/uuid.js.map +1 -1
  115. package/lib/packages/utils/config.js.map +1 -1
  116. package/lib/packages/utils/types.js.map +1 -1
  117. package/package.json +1 -1
  118. package/es/node_modules/.pnpm/dompurify@3.4.3/node_modules/dompurify/dist/purify.es.mjs.map +0 -1
  119. package/es/node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/index.mjs.map +0 -1
  120. package/es/node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/lib/re.mjs.map +0 -1
  121. package/es/node_modules/.pnpm/markdown-it-deflist@3.0.0/node_modules/markdown-it-deflist/index.mjs.map +0 -1
  122. package/lib/node_modules/.pnpm/dompurify@3.4.3/node_modules/dompurify/dist/purify.es.js.map +0 -1
  123. package/lib/node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/index.js.map +0 -1
  124. package/lib/node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/lib/re.js.map +0 -1
  125. package/lib/node_modules/.pnpm/markdown-it-deflist@3.0.0/node_modules/markdown-it-deflist/index.js.map +0 -1
@@ -51,7 +51,7 @@ const defaultSchemas = {
51
51
  if (!self.re.http) {
52
52
  // compile lazily, because "host"-containing variables can change on tlds update.
53
53
  self.re.http = new RegExp(
54
- '^\\/\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'
54
+ `^\\/\\/${self.re.src_auth}${self.re.src_host_port_strict}${self.re.src_path}`, 'i'
55
55
  );
56
56
  }
57
57
  if (self.re.http.test(tail)) {
@@ -73,7 +73,7 @@ const defaultSchemas = {
73
73
  self.re.src_auth +
74
74
  // Don't allow single-level domains, because of false positives like '//test'
75
75
  // with code comments
76
- '(?:localhost|(?:(?:' + self.re.src_domain + ')\\.)+' + self.re.src_domain_root + ')' +
76
+ `(?:localhost|(?:(?:${self.re.src_domain})\\.)+${self.re.src_domain_root})` +
77
77
  self.re.src_port +
78
78
  self.re.src_host_terminator +
79
79
  self.re.src_path,
@@ -97,7 +97,7 @@ const defaultSchemas = {
97
97
 
98
98
  if (!self.re.mailto) {
99
99
  self.re.mailto = new RegExp(
100
- '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'
100
+ `^${self.re.src_email_name}@${self.re.src_host_strict}`, 'i'
101
101
  );
102
102
  }
103
103
  if (self.re.mailto.test(tail)) {
@@ -109,17 +109,11 @@ const defaultSchemas = {
109
109
  };
110
110
 
111
111
  // RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)
112
- /* eslint-disable-next-line max-len */
113
112
  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]';
114
113
 
115
114
  // DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead
116
115
  const tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|');
117
116
 
118
- function resetScanCache (self) {
119
- self.__index__ = -1;
120
- self.__text_cache__ = '';
121
- }
122
-
123
117
  function createValidator (re) {
124
118
  return function (text, pos) {
125
119
  const tail = text.slice(pos);
@@ -158,8 +152,11 @@ function compile (self) {
158
152
  function untpl (tpl) { return tpl.replace('%TLDS%', re.src_tlds) }
159
153
 
160
154
  re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i');
155
+ re.email_fuzzy_global = RegExp(untpl(re.tpl_email_fuzzy), 'ig');
161
156
  re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i');
157
+ re.link_fuzzy_global = RegExp(untpl(re.tpl_link_fuzzy), 'ig');
162
158
  re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');
159
+ re.link_no_ip_fuzzy_global = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'ig');
163
160
  re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');
164
161
 
165
162
  //
@@ -171,7 +168,7 @@ function compile (self) {
171
168
  self.__compiled__ = {}; // Reset compiled data
172
169
 
173
170
  function schemaError (name, val) {
174
- throw new Error('(LinkifyIt) Invalid schema "' + name + '": ' + val)
171
+ throw new Error(`(LinkifyIt) Invalid schema "${name}": ${val}`)
175
172
  }
176
173
 
177
174
  Object.keys(self.__schemas__).forEach(function (name) {
@@ -245,20 +242,14 @@ function compile (self) {
245
242
  .map(escapeRE)
246
243
  .join('|');
247
244
  // (?!_) cause 1.5x slowdown
248
- self.re.schema_test = RegExp('(^|(?!_)(?:[><\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');
249
- self.re.schema_search = RegExp('(^|(?!_)(?:[><\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');
250
- self.re.schema_at_start = RegExp('^' + self.re.schema_search.source, 'i');
245
+ self.re.schema_test = RegExp(`(^|(?!_)(?:[><\uff5c]|${re.src_ZPCc}))(${slist})`, 'i');
246
+ self.re.schema_search = RegExp(`(^|(?!_)(?:[><\uff5c]|${re.src_ZPCc}))(${slist})`, 'ig');
247
+ self.re.schema_at_start = RegExp(`^${self.re.schema_search.source}`, 'i');
251
248
 
252
249
  self.re.pretest = RegExp(
253
- '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',
250
+ `(${self.re.schema_test.source})|(${self.re.host_fuzzy_test.source})|@`,
254
251
  'i'
255
252
  );
256
-
257
- //
258
- // Cleanup
259
- //
260
-
261
- resetScanCache(self);
262
253
  }
263
254
 
264
255
  /**
@@ -266,55 +257,45 @@ function compile (self) {
266
257
  *
267
258
  * Match result. Single element of array, returned by [[LinkifyIt#match]]
268
259
  **/
269
- function Match (self, shift) {
270
- const start = self.__index__;
271
- const end = self.__last_index__;
272
- const text = self.__text_cache__.slice(start, end);
260
+ function Match (text, schema, index, lastIndex) {
261
+ const raw = text.slice(index, lastIndex);
273
262
 
274
263
  /**
275
264
  * Match#schema -> String
276
265
  *
277
266
  * Prefix (protocol) for matched string.
278
267
  **/
279
- this.schema = self.__schema__.toLowerCase();
268
+ this.schema = schema.toLowerCase();
280
269
  /**
281
270
  * Match#index -> Number
282
271
  *
283
272
  * First position of matched string.
284
273
  **/
285
- this.index = start + shift;
274
+ this.index = index;
286
275
  /**
287
276
  * Match#lastIndex -> Number
288
277
  *
289
278
  * Next position after matched string.
290
279
  **/
291
- this.lastIndex = end + shift;
280
+ this.lastIndex = lastIndex;
292
281
  /**
293
282
  * Match#raw -> String
294
283
  *
295
284
  * Matched string.
296
285
  **/
297
- this.raw = text;
286
+ this.raw = raw;
298
287
  /**
299
288
  * Match#text -> String
300
289
  *
301
290
  * Notmalized text of matched string.
302
291
  **/
303
- this.text = text;
292
+ this.text = raw;
304
293
  /**
305
294
  * Match#url -> String
306
295
  *
307
296
  * Normalized url of matched string.
308
297
  **/
309
- this.url = text;
310
- }
311
-
312
- function createMatch (self, shift) {
313
- const match = new Match(self, shift);
314
-
315
- self.__compiled__[match.schema].normalize(match, self);
316
-
317
- return match
298
+ this.url = raw;
318
299
  }
319
300
 
320
301
  /**
@@ -369,12 +350,6 @@ function LinkifyIt (schemas, options) {
369
350
 
370
351
  this.__opts__ = assign({}, defaultOptions, options);
371
352
 
372
- // Cache last tested result. Used to skip repeating steps on next `match` call.
373
- this.__index__ = -1;
374
- this.__last_index__ = -1; // Next scan position
375
- this.__schema__ = '';
376
- this.__text_cache__ = '';
377
-
378
353
  this.__schemas__ = assign({}, defaultSchemas, schemas);
379
354
  this.__compiled__ = {};
380
355
 
@@ -416,69 +391,38 @@ LinkifyIt.prototype.set = function set (options) {
416
391
  * Searches linkifiable pattern and returns `true` on success or `false` on fail.
417
392
  **/
418
393
  LinkifyIt.prototype.test = function test (text) {
419
- // Reset scan cache
420
- this.__text_cache__ = text;
421
- this.__index__ = -1;
422
-
423
394
  if (!text.length) { return false }
424
395
 
425
- let m, ml, me, len, shift, next, re, tld_pos, at_pos;
396
+ let m, re;
426
397
 
427
398
  // try to scan for link with schema - that's the most simple rule
428
399
  if (this.re.schema_test.test(text)) {
429
400
  re = this.re.schema_search;
430
401
  re.lastIndex = 0;
431
402
  while ((m = re.exec(text)) !== null) {
432
- len = this.testSchemaAt(text, m[2], re.lastIndex);
433
- if (len) {
434
- this.__schema__ = m[2];
435
- this.__index__ = m.index + m[1].length;
436
- this.__last_index__ = m.index + m[0].length + len;
437
- break
438
- }
403
+ if (this.testSchemaAt(text, m[2], re.lastIndex)) { return true }
439
404
  }
440
405
  }
441
406
 
442
407
  if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {
443
408
  // guess schemaless links
444
- tld_pos = text.search(this.re.host_fuzzy_test);
445
- if (tld_pos >= 0) {
446
- // if tld is located after found link - no need to check fuzzy pattern
447
- if (this.__index__ < 0 || tld_pos < this.__index__) {
448
- if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {
449
- shift = ml.index + ml[1].length;
450
-
451
- if (this.__index__ < 0 || shift < this.__index__) {
452
- this.__schema__ = '';
453
- this.__index__ = shift;
454
- this.__last_index__ = ml.index + ml[0].length;
455
- }
456
- }
409
+ if (text.search(this.re.host_fuzzy_test) >= 0) {
410
+ if (text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy) !== null) {
411
+ return true
457
412
  }
458
413
  }
459
414
  }
460
415
 
461
416
  if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {
462
417
  // guess schemaless emails
463
- at_pos = text.indexOf('@');
464
- if (at_pos >= 0) {
418
+ if (text.indexOf('@') >= 0) {
465
419
  // We can't skip this check, because this cases are possible:
466
420
  // 192.168.1.1@gmail.com, my.in@example.com
467
- if ((me = text.match(this.re.email_fuzzy)) !== null) {
468
- shift = me.index + me[1].length;
469
- next = me.index + me[0].length;
470
-
471
- if (this.__index__ < 0 || shift < this.__index__ ||
472
- (shift === this.__index__ && next > this.__last_index__)) {
473
- this.__schema__ = 'mailto:';
474
- this.__index__ = shift;
475
- this.__last_index__ = next;
476
- }
477
- }
421
+ if (text.match(this.re.email_fuzzy) !== null) { return true }
478
422
  }
479
423
  }
480
424
 
481
- return this.__index__ >= 0
425
+ return false
482
426
  };
483
427
 
484
428
  /**
@@ -527,23 +471,88 @@ LinkifyIt.prototype.testSchemaAt = function testSchemaAt (text, schema, pos) {
527
471
  **/
528
472
  LinkifyIt.prototype.match = function match (text) {
529
473
  const result = [];
530
- let shift = 0;
474
+ const type_schemed = [];
475
+ const type_fuzzy_link = [];
476
+ const type_fuzzy_email = [];
477
+ let m, len, re;
478
+
479
+ function choose (a, b) {
480
+ if (!a) { return b }
481
+ if (!b) { return a }
482
+ if (a.index !== b.index) { return a.index < b.index ? a : b }
483
+ return a.lastIndex >= b.lastIndex ? a : b
484
+ }
485
+
486
+ if (!text.length) { return null }
487
+
488
+ // scan for links with schema
489
+ if (this.re.schema_test.test(text)) {
490
+ re = this.re.schema_search;
491
+ re.lastIndex = 0;
492
+ while ((m = re.exec(text)) !== null) {
493
+ len = this.testSchemaAt(text, m[2], re.lastIndex);
494
+ if (len) {
495
+ type_schemed.push({
496
+ schema: m[2],
497
+ index: m.index + m[1].length,
498
+ lastIndex: m.index + m[0].length + len
499
+ });
500
+ }
501
+ }
502
+ }
531
503
 
532
- // Try to take previous element from cache, if .test() called before
533
- if (this.__index__ >= 0 && this.__text_cache__ === text) {
534
- result.push(createMatch(this, shift));
535
- shift = this.__last_index__;
504
+ if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {
505
+ re = this.__opts__.fuzzyIP ? this.re.link_fuzzy_global : this.re.link_no_ip_fuzzy_global;
506
+ re.lastIndex = 0;
507
+ while ((m = re.exec(text)) !== null) {
508
+ type_fuzzy_link.push({
509
+ schema: '',
510
+ index: m.index + m[1].length,
511
+ lastIndex: m.index + m[0].length
512
+ });
513
+ }
536
514
  }
537
515
 
538
- // Cut head if cache was used
539
- let tail = shift ? text.slice(shift) : text;
516
+ if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {
517
+ re = this.re.email_fuzzy_global;
518
+ re.lastIndex = 0;
519
+ while ((m = re.exec(text)) !== null) {
520
+ type_fuzzy_email.push({
521
+ schema: 'mailto:',
522
+ index: m.index + m[1].length,
523
+ lastIndex: m.index + m[0].length
524
+ });
525
+ }
526
+ }
527
+
528
+ const indexes = [0, 0, 0];
529
+ let lastIndex = 0;
530
+
531
+ for (;;) {
532
+ const candidates = [
533
+ type_schemed[indexes[0]],
534
+ type_fuzzy_email[indexes[1]],
535
+ type_fuzzy_link[indexes[2]]
536
+ ];
537
+
538
+ const candidate = choose(choose(candidates[0], candidates[1]), candidates[2]);
540
539
 
541
- // Scan string until end reached
542
- while (this.test(tail)) {
543
- result.push(createMatch(this, shift));
540
+ if (!candidate) { break }
544
541
 
545
- tail = tail.slice(this.__last_index__);
546
- shift += this.__last_index__;
542
+ if (candidate === candidates[0]) {
543
+ indexes[0]++;
544
+ } else if (candidate === candidates[1]) {
545
+ indexes[1]++;
546
+ } else {
547
+ indexes[2]++;
548
+ }
549
+
550
+ if (candidate.index < lastIndex) { continue }
551
+
552
+ const match = new Match(text, candidate.schema, candidate.index, candidate.lastIndex);
553
+ this.__compiled__[match.schema].normalize(match, this);
554
+ result.push(match);
555
+ lastIndex = candidate.lastIndex;
547
556
  }
548
557
 
549
558
  if (result.length) {
@@ -560,10 +569,6 @@ LinkifyIt.prototype.match = function match (text) {
560
569
  * of the string, and null otherwise.
561
570
  **/
562
571
  LinkifyIt.prototype.matchAtStart = function matchAtStart (text) {
563
- // Reset scan cache
564
- this.__text_cache__ = text;
565
- this.__index__ = -1;
566
-
567
572
  if (!text.length) return null
568
573
 
569
574
  const m = this.re.schema_at_start.exec(text);
@@ -572,11 +577,10 @@ LinkifyIt.prototype.matchAtStart = function matchAtStart (text) {
572
577
  const len = this.testSchemaAt(text, m[2], m[0].length);
573
578
  if (!len) return null
574
579
 
575
- this.__schema__ = m[2];
576
- this.__index__ = m.index + m[1].length;
577
- this.__last_index__ = m.index + m[0].length + len;
580
+ const match = new Match(text, m[2], m.index + m[1].length, m.index + m[0].length + len);
578
581
 
579
- return createMatch(this, 0)
582
+ this.__compiled__[match.schema].normalize(match, this);
583
+ return match
580
584
  };
581
585
 
582
586
  /** chainable
@@ -624,10 +628,10 @@ LinkifyIt.prototype.normalize = function normalize (match) {
624
628
  // Do minimal possible changes by default. Need to collect feedback prior
625
629
  // to move forward https://github.com/markdown-it/linkify-it/issues/1
626
630
 
627
- if (!match.schema) { match.url = 'http://' + match.url; }
631
+ if (!match.schema) { match.url = `http://${match.url}`; }
628
632
 
629
633
  if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {
630
- match.url = 'mailto:' + match.url;
634
+ match.url = `mailto:${match.url}`;
631
635
  }
632
636
  };
633
637
 
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","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":[],"mappings":"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","x_google_ignoreList":[0]}
@@ -25,7 +25,7 @@ function reFactory (opts) {
25
25
  // All possible word characters (everything without punctuation, spaces & controls)
26
26
  // Defined via punctuation & spaces to save space
27
27
  // Should be something like \p{\L\N\S\M} (\w but without `_`)
28
- re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';
28
+ re.src_pseudo_letter = `(?:(?!${text_separators}|${re.src_ZPCc})${re.src_Any})`;
29
29
  // The same as abothe but without [0-9]
30
30
  // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';
31
31
 
@@ -34,7 +34,9 @@ function reFactory (opts) {
34
34
  '(?:(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]?)';
35
35
 
36
36
  // Prohibit any of "@/[]()" in user/pass to avoid wrong domain fetch.
37
- re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\[\\]()]).)+@)?';
37
+ // Length is capped to exclude possible rescans till the end and avoid O(n^2)
38
+ // DoS. No standard limit, just take something reasonable.
39
+ re.src_auth = `(?:(?:(?!${re.src_ZCc}|[@/\\[\\]()]).){1,50}@)?`;
38
40
 
39
41
  re.src_port =
40
42
 
@@ -42,23 +44,23 @@ function reFactory (opts) {
42
44
 
43
45
  re.src_host_terminator =
44
46
 
45
- '(?=$|' + text_separators + '|' + re.src_ZPCc + ')' +
46
- '(?!' + (opts['---'] ? '-(?!--)|' : '-|') + '_|:\\d|\\.-|\\.(?!$|' + re.src_ZPCc + '))';
47
+ `(?=$|${text_separators}|${re.src_ZPCc})` +
48
+ `(?!${opts['---'] ? '-(?!--)|' : '-|'}_|:\\d|\\.-|\\.(?!$|${re.src_ZPCc}))`;
47
49
 
48
50
  re.src_path =
49
51
 
50
52
  '(?:' +
51
53
  '[/?#]' +
52
54
  '(?:' +
53
- '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\]{}.,"\'?!\\-;]).|' +
54
- '\\[(?:(?!' + re.src_ZCc + '|\\]).)*\\]|' +
55
- '\\((?:(?!' + re.src_ZCc + '|[)]).)*\\)|' +
56
- '\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\}|' +
57
- '\\"(?:(?!' + re.src_ZCc + '|["]).)+\\"|' +
58
- "\\'(?:(?!" + re.src_ZCc + "|[']).)+\\'|" +
55
+ `(?!${re.src_ZCc}|${text_separators}|[()[\\]{}.,"'?!\\-;]).|` +
56
+ `\\[(?:(?!${re.src_ZCc}|\\]).)*\\]|` +
57
+ `\\((?:(?!${re.src_ZCc}|[)]).)*\\)|` +
58
+ `\\{(?:(?!${re.src_ZCc}|[}]).)*\\}|` +
59
+ `\\"(?:(?!${re.src_ZCc}|["]).)+\\"|` +
60
+ `\\'(?:(?!${re.src_ZCc}|[']).)+\\'|` +
59
61
 
60
62
  // allow `I'm_king` if no pair found
61
- "\\'(?=" + re.src_pseudo_letter + '|[-])|' +
63
+ `\\'(?=${re.src_pseudo_letter}|[-])|` +
62
64
 
63
65
  // google has many dots in "google search" links (#66, #81).
64
66
  // github has ... in commit range links,
@@ -70,30 +72,32 @@ function reFactory (opts) {
70
72
  // until more examples found.
71
73
  '\\.{2,}[a-zA-Z0-9%/&]|' +
72
74
 
73
- '\\.(?!' + re.src_ZCc + '|[.]|$)|' +
75
+ `\\.(?!${re.src_ZCc}|[.]|$)|` +
74
76
  (opts['---']
75
77
  ? '\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate
76
78
  : '\\-+|'
77
79
  ) +
78
80
  // allow `,,,` in paths
79
- ',(?!' + re.src_ZCc + '|$)|' +
81
+ `,(?!${re.src_ZCc}|$)|` +
80
82
 
81
83
  // allow `;` if not followed by space-like char
82
- ';(?!' + re.src_ZCc + '|$)|' +
84
+ `;(?!${re.src_ZCc}|$)|` +
83
85
 
84
86
  // allow `!!!` in paths, but not at the end
85
- '\\!+(?!' + re.src_ZCc + '|[!]|$)|' +
87
+ `\\!+(?!${re.src_ZCc}|[!]|$)|` +
86
88
 
87
- '\\?(?!' + re.src_ZCc + '|[?]|$)' +
89
+ `\\?(?!${re.src_ZCc}|[?]|$)` +
88
90
  ')+' +
89
91
  '|\\/' +
90
92
  ')?';
91
93
 
92
94
  // Allow anything in markdown spec, forbid quote (") at the first position
93
95
  // because emails enclosed in quotes are far more common
96
+ // Max name length capped to 64 chars (RFC 5321). This also prevents O(n^2)
97
+ // rescans to the end on inputs like `mailto:mailto:...`
94
98
  re.src_email_name =
95
99
 
96
- '[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]*';
100
+ '[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]{0,63}';
97
101
 
98
102
  re.src_xn =
99
103
 
@@ -108,7 +112,7 @@ function reFactory (opts) {
108
112
  '(?:' +
109
113
  re.src_xn +
110
114
  '|' +
111
- re.src_pseudo_letter + '{1,63}' +
115
+ `${re.src_pseudo_letter}{1,63}` +
112
116
  ')';
113
117
 
114
118
  re.src_domain =
@@ -116,9 +120,9 @@ function reFactory (opts) {
116
120
  '(?:' +
117
121
  re.src_xn +
118
122
  '|' +
119
- '(?:' + re.src_pseudo_letter + ')' +
123
+ `(?:${re.src_pseudo_letter})` +
120
124
  '|' +
121
- '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +
125
+ `(?:${re.src_pseudo_letter}(?:-|${re.src_pseudo_letter}){0,61}${re.src_pseudo_letter})` +
122
126
  ')';
123
127
 
124
128
  re.src_host =
@@ -127,7 +131,7 @@ function reFactory (opts) {
127
131
  // Don't need IP check, because digits are already allowed in normal domain names
128
132
  // src_ip4 +
129
133
  // '|' +
130
- '(?:(?:(?:' + re.src_domain + ')\\.)*' + re.src_domain/* _root */ + ')' +
134
+ `(?:(?:(?:${re.src_domain})\\.)*${re.src_domain})`/* _root */ +
131
135
  ')';
132
136
 
133
137
  re.tpl_host_fuzzy =
@@ -135,12 +139,12 @@ function reFactory (opts) {
135
139
  '(?:' +
136
140
  re.src_ip4 +
137
141
  '|' +
138
- '(?:(?:(?:' + re.src_domain + ')\\.)+(?:%TLDS%))' +
142
+ `(?:(?:(?:${re.src_domain})\\.)+(?:%TLDS%))` +
139
143
  ')';
140
144
 
141
145
  re.tpl_host_no_ip_fuzzy =
142
146
 
143
- '(?:(?:(?:' + re.src_domain + ')\\.)+(?:%TLDS%))';
147
+ `(?:(?:(?:${re.src_domain})\\.)+(?:%TLDS%))`;
144
148
 
145
149
  re.src_host_strict =
146
150
 
@@ -169,24 +173,24 @@ function reFactory (opts) {
169
173
  // Rude test fuzzy links by host, for quick deny
170
174
  re.tpl_host_fuzzy_test =
171
175
 
172
- 'localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';
176
+ `localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:${re.src_ZPCc}|>|$))`;
173
177
 
174
178
  re.tpl_email_fuzzy =
175
179
 
176
- '(^|' + text_separators + '|"|\\(|' + re.src_ZCc + ')' +
177
- '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';
180
+ `(^|${text_separators}|"|\\(|${re.src_ZCc})` +
181
+ `(${re.src_email_name}@${re.tpl_host_fuzzy_strict})`;
178
182
 
179
183
  re.tpl_link_fuzzy =
180
184
  // Fuzzy link can't be prepended with .:/\- and non punctuation.
181
185
  // but can start with > (markdown blockquote)
182
- '(^|(?![.:/\\-_@])(?:[$+<=>^`|\uff5c]|' + re.src_ZPCc + '))' +
183
- '((?![$+<=>^`|\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';
186
+ `(^|(?![.:/\\-_@])(?:[$+<=>^\`|\uff5c]|${re.src_ZPCc}))` +
187
+ `((?![$+<=>^\`|\uff5c])${re.tpl_host_port_fuzzy_strict}${re.src_path})`;
184
188
 
185
189
  re.tpl_link_no_ip_fuzzy =
186
190
  // Fuzzy link can't be prepended with .:/\- and non punctuation.
187
191
  // but can start with > (markdown blockquote)
188
- '(^|(?![.:/\\-_@])(?:[$+<=>^`|\uff5c]|' + re.src_ZPCc + '))' +
189
- '((?![$+<=>^`|\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';
192
+ `(^|(?![.:/\\-_@])(?:[$+<=>^\`|\uff5c]|${re.src_ZPCc}))` +
193
+ `((?![$+<=>^\`|\uff5c])${re.tpl_host_port_no_ip_fuzzy_strict}${re.src_path})`;
190
194
 
191
195
  return re
192
196
  }