@t-req/core 0.2.0 → 0.2.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.
Files changed (42) hide show
  1. package/README.md +47 -0
  2. package/dist/config/engine-options.d.ts +4 -2
  3. package/dist/config/engine-options.d.ts.map +1 -1
  4. package/dist/config/index.js +9 -5
  5. package/dist/config/index.js.map +18 -5
  6. package/dist/config/resolve.d.ts.map +1 -1
  7. package/dist/config/types.d.ts +14 -0
  8. package/dist/config/types.d.ts.map +1 -1
  9. package/dist/cookies/persistence.js +2 -2
  10. package/dist/cookies/persistence.js.map +2 -2
  11. package/dist/cookies.js +5 -5
  12. package/dist/cookies.js.map +2 -2
  13. package/dist/engine/engine.d.ts +3 -0
  14. package/dist/engine/engine.d.ts.map +1 -1
  15. package/dist/engine/index.js +4 -4
  16. package/dist/engine/index.js.map +3 -3
  17. package/dist/index.d.ts +3 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +8 -4
  20. package/dist/index.js.map +17 -5
  21. package/dist/plugin/define.d.ts +65 -0
  22. package/dist/plugin/define.d.ts.map +1 -0
  23. package/dist/plugin/index.d.ts +7 -0
  24. package/dist/plugin/index.d.ts.map +1 -0
  25. package/dist/plugin/index.js +8 -0
  26. package/dist/plugin/index.js.map +22 -0
  27. package/dist/plugin/loader.d.ts +69 -0
  28. package/dist/plugin/loader.d.ts.map +1 -0
  29. package/dist/plugin/manager.d.ts +186 -0
  30. package/dist/plugin/manager.d.ts.map +1 -0
  31. package/dist/plugin/permissions.d.ts +33 -0
  32. package/dist/plugin/permissions.d.ts.map +1 -0
  33. package/dist/plugin/subprocess.d.ts +100 -0
  34. package/dist/plugin/subprocess.d.ts.map +1 -0
  35. package/dist/plugin/types.d.ts +668 -0
  36. package/dist/plugin/types.d.ts.map +1 -0
  37. package/dist/resolver/index.js +3 -3
  38. package/dist/resolver/index.js.map +2 -2
  39. package/dist/runtime/index.js +2 -2
  40. package/dist/runtime/index.js.map +2 -2
  41. package/dist/runtime/types.d.ts.map +1 -1
  42. package/package.json +9 -3
