From 924196b629976434ed68966c24f143bcff1c3eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=98=84=EC=84=B1=ED=95=84?= Date: Fri, 19 Jan 2024 21:10:57 +0900 Subject: [PATCH] =?UTF-8?q?PropertyTable=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ApiTestManager/package-lock.json | 10 + ApiTestManager/package.json | 3 +- ApiTestManager/src/APIScenario.js | 13 +- ApiTestManager/src/APIScenarioExecutor.js | 10 +- ApiTestManager/src/APITester.js | 217 +++---- .../src/components/EditableInput.js | 199 ++++--- .../src/components/EditableInput.js.old | 130 ----- .../src/components/PropertyTable.js | 226 ++++++++ ApiTestManager/src/index.js | 8 +- ApiTestManager/webpack.config.js | 30 +- .../plugins/apitestmanager/app.bundle.js | 541 +++++++++++++++++- .../apitestmanager/css.worker.bundle.js | 2 +- .../apitestmanager/editor.worker.bundle.js | 2 +- .../apitestmanager/html.worker.bundle.js | 2 +- .../apitestmanager/json.worker.bundle.js | 2 +- ..._vs_basic-languages_html_html_js.bundle.js | 2 +- ...basic-languages_liquid_liquid_js.bundle.js | 2 +- ...sm_vs_basic-languages_mdx_mdx_js.bundle.js | 2 +- ...basic-languages_python_python_js.bundle.js | 2 +- ...nguages_typescript_typescript_js.bundle.js | 2 +- ...sm_vs_basic-languages_xml_xml_js.bundle.js | 2 +- ..._vs_basic-languages_yaml_yaml_js.bundle.js | 2 +- .../apitestmanager/ts.worker.bundle.js | 2 +- ...uages_freemarker2_freemarker2_js.bundle.js | 2 +- ...nguages_handlebars_handlebars_js.bundle.js | 2 +- ...nguages_javascript_javascript_js.bundle.js | 2 +- ...s_basic-languages_razor_razor_js.bundle.js | 2 +- ...r_esm_vs_language_css_cssMode_js.bundle.js | 2 +- ...esm_vs_language_html_htmlMode_js.bundle.js | 2 +- ...esm_vs_language_json_jsonMode_js.bundle.js | 2 +- ...vs_language_typescript_tsMode_js.bundle.js | 2 +- .../resources/templates/fragment/head.html | 2 +- .../templates/page/tester/apiTester.html | 6 +- 33 files changed, 1067 insertions(+), 368 deletions(-) delete mode 100644 ApiTestManager/src/components/EditableInput.js.old create mode 100644 ApiTestManager/src/components/PropertyTable.js diff --git a/ApiTestManager/package-lock.json b/ApiTestManager/package-lock.json index f04ffab..ead3678 100644 --- a/ApiTestManager/package-lock.json +++ b/ApiTestManager/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "@popperjs/core": "^2.11.8", "drawflow": "^0.0.59", "jqueryui": "^1.11.1", "monaco-editor": "^0.45.0", @@ -1796,6 +1797,15 @@ "node": ">=14" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", diff --git a/ApiTestManager/package.json b/ApiTestManager/package.json index 8fd0c36..a43b56f 100644 --- a/ApiTestManager/package.json +++ b/ApiTestManager/package.json @@ -8,7 +8,7 @@ "build": "webpack", "test": "echo \"Error: no test specified\" && exit 1", "clean": "rimraf ./dist", - "deploy": "cp ./dist/* ../src/main/resources/static/plugins/apitestmanager/" + "deploy": "cp -r ./dist/* ../src/main/resources/static/plugins/apitestmanager/" }, "author": "", "license": "ISC", @@ -27,6 +27,7 @@ "webpack-dev-server": "^4.15.1" }, "dependencies": { + "@popperjs/core": "^2.11.8", "drawflow": "^0.0.59", "jqueryui": "^1.11.1", "monaco-editor": "^0.45.0", diff --git a/ApiTestManager/src/APIScenario.js b/ApiTestManager/src/APIScenario.js index cee4a52..6a284e8 100644 --- a/ApiTestManager/src/APIScenario.js +++ b/ApiTestManager/src/APIScenario.js @@ -13,7 +13,6 @@ class APIScenario { } init() { - console.log('init'); this.loadScenarioList(); this.outputEditor = monaco.editor.create(document.getElementById('output'), { value: '', @@ -27,15 +26,9 @@ class APIScenario { this.editor.reroute_fix_curvature = true; this.editor.force_first_input = true; this.editor.start(); - this.editor.on('contextmenu', (event)=> { - console.log(event); - console.log('contextmenu'); - //get class of target node - - console.log(event.target.id); - let node = this.editor.getNodeFromId(event.target.id); - console.log(node); - }) + // this.editor.on('contextmenu', (event) => { + // let node = this.editor.getNodeFromId(event.target.id); + // }) this.showOutput = true; } diff --git a/ApiTestManager/src/APIScenarioExecutor.js b/ApiTestManager/src/APIScenarioExecutor.js index 261736a..dd23f8c 100644 --- a/ApiTestManager/src/APIScenarioExecutor.js +++ b/ApiTestManager/src/APIScenarioExecutor.js @@ -65,7 +65,7 @@ class APIScenarioExecutor { if (currentNode.class === 'api') { let model = JSON.parse(JSON.stringify(this.apiTester.getApiRequestModel(currentNode.data.id))); model.responseModel = {}; - this.appendLog(`Executing API [${model.name}]`); + this.appendLog(`===============================================================\nExecuting API [${model.name}]`); this.apiClient.sendAPIRequest(model, this.logHttpRequest.bind(this)) .then(response => { this.isRunning = false; @@ -84,7 +84,7 @@ class APIScenarioExecutor { this.appendLog(error.message); reject(error); }); - console.log(`Executing API request for node: ${currentNode.id} - ${currentNode.name}`); + console.log(`===============================================================\nExecuting API request for node: ${currentNode.id} - ${currentNode.name}`); } else if (currentNode.class === 'start') { this.appendLog('Starting API scenario\n'); nodeElement.classList.add('result-success'); @@ -102,7 +102,7 @@ class APIScenarioExecutor { appendLog(text) { var range = new monaco.Range(this.outputEditor.getModel().getLineCount(), 1, this.outputEditor.getModel().getLineCount(), 1); var id = {major: 1, minor: 1}; - var op = {identifier: id, range: range, text: text + '\n', forceMoveMarkers: true}; + var op = {identifier: id, range: range, text: text + '\n\n', forceMoveMarkers: true}; this.outputEditor.executeEdits("my-source", [op]); } @@ -113,14 +113,14 @@ class APIScenarioExecutor { } logHttpResponse(response) { - let log = `[Response]\nHTTP/1.1 ${response.status}\n[Response Headers]\n${this.parseHeaders(response.headers)}\n[Response Body]\n${response.body}`; + let log = `[Response]\nHTTP/1.1 ${response.status}\n[Response Headers]\n${this.parseHeaders(response.headers)}\n[Response Body]\n${response.body}\n`; this.appendLog(log); } parseRequestHeaders(headers) { let parsedHeaders = ''; headers.forEach(header => { - if (header.enabled){ + if (header.enabled) { parsedHeaders += `${header.key}: ${header.value}\n`; } }); diff --git a/ApiTestManager/src/APITester.js b/ApiTestManager/src/APITester.js index 175e0de..e58e685 100644 --- a/ApiTestManager/src/APITester.js +++ b/ApiTestManager/src/APITester.js @@ -1,6 +1,8 @@ import * as monaco from 'monaco-editor'; import APIClient from './APIClient'; import EditableInput from './components/EditableInput'; +import {createPopper} from "@popperjs/core/lib/popper-lite"; +import PropertyTable from "./components/PropertyTable"; class APITester { @@ -20,7 +22,8 @@ class APITester { this.postRequestEditors = []; this.apiClient = new APIClient(); - console.log('test'); + this.popperContent = document.getElementById('popperContent'); + this.popperInstance = null; } renderServers(selectedServer) { @@ -67,7 +70,8 @@ class APITester { -
+
+
@@ -105,23 +109,9 @@ class APITester {
-
- - - - - - - - - - - ${this.renderParams(apiRequest.queryParams)} - -
#이름 - -
+
+
+
@@ -150,13 +140,22 @@ class APITester {
-
-
+
+
+
+
+
+
+
-
+
+
+
+
+
+
@@ -203,26 +202,6 @@ class APITester { `; } - queryParamTemplate(queryParam, index) { - return ` - - -
- -
- - - - - - - - - - - - `; - } headerTemplate(header, index) { return ` @@ -308,8 +287,6 @@ class APITester { const events = [ {selector: '.btn_add_header', action: this.addHeader.bind(this)}, {selector: '.btn_remove_header', action: this.removeHeader.bind(this)}, - {selector: '.btn_add_query', action: this.addQueryParam.bind(this)}, - {selector: '.btn_remove_query', action: this.removeQueryParam.bind(this)}, {selector: '.send', action: this.handleSendAPIRequest.bind(this)}, {selector: '.save', action: this.saveAPIRequest.bind(this)}, {selector: '.save_collection', action: this.addCollection.bind(this)}, @@ -332,10 +309,6 @@ class APITester { $(document).on('click', event.selector, event.action); } - $(document).on('input', '.query_params input', this.handleUIUpdate.bind(this)); - $(document).on('input', '.query_params input', this.buildPath.bind(this)); - $(document).on('change', '.query_params input', this.handleUIUpdate.bind(this)); - $(document).on('change', '.query_params input', this.buildPath.bind(this)); $(document).on('change', '.path', this.parseParam.bind(this)); $(document).on('change', '.request_headers input', this.handleUIUpdate.bind(this)); $(document).on('change', '.api_request_info select, .api_request_info input', this.handleUIUpdate.bind(this)); @@ -510,9 +483,6 @@ class APITester { target.find('input[name="basePath"]').val(this.basePath(model.server)); } - renderParams(params) { - return params.map((param, index) => this.queryParamTemplate(param, index)).join(''); - } renderHeaders(headers) { return headers.map((header, index) => this.headerTemplate(header, index)).join(''); @@ -532,6 +502,29 @@ class APITester { } } + showPopper(element) { + this.popperContent.style.display = 'block'; + this.popperInstance = createPopper(element, popperContent, { + placement: 'bottom', // Popper below the element + modifiers: [ + { + name: 'offset', + options: { + offset: [0, 8], // Adjust the position if needed + }, + }, + ], + }); + } + + hidePopper(element) { + if (this.popperInstance) { + this.popperInstance.destroy(); + this.popperInstance = null; + } + this.popperContent.style.display = 'none'; + } + renderTabContent(index) { var me = this; let apiRequestTabContent = $(this.apiTabContentTarget); @@ -539,17 +532,40 @@ class APITester { apiRequestTabContent.append(this.apiRequestTemplate(model, index)); - apiRequestTabContent.find(`#api_request_${model.id}`).find('.editableInput').each(function () { - let editableInput = new EditableInput({ - name: 'path', - value: model.path, - placeholder: 'Enter text here...', - label: 'Path' - }); - console.log(this); - editableInput.init(this, (event) => { - me.parseParam(event); + let editableInput = new EditableInput({ + name: 'path', + value: model.path, + }); + + let propertyTable = new PropertyTable({ + propertyName: 'queryParams', + properties: model.queryParams + }); + propertyTable.init(apiRequestTabContent.find('.query_params')[0], (properties) => { + model.queryParams = properties; + console.log(model.queryParams); + this.buildPath(model); + editableInput.setValue(model.path); + }); + + apiRequestTabContent.find(`#api_request_${model.id}`).find('.api_request_info').find('.path').each(function () { + + editableInput.init(this, (value) => { + model.path = value; + model.queryParams = me.parseParam(model.path); + propertyTable.setProperties(model.queryParams); }); + + $(this).append(``); + + $('span.variable').off('mouseover'); + $('span.variable').off('mouseout'); + + }); + + document.querySelectorAll('.variable').forEach(element => { + element.addEventListener('mouseover', () => me.showPopper(element)); + element.addEventListener('mouseout', () => me.hidePopper(element)); }); this.openTab(model.id); @@ -560,6 +576,23 @@ class APITester { language: 'json', automaticLayout: true }); + + requestBodyEditor.onMouseMove((e) => { + let position = e.target.position; + if (position) { + let model = requestBodyEditor.getModel(); + let word = model.getWordAtPosition(position); + let lineContent = model.getLineContent(position.lineNumber); + if (word) { + if (lineContent.indexOf('{{' + word.word + '}}') > -1) { + me.showPopper(e.target.element); + } + } else { + me.hidePopper(e.target.element); + } + } + }); + me.requestEditors.push(requestBodyEditor); target.find(".request_body")[0].addEventListener('shown.bs.tab', () => { me.requestEditors[index].layout(); @@ -577,13 +610,16 @@ class APITester { let responseBodyEditor = monaco.editor.create(target.find(".response_body")[0], { value: '', language: 'json', - automaticLayout: true + automaticLayout: true, + quickSuggestions: false }); + me.responseEditors.push(responseBodyEditor); let consoleEditor = monaco.editor.create(target.find(".console")[0], { value: '', - automaticLayout: true + automaticLayout: true, + quickSuggestions: false }); me.consoleEditors.push(consoleEditor); @@ -591,7 +627,8 @@ class APITester { let preRequestEditor = monaco.editor.create(target.find(".pre-request")[0], { value: model.preRequestScript, language: 'javascript', - automaticLayout: true + automaticLayout: true, + quickSuggestions: false }); me.preRequestEditors.push(preRequestEditor); target.find(".pre-request")[0].addEventListener('shown.bs.tab', () => { @@ -605,7 +642,8 @@ class APITester { let postRequestEditor = monaco.editor.create(target.find(".post-request")[0], { value: model.postRequestScript, language: 'javascript', - automaticLayout: true + automaticLayout: true, + quickSuggestions: false }); me.postRequestEditors.push(postRequestEditor); target.find(".post-request")[0].addEventListener('shown.bs.tab', () => { @@ -730,58 +768,25 @@ class APITester { } - addQueryParam(event) { - const tabIndex = $('#apiRequestTabContent').children().index($(event.currentTarget).closest('.api_request')); - let model = this.apiRequests[tabIndex]; - model.queryParams.push({ - enabled: true, - key: '', - value: '' - }); - - this.renderQueryParamsView(tabIndex); - } - - removeQueryParam(event) { - const tabIndex = $('#apiRequestTabContent').children().index($(event.currentTarget).closest('.api_request')); - const index = $(event.currentTarget).closest('tr').data('index'); - let model = this.apiRequests[tabIndex]; - model.queryParams.splice(index, 1); - this.renderQueryParamsView(tabIndex); - } - - renderQueryParamsView(tabIndex) { - let model = this.apiRequests[tabIndex]; - - let target = $('#api_request_' + model.id); - target.find('.query_params').empty(); - target.find('.query_params').append(this.renderParams(model.queryParams)); - } - - parseParam(event) { - const tabIndex = $('#apiRequestTabContent').children().index($(event.currentTarget).closest('.api_request')); - let model = this.apiRequests[tabIndex]; - model.path = $(event.currentTarget).siblings('input[type="hidden"]').val(); - model.queryParams = []; - let queryString = model.path.split('?')[1]; + parseParam(path) { + let queryParams = []; + let queryString = path.split('?')[1]; if (queryString) { let queryParamArray = queryString.split('&'); for (let i = 0; i < queryParamArray.length; i++) { let queryParam = queryParamArray[i].split('='); - model.queryParams.push({ + queryParams.push({ enabled: true, key: queryParam[0], value: (queryParam[1] === undefined ? '' : queryParam[1]) }); } - this.renderQueryParamsView(tabIndex); } + return queryParams; } - buildPath(event) { - const tabIndex = $('#apiRequestTabContent').children().index($(event.currentTarget).closest('.api_request')); - let model = this.apiRequests[tabIndex]; + buildPath(model) { let queryString = model.path.split('?')[0]; if (model.queryParams.length > 0) { queryString += '?'; @@ -796,8 +801,6 @@ class APITester { } } model.path = queryString; - console.log(model.path); - $('#api_request_' + model.id).find('.editableInputContent').html(model.path); } showLoadingOverlay() { diff --git a/ApiTestManager/src/components/EditableInput.js b/ApiTestManager/src/components/EditableInput.js index 52c53a2..54548d1 100644 --- a/ApiTestManager/src/components/EditableInput.js +++ b/ApiTestManager/src/components/EditableInput.js @@ -1,90 +1,59 @@ -class EditableInput { - constructor(options = {}) { - this.value = options.value || ''; - this.name = options.name || ''; - this.id = options.id || ''; - this.class = options.class || 'form-control'; - this.placeholder = options.placeholder || ''; - this.label = options.label || ''; +class EditableInputModel { + constructor(value = '') { + this.value = value; } - init(element, callback) { - this.element = element; - this.element.innerHTML = this.render(); - this.attachEventListeners(callback); + setValue(newValue) { + this.value = newValue; } - val(newValue) { - if (newValue !== undefined) { - this.value = newValue; - this.updateUI(); - } + getValue() { return this.value; } +} - updateUI() { - const editableDiv = this.element.querySelector('.editableInputContent'); - const hiddenInput = this.element.querySelector('input[type="hidden"]'); - - if (this.value) { - editableDiv.innerHTML = this.renderContent(this.parseContent(this.value)); - } else { - editableDiv.innerHTML = '​'; // Insert a zero-width space - } - hiddenInput.value = this.value; +class EditableInputView { + constructor(model, editableInput) { + this.model = model; + this.editableInput = editableInput; } - render() { - let contentHtml = this.value ? this.renderContent(this.parseContent(this.value)) : '​'; + render(element) { + this.element = element; + this.element.innerHTML = this.generateInputHtml(); + this.editableDiv = this.element.querySelector('.editableInputContent'); + this.attachEventListeners(); + } + + generateInputHtml() { + let contentHtml = this.model.getValue() ? this.renderContent(this.parseContent(this.model.getValue())) : '​'; return ` -
- ${contentHtml} -
- - - `; +
+ ${contentHtml} +
+ `; } - - attachEventListeners(callback) { - const editableDiv = this.element.querySelector('.editableInputContent'); - const hiddenInput = this.element.querySelector('input[type="hidden"]'); - - editableDiv.addEventListener('input', (event) => { - this.handleInput(event, editableDiv, hiddenInput); - if (callback) - callback(event); + attachEventListeners() { + this.editableDiv.addEventListener('input', (event) => { + this.editableInput.controller.handleInput(this.editableDiv); + if (this.editableInput.controller.additionalCallback) { + this.editableInput.controller.additionalCallback(this.model.getValue()); + } }); } - handleInput(event, editableDiv, hiddenInput) { - - let cursor = this.getCurrentCursor(editableDiv); - let mergedString = Array.from(editableDiv.childNodes) - .filter(function(node) { - // Keep only SPAN elements and text nodes - return node.nodeName.toUpperCase() === 'SPAN' || node.nodeType === 3; - }) - .map(node => { - return node.nodeType === 3 ? node.data.trim() : node.innerText.trim(); - }) - .join(''); - - let content = this.parseContent(mergedString); - this.value = content.join(''); - hiddenInput.value = this.value; - - if (!this.value) { - editableDiv.innerHTML = '​'; // Insert a zero-width space - cursor = 0; + updateUI() { + let content = this.model.getValue(); + if (content) { + this.editableDiv.innerHTML = this.renderContent(this.parseContent(content)); } else { - editableDiv.innerHTML = this.renderContent(content); + this.editableDiv.innerHTML = '​'; // Insert a zero-width space } - this.restoreCursor(editableDiv, cursor); + this.editableDiv.setAttribute('data-value', content); } - renderContent(contentArray) { let content = ''; contentArray.forEach((item) => { @@ -122,6 +91,20 @@ class EditableInput { return returnStringArray; } +} + + +class EditableInputController { + constructor(model, view) { + this.model = model; + this.view = view; + } + + init(element, callback) { + this.view.render(element); + this.additionalCallback = callback; + } + getCurrentCursor(element) { const selection = window.getSelection(); @@ -134,6 +117,53 @@ class EditableInput { return preCaretRange.toString().trim().length; } + handleInput(editableDiv) { + + let cursor = this.getCurrentCursor(editableDiv); + let mergedString = Array.from(editableDiv.childNodes) + .filter(function (node) { + // Keep only SPAN elements and text nodes + return node.nodeName.toUpperCase() === 'SPAN' || node.nodeType === 3; + }) + .map(node => { + return node.nodeType === 3 ? node.data.trim() : node.innerText.trim(); + }) + .join(''); + + let content = this.parseContent(mergedString); + this.model.setValue(content.join('')); + // Optionally, update the view if needed + this.view.updateUI(); + + this.restoreCursor(editableDiv, cursor); + } + + parseContent(inputString) { + let returnStringArray = []; + let regex = /{{.*?}}/g; + let lastIndex = 0; + + inputString.replace(regex, (match, index) => { + // Add the string before the match + if (index > lastIndex) { + returnStringArray.push(inputString.slice(lastIndex, index)); + } + + // Add the matched string including the delimiters + returnStringArray.push(match); + + // Update lastIndex for the next iteration + lastIndex = index + match.length; + }); + + // Add any remaining string after the last match + if (lastIndex < inputString.length) { + returnStringArray.push(inputString.slice(lastIndex)); + } + + return returnStringArray; + } + restoreCursor(element, position) { const selection = window.getSelection(); const range = document.createRange(); @@ -167,7 +197,42 @@ class EditableInput { selection.removeAllRanges(); selection.addRange(range); } +} +class EditableInput { + constructor(options = {}) { + // Initialize the model with the value + this.model = new EditableInputModel(options.value || ''); + + // Create the view and controller, passing the model to them + this.view = new EditableInputView(this.model, this); + this.controller = new EditableInputController(this.model, this.view); + + // Additional properties as required + this.name = options.name || ''; + this.id = options.id || ''; + this.class = options.class || 'form-control'; + this.placeholder = options.placeholder || ''; + } + + init(element, callback) { + // Initialize the controller with the DOM element + this.controller.init(element, callback); + } + + getValue() { + // Delegate to the model + return this.model.getValue(); + } + + setValue(newValue) { + // Delegate to the model and update the view + this.model.setValue(newValue); + this.view.updateUI(); + } + + // Any additional methods required for interaction with this component } export default EditableInput; + diff --git a/ApiTestManager/src/components/EditableInput.js.old b/ApiTestManager/src/components/EditableInput.js.old deleted file mode 100644 index 977cd64..0000000 --- a/ApiTestManager/src/components/EditableInput.js.old +++ /dev/null @@ -1,130 +0,0 @@ -class EditableInput { - constructor(options = {}) { - this.value = options.value || ''; - this.name = options.name || ''; - this.id = options.id || ''; - this.class = options.class || ''; - this.placeholder = options.placeholder || ''; - } - - - val(newValue) { - if (newValue !== undefined) { - this.value = newValue; - } - return this.value; - } - - - init(element, callback) { - - const editableDiv = element.querySelector(`.editableInputContent`); - const hiddenInput = element.querySelector(`.editableInputTarget`); - - editableDiv.innerHTML = this.renderContent(this.parseContent(hiddenInput.value)); // Set the initial content - - editableDiv.addEventListener('input', (event) => { - let cursor = this.getCurrentCursor(editableDiv); - let mergedString = Array.from(editableDiv.children) - .map(span => span.textContent) - .join(''); - let content = this.parseContent(mergedString); - editableDiv.innerHTML = this.renderContent(content); // Update the content - hiddenInput.value = content.join(''); // Update the hidden input value - this.value = content.join(''); // Update the value of the EditableInput object - this.restoreCursor(editableDiv, cursor); - - if (callback) - callback(event); - - }); - } - - - renderContent(contentArray) { - let content = ''; - contentArray.forEach((item) => { - if (item.startsWith('{{')) { - content += `${item}`; - } else { - content += `${item}`; - } - }); - return content; - } - - parseContent(inputString) { - let returnStringArray = []; - let regex = /{{.*?}}/g; - let lastIndex = 0; - - inputString.replace(regex, (match, index) => { - // Add the string before the match - if (index > lastIndex) { - returnStringArray.push(inputString.slice(lastIndex, index)); - } - - // Add the matched string including the delimiters - returnStringArray.push(match); - - // Update lastIndex for the next iteration - lastIndex = index + match.length; - }); - - // Add any remaining string after the last match - if (lastIndex < inputString.length) { - returnStringArray.push(inputString.slice(lastIndex)); - } - - return returnStringArray; - } - - getCurrentCursor(element) { - const selection = window.getSelection(); - if (selection.rangeCount === 0) return null; - - const range = selection.getRangeAt(0); - const preCaretRange = range.cloneRange(); - preCaretRange.selectNodeContents(element); - preCaretRange.setEnd(range.endContainer, range.endOffset); - - return preCaretRange.toString().length; - } - - restoreCursor(element, position) { - const selection = window.getSelection(); - const range = document.createRange(); - range.setStart(element, 0); - range.collapse(true); - - const nodeStack = [element]; - let node, foundStart = false, stop = false; - let charIndex = 0; - - while (!stop && (node = nodeStack.pop())) { - if (node.nodeType === 3) { - const nextCharIndex = charIndex + node.length; - if (!foundStart && position >= charIndex && position <= nextCharIndex) { - range.setStart(node, position - charIndex); - foundStart = true; - } - if (foundStart && position >= charIndex && position <= nextCharIndex) { - range.setEnd(node, position - charIndex); - stop = true; - } - charIndex = nextCharIndex; - } else { - let i = node.childNodes.length; - while (i--) { - nodeStack.push(node.childNodes[i]); - } - } - } - - selection.removeAllRanges(); - selection.addRange(range); - } - -} - -export default EditableInput; diff --git a/ApiTestManager/src/components/PropertyTable.js b/ApiTestManager/src/components/PropertyTable.js new file mode 100644 index 0000000..353a68b --- /dev/null +++ b/ApiTestManager/src/components/PropertyTable.js @@ -0,0 +1,226 @@ +import EditableInput from './EditableInput.js'; + +class PropertyTableModel { + constructor(properties = []) { + this.properties = properties; + } + + addProperty(property) { + this.properties.push(property); + } + + removeProperty(index) { + this.properties.splice(index, 1); + } + + getProperties() { + return this.properties; + } + + setProperties(newProperties) { + this.properties = newProperties; + } +} + +class PropertyTableView { + constructor(model, propertyTable) { + this.model = model; + this.propertyTable = propertyTable; + this.modelViewList = []; + } + + render(element) { + this.element = element; + this.element.innerHTML = this.generateTableHtml(); + this.attachEventListeners(); + } + + generateTableHtml() { + const properties = this.model.getProperties(); + let rowsHtml = properties.map((property, index) => this.generateRowHtml(property, index)).join(''); + + return `
+
+
#
+
이름
+
+
+ +
+
+ ${rowsHtml} +
`; + } + + generateRowHtml(property, index) { + // Updated to include placeholders for EditableInput + return ` +
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+ `; + } + + updateUI() { + // Re-render the table with updated data + this.element.innerHTML = this.generateTableHtml(); + // Instantiate EditableInput components for each editable cell + this.element.querySelectorAll('.prop-table-row:not(.prop-table-header)').forEach((row, index) => { + + const checkbox = row.querySelector('.form-check-input'); + if (checkbox) { + checkbox.addEventListener('change', (event) => { + const index = parseInt(event.target.parentElement.parentElement.parentElement.getAttribute('data-index'), 10); + this.propertyTable.controller.updateProperty(index, 'enabled', event.target.checked); + if (this.propertyTable.controller.additionalCallback) { + this.propertyTable.controller.additionalCallback(this.model.getProperties()); + } + }); + } + + this.element.querySelectorAll('.editable').forEach(editableElement => { + const index = parseInt(editableElement.parentElement.parentElement.getAttribute('data-index'), 10); + const editableInput = new EditableInput({ + name: editableElement.dataset.name, + value: editableElement.dataset.value + }); + + editableInput.init(editableElement, (value) => { + let model = this.model.getProperties()[index]; + model[editableElement.dataset.name] = value; + if (this.propertyTable.controller.additionalCallback) { + this.propertyTable.controller.additionalCallback(this.model.getProperties()); + } + }); + }); + }); + + this.attachEventListeners(); + } + + + attachEventListeners() { + this.element.querySelectorAll('.remove-property').forEach(button => { + button.addEventListener('click', (event) => { + const index = parseInt(event.target.getAttribute('data-index'), 10); + console.log({index}); + this.propertyTable.controller.removeProperty(index); + }); + }); + + const addButton = this.element.querySelector('.add_property'); + if (addButton) { + console.log('Add button found'); // Check if the button is found + addButton.addEventListener('click', (event) => { + console.log(event) + console.log(this) + console.log('Add button clicked'); // Check if this gets logged on click + this.propertyTable.controller.addProperty(); + }); + } else { + console.log('Add button not found'); // Check if the button is not found + } + } +} + + +class PropertyTableController { + constructor(model, view) { + this.model = model; + this.view = view; + } + + init(element, callback) { + this.view.render(element); + this.additionalCallback = callback; + } + + addProperty() { + console.log('addProperty'); + // Add a new property to the model + this.model.addProperty({ + key: '', + value: '' + }); + // Update the view to reflect the model changes + this.view.updateUI(); + } + + removeProperty(index) { + // Remove the property from the model + this.model.removeProperty(index); + // Update the view to reflect the model changes + this.view.updateUI(); + if (this.additionalCallback) { + this.additionalCallback(this.model.getProperties()); + } + } + + updateProperty(index, key, value) { + // Update a specific property in the model + let properties = this.model.getProperties(); + if (properties[index]) { + properties[index][key] = value; + } + } +} + +class PropertyTable { + constructor(options = {}) { + // Initialize the model with properties + this.model = new PropertyTableModel(options.properties || []); + + // Create the view and controller, passing the model to them + this.view = new PropertyTableView(this.model, this); + this.controller = new PropertyTableController(this.model, this.view); + + // Additional properties + this.propertyName = options.propertyName || ''; + } + + init(element, callback) { + // Initialize the controller with the DOM element + this.controller.init(element, callback); + this.setProperties(this.model.getProperties()); + } + + getProperties() { + // Delegate to the model + return this.model.getProperties(); + } + + setProperties(newProperties) { + // Update the model and refresh the view + this.model.setProperties(newProperties); + this.view.updateUI(); + } + + addProperty(property) { + // Delegate to the controller + this.controller.addProperty(property); + } + + removeProperty(index) { + // Delegate to the controller + this.controller.removeProperty(index); + + } + + // Any additional methods as needed +} + + +export default PropertyTable; diff --git a/ApiTestManager/src/index.js b/ApiTestManager/src/index.js index 705f1bc..7d33745 100644 --- a/ApiTestManager/src/index.js +++ b/ApiTestManager/src/index.js @@ -1,13 +1,10 @@ import APITester from './APITester'; import APIScenario from "./APIScenario"; -// import { buildWorkerDefinition } from "monaco-editor-workers"; -// -// buildWorkerDefinition('./node_modules/monaco-editor-workers/dist/workers', import.meta.url, false); -self.MonacoEnvironment = { +window.MonacoEnvironment = { getWorkerUrl: function (moduleId, label) { if (label === 'json') { - return '/plugins/apitestmanager/json.worker.js'; + return '/plugins/apitestmanager/json.worker.bundle.js'; } if (label === 'css' || label === 'scss' || label === 'less') { return '/plugins/apitestmanager/css.worker.bundle.js'; @@ -29,7 +26,6 @@ export default class APITestManager { this.apiTester.init(servers); this.apiScenario = new APIScenario(this.apiTester); this.apiScenario.init(); - console.log("APITestManager initialized"); } } diff --git a/ApiTestManager/webpack.config.js b/ApiTestManager/webpack.config.js index 557a115..4418da0 100644 --- a/ApiTestManager/webpack.config.js +++ b/ApiTestManager/webpack.config.js @@ -1,14 +1,14 @@ const path = require('path'); -// const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); +const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); module.exports = { entry: { app: './src/index.js', - 'editor.worker': 'monaco-editor/esm/vs/editor/editor.worker.js', - 'json.worker': 'monaco-editor/esm/vs/language/json/json.worker', - 'css.worker': 'monaco-editor/esm/vs/language/css/css.worker', - 'html.worker': 'monaco-editor/esm/vs/language/html/html.worker', - 'ts.worker': 'monaco-editor/esm/vs/language/typescript/ts.worker' + // 'editor.worker': 'monaco-editor/esm/vs/editor/editor.worker.js', + // 'json.worker': 'monaco-editor/esm/vs/language/json/json.worker', + // 'css.worker': 'monaco-editor/esm/vs/language/css/css.worker', + // 'html.worker': 'monaco-editor/esm/vs/language/html/html.worker', + // 'ts.worker': 'monaco-editor/esm/vs/language/typescript/ts.worker' }, module: { rules: [ @@ -40,6 +40,7 @@ module.exports = { } ] }, + plugins: [new MonacoWebpackPlugin()], externals: { jquery: 'jQuery', bootstrap: 'bootstrap', @@ -53,6 +54,7 @@ module.exports = { export: 'default' }, globalObject: `(typeof self !== 'undefined' ? self : this)`, + // globalObject: 'self', path: path.resolve(__dirname, 'dist'), filename: '[name].bundle.js', }, @@ -64,6 +66,18 @@ module.exports = { changeOrigin: true, } } - } - + }, + // optimization: { + // splitChunks: { + // chunks: 'all', + // automaticNameDelimiter: '-', + // cacheGroups: { + // vendor: { + // test: /[\\/]node_modules[\\/]/, + // name: 'vendors', + // chunks: 'all', + // } + // } + // } + // } }; diff --git a/src/main/resources/static/plugins/apitestmanager/app.bundle.js b/src/main/resources/static/plugins/apitestmanager/app.bundle.js index d437e75..ba496ed 100644 --- a/src/main/resources/static/plugins/apitestmanager/app.bundle.js +++ b/src/main/resources/static/plugins/apitestmanager/app.bundle.js @@ -19,6 +19,490 @@ return /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ +/***/ "./node_modules/@popperjs/core/lib/createPopper.js": +/*!*********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/createPopper.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createPopper: () => (/* binding */ createPopper),\n/* harmony export */ detectOverflow: () => (/* reexport safe */ _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]),\n/* harmony export */ popperGenerator: () => (/* binding */ popperGenerator)\n/* harmony export */ });\n/* harmony import */ var _dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dom-utils/getCompositeRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js\");\n/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dom-utils/getLayoutRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\");\n/* harmony import */ var _dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom-utils/listScrollParents.js */ \"./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dom-utils/getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/orderModifiers.js */ \"./node_modules/@popperjs/core/lib/utils/orderModifiers.js\");\n/* harmony import */ var _utils_debounce_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/debounce.js */ \"./node_modules/@popperjs/core/lib/utils/debounce.js\");\n/* harmony import */ var _utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/mergeByName.js */ \"./node_modules/@popperjs/core/lib/utils/mergeByName.js\");\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom-utils/instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n\n\n\n\n\n\n\n\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nfunction popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: (0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(reference) ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(reference) : reference.contextElement ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(reference.contextElement) : [],\n popper: (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = (0,_utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])((0,_utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: (0,_dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(reference, (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(popper), state.options.strategy === 'fixed'),\n popper: (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: (0,_utils_debounce_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nvar createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/createPopper.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/contains.js": +/*!***************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/contains.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ contains)\n/* harmony export */ });\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\nfunction contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/contains.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js": +/*!****************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getBoundingClientRect)\n/* harmony export */ });\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isLayoutViewport.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js\");\n\n\n\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) {\n scaleX = element.offsetWidth > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !(0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getClippingRect)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getViewportRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js\");\n/* harmony import */ var _getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getDocumentRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js\");\n/* harmony import */ var _listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./listScrollParents.js */ \"./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\");\n/* harmony import */ var _getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./getParentNode.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\");\n/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./contains.js */ \"./node_modules/@popperjs/core/lib/dom-utils/contains.js\");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/rectToClientRect.js */ \"./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === _enums_js__WEBPACK_IMPORTED_MODULE_1__.viewport ? (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])((0,_getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(element, strategy)) : (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])((0,_getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = (0,_listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(element).position) >= 0;\n var clipperElement = canEscapeClipping && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isHTMLElement)(element) ? (0,_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(element) : element;\n\n if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) && (0,_contains_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(clippingParent, clipperElement) && (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nfunction getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.top, accRect.top);\n accRect.right = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.right, accRect.right);\n accRect.bottom = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.bottom, accRect.bottom);\n accRect.left = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getCompositeRect)\n/* harmony export */ });\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n/* harmony import */ var _getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getNodeScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js\");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isScrollParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n\n\n\n\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.width) / element.offsetWidth || 1;\n var scaleY = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nfunction getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent);\n var offsetParentIsScaled = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent) && isElementScaled(offsetParent);\n var documentElement = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(offsetParent);\n var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(documentElement)) {\n scroll = (0,_getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(offsetParent);\n }\n\n if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent)) {\n offsets = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getComputedStyle)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n\nfunction getComputedStyle(element) {\n return (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element).getComputedStyle(element);\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getDocumentElement)\n/* harmony export */ });\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\nfunction getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return (((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getDocumentRect)\n/* harmony export */ });\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\");\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindowScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nfunction getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element);\n var winScroll = (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(element);\n var y = -winScroll.scrollTop;\n\n if ((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(body || html).direction === 'rtl') {\n x += (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js": +/*!***************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getHTMLElementScroll)\n/* harmony export */ });\nfunction getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js": +/*!********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getLayoutRect)\n/* harmony export */ });\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nfunction getLayoutRect(element) {\n var clientRect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js": +/*!******************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getNodeName)\n/* harmony export */ });\nfunction getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js": +/*!********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getNodeScroll)\n/* harmony export */ });\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\");\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getHTMLElementScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js\");\n\n\n\n\nfunction getNodeScroll(node) {\n if (node === (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node) || !(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node)) {\n return (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(node);\n } else {\n return (0,_getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(node);\n }\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getOffsetParent)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _isTableElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isTableElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js\");\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\");\n/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/userAgent.js */ \"./node_modules/@popperjs/core/lib/utils/userAgent.js\");\n\n\n\n\n\n\n\n\nfunction getTrueOffsetParent(element) {\n if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || // https://github.com/popperjs/popper-core/issues/837\n (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])());\n var isIE = /Trident/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])());\n\n if (isIE && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = (0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(element);\n\n if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(currentNode) && ['html', 'body'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(currentNode)) < 0) {\n var css = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nfunction getOffsetParent(element) {\n var window = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && (0,_isTableElement_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(offsetParent) && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(offsetParent) === 'html' || (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(offsetParent) === 'body' && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js": +/*!********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getParentNode)\n/* harmony export */ });\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n\n\nfunction getParentNode(element) {\n if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isShadowRoot)(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(element) // fallback\n\n );\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getScrollParent)\n/* harmony export */ });\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\");\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n\n\n\nfunction getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node) && (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(node)) {\n return node;\n }\n\n return getScrollParent((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(node));\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getViewportRect)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\");\n/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isLayoutViewport.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js\");\n\n\n\n\nfunction getViewportRect(element, strategy) {\n var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element);\n var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = (0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(element),\n y: y\n };\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js": +/*!****************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindow.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getWindow)\n/* harmony export */ });\nfunction getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getWindowScroll)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n\nfunction getWindowScroll(node) {\n var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js": +/*!**************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getWindowScrollBarX)\n/* harmony export */ });\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\");\n\n\n\nfunction getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element)).left + (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(element).scrollLeft;\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js": +/*!*****************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ isElement: () => (/* binding */ isElement),\n/* harmony export */ isHTMLElement: () => (/* binding */ isHTMLElement),\n/* harmony export */ isShadowRoot: () => (/* binding */ isShadowRoot)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n\n\nfunction isElement(node) {\n var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\n\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ isLayoutViewport)\n/* harmony export */ });\n/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/userAgent.js */ \"./node_modules/@popperjs/core/lib/utils/userAgent.js\");\n\nfunction isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])());\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ isScrollParent)\n/* harmony export */ });\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n\nfunction isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ isTableElement)\n/* harmony export */ });\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element)) >= 0;\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js": +/*!************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ listScrollParents)\n/* harmony export */ });\n/* harmony import */ var _getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getScrollParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js\");\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\");\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\");\n\n\n\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nfunction listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = (0,_getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(target)));\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/enums.js": +/*!**************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/enums.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ afterMain: () => (/* binding */ afterMain),\n/* harmony export */ afterRead: () => (/* binding */ afterRead),\n/* harmony export */ afterWrite: () => (/* binding */ afterWrite),\n/* harmony export */ auto: () => (/* binding */ auto),\n/* harmony export */ basePlacements: () => (/* binding */ basePlacements),\n/* harmony export */ beforeMain: () => (/* binding */ beforeMain),\n/* harmony export */ beforeRead: () => (/* binding */ beforeRead),\n/* harmony export */ beforeWrite: () => (/* binding */ beforeWrite),\n/* harmony export */ bottom: () => (/* binding */ bottom),\n/* harmony export */ clippingParents: () => (/* binding */ clippingParents),\n/* harmony export */ end: () => (/* binding */ end),\n/* harmony export */ left: () => (/* binding */ left),\n/* harmony export */ main: () => (/* binding */ main),\n/* harmony export */ modifierPhases: () => (/* binding */ modifierPhases),\n/* harmony export */ placements: () => (/* binding */ placements),\n/* harmony export */ popper: () => (/* binding */ popper),\n/* harmony export */ read: () => (/* binding */ read),\n/* harmony export */ reference: () => (/* binding */ reference),\n/* harmony export */ right: () => (/* binding */ right),\n/* harmony export */ start: () => (/* binding */ start),\n/* harmony export */ top: () => (/* binding */ top),\n/* harmony export */ variationPlacements: () => (/* binding */ variationPlacements),\n/* harmony export */ viewport: () => (/* binding */ viewport),\n/* harmony export */ write: () => (/* binding */ write)\n/* harmony export */ });\nvar top = 'top';\nvar bottom = 'bottom';\nvar right = 'right';\nvar left = 'left';\nvar auto = 'auto';\nvar basePlacements = [top, bottom, right, left];\nvar start = 'start';\nvar end = 'end';\nvar clippingParents = 'clippingParents';\nvar viewport = 'viewport';\nvar popper = 'popper';\nvar reference = 'reference';\nvar variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nvar placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nvar beforeRead = 'beforeRead';\nvar read = 'read';\nvar afterRead = 'afterRead'; // pure-logic modifiers\n\nvar beforeMain = 'beforeMain';\nvar main = 'main';\nvar afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nvar beforeWrite = 'beforeWrite';\nvar write = 'write';\nvar afterWrite = 'afterWrite';\nvar modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/enums.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js": +/*!******************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/applyStyles.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n});\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js": +/*!********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/computeStyles.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ mapToStyles: () => (/* binding */ mapToStyles)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(x * dpr) / dpr || 0,\n y: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(y * dpr) / dpr || 0\n };\n}\n\nfunction mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.left;\n var sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(popper)) {\n offsetParent = (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(popper);\n\n if ((0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.right) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) {\n sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) {\n sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(state.placement),\n variation: (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n});\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/eventListeners.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n});\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js": +/*!********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/computeOffsets.js */ \"./node_modules/@popperjs/core/lib/utils/computeOffsets.js\");\n\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = (0,_utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n});\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/popper-lite.js": +/*!********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/popper-lite.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createPopper: () => (/* binding */ createPopper),\n/* harmony export */ defaultModifiers: () => (/* binding */ defaultModifiers),\n/* harmony export */ detectOverflow: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ popperGenerator: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator)\n/* harmony export */ });\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./createPopper.js */ \"./node_modules/@popperjs/core/lib/createPopper.js\");\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./createPopper.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ \"./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\");\n/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ \"./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\");\n/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\");\n/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\");\n\n\n\n\n\nvar defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]];\nvar createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator)({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\n\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/popper-lite.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js": +/*!*****************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/computeOffsets.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ computeOffsets)\n/* harmony export */ });\n/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n/* harmony import */ var _getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getMainAxisFromPlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n\n\n\n\nfunction computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? (0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement) : null;\n var variation = placement ? (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? (0,_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/utils/computeOffsets.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/debounce.js": +/*!***********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/debounce.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ debounce)\n/* harmony export */ });\nfunction debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/utils/debounce.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js": +/*!*****************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/detectOverflow.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ detectOverflow)\n/* harmony export */ });\n/* harmony import */ var _dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getClippingRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js\");\n/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n/* harmony import */ var _computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./computeOffsets.js */ \"./node_modules/@popperjs/core/lib/utils/computeOffsets.js\");\n/* harmony import */ var _rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./rectToClientRect.js */ \"./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mergePaddingObject.js */ \"./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\");\n/* harmony import */ var _expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./expandToHashMap.js */ \"./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\");\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = (0,_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(typeof padding !== 'number' ? padding : (0,_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements));\n var altContext = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference : _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = (0,_dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])((0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(element) ? element : element.contextElement || (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = (0,_dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(state.elements.reference);\n var popperOffsets = (0,_computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = (0,_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/utils/detectOverflow.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js": +/*!******************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/expandToHashMap.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ expandToHashMap)\n/* harmony export */ });\nfunction expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getBasePlacement.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getBasePlacement)\n/* harmony export */ });\n\nfunction getBasePlacement(placement) {\n return placement.split('-')[0];\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getFreshSideObject)\n/* harmony export */ });\nfunction getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js": +/*!***************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getMainAxisFromPlacement)\n/* harmony export */ });\nfunction getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getVariation.js": +/*!***************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getVariation.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getVariation)\n/* harmony export */ });\nfunction getVariation(placement) {\n return placement.split('-')[1];\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/utils/getVariation.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/math.js": +/*!*******************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/math.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ max: () => (/* binding */ max),\n/* harmony export */ min: () => (/* binding */ min),\n/* harmony export */ round: () => (/* binding */ round)\n/* harmony export */ });\nvar max = Math.max;\nvar min = Math.min;\nvar round = Math.round;\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/utils/math.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/mergeByName.js": +/*!**************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/mergeByName.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ mergeByName)\n/* harmony export */ });\nfunction mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/utils/mergeByName.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ mergePaddingObject)\n/* harmony export */ });\n/* harmony import */ var _getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getFreshSideObject.js */ \"./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\");\n\nfunction mergePaddingObject(paddingObject) {\n return Object.assign({}, (0,_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(), paddingObject);\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js": +/*!*****************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/orderModifiers.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ orderModifiers)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nfunction orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/utils/orderModifiers.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/rectToClientRect.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ rectToClientRect)\n/* harmony export */ });\nfunction rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/userAgent.js": +/*!************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/userAgent.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getUAString)\n/* harmony export */ });\nfunction getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}\n\n//# sourceURL=webpack://APITestManager/./node_modules/@popperjs/core/lib/utils/userAgent.js?"); + +/***/ }), + /***/ "./src/APIClient.js": /*!**************************!*\ !*** ./src/APIClient.js ***! @@ -37,7 +521,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var monaco_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! monaco-editor */ \"./node_modules/monaco-editor/esm/vs/editor/editor.main.js\");\n/* harmony import */ var _APIScenarioExecutor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./APIScenarioExecutor */ \"./src/APIScenarioExecutor.js\");\n/* harmony import */ var drawflow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! drawflow */ \"./node_modules/drawflow/dist/drawflow.min.js\");\n/* harmony import */ var drawflow__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(drawflow__WEBPACK_IMPORTED_MODULE_2__);\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : String(i); }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n// require.config({paths: {'vs': '/plugins/vs'}});\n\n\n\nvar APIScenario = /*#__PURE__*/function () {\n function APIScenario(apiTester) {\n _classCallCheck(this, APIScenario);\n this.scenarioList = [];\n this.currentIndex = -1;\n this.currentScenario = null;\n this.apiTester = apiTester;\n console.log('constructor');\n }\n _createClass(APIScenario, [{\n key: \"init\",\n value: function init() {\n var _this = this;\n console.log('init');\n this.loadScenarioList();\n this.outputEditor = monaco_editor__WEBPACK_IMPORTED_MODULE_0__.editor.create(document.getElementById('output'), {\n value: '',\n automaticLayout: true\n });\n this.bindEvents();\n var id = document.getElementById('drawflow');\n this.editor = new (drawflow__WEBPACK_IMPORTED_MODULE_2___default())(id);\n this.editor.reroute = true;\n this.editor.reroute_fix_curvature = true;\n this.editor.force_first_input = true;\n this.editor.start();\n this.editor.on('contextmenu', function (event) {\n console.log(event);\n console.log('contextmenu');\n //get class of target node\n\n console.log(event.target.id);\n var node = _this.editor.getNodeFromId(event.target.id);\n console.log(node);\n });\n this.showOutput = true;\n }\n }, {\n key: \"loadScenarioList\",\n value: function loadScenarioList(callback) {\n var me = this;\n this.currentAjaxRequest = $.ajax({\n url: '/mgmt/api_scenario/list.do',\n type: 'GET',\n contentType: 'application/json',\n success: function success(data) {\n me.scenarioList = data;\n var drawflowData = {\n drawflow: {\n Home: {\n data: {}\n }\n }\n };\n data.forEach(function (scenario) {\n var scenarioData = null;\n try {\n scenarioData = JSON.parse(scenario.scenario);\n } catch (e) {\n scenarioData = {};\n }\n drawflowData.drawflow[scenario.id] = {\n data: scenarioData\n };\n });\n me.editor[\"import\"](drawflowData);\n me.editor.changeModule('Home');\n },\n error: function error(response, textStatus, errorThrown) {\n me.hideLoadingOverlay();\n $('.toast-body').text(response.responseJSON.error);\n $('.toast').toast('show');\n },\n complete: function complete() {\n me.renderScenarioList();\n if (callback) {\n callback();\n }\n me.hideLoadingOverlay();\n }\n });\n }\n }, {\n key: \"getScenarioList\",\n value: function getScenarioList() {\n return this.scenarioList;\n }\n }, {\n key: \"openScenario\",\n value: function openScenario(event) {\n event.preventDefault();\n var scenarioId = $(event.target).closest('li').data('id');\n this.openScenarioById(scenarioId);\n }\n }, {\n key: \"openScenarioById\",\n value: function openScenarioById(scenarioId) {\n document.querySelectorAll(\".api-scenario-list li\").forEach(function (node) {\n node.classList.remove('selected');\n });\n\n //find li by data-id and add class selected\n document.querySelector(\".api-scenario-list li[data-id=\\\"\".concat(scenarioId, \"\\\"]\")).classList.add('selected');\n this.editor.changeModule(scenarioId);\n this.currentScenario = scenarioId;\n }\n }, {\n key: \"getScenario\",\n value: function getScenario(scenarioId) {\n return this.getScenarioList().find(function (scenario) {\n return scenario.id === scenarioId;\n });\n }\n }, {\n key: \"showLoadingOverlay\",\n value: function showLoadingOverlay() {\n $(\"#loading-overlay\").show();\n }\n }, {\n key: \"hideLoadingOverlay\",\n value: function hideLoadingOverlay() {\n $(\"#loading-overlay\").hide();\n }\n }, {\n key: \"showNewScenarioModal\",\n value: function showNewScenarioModal() {\n $('#new_scenario_modal').find('input').val('');\n $('#new_scenario_modal').modal('show');\n }\n }, {\n key: \"createScenario\",\n value: function createScenario() {\n var name = $('#new_scenario_name').val();\n var me = this;\n me.showLoadingOverlay();\n this.currentAjaxRequest = $.ajax({\n url: '/mgmt/api_scenario/create.do',\n type: 'POST',\n contentType: 'application/json',\n data: JSON.stringify({\n name: name,\n scenario: \"{}\",\n description: \"\"\n }),\n success: function success(data) {\n me.loadScenarioList(function () {\n me.openScenarioById(data.id);\n var start = \"\\n
\\n
Start
\\n
\\n \";\n me.editor.addNode('Start', 0, 1, 100, 100, 'start', {}, start);\n me.saveScenario();\n });\n },\n error: function error(response, textStatus, errorThrown) {\n me.hideLoadingOverlay();\n $('.toast-body').text(response.responseJSON.error);\n $('.toast').toast('show');\n },\n complete: function complete() {\n me.hideLoadingOverlay();\n $('#new_scenario_modal').modal('hide');\n }\n });\n }\n }, {\n key: \"saveScenario\",\n value: function saveScenario() {\n if (this.currentScenario !== null) {\n var data = this.editor[\"export\"]();\n console.log(data.drawflow[this.currentScenario].data);\n var updatedScenario = this.getScenario(this.currentScenario);\n updatedScenario.scenario = JSON.stringify(data.drawflow[this.currentScenario].data);\n var me = this;\n me.showLoadingOverlay();\n this.currentAjaxRequest = $.ajax({\n url: '/mgmt/api_scenario/update.do',\n type: 'POST',\n contentType: 'application/json',\n data: JSON.stringify(updatedScenario),\n error: function error(response, textStatus, errorThrown) {\n me.hideLoadingOverlay();\n $('.toast-body').text(response.responseJSON.error);\n $('.toast').toast('show');\n },\n complete: function complete() {\n me.hideLoadingOverlay();\n $('.toast-body').text('저장되었습니다.');\n $('.toast').toast('show');\n }\n });\n }\n }\n }, {\n key: \"showDeleteModal\",\n value: function showDeleteModal(event) {\n var id = $(event.currentTarget).closest('li').data('id');\n $('#confirm_delete_scenario_modal').find('.confirm_delete_scenario').data('id', id);\n $('#confirm_delete_scenario_modal').modal('show');\n }\n }, {\n key: \"removeScenario\",\n value: function removeScenario(event) {\n var id = $(event.currentTarget).data('id');\n var me = this;\n me.showLoadingOverlay();\n this.currentAjaxRequest = $.ajax({\n url: '/mgmt/api_scenario/delete.do',\n type: 'POST',\n contentType: 'application/json',\n data: JSON.stringify({\n id: id\n }),\n error: function error(response, textStatus, errorThrown) {\n me.hideLoadingOverlay();\n $('.toast-body').text(response.responseJSON.error);\n $('.toast').toast('show');\n },\n complete: function complete() {\n me.hideLoadingOverlay();\n $('#confirm_delete_scenario_modal').modal('hide');\n $('.toast-body').text('삭제되었습니다.');\n $('.toast').toast('show');\n me.editor.changeModule('Home');\n me.loadScenarioList(function () {\n if (me.getScenarioList().length > 0) me.openScenarioById(me.getScenarioList()[0].id);\n });\n }\n });\n }\n }, {\n key: \"toggleOutput\",\n value: function toggleOutput() {\n // Define your selectors as constants for easy changes and better readability\n var scenarioContentSelector = '.api-scenario-content';\n var scenarioOutputSelector = '.api-scenario-output';\n var scenarioOutputBodySelector = '.api-scenario-output-body';\n var drawflowSelector = '#drawflow';\n var scenarioEditorSelector = '.scenario_editor';\n\n // Ensure parentHeight is a number\n var parentHeight = parseInt($(scenarioContentSelector).css('height'), 10);\n\n // Toggle the showOutput state\n this.showOutput = !this.showOutput;\n if (!this.showOutput) {\n $(scenarioOutputSelector).css('flex', '0');\n $(scenarioOutputBodySelector).hide();\n var editorHeight = $(scenarioEditorSelector).css('height');\n $(drawflowSelector).css('height', editorHeight);\n $(scenarioOutputSelector).removeClass('halfHeight');\n $(drawflowSelector).removeClass('halfHeight');\n } else {\n $(scenarioOutputSelector).css('flex', '1');\n $(scenarioOutputSelector).addClass('halfHeight');\n $(scenarioOutputBodySelector).show();\n $(drawflowSelector).addClass('halfHeight');\n $(drawflowSelector).css('height', parentHeight / 2);\n }\n\n // Adjustments for when parentHeight isn't a valid number\n if (isNaN(parentHeight)) {\n console.error('parentHeight is not a number. Check the height of the api-scenario-content element.');\n // Fallback or additional error handling can be placed here\n }\n }\n }, {\n key: \"resizeEditor\",\n value: function resizeEditor() {\n //FIXME: 창 크기 변경시 자동으로 editor 크기가 조정되지 않아서, 0으로 강제 변경후 다시 layout() 호출\n this.outputEditor.layout({\n width: 0\n });\n this.outputEditor.layout({});\n }\n }, {\n key: \"runScript\",\n value: function runScript() {\n console.log(this.editor[\"export\"]().drawflow);\n var graph = _APIScenarioExecutor__WEBPACK_IMPORTED_MODULE_1__[\"default\"].extractGraphFromStart(this.editor[\"export\"]().drawflow[this.currentScenario].data);\n this.executor = new _APIScenarioExecutor__WEBPACK_IMPORTED_MODULE_1__[\"default\"](graph, this.apiTester, this.outputEditor);\n }\n }, {\n key: \"runScenarioAll\",\n value: function runScenarioAll() {\n if (!this.executor) {\n this.runScript();\n }\n if (!this.executor.isDone) {\n this.executor.executeAll();\n } else {\n this.executor.reset();\n }\n }\n }, {\n key: \"runScenarioStep\",\n value: function runScenarioStep() {\n if (!this.executor) {\n this.runScript();\n }\n if (!this.executor.isDone) {\n this.executor.executeCurrentNode();\n this.executor.moveToNextNode();\n } else {\n this.executor.reset();\n }\n }\n }, {\n key: \"resetScenario\",\n value: function resetScenario() {}\n }, {\n key: \"pauseScenario\",\n value: function pauseScenario() {}\n }, {\n key: \"stopScenario\",\n value: function stopScenario() {\n if (this.executor) this.executor.reset();\n this.outputEditor.setValue('');\n }\n }, {\n key: \"addStart\",\n value: function addStart() {\n var start = \"\\n
\\n
Start
\\n
\\n \";\n this.editor.addNode('Start', 0, 1, 100, 100, 'start', {}, start);\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n var events = [{\n type: 'click',\n selector: '.open_scenario',\n action: this.openScenario.bind(this)\n }, {\n type: 'click',\n selector: '.export',\n action: this.runScript.bind(this)\n }, {\n type: 'click',\n selector: '.toggle_output',\n action: this.toggleOutput.bind(this)\n }, {\n type: 'click',\n selector: '.run_scenario_step',\n action: this.runScenarioStep.bind(this)\n }, {\n type: 'click',\n selector: '.run_scenario_all',\n action: this.runScenarioAll.bind(this)\n }, {\n type: 'click',\n selector: '.reset_scenario',\n action: this.resetScenario.bind(this)\n }, {\n type: 'click',\n selector: '.pause_scenario',\n action: this.pauseScenario.bind(this)\n }, {\n type: 'click',\n selector: '.stop_scenario',\n action: this.stopScenario.bind(this)\n }, {\n type: 'click',\n selector: '#new_scenario',\n action: this.showNewScenarioModal.bind(this)\n }, {\n type: 'click',\n selector: '.create_scenario',\n action: this.createScenario.bind(this)\n }, {\n type: 'click',\n selector: '.save_scenario',\n action: this.saveScenario.bind(this)\n },\n // {type: 'click', selector: '.add_start', action: this.addStart.bind(this)},\n {\n type: 'click',\n selector: '.delete_scenario',\n action: this.showDeleteModal.bind(this)\n }, {\n type: 'click',\n selector: '.confirm_delete_scenario',\n action: this.removeScenario.bind(this)\n }, {\n type: 'click',\n selector: '.stop_scenario',\n action: this.stopScenario.bind(this)\n }];\n for (var _i = 0, _events = events; _i < _events.length; _i++) {\n var event = _events[_i];\n $(document).on(event.type, event.selector, event.action);\n }\n window.addEventListener('resize', this.resizeEditor.bind(this));\n var me = this;\n $('#drawflow').droppable({\n drop: function drop(event, ui) {\n var x = ui.offset.left - $(this).offset().left;\n var y = ui.offset.top - $(this).offset().top;\n var dataset = ui.draggable[0].dataset;\n var node = \"
API
\".concat(dataset.name, \"
\");\n me.editor.addNode(dataset.name, 1, 1, x, y, dataset.nodeType, dataset, node);\n }\n });\n }\n }, {\n key: \"scenarioListTemplate\",\n value: function scenarioListTemplate(scenario) {\n return \"\\n
  • \\n \").concat(scenario.name, \"\\n
    \\n \\n \\n
    \\n
  • \\n \");\n }\n }, {\n key: \"renderScenarioList\",\n value: function renderScenarioList() {\n var _this2 = this;\n var scenarioList = this.getScenarioList();\n var scenarioListHtml = scenarioList.map(function (scenario) {\n return _this2.scenarioListTemplate(scenario);\n }).join('');\n $('.api-scenario-list').html(scenarioListHtml);\n var nodes = document.querySelectorAll(\".api-scenario-list li\");\n nodes.forEach(function (node) {\n if ($(node).data('id') === _this2.currentScenario) {\n node.classList.add('selected');\n }\n });\n }\n }]);\n return APIScenario;\n}();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (APIScenario);\n\n//# sourceURL=webpack://APITestManager/./src/APIScenario.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var monaco_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! monaco-editor */ \"include-loader!./node_modules/monaco-editor/esm/vs/editor/editor.main.js\");\n/* harmony import */ var _APIScenarioExecutor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./APIScenarioExecutor */ \"./src/APIScenarioExecutor.js\");\n/* harmony import */ var drawflow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! drawflow */ \"./node_modules/drawflow/dist/drawflow.min.js\");\n/* harmony import */ var drawflow__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(drawflow__WEBPACK_IMPORTED_MODULE_2__);\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : String(i); }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n// require.config({paths: {'vs': '/plugins/vs'}});\n\n\n\nvar APIScenario = /*#__PURE__*/function () {\n function APIScenario(apiTester) {\n _classCallCheck(this, APIScenario);\n this.scenarioList = [];\n this.currentIndex = -1;\n this.currentScenario = null;\n this.apiTester = apiTester;\n console.log('constructor');\n }\n _createClass(APIScenario, [{\n key: \"init\",\n value: function init() {\n this.loadScenarioList();\n this.outputEditor = monaco_editor__WEBPACK_IMPORTED_MODULE_0__.editor.create(document.getElementById('output'), {\n value: '',\n automaticLayout: true\n });\n this.bindEvents();\n var id = document.getElementById('drawflow');\n this.editor = new (drawflow__WEBPACK_IMPORTED_MODULE_2___default())(id);\n this.editor.reroute = true;\n this.editor.reroute_fix_curvature = true;\n this.editor.force_first_input = true;\n this.editor.start();\n // this.editor.on('contextmenu', (event) => {\n // let node = this.editor.getNodeFromId(event.target.id);\n // })\n\n this.showOutput = true;\n }\n }, {\n key: \"loadScenarioList\",\n value: function loadScenarioList(callback) {\n var me = this;\n this.currentAjaxRequest = $.ajax({\n url: '/mgmt/api_scenario/list.do',\n type: 'GET',\n contentType: 'application/json',\n success: function success(data) {\n me.scenarioList = data;\n var drawflowData = {\n drawflow: {\n Home: {\n data: {}\n }\n }\n };\n data.forEach(function (scenario) {\n var scenarioData = null;\n try {\n scenarioData = JSON.parse(scenario.scenario);\n } catch (e) {\n scenarioData = {};\n }\n drawflowData.drawflow[scenario.id] = {\n data: scenarioData\n };\n });\n me.editor[\"import\"](drawflowData);\n me.editor.changeModule('Home');\n },\n error: function error(response, textStatus, errorThrown) {\n me.hideLoadingOverlay();\n $('.toast-body').text(response.responseJSON.error);\n $('.toast').toast('show');\n },\n complete: function complete() {\n me.renderScenarioList();\n if (callback) {\n callback();\n }\n me.hideLoadingOverlay();\n }\n });\n }\n }, {\n key: \"getScenarioList\",\n value: function getScenarioList() {\n return this.scenarioList;\n }\n }, {\n key: \"openScenario\",\n value: function openScenario(event) {\n event.preventDefault();\n var scenarioId = $(event.target).closest('li').data('id');\n this.openScenarioById(scenarioId);\n }\n }, {\n key: \"openScenarioById\",\n value: function openScenarioById(scenarioId) {\n document.querySelectorAll(\".api-scenario-list li\").forEach(function (node) {\n node.classList.remove('selected');\n });\n\n //find li by data-id and add class selected\n document.querySelector(\".api-scenario-list li[data-id=\\\"\".concat(scenarioId, \"\\\"]\")).classList.add('selected');\n this.editor.changeModule(scenarioId);\n this.currentScenario = scenarioId;\n }\n }, {\n key: \"getScenario\",\n value: function getScenario(scenarioId) {\n return this.getScenarioList().find(function (scenario) {\n return scenario.id === scenarioId;\n });\n }\n }, {\n key: \"showLoadingOverlay\",\n value: function showLoadingOverlay() {\n $(\"#loading-overlay\").show();\n }\n }, {\n key: \"hideLoadingOverlay\",\n value: function hideLoadingOverlay() {\n $(\"#loading-overlay\").hide();\n }\n }, {\n key: \"showNewScenarioModal\",\n value: function showNewScenarioModal() {\n $('#new_scenario_modal').find('input').val('');\n $('#new_scenario_modal').modal('show');\n }\n }, {\n key: \"createScenario\",\n value: function createScenario() {\n var name = $('#new_scenario_name').val();\n var me = this;\n me.showLoadingOverlay();\n this.currentAjaxRequest = $.ajax({\n url: '/mgmt/api_scenario/create.do',\n type: 'POST',\n contentType: 'application/json',\n data: JSON.stringify({\n name: name,\n scenario: \"{}\",\n description: \"\"\n }),\n success: function success(data) {\n me.loadScenarioList(function () {\n me.openScenarioById(data.id);\n var start = \"\\n
    \\n
    Start
    \\n
    \\n \";\n me.editor.addNode('Start', 0, 1, 100, 100, 'start', {}, start);\n me.saveScenario();\n });\n },\n error: function error(response, textStatus, errorThrown) {\n me.hideLoadingOverlay();\n $('.toast-body').text(response.responseJSON.error);\n $('.toast').toast('show');\n },\n complete: function complete() {\n me.hideLoadingOverlay();\n $('#new_scenario_modal').modal('hide');\n }\n });\n }\n }, {\n key: \"saveScenario\",\n value: function saveScenario() {\n if (this.currentScenario !== null) {\n var data = this.editor[\"export\"]();\n console.log(data.drawflow[this.currentScenario].data);\n var updatedScenario = this.getScenario(this.currentScenario);\n updatedScenario.scenario = JSON.stringify(data.drawflow[this.currentScenario].data);\n var me = this;\n me.showLoadingOverlay();\n this.currentAjaxRequest = $.ajax({\n url: '/mgmt/api_scenario/update.do',\n type: 'POST',\n contentType: 'application/json',\n data: JSON.stringify(updatedScenario),\n error: function error(response, textStatus, errorThrown) {\n me.hideLoadingOverlay();\n $('.toast-body').text(response.responseJSON.error);\n $('.toast').toast('show');\n },\n complete: function complete() {\n me.hideLoadingOverlay();\n $('.toast-body').text('저장되었습니다.');\n $('.toast').toast('show');\n }\n });\n }\n }\n }, {\n key: \"showDeleteModal\",\n value: function showDeleteModal(event) {\n var id = $(event.currentTarget).closest('li').data('id');\n $('#confirm_delete_scenario_modal').find('.confirm_delete_scenario').data('id', id);\n $('#confirm_delete_scenario_modal').modal('show');\n }\n }, {\n key: \"removeScenario\",\n value: function removeScenario(event) {\n var id = $(event.currentTarget).data('id');\n var me = this;\n me.showLoadingOverlay();\n this.currentAjaxRequest = $.ajax({\n url: '/mgmt/api_scenario/delete.do',\n type: 'POST',\n contentType: 'application/json',\n data: JSON.stringify({\n id: id\n }),\n error: function error(response, textStatus, errorThrown) {\n me.hideLoadingOverlay();\n $('.toast-body').text(response.responseJSON.error);\n $('.toast').toast('show');\n },\n complete: function complete() {\n me.hideLoadingOverlay();\n $('#confirm_delete_scenario_modal').modal('hide');\n $('.toast-body').text('삭제되었습니다.');\n $('.toast').toast('show');\n me.editor.changeModule('Home');\n me.loadScenarioList(function () {\n if (me.getScenarioList().length > 0) me.openScenarioById(me.getScenarioList()[0].id);\n });\n }\n });\n }\n }, {\n key: \"toggleOutput\",\n value: function toggleOutput() {\n // Define your selectors as constants for easy changes and better readability\n var scenarioContentSelector = '.api-scenario-content';\n var scenarioOutputSelector = '.api-scenario-output';\n var scenarioOutputBodySelector = '.api-scenario-output-body';\n var drawflowSelector = '#drawflow';\n var scenarioEditorSelector = '.scenario_editor';\n\n // Ensure parentHeight is a number\n var parentHeight = parseInt($(scenarioContentSelector).css('height'), 10);\n\n // Toggle the showOutput state\n this.showOutput = !this.showOutput;\n if (!this.showOutput) {\n $(scenarioOutputSelector).css('flex', '0');\n $(scenarioOutputBodySelector).hide();\n var editorHeight = $(scenarioEditorSelector).css('height');\n $(drawflowSelector).css('height', editorHeight);\n $(scenarioOutputSelector).removeClass('halfHeight');\n $(drawflowSelector).removeClass('halfHeight');\n } else {\n $(scenarioOutputSelector).css('flex', '1');\n $(scenarioOutputSelector).addClass('halfHeight');\n $(scenarioOutputBodySelector).show();\n $(drawflowSelector).addClass('halfHeight');\n $(drawflowSelector).css('height', parentHeight / 2);\n }\n\n // Adjustments for when parentHeight isn't a valid number\n if (isNaN(parentHeight)) {\n console.error('parentHeight is not a number. Check the height of the api-scenario-content element.');\n // Fallback or additional error handling can be placed here\n }\n }\n }, {\n key: \"resizeEditor\",\n value: function resizeEditor() {\n //FIXME: 창 크기 변경시 자동으로 editor 크기가 조정되지 않아서, 0으로 강제 변경후 다시 layout() 호출\n this.outputEditor.layout({\n width: 0\n });\n this.outputEditor.layout({});\n }\n }, {\n key: \"runScript\",\n value: function runScript() {\n console.log(this.editor[\"export\"]().drawflow);\n var graph = _APIScenarioExecutor__WEBPACK_IMPORTED_MODULE_1__[\"default\"].extractGraphFromStart(this.editor[\"export\"]().drawflow[this.currentScenario].data);\n this.executor = new _APIScenarioExecutor__WEBPACK_IMPORTED_MODULE_1__[\"default\"](graph, this.apiTester, this.outputEditor);\n }\n }, {\n key: \"runScenarioAll\",\n value: function runScenarioAll() {\n if (!this.executor) {\n this.runScript();\n }\n if (!this.executor.isDone) {\n this.executor.executeAll();\n } else {\n this.executor.reset();\n }\n }\n }, {\n key: \"runScenarioStep\",\n value: function runScenarioStep() {\n if (!this.executor) {\n this.runScript();\n }\n if (!this.executor.isDone) {\n this.executor.executeCurrentNode();\n this.executor.moveToNextNode();\n } else {\n this.executor.reset();\n }\n }\n }, {\n key: \"resetScenario\",\n value: function resetScenario() {}\n }, {\n key: \"pauseScenario\",\n value: function pauseScenario() {}\n }, {\n key: \"stopScenario\",\n value: function stopScenario() {\n if (this.executor) this.executor.reset();\n this.outputEditor.setValue('');\n }\n }, {\n key: \"addStart\",\n value: function addStart() {\n var start = \"\\n
    \\n
    Start
    \\n
    \\n \";\n this.editor.addNode('Start', 0, 1, 100, 100, 'start', {}, start);\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n var events = [{\n type: 'click',\n selector: '.open_scenario',\n action: this.openScenario.bind(this)\n }, {\n type: 'click',\n selector: '.export',\n action: this.runScript.bind(this)\n }, {\n type: 'click',\n selector: '.toggle_output',\n action: this.toggleOutput.bind(this)\n }, {\n type: 'click',\n selector: '.run_scenario_step',\n action: this.runScenarioStep.bind(this)\n }, {\n type: 'click',\n selector: '.run_scenario_all',\n action: this.runScenarioAll.bind(this)\n }, {\n type: 'click',\n selector: '.reset_scenario',\n action: this.resetScenario.bind(this)\n }, {\n type: 'click',\n selector: '.pause_scenario',\n action: this.pauseScenario.bind(this)\n }, {\n type: 'click',\n selector: '.stop_scenario',\n action: this.stopScenario.bind(this)\n }, {\n type: 'click',\n selector: '#new_scenario',\n action: this.showNewScenarioModal.bind(this)\n }, {\n type: 'click',\n selector: '.create_scenario',\n action: this.createScenario.bind(this)\n }, {\n type: 'click',\n selector: '.save_scenario',\n action: this.saveScenario.bind(this)\n },\n // {type: 'click', selector: '.add_start', action: this.addStart.bind(this)},\n {\n type: 'click',\n selector: '.delete_scenario',\n action: this.showDeleteModal.bind(this)\n }, {\n type: 'click',\n selector: '.confirm_delete_scenario',\n action: this.removeScenario.bind(this)\n }, {\n type: 'click',\n selector: '.stop_scenario',\n action: this.stopScenario.bind(this)\n }];\n for (var _i = 0, _events = events; _i < _events.length; _i++) {\n var event = _events[_i];\n $(document).on(event.type, event.selector, event.action);\n }\n window.addEventListener('resize', this.resizeEditor.bind(this));\n var me = this;\n $('#drawflow').droppable({\n drop: function drop(event, ui) {\n var x = ui.offset.left - $(this).offset().left;\n var y = ui.offset.top - $(this).offset().top;\n var dataset = ui.draggable[0].dataset;\n var node = \"
    API
    \".concat(dataset.name, \"
    \");\n me.editor.addNode(dataset.name, 1, 1, x, y, dataset.nodeType, dataset, node);\n }\n });\n }\n }, {\n key: \"scenarioListTemplate\",\n value: function scenarioListTemplate(scenario) {\n return \"\\n
  • \\n \").concat(scenario.name, \"\\n
    \\n \\n \\n
    \\n
  • \\n \");\n }\n }, {\n key: \"renderScenarioList\",\n value: function renderScenarioList() {\n var _this = this;\n var scenarioList = this.getScenarioList();\n var scenarioListHtml = scenarioList.map(function (scenario) {\n return _this.scenarioListTemplate(scenario);\n }).join('');\n $('.api-scenario-list').html(scenarioListHtml);\n var nodes = document.querySelectorAll(\".api-scenario-list li\");\n nodes.forEach(function (node) {\n if ($(node).data('id') === _this.currentScenario) {\n node.classList.add('selected');\n }\n });\n }\n }]);\n return APIScenario;\n}();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (APIScenario);\n\n//# sourceURL=webpack://APITestManager/./src/APIScenario.js?"); /***/ }), @@ -48,7 +532,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var monaco_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! monaco-editor */ \"./node_modules/monaco-editor/esm/vs/editor/editor.main.js\");\n/* harmony import */ var _APIClient__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./APIClient */ \"./src/APIClient.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : String(i); }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\nvar APIScenarioExecutor = /*#__PURE__*/function () {\n function APIScenarioExecutor(graph, apiTester, outputEditor) {\n _classCallCheck(this, APIScenarioExecutor);\n this.graph = graph; // The graph data\n this.apiClient = new _APIClient__WEBPACK_IMPORTED_MODULE_1__[\"default\"]();\n this.apiTester = apiTester;\n this.outputEditor = outputEditor;\n this.reset();\n }\n\n // Helper method to find the start node ID\n _createClass(APIScenarioExecutor, [{\n key: \"findStartNodeId\",\n value: function findStartNodeId() {\n for (var nodeId in this.graph) {\n if (this.graph[nodeId][\"class\"] === 'start') {\n return nodeId;\n }\n }\n return null; // Return null if no start node is found\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.currentNodeId = this.findStartNodeId(); // Initialize at the 'start' node\n this.visitedNodes = new Set(); // Keep track of visited nodes\n this.isRunning = false;\n this.isDone = false;\n var allNodes = document.querySelector('#drawflow').querySelectorAll('.drawflow-node');\n allNodes.forEach(function (node) {\n node.classList.remove('current-execution');\n node.classList.remove('result-success');\n node.classList.remove('result-error');\n node.classList.remove('result-abort');\n });\n }\n }, {\n key: \"executeCurrentNode\",\n value: function executeCurrentNode() {\n var _this = this;\n return new Promise(function (resolve, reject) {\n console.log(_this.currentNodeId);\n var allNodes = document.querySelector('#drawflow').querySelectorAll('.drawflow-node');\n allNodes.forEach(function (node) {\n node.classList.remove('current-execution');\n });\n if (!_this.currentNodeId) {\n console.log('No current node to execute.');\n return;\n }\n var currentNode = _this.graph[_this.currentNodeId];\n if (currentNode) {\n _this.isRunning = true;\n _this.visitedNodes.add(_this.currentNodeId); // Mark this node as visited\n\n var nodeElement = document.querySelector('#drawflow').querySelector(\".drawflow-node[id=\\\"node-\".concat(_this.currentNodeId, \"\\\"]\"));\n if (nodeElement) {\n nodeElement.classList.add('current-execution');\n } else {\n console.error('Node with ID ' + _this.currentNodeId + ' not found');\n }\n if (currentNode[\"class\"] === 'api') {\n var model = JSON.parse(JSON.stringify(_this.apiTester.getApiRequestModel(currentNode.data.id)));\n model.responseModel = {};\n _this.appendLog(\"Executing API [\".concat(model.name, \"]\"));\n _this.apiClient.sendAPIRequest(model, _this.logHttpRequest.bind(_this)).then(function (response) {\n _this.isRunning = false;\n _this.logHttpResponse(response);\n if (response.status === 200 || response.status === 201) {\n nodeElement.classList.add('result-success');\n } else {\n nodeElement.classList.add('result-error');\n }\n resolve();\n })[\"catch\"](function (error) {\n nodeElement.classList.add('result-abort');\n $('.toast-body').text(error.message);\n $('.toast').toast('show');\n _this.appendLog(error.message);\n reject(error);\n });\n console.log(\"Executing API request for node: \".concat(currentNode.id, \" - \").concat(currentNode.name));\n } else if (currentNode[\"class\"] === 'start') {\n _this.appendLog('Starting API scenario\\n');\n nodeElement.classList.add('result-success');\n resolve();\n } else {\n console.log(\"Executing script for node: \".concat(currentNode.id, \" - \").concat(currentNode.name));\n resolve();\n }\n }\n });\n }\n }, {\n key: \"appendLog\",\n value: function appendLog(text) {\n var range = new monaco_editor__WEBPACK_IMPORTED_MODULE_0__.Range(this.outputEditor.getModel().getLineCount(), 1, this.outputEditor.getModel().getLineCount(), 1);\n var id = {\n major: 1,\n minor: 1\n };\n var op = {\n identifier: id,\n range: range,\n text: text + '\\n',\n forceMoveMarkers: true\n };\n this.outputEditor.executeEdits(\"my-source\", [op]);\n }\n }, {\n key: \"logHttpRequest\",\n value: function logHttpRequest(model) {\n console.log(model);\n var log = \"[API Request]\\n\".concat(model.method, \" \").concat(model.path, \" HTTP/1.1\\n[Request Headers]\\n\").concat(this.parseRequestHeaders(model.headers), \"\\n[Request Body]\\n\").concat(model.requestBody);\n this.appendLog(log);\n }\n }, {\n key: \"logHttpResponse\",\n value: function logHttpResponse(response) {\n var log = \"[Response]\\nHTTP/1.1 \".concat(response.status, \"\\n[Response Headers]\\n\").concat(this.parseHeaders(response.headers), \"\\n[Response Body]\\n\").concat(response.body);\n this.appendLog(log);\n }\n }, {\n key: \"parseRequestHeaders\",\n value: function parseRequestHeaders(headers) {\n var parsedHeaders = '';\n headers.forEach(function (header) {\n if (header.enabled) {\n parsedHeaders += \"\".concat(header.key, \": \").concat(header.value, \"\\n\");\n }\n });\n return parsedHeaders;\n }\n }, {\n key: \"parseHeaders\",\n value: function parseHeaders(headers) {\n //convert object to string with \\n separation\n //sort header by key\n\n var parsedHeaders = '';\n var sortedKeys = Object.keys(headers).sort(); // Sorting the keys alphabetically\n sortedKeys.forEach(function (key) {\n parsedHeaders += \"\".concat(key, \": \").concat(headers[key], \"\\n\");\n });\n return parsedHeaders;\n }\n\n // Method to move to the next node\n }, {\n key: \"moveToNextNode\",\n value: function moveToNextNode() {\n var _this2 = this;\n var currentNode = this.graph[this.currentNodeId];\n console.log(currentNode);\n if (currentNode && currentNode.connections.length > 0) {\n // Find the next unvisited node\n var nextNode = currentNode.connections.find(function (nodeId) {\n return !_this2.visitedNodes.has(nodeId);\n });\n if (nextNode) {\n this.currentNodeId = nextNode;\n } else {\n console.log('No more unvisited connections to move to.');\n this.currentNodeId = null; // No more nodes to visit\n }\n } else {\n console.log('Current node has no connections or does not exist.');\n this.currentNodeId = null; // No more nodes to visit\n this.isDone = true;\n }\n }\n }, {\n key: \"executeAll\",\n value: function () {\n var _executeAll = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!this.currentNodeId) {\n _context.next = 14;\n break;\n }\n console.log(this.currentNodeId);\n _context.prev = 2;\n _context.next = 5;\n return this.executeCurrentNode();\n case 5:\n _context.next = 10;\n break;\n case 7:\n _context.prev = 7;\n _context.t0 = _context[\"catch\"](2);\n console.error('Error executing node: ', _context.t0);\n // Handle error or break loop if necessary\n case 10:\n _context.next = 12;\n return this.moveToNextNodeWithDelay(250);\n case 12:\n _context.next = 0;\n break;\n case 14:\n console.log('Completed execution of all API nodes.');\n case 15:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this, [[2, 7]]);\n }));\n function executeAll() {\n return _executeAll.apply(this, arguments);\n }\n return executeAll;\n }()\n }, {\n key: \"moveToNextNodeWithDelay\",\n value: function moveToNextNodeWithDelay(delay) {\n var _this3 = this;\n return new Promise(function (resolve) {\n setTimeout(function () {\n _this3.moveToNextNode();\n resolve();\n }, delay);\n });\n }\n }], [{\n key: \"extractGraphFromStart\",\n value: function extractGraphFromStart(graphData) {\n console.log(graphData);\n var graph = {};\n\n // Helper function to recursively build the graph\n function buildGraph(nodeId) {\n var node = graphData[nodeId];\n if (!node || graph[nodeId]) {\n // If the node doesn't exist or has already been visited, stop the recursion\n return;\n }\n\n // Initialize the node in the graph\n graph[nodeId] = {\n id: node.id,\n name: node.name,\n \"class\": node[\"class\"],\n data: node.data,\n connections: []\n };\n\n // If the node has outputs, recursively add connected nodes\n if (node.outputs) {\n Object.values(node.outputs).forEach(function (output) {\n output.connections.forEach(function (connection) {\n graph[nodeId].connections.push(connection.node);\n buildGraph(connection.node); // Recurse\n });\n });\n }\n }\n\n // Find the start node\n for (var nodeId in graphData) {\n if (graphData[nodeId][\"class\"] === 'start') {\n buildGraph(nodeId); // Start building the graph from the 'start' node\n break; // Assuming there's only one start node\n }\n }\n return graph;\n }\n }]);\n return APIScenarioExecutor;\n}();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (APIScenarioExecutor);\n\n//# sourceURL=webpack://APITestManager/./src/APIScenarioExecutor.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var monaco_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! monaco-editor */ \"include-loader!./node_modules/monaco-editor/esm/vs/editor/editor.main.js\");\n/* harmony import */ var _APIClient__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./APIClient */ \"./src/APIClient.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : String(i); }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\nvar APIScenarioExecutor = /*#__PURE__*/function () {\n function APIScenarioExecutor(graph, apiTester, outputEditor) {\n _classCallCheck(this, APIScenarioExecutor);\n this.graph = graph; // The graph data\n this.apiClient = new _APIClient__WEBPACK_IMPORTED_MODULE_1__[\"default\"]();\n this.apiTester = apiTester;\n this.outputEditor = outputEditor;\n this.reset();\n }\n\n // Helper method to find the start node ID\n _createClass(APIScenarioExecutor, [{\n key: \"findStartNodeId\",\n value: function findStartNodeId() {\n for (var nodeId in this.graph) {\n if (this.graph[nodeId][\"class\"] === 'start') {\n return nodeId;\n }\n }\n return null; // Return null if no start node is found\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.currentNodeId = this.findStartNodeId(); // Initialize at the 'start' node\n this.visitedNodes = new Set(); // Keep track of visited nodes\n this.isRunning = false;\n this.isDone = false;\n var allNodes = document.querySelector('#drawflow').querySelectorAll('.drawflow-node');\n allNodes.forEach(function (node) {\n node.classList.remove('current-execution');\n node.classList.remove('result-success');\n node.classList.remove('result-error');\n node.classList.remove('result-abort');\n });\n }\n }, {\n key: \"executeCurrentNode\",\n value: function executeCurrentNode() {\n var _this = this;\n return new Promise(function (resolve, reject) {\n console.log(_this.currentNodeId);\n var allNodes = document.querySelector('#drawflow').querySelectorAll('.drawflow-node');\n allNodes.forEach(function (node) {\n node.classList.remove('current-execution');\n });\n if (!_this.currentNodeId) {\n console.log('No current node to execute.');\n return;\n }\n var currentNode = _this.graph[_this.currentNodeId];\n if (currentNode) {\n _this.isRunning = true;\n _this.visitedNodes.add(_this.currentNodeId); // Mark this node as visited\n\n var nodeElement = document.querySelector('#drawflow').querySelector(\".drawflow-node[id=\\\"node-\".concat(_this.currentNodeId, \"\\\"]\"));\n if (nodeElement) {\n nodeElement.classList.add('current-execution');\n } else {\n console.error('Node with ID ' + _this.currentNodeId + ' not found');\n }\n if (currentNode[\"class\"] === 'api') {\n var model = JSON.parse(JSON.stringify(_this.apiTester.getApiRequestModel(currentNode.data.id)));\n model.responseModel = {};\n _this.appendLog(\"===============================================================\\nExecuting API [\".concat(model.name, \"]\"));\n _this.apiClient.sendAPIRequest(model, _this.logHttpRequest.bind(_this)).then(function (response) {\n _this.isRunning = false;\n _this.logHttpResponse(response);\n if (response.status === 200 || response.status === 201) {\n nodeElement.classList.add('result-success');\n } else {\n nodeElement.classList.add('result-error');\n }\n resolve();\n })[\"catch\"](function (error) {\n nodeElement.classList.add('result-abort');\n $('.toast-body').text(error.message);\n $('.toast').toast('show');\n _this.appendLog(error.message);\n reject(error);\n });\n console.log(\"===============================================================\\nExecuting API request for node: \".concat(currentNode.id, \" - \").concat(currentNode.name));\n } else if (currentNode[\"class\"] === 'start') {\n _this.appendLog('Starting API scenario\\n');\n nodeElement.classList.add('result-success');\n resolve();\n } else {\n console.log(\"Executing script for node: \".concat(currentNode.id, \" - \").concat(currentNode.name));\n resolve();\n }\n }\n });\n }\n }, {\n key: \"appendLog\",\n value: function appendLog(text) {\n var range = new monaco_editor__WEBPACK_IMPORTED_MODULE_0__.Range(this.outputEditor.getModel().getLineCount(), 1, this.outputEditor.getModel().getLineCount(), 1);\n var id = {\n major: 1,\n minor: 1\n };\n var op = {\n identifier: id,\n range: range,\n text: text + '\\n\\n',\n forceMoveMarkers: true\n };\n this.outputEditor.executeEdits(\"my-source\", [op]);\n }\n }, {\n key: \"logHttpRequest\",\n value: function logHttpRequest(model) {\n console.log(model);\n var log = \"[API Request]\\n\".concat(model.method, \" \").concat(model.path, \" HTTP/1.1\\n[Request Headers]\\n\").concat(this.parseRequestHeaders(model.headers), \"\\n[Request Body]\\n\").concat(model.requestBody);\n this.appendLog(log);\n }\n }, {\n key: \"logHttpResponse\",\n value: function logHttpResponse(response) {\n var log = \"[Response]\\nHTTP/1.1 \".concat(response.status, \"\\n[Response Headers]\\n\").concat(this.parseHeaders(response.headers), \"\\n[Response Body]\\n\").concat(response.body, \"\\n\");\n this.appendLog(log);\n }\n }, {\n key: \"parseRequestHeaders\",\n value: function parseRequestHeaders(headers) {\n var parsedHeaders = '';\n headers.forEach(function (header) {\n if (header.enabled) {\n parsedHeaders += \"\".concat(header.key, \": \").concat(header.value, \"\\n\");\n }\n });\n return parsedHeaders;\n }\n }, {\n key: \"parseHeaders\",\n value: function parseHeaders(headers) {\n //convert object to string with \\n separation\n //sort header by key\n\n var parsedHeaders = '';\n var sortedKeys = Object.keys(headers).sort(); // Sorting the keys alphabetically\n sortedKeys.forEach(function (key) {\n parsedHeaders += \"\".concat(key, \": \").concat(headers[key], \"\\n\");\n });\n return parsedHeaders;\n }\n\n // Method to move to the next node\n }, {\n key: \"moveToNextNode\",\n value: function moveToNextNode() {\n var _this2 = this;\n var currentNode = this.graph[this.currentNodeId];\n console.log(currentNode);\n if (currentNode && currentNode.connections.length > 0) {\n // Find the next unvisited node\n var nextNode = currentNode.connections.find(function (nodeId) {\n return !_this2.visitedNodes.has(nodeId);\n });\n if (nextNode) {\n this.currentNodeId = nextNode;\n } else {\n console.log('No more unvisited connections to move to.');\n this.currentNodeId = null; // No more nodes to visit\n }\n } else {\n console.log('Current node has no connections or does not exist.');\n this.currentNodeId = null; // No more nodes to visit\n this.isDone = true;\n }\n }\n }, {\n key: \"executeAll\",\n value: function () {\n var _executeAll = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!this.currentNodeId) {\n _context.next = 14;\n break;\n }\n console.log(this.currentNodeId);\n _context.prev = 2;\n _context.next = 5;\n return this.executeCurrentNode();\n case 5:\n _context.next = 10;\n break;\n case 7:\n _context.prev = 7;\n _context.t0 = _context[\"catch\"](2);\n console.error('Error executing node: ', _context.t0);\n // Handle error or break loop if necessary\n case 10:\n _context.next = 12;\n return this.moveToNextNodeWithDelay(250);\n case 12:\n _context.next = 0;\n break;\n case 14:\n console.log('Completed execution of all API nodes.');\n case 15:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this, [[2, 7]]);\n }));\n function executeAll() {\n return _executeAll.apply(this, arguments);\n }\n return executeAll;\n }()\n }, {\n key: \"moveToNextNodeWithDelay\",\n value: function moveToNextNodeWithDelay(delay) {\n var _this3 = this;\n return new Promise(function (resolve) {\n setTimeout(function () {\n _this3.moveToNextNode();\n resolve();\n }, delay);\n });\n }\n }], [{\n key: \"extractGraphFromStart\",\n value: function extractGraphFromStart(graphData) {\n console.log(graphData);\n var graph = {};\n\n // Helper function to recursively build the graph\n function buildGraph(nodeId) {\n var node = graphData[nodeId];\n if (!node || graph[nodeId]) {\n // If the node doesn't exist or has already been visited, stop the recursion\n return;\n }\n\n // Initialize the node in the graph\n graph[nodeId] = {\n id: node.id,\n name: node.name,\n \"class\": node[\"class\"],\n data: node.data,\n connections: []\n };\n\n // If the node has outputs, recursively add connected nodes\n if (node.outputs) {\n Object.values(node.outputs).forEach(function (output) {\n output.connections.forEach(function (connection) {\n graph[nodeId].connections.push(connection.node);\n buildGraph(connection.node); // Recurse\n });\n });\n }\n }\n\n // Find the start node\n for (var nodeId in graphData) {\n if (graphData[nodeId][\"class\"] === 'start') {\n buildGraph(nodeId); // Start building the graph from the 'start' node\n break; // Assuming there's only one start node\n }\n }\n return graph;\n }\n }]);\n return APIScenarioExecutor;\n}();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (APIScenarioExecutor);\n\n//# sourceURL=webpack://APITestManager/./src/APIScenarioExecutor.js?"); /***/ }), @@ -59,7 +543,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var monaco_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! monaco-editor */ \"./node_modules/monaco-editor/esm/vs/editor/editor.main.js\");\n/* harmony import */ var _APIClient__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./APIClient */ \"./src/APIClient.js\");\n/* harmony import */ var _components_EditableInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/EditableInput */ \"./src/components/EditableInput.js\");\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : String(i); }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar APITester = /*#__PURE__*/function () {\n function APITester() {\n _classCallCheck(this, APITester);\n this.servers = [];\n this.apiTabTitleTarget = '#apiRequestTabTitle';\n this.apiTabContentTarget = '#apiRequestTabContent';\n this.collectionTarget = '#side_menubar';\n this.currentIndex = 0;\n this.apiRequests = []; //탭 열린 API\n this.collections = []; //API 컬렉션\n this.requestEditors = []; //API request body editor\n this.responseEditors = []; //API response body editor\n this.consoleEditors = []; //API console editor\n this.preRequestEditors = [];\n this.postRequestEditors = [];\n this.apiClient = new _APIClient__WEBPACK_IMPORTED_MODULE_1__[\"default\"]();\n console.log('test');\n }\n _createClass(APITester, [{\n key: \"renderServers\",\n value: function renderServers(selectedServer) {\n var optionsHtml = this.servers.map(function (server) {\n return \"\\n \\n \");\n }).join('');\n return \"\");\n }\n }, {\n key: \"basePath\",\n value: function basePath(serverId) {\n if (serverId === undefined || serverId === null || serverId === '') {\n return '';\n }\n return this.servers.filter(function (server) {\n return server.id == serverId;\n })[0].basePath; // == : 타입 비교 없이 값만 비교\n }\n }, {\n key: \"apiRequestTemplate\",\n value: function apiRequestTemplate(apiRequest, index) {\n return \"\\n
    \\n
    \").concat(apiRequest.collectionName, \" > \").concat(apiRequest.name, \"
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \").concat(this.renderServers(apiRequest.server), \"\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
      \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \").concat(this.renderParams(apiRequest.queryParams), \"\\n \\n
    #\\uC774\\uB984\\uAC12\\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \").concat(this.renderHeaders(apiRequest.headers), \"\\n \\n
    #\\uC774\\uB984\\uAC12\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Response\\n \\n \\n \\n
    \\n
      \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\uC774\\uB984\\uAC12
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \");\n }\n }, {\n key: \"queryParamTemplate\",\n value: function queryParamTemplate(queryParam, index) {\n return \"\\n \\n \\n
    \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \");\n }\n }, {\n key: \"headerTemplate\",\n value: function headerTemplate(header, index) {\n return \"\\n \\n \\n
    \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \");\n }\n }, {\n key: \"responseHeaderTemplate\",\n value: function responseHeaderTemplate(key, value) {\n return \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \");\n }\n }, {\n key: \"collectionTemplate\",\n value: function collectionTemplate(collection, index) {\n var _this = this;\n return \"\\n
  • \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
      \\n \").concat(collection.apis.map(function (api, apiIndex) {\n return _this.collectionApiTemplate(api, apiIndex, collection.id);\n }).join(''), \"\\n
    \\n
    \\n
  • \\n \");\n }\n }, {\n key: \"collectionApiTemplate\",\n value: function collectionApiTemplate(api, apiIndex, collectionId) {\n return \"\\n
  • \\n \").concat(api.name, \"\\n
    \\n \\n \\n
    \\n
  • \\n \");\n }\n }, {\n key: \"init\",\n value: function init(servers) {\n if (servers) {\n this.servers = servers;\n if (this.servers.length === 0) {\n $('.toast-body').text('서버관리에서 서버를 등록해주세요.');\n $('.toast').toast('show');\n }\n }\n this.bindEvents();\n this.loadCollections();\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n var events = [{\n selector: '.btn_add_header',\n action: this.addHeader.bind(this)\n }, {\n selector: '.btn_remove_header',\n action: this.removeHeader.bind(this)\n }, {\n selector: '.btn_add_query',\n action: this.addQueryParam.bind(this)\n }, {\n selector: '.btn_remove_query',\n action: this.removeQueryParam.bind(this)\n }, {\n selector: '.send',\n action: this.handleSendAPIRequest.bind(this)\n }, {\n selector: '.save',\n action: this.saveAPIRequest.bind(this)\n }, {\n selector: '.save_collection',\n action: this.addCollection.bind(this)\n }, {\n selector: '#cancel-ajax',\n action: this.cancelAjaxRequest.bind(this)\n }, {\n selector: '#new_collection',\n action: this.showNewCollectionModal.bind(this)\n }, {\n selector: '#new_request',\n action: this.showNewApiRequestModal.bind(this)\n }, {\n selector: '.edit_collection',\n action: this.showCollectionEditModal.bind(this)\n }, {\n selector: '.delete_collection',\n action: this.showCollectionDeleteModal.bind(this)\n }, {\n selector: '.confirm_delete',\n action: this.removeCollection.bind(this)\n }, {\n selector: '.add_new_request',\n action: this.addAPIRequest.bind(this)\n }, {\n selector: '.edit_api_request',\n action: this.showEditNameModal.bind(this)\n }, {\n selector: '.delete_api_request',\n action: this.showDeleteApiRequestModal.bind(this)\n }, {\n selector: '.open_api_request',\n action: this.openApiRequest.bind(this)\n }, {\n selector: '.confirm_delete_api',\n action: this.deleteApiRequest.bind(this)\n }, {\n selector: '.close_tab',\n action: this.closeTab.bind(this)\n }];\n for (var _i = 0, _events = events; _i < _events.length; _i++) {\n var event = _events[_i];\n $(document).on('click', event.selector, event.action);\n }\n $(document).on('input', '.query_params input', this.handleUIUpdate.bind(this));\n $(document).on('input', '.query_params input', this.buildPath.bind(this));\n $(document).on('change', '.query_params input', this.handleUIUpdate.bind(this));\n $(document).on('change', '.query_params input', this.buildPath.bind(this));\n $(document).on('change', '.path', this.parseParam.bind(this));\n $(document).on('change', '.request_headers input', this.handleUIUpdate.bind(this));\n $(document).on('change', '.api_request_info select, .api_request_info input', this.handleUIUpdate.bind(this));\n $(document).on('change', '.api_request_info select', this.handleUpdateServer.bind(this));\n window.addEventListener('resize', this.resizeEditor.bind(this));\n }\n }, {\n key: \"resizeEditor\",\n value: function resizeEditor() {\n //FIXME: 창 크기 변경시 자동으로 editor 크기가 조정되지 않아서, 0으로 강제 변경후 다시 layout() 호출\n\n for (var i = 0; i < this.requestEditors.length; i++) {\n this.requestEditors[i].layout({\n width: 0\n });\n }\n for (var _i2 = 0; _i2 < this.responseEditors.length; _i2++) {\n this.responseEditors[_i2].layout({\n width: 0\n });\n }\n for (var _i3 = 0; _i3 < this.preRequestEditors.length; _i3++) {\n this.preRequestEditors[_i3].layout({\n width: 0\n });\n }\n for (var _i4 = 0; _i4 < this.postRequestEditors.length; _i4++) {\n this.postRequestEditors[_i4].layout({\n width: 0\n });\n }\n for (var _i5 = 0; _i5 < this.requestEditors.length; _i5++) {\n this.requestEditors[_i5].layout({});\n }\n for (var _i6 = 0; _i6 < this.responseEditors.length; _i6++) {\n this.responseEditors[_i6].layout({});\n }\n for (var _i7 = 0; _i7 < this.preRequestEditors.length; _i7++) {\n this.preRequestEditors[_i7].layout({});\n }\n for (var _i8 = 0; _i8 < this.postRequestEditors.length; _i8++) {\n this.postRequestEditors[_i8].layout({});\n }\n }\n }, {\n key: \"showCollectionDeleteModal\",\n value: function showCollectionDeleteModal(event) {\n var collectionId = $(event.currentTarget).closest('button').data('collection');\n $('#confirm_delete_modal').find('.confirm_delete').data('id', collectionId);\n $('#confirm_delete_modal').modal('show');\n }\n }, {\n key: \"getApiRequestModel\",\n value: function getApiRequestModel(apiId) {\n var foundApi = null;\n this.collections.forEach(function (collection) {\n collection.apis.forEach(function (api) {\n if (api.id === apiId) {\n foundApi = api;\n }\n });\n });\n return foundApi;\n }\n }, {\n key: \"showCollectionEditModal\",\n value: function showCollectionEditModal(event) {\n var me = this;\n var collectionId = $(event.currentTarget).closest('button').data('collection');\n var collection = this.collections.filter(function (collection) {\n return collection.id === collectionId;\n })[0];\n $('#edit_name_modal').find('input').val('');\n $('#edit_name_modal').modal('show');\n var saveBtn = $('#edit_name_modal').find('button.change_name');\n saveBtn.off('click');\n saveBtn.on('click', function () {\n collection.name = $('#edit_name_modal').find('input').val();\n me.saveCollection(collection.id, collection.name);\n me.renderCollections();\n $('#edit_name_modal').modal('hide');\n });\n }\n }, {\n key: \"showDeleteApiRequestModal\",\n value: function showDeleteApiRequestModal(event) {\n var collectionId = $(event.currentTarget).closest('li').data('collection');\n var apiId = $(event.currentTarget).closest('li').data('id');\n $('#confirm_delete_api_modal').find('.confirm_delete_api').data('id', apiId);\n $('#confirm_delete_api_modal').find('.confirm_delete_api').data('collection', collectionId);\n $('#confirm_delete_api_modal').modal('show');\n }\n }, {\n key: \"showNewApiRequestModal\",\n value: function showNewApiRequestModal(event) {\n if (this.collections.length == 0) {\n $('.toast-body').text('새로운 컬렉션을 추가해 주세요.');\n $('.toast').toast('show');\n return;\n }\n $('#new_api_request_modal').modal('show');\n }\n }, {\n key: \"showNewCollectionModal\",\n value: function showNewCollectionModal(event) {\n $('#new_collection_modal').find('input').val('');\n $('#new_collection_modal').modal('show');\n }\n }, {\n key: \"showEditNameModal\",\n value: function showEditNameModal(event) {\n var me = this;\n var apiId = $(event.currentTarget).closest('li').data('id');\n var collectionId = $(event.currentTarget).closest('li').data('collection');\n var collection = this.collections.filter(function (collection) {\n return collection.id === collectionId;\n })[0];\n var apiRequest = collection.apis.filter(function (api) {\n return api.id === apiId;\n })[0];\n apiRequest.collectionId = collectionId;\n var saveBtn = $('#edit_name_modal').find('button.change_name');\n saveBtn.off('click');\n saveBtn.on('click', function () {\n apiRequest.name = $('#edit_name_modal').find('input').val();\n me.changeAPIName(apiRequest);\n me.renderCollections();\n $('#edit_name_modal').modal('hide');\n\n //탭이 열려 있으면, 닫았다가 다시 열어야 함.\n me.renderTabHeader();\n me.renderTabContent(apiRequest.index);\n });\n $('#edit_name_modal').find('input').val('');\n $('#edit_name_modal').modal('show');\n }\n }, {\n key: \"getFieldValue\",\n value: function getFieldValue(element) {\n if ($(element).is('select') || $(element).is('input[type=\"text\"]')) {\n return $(element).val();\n }\n if ($(element).is('input[type=\"checkbox\"]')) {\n return $(element).is(':checked');\n }\n }\n }, {\n key: \"handleUIUpdate\",\n value: function handleUIUpdate(event) {\n if (event) {\n event.preventDefault();\n var element = event.currentTarget;\n var fieldName = $(element).attr('name');\n var newValue = this.getFieldValue(element);\n var tabIndex = $('#apiRequestTabContent').children().index($(event.currentTarget).closest('.api_request'));\n var model = this.apiRequests[tabIndex];\n if (fieldName !== '') {\n _.set(model, fieldName, newValue);\n }\n }\n }\n }, {\n key: \"handleUpdateServer\",\n value: function handleUpdateServer(event) {\n var tabIndex = $('#apiRequestTabContent').children().index($(event.currentTarget).closest('.api_request'));\n var model = this.apiRequests[tabIndex];\n var target = $('#api_request_' + model.id);\n target.find('input[name=\"basePath\"]').val(this.basePath(model.server));\n }\n }, {\n key: \"renderParams\",\n value: function renderParams(params) {\n var _this2 = this;\n return params.map(function (param, index) {\n return _this2.queryParamTemplate(param, index);\n }).join('');\n }\n }, {\n key: \"renderHeaders\",\n value: function renderHeaders(headers) {\n var _this3 = this;\n return headers.map(function (header, index) {\n return _this3.headerTemplate(header, index);\n }).join('');\n }\n }, {\n key: \"renderTabHeader\",\n value: function renderTabHeader() {\n var apiRequestTabTitle = $('#apiRequestTabTitle');\n apiRequestTabTitle.empty();\n for (var idx = 0; idx < this.apiRequests.length; idx++) {\n var li = \"
  • \\n \\n
  • \");\n apiRequestTabTitle.append(li);\n }\n }\n }, {\n key: \"renderTabContent\",\n value: function renderTabContent(index) {\n var me = this;\n var apiRequestTabContent = $(this.apiTabContentTarget);\n var model = this.apiRequests[index];\n apiRequestTabContent.append(this.apiRequestTemplate(model, index));\n apiRequestTabContent.find(\"#api_request_\".concat(model.id)).find('.editableInput').each(function () {\n var editableInput = new _components_EditableInput__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n name: 'path',\n value: model.path,\n placeholder: 'Enter text here...',\n label: 'Path'\n });\n console.log(this);\n editableInput.init(this, function (event) {\n me.parseParam(event);\n });\n });\n this.openTab(model.id);\n var target = $('#api_request_' + model.id);\n var requestBodyEditor = monaco_editor__WEBPACK_IMPORTED_MODULE_0__.editor.create(target.find(\".request_body\")[0], {\n value: model.requestBody,\n language: 'json',\n automaticLayout: true\n });\n me.requestEditors.push(requestBodyEditor);\n target.find(\".request_body\")[0].addEventListener('shown.bs.tab', function () {\n me.requestEditors[index].layout();\n });\n me.requestEditors[index].onDidChangeModelContent(function (e) {\n model.requestBody = requestBodyEditor.getValue();\n });\n target.find('.request_body_type').on('change', function () {\n var model = requestBodyEditor.getModel();\n monaco_editor__WEBPACK_IMPORTED_MODULE_0__.editor.setModelLanguage(model, $(this).val());\n });\n var responseBodyEditor = monaco_editor__WEBPACK_IMPORTED_MODULE_0__.editor.create(target.find(\".response_body\")[0], {\n value: '',\n language: 'json',\n automaticLayout: true\n });\n me.responseEditors.push(responseBodyEditor);\n var consoleEditor = monaco_editor__WEBPACK_IMPORTED_MODULE_0__.editor.create(target.find(\".console\")[0], {\n value: '',\n automaticLayout: true\n });\n me.consoleEditors.push(consoleEditor);\n var preRequestEditor = monaco_editor__WEBPACK_IMPORTED_MODULE_0__.editor.create(target.find(\".pre-request\")[0], {\n value: model.preRequestScript,\n language: 'javascript',\n automaticLayout: true\n });\n me.preRequestEditors.push(preRequestEditor);\n target.find(\".pre-request\")[0].addEventListener('shown.bs.tab', function () {\n me.preRequestEditors[index].layout();\n });\n me.preRequestEditors[index].onDidChangeModelContent(function (e) {\n model.preRequestScript = preRequestEditor.getValue();\n });\n var postRequestEditor = monaco_editor__WEBPACK_IMPORTED_MODULE_0__.editor.create(target.find(\".post-request\")[0], {\n value: model.postRequestScript,\n language: 'javascript',\n automaticLayout: true\n });\n me.postRequestEditors.push(postRequestEditor);\n target.find(\".post-request\")[0].addEventListener('shown.bs.tab', function () {\n me.postRequestEditors[index].layout();\n });\n me.postRequestEditors[index].onDidChangeModelContent(function (e) {\n model.postRequestScript = postRequestEditor.getValue();\n });\n }\n }, {\n key: \"renderResponse\",\n value: function renderResponse(tabIndex) {\n var _this4 = this;\n var model = this.apiRequests[tabIndex];\n var target = $('#api_request_' + model.id);\n target.find('.response_headers').empty();\n target.find(\".response_status\").empty();\n try {\n var parsedJson = JSON.parse(model.responseModel.body);\n var formattedJson = JSON.stringify(parsedJson, null, 2);\n this.responseEditors[tabIndex].setValue(formattedJson);\n } catch (e) {\n this.responseEditors[tabIndex].setValue(model.responseModel.body);\n }\n if (model.responseModel && model.responseModel.headers) {\n var headers = model.responseModel.headers;\n Object.entries(headers).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n target.find('.response_headers').append(_this4.responseHeaderTemplate(key, value));\n });\n }\n target.find(\".response_status\").text(\"status: \" + model.responseModel.status);\n target.find(\".response_time\").text(\"time: \" + model.responseModel.time + \"ms\");\n target.find(\".response_size\").text(\"size: \" + model.responseModel.size + \"bytes\");\n }\n }, {\n key: \"customHelper\",\n value: function customHelper(event) {\n // Create and return the custom helper element\n var name = $(event.target).closest('.api_request_sortable').find('.open_api_request').text().trim();\n var apiId = $(event.target).closest('.api_request_sortable').data('id');\n return \"
    \\n
    \").concat(name, \"
    \\n
    \");\n }\n }, {\n key: \"renderCollections\",\n value: function renderCollections() {\n var select = $('#modal_collection');\n var sidemenu = $(this.collectionTarget);\n select.empty();\n sidemenu.empty();\n for (var i = 0; i < this.collections.length; i++) {\n sidemenu.append(this.renderCollection(this.collections[i], i));\n var option = $('\\n \");\n }).join('');\n return \"\");\n }\n }, {\n key: \"basePath\",\n value: function basePath(serverId) {\n if (serverId === undefined || serverId === null || serverId === '') {\n return '';\n }\n return this.servers.filter(function (server) {\n return server.id == serverId;\n })[0].basePath; // == : 타입 비교 없이 값만 비교\n }\n }, {\n key: \"apiRequestTemplate\",\n value: function apiRequestTemplate(apiRequest, index) {\n return \"\\n
    \\n
    \").concat(apiRequest.collectionName, \" > \").concat(apiRequest.name, \"
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \").concat(this.renderServers(apiRequest.server), \"\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
      \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \").concat(this.renderHeaders(apiRequest.headers), \"\\n \\n
    #\\uC774\\uB984\\uAC12\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Response\\n \\n \\n \\n
    \\n
      \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\uC774\\uB984\\uAC12
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \");\n }\n }, {\n key: \"headerTemplate\",\n value: function headerTemplate(header, index) {\n return \"\\n \\n \\n
    \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \");\n }\n }, {\n key: \"responseHeaderTemplate\",\n value: function responseHeaderTemplate(key, value) {\n return \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \");\n }\n }, {\n key: \"collectionTemplate\",\n value: function collectionTemplate(collection, index) {\n var _this = this;\n return \"\\n
  • \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
      \\n \").concat(collection.apis.map(function (api, apiIndex) {\n return _this.collectionApiTemplate(api, apiIndex, collection.id);\n }).join(''), \"\\n
    \\n
    \\n
  • \\n \");\n }\n }, {\n key: \"collectionApiTemplate\",\n value: function collectionApiTemplate(api, apiIndex, collectionId) {\n return \"\\n
  • \\n \").concat(api.name, \"\\n
    \\n \\n \\n
    \\n
  • \\n \");\n }\n }, {\n key: \"init\",\n value: function init(servers) {\n if (servers) {\n this.servers = servers;\n if (this.servers.length === 0) {\n $('.toast-body').text('서버관리에서 서버를 등록해주세요.');\n $('.toast').toast('show');\n }\n }\n this.bindEvents();\n this.loadCollections();\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n var events = [{\n selector: '.btn_add_header',\n action: this.addHeader.bind(this)\n }, {\n selector: '.btn_remove_header',\n action: this.removeHeader.bind(this)\n }, {\n selector: '.send',\n action: this.handleSendAPIRequest.bind(this)\n }, {\n selector: '.save',\n action: this.saveAPIRequest.bind(this)\n }, {\n selector: '.save_collection',\n action: this.addCollection.bind(this)\n }, {\n selector: '#cancel-ajax',\n action: this.cancelAjaxRequest.bind(this)\n }, {\n selector: '#new_collection',\n action: this.showNewCollectionModal.bind(this)\n }, {\n selector: '#new_request',\n action: this.showNewApiRequestModal.bind(this)\n }, {\n selector: '.edit_collection',\n action: this.showCollectionEditModal.bind(this)\n }, {\n selector: '.delete_collection',\n action: this.showCollectionDeleteModal.bind(this)\n }, {\n selector: '.confirm_delete',\n action: this.removeCollection.bind(this)\n }, {\n selector: '.add_new_request',\n action: this.addAPIRequest.bind(this)\n }, {\n selector: '.edit_api_request',\n action: this.showEditNameModal.bind(this)\n }, {\n selector: '.delete_api_request',\n action: this.showDeleteApiRequestModal.bind(this)\n }, {\n selector: '.open_api_request',\n action: this.openApiRequest.bind(this)\n }, {\n selector: '.confirm_delete_api',\n action: this.deleteApiRequest.bind(this)\n }, {\n selector: '.close_tab',\n action: this.closeTab.bind(this)\n }];\n for (var _i = 0, _events = events; _i < _events.length; _i++) {\n var event = _events[_i];\n $(document).on('click', event.selector, event.action);\n }\n $(document).on('change', '.path', this.parseParam.bind(this));\n $(document).on('change', '.request_headers input', this.handleUIUpdate.bind(this));\n $(document).on('change', '.api_request_info select, .api_request_info input', this.handleUIUpdate.bind(this));\n $(document).on('change', '.api_request_info select', this.handleUpdateServer.bind(this));\n window.addEventListener('resize', this.resizeEditor.bind(this));\n }\n }, {\n key: \"resizeEditor\",\n value: function resizeEditor() {\n //FIXME: 창 크기 변경시 자동으로 editor 크기가 조정되지 않아서, 0으로 강제 변경후 다시 layout() 호출\n\n for (var i = 0; i < this.requestEditors.length; i++) {\n this.requestEditors[i].layout({\n width: 0\n });\n }\n for (var _i2 = 0; _i2 < this.responseEditors.length; _i2++) {\n this.responseEditors[_i2].layout({\n width: 0\n });\n }\n for (var _i3 = 0; _i3 < this.preRequestEditors.length; _i3++) {\n this.preRequestEditors[_i3].layout({\n width: 0\n });\n }\n for (var _i4 = 0; _i4 < this.postRequestEditors.length; _i4++) {\n this.postRequestEditors[_i4].layout({\n width: 0\n });\n }\n for (var _i5 = 0; _i5 < this.requestEditors.length; _i5++) {\n this.requestEditors[_i5].layout({});\n }\n for (var _i6 = 0; _i6 < this.responseEditors.length; _i6++) {\n this.responseEditors[_i6].layout({});\n }\n for (var _i7 = 0; _i7 < this.preRequestEditors.length; _i7++) {\n this.preRequestEditors[_i7].layout({});\n }\n for (var _i8 = 0; _i8 < this.postRequestEditors.length; _i8++) {\n this.postRequestEditors[_i8].layout({});\n }\n }\n }, {\n key: \"showCollectionDeleteModal\",\n value: function showCollectionDeleteModal(event) {\n var collectionId = $(event.currentTarget).closest('button').data('collection');\n $('#confirm_delete_modal').find('.confirm_delete').data('id', collectionId);\n $('#confirm_delete_modal').modal('show');\n }\n }, {\n key: \"getApiRequestModel\",\n value: function getApiRequestModel(apiId) {\n var foundApi = null;\n this.collections.forEach(function (collection) {\n collection.apis.forEach(function (api) {\n if (api.id === apiId) {\n foundApi = api;\n }\n });\n });\n return foundApi;\n }\n }, {\n key: \"showCollectionEditModal\",\n value: function showCollectionEditModal(event) {\n var me = this;\n var collectionId = $(event.currentTarget).closest('button').data('collection');\n var collection = this.collections.filter(function (collection) {\n return collection.id === collectionId;\n })[0];\n $('#edit_name_modal').find('input').val('');\n $('#edit_name_modal').modal('show');\n var saveBtn = $('#edit_name_modal').find('button.change_name');\n saveBtn.off('click');\n saveBtn.on('click', function () {\n collection.name = $('#edit_name_modal').find('input').val();\n me.saveCollection(collection.id, collection.name);\n me.renderCollections();\n $('#edit_name_modal').modal('hide');\n });\n }\n }, {\n key: \"showDeleteApiRequestModal\",\n value: function showDeleteApiRequestModal(event) {\n var collectionId = $(event.currentTarget).closest('li').data('collection');\n var apiId = $(event.currentTarget).closest('li').data('id');\n $('#confirm_delete_api_modal').find('.confirm_delete_api').data('id', apiId);\n $('#confirm_delete_api_modal').find('.confirm_delete_api').data('collection', collectionId);\n $('#confirm_delete_api_modal').modal('show');\n }\n }, {\n key: \"showNewApiRequestModal\",\n value: function showNewApiRequestModal(event) {\n if (this.collections.length == 0) {\n $('.toast-body').text('새로운 컬렉션을 추가해 주세요.');\n $('.toast').toast('show');\n return;\n }\n $('#new_api_request_modal').modal('show');\n }\n }, {\n key: \"showNewCollectionModal\",\n value: function showNewCollectionModal(event) {\n $('#new_collection_modal').find('input').val('');\n $('#new_collection_modal').modal('show');\n }\n }, {\n key: \"showEditNameModal\",\n value: function showEditNameModal(event) {\n var me = this;\n var apiId = $(event.currentTarget).closest('li').data('id');\n var collectionId = $(event.currentTarget).closest('li').data('collection');\n var collection = this.collections.filter(function (collection) {\n return collection.id === collectionId;\n })[0];\n var apiRequest = collection.apis.filter(function (api) {\n return api.id === apiId;\n })[0];\n apiRequest.collectionId = collectionId;\n var saveBtn = $('#edit_name_modal').find('button.change_name');\n saveBtn.off('click');\n saveBtn.on('click', function () {\n apiRequest.name = $('#edit_name_modal').find('input').val();\n me.changeAPIName(apiRequest);\n me.renderCollections();\n $('#edit_name_modal').modal('hide');\n\n //탭이 열려 있으면, 닫았다가 다시 열어야 함.\n me.renderTabHeader();\n me.renderTabContent(apiRequest.index);\n });\n $('#edit_name_modal').find('input').val('');\n $('#edit_name_modal').modal('show');\n }\n }, {\n key: \"getFieldValue\",\n value: function getFieldValue(element) {\n if ($(element).is('select') || $(element).is('input[type=\"text\"]')) {\n return $(element).val();\n }\n if ($(element).is('input[type=\"checkbox\"]')) {\n return $(element).is(':checked');\n }\n }\n }, {\n key: \"handleUIUpdate\",\n value: function handleUIUpdate(event) {\n if (event) {\n event.preventDefault();\n var element = event.currentTarget;\n var fieldName = $(element).attr('name');\n var newValue = this.getFieldValue(element);\n var tabIndex = $('#apiRequestTabContent').children().index($(event.currentTarget).closest('.api_request'));\n var model = this.apiRequests[tabIndex];\n if (fieldName !== '') {\n _.set(model, fieldName, newValue);\n }\n }\n }\n }, {\n key: \"handleUpdateServer\",\n value: function handleUpdateServer(event) {\n var tabIndex = $('#apiRequestTabContent').children().index($(event.currentTarget).closest('.api_request'));\n var model = this.apiRequests[tabIndex];\n var target = $('#api_request_' + model.id);\n target.find('input[name=\"basePath\"]').val(this.basePath(model.server));\n }\n }, {\n key: \"renderHeaders\",\n value: function renderHeaders(headers) {\n var _this2 = this;\n return headers.map(function (header, index) {\n return _this2.headerTemplate(header, index);\n }).join('');\n }\n }, {\n key: \"renderTabHeader\",\n value: function renderTabHeader() {\n var apiRequestTabTitle = $('#apiRequestTabTitle');\n apiRequestTabTitle.empty();\n for (var idx = 0; idx < this.apiRequests.length; idx++) {\n var li = \"
  • \\n \\n
  • \");\n apiRequestTabTitle.append(li);\n }\n }\n }, {\n key: \"showPopper\",\n value: function showPopper(element) {\n this.popperContent.style.display = 'block';\n this.popperInstance = (0,_popperjs_core_lib_popper_lite__WEBPACK_IMPORTED_MODULE_4__.createPopper)(element, popperContent, {\n placement: 'bottom',\n // Popper below the element\n modifiers: [{\n name: 'offset',\n options: {\n offset: [0, 8] // Adjust the position if needed\n }\n }]\n });\n }\n }, {\n key: \"hidePopper\",\n value: function hidePopper(element) {\n if (this.popperInstance) {\n this.popperInstance.destroy();\n this.popperInstance = null;\n }\n this.popperContent.style.display = 'none';\n }\n }, {\n key: \"renderTabContent\",\n value: function renderTabContent(index) {\n var _this3 = this;\n var me = this;\n var apiRequestTabContent = $(this.apiTabContentTarget);\n var model = this.apiRequests[index];\n apiRequestTabContent.append(this.apiRequestTemplate(model, index));\n var editableInput = new _components_EditableInput__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n name: 'path',\n value: model.path\n });\n var propertyTable = new _components_PropertyTable__WEBPACK_IMPORTED_MODULE_3__[\"default\"]({\n propertyName: 'queryParams',\n properties: model.queryParams\n });\n propertyTable.init(apiRequestTabContent.find('.query_params')[0], function (properties) {\n model.queryParams = properties;\n console.log(model.queryParams);\n _this3.buildPath(model);\n editableInput.setValue(model.path);\n });\n apiRequestTabContent.find(\"#api_request_\".concat(model.id)).find('.api_request_info').find('.path').each(function () {\n editableInput.init(this, function (value) {\n model.path = value;\n model.queryParams = me.parseParam(model.path);\n propertyTable.setProperties(model.queryParams);\n });\n $(this).append(\"\");\n $('span.variable').off('mouseover');\n $('span.variable').off('mouseout');\n });\n document.querySelectorAll('.variable').forEach(function (element) {\n element.addEventListener('mouseover', function () {\n return me.showPopper(element);\n });\n element.addEventListener('mouseout', function () {\n return me.hidePopper(element);\n });\n });\n this.openTab(model.id);\n var target = $('#api_request_' + model.id);\n var requestBodyEditor = monaco_editor__WEBPACK_IMPORTED_MODULE_0__.editor.create(target.find(\".request_body\")[0], {\n value: model.requestBody,\n language: 'json',\n automaticLayout: true\n });\n requestBodyEditor.onMouseMove(function (e) {\n var position = e.target.position;\n if (position) {\n var _model = requestBodyEditor.getModel();\n var word = _model.getWordAtPosition(position);\n var lineContent = _model.getLineContent(position.lineNumber);\n if (word) {\n if (lineContent.indexOf('{{' + word.word + '}}') > -1) {\n me.showPopper(e.target.element);\n }\n } else {\n me.hidePopper(e.target.element);\n }\n }\n });\n me.requestEditors.push(requestBodyEditor);\n target.find(\".request_body\")[0].addEventListener('shown.bs.tab', function () {\n me.requestEditors[index].layout();\n });\n me.requestEditors[index].onDidChangeModelContent(function (e) {\n model.requestBody = requestBodyEditor.getValue();\n });\n target.find('.request_body_type').on('change', function () {\n var model = requestBodyEditor.getModel();\n monaco_editor__WEBPACK_IMPORTED_MODULE_0__.editor.setModelLanguage(model, $(this).val());\n });\n var responseBodyEditor = monaco_editor__WEBPACK_IMPORTED_MODULE_0__.editor.create(target.find(\".response_body\")[0], {\n value: '',\n language: 'json',\n automaticLayout: true,\n quickSuggestions: false\n });\n me.responseEditors.push(responseBodyEditor);\n var consoleEditor = monaco_editor__WEBPACK_IMPORTED_MODULE_0__.editor.create(target.find(\".console\")[0], {\n value: '',\n automaticLayout: true,\n quickSuggestions: false\n });\n me.consoleEditors.push(consoleEditor);\n var preRequestEditor = monaco_editor__WEBPACK_IMPORTED_MODULE_0__.editor.create(target.find(\".pre-request\")[0], {\n value: model.preRequestScript,\n language: 'javascript',\n automaticLayout: true,\n quickSuggestions: false\n });\n me.preRequestEditors.push(preRequestEditor);\n target.find(\".pre-request\")[0].addEventListener('shown.bs.tab', function () {\n me.preRequestEditors[index].layout();\n });\n me.preRequestEditors[index].onDidChangeModelContent(function (e) {\n model.preRequestScript = preRequestEditor.getValue();\n });\n var postRequestEditor = monaco_editor__WEBPACK_IMPORTED_MODULE_0__.editor.create(target.find(\".post-request\")[0], {\n value: model.postRequestScript,\n language: 'javascript',\n automaticLayout: true,\n quickSuggestions: false\n });\n me.postRequestEditors.push(postRequestEditor);\n target.find(\".post-request\")[0].addEventListener('shown.bs.tab', function () {\n me.postRequestEditors[index].layout();\n });\n me.postRequestEditors[index].onDidChangeModelContent(function (e) {\n model.postRequestScript = postRequestEditor.getValue();\n });\n }\n }, {\n key: \"renderResponse\",\n value: function renderResponse(tabIndex) {\n var _this4 = this;\n var model = this.apiRequests[tabIndex];\n var target = $('#api_request_' + model.id);\n target.find('.response_headers').empty();\n target.find(\".response_status\").empty();\n try {\n var parsedJson = JSON.parse(model.responseModel.body);\n var formattedJson = JSON.stringify(parsedJson, null, 2);\n this.responseEditors[tabIndex].setValue(formattedJson);\n } catch (e) {\n this.responseEditors[tabIndex].setValue(model.responseModel.body);\n }\n if (model.responseModel && model.responseModel.headers) {\n var headers = model.responseModel.headers;\n Object.entries(headers).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n target.find('.response_headers').append(_this4.responseHeaderTemplate(key, value));\n });\n }\n target.find(\".response_status\").text(\"status: \" + model.responseModel.status);\n target.find(\".response_time\").text(\"time: \" + model.responseModel.time + \"ms\");\n target.find(\".response_size\").text(\"size: \" + model.responseModel.size + \"bytes\");\n }\n }, {\n key: \"customHelper\",\n value: function customHelper(event) {\n // Create and return the custom helper element\n var name = $(event.target).closest('.api_request_sortable').find('.open_api_request').text().trim();\n var apiId = $(event.target).closest('.api_request_sortable').data('id');\n return \"
    \\n
    \").concat(name, \"
    \\n
    \");\n }\n }, {\n key: \"renderCollections\",\n value: function renderCollections() {\n var select = $('#modal_collection');\n var sidemenu = $(this.collectionTarget);\n select.empty();\n sidemenu.empty();\n for (var i = 0; i < this.collections.length; i++) {\n sidemenu.append(this.renderCollection(this.collections[i], i));\n var option = $('
    +
    • @@ -31,7 +34,8 @@ - + +