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} ` console.log(JSON.stringify(installLinksAll)) let content = readmeStart + installLinksAll + readmeEnd writeFileSync(readmeFile, content) } } function readmeDataToString(readmeData: readmeData): string { let { meta, error } = readmeData let errStr = error !== null ? '~~' : '' let errMsg = error !== null ? `\n - ${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{0,1}(?:.|\n)*?\n{0,1}/ 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.endsWith('\n')) { contentPre += '\n' } if (!contentPre.endsWith('\n\n')) { contentPre += '\n' } if (!contentPost.startsWith('\n')) { contentPost += '\n' } if (!contentPost.startsWith('\n\n')) { contentPre += '\n' } console.log( JSON.stringify(index), JSON.stringify(content), JSON.stringify(contentPre), JSON.stringify(contentPost) ) return [contentPre, contentPost] }