@@ -1,5 +1,5 @@
1
- import{createRequire as A}from"node:module";var g=A(import.meta.url);import{spawn as O}from"node:child_process";var B=2000,S=500,E=1048576,M=65536;async function R(V,z,C,F){let w=V.timeoutMs??B;if(V.command.length===0)throw Error(`Resolver "${z}" has empty command array`);let[b,...U]=V.command;if(!b)throw Error(`Resolver "${z}" has empty command`);return new Promise((v,$)=>{let W=O(b,U,{cwd:F,stdio:["pipe","pipe","pipe"],env:process.env}),H="",q="",X=0,Y=0,G=!1,N=!1,x=!1,D=!1,I=setTimeout(()=>{D=!0,W.kill("SIGTERM"),setTimeout(()=>{if(!x)W.kill("SIGKILL")},S)},w);W.stdout?.on("data",(J)=>{let K=E-X;if(K>0){let Q=J.slice(0,K);if(H+=Q.toString("utf-8"),X+=Q.length,Q.length<J.length)G=!0}else G=!0}),W.stderr?.on("data",(J)=>{let K=M-Y;if(K>0){let Q=J.slice(0,K);if(q+=Q.toString("utf-8"),Y+=Q.length,Q.length<J.length)N=!0}else N=!0}),W.on("close",(J,K)=>{if(clearTimeout(I),x=!0,D){$(Error(`Resolver "${z}" timed out after ${w}ms${q?`: ${q}`:""}`));return}if(J!==0){let Z=K?`killed by signal ${K}`:`exit code ${J}`;$(Error(`Resolver "${z}" failed (${Z})${q?`: ${q}`:""}`));return}let Q=H.trim();if(!Q){$(Error(`Resolver "${z}" returned no output`));return}let L=Q.split(/\r?\n/).map((Z)=>Z.trim()).find((Z)=>Z.length>0)??"",P;try{P=JSON.parse(L)}catch{let Z=G?" (stdout exceeded 1MB limit and was truncated)":"";$(Error(`Resolver "${z}" returned invalid JSON: ${L.slice(0,100)}${Z}`));return}if(typeof P.value!=="string"){$(Error(`Resolver "${z}" returned no value (expected { "value": "..." })`));return}v(P.value)}),W.on("error",(J)=>{clearTimeout(I);let K=N?" (stderr exceeded 64KB limit and was truncated)":"";$(Error(`Resolver "${z}" failed to execute: ${J.message}${K}`))});let y={resolver:z,args:C};W.stdin?.write(`${JSON.stringify(y)}
2
- `),W.stdin?.end()})}function p(V,z,C){let F=C??"$command";return async(...w)=>{return await R(V,F,w,z)}}function k(V){if(!V||typeof V!=="object")return!1;let z=V;return z.type==="command"&&Array.isArray(z.command)}export{k as isCommandResolverDef,p as createCommandResolver};
1
+ import{createRequire as O}from"node:module";var A=Object.defineProperty;var g=(J,z)=>{for(var Z in z)A(J,Z,{get:z[Z],enumerable:!0,configurable:!0,set:(w)=>z[Z]=()=>w})};var h=O(import.meta.url);import{spawn as B}from"node:child_process";var S=2000,E=500,M=1048576,R=65536;async function p(J,z,Z,w){let F=J.timeoutMs??S;if(J.command.length===0)throw Error(`Resolver "${z}" has empty command array`);let[b,...U]=J.command;if(!b)throw Error(`Resolver "${z}" has empty command`);return new Promise((v,q)=>{let W=B(b,U,{cwd:w,stdio:["pipe","pipe","pipe"],env:process.env}),H="",C="",X=0,Y=0,G=!1,N=!1,x=!1,D=!1,I=setTimeout(()=>{D=!0,W.kill("SIGTERM"),setTimeout(()=>{if(!x)W.kill("SIGKILL")},E)},F);W.stdout?.on("data",(K)=>{let Q=M-X;if(Q>0){let V=K.slice(0,Q);if(H+=V.toString("utf-8"),X+=V.length,V.length<K.length)G=!0}else G=!0}),W.stderr?.on("data",(K)=>{let Q=R-Y;if(Q>0){let V=K.slice(0,Q);if(C+=V.toString("utf-8"),Y+=V.length,V.length<K.length)N=!0}else N=!0}),W.on("close",(K,Q)=>{if(clearTimeout(I),x=!0,D){q(Error(`Resolver "${z}" timed out after ${F}ms${C?`: ${C}`:""}`));return}if(K!==0){let $=Q?`killed by signal ${Q}`:`exit code ${K}`;q(Error(`Resolver "${z}" failed (${$})${C?`: ${C}`:""}`));return}let V=H.trim();if(!V){q(Error(`Resolver "${z}" returned no output`));return}let L=V.split(/\r?\n/).map(($)=>$.trim()).find(($)=>$.length>0)??"",P;try{P=JSON.parse(L)}catch{let $=G?" (stdout exceeded 1MB limit and was truncated)":"";q(Error(`Resolver "${z}" returned invalid JSON: ${L.slice(0,100)}${$}`));return}if(typeof P.value!=="string"){q(Error(`Resolver "${z}" returned no value (expected { "value": "..." })`));return}v(P.value)}),W.on("error",(K)=>{clearTimeout(I);let Q=N?" (stderr exceeded 64KB limit and was truncated)":"";q(Error(`Resolver "${z}" failed to execute: ${K.message}${Q}`))});let y={resolver:z,args:Z};W.stdin?.write(`${JSON.stringify(y)}
2
+ `),W.stdin?.end()})}function k(J,z,Z){let w=Z??"$command";return async(...F)=>{return await p(J,w,F,z)}}function _(J){if(!J||typeof J!=="object")return!1;let z=J;return z.type==="command"&&Array.isArray(z.command)}export{_ as isCommandResolverDef,k as createCommandResolver};
3
3
 
