1
0
mirror of synced 2026-01-22 18:03:38 -05:00
Files
docs/src/tools/scripts/liquid-markdown-tables/lib.ts
2024-06-10 15:09:24 +00:00

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('')
}