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 = ` ## Installs ${installLinks} ` 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 = /(?:.|\n)*?/ 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] }