@testsmith/api-spector 0.6.2 → 0.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/main/agents.js +5 -5
- package/out/main/chunks/{broker-client-WEymdqAK.js → broker-client-CvRuiX3o.js} +26 -23
- package/out/main/chunks/{cli-common-vASoDfQH.js → cli-common-Cq_cphpZ.js} +4 -4
- package/out/main/chunks/{coverage-C54mZEh_.js → coverage-C0U4QM83.js} +8 -10
- package/out/main/chunks/{data-files-Br2h3Dt2.js → data-files-BYqhsoPe.js} +4 -4
- package/out/main/chunks/escape-DDVAlOvZ.js +9 -0
- package/out/main/chunks/{import-DdXhO56X.js → import-DYssQzex.js} +4 -4
- package/out/main/chunks/{mock-server-BxiXhP1m.js → mock-server-C4kTFkod.js} +9 -11
- package/out/main/chunks/{recorder-0Ij921El.js → recorder-BkO8G_mB.js} +2 -2
- package/out/main/chunks/{request-collection-Hqh3I3rs.js → request-collection-KGPuvN7o.js} +5 -4
- package/out/main/chunks/{request-exec-DAFA6Fap.js → request-exec-BRmVweue.js} +41 -41
- package/out/main/chunks/{soap-handler-BAPCALkN.js → soap-handler-BznuMFIP.js} +7 -9
- package/out/main/compare.js +10 -10
- package/out/main/contract.js +18 -20
- package/out/main/coverage.js +7 -7
- package/out/main/generate-tests.js +9 -9
- package/out/main/index.js +166 -263
- package/out/main/lib.js +6 -7
- package/out/main/mock.js +8 -8
- package/out/main/record.js +9 -9
- package/out/main/runner.js +50 -22
- package/out/main/wsdl.js +9 -9
- package/out/preload/index.js +1 -1
- package/out/renderer/assets/{GraphQLEditor-DtppmZJO.js → GraphQLEditor-Bih8eb_r.js} +6 -6
- package/out/renderer/assets/{SoapEditor-BwSm12wH.js → SoapEditor-D1sQKu7l.js} +3 -3
- package/out/renderer/assets/{index-D6-zmXen.js → index-vEDOfWlE.js} +418 -279
- package/out/renderer/index.html +1 -1
- package/package.json +1 -1
- package/out/main/chunks/escape-BwPM4Tf6.js +0 -9
package/out/main/lib.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const mockServer = require("./chunks/mock-server-
|
|
4
|
-
const requestExec = require("./chunks/request-exec-
|
|
5
|
-
require("http");
|
|
6
|
-
require("crypto");
|
|
7
|
-
require("vm");
|
|
3
|
+
const mockServer = require("./chunks/mock-server-C4kTFkod.js");
|
|
4
|
+
const requestExec = require("./chunks/request-exec-BRmVweue.js");
|
|
5
|
+
require("node:http");
|
|
6
|
+
require("node:crypto");
|
|
7
|
+
require("node:vm");
|
|
8
8
|
require("dayjs");
|
|
9
9
|
require("@xmldom/xmldom");
|
|
10
10
|
require("undici");
|
|
@@ -14,8 +14,7 @@ require("./chunks/handle-CL-nWtYA.js");
|
|
|
14
14
|
require("node:fs");
|
|
15
15
|
require("node:os");
|
|
16
16
|
require("node:path");
|
|
17
|
-
require("node:
|
|
18
|
-
require("path");
|
|
17
|
+
require("node:fs/promises");
|
|
19
18
|
require("tv4");
|
|
20
19
|
require("jsonpath-plus");
|
|
21
20
|
require("ajv");
|
package/out/main/mock.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
-
const mockServer = require("./chunks/mock-server-
|
|
4
|
-
const cliCommon = require("./chunks/cli-common-
|
|
5
|
-
require("http");
|
|
6
|
-
require("crypto");
|
|
7
|
-
require("vm");
|
|
3
|
+
const mockServer = require("./chunks/mock-server-C4kTFkod.js");
|
|
4
|
+
const cliCommon = require("./chunks/cli-common-Cq_cphpZ.js");
|
|
5
|
+
require("node:http");
|
|
6
|
+
require("node:crypto");
|
|
7
|
+
require("node:vm");
|
|
8
8
|
require("dayjs");
|
|
9
9
|
require("@xmldom/xmldom");
|
|
10
|
-
require("fs/promises");
|
|
11
|
-
require("path");
|
|
12
|
-
require("./chunks/data-files-
|
|
10
|
+
require("node:fs/promises");
|
|
11
|
+
require("node:path");
|
|
12
|
+
require("./chunks/data-files-BYqhsoPe.js");
|
|
13
13
|
async function main() {
|
|
14
14
|
const args = cliCommon.parseArgs(process.argv.slice(2), ["name"]);
|
|
15
15
|
if (args.help) {
|
package/out/main/record.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
-
const promises = require("fs/promises");
|
|
4
|
-
const path = require("path");
|
|
5
|
-
const recorder = require("./chunks/recorder-
|
|
6
|
-
const cliCommon = require("./chunks/cli-common-
|
|
7
|
-
require("http");
|
|
8
|
-
require("crypto");
|
|
3
|
+
const promises = require("node:fs/promises");
|
|
4
|
+
const path = require("node:path");
|
|
5
|
+
const recorder = require("./chunks/recorder-BkO8G_mB.js");
|
|
6
|
+
const cliCommon = require("./chunks/cli-common-Cq_cphpZ.js");
|
|
7
|
+
require("node:http");
|
|
8
|
+
require("node:crypto");
|
|
9
9
|
require("undici");
|
|
10
|
-
require("./chunks/data-files-
|
|
10
|
+
require("./chunks/data-files-BYqhsoPe.js");
|
|
11
11
|
function methodBadge(method) {
|
|
12
12
|
const m = method.toUpperCase();
|
|
13
13
|
const c = m === "GET" ? cliCommon.C.green : m === "POST" ? cliCommon.C.cyan : m === "PUT" || m === "PATCH" ? cliCommon.C.yellow : m === "DELETE" ? cliCommon.C.red : cliCommon.C.white;
|
|
@@ -26,7 +26,7 @@ async function main() {
|
|
|
26
26
|
console.error(cliCommon.color("Error: --upstream <url> is required", cliCommon.C.red));
|
|
27
27
|
process.exit(1);
|
|
28
28
|
}
|
|
29
|
-
const port = parseInt(args.port ?? "4001", 10);
|
|
29
|
+
const port = Number.parseInt(args.port ?? "4001", 10);
|
|
30
30
|
const outputDir = path.resolve(args.output ?? "./recordings");
|
|
31
31
|
const extraMask = Array.isArray(args.mask) ? args.mask : args.mask ? [args.mask] : [];
|
|
32
32
|
const extraIgnore = Array.isArray(args.ignore) ? args.ignore : args.ignore ? [args.ignore] : [];
|
|
@@ -54,7 +54,7 @@ async function main() {
|
|
|
54
54
|
process.exit(0);
|
|
55
55
|
}
|
|
56
56
|
await promises.mkdir(outputDir, { recursive: true });
|
|
57
|
-
const slug = (/* @__PURE__ */ new Date()).toISOString().
|
|
57
|
+
const slug = (/* @__PURE__ */ new Date()).toISOString().replaceAll(/[:.]/g, "-").slice(0, 19);
|
|
58
58
|
const sessionPath = path.join(outputDir, `session-${slug}.recording.json`);
|
|
59
59
|
await promises.writeFile(sessionPath, JSON.stringify(session, null, 2), "utf8");
|
|
60
60
|
const mockName = `Recorded - ${new URL(upstream).hostname} ${slug}`;
|
package/out/main/runner.js
CHANGED
|
@@ -1,29 +1,28 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
-
const promises = require("fs/promises");
|
|
4
|
-
const path = require("path");
|
|
5
|
-
const requestExec = require("./chunks/request-exec-
|
|
6
|
-
const escape = require("./chunks/escape-
|
|
7
|
-
const requestCollection = require("./chunks/request-collection-
|
|
3
|
+
const promises = require("node:fs/promises");
|
|
4
|
+
const path = require("node:path");
|
|
5
|
+
const requestExec = require("./chunks/request-exec-BRmVweue.js");
|
|
6
|
+
const escape = require("./chunks/escape-DDVAlOvZ.js");
|
|
7
|
+
const requestCollection = require("./chunks/request-collection-KGPuvN7o.js");
|
|
8
8
|
const environments = require("./chunks/environments-iM3SUM-4.js");
|
|
9
|
-
const cliCommon = require("./chunks/cli-common-
|
|
9
|
+
const cliCommon = require("./chunks/cli-common-Cq_cphpZ.js");
|
|
10
10
|
require("undici");
|
|
11
|
+
require("fs/promises");
|
|
11
12
|
require("tls");
|
|
12
13
|
require("./chunks/handle-CL-nWtYA.js");
|
|
13
14
|
require("node:fs");
|
|
14
15
|
require("node:os");
|
|
15
|
-
require("node:path");
|
|
16
16
|
require("node:crypto");
|
|
17
|
-
require("crypto");
|
|
18
17
|
require("dayjs");
|
|
19
|
-
require("vm");
|
|
18
|
+
require("node:vm");
|
|
20
19
|
require("tv4");
|
|
21
20
|
require("jsonpath-plus");
|
|
22
21
|
require("@xmldom/xmldom");
|
|
23
|
-
require("http");
|
|
22
|
+
require("node:http");
|
|
24
23
|
require("ajv");
|
|
25
24
|
require("uuid");
|
|
26
|
-
require("./chunks/data-files-
|
|
25
|
+
require("./chunks/data-files-BYqhsoPe.js");
|
|
27
26
|
function buildJsonReport(results, summary, meta = {}) {
|
|
28
27
|
return JSON.stringify({
|
|
29
28
|
timestamp: meta.timestamp ?? (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -36,6 +35,9 @@ function buildJsonReport(results, summary, meta = {}) {
|
|
|
36
35
|
method: r.method,
|
|
37
36
|
url: r.resolvedUrl,
|
|
38
37
|
status: r.status,
|
|
38
|
+
// Tree position: which collection and folder path this request sits under.
|
|
39
|
+
collection: r.collection ?? meta.collection ?? null,
|
|
40
|
+
folderPath: r.scopePath ?? [],
|
|
39
41
|
isHook: r.isHook ?? false,
|
|
40
42
|
hookType: r.hookType ?? null,
|
|
41
43
|
httpStatus: r.httpStatus ?? null,
|
|
@@ -76,12 +78,26 @@ function buildHtmlReport(results, summary, meta = {}) {
|
|
|
76
78
|
after: "AFTER",
|
|
77
79
|
afterAll: "AFTER ALL"
|
|
78
80
|
};
|
|
79
|
-
let
|
|
81
|
+
let lastCollection = null;
|
|
82
|
+
let lastPath = [];
|
|
80
83
|
const cards = results.map((r, idx) => {
|
|
81
|
-
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
84
|
+
let groupHeading = "";
|
|
85
|
+
const coll = r.collection ?? meta.collection ?? "";
|
|
86
|
+
if (coll && coll !== lastCollection) {
|
|
87
|
+
groupHeading += ` <div class="scope-heading lvl-0">${esc(coll)}</div>
|
|
88
|
+
`;
|
|
89
|
+
lastCollection = coll;
|
|
90
|
+
lastPath = [];
|
|
91
|
+
}
|
|
92
|
+
const path2 = r.scopePath ?? [];
|
|
93
|
+
let diverge = 0;
|
|
94
|
+
while (diverge < path2.length && diverge < lastPath.length && path2[diverge] === lastPath[diverge]) diverge++;
|
|
95
|
+
for (let d = diverge; d < path2.length; d++) {
|
|
96
|
+
groupHeading += ` <div class="scope-heading lvl-${Math.min(d + 1, 6)}">${esc(path2[d])}</div>
|
|
97
|
+
`;
|
|
98
|
+
}
|
|
99
|
+
lastPath = path2;
|
|
100
|
+
const cardIndent = `lvl-${Math.min(path2.length + 1, 6)}`;
|
|
85
101
|
const statusCls = r.status === "passed" ? "badge-pass" : r.status === "failed" ? "badge-fail" : r.status === "skipped" ? "badge-skip" : "badge-err";
|
|
86
102
|
const httpCls = r.httpStatus && r.httpStatus < 300 ? "http-ok" : r.httpStatus && r.httpStatus < 400 ? "http-redir" : "http-err";
|
|
87
103
|
const dur = r.durationMs != null ? `${r.durationMs} ms` : "—";
|
|
@@ -121,7 +137,7 @@ function buildHtmlReport(results, summary, meta = {}) {
|
|
|
121
137
|
</div>` : "";
|
|
122
138
|
const hookCls = hookLabel ? r.hookType?.startsWith("before") ? "card-hook-before" : "card-hook-after" : "";
|
|
123
139
|
return `${groupHeading}
|
|
124
|
-
<div class="card ${hookCls}" id="r${idx}">
|
|
140
|
+
<div class="card ${hookCls} ${cardIndent}" id="r${idx}">
|
|
125
141
|
<div class="card-header" onclick="toggle(${idx})">
|
|
126
142
|
<span class="chevron" id="ch${idx}">▶</span>
|
|
127
143
|
<span class="badge ${statusCls}">${r.status}</span>
|
|
@@ -192,8 +208,18 @@ function buildHtmlReport(results, summary, meta = {}) {
|
|
|
192
208
|
.stat-skip .stat-val { color: var(--text-muted); }
|
|
193
209
|
/* Cards */
|
|
194
210
|
.card { border: 1px solid var(--border); border-radius: 8px; margin-bottom: 8px; overflow: hidden; }
|
|
195
|
-
.scope-heading { margin:
|
|
211
|
+
.scope-heading { margin: 14px 0 6px; padding: 4px 2px; font-size: 11px; font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.5px; border-bottom: 1px solid var(--border); }
|
|
196
212
|
.scope-heading::before { content: "\\25B8 "; color: var(--text-dim); }
|
|
213
|
+
/* Nested tree indentation: collection (lvl-0) → folders (lvl-1..) → request card. */
|
|
214
|
+
.lvl-0 { margin-left: 0; }
|
|
215
|
+
.lvl-1 { margin-left: 16px; }
|
|
216
|
+
.lvl-2 { margin-left: 32px; }
|
|
217
|
+
.lvl-3 { margin-left: 48px; }
|
|
218
|
+
.lvl-4 { margin-left: 64px; }
|
|
219
|
+
.lvl-5 { margin-left: 80px; }
|
|
220
|
+
.lvl-6 { margin-left: 96px; }
|
|
221
|
+
.scope-heading.lvl-0 { font-size: 13px; color: var(--text); text-transform: none; letter-spacing: 0; margin-top: 22px; }
|
|
222
|
+
.scope-heading.lvl-0::before { content: "\\1F5C0 "; }
|
|
197
223
|
.card-header { display: flex; align-items: baseline; gap: 8px; padding: 10px 14px; cursor: pointer; user-select: none; }
|
|
198
224
|
.card-header:hover { background: var(--bg-surface); }
|
|
199
225
|
.chevron { font-size: 10px; color: var(--text-muted); min-width: 10px; transition: transform .15s; }
|
|
@@ -311,7 +337,7 @@ function buildJUnitReport(results, summary, meta = {}) {
|
|
|
311
337
|
const label = r.iterationLabel ? ` #${r.iterationLabel}` : "";
|
|
312
338
|
const hookPrefix = r.isHook && r.hookType ? `[${HOOK_JUNIT_LABELS[r.hookType] ?? "Hook"}] ` : "";
|
|
313
339
|
const name = esc(hookPrefix + r.name + label);
|
|
314
|
-
const classname = esc(
|
|
340
|
+
const classname = esc([r.collection ?? meta.collection, ...r.scopePath ?? []].filter(Boolean).map((s) => String(s).replaceAll(".", "_")).join(".") || "API Tests");
|
|
315
341
|
const timeSec = ((r.durationMs ?? 0) / 1e3).toFixed(3);
|
|
316
342
|
const failures = [];
|
|
317
343
|
if (r.status === "error") {
|
|
@@ -469,7 +495,7 @@ async function main() {
|
|
|
469
495
|
} else if (!envName && workspace.settings?.defaultEnvironment && !env) {
|
|
470
496
|
console.warn(cliCommon.color(`Warning: default environment "${workspace.settings.defaultEnvironment}" not found. Running without environment.`, cliCommon.C.yellow));
|
|
471
497
|
}
|
|
472
|
-
const version = `v${"0.6.
|
|
498
|
+
const version = `v${"0.6.4"}`;
|
|
473
499
|
console.log("");
|
|
474
500
|
console.log(cliCommon.color(" API Test Runner" + (version ? ` ${version}` : ""), cliCommon.C.bold, cliCommon.C.white));
|
|
475
501
|
console.log(cliCommon.color(` Workspace: ${wsPath}`, cliCommon.C.gray));
|
|
@@ -528,7 +554,7 @@ async function main() {
|
|
|
528
554
|
if (!firstColName) firstColName = col.name;
|
|
529
555
|
let runEnvVars = await requestExec.buildEnvVars(env);
|
|
530
556
|
let runGlobals = requestExec.getGlobals();
|
|
531
|
-
let runCollectionVars = { ...col.collectionVariables
|
|
557
|
+
let runCollectionVars = { ...col.collectionVariables };
|
|
532
558
|
let runLocalVars = {};
|
|
533
559
|
console.log(cliCommon.color(` ┌ ${col.name}`, cliCommon.C.bold, cliCommon.C.white));
|
|
534
560
|
const workspaceTls = workspace.settings?.tls;
|
|
@@ -569,6 +595,7 @@ async function main() {
|
|
|
569
595
|
isHook,
|
|
570
596
|
hookType,
|
|
571
597
|
scopeId,
|
|
598
|
+
collection: item.collection,
|
|
572
599
|
scopePath: item.scopePath,
|
|
573
600
|
iterationLabel: item.iterationLabel
|
|
574
601
|
};
|
|
@@ -578,7 +605,7 @@ async function main() {
|
|
|
578
605
|
collectionVars: { ...item.collectionVars, ...runCollectionVars },
|
|
579
606
|
envVars: runEnvVars,
|
|
580
607
|
globals: runGlobals,
|
|
581
|
-
localVars: { ...runLocalVars, ...item.dataRow
|
|
608
|
+
localVars: { ...runLocalVars, ...item.dataRow },
|
|
582
609
|
dispatcher,
|
|
583
610
|
piiMaskPatterns: piiPatterns,
|
|
584
611
|
tls: effectiveTls,
|
|
@@ -594,6 +621,7 @@ async function main() {
|
|
|
594
621
|
result.isHook = isHook;
|
|
595
622
|
result.hookType = hookType;
|
|
596
623
|
result.scopeId = scopeId;
|
|
624
|
+
result.collection = item.collection;
|
|
597
625
|
result.scopePath = item.scopePath;
|
|
598
626
|
result.iterationLabel = item.iterationLabel;
|
|
599
627
|
skipTracker.recordResult(item, result.status);
|
package/out/main/wsdl.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
-
const promises = require("fs/promises");
|
|
4
|
-
const path = require("path");
|
|
5
|
-
const https = require("https");
|
|
6
|
-
const http = require("http");
|
|
7
|
-
const soapHandler = require("./chunks/soap-handler-
|
|
8
|
-
const _import = require("./chunks/import-
|
|
9
|
-
const cliCommon = require("./chunks/cli-common-
|
|
3
|
+
const promises = require("node:fs/promises");
|
|
4
|
+
const path = require("node:path");
|
|
5
|
+
const https = require("node:https");
|
|
6
|
+
const http = require("node:http");
|
|
7
|
+
const soapHandler = require("./chunks/soap-handler-BznuMFIP.js");
|
|
8
|
+
const _import = require("./chunks/import-DYssQzex.js");
|
|
9
|
+
const cliCommon = require("./chunks/cli-common-Cq_cphpZ.js");
|
|
10
10
|
require("./chunks/handle-CL-nWtYA.js");
|
|
11
11
|
require("@xmldom/xmldom");
|
|
12
12
|
require("uuid");
|
|
13
|
-
require("./chunks/data-files-
|
|
14
|
-
require("crypto");
|
|
13
|
+
require("./chunks/data-files-BYqhsoPe.js");
|
|
14
|
+
require("node:crypto");
|
|
15
15
|
function fetchUrl(url) {
|
|
16
16
|
return new Promise((resolveP, rejectP) => {
|
|
17
17
|
const lib = url.startsWith("https") ? https : http;
|
package/out/preload/index.js
CHANGED
|
@@ -260,7 +260,7 @@ const api = {
|
|
|
260
260
|
/** Remove a secret from the OS keychain. */
|
|
261
261
|
deleteSecret: (ref) => electron.ipcRenderer.invoke(IPC.secret.delete, ref),
|
|
262
262
|
/** Optional: generate markdown docs for an item via the configured LLM. */
|
|
263
|
-
|
|
263
|
+
generateAiDocs: (input) => electron.ipcRenderer.invoke(IPC.ai.generateDocs, input),
|
|
264
264
|
// ─── Globals ──────────────────────────────────────────────────────────────
|
|
265
265
|
getGlobals: () => electron.ipcRenderer.invoke(IPC.globals.get),
|
|
266
266
|
setGlobals: (globals) => electron.ipcRenderer.invoke(IPC.globals.set, globals),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { l as linter, E as EditorView, L as LanguageSupport, e as LRLanguage, s as styleTags, i as indentNodeProp, f as delimitedIndent, m as foldNodeProp, n as foldInside, S as StateField, p as LRParser, q as StateEffect, u as tags, r as reactExports, j as jsxRuntimeExports, c as ReactCodeMirror, o as oneDark, b as json } from "./codemirror-F6m3Hm1M.js";
|
|
2
|
-
import { u as useT, a as useStore, b as useActiveEnvironment } from "./index-
|
|
2
|
+
import { u as useT, a as useStore, b as useActiveEnvironment } from "./index-vEDOfWlE.js";
|
|
3
3
|
import "./ajv-2MAg6kGF.js";
|
|
4
4
|
function devAssert(condition, message) {
|
|
5
5
|
const booleanCondition = Boolean(condition);
|
|
@@ -12013,7 +12013,7 @@ function validateQuery(schema, query, variablesJson) {
|
|
|
12013
12013
|
} catch {
|
|
12014
12014
|
}
|
|
12015
12015
|
const used = /* @__PURE__ */ new Set();
|
|
12016
|
-
for (const m of query.matchAll(/\$([A-Za-z_]
|
|
12016
|
+
for (const m of query.matchAll(/\$([A-Za-z_]\w*)/g)) used.add(m[1]);
|
|
12017
12017
|
for (const v of used) {
|
|
12018
12018
|
if (!(v in provided)) problems.push({ message: `Variable "$${v}" is not set in Variables`, severity: "warning" });
|
|
12019
12019
|
}
|
|
@@ -12253,8 +12253,8 @@ function GraphQLEditor({ request, onChange }) {
|
|
|
12253
12253
|
const extraHeaders = {};
|
|
12254
12254
|
for (const h of request.headers) {
|
|
12255
12255
|
if (h.enabled && h.key) {
|
|
12256
|
-
const key = h.key.
|
|
12257
|
-
const val = h.value.
|
|
12256
|
+
const key = h.key.replaceAll(/\{\{([^}]+)\}\}/g, (_, k) => resolvedVars[k.trim()] ?? "");
|
|
12257
|
+
const val = h.value.replaceAll(/\{\{([^}]+)\}\}/g, (_, k) => resolvedVars[k.trim()] ?? "");
|
|
12258
12258
|
extraHeaders[key] = val;
|
|
12259
12259
|
}
|
|
12260
12260
|
}
|
|
@@ -12326,12 +12326,12 @@ function GraphQLEditor({ request, onChange }) {
|
|
|
12326
12326
|
onClick: () => {
|
|
12327
12327
|
try {
|
|
12328
12328
|
const vars = [];
|
|
12329
|
-
const safe = gql.query.
|
|
12329
|
+
const safe = gql.query.replaceAll(/\{\{([^}]+)\}\}/g, (_m, v) => {
|
|
12330
12330
|
vars.push(v);
|
|
12331
12331
|
return `__TPL${vars.length - 1}__`;
|
|
12332
12332
|
});
|
|
12333
12333
|
let formatted = print(parse(safe));
|
|
12334
|
-
formatted = formatted.
|
|
12334
|
+
formatted = formatted.replaceAll(/__TPL(\d+)__/g, (_m, i) => `{{${vars[Number(i)]}}}`);
|
|
12335
12335
|
updateGql({ query: formatted });
|
|
12336
12336
|
} catch {
|
|
12337
12337
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports, c as ReactCodeMirror, o as oneDark, x as xml } from "./codemirror-F6m3Hm1M.js";
|
|
2
|
-
import { u as useT, c as btnPrimaryCls, d as commentKeymap } from "./index-
|
|
2
|
+
import { u as useT, c as btnPrimaryCls, d as commentKeymap } from "./index-vEDOfWlE.js";
|
|
3
3
|
import "./ajv-2MAg6kGF.js";
|
|
4
4
|
const SOAP_11_CONTENT_TYPE = "text/xml; charset=utf-8";
|
|
5
5
|
const SOAP_12_CONTENT_TYPE = "application/soap+xml; charset=utf-8";
|
|
@@ -97,7 +97,7 @@ function SoapEditor({ request, onChange }) {
|
|
|
97
97
|
}
|
|
98
98
|
const selected = operations.find((o) => o.name === soap.operationName && (soap.soapVersion === void 0 || o.soapVersion === soap.soapVersion) && (soap.binding === void 0 || (o.binding ?? "") === (soap.binding ?? ""))) ?? operations.find((o) => o.name === soap.operationName) ?? operations[0];
|
|
99
99
|
const primaryEndpoint = endpoints[0]?.address;
|
|
100
|
-
const versions = Array.from(new Set(operations.map((o) => o.soapVersion))).sort();
|
|
100
|
+
const versions = Array.from(new Set(operations.map((o) => o.soapVersion))).sort((a, b) => a.localeCompare(b));
|
|
101
101
|
const hasSavedSoap = Boolean(soap.envelope?.trim() || soap.operationName || soap.wsdlUrl?.trim());
|
|
102
102
|
const showFullUi = operations.length > 0;
|
|
103
103
|
const showFallback = !showFullUi && hasSavedSoap;
|
|
@@ -152,7 +152,7 @@ function SoapEditor({ request, onChange }) {
|
|
|
152
152
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "w-44 shrink-0 flex flex-col bg-surface-900/40 border border-surface-800 rounded-md overflow-hidden", children: [
|
|
153
153
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-2.5 py-1.5 text-[9px] uppercase tracking-wider font-semibold text-surface-600 border-b border-surface-800", children: t("Operations") }),
|
|
154
154
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "overflow-y-auto flex-1", children: operations.map((op) => {
|
|
155
|
-
const active =
|
|
155
|
+
const active = op.name === selected?.name && op.soapVersion === selected.soapVersion && (op.binding ?? "") === (selected.binding ?? "");
|
|
156
156
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
157
157
|
"button",
|
|
158
158
|
{
|