@adhd/apigen-core-client 0.3.0 → 0.3.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 +31 -0
- package/index.js +1 -1
- package/index.mjs +758 -617
- package/lib/batch.d.ts +0 -15
- package/lib/esm-require.d.ts +23 -0
- package/lib/stream-type.d.ts +15 -0
- package/lib/types.d.ts +12 -0
- package/package.json +25 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,34 @@
|
|
|
1
|
+
## 0.3.1 (2026-09-24)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### 🚀 Features
|
|
5
|
+
|
|
6
|
+
- **apigen:** schema-driven worked examples for MCP tool descriptions + validation errors
|
|
7
|
+
|
|
8
|
+
- **backlog:** INTERFACE_v2 consolidation — six-verb surface, web UI (search/stats/batch/edit), stats API (citationCount, closedAt, summary scope + window)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### 🩹 Fixes
|
|
12
|
+
|
|
13
|
+
- **apigen-cli:** restore 2768 files mass-deleted by 0117eb22 (BUG-APIGEN-052)
|
|
14
|
+
|
|
15
|
+
- **apigen-core-client:** hoist nested defs for return types and batch schemas
|
|
16
|
+
|
|
17
|
+
- **apigen-core-client:** close Path-2 object schemas with additionalProperties, index-signature aware
|
|
18
|
+
|
|
19
|
+
- **backlog:** unblock backlog:build — author/reporter TS2339 + wire MCP identity
|
|
20
|
+
|
|
21
|
+
- **apigen-cli:** batch nested-input CLI/HTTP wiring, sandbox isolation leaks, morph-walk index-signature regression
|
|
22
|
+
|
|
23
|
+
- **apigen:** audit fixes — S-18/S-19/C-20/C-21/S-20, java mvn race, union-encoder envelope, lazy heavy-dep loading
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### ❤️ Thank You
|
|
27
|
+
|
|
28
|
+
- parity-harness-self-test
|
|
29
|
+
- pseudosky
|
|
30
|
+
- Sky
|
|
31
|
+
|
|
1
32
|
## 0.2.2 (2026-07-30)
|
|
2
33
|
|
|
3
34
|
|
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var Ke=Object.create;var ue=Object.defineProperty;var ze=Object.getOwnPropertyDescriptor;var Be=Object.getOwnPropertyNames;var De=Object.getPrototypeOf,We=Object.prototype.hasOwnProperty;var Ue=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Be(t))!We.call(e,n)&&n!==r&&ue(e,n,{get:()=>t[n],enumerable:!(o=ze(t,n))||o.enumerable});return e};var Ge=(e,t,r)=>(r=e!=null?Ke(De(e)):{},Ue(t||!e||!e.__esModule?ue(r,"default",{value:e,enumerable:!0}):r,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const N=require("ts-morph"),Ze=require("node:fs"),G=require("node:path"),R=require("ts-json-schema-generator");function He(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const Je=He(G);function le(e){return{raw:e,words:e.split(/(?=[A-Z])|[-_]/).map(t=>t.toLowerCase()).filter(Boolean)}}function ve(e,t,r={}){const o=e.split("/");if(o.length<2||o.some(l=>l.length===0))throw new Error(`syntheticOp: id "${e}" must be "<namespace>/<path...>" with non-empty segments`);const[n,...i]=o,s=n.replace(/^_+/,""),a=r.kind??"action",c={id:e,host:t.host,namespace:le(s),path:i.map(le),kind:a,async:r.async??!1,streaming:r.streaming??!1,safe:r.safe??a==="query",input:r.input??{},output:r.output??{},envelope:r.envelope??{},typeText:r.typeText??null};return r.hasCtx!==void 0&&(c.hasCtx=r.hasCtx),r.transports!==void 0&&(c.transports=r.transports),c}const xe=Symbol.for("adhd.apigen.extraction-session");function ie(e,t){const r=[...e.getImportDeclarations().map(o=>o.getModuleSpecifierSourceFile()),...e.getExportDeclarations().map(o=>o.getModuleSpecifierSourceFile())];for(const o of r){if(!o)continue;const n=o.getFilePath();if(!n.includes("/node_modules/")&&!t.has(n)){t.add(n);try{o.refreshFromFileSystemSync()}catch{}ie(o,t)}}}function we(e){try{const t=Ze.statSync(e);return`${t.mtimeMs}:${t.size}`}catch{return"nostat"}}const M=new Map,ee=new Map;function Qe(e,t,r){const o=t??"",n=M.get(o);let i=r;if(n&&n.fileVersions.size>0){const c=[r],l=[...n.fileVersions.entries()].sort(([u],[f])=>u.localeCompare(f));for(const[u,f]of l)u!==e&&c.push(`${u}:${f}`);i=c.join("|")}const s=`${e}\0${t??""}`;let a=ee.get(s);return(!a||a.version!==i)&&(a={version:i,schemas:new Map},ee.set(s,a)),a.schemas}function Xe(){M.clear(),ee.clear(),B=void 0}let B;function Ye(){return B||(B=new N.Project({skipAddingFilesFromTsConfig:!0,compilerOptions:{noLib:!0}})),B}function et(e){const t=Ye(),r=t.getSourceFile(e),o=r??t.addSourceFileAtPath(e);if(r)try{r.refreshFromFileSystemSync()}catch{}const n=new Set([e]);return ie(o,n),[...n].sort()}function se(){const e={projectsBuilt:0,generatorsBuilt:0,schemaCacheHits:0,schemaCacheMisses:0},t=new Map;let r=!1;return{[xe]:!0,stats:e,schemaCache:new Map,aliasCache:new WeakMap,zodImportCache:new WeakMap,generatorCache:new Map,projectFor(n){if(r)throw new Error("apigen-core: ExtractionSession used after dispose()");const i=n??"",s=n?this.statVersion(n):"";let a=M.get(i);return a&&a.tsconfigVersion!==s&&(a=void 0),a||(a={project:n?new N.Project({tsConfigFilePath:n,skipAddingFilesFromTsConfig:!0}):new N.Project({skipAddingFilesFromTsConfig:!0}),tsconfigVersion:s,fileVersions:new Map},M.set(i,a),e.projectsBuilt++),a.project},sourceFileFor(n,i){const s=this.projectFor(i),a=M.get(i??""),c=this.statVersion(n);let l=s.getSourceFile(n);if(l===void 0?l=s.addSourceFileAtPath(n):a&&a.fileVersions.get(n)!==c&&l.refreshFromFileSystemSync(),a==null||a.fileVersions.set(n,c),a){const u=new Set([n]);ie(l,u);for(const f of u)f!==n&&a.fileVersions.set(f,this.statVersion(f))}return l},statVersion(n){let i=t.get(n);return i===void 0&&(i=we(n),t.set(n,i)),i},dispose(){r=!0,this.schemaCache.clear(),this.generatorCache.clear(),t.clear()}}}function je(e){const t=e;if(t[xe]!==!0)throw new Error("apigen-core: unknown ExtractionSession implementation — create sessions with createExtractionSession()");return t}const U="x-apigen-logical";function fe(e,t){const r=new Set,o=[e];for(;o.length>0;){const n=o.pop();if(!n||r.has(n))continue;r.add(n);const i=n.$ref;if(typeof i=="string"){if(t){const f=t[i];if(!f){const p=Object.keys(t).join(", ")||"(none)";throw new Error(`[apigen-logical] $ref "${i}" cannot be resolved. Available $defs: ${p}`)}o.push(f)}continue}const s=n.oneOf;if(Array.isArray(s))for(const f of s)typeof f=="object"&&f!==null&&o.push(f);const a=n.properties;if(a)for(const f of Object.values(a))o.push(f);const c=n.items;if(Array.isArray(c))for(const f of c)typeof f=="object"&&f!==null&&o.push(f);else typeof c=="object"&&c!==null&&o.push(c);const l=n.additionalProperties;typeof l=="object"&&l!==null&&o.push(l);const u=n.propertyNames;typeof u=="object"&&u!==null&&o.push(u)}}const pe=new Set(["string","number","boolean","integer"]);function tt(e){if(typeof e!="object"||e===null)return!1;const t=e;if(t.$ref!==void 0||t.oneOf||t.anyOf||t.allOf)return!1;const{type:r}=t;return typeof r=="string"?pe.has(r):Array.isArray(r)?r.every(o=>pe.has(o)||o==="null"):Array.isArray(t.enum)&&t.enum.length>0?t.enum.every(o=>["string","number","boolean"].includes(typeof o)):!1}function Pe(e){if(!e||typeof e!="object")return!1;const t=e.properties;return t===void 0||typeof t!="object"||t===null?!1:Object.values(t).every(tt)}function nt(e){var r,o;const t=[];for(const n of e){const i={...(r=n.capabilities.layer)==null?void 0:r.envelopeFields,...(o=n.capabilities.envelope)==null?void 0:o.request};Object.keys(i).length>0&&t.push({id:n.id,envelope:i})}return t}function rt(e){const t={},r=o=>{for(const n of["definitions","$defs"]){const i=o[n];if(i)for(const[s,a]of Object.entries(i)){const c=s.startsWith("#/")?s:`#/${n}/${s}`;t[c]=a}}};for(const o of Object.values(e.schemas))r(o.input),r(o.output);if(Object.keys(t).length!==0)for(const[o,n]of Object.entries(e.schemas))try{fe(n.input,t),fe(n.output,t)}catch(i){throw new Error(`[apigen-core-client] Schema validation failed for function "${o}": ${i.message}`)}}function ot(e,t){const r=['apigen calling convention: all domain parameters go inside a "data" envelope — e.g. { "data": { ... } }'+(t?".":" (an empty object for this zero-parameter tool).")];return e.length>0&&r.push(`Field(s) ${e.map(o=>`"${o}"`).join(", ")} are transport-level envelope metadata, NOT domain data — do not nest them under "data". Over MCP they are read from arguments._meta["x-<pluginId>-<field>"] (default pluginId "adhd"); see @adhd/apigen-engine-naming's envelopeMetaKey/envelopeCliFlag/envelopeEnvVar for the HTTP-header / CLI-flag / env-var equivalents.`),r.join(" ")}function it(e,t,r){rt(e);const o={};for(const[n,i]of Object.entries(e.schemas)){const s=(r==null?void 0:r[n])??{},a=i.input.properties??{},c=i.input.required??[],l={},u=[],f={};for(const h of t)if(h.envelope&&s[h.id]!==!1)for(const[y,d]of Object.entries(h.envelope))l[y]=d,f[y]=h.id,u.includes(y)||u.push(y);const p={type:"object",properties:a,additionalProperties:!1,...c.length>0?{required:c}:{}},S=i.safe===!0||Pe(i.input),T=i.input.definitions,m=i.input.$defs;o[n]={input:{type:"object",properties:{...l,data:p},required:[...u,...c.length>0?["data"]:[]],additionalProperties:!1,description:ot(Object.keys(l),Object.keys(a).length>0),...T?{definitions:T}:{},...m?{$defs:m}:{}},output:i.output,...i.hasCtx?{hasCtx:!0}:{},"x-apigen-safe":S,...Object.keys(f).length>0?{"x-apigen-envelope":f}:{}}}return o}const st=8;function at(e,t){try{return t?e.getText(t):e.getText()}catch{try{return e.getText()}catch{return}}}let ct=0;async function ut(e,t,r,o){const n=`__ApigenProbe_${process.pid}_${ct++}`;let i;try{i=t.addTypeAlias({name:n,type:r});const s=i.getType();return await o(s)}catch{return}finally{try{i==null||i.remove()}catch{}}}async function Ae(e,t,r){if(r>st)return{};if(e.isString()||e.isStringLiteral())return e.isStringLiteral()?{type:"string",enum:[e.getLiteralValue()]}:{type:"string"};if(e.isNumber()||e.isNumberLiteral())return e.isNumberLiteral()?{type:"number",enum:[e.getLiteralValue()]}:{type:"number"};if(e.isBoolean())return{type:"boolean"};if(e.isBooleanLiteral())return{type:"boolean"};if(e.isNull()||e.isUndefined()||e.isVoid())return{type:"null"};if(e.isUnion()){const o=e.getUnionTypes();if(o.every(c=>c.isStringLiteral())&&o.length>0)return{type:"string",enum:o.map(c=>c.getLiteralValue())};if(o.every(c=>c.isNumberLiteral())&&o.length>0)return{type:"number",enum:o.map(c=>c.getLiteralValue())};const s=await Promise.all(o.map(c=>Ae(c,t,r+1))),a=Z(s);return{oneOf:s,...a?{discriminator:a}:{},[U]:"union"}}if(e.isArray()){const o=e.getArrayElementType();return{type:"array",items:o?await t(o.getText()):{}}}if(e.isTuple()){const o=e.getTupleElements(),n=await Promise.all(o.map(i=>t(i.getText())));return{type:"array",items:n,minItems:n.length,maxItems:n.length}}if(e.isObject()){const o=e.getStringIndexType(),n=e.getNumberIndexType(),i=o??n,s=e.getProperties();if(i&&s.length===0)return{type:"object",additionalProperties:await t(i.getText())};const a={},c=[];for(const l of s){const u=l.getName(),p=l.getDeclarations()[0];let S;if(p)try{S=l.getTypeAtLocation(p)}catch{S=void 0}if(S!==void 0&&S.getCallSignatures().length>0)continue;const T=S!==void 0?at(S,p):void 0;a[u]=T!==void 0?await t(T):{},l.isOptional()||c.push(u)}return Object.keys(a).length>0?{type:"object",properties:a,...c.length>0?{required:c}:{}}:{}}return{}}function Z(e){if(e.length<2)return;const t=[];for(const o of e){if(o.type!=="object")return;const n=o.properties;if(!n||typeof n!="object")return;t.push(n)}const r=Object.keys(t[0]).filter(o=>t.every(n=>Object.prototype.hasOwnProperty.call(n,o)));for(const o of r){const n=[];let i=!0;for(const a of t){const c=a[o],l=c&&(c.type==="string"||c.type==="number"),u=c==null?void 0:c.enum;if(!l||!Array.isArray(u)||u.length!==1){i=!1;break}n.push(String(u[0]))}if(!i||new Set(n).size!==n.length)continue;const s={};return n.forEach((a,c)=>{s[a]=`#/oneOf/${c}`}),{propertyName:o,mapping:s}}}function D(e,t,r){if(t>6)return{};const o=e.trim();if(o==="string")return{type:"string"};if(o==="number")return{type:"number"};if(o==="boolean")return{type:"boolean"};if(o==="null")return{type:"null"};if(o==="undefined")return{type:"null"};const n=te[o];if(n!==void 0)return n;if(r!=null&&r.size){const i=r.get(o);if(i!==void 0){const s=te[i];if(s!==void 0)return s}}if(o.endsWith("[]"))return{type:"array",items:D(o.slice(0,-2),t+1,r)};if(o.includes("|")){const i=o.split("|").map(c=>c.trim());if(i.every(c=>c.startsWith("'")))return{type:"string",enum:i.map(c=>c.replace(/'/g,""))};const s=i.map(c=>D(c,t+1,r)),a=Z(s);return{oneOf:s,...a?{discriminator:a}:{},[U]:"union"}}if(o.startsWith("{")&&o.endsWith("}")){const i=o.slice(1,-1).trim(),s={};for(const a of i.split(";").filter(Boolean)){const[c,l]=a.split(":").map(u=>u.trim());c&&l&&(s[c.replace("?","")]=D(l,t+1,r))}return{type:"object",properties:s}}return{}}function $e(e){const t=[];let r=0,o=0;for(let i=0;i<e.length;i++){const s=e[i];s==="<"||s==="["||s==="{"||s==="("?r++:s===">"||s==="]"||s==="}"||s===")"?r--:s===","&&r===0&&(t.push(e.slice(o,i).trim()),o=i+1)}const n=e.slice(o).trim();return n.length>0&&t.push(n),t}function lt(e){const t=/^(?:Readonly)?Map<(.+)>$/.exec(e);return t?t[1]:void 0}function ft(e){const t=/^(?:Readonly)?Set<(.+)>$/.exec(e);return t?t[1]:void 0}function pt(e){let t=e.trim();if(t.startsWith("readonly ")&&(t=t.slice(9).trim()),!t.startsWith("[")||!t.endsWith("]"))return;const r=t.slice(1,-1).trim();if(r.length!==0)return $e(r)}async function mt(e,t){const r=e.trim(),o=lt(r);if(o!==void 0){const s=$e(o);if(s.length===2){const[a,c]=await Promise.all([t(s[0]),t(s[1])]);return{type:"array",items:{type:"array",items:[a,c],minItems:2,maxItems:2}}}}const n=ft(r);if(n!==void 0)return{type:"array",items:await t(n),uniqueItems:!0};const i=pt(r);if(i!==void 0){const s=await Promise.all(i.map(a=>t(a)));return{type:"array",items:s,minItems:s.length,maxItems:s.length}}}const Oe={"decimal.js":"Decimal"},te={Date:{type:"string",format:"date-time"},bigint:{type:"string",format:"int64"},Uint8Array:{type:"string",format:"byte"},Buffer:{type:"string",format:"byte"},URL:{type:"string",format:"uri"},RegExp:{type:"string",format:"regex"},Decimal:{type:"string",format:"decimal"}},me={Uint8Array:"byte",Buffer:"byte",Decimal:"decimal"};function ge(e){var r;const t=new Map;for(const o of e.getImportDeclarations()){const n=o.getModuleSpecifierValue(),i=Oe[n];if(!i)continue;const s=o.getDefaultImport();if(s){const a=s.getText();a!==i&&t.set(a,i)}for(const a of o.getNamedImports()){const c=((r=a.getAliasNode())==null?void 0:r.getText())??a.getName();c!==i&&t.set(c,i)}}return t}function gt(e,t){return r=>{r.addNodeParser({supportsNode(o){var i,s,a;if(o.kind!==t)return!1;const n=((i=o.typeName)==null?void 0:i.escapedText)??((a=(s=o.typeName)==null?void 0:s.right)==null?void 0:a.escapedText);return n!==void 0&&Object.prototype.hasOwnProperty.call(me,n)},createType(o){var i,s,a;const n=((i=o.typeName)==null?void 0:i.escapedText)??((a=(s=o.typeName)==null?void 0:s.right)==null?void 0:a.escapedText);return new R.AnnotatedType(new R.StringType,{format:me[n]},!1)}}),r.addNodeParser({supportsNode(o){return o.kind===e},createType(){return new R.AnnotatedType(new R.StringType,{format:"int64"},!1)}})}}let L;function dt(){if(L)return L;try{const e=G.dirname(require.resolve("ts-json-schema-generator/package.json"));L=require(require.resolve("typescript",{paths:[e]}))}catch{L=require("typescript")}return L}const I=new Map;function yt(){const e=process.env.APIGEN_PROGRAM_CACHE,t=e===void 0?NaN:Number(e);return Number.isFinite(t)&&t>=0?t:8}function ht(e){const t=I.get(e);return t&&(I.delete(e),I.set(e,t)),t}function Tt(e,t){const r=yt();if(r!==0)for(I.delete(e),I.set(e,t);I.size>r;){const o=I.keys().next().value;I.delete(o)}}function St(e,t){return`${e}\0${t??""}`}const bt=new Set(["zod",/^zod\/./]);function vt(e){for(const t of e.getImportDeclarations()){const r=t.getModuleSpecifierValue();for(const o of bt)if(typeof o=="string"){if(r===o)return!0}else if(o.test(r))return!0}return!1}function xt(e){for(const t of["$defs","definitions"]){const r=e[t];if(!r||typeof r!="object")continue;const o=Object.keys(r);if(o.length===0)continue;const n=new Set(o.filter(i=>/zod/i.test(i)));for(const[i,s]of Object.entries(r)){if(n.has(i)||typeof s!="object"||s===null)continue;const a=s,c=typeof a.$ref=="string"?a.$ref:"";if(c){for(const l of n)if(c.includes(l)){n.add(i);break}}}for(const i of n)delete r[i]}ne(e)}function ne(e,t){if(!e||typeof e!="object")return;const r=t??new WeakSet;if(!r.has(e)){r.add(e);for(const o of Object.keys(e))if(o==="$ref"&&typeof e[o]=="string"){const n=e[o];/zod/i.test(n)&&delete e[o]}for(const[,o]of Object.entries(e))if(typeof o=="object"&&o!==null)if(Array.isArray(o))for(const n of o)typeof n=="object"&&n!==null&&ne(n,r);else ne(o,r)}}function wt(e){const t=new Set;for(const o of["$defs","definitions"]){const n=e[o];if(n&&typeof n=="object")for(const i of Object.keys(n))t.add(i)}const r=re(e,t);if(r.length>0)throw new Error(`[apigen-core-client] Generated schema contains ${r.length} unresolvable $ref(s): ${r.join(", ")}. This usually means zod-internal definitions were stripped but $ref references to them remain. Check the source file's imports or the ts-json-schema-generator output.`)}function re(e,t){if(!e||typeof e!="object")return[];const r=[];for(const[o,n]of Object.entries(e))if(o==="$ref"&&typeof n=="string"){const i=n.match(/#\/(?:\$defs|definitions)\/(.+)$/);i&&!t.has(i[1])&&r.push(n)}else if(typeof n=="object"&&n!==null)if(Array.isArray(n))for(const i of n)typeof i=="object"&&i!==null&&r.push(...re(i,t));else r.push(...re(n,t));return r}function jt(e){const t=e.anyOf;if(!Array.isArray(t)||t.length<2)return e;const r=t,o=Z(r),n={...e};return delete n.anyOf,{...n,oneOf:r,...o?{discriminator:o}:{},[U]:n[U]??"union"}}function Pt(e,t,r){const{DEFAULT_CONFIG:o}=require("ts-json-schema-generator/dist/src/Config.js"),n={...o,...e},i=n.path,s=St(i,n.tsconfig);let a;a=r?r.statVersion(i):we(i);let c;if(s!==void 0){const u=(r==null?void 0:r.generatorCache.get(s))??ht(s);u&&u.version===a&&(c=u.gen)}if(!c){const{createProgram:u}=require("ts-json-schema-generator/dist/factory/program.js"),f=dt(),p=gt(f.SyntaxKind.BigIntKeyword,f.SyntaxKind.TypeReference),S=u(n),T=R.createParser(S,n,p),m=R.createFormatter(n);if(c=new R.SchemaGenerator(S,T,m,n),r&&r.stats.generatorsBuilt++,s!==void 0&&a!==void 0){const h={version:a,gen:c};Tt(s,h),r==null||r.generatorCache.set(s,h)}}const l=c.createSchema(n.type);return xt(l),wt(l),l}function At(e,t){let r=e.trim();if(r=ke(r),t!=null&&t.size){const n=t.get(r);if(n!==void 0)return n}const o=r.match(/^ReadonlyArray<(.+)>$/);for(o&&(r=`${o[1].trim()}[]`);r.startsWith("readonly ");)r=r.slice(9).trim();return r}function Ne(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}const $t=Object.entries(Oe).map(([e,t])=>({pattern:new RegExp(`import\\(["'][^"']*${Ne(e)}[^"']*["']\\)\\.\\w+`,"g"),key:t}));function ke(e){let t=e;for(const{pattern:r,key:o}of $t)t=t.replace(r,o);return t}function Ot(e,t){let r=ke(e);for(const[o,n]of t)r=r.replace(new RegExp(`\\b${Ne(o)}\\b`,"g"),n);return r}async function $(e,t,r,o,n,i){const s=t.getFilePath(),a=`${s}\0${o??""}\0${r}`,c=i??new Set;if(c.has(a))return{};if(!n){const T=new Set(c);return T.add(a),de(e,t,r,o,void 0,T)}const l=n.schemaCache.get(a);if(l!==void 0)return n.stats.schemaCacheHits++,l;const u=Qe(s,o,n.statVersion(s)),f=u.get(r);if(f!==void 0)return n.stats.schemaCacheHits++,n.schemaCache.set(a,Promise.resolve(f)),f;n.stats.schemaCacheMisses++;const p=new Set(c);p.add(a);const S=de(e,t,r,o,n,p).then(T=>(u.set(r,T),T)).catch(T=>{throw n.schemaCache.delete(a),T});return n.schemaCache.set(a,S),S}async function de(e,t,r,o,n,i){if(["void","undefined","null","Promise<void>"].includes(r))return{type:"null"};let s;if(n){const p=n.aliasCache.get(t);s=p??ge(t),p||n.aliasCache.set(t,s)}else s=ge(t);const a=At(r,s),c=te[a];if(c!==void 0)return c;const l=await mt(a,p=>$(e,t,p,o,n,i));if(l!==void 0)return l;const u=(n==null?void 0:n.zodImportCache.get(t))??vt(t);if(n&&n.zodImportCache.set(t,u),!u)try{const p={path:t.getFilePath(),type:a,skipTypeCheck:!0,tsconfig:o,topRef:!1},S=Pt(p,!0,n);return jt(S)}catch{}try{const p=await ut(e,t,a,S=>Ae(S,T=>$(e,t,T,o,n,i),0));if(p!==void 0)return p}catch{}const f=Ot(a,s);return D(f,0,s)}function ae(e,t,r){if(e!=null&&e.hasInitializer()){const o=e.getInitializer();if(o)return o.getText()}return Nt(r,t)}function Nt(e,t){var s;const r=e,o=((s=r==null?void 0:r.getJsDocs)==null?void 0:s.call(r))??[],n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`\\[\\s*${n}\\s*=\\s*([^\\]]+)\\]`);for(const a of o)for(const c of a.getTags()){if(c.getTagName()!=="param")continue;const l=c.getText().match(i);if(l)return l[1].trim()}}function kt(e){const t=e.trim(),r=t.match(/^(['"`])([\s\S]*)\1$/);if(r)return r[2];if(t==="true")return!0;if(t==="false")return!1;if(t==="null")return null;if(t!=="undefined"){if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);try{return JSON.parse(t)}catch{return t}}}function It(e,t){const r=kt(t);if(r===void 0)return;e.default=r;const o=typeof r=="string"?r:JSON.stringify(r),n=typeof e.description=="string"?e.description:void 0;e.description=n?`${n} (default: ${o})`:`(default: ${o})`}function H(e){try{if(!e||e.getKind()!==N.SyntaxKind.TypeReference)return;const t=e;if(t.getTypeArguments().length>0)return;const r=t.getTypeName();if(r.getKind()!==N.SyntaxKind.Identifier)return;const n=r.getSymbol();if(!n)return;const i=n.getDeclarations().find(u=>u.getKindName()==="TypeAliasDeclaration");if(!i)return;const s=i,a=s.getType();if(!(a.isString()||a.isNumber()||a.isBoolean()))return;const l=s.getJsDocs();for(const u of l)for(const f of u.getTags())if(f.getTagName()==="format"){const p=f.getCommentText();if(p!==void 0)return p.trim()}return}catch{return}}async function Et(e){const t=e.session===void 0,r=je(e.session??se());try{return await Ft(e,r)}finally{t&&r.dispose()}}async function Ft(e,t){const{sourceFile:r,namespace:o="",dropFileSegment:n=!1,tsconfig:i}=e,s=t.projectFor(i),a=t.sourceFileFor(r,i),c=G.basename(r),l=O(Lt(c)),u=n?null:l,f=O(o),p=[];for(const[m,h]of a.getExportedDeclarations()){if(m==="default"||z(m))continue;const y=Mt(h);if(y){const g=y.getSignature(),w=he(g,y),v=g.getReturnType().getText(),P=F(g);p.push(await K(s,a,f,u,m,w,v,y.isAsync(),i,t,P));continue}const d=h.find(g=>g.getKindName()==="VariableDeclaration");if(!d)continue;const b=d.getInitializer(),x=b==null?void 0:b.getKindName();if(b&&["ArrowFunction","FunctionExpression"].includes(x??"")){const w=d.getType().getCallSignatures();if(w.length===0)continue;const v=w[0],P=Te(v,d,d.getVariableStatement()),j=v.getReturnType().getText(),A=F(v),E=b.isAsync();p.push(await K(s,a,f,u,m,P,j,E,i,t,A))}else if(x==="ObjectLiteralExpression"){const g=d.getType();for(const w of g.getProperties()){const v=w.getName();if(z(v))continue;const j=w.getTypeAtLocation(d).getCallSignatures();if(j.length===0)continue;const A=j[0],E=Te(A,d,d.getVariableStatement()),V=A.getReturnType().getText(),q=F(A),J=[...u?[u]:[],O(m),O(v)];p.push(await W(s,a,f,J,v,E,V,!1,i,t,q))}}else{const g=d.getType(),w=g.getText();if(C(g,d)){const v=await $(s,a,w,i,t);p.push(Rt(f,u,m,v))}else console.warn(`[apigen-core] Skipping non-callable, non-serializable export: ${m}`)}}const S=a.getDefaultExportSymbol();if(S){const m=a.getExportAssignment(h=>!h.isExportEquals());if(m){const h=m.getExpression(),y=h.getKindName();if(["ArrowFunction","FunctionExpression"].includes(y)){const b=h.getType().getCallSignatures();if(b.length>0){const x=b[0],g=Q(x,m),w=x.getReturnType().getText(),v=F(x),P=h.isAsync();p.push(await K(s,a,f,u,"default",g,w,P,i,t,v))}}else{const d=h.getType();for(const b of d.getProperties()){const x=b.getName();if(z(x))continue;const w=b.getTypeAtLocation(m).getCallSignatures();if(w.length===0)continue;const v=w[0],P=Q(v,m),j=v.getReturnType().getText(),A=F(v),E=[...u?[u]:[],O("default"),O(x)];p.push(await W(s,a,f,E,x,P,j,!1,i,t,A))}}}else{const h=S.getDeclarations();for(const y of h){if(y.getKindName()!=="FunctionDeclaration")continue;const d=y,b=d.getName(),x=b&&b.length>0?b:"default",g=d.getSignature(),w=he(g,d),v=g.getReturnType().getText(),P=F(g);p.push(await K(s,a,f,u,x,w,v,d.isAsync(),i,t,P))}}}const T=_t(a);if(T.length>0)for(const{name:m,sig:h}of T){if(z(m))continue;const y=Q(h),d=h.getReturnType().getText(),b=F(h),x=[...u?[u]:[],O(m)];p.push(await W(s,a,f,x,m,y,d,!1,i,t,b))}return p}function Ct(e,t,r,o){const n=new Set,i=s=>{if(Array.isArray(s))return s.map(i);if(!s||typeof s!="object"||n.has(s))return s;n.add(s);try{const a=s,c={};for(const[l,u]of Object.entries(a)){if(l==="definitions"||l==="$defs"){const f=l,p=t[f];for(const[S,T]of Object.entries(u)){const m=i(T),h=p[S];if(h!==void 0&&JSON.stringify(h)!==JSON.stringify(m))throw new Error(`[apigen-core-client] Function "${r}": param "${o}" contributes a "${f}.${S}" definition that conflicts with an identically-named definition already hoisted from another param/output in the same function. Two structurally different types share the same generated definition key, so apigen cannot safely merge them into one function-level schema.`);p[S]=m}continue}c[l]=i(u)}return c}finally{n.delete(s)}};return i(e)}function ye(e,t){if(!t||e.format!==void 0||"$ref"in e||"properties"in e||"items"in e)return;const r=e.type;(r==="string"||r==="number"||r==="integer"||r==="boolean")&&(e.format=t)}function F(e){var t;try{return H((t=e.getDeclaration())==null?void 0:t.getReturnTypeNode())}catch{return}}async function K(e,t,r,o,n,i,s,a,c,l,u){const f=O(n);return W(e,t,r,o?[o,f]:[f],n,i,s,a,c,l,u)}async function W(e,t,r,o,n,i,s,a,c,l,u){const f=i.length>0&&i[0].name==="ctx",p=i.filter(g=>g.name!=="ctx"),S=p.filter(g=>!g.optional).map(g=>g.name),T={},m={definitions:{},$defs:{}};for(const g of p){const w=await $(e,t,g.type,c,l),v=Ct(w,m,n,g.name);g.defaultValue!==void 0&&It(v,g.defaultValue),ye(v,g.format),T[g.name]=v}const h=s.replace(/^Promise<(.+)>$/,"$1").trim(),y=await $(e,t,h,c,l),d=u?{...y}:y;ye(d,u);const b={type:"object",properties:T,required:S,...Object.keys(m.definitions).length>0?{definitions:m.definitions}:{},...Object.keys(m.$defs).length>0?{$defs:m.$defs}:{}};return{id:Ie(r,o),host:"ts",namespace:r,path:o,kind:"action",async:a,streaming:!1,safe:!1,input:b,output:d,envelope:{},typeText:{lang:"ts",input:Vt(i),output:h},...f?{hasCtx:!0}:{}}}function Rt(e,t,r,o){const n=O(r),i=t?[t,n]:[n];return{id:Ie(e,i),host:"ts",namespace:e,path:i,kind:"query",async:!1,streaming:!1,safe:!0,input:{type:"object",properties:{},required:[]},output:o,envelope:{},typeText:null}}function Ie(e,t){return(e.raw?[e,...t]:t).map(o=>o.words.join("-")).join("/")}function ce(e){return e.split(/[-_.]+/).flatMap(t=>t.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").split("_").filter(Boolean)).map(t=>t.toLowerCase()).filter(Boolean)}function O(e){return{raw:e,words:ce(e)}}function Lt(e){return e.replace(/\.[^.]+$/,"").replace(/[._]+/g,"-")}function _t(e){const t=[];for(const r of e.getStatements()){if(r.getKindName()!=="ExpressionStatement")continue;const o=r.getExpression();if(o.getKindName()!=="BinaryExpression")continue;const n=o;if(n.getLeft().getText().trim()!=="module.exports"||n.getOperatorToken().getKindName()!=="EqualsToken")continue;const s=n.getRight(),a=s.getType();for(const c of a.getProperties()){const u=c.getTypeAtLocation(s).getCallSignatures();u.length!==0&&t.push({name:c.getName(),sig:u[0]})}}return t}function Mt(e){let t;for(const r of e){if(r.getKindName()!=="FunctionDeclaration")continue;const o=r;if(t||(t=o),o.getBody())return o}return t}function he(e,t){return e.getParameters().map(r=>{var s;const o=r.getDeclarations(),n=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=r.isOptional()||((n==null?void 0:n.hasInitializer())??!1)||(((s=n==null?void 0:n.hasQuestionToken)==null?void 0:s.call(n))??!1);return{name:r.getName(),type:r.getTypeAtLocation(e.getDeclaration()).getText(),optional:i,defaultValue:ae(n,r.getName(),t),format:H(n==null?void 0:n.getTypeNode())}})}function Te(e,t,r){return e.getParameters().map(o=>{var a;const n=o.getDeclarations(),i=n.length>0&&n[0].getKindName()==="Parameter"?n[0]:null,s=o.isOptional()||((i==null?void 0:i.hasInitializer())??!1)||(((a=i==null?void 0:i.hasQuestionToken)==null?void 0:a.call(i))??!1);return{name:o.getName(),type:o.getTypeAtLocation(t).getText(),optional:s,defaultValue:ae(i,o.getName(),r??t),format:H(i==null?void 0:i.getTypeNode())}})}function Q(e,t){return e.getParameters().map(r=>{var s,a,c;const o=r.getDeclarations(),n=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=r.isOptional()||((n==null?void 0:n.hasInitializer())??!1)||(((s=n==null?void 0:n.hasQuestionToken)==null?void 0:s.call(n))??!1);return{name:r.getName(),type:n?n.getType().getText():((c=(a=r.getValueDeclaration())==null?void 0:a.getType())==null?void 0:c.getText())??"unknown",optional:i,defaultValue:ae(n,r.getName(),t),format:H(n==null?void 0:n.getTypeNode())}})}function Vt(e){const t=e.filter(r=>r.name!=="ctx");return t.length===0?"()":"("+t.map(r=>`${r.name}${r.optional?"?":""}: ${r.type}`).join(", ")+")"}function z(e){return!!(e==="__samples__"||e.startsWith("__"))}function C(e,t,r=new Set){if(e.getCallSignatures().length>0||e.getConstructSignatures().length>0)return!1;if(e.isString()||e.isNumber()||e.isBoolean()||e.isNull()||e.isUndefined()||e.isStringLiteral()||e.isNumberLiteral()||e.isBooleanLiteral()||e.isEnumLiteral())return!0;if(e.isArray()||e.isReadonlyArray()){const o=e.getArrayElementType();return o?C(o,t,r):!1}if(e.isTuple())return e.getTupleElements().every(o=>C(o,t,r));if(e.isUnion())return e.getUnionTypes().every(o=>C(o,t,r));if(e.isIntersection())return e.getIntersectionTypes().every(o=>C(o,t,r));if(e.isObject()){const o=e.getText(t);if(r.has(o))return!0;r.add(o);const n=e.getStringIndexType(),i=e.getNumberIndexType();if(n||i)return[n,i].every(a=>!a||C(a,t,r));const s=e.getProperties();return s.length===0?!0:s.every(a=>{const c=a.getTypeAtLocation(t);return C(c,t,r)})}return!1}function Ee(e,t){return async r=>{let o=()=>t(r);for(let n=e.length-1;n>=0;n--){const i=e[n],s=o;o=()=>i(r,s)}return o()}}function Fe(e,t){return Ee(e,t)}function qt(e,t,r={}){const o=e.map(n=>n.capabilities.extractLayer).filter(n=>!!n).map(n=>n.createLayer?n.createLayer(r):n.layer).filter(n=>!!n);return Fe(o,t)}async function Kt(e){const t=e.session===void 0,r=je(e.session??se());try{return await zt(e,r)}finally{t&&r.dispose()}}async function zt(e,t){const{sourceFile:r,namespace:o="",tsconfig:n,includeInstances:i=!1}=e,s=t.projectFor(n),a=t.sourceFileFor(r,n),c=G.basename(r),l=_(Dt(c)),u=_(o),f=[];for(const[p,S]of a.getExportedDeclarations()){const T=S.find(y=>y.getKindName()==="ClassDeclaration");if(!T)continue;const m=p==="default"?T.getName():p;if(!m||Y(m))continue;const h=_(m);for(const y of T.getStaticMethods()){const d=y.getName();if(Y(d))continue;const b=y.getScope();if(b===N.Scope.Private||b===N.Scope.Protected)continue;const x=y.getSignature(),g=X(x,y),w=x.getReturnType().getText(),v=y.isAsync(),P=[l,h,_(d)];f.push(await Bt(s,a,u,P,g,w,v,n,t))}if(i){{const d=T.getConstructors()[0]??null;let b=[];if(d){const j=d.getSignature();b=X(j,d)}const x=[l,h],g=oe(u,x),w=b.filter(j=>j.name!=="ctx"),v=w.filter(j=>!j.optional).map(j=>j.name),P={};for(const j of w)P[j.name]=await $(s,a,j.type,n,t);f.push({id:g,host:"ts",namespace:u,path:x,kind:"constructor",async:!1,streaming:!1,safe:!1,input:{type:"object",properties:P,required:v},output:{type:"object",properties:{instanceId:{type:"string"}},required:["instanceId"]},envelope:{},typeText:{lang:"ts",input:Wt(b),output:"{ instanceId: string }"}})}for(const y of T.getInstanceMethods()){const d=y.getName();if(Y(d))continue;const b=y.getScope();if(b===N.Scope.Private||b===N.Scope.Protected)continue;const x=y.getSignature(),g=X(x,y),w=x.getReturnType().getText(),v=y.isAsync(),P=[l,h,_(d)],j=oe(u,P),A=g.filter(k=>k.name!=="ctx"),E=A.filter(k=>!k.optional).map(k=>k.name),V={};for(const k of A)V[k.name]=await $(s,a,k.type,n,t);const q=w.replace(/^Promise<(.+)>$/,"$1").trim(),J=await $(s,a,q,n,t);f.push({id:j,host:"ts",namespace:u,path:P,kind:"instance-method",async:v,streaming:!1,safe:!1,input:{type:"object",properties:V,required:E},output:J,envelope:{type:"object",properties:{instanceId:{type:"string"}},required:["instanceId"]},typeText:{lang:"ts",input:Ce(g),output:q}})}}}return f}async function Bt(e,t,r,o,n,i,s,a,c){const l=n.filter(m=>m.name!=="ctx"),u=l.filter(m=>!m.optional).map(m=>m.name),f={};for(const m of l)f[m.name]=await $(e,t,m.type,a,c);const p=i.replace(/^Promise<(.+)>$/,"$1").trim(),S=await $(e,t,p,a,c);return{id:oe(r,o),host:"ts",namespace:r,path:o,kind:"action",async:s,streaming:!1,safe:!1,input:{type:"object",properties:f,required:u},output:S,envelope:{},typeText:{lang:"ts",input:Ce(n),output:p}}}function oe(e,t){return(e.raw?[e,...t]:t).map(o=>o.words.join("-")).join("/")}function _(e){return{raw:e,words:ce(e)}}function Dt(e){return e.replace(/\.[^.]+$/,"").replace(/[._]+/g,"-")}function X(e,t){return e.getParameters().map(r=>{var s;const o=r.getDeclarations(),n=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=r.isOptional()||((n==null?void 0:n.hasInitializer())??!1)||(((s=n==null?void 0:n.hasQuestionToken)==null?void 0:s.call(n))??!1);return{name:r.getName(),type:r.getTypeAtLocation(t).getText(),optional:i}})}function Ce(e){const t=e.filter(r=>r.name!=="ctx");return t.length===0?"()":"("+t.map(r=>`${r.name}${r.optional?"?":""}: ${r.type}`).join(", ")+")"}function Wt(e){return e.length===0?"()":"("+e.map(t=>`${t.name}${t.optional?"?":""}: ${t.type}`).join(", ")+")"}function Y(e){return!!(e==="__samples__"||e.startsWith("__")||e.startsWith("_"))}const Ut=new Map([[".ts","ts"],[".tsx","ts"],[".mts","ts"],[".cts","ts"],[".py","py"],[".rs","rust"],[".go","go"],[".java","java"]]);function Re(e){const t=Je.extname(e).toLowerCase();return Ut.get(t)}function Le(e){return e.language??"ts"}function _e(e,t){const r=Re(t);return r===void 0?!1:r===Le(e)}function Gt(e,t){return t.filter(r=>_e(e,r))}function Zt(e){return{oneOf:[{type:"object",required:["index","status","value"],properties:{index:{type:"integer"},status:{type:"string",enum:["fulfilled"]},value:e}},{type:"object",required:["index","status","chunks"],properties:{index:{type:"integer"},status:{type:"string",enum:["fulfilled"]},chunks:{type:"array"}}},{type:"object",required:["index","status","reason"],properties:{index:{type:"integer"},status:{type:"string",enum:["rejected"]},reason:{},chunksDelivered:{type:"integer"}}}]}}function Me(e){return{operationConst:e.id,itemsSchema:e.input,resultSchema:Zt(e.output)}}function Ve(e,t={}){const r=new Set(t.exclude??[]),o=new Map;for(const n of e){if(r.has(n.id))continue;const i=o.get(n.kind);i?i.push(n):o.set(n.kind,[n])}return o}function Se(e){return{type:"string",enum:[e]}}function be(e,t){return{type:"object",required:["operation","items"],properties:{operation:t,items:{type:"array",items:e.itemsSchema},concurrency:{type:"number"},mode:{type:"string",enum:["parallel","serial","chained"]},onItemError:{type:"string",enum:["continue","abort"]},itemTimeoutMs:{type:"number"}},additionalProperties:!0}}function qe(e){if(e.length===0)throw new Error("buildBatchKindSchema: at least one operation is required");const t=e.map(Me);if(e.length===1){const[n]=e,[i]=t;return{input:be(i,Se(n.id)),output:{type:"array",items:i.resultSchema}}}const r=e.map((n,i)=>be(t[i],Se(n.id))),o=Z(r);return{input:{oneOf:r,...o?{discriminator:o}:{}},output:{oneOf:t.map(n=>({type:"array",items:n.resultSchema}))},...o?{discriminator:o}:{}}}function Ht(e,t={}){const r=Ve(e.operations,t),o=[];for(const[n,i]of r){const{input:s,output:a}=qe(i),c=ve(`_batch/${n}`,e,{kind:n,safe:n==="query",input:s,output:a});o.push({...c,operationIds:i.map(l=>l.id)})}return o}exports.buildBatchKindSchema=qe;exports.buildBatchMountedOperations=Ht;exports.clearPersistentProjectCache=Xe;exports.collectLocalImportPaths=et;exports.composeOnion=Ee;exports.composeSchemas=it;exports.createExtractInvoker=Fe;exports.createExtractInvokerFromPlugins=qt;exports.createExtractionSession=se;exports.deriveBatchOperationBranch=Me;exports.effectiveLanguage=Le;exports.extract=Et;exports.extractClasses=Kt;exports.groupBatchableOperationsByKind=Ve;exports.isPrimitiveOnlyInputSchema=Pe;exports.languageOfSource=Re;exports.pluginConsumesSource=_e;exports.pluginsToEnvelopeMiddlewares=nt;exports.sourcesForPlugin=Gt;exports.syntheticOp=ve;exports.tokenize=ce;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Ye=require("node:fs"),et=require("node:module"),Q=require("node:path");var ee=typeof document<"u"?document.currentScript:null;function tt(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const nt=tt(Q);function Te(e){return{raw:e,words:e.split(/(?=[A-Z])|[-_]/).map(t=>t.toLowerCase()).filter(Boolean)}}function Ie(e,t,r={}){const o=e.split("/");if(o.length<2||o.some(u=>u.length===0))throw new Error(`syntheticOp: id "${e}" must be "<namespace>/<path...>" with non-empty segments`);const[n,...i]=o,s=n.replace(/^_+/,""),a=r.kind??"action",c={id:e,host:t.host,namespace:Te(s),path:i.map(Te),kind:a,async:r.async??!1,streaming:r.streaming??!1,safe:r.safe??a==="query",input:r.input??{},output:r.output??{},envelope:r.envelope??{},typeText:r.typeText??null};return r.hasCtx!==void 0&&(c.hasCtx=r.hasCtx),r.transports!==void 0&&(c.transports=r.transports),c}const O=et.createRequire(typeof document>"u"?require("url").pathToFileURL(__filename).href:ee&&ee.tagName.toUpperCase()==="SCRIPT"&&ee.src||new URL("index.js",document.baseURI).href);let z;function Ee(){return z||(z=O("ts-morph").Project,z)}const Ce=Symbol.for("adhd.apigen.extraction-session");function le(e,t){const r=[...e.getImportDeclarations().map(o=>o.getModuleSpecifierSourceFile()),...e.getExportDeclarations().map(o=>o.getModuleSpecifierSourceFile())];for(const o of r){if(!o)continue;const n=o.getFilePath();if(!n.includes("/node_modules/")&&!t.has(n)){t.add(n);try{o.refreshFromFileSystemSync()}catch{}le(o,t)}}}function Fe(e){try{const t=Ye.statSync(e);return`${t.mtimeMs}:${t.size}`}catch{return"nostat"}}const M=new Map,oe=new Map;function rt(e,t,r){const o=t??"",n=M.get(o);let i=r;if(n&&n.fileVersions.size>0){const c=[r],u=[...n.fileVersions.entries()].sort(([l],[f])=>l.localeCompare(f));for(const[l,f]of u)l!==e&&c.push(`${l}:${f}`);i=c.join("|")}const s=`${e}\0${t??""}`;let a=oe.get(s);return(!a||a.version!==i)&&(a={version:i,schemas:new Map},oe.set(s,a)),a.schemas}function ot(){M.clear(),oe.clear(),G=void 0}let G;function it(){if(!G){const e=Ee();G=new e({skipAddingFilesFromTsConfig:!0,compilerOptions:{noLib:!0}})}return G}function st(e){const t=it(),r=t.getSourceFile(e),o=r??t.addSourceFileAtPath(e);if(r)try{r.refreshFromFileSystemSync()}catch{}const n=new Set([e]);return le(o,n),[...n].sort()}function fe(){const e={projectsBuilt:0,generatorsBuilt:0,schemaCacheHits:0,schemaCacheMisses:0},t=new Map;let r=!1;return{[Ce]:!0,stats:e,schemaCache:new Map,aliasCache:new WeakMap,zodImportCache:new WeakMap,generatorCache:new Map,projectFor(n){if(r)throw new Error("apigen-core: ExtractionSession used after dispose()");const i=n??"",s=n?this.statVersion(n):"";let a=M.get(i);if(a&&a.tsconfigVersion!==s&&(a=void 0),!a){const c=Ee();a={project:n?new c({tsConfigFilePath:n,skipAddingFilesFromTsConfig:!0}):new c({skipAddingFilesFromTsConfig:!0}),tsconfigVersion:s,fileVersions:new Map},M.set(i,a),e.projectsBuilt++}return a.project},sourceFileFor(n,i){const s=this.projectFor(i),a=M.get(i??""),c=this.statVersion(n);let u=s.getSourceFile(n);if(u===void 0?u=s.addSourceFileAtPath(n):a&&a.fileVersions.get(n)!==c&&u.refreshFromFileSystemSync(),a==null||a.fileVersions.set(n,c),a){const l=new Set([n]);le(u,l);for(const f of l)f!==n&&a.fileVersions.set(f,this.statVersion(f))}return u},statVersion(n){let i=t.get(n);return i===void 0&&(i=Fe(n),t.set(n,i)),i},dispose(){r=!0,this.schemaCache.clear(),this.generatorCache.clear(),t.clear()}}}function Re(e){const t=e;if(t[Ce]!==!0)throw new Error("apigen-core: unknown ExtractionSession implementation — create sessions with createExtractionSession()");return t}const Z="x-apigen-logical";function Se(e,t){const r=new Set,o=[e];for(;o.length>0;){const n=o.pop();if(!n||r.has(n))continue;r.add(n);const i=n.$ref;if(typeof i=="string"){if(t){const f=t[i];if(!f){const m=Object.keys(t).join(", ")||"(none)";throw new Error(`[apigen-logical] $ref "${i}" cannot be resolved. Available $defs: ${m}`)}o.push(f)}continue}const s=n.oneOf;if(Array.isArray(s))for(const f of s)typeof f=="object"&&f!==null&&o.push(f);const a=n.properties;if(a)for(const f of Object.values(a))o.push(f);const c=n.items;if(Array.isArray(c))for(const f of c)typeof f=="object"&&f!==null&&o.push(f);else typeof c=="object"&&c!==null&&o.push(c);const u=n.additionalProperties;typeof u=="object"&&u!==null&&o.push(u);const l=n.propertyNames;typeof l=="object"&&l!==null&&o.push(l)}}const be=new Set(["string","number","boolean","integer"]);function at(e){if(typeof e!="object"||e===null)return!1;const t=e;if(t.$ref!==void 0||t.oneOf||t.anyOf||t.allOf)return!1;const{type:r}=t;return typeof r=="string"?be.has(r):Array.isArray(r)?r.every(o=>be.has(o)||o==="null"):Array.isArray(t.enum)&&t.enum.length>0?t.enum.every(o=>["string","number","boolean"].includes(typeof o)):!1}function _e(e){if(!e||typeof e!="object")return!1;const t=e.properties;return t===void 0||typeof t!="object"||t===null?!1:Object.values(t).every(at)}function ct(e){var r,o;const t=[];for(const n of e){const i={...(r=n.capabilities.layer)==null?void 0:r.envelopeFields,...(o=n.capabilities.envelope)==null?void 0:o.request};Object.keys(i).length>0&&t.push({id:n.id,envelope:i})}return t}function ut(e){const t={},r=o=>{for(const n of["definitions","$defs"]){const i=o[n];if(i)for(const[s,a]of Object.entries(i)){const c=s.startsWith("#/")?s:`#/${n}/${s}`;t[c]=a}}};for(const o of Object.values(e.schemas))r(o.input),r(o.output);if(Object.keys(t).length!==0)for(const[o,n]of Object.entries(e.schemas))try{Se(n.input,t),Se(n.output,t)}catch(i){throw new Error(`[apigen-core-client] Schema validation failed for function "${o}": ${i.message}`)}}function lt(e,t){const r=['apigen calling convention: all domain parameters go inside a "data" envelope — e.g. { "data": { ... } }'+(t?".":" (an empty object for this zero-parameter tool).")];return e.length>0&&r.push(`Field(s) ${e.map(o=>`"${o}"`).join(", ")} are transport-level envelope metadata, NOT domain data — do not nest them under "data". Over MCP they are read from arguments._meta["x-<pluginId>-<field>"] (default pluginId "adhd"); see @adhd/apigen-engine-naming's envelopeMetaKey/envelopeCliFlag/envelopeEnvVar for the HTTP-header / CLI-flag / env-var equivalents.`),r.join(" ")}function ft(e,t,r){ut(e);const o={};for(const[n,i]of Object.entries(e.schemas)){const s=(r==null?void 0:r[n])??{},a=i.input.properties??{},c=i.input.required??[],u={},l=[],f={};for(const g of t)if(g.envelope&&s[g.id]!==!1)for(const[x,p]of Object.entries(g.envelope))u[x]=p,f[x]=g.id,l.includes(x)||l.push(x);const m={type:"object",properties:a,additionalProperties:!1,...c.length>0?{required:c}:{}},h=i.safe===!0||_e(i.input),y=i.input.definitions,d=i.input.$defs;o[n]={input:{type:"object",properties:{...u,data:m},required:[...l,...c.length>0?["data"]:[]],additionalProperties:!1,description:lt(Object.keys(u),Object.keys(a).length>0),...y?{definitions:y}:{},...d?{$defs:d}:{}},output:i.output,...i.hasCtx?{hasCtx:!0}:{},"x-apigen-safe":h,...Object.keys(f).length>0?{"x-apigen-envelope":f}:{}}}return o}const pt=8;function mt(e,t){try{return t?e.getText(t):e.getText()}catch{try{return e.getText()}catch{return}}}let dt=0;async function gt(e,t,r,o){const n=`__ApigenProbe_${process.pid}_${dt++}`;let i;try{i=t.addTypeAlias({name:n,type:r});const s=i.getType();return await o(s)}catch{return}finally{try{i==null||i.remove()}catch{}}}async function Le(e,t,r){if(r>pt)return{};if(e.isString()||e.isStringLiteral())return e.isStringLiteral()?{type:"string",enum:[e.getLiteralValue()]}:{type:"string"};if(e.isNumber()||e.isNumberLiteral())return e.isNumberLiteral()?{type:"number",enum:[e.getLiteralValue()]}:{type:"number"};if(e.isBoolean())return{type:"boolean"};if(e.isBooleanLiteral())return{type:"boolean"};if(e.isNull()||e.isUndefined()||e.isVoid())return{type:"null"};if(e.isUnion()){const o=e.getUnionTypes();if(o.every(c=>c.isStringLiteral())&&o.length>0)return{type:"string",enum:o.map(c=>c.getLiteralValue())};if(o.every(c=>c.isNumberLiteral())&&o.length>0)return{type:"number",enum:o.map(c=>c.getLiteralValue())};const s=await Promise.all(o.map(c=>Le(c,t,r+1))),a=X(s);return{oneOf:s,...a?{discriminator:a}:{},[Z]:"union"}}if(e.isArray()){const o=e.getArrayElementType();return{type:"array",items:o?await t(o.getText()):{}}}if(e.isTuple()){const o=e.getTupleElements(),n=await Promise.all(o.map(i=>t(i.getText())));return{type:"array",items:n,minItems:n.length,maxItems:n.length}}if(e.isObject()){const o=e.getStringIndexType(),n=e.getNumberIndexType(),i=o??n,s=e.getProperties();if(i&&s.length===0)return{type:"object",additionalProperties:await t(i.getText())};const a={},c=[];for(const u of s){const l=u.getName(),m=u.getDeclarations()[0];let h;if(m)try{h=u.getTypeAtLocation(m)}catch{h=void 0}if(h!==void 0&&h.getCallSignatures().length>0)continue;const y=h!==void 0?mt(h,m):void 0;a[l]=y!==void 0?await t(y):{},u.isOptional()||c.push(l)}if(Object.keys(a).length>0){const u=i?await t(i.getText()):!1;return{type:"object",properties:a,...c.length>0?{required:c}:{},additionalProperties:u}}return{}}return{}}function X(e){if(e.length<2)return;const t=[];for(const o of e){if(o.type!=="object")return;const n=o.properties;if(!n||typeof n!="object")return;t.push(n)}const r=Object.keys(t[0]).filter(o=>t.every(n=>Object.prototype.hasOwnProperty.call(n,o)));for(const o of r){const n=[];let i=!0;for(const a of t){const c=a[o],u=c&&(c.type==="string"||c.type==="number"),l=c==null?void 0:c.enum;if(!u||!Array.isArray(l)||l.length!==1){i=!1;break}n.push(String(l[0]))}if(!i||new Set(n).size!==n.length)continue;const s={};return n.forEach((a,c)=>{s[a]=`#/oneOf/${c}`}),{propertyName:o,mapping:s}}}function H(e,t,r){if(t>6)return{};const o=e.trim();if(o==="string")return{type:"string"};if(o==="number")return{type:"number"};if(o==="boolean")return{type:"boolean"};if(o==="null")return{type:"null"};if(o==="undefined")return{type:"null"};const n=ie[o];if(n!==void 0)return n;if(r!=null&&r.size){const i=r.get(o);if(i!==void 0){const s=ie[i];if(s!==void 0)return s}}if(o.endsWith("[]"))return{type:"array",items:H(o.slice(0,-2),t+1,r)};if(o.includes("|")){const i=o.split("|").map(c=>c.trim());if(i.every(c=>c.startsWith("'")))return{type:"string",enum:i.map(c=>c.replace(/'/g,""))};const s=i.map(c=>H(c,t+1,r)),a=X(s);return{oneOf:s,...a?{discriminator:a}:{},[Z]:"union"}}if(o.startsWith("{")&&o.endsWith("}")){const i=o.slice(1,-1).trim(),s={};for(const a of i.split(";").filter(Boolean)){const[c,u]=a.split(":").map(l=>l.trim());c&&u&&(s[c.replace("?","")]=H(u,t+1,r))}return{type:"object",properties:s}}return{}}function Me(e){const t=[];let r=0,o=0;for(let i=0;i<e.length;i++){const s=e[i];s==="<"||s==="["||s==="{"||s==="("?r++:s===">"||s==="]"||s==="}"||s===")"?r--:s===","&&r===0&&(t.push(e.slice(o,i).trim()),o=i+1)}const n=e.slice(o).trim();return n.length>0&&t.push(n),t}function yt(e){const t=/^(?:Readonly)?Map<(.+)>$/.exec(e);return t?t[1]:void 0}function ht(e){const t=/^(?:Readonly)?Set<(.+)>$/.exec(e);return t?t[1]:void 0}function Tt(e){let t=e.trim();if(t.startsWith("readonly ")&&(t=t.slice(9).trim()),!t.startsWith("[")||!t.endsWith("]"))return;const r=t.slice(1,-1).trim();if(r.length!==0)return Me(r)}async function St(e,t){const r=e.trim(),o=yt(r);if(o!==void 0){const s=Me(o);if(s.length===2){const[a,c]=await Promise.all([t(s[0]),t(s[1])]);return{type:"array",items:{type:"array",items:[a,c],minItems:2,maxItems:2}}}}const n=ht(r);if(n!==void 0)return{type:"array",items:await t(n),uniqueItems:!0};const i=Tt(r);if(i!==void 0){const s=await Promise.all(i.map(a=>t(a)));return{type:"array",items:s,minItems:s.length,maxItems:s.length}}}const Ke={"decimal.js":"Decimal"},ie={Date:{type:"string",format:"date-time"},bigint:{type:"string",format:"int64"},Uint8Array:{type:"string",format:"byte"},Buffer:{type:"string",format:"byte"},URL:{type:"string",format:"uri"},RegExp:{type:"string",format:"regex"},Decimal:{type:"string",format:"decimal"}},ve={Uint8Array:"byte",Buffer:"byte",Decimal:"decimal"};function xe(e){var r;const t=new Map;for(const o of e.getImportDeclarations()){const n=o.getModuleSpecifierValue(),i=Ke[n];if(!i)continue;const s=o.getDefaultImport();if(s){const a=s.getText();a!==i&&t.set(a,i)}for(const a of o.getNamedImports()){const c=((r=a.getAliasNode())==null?void 0:r.getText())??a.getName();c!==i&&t.set(c,i)}}return t}function bt(e,t){return r=>{r.addNodeParser({supportsNode(o){var i,s,a;if(o.kind!==t)return!1;const n=((i=o.typeName)==null?void 0:i.escapedText)??((a=(s=o.typeName)==null?void 0:s.right)==null?void 0:a.escapedText);return n!==void 0&&Object.prototype.hasOwnProperty.call(ve,n)},createType(o){var a,c,u;const n=((a=o.typeName)==null?void 0:a.escapedText)??((u=(c=o.typeName)==null?void 0:c.right)==null?void 0:u.escapedText),{AnnotatedType:i,StringType:s}=se();return new i(new s,{format:ve[n]},!1)}}),r.addNodeParser({supportsNode(o){return o.kind===e},createType(){const{AnnotatedType:o,StringType:n}=se();return new o(new n,{format:"int64"},!1)}})}}let q;function se(){return q||(q=O("ts-json-schema-generator"),q)}let _;function vt(){if(_)return _;try{const e=Q.dirname(O.resolve("ts-json-schema-generator/package.json"));_=O(O.resolve("typescript",{paths:[e]}))}catch{_=O("typescript")}return _}const E=new Map;function xt(){const e=process.env.APIGEN_PROGRAM_CACHE,t=e===void 0?NaN:Number(e);return Number.isFinite(t)&&t>=0?t:8}function wt(e){const t=E.get(e);return t&&(E.delete(e),E.set(e,t)),t}function jt(e,t){const r=xt();if(r!==0)for(E.delete(e),E.set(e,t);E.size>r;){const o=E.keys().next().value;E.delete(o)}}function At(e,t){return`${e}\0${t??""}`}const Pt=new Set(["zod",/^zod\/./]);function $t(e){for(const t of e.getImportDeclarations()){const r=t.getModuleSpecifierValue();for(const o of Pt)if(typeof o=="string"){if(r===o)return!0}else if(o.test(r))return!0}return!1}function Ot(e){for(const t of["$defs","definitions"]){const r=e[t];if(!r||typeof r!="object")continue;const o=Object.keys(r);if(o.length===0)continue;const n=new Set(o.filter(i=>/zod/i.test(i)));for(const[i,s]of Object.entries(r)){if(n.has(i)||typeof s!="object"||s===null)continue;const a=s,c=typeof a.$ref=="string"?a.$ref:"";if(c){for(const u of n)if(c.includes(u)){n.add(i);break}}}for(const i of n)delete r[i]}ae(e)}function ae(e,t){if(!e||typeof e!="object")return;const r=t??new WeakSet;if(!r.has(e)){r.add(e);for(const o of Object.keys(e))if(o==="$ref"&&typeof e[o]=="string"){const n=e[o];/zod/i.test(n)&&delete e[o]}for(const[,o]of Object.entries(e))if(typeof o=="object"&&o!==null)if(Array.isArray(o))for(const n of o)typeof n=="object"&&n!==null&&ae(n,r);else ae(o,r)}}function Nt(e){const t=new Set;for(const o of["$defs","definitions"]){const n=e[o];if(n&&typeof n=="object")for(const i of Object.keys(n))t.add(i)}const r=ce(e,t);if(r.length>0)throw new Error(`[apigen-core-client] Generated schema contains ${r.length} unresolvable $ref(s): ${r.join(", ")}. This usually means zod-internal definitions were stripped but $ref references to them remain. Check the source file's imports or the ts-json-schema-generator output.`)}function ce(e,t){if(!e||typeof e!="object")return[];const r=[];for(const[o,n]of Object.entries(e))if(o==="$ref"&&typeof n=="string"){const i=n.match(/#\/(?:\$defs|definitions)\/(.+)$/);i&&!t.has(i[1])&&r.push(n)}else if(typeof n=="object"&&n!==null)if(Array.isArray(n))for(const i of n)typeof i=="object"&&i!==null&&r.push(...ce(i,t));else r.push(...ce(n,t));return r}function kt(e){const t=e.anyOf;if(!Array.isArray(t)||t.length<2)return e;const r=t,o=X(r),n={...e};return delete n.anyOf,{...n,oneOf:r,...o?{discriminator:o}:{},[Z]:n[Z]??"union"}}function It(e,t,r){const{DEFAULT_CONFIG:o}=O("ts-json-schema-generator/dist/src/Config.js"),n={...o,...e},i=n.path,s=At(i,n.tsconfig);let a;a=r?r.statVersion(i):Fe(i);let c;if(s!==void 0){const l=(r==null?void 0:r.generatorCache.get(s))??wt(s);l&&l.version===a&&(c=l.gen)}if(!c){const{createProgram:l}=O("ts-json-schema-generator/dist/factory/program.js"),{createParser:f,createFormatter:m,SchemaGenerator:h}=se(),y=vt(),d=bt(y.SyntaxKind.BigIntKeyword,y.SyntaxKind.TypeReference),g=l(n),x=f(g,n,d),p=m(n);if(c=new h(g,x,p,n),r&&r.stats.generatorsBuilt++,s!==void 0&&a!==void 0){const T={version:a,gen:c};jt(s,T),r==null||r.generatorCache.set(s,T)}}const u=c.createSchema(n.type);return Ot(u),Nt(u),u}function Et(e,t){let r=e.trim();if(r=ze(r),t!=null&&t.size){const n=t.get(r);if(n!==void 0)return n}const o=r.match(/^ReadonlyArray<(.+)>$/);for(o&&(r=`${o[1].trim()}[]`);r.startsWith("readonly ");)r=r.slice(9).trim();return r}function Ve(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}const Ct=Object.entries(Ke).map(([e,t])=>({pattern:new RegExp(`import\\(["'][^"']*${Ve(e)}[^"']*["']\\)\\.\\w+`,"g"),key:t}));function ze(e){let t=e;for(const{pattern:r,key:o}of Ct)t=t.replace(r,o);return t}function Ft(e,t){let r=ze(e);for(const[o,n]of t)r=r.replace(new RegExp(`\\b${Ve(o)}\\b`,"g"),n);return r}async function N(e,t,r,o,n,i){const s=t.getFilePath(),a=`${s}\0${o??""}\0${r}`,c=i??new Set;if(c.has(a))return{};if(!n){const y=new Set(c);return y.add(a),we(e,t,r,o,void 0,y)}const u=n.schemaCache.get(a);if(u!==void 0)return n.stats.schemaCacheHits++,u;const l=rt(s,o,n.statVersion(s)),f=l.get(r);if(f!==void 0)return n.stats.schemaCacheHits++,n.schemaCache.set(a,Promise.resolve(f)),f;n.stats.schemaCacheMisses++;const m=new Set(c);m.add(a);const h=we(e,t,r,o,n,m).then(y=>(l.set(r,y),y)).catch(y=>{throw n.schemaCache.delete(a),y});return n.schemaCache.set(a,h),h}async function we(e,t,r,o,n,i){if(["void","undefined","null","Promise<void>"].includes(r))return{type:"null"};let s;if(n){const m=n.aliasCache.get(t);s=m??xe(t),m||n.aliasCache.set(t,s)}else s=xe(t);const a=Et(r,s),c=ie[a];if(c!==void 0)return c;const u=await St(a,m=>N(e,t,m,o,n,i));if(u!==void 0)return u;const l=(n==null?void 0:n.zodImportCache.get(t))??$t(t);if(n&&n.zodImportCache.set(t,l),!l)try{const m={path:t.getFilePath(),type:a,skipTypeCheck:!0,tsconfig:o,topRef:!1},h=It(m,!0,n);return kt(h)}catch{}try{const m=await gt(e,t,a,h=>Le(h,y=>N(e,t,y,o,n,i),0));if(m!==void 0)return m}catch{}const f=Ft(a,s);return H(f,0,s)}function pe(e,t,r){if(e!=null&&e.hasInitializer()){const o=e.getInitializer();if(o)return o.getText()}return Rt(r,t)}function Rt(e,t){var s;const r=e,o=((s=r==null?void 0:r.getJsDocs)==null?void 0:s.call(r))??[],n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`\\[\\s*${n}\\s*=\\s*([^\\]]+)\\]`);for(const a of o)for(const c of a.getTags()){if(c.getTagName()!=="param")continue;const u=c.getText().match(i);if(u)return u[1].trim()}}function _t(e){const t=e.trim(),r=t.match(/^(['"`])([\s\S]*)\1$/);if(r)return r[2];if(t==="true")return!0;if(t==="false")return!1;if(t==="null")return null;if(t!=="undefined"){if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);try{return JSON.parse(t)}catch{return t}}}function Lt(e,t){const r=_t(t);if(r===void 0)return;e.default=r;const o=typeof r=="string"?r:JSON.stringify(r),n=typeof e.description=="string"?e.description:void 0;e.description=n?`${n} (default: ${o})`:`(default: ${o})`}let B;function Mt(){return B||(B=O("ts-morph").SyntaxKind,B)}function Y(e){try{if(!e)return;const t=Mt();if(e.getKind()!==t.TypeReference)return;const r=e;if(r.getTypeArguments().length>0)return;const o=r.getTypeName();if(o.getKind()!==t.Identifier)return;const i=o.getSymbol();if(!i)return;const s=i.getDeclarations().find(f=>f.getKindName()==="TypeAliasDeclaration");if(!s)return;const a=s,c=a.getType();if(!(c.isString()||c.isNumber()||c.isBoolean()))return;const l=a.getJsDocs();for(const f of l)for(const m of f.getTags())if(m.getTagName()==="format"){const h=m.getCommentText();if(h!==void 0)return h.trim()}return}catch{return}}const Kt=new Set(["AsyncGenerator","AsyncIterableIterator","AsyncIterable","Generator","IterableIterator","Iterable","ApiStream"]);function Vt(e){const t=[];let r=0,o="";for(const n of e)n==="<"||n==="("||n==="["||n==="{"?r++:(n===">"||n===")"||n==="]"||n==="}")&&r--,n===","&&r===0?(t.push(o.trim()),o=""):o+=n;return o.trim().length>0&&t.push(o.trim()),t}function me(e){const t=e.trim(),r=t.indexOf("<");if(r===-1||!t.endsWith(">"))return null;const o=t.slice(0,r),n=o.includes(".")?o.slice(o.lastIndexOf(".")+1):o;if(!Kt.has(n))return null;let i=0;for(let c=r;c<t.length;c++){const u=t[c];if(u==="<")i++;else if(u===">"&&(i--,i===0&&c!==t.length-1))return null}if(i!==0)return null;const s=t.slice(r+1,-1),a=Vt(s);return a.length>0?a[0]:null}async function zt(e){const t=e.session===void 0,r=Re(e.session??fe());try{return await qt(e,r)}finally{t&&r.dispose()}}async function qt(e,t){const{sourceFile:r,namespace:o="",dropFileSegment:n=!1,tsconfig:i}=e,s=t.projectFor(i),a=t.sourceFileFor(r,i),c=Q.basename(r),u=k(Dt(c)),l=n?null:u,f=k(o),m=[];for(const[d,g]of a.getExportedDeclarations()){if(d==="default"||U(d))continue;const x=Wt(g);if(x){const S=x.getSignature(),j=Pe(S,x),b=S.getReturnType().getText(),A=F(S);m.push(await D(s,a,f,l,d,j,b,x.isAsync(),i,t,A));continue}const p=g.find(S=>S.getKindName()==="VariableDeclaration");if(!p)continue;const T=p.getInitializer(),w=T==null?void 0:T.getKindName();if(T&&["ArrowFunction","FunctionExpression"].includes(w??"")){const j=p.getType().getCallSignatures();if(j.length===0)continue;const b=j[0],A=$e(b,p,p.getVariableStatement()),P=b.getReturnType().getText(),v=F(b),$=T.isAsync();m.push(await D(s,a,f,l,d,A,P,$,i,t,v))}else if(w==="ObjectLiteralExpression"){const S=p.getType();for(const j of S.getProperties()){const b=j.getName();if(U(b))continue;const P=j.getTypeAtLocation(p).getCallSignatures();if(P.length===0)continue;const v=P[0],$=$e(v,p,p.getVariableStatement()),C=v.getReturnType().getText(),K=F(v),V=[...l?[l]:[],k(d),k(b)];m.push(await J(s,a,f,V,b,$,C,!1,i,t,K))}}else{const S=p.getType(),j=S.getText();if(R(S,p)){const b=await N(s,a,j,i,t);m.push(Bt(f,l,d,b))}else console.warn(`[apigen-core] Skipping non-callable, non-serializable export: ${d}`)}}const h=a.getDefaultExportSymbol();if(h){const d=a.getExportAssignment(g=>!g.isExportEquals());if(d){const g=d.getExpression(),x=g.getKindName();if(["ArrowFunction","FunctionExpression"].includes(x)){const T=g.getType().getCallSignatures();if(T.length>0){const w=T[0],S=te(w,d),j=w.getReturnType().getText(),b=F(w),A=g.isAsync();m.push(await D(s,a,f,l,"default",S,j,A,i,t,b))}}else{const p=g.getType();for(const T of p.getProperties()){const w=T.getName();if(U(w))continue;const j=T.getTypeAtLocation(d).getCallSignatures();if(j.length===0)continue;const b=j[0],A=te(b,d),P=b.getReturnType().getText(),v=F(b),$=[...l?[l]:[],k("default"),k(w)];m.push(await J(s,a,f,$,w,A,P,!1,i,t,v))}}}else{const g=h.getDeclarations();for(const x of g){if(x.getKindName()!=="FunctionDeclaration")continue;const p=x,T=p.getName(),w=T&&T.length>0?T:"default",S=p.getSignature(),j=Pe(S,p),b=S.getReturnType().getText(),A=F(S);m.push(await D(s,a,f,l,w,j,b,p.isAsync(),i,t,A))}}}const y=Ut(a);if(y.length>0)for(const{name:d,sig:g}of y){if(U(d))continue;const x=te(g),p=g.getReturnType().getText(),T=F(g),w=[...l?[l]:[],k(d)];m.push(await J(s,a,f,w,d,x,p,!1,i,t,T))}return m}function je(e,t,r,o){const n=new Set,i=s=>{if(Array.isArray(s))return s.map(i);if(!s||typeof s!="object"||n.has(s))return s;n.add(s);try{const a=s,c={};for(const[u,l]of Object.entries(a)){if(u==="definitions"||u==="$defs"){const f=u,m=t[f];for(const[h,y]of Object.entries(l)){const d=i(y),g=m[h];if(g!==void 0&&JSON.stringify(g)!==JSON.stringify(d))throw new Error(`[apigen-core-client] Function "${r}": param "${o}" contributes a "${f}.${h}" definition that conflicts with an identically-named definition already hoisted from another param/output in the same function. Two structurally different types share the same generated definition key, so apigen cannot safely merge them into one function-level schema.`);m[h]=d}continue}c[u]=i(l)}return c}finally{n.delete(s)}};return i(e)}function Ae(e,t){if(!t||e.format!==void 0||"$ref"in e||"properties"in e||"items"in e)return;const r=e.type;(r==="string"||r==="number"||r==="integer"||r==="boolean")&&(e.format=t)}function F(e){var t;try{return Y((t=e.getDeclaration())==null?void 0:t.getReturnTypeNode())}catch{return}}async function D(e,t,r,o,n,i,s,a,c,u,l){const f=k(n);return J(e,t,r,o?[o,f]:[f],n,i,s,a,c,u,l)}async function J(e,t,r,o,n,i,s,a,c,u,l){const f=i.length>0&&i[0].name==="ctx",m=i.filter(v=>v.name!=="ctx"),h=m.filter(v=>!v.optional).map(v=>v.name),y={},d={definitions:{},$defs:{}};for(const v of m){const $=await N(e,t,v.type,c,u),C=je($,d,n,v.name);v.defaultValue!==void 0&&Lt(C,v.defaultValue),Ae(C,v.format),y[v.name]=C}const g=s.replace(/^Promise<(.+)>$/,"$1").trim(),x=me(g),p=x!==null,T=p?x:g,w=await N(e,t,T,c,u),S={definitions:{},$defs:{}},j=je(w,S,n,"<return>"),b=l?{...j}:j;Ae(b,l),Object.keys(S.definitions).length>0&&(b.definitions={...b.definitions,...S.definitions}),Object.keys(S.$defs).length>0&&(b.$defs={...b.$defs,...S.$defs});const A={type:"object",properties:y,required:h,...Object.keys(d.definitions).length>0?{definitions:d.definitions}:{},...Object.keys(d.$defs).length>0?{$defs:d.$defs}:{}};return{id:qe(r,o),host:"ts",namespace:r,path:o,kind:"action",async:a,streaming:p,safe:!1,input:A,output:b,envelope:{},typeText:{lang:"ts",input:Gt(i),output:T},...f?{hasCtx:!0}:{}}}function Bt(e,t,r,o){const n=k(r),i=t?[t,n]:[n];return{id:qe(e,i),host:"ts",namespace:e,path:i,kind:"query",async:!1,streaming:!1,safe:!0,input:{type:"object",properties:{},required:[]},output:o,envelope:{},typeText:null}}function qe(e,t){return(e.raw?[e,...t]:t).map(o=>o.words.join("-")).join("/")}function de(e){return e.split(/[-_.]+/).flatMap(t=>t.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").split("_").filter(Boolean)).map(t=>t.toLowerCase()).filter(Boolean)}function k(e){return{raw:e,words:de(e)}}function Dt(e){return e.replace(/\.[^.]+$/,"").replace(/[._]+/g,"-")}function Ut(e){const t=[];for(const r of e.getStatements()){if(r.getKindName()!=="ExpressionStatement")continue;const o=r.getExpression();if(o.getKindName()!=="BinaryExpression")continue;const n=o;if(n.getLeft().getText().trim()!=="module.exports"||n.getOperatorToken().getKindName()!=="EqualsToken")continue;const s=n.getRight(),a=s.getType();for(const c of a.getProperties()){const l=c.getTypeAtLocation(s).getCallSignatures();l.length!==0&&t.push({name:c.getName(),sig:l[0]})}}return t}function Wt(e){let t;for(const r of e){if(r.getKindName()!=="FunctionDeclaration")continue;const o=r;if(t||(t=o),o.getBody())return o}return t}function Pe(e,t){return e.getParameters().map(r=>{var s;const o=r.getDeclarations(),n=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=r.isOptional()||((n==null?void 0:n.hasInitializer())??!1)||(((s=n==null?void 0:n.hasQuestionToken)==null?void 0:s.call(n))??!1);return{name:r.getName(),type:r.getTypeAtLocation(e.getDeclaration()).getText(),optional:i,defaultValue:pe(n,r.getName(),t),format:Y(n==null?void 0:n.getTypeNode())}})}function $e(e,t,r){return e.getParameters().map(o=>{var a;const n=o.getDeclarations(),i=n.length>0&&n[0].getKindName()==="Parameter"?n[0]:null,s=o.isOptional()||((i==null?void 0:i.hasInitializer())??!1)||(((a=i==null?void 0:i.hasQuestionToken)==null?void 0:a.call(i))??!1);return{name:o.getName(),type:o.getTypeAtLocation(t).getText(),optional:s,defaultValue:pe(i,o.getName(),r??t),format:Y(i==null?void 0:i.getTypeNode())}})}function te(e,t){return e.getParameters().map(r=>{var s,a,c;const o=r.getDeclarations(),n=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=r.isOptional()||((n==null?void 0:n.hasInitializer())??!1)||(((s=n==null?void 0:n.hasQuestionToken)==null?void 0:s.call(n))??!1);return{name:r.getName(),type:n?n.getType().getText():((c=(a=r.getValueDeclaration())==null?void 0:a.getType())==null?void 0:c.getText())??"unknown",optional:i,defaultValue:pe(n,r.getName(),t),format:Y(n==null?void 0:n.getTypeNode())}})}function Gt(e){const t=e.filter(r=>r.name!=="ctx");return t.length===0?"()":"("+t.map(r=>`${r.name}${r.optional?"?":""}: ${r.type}`).join(", ")+")"}function U(e){return!!(e==="__samples__"||e.startsWith("__"))}function R(e,t,r=new Set){if(e.getCallSignatures().length>0||e.getConstructSignatures().length>0)return!1;if(e.isString()||e.isNumber()||e.isBoolean()||e.isNull()||e.isUndefined()||e.isStringLiteral()||e.isNumberLiteral()||e.isBooleanLiteral()||e.isEnumLiteral())return!0;if(e.isArray()||e.isReadonlyArray()){const o=e.getArrayElementType();return o?R(o,t,r):!1}if(e.isTuple())return e.getTupleElements().every(o=>R(o,t,r));if(e.isUnion())return e.getUnionTypes().every(o=>R(o,t,r));if(e.isIntersection())return e.getIntersectionTypes().every(o=>R(o,t,r));if(e.isObject()){const o=e.getText(t);if(r.has(o))return!0;r.add(o);const n=e.getStringIndexType(),i=e.getNumberIndexType();if(n||i)return[n,i].every(a=>!a||R(a,t,r));const s=e.getProperties();return s.length===0?!0:s.every(a=>{const c=a.getTypeAtLocation(t);return R(c,t,r)})}return!1}function Be(e,t){return async r=>{let o=()=>t(r);for(let n=e.length-1;n>=0;n--){const i=e[n],s=o;o=()=>i(r,s)}return o()}}function De(e,t){return Be(e,t)}function Ht(e,t,r={}){const o=e.map(n=>n.capabilities.extractLayer).filter(n=>!!n).map(n=>n.createLayer?n.createLayer(r):n.layer).filter(n=>!!n);return De(o,t)}let W;function Jt(){return W||(W=O("ts-morph").Scope,W)}async function Zt(e){const t=e.session===void 0,r=Re(e.session??fe());try{return await Qt(e,r)}finally{t&&r.dispose()}}async function Qt(e,t){const{sourceFile:r,namespace:o="",tsconfig:n,includeInstances:i=!1}=e,s=t.projectFor(n),a=t.sourceFileFor(r,n),c=Q.basename(r),u=L(Yt(c)),l=L(o),f=[];for(const[m,h]of a.getExportedDeclarations()){const y=h.find(p=>p.getKindName()==="ClassDeclaration");if(!y)continue;const d=m==="default"?y.getName():m;if(!d||re(d))continue;const g=L(d),x=Jt();for(const p of y.getStaticMethods()){const T=p.getName();if(re(T))continue;const w=p.getScope();if(w===x.Private||w===x.Protected)continue;const S=p.getSignature(),j=ne(S,p),b=S.getReturnType().getText(),A=p.isAsync(),P=[u,g,L(T)];f.push(await Xt(s,a,l,P,j,b,A,n,t))}if(i){{const T=y.getConstructors()[0]??null;let w=[];if(T){const v=T.getSignature();w=ne(v,T)}const S=[u,g],j=ue(l,S),b=w.filter(v=>v.name!=="ctx"),A=b.filter(v=>!v.optional).map(v=>v.name),P={};for(const v of b)P[v.name]=await N(s,a,v.type,n,t);f.push({id:j,host:"ts",namespace:l,path:S,kind:"constructor",async:!1,streaming:!1,safe:!1,input:{type:"object",properties:P,required:A},output:{type:"object",properties:{instanceId:{type:"string"}},required:["instanceId"]},envelope:{},typeText:{lang:"ts",input:en(w),output:"{ instanceId: string }"}})}for(const p of y.getInstanceMethods()){const T=p.getName();if(re(T))continue;const w=p.getScope();if(w===x.Private||w===x.Protected)continue;const S=p.getSignature(),j=ne(S,p),b=S.getReturnType().getText(),A=p.isAsync(),P=[u,g,L(T)],v=ue(l,P),$=j.filter(I=>I.name!=="ctx"),C=$.filter(I=>!I.optional).map(I=>I.name),K={};for(const I of $)K[I.name]=await N(s,a,I.type,n,t);const V=b.replace(/^Promise<(.+)>$/,"$1").trim(),ge=me(V),ye=ge!==null,he=ye?ge:V,Xe=await N(s,a,he,n,t);f.push({id:v,host:"ts",namespace:l,path:P,kind:"instance-method",async:A,streaming:ye,safe:!1,input:{type:"object",properties:K,required:C},output:Xe,envelope:{type:"object",properties:{instanceId:{type:"string"}},required:["instanceId"]},typeText:{lang:"ts",input:Ue(j),output:he}})}}}return f}async function Xt(e,t,r,o,n,i,s,a,c){const u=n.filter(p=>p.name!=="ctx"),l=u.filter(p=>!p.optional).map(p=>p.name),f={};for(const p of u)f[p.name]=await N(e,t,p.type,a,c);const m=i.replace(/^Promise<(.+)>$/,"$1").trim(),h=me(m),y=h!==null,d=y?h:m,g=await N(e,t,d,a,c);return{id:ue(r,o),host:"ts",namespace:r,path:o,kind:"action",async:s,streaming:y,safe:!1,input:{type:"object",properties:f,required:l},output:g,envelope:{},typeText:{lang:"ts",input:Ue(n),output:d}}}function ue(e,t){return(e.raw?[e,...t]:t).map(o=>o.words.join("-")).join("/")}function L(e){return{raw:e,words:de(e)}}function Yt(e){return e.replace(/\.[^.]+$/,"").replace(/[._]+/g,"-")}function ne(e,t){return e.getParameters().map(r=>{var s;const o=r.getDeclarations(),n=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=r.isOptional()||((n==null?void 0:n.hasInitializer())??!1)||(((s=n==null?void 0:n.hasQuestionToken)==null?void 0:s.call(n))??!1);return{name:r.getName(),type:r.getTypeAtLocation(t).getText(),optional:i}})}function Ue(e){const t=e.filter(r=>r.name!=="ctx");return t.length===0?"()":"("+t.map(r=>`${r.name}${r.optional?"?":""}: ${r.type}`).join(", ")+")"}function en(e){return e.length===0?"()":"("+e.map(t=>`${t.name}${t.optional?"?":""}: ${t.type}`).join(", ")+")"}function re(e){return!!(e==="__samples__"||e.startsWith("__")||e.startsWith("_"))}const tn=new Map([[".ts","ts"],[".tsx","ts"],[".mts","ts"],[".cts","ts"],[".py","py"],[".rs","rust"],[".go","go"],[".java","java"]]);function We(e){const t=nt.extname(e).toLowerCase();return tn.get(t)}function Ge(e){return e.language??"ts"}function He(e,t){const r=We(t);return r===void 0?!1:r===Ge(e)}function nn(e,t){return t.filter(r=>He(e,r))}function rn(e){return{oneOf:[{type:"object",required:["index","status","value"],properties:{index:{type:"integer"},status:{type:"string",enum:["fulfilled"]},value:e}},{type:"object",required:["index","status","chunks"],properties:{index:{type:"integer"},status:{type:"string",enum:["fulfilled"]},chunks:{type:"array"}}},{type:"object",required:["index","status","reason"],properties:{index:{type:"integer"},status:{type:"string",enum:["rejected"]},reason:{},chunksDelivered:{type:"integer"}}}]}}function Je(e){return{operationConst:e.id,itemsSchema:e.input,resultSchema:rn(e.output)}}function Ze(e,t={}){const r=new Set(t.exclude??[]),o=new Map;for(const n of e){if(r.has(n.id))continue;const i=o.get(n.kind);i?i.push(n):o.set(n.kind,[n])}return o}function Oe(e){return{type:"string",enum:[e]}}function Ne(e,t){return{type:"object",required:["input"],properties:{input:{type:"object",required:["operation","items"],properties:{operation:t,items:{type:"array",items:e.itemsSchema},concurrency:{type:"number"},mode:{type:"string",enum:["parallel","serial","chained"]},onItemError:{type:"string",enum:["continue","abort"]},itemTimeoutMs:{type:"number"}},additionalProperties:!0}},additionalProperties:!1}}function ke(e,t){const r={},o={},n=[["definitions",r],["$defs",o]];for(const i of e){const s=t(i);for(const[a,c]of n){const u=s[a];if(u)for(const[l,f]of Object.entries(u)){const m=c[l];if(m!==void 0&&JSON.stringify(m)!==JSON.stringify(f))throw new Error(`[apigen-core-client] _batch mount: operation "${i.id}" contributes a "${a}.${l}" definition that conflicts with an identically-named definition already hoisted from another batched operation. Two structurally different types share the same generated definition key, so apigen cannot safely merge them into one _batch/<kind> schema.`);c[l]=f}}}return{...Object.keys(r).length>0?{definitions:r}:{},...Object.keys(o).length>0?{$defs:o}:{}}}function Qe(e){if(e.length===0)throw new Error("buildBatchKindSchema: at least one operation is required");const t=e.map(Je),r=ke(e,s=>s.input),o=ke(e,s=>s.output);if(e.length===1){const[s]=e,[a]=t;return{input:{...Ne(a,Oe(s.id)),...r},output:{type:"array",items:a.resultSchema,...o}}}const n=e.map((s,a)=>Ne(t[a],Oe(s.id))),i=X(n);return{input:{oneOf:n,...i?{discriminator:i}:{},...r},output:{oneOf:t.map(s=>({type:"array",items:s.resultSchema})),...o},...i?{discriminator:i}:{}}}function on(e,t={}){const r=Ze(e.operations,t),o=[];for(const[n,i]of r){const{input:s,output:a}=Qe(i),c=Ie(`_batch/${n}`,e,{kind:n,safe:n==="query",input:s,output:a});o.push({...c,operationIds:i.map(u=>u.id)})}return o}exports.buildBatchKindSchema=Qe;exports.buildBatchMountedOperations=on;exports.clearPersistentProjectCache=ot;exports.collectLocalImportPaths=st;exports.composeOnion=Be;exports.composeSchemas=ft;exports.createExtractInvoker=De;exports.createExtractInvokerFromPlugins=Ht;exports.createExtractionSession=fe;exports.deriveBatchOperationBranch=Je;exports.effectiveLanguage=Ge;exports.extract=zt;exports.extractClasses=Zt;exports.groupBatchableOperationsByKind=Ze;exports.isPrimitiveOnlyInputSchema=_e;exports.languageOfSource=We;exports.pluginConsumesSource=He;exports.pluginsToEnvelopeMiddlewares=ct;exports.sourcesForPlugin=nn;exports.syntheticOp=Ie;exports.tokenize=de;
|