Resolved conflict in scripts/models/stream.ts: kept the branch's
labels/isNot247/isGeoBlocked handling in fromPlaylistItem while adopting
master's optional-chaining guards for data.tvg / data.http.
- Normalize the returned path to forward slashes so it matches what
Storage.list() (glob) returns, instead of leaking `\` on Windows.
- Treat the storage root itself as "not inside", so passing a directory
no longer yields an empty path that Storage.load() would open as a dir.
- Extract the containment check into isInsideDirectory() and drop the
redundant isAbsolute(filepath) branch (path.resolve already handles it).
- Restore the repository's CRLF line endings in the nested fixture.