@adhd/apigen-core-client 0.2.2 → 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.d.ts +4 -2
- package/index.js +1 -1
- package/index.mjs +1017 -779
- package/lib/batch.d.ts +0 -15
- package/lib/esm-require.d.ts +23 -0
- package/lib/extract-invoker.d.ts +90 -0
- package/lib/extraction-session.d.ts +18 -0
- package/lib/format-alias.d.ts +35 -0
- package/lib/plugin.d.ts +63 -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.d.ts
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
export type { GeneratedSchemas, ComposedSchemas, ExportMode, PluginInput, PluginOutput, RunInput, OutputPlugin, PluginLanguage, } from './lib/types';
|
|
2
2
|
export type { Operation, OperationKind, Segment, TypeText, JSONSchema, ApigenSchemaHints, } from './lib/descriptor';
|
|
3
|
-
export type { Plugin, TargetCapability, LayerCapability, MountCapability, MountedOperation, MountHostBridge, MountHostBridgeInvokeOptions, EnvelopeCapability, Call, Next, Result, Chunk, Transport, Extensions, Descriptor, Harness, Server, File, SyntheticOpFields, } from './lib/plugin';
|
|
3
|
+
export type { Plugin, TargetCapability, LayerCapability, ExtractLayerCapability, MountCapability, MountedOperation, MountHostBridge, MountHostBridgeInvokeOptions, EnvelopeCapability, Call, Next, Result, Chunk, Transport, Extensions, Descriptor, Harness, Server, File, SyntheticOpFields, } from './lib/plugin';
|
|
4
4
|
export { syntheticOp } from './lib/plugin';
|
|
5
5
|
export type { Logger } from 'pino';
|
|
6
|
-
export { createExtractionSession, clearPersistentProjectCache, } from './lib/extraction-session';
|
|
6
|
+
export { createExtractionSession, clearPersistentProjectCache, collectLocalImportPaths, } from './lib/extraction-session';
|
|
7
7
|
export type { ExtractionSession, ISessionStats, } from './lib/extraction-session';
|
|
8
8
|
export { composeSchemas, pluginsToEnvelopeMiddlewares, } from './lib/compose-schemas';
|
|
9
9
|
export { isPrimitiveOnlyInputSchema } from './lib/get-safety';
|
|
10
10
|
export { extract, tokenize } from './lib/extract';
|
|
11
11
|
export type { ExtractOptions } from './lib/extract';
|
|
12
|
+
export { composeOnion, createExtractInvoker, createExtractInvokerFromPlugins, } from './lib/extract-invoker';
|
|
13
|
+
export type { ExtractCall, ExtractResult, ExtractMiddleware, } from './lib/extract-invoker';
|
|
12
14
|
export { extractClasses } from './lib/extract-classes';
|
|
13
15
|
export type { ExtractClassesOptions } from './lib/extract-classes';
|
|
14
16
|
export { languageOfSource, pluginConsumesSource, sourcesForPlugin, effectiveLanguage, } from './lib/source-language';
|
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var Re=Object.create;var oe=Object.defineProperty;var _e=Object.getOwnPropertyDescriptor;var Le=Object.getOwnPropertyNames;var Me=Object.getPrototypeOf,qe=Object.prototype.hasOwnProperty;var Ve=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Le(t))!qe.call(e,r)&&r!==n&&oe(e,r,{get:()=>t[r],enumerable:!(o=_e(t,r))||o.enumerable});return e};var ze=(e,t,n)=>(n=e!=null?Re(Me(e)):{},Ve(t||!e||!e.__esModule?oe(n,"default",{value:e,enumerable:!0}):n,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("ts-morph"),Ke=require("node:fs"),D=require("node:path"),E=require("ts-json-schema-generator");function Be(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const De=Be(D);function ie(e){return{raw:e,words:e.split(/(?=[A-Z])|[-_]/).map(t=>t.toLowerCase()).filter(Boolean)}}function de(e,t,n={}){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[r,...i]=o,s=r.replace(/^_+/,""),a=n.kind??"action",c={id:e,host:t.host,namespace:ie(s),path:i.map(ie),kind:a,async:n.async??!1,streaming:n.streaming??!1,safe:n.safe??a==="query",input:n.input??{},output:n.output??{},envelope:n.envelope??{},typeText:n.typeText??null};return n.hasCtx!==void 0&&(c.hasCtx=n.hasCtx),n.transports!==void 0&&(c.transports=n.transports),c}const ye=Symbol.for("adhd.apigen.extraction-session");function he(e,t){const n=[...e.getImportDeclarations().map(o=>o.getModuleSpecifierSourceFile()),...e.getExportDeclarations().map(o=>o.getModuleSpecifierSourceFile())];for(const o of n){if(!o)continue;const r=o.getFilePath();if(!r.includes("/node_modules/")&&!t.has(r)){t.add(r);try{o.refreshFromFileSystemSync()}catch{}he(o,t)}}}function Te(e){try{const t=Ke.statSync(e);return`${t.mtimeMs}:${t.size}`}catch{return"nostat"}}const _=new Map,J=new Map;function We(e,t,n){const o=t??"",r=_.get(o);let i=n;if(r&&r.fileVersions.size>0){const c=[n],l=[...r.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=J.get(s);return(!a||a.version!==i)&&(a={version:i,schemas:new Map},J.set(s,a)),a.schemas}function Ue(){_.clear(),J.clear()}function te(){const e={projectsBuilt:0,generatorsBuilt:0,schemaCacheHits:0,schemaCacheMisses:0},t=new Map;let n=!1;return{[ye]:!0,stats:e,schemaCache:new Map,aliasCache:new WeakMap,zodImportCache:new WeakMap,generatorCache:new Map,projectFor(r){if(n)throw new Error("apigen-core: ExtractionSession used after dispose()");const i=r??"",s=r?this.statVersion(r):"";let a=_.get(i);return a&&a.tsconfigVersion!==s&&(a=void 0),a||(a={project:r?new I.Project({tsConfigFilePath:r,skipAddingFilesFromTsConfig:!0}):new I.Project({skipAddingFilesFromTsConfig:!0}),tsconfigVersion:s,fileVersions:new Map},_.set(i,a),e.projectsBuilt++),a.project},sourceFileFor(r,i){const s=this.projectFor(i),a=_.get(i??""),c=this.statVersion(r);let l=s.getSourceFile(r);if(l===void 0?l=s.addSourceFileAtPath(r):a&&a.fileVersions.get(r)!==c&&l.refreshFromFileSystemSync(),a==null||a.fileVersions.set(r,c),a){const u=new Set([r]);he(l,u);for(const f of u)f!==r&&a.fileVersions.set(f,this.statVersion(f))}return l},statVersion(r){let i=t.get(r);return i===void 0&&(i=Te(r),t.set(r,i)),i},dispose(){n=!0,this.schemaCache.clear(),this.generatorCache.clear(),t.clear()}}}function be(e){const t=e;if(t[ye]!==!0)throw new Error("apigen-core: unknown ExtractionSession implementation — create sessions with createExtractionSession()");return t}const B="x-apigen-logical";function se(e,t){const n=new Set,o=[e];for(;o.length>0;){const r=o.pop();if(!r||n.has(r))continue;n.add(r);const i=r.$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=r.oneOf;if(Array.isArray(s))for(const f of s)typeof f=="object"&&f!==null&&o.push(f);const a=r.properties;if(a)for(const f of Object.values(a))o.push(f);const c=r.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=r.additionalProperties;typeof l=="object"&&l!==null&&o.push(l);const u=r.propertyNames;typeof u=="object"&&u!==null&&o.push(u)}}const ae=new Set(["string","number","boolean","integer"]);function Ge(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:n}=t;return typeof n=="string"?ae.has(n):Array.isArray(n)?n.every(o=>ae.has(o)||o==="null"):Array.isArray(t.enum)&&t.enum.length>0?t.enum.every(o=>["string","number","boolean"].includes(typeof o)):!1}function Se(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(Ge)}function Ze(e){var n,o;const t=[];for(const r of e){const i={...(n=r.capabilities.layer)==null?void 0:n.envelopeFields,...(o=r.capabilities.envelope)==null?void 0:o.request};Object.keys(i).length>0&&t.push({id:r.id,envelope:i})}return t}function He(e){const t={},n=o=>{for(const r of["definitions","$defs"]){const i=o[r];if(i)for(const[s,a]of Object.entries(i)){const c=s.startsWith("#/")?s:`#/${r}/${s}`;t[c]=a}}};for(const o of Object.values(e.schemas))n(o.input),n(o.output);if(Object.keys(t).length!==0)for(const[o,r]of Object.entries(e.schemas))try{se(r.input,t),se(r.output,t)}catch(i){throw new Error(`[apigen-core-client] Schema validation failed for function "${o}": ${i.message}`)}}function Je(e,t){const n=['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&&n.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.`),n.join(" ")}function Qe(e,t,n){He(e);const o={};for(const[r,i]of Object.entries(e.schemas)){const s=(n==null?void 0:n[r])??{},a=i.input.properties??{},c=i.input.required??[],l={},u=[],f={};for(const b of t)if(b.envelope&&s[b.id]!==!1)for(const[y,h]of Object.entries(b.envelope))l[y]=h,f[y]=b.id,u.includes(y)||u.push(y);const p={type:"object",properties:a,additionalProperties:!1,...c.length>0?{required:c}:{}},T=i.safe===!0||Se(i.input),d=i.input.definitions,m=i.input.$defs;o[r]={input:{type:"object",properties:{...l,data:p},required:[...u,...c.length>0?["data"]:[]],additionalProperties:!1,description:Je(Object.keys(l),Object.keys(a).length>0),...d?{definitions:d}:{},...m?{$defs:m}:{}},output:i.output,...i.hasCtx?{hasCtx:!0}:{},"x-apigen-safe":T,...Object.keys(f).length>0?{"x-apigen-envelope":f}:{}}}return o}const Xe=8;function Ye(e,t){try{return t?e.getText(t):e.getText()}catch{try{return e.getText()}catch{return}}}let et=0;async function tt(e,t,n,o){const r=`__ApigenProbe_${process.pid}_${et++}`;let i;try{i=t.addTypeAlias({name:r,type:n});const s=i.getType();return await o(s)}catch{return}finally{try{i==null||i.remove()}catch{}}}async function ve(e,t,n){if(n>Xe)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=>ve(c,t,n+1))),a=W(s);return{oneOf:s,...a?{discriminator:a}:{},[B]:"union"}}if(e.isArray()){const o=e.getArrayElementType();return{type:"array",items:o?await t(o.getText()):{}}}if(e.isTuple()){const o=e.getTupleElements(),r=await Promise.all(o.map(i=>t(i.getText())));return{type:"array",items:r,minItems:r.length,maxItems:r.length}}if(e.isObject()){const o=e.getStringIndexType(),r=e.getNumberIndexType(),i=o??r,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 T;if(p)try{T=l.getTypeAtLocation(p)}catch{T=void 0}if(T!==void 0&&T.getCallSignatures().length>0)continue;const d=T!==void 0?Ye(T,p):void 0;a[u]=d!==void 0?await t(d):{},l.isOptional()||c.push(u)}return Object.keys(a).length>0?{type:"object",properties:a,...c.length>0?{required:c}:{}}:{}}return{}}function W(e){if(e.length<2)return;const t=[];for(const o of e){if(o.type!=="object")return;const r=o.properties;if(!r||typeof r!="object")return;t.push(r)}const n=Object.keys(t[0]).filter(o=>t.every(r=>Object.prototype.hasOwnProperty.call(r,o)));for(const o of n){const r=[];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}r.push(String(u[0]))}if(!i||new Set(r).size!==r.length)continue;const s={};return r.forEach((a,c)=>{s[a]=`#/oneOf/${c}`}),{propertyName:o,mapping:s}}}function z(e,t,n){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 r=Q[o];if(r!==void 0)return r;if(n!=null&&n.size){const i=n.get(o);if(i!==void 0){const s=Q[i];if(s!==void 0)return s}}if(o.endsWith("[]"))return{type:"array",items:z(o.slice(0,-2),t+1,n)};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=>z(c,t+1,n)),a=W(s);return{oneOf:s,...a?{discriminator:a}:{},[B]:"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("?","")]=z(l,t+1,n))}return{type:"object",properties:s}}return{}}function xe(e){const t=[];let n=0,o=0;for(let i=0;i<e.length;i++){const s=e[i];s==="<"||s==="["||s==="{"||s==="("?n++:s===">"||s==="]"||s==="}"||s===")"?n--:s===","&&n===0&&(t.push(e.slice(o,i).trim()),o=i+1)}const r=e.slice(o).trim();return r.length>0&&t.push(r),t}function nt(e){const t=/^(?:Readonly)?Map<(.+)>$/.exec(e);return t?t[1]:void 0}function rt(e){const t=/^(?:Readonly)?Set<(.+)>$/.exec(e);return t?t[1]:void 0}function ot(e){let t=e.trim();if(t.startsWith("readonly ")&&(t=t.slice(9).trim()),!t.startsWith("[")||!t.endsWith("]"))return;const n=t.slice(1,-1).trim();if(n.length!==0)return xe(n)}async function it(e,t){const n=e.trim(),o=nt(n);if(o!==void 0){const s=xe(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 r=rt(n);if(r!==void 0)return{type:"array",items:await t(r),uniqueItems:!0};const i=ot(n);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 we={"decimal.js":"Decimal"},Q={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"}},ce={Uint8Array:"byte",Buffer:"byte",Decimal:"decimal"};function ue(e){var n;const t=new Map;for(const o of e.getImportDeclarations()){const r=o.getModuleSpecifierValue(),i=we[r];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=((n=a.getAliasNode())==null?void 0:n.getText())??a.getName();c!==i&&t.set(c,i)}}return t}function st(e,t){return n=>{n.addNodeParser({supportsNode(o){var i,s,a;if(o.kind!==t)return!1;const r=((i=o.typeName)==null?void 0:i.escapedText)??((a=(s=o.typeName)==null?void 0:s.right)==null?void 0:a.escapedText);return r!==void 0&&Object.prototype.hasOwnProperty.call(ce,r)},createType(o){var i,s,a;const r=((i=o.typeName)==null?void 0:i.escapedText)??((a=(s=o.typeName)==null?void 0:s.right)==null?void 0:a.escapedText);return new E.AnnotatedType(new E.StringType,{format:ce[r]},!1)}}),n.addNodeParser({supportsNode(o){return o.kind===e},createType(){return new E.AnnotatedType(new E.StringType,{format:"int64"},!1)}})}}let F;function at(){if(F)return F;try{const e=D.dirname(require.resolve("ts-json-schema-generator/package.json"));F=require(require.resolve("typescript",{paths:[e]}))}catch{F=require("typescript")}return F}const k=new Map;function ct(){const e=process.env.APIGEN_PROGRAM_CACHE,t=e===void 0?NaN:Number(e);return Number.isFinite(t)&&t>=0?t:8}function ut(e){const t=k.get(e);return t&&(k.delete(e),k.set(e,t)),t}function lt(e,t){const n=ct();if(n!==0)for(k.delete(e),k.set(e,t);k.size>n;){const o=k.keys().next().value;k.delete(o)}}function ft(e,t){return`${e}\0${t??""}`}const pt=new Set(["zod",/^zod\/./]);function mt(e){for(const t of e.getImportDeclarations()){const n=t.getModuleSpecifierValue();for(const o of pt)if(typeof o=="string"){if(n===o)return!0}else if(o.test(n))return!0}return!1}function gt(e){for(const t of["$defs","definitions"]){const n=e[t];if(!n||typeof n!="object")continue;const o=Object.keys(n);if(o.length===0)continue;const r=new Set(o.filter(i=>/zod/i.test(i)));for(const[i,s]of Object.entries(n)){if(r.has(i)||typeof s!="object"||s===null)continue;const a=s,c=typeof a.$ref=="string"?a.$ref:"";if(c){for(const l of r)if(c.includes(l)){r.add(i);break}}}for(const i of r)delete n[i]}X(e)}function X(e,t){if(!e||typeof e!="object")return;const n=t??new WeakSet;if(!n.has(e)){n.add(e);for(const o of Object.keys(e))if(o==="$ref"&&typeof e[o]=="string"){const r=e[o];/zod/i.test(r)&&delete e[o]}for(const[,o]of Object.entries(e))if(typeof o=="object"&&o!==null)if(Array.isArray(o))for(const r of o)typeof r=="object"&&r!==null&&X(r,n);else X(o,n)}}function dt(e){const t=new Set;for(const o of["$defs","definitions"]){const r=e[o];if(r&&typeof r=="object")for(const i of Object.keys(r))t.add(i)}const n=Y(e,t);if(n.length>0)throw new Error(`[apigen-core-client] Generated schema contains ${n.length} unresolvable $ref(s): ${n.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 Y(e,t){if(!e||typeof e!="object")return[];const n=[];for(const[o,r]of Object.entries(e))if(o==="$ref"&&typeof r=="string"){const i=r.match(/#\/(?:\$defs|definitions)\/(.+)$/);i&&!t.has(i[1])&&n.push(r)}else if(typeof r=="object"&&r!==null)if(Array.isArray(r))for(const i of r)typeof i=="object"&&i!==null&&n.push(...Y(i,t));else n.push(...Y(r,t));return n}function yt(e){const t=e.anyOf;if(!Array.isArray(t)||t.length<2)return e;const n=t,o=W(n),r={...e};return delete r.anyOf,{...r,oneOf:n,...o?{discriminator:o}:{},[B]:r[B]??"union"}}function ht(e,t,n){const{DEFAULT_CONFIG:o}=require("ts-json-schema-generator/dist/src/Config.js"),r={...o,...e},i=r.path,s=ft(i,r.tsconfig);let a;a=n?n.statVersion(i):Te(i);let c;if(s!==void 0){const u=(n==null?void 0:n.generatorCache.get(s))??ut(s);u&&u.version===a&&(c=u.gen)}if(!c){const{createProgram:u}=require("ts-json-schema-generator/dist/factory/program.js"),f=at(),p=st(f.SyntaxKind.BigIntKeyword,f.SyntaxKind.TypeReference),T=u(r),d=E.createParser(T,r,p),m=E.createFormatter(r);if(c=new E.SchemaGenerator(T,d,m,r),n&&n.stats.generatorsBuilt++,s!==void 0&&a!==void 0){const b={version:a,gen:c};lt(s,b),n==null||n.generatorCache.set(s,b)}}const l=c.createSchema(r.type);return gt(l),dt(l),l}function Tt(e,t){let n=e.trim();if(n=Pe(n),t!=null&&t.size){const r=t.get(n);if(r!==void 0)return r}const o=n.match(/^ReadonlyArray<(.+)>$/);for(o&&(n=`${o[1].trim()}[]`);n.startsWith("readonly ");)n=n.slice(9).trim();return n}function je(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}const bt=Object.entries(we).map(([e,t])=>({pattern:new RegExp(`import\\(["'][^"']*${je(e)}[^"']*["']\\)\\.\\w+`,"g"),key:t}));function Pe(e){let t=e;for(const{pattern:n,key:o}of bt)t=t.replace(n,o);return t}function St(e,t){let n=Pe(e);for(const[o,r]of t)n=n.replace(new RegExp(`\\b${je(o)}\\b`,"g"),r);return n}async function $(e,t,n,o,r,i){const s=t.getFilePath(),a=`${s}\0${o??""}\0${n}`,c=i??new Set;if(c.has(a))return{};if(!r){const d=new Set(c);return d.add(a),le(e,t,n,o,void 0,d)}const l=r.schemaCache.get(a);if(l!==void 0)return r.stats.schemaCacheHits++,l;const u=We(s,o,r.statVersion(s)),f=u.get(n);if(f!==void 0)return r.stats.schemaCacheHits++,r.schemaCache.set(a,Promise.resolve(f)),f;r.stats.schemaCacheMisses++;const p=new Set(c);p.add(a);const T=le(e,t,n,o,r,p).then(d=>(u.set(n,d),d)).catch(d=>{throw r.schemaCache.delete(a),d});return r.schemaCache.set(a,T),T}async function le(e,t,n,o,r,i){if(["void","undefined","null","Promise<void>"].includes(n))return{type:"null"};let s;if(r){const p=r.aliasCache.get(t);s=p??ue(t),p||r.aliasCache.set(t,s)}else s=ue(t);const a=Tt(n,s),c=Q[a];if(c!==void 0)return c;const l=await it(a,p=>$(e,t,p,o,r,i));if(l!==void 0)return l;const u=(r==null?void 0:r.zodImportCache.get(t))??mt(t);if(r&&r.zodImportCache.set(t,u),!u)try{const p={path:t.getFilePath(),type:a,skipTypeCheck:!0,tsconfig:o,topRef:!1},T=ht(p,!0,r);return yt(T)}catch{}try{const p=await tt(e,t,a,T=>ve(T,d=>$(e,t,d,o,r,i),0));if(p!==void 0)return p}catch{}const f=St(a,s);return z(f,0,s)}function ne(e,t,n){if(e!=null&&e.hasInitializer()){const o=e.getInitializer();if(o)return o.getText()}return vt(n,t)}function vt(e,t){var s;const n=e,o=((s=n==null?void 0:n.getJsDocs)==null?void 0:s.call(n))??[],r=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`\\[\\s*${r}\\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 xt(e){const t=e.trim(),n=t.match(/^(['"`])([\s\S]*)\1$/);if(n)return n[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 wt(e,t){const n=xt(t);if(n===void 0)return;e.default=n;const o=typeof n=="string"?n:JSON.stringify(n),r=typeof e.description=="string"?e.description:void 0;e.description=r?`${r} (default: ${o})`:`(default: ${o})`}async function jt(e){const t=e.session===void 0,n=be(e.session??te());try{return await Pt(e,n)}finally{t&&n.dispose()}}async function Pt(e,t){const{sourceFile:n,namespace:o="",dropFileSegment:r=!1,tsconfig:i}=e,s=t.projectFor(i),a=t.sourceFileFor(n,i),c=D.basename(n),l=O(Ot(c)),u=r?null:l,f=O(o),p=[];for(const[m,b]of a.getExportedDeclarations()){if(m==="default"||V(m))continue;const y=kt(b);if(y){const S=y.getSignature(),x=fe(S,y),w=S.getReturnType().getText();p.push(await q(s,a,f,u,m,x,w,y.isAsync(),i,t));continue}const h=b.find(S=>S.getKindName()==="VariableDeclaration");if(!h)continue;const g=h.getInitializer(),v=g==null?void 0:g.getKindName();if(g&&["ArrowFunction","FunctionExpression"].includes(v??"")){const x=h.getType().getCallSignatures();if(x.length===0)continue;const w=x[0],P=pe(w,h,h.getVariableStatement()),j=w.getReturnType().getText(),A=g.isAsync();p.push(await q(s,a,f,u,m,P,j,A,i,t))}else if(v==="ObjectLiteralExpression"){const S=h.getType();for(const x of S.getProperties()){const w=x.getName();if(V(w))continue;const j=x.getTypeAtLocation(h).getCallSignatures();if(j.length===0)continue;const A=j[0],U=pe(A,h,h.getVariableStatement()),L=A.getReturnType().getText(),M=[...u?[u]:[],O(m),O(w)];p.push(await K(s,a,f,M,w,U,L,!1,i,t))}}else{const S=h.getType(),x=S.getText();if(C(S,h)){const w=await $(s,a,x,i,t);p.push(At(f,u,m,w))}else console.warn(`[apigen-core] Skipping non-callable, non-serializable export: ${m}`)}}const T=a.getDefaultExportSymbol();if(T){const m=a.getExportAssignment(b=>!b.isExportEquals());if(m){const b=m.getExpression(),y=b.getKindName();if(["ArrowFunction","FunctionExpression"].includes(y)){const g=b.getType().getCallSignatures();if(g.length>0){const v=g[0],S=G(v,m),x=v.getReturnType().getText(),w=b.isAsync();p.push(await q(s,a,f,u,"default",S,x,w,i,t))}}else{const h=b.getType();for(const g of h.getProperties()){const v=g.getName();if(V(v))continue;const x=g.getTypeAtLocation(m).getCallSignatures();if(x.length===0)continue;const w=x[0],P=G(w,m),j=w.getReturnType().getText(),A=[...u?[u]:[],O("default"),O(v)];p.push(await K(s,a,f,A,v,P,j,!1,i,t))}}}else{const b=T.getDeclarations();for(const y of b){if(y.getKindName()!=="FunctionDeclaration")continue;const h=y,g=h.getName(),v=g&&g.length>0?g:"default",S=h.getSignature(),x=fe(S,h),w=S.getReturnType().getText();p.push(await q(s,a,f,u,v,x,w,h.isAsync(),i,t))}}}const d=Nt(a);if(d.length>0)for(const{name:m,sig:b}of d){if(V(m))continue;const y=G(b),h=b.getReturnType().getText(),g=[...u?[u]:[],O(m)];p.push(await K(s,a,f,g,m,y,h,!1,i,t))}return p}function $t(e,t,n,o){const r=new Set,i=s=>{if(Array.isArray(s))return s.map(i);if(!s||typeof s!="object"||r.has(s))return s;r.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[T,d]of Object.entries(u)){const m=i(d),b=p[T];if(b!==void 0&&JSON.stringify(b)!==JSON.stringify(m))throw new Error(`[apigen-core-client] Function "${n}": param "${o}" contributes a "${f}.${T}" 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[T]=m}continue}c[l]=i(u)}return c}finally{r.delete(s)}};return i(e)}async function q(e,t,n,o,r,i,s,a,c,l){const u=O(r);return K(e,t,n,o?[o,u]:[u],r,i,s,a,c,l)}async function K(e,t,n,o,r,i,s,a,c,l){const u=i.length>0&&i[0].name==="ctx",f=i.filter(g=>g.name!=="ctx"),p=f.filter(g=>!g.optional).map(g=>g.name),T={},d={definitions:{},$defs:{}};for(const g of f){const v=await $(e,t,g.type,c,l),S=$t(v,d,r,g.name);g.defaultValue!==void 0&&wt(S,g.defaultValue),T[g.name]=S}const m=s.replace(/^Promise<(.+)>$/,"$1").trim(),b=await $(e,t,m,c,l),y={type:"object",properties:T,required:p,...Object.keys(d.definitions).length>0?{definitions:d.definitions}:{},...Object.keys(d.$defs).length>0?{$defs:d.$defs}:{}};return{id:$e(n,o),host:"ts",namespace:n,path:o,kind:"action",async:a,streaming:!1,safe:!1,input:y,output:b,envelope:{},typeText:{lang:"ts",input:Ct(i),output:m},...u?{hasCtx:!0}:{}}}function At(e,t,n,o){const r=O(n),i=t?[t,r]:[r];return{id:$e(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 $e(e,t){return(e.raw?[e,...t]:t).map(o=>o.words.join("-")).join("/")}function re(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:re(e)}}function Ot(e){return e.replace(/\.[^.]+$/,"").replace(/[._]+/g,"-")}function Nt(e){const t=[];for(const n of e.getStatements()){if(n.getKindName()!=="ExpressionStatement")continue;const o=n.getExpression();if(o.getKindName()!=="BinaryExpression")continue;const r=o;if(r.getLeft().getText().trim()!=="module.exports"||r.getOperatorToken().getKindName()!=="EqualsToken")continue;const s=r.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 kt(e){let t;for(const n of e){if(n.getKindName()!=="FunctionDeclaration")continue;const o=n;if(t||(t=o),o.getBody())return o}return t}function fe(e,t){return e.getParameters().map(n=>{var s;const o=n.getDeclarations(),r=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=n.isOptional()||((r==null?void 0:r.hasInitializer())??!1)||(((s=r==null?void 0:r.hasQuestionToken)==null?void 0:s.call(r))??!1);return{name:n.getName(),type:n.getTypeAtLocation(e.getDeclaration()).getText(),optional:i,defaultValue:ne(r,n.getName(),t)}})}function pe(e,t,n){return e.getParameters().map(o=>{var a;const r=o.getDeclarations(),i=r.length>0&&r[0].getKindName()==="Parameter"?r[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:ne(i,o.getName(),n??t)}})}function G(e,t){return e.getParameters().map(n=>{var s,a,c;const o=n.getDeclarations(),r=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=n.isOptional()||((r==null?void 0:r.hasInitializer())??!1)||(((s=r==null?void 0:r.hasQuestionToken)==null?void 0:s.call(r))??!1);return{name:n.getName(),type:r?r.getType().getText():((c=(a=n.getValueDeclaration())==null?void 0:a.getType())==null?void 0:c.getText())??"unknown",optional:i,defaultValue:ne(r,n.getName(),t)}})}function Ct(e){const t=e.filter(n=>n.name!=="ctx");return t.length===0?"()":"("+t.map(n=>`${n.name}${n.optional?"?":""}: ${n.type}`).join(", ")+")"}function V(e){return!!(e==="__samples__"||e.startsWith("__"))}function C(e,t,n=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,n):!1}if(e.isTuple())return e.getTupleElements().every(o=>C(o,t,n));if(e.isUnion())return e.getUnionTypes().every(o=>C(o,t,n));if(e.isIntersection())return e.getIntersectionTypes().every(o=>C(o,t,n));if(e.isObject()){const o=e.getText(t);if(n.has(o))return!0;n.add(o);const r=e.getStringIndexType(),i=e.getNumberIndexType();if(r||i)return[r,i].every(a=>!a||C(a,t,n));const s=e.getProperties();return s.length===0?!0:s.every(a=>{const c=a.getTypeAtLocation(t);return C(c,t,n)})}return!1}async function Et(e){const t=e.session===void 0,n=be(e.session??te());try{return await It(e,n)}finally{t&&n.dispose()}}async function It(e,t){const{sourceFile:n,namespace:o="",tsconfig:r,includeInstances:i=!1}=e,s=t.projectFor(r),a=t.sourceFileFor(n,r),c=D.basename(n),l=R(Rt(c)),u=R(o),f=[];for(const[p,T]of a.getExportedDeclarations()){const d=T.find(y=>y.getKindName()==="ClassDeclaration");if(!d)continue;const m=p==="default"?d.getName():p;if(!m||H(m))continue;const b=R(m);for(const y of d.getStaticMethods()){const h=y.getName();if(H(h))continue;const g=y.getScope();if(g===I.Scope.Private||g===I.Scope.Protected)continue;const v=y.getSignature(),S=Z(v,y),x=v.getReturnType().getText(),w=y.isAsync(),P=[l,b,R(h)];f.push(await Ft(s,a,u,P,S,x,w,r,t))}if(i){{const h=d.getConstructors()[0]??null;let g=[];if(h){const j=h.getSignature();g=Z(j,h)}const v=[l,b],S=ee(u,v),x=g.filter(j=>j.name!=="ctx"),w=x.filter(j=>!j.optional).map(j=>j.name),P={};for(const j of x)P[j.name]=await $(s,a,j.type,r,t);f.push({id:S,host:"ts",namespace:u,path:v,kind:"constructor",async:!1,streaming:!1,safe:!1,input:{type:"object",properties:P,required:w},output:{type:"object",properties:{instanceId:{type:"string"}},required:["instanceId"]},envelope:{},typeText:{lang:"ts",input:_t(g),output:"{ instanceId: string }"}})}for(const y of d.getInstanceMethods()){const h=y.getName();if(H(h))continue;const g=y.getScope();if(g===I.Scope.Private||g===I.Scope.Protected)continue;const v=y.getSignature(),S=Z(v,y),x=v.getReturnType().getText(),w=y.isAsync(),P=[l,b,R(h)],j=ee(u,P),A=S.filter(N=>N.name!=="ctx"),U=A.filter(N=>!N.optional).map(N=>N.name),L={};for(const N of A)L[N.name]=await $(s,a,N.type,r,t);const M=x.replace(/^Promise<(.+)>$/,"$1").trim(),Fe=await $(s,a,M,r,t);f.push({id:j,host:"ts",namespace:u,path:P,kind:"instance-method",async:w,streaming:!1,safe:!1,input:{type:"object",properties:L,required:U},output:Fe,envelope:{type:"object",properties:{instanceId:{type:"string"}},required:["instanceId"]},typeText:{lang:"ts",input:Ae(S),output:M}})}}}return f}async function Ft(e,t,n,o,r,i,s,a,c){const l=r.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(),T=await $(e,t,p,a,c);return{id:ee(n,o),host:"ts",namespace:n,path:o,kind:"action",async:s,streaming:!1,safe:!1,input:{type:"object",properties:f,required:u},output:T,envelope:{},typeText:{lang:"ts",input:Ae(r),output:p}}}function ee(e,t){return(e.raw?[e,...t]:t).map(o=>o.words.join("-")).join("/")}function R(e){return{raw:e,words:re(e)}}function Rt(e){return e.replace(/\.[^.]+$/,"").replace(/[._]+/g,"-")}function Z(e,t){return e.getParameters().map(n=>{var s;const o=n.getDeclarations(),r=o.length>0&&o[0].getKindName()==="Parameter"?o[0]:null,i=n.isOptional()||((r==null?void 0:r.hasInitializer())??!1)||(((s=r==null?void 0:r.hasQuestionToken)==null?void 0:s.call(r))??!1);return{name:n.getName(),type:n.getTypeAtLocation(t).getText(),optional:i}})}function Ae(e){const t=e.filter(n=>n.name!=="ctx");return t.length===0?"()":"("+t.map(n=>`${n.name}${n.optional?"?":""}: ${n.type}`).join(", ")+")"}function _t(e){return e.length===0?"()":"("+e.map(t=>`${t.name}${t.optional?"?":""}: ${t.type}`).join(", ")+")"}function H(e){return!!(e==="__samples__"||e.startsWith("__")||e.startsWith("_"))}const Lt=new Map([[".ts","ts"],[".tsx","ts"],[".mts","ts"],[".cts","ts"],[".py","py"],[".rs","rust"],[".go","go"],[".java","java"]]);function Oe(e){const t=De.extname(e).toLowerCase();return Lt.get(t)}function Ne(e){return e.language??"ts"}function ke(e,t){const n=Oe(t);return n===void 0?!1:n===Ne(e)}function Mt(e,t){return t.filter(n=>ke(e,n))}function qt(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 Ce(e){return{operationConst:e.id,itemsSchema:e.input,resultSchema:qt(e.output)}}function Ee(e,t={}){const n=new Set(t.exclude??[]),o=new Map;for(const r of e){if(n.has(r.id))continue;const i=o.get(r.kind);i?i.push(r):o.set(r.kind,[r])}return o}function me(e){return{type:"string",enum:[e]}}function ge(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 Ie(e){if(e.length===0)throw new Error("buildBatchKindSchema: at least one operation is required");const t=e.map(Ce);if(e.length===1){const[r]=e,[i]=t;return{input:ge(i,me(r.id)),output:{type:"array",items:i.resultSchema}}}const n=e.map((r,i)=>ge(t[i],me(r.id))),o=W(n);return{input:{oneOf:n,...o?{discriminator:o}:{}},output:{oneOf:t.map(r=>({type:"array",items:r.resultSchema}))},...o?{discriminator:o}:{}}}function Vt(e,t={}){const n=Ee(e.operations,t),o=[];for(const[r,i]of n){const{input:s,output:a}=Ie(i),c=de(`_batch/${r}`,e,{kind:r,safe:r==="query",input:s,output:a});o.push({...c,operationIds:i.map(l=>l.id)})}return o}exports.buildBatchKindSchema=Ie;exports.buildBatchMountedOperations=Vt;exports.clearPersistentProjectCache=Ue;exports.composeSchemas=Qe;exports.createExtractionSession=te;exports.deriveBatchOperationBranch=Ce;exports.effectiveLanguage=Ne;exports.extract=jt;exports.extractClasses=Et;exports.groupBatchableOperationsByKind=Ee;exports.isPrimitiveOnlyInputSchema=Se;exports.languageOfSource=Oe;exports.pluginConsumesSource=ke;exports.pluginsToEnvelopeMiddlewares=Ze;exports.sourcesForPlugin=Mt;exports.syntheticOp=de;exports.tokenize=re;
|
|
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;
|