aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2013-04-11 23:00:06 +0100
committerMichael Williamson <mike@zwobble.org>2013-04-11 23:00:06 +0100
commit90cf7be66b7ecbe11066fafcdcacf8f0c6bcf3e9 (patch)
tree9f8d0f3e98f70982661589fcce2163eec39edbc3 /lib
parent1d9da5d8ed67e3f31ebda8f12082e6e607c673f0 (diff)
Move unzip code into separate module
Diffstat (limited to 'lib')
-rw-r--r--lib/docx-reader.js70
-rw-r--r--lib/unzip.js72
2 files changed, 75 insertions, 67 deletions
diff --git a/lib/docx-reader.js b/lib/docx-reader.js
index 09bc8c1..455bb02 100644
--- a/lib/docx-reader.js
+++ b/lib/docx-reader.js
@@ -1,14 +1,9 @@
exports.read = read;
var q = require("q");
-var _ = require("underscore");
-var unzip = {
- Parse: require("unzip/lib/parse")
-};
+var unzip = require("./unzip");
var path = require("path");
var fs = require("fs");
-var Buffers = require("buffers");
-var streamBuffers = require("stream-buffers");
var xmlreader = require("./xmlreader");
var documents = require("./documents");
@@ -19,15 +14,11 @@ var Result = require("./results").Result;
function read(options) {
var docxFile;
if (options.path) {
- var zipPath = docxFile;
- docxFile = openZipStream(fs.createReadStream(options.path));
+ docxFile = unzip.unzipStream(fs.createReadStream(options.path));
} else if (options.file) {
docxFile = options.file;
} else if (options.uint8Array) {
- var buffer = new Buffer(options.uint8Array);
- var stream = new streamBuffers.ReadableStreamBuffer();
- stream.put(buffer);
- docxFile = openZipStream(stream);
+ docxFile = unzip.unzipUint8Array(options.uint8Array);
} else {
return q.reject(new Error("Could not find file in options"));
}
@@ -44,61 +35,6 @@ function read(options) {
});
}
-function openZipStream(stream) {
- var deferred = q.defer();
- var names = [];
- var files = {};
-
- stream
- .pipe(unzip.Parse())
- .on("entry", function(entry) {
- names.push(entry.path);
- files[entry.path] = readEntry(entry);
- })
- .on("close", function() {
- deferred.resolve(zipFile);
- })
- .on("error", function(err) {
- deferred.reject(err);
- });
-
- var exists = function(path) {
- return names.indexOf(path) !== -1;
- }
-
- function readEntry(entry) {
- var readDeferred = q.defer();
- var buffers = new Buffers();
-
- entry
- .on("data", function(data) {
- buffers.push(data);
- })
- .on("end", function() {
- readDeferred.resolve(buffers);
- })
- .on("error", readDeferred.reject.bind(readDeferred))
-
- return readDeferred.promise;
- }
- var zipFile = {
- read: function(path, encoding) {
- if (!exists(path)) {
- return q.reject(new Error("No file in zip: " + path));
- }
- return files[path].then(function(buffer) {
- if (encoding) {
- return buffer.toString(encoding);
- } else {
- return buffer;
- }
- });
- },
- exists: exists
- };
- return deferred.promise;
-}
-
function readXmlFile(docxFile, path) {
var xmlNamespaceMap = {
"http://schemas.openxmlformats.org/wordprocessingml/2006/main": "w",
diff --git a/lib/unzip.js b/lib/unzip.js
new file mode 100644
index 0000000..858a4da
--- /dev/null
+++ b/lib/unzip.js
@@ -0,0 +1,72 @@
+exports.unzipUint8Array = unzipUint8Array;
+exports.unzipStream = unzipStream;
+
+var q = require("q");
+var unzip = {
+ Parse: require("unzip/lib/parse")
+};
+var Buffers = require("buffers");
+var streamBuffers = require("stream-buffers");
+
+
+function unzipUint8Array(array) {
+ var buffer = new Buffer(array);
+ var stream = new streamBuffers.ReadableStreamBuffer();
+ stream.put(buffer);
+ return unzipStream(stream);
+}
+
+function unzipStream(stream) {
+ var deferred = q.defer();
+ var names = [];
+ var files = {};
+
+ stream
+ .pipe(unzip.Parse())
+ .on("entry", function(entry) {
+ names.push(entry.path);
+ files[entry.path] = readEntry(entry);
+ })
+ .on("close", function() {
+ deferred.resolve(zipFile);
+ })
+ .on("error", function(err) {
+ deferred.reject(err);
+ });
+
+ var exists = function(path) {
+ return names.indexOf(path) !== -1;
+ }
+
+ function readEntry(entry) {
+ var readDeferred = q.defer();
+ var buffers = new Buffers();
+
+ entry
+ .on("data", function(data) {
+ buffers.push(data);
+ })
+ .on("end", function() {
+ readDeferred.resolve(buffers);
+ })
+ .on("error", readDeferred.reject.bind(readDeferred))
+
+ return readDeferred.promise;
+ }
+ var zipFile = {
+ read: function(path, encoding) {
+ if (!exists(path)) {
+ return q.reject(new Error("No file in zip: " + path));
+ }
+ return files[path].then(function(buffer) {
+ if (encoding) {
+ return buffer.toString(encoding);
+ } else {
+ return buffer;
+ }
+ });
+ },
+ exists: exists
+ };
+ return deferred.promise;
+}