mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-23 21:13:50 +00:00
80 lines
2.1 KiB
Diff
80 lines
2.1 KiB
Diff
diff --git a/lib/index.js b/lib/index.js
|
|
index c5ca771c24dd914e342f791716a822431ee32b3a..457d9f8c4625f7d9c7ea1e9ffc13616db1fc6fef 100644
|
|
--- a/lib/index.js
|
|
+++ b/lib/index.js
|
|
@@ -126,8 +126,37 @@ function exitLiteralAutolink(token) {
|
|
this.exit(token)
|
|
}
|
|
|
|
-/** @type {FromMarkdownTransform} */
|
|
+// Regex support detector, for backward compatibility
|
|
+// Ref: https://github.com/syntax-tree/mdast-util-gfm-autolink-literal/pull/14
|
|
+const regexSupport = {
|
|
+ lookbehind: (() => {
|
|
+ try {
|
|
+ // Using regex literal instead of RegExp constructor
|
|
+ ;/(?<=x)/.test('x')
|
|
+ return true
|
|
+ } catch {
|
|
+ return false
|
|
+ }
|
|
+ })()
|
|
+}
|
|
+
|
|
+/**
|
|
+ * Main transform function that uses the appropriate version based on regex support
|
|
+ * @type {FromMarkdownTransform}
|
|
+ */
|
|
function transformGfmAutolinkLiterals(tree) {
|
|
+ if (regexSupport.lookbehind) {
|
|
+ modernAutolinkTransform(tree)
|
|
+ } else {
|
|
+ legacyAutolinkTransform(tree)
|
|
+ }
|
|
+}
|
|
+
|
|
+/**
|
|
+ * Modern version of autolink transform using lookbehind
|
|
+ * @type {FromMarkdownTransform}
|
|
+ */
|
|
+function modernAutolinkTransform(tree) {
|
|
findAndReplace(
|
|
tree,
|
|
[
|
|
@@ -138,6 +167,35 @@ function transformGfmAutolinkLiterals(tree) {
|
|
)
|
|
}
|
|
|
|
+
|
|
+/**
|
|
+ * Legacy version of autolink transform for older Node.js versions
|
|
+ * @type {FromMarkdownTransform}
|
|
+ */
|
|
+function legacyAutolinkTransform(tree) {
|
|
+ findAndReplace(
|
|
+ tree,
|
|
+ [
|
|
+ [/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi, findUrl],
|
|
+ // [/([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/g, findEmail] # NOTE: original regex in 2.0.0
|
|
+ [/(^|\s|\p{P}|\p{S})([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/gu, findEmailLegacy]
|
|
+ ],
|
|
+ {ignore: ['link', 'linkReference']}
|
|
+ )
|
|
+}
|
|
+
|
|
+/**
|
|
+ * Helper function for legacy email matching
|
|
+ * @param {string} _ - Unused parameter
|
|
+ * @param {string} prefix - Email prefix
|
|
+ * @param {string} name - Email name
|
|
+ * @param {string} domain - Email domain
|
|
+ * @returns {*} The processed email
|
|
+ */
|
|
+function findEmailLegacy(_, prefix, name, domain) {
|
|
+ return findEmail(name + '@' + domain)
|
|
+}
|
|
+
|
|
/**
|
|
* @type {ReplaceFunction}
|
|
* @param {string} _
|