Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/iconv-lite/lib/index.js')
-rw-r--r--node_modules/iconv-lite/lib/index.js53
1 files changed, 40 insertions, 13 deletions
diff --git a/node_modules/iconv-lite/lib/index.js b/node_modules/iconv-lite/lib/index.js
index 5391919ca..657701c38 100644
--- a/node_modules/iconv-lite/lib/index.js
+++ b/node_modules/iconv-lite/lib/index.js
@@ -1,7 +1,5 @@
"use strict";
-// Some environments don't have global Buffer (e.g. React Native).
-// Solution would be installing npm modules "buffer" and "stream" explicitly.
var Buffer = require("safer-buffer").Buffer;
var bomHandling = require("./bom-handling"),
@@ -133,21 +131,50 @@ iconv.getDecoder = function getDecoder(encoding, options) {
return decoder;
}
+// Streaming API
+// NOTE: Streaming API naturally depends on 'stream' module from Node.js. Unfortunately in browser environments this module can add
+// up to 100Kb to the output bundle. To avoid unnecessary code bloat, we don't enable Streaming API in browser by default.
+// If you would like to enable it explicitly, please add the following code to your app:
+// > iconv.enableStreamingAPI(require('stream'));
+iconv.enableStreamingAPI = function enableStreamingAPI(stream_module) {
+ if (iconv.supportsStreams)
+ return;
+
+ // Dependency-inject stream module to create IconvLite stream classes.
+ var streams = require("./streams")(stream_module);
+
+ // Not public API yet, but expose the stream classes.
+ iconv.IconvLiteEncoderStream = streams.IconvLiteEncoderStream;
+ iconv.IconvLiteDecoderStream = streams.IconvLiteDecoderStream;
+
+ // Streaming API.
+ iconv.encodeStream = function encodeStream(encoding, options) {
+ return new iconv.IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);
+ }
-// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json.
-var nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node;
-if (nodeVer) {
-
- // Load streaming support in Node v0.10+
- var nodeVerArr = nodeVer.split(".").map(Number);
- if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) {
- require("./streams")(iconv);
+ iconv.decodeStream = function decodeStream(encoding, options) {
+ return new iconv.IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);
}
- // Load Node primitive extensions.
- require("./extend-node")(iconv);
+ iconv.supportsStreams = true;
+}
+
+// Enable Streaming API automatically if 'stream' module is available and non-empty (the majority of environments).
+var stream_module;
+try {
+ stream_module = require("stream");
+} catch (e) {}
+
+if (stream_module && stream_module.Transform) {
+ iconv.enableStreamingAPI(stream_module);
+
+} else {
+ // In rare cases where 'stream' module is not available by default, throw a helpful exception.
+ iconv.encodeStream = iconv.decodeStream = function() {
+ throw new Error("iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.");
+ };
}
if ("Ā" != "\u0100") {
- console.error("iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.");
+ console.error("iconv-lite warning: js files use non-utf8 encoding. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.");
}