roto-rooter 0.8.7 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/cli.js +6 -6
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ npm install -g roto-rooter
|
|
|
12
12
|
rr [OPTIONS] [FILES...]
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
Point `rr` at your project and it scans your route files for issues. With no arguments it runs the **default checks** (links, loader, params, interactivity, hydration) against all files in the current directory.
|
|
15
|
+
Point `rr` at your project and it scans your route files for issues. With no arguments it runs the **default checks** (links, forms, loader, params, interactivity, hydration) against all files in the current directory.
|
|
16
16
|
|
|
17
17
|
| Option | Description |
|
|
18
18
|
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -30,7 +30,7 @@ Point `rr` at your project and it scans your route files for issues. With no arg
|
|
|
30
30
|
- **params** (default) -- ensures `useParams()` only accesses params defined in the route path
|
|
31
31
|
- **interactivity** (default) -- catches "Save" buttons that don't save, "Delete" buttons that don't delete, and empty click handlers
|
|
32
32
|
- **hydration** (default) -- detects SSR/client mismatches from `new Date()`, `Math.random()`, locale-dependent formatting, `window` access in render
|
|
33
|
-
- **forms** (
|
|
33
|
+
- **forms** (default) -- validates `<Form>` targets have actions and that field names match `formData.get()` calls
|
|
34
34
|
- **drizzle** (opt-in) -- validates Drizzle ORM operations against your schema (missing columns, type mismatches, etc.)
|
|
35
35
|
|
|
36
36
|
**Example output:**
|
package/dist/analyzer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EAId,UAAU,EACX,MAAM,YAAY,CAAC;AAgBpB,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EAId,UAAU,EACX,MAAM,YAAY,CAAC;AAgBpB,eAAO,MAAM,cAAc,UAO1B,CAAC;AAGF,eAAO,MAAM,eAAe,UAAc,CAAC;AAG3C,eAAO,MAAM,UAAU,UAA0C,CAAC;AAElE;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,cAAc,CA0G3D"}
|
package/dist/cli.js
CHANGED
|
@@ -432,12 +432,12 @@ Project '${_.projectName}' (${T4[_.projectKind]}) ${o}
|
|
|
432
432
|
`&&(!_||_.length===0||Ytt(_,o))){let{lineText:u,absolutePosition:g}=s.textStorage.getAbsolutePositionAndLineText(t.line);if(u&&u.search("\\S")<0){let d=i.getIndentationAtPosition(r,o,c),h=0,S,x;for(S=0,x=u.length;S<x;S++)if(u.charAt(S)===" ")h++;else if(u.charAt(S)===" ")h+=c.tabSize;else break;if(d!==h){let k=g+S;_.push({span:qc(g,k),newText:yl.getIndentationString(d,c)})}}}if(_)return _.map(u=>({start:s.positionToLineOffset(u.span.start),end:s.positionToLineOffset(dc(u.span)),newText:u.newText?u.newText:""}))}getCompletions(t,r){let{file:i,project:s}=this.getFileAndProject(t),o=this.projectService.getScriptInfoForNormalizedPath(i),c=this.getPosition(t,o),_=s.getLanguageService().getCompletionsAtPosition(i,c,{...$fe(this.getPreferences(i)),triggerCharacter:t.triggerCharacter,triggerKind:t.triggerKind,includeExternalModuleExports:t.includeExternalModuleExports,includeInsertTextCompletions:t.includeInsertTextCompletions},s.projectService.getFormatCodeOptions(i));if(_===void 0)return;if(r==="completions-full")return _;let u=t.prefix||"",g=qi(_.entries,h=>{if(_.isMemberCompletion||Ki(h.name.toLowerCase(),u.toLowerCase())){let S=h.replacementSpan?Ym(h.replacementSpan,o):void 0;return{...h,replacementSpan:S,hasAction:h.hasAction||void 0,symbol:void 0}}});return r==="completions"?(_.metadata&&(g.metadata=_.metadata),g):{..._,optionalReplacementSpan:_.optionalReplacementSpan&&Ym(_.optionalReplacementSpan,o),entries:g}}getCompletionEntryDetails(t,r){let{file:i,project:s}=this.getFileAndProject(t),o=this.projectService.getScriptInfoForNormalizedPath(i),c=this.getPosition(t,o),_=s.projectService.getFormatCodeOptions(i),u=!!this.getPreferences(i).displayPartsForJSDoc,g=qi(t.entryNames,d=>{let{name:h,source:S,data:x}=typeof d=="string"?{name:d,source:void 0,data:void 0}:d;return s.getLanguageService().getCompletionEntryDetails(i,c,h,_,S,this.getPreferences(i),x?ea(x,_nt):void 0)});return r?u?g:g.map(d=>({...d,tags:this.mapJSDocTagInfo(d.tags,s,!1)})):g.map(d=>({...d,codeActions:Dn(d.codeActions,h=>this.mapCodeAction(h)),documentation:this.mapDisplayParts(d.documentation,s),tags:this.mapJSDocTagInfo(d.tags,s,u)}))}getCompileOnSaveAffectedFileList(t){let r=this.getProjects(t,!0,!0),i=this.projectService.getScriptInfo(t.file);return i?Ktt(i,s=>this.projectService.getScriptInfoForPath(s),r,(s,o)=>{if(!s.compileOnSaveEnabled||!s.languageServiceEnabled||s.isOrphan())return;let c=s.getCompilationSettings();if(!(c.noEmit||Gl(o.fileName)&&!Xtt(c)))return{projectFileName:s.getProjectName(),fileNames:s.getCompileOnSaveAffectedFileList(o),projectUsesOutFile:!!c.outFile}}):Ml}emitFile(t){let{file:r,project:i}=this.getFileAndProject(t);if(i||ly.ThrowNoProject(),!i.languageServiceEnabled)return t.richResponse?{emitSkipped:!0,diagnostics:[]}:!1;let s=i.getScriptInfo(r),{emitSkipped:o,diagnostics:c}=i.emitFile(s,(_,u,g)=>this.host.writeFile(_,u,g));return t.richResponse?{emitSkipped:o,diagnostics:t.includeLinePosition?this.convertToDiagnosticsWithLinePositionFromDiagnosticFile(c):c.map(_=>C8(_,!0))}:!o}getSignatureHelpItems(t,r){let{file:i,project:s}=this.getFileAndProject(t),o=this.projectService.getScriptInfoForNormalizedPath(i),c=this.getPosition(t,o),_=s.getLanguageService().getSignatureHelpItems(i,c,t),u=!!this.getPreferences(i).displayPartsForJSDoc;if(_&&r){let g=_.applicableSpan;return{..._,applicableSpan:{start:o.positionToLineOffset(g.start),end:o.positionToLineOffset(g.start+g.length)},items:this.mapSignatureHelpItems(_.items,s,u)}}else return u||!_?_:{..._,items:_.items.map(g=>({...g,tags:this.mapJSDocTagInfo(g.tags,s,!1)}))}}toPendingErrorCheck(t){let r=go(t),i=this.projectService.tryGetDefaultProjectForFile(r);return i&&{fileName:r,project:i}}getDiagnostics(t,r,i){this.suppressDiagnosticEvents||i.length>0&&this.updateErrorCheck(t,i,r)}change(t){let r=this.projectService.getScriptInfo(t.file);E.assert(!!r),r.textStorage.switchToScriptVersionCache();let i=r.lineOffsetToPosition(t.line,t.offset),s=r.lineOffsetToPosition(t.endLine,t.endOffset);i>=0&&(this.changeSeq++,this.projectService.applyChangesToFile(r,YX({span:{start:i,length:s-i},newText:t.insertString})))}reload(t){let r=go(t.file),i=t.tmpfile===void 0?void 0:go(t.tmpfile),s=this.projectService.getScriptInfoForNormalizedPath(r);s&&(this.changeSeq++,s.reloadFromFile(i))}saveToTmp(t,r){let i=this.projectService.getScriptInfo(t);i&&i.saveTo(r)}closeClientFile(t){if(!t)return;let r=ra(t);this.projectService.closeClientFile(r)}mapLocationNavigationBarItems(t,r){return Dn(t,i=>({text:i.text,kind:i.kind,kindModifiers:i.kindModifiers,spans:i.spans.map(s=>Ym(s,r)),childItems:this.mapLocationNavigationBarItems(i.childItems,r),indent:i.indent}))}getNavigationBarItems(t,r){let{file:i,languageService:s}=this.getFileAndLanguageServiceForSyntacticOperation(t),o=s.getNavigationBarItems(i);return o?r?this.mapLocationNavigationBarItems(o,this.projectService.getScriptInfoForNormalizedPath(i)):o:void 0}toLocationNavigationTree(t,r){return{text:t.text,kind:t.kind,kindModifiers:t.kindModifiers,spans:t.spans.map(i=>Ym(i,r)),nameSpan:t.nameSpan&&Ym(t.nameSpan,r),childItems:Dn(t.childItems,i=>this.toLocationNavigationTree(i,r))}}getNavigationTree(t,r){let{file:i,languageService:s}=this.getFileAndLanguageServiceForSyntacticOperation(t),o=s.getNavigationTree(i);return o?r?this.toLocationNavigationTree(o,this.projectService.getScriptInfoForNormalizedPath(i)):o:void 0}getNavigateToItems(t,r){let i=this.getFullNavigateToItems(t);return r?Oa(i,({project:s,navigateToItems:o})=>o.map(c=>{let _=s.getScriptInfo(c.fileName),u={name:c.name,kind:c.kind,kindModifiers:c.kindModifiers,isCaseSensitive:c.isCaseSensitive,matchKind:c.matchKind,file:c.fileName,start:_.positionToLineOffset(c.textSpan.start),end:_.positionToLineOffset(dc(c.textSpan))};return c.kindModifiers&&c.kindModifiers!==""&&(u.kindModifiers=c.kindModifiers),c.containerName&&c.containerName.length>0&&(u.containerName=c.containerName),c.containerKind&&c.containerKind.length>0&&(u.containerKind=c.containerKind),u})):Oa(i,({navigateToItems:s})=>s)}getFullNavigateToItems(t){let{currentFileOnly:r,searchValue:i,maxResultCount:s,projectFileName:o}=t;if(r){E.assertIsDefined(t.file);let{file:S,project:x}=this.getFileAndProject(t);return[{project:x,navigateToItems:x.getLanguageService().getNavigateToItems(i,s,S)}]}let c=this.getHostPreferences(),_=[],u=new Map;if(!t.file&&!o)this.projectService.loadAncestorProjectTree(),this.projectService.forEachEnabledProject(S=>g(S));else{let S=this.getProjects(t);ENe(S,void 0,x=>g(x))}return _;function g(S){let x=S.getLanguageService().getNavigateToItems(i,s,void 0,S.isNonTsProject(),c.excludeLibrarySymbolsInNavTo),k=Mr(x,D=>d(D)&&!EG(k4(D),S));k.length&&_.push({project:S,navigateToItems:k})}function d(S){let x=S.name;if(!u.has(x))return u.set(x,[S]),!0;let k=u.get(x);for(let D of k)if(h(D,S))return!1;return k.push(S),!0}function h(S,x){return S===x?!0:!S||!x?!1:S.containerKind===x.containerKind&&S.containerName===x.containerName&&S.fileName===x.fileName&&S.isCaseSensitive===x.isCaseSensitive&&S.kind===x.kind&&S.kindModifiers===x.kindModifiers&&S.matchKind===x.matchKind&&S.name===x.name&&S.textSpan.start===x.textSpan.start&&S.textSpan.length===x.textSpan.length}}getSupportedCodeFixes(t){if(!t)return VH();if(t.file){let{file:i,project:s}=this.getFileAndProject(t);return s.getLanguageService().getSupportedCodeFixes(i)}let r=this.getProject(t.projectFileName);return r||ly.ThrowNoProject(),r.getLanguageService().getSupportedCodeFixes()}isLocation(t){return t.line!==void 0}extractPositionOrRange(t,r){let i,s;return this.isLocation(t)?i=o(t):s=this.getRange(t,r),E.checkDefined(i===void 0?s:i);function o(c){return c.position!==void 0?c.position:r.lineOffsetToPosition(c.line,c.offset)}}getRange(t,r){let{startPosition:i,endPosition:s}=this.getStartAndEndPosition(t,r);return{pos:i,end:s}}getApplicableRefactors(t){let{file:r,project:i}=this.getFileAndProject(t),s=i.getScriptInfoForNormalizedPath(r);return i.getLanguageService().getApplicableRefactors(r,this.extractPositionOrRange(t,s),this.getPreferences(r),t.triggerReason,t.kind,t.includeInteractiveActions).map(c=>({...c,actions:c.actions.map(_=>({..._,range:_.range?{start:JD({line:_.range.start.line,character:_.range.start.offset}),end:JD({line:_.range.end.line,character:_.range.end.offset})}:void 0}))}))}getEditsForRefactor(t,r){let{file:i,project:s}=this.getFileAndProject(t),o=s.getScriptInfoForNormalizedPath(i),c=s.getLanguageService().getEditsForRefactor(i,this.getFormatOptions(i),this.extractPositionOrRange(t,o),t.refactor,t.action,this.getPreferences(i),t.interactiveRefactorArguments);if(c===void 0)return{edits:[]};if(r){let{renameFilename:_,renameLocation:u,edits:g}=c,d;if(_!==void 0&&u!==void 0){let h=s.getScriptInfoForNormalizedPath(go(_));d=ppe(Mk(h.getSnapshot()),_,u,g)}return{renameLocation:d,renameFilename:_,edits:this.mapTextChangesToCodeEdits(g),notApplicableReason:c.notApplicableReason}}return c}getMoveToRefactoringFileSuggestions(t){let{file:r,project:i}=this.getFileAndProject(t),s=i.getScriptInfoForNormalizedPath(r);return i.getLanguageService().getMoveToRefactoringFileSuggestions(r,this.extractPositionOrRange(t,s),this.getPreferences(r))}preparePasteEdits(t){let{file:r,project:i}=this.getFileAndProject(t);return i.getLanguageService().preparePasteEditsForFile(r,t.copiedTextSpan.map(s=>this.getRange({file:r,startLine:s.start.line,startOffset:s.start.offset,endLine:s.end.line,endOffset:s.end.offset},this.projectService.getScriptInfoForNormalizedPath(r))))}getPasteEdits(t){let{file:r,project:i}=this.getFileAndProject(t);if(x4(r))return;let s=t.copiedFrom?{file:t.copiedFrom.file,range:t.copiedFrom.spans.map(c=>this.getRange({file:t.copiedFrom.file,startLine:c.start.line,startOffset:c.start.offset,endLine:c.end.line,endOffset:c.end.offset},i.getScriptInfoForNormalizedPath(go(t.copiedFrom.file))))}:void 0,o=i.getLanguageService().getPasteEdits({targetFile:r,pastedText:t.pastedText,pasteLocations:t.pasteLocations.map(c=>this.getRange({file:r,startLine:c.start.line,startOffset:c.start.offset,endLine:c.end.line,endOffset:c.end.offset},i.getScriptInfoForNormalizedPath(r))),copiedFrom:s,preferences:this.getPreferences(r)},this.getFormatOptions(r));return o&&this.mapPasteEditsAction(o)}organizeImports(t,r){E.assert(t.scope.type==="file");let{file:i,project:s}=this.getFileAndProject(t.scope.args),o=s.getLanguageService().organizeImports({fileName:i,mode:t.mode??(t.skipDestructiveCodeActions?"SortAndCombine":void 0),type:"file"},this.getFormatOptions(i),this.getPreferences(i));return r?this.mapTextChangesToCodeEdits(o):o}getEditsForFileRename(t,r){let i=go(t.oldFilePath),s=go(t.newFilePath),o=this.getHostFormatOptions(),c=this.getHostPreferences(),_=new Set,u=[];return this.projectService.loadAncestorProjectTree(),this.projectService.forEachEnabledProject(g=>{let d=g.getLanguageService().getEditsForFileRename(i,s,o,c),h=[];for(let S of d)_.has(S.fileName)||(u.push(S),h.push(S.fileName));for(let S of h)_.add(S)}),r?u.map(g=>this.mapTextChangeToCodeEdit(g)):u}getCodeFixes(t,r){let{file:i,project:s}=this.getFileAndProject(t),o=s.getScriptInfoForNormalizedPath(i),{startPosition:c,endPosition:_}=this.getStartAndEndPosition(t,o),u;try{u=s.getLanguageService().getCodeFixesAtPosition(i,c,_,t.errorCodes,this.getFormatOptions(i),this.getPreferences(i))}catch(g){let d=g instanceof Error?g:new Error(g),h=s.getLanguageService(),S=[...h.getSyntacticDiagnostics(i),...h.getSemanticDiagnostics(i),...h.getSuggestionDiagnostics(i)].filter(k=>jN(c,_-c,k.start,k.length)).map(k=>k.code),x=t.errorCodes.find(k=>!S.includes(k));throw x!==void 0&&(d.message+=`
|
|
433
433
|
Additional information: BADCLIENT: Bad error code, ${x} not found in range ${c}..${_} (found: ${S.join(", ")})`),d}return r?u.map(g=>this.mapCodeFixAction(g)):u}getCombinedCodeFix({scope:t,fixId:r},i){E.assert(t.type==="file");let{file:s,project:o}=this.getFileAndProject(t.args),c=o.getLanguageService().getCombinedCodeFix({type:"file",fileName:s},r,this.getFormatOptions(s),this.getPreferences(s));return i?{changes:this.mapTextChangesToCodeEdits(c.changes),commands:c.commands}:c}applyCodeActionCommand(t){let r=t.command;for(let i of bT(r)){let{file:s,project:o}=this.getFileAndProject(i);o.getLanguageService().applyCodeActionCommand(i,this.getFormatOptions(s)).then(c=>{},c=>{})}return{}}getStartAndEndPosition(t,r){let i,s;return t.startPosition!==void 0?i=t.startPosition:(i=r.lineOffsetToPosition(t.startLine,t.startOffset),t.startPosition=i),t.endPosition!==void 0?s=t.endPosition:(s=r.lineOffsetToPosition(t.endLine,t.endOffset),t.endPosition=s),{startPosition:i,endPosition:s}}mapCodeAction({description:t,changes:r,commands:i}){return{description:t,changes:this.mapTextChangesToCodeEdits(r),commands:i}}mapCodeFixAction({fixName:t,description:r,changes:i,commands:s,fixId:o,fixAllDescription:c}){return{fixName:t,description:r,changes:this.mapTextChangesToCodeEdits(i),commands:s,fixId:o,fixAllDescription:c}}mapPasteEditsAction({edits:t,fixId:r}){return{edits:this.mapTextChangesToCodeEdits(t),fixId:r}}mapTextChangesToCodeEdits(t){return t.map(r=>this.mapTextChangeToCodeEdit(r))}mapTextChangeToCodeEdit(t){let r=this.projectService.getScriptInfoOrConfig(t.fileName);return!!t.isNewFile==!!r&&(r||this.projectService.logErrorForScriptInfoNotFound(t.fileName),E.fail("Expected isNewFile for (only) new files. "+JSON.stringify({isNewFile:!!t.isNewFile,hasScriptInfo:!!r}))),r?{fileName:t.fileName,textChanges:t.textChanges.map(i=>snt(i,r))}:cnt(t)}convertTextChangeToCodeEdit(t,r){return{start:r.positionToLineOffset(t.span.start),end:r.positionToLineOffset(t.span.start+t.span.length),newText:t.newText?t.newText:""}}getBraceMatching(t,r){let{file:i,languageService:s}=this.getFileAndLanguageServiceForSyntacticOperation(t),o=this.projectService.getScriptInfoForNormalizedPath(i),c=this.getPosition(t,o),_=s.getBraceMatchingAtPosition(i,c);return _?r?_.map(u=>Ym(u,o)):_:void 0}getDiagnosticsForProject(t,r,i){if(this.suppressDiagnosticEvents)return;let{fileNames:s,languageServiceDisabled:o}=this.getProjectInfoWorker(i,void 0,!0,void 0,!0);if(o)return;let c=s.filter(D=>!D.includes("lib.d.ts"));if(c.length===0)return;let _=[],u=[],g=[],d=[],h=go(i),S=this.projectService.ensureDefaultProjectForFile(h);for(let D of c)this.getCanonicalFileName(D)===this.getCanonicalFileName(i)?_.push(D):this.projectService.getScriptInfo(D).isScriptOpen()?u.push(D):Gl(D)?d.push(D):g.push(D);let k=[..._,...u,...g,...d].map(D=>({fileName:D,project:S}));this.updateErrorCheck(t,k,r,!1)}configurePlugin(t){this.projectService.configurePlugin(t)}getSmartSelectionRange(t,r){let{locations:i}=t,{file:s,languageService:o}=this.getFileAndLanguageServiceForSyntacticOperation(t),c=E.checkDefined(this.projectService.getScriptInfo(s));return Dn(i,_=>{let u=this.getPosition(_,c),g=o.getSmartSelectionRange(s,u);return r?this.mapSelectionRange(g,c):g})}toggleLineComment(t,r){let{file:i,languageService:s}=this.getFileAndLanguageServiceForSyntacticOperation(t),o=this.projectService.getScriptInfo(i),c=this.getRange(t,o),_=s.toggleLineComment(i,c);if(r){let u=this.projectService.getScriptInfoForNormalizedPath(i);return _.map(g=>this.convertTextChangeToCodeEdit(g,u))}return _}toggleMultilineComment(t,r){let{file:i,languageService:s}=this.getFileAndLanguageServiceForSyntacticOperation(t),o=this.projectService.getScriptInfoForNormalizedPath(i),c=this.getRange(t,o),_=s.toggleMultilineComment(i,c);if(r){let u=this.projectService.getScriptInfoForNormalizedPath(i);return _.map(g=>this.convertTextChangeToCodeEdit(g,u))}return _}commentSelection(t,r){let{file:i,languageService:s}=this.getFileAndLanguageServiceForSyntacticOperation(t),o=this.projectService.getScriptInfoForNormalizedPath(i),c=this.getRange(t,o),_=s.commentSelection(i,c);if(r){let u=this.projectService.getScriptInfoForNormalizedPath(i);return _.map(g=>this.convertTextChangeToCodeEdit(g,u))}return _}uncommentSelection(t,r){let{file:i,languageService:s}=this.getFileAndLanguageServiceForSyntacticOperation(t),o=this.projectService.getScriptInfoForNormalizedPath(i),c=this.getRange(t,o),_=s.uncommentSelection(i,c);if(r){let u=this.projectService.getScriptInfoForNormalizedPath(i);return _.map(g=>this.convertTextChangeToCodeEdit(g,u))}return _}mapSelectionRange(t,r){let i={textSpan:Ym(t.textSpan,r)};return t.parent&&(i.parent=this.mapSelectionRange(t.parent,r)),i}getScriptInfoFromProjectService(t){let r=go(t),i=this.projectService.getScriptInfoForNormalizedPath(r);return i||(this.projectService.logErrorForScriptInfoNotFound(r),ly.ThrowNoProject())}toProtocolCallHierarchyItem(t){let r=this.getScriptInfoFromProjectService(t.file);return{name:t.name,kind:t.kind,kindModifiers:t.kindModifiers,file:t.file,containerName:t.containerName,span:Ym(t.span,r),selectionSpan:Ym(t.selectionSpan,r)}}toProtocolCallHierarchyIncomingCall(t){let r=this.getScriptInfoFromProjectService(t.from.file);return{from:this.toProtocolCallHierarchyItem(t.from),fromSpans:t.fromSpans.map(i=>Ym(i,r))}}toProtocolCallHierarchyOutgoingCall(t,r){return{to:this.toProtocolCallHierarchyItem(t.to),fromSpans:t.fromSpans.map(i=>Ym(i,r))}}prepareCallHierarchy(t){let{file:r,project:i}=this.getFileAndProject(t),s=this.projectService.getScriptInfoForNormalizedPath(r);if(s){let o=this.getPosition(t,s),c=i.getLanguageService().prepareCallHierarchy(r,o);return c&&Kq(c,_=>this.toProtocolCallHierarchyItem(_))}}provideCallHierarchyIncomingCalls(t){let{file:r,project:i}=this.getFileAndProject(t),s=this.getScriptInfoFromProjectService(r);return i.getLanguageService().provideCallHierarchyIncomingCalls(r,this.getPosition(t,s)).map(c=>this.toProtocolCallHierarchyIncomingCall(c))}provideCallHierarchyOutgoingCalls(t){let{file:r,project:i}=this.getFileAndProject(t),s=this.getScriptInfoFromProjectService(r);return i.getLanguageService().provideCallHierarchyOutgoingCalls(r,this.getPosition(t,s)).map(c=>this.toProtocolCallHierarchyOutgoingCall(c,s))}getCanonicalFileName(t){let r=this.host.useCaseSensitiveFileNames?t:z0(t);return ra(r)}exit(){}notRequired(t){return t&&this.doOutput(void 0,t.command,t.seq,!0,this.performanceData),{responseRequired:!1,performanceData:this.performanceData}}requiredResponse(t){return{response:t,responseRequired:!0,performanceData:this.performanceData}}addProtocolHandler(t,r){if(this.handlers.has(t))throw new Error(`Protocol handler already exists for command "${t}"`);this.handlers.set(t,r)}setCurrentRequest(t){E.assert(this.currentRequestId===void 0),this.currentRequestId=t,this.cancellationToken.setRequest(t)}resetCurrentRequest(t){E.assert(this.currentRequestId===t),this.currentRequestId=void 0,this.cancellationToken.resetRequest(t)}executeWithRequestId(t,r,i){let s=this.performanceData;try{return this.performanceData=i,this.setCurrentRequest(t),r()}finally{this.resetCurrentRequest(t),this.performanceData=s}}executeCommand(t){let r=this.handlers.get(t.command);if(r){let i=this.executeWithRequestId(t.seq,()=>r(t),void 0);return this.projectService.enableRequestedPlugins(),i}else return this.logger.msg(`Unrecognized JSON command:${qv(t)}`,"Err"),this.doOutput(void 0,"unknown",t.seq,!1,void 0,`Unrecognized JSON command: ${t.command}`),{responseRequired:!1}}onMessage(t){var r,i,s,o,c,_,u;this.gcTimer.scheduleCollect();let g,d=this.performanceData;this.logger.hasLevel(2)&&(g=this.hrtime(),this.logger.hasLevel(3)&&this.logger.info(`request:${Gw(this.toStringMessage(t))}`));let h,S;try{h=this.parseMessage(t),S=h.arguments&&h.arguments.file?h.arguments:void 0,(r=hr)==null||r.instant(hr.Phase.Session,"request",{seq:h.seq,command:h.command}),(i=hr)==null||i.push(hr.Phase.Session,"executeCommand",{seq:h.seq,command:h.command},!0);let{response:x,responseRequired:k,performanceData:D}=this.executeCommand(h);if((s=hr)==null||s.pop(),this.logger.hasLevel(2)){let w=Qtt(this.hrtime(g)).toFixed(4);k?this.logger.perftrc(`${h.seq}::${h.command}: elapsed time (in milliseconds) ${w}`):this.logger.perftrc(`${h.seq}::${h.command}: async elapsed time (in milliseconds) ${w}`)}(o=hr)==null||o.instant(hr.Phase.Session,"response",{seq:h.seq,command:h.command,success:!!x}),x?this.doOutput(x,h.command,h.seq,!0,D):k&&this.doOutput(void 0,h.command,h.seq,!1,D,"No content available.")}catch(x){if((c=hr)==null||c.popAll(),x instanceof U6){(_=hr)==null||_.instant(hr.Phase.Session,"commandCanceled",{seq:h?.seq,command:h?.command}),this.doOutput({canceled:!0},h.command,h.seq,!0,this.performanceData);return}this.logErrorWorker(x,this.toStringMessage(t),S),(u=hr)==null||u.instant(hr.Phase.Session,"commandError",{seq:h?.seq,command:h?.command,message:x.message}),this.doOutput(void 0,h?h.command:"unknown",h?h.seq:0,!1,this.performanceData,"Error processing request. "+x.message+`
|
|
434
434
|
`+x.stack)}finally{this.performanceData=d}}parseMessage(t){return JSON.parse(t)}toStringMessage(t){return t}getFormatOptions(t){return this.projectService.getFormatCodeOptions(t)}getPreferences(t){return this.projectService.getPreferences(t)}getHostFormatOptions(){return this.projectService.getHostFormatCodeOptions()}getHostPreferences(){return this.projectService.getHostPreferences()}};function FNe(e){let t=e.diagnosticsDuration&&ds(e.diagnosticsDuration,([r,i])=>({...i,file:r}));return{...e,diagnosticsDuration:t}}function Ym(e,t){return{start:t.positionToLineOffset(e.start),end:t.positionToLineOffset(dc(e))}}function fpe(e,t,r){let i=Ym(e,r),s=t&&Ym(t,r);return s?{...i,contextStart:s.start,contextEnd:s.end}:i}function snt(e,t){return{start:ONe(t,e.span.start),end:ONe(t,dc(e.span)),newText:e.newText}}function ONe(e,t){return spe(e)?ont(e.getLineAndCharacterOfPosition(t)):e.positionToLineOffset(t)}function ant(e,t){let r=e.ranges.map(i=>({start:t.positionToLineOffset(i.start),end:t.positionToLineOffset(i.start+i.length)}));return e.wordPattern?{ranges:r,wordPattern:e.wordPattern}:{ranges:r}}function ont(e){return{line:e.line+1,offset:e.character+1}}function cnt(e){E.assert(e.textChanges.length===1);let t=La(e.textChanges);return E.assert(t.span.start===0&&t.span.length===0),{fileName:e.fileName,textChanges:[{start:{line:0,offset:0},end:{line:0,offset:0},newText:t.newText}]}}function ppe(e,t,r,i){let s=lnt(e,t,i),{line:o,character:c}=tE(DT(s),r);return{line:o+1,offset:c+1}}function lnt(e,t,r){for(let{fileName:i,textChanges:s}of r)if(i===t)for(let o=s.length-1;o>=0;o--){let{newText:c,span:{start:_,length:u}}=s[o];e=e.slice(0,_)+c+e.slice(_+u)}return e}function LNe(e,{fileName:t,textSpan:r,contextSpan:i,isWriteAccess:s,isDefinition:o},{disableLineTextInReferences:c}){let _=E.checkDefined(e.getScriptInfo(t)),u=fpe(r,i,_),g=c?void 0:unt(_,u);return{file:t,...u,lineText:g,isWriteAccess:s,isDefinition:o}}function unt(e,t){let r=e.lineToTextSpan(t.start.line-1);return e.getSnapshot().getText(r.start,dc(r)).replace(/\r|\n/g,"")}function _nt(e){return e===void 0||e&&typeof e=="object"&&typeof e.exportName=="string"&&(e.fileName===void 0||typeof e.fileName=="string")&&(e.ambientModuleName===void 0||typeof e.ambientModuleName=="string"&&(e.isPackageJsonImport===void 0||typeof e.isPackageJsonImport=="boolean"))}var zD=4,dpe=(e=>(e[e.PreStart=0]="PreStart",e[e.Start=1]="Start",e[e.Entire=2]="Entire",e[e.Mid=3]="Mid",e[e.End=4]="End",e[e.PostEnd=5]="PostEnd",e))(dpe||{}),fnt=class{constructor(){this.goSubtree=!0,this.lineIndex=new E8,this.endBranch=[],this.state=2,this.initialText="",this.trailingText="",this.lineIndex.root=new WD,this.startPath=[this.lineIndex.root],this.stack=[this.lineIndex.root]}get done(){return!1}insertLines(e,t){t&&(this.trailingText=""),e?e=this.initialText+e+this.trailingText:e=this.initialText+this.trailingText;let i=E8.linesFromText(e).lines;i.length>1&&i[i.length-1]===""&&i.pop();let s,o;for(let _=this.endBranch.length-1;_>=0;_--)this.endBranch[_].updateCounts(),this.endBranch[_].charCount()===0&&(o=this.endBranch[_],_>0?s=this.endBranch[_-1]:s=this.branchNode);o&&s.remove(o);let c=this.startPath[this.startPath.length-1];if(i.length>0)if(c.text=i[0],i.length>1){let _=new Array(i.length-1),u=c;for(let h=1;h<i.length;h++)_[h-1]=new NM(i[h]);let g=this.startPath.length-2;for(;g>=0;){let h=this.startPath[g];_=h.insertAt(u,_),g--,u=h}let d=_.length;for(;d>0;){let h=new WD;h.add(this.lineIndex.root),_=h.insertAt(this.lineIndex.root,_),d=_.length,this.lineIndex.root=h}this.lineIndex.root.updateCounts()}else for(let _=this.startPath.length-2;_>=0;_--)this.startPath[_].updateCounts();else{this.startPath[this.startPath.length-2].remove(c);for(let u=this.startPath.length-2;u>=0;u--)this.startPath[u].updateCounts()}return this.lineIndex}post(e,t,r){r===this.lineCollectionAtBranch&&(this.state=4),this.stack.pop()}pre(e,t,r,i,s){let o=this.stack[this.stack.length-1];this.state===2&&s===1&&(this.state=1,this.branchNode=o,this.lineCollectionAtBranch=r);let c;function _(u){return u.isLeaf()?new NM(""):new WD}switch(s){case 0:this.goSubtree=!1,this.state!==4&&o.add(r);break;case 1:this.state===4?this.goSubtree=!1:(c=_(r),o.add(c),this.startPath.push(c));break;case 2:this.state!==4?(c=_(r),o.add(c),this.startPath.push(c)):r.isLeaf()||(c=_(r),o.add(c),this.endBranch.push(c));break;case 3:this.goSubtree=!1;break;case 4:this.state!==4?this.goSubtree=!1:r.isLeaf()||(c=_(r),o.add(c),this.endBranch.push(c));break;case 5:this.goSubtree=!1,this.state!==1&&o.add(r);break}this.goSubtree&&this.stack.push(c)}leaf(e,t,r){this.state===1?this.initialText=r.text.substring(0,e):this.state===2?(this.initialText=r.text.substring(0,e),this.trailingText=r.text.substring(e+t)):this.trailingText=r.text.substring(e+t)}},pnt=class{constructor(e,t,r){this.pos=e,this.deleteLen=t,this.insertedText=r}getTextChangeRange(){return BN(gu(this.pos,this.deleteLen),this.insertedText?this.insertedText.length:0)}},DG=class mT{constructor(){this.changes=[],this.versions=new Array(mT.maxVersions),this.minVersion=0,this.currentVersion=0}versionToIndex(t){if(!(t<this.minVersion||t>this.currentVersion))return t%mT.maxVersions}currentVersionToIndex(){return this.currentVersion%mT.maxVersions}edit(t,r,i){this.changes.push(new pnt(t,r,i)),(this.changes.length>mT.changeNumberThreshold||r>mT.changeLengthThreshold||i&&i.length>mT.changeLengthThreshold)&&this.getSnapshot()}getSnapshot(){return this._getSnapshot()}_getSnapshot(){let t=this.versions[this.currentVersionToIndex()];if(this.changes.length>0){let r=t.index;for(let i of this.changes)r=r.edit(i.pos,i.deleteLen,i.insertedText);t=new MNe(this.currentVersion+1,this,r,this.changes),this.currentVersion=t.version,this.versions[this.currentVersionToIndex()]=t,this.changes=[],this.currentVersion-this.minVersion>=mT.maxVersions&&(this.minVersion=this.currentVersion-mT.maxVersions+1)}return t}getSnapshotVersion(){return this._getSnapshot().version}getAbsolutePositionAndLineText(t){return this._getSnapshot().index.lineNumberToInfo(t)}lineOffsetToPosition(t,r){return this._getSnapshot().index.absolutePositionOfStartOfLine(t)+(r-1)}positionToLineOffset(t){return this._getSnapshot().index.positionToLineOffset(t)}lineToTextSpan(t){let r=this._getSnapshot().index,{lineText:i,absolutePosition:s}=r.lineNumberToInfo(t+1),o=i!==void 0?i.length:r.absolutePositionOfStartOfLine(t+2)-s;return gu(s,o)}getTextChangesBetweenVersions(t,r){if(t<r)if(t>=this.minVersion){let i=[];for(let s=t+1;s<=r;s++){let o=this.versions[this.versionToIndex(s)];for(let c of o.changesSincePreviousVersion)i.push(c.getTextChangeRange())}return YZ(i)}else return;else return r5}getLineCount(){return this._getSnapshot().index.getLineCount()}static fromString(t){let r=new mT,i=new MNe(0,r,new E8);r.versions[r.currentVersion]=i;let s=E8.linesFromText(t);return i.index.load(s.lines),r}};DG.changeNumberThreshold=8,DG.changeLengthThreshold=256,DG.maxVersions=8;var PG=DG,MNe=class BFe{constructor(t,r,i,s=Ml){this.version=t,this.cache=r,this.index=i,this.changesSincePreviousVersion=s}getText(t,r){return this.index.getText(t,r-t)}getLength(){return this.index.getLength()}getChangeRange(t){if(t instanceof BFe&&this.cache===t.cache)return this.version<=t.version?r5:this.cache.getTextChangesBetweenVersions(t.version,this.version)}},E8=class she{constructor(){this.checkEdits=!1}absolutePositionOfStartOfLine(t){return this.lineNumberToInfo(t).absolutePosition}positionToLineOffset(t){let{oneBasedLine:r,zeroBasedColumn:i}=this.root.charOffsetToLineInfo(1,t);return{line:r,offset:i+1}}positionToColumnAndLineText(t){return this.root.charOffsetToLineInfo(1,t)}getLineCount(){return this.root.lineCount()}lineNumberToInfo(t){let r=this.getLineCount();if(t<=r){let{position:i,leaf:s}=this.root.lineNumberToInfo(t,0);return{absolutePosition:i,lineText:s&&s.text}}else return{absolutePosition:this.root.charCount(),lineText:void 0}}load(t){if(t.length>0){let r=[];for(let i=0;i<t.length;i++)r[i]=new NM(t[i]);this.root=she.buildTreeFromBottom(r)}else this.root=new WD}walk(t,r,i){this.root.walk(t,r,i)}getText(t,r){let i="";return r>0&&t<this.root.charCount()&&this.walk(t,r,{goSubtree:!0,done:!1,leaf:(s,o,c)=>{i=i.concat(c.text.substring(s,s+o))}}),i}getLength(){return this.root.charCount()}every(t,r,i){i||(i=this.root.charCount());let s={goSubtree:!0,done:!1,leaf(o,c,_){t(_,o,c)||(this.done=!0)}};return this.walk(r,i-r,s),!s.done}edit(t,r,i){if(this.root.charCount()===0)return E.assert(r===0),i!==void 0?(this.load(she.linesFromText(i).lines),this):void 0;{let s;if(this.checkEdits){let _=this.getText(0,this.root.charCount());s=_.slice(0,t)+i+_.slice(t+r)}let o=new fnt,c=!1;if(t>=this.root.charCount()){t=this.root.charCount()-1;let _=this.getText(t,1);i?i=_+i:i=_,r=0,c=!0}else if(r>0){let _=t+r,{zeroBasedColumn:u,lineText:g}=this.positionToColumnAndLineText(_);u===0&&(r+=g.length,i=i?i+g:g)}if(this.root.walk(t,r,o),o.insertLines(i,c),this.checkEdits){let _=o.lineIndex.getText(0,o.lineIndex.getLength());E.assert(s===_,"buffer edit mismatch")}return o.lineIndex}}static buildTreeFromBottom(t){if(t.length<zD)return new WD(t);let r=new Array(Math.ceil(t.length/zD)),i=0;for(let s=0;s<r.length;s++){let o=Math.min(i+zD,t.length);r[s]=new WD(t.slice(i,o)),i=o}return this.buildTreeFromBottom(r)}static linesFromText(t){let r=DT(t);if(r.length===0)return{lines:[],lineMap:r};let i=new Array(r.length),s=r.length-1;for(let c=0;c<s;c++)i[c]=t.substring(r[c],r[c+1]);let o=t.substring(r[s]);return o.length>0?i[s]=o:i.pop(),{lines:i,lineMap:r}}},WD=class ahe{constructor(t=[]){this.children=t,this.totalChars=0,this.totalLines=0,t.length&&this.updateCounts()}isLeaf(){return!1}updateCounts(){this.totalChars=0,this.totalLines=0;for(let t of this.children)this.totalChars+=t.charCount(),this.totalLines+=t.lineCount()}execWalk(t,r,i,s,o){return i.pre&&i.pre(t,r,this.children[s],this,o),i.goSubtree?(this.children[s].walk(t,r,i),i.post&&i.post(t,r,this.children[s],this,o)):i.goSubtree=!0,i.done}skipChild(t,r,i,s,o){s.pre&&!s.done&&(s.pre(t,r,this.children[i],this,o),s.goSubtree=!0)}walk(t,r,i){if(this.children.length===0)return;let s=0,o=this.children[s].charCount(),c=t;for(;c>=o;)this.skipChild(c,r,s,i,0),c-=o,s++,o=this.children[s].charCount();if(c+r<=o){if(this.execWalk(c,r,i,s,2))return}else{if(this.execWalk(c,o-c,i,s,1))return;let _=r-(o-c);for(s++,o=this.children[s].charCount();_>o;){if(this.execWalk(0,o,i,s,3))return;_-=o,s++,o=this.children[s].charCount()}if(_>0&&this.execWalk(0,_,i,s,4))return}if(i.pre){let _=this.children.length;if(s<_-1)for(let u=s+1;u<_;u++)this.skipChild(0,0,u,i,5)}}charOffsetToLineInfo(t,r){if(this.children.length===0)return{oneBasedLine:t,zeroBasedColumn:r,lineText:void 0};for(let o of this.children){if(o.charCount()>r)return o.isLeaf()?{oneBasedLine:t,zeroBasedColumn:r,lineText:o.text}:o.charOffsetToLineInfo(t,r);r-=o.charCount(),t+=o.lineCount()}let i=this.lineCount();if(i===0)return{oneBasedLine:1,zeroBasedColumn:0,lineText:void 0};let s=E.checkDefined(this.lineNumberToInfo(i,0).leaf);return{oneBasedLine:i,zeroBasedColumn:s.charCount(),lineText:void 0}}lineNumberToInfo(t,r){for(let i of this.children){let s=i.lineCount();if(s>=t)return i.isLeaf()?{position:r,leaf:i}:i.lineNumberToInfo(t,r);t-=s,r+=i.charCount()}return{position:r,leaf:void 0}}splitAfter(t){let r,i=this.children.length;t++;let s=t;if(t<i){for(r=new ahe;t<i;)r.add(this.children[t]),t++;r.updateCounts()}return this.children.length=s,r}remove(t){let r=this.findChildIndex(t),i=this.children.length;if(r<i-1)for(let s=r;s<i-1;s++)this.children[s]=this.children[s+1];this.children.pop()}findChildIndex(t){let r=this.children.indexOf(t);return E.assert(r!==-1),r}insertAt(t,r){let i=this.findChildIndex(t),s=this.children.length,o=r.length;if(s<zD&&i===s-1&&o===1)return this.add(r[0]),this.updateCounts(),[];{let c=this.splitAfter(i),_=0;for(i++;i<zD&&_<o;)this.children[i]=r[_],i++,_++;let u=[],g=0;if(_<o){g=Math.ceil((o-_)/zD),u=new Array(g);let d=0;for(let S=0;S<g;S++)u[S]=new ahe;let h=u[0];for(;_<o;)h.add(r[_]),_++,h.children.length===zD&&(d++,h=u[d]);for(let S=u.length-1;S>=0;S--)u[S].children.length===0&&u.pop()}c&&u.push(c),this.updateCounts();for(let d=0;d<g;d++)u[d].updateCounts();return u}}add(t){this.children.push(t),E.assert(this.children.length<=zD)}charCount(){return this.totalChars}lineCount(){return this.totalLines}},NM=class{constructor(e){this.text=e}isLeaf(){return!0}walk(e,t,r){r.leaf(e,t,this)}charCount(){return this.text.length}lineCount(){return 1}},RNe=class JFe{constructor(t,r,i,s,o,c){this.telemetryEnabled=t,this.logger=r,this.host=i,this.globalTypingsCacheLocation=s,this.event=o,this.maxActiveRequestCount=c,this.activeRequestCount=0,this.requestQueue=TN(),this.requestMap=new Map,this.requestedRegistry=!1,this.packageInstallId=0}isKnownTypesPackageName(t){var r;return D1.validatePackageName(t)!==D1.NameValidationResult.Ok?!1:(this.requestedRegistry||(this.requestedRegistry=!0,this.installer.send({kind:"typesRegistry"})),!!((r=this.typesRegistryCache)!=null&&r.has(t)))}installPackage(t){this.packageInstallId++;let r={kind:"installPackage",...t,id:this.packageInstallId},i=new Promise((s,o)=>{(this.packageInstalledPromise??(this.packageInstalledPromise=new Map)).set(this.packageInstallId,{resolve:s,reject:o})});return this.installer.send(r),i}attach(t){this.projectService=t,this.installer=this.createInstallerProcess()}onProjectClosed(t){this.installer.send({projectName:t.getProjectName(),kind:"closeProject"})}enqueueInstallTypingsRequest(t,r,i){let s=Sfe(t,r,i);this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Scheduling throttled operation:${qv(s)}`),this.activeRequestCount<this.maxActiveRequestCount?this.scheduleRequest(s):(this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Deferring request for: ${s.projectName}`),this.requestQueue.enqueue(s),this.requestMap.set(s.projectName,s))}handleMessage(t){var r,i;switch(this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Received response:${qv(t)}`),t.kind){case ZU:this.typesRegistryCache=new Map(Object.entries(t.typesRegistry));break;case Q9:{let s=(r=this.packageInstalledPromise)==null?void 0:r.get(t.id);E.assertIsDefined(s,"Should find the promise for package install"),(i=this.packageInstalledPromise)==null||i.delete(t.id),t.success?s.resolve({successMessage:t.message}):s.reject(t.message),this.projectService.updateTypingsForProject(t),this.event(t,"setTypings");break}case Dae:{let s={message:t.message};this.event(s,"typesInstallerInitializationFailed");break}case KU:{let s={eventId:t.eventId,packages:t.packagesToInstall};this.event(s,"beginInstallTypes");break}case eq:{if(this.telemetryEnabled){let c={telemetryEventName:"typingsInstalled",payload:{installedPackages:t.packagesToInstall.join(","),installSuccess:t.installSuccess,typingsInstallerVersion:t.typingsInstallerVersion}};this.event(c,"telemetry")}let s={eventId:t.eventId,packages:t.packagesToInstall,success:t.installSuccess};this.event(s,"endInstallTypes");break}case G9:{this.projectService.updateTypingsForProject(t);break}case $9:{for(this.activeRequestCount>0?this.activeRequestCount--:E.fail("TIAdapter:: Received too many responses");!this.requestQueue.isEmpty();){let s=this.requestQueue.dequeue();if(this.requestMap.get(s.projectName)===s){this.requestMap.delete(s.projectName),this.scheduleRequest(s);break}this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Skipping defunct request for: ${s.projectName}`)}this.projectService.updateTypingsForProject(t),this.event(t,"setTypings");break}case S3:this.projectService.watchTypingLocations(t);break;default:}}scheduleRequest(t){this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Scheduling request for: ${t.projectName}`),this.activeRequestCount++,this.host.setTimeout(()=>{this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Sending request:${qv(t)}`),this.installer.send(t)},JFe.requestDelayMillis,`${t.projectName}::${t.kind}`)}};RNe.requestDelayMillis=100;var jNe=RNe,BNe={};yt(BNe,{ActionInvalidate:()=>G9,ActionPackageInstalled:()=>Q9,ActionSet:()=>$9,ActionWatchTypingLocations:()=>S3,Arguments:()=>tq,AutoImportProviderProject:()=>Wfe,AuxiliaryProject:()=>Jfe,CharRangeSection:()=>dpe,CloseFileWatcherEvent:()=>gG,CommandNames:()=>kNe,ConfigFileDiagEvent:()=>_G,ConfiguredProject:()=>Vfe,ConfiguredProjectLoadKind:()=>Qfe,CreateDirectoryWatcherEvent:()=>mG,CreateFileWatcherEvent:()=>dG,Errors:()=>ly,EventBeginInstallTypes:()=>KU,EventEndInstallTypes:()=>eq,EventInitializationFailed:()=>Dae,EventTypesRegistry:()=>ZU,ExternalProject:()=>sG,GcTimer:()=>Pfe,InferredProject:()=>Bfe,LargeFileReferencedEvent:()=>uG,LineIndex:()=>E8,LineLeaf:()=>NM,LineNode:()=>WD,LogLevel:()=>vfe,Msg:()=>bfe,OpenFileInfoTelemetryEvent:()=>Ufe,Project:()=>Xk,ProjectInfoTelemetryEvent:()=>pG,ProjectKind:()=>T4,ProjectLanguageServiceStateEvent:()=>fG,ProjectLoadingFinishEvent:()=>lG,ProjectLoadingStartEvent:()=>cG,ProjectService:()=>ipe,ProjectsUpdatedInBackgroundEvent:()=>DM,ScriptInfo:()=>Ife,ScriptVersionCache:()=>PG,Session:()=>INe,TextStorage:()=>Afe,ThrottledOperations:()=>Dfe,TypingsInstallerAdapter:()=>jNe,allFilesAreJsOrDts:()=>Mfe,allRootFilesAreJsOrDts:()=>Lfe,asNormalizedPath:()=>X4e,convertCompilerOptions:()=>PM,convertFormatOptions:()=>BD,convertScriptKindName:()=>yG,convertTypeAcquisition:()=>Hfe,convertUserPreferences:()=>$fe,convertWatchOptions:()=>k8,countEachFileTypes:()=>b8,createInstallTypingsRequest:()=>Sfe,createModuleSpecifierCache:()=>ope,createNormalizedPathMap:()=>Y4e,createPackageJsonCache:()=>cpe,createSortedArray:()=>Efe,emptyArray:()=>Ml,findArgument:()=>Y2e,formatDiagnosticToProtocol:()=>C8,formatMessage:()=>lpe,getBaseConfigFileName:()=>iG,getDetailWatchInfo:()=>xG,getLocationInNewDocument:()=>ppe,hasArgument:()=>X2e,hasNoTypeScriptSource:()=>Rfe,indent:()=>Gw,isBackgroundProject:()=>x8,isConfigFile:()=>spe,isConfiguredProject:()=>o0,isDynamicFileName:()=>x4,isExternalProject:()=>S8,isInferredProject:()=>jD,isInferredProjectName:()=>xfe,isProjectDeferredClose:()=>T8,makeAutoImportProviderProjectName:()=>kfe,makeAuxiliaryProjectName:()=>Cfe,makeInferredProjectName:()=>Tfe,maxFileSize:()=>oG,maxProgramSizeForNonTsFiles:()=>aG,normalizedPathToPath:()=>RD,nowString:()=>Z2e,nullCancellationToken:()=>SNe,nullTypingsInstaller:()=>wM,protocol:()=>wfe,scriptInfoIsContainedByBackgroundProject:()=>Ffe,scriptInfoIsContainedByDeferredClosedProject:()=>Ofe,stringifyIndented:()=>qv,toEvent:()=>upe,toNormalizedPath:()=>go,tryConvertScriptKindName:()=>hG,typingsInstaller:()=>yfe,updateProjectIfDirty:()=>dd}),typeof console<"u"&&(E.loggingHost={log(e,t){switch(e){case 1:return console.error(t);case 2:return console.warn(t);case 3:return console.log(t);case 4:return console.log(t)}}})})({get exports(){return FFe},set exports(Y){FFe=Y,typeof RX<"u"&&RX.exports&&(RX.exports=Y)}})});var YFe=IFe(O7=>{"use strict";O7.__esModule=!0;O7.distance=O7.closest=void 0;var WC=new Uint32Array(65536),Omt=function(Y,Ee){for(var Pe=Y.length,Ve=Ee.length,nt=1<<Pe-1,yt=-1,Lt=0,qt=Pe,jt=Pe;jt--;)WC[Y.charCodeAt(jt)]|=1<<jt;for(jt=0;jt<Ve;jt++){var fr=WC[Ee.charCodeAt(jt)],Xn=fr|Lt;fr|=(fr&yt)+yt^yt,Lt|=~(fr|yt),yt&=fr,Lt&nt&&qt++,yt&nt&&qt--,Lt=Lt<<1|1,yt=yt<<1|~(Xn|Lt),Lt&=Xn}for(jt=Pe;jt--;)WC[Y.charCodeAt(jt)]=0;return qt},Lmt=function(Y,Ee){for(var Pe=Ee.length,Ve=Y.length,nt=[],yt=[],Lt=Math.ceil(Pe/32),qt=Math.ceil(Ve/32),jt=0;jt<Lt;jt++)yt[jt]=-1,nt[jt]=0;for(var fr=0;fr<qt-1;fr++){for(var Xn=0,Ti=-1,Oe=fr*32,to=Math.min(32,Ve)+Oe,fn=Oe;fn<to;fn++)WC[Y.charCodeAt(fn)]|=1<<fn;for(var jt=0;jt<Pe;jt++){var cn=WC[Ee.charCodeAt(jt)],_g=yt[jt/32|0]>>>jt&1,so=nt[jt/32|0]>>>jt&1,fg=cn|Xn,ks=((cn|so)&Ti)+Ti^Ti|cn|so,Xc=Xn|~(ks|Ti),mf=Ti&ks;Xc>>>31^_g&&(yt[jt/32|0]^=1<<jt),mf>>>31^so&&(nt[jt/32|0]^=1<<jt),Xc=Xc<<1|_g,mf=mf<<1|so,Ti=mf|~(fg|Xc),Xn=Xc&fg}for(var fn=Oe;fn<to;fn++)WC[Y.charCodeAt(fn)]=0}for(var Vr=0,Pr=-1,$g=fr*32,ic=Math.min(32,Ve-$g)+$g,fn=$g;fn<ic;fn++)WC[Y.charCodeAt(fn)]|=1<<fn;for(var gT=Ve,jt=0;jt<Pe;jt++){var cn=WC[Ee.charCodeAt(jt)],_g=yt[jt/32|0]>>>jt&1,so=nt[jt/32|0]>>>jt&1,fg=cn|Vr,ks=((cn|so)&Pr)+Pr^Pr|cn|so,Xc=Vr|~(ks|Pr),mf=Pr&ks;gT+=Xc>>>Ve-1&1,gT-=mf>>>Ve-1&1,Xc>>>31^_g&&(yt[jt/32|0]^=1<<jt),mf>>>31^so&&(nt[jt/32|0]^=1<<jt),Xc=Xc<<1|_g,mf=mf<<1|so,Pr=mf|~(fg|Xc),Vr=Xc&fg}for(var fn=$g;fn<ic;fn++)WC[Y.charCodeAt(fn)]=0;return gT},XFe=function(Y,Ee){if(Y.length<Ee.length){var Pe=Ee;Ee=Y,Y=Pe}return Ee.length===0?Y.length:Y.length<=32?Omt(Y,Ee):Lmt(Y,Ee)};O7.distance=XFe;var Mmt=function(Y,Ee){for(var Pe=1/0,Ve=0,nt=0;nt<Ee.length;nt++){var yt=XFe(Y,Ee[nt]);yt<Pe&&(Pe=yt,Ve=nt)}return Ee[Ve]};O7.closest=Mmt});var HC=R_(require("path"));var HX=R_(require("fs")),I6=R_(require("path"));var I7=R_(require("fs")),F7=R_(require("path")),Vf=R_(zC());var Nl=R_(zC());function Bh(Y,Ee){return Nl.default.createSourceFile(Y,Ee,Nl.default.ScriptTarget.Latest,!0,Y.endsWith(".tsx")?Nl.default.ScriptKind.TSX:Nl.default.ScriptKind.TS)}function ug(Y,Ee){let{line:Pe,character:Ve}=Y.getLineAndCharacterOfPosition(Ee);return{line:Pe+1,column:Ve+1}}function hN(Y,Ee){if(Nl.default.isJsxElement(Y)){let Pe=Y.openingElement.tagName;return Nl.default.isIdentifier(Pe)&&Pe.text===Ee}if(Nl.default.isJsxSelfClosingElement(Y)){let Pe=Y.tagName;return Nl.default.isIdentifier(Pe)&&Pe.text===Ee}return!1}function Hg(Y,Ee){let Pe=Nl.default.isJsxElement(Y)?Y.openingElement.attributes:Y.attributes;for(let Ve of Pe.properties)if(Nl.default.isJsxAttribute(Ve)&&Nl.default.isIdentifier(Ve.name)&&Ve.name.text===Ee)return Ve}function A7(Y){let Ee=Y.initializer;if(Ee){if(Nl.default.isStringLiteral(Ee))return{value:Ee.text,isDynamic:!1};if(Nl.default.isJsxExpression(Ee)&&Ee.expression){let Pe=Ee.expression;if(Nl.default.isStringLiteral(Pe))return{value:Pe.text,isDynamic:!1};if(Nl.default.isTemplateExpression(Pe))return zFe(Pe);if(Nl.default.isNoSubstitutionTemplateLiteral(Pe))return{value:Pe.text,isDynamic:!1}}}}function jX(Y){let Ee=Y.initializer;if(Ee){if(Nl.default.isStringLiteral(Ee))return{value:Ee.text,isDynamic:!1,valueNode:Ee};if(Nl.default.isJsxExpression(Ee)&&Ee.expression){let Pe=Ee.expression;if(Nl.default.isStringLiteral(Pe))return{value:Pe.text,isDynamic:!1,valueNode:Pe};if(Nl.default.isTemplateExpression(Pe))return{...zFe(Pe),valueNode:Pe};if(Nl.default.isNoSubstitutionTemplateLiteral(Pe))return{value:Pe.text,isDynamic:!1,valueNode:Pe}}}}function zFe(Y){let Ee=Y.head.text;for(let Pe of Y.templateSpans)Ee+=":param"+Pe.literal.text;return{value:Ee,isDynamic:!0}}function D6(Y,Ee){if(!Nl.default.isCallExpression(Y))return!1;let Pe=Y.expression;return Nl.default.isIdentifier(Pe)?Pe.text===Ee:!1}function P6(Y){return(Nl.default.canHaveModifiers(Y)?Nl.default.getModifiers(Y):void 0)?.some(Pe=>Pe.kind===Nl.default.SyntaxKind.ExportKeyword)??!1}function ql(Y,Ee){Ee(Y),Nl.default.forEachChild(Y,Pe=>ql(Pe,Ee))}function kd(Y,Ee,Pe){let Ve=Ee.getStart(Y),nt=Ee.getEnd(),{line:yt,character:Lt}=Y.getLineAndCharacterOfPosition(Ve);return{file:Pe,start:Ve,end:nt,line:yt+1,column:Lt+1}}function w6(Y){let Ee=Nl.default.isJsxElement(Y)?Y.openingElement.tagName:Y.tagName;if(Nl.default.isIdentifier(Ee))return Ee.text}function BX(Y){return Y.length>0&&Y[0]===Y[0].toUpperCase()&&/^[A-Z]/.test(Y)}function JX(Y){if(Nl.default.isJsxSelfClosingElement(Y))return;let Ee=[];for(let Pe of Y.children)if(Nl.default.isJsxText(Pe)){let Ve=Pe.text.trim();Ve&&Ee.push(Ve)}else if(Nl.default.isJsxElement(Pe)||Nl.default.isJsxSelfClosingElement(Pe)){let Ve=JX(Pe);Ve&&Ee.push(Ve)}else Nl.default.isJsxExpression(Pe)&&Pe.expression&&(Nl.default.isStringLiteral(Pe.expression)||Nl.default.isNoSubstitutionTemplateLiteral(Pe.expression))&&Ee.push(Pe.expression.text);return Ee.length>0?Ee.join(" "):void 0}function WFe(Y){let Ee=F7.join(Y,"app","routes.ts");if(!I7.existsSync(Ee))throw new Error(`Routes file not found: ${Ee}`);let Pe=I7.readFileSync(Ee,"utf-8"),Ve=Bh(Ee,Pe),nt=amt(Ve,F7.dirname(Ee)),yt=[];return ql(Ve,Lt=>{if(Vf.default.isExportAssignment(Lt)&&Lt.expression){let qt=N6(Lt.expression,Y,nt);yt.push(...qt)}}),yt}function amt(Y,Ee){let Pe=new Map;return ql(Y,Ve=>{if(Vf.default.isImportDeclaration(Ve)&&Ve.importClause?.name&&Ve.moduleSpecifier&&Vf.default.isStringLiteral(Ve.moduleSpecifier)){let nt=Ve.importClause.name.text,yt=Ve.moduleSpecifier.text;if(yt.startsWith(".")){let Lt=omt(Ee,yt);Lt&&Pe.set(nt,Lt)}}}),Pe}function omt(Y,Ee){let Pe=F7.resolve(Y,Ee);for(let Ve of[Pe,`${Pe}.ts`])if(I7.existsSync(Ve))return Ve}function cmt(Y,Ee){let Pe=I7.readFileSync(Y,"utf-8"),Ve=Bh(Y,Pe),nt=[],yt=new Map;return ql(Ve,Lt=>{if(Vf.default.isVariableStatement(Lt)&&Lt.declarationList.declarations.length>0)for(let qt of Lt.declarationList.declarations)Vf.default.isIdentifier(qt.name)&&qt.initializer&&yt.set(qt.name.text,qt.initializer)}),ql(Ve,Lt=>{if(Vf.default.isExportAssignment(Lt)&&Lt.expression){let qt=Lt.expression;if(Vf.default.isIdentifier(qt)){let fr=yt.get(qt.text);fr&&(qt=fr)}let jt=N6(qt,Ee,new Map);nt.push(...jt)}}),nt}function N6(Y,Ee,Pe){let Ve=[];if(Vf.default.isArrayLiteralExpression(Y)){for(let nt of Y.elements){if(Vf.default.isSpreadElement(nt)){let Lt=nt.expression;if(Vf.default.isIdentifier(Lt)){let jt=Pe.get(Lt.text);if(jt){let fr=cmt(jt,Ee);Ve.push(...fr);continue}}let qt=N6(Lt,Ee,Pe);Ve.push(...qt);continue}let yt=N6(nt,Ee,Pe);Ve.push(...yt)}return Ve}if(Vf.default.isSatisfiesExpression(Y)||Vf.default.isAsExpression(Y))return N6(Y.expression,Ee,Pe);if(Vf.default.isCallExpression(Y)){let nt=Vf.default.isIdentifier(Y.expression)?Y.expression.text:void 0;if(nt==="route"){let yt=lmt(Y,Ee,Pe);yt&&Ve.push(yt)}else if(nt==="layout"){let yt=umt(Y,Ee,Pe);Ve.push(...yt)}else if(nt==="index"){let yt=_mt(Y,Ee);yt&&Ve.push(yt)}}return Ve}function lmt(Y,Ee,Pe){let Ve=Y.arguments;if(Ve.length<2)return;let nt=Ve[0];if(!Vf.default.isStringLiteral(nt))return;let yt=nt.text,Lt=Ve[1];if(!Vf.default.isStringLiteral(Lt))return;let qt=Lt.text,jt,fr;if(Ve.length>=3){let Xn=Ve[2];if(Vf.default.isObjectLiteralExpression(Xn))for(let Ti of Xn.properties)Vf.default.isPropertyAssignment(Ti)&&Vf.default.isIdentifier(Ti.name)&&Ti.name.text==="id"&&Vf.default.isStringLiteral(Ti.initializer)&&(jt=Ti.initializer.text);Vf.default.isArrayLiteralExpression(Xn)&&(fr=N6(Xn,Ee,Pe))}if(Ve.length>=4){let Xn=Ve[3];Vf.default.isArrayLiteralExpression(Xn)&&(fr=N6(Xn,Ee,Pe))}return VFe(yt,qt,jt,fr)}function umt(Y,Ee,Pe){let Ve=Y.arguments;if(Ve.length<2)return[];let nt=Ve[0];if(!Vf.default.isStringLiteral(nt))return[];let yt=Ve[1];return N6(yt,Ee,Pe)}function _mt(Y,Ee){let Pe=Y.arguments;if(Pe.length<1)return;let Ve=Pe[0];if(Vf.default.isStringLiteral(Ve))return VFe("/",Ve.text,void 0,void 0)}function VFe(Y,Ee,Pe,Ve){let nt=fmt(Y),yt=pmt(Y);return{path:Y,file:Ee,id:Pe,params:nt,pattern:yt,children:Ve&&Ve.length>0?Ve:void 0}}function fmt(Y){let Ee=[],Pe=/:(\w+)/g,Ve;for(;(Ve=Pe.exec(Y))!==null;)Ee.push(Ve[1]);return Ee}function pmt(Y){let Ee=Y.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return Ee=Ee.replace(/:(\w+)/g,"([^/]+)"),new RegExp(`^${Ee}$`)}function zX(Y){let Ee=[];function Pe(Ve){for(let nt of Ve)Ee.push(nt.path),nt.children&&Pe(nt.children)}return Pe(Y),Ee}function aj(Y,Ee){let Pe=Y.split("?")[0].split("#")[0];for(let Ve of Ee){if(Ve.pattern.test(Pe))return Ve;if(Ve.children){let nt=aj(Pe,Ve.children);if(nt)return nt}}}function ohe(Y,Ee){let Pe=Y.split("/").filter(Boolean);for(let Ve of Ee){let nt=Ve.path.split("/").filter(Boolean);if(Pe.length!==nt.length)continue;let yt=!0;for(let Lt=0;Lt<Pe.length;Lt++){let qt=Pe[Lt],jt=nt[Lt];if(!(qt.startsWith(":")&&jt.startsWith(":"))){if(!qt.startsWith(":")&&!jt.startsWith(":")){if(qt!==jt){yt=!1;break}continue}if(!qt.startsWith(":")){yt=!1;break}}}if(yt)return Ve;if(Ve.children){let Lt=ohe(Y,Ve.children);if(Lt)return Lt}}}var GFe=R_(require("fs")),Ha=R_(zC());var che={modules:["pg","pg-native","mysql","mysql2","better-sqlite3","sqlite3","@libsql/client","mongodb","redis","ioredis","drizzle-orm","@prisma/client","typeorm","sequelize","knex","kysely","mongoose","mikro-orm","fs","fs/promises","child_process","net","crypto"],patterns:["\\.server"]};var UFe=new Set(che.modules),mmt=che.patterns.map(Y=>new RegExp(Y));function QFe(Y){let Ee=GFe.readFileSync(Y,"utf-8"),Pe=Bh(Y,Ee),Ve=[],nt=[],yt=[],Lt=[],qt=!1,jt=!1,fr=!1,Xn=!1,Ti,Oe,to=[];ql(Pe,ks=>{if(Ha.default.isImportDeclaration(ks)&&Ha.default.isStringLiteral(ks.moduleSpecifier)){let Xc=ks.moduleSpecifier.text;Fmt(Xc)&&to.push(Xc)}});let fn=[],cn=new Set,_g=new Set,so=new Set,fg=new Set;return ql(Pe,ks=>{if((Ha.default.isJsxElement(ks)||Ha.default.isJsxSelfClosingElement(ks))&&Cmt(ks)&&cn.add(ks),Ha.default.isFunctionDeclaration(ks)&&ks.name&&P6(ks)){let Xc=ks.name.text;Xc==="loader"||Xc==="action"?ks.body&&_g.add(ks.body):!((Ha.default.canHaveModifiers(ks)?Ha.default.getModifiers(ks):void 0)?.some(Pr=>Pr.kind===Ha.default.SyntaxKind.DefaultKeyword)??!1)&&ks.body&&fg.add(ks.body)}if(Ha.default.isVariableStatement(ks)&&P6(ks)){for(let Xc of ks.declarationList.declarations)if(Ha.default.isIdentifier(Xc.name)){let mf=Xc.name.text;mf==="loader"||mf==="action"?Xc.initializer&&(Ha.default.isArrowFunction(Xc.initializer)||Ha.default.isFunctionExpression(Xc.initializer))&&_g.add(Xc.initializer.body):Xc.initializer&&(Ha.default.isArrowFunction(Xc.initializer)||Ha.default.isFunctionExpression(Xc.initializer))&&fg.add(Xc.initializer.body)}}if(Ha.default.isVariableDeclaration(ks)&&Ha.default.isIdentifier(ks.name)){let Xc=ks.name.text;Nmt(Xc)&&ks.initializer&&(Ha.default.isArrowFunction(ks.initializer)||Ha.default.isFunctionExpression(ks.initializer))&&so.add(ks.initializer.body)}if(Ha.default.isJsxAttribute(ks)&&Ha.default.isIdentifier(ks.name)){let Xc=ks.name.text;if(Amt(Xc)&&ks.initializer&&Ha.default.isJsxExpression(ks.initializer)&&ks.initializer.expression){let mf=ks.initializer.expression;(Ha.default.isArrowFunction(mf)||Ha.default.isFunctionExpression(mf))&&so.add(mf.body)}}}),ql(Pe,ks=>{(D6(ks,"useEffect")||D6(ks,"useLayoutEffect"))&&fn.push(ks);let Xc=Dmt(ks,_g),mf=Pmt(ks,so);if(!Xc&&!mf){let Vr=Imt(ks,Pe,Y,fn.length>0,Emt(ks,cn));Vr&&Lt.push(Vr)}if(hN(ks,"Link")){let Vr=gmt(ks,Pe,Y);Vr&&Ve.push(Vr)}if(hN(ks,"a")){let Vr=qFe(ks,Pe,Y);Vr&&Ve.push(Vr)}if((Ha.default.isJsxElement(ks)||Ha.default.isJsxSelfClosingElement(ks))&&!hN(ks,"Link")&&!hN(ks,"NavLink")&&!hN(ks,"a")&&Hg(ks,"href")){let Pr=qFe(ks,Pe,Y);Pr&&Ve.push(Pr)}if(hN(ks,"Form")){let Vr=hmt(ks,Pe,Y);Vr&&(Vr.inNamedExport=wmt(ks,fg),nt.push(Vr))}if(D6(ks,"redirect")){let Vr=xmt(ks,Pe,Y);Vr&&Ve.push(Vr)}if(D6(ks,"navigate")){let Vr=Tmt(ks,Pe,Y);Vr&&Ve.push(Vr)}if(D6(ks,"useLoaderData")){let Vr=HFe("useLoaderData",ks,Pe,Y);yt.push(Vr)}if(D6(ks,"useActionData")){let Vr=HFe("useActionData",ks,Pe,Y);yt.push(Vr)}if(D6(ks,"useParams")){let Vr=kmt(ks,Pe,Y);yt.push(Vr)}if(Ha.default.isFunctionDeclaration(ks)&&ks.name&&P6(ks)&&(ks.name.text==="loader"&&(qt=!0),ks.name.text==="action"&&(jt=!0),ks.name.text==="clientLoader"&&(fr=!0,Ti=kd(Pe,ks.name,Y)),ks.name.text==="clientAction"&&(Xn=!0,Oe=kd(Pe,ks.name,Y))),Ha.default.isVariableStatement(ks)&&P6(ks))for(let Vr of ks.declarationList.declarations)Ha.default.isIdentifier(Vr.name)&&(Vr.name.text==="loader"&&(qt=!0),Vr.name.text==="action"&&(jt=!0),Vr.name.text==="clientLoader"&&(fr=!0,Ti=kd(Pe,Vr.name,Y)),Vr.name.text==="clientAction"&&(Xn=!0,Oe=kd(Pe,Vr.name,Y)))}),{file:Y,links:Ve,forms:nt,dataHooks:yt,hydrationRisks:Lt,hasLoader:qt,hasAction:jt,hasClientLoader:fr,hasClientAction:Xn,serverImports:to,clientLoaderSpan:Ti,clientActionSpan:Oe}}function gmt(Y,Ee,Pe){let Ve=Hg(Y,"to"),nt=Hg(Y,"href"),yt=Ve||nt;if(!yt)return;let Lt=jX(yt);if(!Lt||WX(Lt.value))return;let qt=ug(Ee,Y.getStart());return{href:Lt.value,isDynamic:Lt.isDynamic,pattern:Lt.isDynamic?Lt.value:void 0,location:{file:Pe,line:qt.line,column:qt.column},type:"link",attributeSpan:kd(Ee,Lt.valueNode,Pe)}}function qFe(Y,Ee,Pe){let Ve=Hg(Y,"href");if(!Ve)return;let nt=jX(Ve);if(!nt||WX(nt.value))return;let yt=ug(Ee,Y.getStart());return{href:nt.value,isDynamic:nt.isDynamic,pattern:nt.isDynamic?nt.value:void 0,location:{file:Pe,line:yt.line,column:yt.column},type:"link",attributeSpan:kd(Ee,nt.valueNode,Pe)}}function hmt(Y,Ee,Pe){let Ve=Hg(Y,"action"),nt=Hg(Y,"method"),yt,Lt;if(Ve){let Ti=jX(Ve);Ti&&(yt=Ti.value,Lt=kd(Ee,Ti.valueNode,Pe))}let qt="post";if(nt){let Ti=A7(nt);if(Ti){let Oe=Ti.value.toLowerCase();["get","post","put","patch","delete"].includes(Oe)&&(qt=Oe)}}let{inputNames:jt,intentValue:fr}=Smt(Y,Ee),Xn=ug(Ee,Y.getStart());return{action:yt,method:qt,inputNames:jt,intentValue:fr,location:{file:Pe,line:Xn.line,column:Xn.column},actionSpan:Lt}}var ymt=new Set(["input","select","textarea"]);function vmt(Y){if(!Ha.default.isJsxElement(Y)&&!Ha.default.isJsxSelfClosingElement(Y))return!1;let Ee=w6(Y);return Ee?ymt.has(Ee)?!0:BX(Ee)?Hg(Y,"name")!==void 0:!1:!1}function bmt(Y){if(!Ha.default.isJsxElement(Y)&&!Ha.default.isJsxSelfClosingElement(Y))return!1;let Ee=w6(Y);return Ee?Ee==="button"||Ee==="Button":!1}function Smt(Y,Ee){let Pe=[],Ve;return ql(Y,nt=>{if(vmt(nt)){let yt=Hg(nt,"name");if(yt){let Lt=A7(yt);if(Lt&&(Pe.push(Lt.value),Lt.value==="intent")){let qt=Hg(nt,"value");if(qt){let jt=A7(qt);jt&&(Ve=jt.value)}}}}if(bmt(nt)){let yt=Hg(nt,"name");if(yt){let Lt=A7(yt);if(Lt&&Lt.value==="intent"){Pe.push("intent");let qt=Hg(nt,"value");if(qt){let jt=A7(qt);jt&&(Ve=jt.value)}}}}}),{inputNames:Pe,intentValue:Ve}}function xmt(Y,Ee,Pe){if(Y.arguments.length===0)return;let Ve=Y.arguments[0],nt;if(Ha.default.isStringLiteral(Ve))nt={value:Ve.text,isDynamic:!1,valueNode:Ve};else if(Ha.default.isTemplateExpression(Ve)){let Lt=Ve.head.text;for(let qt of Ve.templateSpans)Lt+=":param"+qt.literal.text;nt={value:Lt,isDynamic:!0,valueNode:Ve}}else Ha.default.isNoSubstitutionTemplateLiteral(Ve)&&(nt={value:Ve.text,isDynamic:!1,valueNode:Ve});if(!nt||WX(nt.value))return;let yt=ug(Ee,Y.getStart());return{href:nt.value,isDynamic:nt.isDynamic,pattern:nt.isDynamic?nt.value:void 0,location:{file:Pe,line:yt.line,column:yt.column},type:"redirect",attributeSpan:kd(Ee,nt.valueNode,Pe)}}function Tmt(Y,Ee,Pe){if(Y.arguments.length===0)return;let Ve=Y.arguments[0],nt;if(Ha.default.isStringLiteral(Ve))nt={value:Ve.text,isDynamic:!1,valueNode:Ve};else if(Ha.default.isTemplateExpression(Ve)){let Lt=Ve.head.text;for(let qt of Ve.templateSpans)Lt+=":param"+qt.literal.text;nt={value:Lt,isDynamic:!0,valueNode:Ve}}else Ha.default.isNoSubstitutionTemplateLiteral(Ve)&&(nt={value:Ve.text,isDynamic:!1,valueNode:Ve});if(!nt||WX(nt.value))return;let yt=ug(Ee,Y.getStart());return{href:nt.value,isDynamic:nt.isDynamic,pattern:nt.isDynamic?nt.value:void 0,location:{file:Pe,line:yt.line,column:yt.column},type:"navigate",attributeSpan:kd(Ee,nt.valueNode,Pe)}}function HFe(Y,Ee,Pe,Ve){let nt=ug(Pe,Ee.getStart());return{hook:Y,location:{file:Ve,line:nt.line,column:nt.column}}}function kmt(Y,Ee,Pe){let Ve=ug(Ee,Y.getStart()),nt=[],yt=new Map,Lt=Y.parent;if(Ha.default.isVariableDeclaration(Lt)&&Ha.default.isObjectBindingPattern(Lt.name)){for(let qt of Lt.name.elements)if(Ha.default.isBindingElement(qt)&&Ha.default.isIdentifier(qt.name)){let jt=qt.name.text;nt.push(jt),yt.set(jt,kd(Ee,qt.name,Pe))}}return{hook:"useParams",accessedParams:nt.length>0?nt:void 0,location:{file:Pe,line:Ve.line,column:Ve.column},paramSpans:yt.size>0?yt:void 0}}function WX(Y){return Y.startsWith("http://")||Y.startsWith("https://")||Y.startsWith("mailto:")||Y.startsWith("tel:")||Y.startsWith("sms:")||Y.startsWith("data:")||Y.startsWith("blob:")||Y.startsWith("javascript:")||Y.startsWith("#")||Y.startsWith("//")}function Cmt(Y){let Ee=Hg(Y,"suppressHydrationWarning");return Ee?!!(!Ee.initializer||Ha.default.isJsxExpression(Ee.initializer)&&Ee.initializer.expression&&(Ee.initializer.expression.kind===Ha.default.SyntaxKind.TrueKeyword||Ha.default.isIdentifier(Ee.initializer.expression)&&Ee.initializer.expression.text==="true")):!1}function Emt(Y,Ee){let Pe=Y;for(;Pe;){if(Ee.has(Pe))return!0;Pe=Pe.parent}return!1}function Dmt(Y,Ee){let Pe=Y;for(;Pe;){if(Ee.has(Pe))return!0;Pe=Pe.parent}return!1}function Pmt(Y,Ee){let Pe=Y;for(;Pe;){if(Ee.has(Pe))return!0;Pe=Pe.parent}return!1}function wmt(Y,Ee){let Pe=Y;for(;Pe;){if(Ee.has(Pe))return!0;Pe=Pe.parent}return!1}function Nmt(Y){return!!(Y.startsWith("handle")&&Y.length>6||Y.startsWith("on")&&Y.length>2&&Y[2]===Y[2].toUpperCase())}function Amt(Y){return Y.startsWith("on")&&Y.length>2&&Y[2]===Y[2].toUpperCase()}function Imt(Y,Ee,Pe,Ve,nt){let yt=ug(Ee,Y.getStart()),Lt={file:Pe,line:yt.line,column:yt.column};if(Ha.default.isNewExpression(Y)&&Ha.default.isIdentifier(Y.expression)&&Y.expression.text==="Date"&&(!Y.arguments||Y.arguments.length===0))return{type:"date-render",location:Lt,code:Y.getText(Ee),inUseEffect:Ve,hasSuppressWarning:nt,callSpan:kd(Ee,Y,Pe)};if(Ha.default.isCallExpression(Y)){let qt=Y.expression;if(Ha.default.isPropertyAccessExpression(qt)){if(Ha.default.isIdentifier(qt.expression)&&qt.expression.text==="Date"&&["now","parse"].includes(qt.name.text))return{type:"date-render",location:Lt,code:Y.getText(Ee),inUseEffect:Ve,hasSuppressWarning:nt,callSpan:kd(Ee,Y,Pe)};if(Ha.default.isIdentifier(qt.expression)&&qt.expression.text==="Math"&&qt.name.text==="random")return{type:"random-value",location:Lt,code:Y.getText(Ee),inUseEffect:Ve,hasSuppressWarning:nt};if(["toLocaleString","toLocaleDateString","toLocaleTimeString"].includes(qt.name.text)&&!$Fe(Y))return{type:"locale-format",location:Lt,code:Y.getText(Ee),inUseEffect:Ve,hasSuppressWarning:nt,callSpan:kd(Ee,Y,Pe),argCount:Y.arguments?.length??0}}if(Ha.default.isIdentifier(qt)&&["uuid","nanoid","uuidv4","generateId"].includes(qt.text))return{type:"random-value",location:Lt,code:Y.getText(Ee),inUseEffect:Ve,hasSuppressWarning:nt,callSpan:kd(Ee,Y,Pe)}}if(Ha.default.isNewExpression(Y)){let qt=Y.expression;if(Ha.default.isPropertyAccessExpression(qt)&&Ha.default.isIdentifier(qt.expression)&&qt.expression.text==="Intl"&&qt.name.text==="DateTimeFormat"&&!$Fe(Y))return{type:"locale-format",location:Lt,code:Y.getText(Ee),inUseEffect:Ve,hasSuppressWarning:nt,callSpan:kd(Ee,Y,Pe),argCount:Y.arguments?.length??0}}if(Ha.default.isIdentifier(Y)&&["window","localStorage","sessionStorage","document","navigator","location"].includes(Y.text)){let jt=Y.parent;if(jt&&!Ha.default.isTypeReferenceNode(jt)&&!Ha.default.isVariableDeclaration(jt)&&!Ha.default.isParameter(jt)&&Ha.default.isPropertyAccessExpression(jt)&&jt.expression===Y)return{type:"browser-api",location:Lt,code:jt.getText(Ee),inUseEffect:Ve,hasSuppressWarning:nt,callSpan:kd(Ee,jt,Pe)}}}function Fmt(Y){if(UFe.has(Y))return!0;for(let Ee of UFe)if(Y.startsWith(Ee+"/"))return!0;for(let Ee of mmt)if(Ee.test(Y))return!0;return!1}function $Fe(Y){let Ee=Y.arguments;if(!Ee||Ee.length<2)return!1;let Pe=Ee[1];if(Ha.default.isObjectLiteralExpression(Pe)){for(let Ve of Pe.properties)if(Ha.default.isPropertyAssignment(Ve)&&Ha.default.isIdentifier(Ve.name)&&Ve.name.text==="timeZone")return!0}return!1}var ZFe=R_(YFe());function VC(Y,Ee,Pe=3){if(Ee.length===0)return;let Ve,nt=1/0;for(let yt of Ee){let Lt=(0,ZFe.distance)(Y,yt);Lt<nt&&Lt<=Pe&&(nt=Lt,Ve=yt)}return Ve}function oj(Y){if(Y)return`Did you mean: ${Y}?`}function KFe(Y,Ee){let Pe=[],Ve=zX(Ee);for(let nt of Y)for(let yt of nt.links){let Lt=Rmt(yt,Ee,Ve);Lt&&Pe.push(Lt)}return Pe}function Rmt(Y,Ee,Pe){if(Y.isDynamic){let Ve=Y.pattern||Y.href;if(!ohe(Ve,Ee)){let yt=VC(Ve,Pe);return{category:"links",severity:"error",message:"No matching route for dynamic link pattern",location:Y.location,code:`${Y.type==="link"?"href":Y.type}="${Y.href}"`,suggestion:oj(yt)}}}else if(!aj(Y.href,Ee)){let nt=VC(Y.href,Pe),yt={category:"links",severity:"error",message:"No matching route",location:Y.location,code:`${Y.type==="link"?"href":Y.type}="${Y.href}"`,suggestion:oj(nt)};return nt&&Y.attributeSpan&&(yt.fix={description:`Replaced "${Y.href}" with "${nt}"`,edits:[{file:Y.attributeSpan.file,start:Y.attributeSpan.start,end:Y.attributeSpan.end,newText:`"${nt}"`}]}),yt}}var aOe=R_(require("path"));var eOe=R_(require("fs")),Wu=R_(zC());function lhe(Y){let Ee=eOe.readFileSync(Y,"utf-8"),Pe=Bh(Y,Ee),Ve=!1,nt=!1,yt,Lt,qt;ql(Pe,Xn=>{if(Wu.default.isFunctionDeclaration(Xn)&&Xn.name&&P6(Xn)){let Ti=Xn.name.text,{line:Oe,character:to}=Pe.getLineAndCharacterOfPosition(Xn.getStart());Ti==="loader"&&(Ve=!0,yt={line:Oe+1,column:to+1}),Ti==="action"&&(nt=!0,Lt={line:Oe+1,column:to+1},qt=Xn)}if(Wu.default.isVariableStatement(Xn)&&P6(Xn)){for(let Ti of Xn.declarationList.declarations)if(Wu.default.isIdentifier(Ti.name)){let Oe=Ti.name.text,{line:to,character:fn}=Pe.getLineAndCharacterOfPosition(Ti.getStart());Oe==="loader"&&(Ve=!0,yt={line:to+1,column:fn+1}),Oe==="action"&&(nt=!0,Lt={line:to+1,column:fn+1},qt=Ti.initializer)}}});let jt,fr;if(qt){let Xn=jmt(qt);jt=Xn.allFields,fr=Xn.intentGroups.size>0?Xn.intentGroups:void 0}return{hasLoader:Ve,hasAction:nt,loaderLocation:yt,actionLocation:Lt,actionFields:jt,intentFieldGroups:fr}}function jmt(Y){let Ee=new Set,Pe=new Map,Ve=new Set,nt=new Set,yt=new Set;ql(Y,qt=>{if(Wu.default.isVariableDeclaration(qt)&&Wu.default.isIdentifier(qt.name)){let jt=qt.initializer;jt&&rOe(jt)&&Ve.add(qt.name.text),jt&&Bmt(jt,Ve)&&nt.add(qt.name.text)}}),ql(Y,qt=>{if(Wu.default.isIfStatement(qt)){let jt=tOe(qt.expression,nt);jt&&yt.add(jt)}}),ql(Y,qt=>{if(Wu.default.isCallExpression(qt)){let jt=qt.expression;if(Wu.default.isPropertyAccessExpression(jt)){let fr=jt.name.text;if(["get","getAll","has"].includes(fr)&&Wu.default.isIdentifier(jt.expression)&&Ve.has(jt.expression.text)){let Xn=iOe(qt);if(Xn){Ee.add(Xn);let Ti=Jmt(qt,nt);Ti&&(Pe.has(Ti)||Pe.set(Ti,new Set),Pe.get(Ti).add(Xn))}}}}});let Lt={allFields:Array.from(Ee),intentGroups:new Map};for(let qt of yt){let jt=Pe.get(qt);Lt.intentGroups.set(qt,jt?Array.from(jt):[])}return Lt}function Bmt(Y,Ee){if(Y=nOe(Y),Wu.default.isCallExpression(Y)){let Pe=Y.expression;if(Wu.default.isPropertyAccessExpression(Pe)&&Pe.name.text==="get"&&Wu.default.isIdentifier(Pe.expression)&&Ee.has(Pe.expression.text))return iOe(Y)==="intent"}return!1}function Jmt(Y,Ee){let Pe=Y.parent;for(;Pe;){if(Wu.default.isIfStatement(Pe)){let Ve=tOe(Pe.expression,Ee);if(Ve)return Ve}Pe=Pe.parent}}function tOe(Y,Ee){if(Wu.default.isBinaryExpression(Y)&&(Y.operatorToken.kind===Wu.default.SyntaxKind.EqualsEqualsEqualsToken||Y.operatorToken.kind===Wu.default.SyntaxKind.EqualsEqualsToken)){let{left:Pe,right:Ve}=Y;if(Wu.default.isIdentifier(Pe)&&Ee.has(Pe.text)&&Wu.default.isStringLiteral(Ve))return Ve.text;if(Wu.default.isIdentifier(Ve)&&Ee.has(Ve.text)&&Wu.default.isStringLiteral(Pe))return Pe.text}}function nOe(Y){for(;Wu.default.isAsExpression(Y)||Wu.default.isNonNullExpression(Y)||Wu.default.isParenthesizedExpression(Y)||Wu.default.isTypeAssertionExpression(Y)||Wu.default.isSatisfiesExpression(Y);)Y=Y.expression;return Y}function rOe(Y){if(Y=nOe(Y),Wu.default.isAwaitExpression(Y))return rOe(Y.expression);if(Wu.default.isCallExpression(Y)){let Ee=Y.expression;if(Wu.default.isPropertyAccessExpression(Ee))return Ee.name.text==="formData"}return!1}function iOe(Y){if(Y.arguments.length===0)return;let Ee=Y.arguments[0];if(Wu.default.isStringLiteral(Ee)||Wu.default.isNoSubstitutionTemplateLiteral(Ee))return Ee.text}function oOe(Y,Ee,Pe){let Ve=[],nt=zX(Ee);for(let yt of Y)for(let Lt of yt.forms){let qt=zmt(Lt,yt,Ee,Pe,nt);Ve.push(...qt)}return Ve}function zmt(Y,Ee,Pe,Ve,nt){let yt=[];if(Y.action){let Lt=aj(Y.action,Pe);if(Lt){let qt=aOe.join(Ve,"app",Lt.file);try{let jt=lhe(qt);if(!jt.hasAction)yt.push({category:"forms",severity:"error",message:"Form action targets route without action export",location:Y.location,code:`<Form action="${Y.action}">`,suggestion:`Add an action export to ${Lt.file}`});else{let fr=sOe(Y,jt,Lt.file);yt.push(...fr)}}catch{}}else{let qt=VC(Y.action,nt),jt={category:"forms",severity:"error",message:`Form action targets non-existent route: ${Y.action}`,location:Y.location,code:`<Form action="${Y.action}">`,suggestion:oj(qt)};qt&&Y.actionSpan&&(jt.fix={description:`Replaced "${Y.action}" with "${qt}"`,edits:[{file:Y.actionSpan.file,start:Y.actionSpan.start,end:Y.actionSpan.end,newText:`"${qt}"`}]}),yt.push(jt)}}else if(!Ee.hasAction&&!Y.inNamedExport)yt.push({category:"forms",severity:"error",message:"Form in route with no action export",location:Y.location,code:"<Form>",suggestion:"Add an action export to handle form submission"});else if(Ee.hasAction){let Lt=Ee.file;try{let qt=lhe(Lt);if(qt.actionFields){let jt=sOe(Y,qt);yt.push(...jt)}}catch{}}return yt}function sOe(Y,Ee,Pe){let Ve=[],nt=new Set(Y.inputNames),yt;if(Y.intentValue&&Ee.intentFieldGroups?.has(Y.intentValue))yt=Ee.intentFieldGroups.get(Y.intentValue);else{if(Y.intentValue&&Ee.intentFieldGroups&&Ee.intentFieldGroups.size>0)return Ve;yt=Ee.actionFields??[]}let Lt=new Set(yt);if(Lt.size===0)return Ve;for(let qt of Lt)if(!nt.has(qt)){let jt=Y.action?`<Form action="${Y.action}">`:"<Form>";Ve.push({category:"forms",severity:"error",message:`Action reads field '${qt}' but form has no input with name="${qt}"`,location:Y.location,code:jt,suggestion:Pe?`Add <input name="${qt}" /> to the form, or check the action in ${Pe}`:`Add <input name="${qt}" /> to the form`})}return Ve}function cOe(Y){let Ee=[];for(let Pe of Y){let Ve=Wmt(Pe);Ee.push(...Ve)}return Ee}function Wmt(Y){let Ee=[];if(Y.hasClientLoader&&Y.serverImports.length>0){let Pe=Y.serverImports.join(", "),Ve={category:"loader",severity:"error",message:`clientLoader imports server-only module '${Y.serverImports[0]}' -- clientLoader runs in the browser and cannot access server resources`,location:Y.clientLoaderSpan?{file:Y.clientLoaderSpan.file,line:Y.clientLoaderSpan.line,column:Y.clientLoaderSpan.column}:{file:Y.file,line:1,column:1},code:`clientLoader (imports: ${Pe})`,suggestion:"Rename clientLoader to loader"};Y.clientLoaderSpan&&(Ve.fix={description:"Rename clientLoader to loader",edits:[{file:Y.clientLoaderSpan.file,start:Y.clientLoaderSpan.start,end:Y.clientLoaderSpan.end,newText:"loader"}]}),Ee.push(Ve)}if(Y.hasClientAction&&Y.serverImports.length>0){let Pe=Y.serverImports.join(", "),Ve={category:"loader",severity:"error",message:`clientAction imports server-only module '${Y.serverImports[0]}' -- clientAction runs in the browser and cannot access server resources`,location:Y.clientActionSpan?{file:Y.clientActionSpan.file,line:Y.clientActionSpan.line,column:Y.clientActionSpan.column}:{file:Y.file,line:1,column:1},code:`clientAction (imports: ${Pe})`,suggestion:"Rename clientAction to action"};Y.clientActionSpan&&(Ve.fix={description:"Rename clientAction to action",edits:[{file:Y.clientActionSpan.file,start:Y.clientActionSpan.start,end:Y.clientActionSpan.end,newText:"action"}]}),Ee.push(Ve)}for(let Pe of Y.dataHooks)Pe.hook==="useLoaderData"&&!Y.hasLoader&&!Y.hasClientLoader&&Ee.push({category:"loader",severity:"error",message:"useLoaderData() called but route has no loader",location:Pe.location,code:"useLoaderData()",suggestion:"Add a loader function or remove the hook"}),Pe.hook==="useActionData"&&!Y.hasAction&&!Y.hasClientAction&&Ee.push({category:"loader",severity:"warning",message:"useActionData() called but route has no action",location:Pe.location,code:"useActionData()",suggestion:"Add an action function or remove the hook"});return Ee}var lOe=R_(require("path"));function uOe(Y,Ee,Pe){let Ve=[],nt=new Map;function yt(Lt){for(let qt of Lt){let jt=lOe.join(Pe,"app",qt.file);nt.set(jt,qt),qt.children&&yt(qt.children)}}yt(Ee);for(let Lt of Y){let qt=nt.get(Lt.file);if(!qt)continue;let jt=Vmt(Lt,qt);Ve.push(...jt)}return Ve}function Vmt(Y,Ee){let Pe=[],Ve=new Set(Ee.params);for(let nt of Y.dataHooks)if(nt.hook==="useParams"&&nt.accessedParams){for(let yt of nt.accessedParams)if(!Ve.has(yt)){let Lt={category:"params",severity:"error",message:`useParams() accesses "${yt}" but route has no :${yt} parameter`,location:nt.location,code:`useParams().${yt}`,suggestion:Ee.params.length>0?`Available params: ${Ee.params.map(jt=>":"+jt).join(", ")}`:`Route ${Ee.path} has no parameters`},qt=nt.paramSpans?.get(yt);if(qt&&Ee.params.length>0){let jt;Ee.params.length===1?jt=Ee.params[0]:jt=VC(yt,Ee.params),jt&&(Lt.fix={description:`Renamed "${yt}" to "${jt}"`,edits:[{file:qt.file,start:qt.start,end:qt.end,newText:jt}]})}Pe.push(Lt)}}return Pe}function cj(Y){switch(Y){case"locale-format":return 3;case"random-value":return 2;case"browser-api":return 1;case"date-render":case"loader-date":return 0}}function _Oe(Y){let Ee=[];for(let Pe of Y){let Ve=Umt(Pe.hydrationRisks);for(let nt of Ve){if(nt.inUseEffect||nt.hasSuppressWarning)continue;let yt=Hmt(nt);yt&&Ee.push(yt)}}return Ee}function Umt(Y){if(Y.length<=1)return Y;let Ee=new Map;for(let Ve of Y){let nt=Ve.location.file;Ee.has(nt)||Ee.set(nt,[]),Ee.get(nt).push(Ve)}let Pe=[];for(let Ve of Ee.values()){let nt=[...Ve].sort((Lt,qt)=>{let jt=cj(qt.type)-cj(Lt.type);if(jt!==0)return jt;let fr=Lt.callSpan?Lt.callSpan.end-Lt.callSpan.start:0;return(qt.callSpan?qt.callSpan.end-qt.callSpan.start:0)-fr}),yt=new Set;for(let Lt=0;Lt<nt.length;Lt++){let qt=nt[Lt];if(!yt.has(qt)&&qt.callSpan)for(let jt=Lt+1;jt<nt.length;jt++){let fr=nt[jt];if(!yt.has(fr)&&qmt(qt,fr)){let Xn=cj(qt.type),Ti=cj(fr.type);Xn>=Ti&&yt.add(fr)}}}for(let Lt of Ve)yt.has(Lt)||Pe.push(Lt)}return Pe}function qmt(Y,Ee){if(!Y.callSpan)return!1;if(Ee.callSpan)return Ee.callSpan.start>=Y.callSpan.start&&Ee.callSpan.end<=Y.callSpan.end;if(Y.location.file!==Ee.location.file)return!1;let Pe=Y.code.split(`
|
|
435
|
-
`).length,Ve=Y.location.line+Pe-1;return Ee.location.line>=Y.location.line&&Ee.location.line<=Ve}function Hmt(Y){switch(Y.type){case"date-render":{let Ee;return Y.code.includes("Date.now()")?Ee="Date.now() returns the current timestamp, which differs between server render and client hydration":Ee="new Date() without arguments returns the current time, which differs between server render and client hydration",{category:"hydration",severity:"warning",message:Ee,location:Y.location,code:Y.code,suggestion:"Pass the current date from the loader to ensure server and client use the same value"}}case"locale-format":{let Ee=Y.code.includes("toLocaleDateString")||Y.code.includes("toLocaleTimeString")||Y.code.includes("Intl.DateTimeFormat"),Pe,Ve;Ee?(Pe="Date formatting without explicit timeZone produces different results on server and client",Ve=(Y.argCount??0)>=2?'Add timeZone to the existing options object, e.g. timeZone: "UTC"':'Add a timeZone option, e.g. toLocaleDateString(undefined, { timeZone: "UTC" })'):(Pe="Locale-dependent formatting may produce different results on server and client",Ve='Pass a fixed locale, e.g. .toLocaleString("en-US"), to ensure consistent output');let nt={category:"hydration",severity:"warning",message:Pe,location:Y.location,code:Y.code,suggestion:Ve};if(Ee&&Y.callSpan&&Y.argCount!==void 0){let yt=$mt(Y);yt&&(nt.fix=yt)}return nt}case"random-value":{let Ee={category:"hydration",severity:"warning",message:"Random value in render will differ between server and client",location:Y.location,code:Y.code,suggestion:"Use React.useId() for IDs, or generate in useEffect and store in state"};return Y.callSpan&&Gmt(Y.code)&&(Ee.fix={description:"Replaced with useId()",edits:[{file:Y.callSpan.file,start:Y.callSpan.start,end:Y.callSpan.end,newText:"useId()"}]}),Ee}case"browser-api":return{category:"hydration",severity:"warning",message:"Browser-only API accessed during render is not available on the server",location:Y.location,code:Y.code,suggestion:'Move to useEffect, or guard with typeof window !== "undefined"'};case"loader-date":return{category:"hydration",severity:"warning",message:"Date from loader may cause hydration mismatch when formatted",location:Y.location,code:Y.code,suggestion:"Format with explicit timeZone, use suppressHydrationWarning, or format in useEffect"};default:return}}function $mt(Y){if(!Y.callSpan)return;let Ee=Y.argCount??0,Pe=Y.code.match(/\.toLocale(String|DateString|TimeString)\(\)/);if(Ee===0&&Pe){let Ve=`toLocale${Pe[1]}`,nt=Y.code.replace(`.${Ve}()`,`.${Ve}(undefined, { timeZone: "UTC" })`);return{description:'Added { timeZone: "UTC" } option',edits:[{file:Y.callSpan.file,start:Y.callSpan.start,end:Y.callSpan.end,newText:nt}]}}if(Ee===0&&Y.code.includes("Intl.DateTimeFormat")){let Ve=Y.code.replace("Intl.DateTimeFormat()",'Intl.DateTimeFormat(undefined, { timeZone: "UTC" })');if(Ve!==Y.code)return{description:'Added { timeZone: "UTC" } option',edits:[{file:Y.callSpan.file,start:Y.callSpan.start,end:Y.callSpan.end,newText:Ve}]}}}function Gmt(Y){return/^(uuid|nanoid|uuidv4|generateId)\(\)$/.test(Y.trim())}var fOe=R_(require("fs")),Do=R_(zC());function pOe(Y){let Ee=fOe.readFileSync(Y,"utf-8"),Pe=Bh(Y,Ee),Ve=[],nt=new Map,yt=new Set,Lt=new Set,qt=new Map;return ql(Pe,fr=>{if(Do.default.isImportDeclaration(fr)&&fr.importClause?.namedBindings&&Do.default.isNamedImports(fr.importClause.namedBindings))for(let Xn of fr.importClause.namedBindings.elements)Xn.propertyName&&qt.set(Xn.name.text,Xn.propertyName.text)}),ql(Pe,fr=>{if(Do.default.isVariableDeclaration(fr)&&Do.default.isIdentifier(fr.name)){let Xn=fr.name.text,Ti=fr.initializer;if(Ti&&dOe(Ti)&&yt.add(Xn),Ti){let Oe=VX(Ti,yt,Lt);Oe&&nt.set(Xn,Oe),uhe(Ti)&&Lt.add(Xn)}}if(Do.default.isVariableDeclaration(fr)&&Do.default.isObjectBindingPattern(fr.name)&&fr.initializer&&uhe(fr.initializer))for(let Xn of fr.name.elements)Do.default.isBindingElement(Xn)&&Do.default.isIdentifier(Xn.name)&&Lt.add(Xn.name.text)}),ql(Pe,fr=>{if(Do.default.isCallExpression(fr)){let Xn=Ymt(fr,Pe,Y,nt,yt,Lt,qt);Xn&&Ve.push(Xn)}}),{operations:Ve.filter((fr,Xn,Ti)=>Ti.findIndex(Oe=>Oe.location.line===fr.location.line&&Oe.location.column===fr.location.column)===Xn)}}function dOe(Y){if(Do.default.isAwaitExpression(Y))return dOe(Y.expression);if(Do.default.isCallExpression(Y)){let Ee=Y.expression;if(Do.default.isPropertyAccessExpression(Ee))return Ee.name.text==="formData"}return!1}function uhe(Y){if(Do.default.isAwaitExpression(Y))return uhe(Y.expression);if(!Do.default.isCallExpression(Y))return!1;let Ee=Y.expression;if(Do.default.isPropertyAccessExpression(Ee)){let Pe=Ee.name.text;return["parse","safeParse","parseAsync","safeParseAsync"].includes(Pe)}return!1}function VX(Y,Ee,Pe){if(Do.default.isCallExpression(Y)){let Ve=Y.expression;if(Do.default.isPropertyAccessExpression(Ve)){let nt=Ve.name.text;if((nt==="get"||nt==="getAll")&&Do.default.isIdentifier(Ve.expression)&&Ee.has(Ve.expression.text))return{source:"formData",type:"string",fieldName:Qmt(Y),isValidated:!1};if(Do.default.isIdentifier(Ve.expression)&&Ve.expression.text==="params")return{source:"params",type:"string",fieldName:nt,isValidated:!1}}}if(Do.default.isPropertyAccessExpression(Y)&&Do.default.isIdentifier(Y.expression)&&Y.expression.text==="params")return{source:"params",type:"string",fieldName:Y.name.text,isValidated:!1};if(Do.default.isStringLiteral(Y))return{source:"literal",type:"string",literalValue:Y.text};if(Do.default.isNumericLiteral(Y))return{source:"literal",type:"number",literalValue:Number(Y.text)};if(Y.kind===Do.default.SyntaxKind.TrueKeyword)return{source:"literal",type:"boolean",literalValue:!0};if(Y.kind===Do.default.SyntaxKind.FalseKeyword)return{source:"literal",type:"boolean",literalValue:!1};if(Y.kind===Do.default.SyntaxKind.NullKeyword)return{source:"literal",type:"null"};if(Do.default.isCallExpression(Y)){let Ve=Do.default.isIdentifier(Y.expression)?Y.expression.text:void 0;if(Ve==="Number"||Ve==="parseInt"||Ve==="parseFloat"){let nt=Y.arguments[0]?VX(Y.arguments[0],Ee,Pe):void 0;if(nt)return{...nt,type:"number"}}if(Ve==="Boolean"){let nt=Y.arguments[0]?VX(Y.arguments[0],Ee,Pe):void 0;if(nt)return{...nt,type:"boolean"}}}}function Qmt(Y){if(Y.arguments.length===0)return;let Ee=Y.arguments[0];if(Do.default.isStringLiteral(Ee)||Do.default.isNoSubstitutionTemplateLiteral(Ee))return Ee.text}function Xmt(Y,Ee,Pe){if(Do.default.isIdentifier(Y)){let Ve=Y.text;if(Pe.has(Ve))return{source:"variable",type:"unknown",isValidated:!0};let nt=Ee.get(Ve);return nt||{source:"variable",type:"unknown"}}if(Do.default.isPropertyAccessExpression(Y)&&Do.default.isIdentifier(Y.expression)){let Ve=Y.expression.text;if(Pe.has(Ve))return{source:"variable",type:"unknown",isValidated:!0}}}function Ymt(Y,Ee,Pe,Ve,nt,yt,Lt){let qt=Zmt(Y);if(!qt)return;let{type:jt,valuesCall:fr,hasWhere:Xn}=qt,Ti=Lt.get(qt.tableName)||qt.tableName,Oe=ug(Ee,Y.getStart(Ee)),to={type:jt,tableName:Ti,columnValues:[],hasWhere:Xn,location:{file:Pe,line:Oe.line,column:Oe.column},span:kd(Ee,Y,Pe)};if(fr){let fn=Kmt(fr,Ee,Pe,Ve,nt,yt);to.columnValues=fn}return to}function Zmt(Y){let Ee=Y,Pe,Ve,nt,yt=!1;for(;Ee;)if(Do.default.isCallExpression(Ee)){let Lt=Ee.expression;if(Do.default.isPropertyAccessExpression(Lt)){let qt=Lt.name.text;if((qt==="values"||qt==="set")&&(Pe=Ee),qt==="where"&&(yt=!0),Do.default.isCallExpression(Lt.expression)&&Do.default.isPropertyAccessExpression(Lt.expression.expression)){let fr=Lt.expression.expression.name.text;if(fr==="insert"||fr==="update"||fr==="delete"){Ve=fr;let Xn=Lt.expression.arguments[0];Xn&&Do.default.isIdentifier(Xn)&&(nt=Xn.text);break}}if(qt==="insert"||qt==="update"||qt==="delete"){Ve=qt;let jt=Ee.arguments[0];if(jt&&Do.default.isIdentifier(jt)&&(nt=jt.text),!Pe&&qt==="insert"){let fr=Ee.parent;fr&&Do.default.isPropertyAccessExpression(fr)&&fr.name.text==="values"&&fr.parent&&Do.default.isCallExpression(fr.parent)&&(Pe=fr.parent)}break}Ee=Lt.expression}else break}else if(Do.default.isPropertyAccessExpression(Ee))Ee=Ee.expression;else break;if(Do.default.isCallExpression(Y)){let Lt=Y.expression;if(Do.default.isPropertyAccessExpression(Lt)){let qt=Lt.name.text;if(qt==="where"&&(yt=!0),qt==="values"||qt==="set"){Pe=Y;let jt=Lt.expression;for(;jt&&Do.default.isCallExpression(jt);){let fr=jt.expression;if(Do.default.isPropertyAccessExpression(fr)){let Xn=fr.name.text;if(Xn==="insert"||Xn==="update"||Xn==="delete"){Ve=Xn;let Ti=jt.arguments[0];Ti&&Do.default.isIdentifier(Ti)&&(nt=Ti.text);break}jt=fr.expression}else break}}}}if(!(!Ve||!nt))return{type:Ve,tableName:nt,valuesCall:Pe,hasWhere:yt}}function Kmt(Y,Ee,Pe,Ve,nt,yt){let Lt=[];if(Y.arguments.length===0)return Lt;let qt=Y.arguments[0];if(Do.default.isObjectLiteralExpression(qt)){for(let jt of qt.properties)if(Do.default.isPropertyAssignment(jt)){let fr=Do.default.isIdentifier(jt.name)||Do.default.isStringLiteral(jt.name)?jt.name.text:void 0;if(fr){let Xn=VX(jt.initializer,nt,yt)||Xmt(jt.initializer,Ve,yt);Lt.push({columnName:fr,dataSource:Xn||{source:"unknown",type:"unknown"},span:kd(Ee,jt.initializer,Pe)})}}else if(Do.default.isShorthandPropertyAssignment(jt)){let fr=jt.name.text,Xn=Ve.get(fr);Lt.push({columnName:fr,dataSource:Xn||{source:"variable",type:"unknown"},span:kd(Ee,jt.name,Pe)})}}return Lt}var A6=R_(require("fs")),yN=R_(require("path")),du=R_(zC());var egt=["src/db/schema.ts","db/schema.ts","lib/db/schema.ts","src/schema.ts","app/db/schema.ts","server/db/schema.ts"];function UX(Y){for(let Pe of egt){let Ve=yN.join(Y,Pe);if(A6.existsSync(Ve))return Ve}let Ee=[yN.join(Y,"drizzle.config.ts"),yN.join(Y,"drizzle.config.js")];for(let Pe of Ee)if(A6.existsSync(Pe)){let Ve=tgt(Pe,Y);if(Ve&&A6.existsSync(Ve))return Ve}}function tgt(Y,Ee){let Pe=A6.readFileSync(Y,"utf-8"),Ve=Bh(Y,Pe),nt;return ql(Ve,yt=>{if(du.default.isPropertyAssignment(yt)&&(du.default.isIdentifier(yt.name)?yt.name.text:void 0)==="schema"){if(du.default.isStringLiteral(yt.initializer))nt=yN.resolve(Ee,yt.initializer.text);else if(du.default.isArrayLiteralExpression(yt.initializer)){let qt=yt.initializer.elements[0];qt&&du.default.isStringLiteral(qt)&&(nt=yN.resolve(Ee,qt.text))}}}),nt}function qX(Y){if(!A6.existsSync(Y))throw new Error(`Drizzle schema file not found: ${Y}`);let Ee=A6.readFileSync(Y,"utf-8"),Pe=Bh(Y,Ee),Ve=[],nt=[];ql(Pe,Lt=>{if(du.default.isVariableStatement(Lt)){for(let qt of Lt.declarationList.declarations)if(du.default.isIdentifier(qt.name)&&qt.initializer){let jt=ngt(qt.name.text,qt.initializer);jt&&nt.push(jt)}}});let yt=new Map;for(let Lt of nt)yt.set(Lt.name,Lt);return ql(Pe,Lt=>{if(du.default.isVariableStatement(Lt)){for(let qt of Lt.declarationList.declarations)if(du.default.isIdentifier(qt.name)&&qt.initializer){let jt=rgt(qt.name.text,qt.initializer,yt);jt&&Ve.push(jt)}}}),{tables:Ve,enums:nt,schemaPath:Y}}function ngt(Y,Ee){if(!du.default.isCallExpression(Ee)||(du.default.isIdentifier(Ee.expression)?Ee.expression.text:void 0)!=="pgEnum")return;let Ve=Ee.arguments;if(Ve.length<2)return;let nt=Ve[0];if(!du.default.isStringLiteral(nt))return;let yt=nt.text,Lt=Ve[1];if(!du.default.isArrayLiteralExpression(Lt))return;let qt=[];for(let jt of Lt.elements)du.default.isStringLiteral(jt)&&qt.push(jt.text);return{name:Y,sqlName:yt,values:qt}}function rgt(Y,Ee,Pe){if(!du.default.isCallExpression(Ee)||(du.default.isIdentifier(Ee.expression)?Ee.expression.text:void 0)!=="pgTable")return;let nt=Ee.arguments;if(nt.length<2)return;let yt=nt[0];if(!du.default.isStringLiteral(yt))return;let Lt=yt.text,qt=nt[1];if(!du.default.isObjectLiteralExpression(qt))return;let jt=[];for(let fr of qt.properties)if(du.default.isPropertyAssignment(fr)&&du.default.isIdentifier(fr.name)){let Xn=igt(fr.name.text,fr.initializer,Pe);Xn&&jt.push(Xn)}return{name:Y,sqlName:Lt,columns:jt}}function igt(Y,Ee,Pe){let Ve=sgt(Ee),nt=agt(Ee);if(!nt)return;let{type:yt,sqlName:Lt,enumName:qt}=ogt(nt,Pe),jt=Ve.has("notNull"),fr=Ve.has("default")||Ve.has("defaultNow"),Xn=yt==="serial"||Ve.has("$defaultFn");return{name:Y,sqlName:Lt||Y,type:yt,enumName:qt,notNull:jt,hasDefault:fr,isAutoGenerated:Xn,isRequired:jt&&!fr&&!Xn}}function sgt(Y){let Ee=new Set,Pe=Y;for(;du.default.isCallExpression(Pe);){let Ve=Pe.expression;if(du.default.isPropertyAccessExpression(Ve))Ee.add(Ve.name.text),Pe=Ve.expression;else break}return Ee}function agt(Y){let Ee=Y;for(;du.default.isCallExpression(Ee);){let Pe=Ee.expression;if(du.default.isPropertyAccessExpression(Pe))Ee=Pe.expression;else{if(du.default.isIdentifier(Pe))return Ee;if(du.default.isCallExpression(Pe))return Ee;break}}if(du.default.isCallExpression(Y))return Y}function ogt(Y,Ee){let Pe,Ve,nt;if(du.default.isIdentifier(Y.expression))Pe=Y.expression.text;else if(du.default.isCallExpression(Y.expression)&&du.default.isIdentifier(Y.expression.expression)){let Lt=Y.expression.expression.text;Ee.has(Lt)&&(Pe="enum",nt=Lt)}if(du.default.isIdentifier(Y.expression)&&Ee.has(Y.expression.text)&&(Pe="enum",nt=Y.expression.text),Y.arguments.length>0){let Lt=Y.arguments[0];du.default.isStringLiteral(Lt)&&(Ve=Lt.text)}return{type:cgt(Pe),sqlName:Ve,enumName:nt}}function cgt(Y){return Y&&{text:"text",varchar:"varchar",integer:"integer",serial:"serial",bigint:"bigint",boolean:"boolean",timestamp:"timestamp",date:"date",json:"json",jsonb:"jsonb",uuid:"uuid",real:"real",doublePrecision:"doublePrecision",numeric:"numeric",enum:"enum"}[Y]||"unknown"}function UC(Y,Ee){return Y.tables.find(Pe=>Pe.name===Ee)}function _he(Y,Ee){return Y.enums.find(Pe=>Pe.name===Ee)}function mOe(Y){return Y.columns.filter(Ee=>Ee.isRequired)}function gOe(Y){return["integer","serial","bigint","real","doublePrecision","numeric"].includes(Y.type)}function hOe(Y){return Y.type==="enum"&&!!Y.enumName}function yOe(Y,Ee){let Pe=[];for(let Ve of Y)try{let{operations:nt}=pOe(Ve);for(let yt of nt){let Lt=lgt(yt,Ee);Pe.push(...Lt)}}catch{}return Pe}function lgt(Y,Ee){let Pe=[],Ve=UC(Ee,Y.tableName);if(!Ve)return Pe.push({category:"drizzle",severity:"error",message:`Table '${Y.tableName}' not found in Drizzle schema`,location:Y.location,code:`db.${Y.type}(${Y.tableName})`,suggestion:"Check the table name matches an export in the schema file"}),Pe;if(Y.type==="insert"){let nt=ugt(Y,Ve);Pe.push(...nt)}if(Y.type==="insert"){let nt=_gt(Y,Ve);Pe.push(...nt)}(Y.type==="delete"||Y.type==="update")&&(Y.hasWhere||Pe.push({category:"drizzle",severity:"warning",message:`db.${Y.type}(${Y.tableName}) has no .where() clause -- affects all rows`,location:Y.location,code:`db.${Y.type}(${Y.tableName})${Y.type==="update"?".set({...})":""}`,suggestion:"Add a .where() clause to target specific rows"}));for(let nt of Y.columnValues){let yt=Ve.columns.find(jt=>jt.name===nt.columnName);if(!yt){Pe.push({category:"drizzle",severity:"error",message:`Column '${nt.columnName}' not found on table '${Y.tableName}'`,location:Y.location,code:`${nt.columnName}: ...`,suggestion:`Check column name matches the schema definition for '${Y.tableName}'`});continue}let Lt=fgt(nt,yt,Y);if(Lt&&Pe.push(Lt),hOe(yt)){let jt=dgt(nt,yt,Y,Ee);jt&&Pe.push(jt);let fr=pgt(nt,yt,Y,Ee);fr&&Pe.push(fr)}let qt=mgt(nt,yt,Y);qt&&Pe.push(qt)}return Pe}function ugt(Y,Ee){let Pe=[],Ve=mOe(Ee),nt=new Set(Y.columnValues.map(yt=>yt.columnName));for(let yt of Ve)nt.has(yt.name)||Pe.push({category:"drizzle",severity:"error",message:`db.insert(${Y.tableName}) missing required column '${yt.name}'`,location:Y.location,code:`db.insert(${Y.tableName}).values({...})`,suggestion:`Add '${yt.name}' to the values object`});return Pe}function _gt(Y,Ee){let Pe=[];for(let Ve of Y.columnValues){let nt=Ee.columns.find(yt=>yt.name===Ve.columnName);nt&&nt.isAutoGenerated&&Pe.push({category:"drizzle",severity:"warning",message:`Column '${nt.name}' is auto-generated (${nt.type}) but is explicitly set in insert`,location:Y.location,code:`${Ve.columnName}: ...`,suggestion:`Remove '${nt.name}' from the values object to use auto-generation`})}return Pe}function fgt(Y,Ee,Pe){let Ve=Y.dataSource;if(Ve.source==="literal"&&Ve.type==="null"&&Ee.notNull)return{category:"drizzle",severity:"error",message:`Column '${Ee.name}' has notNull constraint but receives null`,location:Pe.location,code:`${Y.columnName}: null`,suggestion:`Provide a non-null value for '${Ee.name}'`}}function pgt(Y,Ee,Pe,Ve){let nt=Y.dataSource;if(nt.source!=="literal"||nt.type!=="string")return;let yt=Ee.enumName?_he(Ve,Ee.enumName):void 0;if(!yt)return;let Lt=String(nt.literalValue);if(!yt.values.includes(Lt)){let qt=yt.values.map(jt=>`'${jt}'`).join(", ");return{category:"drizzle",severity:"error",message:`Enum column '${Ee.name}' receives invalid value '${Lt}'`,location:Pe.location,code:`${Y.columnName}: '${Lt}'`,suggestion:`Allowed values are: ${qt}`}}}function dgt(Y,Ee,Pe,Ve){let nt=Y.dataSource;if(!nt.isValidated&&nt.source!=="literal"&&!(nt.source==="variable"||nt.source==="unknown")&&(nt.source==="formData"||nt.source==="params"||nt.source==="body")){let Lt=(Ee.enumName?_he(Ve,Ee.enumName):void 0)?.values.map(qt=>`'${qt}'`).join(", ")||"enum values";return{category:"drizzle",severity:"error",message:`Enum column '${Ee.name}' receives unvalidated external input`,location:Pe.location,code:`${Y.columnName}: ${nt.source}.get('${nt.fieldName||Y.columnName}')`,suggestion:`Validate with zod schema or check against allowed values: ${Lt}`}}}function mgt(Y,Ee,Pe){let Ve=Y.dataSource;if(Ve.isValidated||Ve.source==="literal")return;let nt=["formData","params","body"];if(gOe(Ee)&&Ve.type==="string"&&nt.includes(Ve.source))return{category:"drizzle",severity:"error",message:`Column '${Ee.name}' expects ${Ee.type} but receives string from ${Ve.source}.get()`,location:Pe.location,code:`${Y.columnName}: ${Ve.source}.get('${Ve.fieldName||Y.columnName}')`,suggestion:`Convert with parseInt(${Y.columnName}, 10) or Number(${Y.columnName})`};if(Ee.type==="boolean"&&Ve.type==="string"&&nt.includes(Ve.source))return{category:"drizzle",severity:"error",message:`Column '${Ee.name}' expects boolean but receives string from ${Ve.source}.get()`,location:Pe.location,code:`${Y.columnName}: ${Ve.source}.get('${Ve.fieldName||Y.columnName}')`,suggestion:`Convert with Boolean(${Y.columnName}) or ${Y.columnName} === 'true'`};if((Ee.type==="timestamp"||Ee.type==="date")&&Ve.type==="string"&&nt.includes(Ve.source))return{category:"drizzle",severity:"warning",message:`Column '${Ee.name}' expects ${Ee.type} but receives string from ${Ve.source}.get()`,location:Pe.location,code:`${Y.columnName}: ${Ve.source}.get('${Ve.fieldName||Y.columnName}')`,suggestion:`Convert with new Date(${Y.columnName})`};if((Ee.type==="json"||Ee.type==="jsonb")&&Ve.type==="string"&&nt.includes(Ve.source))return{category:"drizzle",severity:"warning",message:`Column '${Ee.name}' expects ${Ee.type} but receives string from ${Ve.source}.get()`,location:Pe.location,code:`${Y.columnName}: ${Ve.source}.get('${Ve.fieldName||Y.columnName}')`,suggestion:`Convert with JSON.parse(${Y.columnName})`}}var SOe=R_(require("fs")),Uc=R_(zC());var xOe=new Set(["Dialog","Modal","AlertDialog","ConfirmDialog","ConfirmationDialog","Sheet","Drawer","Popover"]),ggt=[/^save/i,/^submit/i,/^delete/i,/^remove/i,/^add/i,/^create/i,/^update/i,/^confirm/i,/^apply/i],hgt=[/^cancel/i,/^close/i,/^dismiss/i,/^no$/i],ygt=new Set(["input","select","textarea"]);function TOe(Y){let Ee=[];for(let Pe of Y)try{let Ve=SOe.readFileSync(Pe,"utf-8"),nt=Bh(Pe,Ve),yt=vgt(nt),Lt=wgt(nt),qt=Sgt(nt),jt=xgt(nt,Pe,yt,qt);for(let Xn of jt){let Ti=Pgt(Xn);Ee.push(...Ti)}let fr=Ngt(nt,Pe,yt,Lt,jt);for(let Xn of fr)Xn.handlerBehavior==="stub"&&Ee.push({category:"interactivity",severity:"warning",message:`"${Xn.text}" button has an empty or stub onClick handler`,location:Xn.location,code:Xn.code,suggestion:"Implement the handler to perform the intended action"})}catch{}return Ee}function vgt(Y){let Ee=new Set;return ql(Y,Pe=>{if(Uc.default.isVariableDeclaration(Pe)&&Uc.default.isArrayBindingPattern(Pe.name)&&Pe.initializer&&bgt(Pe.initializer)){let Ve=Pe.name.elements;if(Ve.length>=2){let nt=Ve[1];Uc.default.isBindingElement(nt)&&Uc.default.isIdentifier(nt.name)&&Ee.add(nt.name.text)}}}),Ee}function bgt(Y){if(Uc.default.isCallExpression(Y)){let Ee=Y.expression;if(Uc.default.isIdentifier(Ee)&&Ee.text==="useState")return!0}return!1}function Sgt(Y){let Ee=!1;return ql(Y,Pe=>{if(Uc.default.isCallExpression(Pe)){let Ve=Pe.expression;Uc.default.isIdentifier(Ve)&&Ve.text==="useFetcher"&&(Ee=!0)}}),Ee}function xgt(Y,Ee,Pe,Ve){let nt=[];return ql(Y,yt=>{if(Uc.default.isJsxElement(yt)||Uc.default.isJsxSelfClosingElement(yt)){let Lt=w6(yt);if(Lt&&xOe.has(Lt)){let qt=Tgt(yt,Lt,Y,Ee,Pe,Ve);nt.push(qt)}}}),nt}function Tgt(Y,Ee,Pe,Ve,nt,yt){let Lt=ug(Pe,Y.getStart()),qt={file:Ve,line:Lt.line,column:Lt.column},jt=!1,fr=!1,Xn=yt,Ti=[],Oe=[];return ql(Y,to=>{if(Uc.default.isJsxElement(to)||Uc.default.isJsxSelfClosingElement(to)){let fn=w6(to);if(!fn)return;if(fn==="Form"&&(fr=!0,Oe.push(to)),kgt(to,fn)&&Oe.length===0&&(jt=!0),fn==="button"||fn==="Button"){let cn=Cgt(to,Pe,Ve,nt);cn&&EOe(cn.text)&&Ti.push(cn)}}}),{type:Ee,location:qt,hasPlainInputs:jt,hasReactRouterForm:fr,hasFetcherSubmit:Xn,actionButtons:Ti}}function kgt(Y,Ee){return ygt.has(Ee)?!0:BX(Ee)?Hg(Y,"name")!==void 0:!1}function Cgt(Y,Ee,Pe,Ve){let nt=JX(Y);if(!nt)return;let yt=Hg(Y,"onClick"),Lt="unknown";yt?.initializer&&(Lt=Egt(yt.initializer,Ve));let qt=ug(Ee,Y.getStart());return{text:nt,location:{file:Pe,line:qt.line,column:qt.column},code:`<Button onClick={...}>${nt}</Button>`,handlerBehavior:Lt}}function Egt(Y,Ee){if(!Uc.default.isJsxExpression(Y)||!Y.expression)return"unknown";let Pe=Y.expression;return Uc.default.isArrowFunction(Pe)?kOe(Pe.body,Ee):"unknown"}function kOe(Y,Ee){if(Uc.default.isCallExpression(Y))return COe(Y,Ee);if(Uc.default.isBlock(Y)){let Pe=Y.statements;if(Pe.length===0)return"stub";let Ve=!0,nt=!0,yt=!1;for(let Lt of Pe)if(Uc.default.isExpressionStatement(Lt)){let qt=Dgt(Lt.expression,Ee);qt==="submits"&&(yt=!0),qt!=="closes-dialog"&&(Ve=!1),qt!=="stub"&&(nt=!1)}else Ve=!1,nt=!1;return yt?"submits":Ve?"closes-dialog":nt?"stub":"unknown"}return"unknown"}function COe(Y,Ee){let Pe=Y.expression;if(Uc.default.isIdentifier(Pe)&&Ee.has(Pe.text)){let Ve=Y.arguments[0];return Ve&&Ve.kind===Uc.default.SyntaxKind.FalseKeyword?"closes-dialog":"unknown"}return Uc.default.isPropertyAccessExpression(Pe)&&Uc.default.isIdentifier(Pe.expression)&&Pe.expression.text==="console"&&Pe.name.text==="log"?"stub":Uc.default.isIdentifier(Pe)&&Pe.text==="submit"||Uc.default.isPropertyAccessExpression(Pe)&&Pe.name.text==="submit"?"submits":"unknown"}function Dgt(Y,Ee){return Uc.default.isCallExpression(Y)?COe(Y,Ee):"unknown"}function EOe(Y){for(let Ee of hgt)if(Ee.test(Y))return!1;for(let Ee of ggt)if(Ee.test(Y))return!0;return!1}function Pgt(Y){let Ee=[];if(Y.hasReactRouterForm||Y.hasFetcherSubmit)return Ee;for(let Pe of Y.actionButtons)if(Pe.handlerBehavior==="closes-dialog"){let Ve=/^(delete|remove)/i.test(Pe.text);Y.hasPlainInputs?Ee.push({category:"interactivity",severity:"error",message:`"${Pe.text}" button in ${Y.type} only closes dialog without saving data`,location:Pe.location,code:Pe.code,suggestion:"Wrap inputs in a <Form> component or use useFetcher.submit() to persist data"}):Ve&&Ee.push({category:"interactivity",severity:"error",message:`"${Pe.text}" button in ${Y.type} only closes dialog without performing the action`,location:Pe.location,code:Pe.code,suggestion:'Use useFetcher.submit() with a delete intent or wrap in a <Form method="delete">'})}else Pe.handlerBehavior==="stub"&&Ee.push({category:"interactivity",severity:"warning",message:`"${Pe.text}" button has an empty or stub onClick handler`,location:Pe.location,code:Pe.code,suggestion:"Implement the handler or remove the button if not needed"});return Ee}function wgt(Y){let Ee=new Set;return ql(Y,Pe=>{if(Uc.default.isVariableDeclaration(Pe)&&Uc.default.isIdentifier(Pe.name)){let Ve=Pe.name.text;Pe.initializer&&Uc.default.isArrowFunction(Pe.initializer)&&vOe(Pe.initializer.body)&&Ee.add(Ve)}Uc.default.isFunctionDeclaration(Pe)&&Pe.name&&Pe.body&&vOe(Pe.body)&&Ee.add(Pe.name.text)}),Ee}function vOe(Y){if(Uc.default.isCallExpression(Y))return bOe(Y);if(Uc.default.isBlock(Y)){let Ee=Y.statements;return Ee.length===0?!0:Ee.every(Pe=>Uc.default.isExpressionStatement(Pe)&&Uc.default.isCallExpression(Pe.expression)?bOe(Pe.expression):!1)}return!1}function bOe(Y){let Ee=Y.expression;return Uc.default.isPropertyAccessExpression(Ee)&&Uc.default.isIdentifier(Ee.expression)&&Ee.expression.text==="console"?["log","warn","error","info","debug"].includes(Ee.name.text):!1}function Ngt(Y,Ee,Pe,Ve,nt){let yt=[],Lt=[];return ql(Y,qt=>{if(Uc.default.isJsxElement(qt)||Uc.default.isJsxSelfClosingElement(qt)){let jt=w6(qt);jt&&xOe.has(jt)&&Lt.push({start:qt.getStart(),end:qt.getEnd()})}}),ql(Y,qt=>{if(Uc.default.isJsxElement(qt)||Uc.default.isJsxSelfClosingElement(qt)){let jt=w6(qt);if(!jt||!(jt==="button"||jt==="Button"||jt.endsWith("Button")))return;let Xn=qt.getStart();if(Lt.some(cn=>Xn>=cn.start&&Xn<=cn.end))return;let Oe=JX(qt);if(!Oe||!EOe(Oe))return;let to=Hg(qt,"onClick");if(!to?.initializer)return;let fn=Agt(to.initializer,Pe,Ve);if(fn==="stub"){let cn=ug(Y,qt.getStart());yt.push({text:Oe,location:{file:Ee,line:cn.line,column:cn.column},code:`<${jt} onClick={...}>${Oe}</${jt}>`,handlerBehavior:fn})}}}),yt}function Agt(Y,Ee,Pe){if(!Uc.default.isJsxExpression(Y)||!Y.expression)return"unknown";let Ve=Y.expression;if(Uc.default.isArrowFunction(Ve)){let nt=kOe(Ve.body,Ee);return nt==="stub"?"stub":nt==="submits"?"submits":"unknown"}return Uc.default.isIdentifier(Ve)&&Pe.has(Ve.text)?"stub":"unknown"}var lj=["links","loader","params","interactivity","hydration"],Igt=["forms","drizzle"],uj=[...lj,...Igt];function DOe(Y){let{root:Ee,files:Pe,checks:Ve}=Y,nt=[];try{nt=WFe(Ee)}catch(fr){return{issues:[{category:"links",severity:"error",message:fr instanceof Error?fr.message:"Failed to parse routes file",location:{file:I6.join(Ee,"app","routes.ts"),line:1,column:1}}],routes:[],components:[]}}let yt=Fgt(Ee,Pe),Lt=[];for(let fr of yt)try{let Xn=QFe(fr);Lt.push(Xn)}catch(Xn){console.error(`Warning: Could not parse ${fr}:`,Xn)}let qt=[],jt=new Set(Ve.length>0?Ve:lj);if(jt.has("links")&&qt.push(...KFe(Lt,nt)),jt.has("forms")&&qt.push(...oOe(Lt,nt,Ee)),jt.has("loader")&&qt.push(...cOe(Lt)),jt.has("params")&&qt.push(...uOe(Lt,nt,Ee)),jt.has("hydration")&&qt.push(..._Oe(Lt)),jt.has("drizzle")){let fr=Y.drizzleSchemaPath||UX(Ee);if(fr)try{let Xn=qX(fr);qt.push(...yOe(yt,Xn))}catch(Xn){console.error(`Warning: Could not parse Drizzle schema at ${fr}:`,Xn)}else console.error("Warning: drizzle check enabled but no schema file found. Use --drizzle-schema to specify the path.")}if(jt.has("interactivity")&&qt.push(...TOe(yt)),Pe.length>0){let fr=new Set(Pe.map(Ti=>I6.resolve(Ti)));return{issues:qt.filter(Ti=>fr.has(I6.resolve(Ti.location.file))),routes:nt,components:Lt}}return{issues:qt,routes:nt,components:Lt}}function Fgt(Y,Ee){if(Ee.length>0)return Ee.map(nt=>I6.resolve(nt));let Pe=I6.join(Y,"app","routes");if(!HX.existsSync(Pe))return[];let Ve=[];return POe(Pe,nt=>{nt.endsWith(".tsx")&&Ve.push(nt)}),Ve}function POe(Y,Ee){let Pe=HX.readdirSync(Y,{withFileTypes:!0});for(let Ve of Pe){let nt=I6.join(Y,Ve.name);Ve.isDirectory()?POe(nt,Ee):Ve.isFile()&&Ee(nt)}}var $X=R_(require("fs"));function wOe(Y,Ee=!1){let Pe=Y.filter(jt=>jt.fix),Ve=Y.filter(jt=>!jt.fix),nt=new Map;for(let jt of Pe)for(let fr of jt.fix.edits){let Xn=nt.get(fr.file)||[];Xn.push({edit:fr,issue:jt}),nt.set(fr.file,Xn)}let yt=[],Lt=[],qt=[];for(let[jt,fr]of nt)try{let Xn=fr.map(Oe=>Oe.edit);if(Ogt(jt,Xn,Ee).modified){yt.push(jt);for(let{issue:Oe}of fr)Lt.includes(Oe)||Lt.push(Oe)}}catch(Xn){qt.push({file:jt,error:Xn instanceof Error?Xn.message:String(Xn)})}return{filesModified:yt,fixesApplied:Lt.length,fixedIssues:Lt,unfixableIssues:Ve,errors:qt}}function Ogt(Y,Ee,Pe){let Ve=$X.readFileSync(Y,"utf-8"),nt=[...Ee].sort((Lt,qt)=>qt.start-Lt.start);for(let Lt=0;Lt<nt.length-1;Lt++){let qt=nt[Lt],jt=nt[Lt+1];if(qt.start<jt.end)throw new Error(`Overlapping edits at positions ${jt.start}-${jt.end} and ${qt.start}-${qt.end}`)}let yt=Ve;for(let Lt of nt)yt=yt.slice(0,Lt.start)+Lt.newText+yt.slice(Lt.end);return!Pe&&yt!==Ve?($X.writeFileSync(Y,yt,"utf-8"),{modified:!0,newContent:yt}):{modified:yt!==Ve,newContent:yt}}var GX=R_(require("path"));function Lgt(Y,Ee=process.cwd()){let Pe=[],Ve=GX.relative(Ee,Y.location.file),nt=GX.basename(Ve);return Pe.push(`[${Y.severity}] ${nt}:${Y.location.line}:${Y.location.column}`),Y.code&&Pe.push(` ${Y.code}`),Pe.push(` x ${Y.message}`),Y.suggestion&&Pe.push(` -> ${Y.suggestion}`),Pe.join(`
|
|
435
|
+
`).length,Ve=Y.location.line+Pe-1;return Ee.location.line>=Y.location.line&&Ee.location.line<=Ve}function Hmt(Y){switch(Y.type){case"date-render":{let Ee;return Y.code.includes("Date.now()")?Ee="Date.now() returns the current timestamp, which differs between server render and client hydration":Ee="new Date() without arguments returns the current time, which differs between server render and client hydration",{category:"hydration",severity:"warning",message:Ee,location:Y.location,code:Y.code,suggestion:"Pass the current date from the loader to ensure server and client use the same value"}}case"locale-format":{let Ee=Y.code.includes("toLocaleDateString")||Y.code.includes("toLocaleTimeString")||Y.code.includes("Intl.DateTimeFormat"),Pe,Ve;Ee?(Pe="Date formatting without explicit timeZone produces different results on server and client",Ve=(Y.argCount??0)>=2?'Add timeZone to the existing options object, e.g. timeZone: "UTC"':'Add a timeZone option, e.g. toLocaleDateString(undefined, { timeZone: "UTC" })'):(Pe="Locale-dependent formatting may produce different results on server and client",Ve='Pass a fixed locale, e.g. .toLocaleString("en-US"), to ensure consistent output');let nt={category:"hydration",severity:"warning",message:Pe,location:Y.location,code:Y.code,suggestion:Ve};if(Ee&&Y.callSpan&&Y.argCount!==void 0){let yt=$mt(Y);yt&&(nt.fix=yt)}return nt}case"random-value":{let Ee={category:"hydration",severity:"warning",message:"Random value in render will differ between server and client",location:Y.location,code:Y.code,suggestion:"Use React.useId() for IDs, or generate in useEffect and store in state"};return Y.callSpan&&Gmt(Y.code)&&(Ee.fix={description:"Replaced with useId()",edits:[{file:Y.callSpan.file,start:Y.callSpan.start,end:Y.callSpan.end,newText:"useId()"}]}),Ee}case"browser-api":return{category:"hydration",severity:"warning",message:"Browser-only API accessed during render is not available on the server",location:Y.location,code:Y.code,suggestion:'Move to useEffect, or guard with typeof window !== "undefined"'};case"loader-date":return{category:"hydration",severity:"warning",message:"Date from loader may cause hydration mismatch when formatted",location:Y.location,code:Y.code,suggestion:"Format with explicit timeZone, use suppressHydrationWarning, or format in useEffect"};default:return}}function $mt(Y){if(!Y.callSpan)return;let Ee=Y.argCount??0,Pe=Y.code.match(/\.toLocale(String|DateString|TimeString)\(\)/);if(Ee===0&&Pe){let Ve=`toLocale${Pe[1]}`,nt=Y.code.replace(`.${Ve}()`,`.${Ve}(undefined, { timeZone: "UTC" })`);return{description:'Added { timeZone: "UTC" } option',edits:[{file:Y.callSpan.file,start:Y.callSpan.start,end:Y.callSpan.end,newText:nt}]}}if(Ee===0&&Y.code.includes("Intl.DateTimeFormat")){let Ve=Y.code.replace("Intl.DateTimeFormat()",'Intl.DateTimeFormat(undefined, { timeZone: "UTC" })');if(Ve!==Y.code)return{description:'Added { timeZone: "UTC" } option',edits:[{file:Y.callSpan.file,start:Y.callSpan.start,end:Y.callSpan.end,newText:Ve}]}}}function Gmt(Y){return/^(uuid|nanoid|uuidv4|generateId)\(\)$/.test(Y.trim())}var fOe=R_(require("fs")),Do=R_(zC());function pOe(Y){let Ee=fOe.readFileSync(Y,"utf-8"),Pe=Bh(Y,Ee),Ve=[],nt=new Map,yt=new Set,Lt=new Set,qt=new Map;return ql(Pe,fr=>{if(Do.default.isImportDeclaration(fr)&&fr.importClause?.namedBindings&&Do.default.isNamedImports(fr.importClause.namedBindings))for(let Xn of fr.importClause.namedBindings.elements)Xn.propertyName&&qt.set(Xn.name.text,Xn.propertyName.text)}),ql(Pe,fr=>{if(Do.default.isVariableDeclaration(fr)&&Do.default.isIdentifier(fr.name)){let Xn=fr.name.text,Ti=fr.initializer;if(Ti&&dOe(Ti)&&yt.add(Xn),Ti){let Oe=VX(Ti,yt,Lt);Oe&&nt.set(Xn,Oe),uhe(Ti)&&Lt.add(Xn)}}if(Do.default.isVariableDeclaration(fr)&&Do.default.isObjectBindingPattern(fr.name)&&fr.initializer&&uhe(fr.initializer))for(let Xn of fr.name.elements)Do.default.isBindingElement(Xn)&&Do.default.isIdentifier(Xn.name)&&Lt.add(Xn.name.text)}),ql(Pe,fr=>{if(Do.default.isCallExpression(fr)){let Xn=Ymt(fr,Pe,Y,nt,yt,Lt,qt);Xn&&Ve.push(Xn)}}),{operations:Ve.filter((fr,Xn,Ti)=>Ti.findIndex(Oe=>Oe.location.line===fr.location.line&&Oe.location.column===fr.location.column)===Xn)}}function dOe(Y){if(Do.default.isAwaitExpression(Y))return dOe(Y.expression);if(Do.default.isCallExpression(Y)){let Ee=Y.expression;if(Do.default.isPropertyAccessExpression(Ee))return Ee.name.text==="formData"}return!1}function uhe(Y){if(Do.default.isAwaitExpression(Y))return uhe(Y.expression);if(!Do.default.isCallExpression(Y))return!1;let Ee=Y.expression;if(Do.default.isPropertyAccessExpression(Ee)){let Pe=Ee.name.text;return["parse","safeParse","parseAsync","safeParseAsync"].includes(Pe)}return!1}function VX(Y,Ee,Pe){if(Do.default.isCallExpression(Y)){let Ve=Y.expression;if(Do.default.isPropertyAccessExpression(Ve)){let nt=Ve.name.text;if((nt==="get"||nt==="getAll")&&Do.default.isIdentifier(Ve.expression)&&Ee.has(Ve.expression.text))return{source:"formData",type:"string",fieldName:Qmt(Y),isValidated:!1};if(Do.default.isIdentifier(Ve.expression)&&Ve.expression.text==="params")return{source:"params",type:"string",fieldName:nt,isValidated:!1}}}if(Do.default.isPropertyAccessExpression(Y)&&Do.default.isIdentifier(Y.expression)&&Y.expression.text==="params")return{source:"params",type:"string",fieldName:Y.name.text,isValidated:!1};if(Do.default.isStringLiteral(Y))return{source:"literal",type:"string",literalValue:Y.text};if(Do.default.isNumericLiteral(Y))return{source:"literal",type:"number",literalValue:Number(Y.text)};if(Y.kind===Do.default.SyntaxKind.TrueKeyword)return{source:"literal",type:"boolean",literalValue:!0};if(Y.kind===Do.default.SyntaxKind.FalseKeyword)return{source:"literal",type:"boolean",literalValue:!1};if(Y.kind===Do.default.SyntaxKind.NullKeyword)return{source:"literal",type:"null"};if(Do.default.isCallExpression(Y)){let Ve=Do.default.isIdentifier(Y.expression)?Y.expression.text:void 0;if(Ve==="Number"||Ve==="parseInt"||Ve==="parseFloat"){let nt=Y.arguments[0]?VX(Y.arguments[0],Ee,Pe):void 0;if(nt)return{...nt,type:"number"}}if(Ve==="Boolean"){let nt=Y.arguments[0]?VX(Y.arguments[0],Ee,Pe):void 0;if(nt)return{...nt,type:"boolean"}}}}function Qmt(Y){if(Y.arguments.length===0)return;let Ee=Y.arguments[0];if(Do.default.isStringLiteral(Ee)||Do.default.isNoSubstitutionTemplateLiteral(Ee))return Ee.text}function Xmt(Y,Ee,Pe){if(Do.default.isIdentifier(Y)){let Ve=Y.text;if(Pe.has(Ve))return{source:"variable",type:"unknown",isValidated:!0};let nt=Ee.get(Ve);return nt||{source:"variable",type:"unknown"}}if(Do.default.isPropertyAccessExpression(Y)&&Do.default.isIdentifier(Y.expression)){let Ve=Y.expression.text;if(Pe.has(Ve))return{source:"variable",type:"unknown",isValidated:!0}}}function Ymt(Y,Ee,Pe,Ve,nt,yt,Lt){let qt=Zmt(Y);if(!qt)return;let{type:jt,valuesCall:fr,hasWhere:Xn}=qt,Ti=Lt.get(qt.tableName)||qt.tableName,Oe=ug(Ee,Y.getStart(Ee)),to={type:jt,tableName:Ti,columnValues:[],hasWhere:Xn,location:{file:Pe,line:Oe.line,column:Oe.column},span:kd(Ee,Y,Pe)};if(fr){let fn=Kmt(fr,Ee,Pe,Ve,nt,yt);to.columnValues=fn}return to}function Zmt(Y){let Ee=Y,Pe,Ve,nt,yt=!1;for(;Ee;)if(Do.default.isCallExpression(Ee)){let Lt=Ee.expression;if(Do.default.isPropertyAccessExpression(Lt)){let qt=Lt.name.text;if((qt==="values"||qt==="set")&&(Pe=Ee),qt==="where"&&(yt=!0),Do.default.isCallExpression(Lt.expression)&&Do.default.isPropertyAccessExpression(Lt.expression.expression)){let fr=Lt.expression.expression.name.text;if(fr==="insert"||fr==="update"||fr==="delete"){Ve=fr;let Xn=Lt.expression.arguments[0];Xn&&Do.default.isIdentifier(Xn)&&(nt=Xn.text);break}}if(qt==="insert"||qt==="update"||qt==="delete"){Ve=qt;let jt=Ee.arguments[0];if(jt&&Do.default.isIdentifier(jt)&&(nt=jt.text),!Pe&&qt==="insert"){let fr=Ee.parent;fr&&Do.default.isPropertyAccessExpression(fr)&&fr.name.text==="values"&&fr.parent&&Do.default.isCallExpression(fr.parent)&&(Pe=fr.parent)}break}Ee=Lt.expression}else break}else if(Do.default.isPropertyAccessExpression(Ee))Ee=Ee.expression;else break;if(Do.default.isCallExpression(Y)){let Lt=Y.expression;if(Do.default.isPropertyAccessExpression(Lt)){let qt=Lt.name.text;if(qt==="where"&&(yt=!0),qt==="values"||qt==="set"){Pe=Y;let jt=Lt.expression;for(;jt&&Do.default.isCallExpression(jt);){let fr=jt.expression;if(Do.default.isPropertyAccessExpression(fr)){let Xn=fr.name.text;if(Xn==="insert"||Xn==="update"||Xn==="delete"){Ve=Xn;let Ti=jt.arguments[0];Ti&&Do.default.isIdentifier(Ti)&&(nt=Ti.text);break}jt=fr.expression}else break}}}}if(!(!Ve||!nt))return{type:Ve,tableName:nt,valuesCall:Pe,hasWhere:yt}}function Kmt(Y,Ee,Pe,Ve,nt,yt){let Lt=[];if(Y.arguments.length===0)return Lt;let qt=Y.arguments[0];if(Do.default.isObjectLiteralExpression(qt)){for(let jt of qt.properties)if(Do.default.isPropertyAssignment(jt)){let fr=Do.default.isIdentifier(jt.name)||Do.default.isStringLiteral(jt.name)?jt.name.text:void 0;if(fr){let Xn=VX(jt.initializer,nt,yt)||Xmt(jt.initializer,Ve,yt);Lt.push({columnName:fr,dataSource:Xn||{source:"unknown",type:"unknown"},span:kd(Ee,jt.initializer,Pe)})}}else if(Do.default.isShorthandPropertyAssignment(jt)){let fr=jt.name.text,Xn=Ve.get(fr);Lt.push({columnName:fr,dataSource:Xn||{source:"variable",type:"unknown"},span:kd(Ee,jt.name,Pe)})}}return Lt}var A6=R_(require("fs")),yN=R_(require("path")),du=R_(zC());var egt=["src/db/schema.ts","db/schema.ts","lib/db/schema.ts","src/schema.ts","app/db/schema.ts","server/db/schema.ts"];function UX(Y){for(let Pe of egt){let Ve=yN.join(Y,Pe);if(A6.existsSync(Ve))return Ve}let Ee=[yN.join(Y,"drizzle.config.ts"),yN.join(Y,"drizzle.config.js")];for(let Pe of Ee)if(A6.existsSync(Pe)){let Ve=tgt(Pe,Y);if(Ve&&A6.existsSync(Ve))return Ve}}function tgt(Y,Ee){let Pe=A6.readFileSync(Y,"utf-8"),Ve=Bh(Y,Pe),nt;return ql(Ve,yt=>{if(du.default.isPropertyAssignment(yt)&&(du.default.isIdentifier(yt.name)?yt.name.text:void 0)==="schema"){if(du.default.isStringLiteral(yt.initializer))nt=yN.resolve(Ee,yt.initializer.text);else if(du.default.isArrayLiteralExpression(yt.initializer)){let qt=yt.initializer.elements[0];qt&&du.default.isStringLiteral(qt)&&(nt=yN.resolve(Ee,qt.text))}}}),nt}function qX(Y){if(!A6.existsSync(Y))throw new Error(`Drizzle schema file not found: ${Y}`);let Ee=A6.readFileSync(Y,"utf-8"),Pe=Bh(Y,Ee),Ve=[],nt=[];ql(Pe,Lt=>{if(du.default.isVariableStatement(Lt)){for(let qt of Lt.declarationList.declarations)if(du.default.isIdentifier(qt.name)&&qt.initializer){let jt=ngt(qt.name.text,qt.initializer);jt&&nt.push(jt)}}});let yt=new Map;for(let Lt of nt)yt.set(Lt.name,Lt);return ql(Pe,Lt=>{if(du.default.isVariableStatement(Lt)){for(let qt of Lt.declarationList.declarations)if(du.default.isIdentifier(qt.name)&&qt.initializer){let jt=rgt(qt.name.text,qt.initializer,yt);jt&&Ve.push(jt)}}}),{tables:Ve,enums:nt,schemaPath:Y}}function ngt(Y,Ee){if(!du.default.isCallExpression(Ee)||(du.default.isIdentifier(Ee.expression)?Ee.expression.text:void 0)!=="pgEnum")return;let Ve=Ee.arguments;if(Ve.length<2)return;let nt=Ve[0];if(!du.default.isStringLiteral(nt))return;let yt=nt.text,Lt=Ve[1];if(!du.default.isArrayLiteralExpression(Lt))return;let qt=[];for(let jt of Lt.elements)du.default.isStringLiteral(jt)&&qt.push(jt.text);return{name:Y,sqlName:yt,values:qt}}function rgt(Y,Ee,Pe){if(!du.default.isCallExpression(Ee)||(du.default.isIdentifier(Ee.expression)?Ee.expression.text:void 0)!=="pgTable")return;let nt=Ee.arguments;if(nt.length<2)return;let yt=nt[0];if(!du.default.isStringLiteral(yt))return;let Lt=yt.text,qt=nt[1];if(!du.default.isObjectLiteralExpression(qt))return;let jt=[];for(let fr of qt.properties)if(du.default.isPropertyAssignment(fr)&&du.default.isIdentifier(fr.name)){let Xn=igt(fr.name.text,fr.initializer,Pe);Xn&&jt.push(Xn)}return{name:Y,sqlName:Lt,columns:jt}}function igt(Y,Ee,Pe){let Ve=sgt(Ee),nt=agt(Ee);if(!nt)return;let{type:yt,sqlName:Lt,enumName:qt}=ogt(nt,Pe),jt=Ve.has("notNull"),fr=Ve.has("default")||Ve.has("defaultNow"),Xn=yt==="serial"||Ve.has("$defaultFn");return{name:Y,sqlName:Lt||Y,type:yt,enumName:qt,notNull:jt,hasDefault:fr,isAutoGenerated:Xn,isRequired:jt&&!fr&&!Xn}}function sgt(Y){let Ee=new Set,Pe=Y;for(;du.default.isCallExpression(Pe);){let Ve=Pe.expression;if(du.default.isPropertyAccessExpression(Ve))Ee.add(Ve.name.text),Pe=Ve.expression;else break}return Ee}function agt(Y){let Ee=Y;for(;du.default.isCallExpression(Ee);){let Pe=Ee.expression;if(du.default.isPropertyAccessExpression(Pe))Ee=Pe.expression;else{if(du.default.isIdentifier(Pe))return Ee;if(du.default.isCallExpression(Pe))return Ee;break}}if(du.default.isCallExpression(Y))return Y}function ogt(Y,Ee){let Pe,Ve,nt;if(du.default.isIdentifier(Y.expression))Pe=Y.expression.text;else if(du.default.isCallExpression(Y.expression)&&du.default.isIdentifier(Y.expression.expression)){let Lt=Y.expression.expression.text;Ee.has(Lt)&&(Pe="enum",nt=Lt)}if(du.default.isIdentifier(Y.expression)&&Ee.has(Y.expression.text)&&(Pe="enum",nt=Y.expression.text),Y.arguments.length>0){let Lt=Y.arguments[0];du.default.isStringLiteral(Lt)&&(Ve=Lt.text)}return{type:cgt(Pe),sqlName:Ve,enumName:nt}}function cgt(Y){return Y&&{text:"text",varchar:"varchar",integer:"integer",serial:"serial",bigint:"bigint",boolean:"boolean",timestamp:"timestamp",date:"date",json:"json",jsonb:"jsonb",uuid:"uuid",real:"real",doublePrecision:"doublePrecision",numeric:"numeric",enum:"enum"}[Y]||"unknown"}function UC(Y,Ee){return Y.tables.find(Pe=>Pe.name===Ee)}function _he(Y,Ee){return Y.enums.find(Pe=>Pe.name===Ee)}function mOe(Y){return Y.columns.filter(Ee=>Ee.isRequired)}function gOe(Y){return["integer","serial","bigint","real","doublePrecision","numeric"].includes(Y.type)}function hOe(Y){return Y.type==="enum"&&!!Y.enumName}function yOe(Y,Ee){let Pe=[];for(let Ve of Y)try{let{operations:nt}=pOe(Ve);for(let yt of nt){let Lt=lgt(yt,Ee);Pe.push(...Lt)}}catch{}return Pe}function lgt(Y,Ee){let Pe=[],Ve=UC(Ee,Y.tableName);if(!Ve)return Pe.push({category:"drizzle",severity:"error",message:`Table '${Y.tableName}' not found in Drizzle schema`,location:Y.location,code:`db.${Y.type}(${Y.tableName})`,suggestion:"Check the table name matches an export in the schema file"}),Pe;if(Y.type==="insert"){let nt=ugt(Y,Ve);Pe.push(...nt)}if(Y.type==="insert"){let nt=_gt(Y,Ve);Pe.push(...nt)}(Y.type==="delete"||Y.type==="update")&&(Y.hasWhere||Pe.push({category:"drizzle",severity:"warning",message:`db.${Y.type}(${Y.tableName}) has no .where() clause -- affects all rows`,location:Y.location,code:`db.${Y.type}(${Y.tableName})${Y.type==="update"?".set({...})":""}`,suggestion:"Add a .where() clause to target specific rows"}));for(let nt of Y.columnValues){let yt=Ve.columns.find(jt=>jt.name===nt.columnName);if(!yt){Pe.push({category:"drizzle",severity:"error",message:`Column '${nt.columnName}' not found on table '${Y.tableName}'`,location:Y.location,code:`${nt.columnName}: ...`,suggestion:`Check column name matches the schema definition for '${Y.tableName}'`});continue}let Lt=fgt(nt,yt,Y);if(Lt&&Pe.push(Lt),hOe(yt)){let jt=dgt(nt,yt,Y,Ee);jt&&Pe.push(jt);let fr=pgt(nt,yt,Y,Ee);fr&&Pe.push(fr)}let qt=mgt(nt,yt,Y);qt&&Pe.push(qt)}return Pe}function ugt(Y,Ee){let Pe=[],Ve=mOe(Ee),nt=new Set(Y.columnValues.map(yt=>yt.columnName));for(let yt of Ve)nt.has(yt.name)||Pe.push({category:"drizzle",severity:"error",message:`db.insert(${Y.tableName}) missing required column '${yt.name}'`,location:Y.location,code:`db.insert(${Y.tableName}).values({...})`,suggestion:`Add '${yt.name}' to the values object`});return Pe}function _gt(Y,Ee){let Pe=[];for(let Ve of Y.columnValues){let nt=Ee.columns.find(yt=>yt.name===Ve.columnName);nt&&nt.isAutoGenerated&&Pe.push({category:"drizzle",severity:"warning",message:`Column '${nt.name}' is auto-generated (${nt.type}) but is explicitly set in insert`,location:Y.location,code:`${Ve.columnName}: ...`,suggestion:`Remove '${nt.name}' from the values object to use auto-generation`})}return Pe}function fgt(Y,Ee,Pe){let Ve=Y.dataSource;if(Ve.source==="literal"&&Ve.type==="null"&&Ee.notNull)return{category:"drizzle",severity:"error",message:`Column '${Ee.name}' has notNull constraint but receives null`,location:Pe.location,code:`${Y.columnName}: null`,suggestion:`Provide a non-null value for '${Ee.name}'`}}function pgt(Y,Ee,Pe,Ve){let nt=Y.dataSource;if(nt.source!=="literal"||nt.type!=="string")return;let yt=Ee.enumName?_he(Ve,Ee.enumName):void 0;if(!yt)return;let Lt=String(nt.literalValue);if(!yt.values.includes(Lt)){let qt=yt.values.map(jt=>`'${jt}'`).join(", ");return{category:"drizzle",severity:"error",message:`Enum column '${Ee.name}' receives invalid value '${Lt}'`,location:Pe.location,code:`${Y.columnName}: '${Lt}'`,suggestion:`Allowed values are: ${qt}`}}}function dgt(Y,Ee,Pe,Ve){let nt=Y.dataSource;if(!nt.isValidated&&nt.source!=="literal"&&!(nt.source==="variable"||nt.source==="unknown")&&(nt.source==="formData"||nt.source==="params"||nt.source==="body")){let Lt=(Ee.enumName?_he(Ve,Ee.enumName):void 0)?.values.map(qt=>`'${qt}'`).join(", ")||"enum values";return{category:"drizzle",severity:"error",message:`Enum column '${Ee.name}' receives unvalidated external input`,location:Pe.location,code:`${Y.columnName}: ${nt.source}.get('${nt.fieldName||Y.columnName}')`,suggestion:`Validate with zod schema or check against allowed values: ${Lt}`}}}function mgt(Y,Ee,Pe){let Ve=Y.dataSource;if(Ve.isValidated||Ve.source==="literal")return;let nt=["formData","params","body"];if(gOe(Ee)&&Ve.type==="string"&&nt.includes(Ve.source))return{category:"drizzle",severity:"error",message:`Column '${Ee.name}' expects ${Ee.type} but receives string from ${Ve.source}.get()`,location:Pe.location,code:`${Y.columnName}: ${Ve.source}.get('${Ve.fieldName||Y.columnName}')`,suggestion:`Convert with parseInt(${Y.columnName}, 10) or Number(${Y.columnName})`};if(Ee.type==="boolean"&&Ve.type==="string"&&nt.includes(Ve.source))return{category:"drizzle",severity:"error",message:`Column '${Ee.name}' expects boolean but receives string from ${Ve.source}.get()`,location:Pe.location,code:`${Y.columnName}: ${Ve.source}.get('${Ve.fieldName||Y.columnName}')`,suggestion:`Convert with Boolean(${Y.columnName}) or ${Y.columnName} === 'true'`};if((Ee.type==="timestamp"||Ee.type==="date")&&Ve.type==="string"&&nt.includes(Ve.source))return{category:"drizzle",severity:"warning",message:`Column '${Ee.name}' expects ${Ee.type} but receives string from ${Ve.source}.get()`,location:Pe.location,code:`${Y.columnName}: ${Ve.source}.get('${Ve.fieldName||Y.columnName}')`,suggestion:`Convert with new Date(${Y.columnName})`};if((Ee.type==="json"||Ee.type==="jsonb")&&Ve.type==="string"&&nt.includes(Ve.source))return{category:"drizzle",severity:"warning",message:`Column '${Ee.name}' expects ${Ee.type} but receives string from ${Ve.source}.get()`,location:Pe.location,code:`${Y.columnName}: ${Ve.source}.get('${Ve.fieldName||Y.columnName}')`,suggestion:`Convert with JSON.parse(${Y.columnName})`}}var SOe=R_(require("fs")),Uc=R_(zC());var xOe=new Set(["Dialog","Modal","AlertDialog","ConfirmDialog","ConfirmationDialog","Sheet","Drawer","Popover"]),ggt=[/^save/i,/^submit/i,/^delete/i,/^remove/i,/^add/i,/^create/i,/^update/i,/^confirm/i,/^apply/i],hgt=[/^cancel/i,/^close/i,/^dismiss/i,/^no$/i],ygt=new Set(["input","select","textarea"]);function TOe(Y){let Ee=[];for(let Pe of Y)try{let Ve=SOe.readFileSync(Pe,"utf-8"),nt=Bh(Pe,Ve),yt=vgt(nt),Lt=wgt(nt),qt=Sgt(nt),jt=xgt(nt,Pe,yt,qt);for(let Xn of jt){let Ti=Pgt(Xn);Ee.push(...Ti)}let fr=Ngt(nt,Pe,yt,Lt,jt);for(let Xn of fr)Xn.handlerBehavior==="stub"&&Ee.push({category:"interactivity",severity:"warning",message:`"${Xn.text}" button has an empty or stub onClick handler`,location:Xn.location,code:Xn.code,suggestion:"Implement the handler to perform the intended action"})}catch{}return Ee}function vgt(Y){let Ee=new Set;return ql(Y,Pe=>{if(Uc.default.isVariableDeclaration(Pe)&&Uc.default.isArrayBindingPattern(Pe.name)&&Pe.initializer&&bgt(Pe.initializer)){let Ve=Pe.name.elements;if(Ve.length>=2){let nt=Ve[1];Uc.default.isBindingElement(nt)&&Uc.default.isIdentifier(nt.name)&&Ee.add(nt.name.text)}}}),Ee}function bgt(Y){if(Uc.default.isCallExpression(Y)){let Ee=Y.expression;if(Uc.default.isIdentifier(Ee)&&Ee.text==="useState")return!0}return!1}function Sgt(Y){let Ee=!1;return ql(Y,Pe=>{if(Uc.default.isCallExpression(Pe)){let Ve=Pe.expression;Uc.default.isIdentifier(Ve)&&Ve.text==="useFetcher"&&(Ee=!0)}}),Ee}function xgt(Y,Ee,Pe,Ve){let nt=[];return ql(Y,yt=>{if(Uc.default.isJsxElement(yt)||Uc.default.isJsxSelfClosingElement(yt)){let Lt=w6(yt);if(Lt&&xOe.has(Lt)){let qt=Tgt(yt,Lt,Y,Ee,Pe,Ve);nt.push(qt)}}}),nt}function Tgt(Y,Ee,Pe,Ve,nt,yt){let Lt=ug(Pe,Y.getStart()),qt={file:Ve,line:Lt.line,column:Lt.column},jt=!1,fr=!1,Xn=yt,Ti=[],Oe=[];return ql(Y,to=>{if(Uc.default.isJsxElement(to)||Uc.default.isJsxSelfClosingElement(to)){let fn=w6(to);if(!fn)return;if(fn==="Form"&&(fr=!0,Oe.push(to)),kgt(to,fn)&&Oe.length===0&&(jt=!0),fn==="button"||fn==="Button"){let cn=Cgt(to,Pe,Ve,nt);cn&&EOe(cn.text)&&Ti.push(cn)}}}),{type:Ee,location:qt,hasPlainInputs:jt,hasReactRouterForm:fr,hasFetcherSubmit:Xn,actionButtons:Ti}}function kgt(Y,Ee){return ygt.has(Ee)?!0:BX(Ee)?Hg(Y,"name")!==void 0:!1}function Cgt(Y,Ee,Pe,Ve){let nt=JX(Y);if(!nt)return;let yt=Hg(Y,"onClick"),Lt="unknown";yt?.initializer&&(Lt=Egt(yt.initializer,Ve));let qt=ug(Ee,Y.getStart());return{text:nt,location:{file:Pe,line:qt.line,column:qt.column},code:`<Button onClick={...}>${nt}</Button>`,handlerBehavior:Lt}}function Egt(Y,Ee){if(!Uc.default.isJsxExpression(Y)||!Y.expression)return"unknown";let Pe=Y.expression;return Uc.default.isArrowFunction(Pe)?kOe(Pe.body,Ee):"unknown"}function kOe(Y,Ee){if(Uc.default.isCallExpression(Y))return COe(Y,Ee);if(Uc.default.isBlock(Y)){let Pe=Y.statements;if(Pe.length===0)return"stub";let Ve=!0,nt=!0,yt=!1;for(let Lt of Pe)if(Uc.default.isExpressionStatement(Lt)){let qt=Dgt(Lt.expression,Ee);qt==="submits"&&(yt=!0),qt!=="closes-dialog"&&(Ve=!1),qt!=="stub"&&(nt=!1)}else Ve=!1,nt=!1;return yt?"submits":Ve?"closes-dialog":nt?"stub":"unknown"}return"unknown"}function COe(Y,Ee){let Pe=Y.expression;if(Uc.default.isIdentifier(Pe)&&Ee.has(Pe.text)){let Ve=Y.arguments[0];return Ve&&Ve.kind===Uc.default.SyntaxKind.FalseKeyword?"closes-dialog":"unknown"}return Uc.default.isPropertyAccessExpression(Pe)&&Uc.default.isIdentifier(Pe.expression)&&Pe.expression.text==="console"&&Pe.name.text==="log"?"stub":Uc.default.isIdentifier(Pe)&&Pe.text==="submit"||Uc.default.isPropertyAccessExpression(Pe)&&Pe.name.text==="submit"?"submits":"unknown"}function Dgt(Y,Ee){return Uc.default.isCallExpression(Y)?COe(Y,Ee):"unknown"}function EOe(Y){for(let Ee of hgt)if(Ee.test(Y))return!1;for(let Ee of ggt)if(Ee.test(Y))return!0;return!1}function Pgt(Y){let Ee=[];if(Y.hasReactRouterForm||Y.hasFetcherSubmit)return Ee;for(let Pe of Y.actionButtons)if(Pe.handlerBehavior==="closes-dialog"){let Ve=/^(delete|remove)/i.test(Pe.text);Y.hasPlainInputs?Ee.push({category:"interactivity",severity:"error",message:`"${Pe.text}" button in ${Y.type} only closes dialog without saving data`,location:Pe.location,code:Pe.code,suggestion:"Wrap inputs in a <Form> component or use useFetcher.submit() to persist data"}):Ve&&Ee.push({category:"interactivity",severity:"error",message:`"${Pe.text}" button in ${Y.type} only closes dialog without performing the action`,location:Pe.location,code:Pe.code,suggestion:'Use useFetcher.submit() with a delete intent or wrap in a <Form method="delete">'})}else Pe.handlerBehavior==="stub"&&Ee.push({category:"interactivity",severity:"warning",message:`"${Pe.text}" button has an empty or stub onClick handler`,location:Pe.location,code:Pe.code,suggestion:"Implement the handler or remove the button if not needed"});return Ee}function wgt(Y){let Ee=new Set;return ql(Y,Pe=>{if(Uc.default.isVariableDeclaration(Pe)&&Uc.default.isIdentifier(Pe.name)){let Ve=Pe.name.text;Pe.initializer&&Uc.default.isArrowFunction(Pe.initializer)&&vOe(Pe.initializer.body)&&Ee.add(Ve)}Uc.default.isFunctionDeclaration(Pe)&&Pe.name&&Pe.body&&vOe(Pe.body)&&Ee.add(Pe.name.text)}),Ee}function vOe(Y){if(Uc.default.isCallExpression(Y))return bOe(Y);if(Uc.default.isBlock(Y)){let Ee=Y.statements;return Ee.length===0?!0:Ee.every(Pe=>Uc.default.isExpressionStatement(Pe)&&Uc.default.isCallExpression(Pe.expression)?bOe(Pe.expression):!1)}return!1}function bOe(Y){let Ee=Y.expression;return Uc.default.isPropertyAccessExpression(Ee)&&Uc.default.isIdentifier(Ee.expression)&&Ee.expression.text==="console"?["log","warn","error","info","debug"].includes(Ee.name.text):!1}function Ngt(Y,Ee,Pe,Ve,nt){let yt=[],Lt=[];return ql(Y,qt=>{if(Uc.default.isJsxElement(qt)||Uc.default.isJsxSelfClosingElement(qt)){let jt=w6(qt);jt&&xOe.has(jt)&&Lt.push({start:qt.getStart(),end:qt.getEnd()})}}),ql(Y,qt=>{if(Uc.default.isJsxElement(qt)||Uc.default.isJsxSelfClosingElement(qt)){let jt=w6(qt);if(!jt||!(jt==="button"||jt==="Button"||jt.endsWith("Button")))return;let Xn=qt.getStart();if(Lt.some(cn=>Xn>=cn.start&&Xn<=cn.end))return;let Oe=JX(qt);if(!Oe||!EOe(Oe))return;let to=Hg(qt,"onClick");if(!to?.initializer)return;let fn=Agt(to.initializer,Pe,Ve);if(fn==="stub"){let cn=ug(Y,qt.getStart());yt.push({text:Oe,location:{file:Ee,line:cn.line,column:cn.column},code:`<${jt} onClick={...}>${Oe}</${jt}>`,handlerBehavior:fn})}}}),yt}function Agt(Y,Ee,Pe){if(!Uc.default.isJsxExpression(Y)||!Y.expression)return"unknown";let Ve=Y.expression;if(Uc.default.isArrowFunction(Ve)){let nt=kOe(Ve.body,Ee);return nt==="stub"?"stub":nt==="submits"?"submits":"unknown"}return Uc.default.isIdentifier(Ve)&&Pe.has(Ve.text)?"stub":"unknown"}var lj=["links","forms","loader","params","interactivity","hydration"],Igt=["drizzle"],uj=[...lj,...Igt];function DOe(Y){let{root:Ee,files:Pe,checks:Ve}=Y,nt=[];try{nt=WFe(Ee)}catch(fr){return{issues:[{category:"links",severity:"error",message:fr instanceof Error?fr.message:"Failed to parse routes file",location:{file:I6.join(Ee,"app","routes.ts"),line:1,column:1}}],routes:[],components:[]}}let yt=Fgt(Ee,Pe),Lt=[];for(let fr of yt)try{let Xn=QFe(fr);Lt.push(Xn)}catch(Xn){console.error(`Warning: Could not parse ${fr}:`,Xn)}let qt=[],jt=new Set(Ve.length>0?Ve:lj);if(jt.has("links")&&qt.push(...KFe(Lt,nt)),jt.has("forms")&&qt.push(...oOe(Lt,nt,Ee)),jt.has("loader")&&qt.push(...cOe(Lt)),jt.has("params")&&qt.push(...uOe(Lt,nt,Ee)),jt.has("hydration")&&qt.push(..._Oe(Lt)),jt.has("drizzle")){let fr=Y.drizzleSchemaPath||UX(Ee);if(fr)try{let Xn=qX(fr);qt.push(...yOe(yt,Xn))}catch(Xn){console.error(`Warning: Could not parse Drizzle schema at ${fr}:`,Xn)}else console.error("Warning: drizzle check enabled but no schema file found. Use --drizzle-schema to specify the path.")}if(jt.has("interactivity")&&qt.push(...TOe(yt)),Pe.length>0){let fr=new Set(Pe.map(Ti=>I6.resolve(Ti)));return{issues:qt.filter(Ti=>fr.has(I6.resolve(Ti.location.file))),routes:nt,components:Lt}}return{issues:qt,routes:nt,components:Lt}}function Fgt(Y,Ee){if(Ee.length>0)return Ee.map(nt=>I6.resolve(nt));let Pe=I6.join(Y,"app","routes");if(!HX.existsSync(Pe))return[];let Ve=[];return POe(Pe,nt=>{nt.endsWith(".tsx")&&Ve.push(nt)}),Ve}function POe(Y,Ee){let Pe=HX.readdirSync(Y,{withFileTypes:!0});for(let Ve of Pe){let nt=I6.join(Y,Ve.name);Ve.isDirectory()?POe(nt,Ee):Ve.isFile()&&Ee(nt)}}var $X=R_(require("fs"));function wOe(Y,Ee=!1){let Pe=Y.filter(jt=>jt.fix),Ve=Y.filter(jt=>!jt.fix),nt=new Map;for(let jt of Pe)for(let fr of jt.fix.edits){let Xn=nt.get(fr.file)||[];Xn.push({edit:fr,issue:jt}),nt.set(fr.file,Xn)}let yt=[],Lt=[],qt=[];for(let[jt,fr]of nt)try{let Xn=fr.map(Oe=>Oe.edit);if(Ogt(jt,Xn,Ee).modified){yt.push(jt);for(let{issue:Oe}of fr)Lt.includes(Oe)||Lt.push(Oe)}}catch(Xn){qt.push({file:jt,error:Xn instanceof Error?Xn.message:String(Xn)})}return{filesModified:yt,fixesApplied:Lt.length,fixedIssues:Lt,unfixableIssues:Ve,errors:qt}}function Ogt(Y,Ee,Pe){let Ve=$X.readFileSync(Y,"utf-8"),nt=[...Ee].sort((Lt,qt)=>qt.start-Lt.start);for(let Lt=0;Lt<nt.length-1;Lt++){let qt=nt[Lt],jt=nt[Lt+1];if(qt.start<jt.end)throw new Error(`Overlapping edits at positions ${jt.start}-${jt.end} and ${qt.start}-${qt.end}`)}let yt=Ve;for(let Lt of nt)yt=yt.slice(0,Lt.start)+Lt.newText+yt.slice(Lt.end);return!Pe&&yt!==Ve?($X.writeFileSync(Y,yt,"utf-8"),{modified:!0,newContent:yt}):{modified:yt!==Ve,newContent:yt}}var GX=R_(require("path"));function Lgt(Y,Ee=process.cwd()){let Pe=[],Ve=GX.relative(Ee,Y.location.file),nt=GX.basename(Ve);return Pe.push(`[${Y.severity}] ${nt}:${Y.location.line}:${Y.location.column}`),Y.code&&Pe.push(` ${Y.code}`),Pe.push(` x ${Y.message}`),Y.suggestion&&Pe.push(` -> ${Y.suggestion}`),Pe.join(`
|
|
436
436
|
`)}function NOe(Y,Ee=process.cwd()){if(Y.length===0)return"No issues found.";let Pe=[];Pe.push(`
|
|
437
437
|
rr found ${Y.length} issue${Y.length===1?"":"s"}:`),Pe.push("");for(let yt of Y)Pe.push(Lgt(yt,Ee)),Pe.push("");let Ve=Y.filter(yt=>yt.severity==="error").length,nt=Y.filter(yt=>yt.severity==="warning").length;return Pe.push(`Summary: ${Ve} error${Ve===1?"":"s"}, ${nt} warning${nt===1?"":"s"}`),Pe.push("Run with --help for options."),Pe.join(`
|
|
438
438
|
`)}var AOe=R_(require("path"));function Mgt(Y,Ee=process.cwd()){let Pe=AOe.relative(Ee,Y.location.file),Ve={category:Y.category,severity:Y.severity,message:Y.message,file:Pe,line:Y.location.line,column:Y.location.column};return Y.code&&(Ve.code=Y.code),Y.suggestion&&(Ve.suggestion=Y.suggestion),Ve}function IOe(Y,Ee=process.cwd()){let Pe=Y.issues.map(yt=>Mgt(yt,Ee)),Ve=Y.issues.filter(yt=>yt.severity==="error").length,nt=Y.issues.filter(yt=>yt.severity==="warning").length;return{issues:Pe,summary:{total:Y.issues.length,errors:Ve,warnings:nt}}}var _j=R_(require("fs")),qC=R_(require("path"));var MOe=R_(require("fs")),Po=R_(zC());function ROe(Y){return{extractFromFile(Ee){return Rgt(Ee,Y)}}}function Rgt(Y,Ee){let Pe=MOe.readFileSync(Y,"utf-8"),Ve=Bh(Y,Pe),nt=[],yt=new Set(["db"]),Lt=new Map;ql(Ve,jt=>{if(Po.default.isImportDeclaration(jt)&&jt.importClause?.namedBindings&&Po.default.isNamedImports(jt.importClause.namedBindings))for(let fr of jt.importClause.namedBindings.elements)(fr.propertyName?.text==="db"||fr.name.text==="db")&&yt.add(fr.name.text),fr.propertyName&&Lt.set(fr.name.text,fr.propertyName.text)}),ql(Ve,jt=>{if(Po.default.isCallExpression(jt)){let fr=jt.parent;if(Po.default.isPropertyAccessExpression(fr)&&Po.default.isCallExpression(fr.parent))return;let Xn=jgt(jt,Ve,Y,Pe,Ee,yt,Lt);Xn&&nt.push(Xn)}});let qt=new Set;return nt.filter(jt=>{let fr=`${jt.location.line}`;return qt.has(fr)?!1:(qt.add(fr),!0)})}function jgt(Y,Ee,Pe,Ve,nt,yt,Lt){let qt=Y;if(Po.default.isAwaitExpression(qt)&&(qt=qt.expression),!Po.default.isCallExpression(qt))return;if(Po.default.isPropertyAccessExpression(qt.expression)){let Oe=qt.expression.expression,to=qt.expression.name.text;if(Po.default.isIdentifier(Oe)&&yt.has(Oe.text)&&to==="execute"&&qt.arguments.length>0){let fn=dhe(qt.arguments[0],nt,Lt);if(fn){let cn=ug(Ee,Y.getStart(Ee)),_g=LOe(Ve,Y.getStart(Ee),Y.getEnd()),so=fn.trimStart().toUpperCase();return{type:so.startsWith("INSERT")?"INSERT":so.startsWith("UPDATE")?"UPDATE":so.startsWith("DELETE")?"DELETE":"SELECT",sql:fn,tables:[],location:{file:Pe,line:cn.line,column:cn.column},code:_g,parameters:[]}}}}let jt=Bgt(qt,yt,nt,Lt);if(!jt)return;let fr=ug(Ee,Y.getStart(Ee)),Xn=LOe(Ve,Y.getStart(Ee),Y.getEnd());if(jt.tableName=Lt.get(jt.tableName)||jt.tableName,jt.joins)for(let Oe of jt.joins)Oe.table=Lt.get(Oe.table)||Oe.table,Oe.on&&zOe(Oe.on,Lt);if(jt.groupBy)for(let Oe of jt.groupBy)Oe.table=Lt.get(Oe.table)||Oe.table;let Ti=Vgt(jt,nt);if(Ti)return{type:Ti.type,sql:Ti.sql,tables:Ti.tables,location:{file:Pe,line:fr.line,column:fr.column},code:Xn,parameters:Ti.parameters}}function Bgt(Y,Ee,Pe,Ve){let nt=FOe(Y),yt;for(let qt=0;qt<nt.length;qt++){let{object:jt,method:fr,args:Xn}=nt[qt];if(Po.default.isIdentifier(jt)&&Ee.has(jt.text)&&["select","insert","update","delete"].includes(fr)){let Ti="";if(fr==="select"){let Oe=nt.find(to=>to.method==="from");Oe&&Oe.args.length>0&&(Ti=vN(Oe.args[0]))}else Xn.length>0&&(Ti=vN(Xn[0]));if(Ti||fr==="select"){yt={operation:fr,tableName:Ti||""};break}}if(Po.default.isCallExpression(jt)){let Ti=FOe(jt);for(let Oe of Ti)if(Po.default.isIdentifier(Oe.object)&&Ee.has(Oe.object.text)&&["select","insert","update","delete"].includes(Oe.method)){let to=Oe.args.length>0?vN(Oe.args[0]):"";yt={operation:Oe.method,tableName:to};break}}}if(!yt)return;let Lt={operation:yt.operation,tableName:yt.tableName};for(let{method:qt,args:jt}of nt)switch(qt){case"select":jt.length>0&&Po.default.isObjectLiteralExpression(jt[0])&&(Lt.selectColumns=Jgt(jt[0],Pe,Ve));break;case"from":jt.length>0&&!Lt.tableName&&(Lt.tableName=vN(jt[0]));break;case"values":jt.length>0&&(Lt.insertValues=OOe(jt[0]));break;case"set":jt.length>0&&(Lt.setValues=OOe(jt[0]));break;case"where":if(jt.length>0){let fr=dhe(jt[0],Pe,Ve);if(fr)Lt.rawWhereClauses=[...Lt.rawWhereClauses||[],fr];else{let Xn=BOe(jt[0]);Lt.whereConditions=[...Lt.whereConditions||[],...Xn]}}break;case"innerJoin":case"leftJoin":case"rightJoin":case"fullJoin":if(jt.length>=2){let fr=qt.replace("Join","");Lt.joins=[...Lt.joins||[],{type:fr,table:vN(jt[0]),on:JOe(jt[1])}]}break;case"groupBy":jt.length>0&&(Lt.groupBy=zgt(jt));break;case"orderBy":jt.length>0&&(Lt.orderBy=Wgt(jt));break;case"limit":jt.length>0&&Po.default.isNumericLiteral(jt[0])&&(Lt.limit=Number(jt[0].text));break;case"offset":jt.length>0&&Po.default.isNumericLiteral(jt[0])&&(Lt.offset=Number(jt[0].text));break}return Lt}function FOe(Y){let Ee=[],Pe=Y;for(;Po.default.isCallExpression(Pe);){let Ve=Pe.expression;if(Po.default.isPropertyAccessExpression(Ve))Ee.unshift({object:Ve.expression,method:Ve.name.text,args:Array.from(Pe.arguments)}),Pe=Ve.expression;else{if(Po.default.isIdentifier(Ve))break;break}}return Ee}function vN(Y){return Po.default.isIdentifier(Y)?Y.text:Po.default.isPropertyAccessExpression(Y)?Y.name.text:""}function Jgt(Y,Ee,Pe){let Ve=[];for(let nt of Y.properties)if(Po.default.isPropertyAssignment(nt)){let yt=dhe(nt.initializer,Ee,Pe);if(yt){Ve.push(yt);continue}let Lt=Po.default.isIdentifier(nt.name)||Po.default.isStringLiteral(nt.name)?nt.name.text:void 0;Lt&&Ve.push(Lt)}else Po.default.isShorthandPropertyAssignment(nt)&&Ve.push(nt.name.text);return Ve}function OOe(Y){let Ee=new Map;if(!Po.default.isObjectLiteralExpression(Y))return Ee;for(let Pe of Y.properties)if(Po.default.isPropertyAssignment(Pe)){let Ve=Po.default.isIdentifier(Pe.name)||Po.default.isStringLiteral(Pe.name)?Pe.name.text:void 0;Ve&&Ee.set(Ve,jOe(Pe.initializer))}else Po.default.isShorthandPropertyAssignment(Pe)&&Ee.set(Pe.name.text,{type:"variable",source:Pe.name.text});return Ee}function jOe(Y){if(Po.default.isStringLiteral(Y))return{type:"literal",value:Y.text,dataType:"string"};if(Po.default.isNumericLiteral(Y))return{type:"literal",value:Number(Y.text),dataType:"number"};if(Y.kind===Po.default.SyntaxKind.TrueKeyword)return{type:"literal",value:!0,dataType:"boolean"};if(Y.kind===Po.default.SyntaxKind.FalseKeyword)return{type:"literal",value:!1,dataType:"boolean"};if(Y.kind===Po.default.SyntaxKind.NullKeyword)return{type:"literal",value:"NULL",dataType:"null"};if(Po.default.isIdentifier(Y))return{type:"variable",source:Y.text};if(Po.default.isCallExpression(Y)){let Ee=Y.getText();if(Ee.includes("formData.get")){let Pe=Y.arguments[0];return{type:"param",source:`formData.get('${Po.default.isStringLiteral(Pe)?Pe.text:"unknown"}')`,dataType:"string"}}if(Ee.includes("Number(")||Ee.includes("parseInt("))return{type:"param",source:Ee,dataType:"number"}}if(Po.default.isPropertyAccessExpression(Y)){let Ee=Y.getText();if(Ee.startsWith("params."))return{type:"param",source:Ee,dataType:"string"};if(Ee.startsWith("data."))return{type:"param",source:Ee,dataType:"unknown"}}return{type:"param",source:Y.getText()}}function BOe(Y){let Ee=[];if(Po.default.isCallExpression(Y)){let Pe=Y.expression;if(Po.default.isIdentifier(Pe)){let Ve=Pe.text,nt={eq:"=",ne:"!=",lt:"<",lte:"<=",gt:">",gte:">=",like:"LIKE",ilike:"ILIKE",isNull:"IS NULL",isNotNull:"IS NOT NULL",inArray:"IN",notInArray:"NOT IN"};if(nt[Ve]&&Y.arguments.length>=1){let yt=Y.arguments[0],Lt=fhe(yt);if(Ve==="isNull"||Ve==="isNotNull")Ee.push({column:Lt,operator:nt[Ve],value:{type:"literal",value:""}});else if(Y.arguments.length>=2){let qt=Y.arguments[1];Ee.push({column:Lt,operator:nt[Ve],value:jOe(qt)})}}if(Ve==="and"||Ve==="or")for(let yt of Y.arguments)Ee.push(...BOe(yt))}}return Ee}function fhe(Y){return Po.default.isPropertyAccessExpression(Y)?Y.name.text:Po.default.isIdentifier(Y)?Y.text:Y.getText()}function JOe(Y){if(Po.default.isCallExpression(Y)){let Ee=Y.expression;if(Po.default.isIdentifier(Ee)){let Pe=Ee.text,Ve={eq:"=",ne:"!=",lt:"<",lte:"<=",gt:">",gte:">="};if(Ve[Pe]&&Y.arguments.length>=2){let nt=phe(Y.arguments[0]),yt=phe(Y.arguments[1]);if(nt&&yt)return{kind:"comparison",leftTable:nt.table,leftColumn:nt.column,operator:Ve[Pe],rightTable:yt.table,rightColumn:yt.column}}if(Pe==="and"||Pe==="or"){let nt=[];for(let yt of Y.arguments){let Lt=JOe(yt);Lt&&nt.push(Lt)}if(nt.length>0)return{kind:Pe,children:nt}}}}return null}function zOe(Y,Ee){if(Y.kind==="comparison")Y.leftTable=Ee.get(Y.leftTable)||Y.leftTable,Y.rightTable=Ee.get(Y.rightTable)||Y.rightTable;else for(let Pe of Y.children)zOe(Pe,Ee)}function WOe(Y,Ee){if(Y.kind==="comparison"){let yt=UC(Ee,Y.leftTable),Lt=yt?.sqlName||Y.leftTable,qt=yt?.columns.find(Ti=>Ti.name===Y.leftColumn)?.sqlName||Y.leftColumn,jt=UC(Ee,Y.rightTable),fr=jt?.sqlName||Y.rightTable,Xn=jt?.columns.find(Ti=>Ti.name===Y.rightColumn)?.sqlName||Y.rightColumn;return`${Lt}.${qt} ${Y.operator} ${fr}.${Xn}`}let Pe=Y.kind==="or"?" OR ":" AND ",Ve=Y.children.map(yt=>WOe(yt,Ee));if(Ve.length===1)return Ve[0];let nt=Ve.join(Pe);return Y.kind==="or"?`(${nt})`:nt}function phe(Y){if(Po.default.isPropertyAccessExpression(Y)){let Ee=vN(Y.expression),Pe=Y.name.text;if(Ee)return{table:Ee,column:Pe}}}function zgt(Y){let Ee=[];for(let Pe of Y){let Ve=phe(Pe);Ve&&Ee.push({table:Ve.table,column:Ve.column})}return Ee}function Wgt(Y){let Ee=[];for(let Pe of Y)if(Po.default.isCallExpression(Pe)){let Ve=Pe.expression;if(Po.default.isIdentifier(Ve)){let nt=Ve.text==="desc"?"desc":"asc";if(Pe.arguments.length>0){let yt=Pe.arguments[0],Lt=fhe(yt);Ee.push({column:Lt,direction:nt})}}}else{let Ve=fhe(Pe);Ve&&Ee.push({column:Ve,direction:"asc"})}return Ee}function Vgt(Y,Ee){let Pe=UC(Ee,Y.tableName),Ve=Pe?.sqlName||Y.tableName,nt=[Ve],yt=[],Lt=1,qt=Xn=>{if(Pe){let Ti=Pe.columns.find(Oe=>Oe.name===Xn);if(Ti)return Ti.type}},jt=(Xn,Ti)=>{if(Xn.type==="literal")return Xn.dataType==="string"?`'${String(Xn.value).replace(/'/g,"''")}'`:Xn.dataType==="null"?"NULL":String(Xn.value);let Oe=Ti?qt(Ti):void 0;return yt.push({position:Lt,source:Xn.source||"unknown",columnType:Oe}),`$${Lt++}`},fr=Xn=>{if(Pe){let Ti=Pe.columns.find(Oe=>Oe.name===Xn);if(Ti)return Ti.sqlName}return Xn};switch(Y.operation){case"select":{let Xn="SELECT";if(Y.selectColumns&&Y.selectColumns.length>0?Xn+=" "+Y.selectColumns.map(fr).join(", "):Xn+=" *",Xn+=` FROM ${Ve}`,Y.joins)for(let Ti of Y.joins){let to=UC(Ee,Ti.table)?.sqlName||Ti.table;nt.push(to);let fn=Ti.on?WOe(Ti.on,Ee):"1 = 1";Xn+=` ${Ti.type.toUpperCase()} JOIN ${to} ON ${fn}`}if(Y.whereConditions&&Y.whereConditions.length>0){let Ti=Y.whereConditions.map(Oe=>{let to=fr(Oe.column);return Oe.operator==="IS NULL"||Oe.operator==="IS NOT NULL"?`${to} ${Oe.operator}`:`${to} ${Oe.operator} ${jt(Oe.value,Oe.column)}`}).join(" AND ");Xn+=` WHERE ${Ti}`}if(Y.rawWhereClauses&&Y.rawWhereClauses.length>0){let Ti=Y.rawWhereClauses.join(" AND ");Y.whereConditions&&Y.whereConditions.length>0?Xn+=` AND ${Ti}`:Xn+=` WHERE ${Ti}`}if(Y.groupBy&&Y.groupBy.length>0){let Ti=Y.groupBy.map(Oe=>{let to=UC(Ee,Oe.table),fn=to?.sqlName||Oe.table,cn=to?.columns.find(_g=>_g.name===Oe.column)?.sqlName||Oe.column;return`${fn}.${cn}`}).join(", ");Xn+=` GROUP BY ${Ti}`}if(Y.orderBy&&Y.orderBy.length>0){let Ti=Y.orderBy.map(Oe=>`${fr(Oe.column)} ${Oe.direction.toUpperCase()}`).join(", ");Xn+=` ORDER BY ${Ti}`}return Y.limit!==void 0&&(Xn+=` LIMIT ${Y.limit}`),Y.offset!==void 0&&(Xn+=` OFFSET ${Y.offset}`),{type:"SELECT",sql:Xn,tables:nt,parameters:yt}}case"insert":{if(!Y.insertValues||Y.insertValues.size===0)return;let Xn=[],Ti=[];for(let[to,fn]of Y.insertValues)Xn.push(fr(to)),Ti.push(jt(fn,to));return{type:"INSERT",sql:`INSERT INTO ${Ve} (${Xn.join(", ")}) VALUES (${Ti.join(", ")})`,tables:nt,parameters:yt}}case"update":{if(!Y.setValues||Y.setValues.size===0)return;let Xn=Array.from(Y.setValues.entries()).map(([Oe,to])=>`${fr(Oe)} = ${jt(to,Oe)}`).join(", "),Ti=`UPDATE ${Ve} SET ${Xn}`;if(Y.whereConditions&&Y.whereConditions.length>0){let Oe=Y.whereConditions.map(to=>{let fn=fr(to.column);return to.operator==="IS NULL"||to.operator==="IS NOT NULL"?`${fn} ${to.operator}`:`${fn} ${to.operator} ${jt(to.value,to.column)}`}).join(" AND ");Ti+=` WHERE ${Oe}`}return{type:"UPDATE",sql:Ti,tables:nt,parameters:yt}}case"delete":{let Xn=`DELETE FROM ${Ve}`;if(Y.whereConditions&&Y.whereConditions.length>0){let Ti=Y.whereConditions.map(Oe=>{let to=fr(Oe.column);return Oe.operator==="IS NULL"||Oe.operator==="IS NOT NULL"?`${to} ${Oe.operator}`:`${to} ${Oe.operator} ${jt(Oe.value,Oe.column)}`}).join(" AND ");Xn+=` WHERE ${Ti}`}return{type:"DELETE",sql:Xn,tables:nt,parameters:yt}}}}function dhe(Y,Ee,Pe){if(!Po.default.isTaggedTemplateExpression(Y))return;let Ve=Y.tag;if(!Po.default.isIdentifier(Ve)||Ve.text!=="sql")return;let nt=Y.template;if(Po.default.isNoSubstitutionTemplateLiteral(nt))return nt.text.trim();if(Po.default.isTemplateExpression(nt)){let yt=nt.head.text;for(let Lt of nt.templateSpans)yt+=Ugt(Lt.expression,Ee,Pe),yt+=Lt.literal.text;return yt.replace(/\s+/g," ").trim()}}function Ugt(Y,Ee,Pe){if(Po.default.isPropertyAccessExpression(Y)){let Ve=vN(Y.expression),nt=Y.name.text;if(Ve){let yt=Pe.get(Ve)||Ve,Lt=UC(Ee,yt);if(Lt){let qt=Lt.columns.find(jt=>jt.name===nt);return`${Lt.sqlName}.${qt?.sqlName||nt}`}return`${yt}.${nt}`}}return Y.getText()}function LOe(Y,Ee,Pe){return Y.slice(Ee,Pe).replace(/\s+/g," ").trim()}function VOe(Y){let Ee=qgt(Y);if(!Ee)return[];let Pe=[],Ve=Y.files.length>0?Y.files:Hgt(Y.root);for(let nt of Ve){let yt=qC.isAbsolute(nt)?nt:qC.join(Y.root,nt);if(_j.existsSync(yt))try{let Lt=Ee.extractFromFile(yt);Lt.length>0&&Pe.push({file:yt,queries:Lt})}catch{}}return Pe}function qgt(Y){if((Y.orm||"drizzle")==="drizzle")return Y.schema?ROe(Y.schema):void 0}function Hgt(Y){let Ee=qC.join(Y,"app","routes");if(!_j.existsSync(Ee))return[];let Pe=[],Ve=_j.readdirSync(Ee,{withFileTypes:!0});for(let nt of Ve)nt.isFile()&&(nt.name.endsWith(".tsx")||nt.name.endsWith(".ts"))&&Pe.push(qC.join(Ee,nt.name));return Pe}function UOe(Y,Ee){if(Y.length===0)return"No SQL queries found.";let Pe=[],Ve=0;for(let nt of Y){let yt=qC.relative(Ee,nt.file);for(let Lt of nt.queries){if(Ve++,Pe.push(`File: ${yt}:${Lt.location.line}:${Lt.location.column}`),Pe.push(` ${Lt.sql}`),Lt.parameters.length>0){Pe.push(" Parameters:");for(let qt of Lt.parameters){let jt=qt.columnType?` (${qt.columnType})`:"";Pe.push(` $${qt.position}: ${qt.source}${jt}`)}}Pe.push("")}}return Pe.unshift(`Found ${Ve} SQL ${Ve===1?"query":"queries"}:
|
|
439
439
|
`),Pe.join(`
|
|
440
|
-
`)}function qOe(Y,Ee){let Pe=Y.flatMap(Ve=>Ve.queries.map(nt=>({...nt,location:{...nt.location,file:qC.relative(Ee,nt.location.file)}})));return{totalQueries:Pe.length,queries:Pe}}function $gt(){return"0.
|
|
440
|
+
`)}function qOe(Y,Ee){let Pe=Y.flatMap(Ve=>Ve.queries.map(nt=>({...nt,location:{...nt.location,file:qC.relative(Ee,nt.location.file)}})));return{totalQueries:Pe.length,queries:Pe}}function $gt(){return"0.9.0"}function Ggt(){let Y=process.argv.slice(2);if(Y[0]==="sql"){Xgt(Y.slice(1));return}let Pe=Zgt(Y);if(Pe.version&&(console.log($gt()),process.exit(0)),Pe.help&&(Kgt(),process.exit(0)),Pe.checks.length>0){let yt=new Set(uj),Lt=[...new Set(Pe.checks.filter(qt=>!yt.has(qt)))];if(Lt.length>0){for(let qt of Lt){let jt=VC(qt,uj),fr=jt?` Did you mean "${jt}"?`:"";console.error(`Warning: Unknown check "${qt}".${fr}`)}console.error(`Valid checks: ${uj.join(", ")}`),console.error(`Aliases: "defaults" (${lj.join(", ")}), "all"`)}}let Ve=DOe(Pe);if(Pe.fix||Pe.dryRun){let yt=wOe(Ve.issues,Pe.dryRun??!1);Pe.format==="json"?console.log(JSON.stringify({...Ve,fixResult:yt},null,2)):eht(yt,Pe.dryRun??!1),yt.unfixableIssues.filter(qt=>qt.severity==="error").length>0&&process.exit(1);return}if(Pe.format==="json"){let yt=IOe(Ve);console.log(JSON.stringify(yt,null,2))}else console.log(NOe(Ve.issues));Ve.issues.filter(yt=>yt.severity==="error").length>0&&process.exit(1)}function Qgt(Y){let Ee={help:!1,orm:"",format:"text",root:process.cwd(),files:[]},Pe=0;for(;Pe<Y.length;){let Ve=Y[Pe];if(Ve==="--help"||Ve==="-h"){Ee.help=!0,Pe++;continue}if(Ve==="--drizzle"){Ee.orm="drizzle",Pe++;continue}if(Ve==="--drizzle-schema"){let nt=Y[Pe+1];nt&&(Ee.drizzleSchemaPath=HC.resolve(nt)),Pe+=2;continue}if(Ve==="--format"||Ve==="-f"){let nt=Y[Pe+1];(nt==="json"||nt==="text")&&(Ee.format=nt),Pe+=2;continue}if(Ve==="--root"||Ve==="-r"){let nt=Y[Pe+1];nt&&(Ee.root=HC.resolve(nt)),Pe+=2;continue}Ve.startsWith("-")||Ee.files.push(Ve),Pe++}return Ee}function Xgt(Y){let Ee=Qgt(Y);Ee.help&&(Ygt(),process.exit(0)),Ee.orm||(console.error("Error: You must specify an ORM. Use --drizzle to analyze Drizzle ORM queries."),process.exit(1)),Ee.orm!=="drizzle"&&(console.error(`Error: Unsupported ORM '${Ee.orm}'. Currently only --drizzle is supported.`),process.exit(1));let Pe=Ee.drizzleSchemaPath||UX(Ee.root);Pe||(console.error("Error: Could not find Drizzle schema. Use --drizzle-schema to specify the path."),process.exit(1));let Ve;try{Ve=qX(Pe)}catch(yt){let Lt=yt instanceof Error?yt.message:String(yt);console.error(`Error parsing Drizzle schema: ${Lt}`),process.exit(1)}let nt=VOe({root:Ee.root,files:Ee.files,schema:Ve});Ee.format==="json"?console.log(JSON.stringify(qOe(nt,Ee.root),null,2)):console.log(UOe(nt,Ee.root))}function Ygt(){console.log(`
|
|
441
441
|
rr sql - Extract and list SQL queries from ORM code
|
|
442
442
|
|
|
443
443
|
USAGE:
|
|
@@ -487,8 +487,8 @@ OPTIONS:
|
|
|
487
487
|
-v, --version Show version number
|
|
488
488
|
-f, --format <format> Output format: text (default) or json
|
|
489
489
|
-c, --check <checks> Comma-separated list of checks to run
|
|
490
|
-
Aliases: "defaults" (links, loader, params, interactivity, hydration), "all"
|
|
491
|
-
Optional:
|
|
490
|
+
Aliases: "defaults" (links, forms, loader, params, interactivity, hydration), "all"
|
|
491
|
+
Optional: drizzle
|
|
492
492
|
-r, --root <path> Project root directory containing the app/ folder (default: cwd)
|
|
493
493
|
--fix Automatically fix issues where possible
|
|
494
494
|
--dry-run Show what would be fixed without modifying files
|
|
@@ -504,8 +504,8 @@ EXAMPLES:
|
|
|
504
504
|
# Run only link and form checks
|
|
505
505
|
rr --check links,forms
|
|
506
506
|
|
|
507
|
-
# Run default checks plus
|
|
508
|
-
rr --check defaults,
|
|
507
|
+
# Run default checks plus drizzle
|
|
508
|
+
rr --check defaults,drizzle
|
|
509
509
|
|
|
510
510
|
# Run all checks (including optional ones)
|
|
511
511
|
rr --check all
|
package/dist/index.js
CHANGED
|
@@ -431,7 +431,7 @@ Project '${_.projectName}' (${yw[_.projectKind]}) ${o}
|
|
|
431
431
|
`&&(!_||_.length===0||Ftt(_,o))){let{lineText:u,absolutePosition:g}=s.textStorage.getAbsolutePositionAndLineText(t.line);if(u&&u.search("\\S")<0){let d=i.getIndentationAtPosition(r,o,c),h=0,S,x;for(S=0,x=u.length;S<x;S++)if(u.charAt(S)===" ")h++;else if(u.charAt(S)===" ")h+=c.tabSize;else break;if(d!==h){let k=g+S;_.push({span:Vc(g,k),newText:gl.getIndentationString(d,c)})}}}if(_)return _.map(u=>({start:s.positionToLineOffset(u.span.start),end:s.positionToLineOffset(fc(u.span)),newText:u.newText?u.newText:""}))}getCompletions(t,r){let{file:i,project:s}=this.getFileAndProject(t),o=this.projectService.getScriptInfoForNormalizedPath(i),c=this.getPosition(t,o),_=s.getLanguageService().getCompletionsAtPosition(i,c,{...Gfe(this.getPreferences(i)),triggerCharacter:t.triggerCharacter,triggerKind:t.triggerKind,includeExternalModuleExports:t.includeExternalModuleExports,includeInsertTextCompletions:t.includeInsertTextCompletions},s.projectService.getFormatCodeOptions(i));if(_===void 0)return;if(r==="completions-full")return _;let u=t.prefix||"",g=Ui(_.entries,h=>{if(_.isMemberCompletion||Zi(h.name.toLowerCase(),u.toLowerCase())){let S=h.replacementSpan?Qm(h.replacementSpan,o):void 0;return{...h,replacementSpan:S,hasAction:h.hasAction||void 0,symbol:void 0}}});return r==="completions"?(_.metadata&&(g.metadata=_.metadata),g):{..._,optionalReplacementSpan:_.optionalReplacementSpan&&Qm(_.optionalReplacementSpan,o),entries:g}}getCompletionEntryDetails(t,r){let{file:i,project:s}=this.getFileAndProject(t),o=this.projectService.getScriptInfoForNormalizedPath(i),c=this.getPosition(t,o),_=s.projectService.getFormatCodeOptions(i),u=!!this.getPreferences(i).displayPartsForJSDoc,g=Ui(t.entryNames,d=>{let{name:h,source:S,data:x}=typeof d=="string"?{name:d,source:void 0,data:void 0}:d;return s.getLanguageService().getCompletionEntryDetails(i,c,h,_,S,this.getPreferences(i),x?Ks(x,Gtt):void 0)});return r?u?g:g.map(d=>({...d,tags:this.mapJSDocTagInfo(d.tags,s,!1)})):g.map(d=>({...d,codeActions:En(d.codeActions,h=>this.mapCodeAction(h)),documentation:this.mapDisplayParts(d.documentation,s),tags:this.mapJSDocTagInfo(d.tags,s,u)}))}getCompileOnSaveAffectedFileList(t){let r=this.getProjects(t,!0,!0),i=this.projectService.getScriptInfo(t.file);return i?Ltt(i,s=>this.projectService.getScriptInfoForPath(s),r,(s,o)=>{if(!s.compileOnSaveEnabled||!s.languageServiceEnabled||s.isOrphan())return;let c=s.getCompilationSettings();if(!(c.noEmit||Hl(o.fileName)&&!Itt(c)))return{projectFileName:s.getProjectName(),fileNames:s.getCompileOnSaveAffectedFileList(o),projectUsesOutFile:!!c.outFile}}):Ol}emitFile(t){let{file:r,project:i}=this.getFileAndProject(t);if(i||s0.ThrowNoProject(),!i.languageServiceEnabled)return t.richResponse?{emitSkipped:!0,diagnostics:[]}:!1;let s=i.getScriptInfo(r),{emitSkipped:o,diagnostics:c}=i.emitFile(s,(_,u,g)=>this.host.writeFile(_,u,g));return t.richResponse?{emitSkipped:o,diagnostics:t.includeLinePosition?this.convertToDiagnosticsWithLinePositionFromDiagnosticFile(c):c.map(_=>S8(_,!0))}:!o}getSignatureHelpItems(t,r){let{file:i,project:s}=this.getFileAndProject(t),o=this.projectService.getScriptInfoForNormalizedPath(i),c=this.getPosition(t,o),_=s.getLanguageService().getSignatureHelpItems(i,c,t),u=!!this.getPreferences(i).displayPartsForJSDoc;if(_&&r){let g=_.applicableSpan;return{..._,applicableSpan:{start:o.positionToLineOffset(g.start),end:o.positionToLineOffset(g.start+g.length)},items:this.mapSignatureHelpItems(_.items,s,u)}}else return u||!_?_:{..._,items:_.items.map(g=>({...g,tags:this.mapJSDocTagInfo(g.tags,s,!1)}))}}toPendingErrorCheck(t){let r=po(t),i=this.projectService.tryGetDefaultProjectForFile(r);return i&&{fileName:r,project:i}}getDiagnostics(t,r,i){this.suppressDiagnosticEvents||i.length>0&&this.updateErrorCheck(t,i,r)}change(t){let r=this.projectService.getScriptInfo(t.file);E.assert(!!r),r.textStorage.switchToScriptVersionCache();let i=r.lineOffsetToPosition(t.line,t.offset),s=r.lineOffsetToPosition(t.endLine,t.endOffset);i>=0&&(this.changeSeq++,this.projectService.applyChangesToFile(r,YQ({span:{start:i,length:s-i},newText:t.insertString})))}reload(t){let r=po(t.file),i=t.tmpfile===void 0?void 0:po(t.tmpfile),s=this.projectService.getScriptInfoForNormalizedPath(r);s&&(this.changeSeq++,s.reloadFromFile(i))}saveToTmp(t,r){let i=this.projectService.getScriptInfo(t);i&&i.saveTo(r)}closeClientFile(t){if(!t)return;let r=na(t);this.projectService.closeClientFile(r)}mapLocationNavigationBarItems(t,r){return En(t,i=>({text:i.text,kind:i.kind,kindModifiers:i.kindModifiers,spans:i.spans.map(s=>Qm(s,r)),childItems:this.mapLocationNavigationBarItems(i.childItems,r),indent:i.indent}))}getNavigationBarItems(t,r){let{file:i,languageService:s}=this.getFileAndLanguageServiceForSyntacticOperation(t),o=s.getNavigationBarItems(i);return o?r?this.mapLocationNavigationBarItems(o,this.projectService.getScriptInfoForNormalizedPath(i)):o:void 0}toLocationNavigationTree(t,r){return{text:t.text,kind:t.kind,kindModifiers:t.kindModifiers,spans:t.spans.map(i=>Qm(i,r)),nameSpan:t.nameSpan&&Qm(t.nameSpan,r),childItems:En(t.childItems,i=>this.toLocationNavigationTree(i,r))}}getNavigationTree(t,r){let{file:i,languageService:s}=this.getFileAndLanguageServiceForSyntacticOperation(t),o=s.getNavigationTree(i);return o?r?this.toLocationNavigationTree(o,this.projectService.getScriptInfoForNormalizedPath(i)):o:void 0}getNavigateToItems(t,r){let i=this.getFullNavigateToItems(t);return r?Oa(i,({project:s,navigateToItems:o})=>o.map(c=>{let _=s.getScriptInfo(c.fileName),u={name:c.name,kind:c.kind,kindModifiers:c.kindModifiers,isCaseSensitive:c.isCaseSensitive,matchKind:c.matchKind,file:c.fileName,start:_.positionToLineOffset(c.textSpan.start),end:_.positionToLineOffset(fc(c.textSpan))};return c.kindModifiers&&c.kindModifiers!==""&&(u.kindModifiers=c.kindModifiers),c.containerName&&c.containerName.length>0&&(u.containerName=c.containerName),c.containerKind&&c.containerKind.length>0&&(u.containerKind=c.containerKind),u})):Oa(i,({navigateToItems:s})=>s)}getFullNavigateToItems(t){let{currentFileOnly:r,searchValue:i,maxResultCount:s,projectFileName:o}=t;if(r){E.assertIsDefined(t.file);let{file:S,project:x}=this.getFileAndProject(t);return[{project:x,navigateToItems:x.getLanguageService().getNavigateToItems(i,s,S)}]}let c=this.getHostPreferences(),_=[],u=new Map;if(!t.file&&!o)this.projectService.loadAncestorProjectTree(),this.projectService.forEachEnabledProject(S=>g(S));else{let S=this.getProjects(t);TNe(S,void 0,x=>g(x))}return _;function g(S){let x=S.getLanguageService().getNavigateToItems(i,s,void 0,S.isNonTsProject(),c.excludeLibrarySymbolsInNavTo),k=Or(x,D=>d(D)&&!x$(vw(D),S));k.length&&_.push({project:S,navigateToItems:k})}function d(S){let x=S.name;if(!u.has(x))return u.set(x,[S]),!0;let k=u.get(x);for(let D of k)if(h(D,S))return!1;return k.push(S),!0}function h(S,x){return S===x?!0:!S||!x?!1:S.containerKind===x.containerKind&&S.containerName===x.containerName&&S.fileName===x.fileName&&S.isCaseSensitive===x.isCaseSensitive&&S.kind===x.kind&&S.kindModifiers===x.kindModifiers&&S.matchKind===x.matchKind&&S.name===x.name&&S.textSpan.start===x.textSpan.start&&S.textSpan.length===x.textSpan.length}}getSupportedCodeFixes(t){if(!t)return BH();if(t.file){let{file:i,project:s}=this.getFileAndProject(t);return s.getLanguageService().getSupportedCodeFixes(i)}let r=this.getProject(t.projectFileName);return r||s0.ThrowNoProject(),r.getLanguageService().getSupportedCodeFixes()}isLocation(t){return t.line!==void 0}extractPositionOrRange(t,r){let i,s;return this.isLocation(t)?i=o(t):s=this.getRange(t,r),E.checkDefined(i===void 0?s:i);function o(c){return c.position!==void 0?c.position:r.lineOffsetToPosition(c.line,c.offset)}}getRange(t,r){let{startPosition:i,endPosition:s}=this.getStartAndEndPosition(t,r);return{pos:i,end:s}}getApplicableRefactors(t){let{file:r,project:i}=this.getFileAndProject(t),s=i.getScriptInfoForNormalizedPath(r);return i.getLanguageService().getApplicableRefactors(r,this.extractPositionOrRange(t,s),this.getPreferences(r),t.triggerReason,t.kind,t.includeInteractiveActions).map(c=>({...c,actions:c.actions.map(_=>({..._,range:_.range?{start:OD({line:_.range.start.line,character:_.range.start.offset}),end:OD({line:_.range.end.line,character:_.range.end.offset})}:void 0}))}))}getEditsForRefactor(t,r){let{file:i,project:s}=this.getFileAndProject(t),o=s.getScriptInfoForNormalizedPath(i),c=s.getLanguageService().getEditsForRefactor(i,this.getFormatOptions(i),this.extractPositionOrRange(t,o),t.refactor,t.action,this.getPreferences(i),t.interactiveRefactorArguments);if(c===void 0)return{edits:[]};if(r){let{renameFilename:_,renameLocation:u,edits:g}=c,d;if(_!==void 0&&u!==void 0){let h=s.getScriptInfoForNormalizedPath(po(_));d=ppe(Lk(h.getSnapshot()),_,u,g)}return{renameLocation:d,renameFilename:_,edits:this.mapTextChangesToCodeEdits(g),notApplicableReason:c.notApplicableReason}}return c}getMoveToRefactoringFileSuggestions(t){let{file:r,project:i}=this.getFileAndProject(t),s=i.getScriptInfoForNormalizedPath(r);return i.getLanguageService().getMoveToRefactoringFileSuggestions(r,this.extractPositionOrRange(t,s),this.getPreferences(r))}preparePasteEdits(t){let{file:r,project:i}=this.getFileAndProject(t);return i.getLanguageService().preparePasteEditsForFile(r,t.copiedTextSpan.map(s=>this.getRange({file:r,startLine:s.start.line,startOffset:s.start.offset,endLine:s.end.line,endOffset:s.end.offset},this.projectService.getScriptInfoForNormalizedPath(r))))}getPasteEdits(t){let{file:r,project:i}=this.getFileAndProject(t);if(hw(r))return;let s=t.copiedFrom?{file:t.copiedFrom.file,range:t.copiedFrom.spans.map(c=>this.getRange({file:t.copiedFrom.file,startLine:c.start.line,startOffset:c.start.offset,endLine:c.end.line,endOffset:c.end.offset},i.getScriptInfoForNormalizedPath(po(t.copiedFrom.file))))}:void 0,o=i.getLanguageService().getPasteEdits({targetFile:r,pastedText:t.pastedText,pasteLocations:t.pasteLocations.map(c=>this.getRange({file:r,startLine:c.start.line,startOffset:c.start.offset,endLine:c.end.line,endOffset:c.end.offset},i.getScriptInfoForNormalizedPath(r))),copiedFrom:s,preferences:this.getPreferences(r)},this.getFormatOptions(r));return o&&this.mapPasteEditsAction(o)}organizeImports(t,r){E.assert(t.scope.type==="file");let{file:i,project:s}=this.getFileAndProject(t.scope.args),o=s.getLanguageService().organizeImports({fileName:i,mode:t.mode??(t.skipDestructiveCodeActions?"SortAndCombine":void 0),type:"file"},this.getFormatOptions(i),this.getPreferences(i));return r?this.mapTextChangesToCodeEdits(o):o}getEditsForFileRename(t,r){let i=po(t.oldFilePath),s=po(t.newFilePath),o=this.getHostFormatOptions(),c=this.getHostPreferences(),_=new Set,u=[];return this.projectService.loadAncestorProjectTree(),this.projectService.forEachEnabledProject(g=>{let d=g.getLanguageService().getEditsForFileRename(i,s,o,c),h=[];for(let S of d)_.has(S.fileName)||(u.push(S),h.push(S.fileName));for(let S of h)_.add(S)}),r?u.map(g=>this.mapTextChangeToCodeEdit(g)):u}getCodeFixes(t,r){let{file:i,project:s}=this.getFileAndProject(t),o=s.getScriptInfoForNormalizedPath(i),{startPosition:c,endPosition:_}=this.getStartAndEndPosition(t,o),u;try{u=s.getLanguageService().getCodeFixesAtPosition(i,c,_,t.errorCodes,this.getFormatOptions(i),this.getPreferences(i))}catch(g){let d=g instanceof Error?g:new Error(g),h=s.getLanguageService(),S=[...h.getSyntacticDiagnostics(i),...h.getSemanticDiagnostics(i),...h.getSuggestionDiagnostics(i)].filter(k=>ON(c,_-c,k.start,k.length)).map(k=>k.code),x=t.errorCodes.find(k=>!S.includes(k));throw x!==void 0&&(d.message+=`
|
|
432
432
|
Additional information: BADCLIENT: Bad error code, ${x} not found in range ${c}..${_} (found: ${S.join(", ")})`),d}return r?u.map(g=>this.mapCodeFixAction(g)):u}getCombinedCodeFix({scope:t,fixId:r},i){E.assert(t.type==="file");let{file:s,project:o}=this.getFileAndProject(t.args),c=o.getLanguageService().getCombinedCodeFix({type:"file",fileName:s},r,this.getFormatOptions(s),this.getPreferences(s));return i?{changes:this.mapTextChangesToCodeEdits(c.changes),commands:c.commands}:c}applyCodeActionCommand(t){let r=t.command;for(let i of vT(r)){let{file:s,project:o}=this.getFileAndProject(i);o.getLanguageService().applyCodeActionCommand(i,this.getFormatOptions(s)).then(c=>{},c=>{})}return{}}getStartAndEndPosition(t,r){let i,s;return t.startPosition!==void 0?i=t.startPosition:(i=r.lineOffsetToPosition(t.startLine,t.startOffset),t.startPosition=i),t.endPosition!==void 0?s=t.endPosition:(s=r.lineOffsetToPosition(t.endLine,t.endOffset),t.endPosition=s),{startPosition:i,endPosition:s}}mapCodeAction({description:t,changes:r,commands:i}){return{description:t,changes:this.mapTextChangesToCodeEdits(r),commands:i}}mapCodeFixAction({fixName:t,description:r,changes:i,commands:s,fixId:o,fixAllDescription:c}){return{fixName:t,description:r,changes:this.mapTextChangesToCodeEdits(i),commands:s,fixId:o,fixAllDescription:c}}mapPasteEditsAction({edits:t,fixId:r}){return{edits:this.mapTextChangesToCodeEdits(t),fixId:r}}mapTextChangesToCodeEdits(t){return t.map(r=>this.mapTextChangeToCodeEdit(r))}mapTextChangeToCodeEdit(t){let r=this.projectService.getScriptInfoOrConfig(t.fileName);return!!t.isNewFile==!!r&&(r||this.projectService.logErrorForScriptInfoNotFound(t.fileName),E.fail("Expected isNewFile for (only) new files. "+JSON.stringify({isNewFile:!!t.isNewFile,hasScriptInfo:!!r}))),r?{fileName:t.fileName,textChanges:t.textChanges.map(i=>ztt(i,r))}:Utt(t)}convertTextChangeToCodeEdit(t,r){return{start:r.positionToLineOffset(t.span.start),end:r.positionToLineOffset(t.span.start+t.span.length),newText:t.newText?t.newText:""}}getBraceMatching(t,r){let{file:i,languageService:s}=this.getFileAndLanguageServiceForSyntacticOperation(t),o=this.projectService.getScriptInfoForNormalizedPath(i),c=this.getPosition(t,o),_=s.getBraceMatchingAtPosition(i,c);return _?r?_.map(u=>Qm(u,o)):_:void 0}getDiagnosticsForProject(t,r,i){if(this.suppressDiagnosticEvents)return;let{fileNames:s,languageServiceDisabled:o}=this.getProjectInfoWorker(i,void 0,!0,void 0,!0);if(o)return;let c=s.filter(D=>!D.includes("lib.d.ts"));if(c.length===0)return;let _=[],u=[],g=[],d=[],h=po(i),S=this.projectService.ensureDefaultProjectForFile(h);for(let D of c)this.getCanonicalFileName(D)===this.getCanonicalFileName(i)?_.push(D):this.projectService.getScriptInfo(D).isScriptOpen()?u.push(D):Hl(D)?d.push(D):g.push(D);let k=[..._,...u,...g,...d].map(D=>({fileName:D,project:S}));this.updateErrorCheck(t,k,r,!1)}configurePlugin(t){this.projectService.configurePlugin(t)}getSmartSelectionRange(t,r){let{locations:i}=t,{file:s,languageService:o}=this.getFileAndLanguageServiceForSyntacticOperation(t),c=E.checkDefined(this.projectService.getScriptInfo(s));return En(i,_=>{let u=this.getPosition(_,c),g=o.getSmartSelectionRange(s,u);return r?this.mapSelectionRange(g,c):g})}toggleLineComment(t,r){let{file:i,languageService:s}=this.getFileAndLanguageServiceForSyntacticOperation(t),o=this.projectService.getScriptInfo(i),c=this.getRange(t,o),_=s.toggleLineComment(i,c);if(r){let u=this.projectService.getScriptInfoForNormalizedPath(i);return _.map(g=>this.convertTextChangeToCodeEdit(g,u))}return _}toggleMultilineComment(t,r){let{file:i,languageService:s}=this.getFileAndLanguageServiceForSyntacticOperation(t),o=this.projectService.getScriptInfoForNormalizedPath(i),c=this.getRange(t,o),_=s.toggleMultilineComment(i,c);if(r){let u=this.projectService.getScriptInfoForNormalizedPath(i);return _.map(g=>this.convertTextChangeToCodeEdit(g,u))}return _}commentSelection(t,r){let{file:i,languageService:s}=this.getFileAndLanguageServiceForSyntacticOperation(t),o=this.projectService.getScriptInfoForNormalizedPath(i),c=this.getRange(t,o),_=s.commentSelection(i,c);if(r){let u=this.projectService.getScriptInfoForNormalizedPath(i);return _.map(g=>this.convertTextChangeToCodeEdit(g,u))}return _}uncommentSelection(t,r){let{file:i,languageService:s}=this.getFileAndLanguageServiceForSyntacticOperation(t),o=this.projectService.getScriptInfoForNormalizedPath(i),c=this.getRange(t,o),_=s.uncommentSelection(i,c);if(r){let u=this.projectService.getScriptInfoForNormalizedPath(i);return _.map(g=>this.convertTextChangeToCodeEdit(g,u))}return _}mapSelectionRange(t,r){let i={textSpan:Qm(t.textSpan,r)};return t.parent&&(i.parent=this.mapSelectionRange(t.parent,r)),i}getScriptInfoFromProjectService(t){let r=po(t),i=this.projectService.getScriptInfoForNormalizedPath(r);return i||(this.projectService.logErrorForScriptInfoNotFound(r),s0.ThrowNoProject())}toProtocolCallHierarchyItem(t){let r=this.getScriptInfoFromProjectService(t.file);return{name:t.name,kind:t.kind,kindModifiers:t.kindModifiers,file:t.file,containerName:t.containerName,span:Qm(t.span,r),selectionSpan:Qm(t.selectionSpan,r)}}toProtocolCallHierarchyIncomingCall(t){let r=this.getScriptInfoFromProjectService(t.from.file);return{from:this.toProtocolCallHierarchyItem(t.from),fromSpans:t.fromSpans.map(i=>Qm(i,r))}}toProtocolCallHierarchyOutgoingCall(t,r){return{to:this.toProtocolCallHierarchyItem(t.to),fromSpans:t.fromSpans.map(i=>Qm(i,r))}}prepareCallHierarchy(t){let{file:r,project:i}=this.getFileAndProject(t),s=this.projectService.getScriptInfoForNormalizedPath(r);if(s){let o=this.getPosition(t,s),c=i.getLanguageService().prepareCallHierarchy(r,o);return c&&Xq(c,_=>this.toProtocolCallHierarchyItem(_))}}provideCallHierarchyIncomingCalls(t){let{file:r,project:i}=this.getFileAndProject(t),s=this.getScriptInfoFromProjectService(r);return i.getLanguageService().provideCallHierarchyIncomingCalls(r,this.getPosition(t,s)).map(c=>this.toProtocolCallHierarchyIncomingCall(c))}provideCallHierarchyOutgoingCalls(t){let{file:r,project:i}=this.getFileAndProject(t),s=this.getScriptInfoFromProjectService(r);return i.getLanguageService().provideCallHierarchyOutgoingCalls(r,this.getPosition(t,s)).map(c=>this.toProtocolCallHierarchyOutgoingCall(c,s))}getCanonicalFileName(t){let r=this.host.useCaseSensitiveFileNames?t:Jy(t);return na(r)}exit(){}notRequired(t){return t&&this.doOutput(void 0,t.command,t.seq,!0,this.performanceData),{responseRequired:!1,performanceData:this.performanceData}}requiredResponse(t){return{response:t,responseRequired:!0,performanceData:this.performanceData}}addProtocolHandler(t,r){if(this.handlers.has(t))throw new Error(`Protocol handler already exists for command "${t}"`);this.handlers.set(t,r)}setCurrentRequest(t){E.assert(this.currentRequestId===void 0),this.currentRequestId=t,this.cancellationToken.setRequest(t)}resetCurrentRequest(t){E.assert(this.currentRequestId===t),this.currentRequestId=void 0,this.cancellationToken.resetRequest(t)}executeWithRequestId(t,r,i){let s=this.performanceData;try{return this.performanceData=i,this.setCurrentRequest(t),r()}finally{this.resetCurrentRequest(t),this.performanceData=s}}executeCommand(t){let r=this.handlers.get(t.command);if(r){let i=this.executeWithRequestId(t.seq,()=>r(t),void 0);return this.projectService.enableRequestedPlugins(),i}else return this.logger.msg(`Unrecognized JSON command:${Uv(t)}`,"Err"),this.doOutput(void 0,"unknown",t.seq,!1,void 0,`Unrecognized JSON command: ${t.command}`),{responseRequired:!1}}onMessage(t){var r,i,s,o,c,_,u;this.gcTimer.scheduleCollect();let g,d=this.performanceData;this.logger.hasLevel(2)&&(g=this.hrtime(),this.logger.hasLevel(3)&&this.logger.info(`request:${V4(this.toStringMessage(t))}`));let h,S;try{h=this.parseMessage(t),S=h.arguments&&h.arguments.file?h.arguments:void 0,(r=mr)==null||r.instant(mr.Phase.Session,"request",{seq:h.seq,command:h.command}),(i=mr)==null||i.push(mr.Phase.Session,"executeCommand",{seq:h.seq,command:h.command},!0);let{response:x,responseRequired:k,performanceData:D}=this.executeCommand(h);if((s=mr)==null||s.pop(),this.logger.hasLevel(2)){let w=Att(this.hrtime(g)).toFixed(4);k?this.logger.perftrc(`${h.seq}::${h.command}: elapsed time (in milliseconds) ${w}`):this.logger.perftrc(`${h.seq}::${h.command}: async elapsed time (in milliseconds) ${w}`)}(o=mr)==null||o.instant(mr.Phase.Session,"response",{seq:h.seq,command:h.command,success:!!x}),x?this.doOutput(x,h.command,h.seq,!0,D):k&&this.doOutput(void 0,h.command,h.seq,!1,D,"No content available.")}catch(x){if((c=mr)==null||c.popAll(),x instanceof B6){(_=mr)==null||_.instant(mr.Phase.Session,"commandCanceled",{seq:h?.seq,command:h?.command}),this.doOutput({canceled:!0},h.command,h.seq,!0,this.performanceData);return}this.logErrorWorker(x,this.toStringMessage(t),S),(u=mr)==null||u.instant(mr.Phase.Session,"commandError",{seq:h?.seq,command:h?.command,message:x.message}),this.doOutput(void 0,h?h.command:"unknown",h?h.seq:0,!1,this.performanceData,"Error processing request. "+x.message+`
|
|
433
433
|
`+x.stack)}finally{this.performanceData=d}}parseMessage(t){return JSON.parse(t)}toStringMessage(t){return t}getFormatOptions(t){return this.projectService.getFormatCodeOptions(t)}getPreferences(t){return this.projectService.getPreferences(t)}getHostFormatOptions(){return this.projectService.getHostFormatCodeOptions()}getHostPreferences(){return this.projectService.getHostPreferences()}};function NNe(e){let t=e.diagnosticsDuration&&ps(e.diagnosticsDuration,([r,i])=>({...i,file:r}));return{...e,diagnosticsDuration:t}}function Qm(e,t){return{start:t.positionToLineOffset(e.start),end:t.positionToLineOffset(fc(e))}}function fpe(e,t,r){let i=Qm(e,r),s=t&&Qm(t,r);return s?{...i,contextStart:s.start,contextEnd:s.end}:i}function ztt(e,t){return{start:ANe(t,e.span.start),end:ANe(t,fc(e.span)),newText:e.newText}}function ANe(e,t){return spe(e)?Vtt(e.getLineAndCharacterOfPosition(t)):e.positionToLineOffset(t)}function Wtt(e,t){let r=e.ranges.map(i=>({start:t.positionToLineOffset(i.start),end:t.positionToLineOffset(i.start+i.length)}));return e.wordPattern?{ranges:r,wordPattern:e.wordPattern}:{ranges:r}}function Vtt(e){return{line:e.line+1,offset:e.character+1}}function Utt(e){E.assert(e.textChanges.length===1);let t=La(e.textChanges);return E.assert(t.span.start===0&&t.span.length===0),{fileName:e.fileName,textChanges:[{start:{line:0,offset:0},end:{line:0,offset:0},newText:t.newText}]}}function ppe(e,t,r,i){let s=qtt(e,t,i),{line:o,character:c}=XC(ET(s),r);return{line:o+1,offset:c+1}}function qtt(e,t,r){for(let{fileName:i,textChanges:s}of r)if(i===t)for(let o=s.length-1;o>=0;o--){let{newText:c,span:{start:_,length:u}}=s[o];e=e.slice(0,_)+c+e.slice(_+u)}return e}function INe(e,{fileName:t,textSpan:r,contextSpan:i,isWriteAccess:s,isDefinition:o},{disableLineTextInReferences:c}){let _=E.checkDefined(e.getScriptInfo(t)),u=fpe(r,i,_),g=c?void 0:Htt(_,u);return{file:t,...u,lineText:g,isWriteAccess:s,isDefinition:o}}function Htt(e,t){let r=e.lineToTextSpan(t.start.line-1);return e.getSnapshot().getText(r.start,fc(r)).replace(/\r|\n/g,"")}function Gtt(e){return e===void 0||e&&typeof e=="object"&&typeof e.exportName=="string"&&(e.fileName===void 0||typeof e.fileName=="string")&&(e.ambientModuleName===void 0||typeof e.ambientModuleName=="string"&&(e.isPackageJsonImport===void 0||typeof e.isPackageJsonImport=="boolean"))}var LD=4,dpe=(e=>(e[e.PreStart=0]="PreStart",e[e.Start=1]="Start",e[e.Entire=2]="Entire",e[e.Mid=3]="Mid",e[e.End=4]="End",e[e.PostEnd=5]="PostEnd",e))(dpe||{}),$tt=class{constructor(){this.goSubtree=!0,this.lineIndex=new x8,this.endBranch=[],this.state=2,this.initialText="",this.trailingText="",this.lineIndex.root=new MD,this.startPath=[this.lineIndex.root],this.stack=[this.lineIndex.root]}get done(){return!1}insertLines(e,t){t&&(this.trailingText=""),e?e=this.initialText+e+this.trailingText:e=this.initialText+this.trailingText;let i=x8.linesFromText(e).lines;i.length>1&&i[i.length-1]===""&&i.pop();let s,o;for(let _=this.endBranch.length-1;_>=0;_--)this.endBranch[_].updateCounts(),this.endBranch[_].charCount()===0&&(o=this.endBranch[_],_>0?s=this.endBranch[_-1]:s=this.branchNode);o&&s.remove(o);let c=this.startPath[this.startPath.length-1];if(i.length>0)if(c.text=i[0],i.length>1){let _=new Array(i.length-1),u=c;for(let h=1;h<i.length;h++)_[h-1]=new DM(i[h]);let g=this.startPath.length-2;for(;g>=0;){let h=this.startPath[g];_=h.insertAt(u,_),g--,u=h}let d=_.length;for(;d>0;){let h=new MD;h.add(this.lineIndex.root),_=h.insertAt(this.lineIndex.root,_),d=_.length,this.lineIndex.root=h}this.lineIndex.root.updateCounts()}else for(let _=this.startPath.length-2;_>=0;_--)this.startPath[_].updateCounts();else{this.startPath[this.startPath.length-2].remove(c);for(let u=this.startPath.length-2;u>=0;u--)this.startPath[u].updateCounts()}return this.lineIndex}post(e,t,r){r===this.lineCollectionAtBranch&&(this.state=4),this.stack.pop()}pre(e,t,r,i,s){let o=this.stack[this.stack.length-1];this.state===2&&s===1&&(this.state=1,this.branchNode=o,this.lineCollectionAtBranch=r);let c;function _(u){return u.isLeaf()?new DM(""):new MD}switch(s){case 0:this.goSubtree=!1,this.state!==4&&o.add(r);break;case 1:this.state===4?this.goSubtree=!1:(c=_(r),o.add(c),this.startPath.push(c));break;case 2:this.state!==4?(c=_(r),o.add(c),this.startPath.push(c)):r.isLeaf()||(c=_(r),o.add(c),this.endBranch.push(c));break;case 3:this.goSubtree=!1;break;case 4:this.state!==4?this.goSubtree=!1:r.isLeaf()||(c=_(r),o.add(c),this.endBranch.push(c));break;case 5:this.goSubtree=!1,this.state!==1&&o.add(r);break}this.goSubtree&&this.stack.push(c)}leaf(e,t,r){this.state===1?this.initialText=r.text.substring(0,e):this.state===2?(this.initialText=r.text.substring(0,e),this.trailingText=r.text.substring(e+t)):this.trailingText=r.text.substring(e+t)}},Xtt=class{constructor(e,t,r){this.pos=e,this.deleteLen=t,this.insertedText=r}getTextChangeRange(){return LN(du(this.pos,this.deleteLen),this.insertedText?this.insertedText.length:0)}},T$=class dT{constructor(){this.changes=[],this.versions=new Array(dT.maxVersions),this.minVersion=0,this.currentVersion=0}versionToIndex(t){if(!(t<this.minVersion||t>this.currentVersion))return t%dT.maxVersions}currentVersionToIndex(){return this.currentVersion%dT.maxVersions}edit(t,r,i){this.changes.push(new Xtt(t,r,i)),(this.changes.length>dT.changeNumberThreshold||r>dT.changeLengthThreshold||i&&i.length>dT.changeLengthThreshold)&&this.getSnapshot()}getSnapshot(){return this._getSnapshot()}_getSnapshot(){let t=this.versions[this.currentVersionToIndex()];if(this.changes.length>0){let r=t.index;for(let i of this.changes)r=r.edit(i.pos,i.deleteLen,i.insertedText);t=new FNe(this.currentVersion+1,this,r,this.changes),this.currentVersion=t.version,this.versions[this.currentVersionToIndex()]=t,this.changes=[],this.currentVersion-this.minVersion>=dT.maxVersions&&(this.minVersion=this.currentVersion-dT.maxVersions+1)}return t}getSnapshotVersion(){return this._getSnapshot().version}getAbsolutePositionAndLineText(t){return this._getSnapshot().index.lineNumberToInfo(t)}lineOffsetToPosition(t,r){return this._getSnapshot().index.absolutePositionOfStartOfLine(t)+(r-1)}positionToLineOffset(t){return this._getSnapshot().index.positionToLineOffset(t)}lineToTextSpan(t){let r=this._getSnapshot().index,{lineText:i,absolutePosition:s}=r.lineNumberToInfo(t+1),o=i!==void 0?i.length:r.absolutePositionOfStartOfLine(t+2)-s;return du(s,o)}getTextChangesBetweenVersions(t,r){if(t<r)if(t>=this.minVersion){let i=[];for(let s=t+1;s<=r;s++){let o=this.versions[this.versionToIndex(s)];for(let c of o.changesSincePreviousVersion)i.push(c.getTextChangeRange())}return YZ(i)}else return;else return e5}getLineCount(){return this._getSnapshot().index.getLineCount()}static fromString(t){let r=new dT,i=new FNe(0,r,new x8);r.versions[r.currentVersion]=i;let s=x8.linesFromText(t);return i.index.load(s.lines),r}};T$.changeNumberThreshold=8,T$.changeLengthThreshold=256,T$.maxVersions=8;var k$=T$,FNe=class MFe{constructor(t,r,i,s=Ol){this.version=t,this.cache=r,this.index=i,this.changesSincePreviousVersion=s}getText(t,r){return this.index.getText(t,r-t)}getLength(){return this.index.getLength()}getChangeRange(t){if(t instanceof MFe&&this.cache===t.cache)return this.version<=t.version?e5:this.cache.getTextChangesBetweenVersions(t.version,this.version)}},x8=class she{constructor(){this.checkEdits=!1}absolutePositionOfStartOfLine(t){return this.lineNumberToInfo(t).absolutePosition}positionToLineOffset(t){let{oneBasedLine:r,zeroBasedColumn:i}=this.root.charOffsetToLineInfo(1,t);return{line:r,offset:i+1}}positionToColumnAndLineText(t){return this.root.charOffsetToLineInfo(1,t)}getLineCount(){return this.root.lineCount()}lineNumberToInfo(t){let r=this.getLineCount();if(t<=r){let{position:i,leaf:s}=this.root.lineNumberToInfo(t,0);return{absolutePosition:i,lineText:s&&s.text}}else return{absolutePosition:this.root.charCount(),lineText:void 0}}load(t){if(t.length>0){let r=[];for(let i=0;i<t.length;i++)r[i]=new DM(t[i]);this.root=she.buildTreeFromBottom(r)}else this.root=new MD}walk(t,r,i){this.root.walk(t,r,i)}getText(t,r){let i="";return r>0&&t<this.root.charCount()&&this.walk(t,r,{goSubtree:!0,done:!1,leaf:(s,o,c)=>{i=i.concat(c.text.substring(s,s+o))}}),i}getLength(){return this.root.charCount()}every(t,r,i){i||(i=this.root.charCount());let s={goSubtree:!0,done:!1,leaf(o,c,_){t(_,o,c)||(this.done=!0)}};return this.walk(r,i-r,s),!s.done}edit(t,r,i){if(this.root.charCount()===0)return E.assert(r===0),i!==void 0?(this.load(she.linesFromText(i).lines),this):void 0;{let s;if(this.checkEdits){let _=this.getText(0,this.root.charCount());s=_.slice(0,t)+i+_.slice(t+r)}let o=new $tt,c=!1;if(t>=this.root.charCount()){t=this.root.charCount()-1;let _=this.getText(t,1);i?i=_+i:i=_,r=0,c=!0}else if(r>0){let _=t+r,{zeroBasedColumn:u,lineText:g}=this.positionToColumnAndLineText(_);u===0&&(r+=g.length,i=i?i+g:g)}if(this.root.walk(t,r,o),o.insertLines(i,c),this.checkEdits){let _=o.lineIndex.getText(0,o.lineIndex.getLength());E.assert(s===_,"buffer edit mismatch")}return o.lineIndex}}static buildTreeFromBottom(t){if(t.length<LD)return new MD(t);let r=new Array(Math.ceil(t.length/LD)),i=0;for(let s=0;s<r.length;s++){let o=Math.min(i+LD,t.length);r[s]=new MD(t.slice(i,o)),i=o}return this.buildTreeFromBottom(r)}static linesFromText(t){let r=ET(t);if(r.length===0)return{lines:[],lineMap:r};let i=new Array(r.length),s=r.length-1;for(let c=0;c<s;c++)i[c]=t.substring(r[c],r[c+1]);let o=t.substring(r[s]);return o.length>0?i[s]=o:i.pop(),{lines:i,lineMap:r}}},MD=class ahe{constructor(t=[]){this.children=t,this.totalChars=0,this.totalLines=0,t.length&&this.updateCounts()}isLeaf(){return!1}updateCounts(){this.totalChars=0,this.totalLines=0;for(let t of this.children)this.totalChars+=t.charCount(),this.totalLines+=t.lineCount()}execWalk(t,r,i,s,o){return i.pre&&i.pre(t,r,this.children[s],this,o),i.goSubtree?(this.children[s].walk(t,r,i),i.post&&i.post(t,r,this.children[s],this,o)):i.goSubtree=!0,i.done}skipChild(t,r,i,s,o){s.pre&&!s.done&&(s.pre(t,r,this.children[i],this,o),s.goSubtree=!0)}walk(t,r,i){if(this.children.length===0)return;let s=0,o=this.children[s].charCount(),c=t;for(;c>=o;)this.skipChild(c,r,s,i,0),c-=o,s++,o=this.children[s].charCount();if(c+r<=o){if(this.execWalk(c,r,i,s,2))return}else{if(this.execWalk(c,o-c,i,s,1))return;let _=r-(o-c);for(s++,o=this.children[s].charCount();_>o;){if(this.execWalk(0,o,i,s,3))return;_-=o,s++,o=this.children[s].charCount()}if(_>0&&this.execWalk(0,_,i,s,4))return}if(i.pre){let _=this.children.length;if(s<_-1)for(let u=s+1;u<_;u++)this.skipChild(0,0,u,i,5)}}charOffsetToLineInfo(t,r){if(this.children.length===0)return{oneBasedLine:t,zeroBasedColumn:r,lineText:void 0};for(let o of this.children){if(o.charCount()>r)return o.isLeaf()?{oneBasedLine:t,zeroBasedColumn:r,lineText:o.text}:o.charOffsetToLineInfo(t,r);r-=o.charCount(),t+=o.lineCount()}let i=this.lineCount();if(i===0)return{oneBasedLine:1,zeroBasedColumn:0,lineText:void 0};let s=E.checkDefined(this.lineNumberToInfo(i,0).leaf);return{oneBasedLine:i,zeroBasedColumn:s.charCount(),lineText:void 0}}lineNumberToInfo(t,r){for(let i of this.children){let s=i.lineCount();if(s>=t)return i.isLeaf()?{position:r,leaf:i}:i.lineNumberToInfo(t,r);t-=s,r+=i.charCount()}return{position:r,leaf:void 0}}splitAfter(t){let r,i=this.children.length;t++;let s=t;if(t<i){for(r=new ahe;t<i;)r.add(this.children[t]),t++;r.updateCounts()}return this.children.length=s,r}remove(t){let r=this.findChildIndex(t),i=this.children.length;if(r<i-1)for(let s=r;s<i-1;s++)this.children[s]=this.children[s+1];this.children.pop()}findChildIndex(t){let r=this.children.indexOf(t);return E.assert(r!==-1),r}insertAt(t,r){let i=this.findChildIndex(t),s=this.children.length,o=r.length;if(s<LD&&i===s-1&&o===1)return this.add(r[0]),this.updateCounts(),[];{let c=this.splitAfter(i),_=0;for(i++;i<LD&&_<o;)this.children[i]=r[_],i++,_++;let u=[],g=0;if(_<o){g=Math.ceil((o-_)/LD),u=new Array(g);let d=0;for(let S=0;S<g;S++)u[S]=new ahe;let h=u[0];for(;_<o;)h.add(r[_]),_++,h.children.length===LD&&(d++,h=u[d]);for(let S=u.length-1;S>=0;S--)u[S].children.length===0&&u.pop()}c&&u.push(c),this.updateCounts();for(let d=0;d<g;d++)u[d].updateCounts();return u}}add(t){this.children.push(t),E.assert(this.children.length<=LD)}charCount(){return this.totalChars}lineCount(){return this.totalLines}},DM=class{constructor(e){this.text=e}isLeaf(){return!0}walk(e,t,r){r.leaf(e,t,this)}charCount(){return this.text.length}lineCount(){return 1}},ONe=class RFe{constructor(t,r,i,s,o,c){this.telemetryEnabled=t,this.logger=r,this.host=i,this.globalTypingsCacheLocation=s,this.event=o,this.maxActiveRequestCount=c,this.activeRequestCount=0,this.requestQueue=vN(),this.requestMap=new Map,this.requestedRegistry=!1,this.packageInstallId=0}isKnownTypesPackageName(t){var r;return E1.validatePackageName(t)!==E1.NameValidationResult.Ok?!1:(this.requestedRegistry||(this.requestedRegistry=!0,this.installer.send({kind:"typesRegistry"})),!!((r=this.typesRegistryCache)!=null&&r.has(t)))}installPackage(t){this.packageInstallId++;let r={kind:"installPackage",...t,id:this.packageInstallId},i=new Promise((s,o)=>{(this.packageInstalledPromise??(this.packageInstalledPromise=new Map)).set(this.packageInstallId,{resolve:s,reject:o})});return this.installer.send(r),i}attach(t){this.projectService=t,this.installer=this.createInstallerProcess()}onProjectClosed(t){this.installer.send({projectName:t.getProjectName(),kind:"closeProject"})}enqueueInstallTypingsRequest(t,r,i){let s=Sfe(t,r,i);this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Scheduling throttled operation:${Uv(s)}`),this.activeRequestCount<this.maxActiveRequestCount?this.scheduleRequest(s):(this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Deferring request for: ${s.projectName}`),this.requestQueue.enqueue(s),this.requestMap.set(s.projectName,s))}handleMessage(t){var r,i;switch(this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Received response:${Uv(t)}`),t.kind){case $U:this.typesRegistryCache=new Map(Object.entries(t.typesRegistry));break;case H9:{let s=(r=this.packageInstalledPromise)==null?void 0:r.get(t.id);E.assertIsDefined(s,"Should find the promise for package install"),(i=this.packageInstalledPromise)==null||i.delete(t.id),t.success?s.resolve({successMessage:t.message}):s.reject(t.message),this.projectService.updateTypingsForProject(t),this.event(t,"setTypings");break}case Dae:{let s={message:t.message};this.event(s,"typesInstallerInitializationFailed");break}case XU:{let s={eventId:t.eventId,packages:t.packagesToInstall};this.event(s,"beginInstallTypes");break}case QU:{if(this.telemetryEnabled){let c={telemetryEventName:"typingsInstalled",payload:{installedPackages:t.packagesToInstall.join(","),installSuccess:t.installSuccess,typingsInstallerVersion:t.typingsInstallerVersion}};this.event(c,"telemetry")}let s={eventId:t.eventId,packages:t.packagesToInstall,success:t.installSuccess};this.event(s,"endInstallTypes");break}case q9:{this.projectService.updateTypingsForProject(t);break}case U9:{for(this.activeRequestCount>0?this.activeRequestCount--:E.fail("TIAdapter:: Received too many responses");!this.requestQueue.isEmpty();){let s=this.requestQueue.dequeue();if(this.requestMap.get(s.projectName)===s){this.requestMap.delete(s.projectName),this.scheduleRequest(s);break}this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Skipping defunct request for: ${s.projectName}`)}this.projectService.updateTypingsForProject(t),this.event(t,"setTypings");break}case hI:this.projectService.watchTypingLocations(t);break;default:}}scheduleRequest(t){this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Scheduling request for: ${t.projectName}`),this.activeRequestCount++,this.host.setTimeout(()=>{this.logger.hasLevel(3)&&this.logger.info(`TIAdapter:: Sending request:${Uv(t)}`),this.installer.send(t)},RFe.requestDelayMillis,`${t.projectName}::${t.kind}`)}};ONe.requestDelayMillis=100;var LNe=ONe,MNe={};$t(MNe,{ActionInvalidate:()=>q9,ActionPackageInstalled:()=>H9,ActionSet:()=>U9,ActionWatchTypingLocations:()=>hI,Arguments:()=>YU,AutoImportProviderProject:()=>Wfe,AuxiliaryProject:()=>Jfe,CharRangeSection:()=>dpe,CloseFileWatcherEvent:()=>f$,CommandNames:()=>SNe,ConfigFileDiagEvent:()=>o$,ConfiguredProject:()=>Vfe,ConfiguredProjectLoadKind:()=>Xfe,CreateDirectoryWatcherEvent:()=>_$,CreateFileWatcherEvent:()=>u$,Errors:()=>s0,EventBeginInstallTypes:()=>XU,EventEndInstallTypes:()=>QU,EventInitializationFailed:()=>Dae,EventTypesRegistry:()=>$U,ExternalProject:()=>t$,GcTimer:()=>Pfe,InferredProject:()=>Bfe,LargeFileReferencedEvent:()=>a$,LineIndex:()=>x8,LineLeaf:()=>DM,LineNode:()=>MD,LogLevel:()=>vfe,Msg:()=>bfe,OpenFileInfoTelemetryEvent:()=>Ufe,Project:()=>Xk,ProjectInfoTelemetryEvent:()=>l$,ProjectKind:()=>yw,ProjectLanguageServiceStateEvent:()=>c$,ProjectLoadingFinishEvent:()=>s$,ProjectLoadingStartEvent:()=>i$,ProjectService:()=>ipe,ProjectsUpdatedInBackgroundEvent:()=>kM,ScriptInfo:()=>Ife,ScriptVersionCache:()=>k$,Session:()=>wNe,TextStorage:()=>Afe,ThrottledOperations:()=>Dfe,TypingsInstallerAdapter:()=>LNe,allFilesAreJsOrDts:()=>Mfe,allRootFilesAreJsOrDts:()=>Lfe,asNormalizedPath:()=>Gwe,convertCompilerOptions:()=>CM,convertFormatOptions:()=>FD,convertScriptKindName:()=>d$,convertTypeAcquisition:()=>Hfe,convertUserPreferences:()=>Gfe,convertWatchOptions:()=>b8,countEachFileTypes:()=>g8,createInstallTypingsRequest:()=>Sfe,createModuleSpecifierCache:()=>ope,createNormalizedPathMap:()=>$we,createPackageJsonCache:()=>cpe,createSortedArray:()=>Efe,emptyArray:()=>Ol,findArgument:()=>$2e,formatDiagnosticToProtocol:()=>S8,formatMessage:()=>lpe,getBaseConfigFileName:()=>e$,getDetailWatchInfo:()=>y$,getLocationInNewDocument:()=>ppe,hasArgument:()=>G2e,hasNoTypeScriptSource:()=>Rfe,indent:()=>V4,isBackgroundProject:()=>y8,isConfigFile:()=>spe,isConfiguredProject:()=>iy,isDynamicFileName:()=>hw,isExternalProject:()=>h8,isInferredProject:()=>ID,isInferredProjectName:()=>xfe,isProjectDeferredClose:()=>v8,makeAutoImportProviderProjectName:()=>kfe,makeAuxiliaryProjectName:()=>Cfe,makeInferredProjectName:()=>Tfe,maxFileSize:()=>r$,maxProgramSizeForNonTsFiles:()=>n$,normalizedPathToPath:()=>AD,nowString:()=>X2e,nullCancellationToken:()=>yNe,nullTypingsInstaller:()=>EM,protocol:()=>wfe,scriptInfoIsContainedByBackgroundProject:()=>Ffe,scriptInfoIsContainedByDeferredClosedProject:()=>Ofe,stringifyIndented:()=>Uv,toEvent:()=>upe,toNormalizedPath:()=>po,tryConvertScriptKindName:()=>p$,typingsInstaller:()=>yfe,updateProjectIfDirty:()=>pd}),typeof console<"u"&&(E.loggingHost={log(e,t){switch(e){case 1:return console.error(t);case 2:return console.warn(t);case 3:return console.log(t);case 4:return console.log(t)}}})})({get exports(){return NFe},set exports(_e){NFe=_e,typeof OQ<"u"&&OQ.exports&&(OQ.exports=_e)}})});var HFe=PFe(A7=>{"use strict";A7.__esModule=!0;A7.distance=A7.closest=void 0;var JC=new Uint32Array(65536),hmt=function(_e,Ve){for(var Xe=_e.length,st=Ve.length,Pt=1<<Xe-1,$t=-1,dn=0,gn=Xe,Pn=Xe;Pn--;)JC[_e.charCodeAt(Pn)]|=1<<Pn;for(Pn=0;Pn<st;Pn++){var si=JC[Ve.charCodeAt(Pn)],ti=si|dn;si|=(si&$t)+$t^$t,dn|=~(si|$t),$t&=si,dn&Pt&&gn++,$t&Pt&&gn--,dn=dn<<1|1,$t=$t<<1|~(ti|dn),dn&=ti}for(Pn=Xe;Pn--;)JC[_e.charCodeAt(Pn)]=0;return gn},ymt=function(_e,Ve){for(var Xe=Ve.length,st=_e.length,Pt=[],$t=[],dn=Math.ceil(Xe/32),gn=Math.ceil(st/32),Pn=0;Pn<dn;Pn++)$t[Pn]=-1,Pt[Pn]=0;for(var si=0;si<gn-1;si++){for(var ti=0,Sa=-1,We=si*32,Bl=Math.min(32,st)+We,vn=We;vn<Bl;vn++)JC[_e.charCodeAt(vn)]|=1<<vn;for(var Pn=0;Pn<Xe;Pn++){var an=JC[Ve.charCodeAt(Pn)],Oy=$t[Pn/32|0]>>>Pn&1,mo=Pt[Pn/32|0]>>>Pn&1,Vg=an|ti,Ts=((an|mo)&Sa)+Sa^Sa|an|mo,$c=ti|~(Ts|Sa),pf=Sa&Ts;$c>>>31^Oy&&($t[Pn/32|0]^=1<<Pn),pf>>>31^mo&&(Pt[Pn/32|0]^=1<<Pn),$c=$c<<1|Oy,pf=pf<<1|mo,Sa=pf|~(Vg|$c),ti=$c&Vg}for(var vn=We;vn<Bl;vn++)JC[_e.charCodeAt(vn)]=0}for(var zr=0,Er=-1,Ug=si*32,nc=Math.min(32,st-Ug)+Ug,vn=Ug;vn<nc;vn++)JC[_e.charCodeAt(vn)]|=1<<vn;for(var mT=st,Pn=0;Pn<Xe;Pn++){var an=JC[Ve.charCodeAt(Pn)],Oy=$t[Pn/32|0]>>>Pn&1,mo=Pt[Pn/32|0]>>>Pn&1,Vg=an|zr,Ts=((an|mo)&Er)+Er^Er|an|mo,$c=zr|~(Ts|Er),pf=Er&Ts;mT+=$c>>>st-1&1,mT-=pf>>>st-1&1,$c>>>31^Oy&&($t[Pn/32|0]^=1<<Pn),pf>>>31^mo&&(Pt[Pn/32|0]^=1<<Pn),$c=$c<<1|Oy,pf=pf<<1|mo,Er=pf|~(Vg|$c),zr=$c&Vg}for(var vn=Ug;vn<nc;vn++)JC[_e.charCodeAt(vn)]=0;return mT},qFe=function(_e,Ve){if(_e.length<Ve.length){var Xe=Ve;Ve=_e,_e=Xe}return Ve.length===0?_e.length:_e.length<=32?hmt(_e,Ve):ymt(_e,Ve)};A7.distance=qFe;var vmt=function(_e,Ve){for(var Xe=1/0,st=0,Pt=0;Pt<Ve.length;Pt++){var $t=qFe(_e,Ve[Pt]);$t<Xe&&(Xe=$t,st=Pt)}return Ve[st]};A7.closest=vmt});var ygt={};zdt(ygt,{analyze:()=>SOe,applyFixes:()=>TOe,checkForms:()=>WQ,checkHydration:()=>qQ,checkLinks:()=>zQ,checkLoaders:()=>VQ,checkParams:()=>UQ,formatIssue:()=>uhe,formatIssueJson:()=>_he,formatIssues:()=>COe,formatResultJson:()=>DOe,getAllRoutePaths:()=>N7,getEditPreview:()=>kOe,matchDynamicPattern:()=>rj,matchRoute:()=>pN,parseComponent:()=>BQ,parseRouteExports:()=>sj,parseRoutes:()=>jQ});module.exports=Wdt(ygt);var GQ=bp(require("fs")),D6=bp(require("path"));var P7=bp(require("fs")),w7=bp(require("path")),zf=bp(S6());var Pl=bp(S6());function Fy(_e,Ve){return Pl.default.createSourceFile(_e,Ve,Pl.default.ScriptTarget.Latest,!0,_e.endsWith(".tsx")?Pl.default.ScriptKind.TSX:Pl.default.ScriptKind.TS)}function A0(_e,Ve){let{line:Xe,character:st}=_e.getLineAndCharacterOfPosition(Ve);return{line:Xe+1,column:st+1}}function fN(_e,Ve){if(Pl.default.isJsxElement(_e)){let Xe=_e.openingElement.tagName;return Pl.default.isIdentifier(Xe)&&Xe.text===Ve}if(Pl.default.isJsxSelfClosingElement(_e)){let Xe=_e.tagName;return Pl.default.isIdentifier(Xe)&&Xe.text===Ve}return!1}function Wg(_e,Ve){let Xe=Pl.default.isJsxElement(_e)?_e.openingElement.attributes:_e.attributes;for(let st of Xe.properties)if(Pl.default.isJsxAttribute(st)&&Pl.default.isIdentifier(st.name)&&st.name.text===Ve)return st}function D7(_e){let Ve=_e.initializer;if(Ve){if(Pl.default.isStringLiteral(Ve))return{value:Ve.text,isDynamic:!1};if(Pl.default.isJsxExpression(Ve)&&Ve.expression){let Xe=Ve.expression;if(Pl.default.isStringLiteral(Xe))return{value:Xe.text,isDynamic:!1};if(Pl.default.isTemplateExpression(Xe))return jFe(Xe);if(Pl.default.isNoSubstitutionTemplateLiteral(Xe))return{value:Xe.text,isDynamic:!1}}}}function LQ(_e){let Ve=_e.initializer;if(Ve){if(Pl.default.isStringLiteral(Ve))return{value:Ve.text,isDynamic:!1,valueNode:Ve};if(Pl.default.isJsxExpression(Ve)&&Ve.expression){let Xe=Ve.expression;if(Pl.default.isStringLiteral(Xe))return{value:Xe.text,isDynamic:!1,valueNode:Xe};if(Pl.default.isTemplateExpression(Xe))return{...jFe(Xe),valueNode:Xe};if(Pl.default.isNoSubstitutionTemplateLiteral(Xe))return{value:Xe.text,isDynamic:!1,valueNode:Xe}}}}function jFe(_e){let Ve=_e.head.text;for(let Xe of _e.templateSpans)Ve+=":param"+Xe.literal.text;return{value:Ve,isDynamic:!0}}function x6(_e,Ve){if(!Pl.default.isCallExpression(_e))return!1;let Xe=_e.expression;return Pl.default.isIdentifier(Xe)?Xe.text===Ve:!1}function T6(_e){return(Pl.default.canHaveModifiers(_e)?Pl.default.getModifiers(_e):void 0)?.some(Xe=>Xe.kind===Pl.default.SyntaxKind.ExportKeyword)??!1}function Eu(_e,Ve){Ve(_e),Pl.default.forEachChild(_e,Xe=>Eu(Xe,Ve))}function Td(_e,Ve,Xe){let st=Ve.getStart(_e),Pt=Ve.getEnd(),{line:$t,character:dn}=_e.getLineAndCharacterOfPosition(st);return{file:Xe,start:st,end:Pt,line:$t+1,column:dn+1}}function k6(_e){let Ve=Pl.default.isJsxElement(_e)?_e.openingElement.tagName:_e.tagName;if(Pl.default.isIdentifier(Ve))return Ve.text}function MQ(_e){return _e.length>0&&_e[0]===_e[0].toUpperCase()&&/^[A-Z]/.test(_e)}function RQ(_e){if(Pl.default.isJsxSelfClosingElement(_e))return;let Ve=[];for(let Xe of _e.children)if(Pl.default.isJsxText(Xe)){let st=Xe.text.trim();st&&Ve.push(st)}else if(Pl.default.isJsxElement(Xe)||Pl.default.isJsxSelfClosingElement(Xe)){let st=RQ(Xe);st&&Ve.push(st)}else Pl.default.isJsxExpression(Xe)&&Xe.expression&&(Pl.default.isStringLiteral(Xe.expression)||Pl.default.isNoSubstitutionTemplateLiteral(Xe.expression))&&Ve.push(Xe.expression.text);return Ve.length>0?Ve.join(" "):void 0}function jQ(_e){let Ve=w7.join(_e,"app","routes.ts");if(!P7.existsSync(Ve))throw new Error(`Routes file not found: ${Ve}`);let Xe=P7.readFileSync(Ve,"utf-8"),st=Fy(Ve,Xe),Pt=Vdt(st,w7.dirname(Ve)),$t=[];return Eu(st,dn=>{if(zf.default.isExportAssignment(dn)&&dn.expression){let gn=C6(dn.expression,_e,Pt);$t.push(...gn)}}),$t}function Vdt(_e,Ve){let Xe=new Map;return Eu(_e,st=>{if(zf.default.isImportDeclaration(st)&&st.importClause?.name&&st.moduleSpecifier&&zf.default.isStringLiteral(st.moduleSpecifier)){let Pt=st.importClause.name.text,$t=st.moduleSpecifier.text;if($t.startsWith(".")){let dn=Udt(Ve,$t);dn&&Xe.set(Pt,dn)}}}),Xe}function Udt(_e,Ve){let Xe=w7.resolve(_e,Ve);for(let st of[Xe,`${Xe}.ts`])if(P7.existsSync(st))return st}function qdt(_e,Ve){let Xe=P7.readFileSync(_e,"utf-8"),st=Fy(_e,Xe),Pt=[],$t=new Map;return Eu(st,dn=>{if(zf.default.isVariableStatement(dn)&&dn.declarationList.declarations.length>0)for(let gn of dn.declarationList.declarations)zf.default.isIdentifier(gn.name)&&gn.initializer&&$t.set(gn.name.text,gn.initializer)}),Eu(st,dn=>{if(zf.default.isExportAssignment(dn)&&dn.expression){let gn=dn.expression;if(zf.default.isIdentifier(gn)){let si=$t.get(gn.text);si&&(gn=si)}let Pn=C6(gn,Ve,new Map);Pt.push(...Pn)}}),Pt}function C6(_e,Ve,Xe){let st=[];if(zf.default.isArrayLiteralExpression(_e)){for(let Pt of _e.elements){if(zf.default.isSpreadElement(Pt)){let dn=Pt.expression;if(zf.default.isIdentifier(dn)){let Pn=Xe.get(dn.text);if(Pn){let si=qdt(Pn,Ve);st.push(...si);continue}}let gn=C6(dn,Ve,Xe);st.push(...gn);continue}let $t=C6(Pt,Ve,Xe);st.push(...$t)}return st}if(zf.default.isSatisfiesExpression(_e)||zf.default.isAsExpression(_e))return C6(_e.expression,Ve,Xe);if(zf.default.isCallExpression(_e)){let Pt=zf.default.isIdentifier(_e.expression)?_e.expression.text:void 0;if(Pt==="route"){let $t=Hdt(_e,Ve,Xe);$t&&st.push($t)}else if(Pt==="layout"){let $t=Gdt(_e,Ve,Xe);st.push(...$t)}else if(Pt==="index"){let $t=$dt(_e,Ve);$t&&st.push($t)}}return st}function Hdt(_e,Ve,Xe){let st=_e.arguments;if(st.length<2)return;let Pt=st[0];if(!zf.default.isStringLiteral(Pt))return;let $t=Pt.text,dn=st[1];if(!zf.default.isStringLiteral(dn))return;let gn=dn.text,Pn,si;if(st.length>=3){let ti=st[2];if(zf.default.isObjectLiteralExpression(ti))for(let Sa of ti.properties)zf.default.isPropertyAssignment(Sa)&&zf.default.isIdentifier(Sa.name)&&Sa.name.text==="id"&&zf.default.isStringLiteral(Sa.initializer)&&(Pn=Sa.initializer.text);zf.default.isArrayLiteralExpression(ti)&&(si=C6(ti,Ve,Xe))}if(st.length>=4){let ti=st[3];zf.default.isArrayLiteralExpression(ti)&&(si=C6(ti,Ve,Xe))}return BFe($t,gn,Pn,si)}function Gdt(_e,Ve,Xe){let st=_e.arguments;if(st.length<2)return[];let Pt=st[0];if(!zf.default.isStringLiteral(Pt))return[];let $t=st[1];return C6($t,Ve,Xe)}function $dt(_e,Ve){let Xe=_e.arguments;if(Xe.length<1)return;let st=Xe[0];if(zf.default.isStringLiteral(st))return BFe("/",st.text,void 0,void 0)}function BFe(_e,Ve,Xe,st){let Pt=Xdt(_e),$t=Qdt(_e);return{path:_e,file:Ve,id:Xe,params:Pt,pattern:$t,children:st&&st.length>0?st:void 0}}function Xdt(_e){let Ve=[],Xe=/:(\w+)/g,st;for(;(st=Xe.exec(_e))!==null;)Ve.push(st[1]);return Ve}function Qdt(_e){let Ve=_e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return Ve=Ve.replace(/:(\w+)/g,"([^/]+)"),new RegExp(`^${Ve}$`)}function N7(_e){let Ve=[];function Xe(st){for(let Pt of st)Ve.push(Pt.path),Pt.children&&Xe(Pt.children)}return Xe(_e),Ve}function pN(_e,Ve){let Xe=_e.split("?")[0].split("#")[0];for(let st of Ve){if(st.pattern.test(Xe))return st;if(st.children){let Pt=pN(Xe,st.children);if(Pt)return Pt}}}function rj(_e,Ve){let Xe=_e.split("/").filter(Boolean);for(let st of Ve){let Pt=st.path.split("/").filter(Boolean);if(Xe.length!==Pt.length)continue;let $t=!0;for(let dn=0;dn<Xe.length;dn++){let gn=Xe[dn],Pn=Pt[dn];if(!(gn.startsWith(":")&&Pn.startsWith(":"))){if(!gn.startsWith(":")&&!Pn.startsWith(":")){if(gn!==Pn){$t=!1;break}continue}if(!gn.startsWith(":")){$t=!1;break}}}if($t)return st;if(st.children){let dn=rj(_e,st.children);if(dn)return dn}}}var UFe=bp(require("fs")),Ha=bp(S6());var ohe={modules:["pg","pg-native","mysql","mysql2","better-sqlite3","sqlite3","@libsql/client","mongodb","redis","ioredis","drizzle-orm","@prisma/client","typeorm","sequelize","knex","kysely","mongoose","mikro-orm","fs","fs/promises","child_process","net","crypto"],patterns:["\\.server"]};var JFe=new Set(ohe.modules),Zdt=ohe.patterns.map(_e=>new RegExp(_e));function BQ(_e){let Ve=UFe.readFileSync(_e,"utf-8"),Xe=Fy(_e,Ve),st=[],Pt=[],$t=[],dn=[],gn=!1,Pn=!1,si=!1,ti=!1,Sa,We,Bl=[];Eu(Xe,Ts=>{if(Ha.default.isImportDeclaration(Ts)&&Ha.default.isStringLiteral(Ts.moduleSpecifier)){let $c=Ts.moduleSpecifier.text;gmt($c)&&Bl.push($c)}});let vn=[],an=new Set,Oy=new Set,mo=new Set,Vg=new Set;return Eu(Xe,Ts=>{if((Ha.default.isJsxElement(Ts)||Ha.default.isJsxSelfClosingElement(Ts))&&cmt(Ts)&&an.add(Ts),Ha.default.isFunctionDeclaration(Ts)&&Ts.name&&T6(Ts)){let $c=Ts.name.text;$c==="loader"||$c==="action"?Ts.body&&Oy.add(Ts.body):!((Ha.default.canHaveModifiers(Ts)?Ha.default.getModifiers(Ts):void 0)?.some(Er=>Er.kind===Ha.default.SyntaxKind.DefaultKeyword)??!1)&&Ts.body&&Vg.add(Ts.body)}if(Ha.default.isVariableStatement(Ts)&&T6(Ts)){for(let $c of Ts.declarationList.declarations)if(Ha.default.isIdentifier($c.name)){let pf=$c.name.text;pf==="loader"||pf==="action"?$c.initializer&&(Ha.default.isArrowFunction($c.initializer)||Ha.default.isFunctionExpression($c.initializer))&&Oy.add($c.initializer.body):$c.initializer&&(Ha.default.isArrowFunction($c.initializer)||Ha.default.isFunctionExpression($c.initializer))&&Vg.add($c.initializer.body)}}if(Ha.default.isVariableDeclaration(Ts)&&Ha.default.isIdentifier(Ts.name)){let $c=Ts.name.text;pmt($c)&&Ts.initializer&&(Ha.default.isArrowFunction(Ts.initializer)||Ha.default.isFunctionExpression(Ts.initializer))&&mo.add(Ts.initializer.body)}if(Ha.default.isJsxAttribute(Ts)&&Ha.default.isIdentifier(Ts.name)){let $c=Ts.name.text;if(dmt($c)&&Ts.initializer&&Ha.default.isJsxExpression(Ts.initializer)&&Ts.initializer.expression){let pf=Ts.initializer.expression;(Ha.default.isArrowFunction(pf)||Ha.default.isFunctionExpression(pf))&&mo.add(pf.body)}}}),Eu(Xe,Ts=>{(x6(Ts,"useEffect")||x6(Ts,"useLayoutEffect"))&&vn.push(Ts);let $c=umt(Ts,Oy),pf=_mt(Ts,mo);if(!$c&&!pf){let zr=mmt(Ts,Xe,_e,vn.length>0,lmt(Ts,an));zr&&dn.push(zr)}if(fN(Ts,"Link")){let zr=Kdt(Ts,Xe,_e);zr&&st.push(zr)}if(fN(Ts,"a")){let zr=zFe(Ts,Xe,_e);zr&&st.push(zr)}if((Ha.default.isJsxElement(Ts)||Ha.default.isJsxSelfClosingElement(Ts))&&!fN(Ts,"Link")&&!fN(Ts,"NavLink")&&!fN(Ts,"a")&&Wg(Ts,"href")){let Er=zFe(Ts,Xe,_e);Er&&st.push(Er)}if(fN(Ts,"Form")){let zr=emt(Ts,Xe,_e);zr&&(zr.inNamedExport=fmt(Ts,Vg),Pt.push(zr))}if(x6(Ts,"redirect")){let zr=smt(Ts,Xe,_e);zr&&st.push(zr)}if(x6(Ts,"navigate")){let zr=amt(Ts,Xe,_e);zr&&st.push(zr)}if(x6(Ts,"useLoaderData")){let zr=WFe("useLoaderData",Ts,Xe,_e);$t.push(zr)}if(x6(Ts,"useActionData")){let zr=WFe("useActionData",Ts,Xe,_e);$t.push(zr)}if(x6(Ts,"useParams")){let zr=omt(Ts,Xe,_e);$t.push(zr)}if(Ha.default.isFunctionDeclaration(Ts)&&Ts.name&&T6(Ts)&&(Ts.name.text==="loader"&&(gn=!0),Ts.name.text==="action"&&(Pn=!0),Ts.name.text==="clientLoader"&&(si=!0,Sa=Td(Xe,Ts.name,_e)),Ts.name.text==="clientAction"&&(ti=!0,We=Td(Xe,Ts.name,_e))),Ha.default.isVariableStatement(Ts)&&T6(Ts))for(let zr of Ts.declarationList.declarations)Ha.default.isIdentifier(zr.name)&&(zr.name.text==="loader"&&(gn=!0),zr.name.text==="action"&&(Pn=!0),zr.name.text==="clientLoader"&&(si=!0,Sa=Td(Xe,zr.name,_e)),zr.name.text==="clientAction"&&(ti=!0,We=Td(Xe,zr.name,_e)))}),{file:_e,links:st,forms:Pt,dataHooks:$t,hydrationRisks:dn,hasLoader:gn,hasAction:Pn,hasClientLoader:si,hasClientAction:ti,serverImports:Bl,clientLoaderSpan:Sa,clientActionSpan:We}}function Kdt(_e,Ve,Xe){let st=Wg(_e,"to"),Pt=Wg(_e,"href"),$t=st||Pt;if(!$t)return;let dn=LQ($t);if(!dn||JQ(dn.value))return;let gn=A0(Ve,_e.getStart());return{href:dn.value,isDynamic:dn.isDynamic,pattern:dn.isDynamic?dn.value:void 0,location:{file:Xe,line:gn.line,column:gn.column},type:"link",attributeSpan:Td(Ve,dn.valueNode,Xe)}}function zFe(_e,Ve,Xe){let st=Wg(_e,"href");if(!st)return;let Pt=LQ(st);if(!Pt||JQ(Pt.value))return;let $t=A0(Ve,_e.getStart());return{href:Pt.value,isDynamic:Pt.isDynamic,pattern:Pt.isDynamic?Pt.value:void 0,location:{file:Xe,line:$t.line,column:$t.column},type:"link",attributeSpan:Td(Ve,Pt.valueNode,Xe)}}function emt(_e,Ve,Xe){let st=Wg(_e,"action"),Pt=Wg(_e,"method"),$t,dn;if(st){let Sa=LQ(st);Sa&&($t=Sa.value,dn=Td(Ve,Sa.valueNode,Xe))}let gn="post";if(Pt){let Sa=D7(Pt);if(Sa){let We=Sa.value.toLowerCase();["get","post","put","patch","delete"].includes(We)&&(gn=We)}}let{inputNames:Pn,intentValue:si}=imt(_e,Ve),ti=A0(Ve,_e.getStart());return{action:$t,method:gn,inputNames:Pn,intentValue:si,location:{file:Xe,line:ti.line,column:ti.column},actionSpan:dn}}var tmt=new Set(["input","select","textarea"]);function nmt(_e){if(!Ha.default.isJsxElement(_e)&&!Ha.default.isJsxSelfClosingElement(_e))return!1;let Ve=k6(_e);return Ve?tmt.has(Ve)?!0:MQ(Ve)?Wg(_e,"name")!==void 0:!1:!1}function rmt(_e){if(!Ha.default.isJsxElement(_e)&&!Ha.default.isJsxSelfClosingElement(_e))return!1;let Ve=k6(_e);return Ve?Ve==="button"||Ve==="Button":!1}function imt(_e,Ve){let Xe=[],st;return Eu(_e,Pt=>{if(nmt(Pt)){let $t=Wg(Pt,"name");if($t){let dn=D7($t);if(dn&&(Xe.push(dn.value),dn.value==="intent")){let gn=Wg(Pt,"value");if(gn){let Pn=D7(gn);Pn&&(st=Pn.value)}}}}if(rmt(Pt)){let $t=Wg(Pt,"name");if($t){let dn=D7($t);if(dn&&dn.value==="intent"){Xe.push("intent");let gn=Wg(Pt,"value");if(gn){let Pn=D7(gn);Pn&&(st=Pn.value)}}}}}),{inputNames:Xe,intentValue:st}}function smt(_e,Ve,Xe){if(_e.arguments.length===0)return;let st=_e.arguments[0],Pt;if(Ha.default.isStringLiteral(st))Pt={value:st.text,isDynamic:!1,valueNode:st};else if(Ha.default.isTemplateExpression(st)){let dn=st.head.text;for(let gn of st.templateSpans)dn+=":param"+gn.literal.text;Pt={value:dn,isDynamic:!0,valueNode:st}}else Ha.default.isNoSubstitutionTemplateLiteral(st)&&(Pt={value:st.text,isDynamic:!1,valueNode:st});if(!Pt||JQ(Pt.value))return;let $t=A0(Ve,_e.getStart());return{href:Pt.value,isDynamic:Pt.isDynamic,pattern:Pt.isDynamic?Pt.value:void 0,location:{file:Xe,line:$t.line,column:$t.column},type:"redirect",attributeSpan:Td(Ve,Pt.valueNode,Xe)}}function amt(_e,Ve,Xe){if(_e.arguments.length===0)return;let st=_e.arguments[0],Pt;if(Ha.default.isStringLiteral(st))Pt={value:st.text,isDynamic:!1,valueNode:st};else if(Ha.default.isTemplateExpression(st)){let dn=st.head.text;for(let gn of st.templateSpans)dn+=":param"+gn.literal.text;Pt={value:dn,isDynamic:!0,valueNode:st}}else Ha.default.isNoSubstitutionTemplateLiteral(st)&&(Pt={value:st.text,isDynamic:!1,valueNode:st});if(!Pt||JQ(Pt.value))return;let $t=A0(Ve,_e.getStart());return{href:Pt.value,isDynamic:Pt.isDynamic,pattern:Pt.isDynamic?Pt.value:void 0,location:{file:Xe,line:$t.line,column:$t.column},type:"navigate",attributeSpan:Td(Ve,Pt.valueNode,Xe)}}function WFe(_e,Ve,Xe,st){let Pt=A0(Xe,Ve.getStart());return{hook:_e,location:{file:st,line:Pt.line,column:Pt.column}}}function omt(_e,Ve,Xe){let st=A0(Ve,_e.getStart()),Pt=[],$t=new Map,dn=_e.parent;if(Ha.default.isVariableDeclaration(dn)&&Ha.default.isObjectBindingPattern(dn.name)){for(let gn of dn.name.elements)if(Ha.default.isBindingElement(gn)&&Ha.default.isIdentifier(gn.name)){let Pn=gn.name.text;Pt.push(Pn),$t.set(Pn,Td(Ve,gn.name,Xe))}}return{hook:"useParams",accessedParams:Pt.length>0?Pt:void 0,location:{file:Xe,line:st.line,column:st.column},paramSpans:$t.size>0?$t:void 0}}function JQ(_e){return _e.startsWith("http://")||_e.startsWith("https://")||_e.startsWith("mailto:")||_e.startsWith("tel:")||_e.startsWith("sms:")||_e.startsWith("data:")||_e.startsWith("blob:")||_e.startsWith("javascript:")||_e.startsWith("#")||_e.startsWith("//")}function cmt(_e){let Ve=Wg(_e,"suppressHydrationWarning");return Ve?!!(!Ve.initializer||Ha.default.isJsxExpression(Ve.initializer)&&Ve.initializer.expression&&(Ve.initializer.expression.kind===Ha.default.SyntaxKind.TrueKeyword||Ha.default.isIdentifier(Ve.initializer.expression)&&Ve.initializer.expression.text==="true")):!1}function lmt(_e,Ve){let Xe=_e;for(;Xe;){if(Ve.has(Xe))return!0;Xe=Xe.parent}return!1}function umt(_e,Ve){let Xe=_e;for(;Xe;){if(Ve.has(Xe))return!0;Xe=Xe.parent}return!1}function _mt(_e,Ve){let Xe=_e;for(;Xe;){if(Ve.has(Xe))return!0;Xe=Xe.parent}return!1}function fmt(_e,Ve){let Xe=_e;for(;Xe;){if(Ve.has(Xe))return!0;Xe=Xe.parent}return!1}function pmt(_e){return!!(_e.startsWith("handle")&&_e.length>6||_e.startsWith("on")&&_e.length>2&&_e[2]===_e[2].toUpperCase())}function dmt(_e){return _e.startsWith("on")&&_e.length>2&&_e[2]===_e[2].toUpperCase()}function mmt(_e,Ve,Xe,st,Pt){let $t=A0(Ve,_e.getStart()),dn={file:Xe,line:$t.line,column:$t.column};if(Ha.default.isNewExpression(_e)&&Ha.default.isIdentifier(_e.expression)&&_e.expression.text==="Date"&&(!_e.arguments||_e.arguments.length===0))return{type:"date-render",location:dn,code:_e.getText(Ve),inUseEffect:st,hasSuppressWarning:Pt,callSpan:Td(Ve,_e,Xe)};if(Ha.default.isCallExpression(_e)){let gn=_e.expression;if(Ha.default.isPropertyAccessExpression(gn)){if(Ha.default.isIdentifier(gn.expression)&&gn.expression.text==="Date"&&["now","parse"].includes(gn.name.text))return{type:"date-render",location:dn,code:_e.getText(Ve),inUseEffect:st,hasSuppressWarning:Pt,callSpan:Td(Ve,_e,Xe)};if(Ha.default.isIdentifier(gn.expression)&&gn.expression.text==="Math"&&gn.name.text==="random")return{type:"random-value",location:dn,code:_e.getText(Ve),inUseEffect:st,hasSuppressWarning:Pt};if(["toLocaleString","toLocaleDateString","toLocaleTimeString"].includes(gn.name.text)&&!VFe(_e))return{type:"locale-format",location:dn,code:_e.getText(Ve),inUseEffect:st,hasSuppressWarning:Pt,callSpan:Td(Ve,_e,Xe),argCount:_e.arguments?.length??0}}if(Ha.default.isIdentifier(gn)&&["uuid","nanoid","uuidv4","generateId"].includes(gn.text))return{type:"random-value",location:dn,code:_e.getText(Ve),inUseEffect:st,hasSuppressWarning:Pt,callSpan:Td(Ve,_e,Xe)}}if(Ha.default.isNewExpression(_e)){let gn=_e.expression;if(Ha.default.isPropertyAccessExpression(gn)&&Ha.default.isIdentifier(gn.expression)&&gn.expression.text==="Intl"&&gn.name.text==="DateTimeFormat"&&!VFe(_e))return{type:"locale-format",location:dn,code:_e.getText(Ve),inUseEffect:st,hasSuppressWarning:Pt,callSpan:Td(Ve,_e,Xe),argCount:_e.arguments?.length??0}}if(Ha.default.isIdentifier(_e)&&["window","localStorage","sessionStorage","document","navigator","location"].includes(_e.text)){let Pn=_e.parent;if(Pn&&!Ha.default.isTypeReferenceNode(Pn)&&!Ha.default.isVariableDeclaration(Pn)&&!Ha.default.isParameter(Pn)&&Ha.default.isPropertyAccessExpression(Pn)&&Pn.expression===_e)return{type:"browser-api",location:dn,code:Pn.getText(Ve),inUseEffect:st,hasSuppressWarning:Pt,callSpan:Td(Ve,Pn,Xe)}}}function gmt(_e){if(JFe.has(_e))return!0;for(let Ve of JFe)if(_e.startsWith(Ve+"/"))return!0;for(let Ve of Zdt)if(Ve.test(_e))return!0;return!1}function VFe(_e){let Ve=_e.arguments;if(!Ve||Ve.length<2)return!1;let Xe=Ve[1];if(Ha.default.isObjectLiteralExpression(Xe)){for(let st of Xe.properties)if(Ha.default.isPropertyAssignment(st)&&Ha.default.isIdentifier(st.name)&&st.name.text==="timeZone")return!0}return!1}var GFe=bp(HFe());function dN(_e,Ve,Xe=3){if(Ve.length===0)return;let st,Pt=1/0;for(let $t of Ve){let dn=(0,GFe.distance)(_e,$t);dn<Pt&&dn<=Xe&&(Pt=dn,st=$t)}return st}function ij(_e){if(_e)return`Did you mean: ${_e}?`}function zQ(_e,Ve){let Xe=[],st=N7(Ve);for(let Pt of _e)for(let $t of Pt.links){let dn=bmt($t,Ve,st);dn&&Xe.push(dn)}return Xe}function bmt(_e,Ve,Xe){if(_e.isDynamic){let st=_e.pattern||_e.href;if(!rj(st,Ve)){let $t=dN(st,Xe);return{category:"links",severity:"error",message:"No matching route for dynamic link pattern",location:_e.location,code:`${_e.type==="link"?"href":_e.type}="${_e.href}"`,suggestion:ij($t)}}}else if(!pN(_e.href,Ve)){let Pt=dN(_e.href,Xe),$t={category:"links",severity:"error",message:"No matching route",location:_e.location,code:`${_e.type==="link"?"href":_e.type}="${_e.href}"`,suggestion:ij(Pt)};return Pt&&_e.attributeSpan&&($t.fix={description:`Replaced "${_e.href}" with "${Pt}"`,edits:[{file:_e.attributeSpan.file,start:_e.attributeSpan.start,end:_e.attributeSpan.end,newText:`"${Pt}"`}]}),$t}}var eOe=bp(require("path"));var $Fe=bp(require("fs")),zu=bp(S6());function sj(_e){let Ve=$Fe.readFileSync(_e,"utf-8"),Xe=Fy(_e,Ve),st=!1,Pt=!1,$t,dn,gn;Eu(Xe,ti=>{if(zu.default.isFunctionDeclaration(ti)&&ti.name&&T6(ti)){let Sa=ti.name.text,{line:We,character:Bl}=Xe.getLineAndCharacterOfPosition(ti.getStart());Sa==="loader"&&(st=!0,$t={line:We+1,column:Bl+1}),Sa==="action"&&(Pt=!0,dn={line:We+1,column:Bl+1},gn=ti)}if(zu.default.isVariableStatement(ti)&&T6(ti)){for(let Sa of ti.declarationList.declarations)if(zu.default.isIdentifier(Sa.name)){let We=Sa.name.text,{line:Bl,character:vn}=Xe.getLineAndCharacterOfPosition(Sa.getStart());We==="loader"&&(st=!0,$t={line:Bl+1,column:vn+1}),We==="action"&&(Pt=!0,dn={line:Bl+1,column:vn+1},gn=Sa.initializer)}}});let Pn,si;if(gn){let ti=Smt(gn);Pn=ti.allFields,si=ti.intentGroups.size>0?ti.intentGroups:void 0}return{hasLoader:st,hasAction:Pt,loaderLocation:$t,actionLocation:dn,actionFields:Pn,intentFieldGroups:si}}function Smt(_e){let Ve=new Set,Xe=new Map,st=new Set,Pt=new Set,$t=new Set;Eu(_e,gn=>{if(zu.default.isVariableDeclaration(gn)&&zu.default.isIdentifier(gn.name)){let Pn=gn.initializer;Pn&&YFe(Pn)&&st.add(gn.name.text),Pn&&xmt(Pn,st)&&Pt.add(gn.name.text)}}),Eu(_e,gn=>{if(zu.default.isIfStatement(gn)){let Pn=XFe(gn.expression,Pt);Pn&&$t.add(Pn)}}),Eu(_e,gn=>{if(zu.default.isCallExpression(gn)){let Pn=gn.expression;if(zu.default.isPropertyAccessExpression(Pn)){let si=Pn.name.text;if(["get","getAll","has"].includes(si)&&zu.default.isIdentifier(Pn.expression)&&st.has(Pn.expression.text)){let ti=ZFe(gn);if(ti){Ve.add(ti);let Sa=Tmt(gn,Pt);Sa&&(Xe.has(Sa)||Xe.set(Sa,new Set),Xe.get(Sa).add(ti))}}}}});let dn={allFields:Array.from(Ve),intentGroups:new Map};for(let gn of $t){let Pn=Xe.get(gn);dn.intentGroups.set(gn,Pn?Array.from(Pn):[])}return dn}function xmt(_e,Ve){if(_e=QFe(_e),zu.default.isCallExpression(_e)){let Xe=_e.expression;if(zu.default.isPropertyAccessExpression(Xe)&&Xe.name.text==="get"&&zu.default.isIdentifier(Xe.expression)&&Ve.has(Xe.expression.text))return ZFe(_e)==="intent"}return!1}function Tmt(_e,Ve){let Xe=_e.parent;for(;Xe;){if(zu.default.isIfStatement(Xe)){let st=XFe(Xe.expression,Ve);if(st)return st}Xe=Xe.parent}}function XFe(_e,Ve){if(zu.default.isBinaryExpression(_e)&&(_e.operatorToken.kind===zu.default.SyntaxKind.EqualsEqualsEqualsToken||_e.operatorToken.kind===zu.default.SyntaxKind.EqualsEqualsToken)){let{left:Xe,right:st}=_e;if(zu.default.isIdentifier(Xe)&&Ve.has(Xe.text)&&zu.default.isStringLiteral(st))return st.text;if(zu.default.isIdentifier(st)&&Ve.has(st.text)&&zu.default.isStringLiteral(Xe))return Xe.text}}function QFe(_e){for(;zu.default.isAsExpression(_e)||zu.default.isNonNullExpression(_e)||zu.default.isParenthesizedExpression(_e)||zu.default.isTypeAssertionExpression(_e)||zu.default.isSatisfiesExpression(_e);)_e=_e.expression;return _e}function YFe(_e){if(_e=QFe(_e),zu.default.isAwaitExpression(_e))return YFe(_e.expression);if(zu.default.isCallExpression(_e)){let Ve=_e.expression;if(zu.default.isPropertyAccessExpression(Ve))return Ve.name.text==="formData"}return!1}function ZFe(_e){if(_e.arguments.length===0)return;let Ve=_e.arguments[0];if(zu.default.isStringLiteral(Ve)||zu.default.isNoSubstitutionTemplateLiteral(Ve))return Ve.text}function WQ(_e,Ve,Xe){let st=[],Pt=N7(Ve);for(let $t of _e)for(let dn of $t.forms){let gn=kmt(dn,$t,Ve,Xe,Pt);st.push(...gn)}return st}function kmt(_e,Ve,Xe,st,Pt){let $t=[];if(_e.action){let dn=pN(_e.action,Xe);if(dn){let gn=eOe.join(st,"app",dn.file);try{let Pn=sj(gn);if(!Pn.hasAction)$t.push({category:"forms",severity:"error",message:"Form action targets route without action export",location:_e.location,code:`<Form action="${_e.action}">`,suggestion:`Add an action export to ${dn.file}`});else{let si=KFe(_e,Pn,dn.file);$t.push(...si)}}catch{}}else{let gn=dN(_e.action,Pt),Pn={category:"forms",severity:"error",message:`Form action targets non-existent route: ${_e.action}`,location:_e.location,code:`<Form action="${_e.action}">`,suggestion:ij(gn)};gn&&_e.actionSpan&&(Pn.fix={description:`Replaced "${_e.action}" with "${gn}"`,edits:[{file:_e.actionSpan.file,start:_e.actionSpan.start,end:_e.actionSpan.end,newText:`"${gn}"`}]}),$t.push(Pn)}}else if(!Ve.hasAction&&!_e.inNamedExport)$t.push({category:"forms",severity:"error",message:"Form in route with no action export",location:_e.location,code:"<Form>",suggestion:"Add an action export to handle form submission"});else if(Ve.hasAction){let dn=Ve.file;try{let gn=sj(dn);if(gn.actionFields){let Pn=KFe(_e,gn);$t.push(...Pn)}}catch{}}return $t}function KFe(_e,Ve,Xe){let st=[],Pt=new Set(_e.inputNames),$t;if(_e.intentValue&&Ve.intentFieldGroups?.has(_e.intentValue))$t=Ve.intentFieldGroups.get(_e.intentValue);else{if(_e.intentValue&&Ve.intentFieldGroups&&Ve.intentFieldGroups.size>0)return st;$t=Ve.actionFields??[]}let dn=new Set($t);if(dn.size===0)return st;for(let gn of dn)if(!Pt.has(gn)){let Pn=_e.action?`<Form action="${_e.action}">`:"<Form>";st.push({category:"forms",severity:"error",message:`Action reads field '${gn}' but form has no input with name="${gn}"`,location:_e.location,code:Pn,suggestion:Xe?`Add <input name="${gn}" /> to the form, or check the action in ${Xe}`:`Add <input name="${gn}" /> to the form`})}return st}function VQ(_e){let Ve=[];for(let Xe of _e){let st=Cmt(Xe);Ve.push(...st)}return Ve}function Cmt(_e){let Ve=[];if(_e.hasClientLoader&&_e.serverImports.length>0){let Xe=_e.serverImports.join(", "),st={category:"loader",severity:"error",message:`clientLoader imports server-only module '${_e.serverImports[0]}' -- clientLoader runs in the browser and cannot access server resources`,location:_e.clientLoaderSpan?{file:_e.clientLoaderSpan.file,line:_e.clientLoaderSpan.line,column:_e.clientLoaderSpan.column}:{file:_e.file,line:1,column:1},code:`clientLoader (imports: ${Xe})`,suggestion:"Rename clientLoader to loader"};_e.clientLoaderSpan&&(st.fix={description:"Rename clientLoader to loader",edits:[{file:_e.clientLoaderSpan.file,start:_e.clientLoaderSpan.start,end:_e.clientLoaderSpan.end,newText:"loader"}]}),Ve.push(st)}if(_e.hasClientAction&&_e.serverImports.length>0){let Xe=_e.serverImports.join(", "),st={category:"loader",severity:"error",message:`clientAction imports server-only module '${_e.serverImports[0]}' -- clientAction runs in the browser and cannot access server resources`,location:_e.clientActionSpan?{file:_e.clientActionSpan.file,line:_e.clientActionSpan.line,column:_e.clientActionSpan.column}:{file:_e.file,line:1,column:1},code:`clientAction (imports: ${Xe})`,suggestion:"Rename clientAction to action"};_e.clientActionSpan&&(st.fix={description:"Rename clientAction to action",edits:[{file:_e.clientActionSpan.file,start:_e.clientActionSpan.start,end:_e.clientActionSpan.end,newText:"action"}]}),Ve.push(st)}for(let Xe of _e.dataHooks)Xe.hook==="useLoaderData"&&!_e.hasLoader&&!_e.hasClientLoader&&Ve.push({category:"loader",severity:"error",message:"useLoaderData() called but route has no loader",location:Xe.location,code:"useLoaderData()",suggestion:"Add a loader function or remove the hook"}),Xe.hook==="useActionData"&&!_e.hasAction&&!_e.hasClientAction&&Ve.push({category:"loader",severity:"warning",message:"useActionData() called but route has no action",location:Xe.location,code:"useActionData()",suggestion:"Add an action function or remove the hook"});return Ve}var tOe=bp(require("path"));function UQ(_e,Ve,Xe){let st=[],Pt=new Map;function $t(dn){for(let gn of dn){let Pn=tOe.join(Xe,"app",gn.file);Pt.set(Pn,gn),gn.children&&$t(gn.children)}}$t(Ve);for(let dn of _e){let gn=Pt.get(dn.file);if(!gn)continue;let Pn=Emt(dn,gn);st.push(...Pn)}return st}function Emt(_e,Ve){let Xe=[],st=new Set(Ve.params);for(let Pt of _e.dataHooks)if(Pt.hook==="useParams"&&Pt.accessedParams){for(let $t of Pt.accessedParams)if(!st.has($t)){let dn={category:"params",severity:"error",message:`useParams() accesses "${$t}" but route has no :${$t} parameter`,location:Pt.location,code:`useParams().${$t}`,suggestion:Ve.params.length>0?`Available params: ${Ve.params.map(Pn=>":"+Pn).join(", ")}`:`Route ${Ve.path} has no parameters`},gn=Pt.paramSpans?.get($t);if(gn&&Ve.params.length>0){let Pn;Ve.params.length===1?Pn=Ve.params[0]:Pn=dN($t,Ve.params),Pn&&(dn.fix={description:`Renamed "${$t}" to "${Pn}"`,edits:[{file:gn.file,start:gn.start,end:gn.end,newText:Pn}]})}Xe.push(dn)}}return Xe}function aj(_e){switch(_e){case"locale-format":return 3;case"random-value":return 2;case"browser-api":return 1;case"date-render":case"loader-date":return 0}}function qQ(_e){let Ve=[];for(let Xe of _e){let st=Dmt(Xe.hydrationRisks);for(let Pt of st){if(Pt.inUseEffect||Pt.hasSuppressWarning)continue;let $t=wmt(Pt);$t&&Ve.push($t)}}return Ve}function Dmt(_e){if(_e.length<=1)return _e;let Ve=new Map;for(let st of _e){let Pt=st.location.file;Ve.has(Pt)||Ve.set(Pt,[]),Ve.get(Pt).push(st)}let Xe=[];for(let st of Ve.values()){let Pt=[...st].sort((dn,gn)=>{let Pn=aj(gn.type)-aj(dn.type);if(Pn!==0)return Pn;let si=dn.callSpan?dn.callSpan.end-dn.callSpan.start:0;return(gn.callSpan?gn.callSpan.end-gn.callSpan.start:0)-si}),$t=new Set;for(let dn=0;dn<Pt.length;dn++){let gn=Pt[dn];if(!$t.has(gn)&&gn.callSpan)for(let Pn=dn+1;Pn<Pt.length;Pn++){let si=Pt[Pn];if(!$t.has(si)&&Pmt(gn,si)){let ti=aj(gn.type),Sa=aj(si.type);ti>=Sa&&$t.add(si)}}}for(let dn of st)$t.has(dn)||Xe.push(dn)}return Xe}function Pmt(_e,Ve){if(!_e.callSpan)return!1;if(Ve.callSpan)return Ve.callSpan.start>=_e.callSpan.start&&Ve.callSpan.end<=_e.callSpan.end;if(_e.location.file!==Ve.location.file)return!1;let Xe=_e.code.split(`
|
|
434
|
-
`).length,st=_e.location.line+Xe-1;return Ve.location.line>=_e.location.line&&Ve.location.line<=st}function wmt(_e){switch(_e.type){case"date-render":{let Ve;return _e.code.includes("Date.now()")?Ve="Date.now() returns the current timestamp, which differs between server render and client hydration":Ve="new Date() without arguments returns the current time, which differs between server render and client hydration",{category:"hydration",severity:"warning",message:Ve,location:_e.location,code:_e.code,suggestion:"Pass the current date from the loader to ensure server and client use the same value"}}case"locale-format":{let Ve=_e.code.includes("toLocaleDateString")||_e.code.includes("toLocaleTimeString")||_e.code.includes("Intl.DateTimeFormat"),Xe,st;Ve?(Xe="Date formatting without explicit timeZone produces different results on server and client",st=(_e.argCount??0)>=2?'Add timeZone to the existing options object, e.g. timeZone: "UTC"':'Add a timeZone option, e.g. toLocaleDateString(undefined, { timeZone: "UTC" })'):(Xe="Locale-dependent formatting may produce different results on server and client",st='Pass a fixed locale, e.g. .toLocaleString("en-US"), to ensure consistent output');let Pt={category:"hydration",severity:"warning",message:Xe,location:_e.location,code:_e.code,suggestion:st};if(Ve&&_e.callSpan&&_e.argCount!==void 0){let $t=Nmt(_e);$t&&(Pt.fix=$t)}return Pt}case"random-value":{let Ve={category:"hydration",severity:"warning",message:"Random value in render will differ between server and client",location:_e.location,code:_e.code,suggestion:"Use React.useId() for IDs, or generate in useEffect and store in state"};return _e.callSpan&&Amt(_e.code)&&(Ve.fix={description:"Replaced with useId()",edits:[{file:_e.callSpan.file,start:_e.callSpan.start,end:_e.callSpan.end,newText:"useId()"}]}),Ve}case"browser-api":return{category:"hydration",severity:"warning",message:"Browser-only API accessed during render is not available on the server",location:_e.location,code:_e.code,suggestion:'Move to useEffect, or guard with typeof window !== "undefined"'};case"loader-date":return{category:"hydration",severity:"warning",message:"Date from loader may cause hydration mismatch when formatted",location:_e.location,code:_e.code,suggestion:"Format with explicit timeZone, use suppressHydrationWarning, or format in useEffect"};default:return}}function Nmt(_e){if(!_e.callSpan)return;let Ve=_e.argCount??0,Xe=_e.code.match(/\.toLocale(String|DateString|TimeString)\(\)/);if(Ve===0&&Xe){let st=`toLocale${Xe[1]}`,Pt=_e.code.replace(`.${st}()`,`.${st}(undefined, { timeZone: "UTC" })`);return{description:'Added { timeZone: "UTC" } option',edits:[{file:_e.callSpan.file,start:_e.callSpan.start,end:_e.callSpan.end,newText:Pt}]}}if(Ve===0&&_e.code.includes("Intl.DateTimeFormat")){let st=_e.code.replace("Intl.DateTimeFormat()",'Intl.DateTimeFormat(undefined, { timeZone: "UTC" })');if(st!==_e.code)return{description:'Added { timeZone: "UTC" } option',edits:[{file:_e.callSpan.file,start:_e.callSpan.start,end:_e.callSpan.end,newText:st}]}}}function Amt(_e){return/^(uuid|nanoid|uuidv4|generateId)\(\)$/.test(_e.trim())}var nOe=bp(require("fs")),Eo=bp(S6());function rOe(_e){let Ve=nOe.readFileSync(_e,"utf-8"),Xe=Fy(_e,Ve),st=[],Pt=new Map,$t=new Set,dn=new Set,gn=new Map;return Eu(Xe,si=>{if(Eo.default.isImportDeclaration(si)&&si.importClause?.namedBindings&&Eo.default.isNamedImports(si.importClause.namedBindings))for(let ti of si.importClause.namedBindings.elements)ti.propertyName&&gn.set(ti.name.text,ti.propertyName.text)}),Eu(Xe,si=>{if(Eo.default.isVariableDeclaration(si)&&Eo.default.isIdentifier(si.name)){let ti=si.name.text,Sa=si.initializer;if(Sa&&iOe(Sa)&&$t.add(ti),Sa){let We=HQ(Sa,$t,dn);We&&Pt.set(ti,We),che(Sa)&&dn.add(ti)}}if(Eo.default.isVariableDeclaration(si)&&Eo.default.isObjectBindingPattern(si.name)&&si.initializer&&che(si.initializer))for(let ti of si.name.elements)Eo.default.isBindingElement(ti)&&Eo.default.isIdentifier(ti.name)&&dn.add(ti.name.text)}),Eu(Xe,si=>{if(Eo.default.isCallExpression(si)){let ti=Omt(si,Xe,_e,Pt,$t,dn,gn);ti&&st.push(ti)}}),{operations:st.filter((si,ti,Sa)=>Sa.findIndex(We=>We.location.line===si.location.line&&We.location.column===si.location.column)===ti)}}function iOe(_e){if(Eo.default.isAwaitExpression(_e))return iOe(_e.expression);if(Eo.default.isCallExpression(_e)){let Ve=_e.expression;if(Eo.default.isPropertyAccessExpression(Ve))return Ve.name.text==="formData"}return!1}function che(_e){if(Eo.default.isAwaitExpression(_e))return che(_e.expression);if(!Eo.default.isCallExpression(_e))return!1;let Ve=_e.expression;if(Eo.default.isPropertyAccessExpression(Ve)){let Xe=Ve.name.text;return["parse","safeParse","parseAsync","safeParseAsync"].includes(Xe)}return!1}function HQ(_e,Ve,Xe){if(Eo.default.isCallExpression(_e)){let st=_e.expression;if(Eo.default.isPropertyAccessExpression(st)){let Pt=st.name.text;if((Pt==="get"||Pt==="getAll")&&Eo.default.isIdentifier(st.expression)&&Ve.has(st.expression.text))return{source:"formData",type:"string",fieldName:Imt(_e),isValidated:!1};if(Eo.default.isIdentifier(st.expression)&&st.expression.text==="params")return{source:"params",type:"string",fieldName:Pt,isValidated:!1}}}if(Eo.default.isPropertyAccessExpression(_e)&&Eo.default.isIdentifier(_e.expression)&&_e.expression.text==="params")return{source:"params",type:"string",fieldName:_e.name.text,isValidated:!1};if(Eo.default.isStringLiteral(_e))return{source:"literal",type:"string",literalValue:_e.text};if(Eo.default.isNumericLiteral(_e))return{source:"literal",type:"number",literalValue:Number(_e.text)};if(_e.kind===Eo.default.SyntaxKind.TrueKeyword)return{source:"literal",type:"boolean",literalValue:!0};if(_e.kind===Eo.default.SyntaxKind.FalseKeyword)return{source:"literal",type:"boolean",literalValue:!1};if(_e.kind===Eo.default.SyntaxKind.NullKeyword)return{source:"literal",type:"null"};if(Eo.default.isCallExpression(_e)){let st=Eo.default.isIdentifier(_e.expression)?_e.expression.text:void 0;if(st==="Number"||st==="parseInt"||st==="parseFloat"){let Pt=_e.arguments[0]?HQ(_e.arguments[0],Ve,Xe):void 0;if(Pt)return{...Pt,type:"number"}}if(st==="Boolean"){let Pt=_e.arguments[0]?HQ(_e.arguments[0],Ve,Xe):void 0;if(Pt)return{...Pt,type:"boolean"}}}}function Imt(_e){if(_e.arguments.length===0)return;let Ve=_e.arguments[0];if(Eo.default.isStringLiteral(Ve)||Eo.default.isNoSubstitutionTemplateLiteral(Ve))return Ve.text}function Fmt(_e,Ve,Xe){if(Eo.default.isIdentifier(_e)){let st=_e.text;if(Xe.has(st))return{source:"variable",type:"unknown",isValidated:!0};let Pt=Ve.get(st);return Pt||{source:"variable",type:"unknown"}}if(Eo.default.isPropertyAccessExpression(_e)&&Eo.default.isIdentifier(_e.expression)){let st=_e.expression.text;if(Xe.has(st))return{source:"variable",type:"unknown",isValidated:!0}}}function Omt(_e,Ve,Xe,st,Pt,$t,dn){let gn=Lmt(_e);if(!gn)return;let{type:Pn,valuesCall:si,hasWhere:ti}=gn,Sa=dn.get(gn.tableName)||gn.tableName,We=A0(Ve,_e.getStart(Ve)),Bl={type:Pn,tableName:Sa,columnValues:[],hasWhere:ti,location:{file:Xe,line:We.line,column:We.column},span:Td(Ve,_e,Xe)};if(si){let vn=Mmt(si,Ve,Xe,st,Pt,$t);Bl.columnValues=vn}return Bl}function Lmt(_e){let Ve=_e,Xe,st,Pt,$t=!1;for(;Ve;)if(Eo.default.isCallExpression(Ve)){let dn=Ve.expression;if(Eo.default.isPropertyAccessExpression(dn)){let gn=dn.name.text;if((gn==="values"||gn==="set")&&(Xe=Ve),gn==="where"&&($t=!0),Eo.default.isCallExpression(dn.expression)&&Eo.default.isPropertyAccessExpression(dn.expression.expression)){let si=dn.expression.expression.name.text;if(si==="insert"||si==="update"||si==="delete"){st=si;let ti=dn.expression.arguments[0];ti&&Eo.default.isIdentifier(ti)&&(Pt=ti.text);break}}if(gn==="insert"||gn==="update"||gn==="delete"){st=gn;let Pn=Ve.arguments[0];if(Pn&&Eo.default.isIdentifier(Pn)&&(Pt=Pn.text),!Xe&&gn==="insert"){let si=Ve.parent;si&&Eo.default.isPropertyAccessExpression(si)&&si.name.text==="values"&&si.parent&&Eo.default.isCallExpression(si.parent)&&(Xe=si.parent)}break}Ve=dn.expression}else break}else if(Eo.default.isPropertyAccessExpression(Ve))Ve=Ve.expression;else break;if(Eo.default.isCallExpression(_e)){let dn=_e.expression;if(Eo.default.isPropertyAccessExpression(dn)){let gn=dn.name.text;if(gn==="where"&&($t=!0),gn==="values"||gn==="set"){Xe=_e;let Pn=dn.expression;for(;Pn&&Eo.default.isCallExpression(Pn);){let si=Pn.expression;if(Eo.default.isPropertyAccessExpression(si)){let ti=si.name.text;if(ti==="insert"||ti==="update"||ti==="delete"){st=ti;let Sa=Pn.arguments[0];Sa&&Eo.default.isIdentifier(Sa)&&(Pt=Sa.text);break}Pn=si.expression}else break}}}}if(!(!st||!Pt))return{type:st,tableName:Pt,valuesCall:Xe,hasWhere:$t}}function Mmt(_e,Ve,Xe,st,Pt,$t){let dn=[];if(_e.arguments.length===0)return dn;let gn=_e.arguments[0];if(Eo.default.isObjectLiteralExpression(gn)){for(let Pn of gn.properties)if(Eo.default.isPropertyAssignment(Pn)){let si=Eo.default.isIdentifier(Pn.name)||Eo.default.isStringLiteral(Pn.name)?Pn.name.text:void 0;if(si){let ti=HQ(Pn.initializer,Pt,$t)||Fmt(Pn.initializer,st,$t);dn.push({columnName:si,dataSource:ti||{source:"unknown",type:"unknown"},span:Td(Ve,Pn.initializer,Xe)})}}else if(Eo.default.isShorthandPropertyAssignment(Pn)){let si=Pn.name.text,ti=st.get(si);dn.push({columnName:si,dataSource:ti||{source:"variable",type:"unknown"},span:Td(Ve,Pn.name,Xe)})}}return dn}var E6=bp(require("fs")),mN=bp(require("path")),fu=bp(S6());var Rmt=["src/db/schema.ts","db/schema.ts","lib/db/schema.ts","src/schema.ts","app/db/schema.ts","server/db/schema.ts"];function sOe(_e){for(let Xe of Rmt){let st=mN.join(_e,Xe);if(E6.existsSync(st))return st}let Ve=[mN.join(_e,"drizzle.config.ts"),mN.join(_e,"drizzle.config.js")];for(let Xe of Ve)if(E6.existsSync(Xe)){let st=jmt(Xe,_e);if(st&&E6.existsSync(st))return st}}function jmt(_e,Ve){let Xe=E6.readFileSync(_e,"utf-8"),st=Fy(_e,Xe),Pt;return Eu(st,$t=>{if(fu.default.isPropertyAssignment($t)&&(fu.default.isIdentifier($t.name)?$t.name.text:void 0)==="schema"){if(fu.default.isStringLiteral($t.initializer))Pt=mN.resolve(Ve,$t.initializer.text);else if(fu.default.isArrayLiteralExpression($t.initializer)){let gn=$t.initializer.elements[0];gn&&fu.default.isStringLiteral(gn)&&(Pt=mN.resolve(Ve,gn.text))}}}),Pt}function aOe(_e){if(!E6.existsSync(_e))throw new Error(`Drizzle schema file not found: ${_e}`);let Ve=E6.readFileSync(_e,"utf-8"),Xe=Fy(_e,Ve),st=[],Pt=[];Eu(Xe,dn=>{if(fu.default.isVariableStatement(dn)){for(let gn of dn.declarationList.declarations)if(fu.default.isIdentifier(gn.name)&&gn.initializer){let Pn=Bmt(gn.name.text,gn.initializer);Pn&&Pt.push(Pn)}}});let $t=new Map;for(let dn of Pt)$t.set(dn.name,dn);return Eu(Xe,dn=>{if(fu.default.isVariableStatement(dn)){for(let gn of dn.declarationList.declarations)if(fu.default.isIdentifier(gn.name)&&gn.initializer){let Pn=Jmt(gn.name.text,gn.initializer,$t);Pn&&st.push(Pn)}}}),{tables:st,enums:Pt,schemaPath:_e}}function Bmt(_e,Ve){if(!fu.default.isCallExpression(Ve)||(fu.default.isIdentifier(Ve.expression)?Ve.expression.text:void 0)!=="pgEnum")return;let st=Ve.arguments;if(st.length<2)return;let Pt=st[0];if(!fu.default.isStringLiteral(Pt))return;let $t=Pt.text,dn=st[1];if(!fu.default.isArrayLiteralExpression(dn))return;let gn=[];for(let Pn of dn.elements)fu.default.isStringLiteral(Pn)&&gn.push(Pn.text);return{name:_e,sqlName:$t,values:gn}}function Jmt(_e,Ve,Xe){if(!fu.default.isCallExpression(Ve)||(fu.default.isIdentifier(Ve.expression)?Ve.expression.text:void 0)!=="pgTable")return;let Pt=Ve.arguments;if(Pt.length<2)return;let $t=Pt[0];if(!fu.default.isStringLiteral($t))return;let dn=$t.text,gn=Pt[1];if(!fu.default.isObjectLiteralExpression(gn))return;let Pn=[];for(let si of gn.properties)if(fu.default.isPropertyAssignment(si)&&fu.default.isIdentifier(si.name)){let ti=zmt(si.name.text,si.initializer,Xe);ti&&Pn.push(ti)}return{name:_e,sqlName:dn,columns:Pn}}function zmt(_e,Ve,Xe){let st=Wmt(Ve),Pt=Vmt(Ve);if(!Pt)return;let{type:$t,sqlName:dn,enumName:gn}=Umt(Pt,Xe),Pn=st.has("notNull"),si=st.has("default")||st.has("defaultNow"),ti=$t==="serial"||st.has("$defaultFn");return{name:_e,sqlName:dn||_e,type:$t,enumName:gn,notNull:Pn,hasDefault:si,isAutoGenerated:ti,isRequired:Pn&&!si&&!ti}}function Wmt(_e){let Ve=new Set,Xe=_e;for(;fu.default.isCallExpression(Xe);){let st=Xe.expression;if(fu.default.isPropertyAccessExpression(st))Ve.add(st.name.text),Xe=st.expression;else break}return Ve}function Vmt(_e){let Ve=_e;for(;fu.default.isCallExpression(Ve);){let Xe=Ve.expression;if(fu.default.isPropertyAccessExpression(Xe))Ve=Xe.expression;else{if(fu.default.isIdentifier(Xe))return Ve;if(fu.default.isCallExpression(Xe))return Ve;break}}if(fu.default.isCallExpression(_e))return _e}function Umt(_e,Ve){let Xe,st,Pt;if(fu.default.isIdentifier(_e.expression))Xe=_e.expression.text;else if(fu.default.isCallExpression(_e.expression)&&fu.default.isIdentifier(_e.expression.expression)){let dn=_e.expression.expression.text;Ve.has(dn)&&(Xe="enum",Pt=dn)}if(fu.default.isIdentifier(_e.expression)&&Ve.has(_e.expression.text)&&(Xe="enum",Pt=_e.expression.text),_e.arguments.length>0){let dn=_e.arguments[0];fu.default.isStringLiteral(dn)&&(st=dn.text)}return{type:qmt(Xe),sqlName:st,enumName:Pt}}function qmt(_e){return _e&&{text:"text",varchar:"varchar",integer:"integer",serial:"serial",bigint:"bigint",boolean:"boolean",timestamp:"timestamp",date:"date",json:"json",jsonb:"jsonb",uuid:"uuid",real:"real",doublePrecision:"doublePrecision",numeric:"numeric",enum:"enum"}[_e]||"unknown"}function oOe(_e,Ve){return _e.tables.find(Xe=>Xe.name===Ve)}function lhe(_e,Ve){return _e.enums.find(Xe=>Xe.name===Ve)}function cOe(_e){return _e.columns.filter(Ve=>Ve.isRequired)}function lOe(_e){return["integer","serial","bigint","real","doublePrecision","numeric"].includes(_e.type)}function uOe(_e){return _e.type==="enum"&&!!_e.enumName}function _Oe(_e,Ve){let Xe=[];for(let st of _e)try{let{operations:Pt}=rOe(st);for(let $t of Pt){let dn=Hmt($t,Ve);Xe.push(...dn)}}catch{}return Xe}function Hmt(_e,Ve){let Xe=[],st=oOe(Ve,_e.tableName);if(!st)return Xe.push({category:"drizzle",severity:"error",message:`Table '${_e.tableName}' not found in Drizzle schema`,location:_e.location,code:`db.${_e.type}(${_e.tableName})`,suggestion:"Check the table name matches an export in the schema file"}),Xe;if(_e.type==="insert"){let Pt=Gmt(_e,st);Xe.push(...Pt)}if(_e.type==="insert"){let Pt=$mt(_e,st);Xe.push(...Pt)}(_e.type==="delete"||_e.type==="update")&&(_e.hasWhere||Xe.push({category:"drizzle",severity:"warning",message:`db.${_e.type}(${_e.tableName}) has no .where() clause -- affects all rows`,location:_e.location,code:`db.${_e.type}(${_e.tableName})${_e.type==="update"?".set({...})":""}`,suggestion:"Add a .where() clause to target specific rows"}));for(let Pt of _e.columnValues){let $t=st.columns.find(Pn=>Pn.name===Pt.columnName);if(!$t){Xe.push({category:"drizzle",severity:"error",message:`Column '${Pt.columnName}' not found on table '${_e.tableName}'`,location:_e.location,code:`${Pt.columnName}: ...`,suggestion:`Check column name matches the schema definition for '${_e.tableName}'`});continue}let dn=Xmt(Pt,$t,_e);if(dn&&Xe.push(dn),uOe($t)){let Pn=Ymt(Pt,$t,_e,Ve);Pn&&Xe.push(Pn);let si=Qmt(Pt,$t,_e,Ve);si&&Xe.push(si)}let gn=Zmt(Pt,$t,_e);gn&&Xe.push(gn)}return Xe}function Gmt(_e,Ve){let Xe=[],st=cOe(Ve),Pt=new Set(_e.columnValues.map($t=>$t.columnName));for(let $t of st)Pt.has($t.name)||Xe.push({category:"drizzle",severity:"error",message:`db.insert(${_e.tableName}) missing required column '${$t.name}'`,location:_e.location,code:`db.insert(${_e.tableName}).values({...})`,suggestion:`Add '${$t.name}' to the values object`});return Xe}function $mt(_e,Ve){let Xe=[];for(let st of _e.columnValues){let Pt=Ve.columns.find($t=>$t.name===st.columnName);Pt&&Pt.isAutoGenerated&&Xe.push({category:"drizzle",severity:"warning",message:`Column '${Pt.name}' is auto-generated (${Pt.type}) but is explicitly set in insert`,location:_e.location,code:`${st.columnName}: ...`,suggestion:`Remove '${Pt.name}' from the values object to use auto-generation`})}return Xe}function Xmt(_e,Ve,Xe){let st=_e.dataSource;if(st.source==="literal"&&st.type==="null"&&Ve.notNull)return{category:"drizzle",severity:"error",message:`Column '${Ve.name}' has notNull constraint but receives null`,location:Xe.location,code:`${_e.columnName}: null`,suggestion:`Provide a non-null value for '${Ve.name}'`}}function Qmt(_e,Ve,Xe,st){let Pt=_e.dataSource;if(Pt.source!=="literal"||Pt.type!=="string")return;let $t=Ve.enumName?lhe(st,Ve.enumName):void 0;if(!$t)return;let dn=String(Pt.literalValue);if(!$t.values.includes(dn)){let gn=$t.values.map(Pn=>`'${Pn}'`).join(", ");return{category:"drizzle",severity:"error",message:`Enum column '${Ve.name}' receives invalid value '${dn}'`,location:Xe.location,code:`${_e.columnName}: '${dn}'`,suggestion:`Allowed values are: ${gn}`}}}function Ymt(_e,Ve,Xe,st){let Pt=_e.dataSource;if(!Pt.isValidated&&Pt.source!=="literal"&&!(Pt.source==="variable"||Pt.source==="unknown")&&(Pt.source==="formData"||Pt.source==="params"||Pt.source==="body")){let dn=(Ve.enumName?lhe(st,Ve.enumName):void 0)?.values.map(gn=>`'${gn}'`).join(", ")||"enum values";return{category:"drizzle",severity:"error",message:`Enum column '${Ve.name}' receives unvalidated external input`,location:Xe.location,code:`${_e.columnName}: ${Pt.source}.get('${Pt.fieldName||_e.columnName}')`,suggestion:`Validate with zod schema or check against allowed values: ${dn}`}}}function Zmt(_e,Ve,Xe){let st=_e.dataSource;if(st.isValidated||st.source==="literal")return;let Pt=["formData","params","body"];if(lOe(Ve)&&st.type==="string"&&Pt.includes(st.source))return{category:"drizzle",severity:"error",message:`Column '${Ve.name}' expects ${Ve.type} but receives string from ${st.source}.get()`,location:Xe.location,code:`${_e.columnName}: ${st.source}.get('${st.fieldName||_e.columnName}')`,suggestion:`Convert with parseInt(${_e.columnName}, 10) or Number(${_e.columnName})`};if(Ve.type==="boolean"&&st.type==="string"&&Pt.includes(st.source))return{category:"drizzle",severity:"error",message:`Column '${Ve.name}' expects boolean but receives string from ${st.source}.get()`,location:Xe.location,code:`${_e.columnName}: ${st.source}.get('${st.fieldName||_e.columnName}')`,suggestion:`Convert with Boolean(${_e.columnName}) or ${_e.columnName} === 'true'`};if((Ve.type==="timestamp"||Ve.type==="date")&&st.type==="string"&&Pt.includes(st.source))return{category:"drizzle",severity:"warning",message:`Column '${Ve.name}' expects ${Ve.type} but receives string from ${st.source}.get()`,location:Xe.location,code:`${_e.columnName}: ${st.source}.get('${st.fieldName||_e.columnName}')`,suggestion:`Convert with new Date(${_e.columnName})`};if((Ve.type==="json"||Ve.type==="jsonb")&&st.type==="string"&&Pt.includes(st.source))return{category:"drizzle",severity:"warning",message:`Column '${Ve.name}' expects ${Ve.type} but receives string from ${st.source}.get()`,location:Xe.location,code:`${_e.columnName}: ${st.source}.get('${st.fieldName||_e.columnName}')`,suggestion:`Convert with JSON.parse(${_e.columnName})`}}var dOe=bp(require("fs")),Wc=bp(S6());var mOe=new Set(["Dialog","Modal","AlertDialog","ConfirmDialog","ConfirmationDialog","Sheet","Drawer","Popover"]),Kmt=[/^save/i,/^submit/i,/^delete/i,/^remove/i,/^add/i,/^create/i,/^update/i,/^confirm/i,/^apply/i],egt=[/^cancel/i,/^close/i,/^dismiss/i,/^no$/i],tgt=new Set(["input","select","textarea"]);function gOe(_e){let Ve=[];for(let Xe of _e)try{let st=dOe.readFileSync(Xe,"utf-8"),Pt=Fy(Xe,st),$t=ngt(Pt),dn=fgt(Pt),gn=igt(Pt),Pn=sgt(Pt,Xe,$t,gn);for(let ti of Pn){let Sa=_gt(ti);Ve.push(...Sa)}let si=pgt(Pt,Xe,$t,dn,Pn);for(let ti of si)ti.handlerBehavior==="stub"&&Ve.push({category:"interactivity",severity:"warning",message:`"${ti.text}" button has an empty or stub onClick handler`,location:ti.location,code:ti.code,suggestion:"Implement the handler to perform the intended action"})}catch{}return Ve}function ngt(_e){let Ve=new Set;return Eu(_e,Xe=>{if(Wc.default.isVariableDeclaration(Xe)&&Wc.default.isArrayBindingPattern(Xe.name)&&Xe.initializer&&rgt(Xe.initializer)){let st=Xe.name.elements;if(st.length>=2){let Pt=st[1];Wc.default.isBindingElement(Pt)&&Wc.default.isIdentifier(Pt.name)&&Ve.add(Pt.name.text)}}}),Ve}function rgt(_e){if(Wc.default.isCallExpression(_e)){let Ve=_e.expression;if(Wc.default.isIdentifier(Ve)&&Ve.text==="useState")return!0}return!1}function igt(_e){let Ve=!1;return Eu(_e,Xe=>{if(Wc.default.isCallExpression(Xe)){let st=Xe.expression;Wc.default.isIdentifier(st)&&st.text==="useFetcher"&&(Ve=!0)}}),Ve}function sgt(_e,Ve,Xe,st){let Pt=[];return Eu(_e,$t=>{if(Wc.default.isJsxElement($t)||Wc.default.isJsxSelfClosingElement($t)){let dn=k6($t);if(dn&&mOe.has(dn)){let gn=agt($t,dn,_e,Ve,Xe,st);Pt.push(gn)}}}),Pt}function agt(_e,Ve,Xe,st,Pt,$t){let dn=A0(Xe,_e.getStart()),gn={file:st,line:dn.line,column:dn.column},Pn=!1,si=!1,ti=$t,Sa=[],We=[];return Eu(_e,Bl=>{if(Wc.default.isJsxElement(Bl)||Wc.default.isJsxSelfClosingElement(Bl)){let vn=k6(Bl);if(!vn)return;if(vn==="Form"&&(si=!0,We.push(Bl)),ogt(Bl,vn)&&We.length===0&&(Pn=!0),vn==="button"||vn==="Button"){let an=cgt(Bl,Xe,st,Pt);an&&vOe(an.text)&&Sa.push(an)}}}),{type:Ve,location:gn,hasPlainInputs:Pn,hasReactRouterForm:si,hasFetcherSubmit:ti,actionButtons:Sa}}function ogt(_e,Ve){return tgt.has(Ve)?!0:MQ(Ve)?Wg(_e,"name")!==void 0:!1}function cgt(_e,Ve,Xe,st){let Pt=RQ(_e);if(!Pt)return;let $t=Wg(_e,"onClick"),dn="unknown";$t?.initializer&&(dn=lgt($t.initializer,st));let gn=A0(Ve,_e.getStart());return{text:Pt,location:{file:Xe,line:gn.line,column:gn.column},code:`<Button onClick={...}>${Pt}</Button>`,handlerBehavior:dn}}function lgt(_e,Ve){if(!Wc.default.isJsxExpression(_e)||!_e.expression)return"unknown";let Xe=_e.expression;return Wc.default.isArrowFunction(Xe)?hOe(Xe.body,Ve):"unknown"}function hOe(_e,Ve){if(Wc.default.isCallExpression(_e))return yOe(_e,Ve);if(Wc.default.isBlock(_e)){let Xe=_e.statements;if(Xe.length===0)return"stub";let st=!0,Pt=!0,$t=!1;for(let dn of Xe)if(Wc.default.isExpressionStatement(dn)){let gn=ugt(dn.expression,Ve);gn==="submits"&&($t=!0),gn!=="closes-dialog"&&(st=!1),gn!=="stub"&&(Pt=!1)}else st=!1,Pt=!1;return $t?"submits":st?"closes-dialog":Pt?"stub":"unknown"}return"unknown"}function yOe(_e,Ve){let Xe=_e.expression;if(Wc.default.isIdentifier(Xe)&&Ve.has(Xe.text)){let st=_e.arguments[0];return st&&st.kind===Wc.default.SyntaxKind.FalseKeyword?"closes-dialog":"unknown"}return Wc.default.isPropertyAccessExpression(Xe)&&Wc.default.isIdentifier(Xe.expression)&&Xe.expression.text==="console"&&Xe.name.text==="log"?"stub":Wc.default.isIdentifier(Xe)&&Xe.text==="submit"||Wc.default.isPropertyAccessExpression(Xe)&&Xe.name.text==="submit"?"submits":"unknown"}function ugt(_e,Ve){return Wc.default.isCallExpression(_e)?yOe(_e,Ve):"unknown"}function vOe(_e){for(let Ve of egt)if(Ve.test(_e))return!1;for(let Ve of Kmt)if(Ve.test(_e))return!0;return!1}function _gt(_e){let Ve=[];if(_e.hasReactRouterForm||_e.hasFetcherSubmit)return Ve;for(let Xe of _e.actionButtons)if(Xe.handlerBehavior==="closes-dialog"){let st=/^(delete|remove)/i.test(Xe.text);_e.hasPlainInputs?Ve.push({category:"interactivity",severity:"error",message:`"${Xe.text}" button in ${_e.type} only closes dialog without saving data`,location:Xe.location,code:Xe.code,suggestion:"Wrap inputs in a <Form> component or use useFetcher.submit() to persist data"}):st&&Ve.push({category:"interactivity",severity:"error",message:`"${Xe.text}" button in ${_e.type} only closes dialog without performing the action`,location:Xe.location,code:Xe.code,suggestion:'Use useFetcher.submit() with a delete intent or wrap in a <Form method="delete">'})}else Xe.handlerBehavior==="stub"&&Ve.push({category:"interactivity",severity:"warning",message:`"${Xe.text}" button has an empty or stub onClick handler`,location:Xe.location,code:Xe.code,suggestion:"Implement the handler or remove the button if not needed"});return Ve}function fgt(_e){let Ve=new Set;return Eu(_e,Xe=>{if(Wc.default.isVariableDeclaration(Xe)&&Wc.default.isIdentifier(Xe.name)){let st=Xe.name.text;Xe.initializer&&Wc.default.isArrowFunction(Xe.initializer)&&fOe(Xe.initializer.body)&&Ve.add(st)}Wc.default.isFunctionDeclaration(Xe)&&Xe.name&&Xe.body&&fOe(Xe.body)&&Ve.add(Xe.name.text)}),Ve}function fOe(_e){if(Wc.default.isCallExpression(_e))return pOe(_e);if(Wc.default.isBlock(_e)){let Ve=_e.statements;return Ve.length===0?!0:Ve.every(Xe=>Wc.default.isExpressionStatement(Xe)&&Wc.default.isCallExpression(Xe.expression)?pOe(Xe.expression):!1)}return!1}function pOe(_e){let Ve=_e.expression;return Wc.default.isPropertyAccessExpression(Ve)&&Wc.default.isIdentifier(Ve.expression)&&Ve.expression.text==="console"?["log","warn","error","info","debug"].includes(Ve.name.text):!1}function pgt(_e,Ve,Xe,st,Pt){let $t=[],dn=[];return Eu(_e,gn=>{if(Wc.default.isJsxElement(gn)||Wc.default.isJsxSelfClosingElement(gn)){let Pn=k6(gn);Pn&&mOe.has(Pn)&&dn.push({start:gn.getStart(),end:gn.getEnd()})}}),Eu(_e,gn=>{if(Wc.default.isJsxElement(gn)||Wc.default.isJsxSelfClosingElement(gn)){let Pn=k6(gn);if(!Pn||!(Pn==="button"||Pn==="Button"||Pn.endsWith("Button")))return;let ti=gn.getStart();if(dn.some(an=>ti>=an.start&&ti<=an.end))return;let We=RQ(gn);if(!We||!vOe(We))return;let Bl=Wg(gn,"onClick");if(!Bl?.initializer)return;let vn=dgt(Bl.initializer,Xe,st);if(vn==="stub"){let an=A0(_e,gn.getStart());$t.push({text:We,location:{file:Ve,line:an.line,column:an.column},code:`<${Pn} onClick={...}>${We}</${Pn}>`,handlerBehavior:vn})}}}),$t}function dgt(_e,Ve,Xe){if(!Wc.default.isJsxExpression(_e)||!_e.expression)return"unknown";let st=_e.expression;if(Wc.default.isArrowFunction(st)){let Pt=hOe(st.body,Ve);return Pt==="stub"?"stub":Pt==="submits"?"submits":"unknown"}return Wc.default.isIdentifier(st)&&Xe.has(st.text)?"stub":"unknown"}var bOe=["links","loader","params","interactivity","hydration"],mgt=["forms","drizzle"],Jht=[...bOe,...mgt];function SOe(_e){let{root:Ve,files:Xe,checks:st}=_e,Pt=[];try{Pt=jQ(Ve)}catch(si){return{issues:[{category:"links",severity:"error",message:si instanceof Error?si.message:"Failed to parse routes file",location:{file:D6.join(Ve,"app","routes.ts"),line:1,column:1}}],routes:[],components:[]}}let $t=ggt(Ve,Xe),dn=[];for(let si of $t)try{let ti=BQ(si);dn.push(ti)}catch(ti){console.error(`Warning: Could not parse ${si}:`,ti)}let gn=[],Pn=new Set(st.length>0?st:bOe);if(Pn.has("links")&&gn.push(...zQ(dn,Pt)),Pn.has("forms")&&gn.push(...WQ(dn,Pt,Ve)),Pn.has("loader")&&gn.push(...VQ(dn)),Pn.has("params")&&gn.push(...UQ(dn,Pt,Ve)),Pn.has("hydration")&&gn.push(...qQ(dn)),Pn.has("drizzle")){let si=_e.drizzleSchemaPath||sOe(Ve);if(si)try{let ti=aOe(si);gn.push(..._Oe($t,ti))}catch(ti){console.error(`Warning: Could not parse Drizzle schema at ${si}:`,ti)}else console.error("Warning: drizzle check enabled but no schema file found. Use --drizzle-schema to specify the path.")}if(Pn.has("interactivity")&&gn.push(...gOe($t)),Xe.length>0){let si=new Set(Xe.map(Sa=>D6.resolve(Sa)));return{issues:gn.filter(Sa=>si.has(D6.resolve(Sa.location.file))),routes:Pt,components:dn}}return{issues:gn,routes:Pt,components:dn}}function ggt(_e,Ve){if(Ve.length>0)return Ve.map(Pt=>D6.resolve(Pt));let Xe=D6.join(_e,"app","routes");if(!GQ.existsSync(Xe))return[];let st=[];return xOe(Xe,Pt=>{Pt.endsWith(".tsx")&&st.push(Pt)}),st}function xOe(_e,Ve){let Xe=GQ.readdirSync(_e,{withFileTypes:!0});for(let st of Xe){let Pt=D6.join(_e,st.name);st.isDirectory()?xOe(Pt,Ve):st.isFile()&&Ve(Pt)}}var oj=bp(require("fs"));function TOe(_e,Ve=!1){let Xe=_e.filter(Pn=>Pn.fix),st=_e.filter(Pn=>!Pn.fix),Pt=new Map;for(let Pn of Xe)for(let si of Pn.fix.edits){let ti=Pt.get(si.file)||[];ti.push({edit:si,issue:Pn}),Pt.set(si.file,ti)}let $t=[],dn=[],gn=[];for(let[Pn,si]of Pt)try{let ti=si.map(We=>We.edit);if(hgt(Pn,ti,Ve).modified){$t.push(Pn);for(let{issue:We}of si)dn.includes(We)||dn.push(We)}}catch(ti){gn.push({file:Pn,error:ti instanceof Error?ti.message:String(ti)})}return{filesModified:$t,fixesApplied:dn.length,fixedIssues:dn,unfixableIssues:st,errors:gn}}function hgt(_e,Ve,Xe){let st=oj.readFileSync(_e,"utf-8"),Pt=[...Ve].sort((dn,gn)=>gn.start-dn.start);for(let dn=0;dn<Pt.length-1;dn++){let gn=Pt[dn],Pn=Pt[dn+1];if(gn.start<Pn.end)throw new Error(`Overlapping edits at positions ${Pn.start}-${Pn.end} and ${gn.start}-${gn.end}`)}let $t=st;for(let dn of Pt)$t=$t.slice(0,dn.start)+dn.newText+$t.slice(dn.end);return!Xe&&$t!==st?(oj.writeFileSync(_e,$t,"utf-8"),{modified:!0,newContent:$t}):{modified:$t!==st,newContent:$t}}function kOe(_e,Ve,Xe=2){let st=oj.readFileSync(_e,"utf-8"),Pt=st.split(`
|
|
434
|
+
`).length,st=_e.location.line+Xe-1;return Ve.location.line>=_e.location.line&&Ve.location.line<=st}function wmt(_e){switch(_e.type){case"date-render":{let Ve;return _e.code.includes("Date.now()")?Ve="Date.now() returns the current timestamp, which differs between server render and client hydration":Ve="new Date() without arguments returns the current time, which differs between server render and client hydration",{category:"hydration",severity:"warning",message:Ve,location:_e.location,code:_e.code,suggestion:"Pass the current date from the loader to ensure server and client use the same value"}}case"locale-format":{let Ve=_e.code.includes("toLocaleDateString")||_e.code.includes("toLocaleTimeString")||_e.code.includes("Intl.DateTimeFormat"),Xe,st;Ve?(Xe="Date formatting without explicit timeZone produces different results on server and client",st=(_e.argCount??0)>=2?'Add timeZone to the existing options object, e.g. timeZone: "UTC"':'Add a timeZone option, e.g. toLocaleDateString(undefined, { timeZone: "UTC" })'):(Xe="Locale-dependent formatting may produce different results on server and client",st='Pass a fixed locale, e.g. .toLocaleString("en-US"), to ensure consistent output');let Pt={category:"hydration",severity:"warning",message:Xe,location:_e.location,code:_e.code,suggestion:st};if(Ve&&_e.callSpan&&_e.argCount!==void 0){let $t=Nmt(_e);$t&&(Pt.fix=$t)}return Pt}case"random-value":{let Ve={category:"hydration",severity:"warning",message:"Random value in render will differ between server and client",location:_e.location,code:_e.code,suggestion:"Use React.useId() for IDs, or generate in useEffect and store in state"};return _e.callSpan&&Amt(_e.code)&&(Ve.fix={description:"Replaced with useId()",edits:[{file:_e.callSpan.file,start:_e.callSpan.start,end:_e.callSpan.end,newText:"useId()"}]}),Ve}case"browser-api":return{category:"hydration",severity:"warning",message:"Browser-only API accessed during render is not available on the server",location:_e.location,code:_e.code,suggestion:'Move to useEffect, or guard with typeof window !== "undefined"'};case"loader-date":return{category:"hydration",severity:"warning",message:"Date from loader may cause hydration mismatch when formatted",location:_e.location,code:_e.code,suggestion:"Format with explicit timeZone, use suppressHydrationWarning, or format in useEffect"};default:return}}function Nmt(_e){if(!_e.callSpan)return;let Ve=_e.argCount??0,Xe=_e.code.match(/\.toLocale(String|DateString|TimeString)\(\)/);if(Ve===0&&Xe){let st=`toLocale${Xe[1]}`,Pt=_e.code.replace(`.${st}()`,`.${st}(undefined, { timeZone: "UTC" })`);return{description:'Added { timeZone: "UTC" } option',edits:[{file:_e.callSpan.file,start:_e.callSpan.start,end:_e.callSpan.end,newText:Pt}]}}if(Ve===0&&_e.code.includes("Intl.DateTimeFormat")){let st=_e.code.replace("Intl.DateTimeFormat()",'Intl.DateTimeFormat(undefined, { timeZone: "UTC" })');if(st!==_e.code)return{description:'Added { timeZone: "UTC" } option',edits:[{file:_e.callSpan.file,start:_e.callSpan.start,end:_e.callSpan.end,newText:st}]}}}function Amt(_e){return/^(uuid|nanoid|uuidv4|generateId)\(\)$/.test(_e.trim())}var nOe=bp(require("fs")),Eo=bp(S6());function rOe(_e){let Ve=nOe.readFileSync(_e,"utf-8"),Xe=Fy(_e,Ve),st=[],Pt=new Map,$t=new Set,dn=new Set,gn=new Map;return Eu(Xe,si=>{if(Eo.default.isImportDeclaration(si)&&si.importClause?.namedBindings&&Eo.default.isNamedImports(si.importClause.namedBindings))for(let ti of si.importClause.namedBindings.elements)ti.propertyName&&gn.set(ti.name.text,ti.propertyName.text)}),Eu(Xe,si=>{if(Eo.default.isVariableDeclaration(si)&&Eo.default.isIdentifier(si.name)){let ti=si.name.text,Sa=si.initializer;if(Sa&&iOe(Sa)&&$t.add(ti),Sa){let We=HQ(Sa,$t,dn);We&&Pt.set(ti,We),che(Sa)&&dn.add(ti)}}if(Eo.default.isVariableDeclaration(si)&&Eo.default.isObjectBindingPattern(si.name)&&si.initializer&&che(si.initializer))for(let ti of si.name.elements)Eo.default.isBindingElement(ti)&&Eo.default.isIdentifier(ti.name)&&dn.add(ti.name.text)}),Eu(Xe,si=>{if(Eo.default.isCallExpression(si)){let ti=Omt(si,Xe,_e,Pt,$t,dn,gn);ti&&st.push(ti)}}),{operations:st.filter((si,ti,Sa)=>Sa.findIndex(We=>We.location.line===si.location.line&&We.location.column===si.location.column)===ti)}}function iOe(_e){if(Eo.default.isAwaitExpression(_e))return iOe(_e.expression);if(Eo.default.isCallExpression(_e)){let Ve=_e.expression;if(Eo.default.isPropertyAccessExpression(Ve))return Ve.name.text==="formData"}return!1}function che(_e){if(Eo.default.isAwaitExpression(_e))return che(_e.expression);if(!Eo.default.isCallExpression(_e))return!1;let Ve=_e.expression;if(Eo.default.isPropertyAccessExpression(Ve)){let Xe=Ve.name.text;return["parse","safeParse","parseAsync","safeParseAsync"].includes(Xe)}return!1}function HQ(_e,Ve,Xe){if(Eo.default.isCallExpression(_e)){let st=_e.expression;if(Eo.default.isPropertyAccessExpression(st)){let Pt=st.name.text;if((Pt==="get"||Pt==="getAll")&&Eo.default.isIdentifier(st.expression)&&Ve.has(st.expression.text))return{source:"formData",type:"string",fieldName:Imt(_e),isValidated:!1};if(Eo.default.isIdentifier(st.expression)&&st.expression.text==="params")return{source:"params",type:"string",fieldName:Pt,isValidated:!1}}}if(Eo.default.isPropertyAccessExpression(_e)&&Eo.default.isIdentifier(_e.expression)&&_e.expression.text==="params")return{source:"params",type:"string",fieldName:_e.name.text,isValidated:!1};if(Eo.default.isStringLiteral(_e))return{source:"literal",type:"string",literalValue:_e.text};if(Eo.default.isNumericLiteral(_e))return{source:"literal",type:"number",literalValue:Number(_e.text)};if(_e.kind===Eo.default.SyntaxKind.TrueKeyword)return{source:"literal",type:"boolean",literalValue:!0};if(_e.kind===Eo.default.SyntaxKind.FalseKeyword)return{source:"literal",type:"boolean",literalValue:!1};if(_e.kind===Eo.default.SyntaxKind.NullKeyword)return{source:"literal",type:"null"};if(Eo.default.isCallExpression(_e)){let st=Eo.default.isIdentifier(_e.expression)?_e.expression.text:void 0;if(st==="Number"||st==="parseInt"||st==="parseFloat"){let Pt=_e.arguments[0]?HQ(_e.arguments[0],Ve,Xe):void 0;if(Pt)return{...Pt,type:"number"}}if(st==="Boolean"){let Pt=_e.arguments[0]?HQ(_e.arguments[0],Ve,Xe):void 0;if(Pt)return{...Pt,type:"boolean"}}}}function Imt(_e){if(_e.arguments.length===0)return;let Ve=_e.arguments[0];if(Eo.default.isStringLiteral(Ve)||Eo.default.isNoSubstitutionTemplateLiteral(Ve))return Ve.text}function Fmt(_e,Ve,Xe){if(Eo.default.isIdentifier(_e)){let st=_e.text;if(Xe.has(st))return{source:"variable",type:"unknown",isValidated:!0};let Pt=Ve.get(st);return Pt||{source:"variable",type:"unknown"}}if(Eo.default.isPropertyAccessExpression(_e)&&Eo.default.isIdentifier(_e.expression)){let st=_e.expression.text;if(Xe.has(st))return{source:"variable",type:"unknown",isValidated:!0}}}function Omt(_e,Ve,Xe,st,Pt,$t,dn){let gn=Lmt(_e);if(!gn)return;let{type:Pn,valuesCall:si,hasWhere:ti}=gn,Sa=dn.get(gn.tableName)||gn.tableName,We=A0(Ve,_e.getStart(Ve)),Bl={type:Pn,tableName:Sa,columnValues:[],hasWhere:ti,location:{file:Xe,line:We.line,column:We.column},span:Td(Ve,_e,Xe)};if(si){let vn=Mmt(si,Ve,Xe,st,Pt,$t);Bl.columnValues=vn}return Bl}function Lmt(_e){let Ve=_e,Xe,st,Pt,$t=!1;for(;Ve;)if(Eo.default.isCallExpression(Ve)){let dn=Ve.expression;if(Eo.default.isPropertyAccessExpression(dn)){let gn=dn.name.text;if((gn==="values"||gn==="set")&&(Xe=Ve),gn==="where"&&($t=!0),Eo.default.isCallExpression(dn.expression)&&Eo.default.isPropertyAccessExpression(dn.expression.expression)){let si=dn.expression.expression.name.text;if(si==="insert"||si==="update"||si==="delete"){st=si;let ti=dn.expression.arguments[0];ti&&Eo.default.isIdentifier(ti)&&(Pt=ti.text);break}}if(gn==="insert"||gn==="update"||gn==="delete"){st=gn;let Pn=Ve.arguments[0];if(Pn&&Eo.default.isIdentifier(Pn)&&(Pt=Pn.text),!Xe&&gn==="insert"){let si=Ve.parent;si&&Eo.default.isPropertyAccessExpression(si)&&si.name.text==="values"&&si.parent&&Eo.default.isCallExpression(si.parent)&&(Xe=si.parent)}break}Ve=dn.expression}else break}else if(Eo.default.isPropertyAccessExpression(Ve))Ve=Ve.expression;else break;if(Eo.default.isCallExpression(_e)){let dn=_e.expression;if(Eo.default.isPropertyAccessExpression(dn)){let gn=dn.name.text;if(gn==="where"&&($t=!0),gn==="values"||gn==="set"){Xe=_e;let Pn=dn.expression;for(;Pn&&Eo.default.isCallExpression(Pn);){let si=Pn.expression;if(Eo.default.isPropertyAccessExpression(si)){let ti=si.name.text;if(ti==="insert"||ti==="update"||ti==="delete"){st=ti;let Sa=Pn.arguments[0];Sa&&Eo.default.isIdentifier(Sa)&&(Pt=Sa.text);break}Pn=si.expression}else break}}}}if(!(!st||!Pt))return{type:st,tableName:Pt,valuesCall:Xe,hasWhere:$t}}function Mmt(_e,Ve,Xe,st,Pt,$t){let dn=[];if(_e.arguments.length===0)return dn;let gn=_e.arguments[0];if(Eo.default.isObjectLiteralExpression(gn)){for(let Pn of gn.properties)if(Eo.default.isPropertyAssignment(Pn)){let si=Eo.default.isIdentifier(Pn.name)||Eo.default.isStringLiteral(Pn.name)?Pn.name.text:void 0;if(si){let ti=HQ(Pn.initializer,Pt,$t)||Fmt(Pn.initializer,st,$t);dn.push({columnName:si,dataSource:ti||{source:"unknown",type:"unknown"},span:Td(Ve,Pn.initializer,Xe)})}}else if(Eo.default.isShorthandPropertyAssignment(Pn)){let si=Pn.name.text,ti=st.get(si);dn.push({columnName:si,dataSource:ti||{source:"variable",type:"unknown"},span:Td(Ve,Pn.name,Xe)})}}return dn}var E6=bp(require("fs")),mN=bp(require("path")),fu=bp(S6());var Rmt=["src/db/schema.ts","db/schema.ts","lib/db/schema.ts","src/schema.ts","app/db/schema.ts","server/db/schema.ts"];function sOe(_e){for(let Xe of Rmt){let st=mN.join(_e,Xe);if(E6.existsSync(st))return st}let Ve=[mN.join(_e,"drizzle.config.ts"),mN.join(_e,"drizzle.config.js")];for(let Xe of Ve)if(E6.existsSync(Xe)){let st=jmt(Xe,_e);if(st&&E6.existsSync(st))return st}}function jmt(_e,Ve){let Xe=E6.readFileSync(_e,"utf-8"),st=Fy(_e,Xe),Pt;return Eu(st,$t=>{if(fu.default.isPropertyAssignment($t)&&(fu.default.isIdentifier($t.name)?$t.name.text:void 0)==="schema"){if(fu.default.isStringLiteral($t.initializer))Pt=mN.resolve(Ve,$t.initializer.text);else if(fu.default.isArrayLiteralExpression($t.initializer)){let gn=$t.initializer.elements[0];gn&&fu.default.isStringLiteral(gn)&&(Pt=mN.resolve(Ve,gn.text))}}}),Pt}function aOe(_e){if(!E6.existsSync(_e))throw new Error(`Drizzle schema file not found: ${_e}`);let Ve=E6.readFileSync(_e,"utf-8"),Xe=Fy(_e,Ve),st=[],Pt=[];Eu(Xe,dn=>{if(fu.default.isVariableStatement(dn)){for(let gn of dn.declarationList.declarations)if(fu.default.isIdentifier(gn.name)&&gn.initializer){let Pn=Bmt(gn.name.text,gn.initializer);Pn&&Pt.push(Pn)}}});let $t=new Map;for(let dn of Pt)$t.set(dn.name,dn);return Eu(Xe,dn=>{if(fu.default.isVariableStatement(dn)){for(let gn of dn.declarationList.declarations)if(fu.default.isIdentifier(gn.name)&&gn.initializer){let Pn=Jmt(gn.name.text,gn.initializer,$t);Pn&&st.push(Pn)}}}),{tables:st,enums:Pt,schemaPath:_e}}function Bmt(_e,Ve){if(!fu.default.isCallExpression(Ve)||(fu.default.isIdentifier(Ve.expression)?Ve.expression.text:void 0)!=="pgEnum")return;let st=Ve.arguments;if(st.length<2)return;let Pt=st[0];if(!fu.default.isStringLiteral(Pt))return;let $t=Pt.text,dn=st[1];if(!fu.default.isArrayLiteralExpression(dn))return;let gn=[];for(let Pn of dn.elements)fu.default.isStringLiteral(Pn)&&gn.push(Pn.text);return{name:_e,sqlName:$t,values:gn}}function Jmt(_e,Ve,Xe){if(!fu.default.isCallExpression(Ve)||(fu.default.isIdentifier(Ve.expression)?Ve.expression.text:void 0)!=="pgTable")return;let Pt=Ve.arguments;if(Pt.length<2)return;let $t=Pt[0];if(!fu.default.isStringLiteral($t))return;let dn=$t.text,gn=Pt[1];if(!fu.default.isObjectLiteralExpression(gn))return;let Pn=[];for(let si of gn.properties)if(fu.default.isPropertyAssignment(si)&&fu.default.isIdentifier(si.name)){let ti=zmt(si.name.text,si.initializer,Xe);ti&&Pn.push(ti)}return{name:_e,sqlName:dn,columns:Pn}}function zmt(_e,Ve,Xe){let st=Wmt(Ve),Pt=Vmt(Ve);if(!Pt)return;let{type:$t,sqlName:dn,enumName:gn}=Umt(Pt,Xe),Pn=st.has("notNull"),si=st.has("default")||st.has("defaultNow"),ti=$t==="serial"||st.has("$defaultFn");return{name:_e,sqlName:dn||_e,type:$t,enumName:gn,notNull:Pn,hasDefault:si,isAutoGenerated:ti,isRequired:Pn&&!si&&!ti}}function Wmt(_e){let Ve=new Set,Xe=_e;for(;fu.default.isCallExpression(Xe);){let st=Xe.expression;if(fu.default.isPropertyAccessExpression(st))Ve.add(st.name.text),Xe=st.expression;else break}return Ve}function Vmt(_e){let Ve=_e;for(;fu.default.isCallExpression(Ve);){let Xe=Ve.expression;if(fu.default.isPropertyAccessExpression(Xe))Ve=Xe.expression;else{if(fu.default.isIdentifier(Xe))return Ve;if(fu.default.isCallExpression(Xe))return Ve;break}}if(fu.default.isCallExpression(_e))return _e}function Umt(_e,Ve){let Xe,st,Pt;if(fu.default.isIdentifier(_e.expression))Xe=_e.expression.text;else if(fu.default.isCallExpression(_e.expression)&&fu.default.isIdentifier(_e.expression.expression)){let dn=_e.expression.expression.text;Ve.has(dn)&&(Xe="enum",Pt=dn)}if(fu.default.isIdentifier(_e.expression)&&Ve.has(_e.expression.text)&&(Xe="enum",Pt=_e.expression.text),_e.arguments.length>0){let dn=_e.arguments[0];fu.default.isStringLiteral(dn)&&(st=dn.text)}return{type:qmt(Xe),sqlName:st,enumName:Pt}}function qmt(_e){return _e&&{text:"text",varchar:"varchar",integer:"integer",serial:"serial",bigint:"bigint",boolean:"boolean",timestamp:"timestamp",date:"date",json:"json",jsonb:"jsonb",uuid:"uuid",real:"real",doublePrecision:"doublePrecision",numeric:"numeric",enum:"enum"}[_e]||"unknown"}function oOe(_e,Ve){return _e.tables.find(Xe=>Xe.name===Ve)}function lhe(_e,Ve){return _e.enums.find(Xe=>Xe.name===Ve)}function cOe(_e){return _e.columns.filter(Ve=>Ve.isRequired)}function lOe(_e){return["integer","serial","bigint","real","doublePrecision","numeric"].includes(_e.type)}function uOe(_e){return _e.type==="enum"&&!!_e.enumName}function _Oe(_e,Ve){let Xe=[];for(let st of _e)try{let{operations:Pt}=rOe(st);for(let $t of Pt){let dn=Hmt($t,Ve);Xe.push(...dn)}}catch{}return Xe}function Hmt(_e,Ve){let Xe=[],st=oOe(Ve,_e.tableName);if(!st)return Xe.push({category:"drizzle",severity:"error",message:`Table '${_e.tableName}' not found in Drizzle schema`,location:_e.location,code:`db.${_e.type}(${_e.tableName})`,suggestion:"Check the table name matches an export in the schema file"}),Xe;if(_e.type==="insert"){let Pt=Gmt(_e,st);Xe.push(...Pt)}if(_e.type==="insert"){let Pt=$mt(_e,st);Xe.push(...Pt)}(_e.type==="delete"||_e.type==="update")&&(_e.hasWhere||Xe.push({category:"drizzle",severity:"warning",message:`db.${_e.type}(${_e.tableName}) has no .where() clause -- affects all rows`,location:_e.location,code:`db.${_e.type}(${_e.tableName})${_e.type==="update"?".set({...})":""}`,suggestion:"Add a .where() clause to target specific rows"}));for(let Pt of _e.columnValues){let $t=st.columns.find(Pn=>Pn.name===Pt.columnName);if(!$t){Xe.push({category:"drizzle",severity:"error",message:`Column '${Pt.columnName}' not found on table '${_e.tableName}'`,location:_e.location,code:`${Pt.columnName}: ...`,suggestion:`Check column name matches the schema definition for '${_e.tableName}'`});continue}let dn=Xmt(Pt,$t,_e);if(dn&&Xe.push(dn),uOe($t)){let Pn=Ymt(Pt,$t,_e,Ve);Pn&&Xe.push(Pn);let si=Qmt(Pt,$t,_e,Ve);si&&Xe.push(si)}let gn=Zmt(Pt,$t,_e);gn&&Xe.push(gn)}return Xe}function Gmt(_e,Ve){let Xe=[],st=cOe(Ve),Pt=new Set(_e.columnValues.map($t=>$t.columnName));for(let $t of st)Pt.has($t.name)||Xe.push({category:"drizzle",severity:"error",message:`db.insert(${_e.tableName}) missing required column '${$t.name}'`,location:_e.location,code:`db.insert(${_e.tableName}).values({...})`,suggestion:`Add '${$t.name}' to the values object`});return Xe}function $mt(_e,Ve){let Xe=[];for(let st of _e.columnValues){let Pt=Ve.columns.find($t=>$t.name===st.columnName);Pt&&Pt.isAutoGenerated&&Xe.push({category:"drizzle",severity:"warning",message:`Column '${Pt.name}' is auto-generated (${Pt.type}) but is explicitly set in insert`,location:_e.location,code:`${st.columnName}: ...`,suggestion:`Remove '${Pt.name}' from the values object to use auto-generation`})}return Xe}function Xmt(_e,Ve,Xe){let st=_e.dataSource;if(st.source==="literal"&&st.type==="null"&&Ve.notNull)return{category:"drizzle",severity:"error",message:`Column '${Ve.name}' has notNull constraint but receives null`,location:Xe.location,code:`${_e.columnName}: null`,suggestion:`Provide a non-null value for '${Ve.name}'`}}function Qmt(_e,Ve,Xe,st){let Pt=_e.dataSource;if(Pt.source!=="literal"||Pt.type!=="string")return;let $t=Ve.enumName?lhe(st,Ve.enumName):void 0;if(!$t)return;let dn=String(Pt.literalValue);if(!$t.values.includes(dn)){let gn=$t.values.map(Pn=>`'${Pn}'`).join(", ");return{category:"drizzle",severity:"error",message:`Enum column '${Ve.name}' receives invalid value '${dn}'`,location:Xe.location,code:`${_e.columnName}: '${dn}'`,suggestion:`Allowed values are: ${gn}`}}}function Ymt(_e,Ve,Xe,st){let Pt=_e.dataSource;if(!Pt.isValidated&&Pt.source!=="literal"&&!(Pt.source==="variable"||Pt.source==="unknown")&&(Pt.source==="formData"||Pt.source==="params"||Pt.source==="body")){let dn=(Ve.enumName?lhe(st,Ve.enumName):void 0)?.values.map(gn=>`'${gn}'`).join(", ")||"enum values";return{category:"drizzle",severity:"error",message:`Enum column '${Ve.name}' receives unvalidated external input`,location:Xe.location,code:`${_e.columnName}: ${Pt.source}.get('${Pt.fieldName||_e.columnName}')`,suggestion:`Validate with zod schema or check against allowed values: ${dn}`}}}function Zmt(_e,Ve,Xe){let st=_e.dataSource;if(st.isValidated||st.source==="literal")return;let Pt=["formData","params","body"];if(lOe(Ve)&&st.type==="string"&&Pt.includes(st.source))return{category:"drizzle",severity:"error",message:`Column '${Ve.name}' expects ${Ve.type} but receives string from ${st.source}.get()`,location:Xe.location,code:`${_e.columnName}: ${st.source}.get('${st.fieldName||_e.columnName}')`,suggestion:`Convert with parseInt(${_e.columnName}, 10) or Number(${_e.columnName})`};if(Ve.type==="boolean"&&st.type==="string"&&Pt.includes(st.source))return{category:"drizzle",severity:"error",message:`Column '${Ve.name}' expects boolean but receives string from ${st.source}.get()`,location:Xe.location,code:`${_e.columnName}: ${st.source}.get('${st.fieldName||_e.columnName}')`,suggestion:`Convert with Boolean(${_e.columnName}) or ${_e.columnName} === 'true'`};if((Ve.type==="timestamp"||Ve.type==="date")&&st.type==="string"&&Pt.includes(st.source))return{category:"drizzle",severity:"warning",message:`Column '${Ve.name}' expects ${Ve.type} but receives string from ${st.source}.get()`,location:Xe.location,code:`${_e.columnName}: ${st.source}.get('${st.fieldName||_e.columnName}')`,suggestion:`Convert with new Date(${_e.columnName})`};if((Ve.type==="json"||Ve.type==="jsonb")&&st.type==="string"&&Pt.includes(st.source))return{category:"drizzle",severity:"warning",message:`Column '${Ve.name}' expects ${Ve.type} but receives string from ${st.source}.get()`,location:Xe.location,code:`${_e.columnName}: ${st.source}.get('${st.fieldName||_e.columnName}')`,suggestion:`Convert with JSON.parse(${_e.columnName})`}}var dOe=bp(require("fs")),Wc=bp(S6());var mOe=new Set(["Dialog","Modal","AlertDialog","ConfirmDialog","ConfirmationDialog","Sheet","Drawer","Popover"]),Kmt=[/^save/i,/^submit/i,/^delete/i,/^remove/i,/^add/i,/^create/i,/^update/i,/^confirm/i,/^apply/i],egt=[/^cancel/i,/^close/i,/^dismiss/i,/^no$/i],tgt=new Set(["input","select","textarea"]);function gOe(_e){let Ve=[];for(let Xe of _e)try{let st=dOe.readFileSync(Xe,"utf-8"),Pt=Fy(Xe,st),$t=ngt(Pt),dn=fgt(Pt),gn=igt(Pt),Pn=sgt(Pt,Xe,$t,gn);for(let ti of Pn){let Sa=_gt(ti);Ve.push(...Sa)}let si=pgt(Pt,Xe,$t,dn,Pn);for(let ti of si)ti.handlerBehavior==="stub"&&Ve.push({category:"interactivity",severity:"warning",message:`"${ti.text}" button has an empty or stub onClick handler`,location:ti.location,code:ti.code,suggestion:"Implement the handler to perform the intended action"})}catch{}return Ve}function ngt(_e){let Ve=new Set;return Eu(_e,Xe=>{if(Wc.default.isVariableDeclaration(Xe)&&Wc.default.isArrayBindingPattern(Xe.name)&&Xe.initializer&&rgt(Xe.initializer)){let st=Xe.name.elements;if(st.length>=2){let Pt=st[1];Wc.default.isBindingElement(Pt)&&Wc.default.isIdentifier(Pt.name)&&Ve.add(Pt.name.text)}}}),Ve}function rgt(_e){if(Wc.default.isCallExpression(_e)){let Ve=_e.expression;if(Wc.default.isIdentifier(Ve)&&Ve.text==="useState")return!0}return!1}function igt(_e){let Ve=!1;return Eu(_e,Xe=>{if(Wc.default.isCallExpression(Xe)){let st=Xe.expression;Wc.default.isIdentifier(st)&&st.text==="useFetcher"&&(Ve=!0)}}),Ve}function sgt(_e,Ve,Xe,st){let Pt=[];return Eu(_e,$t=>{if(Wc.default.isJsxElement($t)||Wc.default.isJsxSelfClosingElement($t)){let dn=k6($t);if(dn&&mOe.has(dn)){let gn=agt($t,dn,_e,Ve,Xe,st);Pt.push(gn)}}}),Pt}function agt(_e,Ve,Xe,st,Pt,$t){let dn=A0(Xe,_e.getStart()),gn={file:st,line:dn.line,column:dn.column},Pn=!1,si=!1,ti=$t,Sa=[],We=[];return Eu(_e,Bl=>{if(Wc.default.isJsxElement(Bl)||Wc.default.isJsxSelfClosingElement(Bl)){let vn=k6(Bl);if(!vn)return;if(vn==="Form"&&(si=!0,We.push(Bl)),ogt(Bl,vn)&&We.length===0&&(Pn=!0),vn==="button"||vn==="Button"){let an=cgt(Bl,Xe,st,Pt);an&&vOe(an.text)&&Sa.push(an)}}}),{type:Ve,location:gn,hasPlainInputs:Pn,hasReactRouterForm:si,hasFetcherSubmit:ti,actionButtons:Sa}}function ogt(_e,Ve){return tgt.has(Ve)?!0:MQ(Ve)?Wg(_e,"name")!==void 0:!1}function cgt(_e,Ve,Xe,st){let Pt=RQ(_e);if(!Pt)return;let $t=Wg(_e,"onClick"),dn="unknown";$t?.initializer&&(dn=lgt($t.initializer,st));let gn=A0(Ve,_e.getStart());return{text:Pt,location:{file:Xe,line:gn.line,column:gn.column},code:`<Button onClick={...}>${Pt}</Button>`,handlerBehavior:dn}}function lgt(_e,Ve){if(!Wc.default.isJsxExpression(_e)||!_e.expression)return"unknown";let Xe=_e.expression;return Wc.default.isArrowFunction(Xe)?hOe(Xe.body,Ve):"unknown"}function hOe(_e,Ve){if(Wc.default.isCallExpression(_e))return yOe(_e,Ve);if(Wc.default.isBlock(_e)){let Xe=_e.statements;if(Xe.length===0)return"stub";let st=!0,Pt=!0,$t=!1;for(let dn of Xe)if(Wc.default.isExpressionStatement(dn)){let gn=ugt(dn.expression,Ve);gn==="submits"&&($t=!0),gn!=="closes-dialog"&&(st=!1),gn!=="stub"&&(Pt=!1)}else st=!1,Pt=!1;return $t?"submits":st?"closes-dialog":Pt?"stub":"unknown"}return"unknown"}function yOe(_e,Ve){let Xe=_e.expression;if(Wc.default.isIdentifier(Xe)&&Ve.has(Xe.text)){let st=_e.arguments[0];return st&&st.kind===Wc.default.SyntaxKind.FalseKeyword?"closes-dialog":"unknown"}return Wc.default.isPropertyAccessExpression(Xe)&&Wc.default.isIdentifier(Xe.expression)&&Xe.expression.text==="console"&&Xe.name.text==="log"?"stub":Wc.default.isIdentifier(Xe)&&Xe.text==="submit"||Wc.default.isPropertyAccessExpression(Xe)&&Xe.name.text==="submit"?"submits":"unknown"}function ugt(_e,Ve){return Wc.default.isCallExpression(_e)?yOe(_e,Ve):"unknown"}function vOe(_e){for(let Ve of egt)if(Ve.test(_e))return!1;for(let Ve of Kmt)if(Ve.test(_e))return!0;return!1}function _gt(_e){let Ve=[];if(_e.hasReactRouterForm||_e.hasFetcherSubmit)return Ve;for(let Xe of _e.actionButtons)if(Xe.handlerBehavior==="closes-dialog"){let st=/^(delete|remove)/i.test(Xe.text);_e.hasPlainInputs?Ve.push({category:"interactivity",severity:"error",message:`"${Xe.text}" button in ${_e.type} only closes dialog without saving data`,location:Xe.location,code:Xe.code,suggestion:"Wrap inputs in a <Form> component or use useFetcher.submit() to persist data"}):st&&Ve.push({category:"interactivity",severity:"error",message:`"${Xe.text}" button in ${_e.type} only closes dialog without performing the action`,location:Xe.location,code:Xe.code,suggestion:'Use useFetcher.submit() with a delete intent or wrap in a <Form method="delete">'})}else Xe.handlerBehavior==="stub"&&Ve.push({category:"interactivity",severity:"warning",message:`"${Xe.text}" button has an empty or stub onClick handler`,location:Xe.location,code:Xe.code,suggestion:"Implement the handler or remove the button if not needed"});return Ve}function fgt(_e){let Ve=new Set;return Eu(_e,Xe=>{if(Wc.default.isVariableDeclaration(Xe)&&Wc.default.isIdentifier(Xe.name)){let st=Xe.name.text;Xe.initializer&&Wc.default.isArrowFunction(Xe.initializer)&&fOe(Xe.initializer.body)&&Ve.add(st)}Wc.default.isFunctionDeclaration(Xe)&&Xe.name&&Xe.body&&fOe(Xe.body)&&Ve.add(Xe.name.text)}),Ve}function fOe(_e){if(Wc.default.isCallExpression(_e))return pOe(_e);if(Wc.default.isBlock(_e)){let Ve=_e.statements;return Ve.length===0?!0:Ve.every(Xe=>Wc.default.isExpressionStatement(Xe)&&Wc.default.isCallExpression(Xe.expression)?pOe(Xe.expression):!1)}return!1}function pOe(_e){let Ve=_e.expression;return Wc.default.isPropertyAccessExpression(Ve)&&Wc.default.isIdentifier(Ve.expression)&&Ve.expression.text==="console"?["log","warn","error","info","debug"].includes(Ve.name.text):!1}function pgt(_e,Ve,Xe,st,Pt){let $t=[],dn=[];return Eu(_e,gn=>{if(Wc.default.isJsxElement(gn)||Wc.default.isJsxSelfClosingElement(gn)){let Pn=k6(gn);Pn&&mOe.has(Pn)&&dn.push({start:gn.getStart(),end:gn.getEnd()})}}),Eu(_e,gn=>{if(Wc.default.isJsxElement(gn)||Wc.default.isJsxSelfClosingElement(gn)){let Pn=k6(gn);if(!Pn||!(Pn==="button"||Pn==="Button"||Pn.endsWith("Button")))return;let ti=gn.getStart();if(dn.some(an=>ti>=an.start&&ti<=an.end))return;let We=RQ(gn);if(!We||!vOe(We))return;let Bl=Wg(gn,"onClick");if(!Bl?.initializer)return;let vn=dgt(Bl.initializer,Xe,st);if(vn==="stub"){let an=A0(_e,gn.getStart());$t.push({text:We,location:{file:Ve,line:an.line,column:an.column},code:`<${Pn} onClick={...}>${We}</${Pn}>`,handlerBehavior:vn})}}}),$t}function dgt(_e,Ve,Xe){if(!Wc.default.isJsxExpression(_e)||!_e.expression)return"unknown";let st=_e.expression;if(Wc.default.isArrowFunction(st)){let Pt=hOe(st.body,Ve);return Pt==="stub"?"stub":Pt==="submits"?"submits":"unknown"}return Wc.default.isIdentifier(st)&&Xe.has(st.text)?"stub":"unknown"}var bOe=["links","forms","loader","params","interactivity","hydration"],mgt=["drizzle"],Jht=[...bOe,...mgt];function SOe(_e){let{root:Ve,files:Xe,checks:st}=_e,Pt=[];try{Pt=jQ(Ve)}catch(si){return{issues:[{category:"links",severity:"error",message:si instanceof Error?si.message:"Failed to parse routes file",location:{file:D6.join(Ve,"app","routes.ts"),line:1,column:1}}],routes:[],components:[]}}let $t=ggt(Ve,Xe),dn=[];for(let si of $t)try{let ti=BQ(si);dn.push(ti)}catch(ti){console.error(`Warning: Could not parse ${si}:`,ti)}let gn=[],Pn=new Set(st.length>0?st:bOe);if(Pn.has("links")&&gn.push(...zQ(dn,Pt)),Pn.has("forms")&&gn.push(...WQ(dn,Pt,Ve)),Pn.has("loader")&&gn.push(...VQ(dn)),Pn.has("params")&&gn.push(...UQ(dn,Pt,Ve)),Pn.has("hydration")&&gn.push(...qQ(dn)),Pn.has("drizzle")){let si=_e.drizzleSchemaPath||sOe(Ve);if(si)try{let ti=aOe(si);gn.push(..._Oe($t,ti))}catch(ti){console.error(`Warning: Could not parse Drizzle schema at ${si}:`,ti)}else console.error("Warning: drizzle check enabled but no schema file found. Use --drizzle-schema to specify the path.")}if(Pn.has("interactivity")&&gn.push(...gOe($t)),Xe.length>0){let si=new Set(Xe.map(Sa=>D6.resolve(Sa)));return{issues:gn.filter(Sa=>si.has(D6.resolve(Sa.location.file))),routes:Pt,components:dn}}return{issues:gn,routes:Pt,components:dn}}function ggt(_e,Ve){if(Ve.length>0)return Ve.map(Pt=>D6.resolve(Pt));let Xe=D6.join(_e,"app","routes");if(!GQ.existsSync(Xe))return[];let st=[];return xOe(Xe,Pt=>{Pt.endsWith(".tsx")&&st.push(Pt)}),st}function xOe(_e,Ve){let Xe=GQ.readdirSync(_e,{withFileTypes:!0});for(let st of Xe){let Pt=D6.join(_e,st.name);st.isDirectory()?xOe(Pt,Ve):st.isFile()&&Ve(Pt)}}var oj=bp(require("fs"));function TOe(_e,Ve=!1){let Xe=_e.filter(Pn=>Pn.fix),st=_e.filter(Pn=>!Pn.fix),Pt=new Map;for(let Pn of Xe)for(let si of Pn.fix.edits){let ti=Pt.get(si.file)||[];ti.push({edit:si,issue:Pn}),Pt.set(si.file,ti)}let $t=[],dn=[],gn=[];for(let[Pn,si]of Pt)try{let ti=si.map(We=>We.edit);if(hgt(Pn,ti,Ve).modified){$t.push(Pn);for(let{issue:We}of si)dn.includes(We)||dn.push(We)}}catch(ti){gn.push({file:Pn,error:ti instanceof Error?ti.message:String(ti)})}return{filesModified:$t,fixesApplied:dn.length,fixedIssues:dn,unfixableIssues:st,errors:gn}}function hgt(_e,Ve,Xe){let st=oj.readFileSync(_e,"utf-8"),Pt=[...Ve].sort((dn,gn)=>gn.start-dn.start);for(let dn=0;dn<Pt.length-1;dn++){let gn=Pt[dn],Pn=Pt[dn+1];if(gn.start<Pn.end)throw new Error(`Overlapping edits at positions ${Pn.start}-${Pn.end} and ${gn.start}-${gn.end}`)}let $t=st;for(let dn of Pt)$t=$t.slice(0,dn.start)+dn.newText+$t.slice(dn.end);return!Xe&&$t!==st?(oj.writeFileSync(_e,$t,"utf-8"),{modified:!0,newContent:$t}):{modified:$t!==st,newContent:$t}}function kOe(_e,Ve,Xe=2){let st=oj.readFileSync(_e,"utf-8"),Pt=st.split(`
|
|
435
435
|
`),$t=0,dn=0;for(let Bl=0;Bl<Pt.length;Bl++){if($t+Pt[Bl].length>=Ve.start){dn=Bl;break}$t+=Pt[Bl].length+1}let gn=Math.max(0,dn-Xe),Pn=Math.min(Pt.length-1,dn+Xe),si=Pt.slice(gn,Pn+1).join(`
|
|
436
436
|
`),We=(st.slice(0,Ve.start)+Ve.newText+st.slice(Ve.end)).split(`
|
|
437
437
|
`).slice(gn,Pn+1).join(`
|