@voiden/runner 0.1.0-beta.0
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/README.md +748 -0
- package/dist/blockSchemaRegistry.d.ts +49 -0
- package/dist/blockSchemaRegistry.d.ts.map +1 -0
- package/dist/blockSchemaRegistry.js +68 -0
- package/dist/blockSchemaRegistry.js.map +1 -0
- package/dist/cliElectron.d.ts +55 -0
- package/dist/cliElectron.d.ts.map +1 -0
- package/dist/cliElectron.js +120 -0
- package/dist/cliElectron.js.map +1 -0
- package/dist/headlessContext.d.ts +18 -0
- package/dist/headlessContext.d.ts.map +1 -0
- package/dist/headlessContext.js +85 -0
- package/dist/headlessContext.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +945 -0
- package/dist/index.js.map +1 -0
- package/dist/parser.d.ts +24 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +87 -0
- package/dist/parser.js.map +1 -0
- package/dist/parserRegistry.d.ts +17 -0
- package/dist/parserRegistry.d.ts.map +1 -0
- package/dist/parserRegistry.js +27 -0
- package/dist/parserRegistry.js.map +1 -0
- package/dist/plugins/community.d.ts +42 -0
- package/dist/plugins/community.d.ts.map +1 -0
- package/dist/plugins/community.js +105 -0
- package/dist/plugins/community.js.map +1 -0
- package/dist/plugins/loader.d.ts +17 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +120 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/registry.d.ts +30 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +52 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/store.d.ts +19 -0
- package/dist/plugins/store.d.ts.map +1 -0
- package/dist/plugins/store.js +68 -0
- package/dist/plugins/store.js.map +1 -0
- package/dist/report/csv.d.ts +6 -0
- package/dist/report/csv.d.ts.map +1 -0
- package/dist/report/csv.js +71 -0
- package/dist/report/csv.js.map +1 -0
- package/dist/report/mail.d.ts +17 -0
- package/dist/report/mail.d.ts.map +1 -0
- package/dist/report/mail.js +84 -0
- package/dist/report/mail.js.map +1 -0
- package/dist/runner.d.ts +41 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +193 -0
- package/dist/runner.js.map +1 -0
- package/dist/runtimeVars.d.ts +55 -0
- package/dist/runtimeVars.d.ts.map +1 -0
- package/dist/runtimeVars.js +248 -0
- package/dist/runtimeVars.js.map +1 -0
- package/dist/session.d.ts +10 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +32 -0
- package/dist/session.js.map +1 -0
- package/dist/types.d.ts +45 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime variable capture and substitution — voiden-runner.
|
|
3
|
+
*
|
|
4
|
+
* In the Electron app, captured variables are saved to ~/.voiden/.process.env.json.
|
|
5
|
+
* In the runner they are kept PURELY IN-MEMORY for the duration of the run:
|
|
6
|
+
* • Nothing is written to disk — .void files are never touched
|
|
7
|
+
* • Variables captured from file/section A are available in file/section B
|
|
8
|
+
* • The map is reset on each `voiden-runner run` invocation
|
|
9
|
+
*
|
|
10
|
+
* Capture syntax (runtime-variables block in the .void file):
|
|
11
|
+
* key = token
|
|
12
|
+
* value = {{$res.body.access_token}}
|
|
13
|
+
*
|
|
14
|
+
* Substitution syntax (URL, headers, body, query params, etc.):
|
|
15
|
+
* {{process.token}}
|
|
16
|
+
*
|
|
17
|
+
* Script access:
|
|
18
|
+
* voiden.variables.get('token') // read
|
|
19
|
+
* voiden.variables.set('token', v) // write — reflected immediately in the run
|
|
20
|
+
*/
|
|
21
|
+
export interface RuntimeVarRow {
|
|
22
|
+
key: string;
|
|
23
|
+
value: string;
|
|
24
|
+
enabled: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface CaptureRequest {
|
|
27
|
+
url?: string;
|
|
28
|
+
method?: string;
|
|
29
|
+
requestHeaders?: Record<string, string>;
|
|
30
|
+
requestBody?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface CaptureResponse {
|
|
33
|
+
status?: number;
|
|
34
|
+
statusText?: string;
|
|
35
|
+
responseHeaders?: Record<string, string>;
|
|
36
|
+
body?: string;
|
|
37
|
+
durationMs?: number;
|
|
38
|
+
size?: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Find all runtime-variables capture rows inside a section's block array.
|
|
42
|
+
* Handles both the attrs.rows format (new) and TipTap nested table (old).
|
|
43
|
+
*/
|
|
44
|
+
export declare function extractRuntimeVarRows(blocks: any[]): RuntimeVarRow[];
|
|
45
|
+
/**
|
|
46
|
+
* Evaluate all capture rows and write results into `vars` (mutates in place).
|
|
47
|
+
* Call this after each request completes.
|
|
48
|
+
*/
|
|
49
|
+
export declare function captureRuntimeVars(rows: RuntimeVarRow[], req: CaptureRequest, res: CaptureResponse, vars: Record<string, any>): void;
|
|
50
|
+
/**
|
|
51
|
+
* Substitute {{process.xxx}} in all fields of a RestApiRequestState.
|
|
52
|
+
* Returns a shallow-cloned, modified copy — original is not mutated.
|
|
53
|
+
*/
|
|
54
|
+
export declare function applyProcessVarsToState(state: any, vars: Record<string, any>): any;
|
|
55
|
+
//# sourceMappingURL=runtimeVars.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeVars.d.ts","sourceRoot":"","sources":["../src/runtimeVars.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAM,MAAM,CAAA;IACf,KAAK,EAAI,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAY,MAAM,CAAA;IACtB,MAAM,CAAC,EAAS,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,WAAW,CAAC,EAAI,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAW,MAAM,CAAA;IACxB,UAAU,CAAC,EAAO,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,IAAI,CAAC,EAAa,MAAM,CAAA;IACxB,UAAU,CAAC,EAAO,MAAM,CAAA;IACxB,IAAI,CAAC,EAAa,MAAM,CAAA;CACzB;AAID;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,aAAa,EAAE,CA6CpE;AAsGD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAI,aAAa,EAAE,EACvB,GAAG,EAAK,cAAc,EACtB,GAAG,EAAK,eAAe,EACvB,IAAI,EAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,IAAI,CAiBN;AA0BD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,GAAG,EACV,IAAI,EAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,GAAG,CA4BL"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime variable capture and substitution — voiden-runner.
|
|
3
|
+
*
|
|
4
|
+
* In the Electron app, captured variables are saved to ~/.voiden/.process.env.json.
|
|
5
|
+
* In the runner they are kept PURELY IN-MEMORY for the duration of the run:
|
|
6
|
+
* • Nothing is written to disk — .void files are never touched
|
|
7
|
+
* • Variables captured from file/section A are available in file/section B
|
|
8
|
+
* • The map is reset on each `voiden-runner run` invocation
|
|
9
|
+
*
|
|
10
|
+
* Capture syntax (runtime-variables block in the .void file):
|
|
11
|
+
* key = token
|
|
12
|
+
* value = {{$res.body.access_token}}
|
|
13
|
+
*
|
|
14
|
+
* Substitution syntax (URL, headers, body, query params, etc.):
|
|
15
|
+
* {{process.token}}
|
|
16
|
+
*
|
|
17
|
+
* Script access:
|
|
18
|
+
* voiden.variables.get('token') // read
|
|
19
|
+
* voiden.variables.set('token', v) // write — reflected immediately in the run
|
|
20
|
+
*/
|
|
21
|
+
// ─── Block extraction ─────────────────────────────────────────────────────────
|
|
22
|
+
/**
|
|
23
|
+
* Find all runtime-variables capture rows inside a section's block array.
|
|
24
|
+
* Handles both the attrs.rows format (new) and TipTap nested table (old).
|
|
25
|
+
*/
|
|
26
|
+
export function extractRuntimeVarRows(blocks) {
|
|
27
|
+
const rows = [];
|
|
28
|
+
for (const block of blocks) {
|
|
29
|
+
if (block.type !== 'runtime-variables')
|
|
30
|
+
continue;
|
|
31
|
+
// ── New format: attrs.rows ─────────────────────────────────────────────
|
|
32
|
+
if (Array.isArray(block.attrs?.rows)) {
|
|
33
|
+
for (const r of block.attrs.rows) {
|
|
34
|
+
if (!r.key || !r.value)
|
|
35
|
+
continue;
|
|
36
|
+
rows.push({ key: r.key, value: r.value, enabled: r.enabled !== false });
|
|
37
|
+
}
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
// ── App-generated table format: table.rows[].row ──────────────────────
|
|
41
|
+
const table = block.content?.find((n) => n.type === 'table');
|
|
42
|
+
if (!table)
|
|
43
|
+
continue;
|
|
44
|
+
if (Array.isArray(table.rows)) {
|
|
45
|
+
for (const r of table.rows) {
|
|
46
|
+
if (r.attrs?.disabled === true)
|
|
47
|
+
continue;
|
|
48
|
+
const key = String(r.row?.[0] ?? '').trim();
|
|
49
|
+
const value = String(r.row?.[1] ?? '').trim();
|
|
50
|
+
if (!key || !value)
|
|
51
|
+
continue;
|
|
52
|
+
rows.push({ key, value, enabled: true });
|
|
53
|
+
}
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
// ── Old TipTap table format: table.content[tableRow] ──────────────────
|
|
57
|
+
for (const tr of table.content ?? []) {
|
|
58
|
+
if (tr.type !== 'tableRow')
|
|
59
|
+
continue;
|
|
60
|
+
if (tr.attrs?.disabled === true)
|
|
61
|
+
continue;
|
|
62
|
+
const cells = tr.content ?? [];
|
|
63
|
+
const key = cellText(cells[0]);
|
|
64
|
+
const value = cellText(cells[1]);
|
|
65
|
+
if (!key || !value)
|
|
66
|
+
continue;
|
|
67
|
+
rows.push({ key, value, enabled: true });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return rows;
|
|
71
|
+
}
|
|
72
|
+
function cellText(cell) {
|
|
73
|
+
if (!cell || cell.type !== 'tableCell')
|
|
74
|
+
return '';
|
|
75
|
+
return (cell.content ?? [])
|
|
76
|
+
.flatMap((p) => p.content ?? [])
|
|
77
|
+
.filter((n) => n.type === 'text')
|
|
78
|
+
.map((n) => n.text ?? '')
|
|
79
|
+
.join('')
|
|
80
|
+
.trim();
|
|
81
|
+
}
|
|
82
|
+
// ─── Value path extraction ────────────────────────────────────────────────────
|
|
83
|
+
function tryJson(s) {
|
|
84
|
+
if (typeof s !== 'string')
|
|
85
|
+
return s;
|
|
86
|
+
try {
|
|
87
|
+
return JSON.parse(s);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return s;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function toKvArray(obj) {
|
|
94
|
+
if (!obj)
|
|
95
|
+
return [];
|
|
96
|
+
return Object.entries(obj).map(([key, value]) => ({ key, value }));
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Extract a value by dot-notation path from a nested object or {key,value}[] array.
|
|
100
|
+
* Supports: `body.data.id`, `headers.Authorization`, `items[0].name`
|
|
101
|
+
*/
|
|
102
|
+
function byPath(obj, path) {
|
|
103
|
+
if (obj == null || !path)
|
|
104
|
+
return undefined;
|
|
105
|
+
const keys = path.split('.');
|
|
106
|
+
let cur = obj;
|
|
107
|
+
for (const raw of keys) {
|
|
108
|
+
if (cur == null)
|
|
109
|
+
return undefined;
|
|
110
|
+
if (typeof cur === 'string') {
|
|
111
|
+
cur = tryJson(cur);
|
|
112
|
+
if (cur == null)
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
// Array index: items[0]
|
|
116
|
+
const arr = raw.match(/^(.+)\[(\d+)\]$/);
|
|
117
|
+
if (arr) {
|
|
118
|
+
const [, k, i] = arr;
|
|
119
|
+
cur = Array.isArray(cur) ? kvFind(cur, k) : cur?.[k];
|
|
120
|
+
if (typeof cur === 'string')
|
|
121
|
+
cur = tryJson(cur);
|
|
122
|
+
cur = Array.isArray(cur) ? cur[parseInt(i, 10)] : undefined;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
// Key-value array (headers, queryParams, etc.)
|
|
126
|
+
if (Array.isArray(cur) && cur[0] != null && 'key' in cur[0]) {
|
|
127
|
+
cur = kvFind(cur, raw);
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
// Plain object — case-insensitive match for headers
|
|
131
|
+
if (cur && typeof cur === 'object' && !Array.isArray(cur)) {
|
|
132
|
+
const k = Object.keys(cur).find(k => k === raw || k.toLowerCase() === raw.toLowerCase());
|
|
133
|
+
cur = k ? cur[k] : undefined;
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
cur = cur?.[raw];
|
|
137
|
+
}
|
|
138
|
+
return cur;
|
|
139
|
+
}
|
|
140
|
+
function kvFind(arr, key) {
|
|
141
|
+
return arr.find((i) => i.key?.toLowerCase() === key.toLowerCase())?.value;
|
|
142
|
+
}
|
|
143
|
+
function evalExpr(expr, req, res) {
|
|
144
|
+
const m = expr.trim().match(/^\{\{\s*\$(\w+)\.(.+?)\s*\}\}$/);
|
|
145
|
+
if (!m)
|
|
146
|
+
return undefined;
|
|
147
|
+
const [, source, path] = m;
|
|
148
|
+
if (source === 'res') {
|
|
149
|
+
return byPath({
|
|
150
|
+
status: res.status,
|
|
151
|
+
statusText: res.statusText,
|
|
152
|
+
body: tryJson(res.body),
|
|
153
|
+
headers: toKvArray(res.responseHeaders),
|
|
154
|
+
time: res.durationMs,
|
|
155
|
+
size: res.size,
|
|
156
|
+
}, path);
|
|
157
|
+
}
|
|
158
|
+
if (source === 'req') {
|
|
159
|
+
return byPath({
|
|
160
|
+
url: req.url,
|
|
161
|
+
method: req.method,
|
|
162
|
+
headers: toKvArray(req.requestHeaders),
|
|
163
|
+
body: tryJson(req.requestBody),
|
|
164
|
+
queryParams: [],
|
|
165
|
+
}, path);
|
|
166
|
+
}
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
// ─── Capture update ───────────────────────────────────────────────────────────
|
|
170
|
+
/**
|
|
171
|
+
* Evaluate all capture rows and write results into `vars` (mutates in place).
|
|
172
|
+
* Call this after each request completes.
|
|
173
|
+
*/
|
|
174
|
+
export function captureRuntimeVars(rows, req, res, vars) {
|
|
175
|
+
for (const row of rows) {
|
|
176
|
+
if (!row.enabled)
|
|
177
|
+
continue;
|
|
178
|
+
const expr = row.value.trim();
|
|
179
|
+
if (/^\{\{\s*\$\w+\.[^}]+\s*\}\}$/.test(expr)) {
|
|
180
|
+
// Single template — preserve original type (object, number, etc.)
|
|
181
|
+
const captured = evalExpr(expr, req, res);
|
|
182
|
+
if (captured !== undefined && captured !== null)
|
|
183
|
+
vars[row.key] = captured;
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
// Mixed text — string interpolation
|
|
187
|
+
vars[row.key] = expr.replace(/\{\{\s*\$(\w+)\.([^}]+)\s*\}\}/g, (_, src, path) => {
|
|
188
|
+
const v = evalExpr(`{{$${src}.${path}}}`, req, res);
|
|
189
|
+
return v !== undefined && v !== null ? String(v) : '';
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// ─── Process variable substitution ───────────────────────────────────────────
|
|
195
|
+
const PROCESS_RE = /\{\{\s*process\.([^}]+)\s*\}\}/g;
|
|
196
|
+
function procReplace(text, vars) {
|
|
197
|
+
if (!text || typeof text !== 'string')
|
|
198
|
+
return text;
|
|
199
|
+
return text.replace(PROCESS_RE, (_, path) => {
|
|
200
|
+
const v = byPath(vars, path.trim());
|
|
201
|
+
return v !== undefined && v !== null
|
|
202
|
+
? (typeof v === 'object' ? JSON.stringify(v) : String(v))
|
|
203
|
+
: '';
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
function procReplacePreserve(text, vars) {
|
|
207
|
+
if (!text || typeof text !== 'string')
|
|
208
|
+
return text;
|
|
209
|
+
const single = text.trim().match(/^\{\{\s*process\.([^}]+)\s*\}\}$/);
|
|
210
|
+
if (single) {
|
|
211
|
+
const v = byPath(vars, single[1].trim());
|
|
212
|
+
return v !== undefined && v !== null ? v : '';
|
|
213
|
+
}
|
|
214
|
+
return procReplace(text, vars);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Substitute {{process.xxx}} in all fields of a RestApiRequestState.
|
|
218
|
+
* Returns a shallow-cloned, modified copy — original is not mutated.
|
|
219
|
+
*/
|
|
220
|
+
export function applyProcessVarsToState(state, vars) {
|
|
221
|
+
if (!Object.keys(vars).length)
|
|
222
|
+
return state;
|
|
223
|
+
const s = { ...state };
|
|
224
|
+
if (s.url)
|
|
225
|
+
s.url = procReplace(s.url, vars);
|
|
226
|
+
if (Array.isArray(s.headers))
|
|
227
|
+
s.headers = s.headers.map((h) => ({ ...h, value: procReplace(h.value ?? '', vars) }));
|
|
228
|
+
if (Array.isArray(s.queryParams))
|
|
229
|
+
s.queryParams = s.queryParams.map((p) => ({ ...p, value: procReplace(p.value ?? '', vars) }));
|
|
230
|
+
if (Array.isArray(s.pathParams))
|
|
231
|
+
s.pathParams = s.pathParams.map((p) => ({ ...p, value: procReplace(p.value ?? '', vars) }));
|
|
232
|
+
if (s.body) {
|
|
233
|
+
if (typeof s.body === 'string') {
|
|
234
|
+
const r = procReplacePreserve(s.body, vars);
|
|
235
|
+
s.body = typeof r === 'object' ? r : String(r);
|
|
236
|
+
}
|
|
237
|
+
else if (typeof s.body === 'object') {
|
|
238
|
+
try {
|
|
239
|
+
s.body = JSON.parse(procReplace(JSON.stringify(s.body), vars));
|
|
240
|
+
}
|
|
241
|
+
catch { /* keep */ }
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
if (Array.isArray(s.bodyParams))
|
|
245
|
+
s.bodyParams = s.bodyParams.map((p) => ({ ...p, value: procReplace(String(p.value ?? ''), vars) }));
|
|
246
|
+
return s;
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=runtimeVars.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeVars.js","sourceRoot":"","sources":["../src/runtimeVars.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RunResult } from './types.js';
|
|
2
|
+
export interface SessionResult {
|
|
3
|
+
file: string;
|
|
4
|
+
result: RunResult;
|
|
5
|
+
}
|
|
6
|
+
export declare function loadSessionResults(): SessionResult[];
|
|
7
|
+
export declare function saveSessionResults(results: SessionResult[]): void;
|
|
8
|
+
export declare function appendSessionResults(results: SessionResult[]): void;
|
|
9
|
+
export declare function clearSession(): void;
|
|
10
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAK3C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,SAAS,CAAA;CAClB;AAED,wBAAgB,kBAAkB,IAAI,aAAa,EAAE,CAOpD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAEjE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAGnE;AAED,wBAAgB,YAAY,IAAI,IAAI,CAKnC"}
|
package/dist/session.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, unlinkSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { STORE_DIR } from './plugins/store.js';
|
|
4
|
+
const RESULTS_PATH = join(STORE_DIR, 'results.json');
|
|
5
|
+
const VARS_PATH = join(STORE_DIR, '.process.env.json');
|
|
6
|
+
export function loadSessionResults() {
|
|
7
|
+
if (!existsSync(RESULTS_PATH))
|
|
8
|
+
return [];
|
|
9
|
+
try {
|
|
10
|
+
return JSON.parse(readFileSync(RESULTS_PATH, 'utf-8'));
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function saveSessionResults(results) {
|
|
17
|
+
writeFileSync(RESULTS_PATH, JSON.stringify(results, null, 2), 'utf-8');
|
|
18
|
+
}
|
|
19
|
+
export function appendSessionResults(results) {
|
|
20
|
+
const existing = loadSessionResults();
|
|
21
|
+
saveSessionResults([...existing, ...results]);
|
|
22
|
+
}
|
|
23
|
+
export function clearSession() {
|
|
24
|
+
const ENV_PATH = join(STORE_DIR, 'env.json');
|
|
25
|
+
if (existsSync(ENV_PATH))
|
|
26
|
+
unlinkSync(ENV_PATH);
|
|
27
|
+
if (existsSync(RESULTS_PATH))
|
|
28
|
+
unlinkSync(RESULTS_PATH);
|
|
29
|
+
if (existsSync(VARS_PATH))
|
|
30
|
+
unlinkSync(VARS_PATH);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAG9C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;AACpD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAA;AAOtD,MAAM,UAAU,kBAAkB;IAChC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,CAAA;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAA;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAwB;IACzD,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;AACxE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAwB;IAC3D,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAA;IACrC,kBAAkB,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IAC5C,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;IAC9C,IAAI,UAAU,CAAC,YAAY,CAAC;QAAE,UAAU,CAAC,YAAY,CAAC,CAAA;IACtD,IAAI,UAAU,CAAC,SAAS,CAAC;QAAE,UAAU,CAAC,SAAS,CAAC,CAAA;AAClD,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export interface Block {
|
|
2
|
+
type: string;
|
|
3
|
+
attrs?: Record<string, any>;
|
|
4
|
+
content?: Block[] | string;
|
|
5
|
+
}
|
|
6
|
+
export type { WebSocketRequest, GrpcRequest, RunResult as BaseRunResult, } from '@voiden/executors';
|
|
7
|
+
export type CliReportEntry = {
|
|
8
|
+
type: 'assertion';
|
|
9
|
+
message: string;
|
|
10
|
+
passed: boolean;
|
|
11
|
+
actual?: any;
|
|
12
|
+
expected?: any;
|
|
13
|
+
operator?: string;
|
|
14
|
+
} | {
|
|
15
|
+
type: 'log';
|
|
16
|
+
message: string;
|
|
17
|
+
level?: 'info' | 'debug' | 'warn' | 'error' | 'log';
|
|
18
|
+
} | {
|
|
19
|
+
type: 'section';
|
|
20
|
+
title: string;
|
|
21
|
+
message?: string;
|
|
22
|
+
};
|
|
23
|
+
import type { RunResult as _RunResult } from '@voiden/executors';
|
|
24
|
+
export interface RunResult extends _RunResult {
|
|
25
|
+
/** Structured entries emitted by plugins during the run */
|
|
26
|
+
reportEntries?: CliReportEntry[];
|
|
27
|
+
/** Sent request headers (key → value map) */
|
|
28
|
+
requestHeaders?: Record<string, string>;
|
|
29
|
+
/** Serialised request body that was sent */
|
|
30
|
+
requestBody?: string;
|
|
31
|
+
/** Response headers (key → value map) */
|
|
32
|
+
responseHeaders?: Record<string, string>;
|
|
33
|
+
/** @deprecated Use reportEntries with type:'assertion' instead */
|
|
34
|
+
assertions?: Array<{
|
|
35
|
+
passed: boolean;
|
|
36
|
+
message: string;
|
|
37
|
+
condition?: string;
|
|
38
|
+
actualValue?: any;
|
|
39
|
+
operator?: string;
|
|
40
|
+
expectedValue?: any;
|
|
41
|
+
}>;
|
|
42
|
+
assertionsPassed?: number;
|
|
43
|
+
assertionsFailed?: number;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC3B,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;CAC3B;AAID,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,SAAS,IAAI,aAAa,GAC3B,MAAM,mBAAmB,CAAA;AAI1B,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACxG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAO,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;CAAE,GAC3F;IAAE,IAAI,EAAE,SAAS,CAAC;IAAG,KAAK,EAAE,MAAM,CAAC;IAAG,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAO5D,OAAO,KAAK,EAAE,SAAS,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEhE,MAAM,WAAW,SAAU,SAAQ,UAAU;IAC3C,2DAA2D;IAC3D,aAAa,CAAC,EAAE,cAAc,EAAE,CAAA;IAChC,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,yCAAyC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,kEAAkE;IAClE,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,GAAG,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC,CAAA;IACvI,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,iFAAiF"}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@voiden/runner",
|
|
3
|
+
"version": "0.1.0-beta.0",
|
|
4
|
+
"description": "CLI runner for .void files — execute REST, WebSocket, and gRPC requests headlessly",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=18"
|
|
9
|
+
},
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"access": "public"
|
|
12
|
+
},
|
|
13
|
+
"bin": {
|
|
14
|
+
"voiden-runner": "./dist/index.js"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist/**"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"prebuild": "cd ../../core-extensions && tsc && cd ../packages/executors && tsc",
|
|
21
|
+
"build": "tsc",
|
|
22
|
+
"postbuild": "chmod +x dist/index.js",
|
|
23
|
+
"dev": "tsx --tsconfig tsconfig.dev.json src/index.ts",
|
|
24
|
+
"start": "node dist/index.js"
|
|
25
|
+
},
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@grpc/proto-loader": "^0.7.13",
|
|
28
|
+
"@voiden/core-extensions": "*",
|
|
29
|
+
"@voiden/executors": "*",
|
|
30
|
+
"@voiden/sdk": "^1.0.9",
|
|
31
|
+
"chalk": "^5.3.0",
|
|
32
|
+
"commander": "^12.0.0",
|
|
33
|
+
"nodemailer": "^8.0.7",
|
|
34
|
+
"yaml": "^2.4.2"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@types/node": "^20.14.10",
|
|
38
|
+
"@types/nodemailer": "^8.0.0",
|
|
39
|
+
"@types/ws": "^8.5.10",
|
|
40
|
+
"tsx": "^4.15.0",
|
|
41
|
+
"typescript": "^5.5.3"
|
|
42
|
+
}
|
|
43
|
+
}
|