4
- //# debugId=559AE90E803B432464756E2164756E21
4
+ //# debugId=8F840D5432168F1964756E2164756E21
5
5
  //# sourceMappingURL=index.js.map
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import { spawn } from 'node:child_process';\nimport type { CommandResolverDef } from '../config/types';\nimport type { Resolver } from '../types';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst DEFAULT_TIMEOUT_MS = 2000;\nconst GRACE_PERIOD_MS = 500;\nconst MAX_STDOUT_BYTES = 1024 * 1024; // 1MB\nconst MAX_STDERR_BYTES = 64 * 1024; // 64KB\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype ResolverRequest = {\n resolver: string;\n args: string[];\n};\n\ntype ResolverResponse = {\n value: string;\n};\n\n// ============================================================================\n// Command Execution\n// ============================================================================\n\n/**\n * Execute a command resolver and return its value.\n */\nasync function executeCommandResolver(\n def: CommandResolverDef,\n name: string,\n args: string[],\n projectRoot: string\n): Promise<string> {\n const timeoutMs = def.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n\n if (def.command.length === 0) {\n throw new Error(`Resolver \"${name}\" has empty command array`);\n }\n\n const [cmd, ...cmdArgs] = def.command;\n if (!cmd) {\n throw new Error(`Resolver \"${name}\" has empty command`);\n }\n\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, cmdArgs, {\n cwd: projectRoot,\n stdio: ['pipe', 'pipe', 'pipe'],\n env: process.env\n });\n\n let stdout = '';\n let stderr = '';\n let stdoutBytes = 0;\n let stderrBytes = 0;\n let stdoutTruncated = false;\n let stderrTruncated = false;\n let killed = false;\n let timedOut = false;\n\n // Set up timeout\n const timeoutHandle = setTimeout(() => {\n timedOut = true;\n child.kill('SIGTERM');\n\n // Grace period before SIGKILL\n setTimeout(() => {\n if (!killed) {\n child.kill('SIGKILL');\n }\n }, GRACE_PERIOD_MS);\n }, timeoutMs);\n\n // Handle stdout\n child.stdout?.on('data', (data: Buffer) => {\n const remaining = MAX_STDOUT_BYTES - stdoutBytes;\n if (remaining > 0) {\n const chunk = data.slice(0, remaining);\n stdout += chunk.toString('utf-8');\n stdoutBytes += chunk.length;\n if (chunk.length < data.length) {\n stdoutTruncated = true;\n }\n } else {\n stdoutTruncated = true;\n }\n });\n\n // Handle stderr\n child.stderr?.on('data', (data: Buffer) => {\n const remaining = MAX_STDERR_BYTES - stderrBytes;\n if (remaining > 0) {\n const chunk = data.slice(0, remaining);\n stderr += chunk.toString('utf-8');\n stderrBytes += chunk.length;\n if (chunk.length < data.length) {\n stderrTruncated = true;\n }\n } else {\n stderrTruncated = true;\n }\n });\n\n // Handle close\n child.on('close', (code, signal) => {\n clearTimeout(timeoutHandle);\n killed = true;\n\n if (timedOut) {\n reject(\n new Error(\n `Resolver \"${name}\" timed out after ${timeoutMs}ms${stderr ? `: ${stderr}` : ''}`\n )\n );\n return;\n }\n\n if (code !== 0) {\n const exitInfo = signal ? `killed by signal ${signal}` : `exit code ${code}`;\n reject(new Error(`Resolver \"${name}\" failed (${exitInfo})${stderr ? `: ${stderr}` : ''}`));\n return;\n }\n\n // Parse output as NDJSON\n const trimmed = stdout.trim();\n if (!trimmed) {\n reject(new Error(`Resolver \"${name}\" returned no output`));\n return;\n }\n\n // Take first non-empty line (NDJSON protocol) and tolerate CRLF\n const firstLine =\n trimmed\n .split(/\\r?\\n/)\n .map((l) => l.trim())\n .find((l) => l.length > 0) ?? '';\n\n let response: ResolverResponse;\n try {\n response = JSON.parse(firstLine) as ResolverResponse;\n } catch {\n const suffix = stdoutTruncated ? ' (stdout exceeded 1MB limit and was truncated)' : '';\n reject(\n new Error(`Resolver \"${name}\" returned invalid JSON: ${firstLine.slice(0, 100)}${suffix}`)\n );\n return;\n }\n\n if (typeof response.value !== 'string') {\n reject(new Error(`Resolver \"${name}\" returned no value (expected { \"value\": \"...\" })`));\n return;\n }\n\n resolve(response.value);\n });\n\n // Handle error\n child.on('error', (err) => {\n clearTimeout(timeoutHandle);\n const suffix = stderrTruncated ? ' (stderr exceeded 64KB limit and was truncated)' : '';\n reject(new Error(`Resolver \"${name}\" failed to execute: ${err.message}${suffix}`));\n });\n\n // Write request to stdin\n const request: ResolverRequest = {\n resolver: name,\n args\n };\n\n child.stdin?.write(`${JSON.stringify(request)}\\n`);\n child.stdin?.end();\n });\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Create a Resolver function from a CommandResolverDef.\n *\n * The created resolver executes the external command with the NDJSON protocol:\n * - Writes `{\"resolver\":\"name\",\"args\":[\"arg1\",\"arg2\"]}` to stdin\n * - Expects `{\"value\":\"result\"}` on stdout\n *\n * @param def - The command resolver definition\n * @param name - The resolver name (used for error messages)\n * @param projectRoot - The project root directory (used as cwd)\n */\nexport function createCommandResolver(\n def: CommandResolverDef,\n projectRoot: string,\n name?: string\n): Resolver {\n const resolverName = name ?? '$command';\n return async (...args: string[]): Promise<string> => {\n return await executeCommandResolver(def, resolverName, args, projectRoot);\n };\n}\n\n/**\n * Check if a resolver definition is a command resolver.\n */\nexport function isCommandResolverDef(def: unknown): def is CommandResolverDef {\n if (!def || typeof def !== 'object') return false;\n const obj = def as Record<string, unknown>;\n return obj['type'] === 'command' && Array.isArray(obj['command']);\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "559AE90E803B432464756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "8F840D5432168F1964756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,4 +1,4 @@
1
- import{createRequire as z}from"node:module";var M=z(import.meta.url);function j(E){throw Error(`${E} is not supported by this transport. Provide a transport that supports it.`)}function P(E=fetch){return{capabilities:{proxy:!1,validateSSL:!1},async fetch(T,O,g){if(g.proxy)j("proxy");if(g.validateSSL===!1)j("validateSSL=false");return await E(T,O)}}}function A(){return typeof globalThis.Bun<"u"}function D(){if(!A())return P(fetch);return{capabilities:{proxy:!0,validateSSL:!0},async fetch(E,T,O){let g={...T??{}};if(O.proxy!==void 0)g.proxy=O.proxy;if(O.validateSSL===!1)g.tls={rejectUnauthorized:!1};return await fetch(E,g)}}}import{access as G,readFile as q}from"node:fs/promises";import*as C from"node:path";async function H(E){try{return await G(E),!0}catch{return!1}}function J(){return{cwd:()=>process.cwd(),path:{resolve:(...E)=>C.resolve(...E),dirname:(E)=>C.dirname(E),basename:(E)=>C.basename(E),extname:(E)=>C.extname(E),isAbsolute:(E)=>C.isAbsolute(E),sep:C.sep},exists:H,readText:async(E)=>await q(E,"utf8"),readBinary:async(E)=>{let T=await q(E);return T.buffer.slice(T.byteOffset,T.byteOffset+T.byteLength)}}}export{J as createNodeIO,P as createFetchTransport,D as createAutoTransport};
1
+ import{createRequire as A}from"node:module";var z=Object.defineProperty;var M=(E,C)=>{for(var g in C)z(E,g,{get:C[g],enumerable:!0,configurable:!0,set:(O)=>C[g]=()=>O})};var R=A(import.meta.url);function j(E){throw Error(`${E} is not supported by this transport. Provide a transport that supports it.`)}function P(E=fetch){return{capabilities:{proxy:!1,validateSSL:!1},async fetch(C,g,O){if(O.proxy)j("proxy");if(O.validateSSL===!1)j("validateSSL=false");return await E(C,g)}}}function D(){return typeof globalThis.Bun<"u"}function G(){if(!D())return P(fetch);return{capabilities:{proxy:!0,validateSSL:!0},async fetch(E,C,g){let O={...C??{}};if(g.proxy!==void 0)O.proxy=g.proxy;if(g.validateSSL===!1)O.tls={rejectUnauthorized:!1};return await fetch(E,O)}}}import{access as H,readFile as q}from"node:fs/promises";import*as T from"node:path";async function J(E){try{return await H(E),!0}catch{return!1}}function K(){return{cwd:()=>process.cwd(),path:{resolve:(...E)=>T.resolve(...E),dirname:(E)=>T.dirname(E),basename:(E)=>T.basename(E),extname:(E)=>T.extname(E),isAbsolute:(E)=>T.isAbsolute(E),sep:T.sep},exists:J,readText:async(E)=>await q(E,"utf8"),readBinary:async(E)=>{let C=await q(E);return C.buffer.slice(C.byteOffset,C.byteOffset+C.byteLength)}}}export{K as createNodeIO,P as createFetchTransport,G as createAutoTransport};
2
2
 
