@@ -1743,11 +1743,26 @@ func FindComponentDependenciesLegacy(
17431743	return  unique , nil 
17441744}
17451745
1746+ // resolveRelativePath checks if a path is relative to the current directory and if so, 
1747+ // resolves it relative to the current file's directory 
1748+ func  resolveRelativePath (path  string , currentFilePath  string ) string  {
1749+ 	// Get the first element of the path 
1750+ 	firstElement  :=  filepath .Clean (strings .Split (path , string (filepath .Separator ))[0 ])
1751+ 
1752+ 	// Check if the path starts with "." or ".." 
1753+ 	if  firstElement  ==  "."  ||  firstElement  ==  ".."  {
1754+ 		baseDir  :=  filepath .Dir (currentFilePath )
1755+ 		result  :=  filepath .ToSlash (filepath .Clean (filepath .Join (baseDir , path )))
1756+ 		return  result 
1757+ 	}
1758+ 	return  path 
1759+ }
1760+ 
17461761// ProcessImportSection processes the `import` section in stack manifests 
17471762// The `import` section can contain: 
17481763// 1. Project-relative paths (e.g. "mixins/region/us-east-2") 
1749- // 2. Paths relative to the current file (starting with "./" or "../ ") 
1750- // 3. StackImport structs containing either of the above path types 
1764+ // 2. Paths relative to the current stack  file (e.g. "./_defaults ") 
1765+ // 3. StackImport structs containing either of the above path types (e.g. "path: mixins/region/us-east-2")  
17511766func  ProcessImportSection (stackMap  map [string ]any , filePath  string ) ([]schema.StackImport , error ) {
17521767	stackImports , ok  :=  stackMap [cfg .ImportSectionName ]
17531768
@@ -1773,15 +1788,7 @@ func ProcessImportSection(stackMap map[string]any, filePath string) ([]schema.St
17731788		var  importObj  schema.StackImport 
17741789		err  :=  mapstructure .Decode (imp , & importObj )
17751790		if  err  ==  nil  {
1776- 			// Handle paths relative to current file (starting with ./ or ../) 
1777- 			if  strings .HasPrefix (importObj .Path , "./" ) ||  strings .HasPrefix (importObj .Path , "../" ) {
1778- 				// Get the directory of the current file 
1779- 				baseDir  :=  filepath .Dir (filePath )
1780- 				// Join the base directory with the relative path 
1781- 				importObj .Path  =  filepath .Join (baseDir , importObj .Path )
1782- 				// Clean the path to resolve any .. segments 
1783- 				importObj .Path  =  filepath .Clean (importObj .Path )
1784- 			}
1791+ 			importObj .Path  =  resolveRelativePath (importObj .Path , filePath )
17851792			result  =  append (result , importObj )
17861793			continue 
17871794		}
@@ -1795,13 +1802,7 @@ func ProcessImportSection(stackMap map[string]any, filePath string) ([]schema.St
17951802			return  nil , fmt .Errorf ("invalid empty import in the file '%s'" , filePath )
17961803		}
17971804
1798- 		// Handle paths relative to current file (starting with ./ or ../) 
1799- 		if  strings .HasPrefix (s , "./" ) ||  strings .HasPrefix (s , "../" ) {
1800- 			baseDir  :=  filepath .Dir (filePath )
1801- 			s  =  filepath .Join (baseDir , s )
1802- 			s  =  filepath .Clean (s )
1803- 		}
1804- 
1805+ 		s  =  resolveRelativePath (s , filePath )
18051806		result  =  append (result , schema.StackImport {Path : s })
18061807	}
18071808
0 commit comments