asar - Electron Archive format for Crystal
Read files from .asar
archives with built-in caching.
Installation
Add this to your application's shard.yml
:
dependencies:
asar:
github: petoem/asar
Usage
require "asar"
asar = Asar::Reader.new "path/to/your/archive.asar"
io = asar.get "/awesome/image.png"
slice = asar.get_bytes "/awesome/story.txt"
asar.files # Returns an Array(String) of all files in the archive.
asar.files_cached # Returns an Array(String) of all files in the cache.
Benchmark
> crystal run spec/benchmark.cr --release
get 3.21M (311.09ns) (±14.27%) 4.64× slower
get_bytes 14.9M ( 67.09ns) (± 1.47%) fastest
read_raw 69.21k ( 14.45µs) (±16.62%) 215.36× slower
Note: Benchmark was done on an SSD and the test file was small.
The methods get
and get_bytes
cache a file at first read.
get
returns anIO::Memory
created from the cached fileget_bytes
returns the cached fileread_raw
reads directly from the filesIO
, bypassing the cache
TODO
- [x] Parse asar archive
- [x] Read files from archive
- [ ] Pack directory into archive?
- [ ] Transform support?
Contributing
- Fork it ( https://github.com/petoem/asar/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
Contributors
- petoem Michael Petö - creator, maintainer