forked from github/docs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
get-blc-command.js
executable file
·61 lines (49 loc) · 2.3 KB
/
get-blc-command.js
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/env node
const supportedLanguages = Object.values(require('../lib/languages')).map(language => language.code)
const excludedLinks = require('../lib/excluded-links')
const program = require('commander')
// [start-readme]
//
// This script parses options for `script/check-external-links`.
//
// [end-readme]
program
.description('Construct a blc command to run in script/check-external-links')
.option('-L, --language <lang_code>', 'required language code')
.option('-i, --internalOnly', 'check internal links only')
.parse(process.argv)
const languageCode = program.language
if (!languageCode || !supportedLanguages.includes(languageCode)) {
console.error(`error: you must provide a currently supported language code: ${supportedLanguages.join(', ')}\n`)
process.exit(1)
}
// options for blc: https://github.com/stevenvachon/broken-link-checker#command-line-usage
const blcPackage = './node_modules/broken-link-checker/bin/blc'
const host = 'http://localhost:4000'
const hostWithLanguage = `${host}/${languageCode}`
const maintainOrder = '--ordered' // maintain order of links in html
const recursive = '--recursive'
const requestMethod = '--get'
const filterLevel = '--filter-level 3' // level 3 checks the most assets
const excludeExternal = program.internalOnly ? ' --exclude-external' : ''
let command = `${blcPackage} ${hostWithLanguage} ${maintainOrder} ${recursive} ${requestMethod} ${filterLevel}${excludeExternal}`
let excludeStrings = ''
// blc can only except one string per --exclude option
// so we need to construct multiple strings from exclusions array
excludedLinks.forEach(excludedLink => {
excludeStrings = `${excludeStrings} --exclude ${excludedLink}`
})
// prevent link checker from crawling other languages
// for example, if we're checking links on the English site
// we need to exclude links on Japanese, Chinese, Spanish, etc.
supportedLanguages.forEach(supportedLanguage => {
if (supportedLanguage === languageCode) return
const internalLink = `${host}/${supportedLanguage}/*`
const externalLink = `https://help.github.com/${supportedLanguage}/*`
excludeStrings = `${excludeStrings} --exclude ${internalLink}`
excludeStrings = `${excludeStrings} --exclude ${externalLink}`
})
// get final command
command = command + excludeStrings
// output final command
console.log(command)