mirror of https://github.com/iptv-org/iptv
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
import path from 'path'
|
|
import fs from 'fs'
|
|
|
|
type MarkdownConfig = {
|
|
build: string
|
|
template: string
|
|
}
|
|
|
|
export class Markdown {
|
|
build: string
|
|
template: string
|
|
|
|
constructor(config: MarkdownConfig) {
|
|
this.build = config.build
|
|
this.template = config.template
|
|
}
|
|
|
|
compile() {
|
|
const workingDir = process.cwd()
|
|
|
|
const templatePath = path.resolve(workingDir, this.template)
|
|
const template = fs.readFileSync(templatePath, 'utf8')
|
|
const processedContent = this.processIncludes(template, workingDir)
|
|
|
|
if (this.build) {
|
|
const outputPath = path.resolve(workingDir, this.build)
|
|
fs.writeFileSync(outputPath, processedContent, 'utf8')
|
|
}
|
|
}
|
|
|
|
private processIncludes(template: string, baseDir: string): string {
|
|
const includeRegex = /#include\s+"([^"]+)"/g
|
|
|
|
return template.replace(includeRegex, (match, includePath) => {
|
|
try {
|
|
const fullPath = path.resolve(baseDir, includePath)
|
|
const includeContent = fs.readFileSync(fullPath, 'utf8')
|
|
return this.processIncludes(includeContent, baseDir)
|
|
} catch (error) {
|
|
console.warn(`Warning: Could not include file ${includePath}: ${error}`)
|
|
return match
|
|
}
|
|
})
|
|
}
|
|
}
|