UNPKG

vue-docs

Version:
148 lines (107 loc) 4.47 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.add = add; exports.change = change; exports.remove = remove; var _marked = require('./marked'); var _marked2 = _interopRequireDefault(_marked); var _logger = require('../logger'); var _logger2 = _interopRequireDefault(_logger); var _domParser = require('dom-parser'); var _domParser2 = _interopRequireDefault(_domParser); var _path = require('path'); var _fs = require('fs'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var STATIC_PATH = '../server/static/'; var DOC_PATH = (0, _path.resolve)((0, _path.join)(__dirname, STATIC_PATH, 'docs')); var ROUTER_FILE_PATH = (0, _path.resolve)((0, _path.join)(__dirname, STATIC_PATH, 'router/map.js')); var routerCode = ['module.exports = {\n', '}']; function add(targetPath, destPath) { var name = void 0, docPath = void 0; name = (0, _path.basename)(targetPath); _logger2.default.info(name + ' file is added to watcher'); name = (0, _path.basename)(targetPath, '.md'); docPath = (0, _path.resolve)((0, _path.join)(DOC_PATH, name + '.vue')); (0, _fs.writeFileSync)(docPath, md2vue(targetPath)); (0, _fs.writeFileSync)(destPath, generateVueCode(name)); (0, _fs.writeFileSync)(ROUTER_FILE_PATH, generateRouterCode(name, 'add')); } function change(targetPath, destPath) { var name = void 0, docPath = void 0; name = (0, _path.basename)(targetPath); _logger2.default.info(name + ' file is change'); name = (0, _path.basename)(targetPath, '.md'); docPath = (0, _path.resolve)((0, _path.join)(DOC_PATH, name + '.vue')); (0, _fs.writeFileSync)(docPath, md2vue(targetPath)); (0, _fs.writeFileSync)(destPath, generateVueCode(name)); } function remove(targetPath, destPath) { var name = void 0, docPath = void 0; name = (0, _path.basename)(targetPath); _logger2.default.info(name + ' file was deleted by watcher'); name = (0, _path.basename)(targetPath, '.md'); docPath = (0, _path.resolve)((0, _path.join)(DOC_PATH, name + '.vue')); (0, _fs.writeFileSync)(ROUTER_FILE_PATH, generateRouterCode(name, 'remove')); (0, _fs.unlinkSync)(docPath); (0, _fs.unlinkSync)(destPath); } function md2vue(targetPath) { var content = (0, _fs.readFileSync)(targetPath); return toVue((0, _marked2.default)(content)); } function generateRouterCode(name, op) { var template = routerTemplate(encodeURIComponent(name)); if (op === 'add') { routerCode.splice(-1, 0, template); } if (op === 'remove') { for (var index = 1; index < routerCode.length; index++) { if (routerCode[index] === template) { routerCode.splice(index, 1); break; } } } return routerCode.join(''); } function generateVueCode(name) { return vueTemplate(name, capitalize(name)); } function routerTemplate(name) { return ' \'/' + name + '\': { meta: { title: \'' + name + '\' }, component: function (resolve) { require([\'pages/' + name + '\'], resolve) }},\n'; } function vueTemplate(name, componentName) { return '<template>\n <Layout>\n <' + componentName + '></' + componentName + '>\n </Layout>\n</template>\n\n<script>\n import ' + componentName + ' from \'docs/' + name + '\'\n\n export default {\n components: {\n ' + componentName + '\n }\n }\n</script>'; } function toVue(content) { var parser = void 0, dom = void 0, style = void 0, script = void 0, reg = void 0, result = void 0; parser = new _domParser2.default(); dom = parser.parseFromString(content); style = dom.getElementsByTagName('style')[0]; script = dom.getElementsByTagName('script')[0]; reg = { style: /<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi, script: /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi }; result = '<template>\n <section>\n' + content.replace(reg.style, '').replace(reg.script, '') + '\n </section>\n</template>'; if (style) { result += '\n<style>\n' + style.innerHTML + '\n</style>'; } if (script) { result += '\n<script>\n' + script.innerHTML + '\n</script>'; } return result; } function capitalize(str) { return typeof str === 'string' ? str[0].toUpperCase() + str.slice(1) : str; }