UNPKG

@serverless-devs/alireadme

Version:

This is a component demo for Serverless Devs Tool

208 lines 23.8 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseReadme = exports.genReadmeStr = exports.getStencil = exports.getSrcReadmePath = exports.getReadmePath = void 0; var path_1 = __importDefault(require("path")); var core_1 = require("@serverless-devs/core"); var logger_1 = __importDefault(require("../common/logger")); var constant_1 = require("../constant"); var stencil = "\n> \u6CE8\uFF1A\u5F53\u524D\u9879\u76EE\u4E3A Serverless Devs \u5E94\u7528\uFF0C\u7531\u4E8E\u5E94\u7528\u4E2D\u4F1A\u5B58\u5728\u9700\u8981\u521D\u59CB\u5316\u624D\u53EF\u8FD0\u884C\u7684\u53D8\u91CF\uFF08\u4F8B\u5982\u5E94\u7528\u90E8\u7F72\u5730\u533A\u3001\u670D\u52A1\u540D\u3001\u51FD\u6570\u540D\u7B49\u7B49\uFF09\uFF0C\u6240\u4EE5**\u4E0D\u63A8\u8350**\u76F4\u63A5 Clone \u672C\u4ED3\u5E93\u5230\u672C\u5730\u8FDB\u884C\u90E8\u7F72\u6216\u76F4\u63A5\u590D\u5236 s.yaml \u4F7F\u7528\uFF0C**\u5F3A\u70C8\u63A8\u8350**\u901A\u8FC7 `s init ` \u7684\u65B9\u6CD5\u6216\u5E94\u7528\u4E2D\u5FC3\u8FDB\u884C\u521D\u59CB\u5316\uFF0C\u8BE6\u60C5\u53EF\u53C2\u8003[\u90E8\u7F72 & \u4F53\u9A8C](#\u90E8\u7F72--\u4F53\u9A8C) \u3002\n\n# {{appName}} \u5E2E\u52A9\u6587\u6863\n<p align=\"center\" class=\"flex justify-center\">\n <a href=\"https://www.serverless-devs.com\" class=\"ml-1\">\n <img src=\"http://editor.devsapp.cn/icon?package={{appName}}&type=packageType\">\n </a>\n <a href=\"http://www.devsapp.cn/details.html?name={{appName}}\" class=\"ml-1\">\n <img src=\"http://editor.devsapp.cn/icon?package={{appName}}&type=packageVersion\">\n </a>\n <a href=\"http://www.devsapp.cn/details.html?name={{appName}}\" class=\"ml-1\">\n <img src=\"http://editor.devsapp.cn/icon?package={{appName}}&type=packageDownload\">\n </a>\n</p>\n\n<description>\n</description>\n\n<codeUrl>\n</codeUrl>\n<preview>\n</preview>\n\n\n## \u524D\u671F\u51C6\u5907\n\n\u4F7F\u7528\u8BE5\u9879\u76EE\uFF0C\u60A8\u9700\u8981\u6709\u5F00\u901A\u4EE5\u4E0B\u670D\u52A1\uFF1A\n\n<service>\n</service>\n\n\u63A8\u8350\u60A8\u62E5\u6709\u4EE5\u4E0B\u7684\u4EA7\u54C1\u6743\u9650 / \u7B56\u7565\uFF1A\n<auth>\n</auth>\n\n<remark>\n</remark>\n\n<disclaimers>\n</disclaimers>\n\n## \u90E8\u7F72 & \u4F53\u9A8C\n\n<appcenter>\n \n- :fire: \u901A\u8FC7 [Serverless \u5E94\u7528\u4E2D\u5FC3](https://fcnext.console.aliyun.com/applications/create?template={{appName}}) \uFF0C\n [![Deploy with Severless Devs](https://img.alicdn.com/imgextra/i1/O1CN01w5RFbX1v45s8TIXPz_!!6000000006118-55-tps-95-28.svg)](https://fcnext.console.aliyun.com/applications/create?template={{appName}}) \u8BE5\u5E94\u7528\u3002\n \n</appcenter>\n<deploy>\n \n- \u901A\u8FC7 [Serverless Devs Cli](https://www.serverless-devs.com/serverless-devs/install) \u8FDB\u884C\u90E8\u7F72\uFF1A\n - [\u5B89\u88C5 Serverless Devs Cli \u5F00\u53D1\u8005\u5DE5\u5177](https://www.serverless-devs.com/serverless-devs/install) \uFF0C\u5E76\u8FDB\u884C[\u6388\u6743\u4FE1\u606F\u914D\u7F6E](https://docs.serverless-devs.com/fc/config) \uFF1B\n - \u521D\u59CB\u5316\u9879\u76EE\uFF1A`s init {{appName}} -d {{appName}} `\n - \u8FDB\u5165\u9879\u76EE\uFF0C\u5E76\u8FDB\u884C\u9879\u76EE\u90E8\u7F72\uFF1A`cd {{appName}} && s deploy - y`\n \n</deploy>\n\n## \u5E94\u7528\u8BE6\u60C5\n\n<appdetail id=\"flushContent\">\n</appdetail>\n\n## \u4F7F\u7528\u6587\u6863\n\n<usedetail id=\"flushContent\">\n</usedetail>\n\n\n<devgroup>\n\n\n## \u5F00\u53D1\u8005\u793E\u533A\n\n\u60A8\u5982\u679C\u6709\u5173\u4E8E\u9519\u8BEF\u7684\u53CD\u9988\u6216\u8005\u672A\u6765\u7684\u671F\u5F85\uFF0C\u60A8\u53EF\u4EE5\u5728 [Serverless Devs repo Issues](https://github.com/serverless-devs/serverless-devs/issues) \u4E2D\u8FDB\u884C\u53CD\u9988\u548C\u4EA4\u6D41\u3002\u5982\u679C\u60A8\u60F3\u8981\u52A0\u5165\u6211\u4EEC\u7684\u8BA8\u8BBA\u7EC4\u6216\u8005\u4E86\u89E3 FC \u7EC4\u4EF6\u7684\u6700\u65B0\u52A8\u6001\uFF0C\u60A8\u53EF\u4EE5\u901A\u8FC7\u4EE5\u4E0B\u6E20\u9053\u8FDB\u884C\uFF1A\n\n<p align=\"center\"> \n\n| <img src=\"https://serverless-article-picture.oss-cn-hangzhou.aliyuncs.com/1635407298906_20211028074819117230.png\" width=\"130px\" > | <img src=\"https://serverless-article-picture.oss-cn-hangzhou.aliyuncs.com/1635407044136_20211028074404326599.png\" width=\"130px\" > | <img src=\"https://serverless-article-picture.oss-cn-hangzhou.aliyuncs.com/1635407252200_20211028074732517533.png\" width=\"130px\" > |\n| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| <center>\u5FAE\u4FE1\u516C\u4F17\u53F7\uFF1A`serverless`</center> | <center>\u5FAE\u4FE1\u5C0F\u52A9\u624B\uFF1A`xiaojiangwh`</center> | <center>\u9489\u9489\u4EA4\u6D41\u7FA4\uFF1A`33947367`</center> |\n</p>\n</devgroup>\n"; var replaceTag = function (source, appendStr, tagName, attribute) { var startTag = "<".concat(tagName).concat(attribute || '', ">"); var endTag = "</".concat(tagName, ">"); var start = source.indexOf(startTag); var end = source.indexOf(endTag); if (start === -1 && end === -1) { logger_1.default.debug("\u6CA1\u6709\u627E\u5230 tag: ".concat(tagName)); return source; } if (start === -1) { var startStr_1 = source.slice(0, end) || ""; var endStr_1 = source.slice(end) || ""; return "".concat(startStr_1, "\n\n").concat(startTag, "\n\n").concat(appendStr, "\n").concat(endStr_1); } else if (end === -1) { var startStr_2 = source.slice(0, start + startTag.length) || ""; var endStr_2 = source.slice(start + startTag.length) || ""; return "".concat(startStr_2, "\n\n").concat(appendStr, "\n\n").concat(endTag, "\n").concat(endStr_2); } var startStr = source.slice(0, start + startTag.length) || ""; var endStr = source.slice(end) || ""; return "".concat(startStr, "\n\n").concat(appendStr, "\n\n").concat(endStr); }; var trimTag = function (source, tagName, attribute) { var startTag = "<".concat(tagName).concat(attribute || '', ">"); var endTag = "</".concat(tagName, ">"); var start = source.indexOf(startTag); var end = source.indexOf(endTag); if (start === -1 || end === -1) { logger_1.default.debug("\u6CA1\u6709\u627E\u5230 tag: ".concat(tagName)); return ''; } return source.slice(start + startTag.length, end).trim(); }; var getReadmePath = function () { return path_1.default.join(process.cwd(), 'readme.md'); }; exports.getReadmePath = getReadmePath; var getSrcReadmePath = function () { return path_1.default.join(process.cwd(), 'src', 'readme.md'); }; exports.getSrcReadmePath = getSrcReadmePath; var getStencil = function () { var filePath = (0, exports.getReadmePath)(); if (!core_1.fse.existsSync(filePath)) { return ''; } return core_1.fse.readFileSync(filePath, 'utf8'); }; exports.getStencil = getStencil; var genReadmeStr = function (data) { logger_1.default.debug("genReadmeStr data: ".concat(JSON.stringify(data))); var appName = data.appName, appDescription = data.appDescription, codeUrl = data.codeUrl, previewUrl = data.previewUrl, service = data.service, auth = data.auth, remark = data.remark, disclaimers = data.disclaimers, appdetail = data.appdetail, usedetail = data.usedetail; var endData = stencil; // 获取模版 // 应用名称 if (appName) { endData = endData.replace(/{{appName}}/g, appName); } // 应用描述 if (appDescription) { endData = replaceTag(endData, appDescription, 'description'); } // 所需要的前置服务 if (!core_1.lodash.isEmpty(service)) { var str = "\n\n| \u670D\u52A1 | \u5907\u6CE8 |\n| --- | --- |\n".concat(service.filter(function (item) { return item === null || item === void 0 ? void 0 : item.name; }).map(function (item) { return "| ".concat(item.name, " | ").concat(item.description, " |"); }).join('\n')); endData = replaceTag(endData, str, 'service'); } // 当前应用所需权限 if (!core_1.lodash.isEmpty(auth)) { console.log('auth:: ', auth); var str = "\n\n| \u670D\u52A1/\u4E1A\u52A1 | \u6743\u9650 | \u5907\u6CE8 |\n| --- | --- | --- |\n".concat(auth.map(function (item) { return "| ".concat(item.service, " | ").concat(item.name, " | ").concat(item.description, " |"); }).join('\n')); endData = replaceTag(endData, str, 'auth'); } // 帮助文档 if (appdetail) { endData = replaceTag(endData, appdetail, 'appdetail', ' id="flushContent"'); } // 使用文档/后续操作 if (usedetail) { endData = replaceTag(endData, usedetail, 'usedetail', ' id="flushContent"'); } // 项目注意事项 if (remark) { endData = replaceTag(endData, "\u60A8\u8FD8\u9700\u8981\u6CE8\u610F\uFF1A \n".concat(remark), 'remark'); } else { endData = replaceTag(endData, '', 'remark'); } // 项目免责信息 if (disclaimers) { endData = replaceTag(endData, "\u514D\u8D23\u58F0\u660E\uFF1A \n".concat(disclaimers), 'disclaimers'); } else { endData = replaceTag(endData, '', 'disclaimers'); } // 代码仓库地址 if (codeUrl) { endData = replaceTag(endData, "- [:smiley_cat: \u4EE3\u7801](".concat(codeUrl, ")"), 'codeUrl'); } else { endData = replaceTag(endData, '', 'codeUrl'); } // 项目预览地址 if (previewUrl) { endData = replaceTag(endData, "- [:eyes: \u9884\u89C8](".concat(previewUrl, ")"), 'preview'); } else { endData = replaceTag(endData, '', 'preview'); } return endData; }; exports.genReadmeStr = genReadmeStr; var parseReadme = function (readmeStr) { if (!readmeStr) { return {}; } var data = {}; // 所需要的前置服务 var serviceStr = trimTag(readmeStr, 'service'); if (serviceStr) { var d = serviceStr.split('\n').map(function (item) { var str = item.trim(); // 必须保证 | ** | ** | 才允许处理 if (str.startsWith('| ') && str.endsWith(' |')) { var _a = str.split('|'), name_1 = _a[1], description = _a[2]; var findObj = core_1.lodash.find(constant_1.SERVICES, function (obj) { return obj.value === name_1.trim(); }); return __assign(__assign({}, findObj), { name: name_1.trim(), description: description.trim() }); } return; }).filter(function (item) { return item; }); d.shift(); d.shift(); data.service = d; } // 当前应用所需权限 var authStr = trimTag(readmeStr, 'auth'); if (authStr) { var d = authStr.split('\n').map(function (item) { var str = item.trim(); if (str.startsWith('| ') && str.endsWith(' |')) { var _a = str.split('|'), service = _a[1], name_2 = _a[2], description = _a[3]; return { service: service.trim(), name: name_2.trim(), description: description.trim() }; } return; }).filter(function (item) { return item; }); d.shift(); d.shift(); data.auth = d; } // 帮助文档 var appdetailStr = trimTag(readmeStr, 'appdetail', ' id="flushContent"'); if (appdetailStr) { data.appdetail = appdetailStr; } // 使用文档/后续操作 var usedetailStr = trimTag(readmeStr, 'usedetail', ' id="flushContent"'); if (usedetailStr) { data.usedetail = usedetailStr; } // 项目注意事项 var remarkStr = trimTag(readmeStr, 'remark'); if (remarkStr) { data.remark = remarkStr.replace('您还需要注意: \n', ''); } // 项目免责信息 var disclaimersStr = trimTag(readmeStr, 'disclaimers'); if (disclaimersStr) { data.disclaimers = disclaimersStr.replace('免责声明: \n', ''); } // 代码仓库地址 var codeUrlStr = trimTag(readmeStr, 'codeUrl'); if (codeUrlStr) { var codeUrlMatch = codeUrlStr.match(/- \[:smiley_cat: 代码\]\((.+)\)/); if (codeUrlMatch && codeUrlMatch[1]) { data.codeUrl = codeUrlMatch[1]; } } // 项目预览地址 var previewUrlStr = trimTag(readmeStr, 'preview'); if (previewUrlStr) { var previewUrlMatch = previewUrlStr.match(/- \[:eyes: 预览\]\((.+)\)/); if (previewUrlMatch && previewUrlMatch[1]) { data.previewUrl = previewUrlMatch[1]; } } logger_1.default.debug("parse readme: ".concat(JSON.stringify(data))); return data; }; exports.parseReadme = parseReadme; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlbmNpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3N0ZW5jaWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBd0I7QUFDeEIsOENBQW9EO0FBQ3BELDREQUFzQztBQUN0Qyx3Q0FBdUM7QUFFdkMsSUFBTSxPQUFPLEdBQUcsNHZKQW9GZixDQUFDO0FBRUYsSUFBTSxVQUFVLEdBQUcsVUFBQyxNQUFjLEVBQUUsU0FBaUIsRUFBRSxPQUFlLEVBQUUsU0FBa0I7SUFDeEYsSUFBTSxRQUFRLEdBQUcsV0FBSSxPQUFPLFNBQUcsU0FBUyxJQUFJLEVBQUUsTUFBRyxDQUFDO0lBQ2xELElBQU0sTUFBTSxHQUFHLFlBQUssT0FBTyxNQUFHLENBQUM7SUFDL0IsSUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxJQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUM5QixnQkFBTSxDQUFDLEtBQUssQ0FBQyx3Q0FBYSxPQUFPLENBQUUsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sTUFBTSxDQUFDO0tBQ2Y7SUFDRCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtRQUNoQixJQUFNLFVBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUMsSUFBTSxRQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkMsT0FBTyxVQUFHLFVBQVEsaUJBQU8sUUFBUSxpQkFBTyxTQUFTLGVBQUssUUFBTSxDQUFFLENBQUM7S0FDaEU7U0FBTSxJQUFJLEdBQUcsS0FBSyxDQUFD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