openapi-explorer 2.2.678 → 2.2.681
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -150,7 +150,11 @@ export default class ApiRequest extends LitElement {
|
|
150
150
|
selectedRequestBodyExample: {
|
151
151
|
type: String,
|
152
152
|
attribute: 'selected-request-body-example'
|
153
|
-
}
|
153
|
+
},
|
154
|
+
// internal tracking of selected request-body example
|
155
|
+
curlSyntax: {
|
156
|
+
type: String
|
157
|
+
}
|
154
158
|
};
|
155
159
|
}
|
156
160
|
render() {
|
@@ -314,6 +318,7 @@ export default class ApiRequest extends LitElement {
|
|
314
318
|
}, 0, mimeDropdownEl);
|
315
319
|
}
|
316
320
|
requestBodyTemplate() {
|
321
|
+
var _this$cachedBodyData;
|
317
322
|
if (!this.request_body) {
|
318
323
|
return '';
|
319
324
|
}
|
@@ -381,6 +386,18 @@ export default class ApiRequest extends LitElement {
|
|
381
386
|
reqBodySchemaHtml = html` ${reqBodySchemaHtml} <schema-tree class="${reqBody.mimeType.substring(reqBody.mimeType.indexOf('/') + 1)} pad-top-8" style="display:${this.selectedRequestBodyType === reqBody.mimeType ? 'block' : 'none'}" .data="${schemaAsObj}" schema-expand-level="${this.schemaExpandLevel}" schema-hide-read-only="${this.schemaHideReadOnly.includes(this.method)}" schema-hide-write-only="false" exportparts="schema-key, schema-type, schema-description"> </schema-tree> `;
|
382
387
|
}
|
383
388
|
}
|
389
|
+
|
390
|
+
// When the content type and the element stay the same, then don't change the updated body.
|
391
|
+
if (((_this$cachedBodyData = this.cachedBodyData) === null || _this$cachedBodyData === void 0 ? void 0 : _this$cachedBodyData.contentType) === this.selectedRequestBodyType && this.elementId === this.cachedBodyData.elementId) {
|
392
|
+
reqBodyDefaultHtml = this.cachedBodyData.body;
|
393
|
+
} else {
|
394
|
+
// Otherwise use the recalculated body and cache that
|
395
|
+
this.cachedBodyData = {
|
396
|
+
body: reqBodyDefaultHtml,
|
397
|
+
contentType: this.selectedRequestBodyType,
|
398
|
+
elementId: this.elementId
|
399
|
+
};
|
400
|
+
}
|
384
401
|
return html` <div class="request-body-container" data-selected-request-body-type="${this.selectedRequestBodyType}"> <div class="table-title top-gap row"> ${getI18nText('operations.request-body')} ${this.request_body.required ? html`<span class="mono-font" style="color:var(--red)">*</span>` : ''} <span style="font-weight:400;margin-left:5px"> ${this.selectedRequestBodyType}</span> <span style="flex:1"></span> ${reqBodyTypeSelectorHtml} </div> ${this.request_body.description ? html`<div class="m-markdown" style="margin-bottom:12px">${unsafeHTML(marked(this.request_body.description))}</div>` : ''} ${reqBodySchemaHtml || reqBodyDefaultHtml ? html` <div class="tab-panel col" style="border-width:0 0 1px 0"> <div class="tab-buttons row" @click="${e => {
|
385
402
|
if (e.target.tagName.toLowerCase() === 'button') {
|
386
403
|
this.activeSchemaTab = e.target.dataset.tab;
|
@@ -410,7 +427,7 @@ export default class ApiRequest extends LitElement {
|
|
410
427
|
return;
|
411
428
|
}
|
412
429
|
this.activeResponseTab = e.target.dataset.tab;
|
413
|
-
}}"> <br> <div style="width:100%">
|
430
|
+
}}"> <br> <div style="width:100%"> <button class="tab-btn ${!hasResponse || this.activeResponseTab === 'curl' ? 'active' : ''}" data-tab="curl">FULL REQUEST</button> ${!hasResponse ? '' : html` <button class="tab-btn ${this.activeResponseTab === 'response' ? 'active' : ''}" data-tab="response">${getI18nText('operations.response')}</button> <button class="tab-btn ${this.activeResponseTab === 'headers' ? 'active' : ''}" data-tab="headers">${getI18nText('operations.response-headers')}</button>`} </div> </div> ${this.responseIsBlob ? html` <div class="tab-content col" style="flex:1;display:${this.activeResponseTab === 'response' ? 'flex' : 'none'}"> ${this.responseBlobType === 'image' ? html`<img style="max-height:var(--resp-area-height,300px);object-fit:contain" class="mar-top-8" src="${this.responseBlobUrl}">` : ''} <div style="display:flex;justify-content:center"> <div> <button class="m-btn thin-border mar-top-8" style="width:135px" @click="${this.downloadResponseBlob}" part="btn btn-outline">DOWNLOAD</button> ${this.responseBlobType === 'view' || this.responseBlobType === 'image' ? html`<button class="m-btn thin-border mar-top-8" style="width:135px" @click="${this.viewResponseBlob}" part="btn btn-outline">VIEW (NEW TAB)</button>` : ''} </div> </div> </div>` : html` <div class="tab-content col m-markdown" style="flex:1;display:${this.activeResponseTab === 'response' ? 'flex' : 'none'}"> <syntax-highlighter style="min-height:60px" mime-type="${this.responseContentType}" .content="${this.responseText}"> </div>`} <div class="tab-content col m-markdown" style="flex:1;display:${this.activeResponseTab === 'headers' ? 'flex' : 'none'}"> <syntax-highlighter language="http" .content="${this.responseHeaders}"> </div> <div class="tab-content m-markdown col" style="flex:1;display:${this.activeResponseTab === 'curl' ? 'flex' : 'none'}"> <syntax-highlighter class="fs-exclude" data-hj-suppress data-sl="mask" language="shell" .content="${curlSyntax.trim()}"> </div> </div>`;
|
414
431
|
}
|
415
432
|
apiCallTemplate() {
|
416
433
|
return html` <div style="display:flex;align-items:flex-end;margin:16px 0;font-size:var(--font-size-small)"> ${this.parameters.length > 0 || this.request_body ? html` <button class="m-btn thin-border" part="btn btn-outline" style="margin-right:5px" @click="${this.onClearRequestData}"> ${getI18nText('operations.clear')} </button>` : ''} <button class="m-btn primary btn-execute thin-border" part="btn btn-fill btn-try" @click="${this.onTryClick}">${getI18nText('operations.execute')}</button> </div> ${this.apiResponseTabTemplate()} `;
|
@@ -637,10 +654,12 @@ export default class ApiRequest extends LitElement {
|
|
637
654
|
if (exampleTextAreaEl && exampleTextAreaEl.value) {
|
638
655
|
fetchOptions.body = exampleTextAreaEl.value;
|
639
656
|
if (requestBodyType.includes('json')) {
|
640
|
-
fetchOptions.body = JSON.stringify(json5.parse(exampleTextAreaEl.value));
|
641
657
|
try {
|
658
|
+
fetchOptions.body = JSON.stringify(json5.parse(exampleTextAreaEl.value), null, 4);
|
642
659
|
curlData = ` \\\n -d '${fetchOptions.body}'`;
|
643
|
-
} catch (err) {
|
660
|
+
} catch (err) {
|
661
|
+
/* Ignore unparseable JSON, falls back automatically to the original value, which is better than nothing */
|
662
|
+
}
|
644
663
|
}
|
645
664
|
if (!curlData) {
|
646
665
|
// Save single quotes wrapped => 'text' => `"'"text"'"`
|
@@ -678,7 +697,8 @@ export default class ApiRequest extends LitElement {
|
|
678
697
|
const headers = headerOverride !== null && headerOverride !== void 0 ? headerOverride : fetchOptions.headers;
|
679
698
|
const curlHeaders = [...headers.entries()].reduce((acc, [key, value]) => `${acc} \\\n -H "${key}: ${value}"`, '');
|
680
699
|
this.curlSyntax = `${curl}${curlHeaders}${curlParts.data}${curlParts.form}`;
|
681
|
-
this
|
700
|
+
// We don't need to request and update because we are watch the curlSyntax property in this lit element
|
701
|
+
// this.requestUpdate();
|
682
702
|
}
|
683
703
|
|
684
704
|
// onExecuteButtonClicked
|
@@ -155,7 +155,11 @@ class ApiRequest extends _lit.LitElement {
|
|
155
155
|
selectedRequestBodyExample: {
|
156
156
|
type: String,
|
157
157
|
attribute: 'selected-request-body-example'
|
158
|
-
}
|
158
|
+
},
|
159
|
+
// internal tracking of selected request-body example
|
160
|
+
curlSyntax: {
|
161
|
+
type: String
|
162
|
+
}
|
159
163
|
};
|
160
164
|
}
|
161
165
|
render() {
|
@@ -319,6 +323,7 @@ class ApiRequest extends _lit.LitElement {
|
|
319
323
|
}, 0, mimeDropdownEl);
|
320
324
|
}
|
321
325
|
requestBodyTemplate() {
|
326
|
+
var _this$cachedBodyData;
|
322
327
|
if (!this.request_body) {
|
323
328
|
return '';
|
324
329
|
}
|
@@ -386,6 +391,18 @@ class ApiRequest extends _lit.LitElement {
|
|
386
391
|
reqBodySchemaHtml = (0, _lit.html)` ${reqBodySchemaHtml} <schema-tree class="${reqBody.mimeType.substring(reqBody.mimeType.indexOf('/') + 1)} pad-top-8" style="display:${this.selectedRequestBodyType === reqBody.mimeType ? 'block' : 'none'}" .data="${schemaAsObj}" schema-expand-level="${this.schemaExpandLevel}" schema-hide-read-only="${this.schemaHideReadOnly.includes(this.method)}" schema-hide-write-only="false" exportparts="schema-key, schema-type, schema-description"> </schema-tree> `;
|
387
392
|
}
|
388
393
|
}
|
394
|
+
|
395
|
+
// When the content type and the element stay the same, then don't change the updated body.
|
396
|
+
if (((_this$cachedBodyData = this.cachedBodyData) === null || _this$cachedBodyData === void 0 ? void 0 : _this$cachedBodyData.contentType) === this.selectedRequestBodyType && this.elementId === this.cachedBodyData.elementId) {
|
397
|
+
reqBodyDefaultHtml = this.cachedBodyData.body;
|
398
|
+
} else {
|
399
|
+
// Otherwise use the recalculated body and cache that
|
400
|
+
this.cachedBodyData = {
|
401
|
+
body: reqBodyDefaultHtml,
|
402
|
+
contentType: this.selectedRequestBodyType,
|
403
|
+
elementId: this.elementId
|
404
|
+
};
|
405
|
+
}
|
389
406
|
return (0, _lit.html)` <div class="request-body-container" data-selected-request-body-type="${this.selectedRequestBodyType}"> <div class="table-title top-gap row"> ${(0, _index.getI18nText)('operations.request-body')} ${this.request_body.required ? (0, _lit.html)`<span class="mono-font" style="color:var(--red)">*</span>` : ''} <span style="font-weight:400;margin-left:5px"> ${this.selectedRequestBodyType}</span> <span style="flex:1"></span> ${reqBodyTypeSelectorHtml} </div> ${this.request_body.description ? (0, _lit.html)`<div class="m-markdown" style="margin-bottom:12px">${(0, _unsafeHtml.unsafeHTML)((0, _marked.marked)(this.request_body.description))}</div>` : ''} ${reqBodySchemaHtml || reqBodyDefaultHtml ? (0, _lit.html)` <div class="tab-panel col" style="border-width:0 0 1px 0"> <div class="tab-buttons row" @click="${e => {
|
390
407
|
if (e.target.tagName.toLowerCase() === 'button') {
|
391
408
|
this.activeSchemaTab = e.target.dataset.tab;
|
@@ -415,7 +432,7 @@ class ApiRequest extends _lit.LitElement {
|
|
415
432
|
return;
|
416
433
|
}
|
417
434
|
this.activeResponseTab = e.target.dataset.tab;
|
418
|
-
}}"> <br> <div style="width:100%"> ${!hasResponse ? '' : (0, _lit.html)` <button class="tab-btn ${this.activeResponseTab === 'response' ? 'active' : ''}" data-tab="response">${(0, _index.getI18nText)('operations.response')}</button> <button class="tab-btn ${this.activeResponseTab === 'headers' ? 'active' : ''}" data-tab="headers">${(0, _index.getI18nText)('operations.response-headers')}</button>`}
|
435
|
+
}}"> <br> <div style="width:100%"> <button class="tab-btn ${!hasResponse || this.activeResponseTab === 'curl' ? 'active' : ''}" data-tab="curl">FULL REQUEST</button> ${!hasResponse ? '' : (0, _lit.html)` <button class="tab-btn ${this.activeResponseTab === 'response' ? 'active' : ''}" data-tab="response">${(0, _index.getI18nText)('operations.response')}</button> <button class="tab-btn ${this.activeResponseTab === 'headers' ? 'active' : ''}" data-tab="headers">${(0, _index.getI18nText)('operations.response-headers')}</button>`} </div> </div> ${this.responseIsBlob ? (0, _lit.html)` <div class="tab-content col" style="flex:1;display:${this.activeResponseTab === 'response' ? 'flex' : 'none'}"> ${this.responseBlobType === 'image' ? (0, _lit.html)`<img style="max-height:var(--resp-area-height,300px);object-fit:contain" class="mar-top-8" src="${this.responseBlobUrl}">` : ''} <div style="display:flex;justify-content:center"> <div> <button class="m-btn thin-border mar-top-8" style="width:135px" @click="${this.downloadResponseBlob}" part="btn btn-outline">DOWNLOAD</button> ${this.responseBlobType === 'view' || this.responseBlobType === 'image' ? (0, _lit.html)`<button class="m-btn thin-border mar-top-8" style="width:135px" @click="${this.viewResponseBlob}" part="btn btn-outline">VIEW (NEW TAB)</button>` : ''} </div> </div> </div>` : (0, _lit.html)` <div class="tab-content col m-markdown" style="flex:1;display:${this.activeResponseTab === 'response' ? 'flex' : 'none'}"> <syntax-highlighter style="min-height:60px" mime-type="${this.responseContentType}" .content="${this.responseText}"> </div>`} <div class="tab-content col m-markdown" style="flex:1;display:${this.activeResponseTab === 'headers' ? 'flex' : 'none'}"> <syntax-highlighter language="http" .content="${this.responseHeaders}"> </div> <div class="tab-content m-markdown col" style="flex:1;display:${this.activeResponseTab === 'curl' ? 'flex' : 'none'}"> <syntax-highlighter class="fs-exclude" data-hj-suppress data-sl="mask" language="shell" .content="${curlSyntax.trim()}"> </div> </div>`;
|
419
436
|
}
|
420
437
|
apiCallTemplate() {
|
421
438
|
return (0, _lit.html)` <div style="display:flex;align-items:flex-end;margin:16px 0;font-size:var(--font-size-small)"> ${this.parameters.length > 0 || this.request_body ? (0, _lit.html)` <button class="m-btn thin-border" part="btn btn-outline" style="margin-right:5px" @click="${this.onClearRequestData}"> ${(0, _index.getI18nText)('operations.clear')} </button>` : ''} <button class="m-btn primary btn-execute thin-border" part="btn btn-fill btn-try" @click="${this.onTryClick}">${(0, _index.getI18nText)('operations.execute')}</button> </div> ${this.apiResponseTabTemplate()} `;
|
@@ -642,10 +659,12 @@ class ApiRequest extends _lit.LitElement {
|
|
642
659
|
if (exampleTextAreaEl && exampleTextAreaEl.value) {
|
643
660
|
fetchOptions.body = exampleTextAreaEl.value;
|
644
661
|
if (requestBodyType.includes('json')) {
|
645
|
-
fetchOptions.body = JSON.stringify(_json.default.parse(exampleTextAreaEl.value));
|
646
662
|
try {
|
663
|
+
fetchOptions.body = JSON.stringify(_json.default.parse(exampleTextAreaEl.value), null, 4);
|
647
664
|
curlData = ` \\\n -d '${fetchOptions.body}'`;
|
648
|
-
} catch (err) {
|
665
|
+
} catch (err) {
|
666
|
+
/* Ignore unparseable JSON, falls back automatically to the original value, which is better than nothing */
|
667
|
+
}
|
649
668
|
}
|
650
669
|
if (!curlData) {
|
651
670
|
// Save single quotes wrapped => 'text' => `"'"text"'"`
|
@@ -683,7 +702,8 @@ class ApiRequest extends _lit.LitElement {
|
|
683
702
|
const headers = headerOverride !== null && headerOverride !== void 0 ? headerOverride : fetchOptions.headers;
|
684
703
|
const curlHeaders = [...headers.entries()].reduce((acc, [key, value]) => `${acc} \\\n -H "${key}: ${value}"`, '');
|
685
704
|
this.curlSyntax = `${curl}${curlHeaders}${curlParts.data}${curlParts.form}`;
|
686
|
-
this
|
705
|
+
// We don't need to request and update because we are watch the curlSyntax property in this lit element
|
706
|
+
// this.requestUpdate();
|
687
707
|
}
|
688
708
|
|
689
709
|
// onExecuteButtonClicked
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "openapi-explorer",
|
3
|
-
"version": "2.2.
|
3
|
+
"version": "2.2.681",
|
4
4
|
"description": "OpenAPI Explorer - API viewer with dynamically generated components, documentation, and interaction console",
|
5
5
|
"author": "Authress Developers <developers@authress.io>",
|
6
6
|
"type": "module",
|