cue/load: add support for loading from io/fs.FS #4222
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds support for loading CUE packages and modules from a virtual
filesystem provided via
load.Config.FS.This enables embedding CUE modules in Go binaries and similar use cases where
access to the host filesystem is not desired or not possible.
When
Config.FSis set, all filesystem operations performed by the loader(stat, read, open, directory walking, and encoding reads) are routed through
io/fs.FSinstead of the host operating system filesystem. This enablesloading CUE code from sources such as
embed.FS,fstest.MapFS, or othervirtual filesystems, without accessing the host filesystem.
The existing behavior is preserved when
Config.FSis nil.Design notes
loadFS) centralizes filesystem access andnormalizes host and virtual filesystem behavior.
loader paths rooted at a synthetic root (
/@fs), avoiding accidental hostfilesystem access.
FSis set.the loader filesystem.
Tests
New tests cover:
fstest.MapFSFSis setConfig.Diros.OpenNo public APIs are removed, and existing behavior is unchanged unless
Config.FSis explicitly set.This change is intended to support embedding CUE modules in Go binaries and similar use cases.