69 lines
2.3 KiB
TypeScript
69 lines
2.3 KiB
TypeScript
// E.g. `{%- ifversion dependency-review-action-licenses %}\n`
|
|
const ifVersionRegex = /^{%-?\s*ifversion\s+([\w- ]+)\s*-?%}\n/
|
|
const ifVersionEndRegex = /\|({%-?\s*ifversion\s+([\w- ]+)\s*-?%})\n/
|
|
// E.g. `... |{% endif %}{% ifversion dependency-review-action-fail-on-scopes %}\n`
|
|
const endifIfVersionRegex = /\|({%-?\s*endif\s*%})({%-?\sifversion\s+([\w- ]+)\s*-?%})\n/
|
|
const endifRegex = /\|({%-?\s*endif\s*%})\n/
|
|
const endifAloneRegex = /^({%-?\s*endif\s*%})\n/
|
|
|
|
// Split a string by newlines while keeping the newlines
|
|
function splitAndKeepNewlines(str: string) {
|
|
const lines = str.split(/(\r\n|\r|\n)/)
|
|
const result: string[] = []
|
|
for (let i = 0; i < lines.length; i++) {
|
|
if (lines[i].match(/(\r\n|\r|\n)/)) {
|
|
result[result.length - 1] += lines[i]
|
|
} else {
|
|
result.push(lines[i])
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
export async function processFile(content: string) {
|
|
let inTable = false
|
|
let inFrontmatter = false
|
|
let inMarkdown = false
|
|
const newLines: string[] = []
|
|
for (let line of splitAndKeepNewlines(content)) {
|
|
if (line === '---\n') {
|
|
if (!inFrontmatter) {
|
|
inFrontmatter = true
|
|
} else {
|
|
inFrontmatter = false
|
|
inMarkdown = true
|
|
}
|
|
}
|
|
if (inMarkdown) {
|
|
if (line.startsWith('|') && line.endsWith('|\n')) {
|
|
inTable = true
|
|
} else if (inTable && line === '\n') {
|
|
inTable = false
|
|
}
|
|
if (inTable) {
|
|
// E.g. `{%- ifversion dependency-review-action-licenses %}\n`
|
|
if (ifVersionRegex.test(line)) {
|
|
const better = line.replace('{%-', '{%').replace('-%}', '%}').trim()
|
|
line = `| ${better} |\n`
|
|
} else if (ifVersionEndRegex.test(line)) {
|
|
line = line
|
|
.replace(ifVersionEndRegex, '|\n| $1 |\n')
|
|
.replace('{%-', '{%')
|
|
.replace('-%}', '%}')
|
|
} else if (endifIfVersionRegex.test(line)) {
|
|
line = line
|
|
.replace(endifIfVersionRegex, '|\n| $1 |\n| $2 |\n')
|
|
.replace('{%-', '{%')
|
|
.replace('-%}', '%}')
|
|
} else if (endifRegex.test(line)) {
|
|
line = line.replace(endifRegex, '|\n| $1 |\n')
|
|
} else if (endifAloneRegex.test(line)) {
|
|
line = line.replace(endifAloneRegex, '| $1 |\n').replace('{%-', '{%')
|
|
}
|
|
}
|
|
}
|
|
newLines.push(line)
|
|
}
|
|
return newLines.join('')
|
|
}
|