3
- //# debugId=BABB27F01082AFD864756E2164756E21
3
+ //# debugId=8B0E0CF2F8CACAEC64756E2164756E21
4
4
  //# sourceMappingURL=index.js.map
@@ -6,7 +6,7 @@
6
6
  "import { createFetchTransport } from './fetch-transport';\nimport type { Transport } from './types';\n\ntype BunFetchInit = RequestInit & { tls?: { rejectUnauthorized: boolean }; proxy?: string };\n\nfunction hasBun(): boolean {\n return typeof (globalThis as Record<string, unknown>)['Bun'] !== 'undefined';\n}\n\n/**\n * Auto-select a transport for the current runtime.\n *\n * - Bun: supports `proxy` and `validateSSL=false` via Bun fetch extensions.\n * - Others: falls back to baseline fetch transport (no proxy/validateSSL).\n */\nexport function createAutoTransport(): Transport {\n if (!hasBun()) {\n return createFetchTransport(fetch);\n }\n\n return {\n capabilities: { proxy: true, validateSSL: true },\n async fetch(url, init, ctx) {\n const bunInit: BunFetchInit = { ...(init ?? {}) };\n\n if (ctx.proxy !== undefined) {\n bunInit.proxy = ctx.proxy;\n }\n\n if (ctx.validateSSL === false) {\n bunInit.tls = { rejectUnauthorized: false };\n }\n\n return await fetch(url, bunInit);\n }\n };\n}\n",
