const fs = require('fs');
var path = require('path');
let marked = require('marked');
let package =require("../package.json") ;
if (!marked) {
console.log('you need npm i marked -D!');
}
//插入 默认的 script 标签
let jsroot = ``;
/**
*
* @param {text} sorce 替换 头部信息
*/
function insert(sorce) {
var insert = sorce.indexOf('');
if (insert > -1) {
return sorce.substring(0, insert) + '请使用手机扫码体验
' + sorce.substring(insert, sorce.length);
} else {
return sorce
}
}
///创建一个空文件
/**
*
* @param {string} output 输出路径
* @param {string} sorce 文件源
* @param {boole} ishasCode 是否需要二维码
*/
function createdFile(output, sorce,ishasCode) {
var pathSrc = output;
sorce = sorce.replace(/@latest/g,'@'+package.version)
if(!ishasCode){
var res = insert(sorce);
} else{
var res = sorce;
}
fs.open(pathSrc, "w+", (err, fd) => {
var bufs = `' + jsroot;
var buf = new Buffer(bufs);
if( typeof fd == 'number'){
fs.writeSync(fd, buf, 0, buf.length, 0);
}else{
console.log(pathSrc,' typeof fd != number 请改正文件')
}
})
}
/**
*
* @param {string} filePath 监听路径
* @param {*} outPath 输出路径
* @param {*} nohead 是否有头文件
*/
function fileDisplay(filePath,outPath,nohead) {
var rendererMd = new marked.Renderer();
marked.setOptions({
renderer: rendererMd,
highlight: function (code) {
return require('highlight.js').highlightAuto(code).value;
},
tables: true
}, res => {
})
fs.readdir(filePath, (res, files) => {
if (!res) {
files.forEach(filename => {
//获取当前文件绝对路径
let filedir = path.join(filePath, filename);
//文件写入
fs.stat(filedir, (err, stats) => {
if (!err) {
if (stats.isDirectory()) {
fileDisplay(filedir,outPath,nohead)
} else {
//判断文件类型是否是md文件
if (/.md$/.test(filedir)) {
//文件读取
fs.readFile(filedir, 'utf-8', (err, data) => {
let html = marked(data);
let filedirarry = filedir.split('.');
let fdurl = filedirarry[0];
let fileNames = [];
for (let i = fdurl.length - 1; i > -1; i--) {
if (/[a-zA-Z]/.test(fdurl[i])) {
fileNames.push(fdurl[i])
} else {
fileNames.push('-')
}
}
let newName = fileNames.reverse().join('').split('-');
let resName = '';
if(newName.indexOf('doc')>-1){
resName = newName[newName.length - 2]
}else{
resName = newName[newName.length - 1]
}
createdFile(outPath + '/' + resName + '.vue', html,nohead)
});
//文件监听
let fsWatcher = fs.watchFile(filedir, {
persistent: true,
persistent: 1000
}, (err, data) => {
// console.log(err,data,filedir);
fs.readFile(filedir, 'utf-8', (err, data) => {
let html = marked(data);
let filedirarry = filedir.split('/');
let fileNames = filedirarry[filedirarry.length - 2];
createdFile(outPath + '/' + fileNames + '.vue', html,nohead)
});
});
}
}
}
})
})
}
})
}
//md转 其他格式类型
function MdToHtml(commomOption) {
// commomOption = options;
//获取所有的md 转html的结果
fileDisplay(commomOption.entry,commomOption.output,commomOption.nohead);
}
MdToHtml.prototype.apply = function (compiler) {
// console.log(compiler,'lls')
};
module.exports = MdToHtml;