@testsmith/api-spector 0.8.5 → 0.8.7

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-WMdzNu1m.js");
6
+ const requestExec = require("./request-exec-BI4sXJop.js");
7
7
  const Ajv = require("ajv");
8
8
  const jsYaml = require("js-yaml");
9
9
  require("node:http");
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- const requestExec = require("./request-exec-WMdzNu1m.js");
2
+ const requestExec = require("./request-exec-BI4sXJop.js");
3
3
  const grpc = require("@grpc/grpc-js");
4
4
  const protoLoader = require("@grpc/proto-loader");
5
5
  const fs = require("node:fs");
@@ -165,9 +165,11 @@ async function runPerfTest(schedule, iterate, onProgress, progressMs = 500) {
165
165
  let peakVus = 0;
166
166
  let dropped = 0;
167
167
  let stopped = false;
168
+ let stoppedEarly = false;
168
169
  const start = Date.now();
169
170
  active = { stop: () => {
170
171
  stopped = true;
172
+ stoppedEarly = true;
171
173
  } };
172
174
  const record = (s) => {
173
175
  iterations += 1;
@@ -318,7 +320,7 @@ async function runPerfTest(schedule, iterate, onProgress, progressMs = 500) {
318
320
  series,
319
321
  peakVus,
320
322
  droppedArrivals: dropped,
321
- stopped,
323
+ stopped: stoppedEarly,
322
324
  thresholds: [],
323
325
  passed: true
324
326
  };
@@ -934,7 +934,7 @@ async function resolveInlineSecretRefs(text) {
934
934
  }
935
935
  function mergeVars(envVars, collectionVars, globals2, localVars = {}, dynamicVars = {}, folderVars = {}) {
936
936
  const out = {};
937
- for (const src of [dynamicVars, globals2, collectionVars, folderVars, envVars, localVars]) {
937
+ for (const src of [dynamicVars, globals2, collectionVars, envVars, folderVars, localVars]) {
938
938
  for (const [k, v] of Object.entries(src ?? {})) {
939
939
  if (v == null) continue;
940
940
  out[k] = v;
@@ -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-BLNAmcIO.js");
5
+ const brokerClient = require("./chunks/broker-client-Bp9YId3a.js");
6
6
  const escape = require("./chunks/escape-DDVAlOvZ.js");
7
7
  const crypto = require("node:crypto");
8
8
  const undici = require("undici");
@@ -11,7 +11,7 @@ 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-WMdzNu1m.js");
14
+ require("./chunks/request-exec-BI4sXJop.js");
15
15
  require("fs/promises");
16
16
  require("tls");
17
17
  require("./chunks/handle-_4XMUlwm.js");
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-WMdzNu1m.js");
5
+ const requestExec = require("./chunks/request-exec-BI4sXJop.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");
@@ -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.5"}`;
271
+ const version = `v${"0.8.7"}`;
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
@@ -4,7 +4,7 @@ const handle = require("./chunks/handle-_4XMUlwm.js");
4
4
  const path = require("node:path");
5
5
  const fs = require("node:fs");
6
6
  const registerHandlers = require("./register-handlers.js");
7
- const requestExec = require("./chunks/request-exec-WMdzNu1m.js");
7
+ const requestExec = require("./chunks/request-exec-BI4sXJop.js");
8
8
  const electronUpdater = require("electron-updater");
9
9
  const mockServer = require("./chunks/mock-server-C4kTFkod.js");
10
10
  require("node:fs/promises");
@@ -31,7 +31,7 @@ require("node:os");
31
31
  require("@grpc/grpc-js");
32
32
  require("@grpc/proto-loader");
33
33
  require("./chunks/escape-DDVAlOvZ.js");
34
- require("./chunks/broker-client-BLNAmcIO.js");
34
+ require("./chunks/broker-client-Bp9YId3a.js");
35
35
  require("simple-git");
36
36
  require("./chunks/recorder-BkO8G_mB.js");
37
37
  require("fs/promises");
@@ -50,7 +50,7 @@ function isNewer(a, b) {
50
50
  return a2 > b2;
51
51
  }
52
52
  async function checkForUpdate() {
53
- const current = "0.8.5";
53
+ const current = "0.8.7";
54
54
  try {
55
55
  const res = await fetch(REGISTRY_URL, { signal: AbortSignal.timeout(4e3) });
56
56
  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-WMdzNu1m.js");
4
+ const requestExec = require("./chunks/request-exec-BI4sXJop.js");
5
5
  const flowEngine = require("./chunks/flow-engine-BxwjEy37.js");
6
6
  require("node:http");
7
7
  require("node:crypto");
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
- const perfRun = require("./chunks/perf-run-8vtnijFu.js");
3
- const requestExec = require("./chunks/request-exec-WMdzNu1m.js");
2
+ const perfRun = require("./chunks/perf-run-Dcb-A4Ln.js");
3
+ const requestExec = require("./chunks/request-exec-BI4sXJop.js");
4
4
  require("@grpc/grpc-js");
5
5
  require("@grpc/proto-loader");
6
6
  require("node:fs");
package/out/main/perf.js CHANGED
@@ -2,10 +2,10 @@
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-WMdzNu1m.js");
5
+ const requestExec = require("./chunks/request-exec-BI4sXJop.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-8vtnijFu.js");
8
+ const perfRun = require("./chunks/perf-run-Dcb-A4Ln.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");
@@ -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.5"}`;
194
+ const version = `v${"0.8.7"}`;
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));
@@ -29,7 +29,7 @@ const path = require("node:path");
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-WMdzNu1m.js");
32
+ const requestExec = require("./chunks/request-exec-BI4sXJop.js");
33
33
  const ipcValidate = require("./chunks/ipc-validate-sqUFqRmE.js");
34
34
  const uuid = require("uuid");
35
35
  const jsYaml = require("js-yaml");
@@ -49,7 +49,7 @@ const os = require("node:os");
49
49
  const grpc = require("@grpc/grpc-js");
50
50
  const protoLoader = require("@grpc/proto-loader");
51
51
  const escape = require("./chunks/escape-DDVAlOvZ.js");
52
- const brokerClient = require("./chunks/broker-client-BLNAmcIO.js");
52
+ const brokerClient = require("./chunks/broker-client-Bp9YId3a.js");
53
53
  const simpleGit = require("simple-git");
54
54
  const recorder = require("./chunks/recorder-BkO8G_mB.js");
55
55
  require("fs/promises");
@@ -792,7 +792,11 @@ function registerRequestHandler(ipc) {
792
792
  envVars: { ...envVars },
793
793
  collectionVars: { ...collectionVars },
794
794
  globals: { ...mergedGlobals },
795
- localVars: {}
795
+ // Seed the script's local scope with the already-resolved local vars
796
+ // (request-scoped variables + any data-row) so they survive the script
797
+ // run — otherwise updatedLocalVars below would overwrite them with {} and
798
+ // {{request-level vars}} would go un-interpolated at send time.
799
+ localVars: { ...localVars }
796
800
  });
797
801
  preScriptMeta = { error: result.error, consoleOutput: result.consoleOutput };
798
802
  localVars = result.updatedLocalVars;
@@ -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-WMdzNu1m.js");
5
+ const requestExec = require("./chunks/request-exec-BI4sXJop.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");
@@ -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.5"}`;
554
+ const version = `v${"0.8.7"}`;
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));
@@ -1,5 +1,5 @@
1
1
  import { l as linter, E as EditorView, L as LanguageSupport, i as LRLanguage, s as styleTags, m as indentNodeProp, n as delimitedIndent, p as foldNodeProp, q as foldInside, S as StateField, u as LRParser, v as StateEffect, w as tags, a as reactExports, j as jsxRuntimeExports, e as ReactCodeMirror, o as oneDark, d as json } from "./codemirror-BKmwMUlV.js";
2
- import { u as useT, a as useStore, b as useActiveEnvironment, i as isSubscriptionQuery } from "./index-kpku5bmc.js";
2
+ import { u as useT, a as useStore, b as useActiveEnvironment, i as isSubscriptionQuery } from "./index-CLKJD4rg.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, e as ReactCodeMirror, o as oneDark, x as xml } from "./codemirror-BKmwMUlV.js";
2
- import { u as useT, c as btnPrimaryCls, d as commentKeymap } from "./index-kpku5bmc.js";
2
+ import { u as useT, c as btnPrimaryCls, d as commentKeymap } from "./index-CLKJD4rg.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";
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./GraphQLEditor-BJ8UW5Ec.js","./codemirror-BKmwMUlV.js","./ajv-CJPwFjiP.js","./SoapEditor-CGOlsyHn.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./GraphQLEditor-DqY91rWn.js","./codemirror-BKmwMUlV.js","./ajv-CJPwFjiP.js","./SoapEditor-DcpInN2A.js"])))=>i.map(i=>d[i]);
2
2
  import { r as requireReact, g as getDefaultExportFromCjs, R as React, a as reactExports, b as autocompletion, h as hoverTooltip, j as jsxRuntimeExports, k as keymap, t as toggleComment, D as Decoration, E as EditorView, V as ViewPlugin, c as RangeSetBuilder, x as xml, d as json, e as ReactCodeMirror, o as oneDark, f as javascript } from "./codemirror-BKmwMUlV.js";
3
3
  import { r as requireAjv } from "./ajv-CJPwFjiP.js";
4
4
  var client = { exports: {} };
@@ -28649,8 +28649,8 @@ function jsonWithComments() {
28649
28649
  function xmlWithComments() {
28650
28650
  return [xml(), commentKeymap];
28651
28651
  }
28652
- const GraphQLEditor = reactExports.lazy(() => __vitePreload(() => import("./GraphQLEditor-BJ8UW5Ec.js"), true ? __vite__mapDeps([0,1,2]) : void 0, import.meta.url).then((m) => ({ default: m.GraphQLEditor })));
28653
- const SoapEditor = reactExports.lazy(() => __vitePreload(() => import("./SoapEditor-CGOlsyHn.js"), true ? __vite__mapDeps([3,1,2]) : void 0, import.meta.url).then((m) => ({ default: m.SoapEditor })));
28652
+ const GraphQLEditor = reactExports.lazy(() => __vitePreload(() => import("./GraphQLEditor-DqY91rWn.js"), true ? __vite__mapDeps([0,1,2]) : void 0, import.meta.url).then((m) => ({ default: m.GraphQLEditor })));
28653
+ const SoapEditor = reactExports.lazy(() => __vitePreload(() => import("./SoapEditor-DcpInN2A.js"), true ? __vite__mapDeps([3,1,2]) : void 0, import.meta.url).then((m) => ({ default: m.SoapEditor })));
28654
28654
  function BodyTab({ request: request2, onChange }) {
28655
28655
  const t = useT();
28656
28656
  const editorFallback = /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-4 text-xs text-surface-500", children: t("Loading editor…") });
@@ -38788,7 +38788,7 @@ function VariablesTab({ request: request2 }) {
38788
38788
  return { envDisplay: envDisplay2, envKeys: envKeys2, folderVars: folderVars2, collectionVars: collectionVars2 };
38789
38789
  }, [activeEnv, col, request2.id]);
38790
38790
  const requestVars = reactExports.useMemo(() => request2.variables ?? {}, [request2.variables]);
38791
- const sourceOf = (name) => name in requestVars ? "request" : envKeys.has(name) ? "environment" : name in folderVars ? "folder" : name in collectionVars ? "collection" : "global";
38791
+ const sourceOf = (name) => name in requestVars ? "request" : name in folderVars ? "folder" : envKeys.has(name) ? "environment" : name in collectionVars ? "collection" : "global";
38792
38792
  const valueOf = (name) => {
38793
38793
  switch (sourceOf(name)) {
38794
38794
  case "request":
@@ -45335,7 +45335,7 @@ function WelcomeScreen() {
45335
45335
  )
45336
45336
  ] }),
45337
45337
  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-surface-400 text-sm max-w-sm", children: t("Local-first API testing with Robot Framework & Playwright code generation. Secrets stay on your machine.") }),
45338
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[11px] mt-3", style: { color: "var(--text-muted)" }, children: t("version :version", { version: "0.8.5" }) })
45338
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[11px] mt-3", style: { color: "var(--text-muted)" }, children: t("version :version", { version: "0.8.7" }) })
45339
45339
  ] }),
