UNPKG

eve

Version:

Filesystem-first framework for durable backend AI agents that run anywhere.

1 lines 4.84 kB
import{join}from"node:path";import{createDiscoverErrorDiagnostic}from"#discover/diagnostics.js";import{getDirectoryEntryType,getSupportedModuleBaseName,isTypeScriptDeclarationFileName,normalizeLogicalPath}from"#discover/filesystem.js";import{createModuleSourceRef}from"#discover/manifest.js";import{createModuleSlotCollisionDiagnostic,createSlotCollisionDiagnostic,readSortedDirectoryEntries}from"#discover/grammar.js";import{collectNamedSlotCandidates}from"#discover/slots.js";import{discoverMarkdownSource}from"#discover/markdown.js";async function discoverNamedSourceDirectory(n){let r=join(n.rootPath,n.directoryName),i=n.rootEntries.find(e=>e.name===n.directoryName);if(i===void 0)return{diagnostics:[],sources:[]};if(!i.isDirectory())return{diagnostics:[createDiscoverErrorDiagnostic({code:n.invalidDirectoryCode,message:n.invalidDirectoryMessage,sourcePath:r})],sources:[]};let a=[],o=[];return await walkNamedSourceDirectory({allowMarkdown:n.allowMarkdown===!0,diagnostics:a,markdownLowerer:n.allowMarkdown===!0?n.markdownLowerer:void 0,projectSource:n.source,recursive:n.recursive,relativeDirectory:n.directoryName,rootDirectoryPath:r,sources:o,subdirectoryRelative:``,unsupportedEntryCode:n.unsupportedEntryCode,unsupportedEntryMessage:n.unsupportedEntryMessage,unsupportedFileCode:n.unsupportedFileCode,unsupportedFileMessage:n.unsupportedFileMessage,validateSegment:n.validateSegment}),{diagnostics:a,sources:o}}async function walkNamedSourceDirectory(t){let n=t.subdirectoryRelative===``?t.rootDirectoryPath:join(t.rootDirectoryPath,t.subdirectoryRelative),r=await readSortedDirectoryEntries(t.projectSource,n);t.recursive&&await walkSubdirectories(t,r,n),(t.unsupportedFileCode!==void 0||t.unsupportedEntryCode!==void 0)&&emitUnsupportedLeafDiagnostics(t,r,n),await collectLeafSources(t,r,n)}async function walkSubdirectories(t,n,r){for(let i of n){if(!i.isDirectory())continue;let n=join(r,i.name);if(t.validateSegment!==void 0){let e=t.validateSegment(i.name,n);if(e!==null){t.diagnostics.push(e);continue}}await walkNamedSourceDirectory({allowMarkdown:t.allowMarkdown,diagnostics:t.diagnostics,markdownLowerer:t.markdownLowerer,projectSource:t.projectSource,recursive:t.recursive,relativeDirectory:t.relativeDirectory,rootDirectoryPath:t.rootDirectoryPath,sources:t.sources,subdirectoryRelative:t.subdirectoryRelative===``?i.name:join(t.subdirectoryRelative,i.name),unsupportedEntryCode:t.unsupportedEntryCode,unsupportedEntryMessage:t.unsupportedEntryMessage,unsupportedFileCode:t.unsupportedFileCode,unsupportedFileMessage:t.unsupportedFileMessage,validateSegment:t.validateSegment})}}function emitUnsupportedLeafDiagnostics(a,o,s){for(let c of o){let o=getDirectoryEntryType(c),l=join(s,c.name);if(o===`directory`)continue;if(o===`other`){a.unsupportedEntryCode!==void 0&&a.diagnostics.push(createDiscoverErrorDiagnostic({code:a.unsupportedEntryCode,message:a.unsupportedEntryMessage?.(l,a.relativeDirectory)??`Expected "${l}" to be a regular file or directory within "${a.relativeDirectory}/".`,sourcePath:l}));continue}if(a.unsupportedFileCode===void 0||isTypeScriptDeclarationFileName(c.name))continue;let u=getSupportedModuleBaseName(c.name)!==null,d=a.allowMarkdown&&c.name.endsWith(`.md`);u||d||a.diagnostics.push(createDiscoverErrorDiagnostic({code:a.unsupportedFileCode,message:a.unsupportedFileMessage?.(l,a.relativeDirectory)??`Expected "${l}" to be a supported authored source within "${a.relativeDirectory}/".`,sourcePath:l}))}}async function collectLeafSources(t,n,r){for(let i of collectNamedSlotCandidates(n,{allowMarkdown:t.allowMarkdown,allowModules:!0})){let n=t.subdirectoryRelative===``?i.slotName:join(t.subdirectoryRelative,i.slotName),l=normalizeLogicalPath(join(t.relativeDirectory,n));if(t.validateSegment!==void 0){let n=i.markdownFileName??i.moduleFileNames[0]??i.slotName,a=t.validateSegment(i.slotName,join(r,n));if(a!==null){t.diagnostics.push(a);continue}}if(i.markdownFileName!==void 0&&i.moduleFileNames.length>0){t.diagnostics.push(createSlotCollisionDiagnostic(r,l,[i.markdownFileName,...i.moduleFileNames]));continue}if(i.moduleFileNames.length>1){t.diagnostics.push(createModuleSlotCollisionDiagnostic(r,l,i.moduleFileNames));continue}if(i.markdownFileName!==void 0){let n=t.subdirectoryRelative===``?i.markdownFileName:join(t.subdirectoryRelative,i.markdownFileName),r=normalizeLogicalPath(join(t.relativeDirectory,n));if(t.markdownLowerer===void 0)continue;let o=await discoverMarkdownSource({logicalPath:r,lower:t.markdownLowerer,source:t.projectSource,sourcePath:join(t.rootDirectoryPath,n)});t.sources.push(o);continue}let[u]=i.moduleFileNames;if(u===void 0)continue;let f=t.subdirectoryRelative===``?u:join(t.subdirectoryRelative,u);t.sources.push(createModuleSourceRef({logicalPath:normalizeLogicalPath(join(t.relativeDirectory,f))}))}}export{discoverNamedSourceDirectory};