tinysaver
v0.1.0
Published
Modern replacement of file-saver.js.
Downloads
6
Readme
💾 tinysaver
Modern replacement of file-saver.js.
📦 Install
npm install tinysaveryarn add tinysaverpnpm add tinysaver🚀 Usage
✨ Basic Usage
import { saveAs, saveText, saveJSON, saveCanvas } from 'tinysaver'
// Save a Blob
saveAs(new Blob(['hello world'], { type: 'text/plain' }), 'hello-world.txt')
// Save text content
saveText('Hello World', 'greeting.txt')
// Save JSON data
saveJSON({ name: 'John', age: 30 }, 'data.json', { space: 2 })
// Save canvas as image
const canvas = document.querySelector('canvas')
saveCanvas(canvas, 'image.png', { quality: 0.95 })⚙️ With Options
import { saveAs } from 'tinysaver'
saveAs(new Blob(['hello world'], { type: 'text/plain' }), 'hello-world.txt', {
autoBom: true, // Add UTF-8 BOM for text files
clickDelay: 100, // Delay before triggering download
openInNewTab: false, // Open in new tab instead of downloading
disableClick: false, // Disable automatic click simulation
onStart() {
console.log('Download started')
},
onComplete() {
console.log('Download completed')
},
onError(err) {
console.error('Download failed', err)
},
onProgress(loaded, total) {
console.log(`${loaded}/${total}`)
},
})👏 Callbacks
All download methods support lifecycle callbacks:
saveText('content', 'file.txt', {
onStart() {
// Called when download process starts
},
onProgress(loaded, total) {
// Called during download progress
console.log(`Downloaded ${loaded}/${total} bytes`)
},
onComplete() {
// Called when download completes
},
onError(error) {
// Called when download fails
console.error(error)
},
})🌐 Browser Support
tinysaver supports all modern browsers with automatic fallback for older versions:
- ✅ Chrome/Edge (all versions with download attribute support)
- ✅ Firefox (all versions)
- ✅ Safari (all versions, including iOS)
- ✅ Opera (all versions)
- ⚠️ IE (fallback via msSaveOrOpenBlob)
📚 API
💾 saveAs(blob, filename?, options?)
Save any Blob or URL as a file. Compatible with FileSaver.js saveAs API.
Parameters:
blob- Blob object or URL stringfilename- Name of the file to save (optional)options- Download options (optional)
📝 saveText(text, filename, options?)
Save text content as a file.
Parameters:
text- Text content to savefilename- Name of the text fileoptions- Download options with optionalmimeTypeproperty
📄 saveJSON(data, filename, options?)
Save JSON data as a file.
Parameters:
data- JavaScript object or value to savefilename- Name of the JSON fileoptions- Download options with optionalspaceproperty for formatting
🎨 saveCanvas(canvas, filename, options?)
Save HTML canvas as an image file.
Parameters:
canvas- HTMLCanvasElement to savefilename- Name of the image fileoptions- Download options with optionaltypeandqualityproperties
✅ Testing
The library includes comprehensive unit tests covering:
- 🔍 BrowserDetector static and instance methods
- 📥 FileDownloader core functionality and error handling
- 🏷️ BOM (Byte Order Mark) insertion for text files
- 📝 Default filename handling
- 💾 saveText, saveJSON, and saveCanvas implementations
- ⚠️ Canvas conversion error handling
- 🔔 Callback invocation during download lifecycle
Run tests with:
pnpm test