45340
45340
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-3 w-64", children: [
45341
45341
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -50567,7 +50567,7 @@ function FolderPanel() {
50567
50567
  ),
50568
50568
  activeTab === "data" && /* @__PURE__ */ jsxRuntimeExports.jsx(DataSetEditor, { ds, onChange: (next) => updateFolder(cid, folder2.id, { dataSet: next }), exportName: folder2.name, scopeLabel: "folder" }),
50569
50569
  activeTab === "variables" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2", children: [
50570
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[11px] text-surface-500 leading-relaxed", children: t("Variables scoped to this folder. They override collection variables and are overridden by an inner folder, the active environment, and script-set values. Reference them anywhere with :token.", { token: "{{name}}" }) }),
50570
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[11px] text-surface-500 leading-relaxed", children: t("Variables scoped to this folder. They override collection and environment variables, and are overridden by an inner folder, a request’s own variables, and runtime / CLI / data-row values. Reference them anywhere with :token.", { token: "{{name}}" }) }),
50571
50571
  /* @__PURE__ */ jsxRuntimeExports.jsx(KVTable, { rows: varRows, onChange: setVars, keyPlaceholder: t("name"), valuePlaceholder: t("value") })
50572
50572
  ] })
50573
50573
  ] })
@@ -56854,7 +56854,7 @@ function App() {
56854
56854
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: { color: "#6aa3c8" }, children: "Spector" }),
56855
56855
  /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "ml-2 text-[10px] font-normal opacity-50", children: [
56856
56856
  "v",
56857
- "0.8.5"
56857
+ "0.8.7"
56858
56858
  ] }),
56859
56859
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "mx-2 opacity-30", children: "·" }),
56860
56860
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -5,7 +5,7 @@
5
5
  <meta charset="UTF-8" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>API Spector</title>
8
- <script type="module" crossorigin src="./assets/index-kpku5bmc.js"></script>
8
+ <script type="module" crossorigin src="./assets/index-CLKJD4rg.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="./assets/codemirror-BKmwMUlV.js">
10
10
  <link rel="modulepreload" crossorigin href="./assets/ajv-CJPwFjiP.js">
11
11
  <link rel="stylesheet" crossorigin href="./assets/index-DH2Ag-Ov.css">
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@testsmith/api-spector",
3
3
  "productName": "API Spector",
4
- "version": "0.8.5",
4
+ "version": "0.8.7",
5
5
  "description": "Local-first API testing tool to inspect, test and mock APIs",
6
6
  "repository": {
7
7
  "type": "git",