diff --git a/Gruntfile.js b/Gruntfile.js index d1e295fb..e91b74da 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -138,15 +138,14 @@ module.exports = function(grunt) { browserifyOptions: { standalone: 'JSZip', transform: ['package-json-versionify'], - insertGlobalVars : { - Buffer: function () { - // instead of the full polyfill, we just use the raw value - // (or undefined). - return '(typeof Buffer !== "undefined" ? Buffer : undefined)'; - } - } + insertGlobalVars: { + process: undefined, + Buffer: undefined, + __filename: undefined, + __dirname: undefined + }, + builtins: false }, - ignore : ["./lib/nodejs/*"], banner : grunt.file.read('lib/license_header.js').replace(/__VERSION__/, version) } } diff --git a/lib/external.js b/lib/external.js index 37bd7064..8803e55f 100644 --- a/lib/external.js +++ b/lib/external.js @@ -1,9 +1,15 @@ +/* global Promise */ 'use strict'; // load the global object first: // - it should be better integrated in the system (unhandledRejection in node) // - the environment may have a custom Promise implementation (see zone.js) -var ES6Promise = global.Promise || require("lie"); +var ES6Promise = null; +if (typeof Promise !== "undefined") { + ES6Promise = Promise; +} else { + ES6Promise = require("lie"); +} /** * Let the user use/change some implementations. diff --git a/lib/readable-stream-browser.js b/lib/readable-stream-browser.js new file mode 100644 index 00000000..49410a46 --- /dev/null +++ b/lib/readable-stream-browser.js @@ -0,0 +1,9 @@ +/* + * This file is used by module bundlers (browserify/webpack/etc) when + * including a stream implementation. We use "readable-stream" to get a + * consistent behavior between nodejs versions but bundlers often have a shim + * for "stream". Using this shim greatly improve the compatibility and greatly + * reduce the final size of the bundle (only one stream implementation, not + * two). + */ +module.exports = require("stream"); diff --git a/lib/stream/StreamHelper.js b/lib/stream/StreamHelper.js index a8dc0f91..09958deb 100644 --- a/lib/stream/StreamHelper.js +++ b/lib/stream/StreamHelper.js @@ -4,9 +4,16 @@ var utils = require('../utils'); var ConvertWorker = require('./ConvertWorker'); var GenericWorker = require('./GenericWorker'); var base64 = require('../base64'); -var NodejsStreamOutputAdapter = require('../nodejs/NodejsStreamOutputAdapter'); +var support = require("../support"); var external = require("../external"); +var NodejsStreamOutputAdapter = null; +if (support.nodestream) { + try { + NodejsStreamOutputAdapter = require('../nodejs/NodejsStreamOutputAdapter'); + } catch(e) {} +} + /** * Apply the final transformation of the data. If the user wants a Blob for * example, it's easier to work with an U8intArray and finally do the diff --git a/lib/support.js b/lib/support.js index 7b6f8ac0..5b3b3a85 100644 --- a/lib/support.js +++ b/lib/support.js @@ -31,4 +31,8 @@ else { } } -exports.nodestream = !!require("./nodejs/NodejsStreamOutputAdapter").prototype; +try { + exports.nodestream = !!require('readable-stream').Readable; +} catch(e) { + exports.nodestream = false; +} diff --git a/package.json b/package.json index 9d49d809..0861e535 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,9 @@ } ], "main": "./lib/index", + "browser": { + "readable-stream": "./lib/readable-stream-browser.js" + }, "repository": { "type": "git", "url": "https://github.com/Stuk/jszip.git"