Skip to content

fix: accept File instances on cast-mode file/files read path#9

Open
Abhishek5Sharma wants to merge 2 commits into
mainfrom
bugs/support_file_object
Open

fix: accept File instances on cast-mode file/files read path#9
Abhishek5Sharma wants to merge 2 commits into
mainfrom
bugs/support_file_object

Conversation

@Abhishek5Sharma

Copy link
Copy Markdown
Member

Cast mode assigned a File object to a file/files leaf got silently nulled: DataField construction/setValue routes the value through ValueCaster::castNativeRead, whose resolveFiles only accepted a decoded {model_type, model_id} array and dropped live File instances. Row mode was unaffected because its write path already handled File objects.

resolveFiles now passes an already-hydrated File instance straight through (single and list forms) while still resolving stored reference arrays on reload, so the authoring round-trip is consistent end-to-end.

Add cast-mode file/files coverage to DataFieldCastTest, matching the documented README examples (file -> File, files -> array, single File wrapped to a list, empty files round-trips as []).

Cast mode assigned a File object to a `file`/`files` leaf got silently
nulled: DataField construction/setValue routes the value through
ValueCaster::castNativeRead, whose resolveFiles only accepted a decoded
{model_type, model_id} array and dropped live File instances. Row mode
was unaffected because its write path already handled File objects.

resolveFiles now passes an already-hydrated File instance straight
through (single and list forms) while still resolving stored reference
arrays on reload, so the authoring round-trip is consistent end-to-end.

Add cast-mode file/files coverage to DataFieldCastTest, matching the
documented README examples (file -> File, files -> array<File>, single
File wrapped to a list, empty files round-trips as []).
@Abhishek5Sharma Abhishek5Sharma force-pushed the bugs/support_file_object branch from f2bece9 to 1e1be81 Compare July 8, 2026 11:56
…list

A bare {model_type, model_id} ref stored under a `files` field read back
as [] — resolveFiles iterated the assoc ref's scalar members instead of
treating it as one item. Wrap a single decoded ref into a one-item list
on both the read and write paths so a single ref (e.g. legacy/migrated
data) is still readable as a list.

Also make encodeFiles store null instead of stringifying an unresolvable
value, avoiding a lossy "Array" cast.

Add row-mode and json-mode regression tests for the single-ref case.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant