@touchvue/chat 1.0.0-beta.56 → 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 (121) 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.map +1 -1
  26. package/es/packages/components/touchchat/component/UploadView_api.vue2.mjs.map +1 -1
  27. package/es/packages/components/touchchat/index.mjs.map +1 -1
  28. package/es/packages/components/touchchat/src/AiChat/Chat/TouchChat.mjs.map +1 -1
  29. package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs +7 -2
  30. package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs.map +1 -1
  31. package/es/packages/components/touchchat/src/AiChat/Chat/useMessageRender.mjs +1 -1
  32. package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs +10 -7
  33. package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs.map +1 -1
  34. package/es/packages/components/touchchat/src/AiChat/Chat/useScroll.mjs.map +1 -1
  35. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs +6 -2
  36. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs.map +1 -1
  37. package/es/packages/components/touchchat/src/AiChat/HistoryList.vue2.mjs.map +1 -1
  38. package/es/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.mjs.map +1 -1
  39. package/es/packages/components/touchchat/src/AiChat/SiderBarView.vue2.mjs.map +1 -1
  40. package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs +136 -120
  41. package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs.map +1 -1
  42. package/es/packages/components/touchchat/src/index.vue2.mjs +6 -1
  43. package/es/packages/components/touchchat/src/index.vue2.mjs.map +1 -1
  44. package/es/packages/components/touchchat/src/types/a2a.mjs.map +1 -1
  45. package/es/packages/components/touchchat/utils/a2aService.mjs +189 -132
  46. package/es/packages/components/touchchat/utils/a2aService.mjs.map +1 -1
  47. package/es/packages/components/touchchat/utils/chatRobot.mjs.map +1 -1
  48. package/es/packages/components/touchchat/utils/deepCloneDom.mjs.map +1 -1
  49. package/es/packages/components/touchchat/utils/hight-it.mjs.map +1 -1
  50. package/es/packages/components/touchchat/utils/markdown.mjs +2 -2
  51. package/es/packages/components/touchchat/utils/markdown.mjs.map +1 -1
  52. package/es/packages/components/touchchat/utils/socket.mjs.map +1 -1
  53. package/es/packages/components/touchchat/utils/tools.mjs.map +1 -1
  54. package/es/packages/components/touchchat/utils/uuid.mjs.map +1 -1
  55. package/es/packages/utils/config.mjs.map +1 -1
  56. package/es/packages/utils/types.mjs.map +1 -1
  57. package/lib/index.js.map +1 -1
  58. package/lib/node_modules/.pnpm/{dompurify@3.4.3 → dompurify@3.4.11}/node_modules/dompurify/dist/purify.es.js +939 -226
  59. package/lib/node_modules/.pnpm/dompurify@3.4.11/node_modules/dompurify/dist/purify.es.js.map +1 -0
  60. package/lib/node_modules/.pnpm/{linkify-it@5.0.0 → linkify-it@5.0.2}/node_modules/linkify-it/index.js +109 -105
  61. package/lib/node_modules/.pnpm/linkify-it@5.0.2/node_modules/linkify-it/index.js.map +1 -0
  62. package/lib/node_modules/.pnpm/{linkify-it@5.0.0 → linkify-it@5.0.2}/node_modules/linkify-it/lib/re.js +34 -30
  63. package/lib/node_modules/.pnpm/linkify-it@5.0.2/node_modules/linkify-it/lib/re.js.map +1 -0
  64. 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
  65. package/lib/node_modules/.pnpm/markdown-it-deflist@3.0.1/node_modules/markdown-it-deflist/index.js.map +1 -0
  66. package/lib/node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/index.js +1 -1
  67. package/lib/package.json.js +1 -1
  68. package/lib/packages/components/touchchat/component/AiRobot/face.vue2.js.map +1 -1
  69. package/lib/packages/components/touchchat/component/AiRobot/letter.vue2.js +1 -1
  70. package/lib/packages/components/touchchat/component/AiRobot/letter.vue2.js.map +1 -1
  71. package/lib/packages/components/touchchat/component/AiRobot/meterialPrepare.vue2.js.map +1 -1
  72. package/lib/packages/components/touchchat/component/AiRobot/start.vue2.js.map +1 -1
  73. package/lib/packages/components/touchchat/component/CardView.vue2.js.map +1 -1
  74. package/lib/packages/components/touchchat/component/ImageFile.vue2.js.map +1 -1
  75. package/lib/packages/components/touchchat/component/ImageView.vue2.js.map +1 -1
  76. package/lib/packages/components/touchchat/component/LinkView.vue2.js.map +1 -1
  77. package/lib/packages/components/touchchat/component/MarkLayer.vue2.js.map +1 -1
  78. package/lib/packages/components/touchchat/component/ModuleSelect.vue2.js.map +1 -1
  79. package/lib/packages/components/touchchat/component/Screenshot.vue2.js.map +1 -1
  80. package/lib/packages/components/touchchat/component/ThoughtChain.vue2.js.map +1 -1
  81. package/lib/packages/components/touchchat/component/UploadView.vue2.js.map +1 -1
  82. package/lib/packages/components/touchchat/component/UploadView_api.vue2.js.map +1 -1
  83. package/lib/packages/components/touchchat/index.js.map +1 -1
  84. package/lib/packages/components/touchchat/src/AiChat/Chat/TouchChat.js.map +1 -1
  85. package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js +6 -1
  86. package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js.map +1 -1
  87. package/lib/packages/components/touchchat/src/AiChat/Chat/useMessageRender.js +1 -1
  88. package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js +10 -7
  89. package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js.map +1 -1
  90. package/lib/packages/components/touchchat/src/AiChat/Chat/useScroll.js.map +1 -1
  91. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js +5 -1
  92. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js.map +1 -1
  93. package/lib/packages/components/touchchat/src/AiChat/HistoryList.vue2.js.map +1 -1
  94. package/lib/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.js.map +1 -1
  95. package/lib/packages/components/touchchat/src/AiChat/SiderBarView.vue2.js.map +1 -1
  96. package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js +136 -120
  97. package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js.map +1 -1
  98. package/lib/packages/components/touchchat/src/index.vue2.js +6 -1
  99. package/lib/packages/components/touchchat/src/index.vue2.js.map +1 -1
  100. package/lib/packages/components/touchchat/src/types/a2a.js.map +1 -1
  101. package/lib/packages/components/touchchat/utils/a2aService.js +189 -132
  102. package/lib/packages/components/touchchat/utils/a2aService.js.map +1 -1
  103. package/lib/packages/components/touchchat/utils/chatRobot.js.map +1 -1
  104. package/lib/packages/components/touchchat/utils/deepCloneDom.js.map +1 -1
  105. package/lib/packages/components/touchchat/utils/hight-it.js.map +1 -1
  106. package/lib/packages/components/touchchat/utils/markdown.js +2 -2
  107. package/lib/packages/components/touchchat/utils/markdown.js.map +1 -1
  108. package/lib/packages/components/touchchat/utils/socket.js.map +1 -1
  109. package/lib/packages/components/touchchat/utils/tools.js.map +1 -1
  110. package/lib/packages/components/touchchat/utils/uuid.js.map +1 -1
  111. package/lib/packages/utils/config.js.map +1 -1
  112. package/lib/packages/utils/types.js.map +1 -1
  113. package/package.json +83 -83
  114. package/es/node_modules/.pnpm/dompurify@3.4.3/node_modules/dompurify/dist/purify.es.mjs.map +0 -1
  115. package/es/node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/index.mjs.map +0 -1
  116. package/es/node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/lib/re.mjs.map +0 -1
  117. package/es/node_modules/.pnpm/markdown-it-deflist@3.0.0/node_modules/markdown-it-deflist/index.mjs.map +0 -1
  118. package/lib/node_modules/.pnpm/dompurify@3.4.3/node_modules/dompurify/dist/purify.es.js.map +0 -1
  119. package/lib/node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/index.js.map +0 -1
  120. package/lib/node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/lib/re.js.map +0 -1
  121. 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
