@qaick/runner 0.30.1 → 0.30.3
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/package-dist/package.json +5 -5
- package/package-dist/src/demo/RunnerWalkthrough.js +1 -1
- package/package-dist/src/runner/RunnerModule.js +12 -12
- package/package-dist/src/runner/action-template-lowering.js +1 -1
- package/package-dist/src/runner/catalog.js +1 -1
- package/package-dist/src/runner/history.js +1 -1
- package/package-dist/src/runner/invocation-inputs.js +3 -1
- package/package-dist/src/runner/invocation-inputs.js.map +1 -1
- package/package-dist/src/runner/loaded-target.js +1 -1
- package/package-dist/src/runner/package-loader.js +2 -2
- package/package-dist/src/runner/result-export.js +1 -1
- package/package-dist/src/runner/runtime-client-adapter.js +2 -2
- package/package-dist/src/runner/studio-artifact-loader.js +2 -2
- package/package-dist/src/runner/studio-hierarchy-loader.js +2 -2
- package/package.json +5 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qaick/runner",
|
|
3
3
|
"description": "Reusable QAick Runner module and standalone execution application.",
|
|
4
|
-
"version": "0.30.
|
|
4
|
+
"version": "0.30.3",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
7
|
"package-dist",
|
|
@@ -58,10 +58,10 @@
|
|
|
58
58
|
"publish:release": "npm run check:package && npm publish --tag latest"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@qaick/contract": "0.3.
|
|
62
|
-
"@qaick/executor": "0.2.
|
|
63
|
-
"@qaick/http-executor": "0.2.
|
|
64
|
-
"@qaick/runtime": "0.2.
|
|
61
|
+
"@qaick/contract": "0.3.1",
|
|
62
|
+
"@qaick/executor": "0.2.2",
|
|
63
|
+
"@qaick/http-executor": "0.2.2",
|
|
64
|
+
"@qaick/runtime": "0.2.3",
|
|
65
65
|
"zustand": "^5.0.15"
|
|
66
66
|
},
|
|
67
67
|
"peerDependencies": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from 'react';
|
|
3
|
-
import { RUNNER_UI_VERSION } from
|
|
3
|
+
import { RUNNER_UI_VERSION } from "../build-info.js";
|
|
4
4
|
const steps = [
|
|
5
5
|
{ id: 'overview', title: 'Runner overview', action: 'Start with the loaded execution package.', detail: 'Runner loads a durable QAick artifact, lets you choose a target, executes it, and presents structured evidence.' },
|
|
6
6
|
{ id: 'package', title: 'Load and select a package', action: 'Choose a Project or Flow target.', detail: 'The package selector lists the available target. Load package accepts the serialized file produced by Studio.' },
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useRef, useState } from 'react';
|
|
3
|
-
import { checkoutNestedPackage, checkoutPackage, checkoutProjectPackage } from
|
|
4
|
-
import { PackageLoadError } from
|
|
5
|
-
import { loadTarget, restoreTarget } from
|
|
6
|
-
import { PackageCatalog } from
|
|
7
|
-
import { RUNNER_CONTRACT_VERSION } from
|
|
8
|
-
import { RunnerWalkthrough } from
|
|
9
|
-
import { RUNNER_BUILD_LABEL, RUNNER_UI_VERSION } from
|
|
10
|
-
import { collectSecretValues, redactExecutionEvent, redactExecutionResult, redactKeyValuePairs } from
|
|
11
|
-
import { createResultExport } from
|
|
12
|
-
import { inspectDeclaredInputs, inputDrafts, resolvedArguments } from
|
|
13
|
-
import { persistRunHistory } from
|
|
3
|
+
import { checkoutNestedPackage, checkoutPackage, checkoutProjectPackage } from "./fixture.js";
|
|
4
|
+
import { PackageLoadError } from "./package-loader.js";
|
|
5
|
+
import { loadTarget, restoreTarget } from "./loaded-target.js";
|
|
6
|
+
import { PackageCatalog } from "./catalog.js";
|
|
7
|
+
import { RUNNER_CONTRACT_VERSION } from "./types.js";
|
|
8
|
+
import { RunnerWalkthrough } from "../demo/RunnerWalkthrough.js";
|
|
9
|
+
import { RUNNER_BUILD_LABEL, RUNNER_UI_VERSION } from "../build-info.js";
|
|
10
|
+
import { collectSecretValues, redactExecutionEvent, redactExecutionResult, redactKeyValuePairs } from "./redaction.js";
|
|
11
|
+
import { createResultExport } from "./result-export.js";
|
|
12
|
+
import { inspectDeclaredInputs, inputDrafts, resolvedArguments } from "./invocation-inputs.js";
|
|
13
|
+
import { persistRunHistory } from "./history.js";
|
|
14
14
|
const HISTORY_KEY = 'qaick-runner.history.v1';
|
|
15
15
|
const HISTORY_RETENTION_KEY = 'qaick-runner.history-retention.v1';
|
|
16
16
|
const IMPORTED_PACKAGE_KEY = 'qaick-runner.imported-package.v1';
|
|
@@ -243,7 +243,7 @@ function RunnerApp({ client, onExit }) {
|
|
|
243
243
|
return undefined; const timer = window.setInterval(() => setClock(Date.now()), 250); return () => window.clearInterval(timer); }, [runState]);
|
|
244
244
|
useEffect(() => { const navigateIssue = (event) => { const target = event.target; const issue = target.closest('.validation-issue'); const stepId = issue?.dataset.stepId; const eventRow = target.closest('.event-row'); const index = stepId ? displaySteps.findIndex(step => step.id === stepId || step.id.endsWith(`.${stepId}`)) : eventRow ? displaySteps.findIndex(step => eventRow.textContent?.includes(step.name)) : -1; if (index >= 0)
|
|
245
245
|
setSelectedStep(index); }; document.addEventListener('click', navigateIssue); return () => document.removeEventListener('click', navigateIssue); }, [displaySteps]);
|
|
246
|
-
return _jsxs("div", { className: "runner-shell", children: [_jsxs("header", { className: "runner-header", children: [_jsxs("div", { className: "runner-brand", children: [_jsx("span", { className: "runner-brand-mark", children: "QAICK" }), _jsx("span", { className: "runner-brand-product", children: "Runner" }), _jsx("span", { className: "alpha-label", children: RUNNER_UI_VERSION }), onExit && _jsx("button", { className: "about-button", onClick: onExit, children: "Studio" })] }), _jsx("span", { className: "header-spacer" }), _jsx("a", { className: "demo-entry", href: "./examples/qaick-local-http-regression.qaick.json"
|
|
246
|
+
return _jsxs("div", { className: "runner-shell", children: [_jsxs("header", { className: "runner-header", children: [_jsxs("div", { className: "runner-brand", children: [_jsx("span", { className: "runner-brand-mark", children: "QAICK" }), _jsx("span", { className: "runner-brand-product", children: "Runner" }), _jsx("span", { className: "alpha-label", children: RUNNER_UI_VERSION }), onExit && _jsx("button", { className: "about-button", onClick: onExit, children: "Studio" })] }), _jsx("span", { className: "header-spacer" }), _jsx("a", { className: "demo-entry", href: "./examples/qaick-local-http-regression.qaick.json", download: true, title: "Download QAick Local HTTP Regression. Start the local fixture on port 5197, then load this file. Runner executes both Flows. Editing is restricted in Studio.", children: "HTTP example" }), _jsx("a", { className: "demo-entry", href: "?demo", children: "View demo" }), _jsx("button", { className: "about-button", onClick: () => setShowAbout(true), children: "About" }), _jsxs("label", { className: "theme-picker", children: ["Theme", _jsxs("select", { value: theme, onChange: event => setTheme(event.target.value), children: [_jsx("option", { value: "light", children: "Light" }), _jsx("option", { value: "dark", children: "Dark" })] })] })] }), _jsxs("main", { className: "runner-main", children: [_jsxs("nav", { className: "runner-nav", children: [_jsx("p", { className: "nav-label", children: "Workspace" }), _jsx(NavItem, { active: true, icon: "\u25C8", text: "Execution Package" }), _jsx(NavItem, { icon: "\u25A1", text: "Projects" }), _jsx(NavItem, { icon: "\u2318", text: "Flows" }), _jsx(NavItem, { icon: "\u21B6", text: "Run History" }), _jsxs("div", { className: "package-card", children: [_jsx("small", { children: "Loaded package" }), _jsxs("strong", { children: [executionPackage.packageId, ".qaick.json"] }), _jsxs("small", { children: ["Execution v", executionPackage.schemaVersion, " \u00B7 ", executionPackage.definitions.length, " definitions"] })] })] }), _jsxs("section", { className: "runner-workspace", children: [_jsx("div", { className: "eyebrow", children: "EXECUTION PACKAGE" }), _jsx("h1", { children: executionPackage.target.name }), _jsxs("p", { className: "description", children: ["Execute the selected QAick ", executionPackage.target.kind === 'project' ? 'Project' : 'Flow', " and capture structured evidence."] }), _jsxs("div", { className: "run-controls", children: [_jsxs("label", { children: ["Target", _jsx("select", { value: executionPackage.packageId, onChange: event => { const next = packageCatalog.get(event.target.value); setExecutionPackage(next); if (!inspectDeclaredInputs(next).conflict && !inspectDeclaredInputs(next).unresolved)
|
|
247
247
|
setInputEdits(inputDrafts(inspectDeclaredInputs(next).declarations)); setBreakpoints(new Set()); breakpointsRef.current = new Set(); setStopAfterStepId(undefined); setLoadError(undefined); setLoadIssues([]); setRuntimeValues(Object.fromEntries((next.runtimeRequirements ?? []).map(name => [name, '']))); setStepStates((next.target.kind === 'project' ? next.flows?.flatMap(flow => flattenDisplaySteps(flow.steps)) ?? [] : flattenDisplaySteps(next.steps)).map(() => 'pending')); setLoopProgress(loopProgressFor(next.target.kind === 'project' ? next.flows?.flatMap(flow => flow.steps) ?? [] : next.steps)); setSelectedStep(0); setResult(undefined); setEvents([]); setRunState('ready'); }, children: packageCatalog.targets().map(item => _jsx("option", { value: item.packageId, children: item.target.name }, item.packageId)) })] }), _jsxs("label", { children: ["Environment", _jsxs("select", { value: environment, onChange: event => setEnvironment(event.target.value), children: [_jsx("option", { children: "test" }), _jsx("option", { children: "local" }), _jsx("option", { children: "staging" })] })] }), _jsxs("label", { children: ["Timeout", _jsxs("select", { value: timeoutMs, onChange: event => setTimeoutMs(event.target.value), children: [_jsx("option", { value: "none", children: "None" }), _jsx("option", { value: "1000", children: "1 second" }), _jsx("option", { value: "3000", children: "3 seconds" }), _jsx("option", { value: "10000", children: "10 seconds" })] })] }), _jsxs("label", { children: ["Run configuration", _jsxs("select", { defaultValue: "Default", children: [_jsx("option", { children: "Default" }), _jsx("option", { children: "Debug" })] })] }), _jsxs("label", { className: "file-button", children: ["Load package", _jsx("input", { type: "file", accept: "application/json,.json", onChange: event => void loadPackage(event.target.files?.[0]) })] }), _jsx("button", { className: "button", onClick: () => setEditingInputs(value => !value), children: editingInputs ? 'Done inputs' : 'Edit inputs' }), _jsx("button", { className: "button primary", onClick: () => void run(), disabled: !!inputBlocker || runState === 'preflighting' || runState === 'running', children: "\u25B6\u00A0 Run" }), _jsx("button", { className: "button dry-run", onClick: () => void run(true), disabled: !!inputBlocker || runState === "preflighting" || runState === "running", children: "\u25CE\u00A0 Pre-run validation" }), _jsx("button", { className: "button stop", onClick: () => void stop(), disabled: runState !== 'preflighting' && runState !== 'running', children: "\u25A0\u00A0 Stop" }), _jsx("button", { className: "button", onClick: () => void pause(), disabled: controlState !== 'running', children: "\u2161\u00A0 Pause" }), _jsx("button", { className: `button ${controlState === 'paused' ? 'resume-highlight' : ''}`, onClick: () => void resume(), disabled: controlState !== 'paused', children: "\u25B6\u00A0 Resume" }), _jsx("button", { className: "button", onClick: () => void stepExecution(), disabled: controlState !== 'paused', children: "\u21A6\u00A0 Step" }), breakpoints.size > 0 && _jsxs("span", { className: "debug-session-badge", children: [breakpoints.size, " breakpoint", breakpoints.size === 1 ? "" : "s", " armed"] })] }), viewingHistoryEntry && _jsxs("div", { className: "history-view-banner", children: ["Viewing stored results \u00B7 ", viewingHistoryEntry] }), conflict && _jsxs("section", { role: "alert", children: [_jsx("p", { children: conflict.message }), _jsx("ul", { children: conflict.entries.map((entry, index) => _jsxs("li", { children: [entry.owner, " \u00B7 ", entry.declaration.name, " \u00B7 ", entry.declaration.type, " \u00B7 ", entry.declaration.required ? 'required' : 'optional', " \u00B7 default: ", Object.hasOwn(entry.declaration, 'defaultValue') ? JSON.stringify(entry.declaration.defaultValue) : 'none'] }, index)) }), _jsx("p", { children: "Retained input drafts:" }), _jsx("ul", { children: Object.entries(inputEdits).map(([name, draft]) => _jsxs("li", { children: [name, " \u00B7 ", draft.supplied ? 'supplied' : 'omitted'] }, name)) })] }), unresolved && _jsxs("section", { role: "alert", children: [_jsx("p", { children: unresolved.message }), _jsx("ul", { children: unresolved.entries.map((entry, index) => _jsxs("li", { children: [entry.owner, " \u00B7 ", entry.name, " \u00B7 required \u00B7 type unresolved"] }, index)) }), _jsx("p", { children: "Retained input drafts:" }), _jsx("ul", { children: Object.entries(inputEdits).map(([name, draft]) => _jsxs("li", { children: [name, " \u00B7 ", draft.supplied ? 'supplied' : 'omitted'] }, name)) })] }), loadError && _jsx("p", { className: "load-error", children: loadError }), loadIssues.length > 0 && _jsx(PreRunValidation, { issues: loadIssues, title: "Artifact validation" }), result?.issues !== undefined && _jsx(PreRunValidation, { issues: result.issues }), result?.warnings !== undefined && result.warnings.length > 0 && _jsx(PreRunValidation, { issues: result.warnings, title: "Browser execution warnings" }), editingInputs && _jsxs("section", { className: "inputs-panel panel", children: [_jsxs("div", { className: "panel-heading", children: [_jsx("h2", { children: "Invocation Inputs" }), _jsx("span", { className: "panel-spacer" }), _jsx("span", { className: "input-hint", children: "Values are sent with the next run" })] }), _jsxs("div", { className: "input-grid", children: [inputBlocker ? _jsx("p", { children: "Invocation input editing is unavailable until requirements are resolved." }) : declarations.map(declaration => { const draft = inputEdits[declaration.name] ?? { supplied: false, text: '' }; const change = (text) => setInputEdits(previous => ({ ...previous, [declaration.name]: { supplied: true, text } })); return _jsxs("div", { children: [_jsxs("label", { children: [_jsx("input", { type: "checkbox", "aria-label": `Supply ${declaration.name}`, checked: draft.supplied, onChange: event => setInputEdits(previous => ({ ...previous, [declaration.name]: { ...draft, supplied: event.target.checked } })) }), "Supply ", declaration.name] }), declaration.type === 'boolean' ? _jsxs("label", { className: "input-field", children: [declaration.name, _jsxs("select", { value: draft.text, onChange: event => change(event.target.value), children: [_jsx("option", { value: "false", children: "false" }), _jsx("option", { value: "true", children: "true" })] })] }) : _jsx(InputField, { label: declaration.name, value: draft.text, onChange: change }), _jsxs("small", { children: [declaration.type, " \u00B7 ", draft.supplied ? 'supplied' : Object.hasOwn(declaration, 'defaultValue') ? 'omitted — declared default applies' : 'omitted', declaration.required ? ' · required' : ''] })] }, declaration.name); }), inputError && _jsx("p", { role: "alert", children: inputError }), (executionPackage.runtimeRequirements ?? []).map(name => _jsx(InputField, { label: `Runtime · ${name}`, value: runtimeValues[name] ?? '', onChange: value => setRuntimeValues(previous => ({ ...previous, [name]: value })) }, name))] })] }), _jsxs("section", { className: "panel", children: [_jsxs("div", { className: "panel-heading", children: [_jsx("h2", { children: "Live Execution" }), _jsx("span", { className: "panel-spacer" }), _jsxs("span", { className: "execution-menu-label", children: ["Right-click a row to manage its breakpoint \u00B7 Selected: ", displaySteps[selectedStep]?.name ?? 'None'] }), _jsxs("span", { className: runState === 'running' ? 'running' : runState === 'failed' ? 'stopped' : 'run-status', children: ["\u25CF ", statusLabel] })] }), hasNestedSteps && _jsxs("div", { className: "hierarchy-hint", children: [_jsx("strong", { children: "Nested execution" }), _jsx("span", { children: "Use \u2212 / + to collapse or expand nested Operations, Control Blocks, and loops." }), _jsx("button", { className: "hierarchy-action", onClick: () => setAllCollapsed(true), children: "Collapse all" }), _jsx("button", { className: "hierarchy-action", onClick: () => setAllCollapsed(false), children: "Expand all" })] }), _jsxs("table", { children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "#" }), _jsx("th", { children: "Step hierarchy" }), _jsx("th", { children: "Status" }), _jsx("th", { children: "Start time" }), _jsx("th", { children: "Duration" })] }) }), _jsx("tbody", { children: displaySteps.map((step, index) => { const progress = step.loopTotal ? loopProgress[step.id] ?? { current: 0, total: step.loopTotal } : undefined; const percent = progress ? Math.round(progress.current / progress.total * 100) : 0; const isLoop = Boolean(step.loopTotal); const displayState = displayResults[index]?.state ?? stepStates[index] ?? 'pending'; const isLoopContent = Boolean(step.loopId); const isLoopEnd = isLoopContent && displaySteps[index + 1]?.loopId !== step.loopId; const elapsed = step.loopId && loopStartedAt[step.loopId] ? formatElapsed(clock - loopStartedAt[step.loopId]) : undefined; return _jsxs("tr", { className: `${selectedStep === index ? 'selected ' : ''}${isLoop ? 'loop-row ' : ''}${isLoopContent ? 'loop-content ' : ''}${isLoopEnd ? 'loop-end ' : ''}${step.depth > 0 ? 'nested-row' : 'parent-row'}`, tabIndex: 0, onKeyDown: event => { if (event.key === "ArrowDown") {
|
|
248
248
|
event.preventDefault();
|
|
249
249
|
setSelectedStep(Math.min(displaySteps.length - 1, index + 1));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PackageLoadError } from
|
|
1
|
+
import { PackageLoadError } from "./package-load-error.js";
|
|
2
2
|
import { isApiResponseField } from '@qaick/contract';
|
|
3
3
|
function actionOutputNames(action) {
|
|
4
4
|
const declared = Array.isArray(action.outputs) ? action.outputs.filter(isRecord).flatMap(output => typeof output.name === 'string' ? [output.name] : []) : [];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { redactExecutionResult } from
|
|
1
|
+
import { redactExecutionResult } from "./redaction.js";
|
|
2
2
|
export function persistRunHistory(storage, key, entries, retention, secretValues = []) {
|
|
3
3
|
const next = entries.slice(0, retention).map(entry => ({ ...entry, result: redactExecutionResult(entry.result, secretValues) }));
|
|
4
4
|
storage.setItem(key, JSON.stringify(next));
|
|
@@ -56,8 +56,10 @@ export function resolvedArguments(declarations, drafts) {
|
|
|
56
56
|
const values = Object.create(null);
|
|
57
57
|
for (const d of declarations) {
|
|
58
58
|
const draft = drafts[d.name];
|
|
59
|
-
if (!draft?.supplied)
|
|
59
|
+
if (!draft?.supplied || draft.text === '') {
|
|
60
|
+
values[d.name] = null;
|
|
60
61
|
continue;
|
|
62
|
+
}
|
|
61
63
|
if (d.type === 'string')
|
|
62
64
|
values[d.name] = draft.text;
|
|
63
65
|
else if (d.type === 'number') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invocation-inputs.js","sourceRoot":"","sources":["../../../src/runner/invocation-inputs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"invocation-inputs.js","sourceRoot":"","sources":["../../../src/runner/invocation-inputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { migrateArtifact } from '@qaick/contract';
|
|
2
|
-
import { loadExecutionPackage } from
|
|
2
|
+
import { loadExecutionPackage } from "./package-loader.js";
|
|
3
3
|
export function loadTarget(serialized) {
|
|
4
4
|
const value = JSON.parse(serialized);
|
|
5
5
|
const executionPackage = loadExecutionPackage(serialized);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { loadHierarchyExecutionPackage } from
|
|
2
|
-
export { PackageLoadError } from
|
|
1
|
+
import { loadHierarchyExecutionPackage } from "./studio-hierarchy-loader.js";
|
|
2
|
+
export { PackageLoadError } from "./package-load-error.js";
|
|
3
3
|
/** Normal package load preserves authored structural context through canonical lowering. */
|
|
4
4
|
export const loadExecutionPackage = loadHierarchyExecutionPackage;
|
|
5
5
|
//# sourceMappingURL=package-loader.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRuntime, InMemoryActionExecutor } from '@qaick/runtime';
|
|
2
2
|
import { HttpActionExecutor } from '@qaick/http-executor';
|
|
3
|
-
import { FetchHttpTransport } from
|
|
4
|
-
import { assertSupportedExecutionContext } from
|
|
3
|
+
import { FetchHttpTransport } from "./adapters.js";
|
|
4
|
+
import { assertSupportedExecutionContext } from "./execution-context.js";
|
|
5
5
|
export function createRunnerRuntimeClient(bridge) {
|
|
6
6
|
return {
|
|
7
7
|
submit: async (request) => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { lowerStudioHierarchy } from
|
|
2
|
-
export { lowerStudioHierarchy, loadHierarchyExecutionPackage } from
|
|
1
|
+
import { lowerStudioHierarchy } from "./studio-hierarchy-loader.js";
|
|
2
|
+
export { lowerStudioHierarchy, loadHierarchyExecutionPackage } from "./studio-hierarchy-loader.js";
|
|
3
3
|
export function loadStudioFlowArtifact(artifact) { return lowerStudioHierarchy(artifact); }
|
|
4
4
|
export function loadStudioProjectFile(artifact) { return lowerStudioHierarchy(artifact); }
|
|
5
5
|
//# sourceMappingURL=studio-artifact-loader.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { migrateArtifact, migrateHierarchyBindings, hierarchyOccurrences, orderedRoutineNodes, executionOutputPackagingIssues, normalizeExecutionOutputAlias, validateExecutionPackageV7 } from '@qaick/contract';
|
|
2
|
-
import { PackageLoadError } from
|
|
3
|
-
import { lowerStudioActionOccurrence, runtimeTemplates } from
|
|
2
|
+
import { PackageLoadError } from "./package-load-error.js";
|
|
3
|
+
import { lowerStudioActionOccurrence, runtimeTemplates } from "./action-template-lowering.js";
|
|
4
4
|
const record = (v) => v !== null && typeof v === 'object' && !Array.isArray(v);
|
|
5
5
|
const key = (a) => JSON.stringify([a.scope, a.segments.map(s => s.kind === 'body' ? ['body'] : [s.kind, s.position])]);
|
|
6
6
|
const literal = (v) => record(v) && v.type === 'literal' ? v.value : undefined;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qaick/runner",
|
|
3
3
|
"description": "Reusable QAick Runner module and standalone execution application.",
|
|
4
|
-
"version": "0.30.
|
|
4
|
+
"version": "0.30.3",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
7
|
"package-dist",
|
|
@@ -58,10 +58,10 @@
|
|
|
58
58
|
"publish:release": "npm run check:package && npm publish --tag latest"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@qaick/contract": "0.3.
|
|
62
|
-
"@qaick/executor": "0.2.
|
|
63
|
-
"@qaick/http-executor": "0.2.
|
|
64
|
-
"@qaick/runtime": "0.2.
|
|
61
|
+
"@qaick/contract": "0.3.1",
|
|
62
|
+
"@qaick/executor": "0.2.2",
|
|
63
|
+
"@qaick/http-executor": "0.2.2",
|
|
64
|
+
"@qaick/runtime": "0.2.3",
|
|
65
65
|
"zustand": "^5.0.15"
|
|
66
66
|
},
|
|
67
67
|
"peerDependencies": {
|