7
7
  "import { access, readFile } from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type { IO } from './types';\n\nasync function exists(p: string): Promise<boolean> {\n try {\n await access(p);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Node IO adapter (fs + path) for running `runFile()` and file references.\n */\nexport function createNodeIO(): IO {\n return {\n cwd: () => process.cwd(),\n path: {\n resolve: (...parts) => path.resolve(...parts),\n dirname: (p) => path.dirname(p),\n basename: (p) => path.basename(p),\n extname: (p) => path.extname(p),\n isAbsolute: (p) => path.isAbsolute(p),\n sep: path.sep\n },\n exists,\n readText: async (p) => await readFile(p, 'utf8'),\n readBinary: async (p) => {\n const buf = await readFile(p);\n // Ensure we return an ArrayBuffer exactly sized to the file contents.\n // Note: Node's Buffer.buffer is never a SharedArrayBuffer, but TypeScript doesn't know that.\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) as ArrayBuffer;\n }\n };\n}\n"
8
8
  ],
9
- "mappings": "qEAIA,SAAS,CAAW,CAAC,EAAqB,CACxC,MAAU,MACR,GAAG,6EACL,EASK,SAAS,CAAoB,CAAC,EAAuB,MAAkB,CAC5E,MAAO,CACL,aAAc,CAAE,MAAO,GAAO,YAAa,EAAM,OAC3C,MAAK,CAAC,EAAK,EAAM,EAAK,CAC1B,GAAI,EAAI,MAAO,EAAY,OAAO,EAClC,GAAI,EAAI,cAAgB,GAAO,EAAY,mBAAmB,EAC9D,OAAO,MAAM,EAAU,EAAK,CAAI,EAEpC,ECnBF,SAAS,CAAM,EAAY,CACzB,OAAO,OAAQ,WAAuC,IAAW,IAS5D,SAAS,CAAmB,EAAc,CAC/C,GAAI,CAAC,EAAO,EACV,OAAO,EAAqB,KAAK,EAGnC,MAAO,CACL,aAAc,CAAE,MAAO,GAAM,YAAa,EAAK,OACzC,MAAK,CAAC,EAAK,EAAM,EAAK,CAC1B,IAAM,EAAwB,IAAM,GAAQ,CAAC,CAAG,EAEhD,GAAI,EAAI,QAAU,OAChB,EAAQ,MAAQ,EAAI,MAGtB,GAAI,EAAI,cAAgB,GACtB,EAAQ,IAAM,CAAE,mBAAoB,EAAM,EAG5C,OAAO,MAAM,MAAM,EAAK,CAAO,EAEnC,ECnCF,iBAAS,cAAQ,yBACjB,4BAGA,eAAe,CAAM,CAAC,EAA6B,CACjD,GAAI,CAEF,OADA,MAAM,EAAO,CAAC,EACP,GACP,KAAM,CACN,MAAO,IAOJ,SAAS,CAAY,EAAO,CACjC,MAAO,CACL,IAAK,IAAM,QAAQ,IAAI,EACvB,KAAM,CACJ,QAAS,IAAI,IAAe,UAAQ,GAAG,CAAK,EAC5C,QAAS,CAAC,IAAW,UAAQ,CAAC,EAC9B,SAAU,CAAC,IAAW,WAAS,CAAC,EAChC,QAAS,CAAC,IAAW,UAAQ,CAAC,EAC9B,WAAY,CAAC,IAAW,aAAW,CAAC,EACpC,IAAU,KACZ,EACA,SACA,SAAU,MAAO,IAAM,MAAM,EAAS,EAAG,MAAM,EAC/C,WAAY,MAAO,IAAM,CACvB,IAAM,EAAM,MAAM,EAAS,CAAC,EAG5B,OAAO,EAAI,OAAO,MAAM,EAAI,WAAY,EAAI,WAAa,EAAI,UAAU,EAE3E",
10
- "debugId": "BABB27F01082AFD864756E2164756E21",
9
+ "mappings": "mMAIA,SAAS,CAAW,CAAC,EAAqB,CACxC,MAAU,MACR,GAAG,6EACL,EASK,SAAS,CAAoB,CAAC,EAAuB,MAAkB,CAC5E,MAAO,CACL,aAAc,CAAE,MAAO,GAAO,YAAa,EAAM,OAC3C,MAAK,CAAC,EAAK,EAAM,EAAK,CAC1B,GAAI,EAAI,MAAO,EAAY,OAAO,EAClC,GAAI,EAAI,cAAgB,GAAO,EAAY,mBAAmB,EAC9D,OAAO,MAAM,EAAU,EAAK,CAAI,EAEpC,ECnBF,SAAS,CAAM,EAAY,CACzB,OAAO,OAAQ,WAAuC,IAAW,IAS5D,SAAS,CAAmB,EAAc,CAC/C,GAAI,CAAC,EAAO,EACV,OAAO,EAAqB,KAAK,EAGnC,MAAO,CACL,aAAc,CAAE,MAAO,GAAM,YAAa,EAAK,OACzC,MAAK,CAAC,EAAK,EAAM,EAAK,CAC1B,IAAM,EAAwB,IAAM,GAAQ,CAAC,CAAG,EAEhD,GAAI,EAAI,QAAU,OAChB,EAAQ,MAAQ,EAAI,MAGtB,GAAI,EAAI,cAAgB,GACtB,EAAQ,IAAM,CAAE,mBAAoB,EAAM,EAG5C,OAAO,MAAM,MAAM,EAAK,CAAO,EAEnC,ECnCF,iBAAS,cAAQ,yBACjB,4BAGA,eAAe,CAAM,CAAC,EAA6B,CACjD,GAAI,CAEF,OADA,MAAM,EAAO,CAAC,EACP,GACP,KAAM,CACN,MAAO,IAOJ,SAAS,CAAY,EAAO,CACjC,MAAO,CACL,IAAK,IAAM,QAAQ,IAAI,EACvB,KAAM,CACJ,QAAS,IAAI,IAAe,UAAQ,GAAG,CAAK,EAC5C,QAAS,CAAC,IAAW,UAAQ,CAAC,EAC9B,SAAU,CAAC,IAAW,WAAS,CAAC,EAChC,QAAS,CAAC,IAAW,UAAQ,CAAC,EAC9B,WAAY,CAAC,IAAW,aAAW,CAAC,EACpC,IAAU,KACZ,EACA,SACA,SAAU,MAAO,IAAM,MAAM,EAAS,EAAG,MAAM,EAC/C,WAAY,MAAO,IAAM,CACvB,IAAM,EAAM,MAAM,EAAS,CAAC,EAG5B,OAAO,EAAI,OAAO,MAAM,EAAI,WAAY,EAAI,WAAa,EAAI,UAAU,EAE3E",
10
+ "debugId": "8B0E0CF2F8CACAEC64756E2164756E21",
11
11
  "names": []
