tsl-markdown-loader
Version:
tsl readme loader
106 lines • 7.71 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.toVueComponent = exports.toCardSection = void 0;
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = require("path");
const handlebars_1 = __importDefault(require("handlebars"));
const highlight_js_1 = __importDefault(require("highlight.js"));
const fast_glob_1 = __importDefault(require("fast-glob"));
const DEMO_CONTENT = fs_extra_1.default.readFileSync(path_1.join(__dirname, "..", "template", "demo.tpl")).toString();
const COMMON_CONTENT = fs_extra_1.default.readFileSync(path_1.join(__dirname, "..", "template", "common.tpl")).toString();
/**
* 获取demo
*/
function getDemo(dirname) {
let docs = [];
// 获取src下面组件的readme.md文档
fast_glob_1.default.sync(path_1.join(dirname, "demo", "**", "*.vue").replace(/\\/g, "/")).forEach((file) => {
const [name] = path_1.parse(file).name.split(".");
docs.push({
file,
name
});
});
return docs;
}
function getFileContext(path) {
if (fs_extra_1.default.pathExistsSync(path)) {
return fs_extra_1.default.readFileSync(path).toString();
}
else {
return "";
}
}
/**
* 把html中的片段按照H标签自动分拆为独立的每块(主要用于浏览是排版好看)
* @param html
*/
function toCardSection(html) {
const group = html
.replace(/<([^\/ >]+)/g, `<$1 :class="'tsl-el'"`)
.replace(/<h3/g, ":::<h3")
.replace(/<h2/g, ":::<h2")
.split(":::");
return group
.map((fragment) => {
if (fragment.indexOf("<h3") !== -1) {
return `<div class="card">${fragment}</div>`;
}
return fragment;
})
.join("");
}
exports.toCardSection = toCardSection;
/**
* 把html转换为PC端的vue组件
* @param html
*/
function toVueComponent(html, dirname, loader) {
loader.addContextDependency && loader.addContextDependency(dirname);
let demos = getDemo(dirname), cardHtml = toCardSection(html);
if (demos.length === 0) {
let handleBar = handlebars_1.default.compile(COMMON_CONTENT);
return handleBar({ html: cardHtml });
}
let handleBar = handlebars_1.default.compile(DEMO_CONTENT), components = [], imports = [];
// regexStr = [];
// 组装example 代码模块
/*demos.map((demo: any) => {
regexStr.push(`{{\\s*${demo.name}\\s*}}`);
});*/
let /*regex = new RegExp(regexStr.join("|"), "g"), */ cacheFile = {};
cardHtml = cardHtml.replace(/\{\{[^\}]+\}\}/g, (str) => {
let code = str.replace(/\{|\}|\s/g, ""), demo = demos.find((item) => item.name === code);
if (!demo) {
return str;
}
if (!cacheFile[demo.file]) {
cacheFile[demo.file] = getFileContext(demo.file);
}
let fileCode = cacheFile[demo.file], key = demo.name.replace(/-/g, "");
components.push(`ori${key}`);
imports.push({
file: demo.file,
key: `ori${key}`
});
return `
<ori${key}></ori${key}>
<template v-slot:source>
<pre v-pre>
<code style="display: none" class="code-str">${encodeURIComponent(fileCode)}</code>
<code>${highlight_js_1.default.highlightAuto(fileCode).value}</code>
</pre>
</template>
`;
});
return handleBar({
html: cardHtml,
imports,
components: components.join(",")
});
}
exports.toVueComponent = toVueComponent;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93cmFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHdEQUEyQjtBQUMzQiwrQkFBbUM7QUFDbkMsNERBQW9DO0FBQ3BDLGdFQUFnQztBQUNoQywwREFBNkI7QUFFN0IsTUFBTSxZQUFZLEdBQUcsa0JBQUcsQ0FBQyxZQUFZLENBQUMsV0FBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEcsTUFBTSxjQUFjLEdBQUcsa0JBQUcsQ0FBQyxZQUFZLENBQUMsV0FBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDcEc7O0dBRUc7QUFDSCxTQUFTLE9BQU8sQ0FBQyxPQUFlO0lBQzlCLElBQUksSUFBSSxHQUEwQyxFQUFFLENBQUM7SUFDckQsd0JBQXdCO0lBQ3hCLG1CQUFJLENBQUMsSUFBSSxDQUFDLFdBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDbkYsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDUixJQUFJO1lBQ0osSUFBSTtTQUNMLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsSUFBWTtJQUNsQyxJQUFJLGtCQUFHLENBQUMsY0FBYyxDQUFD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