UNPKG

eve

Version:

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

1 lines 4.76 kB
import{join}from"node:path";import{createDiscoverErrorDiagnostic}from"#discover/diagnostics.js";import{getDirectoryEntryType,getSupportedModuleBaseName,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(i,a,o){for(let s of a){let a=getDirectoryEntryType(s),c=join(o,s.name);if(a===`directory`)continue;if(a===`other`){i.unsupportedEntryCode!==void 0&&i.diagnostics.push(createDiscoverErrorDiagnostic({code:i.unsupportedEntryCode,message:i.unsupportedEntryMessage?.(c,i.relativeDirectory)??`Expected "${c}" to be a regular file or directory within "${i.relativeDirectory}/".`,sourcePath:c}));continue}if(i.unsupportedFileCode===void 0)continue;let l=getSupportedModuleBaseName(s.name)!==null,u=i.allowMarkdown&&s.name.endsWith(`.md`);l||u||i.diagnostics.push(createDiscoverErrorDiagnostic({code:i.unsupportedFileCode,message:i.unsupportedFileMessage?.(c,i.relativeDirectory)??`Expected "${c}" to be a supported authored source within "${i.relativeDirectory}/".`,sourcePath:c}))}}async function collectLeafSources(t,n,r){for(let c of collectNamedSlotCandidates(n,{allowMarkdown:t.allowMarkdown,allowModules:!0})){let n=t.subdirectoryRelative===``?c.slotName:join(t.subdirectoryRelative,c.slotName),l=normalizeLogicalPath(join(t.relativeDirectory,n));if(t.validateSegment!==void 0){let n=c.markdownFileName??c.moduleFileNames[0]??c.slotName,i=t.validateSegment(c.slotName,join(r,n));if(i!==null){t.diagnostics.push(i);continue}}if(c.markdownFileName!==void 0&&c.moduleFileNames.length>0){t.diagnostics.push(createSlotCollisionDiagnostic(r,l,[c.markdownFileName,...c.moduleFileNames]));continue}if(c.moduleFileNames.length>1){t.diagnostics.push(createModuleSlotCollisionDiagnostic(r,l,c.moduleFileNames));continue}if(c.markdownFileName!==void 0){let n=t.subdirectoryRelative===``?c.markdownFileName:join(t.subdirectoryRelative,c.markdownFileName),r=normalizeLogicalPath(join(t.relativeDirectory,n));if(t.markdownLowerer===void 0)continue;let a=await discoverMarkdownSource({logicalPath:r,lower:t.markdownLowerer,source:t.projectSource,sourcePath:join(t.rootDirectoryPath,n)});t.sources.push(a);continue}let[d]=c.moduleFileNames;if(d===void 0)continue;let f=t.subdirectoryRelative===``?d:join(t.subdirectoryRelative,d);t.sources.push(createModuleSourceRef({logicalPath:normalizeLogicalPath(join(t.relativeDirectory,f))}))}}export{discoverNamedSourceDirectory};