cloudcc-cli 1.0.0 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/template/indexvue CHANGED
@@ -1,13 +1,297 @@
1
1
  <template>
2
- <div>Hello World</div>
2
+ <div class="dev-button" :class="elePropObj.className" @mouseover="myMouseover">
3
+ <el-button
4
+ v-loading.fullscreen.lock="fullscreenLoading"
5
+ element-loading-text="加载中,请稍后..."
6
+ :style="`font-size:` + elePropObj.fontSize + `px`"
7
+ :type="elePropObj.type"
8
+ @click="handleClick"
9
+ >{{ elePropObj.defaultValue }}</el-button
10
+ >
11
+ </div>
3
12
  </template>
4
13
 
5
14
  <script>
15
+ import axios from "../utils/http";
6
16
  export default {
7
-
8
- }
17
+ name: "dev-button",
18
+ props: {
19
+ elePropObj: {
20
+ type: Object,
21
+ default: () => ({}),
22
+ },
23
+ eleEventObj: {
24
+ type: Object,
25
+ default: () => ({}),
26
+ }
27
+ },
28
+ data() {
29
+ return {
30
+ fullscreenLoading: false,
31
+ componentInfo: {
32
+ component: "dev-button",
33
+ compName: "按钮-dev",
34
+ icon: "#icon-anniu",
35
+ sort: 1,
36
+ bizType: "基础组件",
37
+ compDesc: "常用的操作按钮。",
38
+ /* 组件分类:
39
+ * public: 公开组件(其他组织可见)
40
+ * private:私有组件(自己组织可见)
41
+ * beta:组件测试版本
42
+ */
43
+ category: "private",
44
+ },
45
+ style: {
46
+ unit: "px",
47
+ width: 72,
48
+ height: 38,
49
+ top: 0,
50
+ left: 0,
51
+ rotate: 0,
52
+ opacity: 1,
53
+ },
54
+ styleOption: {
55
+ unit: {
56
+ lable: "单位",
57
+ type: "option",
58
+ options: [
59
+ {
60
+ value: "px",
61
+ label: "像素",
62
+ },
63
+ {
64
+ value: "%",
65
+ label: "百分比",
66
+ },
67
+ {
68
+ value: "hw",
69
+ label: "视口",
70
+ },
71
+ ],
72
+ },
73
+ width: {
74
+ lable: "宽",
75
+ type: "input",
76
+ inputType: "number",
77
+ },
78
+ height: {
79
+ lable: "高",
80
+ type: "input",
81
+ inputType: "number",
82
+ },
83
+ top: {
84
+ lable: "y 坐标",
85
+ type: "input",
86
+ inputType: "number",
87
+ },
88
+ left: {
89
+ lable: "x 坐标",
90
+ type: "input",
91
+ inputType: "number",
92
+ },
93
+ },
94
+ propObj: {
95
+ id: "",
96
+ pageApi: "createPage",
97
+ defaultValue: "按钮-dev",
98
+ type: "primary",
99
+ fontSize: 16,
100
+ functionContent: `function test(conext,value) {
101
+ alert(JSON.stringify(value.getObject()))
102
+ }`,
103
+ handleComponentId: "",
104
+ axiosAddres: "http://localhost:8080/api/pc/1.0/school/add",
105
+ className: "",
106
+ },
107
+ propOption: {
108
+ className: {
109
+ lable: "tailwind样式,'cc-'开头,多个空格隔开",
110
+ type: "input",
111
+ },
112
+ defaultValue: {
113
+ lable: "默认值",
114
+ type: "defaultValueInput",
115
+ },
116
+ type: {
117
+ lable: "主题",
118
+ type: "option",
119
+ options: [
120
+ {
121
+ value: "primary",
122
+ label: "primary",
123
+ },
124
+ {
125
+ value: "success",
126
+ label: "success",
127
+ },
128
+ {
129
+ value: "info",
130
+ label: "info",
131
+ },
132
+ {
133
+ value: "warning",
134
+ label: "warning",
135
+ },
136
+ {
137
+ value: "danger",
138
+ label: "danger",
139
+ },
140
+ ],
141
+ },
142
+ fontSize: {
143
+ lable: "字号",
144
+ type: "input",
145
+ inputType: "number",
146
+ },
147
+ handleComponentId: {
148
+ lable: "组件ID,使用英文逗号分隔",
149
+ type: "input",
150
+ },
151
+ functionContent: {
152
+ lable: "方法体",
153
+ type: "code",
154
+ },
155
+ axiosAddres: {
156
+ lable: "网络请求地址",
157
+ type: "code",
158
+ },
159
+ },
160
+ events:{
161
+ myCreated: `function created(self) {
162
+ // self即this,本组件的vue实例
163
+ }`,
164
+ myMounted: `function mounted(self) {
165
+ // self即this,本组件的vue实例
166
+ }`,
167
+ myDestroyed: `function destroyed(self) {
168
+ // self即this,本组件的vue实例
169
+ }`,
170
+ myMouseover: `function myMouseover(self) {
171
+ // self即this,本组件的vue实例
172
+ }`,
173
+ },
174
+ eventsOption:{
175
+ myCreated: {
176
+ lable: "创建:",
177
+ type: "code",
178
+ },
179
+ myMounted: {
180
+ lable: "显示:",
181
+ type: "code",
182
+ },
183
+ myDestroyed: {
184
+ lable: "销毁:",
185
+ type: "code",
186
+ },
187
+ myMouseover: {
188
+ lable: "鼠标移入:",
189
+ type: "code",
190
+ },
191
+ },
192
+ animations: [],
193
+ groupStyle: {},
194
+ isLock: false,
195
+ };
196
+ },
197
+ created() {
198
+ if (this.$Components.get('editMode') == "edit") { // 编辑模式不触发
199
+ return
200
+ }
201
+ let myCreated = eval(
202
+ "(false || " + this.eleEventObj.myCreated + ")"
203
+ );
204
+ myCreated(this)
205
+ },
206
+ mounted() {
207
+ if (this.$Components.get('editMode') == "edit") { // 编辑模式不触发
208
+ return
209
+ }
210
+ let myMounted = eval(
211
+ "(false || " + this.eleEventObj.myMounted + ")"
212
+ );
213
+ myMounted(this)
214
+ },
215
+ destroyed() {
216
+ let myDestroyed = eval(
217
+ "(false || " + this.eleEventObj.myDestroyed + ")"
218
+ );
219
+ myDestroyed(this)
220
+ },
221
+ methods: {
222
+ myMouseover() {
223
+ let mouseoverEvent = eval(
224
+ "(false || " + this.eleEventObj.myMouseover + ")"
225
+ );
226
+ mouseoverEvent(this)
227
+ },
228
+ handleClick() {
229
+ if (
230
+ null == this.elePropObj.handleComponentId ||
231
+ "" == this.elePropObj.handleComponentId
232
+ ) {
233
+ return;
234
+ }
235
+ let components = this.elePropObj.handleComponentId
236
+ .split(",")
237
+ .map((item) => {
238
+ return this.$Components.get(item);
239
+ });
240
+ let test = eval("(false || " + this.elePropObj.functionContent + ")");
241
+ // 接收请求体,访问接口
242
+ let body = test(
243
+ this.$Components.get(this.elePropObj.pageApi),
244
+ ...components
245
+ );
246
+ if (this.elePropObj.axiosAddres && body) {
247
+ this.handleAxios(this.elePropObj.axiosAddres, body);
248
+ }
249
+ },
250
+ /**
251
+ * 网络请求
252
+ */
253
+ handleAxios(path, params) {
254
+ this.fullscreenLoading = true;
255
+ axios
256
+ .postLight(path, params)
257
+ .then(
258
+ (res) => {
259
+ this.fullscreenLoading = false;
260
+ if (res.returnCode == 200 || "1" == res.returnCode) {
261
+ this.$message({
262
+ message: "提交成功",
263
+ type: "success",
264
+ });
265
+ }
266
+ },
267
+ (err) => {
268
+ this.fullscreenLoading = false;
269
+ this.$message({
270
+ message: err,
271
+ type: "error",
272
+ });
273
+ }
274
+ )
275
+ .catch((error) => {
276
+ this.fullscreenLoading = false;
277
+ this.$message({
278
+ message: error,
279
+ type: "error",
280
+ });
281
+ });
282
+ },
283
+ },
284
+ };
9
285
  </script>
