1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import { createLink, generateHLJSOpenTag } from './dependency_linker_util';
const GEM_URL = 'https://rubygems.org/gems/';
const methodRegex = '.*add_dependency.*|.*add_runtime_dependency.*|.*add_development_dependency.*';
const openTagRegex = generateHLJSOpenTag('string', '(&.*;)');
const closeTagRegex = '&.*</span>';
const DEPENDENCY_REGEX = new RegExp(
/*
* Detects gemspec dependencies inside of content that is highlighted by Highlight.js
* Example: s.add_dependency(<span class="hljs-string">'rugged'</span>, <span class="hljs-string">'~> 0.24.0'</span>)
*
* Group 1 (method) : s.add_dependency(
* Group 2 (delimiter) : '
* Group 3 (packageName): rugged
* Group 4 (closeTag) : '</span>
* Group 5 (rest) : , <span class="hljs-string">'~> 0.24.0'</span>)
*/
`(${methodRegex})${openTagRegex}(.*)(${closeTagRegex})(.*${closeTagRegex})`,
'gm',
);
const handleReplace = (method, delimiter, packageName, closeTag, rest) => {
// eslint-disable-next-line @gitlab/require-i18n-strings
const openTag = generateHLJSOpenTag('string linked', delimiter);
const href = `${GEM_URL}${packageName}`;
const packageLink = createLink(href, packageName);
return `${method}${openTag}${packageLink}${closeTag}${rest}`;
};
export default (result) => {
return result.value.replace(
DEPENDENCY_REGEX,
(_, method, delimiter, packageName, closeTag, rest) =>
handleReplace(method, delimiter, packageName, closeTag, rest),
);
};
|