您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
将EasyMock导出YApi
// ==UserScript== // @name EasyMock2YApi // @namespace YApiExtension // @version 0.4 // @description 将EasyMock导出YApi // @author [email protected] // @match *://*/project/* // @grant none // @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.slim.min.js // ==/UserScript== (function() { 'use strict'; var isVarTypePathRegex = /[{:]/; function transformMockItem(item) { var transformParameter = function(key, item) { return JSON.parse(item.parameters || "[]") .filter(p => p.in === key) .map(p => { return { name: p.name, example: p.example, description: p.description }; }); }; var transformBody = function(res_body) { if (!res_body) { return; } var jsonFactory = new Function("return " + res_body); var traverse = function(obj, handler) { Object.keys(obj).forEach(key => { if (obj[key] != null && typeof obj[key] === "object") { traverse(obj[key], handler); } if (Array.isArray(obj[key])) { obj[key].forEach(i => traverse(i, handler)); } if (typeof obj[key] === "function") { obj[key] = handler(obj[key].toString()); } }); }; var jsonInstance = jsonFactory(); traverse(jsonInstance, func => func.toString()); return JSON.stringify(jsonInstance); }; return { query_path: { path: item.url, params: [] }, status: "undone", type: isVarTypePathRegex.test(item.url) ? "var" : "static", req_body_is_json_schema: false, res_body_is_json_schema: false, api_opened: false, index: 0, method: item.method.toLocaleUpperCase(), title: item.description, path: item.url, req_params: transformParameter("path", item), add_time: Date.now(), up_time: Date.now(), req_query: transformParameter("query", item), req_headers: transformParameter("header", item), req_body_form: [], res_body_type: "json", __v: 0, desc: "", markdown: "", res_body: transformBody(item.mode) || "", catid: null }; // "catid" "project_id" } function easyMock2YApi(mocks) { var result = { index: 0, name: "公共分类", add_time: Date.now(), up_time: Date.now(), list: mocks.map(transformMockItem) }; return [result]; } function download(filename, text) { var element = document.createElement("a"); element.setAttribute( "href", "data:text/plain;charset=utf-8," + encodeURIComponent(text) ); element.setAttribute("download", filename); element.style.display = "none"; document.body.appendChild(element); element.click(); document.body.removeChild(element); } function addExportBtn() { var newLi = $("<li>导出为YApi</li>"); newLi.on("click", function() { console.log("%c downloading",'color:#2d8cf0'); var token=__INITIAL_STATE__.user.token var projectId=__INITIAL_STATE__.mock.project._id var total=__INITIAL_STATE__.mock.total fetch("/api/mock?project_id="+projectId+"&page_size="+total+"&page_index=1&keywords=&sort=%7B%7D&filter=%7B%7D", {"credentials":"include","headers":{'Authorization':'Bearer '+token},"referrer":"https://easymock.sankuai.com/project/5bc41e341439ef395b4dcfa1","referrerPolicy":"no-referrer-when-downgrade","body":null,"method":"GET","mode":"cors"}).then((res)=>{ return res.json() }).then((data)=>{ console.log(data) download( "apis.json", JSON.stringify(easyMock2YApi(data.data.mocks)) ); }) }); $(".em-container .em-proj-detail__switcher ul").append(newLi); } function isEasyMockSite() { return ( document .querySelector('meta[property="og:url"]') .getAttribute("content") .indexOf("easy-mock") > -1 ); } if(isEasyMockSite()){ addExportBtn(); } })();