1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _path = require('path');
|
8 |
|
9 | var _path2 = _interopRequireDefault(_path);
|
10 |
|
11 | var _fs = require('fs');
|
12 |
|
13 | var _mimer = require('mimer');
|
14 |
|
15 | var _mimer2 = _interopRequireDefault(_mimer);
|
16 |
|
17 | var _imageSize = require('image-size');
|
18 |
|
19 | var _imageSize2 = _interopRequireDefault(_imageSize);
|
20 |
|
21 | var _uri = require('./template/uri');
|
22 |
|
23 | var _uri2 = _interopRequireDefault(_uri);
|
24 |
|
25 | var _css = require('./template/css');
|
26 |
|
27 | var _css2 = _interopRequireDefault(_css);
|
28 |
|
29 | var _stream = require('stream');
|
30 |
|
31 | var _stream2 = _interopRequireDefault(_stream);
|
32 |
|
33 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
34 |
|
35 | class 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 |
|
123 | exports.default = Api; |
\ | No newline at end of file |