api-render-ui 1.0.6 → 1.0.8

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/Readme.md CHANGED
@@ -20,6 +20,10 @@ api-render-ui is a UI library that pursues simple and efficient data rendering f
20
20
  ```
21
21
  npm install api-render-ui
22
22
  ```
23
+ - Define a container id in the html
24
+ ```html
25
+ <div id="notebook" style="overflow-y: auto;align-self: stretch;align-items: center;flex: 1 1 0;"></div>
26
+ ```
23
27
  - Your typescript code
24
28
  ```typescript
25
29
  import { ApiRenderer } from "api-render-ui"
@@ -31,7 +35,7 @@ api-render-ui is a UI library that pursues simple and efficient data rendering f
31
35
  apiRenderer.render(openapiSpec);
32
36
  ```
33
37
  ### Usage in single html
34
- Please refer to [example](example/animal.html)
38
+ Please refer to [example](example/animal.html) in the source code.
35
39
 
36
40
  ## Installation
37
41
 
package/dist/index.cjs CHANGED
@@ -38,20 +38,29 @@ var GLOBAL_STYLES = `.codigma-apioperatorlist {
38
38
  .codigma-apioperator {
39
39
  align-items: center;
40
40
  align-self: stretch;
41
- background: #F0F1F4;
42
41
  display: inline-flex;
43
42
  gap: 10px;
44
- height: 48px;
43
+ /* border-radius: 8px; */
44
+ height: 32px;
45
45
  justify-content: flex-start
46
46
  }
47
+ .codigma-apioperator:nth-child(even) {
48
+ background-color: rgb(235, 239, 244);
49
+ }
50
+ .codigma-apioperator:nth-child(odd) {
51
+ background-color: rgb(250, 246, 246);
52
+ }
53
+
47
54
  .codigma-apioperator:hover {
48
55
  cursor: pointer;
49
56
  }
57
+ .codigma-apioperator:active {
58
+ background: rgb(206, 216, 231);
59
+ }
50
60
  .codigma-method {
51
61
  align-items: center;
52
62
  display: flex;
53
63
  gap: 5px;
54
- height: 48px;
55
64
  justify-content: center;
56
65
  width: 64px
57
66
  }
@@ -63,17 +72,11 @@ var GLOBAL_STYLES = `.codigma-apioperatorlist {
63
72
  }
