UNPKG

3.17 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _path = require('path');
8
9var _path2 = _interopRequireDefault(_path);
10
11var _fs = require('fs');
12
13var _mimer = require('mimer');
14
15var _mimer2 = _interopRequireDefault(_mimer);
16
17var _imageSize = require('image-size');
18
19var _imageSize2 = _interopRequireDefault(_imageSize);
20
21var _uri = require('./template/uri');
22
23var _uri2 = _interopRequireDefault(_uri);
24
25var _css = require('./template/css');
26
27var _css2 = _interopRequireDefault(_css);
28
29var _stream = require('stream');
30
31var _stream2 = _interopRequireDefault(_stream);
32
33function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
34
35class Api extends _stream2.default {
36 constructor() {
37 super();
38
39 this.readable = true;
40 }
41
42 format(fileName, fileContent) {
43 const fileBuffer = fileContent instanceof Buffer ? fileContent : new Buffer(fileContent);
44
45 this.base64 = fileBuffer.toString('base64');
46 this.createMetadata(fileName);
47
48 return this;
49 }
50
51 createMetadata(fileName) {
52 this.fileName = fileName;
53 this.mimetype = (0, _mimer2.default)(fileName);
54 const mimetype = this.mimetype;
55 var _base = this.base64;
56 const base64 = _base === undefined ? '' : _base;
57
58 this.content = (0, _uri2.default)({ mimetype, base64 });
59
60 return this;
61 }
62
63 runCallback(handler, err) {
64 if (err) {
65 return handler(err);
66 }
67
68 handler.call(this, null, this.content, this);
69 }
70
71 encode(fileName, handler) {
72 return this.async(fileName, err => handler && this.runCallback(handler, err));
73 }
74
75 async(fileName, handler) {
76 const base64Chunks = [];
77 const propagateStream = chunk => this.emit('data', chunk);
78
79 propagateStream(this.createMetadata(fileName).content);
80 (0, _fs.createReadStream)(fileName, { encoding: 'base64' }).on('data', propagateStream).on('data', chunk => base64Chunks.push(chunk)).on('error', err => {
81 handler(err);
82 this.emit('error', err);
83 }).on('end', () => {
84 this.base64 = base64Chunks.join('');
85 this.emit('end');
86 handler.call(this.createMetadata(fileName));
87 this.emit('encoded', this.content, this);
88 });
89 }
90
91 encodeSync(fileName) {
92 if (!fileName || !fileName.trim || fileName.trim() === '') {
93 throw new Error('Insert a File path as string argument');
94 }
95
96 if ((0, _fs.existsSync)(fileName)) {
97 let fileContent = (0, _fs.readFileSync)(fileName);
98
99 return this.format(fileName, fileContent).content;
100 }
101
102 throw new Error(`The file ${ fileName } was not found!`);
103 }
104
105 getCSS() {
106 let config = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
107
108 if (!this.content) {
109 throw new Error('Create a data-uri config using the method encodeSync');
110 }
111
112 config.class = config.class || _path2.default.basename(this.fileName, _path2.default.extname(this.fileName));
113 config.background = this.content;
114
115 if (config.width || config.height || config['background-size']) {
116 config.dimensions = (0, _imageSize2.default)(this.fileName);
117 }
118
119 return (0, _css2.default)(config);
120 }
121}
122
123exports.default = Api;
\No newline at end of file