%PDF- %PDF-
Direktori : /home/opti/workflow/node_modules/datauri/ |
Current File : /home/opti/workflow/node_modules/datauri/api.js |
'use strict'; const path = require('path'); const fs = require('fs'); const mimer = require('mimer'); const getDimensions = require('image-size'); const uri = require('./template/uri'); const css = require('./template/css'); const Stream = require('stream'); class Api extends Stream { constructor() { super(); this.readable = true; } format(fileName, fileContent) { const fileBuffer = (fileContent instanceof Buffer) ? fileContent : new Buffer(fileContent); this.base64 = fileBuffer.toString('base64'); this.createMetadata(fileName); return this; } createMetadata(fileName) { this.fileName = fileName; this.mimetype = mimer(fileName); this.content = uri(this); return this; } runCallback(handler, err) { if (err) { return handler(err); } return handler.call(this, null, this.content, this); } encode(fileName, handler) { return this.async(fileName, err => handler && this.runCallback(handler, err)); } async(fileName, handler) { const base64Chunks = []; const propagateStream = chunk => this.emit('data', chunk); propagateStream(this.createMetadata(fileName).content); fs.createReadStream(fileName, { 'encoding': 'base64' }) .on('data', propagateStream) .on('data', chunk => base64Chunks.push(chunk)) .on('error', err => { handler(err); this.emit('error', err); }) .on('end', () => { this.base64 = base64Chunks.join(''); this.emit('end'); handler.call(this.createMetadata(fileName)); this.emit('encoded', this.content, this); }); } encodeSync(fileName) { if (!fileName || !fileName.trim || fileName.trim() === '') { throw new Error('Insert a File path as string argument'); } if (fs.existsSync(fileName)) { const fileContent = fs.readFileSync(fileName); return this.format(fileName, fileContent).content; } throw new Error(`The file ${fileName} was not found!`); } getCSS(config) { config = config || {}; if (!this.content) { throw new Error('Create a data-uri config using the method encodeSync'); } config.class = config.class || path.basename(this.fileName, path.extname(this.fileName)); config.background = this.content; if (config.width || config.height || config['background-size']) { config.dimensions = getDimensions(this.fileName); } return css(config); } } module.exports = Api;