64
73
  .codigma-get {
65
74
  color: var(--Labels---Vibrant---Controls-Primary-\u221A, #404040);
66
- font-family: Inter;
67
- font-size: 16px;
68
- font-weight: 400;
69
75
  word-wrap: break-word
70
76
  }
71
77
  .codigma-requrl {
72
78
  color: black;
73
79
  flex: 1 1 0;
74
- font-family: Inter;
75
- font-size: 16px;
76
- font-weight: 400;
77
80
  word-wrap: break-word
78
81
  }
79
82
  /**********************apiunit css style*************************/
@@ -114,17 +117,11 @@ var GLOBAL_STYLES = `.codigma-apioperatorlist {
114
117
  }
115
118
  .codigma-apiunit-post {
116
119
  color: var(--Labels---Vibrant---Controls-Primary-\u221A, #404040);
117
- font-family: Inter;
118
- font-size: 16px;
119
- font-weight: 400;
120
120
  word-wrap: break-word
121
121
  }
122
122
  .codigma-apiunit-requrl {
123
123
  color: black;
124
124
  flex: 1 1 0;
125
- font-family: Inter;
126
- font-size: 16px;
127
- font-weight: 400;
128
125
  word-wrap: break-word;
129
126
  border-left: 0;
130
127
  border-right: 0;
@@ -141,9 +138,6 @@ var GLOBAL_STYLES = `.codigma-apioperatorlist {
141
138
  }
142
139
  .codigma-apiunit-send {
143
140
  color: black;
144
- font-family: Inter;
145
- font-size: 16px;
146
- font-weight: 400;
147
141
  word-wrap: break-word
148
142
  }
149
143
  .codigma-apiunit-send-button:hover {
@@ -309,7 +303,6 @@ var ApiRenderer = class {
309
303
  if (apiSpec["openapi"] && apiSpec["openapi"].startsWith("3.") || apiSpec["swagger"] && apiSpec["swagger"].startsWith("2.")) {
310
304
  const countApi = countOpenAPI(apiSpec);
311
305
  const apiOperatorList = parseOpenAPI(apiSpec);
312
- console.log("\u89E3\u6790\u7ED3\u679C:", apiOperatorList);
313
306
  if (countApi == 1 && renderUnit) {
314
307
  this.container = createApiUnit(apiOperatorList[0]);
315
308
  } else {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/inlined-styles.ts","../src/api-render-ui.ts"],"sourcesContent":["export * from \"./api-render-ui.js\";","// Auto-generated by inline-styles.mjs\nexport const GLOBAL_STYLES = `.codigma-apioperatorlist {\r\n align-items: flex-start;\r\n background: white;\r\n display: inline-flex;\r\n flex-direction: column;\r\n gap: 5px;\r\n height: 100%;\r\n justify-content: flex-start;\r\n width: 100%\r\n}\r\n.codigma-apioperator {\r\n align-items: center;\r\n align-self: stretch;\r\n background: #F0F1F4;\r\n display: inline-flex;\r\n gap: 10px;\r\n height: 48px;\r\n justify-content: flex-start\r\n}\r\n.codigma-apioperator:hover {\r\n cursor: pointer;\r\n}\r\n.codigma-method {\r\n align-items: center;\r\n display: flex;\r\n gap: 5px;\r\n height: 48px;\r\n justify-content: center;\r\n width: 64px\r\n}\r\n.codigma-methodtype {\r\n align-items: center;\r\n display: flex;\r\n gap: 10px;\r\n justify-content: center\r\n}\r\n.codigma-get {\r\n color: var(--Labels---Vibrant---Controls-Primary-√, #404040);\r\n font-family: Inter;\r\n font-size: 16px;\r\n font-weight: 400;\r\n word-wrap: break-word\r\n}\r\n.codigma-requrl {\r\n color: black;\r\n flex: 1 1 0;\r\n font-family: Inter;\r\n font-size: 16px;\r\n font-weight: 400;\r\n word-wrap: break-word\r\n}\r\n/**********************apiunit css style*************************/\r\n.codigma-apiunit {\r\n align-items: flex-start;\r\n background: white;\r\n box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);\r\n display: inline-flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n height: 100%;\r\n justify-content: flex-start;\r\n width: 100%\r\n}\r\n.codigma-apiunit-apioperator {\r\n align-items: center;\r\n align-self: stretch;\r\n border-bottom: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n border-top: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n display: inline-flex;\r\n gap: 10px;\r\n height: 48px;\r\n justify-content: flex-start\r\n}\r\n.codigma-apiunit-method {\r\n align-items: center;\r\n display: flex;\r\n gap: 5px;\r\n height: 48px;\r\n justify-content: center;\r\n width: 100px\r\n}\r\n.codigma-apiunit-methodtype {\r\n align-items: center;\r\n display: flex;\r\n gap: 10px;\r\n justify-content: center\r\n}\r\n.codigma-apiunit-post {\r\n color: var(--Labels---Vibrant---Controls-Primary-√, #404040);\r\n font-family: Inter;\r\n font-size: 16px;\r\n font-weight: 400;\r\n word-wrap: break-word\r\n}\r\n.codigma-apiunit-requrl {\r\n color: black;\r\n flex: 1 1 0;\r\n font-family: Inter;\r\n font-size: 16px;\r\n font-weight: 400;\r\n word-wrap: break-word;\r\n border-left: 0;\r\n border-right: 0;\r\n border-top: 0;\r\n border-bottom: 1px solid black;\r\n}\r\n.codigma-apiunit-send-button {\r\n align-items: center;\r\n display: flex;\r\n gap: 10px;\r\n height: 32px;\r\n justify-content: center;\r\n width: 88px\r\n}\r\n.codigma-apiunit-send {\r\n color: black;\r\n font-family: Inter;\r\n font-size: 16px;\r\n font-weight: 400;\r\n word-wrap: break-word\r\n}\r\n.codigma-apiunit-send-button:hover {\r\n cursor: pointer;\r\n}\r\n.codigma-apiunit-send-button:active {\r\n background-color: gray;\r\n}\r\n\r\n.codigma-apiunit-reqcontent {\r\n align-items: flex-start;\r\n align-self: stretch;\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1 1 0;\r\n gap: 5px;\r\n justify-content: flex-start;\r\n padding-left: 5px;\r\n}\r\n.codigma-apiunit-paramters-section {\r\n align-items: center;\r\n align-self: stretch;\r\n display: inline-flex;\r\n flex: 1 1 0;\r\n justify-content: flex-start\r\n}\r\n.codigma-apiunit-parameters-cnr {\r\n align-items: center;\r\n background: white;\r\n display: flex;\r\n height: 42px;\r\n justify-content: space-between;\r\n width: 122px\r\n}\r\n.codigma-apiunit-parakeyvalues {\r\n align-items: flex-start;\r\n align-self: stretch;\r\n background: white;\r\n display: inline-flex;\r\n flex-direction: column;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start;\r\n overflow: hidden;\r\n padding: 10px\r\n}\r\n.codigma-apiunit-keyvalue {\r\n align-items: center;\r\n display: inline-flex;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start\r\n}\r\n.codigma-apiunit-valuetext {\r\n align-self: stretch;\r\n background: white;\r\n border-left: 0;\r\n border-right: 0;\r\n border-top: 0;\r\n border-bottom: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n padding: 10px;\r\n width: 161px\r\n}\r\n/* .codigma-apiunit-keyvalue {\r\n align-items: center;\r\n display: inline-flex;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start;\r\n width: 211px\r\n} */\r\n.codigma-apiunit-request-body-section {\r\n align-items: center;\r\n align-self: stretch;\r\n display: inline-flex;\r\n height: 114px;\r\n justify-content: flex-start;\r\n padding-right: 5px\r\n}\r\n.codigma-apiunit-parakeyvalues {\r\n align-items: flex-start;\r\n align-self: stretch;\r\n background: white;\r\n display: flex;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start;\r\n outline-offset: -1px;\r\n outline: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n overflow: hidden;\r\n padding: 10px\r\n}\r\n.codigma-apiunit-reqresponse {\r\n align-items: flex-start;\r\n align-self: stretch;\r\n background: white;\r\n border-top: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start;\r\n padding-left: 5px;\r\n padding-right: 5px\r\n}\r\n.codigma-apiunit-responsedesc {\r\n align-items: center;\r\n align-self: stretch;\r\n display: inline-flex;\r\n justify-content: space-between;\r\n padding-right: 32px\r\n}\r\n.codigma-apiunit-responsetitle {\r\n align-items: center;\r\n border-bottom: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n display: flex;\r\n height: 42px;\r\n justify-content: space-between;\r\n width: 122px\r\n}\r\n.codigma-apiunit-response-cnr {\r\n align-items: center;\r\n align-self: stretch;\r\n background: white;\r\n display: flex;\r\n justify-content: space-between;\r\n padding-top: 2px;\r\n width: 122px\r\n}\r\n.codigma-apiunit-responsebody {\r\n position: relative;\r\n align-self: stretch;\r\n flex: 1 1 0;\r\n min-height: 5rem;\r\n /* padding: 2px */\r\n}`;\n","import { GLOBAL_STYLES } from './inlined-styles';\r\nimport { OpenAPIV3 } from 'openapi-types';\r\n\r\ntype OpenAPIV3CustomDoc = OpenAPIV3.Document & { swagger: string }\r\n\r\nexport class ApiRenderer {\r\n options: any;\r\n container: any;\r\n constructor(options: any) {\r\n this.options = Object.assign({\r\n mountPoint: document?.body, // 默认挂载到body\r\n className: 'Apioperatorlist codigma-apioperatorlist',\r\n layerName: 'apioperatorlist'\r\n }, options);\r\n\r\n this.container = null;\r\n }\r\n\r\n render(apiSpec: OpenAPIV3CustomDoc, renderUnit: boolean = false) {\r\n\r\n const appendInlineStyle = (text: string) => {\r\n // 动态创建 <style> 标签并插入全局样式\r\n const styleEl = document.createElement('style');\r\n styleEl.textContent = text;\r\n document.head.appendChild(styleEl);\r\n };\r\n // 使用\r\n appendInlineStyle(GLOBAL_STYLES);\r\n\r\n // 存储原始元素与对应新元素的映射\r\n const elementMap = new Map();\r\n\r\n // 获取实际挂载点\r\n const mountElement = typeof this.options.mountPoint === 'string' ?\r\n document.querySelector(this.options.mountPoint) :\r\n this.options.mountPoint;\r\n\r\n if (!mountElement) {\r\n throw new Error('Invalid mount point specified');\r\n }\r\n\r\n if ((apiSpec[\"openapi\"] && apiSpec[\"openapi\"].startsWith(\"3.\"))\r\n || (apiSpec[\"swagger\"] && apiSpec[\"swagger\"].startsWith(\"2.\"))) {\r\n const countApi = countOpenAPI(apiSpec);\r\n const apiOperatorList = parseOpenAPI(apiSpec);\r\n console.log('解析结果:', apiOperatorList);\r\n if (countApi == 1 && renderUnit) {\r\n // If the count of api <=1, create the api unit only. \r\n // 创建根容器\r\n this.container = createApiUnit(apiOperatorList[0]);\r\n } else {\r\n // 创建主容器\r\n this.container = document.createElement('div');\r\n this.container.setAttribute('data-layer', this.options.layerName);\r\n this.container.className = this.options.className;\r\n\r\n // 生成内容\r\n apiOperatorList.forEach((apiOperator: any) => {\r\n const reqOperator = document.createElement('div');\r\n reqOperator.setAttribute('data-layer', 'apioperator');\r\n reqOperator.className = 'Apioperator codigma-apioperator';\r\n\r\n // 创建method部分\r\n const methodContainer = document.createElement('div');\r\n methodContainer.setAttribute('data-layer', 'method');\r\n methodContainer.className = 'Method codigma-method';\r\n\r\n const methodType = document.createElement('div');\r\n methodType.setAttribute('data-layer', 'methodtype');\r\n methodType.className = 'Methodtype codigma-methodtype';\r\n\r\n const methodValue = document.createElement('div');\r\n methodValue.setAttribute('data-layer', apiOperator.method.toLowerCase());\r\n methodValue.className = `${apiOperator.method} codigma-${apiOperator.method.toLowerCase()}`;\r\n methodValue.textContent = apiOperator.method;\r\n\r\n methodType.appendChild(methodValue);\r\n methodContainer.appendChild(methodType);\r\n reqOperator.appendChild(methodContainer);\r\n\r\n // 创建URL部分\r\n const urlElement = document.createElement('div');\r\n urlElement.setAttribute('data-layer', 'requrl');\r\n urlElement.className = 'Requrl codigma-requrl';\r\n urlElement.textContent = apiOperator.url;\r\n reqOperator.appendChild(urlElement);\r\n\r\n this.container.appendChild(reqOperator);\r\n\r\n // 添加点击事件\r\n reqOperator.addEventListener('click', renderApiUnit(apiOperator, this.container, elementMap));\r\n });\r\n }\r\n } else {\r\n // 初始化当前API操作对象\r\n const apiOperator = {\r\n method: \"get\",\r\n url: \"/full/info\",\r\n rawApiInfo: null,\r\n requestBody: null,\r\n response: {},\r\n auths: [\r\n {\r\n type: \"No Auth\"\r\n },\r\n {\r\n type: \"Basic Auth\",\r\n parameters: [\r\n {\r\n name: \"userName\",\r\n value: \"\"\r\n },\r\n {\r\n name: \"password\",\r\n value: \"\"\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n // 创建根容器\r\n this.container = createApiUnit(apiSpec);\r\n }\r\n\r\n // 清空挂载点并插入新内容\r\n mountElement.innerHTML = '';\r\n mountElement.appendChild(this.container);\r\n }\r\n}\r\n\r\n\r\n\r\nfunction renderApiUnit(apiOperator: any, containerRef: any, elementMap: any) {\r\n return function (evt: any) {\r\n console.log('点击的API操作:');\r\n console.log('方法:', apiOperator.method);\r\n console.log('URL:', apiOperator.url);\r\n console.log('------------------------');\r\n\r\n const currentTarget = evt.currentTarget;\r\n // 检查是否已存在对应的新元素\r\n if (elementMap.has(currentTarget)) {\r\n const newElement = elementMap.get(currentTarget);\r\n newElement.remove(); // 移除新元素\r\n elementMap.delete(currentTarget); // 清除映射\r\n return;\r\n }\r\n\r\n // 创建根容器\r\n const apiContainer = createApiUnit(apiOperator);\r\n\r\n // 添加到文档\r\n // 插入到当前元素后面\r\n if (currentTarget.nextSibling) {\r\n containerRef.insertBefore(apiContainer, currentTarget.nextSibling);\r\n } else {\r\n containerRef.appendChild(apiContainer);\r\n }\r\n\r\n // 存储映射关系\r\n elementMap.set(currentTarget, apiContainer);\r\n }\r\n}\r\n\r\nfunction createApiUnit(apiOperator: any) {\r\n const apiContainer = document.createElement('div');\r\n apiContainer.setAttribute('data-layer', 'apiunit');\r\n apiContainer.className = 'Requnit codigma-apiunit';\r\n // 预先创建响应部分并挂载到 apiOperator,保证后面创建的 send 按钮能访问到\r\n const responseSection = createSectionResponse(apiOperator);\r\n apiOperator._responseSectionRef = responseSection;\r\n\r\n // 请求操作区\r\n const reqOperator = createReqOperator(apiOperator);\r\n apiContainer.appendChild(reqOperator);\r\n // 请求内容区\r\n const reqContent = document.createElement('div');\r\n reqContent.setAttribute('data-layer', 'reqcontent');\r\n reqContent.className = 'Reqcontent codigma-apiunit-reqcontent';\r\n // 参数部分\r\n const paramSection = createParamSection(apiOperator);\r\n // 头部部分\r\n const headerSection = createSectionHeader(apiOperator);\r\n // 授权部分\r\n const authSection = createSectionAuth(apiOperator);\r\n // 请求体部分\r\n const bodySection = createSectionRequestBody(apiOperator.requestBody);\r\n\r\n reqContent.append(paramSection, headerSection, authSection, bodySection);\r\n apiContainer.appendChild(reqContent);\r\n // 响应部分(已经预创建,直接附加)\r\n apiContainer.appendChild(responseSection);\r\n return apiContainer;\r\n}\r\n\r\nfunction createReqOperator(apiOperator: any) {\r\n const reqOperator = document.createElement('div');\r\n reqOperator.setAttribute('data-layer', 'apioperator');\r\n reqOperator.className = 'Reqoperator codigma-apiunit-apioperator';\r\n // 方法类型\r\n const methodType = document.createElement('div');\r\n methodType.setAttribute('data-layer', 'method');\r\n methodType.className = 'Method codigma-apiunit-method';\r\n const methodTypeInner = document.createElement('div');\r\n methodTypeInner.setAttribute('data-layer', 'methodtype');\r\n methodTypeInner.className = 'Methodtype codigma-apiunit-methodtype';\r\n methodTypeInner.textContent = apiOperator.method.toUpperCase();\r\n methodType.appendChild(methodTypeInner);\r\n // 方法选项图标 - 使用内联SVG\r\n const methodOpt = document.createElement('div');\r\n methodOpt.setAttribute('data-svg-wrapper', '');\r\n methodOpt.setAttribute('data-layer', 'methodopt');\r\n methodOpt.className = 'Methodopt';\r\n\r\n // 创建内联SVG\r\n const svg = createSvg();\r\n methodOpt.appendChild(svg);\r\n methodType.appendChild(methodOpt);\r\n reqOperator.appendChild(methodType);\r\n // 请求URL\r\n const reqUrl = createInputElement();\r\n reqUrl.setAttribute('data-layer', 'requrl');\r\n reqUrl.className = 'Requrl codigma-apiunit-requrl';\r\n reqUrl.value = apiOperator.url; // 绑定初始值\r\n // 可选:添加输入事件监听(根据需求)\r\n reqUrl.addEventListener('input', (e: any) => {\r\n console.log('当前值:', e.target.value);\r\n // 这里可以添加保存逻辑(如更新状态/发送请求\r\n apiOperator.url = e.target.value\r\n });\r\n reqOperator.appendChild(reqUrl);\r\n // 发送按钮\r\n const sendButton = document.createElement('div');\r\n sendButton.setAttribute('data-layer', 'send-button');\r\n sendButton.className = 'SendButton codigma-apiunit-send-button';\r\n const sendText = document.createElement('div');\r\n sendText.setAttribute('data-layer', 'Send');\r\n sendText.className = 'Send codigma-apiunit-send';\r\n sendText.textContent = 'Send';\r\n sendButton.appendChild(sendText);\r\n\r\n sendButton.addEventListener('click', (e: any) => {\r\n console.log('当前值:', e.target.value);\r\n // 这里可以添加保存逻辑(如更新状态/发送请求\r\n // responseSectionRef 在渲染时会被挂载到 apiOperator._responseSectionRef 上\r\n const respRef = apiOperator._responseSectionRef || null;\r\n sendRequest(apiOperator, respRef);\r\n });\r\n\r\n reqOperator.appendChild(sendButton);\r\n return reqOperator;\r\n}\r\n\r\nfunction createParamSection(apiOperator: any) {\r\n const paramSection = document.createElement('div');\r\n paramSection.setAttribute('data-layer', 'paramters-section');\r\n paramSection.className = 'codigma-apiunit-paramters-section';\r\n // 参数容器头\r\n const paramCnr = document.createElement('div');\r\n paramCnr.setAttribute('data-layer', 'parameters-cnr');\r\n paramCnr.className = 'codigma-apiunit-parameters-cnr';\r\n const paramText = document.createElement('div');\r\n paramText.setAttribute('data-layer', 'parameters');\r\n paramText.className = 'codigma-apiunit-send';\r\n paramText.textContent = 'Parameters';\r\n paramCnr.appendChild(paramText);\r\n paramSection.appendChild(paramCnr);\r\n // 参数键值对\r\n const paramValues = document.createElement('div');\r\n paramValues.setAttribute('data-layer', 'paraKeyValues');\r\n paramValues.className = 'Parakeyvalues codigma-apiunit-parakeyvalues';\r\n let parameters = apiOperator.rawApiInfo.parameters || [];\r\n const parameterRows = parameters.filter((parameter: any) => isPathOrQueryParam(parameter))\r\n .map((parameter: any) => createRow(parameter));\r\n paramValues.append(...parameterRows);\r\n paramSection.append(paramCnr, paramValues);\r\n return paramSection;\r\n}\r\n\r\nfunction createSectionHeader(apiOperator: any) {\r\n const headerSection = document.createElement('div');\r\n headerSection.setAttribute('data-layer', 'headers-section');\r\n headerSection.className = 'codigma-apiunit-paramters-section';\r\n // 头部容器头\r\n const headerCnr = document.createElement('div');\r\n headerCnr.setAttribute('data-layer', 'headers-cnr');\r\n headerCnr.className = 'codigma-apiunit-parameters-cnr';\r\n const headerText = document.createElement('div');\r\n headerText.setAttribute('data-layer', 'headers');\r\n headerText.className = 'codigma-apiunit-send';\r\n headerText.textContent = 'Headers';\r\n headerCnr.appendChild(headerText);\r\n headerSection.appendChild(headerCnr);\r\n // 头部键值对\r\n const headerValues = document.createElement('div');\r\n headerValues.setAttribute('data-layer', 'paraKeyValues');\r\n headerValues.className = 'Parakeyvalues codigma-apiunit-parakeyvalues';\r\n let parameters = apiOperator.rawApiInfo.parameters || [];\r\n const headerRows = parameters.filter((parameter: any) => isHeaderParam(parameter))\r\n .map((parameter: any) => createRow(parameter));\r\n headerValues.append(...headerRows);\r\n headerSection.append(headerCnr, headerValues);\r\n return headerSection;\r\n}\r\n\r\nfunction createSectionAuth(apiOperator: any) {\r\n const authSection = document.createElement('div');\r\n authSection.setAttribute('data-layer', 'authorization-section');\r\n authSection.className = 'AuthorizationSection codigma-apiunit-paramters-section';\r\n // 授权容器头\r\n const authCnr = document.createElement('div');\r\n authCnr.setAttribute('data-layer', 'authorization-cnr');\r\n authCnr.className = 'AuthorizationCnr codigma-apiunit-parameters-cnr';\r\n const authText = document.createElement('div');\r\n authText.setAttribute('data-layer', 'authorization');\r\n authText.className = 'Authorization codigma-apiunit-send';\r\n authText.textContent = 'Authorization';\r\n authCnr.appendChild(authText);\r\n authSection.appendChild(authCnr);\r\n // 授权键值对\r\n const authValues = document.createElement('div');\r\n authValues.setAttribute('data-layer', 'paraKeyValues');\r\n authValues.className = 'Parakeyvalues codigma-apiunit-parakeyvalues';\r\n\r\n let auths = apiOperator.auths || []\r\n const authTypeRow = createSelectRow(auths, authValues)\r\n if (auths.length > 0) {\r\n let parameters = apiOperator.auths[0].parameters || [];\r\n const authRows = parameters.map((parameter: any) => createRow(parameter));\r\n authValues.append(authTypeRow, ...authRows);\r\n }\r\n\r\n authSection.append(authCnr, authValues);\r\n return authSection;\r\n}\r\n\r\nfunction createSectionRequestBody(requestBody: any) {\r\n const bodySection = document.createElement('div');\r\n bodySection.setAttribute('data-layer', 'request-body-section');\r\n bodySection.className = 'RequestBodySection codigma-apiunit-request-body-section';\r\n // 请求体容器头\r\n const bodyCnr = document.createElement('div');\r\n bodyCnr.setAttribute('data-layer', 'body-cnr');\r\n bodyCnr.className = 'BodyCnr codigma-apiunit-parameters-cnr';\r\n const bodyText = document.createElement('div');\r\n bodyText.setAttribute('data-layer', 'body');\r\n bodyText.className = 'Body codigma-apiunit-send';\r\n bodyText.textContent = 'Body';\r\n bodyCnr.appendChild(bodyText);\r\n bodySection.appendChild(bodyCnr);\r\n // 请求体内容\r\n const bodyValue = document.createElement('textarea');\r\n bodyValue.setAttribute('data-layer', 'bodyTextValue');\r\n bodyValue.className = 'Id0CategoryId0NameNamePhotourlsTagsId0NameStatusAvailable codigma-apiunit-parakeyvalues';\r\n bodyValue.value = JSON.stringify(requestBody);\r\n bodySection.appendChild(bodyValue);\r\n return bodySection;\r\n}\r\n\r\nfunction createSectionResponse(apiOperator: any) {\r\n const responseSection = document.createElement('div');\r\n responseSection.setAttribute('data-layer', 'reqresponse');\r\n responseSection.className = 'Reqresponse codigma-apiunit-reqresponse';\r\n // 响应描述\r\n const responseDesc = document.createElement('div');\r\n responseDesc.setAttribute('data-layer', 'responsedesc');\r\n responseDesc.className = 'Responsedesc codigma-apiunit-responsedesc';\r\n // 响应标题\r\n const responseTitle = document.createElement('div');\r\n responseTitle.setAttribute('data-layer', 'responsetitle');\r\n responseTitle.className = 'Responsetitle codigma-apiunit-responsetitle';\r\n const responseCnr = document.createElement('div');\r\n responseCnr.setAttribute('data-layer', 'response-cnr');\r\n responseCnr.className = 'ResponseCnr codigma-apiunit-response-cnr';\r\n const responseText = document.createElement('div');\r\n responseText.setAttribute('data-layer', 'response');\r\n responseText.className = 'Response codigma-apiunit-send';\r\n responseText.textContent = 'Response';\r\n responseCnr.appendChild(responseText);\r\n responseTitle.appendChild(responseCnr);\r\n const timeStatusElement = createTimeStatusElement(apiOperator);\r\n responseDesc.append(responseTitle, timeStatusElement);\r\n // 响应体\r\n const responseBody = document.createElement('div');\r\n responseBody.setAttribute('data-layer', 'responsebody');\r\n responseBody.className = 'Responsebody codigma-apiunit-responsebody';\r\n responseSection.append(responseDesc, responseBody);\r\n return responseSection;\r\n}\r\n\r\nfunction createTimeStatusElement(apiOperator: any) {\r\n const timeStatus = document.createElement('div');\r\n timeStatus.setAttribute('data-layer', 'TimeStatus');\r\n timeStatus.className = 'TimeStatus0 codigma-apiunit-send';\r\n updateTimeStatus(timeStatus, apiOperator);\r\n return timeStatus;\r\n}\r\n\r\nfunction createRow(parameter: any) {\r\n const petIdRow = document.createElement('div');\r\n petIdRow.setAttribute('data-layer', 'keyValue');\r\n petIdRow.className = 'Keyvalue codigma-apiunit-keyvalue';\r\n const petIdLabel = document.createElement('div');\r\n petIdLabel.setAttribute('data-layer', parameter[\"name\"]);\r\n petIdLabel.className = parameter[\"name\"] + ' codigma-apiunit-send';\r\n petIdLabel.textContent = parameter[\"name\"] + ':';\r\n const petIdValue = createInputElement();\r\n petIdValue.setAttribute('data-layer', 'valueText');\r\n petIdValue.className = 'Valuetext codigma-apiunit-valuetext';\r\n petIdValue.value = parameter[\"value\"] || \"\";\r\n\r\n // 可选:添加输入事件监听(根据需求)\r\n petIdValue.addEventListener('input', (e: any) => {\r\n console.log('当前值:', e.target.value);\r\n // 这里可以添加保存逻辑(如更新状态/发送请求\r\n parameter[\"value\"] = e.target.value\r\n });\r\n petIdRow.append(petIdLabel, petIdValue);\r\n return petIdRow;\r\n}\r\n\r\nfunction createInputElement() {\r\n const inputText = document.createElement('input');\r\n inputText.setAttribute('type', 'text');\r\n inputText.setAttribute('name', 'text-input');\r\n inputText.setAttribute('label', 'text-input');\r\n inputText.setAttribute('autocomplete', 'off');\r\n return inputText;\r\n}\r\n\r\nfunction createSelectRow(auths: any, authValues: any) {\r\n // 创建外层容器div\r\n const container = document.createElement('div');\r\n container.setAttribute('data-layer', 'keyValue');\r\n container.className = 'Keyvalue codigma-apiunit-keyvalue';\r\n\r\n // 创建type显示div\r\n const typeLabel = document.createElement('div');\r\n typeLabel.setAttribute('data-layer', \"type\");\r\n typeLabel.className = 'type codigma-apiunit-send';\r\n typeLabel.textContent = 'Type:';\r\n\r\n // 创建select元素\r\n const selectElement: any = document.createElement('select');\r\n selectElement.name = 'text-select';\r\n selectElement.label = 'text-select';\r\n selectElement.setAttribute('data-layer', 'valueText');\r\n\r\n // 示例选项(可根据实际需求添加\r\n auths.forEach((auth: any) => {\r\n const option1 = document.createElement('option');\r\n option1.value = auth[\"type\"];\r\n option1.textContent = auth[\"type\"];\r\n selectElement.appendChild(option1);\r\n })\r\n\r\n // 添加选择事件监听\r\n selectElement.addEventListener('change', function (event: any) {\r\n //切换前先移除掉原来的元素\r\n authValues && Array.from(authValues.children).slice(1).forEach((el: any) => el.remove());\r\n const auth = auths[event.target.selectedIndex];\r\n let parameters = auth.parameters || [];\r\n const authRows = parameters.map((parameter: any) => createRow(parameter));\r\n authValues.append(...authRows);\r\n });\r\n // 组装DOM结构\r\n container.appendChild(typeLabel);\r\n container.appendChild(selectElement);\r\n return container;\r\n}\r\n\r\nfunction isPathOrQueryParam(param: any) {\r\n return param.in === 'path' || param.in === 'query';\r\n}\r\n\r\nfunction isHeaderParam(param: any) {\r\n return param.in === 'header';\r\n}\r\n\r\n/**\r\n * \r\n * \r\n * \r\n * const apiOperator = {\r\n method: method.toUpperCase(),\r\n url: path,\r\n rawApiInfo: null,\r\n requestBody: null\r\n }\r\n\r\n * @param {*} apiOperator\r\n * @param {*} apiInfo \r\n */\r\n\r\nfunction sendRequest(apiOperator: any, responseSectionRef: any) {\r\n // 防御性检查:确保传入了 responseSectionRef,避免后续调用 querySelector 时抛出错误\r\n if (!responseSectionRef) {\r\n console.error('sendRequest: missing responseSectionRef. Aborting request to avoid runtime errors.');\r\n return;\r\n }\r\n let reuqestUrl = getRequestUrl(apiOperator);\r\n const result = checkIfParameter(apiOperator);\r\n\r\n let header = result.hasRequestBody ? 'application/json' :\r\n (result.hasRequestFormData ? 'application/x-www-form-urlencoded' : 'application/json');\r\n let headers: any = {\r\n 'Content-Type': header\r\n }\r\n\r\n //TODO\r\n if (apiOperator.custom) {\r\n for (let index = 0; index < apiOperator.customHeaderparameters.length; index++) {\r\n const paras = apiOperator.customHeaderparameters[index];\r\n if (paras.name != '' && paras.value != '' && paras.name != null && paras.value != null) {\r\n headers[paras.name] = paras.value\r\n }\r\n }\r\n }\r\n\r\n let body = result.hasRequestBody ? apiOperator.requestBody :\r\n (result.hasRequestFormData ? getRequestFormData(apiOperator.rawApiInfo) : null);\r\n\r\n //TODO\r\n if (apiOperator.custom) {\r\n if (apiOperator.method.toUpperCase() == \"POST\" || apiOperator.method.toUpperCase() == \"PUT\") {\r\n body = apiOperator.requestBody;\r\n }\r\n }\r\n\r\n apiOperator.ifSendingRequest = true;\r\n const startTime = Date.now(); // 记录开始时间\r\n\r\n apiOperator.controller = new AbortController();\r\n const signal = apiOperator.controller.signal;\r\n\r\n //正在发送请求时创建遮罩层\r\n const overlayLayerContainer = createRequestOverlayLayer(apiOperator, responseSectionRef);\r\n\r\n // 使用 fetch 发送请求,并传递 signal \r\n fetch(reuqestUrl, {\r\n method: apiOperator.method.toUpperCase(),\r\n headers: headers,\r\n body: body != null ? JSON.stringify(body) : null,\r\n signal: signal\r\n })\r\n .then(response => {\r\n if (!response.ok) {\r\n apiOperator.response = {\r\n status: response.status,\r\n statusText: response.statusText\r\n }\r\n\r\n const endTime = Date.now(); // 即使在错误的情况下也记录结束时间 \r\n apiOperator.requestDuration = formatDuration(endTime - startTime);\r\n apiOperator.ifSendingRequest = false;\r\n // apiOperator.responseJsoneditor.value = \"\";\r\n throw new Error('Network response was not ok.');\r\n }\r\n const endTime = Date.now(); // 记录结束时间 \r\n apiOperator.requestDuration = formatDuration(endTime - startTime); // 计算耗时\r\n\r\n const responsebodyElement = responseSectionRef.querySelector('[data-layer=\"responsebody\"]');\r\n responsebodyElement.removeChild(overlayLayerContainer);\r\n\r\n apiOperator.ifSendingRequest = false;\r\n apiOperator.response = {\r\n status: response.status,\r\n statusText: response.statusText\r\n }\r\n\r\n // 在responseSectionRef元素范围内查找TimeStatus元素\r\n const timeStatusElement = responseSectionRef.querySelector('[data-layer=\"TimeStatus\"]');\r\n if (timeStatusElement) {\r\n updateTimeStatus(timeStatusElement, apiOperator);\r\n } else {\r\n console.log(\"在reqresponse范围内未找到TimeStatus元素\");\r\n }\r\n\r\n let responseClone = response.clone();\r\n return response.json() // 解析为json \r\n .catch(error => {\r\n // 如果解析 JSON 失败,则回退到文本解析\r\n return responseClone.text();\r\n });\r\n })\r\n .then(data => {\r\n apiOperator.gotResponse = true;\r\n const responsebodyElement = responseSectionRef.querySelector('[data-layer=\"responsebody\"]');\r\n // 此时 data 可能是 JSON 对象,也可能是文本字符串 \r\n if (typeof data === 'object') {\r\n // 假设 data 是 JSON 对象,你可以在这里处理它 \r\n console.log('Received JSON:', data);\r\n responsebodyElement.textContent = JSON.stringify(data, null, 4)\r\n } else {\r\n // 假设 data 是文本字符串,你可以在这里处理它 \r\n console.log('Received text:', data);\r\n responsebodyElement.textContent = data;\r\n }\r\n })\r\n .catch(error => {\r\n // 错误处理 \r\n console.error('There has been a problem with your fetch operation:', error);\r\n });\r\n}\r\n\r\nfunction updateTimeStatus(timeStatus: any, apiOperator: any) {\r\n timeStatus.textContent\r\n = `Status: ${apiOperator.response.status || \"\"} ${apiOperator.response.statusText || \"\"} Time: ${apiOperator.requestDuration || \"\"}`;\r\n}\r\n\r\nfunction createRequestOverlayLayer(apiOperator: any, responseSectionRef: any) {\r\n // 创建主容器 \r\n const container = document.createElement('div');\r\n Object.assign(container.style, {\r\n position: 'absolute',\r\n top: 0,\r\n width: '100%',\r\n height: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n backgroundColor: 'rgb(255, 255, 255)',\r\n opacity: 0.8\r\n });\r\n\r\n // 创建内容容器 \r\n const contentDiv = document.createElement('div');\r\n Object.assign(contentDiv.style, {\r\n display: 'flex',\r\n gap: '5px',\r\n alignItems: 'center',\r\n });\r\n\r\n // 创建文本div \r\n const textDiv = document.createElement('div');\r\n textDiv.textContent = 'Sending request...';\r\n\r\n // 创建取消按钮 \r\n const cancelBtn = document.createElement('button');\r\n cancelBtn.className = 'request-cancel-btn';\r\n Object.assign(cancelBtn.style, {\r\n border: '0px'\r\n });\r\n cancelBtn.textContent = 'Cancel';\r\n\r\n const responsebodyElement = responseSectionRef.querySelector('[data-layer=\"responsebody\"]');\r\n // 组装DOM结构 \r\n contentDiv.appendChild(textDiv);\r\n contentDiv.appendChild(cancelBtn);\r\n container.appendChild(contentDiv);\r\n responsebodyElement.appendChild(container);\r\n\r\n // 添加点击事件\r\n cancelBtn.addEventListener('click', (e) => {\r\n // 如果你想取消请求,调用 controller 的 abort 方法\r\n if (apiOperator.controller) {\r\n apiOperator.controller.abort();\r\n apiOperator.ifSendingRequest = false;\r\n container.style.display = 'none';\r\n responsebodyElement.removeChild(container);\r\n }\r\n });\r\n\r\n return container\r\n}\r\n\r\nfunction checkIfParameter(apiOperator: any) {\r\n let hasRequestBody = false;\r\n let hasRequestFormData = false;\r\n const parameters = apiOperator.rawApiInfo.parameters;\r\n if (parameters) {\r\n for (let index = 0; index < parameters.length; index++) {\r\n const parameter = parameters[index];\r\n if (parameter.in == \"query\" || parameter.in == \"path\") {\r\n } else if (parameter.in == \"body\") {\r\n hasRequestBody = true;\r\n parameter.name = parameter.name.charAt(0).toUpperCase() + parameter.name.slice(1);\r\n } else if (parameter.in == \"formData\") {\r\n hasRequestFormData = true;\r\n }\r\n }\r\n }\r\n\r\n //support openapi 3.0\r\n const requestBody = apiOperator.rawApiInfo.requestBody;\r\n if (requestBody) {\r\n hasRequestBody = true;\r\n }\r\n // 返回包含两个状态的对象\r\n return { hasRequestBody, hasRequestFormData };\r\n}\r\n\r\nfunction formatDuration(milliseconds: number) {\r\n let totalSeconds: string | number = Math.floor(milliseconds / 1000);\r\n let seconds: string | number = totalSeconds % 60;\r\n let minutes: string | number = Math.floor(totalSeconds / 60) % 60;\r\n let hours: string | number = Math.floor(totalSeconds / (60 * 60));\r\n\r\n // 毫秒部分 \r\n let millisecondsPart: string | number = Math.floor(milliseconds % 1000);\r\n // 毫秒不足三位时前面补0 \r\n millisecondsPart = millisecondsPart.toString().padStart(3, '0');\r\n\r\n // 时分秒不足两位时前面补0 \r\n hours = hours.toString().padStart(2, '0');\r\n minutes = minutes.toString().padStart(2, '0');\r\n seconds = seconds.toString().padStart(2, '0');\r\n\r\n // 返回格式化的字符串 \r\n return `${hours}h${minutes}m${seconds}s${millisecondsPart}ms`;\r\n}\r\n\r\nfunction getRequestUrl(apiOperator: any) {\r\n let reuqestUrl = apiOperator.url;\r\n\r\n const requestParameters = apiOperator.rawApiInfo.parameters || [];\r\n if (requestParameters == null) {\r\n return reuqestUrl;\r\n }\r\n\r\n for (const element of requestParameters) {\r\n if (element.in == \"path\") {\r\n reuqestUrl = reuqestUrl.replace(\"{\" + element.name + \"}\", element.value);\r\n }\r\n }\r\n\r\n let queryParams = getQueryParams(apiOperator, requestParameters);\r\n reuqestUrl = queryParams.length > 0 ? (reuqestUrl + \"?\" + queryParams.join(\"&\")) : reuqestUrl;\r\n\r\n return reuqestUrl;\r\n}\r\n\r\nfunction getQueryParams(apiOperator: any, requestParameters: any) {\r\n let queryParams = [];\r\n for (const element of requestParameters) {\r\n if (element.in == \"query\") {\r\n if (element.type == \"array\" || (element.schema != null && element.schema.type == 'array')) {\r\n if (element.value != null) {\r\n for (let index = 0; index < element.value.length; index++) {\r\n queryParams.push(element.name + \"=\" + element.value[index].value);\r\n }\r\n }\r\n } else {\r\n queryParams.push(element.name + \"=\" + element.value);\r\n }\r\n }\r\n }\r\n\r\n if (apiOperator.custom) {\r\n for (let index = 0; index < apiOperator.customQueryparameters.length; index++) {\r\n const paras = apiOperator.customQueryparameters[index];\r\n if (paras.name != '' && paras.value != '' && paras.name != null && paras.value != null) {\r\n queryParams.push(paras.name + \"=\" + paras.value)\r\n }\r\n }\r\n }\r\n\r\n return queryParams;\r\n}\r\n\r\nfunction getRequestFormData(rawApiInfo: any) {\r\n let formData = '';\r\n const requestParameters = rawApiInfo.parameters;\r\n if (requestParameters == null) {\r\n return \"\";\r\n }\r\n\r\n let first = 0;\r\n for (const element of requestParameters) {\r\n if (element.in == \"formData\") {\r\n if (first == 0) {\r\n formData = element.name + \"=\" + element.value;\r\n } else {\r\n formData = formData + \"&\" + element.name + \"=\" + element.value;\r\n }\r\n first++;\r\n }\r\n }\r\n return formData;\r\n}\r\n\r\n\r\nfunction createSvg() {\r\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\r\n svg.setAttribute('width', '21');\r\n svg.setAttribute('height', '22');\r\n svg.setAttribute('viewBox', '0 0 21 22');\r\n svg.setAttribute('fill', 'none');\r\n svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\r\n\r\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\r\n path.setAttribute('d', 'M5.5 8.5L10.5 13.5L15.5 8.5');\r\n path.setAttribute('stroke', 'var(--Labels---Vibrant---Controls-Primary--, #404040)');\r\n path.setAttribute('stroke-width', '2');\r\n path.setAttribute('stroke-linecap', 'round');\r\n path.setAttribute('stroke-linejoin', 'round');\r\n\r\n svg.appendChild(path);\r\n return svg;\r\n}\r\n\r\nfunction parseParaModel(parameterObj: any, dataDef: any) {\r\n let bodyModel;\r\n if (parameterObj && parameterObj.schema) {\r\n if (parameterObj.schema['$ref']) { // 对象类型\r\n bodyModel = parseModel(parameterObj.schema['$ref'], dataDef);\r\n } else if (parameterObj.schema['type'] == 'array') { // 数组类型\r\n const itemObj = parameterObj.schema['items'];\r\n if (itemObj['$ref']) {\r\n bodyModel = parseModel(itemObj['$ref'], dataDef);\r\n } else if (itemObj['type']) {\r\n bodyModel = parseElement(itemObj);\r\n }\r\n bodyModel = [bodyModel];\r\n }\r\n }\r\n\r\n return bodyModel;\r\n}\r\n\r\nfunction parseModel(modelDef: any, apiDef: any) {\r\n const model: any = {};\r\n const bodyName = modelDef.substring(modelDef.lastIndexOf('/') + 1);\r\n const def = apiDef[bodyName];\r\n const props = def['properties'];\r\n if (props) {\r\n for (const key in props) {\r\n if (Object.prototype.hasOwnProperty.call(props, key)) {\r\n const element = props[key];\r\n if (element.hasOwnProperty('items') && element['type'] == 'array') {\r\n if (element[\"items\"]['$ref']) {\r\n model[key] = [parseModel(element[\"items\"]['$ref'], apiDef)]\r\n } else if (element[\"items\"]['type']) {\r\n model[key] = [parseElement(element[\"items\"])];\r\n }\r\n } else if (element.hasOwnProperty('$ref')) {\r\n model[key] = parseModel(element['$ref'], apiDef)\r\n } else {\r\n if (element['type']) {\r\n model[key] = parseElement(element);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return model;\r\n}\r\n\r\nfunction parseElement(element: any) {\r\n let elementValue;\r\n if (element['type'].includes('integer')) {\r\n elementValue = 0;\r\n } else if (element['type'].includes('boolean')) {\r\n elementValue = false;\r\n } else if (element['type'].includes('string')) {\r\n if (element['enum']) {\r\n elementValue = element['enum'][0];\r\n } else {\r\n elementValue = '';\r\n }\r\n }\r\n\r\n if (element['example']) {\r\n elementValue = element['example'];\r\n }\r\n\r\n return elementValue;\r\n}\r\n\r\nconst HTTP_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const;\r\ntype HttpMethod = typeof HTTP_METHODS[number]; // 等价于你的 HttpMethods 的值类型\r\n\r\nfunction isHttpMethod(method: string): method is HttpMethod {\r\n return (HTTP_METHODS as readonly string[]).includes(method);\r\n}\r\n\r\n// 解析OpenAPI规范并构建API操作列表\r\nfunction parseOpenAPI(openapiSpec: OpenAPIV3CustomDoc) {\r\n const apiOperatorList: any = [];\r\n\r\n const pathEntries: [string, OpenAPIV3.PathItemObject | undefined][] = [];\r\n for (const path in openapiSpec.paths) {\r\n if (Object.prototype.hasOwnProperty.call(openapiSpec.paths, path)) {\r\n pathEntries.push([path, openapiSpec.paths[path]]);\r\n }\r\n }\r\n // 遍历所有路径\r\n pathEntries.forEach(([path, pathItem]) => {\r\n const pathItemEntries: [string, OpenAPIV3.OperationObject][] = [];\r\n for (const method in pathItem) {\r\n if (Object.prototype.hasOwnProperty.call(pathItem, method)) {\r\n // 关键:将 method 断言为合法的 key\r\n if (isHttpMethod(method)) {\r\n const operation = pathItem[method as keyof typeof pathItem];\r\n if (operation != null && typeof operation === 'object' && !('$ref' in operation)) {\r\n // 此时可以安全认为是 OperationObject(因为 method key 不会对应 $ref/parameters)\r\n pathItemEntries.push([method, operation as OpenAPIV3.OperationObject]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 遍历路径下的所有方法\r\n pathItemEntries.forEach(([method, operation]) => {\r\n // 初始化当前API操作对象\r\n const apiOperator: any = {\r\n method: method.toUpperCase(),\r\n url: path,\r\n rawApiInfo: null,\r\n requestBody: null,\r\n response: {},\r\n auths: [\r\n {\r\n type: \"No Auth\"\r\n },\r\n {\r\n type: \"Basic Auth\",\r\n parameters: [\r\n {\r\n name: \"userName\",\r\n value: \"\"\r\n },\r\n {\r\n name: \"password\",\r\n value: \"\"\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n\r\n if (operation) {\r\n // requestBody\r\n // support openapi 2.0\r\n if (operation.parameters) {\r\n const parameter = operation.parameters.filter((val: any) => val.in == 'body');\r\n if (parameter && parameter.length > 0) {\r\n // let requestBody = parseParaModel(parameter[0], data['definitions']);\r\n // apiOperator.requestBody = requestBody;\r\n }\r\n }\r\n\r\n //support openapi 3.0\r\n if (operation.requestBody) {\r\n const requestBodyObject = operation.requestBody as OpenAPIV3.RequestBodyObject //目前只支持对象类型 TODO 引用类型待支持\r\n const content = requestBodyObject.content;\r\n for (const key in content) {\r\n if (Object.prototype.hasOwnProperty.call(content, key)) {\r\n const element: OpenAPIV3.MediaTypeObject = content[key];\r\n if (element) {\r\n let requestBody = parseParaModel(element, openapiSpec[\"components\"]![\"schemas\"]);\r\n apiOperator.requestBody = requestBody;\r\n }\r\n }\r\n }\r\n }\r\n\r\n apiOperator.rawApiInfo = operation;\r\n // 添加到结果列表\r\n apiOperatorList.push(apiOperator);\r\n }\r\n\r\n });\r\n });\r\n\r\n return apiOperatorList;\r\n}\r\n\r\nfunction countOpenAPI(openapiSpec: OpenAPIV3CustomDoc) {\r\n let apiCount = 0;\r\n const pathEntries: [string, OpenAPIV3.PathItemObject | undefined][] = [];\r\n for (const path in openapiSpec.paths) {\r\n if (Object.prototype.hasOwnProperty.call(openapiSpec.paths, path)) {\r\n pathEntries.push([path, openapiSpec.paths[path]]);\r\n }\r\n }\r\n\r\n // 遍历所有路径\r\n pathEntries.forEach(([path, pathItem]) => {\r\n const pathItemEntries: [string, OpenAPIV3.OperationObject][] = [];\r\n for (const method in pathItem) {\r\n if (Object.prototype.hasOwnProperty.call(pathItem, method)) {\r\n // 关键:将 method 断言为合法的 key\r\n if (isHttpMethod(method)) {\r\n const operation = pathItem[method as keyof typeof pathItem];\r\n if (operation != null && typeof operation === 'object' && !('$ref' in operation)) {\r\n // 此时可以安全认为是 OperationObject(因为 method key 不会对应 $ref/parameters)\r\n pathItemEntries.push([method, operation as OpenAPIV3.OperationObject]);\r\n }\r\n }\r\n }\r\n }\r\n // 遍历路径下的所有方法\r\n pathItemEntries.forEach(([method, operation]) => {\r\n apiCount = apiCount + 1;\r\n });\r\n });\r\n\r\n return apiCount;\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCO,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","names":["endTime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/inlined-styles.ts","../src/api-render-ui.ts"],"sourcesContent":["export * from \"./api-render-ui.js\";","// Auto-generated by inline-styles.mjs\nexport const GLOBAL_STYLES = `.codigma-apioperatorlist {\r\n align-items: flex-start;\r\n background: white;\r\n display: inline-flex;\r\n flex-direction: column;\r\n gap: 5px;\r\n height: 100%;\r\n justify-content: flex-start;\r\n width: 100%\r\n}\r\n.codigma-apioperator {\r\n align-items: center;\r\n align-self: stretch;\r\n display: inline-flex;\r\n gap: 10px;\r\n /* border-radius: 8px; */\r\n height: 32px;\r\n justify-content: flex-start\r\n}\r\n.codigma-apioperator:nth-child(even) {\r\n background-color: rgb(235, 239, 244);\r\n}\r\n.codigma-apioperator:nth-child(odd) {\r\n background-color: rgb(250, 246, 246);\r\n}\r\n\r\n.codigma-apioperator:hover {\r\n cursor: pointer;\r\n}\r\n.codigma-apioperator:active {\r\n background: rgb(206, 216, 231);\r\n}\r\n.codigma-method {\r\n align-items: center;\r\n display: flex;\r\n gap: 5px;\r\n justify-content: center;\r\n width: 64px\r\n}\r\n.codigma-methodtype {\r\n align-items: center;\r\n display: flex;\r\n gap: 10px;\r\n justify-content: center\r\n}\r\n.codigma-get {\r\n color: var(--Labels---Vibrant---Controls-Primary-√, #404040);\r\n word-wrap: break-word\r\n}\r\n.codigma-requrl {\r\n color: black;\r\n flex: 1 1 0;\r\n word-wrap: break-word\r\n}\r\n/**********************apiunit css style*************************/\r\n.codigma-apiunit {\r\n align-items: flex-start;\r\n background: white;\r\n box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);\r\n display: inline-flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n height: 100%;\r\n justify-content: flex-start;\r\n width: 100%\r\n}\r\n.codigma-apiunit-apioperator {\r\n align-items: center;\r\n align-self: stretch;\r\n border-bottom: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n border-top: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n display: inline-flex;\r\n gap: 10px;\r\n height: 48px;\r\n justify-content: flex-start\r\n}\r\n.codigma-apiunit-method {\r\n align-items: center;\r\n display: flex;\r\n gap: 5px;\r\n height: 48px;\r\n justify-content: center;\r\n width: 100px\r\n}\r\n.codigma-apiunit-methodtype {\r\n align-items: center;\r\n display: flex;\r\n gap: 10px;\r\n justify-content: center\r\n}\r\n.codigma-apiunit-post {\r\n color: var(--Labels---Vibrant---Controls-Primary-√, #404040);\r\n word-wrap: break-word\r\n}\r\n.codigma-apiunit-requrl {\r\n color: black;\r\n flex: 1 1 0;\r\n word-wrap: break-word;\r\n border-left: 0;\r\n border-right: 0;\r\n border-top: 0;\r\n border-bottom: 1px solid black;\r\n}\r\n.codigma-apiunit-send-button {\r\n align-items: center;\r\n display: flex;\r\n gap: 10px;\r\n height: 32px;\r\n justify-content: center;\r\n width: 88px\r\n}\r\n.codigma-apiunit-send {\r\n color: black;\r\n word-wrap: break-word\r\n}\r\n.codigma-apiunit-send-button:hover {\r\n cursor: pointer;\r\n}\r\n.codigma-apiunit-send-button:active {\r\n background-color: gray;\r\n}\r\n\r\n.codigma-apiunit-reqcontent {\r\n align-items: flex-start;\r\n align-self: stretch;\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1 1 0;\r\n gap: 5px;\r\n justify-content: flex-start;\r\n padding-left: 5px;\r\n}\r\n.codigma-apiunit-paramters-section {\r\n align-items: center;\r\n align-self: stretch;\r\n display: inline-flex;\r\n flex: 1 1 0;\r\n justify-content: flex-start\r\n}\r\n.codigma-apiunit-parameters-cnr {\r\n align-items: center;\r\n background: white;\r\n display: flex;\r\n height: 42px;\r\n justify-content: space-between;\r\n width: 122px\r\n}\r\n.codigma-apiunit-parakeyvalues {\r\n align-items: flex-start;\r\n align-self: stretch;\r\n background: white;\r\n display: inline-flex;\r\n flex-direction: column;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start;\r\n overflow: hidden;\r\n padding: 10px\r\n}\r\n.codigma-apiunit-keyvalue {\r\n align-items: center;\r\n display: inline-flex;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start\r\n}\r\n.codigma-apiunit-valuetext {\r\n align-self: stretch;\r\n background: white;\r\n border-left: 0;\r\n border-right: 0;\r\n border-top: 0;\r\n border-bottom: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n padding: 10px;\r\n width: 161px\r\n}\r\n/* .codigma-apiunit-keyvalue {\r\n align-items: center;\r\n display: inline-flex;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start;\r\n width: 211px\r\n} */\r\n.codigma-apiunit-request-body-section {\r\n align-items: center;\r\n align-self: stretch;\r\n display: inline-flex;\r\n height: 114px;\r\n justify-content: flex-start;\r\n padding-right: 5px\r\n}\r\n.codigma-apiunit-parakeyvalues {\r\n align-items: flex-start;\r\n align-self: stretch;\r\n background: white;\r\n display: flex;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start;\r\n outline-offset: -1px;\r\n outline: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n overflow: hidden;\r\n padding: 10px\r\n}\r\n.codigma-apiunit-reqresponse {\r\n align-items: flex-start;\r\n align-self: stretch;\r\n background: white;\r\n border-top: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start;\r\n padding-left: 5px;\r\n padding-right: 5px\r\n}\r\n.codigma-apiunit-responsedesc {\r\n align-items: center;\r\n align-self: stretch;\r\n display: inline-flex;\r\n justify-content: space-between;\r\n padding-right: 32px\r\n}\r\n.codigma-apiunit-responsetitle {\r\n align-items: center;\r\n border-bottom: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n display: flex;\r\n height: 42px;\r\n justify-content: space-between;\r\n width: 122px\r\n}\r\n.codigma-apiunit-response-cnr {\r\n align-items: center;\r\n align-self: stretch;\r\n background: white;\r\n display: flex;\r\n justify-content: space-between;\r\n padding-top: 2px;\r\n width: 122px\r\n}\r\n.codigma-apiunit-responsebody {\r\n position: relative;\r\n align-self: stretch;\r\n flex: 1 1 0;\r\n min-height: 5rem;\r\n /* padding: 2px */\r\n}`;\n","import { GLOBAL_STYLES } from './inlined-styles';\r\nimport { OpenAPIV3 } from 'openapi-types';\r\n\r\ntype OpenAPIV3CustomDoc = OpenAPIV3.Document & { swagger: string }\r\n\r\nexport class ApiRenderer {\r\n options: any;\r\n container: any;\r\n constructor(options: any) {\r\n this.options = Object.assign({\r\n mountPoint: document?.body, // 默认挂载到body\r\n className: 'Apioperatorlist codigma-apioperatorlist',\r\n layerName: 'apioperatorlist'\r\n }, options);\r\n\r\n this.container = null;\r\n }\r\n\r\n render(apiSpec: OpenAPIV3CustomDoc, renderUnit: boolean = false) {\r\n\r\n const appendInlineStyle = (text: string) => {\r\n // 动态创建 <style> 标签并插入全局样式\r\n const styleEl = document.createElement('style');\r\n styleEl.textContent = text;\r\n document.head.appendChild(styleEl);\r\n };\r\n // 使用\r\n appendInlineStyle(GLOBAL_STYLES);\r\n\r\n // 存储原始元素与对应新元素的映射\r\n const elementMap = new Map();\r\n\r\n // 获取实际挂载点\r\n const mountElement = typeof this.options.mountPoint === 'string' ?\r\n document.querySelector(this.options.mountPoint) :\r\n this.options.mountPoint;\r\n\r\n if (!mountElement) {\r\n throw new Error('Invalid mount point specified');\r\n }\r\n\r\n if ((apiSpec[\"openapi\"] && apiSpec[\"openapi\"].startsWith(\"3.\"))\r\n || (apiSpec[\"swagger\"] && apiSpec[\"swagger\"].startsWith(\"2.\"))) {\r\n const countApi = countOpenAPI(apiSpec);\r\n const apiOperatorList = parseOpenAPI(apiSpec);\r\n // console.log('解析结果:', apiOperatorList);\r\n if (countApi == 1 && renderUnit) {\r\n // If the count of api <=1, create the api unit only. \r\n // 创建根容器\r\n this.container = createApiUnit(apiOperatorList[0]);\r\n } else {\r\n // 创建主容器\r\n this.container = document.createElement('div');\r\n this.container.setAttribute('data-layer', this.options.layerName);\r\n this.container.className = this.options.className;\r\n\r\n // 生成内容\r\n apiOperatorList.forEach((apiOperator: any) => {\r\n const reqOperator = document.createElement('div');\r\n reqOperator.setAttribute('data-layer', 'apioperator');\r\n reqOperator.className = 'Apioperator codigma-apioperator';\r\n\r\n // 创建method部分\r\n const methodContainer = document.createElement('div');\r\n methodContainer.setAttribute('data-layer', 'method');\r\n methodContainer.className = 'Method codigma-method';\r\n\r\n const methodType = document.createElement('div');\r\n methodType.setAttribute('data-layer', 'methodtype');\r\n methodType.className = 'Methodtype codigma-methodtype';\r\n\r\n const methodValue = document.createElement('div');\r\n methodValue.setAttribute('data-layer', apiOperator.method.toLowerCase());\r\n methodValue.className = `${apiOperator.method} codigma-${apiOperator.method.toLowerCase()}`;\r\n methodValue.textContent = apiOperator.method;\r\n\r\n methodType.appendChild(methodValue);\r\n methodContainer.appendChild(methodType);\r\n reqOperator.appendChild(methodContainer);\r\n\r\n // 创建URL部分\r\n const urlElement = document.createElement('div');\r\n urlElement.setAttribute('data-layer', 'requrl');\r\n urlElement.className = 'Requrl codigma-requrl';\r\n urlElement.textContent = apiOperator.url;\r\n reqOperator.appendChild(urlElement);\r\n\r\n this.container.appendChild(reqOperator);\r\n\r\n // 添加点击事件\r\n reqOperator.addEventListener('click', renderApiUnit(apiOperator, this.container, elementMap));\r\n });\r\n }\r\n } else {\r\n // 初始化当前API操作对象\r\n const apiOperator = {\r\n method: \"get\",\r\n url: \"/full/info\",\r\n rawApiInfo: null,\r\n requestBody: null,\r\n response: {},\r\n auths: [\r\n {\r\n type: \"No Auth\"\r\n },\r\n {\r\n type: \"Basic Auth\",\r\n parameters: [\r\n {\r\n name: \"userName\",\r\n value: \"\"\r\n },\r\n {\r\n name: \"password\",\r\n value: \"\"\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n // 创建根容器\r\n this.container = createApiUnit(apiSpec);\r\n }\r\n\r\n // 清空挂载点并插入新内容\r\n mountElement.innerHTML = '';\r\n mountElement.appendChild(this.container);\r\n\r\n\r\n }\r\n}\r\n\r\n\r\n\r\nfunction renderApiUnit(apiOperator: any, containerRef: any, elementMap: any) {\r\n return function (evt: any) {\r\n console.log('点击的API操作:');\r\n console.log('方法:', apiOperator.method);\r\n console.log('URL:', apiOperator.url);\r\n console.log('------------------------');\r\n\r\n const currentTarget = evt.currentTarget;\r\n // 检查是否已存在对应的新元素\r\n if (elementMap.has(currentTarget)) {\r\n const newElement = elementMap.get(currentTarget);\r\n newElement.remove(); // 移除新元素\r\n elementMap.delete(currentTarget); // 清除映射\r\n return;\r\n }\r\n\r\n // 创建根容器\r\n const apiContainer = createApiUnit(apiOperator);\r\n\r\n // 添加到文档\r\n // 插入到当前元素后面\r\n if (currentTarget.nextSibling) {\r\n containerRef.insertBefore(apiContainer, currentTarget.nextSibling);\r\n } else {\r\n containerRef.appendChild(apiContainer);\r\n }\r\n\r\n // 存储映射关系\r\n elementMap.set(currentTarget, apiContainer);\r\n }\r\n}\r\n\r\nfunction createApiUnit(apiOperator: any) {\r\n const apiContainer = document.createElement('div');\r\n apiContainer.setAttribute('data-layer', 'apiunit');\r\n apiContainer.className = 'Requnit codigma-apiunit';\r\n // 预先创建响应部分并挂载到 apiOperator,保证后面创建的 send 按钮能访问到\r\n const responseSection = createSectionResponse(apiOperator);\r\n apiOperator._responseSectionRef = responseSection;\r\n\r\n // 请求操作区\r\n const reqOperator = createReqOperator(apiOperator);\r\n apiContainer.appendChild(reqOperator);\r\n // 请求内容区\r\n const reqContent = document.createElement('div');\r\n reqContent.setAttribute('data-layer', 'reqcontent');\r\n reqContent.className = 'Reqcontent codigma-apiunit-reqcontent';\r\n // 参数部分\r\n const paramSection = createParamSection(apiOperator);\r\n // 头部部分\r\n const headerSection = createSectionHeader(apiOperator);\r\n // 授权部分\r\n const authSection = createSectionAuth(apiOperator);\r\n // 请求体部分\r\n const bodySection = createSectionRequestBody(apiOperator.requestBody);\r\n\r\n reqContent.append(paramSection, headerSection, authSection, bodySection);\r\n apiContainer.appendChild(reqContent);\r\n // 响应部分(已经预创建,直接附加)\r\n apiContainer.appendChild(responseSection);\r\n return apiContainer;\r\n}\r\n\r\nfunction createReqOperator(apiOperator: any) {\r\n const reqOperator = document.createElement('div');\r\n reqOperator.setAttribute('data-layer', 'apioperator');\r\n reqOperator.className = 'Reqoperator codigma-apiunit-apioperator';\r\n // 方法类型\r\n const methodType = document.createElement('div');\r\n methodType.setAttribute('data-layer', 'method');\r\n methodType.className = 'Method codigma-apiunit-method';\r\n const methodTypeInner = document.createElement('div');\r\n methodTypeInner.setAttribute('data-layer', 'methodtype');\r\n methodTypeInner.className = 'Methodtype codigma-apiunit-methodtype';\r\n methodTypeInner.textContent = apiOperator.method.toUpperCase();\r\n methodType.appendChild(methodTypeInner);\r\n // 方法选项图标 - 使用内联SVG\r\n const methodOpt = document.createElement('div');\r\n methodOpt.setAttribute('data-svg-wrapper', '');\r\n methodOpt.setAttribute('data-layer', 'methodopt');\r\n methodOpt.className = 'Methodopt';\r\n\r\n // 创建内联SVG\r\n const svg = createSvg();\r\n methodOpt.appendChild(svg);\r\n methodType.appendChild(methodOpt);\r\n reqOperator.appendChild(methodType);\r\n // 请求URL\r\n const reqUrl = createInputElement();\r\n reqUrl.setAttribute('data-layer', 'requrl');\r\n reqUrl.className = 'Requrl codigma-apiunit-requrl';\r\n reqUrl.value = apiOperator.url; // 绑定初始值\r\n // 可选:添加输入事件监听(根据需求)\r\n reqUrl.addEventListener('input', (e: any) => {\r\n console.log('当前值:', e.target.value);\r\n // 这里可以添加保存逻辑(如更新状态/发送请求\r\n apiOperator.url = e.target.value\r\n });\r\n reqOperator.appendChild(reqUrl);\r\n // 发送按钮\r\n const sendButton = document.createElement('div');\r\n sendButton.setAttribute('data-layer', 'send-button');\r\n sendButton.className = 'SendButton codigma-apiunit-send-button';\r\n const sendText = document.createElement('div');\r\n sendText.setAttribute('data-layer', 'Send');\r\n sendText.className = 'Send codigma-apiunit-send';\r\n sendText.textContent = 'Send';\r\n sendButton.appendChild(sendText);\r\n\r\n sendButton.addEventListener('click', (e: any) => {\r\n console.log('当前值:', e.target.value);\r\n // 这里可以添加保存逻辑(如更新状态/发送请求\r\n // responseSectionRef 在渲染时会被挂载到 apiOperator._responseSectionRef 上\r\n const respRef = apiOperator._responseSectionRef || null;\r\n sendRequest(apiOperator, respRef);\r\n });\r\n\r\n reqOperator.appendChild(sendButton);\r\n return reqOperator;\r\n}\r\n\r\nfunction createParamSection(apiOperator: any) {\r\n const paramSection = document.createElement('div');\r\n paramSection.setAttribute('data-layer', 'paramters-section');\r\n paramSection.className = 'codigma-apiunit-paramters-section';\r\n // 参数容器头\r\n const paramCnr = document.createElement('div');\r\n paramCnr.setAttribute('data-layer', 'parameters-cnr');\r\n paramCnr.className = 'codigma-apiunit-parameters-cnr';\r\n const paramText = document.createElement('div');\r\n paramText.setAttribute('data-layer', 'parameters');\r\n paramText.className = 'codigma-apiunit-send';\r\n paramText.textContent = 'Parameters';\r\n paramCnr.appendChild(paramText);\r\n paramSection.appendChild(paramCnr);\r\n // 参数键值对\r\n const paramValues = document.createElement('div');\r\n paramValues.setAttribute('data-layer', 'paraKeyValues');\r\n paramValues.className = 'Parakeyvalues codigma-apiunit-parakeyvalues';\r\n let parameters = apiOperator.rawApiInfo.parameters || [];\r\n const parameterRows = parameters.filter((parameter: any) => isPathOrQueryParam(parameter))\r\n .map((parameter: any) => createRow(parameter));\r\n paramValues.append(...parameterRows);\r\n paramSection.append(paramCnr, paramValues);\r\n return paramSection;\r\n}\r\n\r\nfunction createSectionHeader(apiOperator: any) {\r\n const headerSection = document.createElement('div');\r\n headerSection.setAttribute('data-layer', 'headers-section');\r\n headerSection.className = 'codigma-apiunit-paramters-section';\r\n // 头部容器头\r\n const headerCnr = document.createElement('div');\r\n headerCnr.setAttribute('data-layer', 'headers-cnr');\r\n headerCnr.className = 'codigma-apiunit-parameters-cnr';\r\n const headerText = document.createElement('div');\r\n headerText.setAttribute('data-layer', 'headers');\r\n headerText.className = 'codigma-apiunit-send';\r\n headerText.textContent = 'Headers';\r\n headerCnr.appendChild(headerText);\r\n headerSection.appendChild(headerCnr);\r\n // 头部键值对\r\n const headerValues = document.createElement('div');\r\n headerValues.setAttribute('data-layer', 'paraKeyValues');\r\n headerValues.className = 'Parakeyvalues codigma-apiunit-parakeyvalues';\r\n let parameters = apiOperator.rawApiInfo.parameters || [];\r\n const headerRows = parameters.filter((parameter: any) => isHeaderParam(parameter))\r\n .map((parameter: any) => createRow(parameter));\r\n headerValues.append(...headerRows);\r\n headerSection.append(headerCnr, headerValues);\r\n return headerSection;\r\n}\r\n\r\nfunction createSectionAuth(apiOperator: any) {\r\n const authSection = document.createElement('div');\r\n authSection.setAttribute('data-layer', 'authorization-section');\r\n authSection.className = 'AuthorizationSection codigma-apiunit-paramters-section';\r\n // 授权容器头\r\n const authCnr = document.createElement('div');\r\n authCnr.setAttribute('data-layer', 'authorization-cnr');\r\n authCnr.className = 'AuthorizationCnr codigma-apiunit-parameters-cnr';\r\n const authText = document.createElement('div');\r\n authText.setAttribute('data-layer', 'authorization');\r\n authText.className = 'Authorization codigma-apiunit-send';\r\n authText.textContent = 'Authorization';\r\n authCnr.appendChild(authText);\r\n authSection.appendChild(authCnr);\r\n // 授权键值对\r\n const authValues = document.createElement('div');\r\n authValues.setAttribute('data-layer', 'paraKeyValues');\r\n authValues.className = 'Parakeyvalues codigma-apiunit-parakeyvalues';\r\n\r\n let auths = apiOperator.auths || []\r\n const authTypeRow = createSelectRow(auths, authValues)\r\n if (auths.length > 0) {\r\n let parameters = apiOperator.auths[0].parameters || [];\r\n const authRows = parameters.map((parameter: any) => createRow(parameter));\r\n authValues.append(authTypeRow, ...authRows);\r\n }\r\n\r\n authSection.append(authCnr, authValues);\r\n return authSection;\r\n}\r\n\r\nfunction createSectionRequestBody(requestBody: any) {\r\n const bodySection = document.createElement('div');\r\n bodySection.setAttribute('data-layer', 'request-body-section');\r\n bodySection.className = 'RequestBodySection codigma-apiunit-request-body-section';\r\n // 请求体容器头\r\n const bodyCnr = document.createElement('div');\r\n bodyCnr.setAttribute('data-layer', 'body-cnr');\r\n bodyCnr.className = 'BodyCnr codigma-apiunit-parameters-cnr';\r\n const bodyText = document.createElement('div');\r\n bodyText.setAttribute('data-layer', 'body');\r\n bodyText.className = 'Body codigma-apiunit-send';\r\n bodyText.textContent = 'Body';\r\n bodyCnr.appendChild(bodyText);\r\n bodySection.appendChild(bodyCnr);\r\n // 请求体内容\r\n const bodyValue = document.createElement('textarea');\r\n bodyValue.setAttribute('data-layer', 'bodyTextValue');\r\n bodyValue.className = 'Id0CategoryId0NameNamePhotourlsTagsId0NameStatusAvailable codigma-apiunit-parakeyvalues';\r\n bodyValue.value = JSON.stringify(requestBody);\r\n bodySection.appendChild(bodyValue);\r\n return bodySection;\r\n}\r\n\r\nfunction createSectionResponse(apiOperator: any) {\r\n const responseSection = document.createElement('div');\r\n responseSection.setAttribute('data-layer', 'reqresponse');\r\n responseSection.className = 'Reqresponse codigma-apiunit-reqresponse';\r\n // 响应描述\r\n const responseDesc = document.createElement('div');\r\n responseDesc.setAttribute('data-layer', 'responsedesc');\r\n responseDesc.className = 'Responsedesc codigma-apiunit-responsedesc';\r\n // 响应标题\r\n const responseTitle = document.createElement('div');\r\n responseTitle.setAttribute('data-layer', 'responsetitle');\r\n responseTitle.className = 'Responsetitle codigma-apiunit-responsetitle';\r\n const responseCnr = document.createElement('div');\r\n responseCnr.setAttribute('data-layer', 'response-cnr');\r\n responseCnr.className = 'ResponseCnr codigma-apiunit-response-cnr';\r\n const responseText = document.createElement('div');\r\n responseText.setAttribute('data-layer', 'response');\r\n responseText.className = 'Response codigma-apiunit-send';\r\n responseText.textContent = 'Response';\r\n responseCnr.appendChild(responseText);\r\n responseTitle.appendChild(responseCnr);\r\n const timeStatusElement = createTimeStatusElement(apiOperator);\r\n responseDesc.append(responseTitle, timeStatusElement);\r\n // 响应体\r\n const responseBody = document.createElement('div');\r\n responseBody.setAttribute('data-layer', 'responsebody');\r\n responseBody.className = 'Responsebody codigma-apiunit-responsebody';\r\n responseSection.append(responseDesc, responseBody);\r\n return responseSection;\r\n}\r\n\r\nfunction createTimeStatusElement(apiOperator: any) {\r\n const timeStatus = document.createElement('div');\r\n timeStatus.setAttribute('data-layer', 'TimeStatus');\r\n timeStatus.className = 'TimeStatus0 codigma-apiunit-send';\r\n updateTimeStatus(timeStatus, apiOperator);\r\n return timeStatus;\r\n}\r\n\r\nfunction createRow(parameter: any) {\r\n const petIdRow = document.createElement('div');\r\n petIdRow.setAttribute('data-layer', 'keyValue');\r\n petIdRow.className = 'Keyvalue codigma-apiunit-keyvalue';\r\n const petIdLabel = document.createElement('div');\r\n petIdLabel.setAttribute('data-layer', parameter[\"name\"]);\r\n petIdLabel.className = parameter[\"name\"] + ' codigma-apiunit-send';\r\n petIdLabel.textContent = parameter[\"name\"] + ':';\r\n const petIdValue = createInputElement();\r\n petIdValue.setAttribute('data-layer', 'valueText');\r\n petIdValue.className = 'Valuetext codigma-apiunit-valuetext';\r\n petIdValue.value = parameter[\"value\"] || \"\";\r\n\r\n // 可选:添加输入事件监听(根据需求)\r\n petIdValue.addEventListener('input', (e: any) => {\r\n console.log('当前值:', e.target.value);\r\n // 这里可以添加保存逻辑(如更新状态/发送请求\r\n parameter[\"value\"] = e.target.value\r\n });\r\n petIdRow.append(petIdLabel, petIdValue);\r\n return petIdRow;\r\n}\r\n\r\nfunction createInputElement() {\r\n const inputText = document.createElement('input');\r\n inputText.setAttribute('type', 'text');\r\n inputText.setAttribute('name', 'text-input');\r\n inputText.setAttribute('label', 'text-input');\r\n inputText.setAttribute('autocomplete', 'off');\r\n return inputText;\r\n}\r\n\r\nfunction createSelectRow(auths: any, authValues: any) {\r\n // 创建外层容器div\r\n const container = document.createElement('div');\r\n container.setAttribute('data-layer', 'keyValue');\r\n container.className = 'Keyvalue codigma-apiunit-keyvalue';\r\n\r\n // 创建type显示div\r\n const typeLabel = document.createElement('div');\r\n typeLabel.setAttribute('data-layer', \"type\");\r\n typeLabel.className = 'type codigma-apiunit-send';\r\n typeLabel.textContent = 'Type:';\r\n\r\n // 创建select元素\r\n const selectElement: any = document.createElement('select');\r\n selectElement.name = 'text-select';\r\n selectElement.label = 'text-select';\r\n selectElement.setAttribute('data-layer', 'valueText');\r\n\r\n // 示例选项(可根据实际需求添加\r\n auths.forEach((auth: any) => {\r\n const option1 = document.createElement('option');\r\n option1.value = auth[\"type\"];\r\n option1.textContent = auth[\"type\"];\r\n selectElement.appendChild(option1);\r\n })\r\n\r\n // 添加选择事件监听\r\n selectElement.addEventListener('change', function (event: any) {\r\n //切换前先移除掉原来的元素\r\n authValues && Array.from(authValues.children).slice(1).forEach((el: any) => el.remove());\r\n const auth = auths[event.target.selectedIndex];\r\n let parameters = auth.parameters || [];\r\n const authRows = parameters.map((parameter: any) => createRow(parameter));\r\n authValues.append(...authRows);\r\n });\r\n // 组装DOM结构\r\n container.appendChild(typeLabel);\r\n container.appendChild(selectElement);\r\n return container;\r\n}\r\n\r\nfunction isPathOrQueryParam(param: any) {\r\n return param.in === 'path' || param.in === 'query';\r\n}\r\n\r\nfunction isHeaderParam(param: any) {\r\n return param.in === 'header';\r\n}\r\n\r\n/**\r\n * \r\n * \r\n * \r\n * const apiOperator = {\r\n method: method.toUpperCase(),\r\n url: path,\r\n rawApiInfo: null,\r\n requestBody: null\r\n }\r\n\r\n * @param {*} apiOperator\r\n * @param {*} apiInfo \r\n */\r\n\r\nfunction sendRequest(apiOperator: any, responseSectionRef: any) {\r\n // 防御性检查:确保传入了 responseSectionRef,避免后续调用 querySelector 时抛出错误\r\n if (!responseSectionRef) {\r\n console.error('sendRequest: missing responseSectionRef. Aborting request to avoid runtime errors.');\r\n return;\r\n }\r\n let reuqestUrl = getRequestUrl(apiOperator);\r\n const result = checkIfParameter(apiOperator);\r\n\r\n let header = result.hasRequestBody ? 'application/json' :\r\n (result.hasRequestFormData ? 'application/x-www-form-urlencoded' : 'application/json');\r\n let headers: any = {\r\n 'Content-Type': header\r\n }\r\n\r\n //TODO\r\n if (apiOperator.custom) {\r\n for (let index = 0; index < apiOperator.customHeaderparameters.length; index++) {\r\n const paras = apiOperator.customHeaderparameters[index];\r\n if (paras.name != '' && paras.value != '' && paras.name != null && paras.value != null) {\r\n headers[paras.name] = paras.value\r\n }\r\n }\r\n }\r\n\r\n let body = result.hasRequestBody ? apiOperator.requestBody :\r\n (result.hasRequestFormData ? getRequestFormData(apiOperator.rawApiInfo) : null);\r\n\r\n //TODO\r\n if (apiOperator.custom) {\r\n if (apiOperator.method.toUpperCase() == \"POST\" || apiOperator.method.toUpperCase() == \"PUT\") {\r\n body = apiOperator.requestBody;\r\n }\r\n }\r\n\r\n apiOperator.ifSendingRequest = true;\r\n const startTime = Date.now(); // 记录开始时间\r\n\r\n apiOperator.controller = new AbortController();\r\n const signal = apiOperator.controller.signal;\r\n\r\n //正在发送请求时创建遮罩层\r\n const overlayLayerContainer = createRequestOverlayLayer(apiOperator, responseSectionRef);\r\n\r\n // 使用 fetch 发送请求,并传递 signal \r\n fetch(reuqestUrl, {\r\n method: apiOperator.method.toUpperCase(),\r\n headers: headers,\r\n body: body != null ? JSON.stringify(body) : null,\r\n signal: signal\r\n })\r\n .then(response => {\r\n if (!response.ok) {\r\n apiOperator.response = {\r\n status: response.status,\r\n statusText: response.statusText\r\n }\r\n\r\n const endTime = Date.now(); // 即使在错误的情况下也记录结束时间 \r\n apiOperator.requestDuration = formatDuration(endTime - startTime);\r\n apiOperator.ifSendingRequest = false;\r\n // apiOperator.responseJsoneditor.value = \"\";\r\n throw new Error('Network response was not ok.');\r\n }\r\n const endTime = Date.now(); // 记录结束时间 \r\n apiOperator.requestDuration = formatDuration(endTime - startTime); // 计算耗时\r\n\r\n const responsebodyElement = responseSectionRef.querySelector('[data-layer=\"responsebody\"]');\r\n responsebodyElement.removeChild(overlayLayerContainer);\r\n\r\n apiOperator.ifSendingRequest = false;\r\n apiOperator.response = {\r\n status: response.status,\r\n statusText: response.statusText\r\n }\r\n\r\n // 在responseSectionRef元素范围内查找TimeStatus元素\r\n const timeStatusElement = responseSectionRef.querySelector('[data-layer=\"TimeStatus\"]');\r\n if (timeStatusElement) {\r\n updateTimeStatus(timeStatusElement, apiOperator);\r\n } else {\r\n console.log(\"在reqresponse范围内未找到TimeStatus元素\");\r\n }\r\n\r\n let responseClone = response.clone();\r\n return response.json() // 解析为json \r\n .catch(error => {\r\n // 如果解析 JSON 失败,则回退到文本解析\r\n return responseClone.text();\r\n });\r\n })\r\n .then(data => {\r\n apiOperator.gotResponse = true;\r\n const responsebodyElement = responseSectionRef.querySelector('[data-layer=\"responsebody\"]');\r\n // 此时 data 可能是 JSON 对象,也可能是文本字符串 \r\n if (typeof data === 'object') {\r\n // 假设 data 是 JSON 对象,你可以在这里处理它 \r\n console.log('Received JSON:', data);\r\n responsebodyElement.textContent = JSON.stringify(data, null, 4)\r\n } else {\r\n // 假设 data 是文本字符串,你可以在这里处理它 \r\n console.log('Received text:', data);\r\n responsebodyElement.textContent = data;\r\n }\r\n })\r\n .catch(error => {\r\n // 错误处理 \r\n console.error('There has been a problem with your fetch operation:', error);\r\n });\r\n}\r\n\r\nfunction updateTimeStatus(timeStatus: any, apiOperator: any) {\r\n timeStatus.textContent\r\n = `Status: ${apiOperator.response.status || \"\"} ${apiOperator.response.statusText || \"\"} Time: ${apiOperator.requestDuration || \"\"}`;\r\n}\r\n\r\nfunction createRequestOverlayLayer(apiOperator: any, responseSectionRef: any) {\r\n // 创建主容器 \r\n const container = document.createElement('div');\r\n Object.assign(container.style, {\r\n position: 'absolute',\r\n top: 0,\r\n width: '100%',\r\n height: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n backgroundColor: 'rgb(255, 255, 255)',\r\n opacity: 0.8\r\n });\r\n\r\n // 创建内容容器 \r\n const contentDiv = document.createElement('div');\r\n Object.assign(contentDiv.style, {\r\n display: 'flex',\r\n gap: '5px',\r\n alignItems: 'center',\r\n });\r\n\r\n // 创建文本div \r\n const textDiv = document.createElement('div');\r\n textDiv.textContent = 'Sending request...';\r\n\r\n // 创建取消按钮 \r\n const cancelBtn = document.createElement('button');\r\n cancelBtn.className = 'request-cancel-btn';\r\n Object.assign(cancelBtn.style, {\r\n border: '0px'\r\n });\r\n cancelBtn.textContent = 'Cancel';\r\n\r\n const responsebodyElement = responseSectionRef.querySelector('[data-layer=\"responsebody\"]');\r\n // 组装DOM结构 \r\n contentDiv.appendChild(textDiv);\r\n contentDiv.appendChild(cancelBtn);\r\n container.appendChild(contentDiv);\r\n responsebodyElement.appendChild(container);\r\n\r\n // 添加点击事件\r\n cancelBtn.addEventListener('click', (e) => {\r\n // 如果你想取消请求,调用 controller 的 abort 方法\r\n if (apiOperator.controller) {\r\n apiOperator.controller.abort();\r\n apiOperator.ifSendingRequest = false;\r\n container.style.display = 'none';\r\n responsebodyElement.removeChild(container);\r\n }\r\n });\r\n\r\n return container\r\n}\r\n\r\nfunction checkIfParameter(apiOperator: any) {\r\n let hasRequestBody = false;\r\n let hasRequestFormData = false;\r\n const parameters = apiOperator.rawApiInfo.parameters;\r\n if (parameters) {\r\n for (let index = 0; index < parameters.length; index++) {\r\n const parameter = parameters[index];\r\n if (parameter.in == \"query\" || parameter.in == \"path\") {\r\n } else if (parameter.in == \"body\") {\r\n hasRequestBody = true;\r\n parameter.name = parameter.name.charAt(0).toUpperCase() + parameter.name.slice(1);\r\n } else if (parameter.in == \"formData\") {\r\n hasRequestFormData = true;\r\n }\r\n }\r\n }\r\n\r\n //support openapi 3.0\r\n const requestBody = apiOperator.rawApiInfo.requestBody;\r\n if (requestBody) {\r\n hasRequestBody = true;\r\n }\r\n // 返回包含两个状态的对象\r\n return { hasRequestBody, hasRequestFormData };\r\n}\r\n\r\nfunction formatDuration(milliseconds: number) {\r\n let totalSeconds: string | number = Math.floor(milliseconds / 1000);\r\n let seconds: string | number = totalSeconds % 60;\r\n let minutes: string | number = Math.floor(totalSeconds / 60) % 60;\r\n let hours: string | number = Math.floor(totalSeconds / (60 * 60));\r\n\r\n // 毫秒部分 \r\n let millisecondsPart: string | number = Math.floor(milliseconds % 1000);\r\n // 毫秒不足三位时前面补0 \r\n millisecondsPart = millisecondsPart.toString().padStart(3, '0');\r\n\r\n // 时分秒不足两位时前面补0 \r\n hours = hours.toString().padStart(2, '0');\r\n minutes = minutes.toString().padStart(2, '0');\r\n seconds = seconds.toString().padStart(2, '0');\r\n\r\n // 返回格式化的字符串 \r\n return `${hours}h${minutes}m${seconds}s${millisecondsPart}ms`;\r\n}\r\n\r\nfunction getRequestUrl(apiOperator: any) {\r\n let reuqestUrl = apiOperator.url;\r\n\r\n const requestParameters = apiOperator.rawApiInfo.parameters || [];\r\n if (requestParameters == null) {\r\n return reuqestUrl;\r\n }\r\n\r\n for (const element of requestParameters) {\r\n if (element.in == \"path\") {\r\n reuqestUrl = reuqestUrl.replace(\"{\" + element.name + \"}\", element.value);\r\n }\r\n }\r\n\r\n let queryParams = getQueryParams(apiOperator, requestParameters);\r\n reuqestUrl = queryParams.length > 0 ? (reuqestUrl + \"?\" + queryParams.join(\"&\")) : reuqestUrl;\r\n\r\n return reuqestUrl;\r\n}\r\n\r\nfunction getQueryParams(apiOperator: any, requestParameters: any) {\r\n let queryParams = [];\r\n for (const element of requestParameters) {\r\n if (element.in == \"query\") {\r\n if (element.type == \"array\" || (element.schema != null && element.schema.type == 'array')) {\r\n if (element.value != null) {\r\n for (let index = 0; index < element.value.length; index++) {\r\n queryParams.push(element.name + \"=\" + element.value[index].value);\r\n }\r\n }\r\n } else {\r\n queryParams.push(element.name + \"=\" + element.value);\r\n }\r\n }\r\n }\r\n\r\n if (apiOperator.custom) {\r\n for (let index = 0; index < apiOperator.customQueryparameters.length; index++) {\r\n const paras = apiOperator.customQueryparameters[index];\r\n if (paras.name != '' && paras.value != '' && paras.name != null && paras.value != null) {\r\n queryParams.push(paras.name + \"=\" + paras.value)\r\n }\r\n }\r\n }\r\n\r\n return queryParams;\r\n}\r\n\r\nfunction getRequestFormData(rawApiInfo: any) {\r\n let formData = '';\r\n const requestParameters = rawApiInfo.parameters;\r\n if (requestParameters == null) {\r\n return \"\";\r\n }\r\n\r\n let first = 0;\r\n for (const element of requestParameters) {\r\n if (element.in == \"formData\") {\r\n if (first == 0) {\r\n formData = element.name + \"=\" + element.value;\r\n } else {\r\n formData = formData + \"&\" + element.name + \"=\" + element.value;\r\n }\r\n first++;\r\n }\r\n }\r\n return formData;\r\n}\r\n\r\n\r\nfunction createSvg() {\r\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\r\n svg.setAttribute('width', '21');\r\n svg.setAttribute('height', '22');\r\n svg.setAttribute('viewBox', '0 0 21 22');\r\n svg.setAttribute('fill', 'none');\r\n svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\r\n\r\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\r\n path.setAttribute('d', 'M5.5 8.5L10.5 13.5L15.5 8.5');\r\n path.setAttribute('stroke', 'var(--Labels---Vibrant---Controls-Primary--, #404040)');\r\n path.setAttribute('stroke-width', '2');\r\n path.setAttribute('stroke-linecap', 'round');\r\n path.setAttribute('stroke-linejoin', 'round');\r\n\r\n svg.appendChild(path);\r\n return svg;\r\n}\r\n\r\nfunction parseParaModel(parameterObj: any, dataDef: any) {\r\n let bodyModel;\r\n if (parameterObj && parameterObj.schema) {\r\n if (parameterObj.schema['$ref']) { // 对象类型\r\n bodyModel = parseModel(parameterObj.schema['$ref'], dataDef);\r\n } else if (parameterObj.schema['type'] == 'array') { // 数组类型\r\n const itemObj = parameterObj.schema['items'];\r\n if (itemObj['$ref']) {\r\n bodyModel = parseModel(itemObj['$ref'], dataDef);\r\n } else if (itemObj['type']) {\r\n bodyModel = parseElement(itemObj);\r\n }\r\n bodyModel = [bodyModel];\r\n }\r\n }\r\n\r\n return bodyModel;\r\n}\r\n\r\nfunction parseModel(modelDef: any, apiDef: any) {\r\n const model: any = {};\r\n const bodyName = modelDef.substring(modelDef.lastIndexOf('/') + 1);\r\n const def = apiDef[bodyName];\r\n const props = def['properties'];\r\n if (props) {\r\n for (const key in props) {\r\n if (Object.prototype.hasOwnProperty.call(props, key)) {\r\n const element = props[key];\r\n if (element.hasOwnProperty('items') && element['type'] == 'array') {\r\n if (element[\"items\"]['$ref']) {\r\n model[key] = [parseModel(element[\"items\"]['$ref'], apiDef)]\r\n } else if (element[\"items\"]['type']) {\r\n model[key] = [parseElement(element[\"items\"])];\r\n }\r\n } else if (element.hasOwnProperty('$ref')) {\r\n model[key] = parseModel(element['$ref'], apiDef)\r\n } else {\r\n if (element['type']) {\r\n model[key] = parseElement(element);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return model;\r\n}\r\n\r\nfunction parseElement(element: any) {\r\n let elementValue;\r\n if (element['type'].includes('integer')) {\r\n elementValue = 0;\r\n } else if (element['type'].includes('boolean')) {\r\n elementValue = false;\r\n } else if (element['type'].includes('string')) {\r\n if (element['enum']) {\r\n elementValue = element['enum'][0];\r\n } else {\r\n elementValue = '';\r\n }\r\n }\r\n\r\n if (element['example']) {\r\n elementValue = element['example'];\r\n }\r\n\r\n return elementValue;\r\n}\r\n\r\nconst HTTP_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const;\r\ntype HttpMethod = typeof HTTP_METHODS[number]; // 等价于你的 HttpMethods 的值类型\r\n\r\nfunction isHttpMethod(method: string): method is HttpMethod {\r\n return (HTTP_METHODS as readonly string[]).includes(method);\r\n}\r\n\r\n// 解析OpenAPI规范并构建API操作列表\r\nfunction parseOpenAPI(openapiSpec: OpenAPIV3CustomDoc) {\r\n const apiOperatorList: any = [];\r\n\r\n const pathEntries: [string, OpenAPIV3.PathItemObject | undefined][] = [];\r\n for (const path in openapiSpec.paths) {\r\n if (Object.prototype.hasOwnProperty.call(openapiSpec.paths, path)) {\r\n pathEntries.push([path, openapiSpec.paths[path]]);\r\n }\r\n }\r\n // 遍历所有路径\r\n pathEntries.forEach(([path, pathItem]) => {\r\n const pathItemEntries: [string, OpenAPIV3.OperationObject][] = [];\r\n for (const method in pathItem) {\r\n if (Object.prototype.hasOwnProperty.call(pathItem, method)) {\r\n // 关键:将 method 断言为合法的 key\r\n if (isHttpMethod(method)) {\r\n const operation = pathItem[method as keyof typeof pathItem];\r\n if (operation != null && typeof operation === 'object' && !('$ref' in operation)) {\r\n // 此时可以安全认为是 OperationObject(因为 method key 不会对应 $ref/parameters)\r\n pathItemEntries.push([method, operation as OpenAPIV3.OperationObject]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 遍历路径下的所有方法\r\n pathItemEntries.forEach(([method, operation]) => {\r\n // 初始化当前API操作对象\r\n const apiOperator: any = {\r\n method: method.toUpperCase(),\r\n url: path,\r\n rawApiInfo: null,\r\n requestBody: null,\r\n response: {},\r\n auths: [\r\n {\r\n type: \"No Auth\"\r\n },\r\n {\r\n type: \"Basic Auth\",\r\n parameters: [\r\n {\r\n name: \"userName\",\r\n value: \"\"\r\n },\r\n {\r\n name: \"password\",\r\n value: \"\"\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n\r\n if (operation) {\r\n // requestBody\r\n // support openapi 2.0\r\n if (operation.parameters) {\r\n const parameter = operation.parameters.filter((val: any) => val.in == 'body');\r\n if (parameter && parameter.length > 0) {\r\n // let requestBody = parseParaModel(parameter[0], data['definitions']);\r\n // apiOperator.requestBody = requestBody;\r\n }\r\n }\r\n\r\n //support openapi 3.0\r\n if (operation.requestBody) {\r\n const requestBodyObject = operation.requestBody as OpenAPIV3.RequestBodyObject //目前只支持对象类型 TODO 引用类型待支持\r\n const content = requestBodyObject.content;\r\n for (const key in content) {\r\n if (Object.prototype.hasOwnProperty.call(content, key)) {\r\n const element: OpenAPIV3.MediaTypeObject = content[key];\r\n if (element) {\r\n let requestBody = parseParaModel(element, openapiSpec[\"components\"]![\"schemas\"]);\r\n apiOperator.requestBody = requestBody;\r\n }\r\n }\r\n }\r\n }\r\n\r\n apiOperator.rawApiInfo = operation;\r\n // 添加到结果列表\r\n apiOperatorList.push(apiOperator);\r\n }\r\n\r\n });\r\n });\r\n\r\n return apiOperatorList;\r\n}\r\n\r\nfunction countOpenAPI(openapiSpec: OpenAPIV3CustomDoc) {\r\n let apiCount = 0;\r\n const pathEntries: [string, OpenAPIV3.PathItemObject | undefined][] = [];\r\n for (const path in openapiSpec.paths) {\r\n if (Object.prototype.hasOwnProperty.call(openapiSpec.paths, path)) {\r\n pathEntries.push([path, openapiSpec.paths[path]]);\r\n }\r\n }\r\n\r\n // 遍历所有路径\r\n pathEntries.forEach(([path, pathItem]) => {\r\n const pathItemEntries: [string, OpenAPIV3.OperationObject][] = [];\r\n for (const method in pathItem) {\r\n if (Object.prototype.hasOwnProperty.call(pathItem, method)) {\r\n // 关键:将 method 断言为合法的 key\r\n if (isHttpMethod(method)) {\r\n const operation = pathItem[method as keyof typeof pathItem];\r\n if (operation != null && typeof operation === 'object' && !('$ref' in operation)) {\r\n // 此时可以安全认为是 OperationObject(因为 method key 不会对应 $ref/parameters)\r\n pathItemEntries.push([method, operation as OpenAPIV3.OperationObject]);\r\n }\r\n }\r\n }\r\n }\r\n // 遍历路径下的所有方法\r\n pathItemEntries.forEach(([method, operation]) => {\r\n apiCount = apiCount + 1;\r\n });\r\n });\r\n\r\n return apiCount;\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCO,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","names":["endTime"]}
package/dist/index.js CHANGED
@@ -12,20 +12,29 @@ var GLOBAL_STYLES = `.codigma-apioperatorlist {
12
12
  .codigma-apioperator {
13
13
  align-items: center;
14
14
  align-self: stretch;
15
- background: #F0F1F4;
16
15
  display: inline-flex;
17
16
  gap: 10px;
18
- height: 48px;
17
+ /* border-radius: 8px; */
18
+ height: 32px;
19
19
  justify-content: flex-start
20
20
  }
21
+ .codigma-apioperator:nth-child(even) {
22
+ background-color: rgb(235, 239, 244);
23
+ }
24
+ .codigma-apioperator:nth-child(odd) {
25
+ background-color: rgb(250, 246, 246);
26
+ }
27
+
21
28
  .codigma-apioperator:hover {
22
29
  cursor: pointer;
23
30
  }
31
+ .codigma-apioperator:active {
32
+ background: rgb(206, 216, 231);
33
+ }
24
34
  .codigma-method {
25
35
  align-items: center;
26
36
  display: flex;
27
37
  gap: 5px;
28
- height: 48px;
29
38
  justify-content: center;
30
39
  width: 64px
31
40
  }
@@ -37,17 +46,11 @@ var GLOBAL_STYLES = `.codigma-apioperatorlist {
37
46
  }
38
47
  .codigma-get {
39
48
  color: var(--Labels---Vibrant---Controls-Primary-\u221A, #404040);
40
- font-family: Inter;
41
- font-size: 16px;
42
- font-weight: 400;
43
49
  word-wrap: break-word
44
50
  }
45
51
  .codigma-requrl {
46
52
  color: black;
47
53
  flex: 1 1 0;
48
- font-family: Inter;
49
- font-size: 16px;
50
- font-weight: 400;
51
54
  word-wrap: break-word
52
55
  }
53
56
  /**********************apiunit css style*************************/
@@ -88,17 +91,11 @@ var GLOBAL_STYLES = `.codigma-apioperatorlist {
88
91
  }
89
92
  .codigma-apiunit-post {
90
93
  color: var(--Labels---Vibrant---Controls-Primary-\u221A, #404040);
91
- font-family: Inter;
92
- font-size: 16px;
93
- font-weight: 400;
94
94
  word-wrap: break-word
95
95
  }
96
96
  .codigma-apiunit-requrl {
97
97
  color: black;
98
98
  flex: 1 1 0;
99
- font-family: Inter;
100
- font-size: 16px;
101
- font-weight: 400;
102
99
  word-wrap: break-word;
103
100
  border-left: 0;
104
101
  border-right: 0;
@@ -115,9 +112,6 @@ var GLOBAL_STYLES = `.codigma-apioperatorlist {
115
112
  }
116
113
  .codigma-apiunit-send {
117
114
  color: black;
118
- font-family: Inter;
119
- font-size: 16px;
120
- font-weight: 400;
121
115
  word-wrap: break-word
122
116
  }
123
117
  .codigma-apiunit-send-button:hover {
@@ -283,7 +277,6 @@ var ApiRenderer = class {
283
277
  if (apiSpec["openapi"] && apiSpec["openapi"].startsWith("3.") || apiSpec["swagger"] && apiSpec["swagger"].startsWith("2.")) {
284
278
  const countApi = countOpenAPI(apiSpec);
285
279
  const apiOperatorList = parseOpenAPI(apiSpec);
286
- console.log("\u89E3\u6790\u7ED3\u679C:", apiOperatorList);
287
280
  if (countApi == 1 && renderUnit) {
288
281
  this.container = createApiUnit(apiOperatorList[0]);
289
282
  } else {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/inlined-styles.ts","../src/api-render-ui.ts"],"sourcesContent":["// Auto-generated by inline-styles.mjs\nexport const GLOBAL_STYLES = `.codigma-apioperatorlist {\r\n align-items: flex-start;\r\n background: white;\r\n display: inline-flex;\r\n flex-direction: column;\r\n gap: 5px;\r\n height: 100%;\r\n justify-content: flex-start;\r\n width: 100%\r\n}\r\n.codigma-apioperator {\r\n align-items: center;\r\n align-self: stretch;\r\n background: #F0F1F4;\r\n display: inline-flex;\r\n gap: 10px;\r\n height: 48px;\r\n justify-content: flex-start\r\n}\r\n.codigma-apioperator:hover {\r\n cursor: pointer;\r\n}\r\n.codigma-method {\r\n align-items: center;\r\n display: flex;\r\n gap: 5px;\r\n height: 48px;\r\n justify-content: center;\r\n width: 64px\r\n}\r\n.codigma-methodtype {\r\n align-items: center;\r\n display: flex;\r\n gap: 10px;\r\n justify-content: center\r\n}\r\n.codigma-get {\r\n color: var(--Labels---Vibrant---Controls-Primary-√, #404040);\r\n font-family: Inter;\r\n font-size: 16px;\r\n font-weight: 400;\r\n word-wrap: break-word\r\n}\r\n.codigma-requrl {\r\n color: black;\r\n flex: 1 1 0;\r\n font-family: Inter;\r\n font-size: 16px;\r\n font-weight: 400;\r\n word-wrap: break-word\r\n}\r\n/**********************apiunit css style*************************/\r\n.codigma-apiunit {\r\n align-items: flex-start;\r\n background: white;\r\n box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);\r\n display: inline-flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n height: 100%;\r\n justify-content: flex-start;\r\n width: 100%\r\n}\r\n.codigma-apiunit-apioperator {\r\n align-items: center;\r\n align-self: stretch;\r\n border-bottom: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n border-top: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n display: inline-flex;\r\n gap: 10px;\r\n height: 48px;\r\n justify-content: flex-start\r\n}\r\n.codigma-apiunit-method {\r\n align-items: center;\r\n display: flex;\r\n gap: 5px;\r\n height: 48px;\r\n justify-content: center;\r\n width: 100px\r\n}\r\n.codigma-apiunit-methodtype {\r\n align-items: center;\r\n display: flex;\r\n gap: 10px;\r\n justify-content: center\r\n}\r\n.codigma-apiunit-post {\r\n color: var(--Labels---Vibrant---Controls-Primary-√, #404040);\r\n font-family: Inter;\r\n font-size: 16px;\r\n font-weight: 400;\r\n word-wrap: break-word\r\n}\r\n.codigma-apiunit-requrl {\r\n color: black;\r\n flex: 1 1 0;\r\n font-family: Inter;\r\n font-size: 16px;\r\n font-weight: 400;\r\n word-wrap: break-word;\r\n border-left: 0;\r\n border-right: 0;\r\n border-top: 0;\r\n border-bottom: 1px solid black;\r\n}\r\n.codigma-apiunit-send-button {\r\n align-items: center;\r\n display: flex;\r\n gap: 10px;\r\n height: 32px;\r\n justify-content: center;\r\n width: 88px\r\n}\r\n.codigma-apiunit-send {\r\n color: black;\r\n font-family: Inter;\r\n font-size: 16px;\r\n font-weight: 400;\r\n word-wrap: break-word\r\n}\r\n.codigma-apiunit-send-button:hover {\r\n cursor: pointer;\r\n}\r\n.codigma-apiunit-send-button:active {\r\n background-color: gray;\r\n}\r\n\r\n.codigma-apiunit-reqcontent {\r\n align-items: flex-start;\r\n align-self: stretch;\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1 1 0;\r\n gap: 5px;\r\n justify-content: flex-start;\r\n padding-left: 5px;\r\n}\r\n.codigma-apiunit-paramters-section {\r\n align-items: center;\r\n align-self: stretch;\r\n display: inline-flex;\r\n flex: 1 1 0;\r\n justify-content: flex-start\r\n}\r\n.codigma-apiunit-parameters-cnr {\r\n align-items: center;\r\n background: white;\r\n display: flex;\r\n height: 42px;\r\n justify-content: space-between;\r\n width: 122px\r\n}\r\n.codigma-apiunit-parakeyvalues {\r\n align-items: flex-start;\r\n align-self: stretch;\r\n background: white;\r\n display: inline-flex;\r\n flex-direction: column;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start;\r\n overflow: hidden;\r\n padding: 10px\r\n}\r\n.codigma-apiunit-keyvalue {\r\n align-items: center;\r\n display: inline-flex;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start\r\n}\r\n.codigma-apiunit-valuetext {\r\n align-self: stretch;\r\n background: white;\r\n border-left: 0;\r\n border-right: 0;\r\n border-top: 0;\r\n border-bottom: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n padding: 10px;\r\n width: 161px\r\n}\r\n/* .codigma-apiunit-keyvalue {\r\n align-items: center;\r\n display: inline-flex;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start;\r\n width: 211px\r\n} */\r\n.codigma-apiunit-request-body-section {\r\n align-items: center;\r\n align-self: stretch;\r\n display: inline-flex;\r\n height: 114px;\r\n justify-content: flex-start;\r\n padding-right: 5px\r\n}\r\n.codigma-apiunit-parakeyvalues {\r\n align-items: flex-start;\r\n align-self: stretch;\r\n background: white;\r\n display: flex;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start;\r\n outline-offset: -1px;\r\n outline: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n overflow: hidden;\r\n padding: 10px\r\n}\r\n.codigma-apiunit-reqresponse {\r\n align-items: flex-start;\r\n align-self: stretch;\r\n background: white;\r\n border-top: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start;\r\n padding-left: 5px;\r\n padding-right: 5px\r\n}\r\n.codigma-apiunit-responsedesc {\r\n align-items: center;\r\n align-self: stretch;\r\n display: inline-flex;\r\n justify-content: space-between;\r\n padding-right: 32px\r\n}\r\n.codigma-apiunit-responsetitle {\r\n align-items: center;\r\n border-bottom: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n display: flex;\r\n height: 42px;\r\n justify-content: space-between;\r\n width: 122px\r\n}\r\n.codigma-apiunit-response-cnr {\r\n align-items: center;\r\n align-self: stretch;\r\n background: white;\r\n display: flex;\r\n justify-content: space-between;\r\n padding-top: 2px;\r\n width: 122px\r\n}\r\n.codigma-apiunit-responsebody {\r\n position: relative;\r\n align-self: stretch;\r\n flex: 1 1 0;\r\n min-height: 5rem;\r\n /* padding: 2px */\r\n}`;\n","import { GLOBAL_STYLES } from './inlined-styles';\r\nimport { OpenAPIV3 } from 'openapi-types';\r\n\r\ntype OpenAPIV3CustomDoc = OpenAPIV3.Document & { swagger: string }\r\n\r\nexport class ApiRenderer {\r\n options: any;\r\n container: any;\r\n constructor(options: any) {\r\n this.options = Object.assign({\r\n mountPoint: document?.body, // 默认挂载到body\r\n className: 'Apioperatorlist codigma-apioperatorlist',\r\n layerName: 'apioperatorlist'\r\n }, options);\r\n\r\n this.container = null;\r\n }\r\n\r\n render(apiSpec: OpenAPIV3CustomDoc, renderUnit: boolean = false) {\r\n\r\n const appendInlineStyle = (text: string) => {\r\n // 动态创建 <style> 标签并插入全局样式\r\n const styleEl = document.createElement('style');\r\n styleEl.textContent = text;\r\n document.head.appendChild(styleEl);\r\n };\r\n // 使用\r\n appendInlineStyle(GLOBAL_STYLES);\r\n\r\n // 存储原始元素与对应新元素的映射\r\n const elementMap = new Map();\r\n\r\n // 获取实际挂载点\r\n const mountElement = typeof this.options.mountPoint === 'string' ?\r\n document.querySelector(this.options.mountPoint) :\r\n this.options.mountPoint;\r\n\r\n if (!mountElement) {\r\n throw new Error('Invalid mount point specified');\r\n }\r\n\r\n if ((apiSpec[\"openapi\"] && apiSpec[\"openapi\"].startsWith(\"3.\"))\r\n || (apiSpec[\"swagger\"] && apiSpec[\"swagger\"].startsWith(\"2.\"))) {\r\n const countApi = countOpenAPI(apiSpec);\r\n const apiOperatorList = parseOpenAPI(apiSpec);\r\n console.log('解析结果:', apiOperatorList);\r\n if (countApi == 1 && renderUnit) {\r\n // If the count of api <=1, create the api unit only. \r\n // 创建根容器\r\n this.container = createApiUnit(apiOperatorList[0]);\r\n } else {\r\n // 创建主容器\r\n this.container = document.createElement('div');\r\n this.container.setAttribute('data-layer', this.options.layerName);\r\n this.container.className = this.options.className;\r\n\r\n // 生成内容\r\n apiOperatorList.forEach((apiOperator: any) => {\r\n const reqOperator = document.createElement('div');\r\n reqOperator.setAttribute('data-layer', 'apioperator');\r\n reqOperator.className = 'Apioperator codigma-apioperator';\r\n\r\n // 创建method部分\r\n const methodContainer = document.createElement('div');\r\n methodContainer.setAttribute('data-layer', 'method');\r\n methodContainer.className = 'Method codigma-method';\r\n\r\n const methodType = document.createElement('div');\r\n methodType.setAttribute('data-layer', 'methodtype');\r\n methodType.className = 'Methodtype codigma-methodtype';\r\n\r\n const methodValue = document.createElement('div');\r\n methodValue.setAttribute('data-layer', apiOperator.method.toLowerCase());\r\n methodValue.className = `${apiOperator.method} codigma-${apiOperator.method.toLowerCase()}`;\r\n methodValue.textContent = apiOperator.method;\r\n\r\n methodType.appendChild(methodValue);\r\n methodContainer.appendChild(methodType);\r\n reqOperator.appendChild(methodContainer);\r\n\r\n // 创建URL部分\r\n const urlElement = document.createElement('div');\r\n urlElement.setAttribute('data-layer', 'requrl');\r\n urlElement.className = 'Requrl codigma-requrl';\r\n urlElement.textContent = apiOperator.url;\r\n reqOperator.appendChild(urlElement);\r\n\r\n this.container.appendChild(reqOperator);\r\n\r\n // 添加点击事件\r\n reqOperator.addEventListener('click', renderApiUnit(apiOperator, this.container, elementMap));\r\n });\r\n }\r\n } else {\r\n // 初始化当前API操作对象\r\n const apiOperator = {\r\n method: \"get\",\r\n url: \"/full/info\",\r\n rawApiInfo: null,\r\n requestBody: null,\r\n response: {},\r\n auths: [\r\n {\r\n type: \"No Auth\"\r\n },\r\n {\r\n type: \"Basic Auth\",\r\n parameters: [\r\n {\r\n name: \"userName\",\r\n value: \"\"\r\n },\r\n {\r\n name: \"password\",\r\n value: \"\"\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n // 创建根容器\r\n this.container = createApiUnit(apiSpec);\r\n }\r\n\r\n // 清空挂载点并插入新内容\r\n mountElement.innerHTML = '';\r\n mountElement.appendChild(this.container);\r\n }\r\n}\r\n\r\n\r\n\r\nfunction renderApiUnit(apiOperator: any, containerRef: any, elementMap: any) {\r\n return function (evt: any) {\r\n console.log('点击的API操作:');\r\n console.log('方法:', apiOperator.method);\r\n console.log('URL:', apiOperator.url);\r\n console.log('------------------------');\r\n\r\n const currentTarget = evt.currentTarget;\r\n // 检查是否已存在对应的新元素\r\n if (elementMap.has(currentTarget)) {\r\n const newElement = elementMap.get(currentTarget);\r\n newElement.remove(); // 移除新元素\r\n elementMap.delete(currentTarget); // 清除映射\r\n return;\r\n }\r\n\r\n // 创建根容器\r\n const apiContainer = createApiUnit(apiOperator);\r\n\r\n // 添加到文档\r\n // 插入到当前元素后面\r\n if (currentTarget.nextSibling) {\r\n containerRef.insertBefore(apiContainer, currentTarget.nextSibling);\r\n } else {\r\n containerRef.appendChild(apiContainer);\r\n }\r\n\r\n // 存储映射关系\r\n elementMap.set(currentTarget, apiContainer);\r\n }\r\n}\r\n\r\nfunction createApiUnit(apiOperator: any) {\r\n const apiContainer = document.createElement('div');\r\n apiContainer.setAttribute('data-layer', 'apiunit');\r\n apiContainer.className = 'Requnit codigma-apiunit';\r\n // 预先创建响应部分并挂载到 apiOperator,保证后面创建的 send 按钮能访问到\r\n const responseSection = createSectionResponse(apiOperator);\r\n apiOperator._responseSectionRef = responseSection;\r\n\r\n // 请求操作区\r\n const reqOperator = createReqOperator(apiOperator);\r\n apiContainer.appendChild(reqOperator);\r\n // 请求内容区\r\n const reqContent = document.createElement('div');\r\n reqContent.setAttribute('data-layer', 'reqcontent');\r\n reqContent.className = 'Reqcontent codigma-apiunit-reqcontent';\r\n // 参数部分\r\n const paramSection = createParamSection(apiOperator);\r\n // 头部部分\r\n const headerSection = createSectionHeader(apiOperator);\r\n // 授权部分\r\n const authSection = createSectionAuth(apiOperator);\r\n // 请求体部分\r\n const bodySection = createSectionRequestBody(apiOperator.requestBody);\r\n\r\n reqContent.append(paramSection, headerSection, authSection, bodySection);\r\n apiContainer.appendChild(reqContent);\r\n // 响应部分(已经预创建,直接附加)\r\n apiContainer.appendChild(responseSection);\r\n return apiContainer;\r\n}\r\n\r\nfunction createReqOperator(apiOperator: any) {\r\n const reqOperator = document.createElement('div');\r\n reqOperator.setAttribute('data-layer', 'apioperator');\r\n reqOperator.className = 'Reqoperator codigma-apiunit-apioperator';\r\n // 方法类型\r\n const methodType = document.createElement('div');\r\n methodType.setAttribute('data-layer', 'method');\r\n methodType.className = 'Method codigma-apiunit-method';\r\n const methodTypeInner = document.createElement('div');\r\n methodTypeInner.setAttribute('data-layer', 'methodtype');\r\n methodTypeInner.className = 'Methodtype codigma-apiunit-methodtype';\r\n methodTypeInner.textContent = apiOperator.method.toUpperCase();\r\n methodType.appendChild(methodTypeInner);\r\n // 方法选项图标 - 使用内联SVG\r\n const methodOpt = document.createElement('div');\r\n methodOpt.setAttribute('data-svg-wrapper', '');\r\n methodOpt.setAttribute('data-layer', 'methodopt');\r\n methodOpt.className = 'Methodopt';\r\n\r\n // 创建内联SVG\r\n const svg = createSvg();\r\n methodOpt.appendChild(svg);\r\n methodType.appendChild(methodOpt);\r\n reqOperator.appendChild(methodType);\r\n // 请求URL\r\n const reqUrl = createInputElement();\r\n reqUrl.setAttribute('data-layer', 'requrl');\r\n reqUrl.className = 'Requrl codigma-apiunit-requrl';\r\n reqUrl.value = apiOperator.url; // 绑定初始值\r\n // 可选:添加输入事件监听(根据需求)\r\n reqUrl.addEventListener('input', (e: any) => {\r\n console.log('当前值:', e.target.value);\r\n // 这里可以添加保存逻辑(如更新状态/发送请求\r\n apiOperator.url = e.target.value\r\n });\r\n reqOperator.appendChild(reqUrl);\r\n // 发送按钮\r\n const sendButton = document.createElement('div');\r\n sendButton.setAttribute('data-layer', 'send-button');\r\n sendButton.className = 'SendButton codigma-apiunit-send-button';\r\n const sendText = document.createElement('div');\r\n sendText.setAttribute('data-layer', 'Send');\r\n sendText.className = 'Send codigma-apiunit-send';\r\n sendText.textContent = 'Send';\r\n sendButton.appendChild(sendText);\r\n\r\n sendButton.addEventListener('click', (e: any) => {\r\n console.log('当前值:', e.target.value);\r\n // 这里可以添加保存逻辑(如更新状态/发送请求\r\n // responseSectionRef 在渲染时会被挂载到 apiOperator._responseSectionRef 上\r\n const respRef = apiOperator._responseSectionRef || null;\r\n sendRequest(apiOperator, respRef);\r\n });\r\n\r\n reqOperator.appendChild(sendButton);\r\n return reqOperator;\r\n}\r\n\r\nfunction createParamSection(apiOperator: any) {\r\n const paramSection = document.createElement('div');\r\n paramSection.setAttribute('data-layer', 'paramters-section');\r\n paramSection.className = 'codigma-apiunit-paramters-section';\r\n // 参数容器头\r\n const paramCnr = document.createElement('div');\r\n paramCnr.setAttribute('data-layer', 'parameters-cnr');\r\n paramCnr.className = 'codigma-apiunit-parameters-cnr';\r\n const paramText = document.createElement('div');\r\n paramText.setAttribute('data-layer', 'parameters');\r\n paramText.className = 'codigma-apiunit-send';\r\n paramText.textContent = 'Parameters';\r\n paramCnr.appendChild(paramText);\r\n paramSection.appendChild(paramCnr);\r\n // 参数键值对\r\n const paramValues = document.createElement('div');\r\n paramValues.setAttribute('data-layer', 'paraKeyValues');\r\n paramValues.className = 'Parakeyvalues codigma-apiunit-parakeyvalues';\r\n let parameters = apiOperator.rawApiInfo.parameters || [];\r\n const parameterRows = parameters.filter((parameter: any) => isPathOrQueryParam(parameter))\r\n .map((parameter: any) => createRow(parameter));\r\n paramValues.append(...parameterRows);\r\n paramSection.append(paramCnr, paramValues);\r\n return paramSection;\r\n}\r\n\r\nfunction createSectionHeader(apiOperator: any) {\r\n const headerSection = document.createElement('div');\r\n headerSection.setAttribute('data-layer', 'headers-section');\r\n headerSection.className = 'codigma-apiunit-paramters-section';\r\n // 头部容器头\r\n const headerCnr = document.createElement('div');\r\n headerCnr.setAttribute('data-layer', 'headers-cnr');\r\n headerCnr.className = 'codigma-apiunit-parameters-cnr';\r\n const headerText = document.createElement('div');\r\n headerText.setAttribute('data-layer', 'headers');\r\n headerText.className = 'codigma-apiunit-send';\r\n headerText.textContent = 'Headers';\r\n headerCnr.appendChild(headerText);\r\n headerSection.appendChild(headerCnr);\r\n // 头部键值对\r\n const headerValues = document.createElement('div');\r\n headerValues.setAttribute('data-layer', 'paraKeyValues');\r\n headerValues.className = 'Parakeyvalues codigma-apiunit-parakeyvalues';\r\n let parameters = apiOperator.rawApiInfo.parameters || [];\r\n const headerRows = parameters.filter((parameter: any) => isHeaderParam(parameter))\r\n .map((parameter: any) => createRow(parameter));\r\n headerValues.append(...headerRows);\r\n headerSection.append(headerCnr, headerValues);\r\n return headerSection;\r\n}\r\n\r\nfunction createSectionAuth(apiOperator: any) {\r\n const authSection = document.createElement('div');\r\n authSection.setAttribute('data-layer', 'authorization-section');\r\n authSection.className = 'AuthorizationSection codigma-apiunit-paramters-section';\r\n // 授权容器头\r\n const authCnr = document.createElement('div');\r\n authCnr.setAttribute('data-layer', 'authorization-cnr');\r\n authCnr.className = 'AuthorizationCnr codigma-apiunit-parameters-cnr';\r\n const authText = document.createElement('div');\r\n authText.setAttribute('data-layer', 'authorization');\r\n authText.className = 'Authorization codigma-apiunit-send';\r\n authText.textContent = 'Authorization';\r\n authCnr.appendChild(authText);\r\n authSection.appendChild(authCnr);\r\n // 授权键值对\r\n const authValues = document.createElement('div');\r\n authValues.setAttribute('data-layer', 'paraKeyValues');\r\n authValues.className = 'Parakeyvalues codigma-apiunit-parakeyvalues';\r\n\r\n let auths = apiOperator.auths || []\r\n const authTypeRow = createSelectRow(auths, authValues)\r\n if (auths.length > 0) {\r\n let parameters = apiOperator.auths[0].parameters || [];\r\n const authRows = parameters.map((parameter: any) => createRow(parameter));\r\n authValues.append(authTypeRow, ...authRows);\r\n }\r\n\r\n authSection.append(authCnr, authValues);\r\n return authSection;\r\n}\r\n\r\nfunction createSectionRequestBody(requestBody: any) {\r\n const bodySection = document.createElement('div');\r\n bodySection.setAttribute('data-layer', 'request-body-section');\r\n bodySection.className = 'RequestBodySection codigma-apiunit-request-body-section';\r\n // 请求体容器头\r\n const bodyCnr = document.createElement('div');\r\n bodyCnr.setAttribute('data-layer', 'body-cnr');\r\n bodyCnr.className = 'BodyCnr codigma-apiunit-parameters-cnr';\r\n const bodyText = document.createElement('div');\r\n bodyText.setAttribute('data-layer', 'body');\r\n bodyText.className = 'Body codigma-apiunit-send';\r\n bodyText.textContent = 'Body';\r\n bodyCnr.appendChild(bodyText);\r\n bodySection.appendChild(bodyCnr);\r\n // 请求体内容\r\n const bodyValue = document.createElement('textarea');\r\n bodyValue.setAttribute('data-layer', 'bodyTextValue');\r\n bodyValue.className = 'Id0CategoryId0NameNamePhotourlsTagsId0NameStatusAvailable codigma-apiunit-parakeyvalues';\r\n bodyValue.value = JSON.stringify(requestBody);\r\n bodySection.appendChild(bodyValue);\r\n return bodySection;\r\n}\r\n\r\nfunction createSectionResponse(apiOperator: any) {\r\n const responseSection = document.createElement('div');\r\n responseSection.setAttribute('data-layer', 'reqresponse');\r\n responseSection.className = 'Reqresponse codigma-apiunit-reqresponse';\r\n // 响应描述\r\n const responseDesc = document.createElement('div');\r\n responseDesc.setAttribute('data-layer', 'responsedesc');\r\n responseDesc.className = 'Responsedesc codigma-apiunit-responsedesc';\r\n // 响应标题\r\n const responseTitle = document.createElement('div');\r\n responseTitle.setAttribute('data-layer', 'responsetitle');\r\n responseTitle.className = 'Responsetitle codigma-apiunit-responsetitle';\r\n const responseCnr = document.createElement('div');\r\n responseCnr.setAttribute('data-layer', 'response-cnr');\r\n responseCnr.className = 'ResponseCnr codigma-apiunit-response-cnr';\r\n const responseText = document.createElement('div');\r\n responseText.setAttribute('data-layer', 'response');\r\n responseText.className = 'Response codigma-apiunit-send';\r\n responseText.textContent = 'Response';\r\n responseCnr.appendChild(responseText);\r\n responseTitle.appendChild(responseCnr);\r\n const timeStatusElement = createTimeStatusElement(apiOperator);\r\n responseDesc.append(responseTitle, timeStatusElement);\r\n // 响应体\r\n const responseBody = document.createElement('div');\r\n responseBody.setAttribute('data-layer', 'responsebody');\r\n responseBody.className = 'Responsebody codigma-apiunit-responsebody';\r\n responseSection.append(responseDesc, responseBody);\r\n return responseSection;\r\n}\r\n\r\nfunction createTimeStatusElement(apiOperator: any) {\r\n const timeStatus = document.createElement('div');\r\n timeStatus.setAttribute('data-layer', 'TimeStatus');\r\n timeStatus.className = 'TimeStatus0 codigma-apiunit-send';\r\n updateTimeStatus(timeStatus, apiOperator);\r\n return timeStatus;\r\n}\r\n\r\nfunction createRow(parameter: any) {\r\n const petIdRow = document.createElement('div');\r\n petIdRow.setAttribute('data-layer', 'keyValue');\r\n petIdRow.className = 'Keyvalue codigma-apiunit-keyvalue';\r\n const petIdLabel = document.createElement('div');\r\n petIdLabel.setAttribute('data-layer', parameter[\"name\"]);\r\n petIdLabel.className = parameter[\"name\"] + ' codigma-apiunit-send';\r\n petIdLabel.textContent = parameter[\"name\"] + ':';\r\n const petIdValue = createInputElement();\r\n petIdValue.setAttribute('data-layer', 'valueText');\r\n petIdValue.className = 'Valuetext codigma-apiunit-valuetext';\r\n petIdValue.value = parameter[\"value\"] || \"\";\r\n\r\n // 可选:添加输入事件监听(根据需求)\r\n petIdValue.addEventListener('input', (e: any) => {\r\n console.log('当前值:', e.target.value);\r\n // 这里可以添加保存逻辑(如更新状态/发送请求\r\n parameter[\"value\"] = e.target.value\r\n });\r\n petIdRow.append(petIdLabel, petIdValue);\r\n return petIdRow;\r\n}\r\n\r\nfunction createInputElement() {\r\n const inputText = document.createElement('input');\r\n inputText.setAttribute('type', 'text');\r\n inputText.setAttribute('name', 'text-input');\r\n inputText.setAttribute('label', 'text-input');\r\n inputText.setAttribute('autocomplete', 'off');\r\n return inputText;\r\n}\r\n\r\nfunction createSelectRow(auths: any, authValues: any) {\r\n // 创建外层容器div\r\n const container = document.createElement('div');\r\n container.setAttribute('data-layer', 'keyValue');\r\n container.className = 'Keyvalue codigma-apiunit-keyvalue';\r\n\r\n // 创建type显示div\r\n const typeLabel = document.createElement('div');\r\n typeLabel.setAttribute('data-layer', \"type\");\r\n typeLabel.className = 'type codigma-apiunit-send';\r\n typeLabel.textContent = 'Type:';\r\n\r\n // 创建select元素\r\n const selectElement: any = document.createElement('select');\r\n selectElement.name = 'text-select';\r\n selectElement.label = 'text-select';\r\n selectElement.setAttribute('data-layer', 'valueText');\r\n\r\n // 示例选项(可根据实际需求添加\r\n auths.forEach((auth: any) => {\r\n const option1 = document.createElement('option');\r\n option1.value = auth[\"type\"];\r\n option1.textContent = auth[\"type\"];\r\n selectElement.appendChild(option1);\r\n })\r\n\r\n // 添加选择事件监听\r\n selectElement.addEventListener('change', function (event: any) {\r\n //切换前先移除掉原来的元素\r\n authValues && Array.from(authValues.children).slice(1).forEach((el: any) => el.remove());\r\n const auth = auths[event.target.selectedIndex];\r\n let parameters = auth.parameters || [];\r\n const authRows = parameters.map((parameter: any) => createRow(parameter));\r\n authValues.append(...authRows);\r\n });\r\n // 组装DOM结构\r\n container.appendChild(typeLabel);\r\n container.appendChild(selectElement);\r\n return container;\r\n}\r\n\r\nfunction isPathOrQueryParam(param: any) {\r\n return param.in === 'path' || param.in === 'query';\r\n}\r\n\r\nfunction isHeaderParam(param: any) {\r\n return param.in === 'header';\r\n}\r\n\r\n/**\r\n * \r\n * \r\n * \r\n * const apiOperator = {\r\n method: method.toUpperCase(),\r\n url: path,\r\n rawApiInfo: null,\r\n requestBody: null\r\n }\r\n\r\n * @param {*} apiOperator\r\n * @param {*} apiInfo \r\n */\r\n\r\nfunction sendRequest(apiOperator: any, responseSectionRef: any) {\r\n // 防御性检查:确保传入了 responseSectionRef,避免后续调用 querySelector 时抛出错误\r\n if (!responseSectionRef) {\r\n console.error('sendRequest: missing responseSectionRef. Aborting request to avoid runtime errors.');\r\n return;\r\n }\r\n let reuqestUrl = getRequestUrl(apiOperator);\r\n const result = checkIfParameter(apiOperator);\r\n\r\n let header = result.hasRequestBody ? 'application/json' :\r\n (result.hasRequestFormData ? 'application/x-www-form-urlencoded' : 'application/json');\r\n let headers: any = {\r\n 'Content-Type': header\r\n }\r\n\r\n //TODO\r\n if (apiOperator.custom) {\r\n for (let index = 0; index < apiOperator.customHeaderparameters.length; index++) {\r\n const paras = apiOperator.customHeaderparameters[index];\r\n if (paras.name != '' && paras.value != '' && paras.name != null && paras.value != null) {\r\n headers[paras.name] = paras.value\r\n }\r\n }\r\n }\r\n\r\n let body = result.hasRequestBody ? apiOperator.requestBody :\r\n (result.hasRequestFormData ? getRequestFormData(apiOperator.rawApiInfo) : null);\r\n\r\n //TODO\r\n if (apiOperator.custom) {\r\n if (apiOperator.method.toUpperCase() == \"POST\" || apiOperator.method.toUpperCase() == \"PUT\") {\r\n body = apiOperator.requestBody;\r\n }\r\n }\r\n\r\n apiOperator.ifSendingRequest = true;\r\n const startTime = Date.now(); // 记录开始时间\r\n\r\n apiOperator.controller = new AbortController();\r\n const signal = apiOperator.controller.signal;\r\n\r\n //正在发送请求时创建遮罩层\r\n const overlayLayerContainer = createRequestOverlayLayer(apiOperator, responseSectionRef);\r\n\r\n // 使用 fetch 发送请求,并传递 signal \r\n fetch(reuqestUrl, {\r\n method: apiOperator.method.toUpperCase(),\r\n headers: headers,\r\n body: body != null ? JSON.stringify(body) : null,\r\n signal: signal\r\n })\r\n .then(response => {\r\n if (!response.ok) {\r\n apiOperator.response = {\r\n status: response.status,\r\n statusText: response.statusText\r\n }\r\n\r\n const endTime = Date.now(); // 即使在错误的情况下也记录结束时间 \r\n apiOperator.requestDuration = formatDuration(endTime - startTime);\r\n apiOperator.ifSendingRequest = false;\r\n // apiOperator.responseJsoneditor.value = \"\";\r\n throw new Error('Network response was not ok.');\r\n }\r\n const endTime = Date.now(); // 记录结束时间 \r\n apiOperator.requestDuration = formatDuration(endTime - startTime); // 计算耗时\r\n\r\n const responsebodyElement = responseSectionRef.querySelector('[data-layer=\"responsebody\"]');\r\n responsebodyElement.removeChild(overlayLayerContainer);\r\n\r\n apiOperator.ifSendingRequest = false;\r\n apiOperator.response = {\r\n status: response.status,\r\n statusText: response.statusText\r\n }\r\n\r\n // 在responseSectionRef元素范围内查找TimeStatus元素\r\n const timeStatusElement = responseSectionRef.querySelector('[data-layer=\"TimeStatus\"]');\r\n if (timeStatusElement) {\r\n updateTimeStatus(timeStatusElement, apiOperator);\r\n } else {\r\n console.log(\"在reqresponse范围内未找到TimeStatus元素\");\r\n }\r\n\r\n let responseClone = response.clone();\r\n return response.json() // 解析为json \r\n .catch(error => {\r\n // 如果解析 JSON 失败,则回退到文本解析\r\n return responseClone.text();\r\n });\r\n })\r\n .then(data => {\r\n apiOperator.gotResponse = true;\r\n const responsebodyElement = responseSectionRef.querySelector('[data-layer=\"responsebody\"]');\r\n // 此时 data 可能是 JSON 对象,也可能是文本字符串 \r\n if (typeof data === 'object') {\r\n // 假设 data 是 JSON 对象,你可以在这里处理它 \r\n console.log('Received JSON:', data);\r\n responsebodyElement.textContent = JSON.stringify(data, null, 4)\r\n } else {\r\n // 假设 data 是文本字符串,你可以在这里处理它 \r\n console.log('Received text:', data);\r\n responsebodyElement.textContent = data;\r\n }\r\n })\r\n .catch(error => {\r\n // 错误处理 \r\n console.error('There has been a problem with your fetch operation:', error);\r\n });\r\n}\r\n\r\nfunction updateTimeStatus(timeStatus: any, apiOperator: any) {\r\n timeStatus.textContent\r\n = `Status: ${apiOperator.response.status || \"\"} ${apiOperator.response.statusText || \"\"} Time: ${apiOperator.requestDuration || \"\"}`;\r\n}\r\n\r\nfunction createRequestOverlayLayer(apiOperator: any, responseSectionRef: any) {\r\n // 创建主容器 \r\n const container = document.createElement('div');\r\n Object.assign(container.style, {\r\n position: 'absolute',\r\n top: 0,\r\n width: '100%',\r\n height: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n backgroundColor: 'rgb(255, 255, 255)',\r\n opacity: 0.8\r\n });\r\n\r\n // 创建内容容器 \r\n const contentDiv = document.createElement('div');\r\n Object.assign(contentDiv.style, {\r\n display: 'flex',\r\n gap: '5px',\r\n alignItems: 'center',\r\n });\r\n\r\n // 创建文本div \r\n const textDiv = document.createElement('div');\r\n textDiv.textContent = 'Sending request...';\r\n\r\n // 创建取消按钮 \r\n const cancelBtn = document.createElement('button');\r\n cancelBtn.className = 'request-cancel-btn';\r\n Object.assign(cancelBtn.style, {\r\n border: '0px'\r\n });\r\n cancelBtn.textContent = 'Cancel';\r\n\r\n const responsebodyElement = responseSectionRef.querySelector('[data-layer=\"responsebody\"]');\r\n // 组装DOM结构 \r\n contentDiv.appendChild(textDiv);\r\n contentDiv.appendChild(cancelBtn);\r\n container.appendChild(contentDiv);\r\n responsebodyElement.appendChild(container);\r\n\r\n // 添加点击事件\r\n cancelBtn.addEventListener('click', (e) => {\r\n // 如果你想取消请求,调用 controller 的 abort 方法\r\n if (apiOperator.controller) {\r\n apiOperator.controller.abort();\r\n apiOperator.ifSendingRequest = false;\r\n container.style.display = 'none';\r\n responsebodyElement.removeChild(container);\r\n }\r\n });\r\n\r\n return container\r\n}\r\n\r\nfunction checkIfParameter(apiOperator: any) {\r\n let hasRequestBody = false;\r\n let hasRequestFormData = false;\r\n const parameters = apiOperator.rawApiInfo.parameters;\r\n if (parameters) {\r\n for (let index = 0; index < parameters.length; index++) {\r\n const parameter = parameters[index];\r\n if (parameter.in == \"query\" || parameter.in == \"path\") {\r\n } else if (parameter.in == \"body\") {\r\n hasRequestBody = true;\r\n parameter.name = parameter.name.charAt(0).toUpperCase() + parameter.name.slice(1);\r\n } else if (parameter.in == \"formData\") {\r\n hasRequestFormData = true;\r\n }\r\n }\r\n }\r\n\r\n //support openapi 3.0\r\n const requestBody = apiOperator.rawApiInfo.requestBody;\r\n if (requestBody) {\r\n hasRequestBody = true;\r\n }\r\n // 返回包含两个状态的对象\r\n return { hasRequestBody, hasRequestFormData };\r\n}\r\n\r\nfunction formatDuration(milliseconds: number) {\r\n let totalSeconds: string | number = Math.floor(milliseconds / 1000);\r\n let seconds: string | number = totalSeconds % 60;\r\n let minutes: string | number = Math.floor(totalSeconds / 60) % 60;\r\n let hours: string | number = Math.floor(totalSeconds / (60 * 60));\r\n\r\n // 毫秒部分 \r\n let millisecondsPart: string | number = Math.floor(milliseconds % 1000);\r\n // 毫秒不足三位时前面补0 \r\n millisecondsPart = millisecondsPart.toString().padStart(3, '0');\r\n\r\n // 时分秒不足两位时前面补0 \r\n hours = hours.toString().padStart(2, '0');\r\n minutes = minutes.toString().padStart(2, '0');\r\n seconds = seconds.toString().padStart(2, '0');\r\n\r\n // 返回格式化的字符串 \r\n return `${hours}h${minutes}m${seconds}s${millisecondsPart}ms`;\r\n}\r\n\r\nfunction getRequestUrl(apiOperator: any) {\r\n let reuqestUrl = apiOperator.url;\r\n\r\n const requestParameters = apiOperator.rawApiInfo.parameters || [];\r\n if (requestParameters == null) {\r\n return reuqestUrl;\r\n }\r\n\r\n for (const element of requestParameters) {\r\n if (element.in == \"path\") {\r\n reuqestUrl = reuqestUrl.replace(\"{\" + element.name + \"}\", element.value);\r\n }\r\n }\r\n\r\n let queryParams = getQueryParams(apiOperator, requestParameters);\r\n reuqestUrl = queryParams.length > 0 ? (reuqestUrl + \"?\" + queryParams.join(\"&\")) : reuqestUrl;\r\n\r\n return reuqestUrl;\r\n}\r\n\r\nfunction getQueryParams(apiOperator: any, requestParameters: any) {\r\n let queryParams = [];\r\n for (const element of requestParameters) {\r\n if (element.in == \"query\") {\r\n if (element.type == \"array\" || (element.schema != null && element.schema.type == 'array')) {\r\n if (element.value != null) {\r\n for (let index = 0; index < element.value.length; index++) {\r\n queryParams.push(element.name + \"=\" + element.value[index].value);\r\n }\r\n }\r\n } else {\r\n queryParams.push(element.name + \"=\" + element.value);\r\n }\r\n }\r\n }\r\n\r\n if (apiOperator.custom) {\r\n for (let index = 0; index < apiOperator.customQueryparameters.length; index++) {\r\n const paras = apiOperator.customQueryparameters[index];\r\n if (paras.name != '' && paras.value != '' && paras.name != null && paras.value != null) {\r\n queryParams.push(paras.name + \"=\" + paras.value)\r\n }\r\n }\r\n }\r\n\r\n return queryParams;\r\n}\r\n\r\nfunction getRequestFormData(rawApiInfo: any) {\r\n let formData = '';\r\n const requestParameters = rawApiInfo.parameters;\r\n if (requestParameters == null) {\r\n return \"\";\r\n }\r\n\r\n let first = 0;\r\n for (const element of requestParameters) {\r\n if (element.in == \"formData\") {\r\n if (first == 0) {\r\n formData = element.name + \"=\" + element.value;\r\n } else {\r\n formData = formData + \"&\" + element.name + \"=\" + element.value;\r\n }\r\n first++;\r\n }\r\n }\r\n return formData;\r\n}\r\n\r\n\r\nfunction createSvg() {\r\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\r\n svg.setAttribute('width', '21');\r\n svg.setAttribute('height', '22');\r\n svg.setAttribute('viewBox', '0 0 21 22');\r\n svg.setAttribute('fill', 'none');\r\n svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\r\n\r\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\r\n path.setAttribute('d', 'M5.5 8.5L10.5 13.5L15.5 8.5');\r\n path.setAttribute('stroke', 'var(--Labels---Vibrant---Controls-Primary--, #404040)');\r\n path.setAttribute('stroke-width', '2');\r\n path.setAttribute('stroke-linecap', 'round');\r\n path.setAttribute('stroke-linejoin', 'round');\r\n\r\n svg.appendChild(path);\r\n return svg;\r\n}\r\n\r\nfunction parseParaModel(parameterObj: any, dataDef: any) {\r\n let bodyModel;\r\n if (parameterObj && parameterObj.schema) {\r\n if (parameterObj.schema['$ref']) { // 对象类型\r\n bodyModel = parseModel(parameterObj.schema['$ref'], dataDef);\r\n } else if (parameterObj.schema['type'] == 'array') { // 数组类型\r\n const itemObj = parameterObj.schema['items'];\r\n if (itemObj['$ref']) {\r\n bodyModel = parseModel(itemObj['$ref'], dataDef);\r\n } else if (itemObj['type']) {\r\n bodyModel = parseElement(itemObj);\r\n }\r\n bodyModel = [bodyModel];\r\n }\r\n }\r\n\r\n return bodyModel;\r\n}\r\n\r\nfunction parseModel(modelDef: any, apiDef: any) {\r\n const model: any = {};\r\n const bodyName = modelDef.substring(modelDef.lastIndexOf('/') + 1);\r\n const def = apiDef[bodyName];\r\n const props = def['properties'];\r\n if (props) {\r\n for (const key in props) {\r\n if (Object.prototype.hasOwnProperty.call(props, key)) {\r\n const element = props[key];\r\n if (element.hasOwnProperty('items') && element['type'] == 'array') {\r\n if (element[\"items\"]['$ref']) {\r\n model[key] = [parseModel(element[\"items\"]['$ref'], apiDef)]\r\n } else if (element[\"items\"]['type']) {\r\n model[key] = [parseElement(element[\"items\"])];\r\n }\r\n } else if (element.hasOwnProperty('$ref')) {\r\n model[key] = parseModel(element['$ref'], apiDef)\r\n } else {\r\n if (element['type']) {\r\n model[key] = parseElement(element);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return model;\r\n}\r\n\r\nfunction parseElement(element: any) {\r\n let elementValue;\r\n if (element['type'].includes('integer')) {\r\n elementValue = 0;\r\n } else if (element['type'].includes('boolean')) {\r\n elementValue = false;\r\n } else if (element['type'].includes('string')) {\r\n if (element['enum']) {\r\n elementValue = element['enum'][0];\r\n } else {\r\n elementValue = '';\r\n }\r\n }\r\n\r\n if (element['example']) {\r\n elementValue = element['example'];\r\n }\r\n\r\n return elementValue;\r\n}\r\n\r\nconst HTTP_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const;\r\ntype HttpMethod = typeof HTTP_METHODS[number]; // 等价于你的 HttpMethods 的值类型\r\n\r\nfunction isHttpMethod(method: string): method is HttpMethod {\r\n return (HTTP_METHODS as readonly string[]).includes(method);\r\n}\r\n\r\n// 解析OpenAPI规范并构建API操作列表\r\nfunction parseOpenAPI(openapiSpec: OpenAPIV3CustomDoc) {\r\n const apiOperatorList: any = [];\r\n\r\n const pathEntries: [string, OpenAPIV3.PathItemObject | undefined][] = [];\r\n for (const path in openapiSpec.paths) {\r\n if (Object.prototype.hasOwnProperty.call(openapiSpec.paths, path)) {\r\n pathEntries.push([path, openapiSpec.paths[path]]);\r\n }\r\n }\r\n // 遍历所有路径\r\n pathEntries.forEach(([path, pathItem]) => {\r\n const pathItemEntries: [string, OpenAPIV3.OperationObject][] = [];\r\n for (const method in pathItem) {\r\n if (Object.prototype.hasOwnProperty.call(pathItem, method)) {\r\n // 关键:将 method 断言为合法的 key\r\n if (isHttpMethod(method)) {\r\n const operation = pathItem[method as keyof typeof pathItem];\r\n if (operation != null && typeof operation === 'object' && !('$ref' in operation)) {\r\n // 此时可以安全认为是 OperationObject(因为 method key 不会对应 $ref/parameters)\r\n pathItemEntries.push([method, operation as OpenAPIV3.OperationObject]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 遍历路径下的所有方法\r\n pathItemEntries.forEach(([method, operation]) => {\r\n // 初始化当前API操作对象\r\n const apiOperator: any = {\r\n method: method.toUpperCase(),\r\n url: path,\r\n rawApiInfo: null,\r\n requestBody: null,\r\n response: {},\r\n auths: [\r\n {\r\n type: \"No Auth\"\r\n },\r\n {\r\n type: \"Basic Auth\",\r\n parameters: [\r\n {\r\n name: \"userName\",\r\n value: \"\"\r\n },\r\n {\r\n name: \"password\",\r\n value: \"\"\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n\r\n if (operation) {\r\n // requestBody\r\n // support openapi 2.0\r\n if (operation.parameters) {\r\n const parameter = operation.parameters.filter((val: any) => val.in == 'body');\r\n if (parameter && parameter.length > 0) {\r\n // let requestBody = parseParaModel(parameter[0], data['definitions']);\r\n // apiOperator.requestBody = requestBody;\r\n }\r\n }\r\n\r\n //support openapi 3.0\r\n if (operation.requestBody) {\r\n const requestBodyObject = operation.requestBody as OpenAPIV3.RequestBodyObject //目前只支持对象类型 TODO 引用类型待支持\r\n const content = requestBodyObject.content;\r\n for (const key in content) {\r\n if (Object.prototype.hasOwnProperty.call(content, key)) {\r\n const element: OpenAPIV3.MediaTypeObject = content[key];\r\n if (element) {\r\n let requestBody = parseParaModel(element, openapiSpec[\"components\"]![\"schemas\"]);\r\n apiOperator.requestBody = requestBody;\r\n }\r\n }\r\n }\r\n }\r\n\r\n apiOperator.rawApiInfo = operation;\r\n // 添加到结果列表\r\n apiOperatorList.push(apiOperator);\r\n }\r\n\r\n });\r\n });\r\n\r\n return apiOperatorList;\r\n}\r\n\r\nfunction countOpenAPI(openapiSpec: OpenAPIV3CustomDoc) {\r\n let apiCount = 0;\r\n const pathEntries: [string, OpenAPIV3.PathItemObject | undefined][] = [];\r\n for (const path in openapiSpec.paths) {\r\n if (Object.prototype.hasOwnProperty.call(openapiSpec.paths, path)) {\r\n pathEntries.push([path, openapiSpec.paths[path]]);\r\n }\r\n }\r\n\r\n // 遍历所有路径\r\n pathEntries.forEach(([path, pathItem]) => {\r\n const pathItemEntries: [string, OpenAPIV3.OperationObject][] = [];\r\n for (const method in pathItem) {\r\n if (Object.prototype.hasOwnProperty.call(pathItem, method)) {\r\n // 关键:将 method 断言为合法的 key\r\n if (isHttpMethod(method)) {\r\n const operation = pathItem[method as keyof typeof pathItem];\r\n if (operation != null && typeof operation === 'object' && !('$ref' in operation)) {\r\n // 此时可以安全认为是 OperationObject(因为 method key 不会对应 $ref/parameters)\r\n pathItemEntries.push([method, operation as OpenAPIV3.OperationObject]);\r\n }\r\n }\r\n }\r\n }\r\n // 遍历路径下的所有方法\r\n pathItemEntries.forEach(([method, operation]) => {\r\n apiCount = apiCount + 1;\r\n });\r\n });\r\n\r\n return apiCount;\r\n}\r\n"],"mappings":";AACO,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","names":["endTime"]}
1
+ {"version":3,"sources":["../src/inlined-styles.ts","../src/api-render-ui.ts"],"sourcesContent":["// Auto-generated by inline-styles.mjs\nexport const GLOBAL_STYLES = `.codigma-apioperatorlist {\r\n align-items: flex-start;\r\n background: white;\r\n display: inline-flex;\r\n flex-direction: column;\r\n gap: 5px;\r\n height: 100%;\r\n justify-content: flex-start;\r\n width: 100%\r\n}\r\n.codigma-apioperator {\r\n align-items: center;\r\n align-self: stretch;\r\n display: inline-flex;\r\n gap: 10px;\r\n /* border-radius: 8px; */\r\n height: 32px;\r\n justify-content: flex-start\r\n}\r\n.codigma-apioperator:nth-child(even) {\r\n background-color: rgb(235, 239, 244);\r\n}\r\n.codigma-apioperator:nth-child(odd) {\r\n background-color: rgb(250, 246, 246);\r\n}\r\n\r\n.codigma-apioperator:hover {\r\n cursor: pointer;\r\n}\r\n.codigma-apioperator:active {\r\n background: rgb(206, 216, 231);\r\n}\r\n.codigma-method {\r\n align-items: center;\r\n display: flex;\r\n gap: 5px;\r\n justify-content: center;\r\n width: 64px\r\n}\r\n.codigma-methodtype {\r\n align-items: center;\r\n display: flex;\r\n gap: 10px;\r\n justify-content: center\r\n}\r\n.codigma-get {\r\n color: var(--Labels---Vibrant---Controls-Primary-√, #404040);\r\n word-wrap: break-word\r\n}\r\n.codigma-requrl {\r\n color: black;\r\n flex: 1 1 0;\r\n word-wrap: break-word\r\n}\r\n/**********************apiunit css style*************************/\r\n.codigma-apiunit {\r\n align-items: flex-start;\r\n background: white;\r\n box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);\r\n display: inline-flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n height: 100%;\r\n justify-content: flex-start;\r\n width: 100%\r\n}\r\n.codigma-apiunit-apioperator {\r\n align-items: center;\r\n align-self: stretch;\r\n border-bottom: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n border-top: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n display: inline-flex;\r\n gap: 10px;\r\n height: 48px;\r\n justify-content: flex-start\r\n}\r\n.codigma-apiunit-method {\r\n align-items: center;\r\n display: flex;\r\n gap: 5px;\r\n height: 48px;\r\n justify-content: center;\r\n width: 100px\r\n}\r\n.codigma-apiunit-methodtype {\r\n align-items: center;\r\n display: flex;\r\n gap: 10px;\r\n justify-content: center\r\n}\r\n.codigma-apiunit-post {\r\n color: var(--Labels---Vibrant---Controls-Primary-√, #404040);\r\n word-wrap: break-word\r\n}\r\n.codigma-apiunit-requrl {\r\n color: black;\r\n flex: 1 1 0;\r\n word-wrap: break-word;\r\n border-left: 0;\r\n border-right: 0;\r\n border-top: 0;\r\n border-bottom: 1px solid black;\r\n}\r\n.codigma-apiunit-send-button {\r\n align-items: center;\r\n display: flex;\r\n gap: 10px;\r\n height: 32px;\r\n justify-content: center;\r\n width: 88px\r\n}\r\n.codigma-apiunit-send {\r\n color: black;\r\n word-wrap: break-word\r\n}\r\n.codigma-apiunit-send-button:hover {\r\n cursor: pointer;\r\n}\r\n.codigma-apiunit-send-button:active {\r\n background-color: gray;\r\n}\r\n\r\n.codigma-apiunit-reqcontent {\r\n align-items: flex-start;\r\n align-self: stretch;\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1 1 0;\r\n gap: 5px;\r\n justify-content: flex-start;\r\n padding-left: 5px;\r\n}\r\n.codigma-apiunit-paramters-section {\r\n align-items: center;\r\n align-self: stretch;\r\n display: inline-flex;\r\n flex: 1 1 0;\r\n justify-content: flex-start\r\n}\r\n.codigma-apiunit-parameters-cnr {\r\n align-items: center;\r\n background: white;\r\n display: flex;\r\n height: 42px;\r\n justify-content: space-between;\r\n width: 122px\r\n}\r\n.codigma-apiunit-parakeyvalues {\r\n align-items: flex-start;\r\n align-self: stretch;\r\n background: white;\r\n display: inline-flex;\r\n flex-direction: column;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start;\r\n overflow: hidden;\r\n padding: 10px\r\n}\r\n.codigma-apiunit-keyvalue {\r\n align-items: center;\r\n display: inline-flex;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start\r\n}\r\n.codigma-apiunit-valuetext {\r\n align-self: stretch;\r\n background: white;\r\n border-left: 0;\r\n border-right: 0;\r\n border-top: 0;\r\n border-bottom: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n padding: 10px;\r\n width: 161px\r\n}\r\n/* .codigma-apiunit-keyvalue {\r\n align-items: center;\r\n display: inline-flex;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start;\r\n width: 211px\r\n} */\r\n.codigma-apiunit-request-body-section {\r\n align-items: center;\r\n align-self: stretch;\r\n display: inline-flex;\r\n height: 114px;\r\n justify-content: flex-start;\r\n padding-right: 5px\r\n}\r\n.codigma-apiunit-parakeyvalues {\r\n align-items: flex-start;\r\n align-self: stretch;\r\n background: white;\r\n display: flex;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start;\r\n outline-offset: -1px;\r\n outline: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n overflow: hidden;\r\n padding: 10px\r\n}\r\n.codigma-apiunit-reqresponse {\r\n align-items: flex-start;\r\n align-self: stretch;\r\n background: white;\r\n border-top: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1 1 0;\r\n gap: 10px;\r\n justify-content: flex-start;\r\n padding-left: 5px;\r\n padding-right: 5px\r\n}\r\n.codigma-apiunit-responsedesc {\r\n align-items: center;\r\n align-self: stretch;\r\n display: inline-flex;\r\n justify-content: space-between;\r\n padding-right: 32px\r\n}\r\n.codigma-apiunit-responsetitle {\r\n align-items: center;\r\n border-bottom: 1px var(--Labels---Vibrant---Controls-Primary-√, #404040) solid;\r\n display: flex;\r\n height: 42px;\r\n justify-content: space-between;\r\n width: 122px\r\n}\r\n.codigma-apiunit-response-cnr {\r\n align-items: center;\r\n align-self: stretch;\r\n background: white;\r\n display: flex;\r\n justify-content: space-between;\r\n padding-top: 2px;\r\n width: 122px\r\n}\r\n.codigma-apiunit-responsebody {\r\n position: relative;\r\n align-self: stretch;\r\n flex: 1 1 0;\r\n min-height: 5rem;\r\n /* padding: 2px */\r\n}`;\n","import { GLOBAL_STYLES } from './inlined-styles';\r\nimport { OpenAPIV3 } from 'openapi-types';\r\n\r\ntype OpenAPIV3CustomDoc = OpenAPIV3.Document & { swagger: string }\r\n\r\nexport class ApiRenderer {\r\n options: any;\r\n container: any;\r\n constructor(options: any) {\r\n this.options = Object.assign({\r\n mountPoint: document?.body, // 默认挂载到body\r\n className: 'Apioperatorlist codigma-apioperatorlist',\r\n layerName: 'apioperatorlist'\r\n }, options);\r\n\r\n this.container = null;\r\n }\r\n\r\n render(apiSpec: OpenAPIV3CustomDoc, renderUnit: boolean = false) {\r\n\r\n const appendInlineStyle = (text: string) => {\r\n // 动态创建 <style> 标签并插入全局样式\r\n const styleEl = document.createElement('style');\r\n styleEl.textContent = text;\r\n document.head.appendChild(styleEl);\r\n };\r\n // 使用\r\n appendInlineStyle(GLOBAL_STYLES);\r\n\r\n // 存储原始元素与对应新元素的映射\r\n const elementMap = new Map();\r\n\r\n // 获取实际挂载点\r\n const mountElement = typeof this.options.mountPoint === 'string' ?\r\n document.querySelector(this.options.mountPoint) :\r\n this.options.mountPoint;\r\n\r\n if (!mountElement) {\r\n throw new Error('Invalid mount point specified');\r\n }\r\n\r\n if ((apiSpec[\"openapi\"] && apiSpec[\"openapi\"].startsWith(\"3.\"))\r\n || (apiSpec[\"swagger\"] && apiSpec[\"swagger\"].startsWith(\"2.\"))) {\r\n const countApi = countOpenAPI(apiSpec);\r\n const apiOperatorList = parseOpenAPI(apiSpec);\r\n // console.log('解析结果:', apiOperatorList);\r\n if (countApi == 1 && renderUnit) {\r\n // If the count of api <=1, create the api unit only. \r\n // 创建根容器\r\n this.container = createApiUnit(apiOperatorList[0]);\r\n } else {\r\n // 创建主容器\r\n this.container = document.createElement('div');\r\n this.container.setAttribute('data-layer', this.options.layerName);\r\n this.container.className = this.options.className;\r\n\r\n // 生成内容\r\n apiOperatorList.forEach((apiOperator: any) => {\r\n const reqOperator = document.createElement('div');\r\n reqOperator.setAttribute('data-layer', 'apioperator');\r\n reqOperator.className = 'Apioperator codigma-apioperator';\r\n\r\n // 创建method部分\r\n const methodContainer = document.createElement('div');\r\n methodContainer.setAttribute('data-layer', 'method');\r\n methodContainer.className = 'Method codigma-method';\r\n\r\n const methodType = document.createElement('div');\r\n methodType.setAttribute('data-layer', 'methodtype');\r\n methodType.className = 'Methodtype codigma-methodtype';\r\n\r\n const methodValue = document.createElement('div');\r\n methodValue.setAttribute('data-layer', apiOperator.method.toLowerCase());\r\n methodValue.className = `${apiOperator.method} codigma-${apiOperator.method.toLowerCase()}`;\r\n methodValue.textContent = apiOperator.method;\r\n\r\n methodType.appendChild(methodValue);\r\n methodContainer.appendChild(methodType);\r\n reqOperator.appendChild(methodContainer);\r\n\r\n // 创建URL部分\r\n const urlElement = document.createElement('div');\r\n urlElement.setAttribute('data-layer', 'requrl');\r\n urlElement.className = 'Requrl codigma-requrl';\r\n urlElement.textContent = apiOperator.url;\r\n reqOperator.appendChild(urlElement);\r\n\r\n this.container.appendChild(reqOperator);\r\n\r\n // 添加点击事件\r\n reqOperator.addEventListener('click', renderApiUnit(apiOperator, this.container, elementMap));\r\n });\r\n }\r\n } else {\r\n // 初始化当前API操作对象\r\n const apiOperator = {\r\n method: \"get\",\r\n url: \"/full/info\",\r\n rawApiInfo: null,\r\n requestBody: null,\r\n response: {},\r\n auths: [\r\n {\r\n type: \"No Auth\"\r\n },\r\n {\r\n type: \"Basic Auth\",\r\n parameters: [\r\n {\r\n name: \"userName\",\r\n value: \"\"\r\n },\r\n {\r\n name: \"password\",\r\n value: \"\"\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n // 创建根容器\r\n this.container = createApiUnit(apiSpec);\r\n }\r\n\r\n // 清空挂载点并插入新内容\r\n mountElement.innerHTML = '';\r\n mountElement.appendChild(this.container);\r\n\r\n\r\n }\r\n}\r\n\r\n\r\n\r\nfunction renderApiUnit(apiOperator: any, containerRef: any, elementMap: any) {\r\n return function (evt: any) {\r\n console.log('点击的API操作:');\r\n console.log('方法:', apiOperator.method);\r\n console.log('URL:', apiOperator.url);\r\n console.log('------------------------');\r\n\r\n const currentTarget = evt.currentTarget;\r\n // 检查是否已存在对应的新元素\r\n if (elementMap.has(currentTarget)) {\r\n const newElement = elementMap.get(currentTarget);\r\n newElement.remove(); // 移除新元素\r\n elementMap.delete(currentTarget); // 清除映射\r\n return;\r\n }\r\n\r\n // 创建根容器\r\n const apiContainer = createApiUnit(apiOperator);\r\n\r\n // 添加到文档\r\n // 插入到当前元素后面\r\n if (currentTarget.nextSibling) {\r\n containerRef.insertBefore(apiContainer, currentTarget.nextSibling);\r\n } else {\r\n containerRef.appendChild(apiContainer);\r\n }\r\n\r\n // 存储映射关系\r\n elementMap.set(currentTarget, apiContainer);\r\n }\r\n}\r\n\r\nfunction createApiUnit(apiOperator: any) {\r\n const apiContainer = document.createElement('div');\r\n apiContainer.setAttribute('data-layer', 'apiunit');\r\n apiContainer.className = 'Requnit codigma-apiunit';\r\n // 预先创建响应部分并挂载到 apiOperator,保证后面创建的 send 按钮能访问到\r\n const responseSection = createSectionResponse(apiOperator);\r\n apiOperator._responseSectionRef = responseSection;\r\n\r\n // 请求操作区\r\n const reqOperator = createReqOperator(apiOperator);\r\n apiContainer.appendChild(reqOperator);\r\n // 请求内容区\r\n const reqContent = document.createElement('div');\r\n reqContent.setAttribute('data-layer', 'reqcontent');\r\n reqContent.className = 'Reqcontent codigma-apiunit-reqcontent';\r\n // 参数部分\r\n const paramSection = createParamSection(apiOperator);\r\n // 头部部分\r\n const headerSection = createSectionHeader(apiOperator);\r\n // 授权部分\r\n const authSection = createSectionAuth(apiOperator);\r\n // 请求体部分\r\n const bodySection = createSectionRequestBody(apiOperator.requestBody);\r\n\r\n reqContent.append(paramSection, headerSection, authSection, bodySection);\r\n apiContainer.appendChild(reqContent);\r\n // 响应部分(已经预创建,直接附加)\r\n apiContainer.appendChild(responseSection);\r\n return apiContainer;\r\n}\r\n\r\nfunction createReqOperator(apiOperator: any) {\r\n const reqOperator = document.createElement('div');\r\n reqOperator.setAttribute('data-layer', 'apioperator');\r\n reqOperator.className = 'Reqoperator codigma-apiunit-apioperator';\r\n // 方法类型\r\n const methodType = document.createElement('div');\r\n methodType.setAttribute('data-layer', 'method');\r\n methodType.className = 'Method codigma-apiunit-method';\r\n const methodTypeInner = document.createElement('div');\r\n methodTypeInner.setAttribute('data-layer', 'methodtype');\r\n methodTypeInner.className = 'Methodtype codigma-apiunit-methodtype';\r\n methodTypeInner.textContent = apiOperator.method.toUpperCase();\r\n methodType.appendChild(methodTypeInner);\r\n // 方法选项图标 - 使用内联SVG\r\n const methodOpt = document.createElement('div');\r\n methodOpt.setAttribute('data-svg-wrapper', '');\r\n methodOpt.setAttribute('data-layer', 'methodopt');\r\n methodOpt.className = 'Methodopt';\r\n\r\n // 创建内联SVG\r\n const svg = createSvg();\r\n methodOpt.appendChild(svg);\r\n methodType.appendChild(methodOpt);\r\n reqOperator.appendChild(methodType);\r\n // 请求URL\r\n const reqUrl = createInputElement();\r\n reqUrl.setAttribute('data-layer', 'requrl');\r\n reqUrl.className = 'Requrl codigma-apiunit-requrl';\r\n reqUrl.value = apiOperator.url; // 绑定初始值\r\n // 可选:添加输入事件监听(根据需求)\r\n reqUrl.addEventListener('input', (e: any) => {\r\n console.log('当前值:', e.target.value);\r\n // 这里可以添加保存逻辑(如更新状态/发送请求\r\n apiOperator.url = e.target.value\r\n });\r\n reqOperator.appendChild(reqUrl);\r\n // 发送按钮\r\n const sendButton = document.createElement('div');\r\n sendButton.setAttribute('data-layer', 'send-button');\r\n sendButton.className = 'SendButton codigma-apiunit-send-button';\r\n const sendText = document.createElement('div');\r\n sendText.setAttribute('data-layer', 'Send');\r\n sendText.className = 'Send codigma-apiunit-send';\r\n sendText.textContent = 'Send';\r\n sendButton.appendChild(sendText);\r\n\r\n sendButton.addEventListener('click', (e: any) => {\r\n console.log('当前值:', e.target.value);\r\n // 这里可以添加保存逻辑(如更新状态/发送请求\r\n // responseSectionRef 在渲染时会被挂载到 apiOperator._responseSectionRef 上\r\n const respRef = apiOperator._responseSectionRef || null;\r\n sendRequest(apiOperator, respRef);\r\n });\r\n\r\n reqOperator.appendChild(sendButton);\r\n return reqOperator;\r\n}\r\n\r\nfunction createParamSection(apiOperator: any) {\r\n const paramSection = document.createElement('div');\r\n paramSection.setAttribute('data-layer', 'paramters-section');\r\n paramSection.className = 'codigma-apiunit-paramters-section';\r\n // 参数容器头\r\n const paramCnr = document.createElement('div');\r\n paramCnr.setAttribute('data-layer', 'parameters-cnr');\r\n paramCnr.className = 'codigma-apiunit-parameters-cnr';\r\n const paramText = document.createElement('div');\r\n paramText.setAttribute('data-layer', 'parameters');\r\n paramText.className = 'codigma-apiunit-send';\r\n paramText.textContent = 'Parameters';\r\n paramCnr.appendChild(paramText);\r\n paramSection.appendChild(paramCnr);\r\n // 参数键值对\r\n const paramValues = document.createElement('div');\r\n paramValues.setAttribute('data-layer', 'paraKeyValues');\r\n paramValues.className = 'Parakeyvalues codigma-apiunit-parakeyvalues';\r\n let parameters = apiOperator.rawApiInfo.parameters || [];\r\n const parameterRows = parameters.filter((parameter: any) => isPathOrQueryParam(parameter))\r\n .map((parameter: any) => createRow(parameter));\r\n paramValues.append(...parameterRows);\r\n paramSection.append(paramCnr, paramValues);\r\n return paramSection;\r\n}\r\n\r\nfunction createSectionHeader(apiOperator: any) {\r\n const headerSection = document.createElement('div');\r\n headerSection.setAttribute('data-layer', 'headers-section');\r\n headerSection.className = 'codigma-apiunit-paramters-section';\r\n // 头部容器头\r\n const headerCnr = document.createElement('div');\r\n headerCnr.setAttribute('data-layer', 'headers-cnr');\r\n headerCnr.className = 'codigma-apiunit-parameters-cnr';\r\n const headerText = document.createElement('div');\r\n headerText.setAttribute('data-layer', 'headers');\r\n headerText.className = 'codigma-apiunit-send';\r\n headerText.textContent = 'Headers';\r\n headerCnr.appendChild(headerText);\r\n headerSection.appendChild(headerCnr);\r\n // 头部键值对\r\n const headerValues = document.createElement('div');\r\n headerValues.setAttribute('data-layer', 'paraKeyValues');\r\n headerValues.className = 'Parakeyvalues codigma-apiunit-parakeyvalues';\r\n let parameters = apiOperator.rawApiInfo.parameters || [];\r\n const headerRows = parameters.filter((parameter: any) => isHeaderParam(parameter))\r\n .map((parameter: any) => createRow(parameter));\r\n headerValues.append(...headerRows);\r\n headerSection.append(headerCnr, headerValues);\r\n return headerSection;\r\n}\r\n\r\nfunction createSectionAuth(apiOperator: any) {\r\n const authSection = document.createElement('div');\r\n authSection.setAttribute('data-layer', 'authorization-section');\r\n authSection.className = 'AuthorizationSection codigma-apiunit-paramters-section';\r\n // 授权容器头\r\n const authCnr = document.createElement('div');\r\n authCnr.setAttribute('data-layer', 'authorization-cnr');\r\n authCnr.className = 'AuthorizationCnr codigma-apiunit-parameters-cnr';\r\n const authText = document.createElement('div');\r\n authText.setAttribute('data-layer', 'authorization');\r\n authText.className = 'Authorization codigma-apiunit-send';\r\n authText.textContent = 'Authorization';\r\n authCnr.appendChild(authText);\r\n authSection.appendChild(authCnr);\r\n // 授权键值对\r\n const authValues = document.createElement('div');\r\n authValues.setAttribute('data-layer', 'paraKeyValues');\r\n authValues.className = 'Parakeyvalues codigma-apiunit-parakeyvalues';\r\n\r\n let auths = apiOperator.auths || []\r\n const authTypeRow = createSelectRow(auths, authValues)\r\n if (auths.length > 0) {\r\n let parameters = apiOperator.auths[0].parameters || [];\r\n const authRows = parameters.map((parameter: any) => createRow(parameter));\r\n authValues.append(authTypeRow, ...authRows);\r\n }\r\n\r\n authSection.append(authCnr, authValues);\r\n return authSection;\r\n}\r\n\r\nfunction createSectionRequestBody(requestBody: any) {\r\n const bodySection = document.createElement('div');\r\n bodySection.setAttribute('data-layer', 'request-body-section');\r\n bodySection.className = 'RequestBodySection codigma-apiunit-request-body-section';\r\n // 请求体容器头\r\n const bodyCnr = document.createElement('div');\r\n bodyCnr.setAttribute('data-layer', 'body-cnr');\r\n bodyCnr.className = 'BodyCnr codigma-apiunit-parameters-cnr';\r\n const bodyText = document.createElement('div');\r\n bodyText.setAttribute('data-layer', 'body');\r\n bodyText.className = 'Body codigma-apiunit-send';\r\n bodyText.textContent = 'Body';\r\n bodyCnr.appendChild(bodyText);\r\n bodySection.appendChild(bodyCnr);\r\n // 请求体内容\r\n const bodyValue = document.createElement('textarea');\r\n bodyValue.setAttribute('data-layer', 'bodyTextValue');\r\n bodyValue.className = 'Id0CategoryId0NameNamePhotourlsTagsId0NameStatusAvailable codigma-apiunit-parakeyvalues';\r\n bodyValue.value = JSON.stringify(requestBody);\r\n bodySection.appendChild(bodyValue);\r\n return bodySection;\r\n}\r\n\r\nfunction createSectionResponse(apiOperator: any) {\r\n const responseSection = document.createElement('div');\r\n responseSection.setAttribute('data-layer', 'reqresponse');\r\n responseSection.className = 'Reqresponse codigma-apiunit-reqresponse';\r\n // 响应描述\r\n const responseDesc = document.createElement('div');\r\n responseDesc.setAttribute('data-layer', 'responsedesc');\r\n responseDesc.className = 'Responsedesc codigma-apiunit-responsedesc';\r\n // 响应标题\r\n const responseTitle = document.createElement('div');\r\n responseTitle.setAttribute('data-layer', 'responsetitle');\r\n responseTitle.className = 'Responsetitle codigma-apiunit-responsetitle';\r\n const responseCnr = document.createElement('div');\r\n responseCnr.setAttribute('data-layer', 'response-cnr');\r\n responseCnr.className = 'ResponseCnr codigma-apiunit-response-cnr';\r\n const responseText = document.createElement('div');\r\n responseText.setAttribute('data-layer', 'response');\r\n responseText.className = 'Response codigma-apiunit-send';\r\n responseText.textContent = 'Response';\r\n responseCnr.appendChild(responseText);\r\n responseTitle.appendChild(responseCnr);\r\n const timeStatusElement = createTimeStatusElement(apiOperator);\r\n responseDesc.append(responseTitle, timeStatusElement);\r\n // 响应体\r\n const responseBody = document.createElement('div');\r\n responseBody.setAttribute('data-layer', 'responsebody');\r\n responseBody.className = 'Responsebody codigma-apiunit-responsebody';\r\n responseSection.append(responseDesc, responseBody);\r\n return responseSection;\r\n}\r\n\r\nfunction createTimeStatusElement(apiOperator: any) {\r\n const timeStatus = document.createElement('div');\r\n timeStatus.setAttribute('data-layer', 'TimeStatus');\r\n timeStatus.className = 'TimeStatus0 codigma-apiunit-send';\r\n updateTimeStatus(timeStatus, apiOperator);\r\n return timeStatus;\r\n}\r\n\r\nfunction createRow(parameter: any) {\r\n const petIdRow = document.createElement('div');\r\n petIdRow.setAttribute('data-layer', 'keyValue');\r\n petIdRow.className = 'Keyvalue codigma-apiunit-keyvalue';\r\n const petIdLabel = document.createElement('div');\r\n petIdLabel.setAttribute('data-layer', parameter[\"name\"]);\r\n petIdLabel.className = parameter[\"name\"] + ' codigma-apiunit-send';\r\n petIdLabel.textContent = parameter[\"name\"] + ':';\r\n const petIdValue = createInputElement();\r\n petIdValue.setAttribute('data-layer', 'valueText');\r\n petIdValue.className = 'Valuetext codigma-apiunit-valuetext';\r\n petIdValue.value = parameter[\"value\"] || \"\";\r\n\r\n // 可选:添加输入事件监听(根据需求)\r\n petIdValue.addEventListener('input', (e: any) => {\r\n console.log('当前值:', e.target.value);\r\n // 这里可以添加保存逻辑(如更新状态/发送请求\r\n parameter[\"value\"] = e.target.value\r\n });\r\n petIdRow.append(petIdLabel, petIdValue);\r\n return petIdRow;\r\n}\r\n\r\nfunction createInputElement() {\r\n const inputText = document.createElement('input');\r\n inputText.setAttribute('type', 'text');\r\n inputText.setAttribute('name', 'text-input');\r\n inputText.setAttribute('label', 'text-input');\r\n inputText.setAttribute('autocomplete', 'off');\r\n return inputText;\r\n}\r\n\r\nfunction createSelectRow(auths: any, authValues: any) {\r\n // 创建外层容器div\r\n const container = document.createElement('div');\r\n container.setAttribute('data-layer', 'keyValue');\r\n container.className = 'Keyvalue codigma-apiunit-keyvalue';\r\n\r\n // 创建type显示div\r\n const typeLabel = document.createElement('div');\r\n typeLabel.setAttribute('data-layer', \"type\");\r\n typeLabel.className = 'type codigma-apiunit-send';\r\n typeLabel.textContent = 'Type:';\r\n\r\n // 创建select元素\r\n const selectElement: any = document.createElement('select');\r\n selectElement.name = 'text-select';\r\n selectElement.label = 'text-select';\r\n selectElement.setAttribute('data-layer', 'valueText');\r\n\r\n // 示例选项(可根据实际需求添加\r\n auths.forEach((auth: any) => {\r\n const option1 = document.createElement('option');\r\n option1.value = auth[\"type\"];\r\n option1.textContent = auth[\"type\"];\r\n selectElement.appendChild(option1);\r\n })\r\n\r\n // 添加选择事件监听\r\n selectElement.addEventListener('change', function (event: any) {\r\n //切换前先移除掉原来的元素\r\n authValues && Array.from(authValues.children).slice(1).forEach((el: any) => el.remove());\r\n const auth = auths[event.target.selectedIndex];\r\n let parameters = auth.parameters || [];\r\n const authRows = parameters.map((parameter: any) => createRow(parameter));\r\n authValues.append(...authRows);\r\n });\r\n // 组装DOM结构\r\n container.appendChild(typeLabel);\r\n container.appendChild(selectElement);\r\n return container;\r\n}\r\n\r\nfunction isPathOrQueryParam(param: any) {\r\n return param.in === 'path' || param.in === 'query';\r\n}\r\n\r\nfunction isHeaderParam(param: any) {\r\n return param.in === 'header';\r\n}\r\n\r\n/**\r\n * \r\n * \r\n * \r\n * const apiOperator = {\r\n method: method.toUpperCase(),\r\n url: path,\r\n rawApiInfo: null,\r\n requestBody: null\r\n }\r\n\r\n * @param {*} apiOperator\r\n * @param {*} apiInfo \r\n */\r\n\r\nfunction sendRequest(apiOperator: any, responseSectionRef: any) {\r\n // 防御性检查:确保传入了 responseSectionRef,避免后续调用 querySelector 时抛出错误\r\n if (!responseSectionRef) {\r\n console.error('sendRequest: missing responseSectionRef. Aborting request to avoid runtime errors.');\r\n return;\r\n }\r\n let reuqestUrl = getRequestUrl(apiOperator);\r\n const result = checkIfParameter(apiOperator);\r\n\r\n let header = result.hasRequestBody ? 'application/json' :\r\n (result.hasRequestFormData ? 'application/x-www-form-urlencoded' : 'application/json');\r\n let headers: any = {\r\n 'Content-Type': header\r\n }\r\n\r\n //TODO\r\n if (apiOperator.custom) {\r\n for (let index = 0; index < apiOperator.customHeaderparameters.length; index++) {\r\n const paras = apiOperator.customHeaderparameters[index];\r\n if (paras.name != '' && paras.value != '' && paras.name != null && paras.value != null) {\r\n headers[paras.name] = paras.value\r\n }\r\n }\r\n }\r\n\r\n let body = result.hasRequestBody ? apiOperator.requestBody :\r\n (result.hasRequestFormData ? getRequestFormData(apiOperator.rawApiInfo) : null);\r\n\r\n //TODO\r\n if (apiOperator.custom) {\r\n if (apiOperator.method.toUpperCase() == \"POST\" || apiOperator.method.toUpperCase() == \"PUT\") {\r\n body = apiOperator.requestBody;\r\n }\r\n }\r\n\r\n apiOperator.ifSendingRequest = true;\r\n const startTime = Date.now(); // 记录开始时间\r\n\r\n apiOperator.controller = new AbortController();\r\n const signal = apiOperator.controller.signal;\r\n\r\n //正在发送请求时创建遮罩层\r\n const overlayLayerContainer = createRequestOverlayLayer(apiOperator, responseSectionRef);\r\n\r\n // 使用 fetch 发送请求,并传递 signal \r\n fetch(reuqestUrl, {\r\n method: apiOperator.method.toUpperCase(),\r\n headers: headers,\r\n body: body != null ? JSON.stringify(body) : null,\r\n signal: signal\r\n })\r\n .then(response => {\r\n if (!response.ok) {\r\n apiOperator.response = {\r\n status: response.status,\r\n statusText: response.statusText\r\n }\r\n\r\n const endTime = Date.now(); // 即使在错误的情况下也记录结束时间 \r\n apiOperator.requestDuration = formatDuration(endTime - startTime);\r\n apiOperator.ifSendingRequest = false;\r\n // apiOperator.responseJsoneditor.value = \"\";\r\n throw new Error('Network response was not ok.');\r\n }\r\n const endTime = Date.now(); // 记录结束时间 \r\n apiOperator.requestDuration = formatDuration(endTime - startTime); // 计算耗时\r\n\r\n const responsebodyElement = responseSectionRef.querySelector('[data-layer=\"responsebody\"]');\r\n responsebodyElement.removeChild(overlayLayerContainer);\r\n\r\n apiOperator.ifSendingRequest = false;\r\n apiOperator.response = {\r\n status: response.status,\r\n statusText: response.statusText\r\n }\r\n\r\n // 在responseSectionRef元素范围内查找TimeStatus元素\r\n const timeStatusElement = responseSectionRef.querySelector('[data-layer=\"TimeStatus\"]');\r\n if (timeStatusElement) {\r\n updateTimeStatus(timeStatusElement, apiOperator);\r\n } else {\r\n console.log(\"在reqresponse范围内未找到TimeStatus元素\");\r\n }\r\n\r\n let responseClone = response.clone();\r\n return response.json() // 解析为json \r\n .catch(error => {\r\n // 如果解析 JSON 失败,则回退到文本解析\r\n return responseClone.text();\r\n });\r\n })\r\n .then(data => {\r\n apiOperator.gotResponse = true;\r\n const responsebodyElement = responseSectionRef.querySelector('[data-layer=\"responsebody\"]');\r\n // 此时 data 可能是 JSON 对象,也可能是文本字符串 \r\n if (typeof data === 'object') {\r\n // 假设 data 是 JSON 对象,你可以在这里处理它 \r\n console.log('Received JSON:', data);\r\n responsebodyElement.textContent = JSON.stringify(data, null, 4)\r\n } else {\r\n // 假设 data 是文本字符串,你可以在这里处理它 \r\n console.log('Received text:', data);\r\n responsebodyElement.textContent = data;\r\n }\r\n })\r\n .catch(error => {\r\n // 错误处理 \r\n console.error('There has been a problem with your fetch operation:', error);\r\n });\r\n}\r\n\r\nfunction updateTimeStatus(timeStatus: any, apiOperator: any) {\r\n timeStatus.textContent\r\n = `Status: ${apiOperator.response.status || \"\"} ${apiOperator.response.statusText || \"\"} Time: ${apiOperator.requestDuration || \"\"}`;\r\n}\r\n\r\nfunction createRequestOverlayLayer(apiOperator: any, responseSectionRef: any) {\r\n // 创建主容器 \r\n const container = document.createElement('div');\r\n Object.assign(container.style, {\r\n position: 'absolute',\r\n top: 0,\r\n width: '100%',\r\n height: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n backgroundColor: 'rgb(255, 255, 255)',\r\n opacity: 0.8\r\n });\r\n\r\n // 创建内容容器 \r\n const contentDiv = document.createElement('div');\r\n Object.assign(contentDiv.style, {\r\n display: 'flex',\r\n gap: '5px',\r\n alignItems: 'center',\r\n });\r\n\r\n // 创建文本div \r\n const textDiv = document.createElement('div');\r\n textDiv.textContent = 'Sending request...';\r\n\r\n // 创建取消按钮 \r\n const cancelBtn = document.createElement('button');\r\n cancelBtn.className = 'request-cancel-btn';\r\n Object.assign(cancelBtn.style, {\r\n border: '0px'\r\n });\r\n cancelBtn.textContent = 'Cancel';\r\n\r\n const responsebodyElement = responseSectionRef.querySelector('[data-layer=\"responsebody\"]');\r\n // 组装DOM结构 \r\n contentDiv.appendChild(textDiv);\r\n contentDiv.appendChild(cancelBtn);\r\n container.appendChild(contentDiv);\r\n responsebodyElement.appendChild(container);\r\n\r\n // 添加点击事件\r\n cancelBtn.addEventListener('click', (e) => {\r\n // 如果你想取消请求,调用 controller 的 abort 方法\r\n if (apiOperator.controller) {\r\n apiOperator.controller.abort();\r\n apiOperator.ifSendingRequest = false;\r\n container.style.display = 'none';\r\n responsebodyElement.removeChild(container);\r\n }\r\n });\r\n\r\n return container\r\n}\r\n\r\nfunction checkIfParameter(apiOperator: any) {\r\n let hasRequestBody = false;\r\n let hasRequestFormData = false;\r\n const parameters = apiOperator.rawApiInfo.parameters;\r\n if (parameters) {\r\n for (let index = 0; index < parameters.length; index++) {\r\n const parameter = parameters[index];\r\n if (parameter.in == \"query\" || parameter.in == \"path\") {\r\n } else if (parameter.in == \"body\") {\r\n hasRequestBody = true;\r\n parameter.name = parameter.name.charAt(0).toUpperCase() + parameter.name.slice(1);\r\n } else if (parameter.in == \"formData\") {\r\n hasRequestFormData = true;\r\n }\r\n }\r\n }\r\n\r\n //support openapi 3.0\r\n const requestBody = apiOperator.rawApiInfo.requestBody;\r\n if (requestBody) {\r\n hasRequestBody = true;\r\n }\r\n // 返回包含两个状态的对象\r\n return { hasRequestBody, hasRequestFormData };\r\n}\r\n\r\nfunction formatDuration(milliseconds: number) {\r\n let totalSeconds: string | number = Math.floor(milliseconds / 1000);\r\n let seconds: string | number = totalSeconds % 60;\r\n let minutes: string | number = Math.floor(totalSeconds / 60) % 60;\r\n let hours: string | number = Math.floor(totalSeconds / (60 * 60));\r\n\r\n // 毫秒部分 \r\n let millisecondsPart: string | number = Math.floor(milliseconds % 1000);\r\n // 毫秒不足三位时前面补0 \r\n millisecondsPart = millisecondsPart.toString().padStart(3, '0');\r\n\r\n // 时分秒不足两位时前面补0 \r\n hours = hours.toString().padStart(2, '0');\r\n minutes = minutes.toString().padStart(2, '0');\r\n seconds = seconds.toString().padStart(2, '0');\r\n\r\n // 返回格式化的字符串 \r\n return `${hours}h${minutes}m${seconds}s${millisecondsPart}ms`;\r\n}\r\n\r\nfunction getRequestUrl(apiOperator: any) {\r\n let reuqestUrl = apiOperator.url;\r\n\r\n const requestParameters = apiOperator.rawApiInfo.parameters || [];\r\n if (requestParameters == null) {\r\n return reuqestUrl;\r\n }\r\n\r\n for (const element of requestParameters) {\r\n if (element.in == \"path\") {\r\n reuqestUrl = reuqestUrl.replace(\"{\" + element.name + \"}\", element.value);\r\n }\r\n }\r\n\r\n let queryParams = getQueryParams(apiOperator, requestParameters);\r\n reuqestUrl = queryParams.length > 0 ? (reuqestUrl + \"?\" + queryParams.join(\"&\")) : reuqestUrl;\r\n\r\n return reuqestUrl;\r\n}\r\n\r\nfunction getQueryParams(apiOperator: any, requestParameters: any) {\r\n let queryParams = [];\r\n for (const element of requestParameters) {\r\n if (element.in == \"query\") {\r\n if (element.type == \"array\" || (element.schema != null && element.schema.type == 'array')) {\r\n if (element.value != null) {\r\n for (let index = 0; index < element.value.length; index++) {\r\n queryParams.push(element.name + \"=\" + element.value[index].value);\r\n }\r\n }\r\n } else {\r\n queryParams.push(element.name + \"=\" + element.value);\r\n }\r\n }\r\n }\r\n\r\n if (apiOperator.custom) {\r\n for (let index = 0; index < apiOperator.customQueryparameters.length; index++) {\r\n const paras = apiOperator.customQueryparameters[index];\r\n if (paras.name != '' && paras.value != '' && paras.name != null && paras.value != null) {\r\n queryParams.push(paras.name + \"=\" + paras.value)\r\n }\r\n }\r\n }\r\n\r\n return queryParams;\r\n}\r\n\r\nfunction getRequestFormData(rawApiInfo: any) {\r\n let formData = '';\r\n const requestParameters = rawApiInfo.parameters;\r\n if (requestParameters == null) {\r\n return \"\";\r\n }\r\n\r\n let first = 0;\r\n for (const element of requestParameters) {\r\n if (element.in == \"formData\") {\r\n if (first == 0) {\r\n formData = element.name + \"=\" + element.value;\r\n } else {\r\n formData = formData + \"&\" + element.name + \"=\" + element.value;\r\n }\r\n first++;\r\n }\r\n }\r\n return formData;\r\n}\r\n\r\n\r\nfunction createSvg() {\r\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\r\n svg.setAttribute('width', '21');\r\n svg.setAttribute('height', '22');\r\n svg.setAttribute('viewBox', '0 0 21 22');\r\n svg.setAttribute('fill', 'none');\r\n svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\r\n\r\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\r\n path.setAttribute('d', 'M5.5 8.5L10.5 13.5L15.5 8.5');\r\n path.setAttribute('stroke', 'var(--Labels---Vibrant---Controls-Primary--, #404040)');\r\n path.setAttribute('stroke-width', '2');\r\n path.setAttribute('stroke-linecap', 'round');\r\n path.setAttribute('stroke-linejoin', 'round');\r\n\r\n svg.appendChild(path);\r\n return svg;\r\n}\r\n\r\nfunction parseParaModel(parameterObj: any, dataDef: any) {\r\n let bodyModel;\r\n if (parameterObj && parameterObj.schema) {\r\n if (parameterObj.schema['$ref']) { // 对象类型\r\n bodyModel = parseModel(parameterObj.schema['$ref'], dataDef);\r\n } else if (parameterObj.schema['type'] == 'array') { // 数组类型\r\n const itemObj = parameterObj.schema['items'];\r\n if (itemObj['$ref']) {\r\n bodyModel = parseModel(itemObj['$ref'], dataDef);\r\n } else if (itemObj['type']) {\r\n bodyModel = parseElement(itemObj);\r\n }\r\n bodyModel = [bodyModel];\r\n }\r\n }\r\n\r\n return bodyModel;\r\n}\r\n\r\nfunction parseModel(modelDef: any, apiDef: any) {\r\n const model: any = {};\r\n const bodyName = modelDef.substring(modelDef.lastIndexOf('/') + 1);\r\n const def = apiDef[bodyName];\r\n const props = def['properties'];\r\n if (props) {\r\n for (const key in props) {\r\n if (Object.prototype.hasOwnProperty.call(props, key)) {\r\n const element = props[key];\r\n if (element.hasOwnProperty('items') && element['type'] == 'array') {\r\n if (element[\"items\"]['$ref']) {\r\n model[key] = [parseModel(element[\"items\"]['$ref'], apiDef)]\r\n } else if (element[\"items\"]['type']) {\r\n model[key] = [parseElement(element[\"items\"])];\r\n }\r\n } else if (element.hasOwnProperty('$ref')) {\r\n model[key] = parseModel(element['$ref'], apiDef)\r\n } else {\r\n if (element['type']) {\r\n model[key] = parseElement(element);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return model;\r\n}\r\n\r\nfunction parseElement(element: any) {\r\n let elementValue;\r\n if (element['type'].includes('integer')) {\r\n elementValue = 0;\r\n } else if (element['type'].includes('boolean')) {\r\n elementValue = false;\r\n } else if (element['type'].includes('string')) {\r\n if (element['enum']) {\r\n elementValue = element['enum'][0];\r\n } else {\r\n elementValue = '';\r\n }\r\n }\r\n\r\n if (element['example']) {\r\n elementValue = element['example'];\r\n }\r\n\r\n return elementValue;\r\n}\r\n\r\nconst HTTP_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const;\r\ntype HttpMethod = typeof HTTP_METHODS[number]; // 等价于你的 HttpMethods 的值类型\r\n\r\nfunction isHttpMethod(method: string): method is HttpMethod {\r\n return (HTTP_METHODS as readonly string[]).includes(method);\r\n}\r\n\r\n// 解析OpenAPI规范并构建API操作列表\r\nfunction parseOpenAPI(openapiSpec: OpenAPIV3CustomDoc) {\r\n const apiOperatorList: any = [];\r\n\r\n const pathEntries: [string, OpenAPIV3.PathItemObject | undefined][] = [];\r\n for (const path in openapiSpec.paths) {\r\n if (Object.prototype.hasOwnProperty.call(openapiSpec.paths, path)) {\r\n pathEntries.push([path, openapiSpec.paths[path]]);\r\n }\r\n }\r\n // 遍历所有路径\r\n pathEntries.forEach(([path, pathItem]) => {\r\n const pathItemEntries: [string, OpenAPIV3.OperationObject][] = [];\r\n for (const method in pathItem) {\r\n if (Object.prototype.hasOwnProperty.call(pathItem, method)) {\r\n // 关键:将 method 断言为合法的 key\r\n if (isHttpMethod(method)) {\r\n const operation = pathItem[method as keyof typeof pathItem];\r\n if (operation != null && typeof operation === 'object' && !('$ref' in operation)) {\r\n // 此时可以安全认为是 OperationObject(因为 method key 不会对应 $ref/parameters)\r\n pathItemEntries.push([method, operation as OpenAPIV3.OperationObject]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 遍历路径下的所有方法\r\n pathItemEntries.forEach(([method, operation]) => {\r\n // 初始化当前API操作对象\r\n const apiOperator: any = {\r\n method: method.toUpperCase(),\r\n url: path,\r\n rawApiInfo: null,\r\n requestBody: null,\r\n response: {},\r\n auths: [\r\n {\r\n type: \"No Auth\"\r\n },\r\n {\r\n type: \"Basic Auth\",\r\n parameters: [\r\n {\r\n name: \"userName\",\r\n value: \"\"\r\n },\r\n {\r\n name: \"password\",\r\n value: \"\"\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n\r\n if (operation) {\r\n // requestBody\r\n // support openapi 2.0\r\n if (operation.parameters) {\r\n const parameter = operation.parameters.filter((val: any) => val.in == 'body');\r\n if (parameter && parameter.length > 0) {\r\n // let requestBody = parseParaModel(parameter[0], data['definitions']);\r\n // apiOperator.requestBody = requestBody;\r\n }\r\n }\r\n\r\n //support openapi 3.0\r\n if (operation.requestBody) {\r\n const requestBodyObject = operation.requestBody as OpenAPIV3.RequestBodyObject //目前只支持对象类型 TODO 引用类型待支持\r\n const content = requestBodyObject.content;\r\n for (const key in content) {\r\n if (Object.prototype.hasOwnProperty.call(content, key)) {\r\n const element: OpenAPIV3.MediaTypeObject = content[key];\r\n if (element) {\r\n let requestBody = parseParaModel(element, openapiSpec[\"components\"]![\"schemas\"]);\r\n apiOperator.requestBody = requestBody;\r\n }\r\n }\r\n }\r\n }\r\n\r\n apiOperator.rawApiInfo = operation;\r\n // 添加到结果列表\r\n apiOperatorList.push(apiOperator);\r\n }\r\n\r\n });\r\n });\r\n\r\n return apiOperatorList;\r\n}\r\n\r\nfunction countOpenAPI(openapiSpec: OpenAPIV3CustomDoc) {\r\n let apiCount = 0;\r\n const pathEntries: [string, OpenAPIV3.PathItemObject | undefined][] = [];\r\n for (const path in openapiSpec.paths) {\r\n if (Object.prototype.hasOwnProperty.call(openapiSpec.paths, path)) {\r\n pathEntries.push([path, openapiSpec.paths[path]]);\r\n }\r\n }\r\n\r\n // 遍历所有路径\r\n pathEntries.forEach(([path, pathItem]) => {\r\n const pathItemEntries: [string, OpenAPIV3.OperationObject][] = [];\r\n for (const method in pathItem) {\r\n if (Object.prototype.hasOwnProperty.call(pathItem, method)) {\r\n // 关键:将 method 断言为合法的 key\r\n if (isHttpMethod(method)) {\r\n const operation = pathItem[method as keyof typeof pathItem];\r\n if (operation != null && typeof operation === 'object' && !('$ref' in operation)) {\r\n // 此时可以安全认为是 OperationObject(因为 method key 不会对应 $ref/parameters)\r\n pathItemEntries.push([method, operation as OpenAPIV3.OperationObject]);\r\n }\r\n }\r\n }\r\n }\r\n // 遍历路径下的所有方法\r\n pathItemEntries.forEach(([method, operation]) => {\r\n apiCount = apiCount + 1;\r\n });\r\n });\r\n\r\n return apiCount;\r\n}\r\n"],"mappings":";AACO,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","names":["endTime"]}
@@ -7,7 +7,7 @@
7
7
  <title>Document</title>
8
8
  </head>
9
9
 
10
- <body>
10
+ <body style="font-size: 75%;">
11
11
  <div id="notebook" style="overflow-y: auto;align-self: stretch;align-items: center;flex: 1 1 0;"></div>
12
12
  <script type="module">
13
13
  import { ApiRenderer } from "../dist/index.js"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "api-render-ui",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "api-render-ui is a UI library that pursues simple and efficient data rendering for openapi.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -42,5 +42,16 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "openapi-types": "^12.1.3"
45
- }
45
+ },
46
+ "files": [
47
+ "dist",
48
+ "example",
49
+ "scripts",
50
+ "src",
51
+ "Readme.md",
52
+ "package.json",
53
+ "tsconfig.json",
54
+ "tsup.config.ts",
55
+ "LICENSE"
56
+ ]
46
57
  }
@@ -11,20 +11,29 @@
11
11
  .codigma-apioperator {
12
12
  align-items: center;
13
13
  align-self: stretch;
14
- background: #F0F1F4;
15
14
  display: inline-flex;
16
15
  gap: 10px;
17
- height: 48px;
16
+ /* border-radius: 8px; */
17
+ height: 32px;
18
18
  justify-content: flex-start
19
19
  }
20
+ .codigma-apioperator:nth-child(even) {
21
+ background-color: rgb(235, 239, 244);
22
+ }
23
+ .codigma-apioperator:nth-child(odd) {
24
+ background-color: rgb(250, 246, 246);
25
+ }
26
+
20
27
  .codigma-apioperator:hover {
21
28
  cursor: pointer;
22
29
  }
30
+ .codigma-apioperator:active {
31
+ background: rgb(206, 216, 231);
32
+ }
23
33
  .codigma-method {
24
34
  align-items: center;
25
35
  display: flex;
26
36
  gap: 5px;
27
- height: 48px;
28
37
  justify-content: center;
29
38
  width: 64px
30
39
  }
@@ -36,17 +45,11 @@
36
45
  }
37
46
  .codigma-get {
38
47
  color: var(--Labels---Vibrant---Controls-Primary-√, #404040);
39
- font-family: Inter;
40
- font-size: 16px;
41
- font-weight: 400;
42
48
  word-wrap: break-word
43
49
  }
44
50
  .codigma-requrl {
45
51
  color: black;
46
52
  flex: 1 1 0;
47
- font-family: Inter;
48
- font-size: 16px;
49
- font-weight: 400;
50
53
  word-wrap: break-word
51
54
  }
52
55
  /**********************apiunit css style*************************/
@@ -87,17 +90,11 @@
87
90
  }
88
91
  .codigma-apiunit-post {
89
92
  color: var(--Labels---Vibrant---Controls-Primary-√, #404040);
90
- font-family: Inter;
91
- font-size: 16px;
92
- font-weight: 400;
93
93
  word-wrap: break-word
94
94
  }
95
95
  .codigma-apiunit-requrl {
96
96
  color: black;
97
97
  flex: 1 1 0;
98
- font-family: Inter;
99
- font-size: 16px;
100
- font-weight: 400;
101
98
  word-wrap: break-word;
102
99
  border-left: 0;
103
100
  border-right: 0;
@@ -114,9 +111,6 @@
114
111
  }
115
112
  .codigma-apiunit-send {
116
113
  color: black;
117
- font-family: Inter;
118
- font-size: 16px;
119
- font-weight: 400;
120
114
  word-wrap: break-word
121
115
  }
122
116
  .codigma-apiunit-send-button:hover {
@@ -43,7 +43,7 @@ export class ApiRenderer {
43
43
  || (apiSpec["swagger"] && apiSpec["swagger"].startsWith("2."))) {
44
44
  const countApi = countOpenAPI(apiSpec);
45
45
  const apiOperatorList = parseOpenAPI(apiSpec);
46
- console.log('解析结果:', apiOperatorList);
46
+ // console.log('解析结果:', apiOperatorList);
47
47
  if (countApi == 1 && renderUnit) {
48
48
  // If the count of api <=1, create the api unit only.
49
49
  // 创建根容器
@@ -125,6 +125,8 @@ export class ApiRenderer {
125
125
  // 清空挂载点并插入新内容
126
126
  mountElement.innerHTML = '';
127
127
  mountElement.appendChild(this.container);
128
+
129
+
128
130
  }
129
131
  }
130
132
 
@@ -12,20 +12,29 @@ export const GLOBAL_STYLES = `.codigma-apioperatorlist {
12
12
  .codigma-apioperator {
13
13
  align-items: center;
14
14
  align-self: stretch;
15
- background: #F0F1F4;
16
15
  display: inline-flex;
17
16
  gap: 10px;
18
- height: 48px;
17
+ /* border-radius: 8px; */
18
+ height: 32px;
19
19
  justify-content: flex-start
20
20
  }
21
+ .codigma-apioperator:nth-child(even) {
22
+ background-color: rgb(235, 239, 244);
23
+ }
24
+ .codigma-apioperator:nth-child(odd) {
25
+ background-color: rgb(250, 246, 246);
26
+ }
27
+
21
28
  .codigma-apioperator:hover {
22
29
  cursor: pointer;
23
30
  }
31
+ .codigma-apioperator:active {
32
+ background: rgb(206, 216, 231);
33
+ }
24
34
  .codigma-method {
25
35
  align-items: center;
26
36
  display: flex;
27
37
  gap: 5px;
28
- height: 48px;
29
38
  justify-content: center;
30
39
  width: 64px
31
40
  }
@@ -37,17 +46,11 @@ export const GLOBAL_STYLES = `.codigma-apioperatorlist {
37
46
  }
38
47
  .codigma-get {
39
48
  color: var(--Labels---Vibrant---Controls-Primary-√, #404040);
40
- font-family: Inter;
41
- font-size: 16px;
42
- font-weight: 400;
43
49
  word-wrap: break-word
44
50
  }
45
51
  .codigma-requrl {
46
52
  color: black;
47
53
  flex: 1 1 0;
48
- font-family: Inter;
49
- font-size: 16px;
50
- font-weight: 400;
51
54
  word-wrap: break-word
52
55
  }
53
56
  /**********************apiunit css style*************************/
@@ -88,17 +91,11 @@ export const GLOBAL_STYLES = `.codigma-apioperatorlist {
88
91
  }
89
92
  .codigma-apiunit-post {
90
93
  color: var(--Labels---Vibrant---Controls-Primary-√, #404040);
91
- font-family: Inter;
92
- font-size: 16px;
93
- font-weight: 400;
94
94
  word-wrap: break-word
95
95
  }
96
96
  .codigma-apiunit-requrl {
97
97
  color: black;
98
98
  flex: 1 1 0;
99
- font-family: Inter;
100
- font-size: 16px;
101
- font-weight: 400;
102
99
  word-wrap: break-word;
103
100
  border-left: 0;
104
101
  border-right: 0;
@@ -115,9 +112,6 @@ export const GLOBAL_STYLES = `.codigma-apioperatorlist {
115
112
  }
116
113
  .codigma-apiunit-send {
117
114
  color: black;
118
- font-family: Inter;
119
- font-size: 16px;
120
- font-weight: 400;
121
115
  word-wrap: break-word
122
116
  }
123
117
  .codigma-apiunit-send-button:hover {