mirror of
https://github.com/balena-io/etcher.git
synced 2025-04-24 07:17:18 +00:00
docs: add developer documentation to the lib/image-stream module (#1107)
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
This commit is contained in:
parent
2f153479da
commit
9aa23c1590
61
lib/image-stream/README.md
Normal file
61
lib/image-stream/README.md
Normal file
@ -0,0 +1,61 @@
|
||||
Etcher Image Stream
|
||||
===================
|
||||
|
||||
This module is in charge of creating a readable stream from any image source
|
||||
(e.g: a file, a URL, etc) along with some metadata (like size), and handling
|
||||
any necessary transformations (like decompression) that must be applied before
|
||||
plugging the stream to [`etcher-image-write`][etcher-image-write].
|
||||
|
||||
Given that this module contains the logic to handle image formats, the module
|
||||
becomes the most reliable source of truth for the list of supported ones.
|
||||
|
||||
There are three classes of images this module supports:
|
||||
|
||||
- Uncompressed images (e.g: `.img`, `.iso`)
|
||||
- Compressed images (e.g: `.img.xz`, `.iso.gz`)
|
||||
- Archive images (e.g: `.zip`)
|
||||
|
||||
The core of this module consists of handlers and archive hooks.
|
||||
|
||||
Handlers
|
||||
--------
|
||||
|
||||
The handlers are functions that know how to handle certain MIME types, like
|
||||
`application/x-bzip2` and `application/octet-stream`, returning a stream for
|
||||
the image, a transform stream that needs to be applied to get the real image
|
||||
data, and useful metadata like the final image size.
|
||||
|
||||
Each handler is called with a file path (although that will change soon once we
|
||||
add proper support for URLs) and an options object, containing extra metadata
|
||||
about the file.
|
||||
|
||||
Archive Hooks
|
||||
-------------
|
||||
|
||||
This module supports reading "archive images", which are defined by handlers
|
||||
(like `application/zip`). In order to avoid duplication on how to handle
|
||||
archives, archive support is implemented by "archive hooks".
|
||||
|
||||
Archive hooks are CommonJS modules that expose two functions:
|
||||
|
||||
- `Promise .getEntries(String archivePath)`: list all entries in the archive
|
||||
- `Stream.Readable .extractFile(String archivePath, String[] entries, String entry)`: get a readable stream for an archive entry
|
||||
|
||||
Defining those two functions for any archive format is enough for Etcher to
|
||||
correctly use its archive handling logic on them.
|
||||
|
||||
Archive Images
|
||||
--------------
|
||||
|
||||
As mentioned before, Etcher supports the concept of "archive images". These are
|
||||
uncompressed image files included *inside* an archive format, like `.zip` or
|
||||
`.tar`, possibly along other files.
|
||||
|
||||
These are the rules for handling archive images:
|
||||
|
||||
- Each archive should only contain one valid image
|
||||
- Images in archives should be in uncompressed form
|
||||
|
||||
The module throws an error if the above rules are not met.
|
||||
|
||||
[etcher-image-write]: https://github.com/resin-io-modules/etcher-image-write
|
Loading…
x
Reference in New Issue
Block a user