pando-ai 0.0.16 → 0.0.18

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.
@@ -0,0 +1,522 @@
1
+ import{c as Pn,d as Y,e as z,f as Z,g as yt}from"./chunk-HQDE7M4W.mjs";import{a as wn,b as ae}from"./chunk-AYCBSZ56.mjs";var G,oe=ae(()=>{"use strict";G={getAbbrev(t,e="ts"){return t},getKindFromAbbrev(t,e="ts"){return t}}});import{Node as L}from"ts-morph";function ye(t){let e=t.getKindName?.()||"Unknown",n=wt(t,e);return{kind:n.kind,semanticKind:n.semanticKind,rawKind:e,rawKindSource:Ct.TS_MORPH}}function Pt(t){let e=t.getKindName?.()||"Unknown";return{kind:wt(t,e).kind,rawKind:e,rawKindSource:Ct.TS_MORPH}}function we(t,e){if(!t.kind||!t.kind.trim())throw new Error(`Invalid normalized kind: missing kind ${e?JSON.stringify(e):""}`);if(!t.rawKind||!t.rawKind.trim())throw new Error(`Invalid normalized kind: missing rawKind ${e?JSON.stringify(e):""}`);if(!t.rawKindSource||!String(t.rawKindSource).trim())throw new Error(`Invalid normalized kind: missing rawKindSource ${e?JSON.stringify(e):""}`)}var Ct,wt,Pe=ae(()=>{"use strict";Ct={TS_MORPH:"ts-morph",PYTHON_AST:"python-ast",CLANG:"clang",ROSLYN:"roslyn",JAVA_AST:"java-ast",CLI:"cli",UNKNOWN:"unknown"},wt=(t,e)=>L.isFunctionDeclaration(t)||L.isFunctionExpression(t)||L.isArrowFunction(t)?{kind:"Function",semanticKind:"function"}:L.isGetAccessorDeclaration(t)||L.isSetAccessorDeclaration(t)?{kind:"Method",semanticKind:"property"}:L.isMethodDeclaration(t)||L.isMethodSignature(t)||L.isConstructorDeclaration(t)?{kind:"Method",semanticKind:"method"}:L.isClassDeclaration(t)||L.isClassExpression(t)?{kind:"Class",semanticKind:"class"}:L.isInterfaceDeclaration(t)?{kind:"Interface",semanticKind:"interface"}:L.isEnumDeclaration(t)?{kind:"Enum",semanticKind:"enum"}:L.isEnumMember(t)?{kind:"EnumMember",semanticKind:"enum"}:L.isTypeAliasDeclaration(t)?{kind:"TypeAlias",semanticKind:"type"}:L.isModuleDeclaration(t)?{kind:"Namespace",semanticKind:"namespace"}:L.isPropertyDeclaration(t)||L.isPropertySignature(t)?{kind:"Field",semanticKind:"property"}:L.isVariableDeclaration(t)?{kind:"Variable",semanticKind:"variable"}:{kind:e,semanticKind:null}});var We=ae(()=>{"use strict";oe();Pe();Z()});function Rn(){return new Date().toISOString()}function Ee(t,e,n){let r=`[${Rn()}] [${t.toUpperCase()}] ${e}`;if(!n)return r;try{return r+" "+JSON.stringify(n)}catch{return r}}var _n,Et=ae(()=>{"use strict";_n={debug:(t,e)=>{try{process.stderr.write(Ee("debug",t,e)+`
2
+ `)}catch{}},info:(t,e)=>{try{process.stderr.write(Ee("info",t,e)+`
3
+ `)}catch{}},warn:(t,e)=>{try{process.stderr.write(Ee("warn",t,e)+`
4
+ `)}catch{}},error:(t,e)=>{try{process.stderr.write(Ee("error",t,e)+`
5
+ `)}catch{}}}});import{Node as Ti}from"ts-morph";var Rt=ae(()=>{"use strict";Xe();We();Et();Z()});import*as In from"xxhash-wasm";var Dn,Kn,Bi,Xe=ae(()=>{"use strict";Rt();Dn="__pando_xxhash_instance__",Kn=globalThis,Bi=Kn[Dn]??null});oe();function Ne(t){let e=`${t.sourceFile}#${t.sourceStart}-${t.sourceEnd}`,n=t.refKind??"",r=t.refName??"",i=t.targetFile??"",s=t.targetStart!=null&&t.targetEnd!=null?`#${t.targetStart}-${t.targetEnd}`:"",a=t.targetNodeId??"",o=`${e}:REF:${n}:${r}|${i}${s}|${a}`;return yt(o)}function bt(t){let e=[],n=new Set,r=i=>{!i?.name||n.has(i.name)||(n.add(i.name),e.push(i))};for(let i of t.exports??[])r(i);for(let i of t.explicitExports??[])r({name:i});for(let i of t.modulePublic??[])r({name:i});return e}Z();function ge(t,e,n){let r=new Date().toISOString();return{payload:{lang:t,fileRel:e,preDeleted:!1,exportRows:[],nodeRows:[],referenceRows:[],importRows:[],importBindingRows:[],fileRow:[e,n?.mtime??null,n?.size??null,"failed",r],fts:null},fileSize:n?.size,mtime:n?.mtime}}function me(t){let{lang:e,fileRel:n,content:r,meta:i,preDeleted:s,parsed:a,resolveNodeId:o,exportKind:u}=t,h=[];for(let d of a.nodes??[]){let v=d.rawKind??d.kind,E=d.rawKindSource??"cli",_=d.containerRawKind??d.containerKind??null,$=d.containerRawKindSource??(_?"cli":null),g=d.scopeChain??null,y=Array.isArray(g)?JSON.stringify(g):typeof g=="string"?g:null,N=`${n}#${d.start}-${d.end}:${G.getAbbrev(d.kind,e)}`,S=(e==="c"||e==="cpp"||e==="java"||e==="clojure")&&d.name?`${N}:${d.name}`:N,K=d.metadata&&Object.keys(d.metadata).length?JSON.stringify(d.metadata):null;h.push([S,d.name,d.kind,v,E,d.semanticKind??null,d.start,d.end,typeof d.isExported=="number"?d.isExported:0,d.containerKind??null,_,$,typeof d.paramCount=="number"?d.paramCount:null,d.qualifiedName??null,y,d.symbolKey??null,K])}let p=[],m=new Set;for(let d of bt(a)){if(!d.name||m.has(d.name))continue;m.add(d.name);let v=d.nodeId??(o?o(d.name):null);p.push([n,d.name,v??null,d.isReexport?1:0,d.reexportFrom??null,d.reexportName??null,d.exportKind??u??"cli",d.targetSymbolKey??null])}let b=[],A=new Map,C=new Map;for(let d of h){let v=d[0]!=null?String(d[0]):null,E=d[13]!=null?String(d[13]):null,_=d[15]!=null?String(d[15]):null;v&&(E&&!A.has(E)&&A.set(E,v),_&&!C.has(_)&&C.set(_,v))}if(Y()&&e==="clojure"&&(a.references??[]).length>0){let d=Array.from(A.keys()).slice(0,10),v=Array.from(C.keys()).slice(0,10),E=(a.references??[]).slice(0,10).map($=>$.containerQualifiedName),_={file:n,nodeCount:h.length,refCount:(a.references??[]).length,nodeQualifiedNames:d,nodeSymbolKeys:v,refContainers:E,qualifiedNameMapSize:A.size,symbolKeyMapSize:C.size};try{console.error("[CliPayload][CLOJURE-DEBUG] source_node_id lookup context",_)}catch{}}for(let d of a.references??[]){let v=d.targetNodeId??(o&&d.refName?o(d.refName):null),E=d.targetFile??(v?n:null),_=d.sourceNodeId??(d.containerQualifiedName?A.get(d.containerQualifiedName)??null:null)??(d.containerQualifiedName?C.get(d.containerQualifiedName)??null:null),$=Ne({sourceFile:n,sourceStart:d.sourceStart,sourceEnd:d.sourceEnd,refKind:d.refKind,refName:d.refName,targetFile:E??null,targetStart:d.targetStart??null,targetEnd:d.targetEnd??null,targetNodeId:v??d.targetNodeId??null}),g=d.metadata&&Object.keys(d.metadata).length?JSON.stringify(d.metadata):null;b.push([$,n,_,d.refName??null,d.refKind,d.sourceStart,d.sourceEnd,v??d.targetNodeId??null,E??null,v||d.targetNodeId||d.targetFile?"resolved":"unresolved",d.receiverName??null,typeof d.arity=="number"?d.arity:null,d.containerQualifiedName??null,d.targetSymbolKey??null,d.confidence??null,g])}if(Y()&&e==="clojure"&&b.length>0){let d=b.reduce((E,_)=>E+(_?.[2]!=null?1:0),0),v=b.reduce((E,_)=>E+(_?.[12]!=null?1:0),0);try{console.error("[CliPayload] clojure source-node summary",{file:n,refs:b.length,sourceNodeCount:d,containerCount:v,sample:b.slice(0,5).map(E=>({sourceNodeId:E[2]==null?null:String(E[2]),refName:E[3],refKind:E[4],containerQualifiedName:E[12]}))})}catch{}}let w=[];for(let d of a.imports??[])w.push([n,d.module??null,d.isTypeOnly??0]);let M=[];for(let d of a.importBindings??[])M.push([n,d.module??null,d.kind,d.localName,d.importedName,d.isTypeOnly??0]);let l=new Date().toISOString(),P=[n,i?.mtime??null,i?.size??null,"completed",l];return{payload:{lang:e,fileRel:n,preDeleted:!!s,exportRows:p,nodeRows:h,referenceRows:b,importRows:w,importBindingRows:M,fileRow:P,fts:typeof r=="string"?{blobOid:n,content:r}:null},fileSize:i?.size,mtime:i?.mtime}}var Ce=["ts","js","python","c","cpp","csharp","dart","java","clojure"];function xt(t){return typeof t=="string"&&Ce.includes(t)}Pn();Z();function St(){return["clojure"]}function En(t){let e=new Set;for(let n of t)xt(n)&&e.add(n);return Ce.filter(n=>e.has(n))}function vt(t){let e=new Set(En(t)),n={};for(let r of Ce){if(e.has(r)){n[r]={enabled:!0,source:"embedded"};continue}n[r]={enabled:!1,source:"none",reason:"disabled by language support config"}}return{byLanguage:n}}import Ge from"path";import Jn from"fs";import{Project as Wn,Node as x}from"ts-morph";import{Node as f,SyntaxKind as le}from"ts-morph";import*as J from"typescript";import{SyntaxKind as he}from"ts-morph";var Je={LINE_COMMENT:{kind:9001,name:"LineComment",triviaKind:he.SingleLineCommentTrivia},BLOCK_COMMENT:{kind:9002,name:"BlockComment",triviaKind:he.MultiLineCommentTrivia},JSDOC_COMMENT:{kind:9003,name:"JSDocComment",triviaKind:he.MultiLineCommentTrivia}};function Nt(t,e){return t===he.SingleLineCommentTrivia?Je.LINE_COMMENT:t===he.MultiLineCommentTrivia&&e.startsWith("/**")?Je.JSDOC_COMMENT:Je.BLOCK_COMMENT}Xe();We();import{Node as F,SyntaxKind as c,Scope as Ue}from"ts-morph";var Qi=new Set([c.ArrayLiteralExpression,c.ArrayType,c.ArrowFunction,c.AsExpression,c.AssertClause,c.AssertEntry,c.AwaitExpression,c.BigIntLiteral,c.BinaryExpression,c.BindingElement,c.Block,c.CallExpression,c.CallSignature,c.CaseClause,c.CatchClause,c.ClassDeclaration,c.ClassExpression,c.ClassStaticBlockDeclaration,c.ComputedPropertyName,c.ConditionalExpression,c.ConditionalType,c.ConstructSignature,c.Constructor,c.ConstructorType,c.Decorator,c.DefaultClause,c.DoStatement,c.ElementAccessExpression,c.EnumDeclaration,c.EnumMember,c.ExportAssignment,c.ExportDeclaration,c.ExportSpecifier,c.ExpressionStatement,c.ExpressionWithTypeArguments,c.FalseKeyword,c.ForInStatement,c.ForOfStatement,c.ForStatement,c.FunctionDeclaration,c.FunctionExpression,c.FunctionType,c.GetAccessor,c.Identifier,c.IfStatement,c.ImportAttribute,c.ImportAttributes,c.ImportClause,c.ImportDeclaration,c.ImportEqualsDeclaration,c.ImportSpecifier,c.ImportType,c.IndexSignature,c.IndexedAccessType,c.InferType,c.InterfaceDeclaration,c.IntersectionType,c.JsxAttribute,c.JsxClosingElement,c.JsxClosingFragment,c.JsxElement,c.JsxExpression,c.JsxFragment,c.JsxOpeningElement,c.JsxOpeningFragment,c.JsxSelfClosingElement,c.JsxSpreadAttribute,c.JsxText,c.LiteralType,c.MappedType,c.MetaProperty,c.MethodDeclaration,c.MethodSignature,c.ModuleDeclaration,c.NamedExports,c.NamedImports,c.NamedTupleMember,c.NamespaceExport,c.NamespaceExportDeclaration,c.NamespaceImport,c.NewExpression,c.NoSubstitutionTemplateLiteral,c.NonNullExpression,c.NullKeyword,c.NumericLiteral,c.ObjectLiteralExpression,c.OptionalType,c.Parameter,c.ParenthesizedType,c.PostfixUnaryExpression,c.PrefixUnaryExpression,c.PrivateIdentifier,c.PropertyAccessExpression,c.PropertyAssignment,c.PropertyDeclaration,c.PropertySignature,c.QualifiedName,c.RegularExpressionLiteral,c.RestType,c.ReturnStatement,c.SatisfiesExpression,c.SetAccessor,c.ShorthandPropertyAssignment,c.SourceFile,c.SpreadAssignment,c.SpreadElement,c.StringLiteral,c.SwitchStatement,c.TaggedTemplateExpression,c.TemplateExpression,c.TemplateLiteralType,c.ThisType,c.ThrowStatement,c.TrueKeyword,c.TryStatement,c.TupleType,c.TypeAliasDeclaration,c.TypeLiteral,c.TypeOfExpression,c.TypeOperator,c.TypeParameter,c.TypePredicate,c.TypeQuery,c.TypeReference,c.UnionType,c.VariableDeclaration,c.VariableStatement,c.WhileStatement,c.YieldExpression]);function Fn(t){try{let e=t.getDecorators;if(typeof e!="function")return[];let n=new Set;for(let r of e.call(t)){let i;try{i=r.getName?.()}catch{i=void 0}if(!i)try{i=r.getExpression?.()?.getText?.()}catch{i=void 0}if(i){let s=String(i).trim();s&&n.add(s)}}return Array.from(n)}catch{return[]}}function Mn(t){try{if(!F.isClassDeclaration(t))return[];let e=t.getImplements();if(!e||e.length===0)return[];let n=new Set;for(let r of e)try{let i=r.getExpression(),s=i?i.getText():r.getText();s&&n.add(s.trim())}catch{}return Array.from(n)}catch{return[]}}function On(t){try{let e=new Set;if(F.isClassDeclaration(t)){let n=t.getExtends();if(n)try{let r=n.getExpression(),i=r?r.getText():n.getText();i&&e.add(i.trim())}catch{}}else if(F.isInterfaceDeclaration(t)){let n=t.getExtends();for(let r of n)try{let i=r.getText();i&&e.add(i.trim())}catch{}}return Array.from(e)}catch{return[]}}function _t(t){try{if("getReturnTypeNode"in t&&typeof t.getReturnTypeNode=="function"){let e=t.getReturnTypeNode();if(e)return e.getText()}if("getReturnType"in t&&typeof t.getReturnType=="function"){let e=t.getReturnType();if(e&&typeof e.getText=="function"){let n=e.getText();if(n)return String(n)}}return null}catch{return null}}function Ln(t){try{if(typeof t.getScope!="function")return null;let e=t.getScope();return e===Ue.Private||e===Ue.Protected||e===Ue.Public?e:null}catch{return null}}function At(t){let e={kind:t.getKindName()},n=Fn(t);if(n.length&&(e.decorators=n),I(e,"flags",()=>t.getFlags()),(F.isFunctionDeclaration(t)||F.isMethodDeclaration(t)||F.isFunctionExpression(t))&&(I(e,"isAsync",()=>t.isAsync()),I(e,"isGenerator",()=>t.isGenerator()),I(e,"parameterCount",()=>t.getParameters().length),I(e,"returnType",()=>_t(t)),F.isFunctionDeclaration(t)&&I(e,"isExported",()=>t.isExported())),F.isClassDeclaration(t)){I(e,"isAbstract",()=>t.isAbstract()),I(e,"isExported",()=>t.isExported());let i=On(t);i.length&&(e.extends=i);let s=Mn(t);s.length&&(e.implements=s)}if(F.isVariableDeclaration(t)&&(I(e,"declarationKind",()=>t.getVariableStatement()?.getDeclarationKind()),I(e,"hasInitializer",()=>t.hasInitializer()),I(e,"type",()=>t.getTypeNode()?.getText())),(F.isPropertyDeclaration(t)||F.isPropertySignature(t)||F.isParameterDeclaration(t))&&(I(e,"isStatic",()=>t.isStatic?.()),I(e,"isReadonly",()=>t.isReadonly?.()),I(e,"isOptional",()=>t.hasQuestionToken?.()),I(e,"scope",()=>t.getScope?.())),(F.isMethodDeclaration(t)||F.isMethodSignature(t)||F.isGetAccessorDeclaration(t)||F.isSetAccessorDeclaration(t))&&(I(e,"isStatic",()=>t.isStatic?.()),I(e,"isAbstract",()=>t.isAbstract?.()),I(e,"isAsync",()=>t.isAsync?.()),I(e,"returnType",()=>_t(t)),I(e,"scope",()=>t.getScope?.())),F.isCallExpression(t)){let i=t.getExpression();if(F.isPropertyAccessExpression(i)){e.propertyName=i.getName();let s=i.getExpression();F.isIdentifier(s)&&(e.objectName=s.getText())}else F.isIdentifier(i)&&(e.functionName=i.getText());e.argumentCount=t.getArguments().length,e.callExpression=i.getText()}let r=Ln(t);return r&&(e.visibility=r),e.isReadonly||I(e,"isReadonly",()=>t.isReadonly?.()),F.isImportDeclaration(t)&&(I(e,"moduleSpecifier",()=>t.getModuleSpecifier()?.getLiteralText()),I(e,"isTypeOnly",()=>t.isTypeOnly()),I(e,"namedImports",()=>t.getNamedImports()?.map(i=>i.getName()).join(", ")),I(e,"defaultImport",()=>t.getDefaultImport()?.getText())),Object.keys(e).forEach(i=>{e[i]===void 0&&delete e[i]}),e}function I(t,e,n){try{let r=n();r!=null&&(t[e]=r)}catch{}}Pe();function jn(t){if(t.kind==="local"){let r=t.isDefault?"default":t.name;return r?{name:r,priority:t.isDefault?4:3}:null}if(t.kind==="alias")return t.exported?{name:t.exported,priority:2}:null;let e=t.isNamespace??!1,n=t.alias||t.name||(e?"*":null);return n?{name:n,priority:e?0:1}:null}function $n(t){if(t.length<2)return t;let e=new Map;for(let n of t){let r=jn(n);if(!r)continue;let i=e.get(r.name);(!i||r.priority>i.priority)&&e.set(r.name,{record:n,priority:r.priority})}return Array.from(e.values()).map(n=>n.record)}function Re(t){try{if(t&&typeof t.getName=="function"){let e=t.getName();if(typeof e=="string"&&e.length>0)return e}}catch{}return null}function Ve(t){let e;try{let r=t.getStart?.(!1);typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}if(e===void 0)try{let r=t.getStart?.();typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}if(e===void 0)try{let r=t.getFullStart?.();typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}e===void 0&&(e=0);let n;try{let r=t.getEnd?.();typeof r=="number"&&Number.isFinite(r)&&(n=r)}catch{}if(n===void 0)try{let r=t.getStart?.();typeof r=="number"&&Number.isFinite(r)&&(n=r)}catch{}return n===void 0&&(n=e),n<e&&(n=e),{start:e,end:n}}function Bn(t){try{if(f.isFunctionDeclaration(t)||f.isMethodDeclaration(t)||f.isConstructorDeclaration(t)||f.isFunctionExpression(t)||f.isArrowFunction(t)){let e=t.getParameters?.();if(Array.isArray(e))return e.length}}catch{}return null}function _e(t,e){try{return typeof t?.hasModifier=="function"&&t.hasModifier(e)}catch{return!1}}function zn(t,e,n){if(!f.isImportDeclaration(t))return;let i={moduleSpecifier:t.getModuleSpecifierValue(),isTypeOnly:t.isTypeOnly(),namedImports:[]};try{let s=t.getDefaultImport();if(s){let a=s.getText();i.defaultImport=a,n(a,s)}}catch{}try{let s=t.getNamespaceImport();if(s){let a=s.getText();i.namespaceImport=a,n(a,s)}}catch{}try{t.getNamedImports().forEach(s=>{try{let a=s.getName(),o=s.getAliasNode(),u=o?o.getText():void 0;a&&(i.namedImports.push({name:a,alias:u||void 0}),n(u||a,s.getNameNode()))}catch{}})}catch{}e.push(i)}function qn(t,e){if(f.isExportDeclaration(t)){let n=t.getModuleSpecifierValue();if(n){if(t.getNamedExports().length>0)try{t.getNamedExports().forEach(r=>{try{let i=r.getName(),s=r.getAliasNode(),a=s?s.getText():void 0;e.push({kind:"reexport",moduleSpecifier:n,name:i||void 0,alias:a||void 0,isNamespace:!1})}catch{}})}catch{}else if(t.isNamespaceExport())try{let i=t.getNamespaceExport()?.getName();e.push({kind:"reexport",moduleSpecifier:n,name:i||"*",alias:i||void 0,isNamespace:!0})}catch{e.push({kind:"reexport",moduleSpecifier:n,name:"*",isNamespace:!0})}else e.push({kind:"reexport",moduleSpecifier:n,name:"*",isNamespace:!0});return}try{t.getNamedExports().forEach(r=>{try{let i=r.getName();if(!i)return;let s=r.getAliasNode(),a=s?s.getText():i;e.push({kind:"alias",local:i,exported:a})}catch{}})}catch{}return}if(f.isExportAssignment(t))try{let n=t.getExpression();if(n&&f.isIdentifier(n)){let r=n.getText();e.push({kind:"alias",local:r,exported:"default"})}}catch{}}function Hn(t,e,n,r){if(!_e(t,le.ExportKeyword))return;let i=_e(t,le.DefaultKeyword);if(f.isVariableStatement(t)){try{let s=t.getDeclarationList().getDeclarations();for(let a of s){let o=Re(a)??a.getName?.()??null;if(o){n(o,a);let u=r(a);u&&e.push({kind:"local",name:o,isDefault:i,nodeId:u})}}}catch{}return}if(f.isFunctionDeclaration(t)||f.isClassDeclaration(t)||f.isInterfaceDeclaration(t)||f.isEnumDeclaration(t)||f.isTypeAliasDeclaration(t)||f.isModuleDeclaration(t)){let s=Re(t)||(i?"default":null),a=r(t);a&&e.push({kind:"local",name:s??"default",isDefault:i,nodeId:a})}}function Tt(t,e,n,r){let i=[],s=[],a=new Set,o=new Map,u=[],h=[],p=[{node:t,id:null,kind:"module",rawKind:"SourceFile",rawKindSource:"ts-morph",name:null,isExported:!1}],m=l=>{if(!l)return null;try{return e(l)}catch{return null}},b=(l,P)=>{if(l&&(a.has(l)||a.add(l),P&&!o.has(l))){let R=m(P);R&&o.set(l,R)}},A=l=>f.isFunctionDeclaration(l)||f.isFunctionExpression(l)||f.isArrowFunction(l)||f.isClassDeclaration(l)||f.isClassExpression(l)||f.isInterfaceDeclaration(l)||f.isEnumDeclaration(l)||f.isEnumMember(l)||f.isTypeAliasDeclaration(l)||f.isModuleDeclaration(l)||f.isMethodDeclaration(l)||f.isMethodSignature(l)||f.isPropertyDeclaration(l)||f.isPropertySignature(l)||f.isGetAccessorDeclaration(l)||f.isSetAccessorDeclaration(l)||f.isConstructorDeclaration(l)||f.isVariableDeclaration(l)||f.isReturnStatement(l)||f.isIfStatement(l)||f.isForStatement(l)||f.isForInStatement(l)||f.isForOfStatement(l)||f.isWhileStatement(l)||f.isDoStatement(l)||f.isSwitchStatement(l)||f.isCaseClause(l)||f.isDefaultClause(l)||f.isTryStatement(l)||f.isCatchClause(l)||f.isThrowStatement(l)||f.isExpressionStatement(l)||f.isBlock(l),C=l=>f.isSourceFile(l)||f.isFunctionDeclaration(l)||f.isFunctionExpression(l)||f.isArrowFunction(l)||f.isMethodDeclaration(l)||f.isConstructorDeclaration(l)||f.isClassDeclaration(l)||f.isClassExpression(l)||f.isModuleDeclaration(l),w=l=>{let P=Re(l);if(P)return P;if(f.isConstructorDeclaration(l))return"constructor";if(f.isArrowFunction(l)||f.isFunctionExpression(l)){let R=l.getParent();try{if(f.isVariableDeclaration(R))return R.getName();if(f.isPropertyAssignment(R)||f.isPropertyDeclaration(R)||f.isPropertySignature(R))return R.getName?.()??null;if(f.isShorthandPropertyAssignment(R))return R.getNameNode()?.getText()??null;if(f.isExportAssignment(R))return"default"}catch{}}if(f.isEnumMember(l))try{return l.getName()}catch{return null}if(f.isVariableDeclaration(l))try{return l.getName()}catch{return null}return null},M=l=>{let P=p[p.length-1],R=P?.id??null,d=P?.kind??"module",v=P?.name??null;if(f.isImportDeclaration(l))zn(l,u,b);else if(f.isImportEqualsDeclaration(l))try{let g=l.getModuleReference();if(g&&f.isExternalModuleReference(g)){let y=g.getExpression(),N;if(y&&f.isStringLiteral(y))N=y.getLiteralText();else if(y){let S=y.getText();N=typeof S=="string"?S.replace(/^['"]|['"]$/g,""):void 0}if(N){let K=l.getNameNode()?.getText(),j={moduleSpecifier:N,isTypeOnly:!1,namedImports:[]};K&&(j.defaultImport=K,b(K,l)),u.push(j)}}}catch{}(f.isExportDeclaration(l)||f.isExportAssignment(l))&&qn(l,h),Hn(l,h,b,m);let E=A(l),_=w(l);if(E){let g=e(l),y=_e(l,le.ExportKeyword)||P?.isExported||!1,N=l.getNameNode?.()?.getText?.()??null,S=_??Re(l)??N;_?b(_,l):S&&b(S,l);let K=Ve(l),j=Bn(l),T={...At(l)};if(R&&(T.containerId=R),d&&(T.containerKind=d),v&&(T.containerName=v),f.isModuleDeclaration(l))try{let B=l.getNameNode?.();if(B){let q=Ve(B);Number.isFinite(q.start)&&Number.isFinite(q.end)&&(T.moduleNameStart=q.start,T.moduleNameEnd=q.end)}}catch{}let D=Object.keys(T).length?T:null,O=ye(l);we(O,{source:"ts-node-collector",file:t.getFilePath(),name:S??null}),i.push({nodeId:g,nodeName:S??null,containerId:R,containerKind:d,containerRawKind:P?.rawKind??null,containerRawKindSource:P?.rawKindSource??null,containerName:v,isExported:y,kind:O.kind,rawKind:O.rawKind,rawKindSource:O.rawKindSource,semanticKind:O.semanticKind??null,start:K.start,end:K.end,paramCount:j,metadata:D})}if(f.isCallExpression(l)||f.isNewExpression(l)){let g=l.getExpression(),y=null,N;try{if(f.isIdentifier(g))y=g.getText();else if(f.isPropertyAccessExpression(g)){y=g.getName();let j=g.getExpression();f.isIdentifier(j)&&(N=j.getText())}}catch{}let S="";try{S=g.getText()}catch{}let K=Ve(l);if(s.push({name:y,kind:f.isNewExpression(l)?"new":"call",containerId:R,containerKind:d,containerName:v,expression:S,objectName:N,start:K.start,end:K.end}),f.isCallExpression(l))try{if(f.isIdentifier(g)&&g.getText()==="require"){let T=l.getArguments()[0],D;if(T&&(f.isStringLiteral(T)||f.isNoSubstitutionTemplateLiteral(T)))try{D=T.getLiteralText()}catch{let O=T.getText();D=typeof O=="string"?O.replace(/^['"]|['"]$/g,""):void 0}if(D){let O={moduleSpecifier:D,isTypeOnly:!1,namedImports:[]},B=l.getParent();if(B&&f.isVariableDeclaration(B)){let q=B.getNameNode();try{if(f.isIdentifier(q)){let V=q.getText();V&&(O.defaultImport=V,b(V,B))}}catch{}}u.push(O)}}else if(g?.getKind?.()===le.ImportKeyword){let T=l.getArguments()[0],D;if(T&&(f.isStringLiteral(T)||f.isNoSubstitutionTemplateLiteral(T)))try{D=T.getLiteralText()}catch{let O=T.getText();D=typeof O=="string"?O.replace(/^['"]|['"]$/g,""):void 0}D&&u.push({moduleSpecifier:D,isTypeOnly:!1,namedImports:[]})}}catch{}}if(f.isCallExpression(l)){let g=l.getExpression();try{if(f.isIdentifier(g)&&g.getText()==="require"){let y=l.getParent();if(!(y&&f.isExternalModuleReference(y))){let S=l.getArguments()[0],K;if(S&&(f.isStringLiteral(S)||f.isNoSubstitutionTemplateLiteral(S)))try{K=S.getLiteralText()}catch{K=S.getText().replace(/^['"]|['"]$/g,"")}if(K){let j={moduleSpecifier:K,isTypeOnly:!1,namedImports:[]};if(y&&f.isVariableDeclaration(y)){let T=y.getNameNode();try{if(f.isIdentifier(T)){let D=T.getText();D&&(j.defaultImport=D,b(D,y))}}catch{}}u.push(j)}}}else if(g?.getKind?.()===le.ImportKeyword){let N=l.getArguments()[0],S;if(N&&(f.isStringLiteral(N)||f.isNoSubstitutionTemplateLiteral(N)))try{S=N.getLiteralText()}catch{S=N.getText().replace(/^['"]|['"]$/g,"")}S&&u.push({moduleSpecifier:S,isTypeOnly:!1,namedImports:[]})}}catch{}}let $=!1;if(C(l)){let g=m(l)??e(l),y=Pt(l);p.push({node:l,id:g,kind:y.kind,rawKind:y.rawKind,rawKindSource:y.rawKindSource,name:_??v,isExported:_e(l,le.ExportKeyword)||P?.isExported||!1}),$=!0}l.forEachChild(M),$&&p.pop()};if(t.forEachChild(M),r?.includeComments===!0||process.env.AST_INDEX_COMMENTS==="1")try{let l=t.getFullText(),P=J.createScanner(J.ScriptTarget.Latest,!1,J.LanguageVariant.Standard,l),R=new Set;for(let d=P.scan();d!==J.SyntaxKind.EndOfFileToken;d=P.scan()){if(d!==J.SyntaxKind.SingleLineCommentTrivia&&d!==J.SyntaxKind.MultiLineCommentTrivia)continue;let v=P.getTokenPos(),E=P.getTextPos(),_=`${v}-${E}`;if(R.has(_)||(R.add(_),n.has(_)))continue;n.add(_);let $=l.substring(v,E),g=Nt(d,$),N=e({getKindName:()=>g.name,getKind:()=>g.kind,getPos:()=>v,getEnd:()=>E,getStart:()=>v,getFullStart:()=>v,getText:()=>$,getSourceFile:()=>t,getParent:()=>t,__isComment:!0,__commentPosition:"standalone",__attachedTo:null},"COM");i.push({nodeId:N,nodeName:$.substring(0,100),containerId:null,containerKind:"module",containerRawKind:"SourceFile",containerRawKindSource:"ts-morph",containerName:null,isExported:!1,kind:g.name,rawKind:g.name,rawKindSource:"ts-morph",semanticKind:null,start:v,end:E,paramCount:null,metadata:null})}}catch{}return{nodes:i,references:s,declaredNames:a,localDeclarations:o,imports:u,exports:$n(h)}}oe();function kt(t){let e;try{let r=t.getStart?.(!1);typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}if(e===void 0)try{let r=t.getStart?.();typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}if(e===void 0)try{let r=t.getFullStart?.();typeof r=="number"&&Number.isFinite(r)&&(e=r)}catch{}e===void 0&&(e=0);let n;try{let r=t.getEnd?.();typeof r=="number"&&Number.isFinite(r)&&(n=r)}catch{}if(n===void 0)try{let r=t.getStart?.();typeof r=="number"&&Number.isFinite(r)&&(n=r)}catch{}return n===void 0&&(n=e),n<e&&(n=e),{start:e,end:n}}Pe();var Xn=100;function It(t,e,n,r){let{start:i,end:s}=kt(e),a=ye(e);we(a,{source:"ts-node-id",file:t,kind:a.kind});let o=r||G.getAbbrev(a.kind,n);return`${t}#${i}-${s}:${o}`}function Un(t,e){return Ge.relative(t,e).replace(/\\/g,"/")}function Dt(t,e){if(!t)return null;let n=t;try{let p=t.getAliasedSymbol();p&&(n=p)}catch{}let r=[];try{r=n.getDeclarations()??[]}catch{r=[]}if(!r.length)return null;let s=r.slice().sort((p,m)=>{let b=p.getSourceFile().getFilePath(),A=m.getSourceFile().getFilePath();if(b!==A)return b.localeCompare(A);let C=p.getStart(!1),w=m.getStart(!1);return C!==w?C-w:p.getEnd()-m.getEnd()})[0],a=Un(e,s.getSourceFile().getFilePath()),o=s.getStart(!1),u=s.getEnd(),h="";try{h=n.getEscapedName()}catch{try{h=n.getName()}catch{h=""}}return`${a}#${o}-${u}:${h}`}function Vn(t){return x.isFunctionDeclaration(t)||x.isFunctionExpression(t)||x.isArrowFunction(t)||x.isClassDeclaration(t)||x.isClassExpression(t)||x.isInterfaceDeclaration(t)||x.isEnumDeclaration(t)||x.isEnumMember(t)||x.isTypeAliasDeclaration(t)||x.isModuleDeclaration(t)||x.isMethodDeclaration(t)||x.isMethodSignature(t)||x.isPropertyDeclaration(t)||x.isPropertySignature(t)||x.isGetAccessorDeclaration(t)||x.isSetAccessorDeclaration(t)||x.isConstructorDeclaration(t)||x.isVariableDeclaration(t)||x.isReturnStatement(t)||x.isIfStatement(t)||x.isForStatement(t)||x.isForInStatement(t)||x.isForOfStatement(t)||x.isWhileStatement(t)||x.isDoStatement(t)||x.isSwitchStatement(t)||x.isCaseClause(t)||x.isDefaultClause(t)||x.isTryStatement(t)||x.isCatchClause(t)||x.isThrowStatement(t)||x.isExpressionStatement(t)||x.isBlock(t)}function Qn(t){try{return x.isVariableDeclaration(t)||x.isEnumMember(t)?t.getNameNode().getSymbol()??t.getSymbol():t.getSymbol()}catch{return}}function Gn(t,e){let n=t.getDescendantAtPos(e);if(!n)return;let r=n;if(!x.isCallExpression(r)&&!x.isNewExpression(r)&&(r=n.getFirstAncestor(s=>x.isCallExpression(s)||x.isNewExpression(s))??void 0),!r||!x.isCallExpression(r)&&!x.isNewExpression(r))return;let i=r.getExpression();try{return x.isIdentifier(i)?i.getSymbol():x.isPropertyAccessExpression(i)?i.getNameNode().getSymbol()??i.getSymbol():i.getSymbol()}catch{return}}async function Yn(t){let{sf:e,fileRel:n,preDeleted:r,meta:i,projectRoot:s,lang:a}=t,u=Tt(e,(g,y)=>It(n,g,a,y),new Set,{includeComments:!1}),h=new Map;e.forEachDescendant(g=>{if(!Vn(g))return;let y;try{y=It(n,g,a)}catch{return}let N=Dt(Qn(g),s);N&&(h.has(y)||h.set(y,N))});let p=[],m=new Map,b=u.exports.filter(g=>g.kind!=="reexport"),A=u.exports.filter(g=>g.kind==="reexport");for(let g of b)if(g.kind==="local"){let y=g.isDefault?"default":g.name;if(!y||m.has(y))continue;let N=g.nodeId;p.push([n,y,N,0,null,null,g.isDefault?"default":"named"]),m.set(y,N)}else if(g.kind==="alias"){let y=g.exported;if(!y||m.has(y))continue;p.push([n,y,null,0,null,g.local,"alias"]),m.set(y,"alias")}for(let g of A){let y=g.moduleSpecifier;if(!y)continue;let N=y;if(g.isNamespace){let S=g.alias||"*";if(m.has(S))continue;p.push([n,S,null,1,N,g.name||S,"reexport_star"]),m.set(S,"reexport")}else{let S=g.alias||g.name;if(!S||m.has(S))continue;p.push([n,S,null,1,N,g.name||S,"reexport_named"]),m.set(S,"reexport")}}let C=[],w=null;try{let g=e.getFullText?.();typeof g=="string"&&(w=g)}catch{w=null}if(w==null)try{let g=e.getFullText();w=typeof g=="string"?g:null}catch{w=null}for(let g of u.nodes){let{nodeId:y,nodeName:N,containerKind:S,containerRawKind:K,containerRawKindSource:j,isExported:T,kind:D,rawKind:O,rawKindSource:B,semanticKind:q,start:V,end:fe,paramCount:qe,metadata:Q}=g,He=Q&&Object.keys(Q).length?JSON.stringify(Q):null,Cn=h.get(y)??null;C.push([y,N??null,D,O??D,B??null,q??null,V,fe,T?1:0,S??"module",K??S??"module",j??null,qe,null,null,Cn,He])}let M=[];for(let g of u.references){let{name:y,kind:N,containerId:S,containerName:K,expression:j,objectName:T,start:D,end:O}=g,B=null,q=null,V=Dt(Gn(e,D),s),fe=y?u.localDeclarations.get(y):void 0;fe&&(B=fe,q=n,V||(V=h.get(fe)??null));let qe=Ne({sourceFile:n,sourceStart:D,sourceEnd:O,refKind:N,refName:y,targetFile:q,targetNodeId:B}),Q={};j&&(Q.expression=j),T&&(Q.objectName=T),K&&(Q.containerName=K);let He=Object.keys(Q).length?JSON.stringify(Q):null;M.push([qe,n,S,y,N,D,O,B,q,B?"resolved":"unresolved",T??null,null,null,V,He])}let l=[],P=[];for(let g of u.imports){let y=g.moduleSpecifier??null;l.push([n,y,g.isTypeOnly?1:0]),g.defaultImport&&P.push([n,y,"default",g.defaultImport,"default",g.isTypeOnly?1:0]),g.namespaceImport&&P.push([n,y,"namespace",g.namespaceImport,"*",g.isTypeOnly?1:0]);for(let N of g.namedImports){let S=N.alias||N.name;P.push([n,y,"named",S,N.name,g.isTypeOnly?1:0])}}let R=Ge.join(s,n),d=i?.size,v=i?.mtime;if(d===void 0||v===void 0)try{let g=Jn.statSync(R);d=g.size,v=Math.floor(g.mtimeMs)}catch{}let E=new Date().toISOString(),_=[n,v??null,d??null,"completed",E],$=null;if(typeof w=="string")$={blobOid:n,content:w};else try{let g=e.getFullText?.();typeof g=="string"&&($={blobOid:n,content:g})}catch(g){console.log(`[TypescriptIndexer] Failed to compute FTS payload for ${n}:`,g?.message??g)}return{payload:{lang:a,fileRel:n,preDeleted:r,exportRows:p,nodeRows:C,referenceRows:M,importRows:l,importBindingRows:P,fileRow:_,fts:$},fileSize:d,mtime:v}}var Qe=class{constructor(e,n){this.project=null;this.filesProcessed=0;this.projectRoot=e,this.lang=n}getProject(){return this.project||(this.project=new Wn({useInMemoryFileSystem:!0,skipAddingFilesFromTsConfig:!0})),this.project}disposeProject(){if(this.project){try{let e=this.project.getLanguageService().compilerObject;typeof e?.dispose=="function"&&e.dispose()}catch{}this.project=null}}async process(e){let r=this.getProject().createSourceFile(Ge.join(this.projectRoot,e.relPath),e.content,{overwrite:!0}),i=await Yn({sf:r,fileRel:e.relPath,preDeleted:!!e.preDeleted,meta:e.meta,projectRoot:this.projectRoot,lang:e.lang});return this.filesProcessed++,this.filesProcessed>=Xn&&(this.disposeProject(),this.filesProcessed=0),{payload:i.payload,fileSize:i.fileSize,mtime:i.mtime}}};function Zn(t){return t==="ts"?[".ts",".tsx",".mts",".cts"]:t==="js"?[".js",".jsx",".mjs",".cjs"]:[]}function Ye(t){return{id:t,extensions:Zn(t),indexingMode:"worker",createIndexer:e=>new Qe(e,t)}}import Ae from"fs";import ee from"path";import{spawn as rr,spawnSync as Lt}from"child_process";import er from"fs";var ce=class{constructor(e=5e3){this.maxEntries=e;this.cache=new Map}get(e,n){let r=this.cache.get(e);if(!r)return null;let i=n?.mtime??null,s=n?.size??null;return i!=null&&s!=null&&r.mtime===i&&r.size===s?r.result:null}set(e,n,r){let i=n?.mtime??null,s=n?.size??null;this.cache.set(e,{mtime:i,size:s,result:r}),this.cache.size>this.maxEntries&&this.cache.clear()}};oe();var Ze=class{constructor(e,n,r,i){this.projectRoot=e;this.lang=n;this.parse=r;this.exportKind=i;this.cache=new ce}async process(e){let n=e.meta?.mtime,r=e.meta?.size;if(n==null||r==null)try{let a=er.statSync(e.absPath);n=Math.floor(a.mtimeMs),r=a.size}catch{}let i=this.cache.get(e.absPath,{mtime:n,size:r});if(i)return me({lang:this.lang,fileRel:e.relPath,content:e.content,meta:{mtime:n,size:r},preDeleted:e.preDeleted,parsed:i,resolveNodeId:Kt(e.relPath,i,this.lang),exportKind:this.exportKind??"cli"});let s=null;try{s=await this.parse({absPath:e.absPath,relPath:e.relPath,content:e.content,meta:{mtime:n,size:r},projectRoot:this.projectRoot,lang:this.lang})}catch(a){try{console.log(`[CliContract:${this.lang}] parse threw for ${e.relPath}: ${a?.message||String(a)}`)}catch{}return ge(this.lang,e.relPath,{mtime:n,size:r})}return!s||s.error?ge(this.lang,e.relPath,{mtime:n,size:r}):(this.cache.set(e.absPath,{mtime:n,size:r},s),me({lang:this.lang,fileRel:e.relPath,content:e.content,meta:{mtime:n,size:r},preDeleted:e.preDeleted,parsed:s,resolveNodeId:Kt(e.relPath,s,this.lang),exportKind:this.exportKind??"cli"}))}};function Kt(t,e,n){let r=new Map;for(let i of e.nodes??[]){if(!i.name||i.containerKind||r.has(i.name))continue;let s=`${t}#${i.start}-${i.end}:${G.getAbbrev(i.kind,n)}`;r.set(i.name,s)}return i=>r.get(i)??null}function W(t){return{id:t.id,extensions:t.extensions,indexingMode:"worker",createIndexer:e=>new Ze(e,t.id,t.parse,t.exportKind),resolveSpan:t.resolve?async(e,n,r)=>t.resolve({projectRoot:e,absPath:n,nodePath:r,lang:t.id}):void 0}}import tr from"fs";import et from"path";var Ft=null;function nr(t){for(let e of t)if(tr.existsSync(e))return e;return null}function X(t){let e=Ft?.toolsRoot??process.env.PANDO_TOOLS_ROOT,n=Ft?.runtimeRoot??process.env.PANDO_RUNTIME_ROOT,r=[e?et.join(e,t):null,n?et.join(n,"tools",t):null,et.resolve(process.cwd(),"tools",t)].filter(i=>!!i);return nr(r)}function H(...t){try{let e=t.map(n=>{if(typeof n=="string")return n;try{return JSON.stringify(n)}catch{return String(n)}}).join(" ");process.stderr.write(e+`
6
+ `)}catch{}}var Te=class{constructor(e,n){this.interpreter=e;this.scriptPath=n;this.buffer=Buffer.alloc(0);this.pending=new Map;this.seq=1;this.closed=!1;if(this.proc=rr(this.interpreter,["-u",this.scriptPath],{stdio:["pipe","pipe","pipe"]}),!this.proc.stdout||!this.proc.stderr||!this.proc.stdin)throw new Error("python worker stdio unavailable");this.proc.stdout.on("data",r=>this.onData(r)),this.proc.stderr.on("data",r=>{H(`[PythonWorker] ${r.toString("utf8").trim()}`)}),this.proc.stdin.on("error",r=>this.handleError(r)),this.proc.on("error",r=>this.handleError(r)),this.proc.on("exit",r=>this.handleError(new Error(`python worker exited with code ${r}`))),this.ready=this.ping()}handleError(e){if(!this.closed){this.closed=!0;for(let[,n]of this.pending)n.timeout&&clearTimeout(n.timeout),n.summary&&H("[PythonCliAdapter] worker error",{interpreter:this.interpreter,error:e.message,...n.summary}),n.reject(e);this.pending.clear()}}onData(e){for(this.buffer=Buffer.concat([this.buffer,e]);this.buffer.length>=4;){let n=this.buffer.readUInt32BE(0);if(this.buffer.length<4+n)return;let r=this.buffer.slice(4,4+n);this.buffer=this.buffer.slice(4+n);let i=null;try{i=JSON.parse(r.toString("utf8"))}catch{continue}let s=this.pending.get(i.id);s&&(this.pending.delete(i.id),s.timeout&&clearTimeout(s.timeout),i.ok?s.resolve(i):s.reject(new Error(i.error||"python worker error")))}}sendMessage(e){if(this.closed)throw new Error("python worker is closed");let n=Buffer.from(JSON.stringify(e),"utf8"),r=Buffer.alloc(4);r.writeUInt32BE(n.length,0),this.proc.stdin.write(r),this.proc.stdin.write(n)}async requestRaw(e,n,r=1e4){let i=this.seq++,s={id:i,op:e,...n},a=Date.now(),o={op:e,id:i};return typeof n?.path=="string"&&(o.path=n.path),typeof n?.nodePath=="string"&&(o.nodePath=n.nodePath),typeof n?.content_b64=="string"&&(o.contentBytes=n.content_b64.length),new Promise((u,h)=>{let p=setTimeout(()=>{this.pending.delete(i),H("[PythonCliAdapter] worker timeout",{op:e,id:i,timeoutMs:r,pending:this.pending.size,interpreter:this.interpreter,...o}),h(new Error(`python worker timeout (${e})`))},r);this.pending.set(i,{resolve:u,reject:h,timeout:p,summary:o}),this.pending.size%200===0&&H("[PythonCliAdapter] worker pending",{op:e,pending:this.pending.size,interpreter:this.interpreter});try{this.sendMessage(s)}catch(m){clearTimeout(p),this.pending.delete(i),h(m)}})}async request(e,n,r=1e4){await this.ready;let i=Date.now(),s=await this.requestRaw(e,n,r),a=Date.now()-i;return a>2e3&&H("[PythonCliAdapter] worker slow",{op:e,ms:a,pending:this.pending.size,interpreter:this.interpreter,path:n?.path}),s}async ping(){await this.requestRaw("ping",{},5e3)}async parse(e){let n=Buffer.from(e.content,"utf8").toString("base64"),r=await this.request("parse",{path:e.path,content_b64:n,encoding:e.encoding});return r.nodes?r:null}async resolve(e){let n=Buffer.from(e.content,"utf8").toString("base64"),r=await this.request("resolve",{path:e.path,nodePath:e.nodePath,content_b64:n,encoding:e.encoding});return typeof r.start=="number"&&typeof r.end=="number"?r:null}},ir=`
7
+ import ast, json, sys, os
8
+
9
+ path = sys.argv[1]
10
+ with open(path, 'r', encoding='utf-8', errors='ignore') as f:
11
+ src = f.read()
12
+
13
+ # line start offsets
14
+ line_starts = [0]
15
+ for line in src.splitlines(True):
16
+ line_starts.append(line_starts[-1] + len(line))
17
+
18
+ def offset(lineno, col):
19
+ if lineno is None:
20
+ return 0
21
+ if lineno < 1:
22
+ lineno = 1
23
+ if lineno >= len(line_starts):
24
+ return line_starts[-1]
25
+ return line_starts[lineno - 1] + (col or 0)
26
+
27
+ def node_span(n):
28
+ start = offset(getattr(n, 'lineno', None), getattr(n, 'col_offset', 0))
29
+ end = offset(getattr(n, 'end_lineno', getattr(n, 'lineno', None)), getattr(n, 'end_col_offset', 0))
30
+ if end < start:
31
+ end = start
32
+ return start, end
33
+
34
+ nodes = []
35
+ imports = []
36
+ bindings = []
37
+ references = []
38
+ class_names = set()
39
+ module_public = set()
40
+ all_exports = None
41
+
42
+ module_name = os.path.splitext(os.path.basename(path))[0] if path else "__main__"
43
+ scope_stack = [module_name]
44
+ nodes.append({
45
+ 'name': module_name,
46
+ 'kind': 'Namespace',
47
+ 'rawKind': 'Module',
48
+ 'rawKindSource': 'python-ast',
49
+ 'semanticKind': 'namespace',
50
+ 'start': 0,
51
+ 'end': len(src),
52
+ 'isExported': 1,
53
+ 'containerKind': None,
54
+ 'containerRawKind': None,
55
+ 'containerRawKindSource': None,
56
+ 'paramCount': None,
57
+ 'qualifiedName': module_name,
58
+ 'scopeChain': [module_name],
59
+ 'metadata': { 'path': path },
60
+ })
61
+
62
+ def decorator_names(node_list):
63
+ out = []
64
+ for d in node_list or []:
65
+ try:
66
+ if isinstance(d, ast.Name):
67
+ out.append(d.id)
68
+ elif isinstance(d, ast.Attribute):
69
+ out.append(d.attr)
70
+ elif hasattr(ast, 'Call') and isinstance(d, ast.Call):
71
+ if isinstance(d.func, ast.Name):
72
+ out.append(d.func.id)
73
+ elif isinstance(d.func, ast.Attribute):
74
+ out.append(d.func.attr)
75
+ except Exception:
76
+ pass
77
+ return out
78
+
79
+ def annotation_text(n):
80
+ try:
81
+ return ast.get_source_segment(src, n)
82
+ except Exception:
83
+ return None
84
+
85
+ def raw_kind(n):
86
+ try:
87
+ return n.__class__.__name__
88
+ except Exception:
89
+ return None
90
+
91
+ def base_name(txt):
92
+ try:
93
+ return txt.split('.')[-1]
94
+ except Exception:
95
+ return txt
96
+
97
+ ENUM_BASES = set(['Enum', 'IntEnum', 'StrEnum', 'Flag', 'IntFlag'])
98
+ META_BASES = set(['type', 'ABCMeta', 'EnumMeta'])
99
+
100
+ def is_enum_base(txt):
101
+ if not txt:
102
+ return False
103
+ name = base_name(txt)
104
+ return name in ENUM_BASES
105
+
106
+ def is_metaclass_base(txt):
107
+ if not txt:
108
+ return False
109
+ name = base_name(txt)
110
+ return name in META_BASES
111
+
112
+ class Visitor(ast.NodeVisitor):
113
+ def __init__(self):
114
+ self.class_name = None
115
+ self.class_is_enum = False
116
+ self.class_stack = []
117
+ self.func_name = None
118
+ self.func_stack = []
119
+ self.scope_stack = list(scope_stack)
120
+
121
+ def visit_ClassDef(self, n):
122
+ start, end = node_span(n)
123
+ name = n.name
124
+ class_names.add(name)
125
+ deco = decorator_names(getattr(n, 'decorator_list', None))
126
+ bases = []
127
+ is_enum = False
128
+ is_meta = False
129
+ meta_value = None
130
+ try:
131
+ for kw in getattr(n, 'keywords', []) or []:
132
+ if getattr(kw, 'arg', None) == 'metaclass':
133
+ meta_value = annotation_text(kw.value)
134
+ except Exception:
135
+ meta_value = None
136
+ try:
137
+ for b in getattr(n, 'bases', []) or []:
138
+ txt = annotation_text(b)
139
+ if txt:
140
+ bases.append(txt)
141
+ if is_enum_base(txt):
142
+ is_enum = True
143
+ if is_metaclass_base(txt):
144
+ is_meta = True
145
+ except Exception:
146
+ pass
147
+ is_exported = 0 if name.startswith('_') else 1
148
+ if is_exported:
149
+ module_public.add(name)
150
+ metadata = {
151
+ 'decorators': deco,
152
+ 'extends': bases if bases else None,
153
+ 'visibility': 'private' if name.startswith('_') else 'public'
154
+ }
155
+ if meta_value:
156
+ metadata['metaclass'] = meta_value
157
+ if is_meta:
158
+ metadata['isMetaclass'] = True
159
+ if is_enum:
160
+ metadata['isEnum'] = True
161
+ scope_chain = self.scope_stack + [name]
162
+ nodes.append({
163
+ 'name': name,
164
+ 'kind': 'Enum' if is_enum else 'Class',
165
+ 'rawKind': raw_kind(n),
166
+ 'rawKindSource': 'python-ast',
167
+ 'semanticKind': 'enum' if is_enum else 'class',
168
+ 'start': start,
169
+ 'end': end,
170
+ 'isExported': is_exported,
171
+ 'containerKind': None,
172
+ 'containerRawKind': None,
173
+ 'containerRawKindSource': None,
174
+ 'paramCount': None,
175
+ 'qualifiedName': '.'.join(scope_chain),
176
+ 'scopeChain': scope_chain,
177
+ 'metadata': metadata,
178
+ })
179
+ prev = self.class_name
180
+ prev_enum = self.class_is_enum
181
+ self.class_stack.append({ 'name': name, 'is_enum': is_enum })
182
+ self.class_name = name
183
+ self.class_is_enum = is_enum
184
+ self.scope_stack.append(name)
185
+ self.generic_visit(n)
186
+ self.scope_stack.pop()
187
+ self.class_stack.pop()
188
+ self.class_name = prev
189
+ self.class_is_enum = prev_enum
190
+
191
+ def visit_FunctionDef(self, n):
192
+ start, end = node_span(n)
193
+ name = n.name
194
+ param_count = len(getattr(n, 'args', {}).args) if hasattr(n, 'args') else None
195
+ is_async = isinstance(n, ast.AsyncFunctionDef)
196
+ deco = decorator_names(getattr(n, 'decorator_list', None))
197
+ ret = annotation_text(getattr(n, 'returns', None)) if hasattr(n, 'returns') else None
198
+ is_static = 'staticmethod' in deco
199
+ is_abstract = 'abstractmethod' in deco
200
+ is_readonly = 'property' in deco
201
+ visibility = 'private' if name.startswith('_') else 'public'
202
+ scope_chain = self.scope_stack + [name]
203
+ if self.class_name:
204
+ sem_kind = 'property' if is_readonly else 'method'
205
+ nodes.append({
206
+ 'name': name,
207
+ 'kind': 'Method',
208
+ 'rawKind': raw_kind(n),
209
+ 'rawKindSource': 'python-ast',
210
+ 'semanticKind': sem_kind,
211
+ 'start': start,
212
+ 'end': end,
213
+ 'isExported': 0,
214
+ 'containerKind': 'Class',
215
+ 'containerRawKind': 'ClassDef',
216
+ 'containerRawKindSource': 'python-ast',
217
+ 'paramCount': param_count,
218
+ 'qualifiedName': '.'.join(scope_chain),
219
+ 'scopeChain': scope_chain,
220
+ 'metadata': { 'isAsync': is_async, 'containerName': self.class_name, 'decorators': deco, 'returnType': ret, 'isStatic': is_static, 'isAbstract': is_abstract, 'isReadonly': is_readonly, 'visibility': visibility },
221
+ })
222
+ else:
223
+ is_exported = 0 if name.startswith('_') else 1
224
+ if is_exported:
225
+ module_public.add(name)
226
+ nodes.append({
227
+ 'name': name,
228
+ 'kind': 'Function',
229
+ 'rawKind': raw_kind(n),
230
+ 'rawKindSource': 'python-ast',
231
+ 'semanticKind': 'function',
232
+ 'start': start,
233
+ 'end': end,
234
+ 'isExported': is_exported,
235
+ 'containerKind': None,
236
+ 'containerRawKind': None,
237
+ 'containerRawKindSource': None,
238
+ 'paramCount': param_count,
239
+ 'qualifiedName': '.'.join(scope_chain),
240
+ 'scopeChain': scope_chain,
241
+ 'metadata': { 'isAsync': is_async, 'decorators': deco, 'returnType': ret, 'isAbstract': is_abstract, 'visibility': visibility },
242
+ })
243
+ prev = self.func_name
244
+ self.func_name = name
245
+ self.func_stack.append(name)
246
+ self.scope_stack.append(name)
247
+ self.generic_visit(n)
248
+ self.scope_stack.pop()
249
+ self.func_stack.pop()
250
+ self.func_name = prev
251
+
252
+ def visit_AsyncFunctionDef(self, n):
253
+ self.visit_FunctionDef(n)
254
+
255
+ def visit_Import(self, n):
256
+ for alias in n.names:
257
+ module = alias.name
258
+ imports.append({ 'module': module, 'isTypeOnly': 0 })
259
+ local = alias.asname or alias.name
260
+ if local and not local.startswith('_'):
261
+ module_public.add(local)
262
+ bindings.append({
263
+ 'module': module,
264
+ 'localName': local,
265
+ 'importedName': alias.name,
266
+ 'kind': 'named',
267
+ 'isTypeOnly': 0,
268
+ })
269
+
270
+ def visit_ImportFrom(self, n):
271
+ module = n.module
272
+ imports.append({ 'module': module, 'isTypeOnly': 0 })
273
+ for alias in n.names:
274
+ if alias.name == '*':
275
+ bindings.append({
276
+ 'module': module,
277
+ 'localName': alias.asname or '*',
278
+ 'importedName': '*',
279
+ 'kind': 'namespace',
280
+ 'isTypeOnly': 0,
281
+ })
282
+ else:
283
+ bindings.append({
284
+ 'module': module,
285
+ 'localName': alias.asname or alias.name,
286
+ 'importedName': alias.name,
287
+ 'kind': 'named',
288
+ 'isTypeOnly': 0,
289
+ })
290
+ local_name = alias.asname or alias.name
291
+ if local_name and not local_name.startswith('_'):
292
+ module_public.add(local_name)
293
+
294
+ def visit_Assign(self, n):
295
+ # module-level or class-level names
296
+ global all_exports
297
+ targets = getattr(n, 'targets', [])
298
+ for t in targets:
299
+ if isinstance(t, ast.Name):
300
+ start, end = node_span(t)
301
+ name = t.id
302
+ is_exported = 0 if name.startswith('_') else 1
303
+ scope_chain = self.scope_stack + [name]
304
+ if self.class_name:
305
+ if self.class_is_enum:
306
+ nodes.append({
307
+ 'name': name,
308
+ 'kind': 'EnumMember',
309
+ 'rawKind': raw_kind(t),
310
+ 'rawKindSource': 'python-ast',
311
+ 'semanticKind': 'enum',
312
+ 'start': start,
313
+ 'end': end,
314
+ 'isExported': 0,
315
+ 'containerKind': 'Enum',
316
+ 'containerRawKind': 'ClassDef',
317
+ 'containerRawKindSource': 'python-ast',
318
+ 'paramCount': None,
319
+ 'qualifiedName': '.'.join(scope_chain),
320
+ 'scopeChain': scope_chain,
321
+ 'metadata': { 'containerName': self.class_name, 'visibility': 'private' if name.startswith('_') else 'public' },
322
+ })
323
+ continue
324
+ nodes.append({
325
+ 'name': name,
326
+ 'kind': 'Field',
327
+ 'rawKind': raw_kind(t),
328
+ 'rawKindSource': 'python-ast',
329
+ 'semanticKind': 'field',
330
+ 'start': start,
331
+ 'end': end,
332
+ 'isExported': 0,
333
+ 'containerKind': 'Class',
334
+ 'containerRawKind': 'ClassDef',
335
+ 'containerRawKindSource': 'python-ast',
336
+ 'paramCount': None,
337
+ 'qualifiedName': '.'.join(scope_chain),
338
+ 'scopeChain': scope_chain,
339
+ 'metadata': { 'containerName': self.class_name, 'visibility': 'private' if name.startswith('_') else 'public' },
340
+ })
341
+ else:
342
+ if is_exported:
343
+ module_public.add(name)
344
+ nodes.append({
345
+ 'name': name,
346
+ 'kind': 'Variable',
347
+ 'rawKind': raw_kind(t),
348
+ 'rawKindSource': 'python-ast',
349
+ 'semanticKind': 'variable',
350
+ 'start': start,
351
+ 'end': end,
352
+ 'isExported': is_exported,
353
+ 'containerKind': None,
354
+ 'containerRawKind': None,
355
+ 'containerRawKindSource': None,
356
+ 'paramCount': None,
357
+ 'qualifiedName': '.'.join(scope_chain),
358
+ 'scopeChain': scope_chain,
359
+ 'metadata': { 'visibility': 'private' if name.startswith('_') else 'public' },
360
+ })
361
+ if (not self.class_name) and name == '__all__':
362
+ try:
363
+ if isinstance(n.value, (ast.List, ast.Tuple)):
364
+ all_list = []
365
+ for elt in n.value.elts:
366
+ if isinstance(elt, ast.Str):
367
+ all_list.append(elt.s)
368
+ elif hasattr(ast, 'Constant') and isinstance(elt, ast.Constant) and isinstance(elt.value, str):
369
+ all_list.append(elt.value)
370
+ if all_list:
371
+ all_exports = all_list
372
+ except Exception:
373
+ pass
374
+ self.generic_visit(n)
375
+
376
+ def visit_Call(self, n):
377
+ try:
378
+ func = n.func
379
+ call_name = None
380
+ object_name = None
381
+ expr_text = None
382
+ if isinstance(func, ast.Name):
383
+ call_name = func.id
384
+ elif isinstance(func, ast.Attribute):
385
+ call_name = func.attr
386
+ if isinstance(func.value, ast.Name):
387
+ object_name = func.value.id
388
+ try:
389
+ expr_text = ast.get_source_segment(src, func)
390
+ except Exception:
391
+ expr_text = None
392
+ start, end = node_span(n)
393
+ kind = 'new' if call_name in class_names else 'call'
394
+ container_name = self.class_name or self.func_name
395
+ container_kind = 'Class' if self.class_name else ('Function' if self.func_name else None)
396
+ try:
397
+ arity = len(getattr(n, 'args', []) or []) + len(getattr(n, 'keywords', []) or [])
398
+ except Exception:
399
+ arity = 0
400
+ container_qualified_name = '.'.join(self.scope_stack) if self.scope_stack else None
401
+ references.append({
402
+ 'name': call_name,
403
+ 'kind': kind,
404
+ 'start': start,
405
+ 'end': end,
406
+ 'expression': expr_text,
407
+ 'objectName': object_name,
408
+ 'containerName': container_name,
409
+ 'containerKind': container_kind,
410
+ 'receiverName': object_name,
411
+ 'arity': arity,
412
+ 'containerQualifiedName': container_qualified_name,
413
+ })
414
+ except Exception:
415
+ pass
416
+ self.generic_visit(n)
417
+
418
+ try:
419
+ tree = ast.parse(src, filename=path)
420
+ Visitor().visit(tree)
421
+ out = { 'nodes': nodes, 'imports': imports, 'importBindings': bindings, 'references': references, 'modulePublic': sorted(list(module_public)), 'explicitExports': all_exports }
422
+ print(json.dumps(out))
423
+ except Exception as e:
424
+ print(json.dumps({ 'error': str(e) }))
425
+ sys.exit(2)
426
+ `,sr=`
427
+ import ast, json, sys
428
+
429
+ path = sys.argv[1]
430
+ node_path = sys.argv[2]
431
+ with open(path, 'r', encoding='utf-8', errors='ignore') as f:
432
+ src = f.read()
433
+
434
+ # line start offsets
435
+ line_starts = [0]
436
+ for line in src.splitlines(True):
437
+ line_starts.append(line_starts[-1] + len(line))
438
+
439
+ def offset(lineno, col):
440
+ if lineno is None:
441
+ return 0
442
+ if lineno < 1:
443
+ lineno = 1
444
+ if lineno >= len(line_starts):
445
+ return line_starts[-1]
446
+ return line_starts[lineno - 1] + (col or 0)
447
+
448
+ def node_span(n):
449
+ start = offset(getattr(n, 'lineno', None), getattr(n, 'col_offset', 0))
450
+ end = offset(getattr(n, 'end_lineno', getattr(n, 'lineno', None)), getattr(n, 'end_col_offset', 0))
451
+ if end < start:
452
+ end = start
453
+ return start, end
454
+
455
+ def parse_range(node_path):
456
+ clean = node_path
457
+ if clean.startswith('SyntaxError:') or clean.startswith('CompileError:'):
458
+ clean = clean.split(':', 1)[1]
459
+ if '#' in clean:
460
+ clean = clean.split('#', 1)[1]
461
+ if ':' in clean:
462
+ clean = clean.rsplit(':', 1)[0]
463
+ if '-' not in clean:
464
+ return None
465
+ parts = clean.split('-', 1)
466
+ try:
467
+ return int(parts[0]), int(parts[1])
468
+ except Exception:
469
+ return None
470
+
471
+ target = parse_range(node_path)
472
+ if target is None:
473
+ print(json.dumps({ 'error': 'invalid nodePath' }))
474
+ sys.exit(2)
475
+
476
+ target_start, target_end = target
477
+ resolved = None
478
+
479
+ try:
480
+ tree = ast.parse(src, filename=path)
481
+ for n in ast.walk(tree):
482
+ s, e = node_span(n)
483
+ if s == target_start and e == target_end:
484
+ body_start = None
485
+ body_end = None
486
+ if hasattr(n, 'body') and isinstance(n.body, list) and len(n.body) > 0:
487
+ try:
488
+ bs, _ = node_span(n.body[0])
489
+ _, be = node_span(n.body[-1])
490
+ body_start = bs
491
+ body_end = be
492
+ except Exception:
493
+ body_start = None
494
+ body_end = None
495
+ try:
496
+ text = src[s:e]
497
+ except Exception:
498
+ text = None
499
+ resolved = { 'start': s, 'end': e, 'bodyStart': body_start, 'bodyEnd': body_end, 'text': text }
500
+ break
501
+ if not resolved:
502
+ print(json.dumps({ 'error': 'node not found' }))
503
+ sys.exit(2)
504
+ print(json.dumps(resolved))
505
+ except Exception as e:
506
+ print(json.dumps({ 'error': str(e) }))
507
+ sys.exit(2)
508
+ `;function jt(t){let e=ee.resolve(t,"tools/python-indexer/pando_python_worker.py");if(Ae.existsSync(e))return e;let n=X("python-indexer/pando_python_worker.py");if(n)return n;let r=ee.resolve(__dirname,"../../../../../tools/python-indexer/pando_python_worker.py");return Ae.existsSync(r)?r:null}var de=new Map;function ue(t){try{return Ae.readFileSync(t,"utf8")}catch{return null}}function be(t){if(!t)return null;let e=t.match(/(\d+)\.(\d+)/);return e?{major:Number(e[1]),minor:Number(e[2])}:null}function ar(t){let e=ue(ee.join(t,"pyproject.toml"));if(e){let o=e.match(/requires-python\s*=\s*"([^"]+)"/i),u=be(o?.[1]??null);if(u)return u}let n=ue(ee.join(t,"setup.cfg"));if(n){let o=n.match(/python_requires\s*=\s*([\w\d\.<>~=\s]+)/i),u=be(o?.[1]??null);if(u)return u}let r=ue(ee.join(t,"setup.py"));if(r){let o=r.match(/python_requires\s*=\s*['\"]([^'\"]+)['\"]/i),u=be(o?.[1]??null);if(u)return u}let i=ue(ee.join(t,"tox.ini"));if(i){let o=i.match(/envlist\s*=\s*([^\n]+)/i);if(o&&o[1]){let u=o[1].split(/[,\s]+/).filter(Boolean);for(let h of u){let p=h.match(/py(\d)(\d)/i);if(p)return{major:Number(p[1]),minor:Number(p[2])}}}}let s=ue(ee.join(t,".python-version"));if(s){let o=be(s.trim());if(o)return o}let a=ue(ee.join(t,"runtime.txt"));if(a){let o=a.match(/python-(\d+\.\d+)/i),u=be(o?.[1]??null);if(u)return u}return null}function ke(t){return ar(t)?.major===2?["python2","python","python3"]:["python3","python","python2"]}async function or(t,e,n){let r=jt(t);if(!r)return null;let i=ke(t);for(let s of i){let a=`${s}::${r}`,o=de.get(a);if(!o)try{o=new Te(s,r),de.set(a,o)}catch{continue}try{let u=await o.parse({path:e,content:n,encoding:"utf-8"});if(u)return u}catch{H("[PythonCliAdapter] worker parse error",{file:e,interpreter:s}),de.delete(a)}}return null}async function lr(t,e,n,r){let i=jt(t);if(!i)return null;let s=ke(t);for(let a of s){let o=`${a}::${i}`,u=de.get(o);if(!u)try{u=new Te(a,i),de.set(o,u)}catch{continue}try{let h=await u.resolve({path:e,nodePath:r,content:n,encoding:"utf-8"});if(h)return h}catch{H("[PythonCliAdapter] worker resolve error",{file:e,interpreter:a,nodePath:r}),de.delete(o)}}return null}function Mt(t,e){let n=Lt(t,["-c",ir,e],{encoding:"utf8"});if(n.error||typeof n.stdout!="string")return null;try{let r=JSON.parse(n.stdout.trim()||"{}");return r&&r.error?null:r}catch{return null}}function Ot(t,e,n){let r=Lt(t,["-c",sr,e,n],{encoding:"utf8"});if(r.error||typeof r.stdout!="string")return null;try{let i=JSON.parse(r.stdout.trim()||"{}");return i&&i.error||typeof i.start!="number"||typeof i.end!="number"?null:i}catch{return null}}async function cr(t){let e=Date.now(),n=!1,r=null;try{r=await or(t.projectRoot,t.absPath,t.content),n=!!r}catch{}if(!r){let a=ke(t.projectRoot),o=null;for(let u of a)if(r=Mt(u,t.absPath),r){o=u;break}if(!r&&a.length>1){for(let u of a.slice().reverse())if(r=Mt(u,t.absPath),r){o=u;break}}if(!r){H(`[PythonCliAdapter] parse failed for ${t.relPath} (interpreters tried: ${a.join(", ")})`);let u=Date.now()-e;return u>2e3&&H("[PythonCliAdapter] parse slow (failed)",{file:t.relPath,ms:u}),null}o&&H(`[PythonCliAdapter] parse ok for ${t.relPath} via ${o}`)}let i=[];for(let a of r.references||[]){let o={};a.expression&&(o.expression=a.expression),a.objectName&&(o.objectName=a.objectName),a.containerName&&(o.containerName=a.containerName),a.containerKind&&(o.containerKind=a.containerKind),i.push({sourceStart:a.start,sourceEnd:a.end,refKind:a.kind,refName:a.name,receiverName:a.receiverName??a.objectName??null,arity:typeof a.arity=="number"?a.arity:null,containerQualifiedName:a.containerQualifiedName??null,targetSymbolKey:a.targetSymbolKey??null,metadata:Object.keys(o).length?o:null})}let s=Date.now()-e;return s>2e3&&H("[PythonCliAdapter] parse slow",{file:t.relPath,ms:s,usedWorker:n}),{nodes:r.nodes,imports:r.imports,importBindings:r.importBindings,references:i,modulePublic:r.modulePublic??void 0,explicitExports:r.explicitExports??void 0}}function $t(){return W({id:"python",extensions:[".py",".pyw",".pyi"],exportKind:"named",parse:({absPath:t,relPath:e,projectRoot:n,content:r})=>cr({absPath:t,relPath:e,projectRoot:n,content:r}),resolve:async({absPath:t,nodePath:e,projectRoot:n})=>{try{let i=Ae.readFileSync(t,"utf8"),s=await lr(n,t,i,e);if(s)return s}catch{}let r=ke(n);for(let i of r){let s=Ot(i,t,e);if(s)return s}for(let i of r.slice().reverse()){let s=Ot(i,t,e);if(s)return s}return null}})}import Bt from"fs";import zt from"path";import{spawn as ur,spawnSync as Os}from"child_process";var dr=256e3,pr=32;function te(...t){try{let e=t.map(n=>{if(typeof n=="string")return n;try{return JSON.stringify(n)}catch{return String(n)}}).join(" ");process.stderr.write(e+`
509
+ `)}catch{}}var tt=class{constructor(e){this.cmd=e;this.proc=null;this.buffer="";this.pending=new Map;this.seq=1;this.closed=!1;this.ensureProcess()}ensureProcess(){if(!(this.proc&&!this.closed)){if(this.closed=!1,this.proc=ur(this.cmd,["--server"],{stdio:["pipe","pipe","pipe"]}),!this.proc.stdout||!this.proc.stderr||!this.proc.stdin)throw this.closed=!0,new Error("csharp indexer stdio unavailable");this.proc.stdout.on("data",e=>this.onData(e)),this.proc.stderr.on("data",e=>{te(`[CSharpIndexer] ${e.toString("utf8").trim()}`)}),this.proc.on("error",e=>this.handleExit(e)),this.proc.on("exit",e=>this.handleExit(new Error(`csharp indexer exited with code ${e}`)))}}handleExit(e){if(!this.closed){this.closed=!0;for(let[,n]of this.pending)n.reject(e);this.pending.clear()}}onData(e){for(this.buffer+=e.toString("utf8");;){let n=this.buffer.indexOf(`
510
+ `);if(n<0)break;let r=this.buffer.slice(0,n).trim();if(this.buffer=this.buffer.slice(n+1),!r)continue;let i=null;try{i=JSON.parse(r)}catch{continue}let s=this.pending.get(i.id);s&&(this.pending.delete(i.id),i.ok?s.resolve(i):s.reject(new Error(i.error||"csharp server error")))}}async request(e,n=1){this.ensureProcess();let r=this.seq++;return new Promise((i,s)=>{let a={id:r,...e};this.pending.set(r,{resolve:i,reject:s});try{this.proc.stdin.write(`${JSON.stringify(a)}
511
+ `)}catch(o){if(this.pending.delete(r),n>0){try{this.handleExit(o)}catch{}return this.request(e,n-1).then(i,s)}s(o)}})}async parseBatch(e){let n=await this.request({op:"parse",files:e});return"results"in n?n.results.map(r=>r.ok&&r.result?r.result:null):"result"in n?[n.result]:e.map(()=>null)}async resolve(e){let n=await this.request({op:"resolve",...e});return"result"in n&&n.result&&typeof n.result.start=="number"?n.result:null}async resolveReferences(e){let n=await this.request({op:"resolve-references",...e});return"result"in n&&n.result?n.result:null}},nt=class{constructor(e){this.client=e;this.queue=[];this.scheduled=!1}enqueue(e){return new Promise((n,r)=>{this.queue.push({input:e,resolve:n,reject:r,startedAt:Date.now()}),this.scheduled||(this.scheduled=!0,setImmediate(()=>this.flush()))})}async flush(){for(this.scheduled=!1;this.queue.length;){let e=[],n=0;for(;this.queue.length&&e.length<pr;){let r=this.queue[0];if(e.length>0&&n+r.input.size>dr)break;e.push(this.queue.shift()),n+=r.input.size}try{let r=await this.client.parseBatch(e.map(i=>({file:i.input.file,root:i.input.root,lang:i.input.lang})));for(let i=0;i<e.length;i+=1){let s=e[i],a=r[i]??null,o=Date.now()-s.startedAt;o>2e3&&te(`[${new Date().toISOString()}] [CSharpCliAdapter] parse slow`,{file:s.input.file,ms:o,path:"custom",ok:!!a}),a||te(`[${new Date().toISOString()}] [CSharpCliAdapter] parse failed`,{file:s.input.file,ms:o,path:"custom"}),s.resolve(a)}}catch(r){for(let i of e)i.reject(r)}}}},qt=new Map,Ht=new Map;function fr(t){let e=process.platform==="win32"?".cmd":"",n=X(`csharp-indexer/bin/pando-csharp-indexer${e}`);if(n)return n;if(t){let i=zt.resolve(t,"tools/csharp-indexer/bin/pando-csharp-indexer"+e);if(Bt.existsSync(i))return i}let r=zt.resolve(__dirname,"../../../../../tools/csharp-indexer/bin/pando-csharp-indexer"+e);return Bt.existsSync(r)?r:null}function Jt(t){let e=process.env.PANDO_CSHARP_INDEXER_CMD||fr(t);if(!e)return null;let n=qt.get(e);n||(n=new tt(e),qt.set(e,n));let r=Ht.get(e);return r||(r=new nt(n),Ht.set(e,r)),{client:n,batcher:r}}async function gr(t,e,n){let r=Jt(e);if(!r)return null;try{return await r.batcher.enqueue({file:t,root:e,lang:"csharp",size:n})}catch(i){return te(`[${new Date().toISOString()}] [CSharpCliAdapter] parse error`,{file:t,error:i?.message||i,path:"custom"}),null}}async function mr(t,e,n){let r=await gr(t,e,n);return r||null}function Wt(){return W({id:"csharp",extensions:[".cs",".csx",".cshtml",".razor"],parse:({absPath:t,projectRoot:e,content:n,meta:r})=>{let i=r?.size??Buffer.byteLength(n,"utf8");return mr(t,e,i)},resolve:({absPath:t,nodePath:e,projectRoot:n})=>{let r=Date.now(),i=Jt(n);return i?i.client.resolve({file:t,root:n,lang:"csharp",nodePath:e}).then(s=>{let a=Date.now()-r;return a>2e3&&te(`[${new Date().toISOString()}] [CSharpCliAdapter] resolve slow`,{file:t,ms:a}),s||te(`[${new Date().toISOString()}] [CSharpCliAdapter] resolve failed`,{file:t,ms:a,nodePath:e}),s}).catch(s=>{let a=Date.now()-r;return te(`[${new Date().toISOString()}] [CSharpCliAdapter] resolve error`,{file:t,ms:a,nodePath:e,error:s?.message||s}),null}):null}})}import{spawnSync as Nr}from"child_process";import Cr from"path";import U from"fs";import k from"path";var Ie=new Map,hr=["include","src","lib","libs","third_party","third-party","deps","vendor"];function Ut(t){let e=[],n="",r=null,i=!1;for(let s=0;s<t.length;s+=1){let a=t[s];if(i){n+=a,i=!1;continue}if(a==="\\"){i=!0;continue}if(r){a===r?r=null:n+=a;continue}if(a==='"'||a==="'"){r=a;continue}if(a===" "||a===`
512
+ `||a===" "||a==="\r"){n&&(e.push(n),n="");continue}n+=a}return n&&e.push(n),e}function yr(t,e){let n=[];for(let r=0;r<t.length;r+=1){let i=t[r];if(i!=="-c"){if(i==="-o"){r+=1;continue}i!==e&&((i.endsWith(".c")||i.endsWith(".cc")||i.endsWith(".cpp")||i.endsWith(".cxx")||i.endsWith(".c++"))&&k.isAbsolute(i)||n.push(i))}}return n}function Vt(t,e){return k.isAbsolute(t)?k.resolve(t):e?k.resolve(e,t):k.resolve(t)}function br(t){try{let e=U.readFileSync(t,"utf8"),n=JSON.parse(e),r=new Map;for(let i of n){let s=i.directory?k.resolve(i.directory):void 0,a=i.file?Vt(i.file,s):null;if(!a)continue;let o=s??k.dirname(a),u=Array.isArray(i.arguments)?i.arguments:i.command?Ut(i.command):[];if(u.length===0)continue;let h=yr(u.slice(1),a);r.set(a,{args:h,cwd:o})}return r}catch{return null}}function xr(t){try{let e=U.readFileSync(t,"utf8");return Ut(e.replace(/\r/g,`
513
+ `))}catch{return null}}function Qt(t){let e=k.join(t,"compile_commands.json");if(U.existsSync(e))return e;let n=["build","out","build-debug","build-release","cmake-build-debug","cmake-build-release"];for(let o of n){let u=k.join(t,o,"compile_commands.json");if(U.existsSync(u))return u}let r=n.map(o=>k.join(t,o)).filter(o=>U.existsSync(o));r.push(t);let i=10,s=new Set,a=(o,u)=>{if(u>i)return null;let h=k.resolve(o);if(s.has(h))return null;s.add(h);try{let p=U.readdirSync(o,{withFileTypes:!0});for(let m of p)if(m.isFile()&&m.name==="compile_commands.json")return k.join(o,m.name);for(let m of p){if(!m.isDirectory()||m.name==="node_modules"||m.name.startsWith("."))continue;let b=a(k.join(o,m.name),u+1);if(b)return b}}catch{}return null};for(let o of r){let u=a(o,0);if(u)return u}return null}function Sr(t,e){let n=k.resolve(t),r=k.resolve(e);for(;;){let i=Qt(n);if(i)return i;if(n===r)break;let s=k.dirname(n);if(s===n)break;n=s}return null}function Gt(t){let e=k.join(t,"compile_flags.txt");if(U.existsSync(e))return e;let n=["build","out","build-debug","build-release","cmake-build-debug","cmake-build-release"];for(let r of n){let i=k.join(t,r,"compile_flags.txt");if(U.existsSync(i))return i}return null}function vr(t,e){let n=k.resolve(t),r=k.resolve(e);for(;;){let i=Gt(n);if(i)return i;if(n===r)break;let s=k.dirname(n);if(s===n)break;n=s}return null}function De(t){if(t)try{return U.statSync(t).mtimeMs}catch{return}}function Xt(t,e){let n=e?`${k.resolve(t)}::${k.resolve(e)}`:k.resolve(t),r=Ie.get(n);if(r){let m=De(r.commandsPath);if(r.commandsPath&&m&&r.commandsMtime&&m!==r.commandsMtime)Ie.delete(n);else if(r.flagsPath){let b=De(r.flagsPath);b&&r.flagsMtime&&b!==r.flagsMtime&&Ie.delete(n)}else return r}let i=e?Sr(e,t):Qt(t),s=i?br(i)??void 0:void 0,a=De(i),o=s?null:e?vr(e,t):Gt(t),u=o?xr(o)??void 0:void 0,h=De(o),p={commands:s,flags:u,commandsPath:i,commandsMtime:a,flagsPath:o,flagsMtime:h};return Ie.set(n,p),p}function rt(t,e,n){let r=k.dirname(e),i=Xt(t);!i.commands&&!i.flags&&(i=Xt(t,r));let s=Vt(e);if(i.commands){let a=i.commands.get(s);if(a)return{args:a.args,cwd:a.cwd,source:"compile_commands"}}return i.flags?{args:i.flags,cwd:t,source:"compile_flags"}:it(t,n)}function it(t,e){let n=["-std="+(e==="cpp"?"c++20":"c17")];n.push("-I",t);for(let r of hr){let i=k.join(t,r);U.existsSync(i)&&n.push("-I",i)}return n.push("-ferror-limit=0"),{args:n,cwd:t,source:"fallback"}}function en(t){let e=[0];for(let n=0;n<t.length;n+=1)t.charCodeAt(n)===10&&e.push(n+1);return e}function Yt(t,e,n){if(!e||e<1)return 0;let r=Math.min(e-1,t.length-1),i=t[r]??0,s=Math.max((n??1)-1,0);return i+s}function pe(t){return t?Cr.resolve(t):null}function Zt(t,e,n){let r=Math.max(0,Math.min(n-1,t.length-1)),i=t[r]??0,s=r+1<t.length?t[r+1]:e;return Math.max(0,s-i)}function ne(t,e,n){let r=t.range?.begin??t.loc,i=t.range?.end??t.loc;if(!r?.line||r.line<1||r.line>e.length||r.col==null||r.col<1||i?.line&&(i.line<1||i.line>e.length)||i?.col!=null&&i.col<1)return null;let s=Zt(e,n,r.line);if((r.col??1)-1>s)return null;if(i?.line){let u=Zt(e,n,i.line);if((i.col??r.col??1)-1>u)return null}let a=Yt(e,r.line,r.col),o=Yt(e,i?.line??r.line,i?.col??r.col);return{start:a,end:Math.max(o,a)}}function Me(t){let e=t.range?.begin?.file||t.loc?.file||t.range?.end?.file||null;if(e)return pe(e);let n=t.range?.begin?.includedFrom?.file||t.range?.end?.includedFrom?.file||null;return pe(n)}function wr(t){let e=t.access;return typeof e=="string"?e:null}function Pr(t,e){let n={};e.containerName&&(n.containerName=e.containerName);let r=wr(t);r&&(n.visibility=r);let i=t.storageClass;i&&(n.storageClass=i);let s=t.isInline;typeof s=="boolean"&&(n.isInline=s);let a=t.isConstexpr;typeof a=="boolean"&&(n.isConstexpr=a);let o=t.isVirtual;typeof o=="boolean"&&(n.isVirtual=o);let u=t.isStatic;typeof u=="boolean"&&(n.isStatic=u);let h=t.type;return typeof h=="string"&&(n.type=h),n}function st(t,e,n){switch(t){case"FunctionDecl":return{kind:"Function",semanticKind:"function"};case"CXXMethodDecl":case"CXXConstructorDecl":case"CXXDestructorDecl":case"CXXConversionDecl":return{kind:"Method",semanticKind:"method"};case"FunctionTemplateDecl":case"ClassTemplateDecl":case"TypeAliasTemplateDecl":return{kind:"Template",semanticKind:"template"};case"ConceptDecl":return{kind:"Concept",semanticKind:"type"};case"TemplateTypeParmDecl":case"NonTypeTemplateParmDecl":case"TemplateTemplateParmDecl":return{kind:"TemplateParameter",semanticKind:"template"};case"NamespaceDecl":return{kind:"Namespace",semanticKind:"namespace"};case"NamespaceAliasDecl":return{kind:"NamespaceAlias",semanticKind:"namespace"};case"RecordDecl":return e==="struct"?{kind:"Struct",semanticKind:"struct"}:e==="union"?{kind:"Union",semanticKind:"union"}:{kind:"Class",semanticKind:"class"};case"EnumDecl":return{kind:"Enum",semanticKind:"enum"};case"EnumConstantDecl":return{kind:"EnumMember",semanticKind:"enum"};case"FieldDecl":return{kind:"Field",semanticKind:"field"};case"VarDecl":return{kind:n?"Field":"Variable",semanticKind:n?"field":"variable"};case"TypedefDecl":case"TypeAliasDecl":case"UsingDecl":case"UsingDirectiveDecl":case"UsingEnumDecl":return{kind:"TypeAlias",semanticKind:"type"};case"ParmVarDecl":return{kind:"Param",semanticKind:"variable"};case"MacroDefinition":return{kind:"Macro",semanticKind:"macro"};default:return null}}function Er(t,e,n,r){let i=[],s=pe(e),a=(o,u)=>{let h=Me(o),m=h&&(!s||h===s)?st(o.kind,o.tagUsed,u.containerKind):null,b=o.name;if(m&&b){m.kind==="Method"&&typeof b=="string"&&b.startsWith("operator")&&(m={kind:"Operator",semanticKind:"method"});let C=ne(o,n,r);if(C){let w=Pr(o,u);(m.kind==="Template"||m.kind==="TemplateParameter")&&(w.isTemplate=!0),m.kind==="Operator"&&(w.isOperator=!0),i.push({name:b,kind:m.kind,rawKind:o.kind??null,rawKindSource:"clang",semanticKind:m.semanticKind??null,start:C.start,end:C.end,isExported:u.containerKind?0:1,containerKind:u.containerKind??null,containerRawKind:u.containerRawKind??null,containerRawKindSource:u.containerRawKind?"clang":null,paramCount:null,metadata:Object.keys(w).length?w:null})}}let A=u;if(o.kind==="RecordDecl"&&o.name){let C=st(o.kind,o.tagUsed,u.containerKind);C&&(A={containerKind:C.kind,containerName:o.name,containerRawKind:o.kind??null})}o.kind==="EnumDecl"&&o.name&&(A={containerKind:"Enum",containerName:o.name,containerRawKind:o.kind??null}),o.kind==="NamespaceDecl"&&o.name&&(A={containerKind:"Namespace",containerName:o.name,containerRawKind:o.kind??null});for(let C of o.inner??[])a(C,A)};return a(t,{}),{nodes:i}}function at(t,e,n){let r=Nr(t,e,{encoding:"utf8",cwd:n});if(r.error)return null;let i=(r.stdout||"").trim();if(!i)return null;try{return JSON.parse(i)}catch{return null}}function tn(t){let e=`PANDO_${t.toUpperCase()}_INDEXER_CMD`;return process.env[e]||(t==="cpp"?"clang++":"clang")}function xe(t){let e=t?.referencedDecl?.name||t.name;if(e)return e;for(let n of t.inner??[]){let r=xe(n);if(r)return r}return null}function Rr(t,e){let n=[],r=pe(e),i=s=>{let a=Me(s);if(a&&(!r||a===r)&&s.kind==="InclusionDirective"){let h=s.spelling||s.includeName||null||s.file||s.filename||s.includedFile||s.headerName||null;h&&n.push({module:String(h),isTypeOnly:0})}for(let u of s.inner??[])i(u)};return i(t),{imports:n}}function Fe(t){if(t.kind==="MemberExpr"||t.kind==="ImplicitCastExpr")for(let e of t.inner??[]){if(e.kind==="DeclRefExpr"||e.kind==="MemberExpr")return e?.referencedDecl?.name||e.name||null;if(e.kind==="CXXThisExpr")return null;if(e.kind==="ImplicitCastExpr")return Fe(e)}if(t.kind==="CallExpr"||t.kind==="CXXMemberCallExpr"){for(let e of t.inner??[])if(e.kind==="MemberExpr")return Fe(e)}return null}function _r(t){return!t.inner||t.inner.length===0?null:t.kind==="CallExpr"?Math.max(0,t.inner.length-1):t.kind==="CXXConstructExpr"||t.kind==="CXXNewExpr"?t.inner.length:null}function Ar(t){if(t.kind!=="CallExpr")return null;let e=t.inner?.[0];return e&&e.kind==="MemberExpr"?Fe(e):null}function Ke(t,e){return t.containerQualifiedName?`${t.containerQualifiedName}::${e}`:e}function Tr(t,e,n,r){let i=[],s=pe(e),a=r.length,o=(p,m,b)=>{let A=Me(p),C=A&&(!s||A===s);if(C&&(p.kind==="CallExpr"||p.kind==="CXXConstructExpr"||p.kind==="CXXNewExpr")){let l=ne(p,n,a);if(l){let P=xe(p),R=p.kind==="CallExpr"?"call":"new",d=r.slice(l.start,l.end),v=Ar(p),E=_r(p);i.push({sourceStart:l.start,sourceEnd:l.end,refKind:R,refName:P,receiverName:v??void 0,arity:typeof E=="number"?E:void 0,containerQualifiedName:m.containerQualifiedName??void 0,metadata:d?{expression:d,containerName:m.containerName,containerKind:m.containerKind}:null})}}if(C&&p.kind==="TypeRef"){let l=ne(p,n,a);if(l){let P=xe(p);i.push({sourceStart:l.start,sourceEnd:l.end,refKind:"type",refName:P,containerQualifiedName:m.containerQualifiedName??void 0,metadata:{containerName:m.containerName,containerKind:m.containerKind}})}}if(C&&(p.kind==="DeclRefExpr"||p.kind==="MemberExpr")&&!(b.includes("CallExpr")||b.includes("CXXConstructExpr")||b.includes("CXXNewExpr"))){let P=ne(p,n,a);if(P){let R=xe(p),d=p.kind==="MemberExpr"?Fe(p):void 0;i.push({sourceStart:P.start,sourceEnd:P.end,refKind:"reference",refName:R,receiverName:d??void 0,containerQualifiedName:m.containerQualifiedName??void 0,metadata:{containerName:m.containerName,containerKind:m.containerKind}})}}if(C&&(p.kind==="MacroExpansion"||p.kind==="MacroInstantiation")){let l=ne(p,n,a);if(l){let P=xe(p);i.push({sourceStart:l.start,sourceEnd:l.end,refKind:"macro",refName:P,containerQualifiedName:m.containerQualifiedName??void 0,metadata:{containerName:m.containerName,containerKind:m.containerKind}})}}let w=m;if(p.kind==="RecordDecl"&&p.name){let l=st(p.kind,p.tagUsed,m.containerKind);l&&(w={containerKind:l.kind,containerName:p.name,containerQualifiedName:Ke(m,p.name)})}p.kind==="EnumDecl"&&p.name&&(w={containerKind:"Enum",containerName:p.name,containerQualifiedName:Ke(m,p.name)}),p.kind==="NamespaceDecl"&&p.name&&(w={containerKind:"Namespace",containerName:p.name,containerQualifiedName:Ke(m,p.name)}),(p.kind==="FunctionDecl"||p.kind==="CXXMethodDecl"||p.kind==="CXXConstructorDecl"||p.kind==="CXXDestructorDecl")&&p.name&&(w={...w,containerQualifiedName:Ke(m,p.name)});let M=b.slice();p.kind&&M.push(p.kind);for(let l of p.inner??[])o(l,w,M)};o(t,{},[]);let u=new Set,h=[];for(let p of i){let m=`${p.sourceStart}:${p.sourceEnd}:${p.refKind}:${p.refName??""}:${p.targetNodeId??""}:${p.targetFile??""}`;u.has(m)||(u.add(m),h.push(p))}return{references:h}}function kr(t){if(!t)return null;let e=t;(e.startsWith("SyntaxError:")||e.startsWith("CompileError:"))&&(e=e.substring(e.indexOf(":")+1)),e.includes("#")&&(e=e.split("#")[1]);let n=e.lastIndexOf(":"),r=n>=0?e.slice(0,n):e,[i,s]=r.split("-"),a=Number(i),o=Number(s);return!Number.isFinite(a)||!Number.isFinite(o)||o<a?null:{start:a,end:o}}function Ir(t,e,n,r,i){let s=kr(n);if(!s)return null;let a=tn(t),o=rt(i,e,t),u=[...o.args,"-Xclang","-ast-dump=json","-Xclang","-detailed-preprocessing-record","-fsyntax-only","-fno-color-diagnostics","-fno-diagnostics-color",...o.source==="fallback"?["-x",t==="cpp"?"c++":"c"]:[],e],h=at(a,u,o.cwd);if(!h||h.kind!=="TranslationUnitDecl")return null;let p=en(r),m=r.length,b=pe(e),A=null,C=M=>{if(A)return;let l=Me(M),R=l&&(!b||l===b)?ne(M,p,m):null;if(R&&R.start===s.start&&R.end===s.end){let d=null,v=null;for(let E of M.inner??[])if(E.kind==="CompoundStmt"){let _=ne(E,p,m);if(_){d=_.start,v=_.end;break}}A={start:R.start,end:R.end,bodyStart:d,bodyEnd:v};return}for(let d of M.inner??[])C(d)};if(C(h),!A)return null;let w=A;return{start:w.start,end:w.end,bodyStart:w.bodyStart??null,bodyEnd:w.bodyEnd??null,text:r.slice(w.start,w.end)}}function ot(t){return W({id:t,extensions:[],parse:({absPath:e,relPath:n,content:r,projectRoot:i})=>{let s=tn(t),a=rt(i,e,t),o=C=>[...C.args,"-Xclang","-ast-dump=json","-Xclang","-detailed-preprocessing-record","-fsyntax-only","-fno-color-diagnostics","-fno-diagnostics-color",...C.source==="fallback"?["-x",t==="cpp"?"c++":"c"]:[],e],u=at(s,o(a),a.cwd);if(!u&&a.source!=="fallback"){let C=it(i,t);u=at(s,o(C),C.cwd)}if(!u||u.kind!=="TranslationUnitDecl")return null;let h=en(r??""),p=(r??"").length,{nodes:m}=Er(u,e,h,p),{imports:b}=Rr(u,e),{references:A}=Tr(u,e,h,r??"");return{nodes:m,imports:b,importBindings:[],references:A}},resolve:({absPath:e,nodePath:n,projectRoot:r})=>{try{let i=wn("fs").readFileSync(e,"utf8");return Ir(t,e,n,i,r)}catch{return null}}})}import lt from"fs";import ct from"path";import{spawn as Dr,spawnSync as Zs}from"child_process";var Kr=256e3,Fr=32;function re(...t){try{let e=t.map(n=>{if(typeof n=="string")return n;try{return JSON.stringify(n)}catch{return String(n)}}).join(" ");process.stderr.write(e+`
514
+ `)}catch{}}var ut=class{constructor(e){this.cmd=e;this.proc=null;this.buffer="";this.pending=new Map;this.seq=1;this.closed=!1;this.ensureProcess()}ensureProcess(){if(!(this.proc&&!this.closed)){if(this.closed=!1,this.proc=Dr(this.cmd,["--server"],{stdio:["pipe","pipe","pipe"]}),!this.proc.stdout||!this.proc.stderr||!this.proc.stdin)throw this.closed=!0,new Error("dart indexer stdio unavailable");this.proc.stdout.on("data",e=>this.onData(e)),this.proc.stderr.on("data",e=>{re(`[DartIndexer] ${e.toString("utf8").trim()}`)}),this.proc.on("error",e=>this.handleExit(e)),this.proc.on("exit",e=>this.handleExit(new Error(`dart indexer exited with code ${e}`)))}}handleExit(e){if(!this.closed){this.closed=!0;for(let[,n]of this.pending)n.reject(e);this.pending.clear()}}onData(e){for(this.buffer+=e.toString("utf8");;){let n=this.buffer.indexOf(`
515
+ `);if(n<0)break;let r=this.buffer.slice(0,n).trim();if(this.buffer=this.buffer.slice(n+1),!r)continue;let i=null;try{i=JSON.parse(r)}catch{continue}let s=this.pending.get(i.id);s&&(this.pending.delete(i.id),i.ok?s.resolve(i):s.reject(new Error(i.error||"dart server error")))}}async request(e,n=1){this.ensureProcess();let r=this.seq++;return new Promise((i,s)=>{let a={id:r,...e};this.pending.set(r,{resolve:i,reject:s});try{this.proc.stdin.write(`${JSON.stringify(a)}
516
+ `)}catch(o){if(this.pending.delete(r),n>0){try{this.handleExit(o)}catch{}return this.request(e,n-1).then(i,s)}s(o)}})}async parseBatch(e){let n=await this.request({op:"parse",files:e});return"results"in n&&Array.isArray(n.results)?n.results.map(r=>r.ok&&r.result?r.result:null):"result"in n&&n.result?[n.result]:e.map(()=>null)}async resolve(e){let n=await this.request({op:"resolve",...e});return"result"in n&&n.result&&typeof n.result.start=="number"?n.result:null}},dt=class{constructor(e){this.client=e;this.queue=[];this.scheduled=!1}enqueue(e){return new Promise((n,r)=>{this.queue.push({input:e,resolve:n,reject:r,startedAt:Date.now()}),this.scheduled||(this.scheduled=!0,setImmediate(()=>this.flush()))})}async flush(){for(this.scheduled=!1;this.queue.length;){let e=[],n=0;for(;this.queue.length&&e.length<Fr;){let r=this.queue[0];if(e.length>0&&n+r.input.size>Kr)break;e.push(this.queue.shift()),n+=r.input.size}try{let r=await this.client.parseBatch(e.map(i=>({file:i.input.file,root:i.input.root,lang:i.input.lang})));for(let i=0;i<e.length;i+=1){let s=e[i],a=r[i]??null,o=Date.now()-s.startedAt;o>2e3&&re(`[${new Date().toISOString()}] [DartCliAdapter] parse slow`,{file:s.input.file,ms:o,ok:!!a}),a||re(`[${new Date().toISOString()}] [DartCliAdapter] parse failed`,{file:s.input.file,ms:o}),s.resolve(a)}}catch(r){for(let i of e)i.reject(r)}}}},nn=new Map,rn=new Map;function Mr(t){let e=process.platform==="win32"?".cmd":"",n=X(`dart-indexer/bin/pando-dart-indexer${e}`);if(n)return n;if(t){let s=ct.resolve(t,"tools/dart-indexer/bin/pando-dart-indexer"+e);if(lt.existsSync(s))return s}let r=process.env.PANDO_EXTENSION_ROOT;if(r){let s=ct.resolve(r,"tools/dart-indexer/bin/pando-dart-indexer"+e);if(lt.existsSync(s))return s}let i=ct.resolve(process.cwd(),"tools/dart-indexer/bin/pando-dart-indexer"+e);return lt.existsSync(i)?i:null}function sn(t){let e=process.env.PANDO_DART_INDEXER_CMD||Mr(t);if(!e)return null;let n=nn.get(e);n||(n=new ut(e),nn.set(e,n));let r=rn.get(e);return r||(r=new dt(n),rn.set(e,r)),{client:n,batcher:r}}async function Or(t,e,n){let r=sn(e);if(!r)return null;try{return await r.batcher.enqueue({file:t,root:e,lang:"dart",size:n})}catch(i){return re(`[${new Date().toISOString()}] [DartCliAdapter] parse error`,{file:t,error:i?.message||i}),null}}function an(){return W({id:"dart",extensions:[".dart"],parse:async({absPath:t,projectRoot:e,content:n,meta:r})=>{let i=r?.size??Buffer.byteLength(n,"utf8");return Or(t,e,i)},resolve:({absPath:t,nodePath:e,projectRoot:n})=>{let r=Date.now(),i=sn(n);return i?i.client.resolve({file:t,root:n,lang:"dart",nodePath:e}).then(s=>{let a=Date.now()-r;return a>2e3&&re(`[${new Date().toISOString()}] [DartCliAdapter] resolve slow`,{file:t,ms:a}),s||re(`[${new Date().toISOString()}] [DartCliAdapter] resolve failed`,{file:t,ms:a,nodePath:e}),s}).catch(s=>{let a=Date.now()-r;return re(`[${new Date().toISOString()}] [DartCliAdapter] resolve error`,{file:t,ms:a,nodePath:e,error:s?.message||s}),null}):null},exportKind:"dart"})}import pt from"fs";import Se from"path";import{spawn as Lr,spawnSync as aa}from"child_process";var jr=256e3,$r=32;function se(...t){try{let e=t.map(n=>{if(typeof n=="string")return n;try{return JSON.stringify(n)}catch{return String(n)}}).join(" ");process.stderr.write(e+`
517
+ `)}catch{}}var ft=class{constructor(e){this.cmd=e;this.proc=null;this.buffer="";this.pending=new Map;this.seq=1;this.closed=!1;this.ensureProcess()}ensureProcess(){if(!(this.proc&&!this.closed)){if(this.closed=!1,this.proc=Lr(this.cmd,["--server"],{stdio:["pipe","pipe","pipe"]}),!this.proc.stdout||!this.proc.stderr||!this.proc.stdin)throw this.closed=!0,new Error("java indexer stdio unavailable");this.proc.stdout.on("data",e=>this.onData(e)),this.proc.stderr.on("data",e=>{se(`[JavaCliAdapter] ${e.toString("utf8").trim()}`)}),this.proc.on("error",e=>this.handleExit(e)),this.proc.on("exit",e=>this.handleExit(new Error(`java indexer exited with code ${e}`)))}}handleExit(e){if(!this.closed){this.closed=!0;for(let[,n]of this.pending)clearTimeout(n.timer),n.reject(e);this.pending.clear()}}onData(e){for(this.buffer+=e.toString("utf8");;){let n=this.buffer.indexOf(`
518
+ `);if(n<0)break;let r=this.buffer.slice(0,n).trim();if(this.buffer=this.buffer.slice(n+1),!r)continue;let i=null;try{i=JSON.parse(r)}catch{continue}let s=this.pending.get(i.id);s&&(clearTimeout(s.timer),this.pending.delete(i.id),i.ok?s.resolve(i):s.reject(new Error(i.error||"java server error")))}}async request(e,n=1){this.ensureProcess();let r=this.seq++;return new Promise((i,s)=>{let a={id:r,...e},o=setTimeout(()=>{this.pending.delete(r),s(new Error("java indexer request timed out after 30s"))},3e4);this.pending.set(r,{resolve:i,reject:s,timer:o});try{this.proc.stdin.write(`${JSON.stringify(a)}
519
+ `)}catch(u){if(clearTimeout(o),this.pending.delete(r),n>0){try{this.handleExit(u)}catch{}return this.request(e,n-1).then(i,s)}s(u)}})}async parseBatch(e){let n=await this.request({op:"parse",files:e});return"results"in n?n.results.map(r=>r.ok&&r.result?r.result:null):"result"in n?[n.result]:e.map(()=>null)}async resolve(e){let n=await this.request({op:"resolve",...e});return"result"in n&&n.result&&typeof n.result.start=="number"?n.result:null}},gt=class{constructor(e){this.client=e;this.queue=[];this.scheduled=!1}enqueue(e){return new Promise((n,r)=>{this.queue.push({input:e,resolve:n,reject:r,startedAt:Date.now()}),this.scheduled||(this.scheduled=!0,setImmediate(()=>this.flush()))})}async flush(){for(this.scheduled=!1;this.queue.length;){let e=[],n=0;for(;this.queue.length&&e.length<$r;){let r=this.queue[0];if(e.length>0&&n+r.input.size>jr)break;e.push(this.queue.shift()),n+=r.input.size}try{let r=await this.client.parseBatch(e.map(i=>({file:i.input.file,root:i.input.root,lang:i.input.lang})));for(let i=0;i<e.length;i+=1){let s=e[i],a=r[i]??null,o=Date.now()-s.startedAt;o>2e3&&se(`[${new Date().toISOString()}] [JavaCliAdapter] parse slow`,{file:s.input.file,ms:o,path:"custom",ok:!!a}),a||se(`[${new Date().toISOString()}] [JavaCliAdapter] parse failed`,{file:s.input.file,ms:o,path:"custom"}),s.resolve(a)}}catch(r){for(let i of e)i.reject(r)}}}},on=new Map,ln=new Map;function Br(){return typeof __dirname=="string"?__dirname:process.cwd()}var ie,zr;function qr(t){if(ie!==void 0&&zr===t)return ie;let e=process.platform==="win32"?".cmd":"",n="tools/java-indexer/bin/pando-java-indexer"+e,r=X(`java-indexer/bin/pando-java-indexer${e}`);if(r)return ie=r,r;if(t){let s=Se.resolve(t,n);if(pt.existsSync(s))return ie=s,s}let i=Br();for(let s=0;s<8;s++){let a=Se.join(i,n);if(pt.existsSync(a))return ie=a,a;let o=Se.dirname(i);if(o===i)break;i=o}i=process.cwd();for(let s=0;s<8;s++){let a=Se.join(i,n);if(pt.existsSync(a))return ie=a,a;let o=Se.dirname(i);if(o===i)break;i=o}return ie=null,null}function cn(t){let e=process.env.PANDO_JAVA_INDEXER_CMD||qr(t);if(!e)return null;let n=on.get(e);n||(n=new ft(e),on.set(e,n));let r=ln.get(e);return r||(r=new gt(n),ln.set(e,r)),{client:n,batcher:r}}async function Hr(t,e,n){let r=cn(e);if(!r)return null;try{return await r.batcher.enqueue({file:t,root:e,lang:"java",size:n})}catch(i){return se(`[${new Date().toISOString()}] [JavaCliAdapter] parse error`,{file:t,error:i?.message||i,path:"custom"}),null}}async function Jr(t,e,n){let r=await Hr(t,e,n);return r||null}function un(){return W({id:"java",extensions:[".java"],exportKind:"named",parse:({absPath:t,projectRoot:e,content:n,meta:r})=>{let i=r?.size??Buffer.byteLength(n,"utf8");return Jr(t,e,i)},resolve:({absPath:t,nodePath:e,projectRoot:n})=>{let r=Date.now(),i=cn(n);return i?i.client.resolve({file:t,root:n,lang:"java",nodePath:e}).then(s=>{let a=Date.now()-r;return a>2e3&&se(`[${new Date().toISOString()}] [JavaCliAdapter] resolve slow`,{file:t,ms:a}),s||se(`[${new Date().toISOString()}] [JavaCliAdapter] resolve failed`,{file:t,ms:a,nodePath:e}),s}).catch(s=>{let a=Date.now()-r;return se(`[${new Date().toISOString()}] [JavaCliAdapter] resolve error`,{file:t,ms:a,nodePath:e,error:s?.message||s}),null}):null}})}Z();oe();import Qr from"fs";Z();Z();Z();import{spawn as Wr}from"child_process";import mt from"fs";import ht from"path";function dn(t,e){let n=process.platform==="win32"?".cmd":"",r=t==="clojure-editor"?"pando-clojure-editor":"pando-clojure-indexer",i=X(`${t}/bin/${r}${n}`);if(i)return i;if(e){let o=ht.resolve(e,`tools/${t}/bin/${r}${n}`);if(mt.existsSync(o))return o}let s=process.env.PANDO_EXTENSION_ROOT;if(s){let o=ht.resolve(s,`tools/${t}/bin/${r}${n}`);if(mt.existsSync(o))return o}let a=ht.resolve(process.cwd(),`tools/${t}/bin/${r}${n}`);return mt.existsSync(a)?a:null}var gn=3e4,Xr=Math.max(gn,Number(process.env.PANDO_CLOJURE_CHANGE_SIGNATURE_TIMEOUT_MS||`${5*60*1e3}`)),pn="__PANDO_CLOJURE_INDEX__";function Ur(...t){if(!Y())return;let e=t.map(n=>{if(typeof n=="string")return n;try{return JSON.stringify(n)}catch{return String(n)}}).join(" ");z("ClojureIndexer",e)}function ve(t,e){Y()&&z("ClojureIndex",t,e)}var Oe=class{constructor(e,n){this.cmd=e;this.projectRoot=n;this.proc=null;this.buffer="";this.stderrBuffer="";this.pending=new Map;this.seq=1;this.closed=!1;this.ensureProcess()}ensureProcess(){if(!(this.proc&&!this.closed)){if(this.closed=!1,ve("node.server.spawn",{projectRoot:this.projectRoot,cmd:this.cmd}),this.proc=Wr(this.cmd,["--server"],{cwd:this.projectRoot,stdio:["pipe","pipe","pipe"],env:{...process.env,PANDO_PROJECT_ROOT:this.projectRoot}}),!this.proc.stdout||!this.proc.stderr||!this.proc.stdin)throw this.closed=!0,new Error("clojure indexer stdio unavailable");this.proc.stdout.on("data",e=>this.onData(e)),this.proc.stderr.on("data",e=>this.onStderr(e)),this.proc.on("error",e=>this.handleExit(e)),this.proc.on("exit",e=>this.handleExit(new Error(`clojure indexer exited with code ${e}`)))}}handleExit(e){if(!this.closed){ve("node.server.exit",{projectRoot:this.projectRoot,error:e?.message||String(e),pendingRequestCount:this.pending.size}),this.closed=!0;for(let[,n]of this.pending)clearTimeout(n.timer),n.reject(e);this.pending.clear(),this.proc=null}}onData(e){for(this.buffer+=e.toString("utf8");;){let n=this.buffer.indexOf(`
520
+ `);if(n<0)break;let r=this.buffer.slice(0,n).trim();if(this.buffer=this.buffer.slice(n+1),!r)continue;let i=null;try{i=JSON.parse(r)}catch{continue}let s=this.pending.get(i.id);s&&(clearTimeout(s.timer),this.pending.delete(i.id),i.ok?s.resolve(i):s.reject(new Error(i.error||"clojure server error")))}}onStderr(e){for(this.stderrBuffer+=e.toString("utf8");;){let n=this.stderrBuffer.indexOf(`
521
+ `);if(n<0)break;let r=this.stderrBuffer.slice(0,n).trim();if(this.stderrBuffer=this.stderrBuffer.slice(n+1),!!r){if(r.startsWith(pn)){let i=r.slice(pn.length);try{let s=JSON.parse(i);ve(s.event||"jvm.trace",s)}catch(s){z("ClojureIndexer","stderr trace parse failed",{error:s?.message||String(s),line:r})}continue}Ur(r)}}}close(){if(this.closed)return;this.closed=!0;for(let[,n]of this.pending)clearTimeout(n.timer),n.reject(new Error("clojure indexer client closed"));this.pending.clear();let e=this.proc;if(this.proc=null,!!e){try{e.stdin?.end()}catch{}try{e.kill()}catch{}}}async request(e,n){this.ensureProcess();let r=this.seq++,i=n?.retry??1,s=n?.timeoutMs??gn,a=Date.now();return new Promise((o,u)=>{let h={id:r,...e},p=setTimeout(()=>{this.pending.delete(r),u(new Error(`clojure indexer request timed out after ${s}ms`))},s);this.pending.set(r,{resolve:m=>{ve("node.client.request.complete",{projectRoot:this.projectRoot,id:r,op:e.op,durationMs:Date.now()-a}),o(m)},reject:u,timer:p});try{ve("node.client.request.start",{projectRoot:this.projectRoot,id:r,op:e.op}),this.proc.stdin.write(`${JSON.stringify(h)}
522
+ `)}catch(m){if(clearTimeout(p),this.pending.delete(r),i>0){try{this.handleExit(m)}catch{}return this.request(e,{retry:i-1,timeoutMs:s}).then(o,u)}u(m)}})}async parseBatch(e,n){let r=await this.request({op:"parse",files:e,traceBatchId:n?.batchId,traceBatchBytes:n?.batchBytes});return"results"in r?r.results.map(i=>i.ok&&i.result?i.result:null):[]}async resolve(e){let n=await this.request({op:"resolve",...e});if("result"in n){let r=n.result;if(r&&typeof r.start=="number"&&typeof r.end=="number")return r}return null}async changeSignature(e){let n=await this.request({op:"change-signature",...e},{timeoutMs:Xr});return"result"in n&&n.result||null}},fn=new Map;function mn(t){return process.env.PANDO_CLOJURE_INDEXER_CMD||dn("clojure-indexer",t)}function hn(t){let e=mn(t);return e?new Oe(e,t):null}function yn(t){let e=mn(t);if(!e)return null;let n=`${e}::${t}`,r=fn.get(n);return r||(r=new Oe(e,t),fn.set(n,r)),r}var Vr=Math.max(1,Number(process.env.PANDO_CLOJURE_ANALYZER_POOL_SIZE||"3"));function Le(t,e){z("ClojureIndex",t,e)}function je(t,e){z("IndexTiming",t,e)}var $e=class{constructor(e,n=Vr){this.projectRoot=e;this.clients=[];this.idleClients=[];this.queue=[];this.inFlight=new Set;this.drainWaiters=[];this.batchSeq=1;this.closed=!1;let r=Math.max(1,n);for(let i=0;i<r;i+=1){let s=hn(e);if(!s)break;this.clients.push(s),this.idleClients.push(s)}if(!this.clients.length)throw new Error("clojure indexer command unavailable");Le("node.pool.init",{projectRoot:e,configuredPoolSize:r,actualClientCount:this.clients.length})}submit(e,n){return this.closed?Promise.reject(new Error("clojure analyzer pool is closed")):new Promise((r,i)=>{this.queue.push({batchId:this.batchSeq++,batchKey:e,files:n,enqueuedAt:Date.now(),resolve:r,reject:i}),this.pump()})}async flush(){for(;this.queue.length||this.inFlight.size;)await new Promise(e=>this.drainWaiters.push(e))}async close(){if(!this.closed){await this.flush(),this.closed=!0;for(let e of this.clients)try{e.close()}catch{}this.clients.length=0,this.idleClients.length=0}}pump(){for(;!this.closed&&this.queue.length&&this.idleClients.length;){let e=this.queue.shift(),n=this.idleClients.shift(),r=this.runJob(n,e).finally(()=>{this.inFlight.delete(r),this.closed||this.idleClients.push(n),this.pump(),this.notifyIfIdle()});this.inFlight.add(r)}this.notifyIfIdle()}async runJob(e,n){let r=n.files.reduce((a,o)=>a+Math.max(0,o.size||0),0),i=Date.now(),s=Math.max(0,i-n.enqueuedAt);Le("node.pool-batch.start",{batchId:n.batchId,batchKey:n.batchKey,fileCount:n.files.length,batchBytes:r,queueWaitMs:s,queuedBatchCount:this.queue.length,inFlightCount:this.inFlight.size});try{let a=await this.parseFiles(e,n.files,n.batchId,r);je("clojure-pool.job.complete",{projectRoot:this.projectRoot,batchId:n.batchId,batchKey:n.batchKey,fileCount:n.files.length,batchBytes:r,queueWaitMs:s,durationMs:Date.now()-i}),Le("node.pool-batch.complete",{batchId:n.batchId,batchKey:n.batchKey,fileCount:n.files.length,batchBytes:r,durationMs:Date.now()-i,successCount:Array.from(a.values()).filter(o=>!("error"in o)).length,errorCount:Array.from(a.values()).filter(o=>"error"in o).length}),n.resolve(a)}catch(a){let o=a instanceof Error?a:new Error(String(a));Le("node.pool-batch.error",{batchId:n.batchId,batchKey:n.batchKey,fileCount:n.files.length,batchBytes:r,durationMs:Date.now()-i,error:o.message}),n.reject(o)}}async parseFiles(e,n,r,i){let s=Date.now();try{let a=await e.parseBatch(n.map(u=>({file:u.absPath,root:this.projectRoot,lang:u.lang})),{batchId:r,batchBytes:i});je("clojure-parse-batch.complete",{projectRoot:this.projectRoot,batchId:r,fileCount:n.length,batchBytes:i,durationMs:Date.now()-s,split:!1});let o=new Map;for(let u=0;u<n.length;u+=1){let h=n[u],p=a[u]??null;p?o.set(h.fileKey,p):(z("IndexingAudit","clojure analysis returned no result",{projectRoot:this.projectRoot,batchId:r,file:h.absPath}),o.set(h.fileKey,{error:`clojure analysis returned no result for ${h.absPath}`}))}return o}catch(a){if(n.length>1){let h=Date.now(),p=Math.ceil(n.length/2),m=n.slice(0,p),b=n.slice(p),A=await this.parseFiles(e,m,r,m.reduce((w,M)=>w+Math.max(0,M.size||0),0)),C=await this.parseFiles(e,b,r,b.reduce((w,M)=>w+Math.max(0,M.size||0),0));return je("clojure-parse-batch.split",{projectRoot:this.projectRoot,batchId:r,fileCount:n.length,batchBytes:i,durationMs:Date.now()-h,leftCount:m.length,rightCount:b.length,error:a instanceof Error?a.message:String(a)}),new Map([...A,...C])}let o=a instanceof Error?a:new Error(String(a));je("clojure-parse-batch.error",{projectRoot:this.projectRoot,batchId:r,fileCount:n.length,batchBytes:i,durationMs:Date.now()-s,error:o.message});let u=new Map;for(let h of n)z("IndexingAudit","clojure analysis request failed",{projectRoot:this.projectRoot,batchId:r,file:h.absPath,error:o.message}),u.set(h.fileKey,{error:o.message});return u}}notifyIfIdle(){if(this.queue.length||this.inFlight.size)return;let e=this.drainWaiters.splice(0,this.drainWaiters.length);for(let n of e)try{n()}catch{}}};function Gr(t,e){if(typeof e?.size=="number"&&typeof e?.mtime=="number")return{size:e.size,mtime:e.mtime};try{let n=Qr.statSync(t);return{size:typeof e?.size=="number"?e.size:n.size,mtime:typeof e?.mtime=="number"?e.mtime:Math.floor(n.mtimeMs)}}catch{return{size:e?.size,mtime:e?.mtime}}}function Yr(t,e){let n=new Map;for(let r of e.nodes??[]){if(!r.name||r.containerKind||n.has(r.name))continue;let i=`${t}#${r.start}-${r.end}:${G.getAbbrev(r.kind,"clojure")}:${r.name}`;n.set(r.name,i)}return r=>n.get(r)??null}function Zr(t){let e=t?.error;return typeof e=="string"&&e.trim().length>0?e.trim():null}var Be=class{constructor(e){this.projectRoot=e;this.cache=new ce;this.pool=new $e(e)}prepare(e){let n=Gr(e.absPath,e.meta),r=this.cache.get(e.absPath,n);return{fileKey:e.relPath,absPath:e.absPath,relPath:e.relPath,meta:n,preDeleted:e.preDeleted,lang:e.lang,cachedParsed:r??void 0}}batchKey(e){return`${this.projectRoot}::clojure`}async analyzeBatch(e){let n=new Map,r=e.filter(s=>!s.cachedParsed);for(let s of e)s.cachedParsed&&n.set(s.fileKey,s.cachedParsed);if(!r.length)return n;let i=await this.pool.submit(this.batchKey(r[0]),r.map(s=>({fileKey:s.fileKey,absPath:s.absPath,lang:s.lang,size:s.meta?.size??0})));for(let s of r){let a=i.get(s.fileKey)??{error:`missing clojure analysis result for ${s.relPath}`};"error"in a||this.cache.set(s.absPath,s.meta??{},a),n.set(s.fileKey,a)}return n}buildProcessedFile(e,n,r){let i=Zr(r);return i?(z("IndexingAudit","clojure batch analysis failed",{projectRoot:this.projectRoot,relPath:e.relPath,error:i}),ge("clojure",e.relPath,n.meta)):me({lang:"clojure",fileRel:e.relPath,content:e.content,meta:n.meta,preDeleted:e.preDeleted,parsed:r,resolveNodeId:Yr(e.relPath,r),exportKind:"cli"})}async flush(){await this.pool.flush()}async close(){await this.pool.close()}};function ei(...t){let e=t.map(n=>{if(typeof n=="string")return n;try{return JSON.stringify(n)}catch{return String(n)}}).join(" ");z("ClojureCliAdapter",e)}function bn(){return{id:"clojure",extensions:[".clj",".cljc",".cljs"],indexingMode:"batch",createBatchIndexer:t=>new Be(t),resolveSpan:(t,e,n)=>{let r=yn(t);return r?r.resolve({file:e,root:t,lang:"clojure",nodePath:n}).catch(i=>(ei(`[${new Date().toISOString()}] [ClojureCliAdapter] resolve error`,{file:e,nodePath:n,error:i?.message||i}),null)):null}}}function Ba(t){return t.indexingMode==="worker"&&typeof t.createIndexer=="function"}var ze={ts:Ye("ts"),js:Ye("js"),python:$t(),c:{...ot("c"),extensions:[".c",".h",".i",".inc"]},cpp:{...ot("cpp"),extensions:[".cc",".cpp",".cxx",".c++",".cp",".ccm",".cppm",".cxxm",".ixx",".hpp",".hh",".hxx",".h++",".ii",".inl",".ipp",".tcc",".tpp",".txx"]},csharp:Wt(),dart:an(),java:un(),clojure:bn()},xn=new Map;for(let t of Object.values(ze))for(let e of t.extensions)xn.set(e,t.id);function Sn(){return vt(St())}function za(t){let e=t.toLowerCase().match(/\.[a-z0-9+]+$/);return e?xn.get(e[0])??null:null}function qa(t){return ze[t]}function Ha(t){let e=t??Sn(),n=new Set;for(let[i,s]of Object.entries(e.byLanguage))s.enabled&&n.add(i);let r=new Set;for(let i of Object.values(ze))if(n.has(i.id))for(let s of i.extensions)r.add(s);return r}function Ja(t){let e=t??Sn(),n=new Set;for(let[i,s]of Object.entries(e.byLanguage))s.enabled&&n.add(i);let r=new Set;for(let i of Object.values(ze))if(n.has(i.id))for(let s of i.extensions)r.add(s);return r}import ti from"fs";import vn from"path";import{promises as ni}from"fs";import Ga from"ignore";function Nn(t,e){let n=t.split(/\r?\n/).map(s=>s.trim()).filter(Boolean);if(!n.length)return[];let r=e?`${e}/`:"";return n.map(s=>s.startsWith("\\#")||s.startsWith("\\!")?s.slice(1):s).filter(s=>!s.startsWith("#")).map(s=>{let a=s.startsWith("!"),o=a?s.slice(1):s;if(!o)return s;if((o.endsWith("/")?o.slice(0,-1):o).includes("/")){let m=o.startsWith("/")?o.slice(1):o,b=r?`${r}${m}`:m;return a?`!${b}`:b}let p=r?`${r}**/${o}`:o;return a?`!${p}`:p})}function Ya(t,e){let n=vn.join(t,".gitignore");try{let r=ti.readFileSync(n,"utf8");return Nn(r,e)}catch{return[]}}async function Za(t,e){let n=vn.join(t,".gitignore");try{let r=await ni.readFile(n,"utf8");return Nn(r,e)}catch{return[]}}function ri(t,e="Operation cancelled"){let n=typeof t=="string"&&t.trim()?t.trim():t instanceof Error&&t.message.trim()?t.message.trim():e,r=new Error(n);return r.name="AbortError",r.code="ABORT_ERR",r}function to(t,e){if(t?.aborted)throw ri(t.reason,e)}export{_n as a,Et as b,ge as c,Ba as d,Sn as e,za as f,qa as g,Ha as h,Ja as i,to as j,Ya as k,Za as l};