10
-
11
286
  <style scoped>
12
-
287
+ .dev-button {
288
+ height: 100%;
289
+ width: 100%;
290
+ padding: 0px !important;
291
+ }
292
+ .dev-button .el-button {
293
+ height: 100%;
294
+ width: 100%;
295
+ padding: 0px !important;
296
+ }
13
297
  </style>
@@ -0,0 +1,13 @@
1
+ import Vue from 'vue';
2
+ import ElementUI from 'element-ui';
3
+ Vue.use(ElementUI);
4
+ import 'element-ui/lib/theme-chalk/index.css';
5
+ import App from './App.vue';
6
+
7
+ Vue.config.productionTip = false
8
+
9
+ Vue.prototype.$Components = new Map()
10
+
11
+ new Vue({
12
+ render: h => h(App),
13
+ }).$mount('#app')
@@ -1,11 +1,52 @@
1
1
  {
2
- "name": "<%= name %>",
2
+ "name": "cloudcc-plugin",
3
3
  "version": "1.0.0",
4
- "description": "<%= description %>",
4
+ "description": "cloudcc-plugin-dev",
5
+ "devConsoleConfig": {
6
+ "baseUrl": "http://xxx", //组件提交地址
7
+ "username": "xxx",// 用户名
8
+ "secretKey": "xxx",// 通过用户名,访问接口获得
9
+ },
5
10
  "scripts": {
6
- "serve": "cloudccServe",
7
- "build": "cloudccBuild"
11
+ "serve": "vue-cli-service serve",
12
+ "build-plugin": "cloudccBuild"
13
+ },
14
+ "dependencies": {
15
+ "axios": "^0.21.1",
16
+ "core-js": "^3.6.5",
17
+ "vue": "^2.6.11",
18
+ "vue-cookies": "^1.7.4",
19
+ "vue-custom-element": "^3.3.0"
20
+ },
21
+ "devDependencies": {
22
+ "@vue/cli-plugin-babel": "~4.5.0",
23
+ "@vue/cli-plugin-eslint": "~4.5.0",
24
+ "@vue/cli-service": "~4.5.0",
25
+ "babel-eslint": "^10.1.0",
26
+ "element-ui": "^2.15.2",
27
+ "eslint": "^6.7.2",
28
+ "eslint-plugin-vue": "^6.2.2",
29
+ "vue-template-compiler": "^2.6.11",
30
+ "sass": "1.26.8",
31
+ "sass-loader": "8.0.2"
32
+ },
33
+ "eslintConfig": {
34
+ "root": true,
35
+ "env": {
36
+ "node": true
37
+ },
38
+ "extends": [
39
+ "plugin:vue/essential",
40
+ "eslint:recommended"
41
+ ],
42
+ "parserOptions": {
43
+ "parser": "babel-eslint"
44
+ },
45
+ "rules": {}
8
46
  },
9
- "author": "",
10
- "license": "ISC"
11
- }
47
+ "browserslist": [
48
+ "> 1%",
49
+ "last 2 versions",
50
+ "not dead"
51
+ ]
52
+ }
@@ -0,0 +1,7 @@
1
+ module.exports = {
2
+ publicPath: '/',
3
+ productionSourceMap: false,//关闭生成Map文件
4
+ configureWebpack: {
5
+ },
6
+ css: { extract: false },//css强制内联在js中
7
+ }
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
+ <title>开发日志</title>
9
+ </head>
10
+
11
+ <body>
12
+
13
+ </body>
14
+
15
+ </html>
package/test/test.js ADDED
@@ -0,0 +1,6 @@
1
+ let versions = ["A-V", "bbbb-V", "B", "C", "D"]
2
+ let version;
3
+ version = versions.find((item) => {
4
+ return item.includes("-V");
5
+ })
6
+ console.log(version);
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 常用控制台交互
3
+ */
4
+ const inquirer = require("inquirer")
5
+
6
+ module.exports = {
7
+ /**
8
+ * 请求版本信息
9
+ * @returns 结果
10
+ */
11
+ askType: () => {
12
+ const prompt = [{
13
+ type: 'list',
14
+ message: '请选择发布版本:',
15
+ name: 'type',
16
+ choices: [
17
+ { name: "客户环境-Release", value: "Release" },
18
+ { name: "客户环境-Release-99", value: "Release-99" },
19
+ { name: "公司环境-GA", value: "GA" },
20
+ { name: "预生产环境-RC", value: "RC" },
21
+ { name: "预生产环境-RC-99", value: "RC-99" },
22
+ { name: "uat环境-Beta", value: "Beta" },
23
+ { name: "研发联调环境-Dev", value: "Dev" },
24
+ ],
25
+ }
26
+ ];
27
+ return inquirer.prompt(prompt)
28
+ }
29
+ }
@@ -0,0 +1,75 @@
1
+
2
+ function change(ori) {
3
+ //   let ori = "12.0.9";
4
+ let split = ori.split(".");
5
+ let ret = "";
6
+ if (split.length == 4) {
7
+ // 12.1.0.0 形式的
8
+ for (let i = 0; i < split.length; i++) {
9
+ let last = split[3];
10
+ if (last < 9999) {
11
+ last++;
12
+ ret = split[0] + "." + split[1] + "." + split[2] + "." + last;
13
+ break;
14
+ } else {
15
+ let second = split[2];
16
+ if (second < 9) {
17
+ second++;
18
+ ret = split[0] + "." + split[1] + "." + second + ".0";
19
+ break;
20
+ } else {
21
+ let third = split[1];
22
+ if (third < 9) {
23
+ third++;
24
+ ret = split[0] + "." + third + ".0" + ".0";
25
+ break;
26
+ } else {
27
+ let forth = split[0];
28
+ forth++;
29
+ ret = forth + ".0.0.0";
30
+ break;
31
+ }
32
+ }
33
+ }
34
+ }
35
+ return ret;
36
+ } else {
37
+ // 12.0.9 形式的
38
+ for (let i = 0; i < split.length; i++) {
39
+ let last = split[2];
40
+ if (last < 9) {
41
+ last++;
42
+ ret = split[0] + "." + split[1] + "." + last;
43
+ break;
44
+ } else {
45
+ let second = split[1];
46
+ if (second < 9) {
47
+ second++;
48
+ ret = split[0] + "." + second + ".0";
49
+ break;
50
+ } else {
51
+ let third = split[0];
52
+ third++;
53
+ ret = third + ".0.0";
54
+ break;
55
+ }
56
+ }
57
+ }
58
+ return ret;
59
+ }
60
+ }
61
+ module.exports = { change }
62
+
63
+
64
+
65
+ /**
66
+ * 修改版本号
67
+ * @param {ori} 版本号
68
+ * @param {type} 类型:Dev,uat,GA,Release
69
+ * @returns 新的版本号
70
+ */
71
+ // 需要更新第二位
72
+ const updateSecond = ["Release"];
73
+
74
+ // 需要更新第三位
75
+ const updateLast = ["Dev", "uat", "GA", "RC"];
@@ -0,0 +1,27 @@
1
+ /**
2
+ * 修改版本号
3
+ * @param {ori} 版本号:12.0.123
4
+ * @param {type} 类型:Dev,uat,GA,Release
5
+ * @returns 新的版本号
6
+ */
7
+ // 需要更新第二位
8
+ const updateSecond = ["Release", "Release-99"];
9
+
10
+ // 需要更新第三位
11
+ const updateLast = ["Dev", "Beta", "GA", "RC", "RC-99"];
12
+
13
+ function change(version, type) {
14
+ if (version) {
15
+ let split = version.split(".");
16
+ let ret = "";
17
+ if (split && split.length === 3) {
18
+ if (updateSecond.includes(type)) {
19
+ ret = split[0] + "." + (++split[1]) + "." + split[2];
20
+ } else if (updateLast.includes(type)) {
21
+ ret = split[0] + "." + split[1] + "." + (++split[2]);
22
+ }
23
+ }
24
+ return ret;
25
+ }
26
+ }
27
+ module.exports = { change }
@@ -0,0 +1,74 @@
1
+ // 导入cli配置文件
2
+ const config = require("../package.json")
3
+ const inquirer = require("inquirer")
4
+ const exec = require('child_process').execSync;
5
+ const chalk = require("chalk")
6
+ /**
7
+ * 检查版本号
8
+ */
9
+ function checkNpmVersion() {
10
+ let currentVersion = Number(config.version.replace(/\./g, ""));
11
+ let onlineVersion = exec(`npm view cloudcc-cli version --registry http://registry.npmjs.org`)
12
+ onlineVersion = onlineVersion.toString("utf8").trim();
13
+ let onlineVersionNum = Number(onlineVersion.replace(/\./g, ""))
14
+ // 如果结果大于0,那么提示升级
15
+ if (onlineVersionNum - currentVersion > 0) {
16
+ console.log();
17
+ console.log(chalk.green("Cloudcc-cli发现新版本!"));
18
+ console.log();
19
+ console.log(chalk.green("当前版本:v" + config.version));
20
+ console.log(chalk.green("最新版本:v" + onlineVersion));
21
+ console.log();
22
+ console.log(chalk.yellow(`如无法自动更新,请使用命令更新:npm install -g cloudcc-cli@${onlineVersion} --registry https://registry.npmjs.org`));
23
+ return onlineVersion;
24
+ }
25
+ return null;
26
+ }
27
+
28
+ /**
29
+ * 是否升级
30
+ * @returns 对象
31
+ */
32
+ function askUpdate() {
33
+ console.log();
34
+ const prompt = [{
35
+ type: 'list',
36
+ message: '是否进行自动升级?',
37
+ name: 'update',
38
+ choices: [
39
+ "Yes", 'No'
40
+ ],
41
+ }];
42
+ return inquirer.prompt(prompt)
43
+ }
44
+
45
+ /**
46
+ * 升级cli
47
+ */
48
+ function update(onlineVersion) {
49
+ console.log()
50
+ console.log(chalk.green("升级中,请稍后..."));
51
+ exec(`npm install -g cloudcc-cli@${onlineVersion} --registry https://registry.npmjs.org`)
52
+ console.log()
53
+ console.log(chalk.green("升级完成!请重新运行"));
54
+ }
55
+
56
+ /**
57
+ * 检查更新
58
+ */
59
+ async function checkUpdate() {
60
+ let onlineVersion = checkNpmVersion();
61
+ if (onlineVersion) {
62
+ let res = await askUpdate()
63
+ if ("Yes" == res.update) {
64
+ update(onlineVersion)
65
+ return true;
66
+ } else {
67
+ return false
68
+ }
69
+ }
70
+ return false
71
+ }
72
+
73
+
74
+ module.exports = { checkUpdate }
@@ -0,0 +1,20 @@
1
+ const CryptoJS = require("crypto-js");
2
+
3
+ const keyCode = "646576636f6e736f6c652d7376633132"
4
+ module.exports = {
5
+ en(word, keyStr = keyCode) {
6
+ let enc = CryptoJS.AES.encrypt(word, CryptoJS.enc.Hex.parse(keyStr), {
7
+ mode: CryptoJS.mode.ECB,
8
+ padding: CryptoJS.pad.Pkcs7
9
+ })
10
+ return enc.ciphertext.toString()
11
+ },
12
+
13
+ de(word, keyStr = keyCode) {
14
+ let dec = CryptoJS.AES.decrypt(CryptoJS.format.Hex.parse(word), CryptoJS.enc.Hex.parse(keyStr), {
15
+ mode: CryptoJS.mode.ECB,
16
+ padding: CryptoJS.pad.Pkcs7
17
+ })
18
+ return CryptoJS.enc.Utf8.stringify(dec)
19
+ }
20
+ };
@@ -0,0 +1,2 @@
1
+ @font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,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) format('woff')}.markdown-body .octicon{display:inline-block;fill:currentColor;vertical-align:text-bottom}.markdown-body .anchor{float:left;line-height:1;margin-left:-20px;padding-right:4px}.markdown-body .anchor:focus{outline:0}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#24292e;line-height:1.5;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body .pl-c{color:#6a737d}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#005cc5}.markdown-body .pl-e,.markdown-body .pl-en{color:#6f42c1}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#24292e}.markdown-body .pl-ent{color:#22863a}.markdown-body .pl-k{color:#d73a49}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#032f62}.markdown-body .pl-smw,.markdown-body .pl-v{color:#e36209}.markdown-body .pl-bu{color:#b31d28}.markdown-body .pl-ii{background-color:#b31d28;color:#fafbfc}.markdown-body .pl-c2{background-color:#d73a49;color:#fafbfc}.markdown-body .pl-c2:before{content:"^M"}.markdown-body .pl-sr .pl-cce{color:#22863a;font-weight:700}.markdown-body .pl-ml{color:#735c0f}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{color:#005cc5;font-weight:700}.markdown-body .pl-mi{color:#24292e;font-style:italic}.markdown-body .pl-mb{color:#24292e;font-weight:700}.markdown-body .pl-md{background-color:#ffeef0;color:#b31d28}.markdown-body .pl-mi1{background-color:#f0fff4;color:#22863a}.markdown-body .pl-mc{background-color:#ffebda;color:#e36209}.markdown-body .pl-mi2{background-color:#005cc5;color:#f6f8fa}.markdown-body .pl-mdr{color:#6f42c1;font-weight:700}.markdown-body .pl-ba{color:#586069}.markdown-body .pl-sg{color:#959da5}.markdown-body .pl-corl{color:#032f62;text-decoration:underline}.markdown-body details{display:block}.markdown-body summary{display:list-item}.markdown-body a{background-color:transparent}.markdown-body a:active,.markdown-body a:hover{outline-width:0}.markdown-body strong{font-weight:inherit;font-weight:bolder}.markdown-body h1{font-size:2em;margin:.67em 0}.markdown-body img{border-style:none}.markdown-body code,.markdown-body kbd,.markdown-body pre{font-family:monospace,monospace;font-size:1em}.markdown-body hr{box-sizing:content-box;height:0;overflow:visible}.markdown-body input{font:inherit;margin:0}.markdown-body input{overflow:visible}.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.markdown-body *{box-sizing:border-box}.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body a{color:#0366d6;text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body strong{font-weight:600}.markdown-body hr{background:0 0;border:0;border-bottom:1px solid #dfe2e5;height:0;margin:15px 0;overflow:hidden}.markdown-body hr:before{content:"";display:table}.markdown-body hr:after{clear:both;content:"";display:table}.markdown-body table{border-collapse:collapse;border-spacing:0}.markdown-body td,.markdown-body th{padding:0}.markdown-body details summary{cursor:pointer}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-bottom:0;margin-top:0}.markdown-body h1{font-size:32px}.markdown-body h1,.markdown-body h2{font-weight:600}.markdown-body h2{font-size:24px}.markdown-body h3{font-size:20px}.markdown-body h3,.markdown-body h4{font-weight:600}.markdown-body h4{font-size:16px}.markdown-body h5{font-size:14px}.markdown-body h5,.markdown-body h6{font-weight:600}.markdown-body h6{font-size:12px}.markdown-body p{margin-bottom:10px;margin-top:0}.markdown-body blockquote{margin:0}.markdown-body ol,.markdown-body ul{margin-bottom:0;margin-top:0;padding-left:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code,.markdown-body pre{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px}.markdown-body pre{margin-bottom:0;margin-top:0}.markdown-body input::-webkit-inner-spin-button,.markdown-body input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}.markdown-body .border{border:1px solid #e1e4e8!important}.markdown-body .border-0{border:0!important}.markdown-body .border-bottom{border-bottom:1px solid #e1e4e8!important}.markdown-body .rounded-1{border-radius:3px!important}.markdown-body .bg-white{background-color:#fff!important}.markdown-body .bg-gray-light{background-color:#fafbfc!important}.markdown-body .text-gray-light{color:#6a737d!important}.markdown-body .mb-0{margin-bottom:0!important}.markdown-body .my-2{margin-bottom:8px!important;margin-top:8px!important}.markdown-body .pl-0{padding-left:0!important}.markdown-body .py-0{padding-bottom:0!important;padding-top:0!important}.markdown-body .pl-1{padding-left:4px!important}.markdown-body .pl-2{padding-left:8px!important}.markdown-body .py-2{padding-bottom:8px!important;padding-top:8px!important}.markdown-body .pl-3,.markdown-body .px-3{padding-left:16px!important}.markdown-body .px-3{padding-right:16px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:32px!important}.markdown-body .pl-6{padding-left:40px!important}.markdown-body .f6{font-size:12px!important}.markdown-body .lh-condensed{line-height:1.25!important}.markdown-body .text-bold{font-weight:600!important}.markdown-body:before{content:"";display:table}.markdown-body:after{clear:both;content:"";display:table}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-bottom:16px;margin-top:0}.markdown-body hr{background-color:#e1e4e8;border:0;height:.25em;margin:24px 0;padding:0}.markdown-body blockquote{border-left:.25em solid #dfe2e5;color:#6a737d;padding:0 1em}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{background-color:#fafbfc;border:1px solid #c6cbd1;border-bottom-color:#959da5;border-radius:3px;box-shadow:inset 0 -1px 0 #959da5;color:#444d56;display:inline-block;font-size:11px;line-height:10px;padding:3px 5px;vertical-align:middle}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{font-weight:600;line-height:1.25;margin-bottom:16px;margin-top:24px}.markdown-body h1{font-size:2em}.markdown-body h1,.markdown-body h2{border-bottom:1px solid #eaecef;padding-bottom:.3em}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{color:#6a737d;font-size:.85em}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-bottom:0;margin-top:0}.markdown-body li{word-wrap:break-all}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{font-size:1em;font-style:italic;font-weight:600;margin-top:16px;padding:0}.markdown-body dl dd{margin-bottom:16px;padding:0 16px}.markdown-body table{display:block;overflow:auto;width:100%}.markdown-body table th{font-weight:600}.markdown-body table td,.markdown-body table th{border:1px solid #dfe2e5;padding:6px 13px}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body img{background-color:#fff;box-sizing:content-box;max-width:100%}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body code{background-color:rgba(27,31,35,.05);border-radius:3px;font-size:85%;margin:0;padding:.2em .4em}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{background:0 0;border:0;font-size:100%;margin:0;padding:0;white-space:pre;word-break:normal}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{background-color:#f6f8fa;border-radius:3px;font-size:85%;line-height:1.45;overflow:auto;padding:16px}.markdown-body pre code{background-color:transparent;border:0;display:inline;line-height:inherit;margin:0;max-width:auto;overflow:visible;padding:0;word-wrap:normal}.markdown-body .commit-tease-sha{color:#444d56;display:inline-block;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:90%}.markdown-body .blob-wrapper{border-bottom-left-radius:3px;border-bottom-right-radius:3px;overflow-x:auto;overflow-y:hidden}.markdown-body .blob-wrapper-embedded{max-height:240px;overflow-y:auto}.markdown-body .blob-num{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;color:rgba(27,31,35,.3);cursor:pointer;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px;line-height:20px;min-width:50px;padding-left:10px;padding-right:10px;text-align:right;user-select:none;vertical-align:top;white-space:nowrap;width:1%}.markdown-body .blob-num:hover{color:rgba(27,31,35,.6)}.markdown-body .blob-num:before{content:attr(data-line-number)}.markdown-body .blob-code{line-height:20px;padding-left:10px;padding-right:10px;position:relative;vertical-align:top}.markdown-body .blob-code-inner{color:#24292e;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px;overflow:visible;white-space:pre;word-wrap:normal}.markdown-body .pl-token.active,.markdown-body .pl-token:hover{background:#ffea7f;cursor:pointer}.markdown-body kbd{background-color:#fafbfc;border:1px solid #d1d5da;border-bottom-color:#c6cbd1;border-radius:3px;box-shadow:inset 0 -1px 0 #c6cbd1;color:#444d56;display:inline-block;font:11px SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;line-height:10px;padding:3px 5px;vertical-align:middle}.markdown-body :checked+.radio-label{border-color:#0366d6;position:relative;z-index:1}.markdown-body .tab-size[data-tab-size="1"]{-moz-tab-size:1;tab-size:1}.markdown-body .tab-size[data-tab-size="2"]{-moz-tab-size:2;tab-size:2}.markdown-body .tab-size[data-tab-size="3"]{-moz-tab-size:3;tab-size:3}.markdown-body .tab-size[data-tab-size="4"]{-moz-tab-size:4;tab-size:4}.markdown-body .tab-size[data-tab-size="5"]{-moz-tab-size:5;tab-size:5}.markdown-body .tab-size[data-tab-size="6"]{-moz-tab-size:6;tab-size:6}.markdown-body .tab-size[data-tab-size="7"]{-moz-tab-size:7;tab-size:7}.markdown-body .tab-size[data-tab-size="8"]{-moz-tab-size:8;tab-size:8}.markdown-body .tab-size[data-tab-size="9"]{-moz-tab-size:9;tab-size:9}.markdown-body .tab-size[data-tab-size="10"]{-moz-tab-size:10;tab-size:10}.markdown-body .tab-size[data-tab-size="11"]{-moz-tab-size:11;tab-size:11}.markdown-body .tab-size[data-tab-size="12"]{-moz-tab-size:12;tab-size:12}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:4px!important}.markdown-body .pl-2{padding-left:8px!important}.markdown-body .pl-3{padding-left:16px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:32px!important}.markdown-body .pl-6{padding-left:40px!important}.markdown-body .pl-7{padding-left:48px!important}.markdown-body .pl-8{padding-left:64px!important}.markdown-body .pl-9{padding-left:80px!important}.markdown-body .pl-10{padding-left:96px!important}.markdown-body .pl-11{padding-left:112px!important}.markdown-body .pl-12{padding-left:128px!important}
2
+ /*# sourceMappingURL=github-markdown.min.css.map */