From 7b58ccc40055868cf91ea8a2ebdc9bb443181c7d Mon Sep 17 00:00:00 2001 From: Oleg Genshaft Date: Mon, 20 Nov 2017 03:12:37 +0200 Subject: [PATCH 1/4] init Adam's version --- README.md | 40 +++- lib/Compressors/NoCompression.js | 2 +- lib/Compressors/PalmdocCompression.js | 8 +- lib/Mobi.js | 82 +++----- package-lock.json | 258 ++++++++++++++++++++++++++ package.json | 1 + src/Mobi.coffee | 14 +- 7 files changed, 334 insertions(+), 71 deletions(-) create mode 100644 package-lock.json diff --git a/README.md b/README.md index 3f0f590..f5fe7b7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,36 @@ -# node-mobi -`mobi` is a module for node.js that can parse unencrypted .mobi (Kindle) -files. +# node-mobi-to-text -## Installation -`npm install mobi` +It's jsut a small extention of [node-mobi][1] + +[1]: https://github.com/ctbarna/node-mobi + +##Examples +###Get mobi using a file system +- Install mobi `npm i --save mobi` +- add this to a js file + ``` + const Mobi = require('mobi'); + const file = new Mobi ('agile-soft.mobi'); + console.log(file.content); + ``` +###Get mobi from a file uploaded to an express server +- Start a fresh express project `express -f` +- Install express dependencies `npm install` +- Add mobi and express-fileupload modules `npm i --save express-fileupload mobi` +- Add this to your app.js + ``` + const fileUpload = require('express-fileupload'); + const Mobi = require('mobi'); + const router = express.Router(); + app.use(fileUpload()); + app.use('/upload-file', router); + router.post('/', function (req, res, next) { + console.log(req.files.file.data); + let file = new Mobi(req.files.file.data); + console.log(file.content); + }); + ``` +- Run the app `npm run start` +##Contributors +You need to have coffee script installed so `npm install -g coffee-script` +and run `make` to build diff --git a/lib/Compressors/NoCompression.js b/lib/Compressors/NoCompression.js index 6933132..aecea76 100644 --- a/lib/Compressors/NoCompression.js +++ b/lib/Compressors/NoCompression.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.3.3 +// Generated by CoffeeScript 1.12.7 (function() { var compress, decompress; diff --git a/lib/Compressors/PalmdocCompression.js b/lib/Compressors/PalmdocCompression.js index b202d74..5b19882 100644 --- a/lib/Compressors/PalmdocCompression.js +++ b/lib/Compressors/PalmdocCompression.js @@ -1,9 +1,9 @@ -// Generated by CoffeeScript 1.3.3 +// Generated by CoffeeScript 1.12.7 (function() { var compress, decompress; decompress = function(data) { - var concat, distance, frame, index, length, string, x, _i, _j, _ref; + var concat, distance, frame, i, index, j, length, ref, ref1, string, x; string = ''; index = 0; while (index < data.length) { @@ -11,7 +11,7 @@ index += 1; if (frame >= 1 && frame <= 8) { string += data.toString('utf8', index, index + frame); - for (x = _i = 0, _ref = frame - 1; 0 <= _ref ? _i < _ref : _i > _ref; x = 0 <= _ref ? ++_i : --_i) { + for (x = i = 0, ref = frame - 1; 0 <= ref ? i < ref : i > ref; x = 0 <= ref ? ++i : --i) { string += String.fromCharCode(0xE0E0); } index += frame; @@ -26,7 +26,7 @@ if (length < distance) { string += string.slice(-distance, length - distance); } else { - for (x = _j = 0; 0 <= length ? _j < length : _j > length; x = 0 <= length ? ++_j : --_j) { + for (x = j = 0, ref1 = length; 0 <= ref1 ? j < ref1 : j > ref1; x = 0 <= ref1 ? ++j : --j) { string += string[string.length - distance]; } } diff --git a/lib/Mobi.js b/lib/Mobi.js index ff61a05..bdbb1fd 100644 --- a/lib/Mobi.js +++ b/lib/Mobi.js @@ -1,13 +1,14 @@ -// Generated by CoffeeScript 1.3.3 +// Generated by CoffeeScript 1.12.7 (function() { - var Mobi, Packer, exports, fs; + var Mobi, Packer, exports, fs, is_buffer; fs = require('fs'); Packer = require('pypacker'); - Mobi = (function() { + is_buffer = require('is-buffer'); + Mobi = (function() { function Mobi(filename) { this.filename = filename; this.info = { @@ -22,22 +23,26 @@ } Mobi.prototype.parse = function() { - var bufIndex, buffer, compressor, data, fd, file_info, filename, flags, header, id, index, mobiHeader, multibyte, pdbHeader, position, startPosition, trailers, _i, _j, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7; + var bufIndex, buffer, compressor, data, fd, file_info, filename, flags, header, i, id, index, j, mobiHeader, multibyte, pdbHeader, position, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, startPosition, trailers; filename = this.filename; - file_info = fs.statSync(filename); - buffer = new Buffer(file_info.size); - fd = fs.openSync(filename, 'r'); - fs.readSync(fd, buffer, 0, file_info.size, 0); + if (is_buffer(filename)) { + buffer = filename; + } else { + file_info = fs.statSync(filename); + buffer = new Buffer(file_info.size); + fd = fs.openSync(filename, 'r'); + fs.readSync(fd, buffer, 0, file_info.size, 0); + } pdbHeader = this.info.pdbHeader; - _ref = new Packer('31sxHH6I4s4s2IH').unpack_from(buffer), this.info.name = _ref[0], pdbHeader.attributes = _ref[1], pdbHeader.version = _ref[2], pdbHeader.created = _ref[3], pdbHeader.modified = _ref[4], pdbHeader.backedUp = _ref[5], pdbHeader.modificationNumber = _ref[6], pdbHeader.appInfoId = _ref[7], pdbHeader.sortInfoID = _ref[8], pdbHeader.type = _ref[9], pdbHeader.creator = _ref[10], pdbHeader.uniqueIDseed = _ref[11], pdbHeader.nextRecordListID = _ref[12], pdbHeader.recordCount = _ref[13]; + ref = new Packer('31sxHH6I4s4s2IH').unpack_from(buffer), this.info.name = ref[0], pdbHeader.attributes = ref[1], pdbHeader.version = ref[2], pdbHeader.created = ref[3], pdbHeader.modified = ref[4], pdbHeader.backedUp = ref[5], pdbHeader.modificationNumber = ref[6], pdbHeader.appInfoId = ref[7], pdbHeader.sortInfoID = ref[8], pdbHeader.type = ref[9], pdbHeader.creator = ref[10], pdbHeader.uniqueIDseed = ref[11], pdbHeader.nextRecordListID = ref[12], pdbHeader.recordCount = ref[13]; this.info.name = this.info.name.replace(/\u0000/g, ""); pdbHeader.created = new Date(pdbHeader.created * 1000); pdbHeader.modified = new Date(pdbHeader.modified * 1000); pdbHeader.backedUp = new Date(pdbHeader.backedUp * 100); bufIndex = 0x4E; - for (index = _i = 0, _ref1 = pdbHeader.recordCount; 0 <= _ref1 ? _i < _ref1 : _i > _ref1; index = 0 <= _ref1 ? ++_i : --_i) { + for (index = i = 0, ref1 = pdbHeader.recordCount; 0 <= ref1 ? i < ref1 : i > ref1; index = 0 <= ref1 ? ++i : --i) { startPosition = bufIndex + (index * 8); - _ref2 = new Packer('II').unpack_from(buffer, startPosition), position = _ref2[0], id = _ref2[1]; + ref2 = new Packer('II').unpack_from(buffer, startPosition), position = ref2[0], id = ref2[1]; id = id & 0x00FFFFFF; pdbHeader.records.push({ "position": position, @@ -46,24 +51,24 @@ } header = buffer.slice(pdbHeader.records[0].position, pdbHeader.records[1].position); mobiHeader = this.info.mobiHeader; - _ref3 = new Packer('H2xI3H6x3I').unpack_from(header), mobiHeader.compression = _ref3[0], mobiHeader.text_length = _ref3[1], mobiHeader.textRecordCount = _ref3[2], mobiHeader.recordSize = _ref3[3], mobiHeader.encryption = _ref3[4], mobiHeader.headerLength = _ref3[5], mobiHeader.mobiType = _ref3[6], mobiHeader.encoding = _ref3[7]; - _ref4 = new Packer('3I').unpack_from(header, 0x50), mobiHeader.firstNonBookIndex = _ref4[0], mobiHeader.fullNameOffset = _ref4[1], mobiHeader.fullNameLength = _ref4[2]; + ref3 = new Packer('H2xI3H6x3I').unpack_from(header), mobiHeader.compression = ref3[0], mobiHeader.text_length = ref3[1], mobiHeader.textRecordCount = ref3[2], mobiHeader.recordSize = ref3[3], mobiHeader.encryption = ref3[4], mobiHeader.headerLength = ref3[5], mobiHeader.mobiType = ref3[6], mobiHeader.encoding = ref3[7]; + ref4 = new Packer('3I').unpack_from(header, 0x50), mobiHeader.firstNonBookIndex = ref4[0], mobiHeader.fullNameOffset = ref4[1], mobiHeader.fullNameLength = ref4[2]; mobiHeader.firstImageIndex = new Packer('I').unpack_from(header, 0x6C)[0]; mobiHeader.exthFlags = new Packer('I').unpack_from(header, 0x80)[0]; - mobiHeader.exthFlags = (mobiHeader.exthFlags & 0x40) === 0x40 ? true : false; - _ref5 = new Packer('2H').unpack_from(header, 0xC2), mobiHeader.firstContentRecord = _ref5[0], mobiHeader.lastContentRecord = _ref5[1]; - this.info.title = new Packer("" + mobiHeader.fullNameLength + "s").unpack_from(header, mobiHeader.fullNameOffset)[0]; + mobiHeader.exthFlags = ((mobiHeader.exthFlags & 0x40) === 0x40) ? true : false; + ref5 = new Packer('2H').unpack_from(header, 0xC2), mobiHeader.firstContentRecord = ref5[0], mobiHeader.lastContentRecord = ref5[1]; + this.info.title = new Packer(mobiHeader.fullNameLength + "s").unpack_from(header, mobiHeader.fullNameOffset)[0]; multibyte = 0; trailers = 0; if (mobiHeader.headerLength >= 0xE4) { - flags = (_ref6 = new Packer('H').unpack_from(header, 0xF2), mobiHeader.flags = _ref6[0], _ref6); + flags = (ref6 = new Packer('H').unpack_from(header, 0xF2), mobiHeader.flags = ref6[0], ref6); multibyte = flags & 1; while (flags > 1) { trailers += 1; flags = flags & (flags - 2); } } - for (position = _j = 1, _ref7 = mobiHeader.textRecordCount; 1 <= _ref7 ? _j <= _ref7 : _j >= _ref7; position = 1 <= _ref7 ? ++_j : --_j) { + for (position = j = 1, ref7 = mobiHeader.textRecordCount; 1 <= ref7 ? j <= ref7 : j >= ref7; position = 1 <= ref7 ? ++j : --j) { data = buffer.slice(pdbHeader.records[position].position, pdbHeader.records[position + 1].position); data = this.trim(data, trailers, multibyte); if (mobiHeader.compression === 1) { @@ -81,11 +86,11 @@ }; Mobi.prototype.trim = function(data, trailers, multibyte) { - var end_bytes, num, v, z, _i, _j; - for (z = _i = 0; 0 <= trailers ? _i < trailers : _i > trailers; z = 0 <= trailers ? ++_i : --_i) { + var end_bytes, i, j, num, ref, v, z; + for (z = i = 0, ref = trailers; 0 <= ref ? i < ref : i > ref; z = 0 <= ref ? ++i : --i) { num = 0; end_bytes = data.slice(data.length - 4); - for (v = _j = 0; _j < 4; v = ++_j) { + for (v = j = 0; j < 4; v = ++j) { if (end_bytes[v] & 0x80) { num = 0; } @@ -100,41 +105,6 @@ return data; }; - Mobi.prototype.palmdocReader = function(data) { - var concat, distance, frame, index, length, string, x, _i, _j, _ref; - string = ''; - index = 0; - while (index < data.length) { - frame = data[index]; - index += 1; - if (frame >= 1 && frame <= 8) { - string += data.toString('utf8', index, index + frame); - for (x = _i = 0, _ref = frame - 1; 0 <= _ref ? _i < _ref : _i > _ref; x = 0 <= _ref ? ++_i : --_i) { - string += String.fromCharCode(0xE0E0); - } - index += frame; - } else if (frame < 128) { - string += String.fromCharCode(frame); - } else if (frame >= 192) { - string += ' ' + String.fromCharCode(frame ^ 128); - } else { - concat = (frame << 8) | data[index]; - distance = (concat >> 3) & 0x07FF; - length = (concat & 7) + 3; - if (length < distance) { - string += string.slice(-distance, length - distance); - } else { - for (x = _j = 0; 0 <= length ? _j < length : _j > length; x = 0 <= length ? ++_j : --_j) { - string += string[string.length - distance]; - } - } - index += 1; - } - } - string = string.replace(/\uE0E0/g, ''); - return string; - }; - return Mobi; })(); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..365ca15 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,258 @@ +{ + "name": "mobi", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "assertion-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", + "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "dev": true, + "requires": { + "assertion-error": "1.0.2", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.5" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "4.0.5" + } + }, + "diff": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.0.1.tgz", + "integrity": "sha512-evDmhkoA+cBNiQQQdSKZa2b9+W2mpLoj50367lhy+Klnx9OV8XlCIhigUnn1gaTFLQCa0kdNhEGDr0hCXOQFDw==", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.3.1", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "pypacker": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/pypacker/-/pypacker-0.2.1.tgz", + "integrity": "sha1-v09QzZYN7F9rfa/ryJn+k28hVwY=" + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + }, + "type-detect": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.5.tgz", + "integrity": "sha512-N9IvkQslUGYGC24RkJk1ba99foK6TkwC2FHAEBlQFBP0RxQZS8ZpJuAZcwiY/w9ZJHFQb1aOXBI60OdxhTrwEQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } +} diff --git a/package.json b/package.json index 7b1e23e..4b47e6a 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "author": "Chris Barna ", "main": "main.js", "dependencies": { + "is-buffer": "^1.1.6", "pypacker": "0.2.1" }, "devDependencies": { diff --git a/src/Mobi.coffee b/src/Mobi.coffee index ab1c66a..fbce254 100644 --- a/src/Mobi.coffee +++ b/src/Mobi.coffee @@ -1,5 +1,6 @@ fs = require 'fs' Packer = require 'pypacker' +is_buffer = require('is-buffer') class Mobi constructor: (filename) -> @@ -10,11 +11,14 @@ class Mobi parse: -> filename = @filename - file_info = fs.statSync(filename) - buffer = new Buffer(file_info.size) - - fd = fs.openSync(filename, 'r') - fs.readSync(fd, buffer, 0, file_info.size, 0) + if is_buffer(filename) + buffer = filename + else + file_info = fs.statSync(filename) + buffer = new Buffer(file_info.size) + + fd = fs.openSync(filename, 'r') + fs.readSync(fd, buffer, 0, file_info.size, 0) ## # Parse the PDB header! From 0ec93b4787b6650e80af637074460632eb602872 Mon Sep 17 00:00:00 2001 From: Oleg Genshaft Date: Mon, 20 Nov 2017 03:14:20 +0200 Subject: [PATCH 2/4] readme fix --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index f5fe7b7..fbda8d9 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,9 @@ It's jsut a small extention of [node-mobi][1] [1]: https://github.com/ctbarna/node-mobi ##Examples + ###Get mobi using a file system + - Install mobi `npm i --save mobi` - add this to a js file ``` @@ -13,7 +15,9 @@ It's jsut a small extention of [node-mobi][1] const file = new Mobi ('agile-soft.mobi'); console.log(file.content); ``` + ###Get mobi from a file uploaded to an express server + - Start a fresh express project `express -f` - Install express dependencies `npm install` - Add mobi and express-fileupload modules `npm i --save express-fileupload mobi` @@ -31,6 +35,8 @@ It's jsut a small extention of [node-mobi][1] }); ``` - Run the app `npm run start` + ##Contributors + You need to have coffee script installed so `npm install -g coffee-script` and run `make` to build From f0a99449f2288b451b38ebab88ddb7e0f68bd0d5 Mon Sep 17 00:00:00 2001 From: Oleg Genshaft Date: Mon, 20 Nov 2017 03:15:50 +0200 Subject: [PATCH 3/4] readme fix --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fbda8d9..04ec583 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ It's jsut a small extention of [node-mobi][1] [1]: https://github.com/ctbarna/node-mobi -##Examples +## Examples -###Get mobi using a file system +### Get mobi using a file system - Install mobi `npm i --save mobi` - add this to a js file @@ -16,7 +16,7 @@ It's jsut a small extention of [node-mobi][1] console.log(file.content); ``` -###Get mobi from a file uploaded to an express server +### Get mobi from a file uploaded to an express server - Start a fresh express project `express -f` - Install express dependencies `npm install` @@ -36,7 +36,7 @@ It's jsut a small extention of [node-mobi][1] ``` - Run the app `npm run start` -##Contributors +## Contributors You need to have coffee script installed so `npm install -g coffee-script` and run `make` to build From 3c463561628b4c710910ca5d88ed915a8b1582d6 Mon Sep 17 00:00:00 2001 From: Oleg Genshaft Date: Mon, 20 Nov 2017 03:57:11 +0200 Subject: [PATCH 4/4] remove console.log --- lib/Mobi.js | 1 - src/Mobi.coffee | 1 - 2 files changed, 2 deletions(-) diff --git a/lib/Mobi.js b/lib/Mobi.js index bdbb1fd..1f21066 100644 --- a/lib/Mobi.js +++ b/lib/Mobi.js @@ -79,7 +79,6 @@ throw new Error("LZ77 compression isn't supported... yet."); } data = compressor(data); - console.log(data); this.info.content += data; } return this.info.content = this.info.content.replace(/<(head|HEAD)>/g, ''); diff --git a/src/Mobi.coffee b/src/Mobi.coffee index fbce254..a14fcee 100644 --- a/src/Mobi.coffee +++ b/src/Mobi.coffee @@ -110,7 +110,6 @@ class Mobi else throw new Error("LZ77 compression isn't supported... yet.") data = compressor(data) - console.log(data) @info.content += data @info.content = @info.content.replace(/<(head|HEAD)>/g,