12
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,EAAE,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/B,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,EAAE,GAAG;IACf,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,YAAY,EAAE,qBAAqB,CAAC;IACpC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACrF,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACnF,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5E,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,EAAE,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/B,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,EAAE,GAAG;IACf,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,YAAY,EAAE,qBAAqB,CAAC;IACpC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACrF,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACnF,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5E,CAAC;AAQF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@t-req/core",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "HTTP request parsing, execution, and testing. Define requests in .http files, test them in isolation.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -67,6 +67,11 @@
67
67
  "types": "./dist/resolver/index.d.ts",
68
68
  "import": "./dist/resolver/index.js",
69
69
  "default": "./dist/resolver/index.js"
70
+ },
71
+ "./plugin": {
72
+ "types": "./dist/plugin/index.d.ts",
73
+ "import": "./dist/plugin/index.js",
74
+ "default": "./dist/plugin/index.js"
70
75
  }
71
76
  },
72
77
  "publishConfig": {
@@ -80,7 +85,7 @@
80
85
  "scripts": {
81
86
  "clean": "rm -rf dist",
82
87
  "build": "bun run build:js && bun run build:types",
83
- "build:js": "bun build --target node --minify --sourcemap --outdir ./dist --root ./src ./src/index.ts ./src/engine/index.ts ./src/runtime/index.ts ./src/config/index.ts ./src/cookies.ts ./src/cookies/persistence.ts ./src/resolver/index.ts",
88
+ "build:js": "bun build --target node --minify --sourcemap --outdir ./dist --root ./src ./src/index.ts ./src/engine/index.ts ./src/runtime/index.ts ./src/config/index.ts ./src/cookies.ts ./src/cookies/persistence.ts ./src/resolver/index.ts ./src/plugin/index.ts",
84
89
  "build:types": "tsc -p tsconfig.build.json",
85
90
  "test": "bun test",
86
91
  "test:e2e": "bun test test/e2e.test.ts",
@@ -96,6 +101,7 @@
96
101
  "@types/tough-cookie": "^4.0.5"
97
102
  },
98
103
  "dependencies": {
99
- "tough-cookie": "^6.0.0"
104
+ "tough-cookie": "^6.0.0",
105
+ "zod": "^3.23.0"
100
106
  }
101
107
  }