79 lines
2.2 KiB
TypeScript
79 lines
2.2 KiB
TypeScript
import { readdirSync, readFileSync, writeFileSync } from 'fs'
|
|
import { UserScriptMetaFull } from './types'
|
|
|
|
export interface readmeData {
|
|
meta: UserScriptMetaFull
|
|
error: string | null
|
|
}
|
|
|
|
export function updateReadmeFile(fileList: readmeData[]) {
|
|
let readmeFile = getReadmeFileName()
|
|
if (readmeFile !== null) {
|
|
let [readmeStart, readmeEnd] = readReadmeFile(readmeFile)
|
|
|
|
let installLinks = fileList.map(readmeDataToString).join('\n')
|
|
|
|
let installLinksAll = `<!-- START INSTALL LINKS -->
|
|
## Installs
|
|
|
|
${installLinks}
|
|
<!-- END INSTALL LINKS -->`
|
|
|
|
let content = readmeStart + installLinksAll + readmeEnd
|
|
writeFileSync(readmeFile, content)
|
|
}
|
|
}
|
|
|
|
function readmeDataErrorString(error: string | null): string {
|
|
if (error === null) return ''
|
|
error = error
|
|
.split('\n')
|
|
.map(line => ` ${line}`)
|
|
.join('\n')
|
|
return `\n\n${error}`
|
|
}
|
|
|
|
function readmeDataToString(readmeData: readmeData): string {
|
|
let { meta, error } = readmeData
|
|
let errStr = error !== null ? '~~' : ''
|
|
let errMsg = readmeDataErrorString(error)
|
|
return `- ${errStr}[${meta.name}](${meta.downloadURL})})${errStr}${errMsg}`
|
|
}
|
|
|
|
function getReadmeFileName(): string | null {
|
|
let files = readdirSync('.')
|
|
for (let name of files) {
|
|
if (/^readme\.md$/i.test(name)) {
|
|
return name
|
|
}
|
|
}
|
|
return null
|
|
}
|
|
|
|
function readReadmeFile(readmeFile: string): [string, string] {
|
|
const content = readFileSync(readmeFile).toString()
|
|
|
|
const regex =
|
|
/<!-- START INSTALL LINKS -->(?:.|\n)*?<!-- END INSTALL LINKS -->/
|
|
const index = regex.exec(content)?.index
|
|
|
|
let contentPre = '',
|
|
contentPost = ''
|
|
|
|
if (index === undefined) {
|
|
contentPre = content
|
|
} else {
|
|
let content_replace = content.replace(regex, '')
|
|
contentPre = content_replace.slice(0, index)
|
|
contentPost = content_replace.slice(index)
|
|
}
|
|
|
|
if (contentPre.trimEnd().length === 0) contentPre = ''
|
|
else contentPre = contentPre.trimEnd() + '\n\n'
|
|
|
|
if (contentPost.trimStart().length === 0) contentPost = '\n'
|
|
else contentPost = '\n\n' + contentPost.trimStart()
|
|
|
|
return [contentPre, contentPost]
|
|
}
|