@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 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAMV,qBAAqB,EACrB,eAAe,EAChB,MAAM,SAAS,CAAC;AAMjB,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAMzC,MAAM,MAAM,mBAAmB,GAAG;IAChC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAEvC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAErC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAmIF;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC,CAqGhC"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAMV,qBAAqB,EACrB,eAAe,EAChB,MAAM,SAAS,CAAC;AAMjB,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAMzC,MAAM,MAAM,mBAAmB,GAAG;IAChC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAEvC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAErC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAmIF;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC,CA6IhC"}
@@ -1,3 +1,5 @@
1
+ import type { PluginManager } from '../plugin/manager';
2
+ import type { PluginConfigRef, PluginPermissionsConfig } from '../plugin/types';
1
3
  import type { Resolver } from '../types';
2
4
  export type TreqDefaults = {
3
5
  timeoutMs?: number;
@@ -24,6 +26,10 @@ export type ResolvedCookiesConfig = {
24
26
  };
25
27
  export type SecurityConfig = {
26
28
  allowExternalFiles?: boolean;
29
+ /** Allow plugins from paths outside project root */
30
+ allowPluginsOutsideProject?: boolean;
31
+ /** Per-plugin permission overrides */
32
+ pluginPermissions?: PluginPermissionsConfig;
27
33
  };
28
34
  export type CommandResolverDef = {
29
35
  type: 'command';
@@ -35,6 +41,8 @@ export type TreqProfileInput = {
35
41
  defaults?: TreqDefaults;
36
42
  cookies?: CookiesConfig;
37
43
  resolvers?: Record<string, Resolver | CommandResolverDef>;
44
+ /** Plugins for this profile (appended to base plugins) */
45
+ plugins?: PluginConfigRef[];
38
46
  };
39
47
  export type TreqConfigInput = {
40
48
  variables?: Record<string, unknown>;
@@ -43,6 +51,8 @@ export type TreqConfigInput = {
43
51
  resolvers?: Record<string, Resolver | CommandResolverDef>;
44
52
  profiles?: Record<string, TreqProfileInput>;
45
53
  security?: SecurityConfig;
54
+ /** Plugin configuration */
55
+ plugins?: PluginConfigRef[];
46
56
  };
47
57
  export type ResolvedConfig = {
48
58
  projectRoot: string;
@@ -52,7 +62,11 @@ export type ResolvedConfig = {
52
62
  resolvers: Record<string, Resolver>;
53
63
  security: {
54
64
  allowExternalFiles: boolean;
65
+ allowPluginsOutsideProject: boolean;
66
+ pluginPermissions?: PluginPermissionsConfig;
55
67
  };
68
+ /** Plugin manager (initialized if plugins are configured) */
69
+ pluginManager?: PluginManager;
56
70
  };
57
71
  export type ConfigFormat = 'jsonc' | 'json' | 'ts' | 'js' | 'mjs';
58
72
  export type ConfigMeta = {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import{createRequire as R}from"node:module";var U=R(import.meta.url);import{existsSync as $,mkdirSync as V,readFileSync as B,renameSync as F,writeFileSync as N}from"node:fs";import*as Q from"node:path";var Z=new Map;async function A(G,z){let H=Q.resolve(G),q=Z.get(H)??Promise.resolve(),K,W=new Promise((O)=>{K=O}),Y=q.then(()=>W);Z.set(H,Y);try{return await q,await z()}finally{if(K?.(),Z.get(H)===Y)Z.delete(H)}}function _(G){let z=Q.resolve(G);if(!$(z))return null;try{let H=B(z,"utf-8"),q=JSON.parse(H);if(!q||typeof q!=="object")return null;if(!Array.isArray(q.cookies))return null;return q}catch{return null}}function I(G,z){let H=Q.resolve(G),q=Q.dirname(H);if(!$(q))V(q,{recursive:!0});let K=`${H}.tmp.${process.pid}`,W=JSON.stringify(z,null,2);try{N(K,W,"utf-8"),F(K,H)}catch(Y){try{if($(K))U("node:fs").unlinkSync(K)}catch{}throw Y}}function M(G){return{version:1,cookies:(G.toJSON()?.cookies??[]).map((q)=>{let K={key:q.key??"",value:q.value??"",domain:q.domain??"",path:q.path??"/"};if(q.expires)K.expires=q.expires;if(q.secure!==void 0)K.secure=q.secure;if(q.httpOnly!==void 0)K.httpOnly=q.httpOnly;if(q.sameSite)K.sameSite=q.sameSite;return K})}}function b(G){return{load(){return _(G)},save(z){let H=M(z);I(G,H)},async withLock(z){return A(G,z)}}}var g=250,X=new Map;function x(G,z){let H=Q.resolve(G),q=X.get(H);if(q)clearTimeout(q.timer);let K=setTimeout(()=>{X.delete(H),A(G,async()=>{try{let W=M(z);I(G,W)}catch{}return})},g);X.set(H,{timer:K,jarPath:G,jar:z})}async function C(){let G=Array.from(X.values());X.clear();for(let z of G)clearTimeout(z.timer);await Promise.all(G.map(async(z)=>{await A(z.jarPath,async()=>{let H=M(z.jar);I(z.jarPath,H);return})}))}export{x as scheduleCookieJarSave,I as saveCookieJarData,_ as loadCookieJarData,C as flushPendingCookieSaves,b as createCookieJarManager,M as cookieJarToData};
1
+ import{createRequire as U}from"node:module";var R=Object.defineProperty;var L=(H,z)=>{for(var G in z)R(H,G,{get:z[G],enumerable:!0,configurable:!0,set:(q)=>z[G]=()=>q})};var V=U(import.meta.url);import{existsSync as $,mkdirSync as B,readFileSync as F,renameSync as N,writeFileSync as _}from"node:fs";import*as Q from"node:path";var Z=new Map;async function A(H,z){let G=Q.resolve(H),q=Z.get(G)??Promise.resolve(),K,W=new Promise((O)=>{K=O}),Y=q.then(()=>W);Z.set(G,Y);try{return await q,await z()}finally{if(K?.(),Z.get(G)===Y)Z.delete(G)}}function g(H){let z=Q.resolve(H);if(!$(z))return null;try{let G=F(z,"utf-8"),q=JSON.parse(G);if(!q||typeof q!=="object")return null;if(!Array.isArray(q.cookies))return null;return q}catch{return null}}function I(H,z){let G=Q.resolve(H),q=Q.dirname(G);if(!$(q))B(q,{recursive:!0});let K=`${G}.tmp.${process.pid}`,W=JSON.stringify(z,null,2);try{_(K,W,"utf-8"),N(K,G)}catch(Y){try{if($(K))V("node:fs").unlinkSync(K)}catch{}throw Y}}function M(H){return{version:1,cookies:(H.toJSON()?.cookies??[]).map((q)=>{let K={key:q.key??"",value:q.value??"",domain:q.domain??"",path:q.path??"/"};if(q.expires)K.expires=q.expires;if(q.secure!==void 0)K.secure=q.secure;if(q.httpOnly!==void 0)K.httpOnly=q.httpOnly;if(q.sameSite)K.sameSite=q.sameSite;return K})}}function C(H){return{load(){return g(H)},save(z){let G=M(z);I(H,G)},async withLock(z){return A(H,z)}}}var w=250,X=new Map;function m(H,z){let G=Q.resolve(H),q=X.get(G);if(q)clearTimeout(q.timer);let K=setTimeout(()=>{X.delete(G),A(H,async()=>{try{let W=M(z);I(H,W)}catch{}return})},w);X.set(G,{timer:K,jarPath:H,jar:z})}async function u(){let H=Array.from(X.values());X.clear();for(let z of H)clearTimeout(z.timer);await Promise.all(H.map(async(z)=>{await A(z.jarPath,async()=>{let G=M(z.jar);I(z.jarPath,G);return})}))}export{m as scheduleCookieJarSave,I as saveCookieJarData,g as loadCookieJarData,u as flushPendingCookieSaves,C as createCookieJarManager,M as cookieJarToData};
2
2
 
3
- //# debugId=667AE437C373448C64756E2164756E21
3
+ //# debugId=BC7F7AF664664C7E64756E2164756E21
4
4
  //# sourceMappingURL=persistence.js.map
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';\nimport * as path from 'node:path';\nimport type { CookieJar } from '../cookies';\n\nexport type CookieJarData = {\n version: number;\n cookies: Array<{\n key: string;\n value: string;\n domain: string;\n path: string;\n expires?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: string;\n }>;\n};\n\nexport type CookieJarManager = {\n load(): CookieJarData | null;\n save(jar: CookieJar): void;\n withLock<T>(fn: () => Promise<T>): Promise<T>;\n};\n\nconst locks = new Map<string, Promise<void>>();\n\nasync function withLock<T>(jarPath: string, fn: () => Promise<T>): Promise<T> {\n const resolvedPath = path.resolve(jarPath);\n\n // Promise-chain mutex: each call appends to the tail, ensuring FIFO exclusivity.\n const prev = locks.get(resolvedPath) ?? Promise.resolve();\n\n let release: (() => void) | undefined;\n const current = new Promise<void>((r) => {\n release = r;\n });\n\n const tail = prev.then(() => current);\n locks.set(resolvedPath, tail);\n\n try {\n await prev;\n return await fn();\n } finally {\n release?.();\n // Only delete if nobody queued behind us.\n if (locks.get(resolvedPath) === tail) {\n locks.delete(resolvedPath);\n }\n }\n}\n\n/**\n * Load cookie jar data from a file.\n * Returns null if the file doesn't exist.\n */\nexport function loadCookieJarData(jarPath: string): CookieJarData | null {\n const resolvedPath = path.resolve(jarPath);\n\n if (!existsSync(resolvedPath)) {\n return null;\n }\n\n try {\n const content = readFileSync(resolvedPath, 'utf-8');\n const data = JSON.parse(content) as CookieJarData;\n\n // Validate basic structure\n if (!data || typeof data !== 'object') {\n return null;\n }\n\n if (!Array.isArray(data.cookies)) {\n return null;\n }\n\n return data;\n } catch {\n // Invalid or corrupted file - return null to start fresh\n return null;\n }\n}\n\n/**\n * Save cookie jar data to a file.\n * Uses atomic write (write to temp file, then rename).\n */\nexport function saveCookieJarData(jarPath: string, data: CookieJarData): void {\n const resolvedPath = path.resolve(jarPath);\n\n // Ensure parent directory exists\n const dir = path.dirname(resolvedPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n // Write to temp file first (atomic write)\n const tempPath = `${resolvedPath}.tmp.${process.pid}`;\n const content = JSON.stringify(data, null, 2);\n\n try {\n writeFileSync(tempPath, content, 'utf-8');\n renameSync(tempPath, resolvedPath);\n } catch (err) {\n // Clean up temp file on error\n try {\n if (existsSync(tempPath)) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n require('node:fs').unlinkSync(tempPath);\n }\n } catch {\n // Ignore cleanup errors\n }\n throw err;\n }\n}\n\n/**\n * Convert CookieJar to serializable data.\n */\nexport function cookieJarToData(jar: CookieJar): CookieJarData {\n const serialized = jar.toJSON();\n const cookies = (serialized?.cookies ?? []) as Array<{\n key?: string;\n value?: string;\n domain?: string;\n path?: string;\n expires?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: string;\n }>;\n\n return {\n version: 1,\n cookies: cookies.map((c) => {\n const cookie: CookieJarData['cookies'][number] = {\n key: c.key ?? '',\n value: c.value ?? '',\n domain: c.domain ?? '',\n path: c.path ?? '/'\n };\n // Only include optional fields if defined\n if (c.expires) cookie.expires = c.expires;\n if (c.secure !== undefined) cookie.secure = c.secure;\n if (c.httpOnly !== undefined) cookie.httpOnly = c.httpOnly;\n if (c.sameSite) cookie.sameSite = c.sameSite;\n return cookie;\n })\n };\n}\n\n// ============================================================================\n// Cookie Jar Manager\n// ============================================================================\n\n/**\n * Create a cookie jar manager for a specific jar path.\n */\nexport function createCookieJarManager(jarPath: string): CookieJarManager {\n return {\n load(): CookieJarData | null {\n return loadCookieJarData(jarPath);\n },\n\n save(jar: CookieJar): void {\n const data = cookieJarToData(jar);\n saveCookieJarData(jarPath, data);\n },\n\n async withLock<T>(fn: () => Promise<T>): Promise<T> {\n return withLock(jarPath, fn);\n }\n };\n}\n\n// ============================================================================\n// Debounced Save\n// ============================================================================\n\nconst DEBOUNCE_INTERVAL_MS = 250;\n\ntype DebouncedSaveEntry = {\n timer: NodeJS.Timeout;\n jarPath: string;\n jar: CookieJar;\n};\n\nconst debouncedSaveEntries = new Map<string, DebouncedSaveEntry>();\n\n/**\n * Schedule a debounced save of the cookie jar.\n * Multiple saves within the debounce interval will be coalesced.\n */\nexport function scheduleCookieJarSave(jarPath: string, jar: CookieJar): void {\n const resolvedPath = path.resolve(jarPath);\n\n // Clear any existing timer\n const existing = debouncedSaveEntries.get(resolvedPath);\n if (existing) clearTimeout(existing.timer);\n\n // Schedule new save\n const timer = setTimeout(() => {\n debouncedSaveEntries.delete(resolvedPath);\n void withLock(jarPath, async () => {\n try {\n const data = cookieJarToData(jar);\n saveCookieJarData(jarPath, data);\n } catch {\n // Ignore save errors in debounced context\n }\n return;\n });\n }, DEBOUNCE_INTERVAL_MS);\n\n debouncedSaveEntries.set(resolvedPath, { timer, jarPath, jar });\n}\n\n/**\n * Flush all pending debounced saves immediately.\n * Used for graceful shutdown.\n */\nexport async function flushPendingCookieSaves(): Promise<void> {\n const entries = Array.from(debouncedSaveEntries.values());\n debouncedSaveEntries.clear();\n\n for (const entry of entries) {\n clearTimeout(entry.timer);\n }\n\n // Best-effort flush (keep going even if one fails).\n await Promise.all(\n entries.map(async (entry) => {\n await withLock(entry.jarPath, async () => {\n const data = cookieJarToData(entry.jar);\n saveCookieJarData(entry.jarPath, data);\n return;\n });\n })\n );\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "667AE437C373448C64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "BC7F7AF664664C7E64756E2164756E21",
9
9
  "names": []
10
10
  }