- '^\\/\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'
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
- '(?:localhost|(?:(?:' + self.re.src_domain + ')\\.)+' + self.re.src_domain_root + ')' +
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
- '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'
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('(LinkifyIt) Invalid schema "' + name + '": ' + val)
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('(^|(?!_)(?:[><\uff5c]|' + re$1.src_ZPCc + '))(' + slist + ')', 'i');
253
- self.re.schema_search = RegExp('(^|(?!_)(?:[><\uff5c]|' + re$1.src_ZPCc + '))(' + slist + ')', 'ig');
254
- self.re.schema_at_start = RegExp('^' + self.re.schema_search.source, 'i');
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
- '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',
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 (self, shift) {
274
- const start = self.__index__;
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 = self.__schema__.toLowerCase();
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 = start + shift;
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 = end + shift;
284
+ this.lastIndex = lastIndex;
296
285
  /**
297
286
  * Match#raw -> String
298
287
  *
299
288
  * Matched string.
300
289
  **/
301
- this.raw = text;
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 = 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 = text;
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, ml, me, len, shift, next, re, tld_pos, at_pos;
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
- len = this.testSchemaAt(text, m[2], re.lastIndex);
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
- tld_pos = text.search(this.re.host_fuzzy_test);
449
- if (tld_pos >= 0) {
450
- // if tld is located after found link - no need to check fuzzy pattern
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
- at_pos = text.indexOf('@');
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 ((me = text.match(this.re.email_fuzzy)) !== null) {
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 this.__index__ >= 0
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
- let shift = 0;
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
- // Try to take previous element from cache, if .test() called before
537
- if (this.__index__ >= 0 && this.__text_cache__ === text) {
538
- result.push(createMatch(this, shift));
539
- shift = this.__last_index__;
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
- // Cut head if cache was used
543
- let tail = shift ? text.slice(shift) : text;
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
- // Scan string until end reached
546
- while (this.test(tail)) {
547
- result.push(createMatch(this, shift));
544
+ if (!candidate) { break }
548
545
 
549
- tail = tail.slice(this.__last_index__);
550
- shift += this.__last_index__;
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
- this.__schema__ = m[2];
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
- return createMatch(this, 0)
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 = 'http://' + 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 = 'mailto:' + 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":"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","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 = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';
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
- re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\[\\]()]).)+@)?';
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
- '(?=$|' + text_separators + '|' + re.src_ZPCc + ')' +
50
- '(?!' + (opts['---'] ? '-(?!--)|' : '-|') + '_|:\\d|\\.-|\\.(?!$|' + re.src_ZPCc + '))';
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
- '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\]{}.,"\'?!\\-;]).|' +
58
- '\\[(?:(?!' + re.src_ZCc + '|\\]).)*\\]|' +
59
- '\\((?:(?!' + re.src_ZCc + '|[)]).)*\\)|' +
60
- '\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\}|' +
61
- '\\"(?:(?!' + re.src_ZCc + '|["]).)+\\"|' +
62
- "\\'(?:(?!" + re.src_ZCc + "|[']).)+\\'|" +
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
- "\\'(?=" + re.src_pseudo_letter + '|[-])|' +
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
- '\\.(?!' + re.src_ZCc + '|[.]|$)|' +
79
+ `\\.(?!${re.src_ZCc}|[.]|$)|` +
78
80
  (opts['---']
79
81
  ? '\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate
80
82
  : '\\-+|'
81
83
  ) +
82
84
  // allow `,,,` in paths
83
- ',(?!' + re.src_ZCc + '|$)|' +
85
+ `,(?!${re.src_ZCc}|$)|` +
84
86
 
85
87
  // allow `;` if not followed by space-like char
86
- ';(?!' + re.src_ZCc + '|$)|' +
88
+ `;(?!${re.src_ZCc}|$)|` +
87
89
 
88
90
  // allow `!!!` in paths, but not at the end
89
- '\\!+(?!' + re.src_ZCc + '|[!]|$)|' +
91
+ `\\!+(?!${re.src_ZCc}|[!]|$)|` +
90
92
 
91
- '\\?(?!' + re.src_ZCc + '|[?]|$)' +
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 + '{1,63}' +
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
- '(?:' + re.src_pseudo_letter + ')' +
127
+ `(?:${re.src_pseudo_letter})` +
124
128
  '|' +
125
- '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +
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
- '(?:(?:(?:' + re.src_domain + ')\\.)*' + re.src_domain/* _root */ + ')' +
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
- '(?:(?:(?:' + re.src_domain + ')\\.)+(?:%TLDS%))' +
146
+ `(?:(?:(?:${re.src_domain})\\.)+(?:%TLDS%))` +
143
147
  ')';
144
148
 
145
149
  re.tpl_host_no_ip_fuzzy =
146
150
 
147
- '(?:(?:(?:' + re.src_domain + ')\\.)+(?:%TLDS%))';
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
- 'localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';
180
+ `localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:${re.src_ZPCc}|>|$))`;
177
181
 
178
182
  re.tpl_email_fuzzy =
179
183
 
180
- '(^|' + text_separators + '|"|\\(|' + re.src_ZCc + ')' +
181
- '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';
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
- '(^|(?![.:/\\-_@])(?:[$+<=>^`|\uff5c]|' + re.src_ZPCc + '))' +
187
- '((?![$+<=>^`|\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';
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
- '(^|(?![.:/\\-_@])(?:[$+<=>^`|\uff5c]|' + re.src_ZPCc + '))' +
193
- '((?![$+<=>^`|\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';
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
  }