@testsmith/api-spector 0.8.3 → 0.8.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.
@@ -3,7 +3,7 @@ const promises = require("node:fs/promises");
3
3
  const path = require("node:path");
4
4
  const crypto = require("node:crypto");
5
5
  const undici = require("undici");
6
- const requestExec = require("./request-exec-CEmSNDIG.js");
6
+ const requestExec = require("./request-exec-SKbmXjo-.js");
7
7
  const Ajv = require("ajv");
8
8
  const jsYaml = require("js-yaml");
9
9
  require("node:http");
@@ -82,6 +82,7 @@ const IPC = {
82
82
  http: "import:http",
83
83
  har: "import:har",
84
84
  arazzo: "import:arazzo",
85
+ wsdl: "import:wsdl",
85
86
  spector: "import:spector",
86
87
  openapiSchemas: "import:openapi-schemas",
87
88
  openapiSchemasUrl: "import:openapi-schemas-url"
@@ -1,22 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const uuid = require("uuid");
4
- const soapHandler = require("./soap-handler-Brr7BPWO.js");
5
- require("./handle-Crv1i9hb.js");
4
+ const soapHandler = require("./soap-handler-LmMvd8e1.js");
5
+ require("./handle-COrktzST.js");
6
6
  require("node:https");
7
7
  require("node:http");
8
8
  require("@xmldom/xmldom");
9
- const SOAP_11_CONTENT_TYPE = "text/xml; charset=utf-8";
10
- const SOAP_12_CONTENT_TYPE = "application/soap+xml; charset=utf-8";
11
- function contentTypeForSoap(version) {
12
- return version === "1.2" ? SOAP_12_CONTENT_TYPE : SOAP_11_CONTENT_TYPE;
13
- }
14
- function withContentType(headers, value) {
15
- const idx = headers.findIndex((h) => h.key.toLowerCase() === "content-type");
16
- const next = { key: "Content-Type", value, enabled: true };
17
- if (idx === -1) return [...headers, next];
18
- return headers.map((h, i) => i === idx ? { ...h, value, enabled: true } : h);
19
- }
20
9
  function buildRequestsFromWsdl(parsed) {
21
10
  const out = [];
22
11
  const byName = /* @__PURE__ */ new Map();
@@ -25,13 +14,13 @@ function buildRequestsFromWsdl(parsed) {
25
14
  if (!existing || existing.soapVersion === "1.2" && op.soapVersion === "1.1") byName.set(op.name, op);
26
15
  }
27
16
  for (const op of byName.values()) {
28
- const ct = contentTypeForSoap(op.soapVersion);
17
+ const ct = soapHandler.contentTypeForSoap(op.soapVersion);
29
18
  const req = {
30
19
  id: uuid.v4(),
31
20
  name: op.name,
32
21
  method: "POST",
33
22
  url: op.endpoint ?? "",
34
- headers: withContentType([], ct),
23
+ headers: soapHandler.withContentType([], ct),
35
24
  params: [],
36
25
  auth: { type: "none" },
37
26
  protocol: "soap",
@@ -102,7 +91,7 @@ function buildMockFromWsdl(name, parsed, existingPorts = []) {
102
91
  method: "POST",
103
92
  path: routePath,
104
93
  statusCode: 200,
105
- headers: { "Content-Type": contentTypeForSoap(version) },
94
+ headers: { "Content-Type": soapHandler.contentTypeForSoap(version) },
106
95
  body: "",
107
96
  description: `SOAP ${version} - dispatched per operation`,
108
97
  script: soapHandler.buildMockDispatchScript(),
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- const requestExec = require("./request-exec-CEmSNDIG.js");
2
+ const requestExec = require("./request-exec-SKbmXjo-.js");
3
3
  const grpc = require("@grpc/grpc-js");
4
4
  const protoLoader = require("@grpc/proto-loader");
5
5
  const fs = require("node:fs");
@@ -24,7 +24,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
24
24
  const undici = require("undici");
25
25
  const promises$1 = require("fs/promises");
26
26
  const nodeTls = require("tls");
27
- const handle = require("./handle-Crv1i9hb.js");
27
+ const handle = require("./handle-COrktzST.js");
28
28
  const fs = require("node:fs");
29
29
  const os = require("node:os");
30
30
  const path = require("node:path");
@@ -786,6 +786,8 @@ async function getSecret(ref) {
786
786
  }
787
787
  return process.env[ref] ?? null;
788
788
  }
789
+ const PATH_PARAM_PATTERN = String.raw`\[([A-Za-z_]\w*)\]|(?<!\{)\{([A-Za-z_]\w*)\}(?!\})`;
790
+ const PATH_PARAM_RE = new RegExp(PATH_PARAM_PATTERN, "g");
789
791
  let _fakerCache$1 = null;
790
792
  async function getFaker$1() {
791
793
  _fakerCache$1 ??= await import("@faker-js/faker");
@@ -841,8 +843,8 @@ function buildUrl(baseUrl, params, vars) {
841
843
  templateTokens.add(String(name).trim());
842
844
  return "";
843
845
  });
844
- baseUrl.replaceAll(/\[([A-Za-z_]\w*)\]/g, (_m, name) => {
845
- templateTokens.add(String(name));
846
+ baseUrl.replaceAll(PATH_PARAM_RE, (_m, g1, g2) => {
847
+ templateTokens.add(g1 ?? g2);
846
848
  return "";
847
849
  });
848
850
  const enabled = (params ?? []).filter((p) => p.enabled && p.key);
@@ -858,7 +860,10 @@ function buildUrl(baseUrl, params, vars) {
858
860
  ...Object.fromEntries(pathRows.map((p) => [p.key, interpolate(p.value, vars)]))
859
861
  } : vars;
860
862
  let url = interpolate(baseUrl, mergedVars);
861
- url = url.replaceAll(/\[([A-Za-z_]\w*)\]/g, (m, name) => name in mergedVars ? mergedVars[name] : m);
863
+ url = url.replaceAll(PATH_PARAM_RE, (m, g1, g2) => {
864
+ const name = g1 ?? g2;
865
+ return name in mergedVars ? mergedVars[name] : m;
866
+ });
862
867
  if (!queryRows.length) return url;
863
868
  const sep = url.includes("?") ? "&" : "?";
864
869
  const qs = queryRows.map((p) => `${encodeURIComponent(interpolate(p.key, vars))}=${encodeURIComponent(interpolate(p.value, vars))}`).join("&");
@@ -2633,6 +2638,9 @@ async function executeRunnerRequest(opts) {
2633
2638
  status: "running"
2634
2639
  };
2635
2640
  const dynamicVars = await buildDynamicVars();
2641
+ if (req.variables && Object.keys(req.variables).length > 0) {
2642
+ localVars = { ...req.variables, ...localVars };
2643
+ }
2636
2644
  if (localVars && Object.keys(localVars).length > 0) {
2637
2645
  localVars = resolveDataRow(localVars, mergeVars(envVars, collectionVars, globals2, {}, dynamicVars, folderVars));
2638
2646
  }
@@ -1,8 +1,19 @@
1
1
  "use strict";
2
- const handle = require("./handle-Crv1i9hb.js");
2
+ const handle = require("./handle-COrktzST.js");
3
3
  const https = require("node:https");
4
4
  const http = require("node:http");
5
5
  const xmldom = require("@xmldom/xmldom");
6
+ const SOAP_11_CONTENT_TYPE = "text/xml; charset=utf-8";
7
+ const SOAP_12_CONTENT_TYPE = "application/soap+xml; charset=utf-8";
8
+ function contentTypeForSoap(version) {
9
+ return version === "1.2" ? SOAP_12_CONTENT_TYPE : SOAP_11_CONTENT_TYPE;
10
+ }
11
+ function withContentType(headers, value) {
12
+ const idx = headers.findIndex((h) => h.key.toLowerCase() === "content-type");
13
+ const next = { key: "Content-Type", value, enabled: true };
14
+ if (idx === -1) return [...headers, next];
15
+ return headers.map((h, i) => i === idx ? { ...h, value, enabled: true } : h);
16
+ }
6
17
  function fetchUrl(url, headers = {}) {
7
18
  return new Promise((resolveP, rejectP) => {
8
19
  const lib = url.startsWith("https") ? https : http;
@@ -313,13 +324,25 @@ function registerSoapHandlers(ipc) {
313
324
  handle.handleIpc(ipc, handle.IPC.wsdl.import, async (_event, opts) => {
314
325
  const { validateWsdlImport } = await Promise.resolve().then(() => require("./ipc-validate-sqUFqRmE.js"));
315
326
  validateWsdlImport(opts);
316
- const { importWsdl } = await Promise.resolve().then(() => require("./import-DTcZMRNu.js"));
327
+ const { importWsdl } = await Promise.resolve().then(() => require("./import-BmZaS9zL.js"));
317
328
  const wsdlText = opts.xml ?? (opts.url ? await fetchUrl(opts.url) : "");
318
329
  if (!wsdlText) throw new Error("wsdl:import requires either `url` or `xml`");
319
330
  return importWsdl(wsdlText, { name: opts.name, existingMockPorts: opts.existingMockPorts });
320
331
  });
321
332
  }
333
+ const soapHandler = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
334
+ __proto__: null,
335
+ buildEnvelopeTemplate,
336
+ buildMockDispatchScript,
337
+ buildResponseEnvelope,
338
+ fetchUrl,
339
+ parseWsdl,
340
+ registerSoapHandlers
341
+ }, Symbol.toStringTag, { value: "Module" }));
322
342
  exports.buildMockDispatchScript = buildMockDispatchScript;
323
343
  exports.buildResponseEnvelope = buildResponseEnvelope;
344
+ exports.contentTypeForSoap = contentTypeForSoap;
324
345
  exports.parseWsdl = parseWsdl;
325
346
  exports.registerSoapHandlers = registerSoapHandlers;
347
+ exports.soapHandler = soapHandler;
348
+ exports.withContentType = withContentType;
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  const promises = require("node:fs/promises");
4
4
  const path = require("node:path");
5
- const brokerClient = require("./chunks/broker-client-BQBPAPCZ.js");
5
+ const brokerClient = require("./chunks/broker-client-BMV6WVVG.js");
6
6
  const escape = require("./chunks/escape-DDVAlOvZ.js");
7
7
  const crypto = require("node:crypto");
8
8
  const undici = require("undici");
@@ -11,10 +11,10 @@ const cliCommon = require("./chunks/cli-common-GnihVSjU.js");
11
11
  const node_child_process = require("node:child_process");
12
12
  const jsYaml = require("js-yaml");
13
13
  const environments = require("./chunks/environments-iM3SUM-4.js");
14
- require("./chunks/request-exec-CEmSNDIG.js");
14
+ require("./chunks/request-exec-SKbmXjo-.js");
15
15
  require("fs/promises");
16
16
  require("tls");
17
- require("./chunks/handle-Crv1i9hb.js");
17
+ require("./chunks/handle-COrktzST.js");
18
18
  require("node:fs");
19
19
  require("dayjs");
20
20
  require("node:vm");
package/out/main/flow.js CHANGED
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  const promises = require("node:fs/promises");
4
4
  const path = require("node:path");
5
- const requestExec = require("./chunks/request-exec-CEmSNDIG.js");
5
+ const requestExec = require("./chunks/request-exec-SKbmXjo-.js");
6
6
  const requestCollection = require("./chunks/request-collection-gkOYlWml.js");
7
7
  const environments = require("./chunks/environments-iM3SUM-4.js");
8
8
  const flowEngine = require("./chunks/flow-engine-BxwjEy37.js");
@@ -10,7 +10,7 @@ const cliCommon = require("./chunks/cli-common-GnihVSjU.js");
10
10
  require("undici");
11
11
  require("fs/promises");
12
12
  require("tls");
13
- require("./chunks/handle-Crv1i9hb.js");
13
+ require("./chunks/handle-COrktzST.js");
14
14
  require("node:fs");
15
15
  require("node:os");
16
16
  require("node:crypto");
@@ -268,7 +268,7 @@ async function main() {
268
268
  const envName = args.environment ?? args.env;
269
269
  const env = environments.selectEnvironment(workspace, environments$1, envName);
270
270
  const verbose = Boolean(args.verbose);
271
- const version = `v${"0.8.3"}`;
271
+ const version = `v${"0.8.4"}`;
272
272
  console.log("");
273
273
  console.log(cliCommon.color(" API Flow Runner" + (version ? ` ${version}` : ""), cliCommon.C.bold, cliCommon.C.white));
274
274
  console.log(cliCommon.color(` Flow: ${flow.name}`, cliCommon.C.gray));
package/out/main/index.js CHANGED
@@ -22,18 +22,19 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
22
22
  mod
23
23
  ));
24
24
  const electron = require("electron");
25
- const handle = require("./chunks/handle-Crv1i9hb.js");
25
+ const handle = require("./chunks/handle-COrktzST.js");
26
26
  const path = require("node:path");
27
27
  const fs = require("node:fs");
28
28
  const promises = require("node:fs/promises");
29
29
  const crypto = require("node:crypto");
30
30
  const JSZip = require("jszip");
31
31
  const dataFiles = require("./chunks/data-files-BYqhsoPe.js");
32
- const requestExec = require("./chunks/request-exec-CEmSNDIG.js");
32
+ const requestExec = require("./chunks/request-exec-SKbmXjo-.js");
33
33
  const ipcValidate = require("./chunks/ipc-validate-sqUFqRmE.js");
34
34
  const uuid = require("uuid");
35
35
  const jsYaml = require("js-yaml");
36
36
  const undici = require("undici");
37
+ const soapHandler = require("./chunks/soap-handler-LmMvd8e1.js");
37
38
  const requestCollection = require("./chunks/request-collection-gkOYlWml.js");
38
39
  const runConcurrent = require("./chunks/run-concurrent-468tH0AX.js");
39
40
  const flowEngine = require("./chunks/flow-engine-BxwjEy37.js");
@@ -46,9 +47,8 @@ const perfReport = require("./chunks/perf-report-ChaO3K0w.js");
46
47
  const os = require("node:os");
47
48
  const grpc = require("@grpc/grpc-js");
48
49
  const protoLoader = require("@grpc/proto-loader");
49
- const soapHandler = require("./chunks/soap-handler-Brr7BPWO.js");
50
50
  const escape = require("./chunks/escape-DDVAlOvZ.js");
51
- const brokerClient = require("./chunks/broker-client-BQBPAPCZ.js");
51
+ const brokerClient = require("./chunks/broker-client-BMV6WVVG.js");
52
52
  const simpleGit = require("simple-git");
53
53
  const recorder = require("./chunks/recorder-BkO8G_mB.js");
54
54
  const electronUpdater = require("electron-updater");
@@ -779,6 +779,9 @@ function registerRequestHandler(ipc) {
779
779
  if (dataRow && Object.keys(dataRow).length > 0) {
780
780
  localVars = requestExec.resolveDataRow(dataRow, requestExec.mergeVars(envVars, collectionVars, mergedGlobals, {}, dynamicVars));
781
781
  }
782
+ if (req.variables && Object.keys(req.variables).length > 0) {
783
+ localVars = { ...req.variables, ...localVars };
784
+ }
782
785
  let vars = requestExec.mergeVars(envVars, collectionVars, mergedGlobals, localVars, dynamicVars);
783
786
  let preScriptMeta = { consoleOutput: [] };
784
787
  let updatedCollectionVars = { ...collectionVars };
@@ -2522,7 +2525,87 @@ async function importArazzoFiles(paths) {
2522
2525
  if (!arazzoPath) throw new Error('No Arazzo workflow document was found among the selected files (expected an "arazzo" field or "workflows").');
2523
2526
  return importArazzo(arazzoPath, sourcePaths);
2524
2527
  }
2528
+ function importWsdlCollection(wsdlText, name) {
2529
+ const parsed = soapHandler.parseWsdl(wsdlText);
2530
+ const requests = {};
2531
+ const requestIds = [];
2532
+ const nameCounts = /* @__PURE__ */ new Map();
2533
+ for (const op of parsed.operations) nameCounts.set(op.name, (nameCounts.get(op.name) ?? 0) + 1);
2534
+ const usedNames = /* @__PURE__ */ new Set();
2535
+ const displayName = (opName, soapVersion) => {
2536
+ const base = (nameCounts.get(opName) ?? 0) > 1 ? `${opName} (${soapVersion})` : opName;
2537
+ let unique = base;
2538
+ for (let i = 2; usedNames.has(unique); i++) unique = `${base} ${i}`;
2539
+ usedNames.add(unique);
2540
+ return unique;
2541
+ };
2542
+ for (const op of parsed.operations) {
2543
+ const headers = [
2544
+ { key: "Content-Type", value: soapHandler.contentTypeForSoap(op.soapVersion), enabled: true }
2545
+ ];
2546
+ if (op.soapVersion === "1.1" && op.soapAction) {
2547
+ headers.push({ key: "SOAPAction", value: op.soapAction, enabled: true });
2548
+ }
2549
+ const body = {
2550
+ mode: "soap",
2551
+ soap: {
2552
+ wsdlUrl: "",
2553
+ operationName: op.name,
2554
+ soapVersion: op.soapVersion,
2555
+ binding: op.binding,
2556
+ soapAction: op.soapAction ?? "",
2557
+ envelope: op.inputTemplate
2558
+ }
2559
+ };
2560
+ const req = {
2561
+ id: uuid.v4(),
2562
+ name: displayName(op.name, op.soapVersion),
2563
+ method: "POST",
2564
+ url: op.endpoint ?? "",
2565
+ protocol: "soap",
2566
+ headers,
2567
+ params: [],
2568
+ auth: { type: "none" },
2569
+ body,
2570
+ description: op.soapAction ? `SOAPAction: ${op.soapAction}` : ""
2571
+ };
2572
+ requests[req.id] = req;
2573
+ requestIds.push(req.id);
2574
+ }
2575
+ return {
2576
+ version: "1.0",
2577
+ id: uuid.v4(),
2578
+ name: name || parsed.targetNamespace || "Imported WSDL",
2579
+ description: "",
2580
+ rootFolder: { id: uuid.v4(), name: "root", description: "", folders: [], requestIds },
2581
+ requests
2582
+ };
2583
+ }
2525
2584
  function registerImportHandlers(ipc) {
2585
+ handle.handleIpc(ipc, handle.IPC.import.wsdl, async (_event, opts = {}) => {
2586
+ let wsdlText;
2587
+ let name;
2588
+ if (opts.url?.trim()) {
2589
+ const url = opts.url.trim();
2590
+ const { validateWsdlFetchUrl } = await Promise.resolve().then(() => require("./chunks/ipc-validate-sqUFqRmE.js"));
2591
+ const { fetchUrl } = await Promise.resolve().then(() => require("./chunks/soap-handler-LmMvd8e1.js")).then((n) => n.soapHandler);
2592
+ validateWsdlFetchUrl(url);
2593
+ wsdlText = await fetchUrl(url);
2594
+ try {
2595
+ name = new URL(url).hostname;
2596
+ } catch {
2597
+ }
2598
+ } else {
2599
+ const result = await electron.dialog.showOpenDialog({
2600
+ title: "Import WSDL",
2601
+ filters: [{ name: "WSDL", extensions: ["wsdl", "xml"] }],
2602
+ properties: ["openFile"]
2603
+ });
2604
+ if (result.canceled || !result.filePaths[0]) return null;
2605
+ wsdlText = await promises.readFile(result.filePaths[0], "utf8");
2606
+ }
2607
+ return importWsdlCollection(wsdlText, name);
2608
+ });
2526
2609
  handle.handleIpc(ipc, handle.IPC.import.postman, async () => {
2527
2610
  const result = await electron.dialog.showOpenDialog({
2528
2611
  title: "Import Postman Collection",
@@ -7315,7 +7398,7 @@ function isNewer(a, b) {
7315
7398
  return a2 > b2;
7316
7399
  }
7317
7400
  async function checkForUpdate() {
7318
- const current = "0.8.3";
7401
+ const current = "0.8.4";
7319
7402
  try {
7320
7403
  const res = await fetch(REGISTRY_URL, { signal: AbortSignal.timeout(4e3) });
7321
7404
  if (!res.ok) return null;
package/out/main/lib.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const mockServer = require("./chunks/mock-server-C4kTFkod.js");
4
- const requestExec = require("./chunks/request-exec-CEmSNDIG.js");
4
+ const requestExec = require("./chunks/request-exec-SKbmXjo-.js");
5
5
  const flowEngine = require("./chunks/flow-engine-BxwjEy37.js");
6
6
  require("node:http");
7
7
  require("node:crypto");
@@ -11,7 +11,7 @@ require("@xmldom/xmldom");
11
11
  require("undici");
12
12
  require("fs/promises");
13
13
  require("tls");
14
- require("./chunks/handle-Crv1i9hb.js");
14
+ require("./chunks/handle-COrktzST.js");
15
15
  require("node:fs");
16
16
  require("node:os");
17
17
  require("node:path");
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
- const perfRun = require("./chunks/perf-run-D02WoC6i.js");
3
- const requestExec = require("./chunks/request-exec-CEmSNDIG.js");
2
+ const perfRun = require("./chunks/perf-run-D8yf5ocW.js");
3
+ const requestExec = require("./chunks/request-exec-SKbmXjo-.js");
4
4
  require("@grpc/grpc-js");
5
5
  require("@grpc/proto-loader");
6
6
  require("node:fs");
@@ -12,7 +12,7 @@ require("uuid");
12
12
  require("undici");
13
13
  require("fs/promises");
14
14
  require("tls");
15
- require("./chunks/handle-Crv1i9hb.js");
15
+ require("./chunks/handle-COrktzST.js");
16
16
  require("node:crypto");
17
17
  require("node:fs/promises");
18
18
  require("dayjs");
package/out/main/perf.js CHANGED
@@ -2,16 +2,16 @@
2
2
  "use strict";
3
3
  const promises = require("node:fs/promises");
4
4
  const path = require("node:path");
5
- const requestExec = require("./chunks/request-exec-CEmSNDIG.js");
5
+ const requestExec = require("./chunks/request-exec-SKbmXjo-.js");
6
6
  const environments = require("./chunks/environments-iM3SUM-4.js");
7
7
  const flowEngine = require("./chunks/flow-engine-BxwjEy37.js");
8
- const perfRun = require("./chunks/perf-run-D02WoC6i.js");
8
+ const perfRun = require("./chunks/perf-run-D8yf5ocW.js");
9
9
  const perfReport = require("./chunks/perf-report-ChaO3K0w.js");
10
10
  const cliCommon = require("./chunks/cli-common-GnihVSjU.js");
11
11
  require("undici");
12
12
  require("fs/promises");
13
13
  require("tls");
14
- require("./chunks/handle-Crv1i9hb.js");
14
+ require("./chunks/handle-COrktzST.js");
15
15
  require("node:fs");
16
16
  require("node:os");
17
17
  require("node:crypto");
@@ -191,7 +191,7 @@ async function main() {
191
191
  targetLabel = `flow: ${flow.name}`;
192
192
  }
193
193
  const load = perfRun.deriveLoad(plan);
194
- const version = `v${"0.8.3"}`;
194
+ const version = `v${"0.8.4"}`;
195
195
  console.log("");
196
196
  console.log(cliCommon.color(" API Performance" + (version ? ` ${version}` : ""), cliCommon.C.bold, cliCommon.C.white));
197
197
  console.log(cliCommon.color(` Plan: ${plan.name}`, cliCommon.C.gray));
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  const promises = require("node:fs/promises");
4
4
  const path = require("node:path");
5
- const requestExec = require("./chunks/request-exec-CEmSNDIG.js");
5
+ const requestExec = require("./chunks/request-exec-SKbmXjo-.js");
6
6
  const escape = require("./chunks/escape-DDVAlOvZ.js");
7
7
  const requestCollection = require("./chunks/request-collection-gkOYlWml.js");
8
8
  const runConcurrent = require("./chunks/run-concurrent-468tH0AX.js");
@@ -11,7 +11,7 @@ const cliCommon = require("./chunks/cli-common-GnihVSjU.js");
11
11
  require("undici");
12
12
  require("fs/promises");
13
13
  require("tls");
14
- require("./chunks/handle-Crv1i9hb.js");
14
+ require("./chunks/handle-COrktzST.js");
15
15
  require("node:fs");
16
16
  require("node:os");
17
17
  require("node:crypto");
@@ -551,7 +551,7 @@ async function main() {
551
551
  } else if (!envName && workspace.settings?.defaultEnvironment && !env) {
552
552
  console.warn(cliCommon.color(`Warning: default environment "${workspace.settings.defaultEnvironment}" not found. Running without environment.`, cliCommon.C.yellow));
553
553
  }
554
- const version = `v${"0.8.3"}`;
554
+ const version = `v${"0.8.4"}`;
555
555
  console.log("");
556
556
  console.log(cliCommon.color(" API Test Runner" + (version ? ` ${version}` : ""), cliCommon.C.bold, cliCommon.C.white));
557
557
  console.log(cliCommon.color(` Workspace: ${wsPath}`, cliCommon.C.gray));
package/out/main/wsdl.js CHANGED
@@ -4,10 +4,10 @@ const promises = require("node:fs/promises");
4
4
  const path = require("node:path");
5
5
  const https = require("node:https");
6
6
  const http = require("node:http");
7
- const soapHandler = require("./chunks/soap-handler-Brr7BPWO.js");
8
- const _import = require("./chunks/import-DTcZMRNu.js");
7
+ const soapHandler = require("./chunks/soap-handler-LmMvd8e1.js");
8
+ const _import = require("./chunks/import-BmZaS9zL.js");
9
9
  const cliCommon = require("./chunks/cli-common-GnihVSjU.js");
10
- require("./chunks/handle-Crv1i9hb.js");
10
+ require("./chunks/handle-COrktzST.js");
11
11
  require("@xmldom/xmldom");
12
12
  require("uuid");
13
13
  require("./chunks/data-files-BYqhsoPe.js");
@@ -83,6 +83,7 @@ const IPC = {
83
83
  http: "import:http",
84
84
  har: "import:har",
85
85
  arazzo: "import:arazzo",
86
+ wsdl: "import:wsdl",
86
87
  spector: "import:spector",
87
88
  openapiSchemas: "import:openapi-schemas",
88
89
  openapiSchemasUrl: "import:openapi-schemas-url"
@@ -376,6 +377,7 @@ const api = {
376
377
  importPostmanEnvironment: () => electron.ipcRenderer.invoke(IPC.import.postmanEnvironment),
377
378
  importOpenApi: () => electron.ipcRenderer.invoke(IPC.import.openapi),
378
379
  importOpenApiFromUrl: (url) => electron.ipcRenderer.invoke(IPC.import.openapiUrl, url),
380
+ importWsdl: (opts) => electron.ipcRenderer.invoke(IPC.import.wsdl, opts ?? {}),
379
381
  importInsomnia: () => electron.ipcRenderer.invoke(IPC.import.insomnia),
380
382
  importBruno: () => electron.ipcRenderer.invoke(IPC.import.bruno),
381
383
  importHttpFile: () => electron.ipcRenderer.invoke(IPC.import.http),
@@ -1,5 +1,5 @@
1
1
  import { l as linter, E as EditorView, L as LanguageSupport, f as LRLanguage, s as styleTags, i as indentNodeProp, m as delimitedIndent, n as foldNodeProp, p as foldInside, S as StateField, q as LRParser, u as StateEffect, v as tags, a as reactExports, j as jsxRuntimeExports, d as ReactCodeMirror, o as oneDark, c as json } from "./codemirror-CdIFBPs2.js";
2
- import { u as useT, a as useStore, b as useActiveEnvironment, i as isSubscriptionQuery } from "./index-DYw1nSsv.js";
2
+ import { u as useT, a as useStore, b as useActiveEnvironment, i as isSubscriptionQuery } from "./index-BMJ05gLq.js";
3
3
  import "./ajv-CJPwFjiP.js";
4
4
  function devAssert(condition, message) {
5
5
  const booleanCondition = Boolean(condition);
@@ -1,5 +1,5 @@
1
1
  import { a as reactExports, j as jsxRuntimeExports, d as ReactCodeMirror, o as oneDark, x as xml } from "./codemirror-CdIFBPs2.js";
2
- import { u as useT, c as btnPrimaryCls, d as commentKeymap } from "./index-DYw1nSsv.js";
2
+ import { u as useT, c as btnPrimaryCls, d as commentKeymap } from "./index-BMJ05gLq.js";
3
3
  import "./ajv-CJPwFjiP.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";
@@ -157,10 +157,17 @@ function SoapEditor({ request, onChange }) {
157
157
  "button",
158
158
  {
159
159
  onClick: () => selectOperation(op),
160
- className: `w-full text-left px-2.5 py-1.5 text-[11px] border-b border-surface-800/50 transition-colors ${active ? "bg-blue-900/30 text-blue-300" : "text-surface-300 hover:bg-surface-800/60"}`,
160
+ className: `w-full text-left px-2.5 py-1.5 text-[11px] border-b border-surface-800/50 transition-colors flex items-center gap-1.5 ${active ? "bg-blue-900/30 text-blue-300" : "text-surface-300 hover:bg-surface-800/60"}`,
161
161
  children: [
162
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-mono truncate", children: op.name }),
163
- op.soapVersion === "1.2" && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-[9px] text-surface-600 uppercase", children: "SOAP 1.2" })
162
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono truncate flex-1 min-w-0", children: op.name }),
163
+ versions.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsx(
164
+ "span",
165
+ {
166
+ className: `shrink-0 text-[8px] font-bold px-1 py-px rounded tracking-wide ${op.soapVersion === "1.2" ? "bg-violet-500/20 text-violet-300" : "bg-sky-500/20 text-sky-300"}`,
167
+ title: `SOAP ${op.soapVersion}`,
168
+ children: op.soapVersion
169
+ }
170
+ )
164
171
  ]
165
172
  },
166
173
  `${op.binding ?? ""}:${op.name}:${op.soapVersion}`