markdown-link-check
Advanced tools
Comparing version 3.8.5 to 3.8.6
43
index.js
@@ -10,2 +10,37 @@ 'use strict'; | ||
const envVarPatternMatcher = /(?<pattern>{{env\.(?<name>[a-zA-Z0-9\-_]+)}})/; | ||
/* | ||
* Performs some special replacements for the following patterns: | ||
* - {{BASEURL}} - to be replaced with opts.projectBaseUrl | ||
* - {{env.<env_var_name>}} - to be replaced with the environment variable specified with <env_var_name> | ||
*/ | ||
function performSpecialReplacements(str, opts) { | ||
// replace the `{{BASEURL}}` with the opts.projectBaseUrl. Helpful to build absolute urls "relative" to project roots | ||
str = str.replace('{{BASEURL}}', opts.projectBaseUrl); | ||
// replace {{env.<env_var_name>}} with the corresponding environment variable or an empty string if none is set. | ||
var envVarMatch; | ||
do { | ||
envVarMatch = envVarPatternMatcher.exec(str); | ||
if(!envVarMatch) { | ||
break; | ||
} | ||
var envVarPattern = envVarMatch.groups.pattern; | ||
var envVarName = envVarMatch.groups.name; | ||
var envVarPatternReplacement = ''; | ||
if(envVarName in process.env) { | ||
envVarPatternReplacement = process.env[envVarName]; | ||
} | ||
str = str.replace(envVarPattern, envVarPatternReplacement); | ||
} while (true); | ||
return str; | ||
} | ||
module.exports = function markdownLinkCheck(markdown, opts, callback) { | ||
@@ -55,3 +90,3 @@ if (arguments.length === 2 && typeof opts === 'function') { | ||
let pattern = replacementPattern.pattern instanceof RegExp ? replacementPattern.pattern : new RegExp(replacementPattern.pattern); | ||
link = link.replace(pattern, replacementPattern.replacement); | ||
link = link.replace(pattern, performSpecialReplacements(replacementPattern.replacement, opts)); | ||
} | ||
@@ -65,2 +100,8 @@ } | ||
for (const httpHeader of opts.httpHeaders) { | ||
if (httpHeader.headers) { | ||
for (const header of Object.keys(httpHeader.headers)) { | ||
httpHeader.headers[header] = performSpecialReplacements(httpHeader.headers[header], opts); | ||
} | ||
} | ||
for (const url of httpHeader.urls) { | ||
@@ -67,0 +108,0 @@ if (link.startsWith(url)) { |
{ | ||
"name": "markdown-link-check", | ||
"version": "3.8.5", | ||
"version": "3.8.6", | ||
"description": "checks the all of the hyperlinks in a markdown text to determine if they are alive or dead", | ||
@@ -5,0 +5,0 @@ "bin": { |
@@ -62,3 +62,4 @@ ![Test library workflow status](https://github.com/tcort/markdown-link-check/workflows/Test%20library/badge.svg) | ||
* `ignorePatterns` an array of objects holding regular expressions which a link is checked against and skipped for checking in case of a match. Example: `[{ pattern: /foo/ }]` | ||
* `replacementPatterns` an array of objects holding regular expressions which are replaced in a link with their corresponding replacement string. This behavior allows (for example) to adapt to certain platform conventions hosting the Markdown. Example: `[{ pattern: /^.attachments/, replacement: "file://some/conventional/folder/.attachments" }]` | ||
* `replacementPatterns` an array of objects holding regular expressions which are replaced in a link with their corresponding replacement string. This behavior allows (for example) to adapt to certain platform conventions hosting the Markdown. The special replacement `{{BASEURL}}` can be used to dynamically link to the base folder (used from `projectBaseUrl`) (for example that `/` points to the root of your local repository). Example: `[{ pattern: /^.attachments/, replacement: "file://some/conventional/folder/.attachments" }, { pattern: ^/, replacement: "{{BASEURL}}/"}]` | ||
* `projectBaseUrl` the URL to use for `{{BASEURL}}` replacement | ||
* `ignoreDisable` if this is `true` then disable comments are ignored. | ||
@@ -170,3 +171,3 @@ * `retryOn429` if this is `true` then retry request when response is an HTTP code 429 after the duration indicated by `retry-after` header. | ||
* `ignorePatterns`: An array of objects holding regular expressions which a link is checked against and skipped for checking in case of a match. | ||
* `replacementPatterns`: An array of objects holding regular expressions which are replaced in a link with their corresponding replacement string. This behavior allows (for example) to adapt to certain platform conventions hosting the Markdown. | ||
* `replacementPatterns`: An array of objects holding regular expressions which are replaced in a link with their corresponding replacement string. This behavior allows (for example) to adapt to certain platform conventions hosting the Markdown. The special replacement `{{BASEURL}}` can be used to dynamically link to the current working directory (for example that `/` points to the root of your current working directory). | ||
* `httpHeaders`: The headers are only applied to links where the link **starts with** one of the supplied URLs in the `urls` section. | ||
@@ -192,2 +193,6 @@ * `timeout` timeout in [zeit/ms](https://www.npmjs.com/package/ms) format. (e.g. `"2000ms"`, `20s`, `1m`). Default `10s`. | ||
"replacement": "file://some/conventional/folder/.attachments" | ||
}, | ||
{ | ||
"pattern": "^/", | ||
"replacement": "{{BASEURL}}/" | ||
} | ||
@@ -194,0 +199,0 @@ ], |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
24803
105
223
2