@voiden/runner 2.1.1 → 2.3.0-beta.1
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/CHANGELOG.md +6 -0
- package/bundled-runners/versions.json +6 -6
- package/bundled-runners/voiden-advanced-auth-runner.js +1 -1
- package/bundled-runners/voiden-graphql-runner.js +1 -1
- package/bundled-runners/voiden-rest-api-runner.js +1 -1
- package/bundled-runners/voiden-sockets-grpcs-runner.js +1 -1
- package/dist/discovery.d.ts +11 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +54 -0
- package/dist/discovery.js.map +1 -0
- package/dist/envFile.d.ts +2 -0
- package/dist/envFile.d.ts.map +1 -0
- package/dist/envFile.js +59 -0
- package/dist/envFile.js.map +1 -0
- package/dist/headlessContext.d.ts.map +1 -1
- package/dist/headlessContext.js +9 -0
- package/dist/headlessContext.js.map +1 -1
- package/dist/index.js +261 -130
- package/dist/index.js.map +1 -1
- package/dist/lib.d.ts +16 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +18 -0
- package/dist/lib.js.map +1 -0
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +2 -0
- package/dist/plugins/loader.js.map +1 -1
- package/dist/plugins/registry.d.ts +8 -1
- package/dist/plugins/registry.d.ts.map +1 -1
- package/dist/plugins/registry.js +13 -2
- package/dist/plugins/registry.js.map +1 -1
- package/dist/plugins/store.d.ts +28 -1
- package/dist/plugins/store.d.ts.map +1 -1
- package/dist/plugins/store.js +46 -9
- package/dist/plugins/store.js.map +1 -1
- package/dist/plugins/versionInfo.d.ts +15 -0
- package/dist/plugins/versionInfo.d.ts.map +1 -0
- package/dist/plugins/versionInfo.js +18 -0
- package/dist/plugins/versionInfo.js.map +1 -0
- package/dist/requestContainerRegistry.d.ts +36 -0
- package/dist/requestContainerRegistry.d.ts.map +1 -0
- package/dist/requestContainerRegistry.js +42 -0
- package/dist/requestContainerRegistry.js.map +1 -0
- package/dist/resultBlock.d.ts +37 -0
- package/dist/resultBlock.d.ts.map +1 -0
- package/dist/resultBlock.js +143 -0
- package/dist/resultBlock.js.map +1 -0
- package/dist/runner.d.ts +20 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +85 -10
- package/dist/runner.js.map +1 -1
- package/dist/runtimeVars.js +3 -3
- package/dist/runtimeVars.js.map +1 -1
- package/dist/types.d.ts +1 -5
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -2
- package/dist/parser.d.ts +0 -24
- package/dist/parser.d.ts.map +0 -1
- package/dist/parser.js +0 -87
- package/dist/parser.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
All notable changes to `@voiden/runner` are documented here. This package is
|
|
4
4
|
versioned and released independently of the Voiden desktop app.
|
|
5
5
|
|
|
6
|
+
## v2.2.0 - 2026-07-23
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
- Deterministic exit codes for `run`: `0` success, `1` one or more requests failed (assertions/errors, or `--bail`/`--fail-on-error` — unchanged from prior releases), `2` the runner could not execute the run at all (bad CLI args, missing files, missing plugins, invalid env). Previously every non-success path exited `1`, so CI couldn't tell "the API broke" from "the pipeline is misconfigured." See [CI/CD Integration](https://docs.voiden.md/docs/developer-tools/voiden-runner/ci-cd) for the full table.
|
|
10
|
+
- `schemaVersion` field on the `--json` and `--output-json` payloads for `run` and `report generate` — a stable, versioned contract for tooling that parses runner output. Currently `"1"`.
|
|
11
|
+
|
|
6
12
|
## v2.1.1 - 2026-06-25
|
|
7
13
|
|
|
8
14
|
### Fixed
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"simple-assertions": "1.0.
|
|
3
|
-
"voiden-advanced-auth": "2.0.
|
|
2
|
+
"simple-assertions": "1.0.4",
|
|
3
|
+
"voiden-advanced-auth": "2.0.7",
|
|
4
4
|
"voiden-faker": "1.1.0",
|
|
5
|
-
"voiden-graphql": "1.0.
|
|
6
|
-
"voiden-rest-api": "1.4.
|
|
7
|
-
"voiden-scripting": "1.1.
|
|
8
|
-
"voiden-sockets-grpcs": "1.1.
|
|
5
|
+
"voiden-graphql": "1.0.6",
|
|
6
|
+
"voiden-rest-api": "1.4.8",
|
|
7
|
+
"voiden-scripting": "1.1.6",
|
|
8
|
+
"voiden-sockets-grpcs": "1.1.6"
|
|
9
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var c=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var p=(o,r)=>{for(var n in r)c(o,n,{get:r[n],enumerable:!0})},w=(o,r,n,e)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of h(r))!f.call(o,t)&&t!==n&&c(o,t,{get:()=>r[t],enumerable:!(e=l(r,t))||e.enumerable});return o};var b=o=>w(c({},"__esModule",{value:!0}),o);var A={};p(A,{buildAuthRows:()=>d,default:()=>R});module.exports=b(A);var y=require("node:buffer");function k(o){let r=[];if(!Array.isArray(o?.content))return r;for(let n of o.content)if(n.type==="table"&&Array.isArray(n.rows))for(let e of n.rows){let t=e.attrs?.disabled===!0;if(Array.isArray(e.row)&&e.row.length>=2){let s=String(e.row[0]??"").trim(),a=String(e.row[1]??"").trim();s&&r.push({key:s,value:a,enabled:!t})}}return r}function d(o){let r=o.find(a=>a.type==="auth"),n=r?.attrs?.authType;if(!r||!n||n==="inherit"||n==="none")return{headers:[],queryParams:[]};let e={};for(let a of k(r))e[a.key]=a.value;let t=[],s=[];switch(n){case"bearer":{let a=e.token||"";t.push({key:"Authorization",value:`Bearer ${a}`,enabled:!0});break}case"basic":{let a=e.username||"",u=e.password||"",i=y.Buffer.from(`${a}:${u}`).toString("base64");t.push({key:"Authorization",value:`Basic ${i}`,enabled:!0});break}case"apiKey":{let a=e.key||"",u=e.value||"",i=e.add_to||"header";a&&i==="query"?s.push({key:a,value:u,enabled:!0}):a&&t.push({key:a,value:u,enabled:!0});break}default:break}return{headers:t,queryParams:s}}var m=o=>({onload(){o.onBuildRequest((r,n)=>{let{headers:e,queryParams:t}=d(n);if(e.length===0&&t.length===0)return r;let s=Array.isArray(r?.headers)?r.headers:[],a=Array.isArray(r?.queryParams)?r.queryParams:[];return{...r,headers:[...s,...e],queryParams:[...a,...t]}})}}),R=m;0&&(module.exports={buildAuthRows});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var c=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var w=(r,e)=>{for(var n in e)c(r,n,{get:e[n],enumerable:!0})},v=(r,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of S(e))!k.call(r,o)&&o!==n&&c(r,o,{get:()=>e[o],enumerable:!(a=A(e,o))||a.enumerable});return r};var C=r=>v(c({},"__esModule",{value:!0}),r);var N={};w(N,{buildRequest:()=>h,default:()=>T});module.exports=C(N);function h(r){let e=r.find(t=>t.type==="gqlquery");if(!e)return null;let n=e.content?.find(t=>t.type==="gqlbody")||"",a=n.attrs?.body||"";if(!a.trim())return{errorMessage:"GraphQL query is empty"};let o=n.attrs?.operationType||"query",i=n.attrs?.operationName;if(!i){let t=a.match(/^\s*(query|mutation|subscription)\s+([\w]+)?/);t&&(o=t[1],i=t[2])}let p={},f=r.find(t=>t.type==="gqlvariables");if(f?.attrs?.body)try{p=JSON.parse(f.attrs.body)}catch{}let y="",u=e;if(u&&Array.isArray(u.content)){let t=u.content.find(s=>s.type==="gqlurl");t&&typeof t.content=="string"&&(y=t.content.trim())}if(y||(y=e.attrs?.endpoint||e.attrs?.schemaUrl||""),!y)return{errorMessage:"GraphQL url is empty"};let l=[{key:"Content-Type",value:"application/json",enabled:!0}],d=r.find(t=>t.type==="headers-table");if(d&&Array.isArray(d.content)){for(let t of d.content)if(t.type==="table"&&Array.isArray(t.rows)){for(let s of t.rows)if(!s.attrs?.disabled&&Array.isArray(s.row)&&s.row[0]){let m=String(s.row[0]).trim(),b=String(s.row[1]??"").trim(),g=l.findIndex(R=>R.key.toLowerCase()===m.toLowerCase());g>=0?l[g].value=b:l.push({key:m,value:b,enabled:!0})}}}let q={query:a,variables:p};return i&&(q.operationName=i),{method:"POST",url:y,headers:l,queryParams:[],pathParams:[],body:JSON.stringify(q),contentType:"application/json",metadata:{operationType:o,operationName:i}}}var B=r=>({onload(){r.registerRequestContainer?.({type:"gqlquery",urlType:"gqlurl",defaultMethod:"POST"}),r.onBuildRequest((e,n)=>{let a=h(n);if(!a)return e;let o=Array.isArray(e?.headers)?e.headers:[];return{...a,headers:[...o,...a.headers]}})}}),T=B;0&&(module.exports={buildRequest});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var c=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var q=(e,n)=>{for(var a in n)c(e,a,{get:n[a],enumerable:!0})},A=(e,n,a,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of R(n))!h.call(e,o)&&o!==a&&c(e,o,{get:()=>n[o],enumerable:!(r=x(n,o))||r.enumerable});return e};var g=e=>A(c({},"__esModule",{value:!0}),e);var w={};q(w,{buildRequest:()=>f,default:()=>b});module.exports=g(w);function m(e){let n=[];if(!Array.isArray(e.content))return n;for(let a of e.content)if(a.type==="table"&&Array.isArray(a.rows))for(let r of a.rows){let o=r.attrs?.disabled===!0;if(Array.isArray(r.row)&&r.row.length>=2){let y=String(r.row[0]??"").trim(),u=String(r.row[1]??"").trim();y&&n.push({key:y,value:u,enabled:!o})}}return n}function f(e){if(e.some(t=>t.type==="gqlquery")||e.some(t=>t.type==="socket-request"))return null;let n=e.find(t=>t.type==="request");if(!n)return null;let a="GET",r="";if(Array.isArray(n.content))for(let t of n.content)t.type==="method"&&typeof t.content=="string"&&(a=t.content.trim().toUpperCase()||"GET"),t.type==="url"&&typeof t.content=="string"&&(r=t.content.trim());if(!r)return null;let o=m(e.find(t=>t.type==="headers-table")??{}),y=m(e.find(t=>t.type==="query-table")??{}),u=m(e.find(t=>t.type==="path-table")??{}),s,i,d=e.find(t=>t.type==="json_body");if(d?.attrs?.body){s=String(d.attrs.body);let t=d.attrs.contentType;i=t==="html"?"text/html":t==="text"?"text/plain":"application/json"}let l=e.find(t=>t.type==="xml_body");l?.attrs?.body&&(s=String(l.attrs.body),i=["application/xml","text/xml","application/xhtml+xml"].includes(l.attrs.contentType)?l.attrs.contentType:"application/xml");let p=e.find(t=>t.type==="yml_body");return p?.attrs?.body&&(s=String(p.attrs.body),i=["application/x-yaml","application/yaml","text/yaml","text/x-yaml"].includes(p.attrs.contentType)?p.attrs.contentType:"application/x-yaml"),{method:a,url:r,headers:o,queryParams:y,pathParams:u,body:s,contentType:i,metadata:{}}}var T=e=>({onload(){e.registerRequestContainer?.({type:"request",urlType:"url",methodType:"method"}),e.onBuildRequest((n,a)=>{let r=f(a);if(!r)return n;let o=Array.isArray(n?.headers)?n.headers:[],y=Array.isArray(n?.queryParams)?n.queryParams:[];return{...r,headers:[...o,...r.headers],queryParams:[...y,...r.queryParams]}})}}),b=T;0&&(module.exports={buildRequest});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var f=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var
|
|
1
|
+
"use strict";var f=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var m=(a,t)=>{for(var o in t)f(a,o,{get:t[o],enumerable:!0})},w=(a,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of h(t))!g.call(a,s)&&s!==o&&f(a,s,{get:()=>t[s],enumerable:!(r=p(t,s))||r.enumerable});return a};var R=a=>w(f({},"__esModule",{value:!0}),a);var b={};m(b,{buildRequest:()=>y,default:()=>C});module.exports=R(b);function y(a){let t=a.find(e=>e.type==="socket-request");if(!t)return null;let o="";if(Array.isArray(t.content))for(let e of t.content)e.type==="surl"&&typeof e.content=="string"&&(o=e.content.trim());if(!o)return null;let r=o.toLowerCase(),s="ws";r.startsWith("wss://")?s="wss":r.startsWith("ws://")?s="ws":r.startsWith("grpcs://")?s="grpcs":r.startsWith("grpc://")&&(s="grpc");let l=a.find(e=>e.type==="headers-table"),d=[];if(l&&Array.isArray(l.content)){for(let e of l.content)if(e.type==="table"&&Array.isArray(e.rows))for(let c of e.rows)!c.attrs?.disabled&&Array.isArray(c.row)&&c.row[0]&&d.push({key:String(c.row[0]).trim(),value:String(c.row[1]??"").trim(),enabled:!0})}let u=t.content?.find?.(e=>e.type==="proto"),i={};if(u?.attrs){let e=u.attrs;e.protoFilePath&&(i.protoFilePath=e.protoFilePath),e.service&&(i.service=e.service),e.method&&(i.method=e.method),e.package&&(i.package=e.package),e.callType&&(i.callType=e.callType)}return{method:s.toUpperCase(),url:o,headers:d,queryParams:[],pathParams:[],grpc:Object.keys(i).length?i:void 0,metadata:{protocol:s}}}var k=a=>({onload(){a.registerRequestContainer?.({type:"socket-request",urlType:"surl",methodType:"smethod"}),a.onBuildRequest((t,o)=>{let r=y(o);if(!r)return t;let s=Array.isArray(t?.headers)?t.headers:[];return{...r,headers:[...s,...r.headers]}}),a.onProcessResponse(async t=>{let o=t?.metadata?.handoff;if(!o)return;let{protocol:r,url:s,headers:l,grpc:d,body:u}=o,i=Object.entries(l).map(([e,c])=>({key:e,value:c,enabled:!0}));if(r==="ws"||r==="wss"){let e=await a.protocols?.executeWebSocket({protocol:r,url:s,headers:i});if(!e)return;let c={connected:e.connected??!1,protocol:r,url:s,durationMs:e.durationMs,...e.error?{error:e.error}:{}},n=t;n.statusCode=e.connected?101:0,n.statusMessage=e.connected?"Switching Protocols":e.error??"Connection Failed",n.status=n.statusCode,n.statusText=n.statusMessage,t.body=JSON.stringify(c,null,2),t.metadata&&delete t.metadata.handoff}else if(r==="grpc"||r==="grpcs"){let e=await a.protocols?.executeGrpc({protocol:r,url:s,metadata:l,body:u,...d??{}});if(!e)return;let c={connected:e.connected??!1,protocol:r,url:s,durationMs:e.durationMs,...d?.service?{service:d.service}:{},...d?.method?{method:d.method}:{},...e.error?{error:e.error}:{}},n=t;n.statusCode=e.connected?200:0,n.statusMessage=e.connected?"Connected":e.error??"Connection Failed",n.status=n.statusCode,n.statusText=n.statusMessage,t.body=JSON.stringify(c,null,2),t.metadata&&delete t.metadata.handoff}})}}),C=k;0&&(module.exports={buildRequest});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File discovery — resolve CLI-style paths/globs and recursively find .void files.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from index.ts so the MCP server (and any other consumer) can list
|
|
5
|
+
* a project's .void files without duplicating this logic.
|
|
6
|
+
*/
|
|
7
|
+
/** Recursively collect all .void files under a directory. */
|
|
8
|
+
export declare function collectVoidFiles(inputPath: string): Promise<string[]>;
|
|
9
|
+
/** Expand a list of paths/globs into resolved .void file paths. */
|
|
10
|
+
export declare function resolveFiles(patterns: string[]): Promise<string[]>;
|
|
11
|
+
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,6DAA6D;AAC7D,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAwB3E;AAED,mEAAmE;AACnE,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBxE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File discovery — resolve CLI-style paths/globs and recursively find .void files.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from index.ts so the MCP server (and any other consumer) can list
|
|
5
|
+
* a project's .void files without duplicating this logic.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, statSync } from 'fs';
|
|
8
|
+
import { resolve } from 'path';
|
|
9
|
+
import { readdir } from 'fs/promises';
|
|
10
|
+
/** Recursively collect all .void files under a directory. */
|
|
11
|
+
export async function collectVoidFiles(inputPath) {
|
|
12
|
+
const abs = resolve(inputPath);
|
|
13
|
+
if (!existsSync(abs))
|
|
14
|
+
return [];
|
|
15
|
+
const stat = statSync(abs);
|
|
16
|
+
if (stat.isFile()) {
|
|
17
|
+
return abs.endsWith('.void') ? [abs] : [];
|
|
18
|
+
}
|
|
19
|
+
if (stat.isDirectory()) {
|
|
20
|
+
const entries = await readdir(abs, { withFileTypes: true });
|
|
21
|
+
const results = [];
|
|
22
|
+
for (const entry of entries) {
|
|
23
|
+
const full = resolve(abs, entry.name);
|
|
24
|
+
if (entry.isDirectory()) {
|
|
25
|
+
results.push(...(await collectVoidFiles(full)));
|
|
26
|
+
}
|
|
27
|
+
else if (entry.isFile() && entry.name.endsWith('.void')) {
|
|
28
|
+
results.push(full);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return results;
|
|
32
|
+
}
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
/** Expand a list of paths/globs into resolved .void file paths. */
|
|
36
|
+
export async function resolveFiles(patterns) {
|
|
37
|
+
const resolved = [];
|
|
38
|
+
for (const pattern of patterns) {
|
|
39
|
+
if (pattern.includes('*')) {
|
|
40
|
+
const dir = resolve(pattern.replace(/\/?\*.*$/, '') || '.');
|
|
41
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
42
|
+
for (const entry of entries) {
|
|
43
|
+
if (entry.isFile() && entry.name.endsWith('.void')) {
|
|
44
|
+
resolved.push(resolve(dir, entry.name));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
resolved.push(...(await collectVoidFiles(pattern)));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return resolved;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IACtD,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAA;IAE/B,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC1B,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAClB,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3C,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3D,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YACrC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjD,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACpB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAkB;IACnD,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAA;YAC3D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;YAC3D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACnD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACrD,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envFile.d.ts","sourceRoot":"","sources":["../src/envFile.ts"],"names":[],"mappings":"AASA,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASnE"}
|
package/dist/envFile.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { extname } from 'path';
|
|
3
|
+
import YAML from 'yaml';
|
|
4
|
+
export function loadEnvFile(envPath) {
|
|
5
|
+
const content = readFileSync(envPath, 'utf-8');
|
|
6
|
+
const ext = extname(envPath).toLowerCase();
|
|
7
|
+
if (ext === '.yaml' || ext === '.yml') {
|
|
8
|
+
return parseYamlEnv(content);
|
|
9
|
+
}
|
|
10
|
+
return parseDotEnv(content);
|
|
11
|
+
}
|
|
12
|
+
function parseDotEnv(content) {
|
|
13
|
+
const env = {};
|
|
14
|
+
const lines = content.split('\n');
|
|
15
|
+
for (let i = 0; i < lines.length; i++) {
|
|
16
|
+
const line = lines[i].trim();
|
|
17
|
+
if (!line || line.startsWith('#'))
|
|
18
|
+
continue;
|
|
19
|
+
const eq = line.indexOf('=');
|
|
20
|
+
if (eq === -1)
|
|
21
|
+
throw new Error(`Malformed line ${i + 1} in .env file: missing "="`);
|
|
22
|
+
const key = line.slice(0, eq).trim();
|
|
23
|
+
const val = line.slice(eq + 1).trim().replace(/^["']|["']$/g, '');
|
|
24
|
+
if (!key)
|
|
25
|
+
throw new Error(`Malformed line ${i + 1} in .env file: empty key`);
|
|
26
|
+
env[key] = val;
|
|
27
|
+
}
|
|
28
|
+
return env;
|
|
29
|
+
}
|
|
30
|
+
function parseYamlEnv(content) {
|
|
31
|
+
const env = {};
|
|
32
|
+
const collect = (tree) => {
|
|
33
|
+
for (const [key, value] of Object.entries(tree)) {
|
|
34
|
+
if (value === null || value === undefined || Array.isArray(value))
|
|
35
|
+
continue;
|
|
36
|
+
if (typeof value !== 'object') {
|
|
37
|
+
env[key] = String(value);
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const node = value;
|
|
41
|
+
const hasVariables = node.variables != null && typeof node.variables === 'object';
|
|
42
|
+
const hasChildren = node.children != null && typeof node.children === 'object';
|
|
43
|
+
if (hasVariables) {
|
|
44
|
+
for (const [k, v] of Object.entries(node.variables)) {
|
|
45
|
+
if (v != null && typeof v !== 'object')
|
|
46
|
+
env[k] = String(v);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (hasChildren)
|
|
50
|
+
collect(node.children);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const parsed = YAML.parse(content);
|
|
54
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
55
|
+
collect(parsed);
|
|
56
|
+
}
|
|
57
|
+
return env;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=envFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envFile.js","sourceRoot":"","sources":["../src/envFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAA;AAOvB,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;IAE1C,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACtC,OAAO,YAAY,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC;IAED,OAAO,WAAW,CAAC,OAAO,CAAC,CAAA;AAC7B,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,MAAM,GAAG,GAA2B,EAAE,CAAA;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAQ;QAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,EAAE,KAAK,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;QACnF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;QACjE,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;QAC5E,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA;IAChB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,GAAG,GAA2B,EAAE,CAAA;IAEtC,MAAM,OAAO,GAAG,CAAC,IAA6B,EAAQ,EAAE;QACtD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,SAAQ;YAE3E,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;gBACxB,SAAQ;YACV,CAAC;YAED,MAAM,IAAI,GAAG,KAAoB,CAAA;YACjC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAA;YACjF,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAA;YAE9E,IAAI,YAAY,EAAE,CAAC;gBACjB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAoC,CAAC,EAAE,CAAC;oBAC/E,IAAI,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;wBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;gBAC5D,CAAC;YACH,CAAC;YACD,IAAI,WAAW;gBAAE,OAAO,CAAC,IAAI,CAAC,QAAmC,CAAC,CAAA;QACpE,CAAC;IACH,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAClC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,OAAO,CAAC,MAAiC,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headlessContext.d.ts","sourceRoot":"","sources":["../src/headlessContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"headlessContext.d.ts","sourceRoot":"","sources":["../src/headlessContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,KAAK,EAAE,aAAa,EAA+C,MAAM,oBAAoB,CAAA;AAEpG,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAe,GACvB,aAAa,CAmFf"}
|
package/dist/headlessContext.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { hookRegistry, requestOrchestrator, executeWebSocket, executeGrpc } from '@voiden/executors';
|
|
17
17
|
import { registerBlockSchema } from './blockSchemaRegistry.js';
|
|
18
|
+
import { registerRequestContainer as registerContainerDef } from './requestContainerRegistry.js';
|
|
18
19
|
export function createHeadlessPluginContext(extensionId, verbose = false) {
|
|
19
20
|
return {
|
|
20
21
|
// ── Pipeline hook registration (for hook plugins: scripting, auth, etc.) ─
|
|
@@ -79,6 +80,14 @@ export function createHeadlessPluginContext(extensionId, verbose = false) {
|
|
|
79
80
|
exposeHelpers: () => { },
|
|
80
81
|
paste: { registerBlockOwner: () => { } },
|
|
81
82
|
project: { openFile: () => { } },
|
|
83
|
+
// Host capability not yet in the published @voiden/sdk RunnerContext
|
|
84
|
+
// type — lets a protocol plugin (REST, GraphQL, sockets/gRPC, or a
|
|
85
|
+
// third-party protocol plugin) declare its own request-container block
|
|
86
|
+
// shape, so list_requests/write_result work for it without voiden-runner's
|
|
87
|
+
// core needing to hardcode knowledge of every plugin's block types.
|
|
88
|
+
registerRequestContainer: (def) => {
|
|
89
|
+
registerContainerDef(def);
|
|
90
|
+
},
|
|
82
91
|
},
|
|
83
92
|
};
|
|
84
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headlessContext.js","sourceRoot":"","sources":["../src/headlessContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAiB,mBAAmB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEnH,OAAO,EAAE,mBAAmB,EAAuB,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"headlessContext.js","sourceRoot":"","sources":["../src/headlessContext.ts"],"names":[],"mappings":"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"}
|