diff options
Diffstat (limited to 'node_modules/iconv-lite/lib')
| -rw-r--r-- | node_modules/iconv-lite/lib/bom-handling.js | 52 | ||||
| -rw-r--r-- | node_modules/iconv-lite/lib/index.d.ts | 41 | ||||
| -rw-r--r-- | node_modules/iconv-lite/lib/index.js | 180 | ||||
| -rw-r--r-- | node_modules/iconv-lite/lib/streams.js | 109 | 
4 files changed, 382 insertions, 0 deletions
diff --git a/node_modules/iconv-lite/lib/bom-handling.js b/node_modules/iconv-lite/lib/bom-handling.js new file mode 100644 index 0000000..1050872 --- /dev/null +++ b/node_modules/iconv-lite/lib/bom-handling.js @@ -0,0 +1,52 @@ +"use strict"; + +var BOMChar = '\uFEFF'; + +exports.PrependBOM = PrependBOMWrapper +function PrependBOMWrapper(encoder, options) { +    this.encoder = encoder; +    this.addBOM = true; +} + +PrependBOMWrapper.prototype.write = function(str) { +    if (this.addBOM) { +        str = BOMChar + str; +        this.addBOM = false; +    } + +    return this.encoder.write(str); +} + +PrependBOMWrapper.prototype.end = function() { +    return this.encoder.end(); +} + + +//------------------------------------------------------------------------------ + +exports.StripBOM = StripBOMWrapper; +function StripBOMWrapper(decoder, options) { +    this.decoder = decoder; +    this.pass = false; +    this.options = options || {}; +} + +StripBOMWrapper.prototype.write = function(buf) { +    var res = this.decoder.write(buf); +    if (this.pass || !res) +        return res; + +    if (res[0] === BOMChar) { +        res = res.slice(1); +        if (typeof this.options.stripBOM === 'function') +            this.options.stripBOM(); +    } + +    this.pass = true; +    return res; +} + +StripBOMWrapper.prototype.end = function() { +    return this.decoder.end(); +} + diff --git a/node_modules/iconv-lite/lib/index.d.ts b/node_modules/iconv-lite/lib/index.d.ts new file mode 100644 index 0000000..99f200f --- /dev/null +++ b/node_modules/iconv-lite/lib/index.d.ts @@ -0,0 +1,41 @@ +/*--------------------------------------------------------------------------------------------- + *  Copyright (c) Microsoft Corporation. All rights reserved. + *  Licensed under the MIT License. + *  REQUIREMENT: This definition is dependent on the @types/node definition. + *  Install with `npm install @types/node --save-dev` + *--------------------------------------------------------------------------------------------*/ + +declare module 'iconv-lite' { +	// Basic API +	export function decode(buffer: Buffer, encoding: string, options?: Options): string; + +	export function encode(content: string, encoding: string, options?: Options): Buffer; + +	export function encodingExists(encoding: string): boolean; + +	// Stream API +	export function decodeStream(encoding: string, options?: Options): NodeJS.ReadWriteStream; + +	export function encodeStream(encoding: string, options?: Options): NodeJS.ReadWriteStream; + +	// Low-level stream APIs +	export function getEncoder(encoding: string, options?: Options): EncoderStream; + +	export function getDecoder(encoding: string, options?: Options): DecoderStream; +} + +export interface Options { +    stripBOM?: boolean; +    addBOM?: boolean; +    defaultEncoding?: string; +} + +export interface EncoderStream { +	write(str: string): Buffer; +	end(): Buffer | undefined; +} + +export interface DecoderStream { +	write(buf: Buffer): string; +	end(): string | undefined; +} diff --git a/node_modules/iconv-lite/lib/index.js b/node_modules/iconv-lite/lib/index.js new file mode 100644 index 0000000..657701c --- /dev/null +++ b/node_modules/iconv-lite/lib/index.js @@ -0,0 +1,180 @@ +"use strict"; + +var Buffer = require("safer-buffer").Buffer; + +var bomHandling = require("./bom-handling"), +    iconv = module.exports; + +// All codecs and aliases are kept here, keyed by encoding name/alias. +// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`. +iconv.encodings = null; + +// Characters emitted in case of error. +iconv.defaultCharUnicode = '�'; +iconv.defaultCharSingleByte = '?'; + +// Public API. +iconv.encode = function encode(str, encoding, options) { +    str = "" + (str || ""); // Ensure string. + +    var encoder = iconv.getEncoder(encoding, options); + +    var res = encoder.write(str); +    var trail = encoder.end(); +     +    return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res; +} + +iconv.decode = function decode(buf, encoding, options) { +    if (typeof buf === 'string') { +        if (!iconv.skipDecodeWarning) { +            console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding'); +            iconv.skipDecodeWarning = true; +        } + +        buf = Buffer.from("" + (buf || ""), "binary"); // Ensure buffer. +    } + +    var decoder = iconv.getDecoder(encoding, options); + +    var res = decoder.write(buf); +    var trail = decoder.end(); + +    return trail ? (res + trail) : res; +} + +iconv.encodingExists = function encodingExists(enc) { +    try { +        iconv.getCodec(enc); +        return true; +    } catch (e) { +        return false; +    } +} + +// Legacy aliases to convert functions +iconv.toEncoding = iconv.encode; +iconv.fromEncoding = iconv.decode; + +// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache. +iconv._codecDataCache = {}; +iconv.getCodec = function getCodec(encoding) { +    if (!iconv.encodings) +        iconv.encodings = require("../encodings"); // Lazy load all encoding definitions. +     +    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. +    var enc = iconv._canonicalizeEncoding(encoding); + +    // Traverse iconv.encodings to find actual codec. +    var codecOptions = {}; +    while (true) { +        var codec = iconv._codecDataCache[enc]; +        if (codec) +            return codec; + +        var codecDef = iconv.encodings[enc]; + +        switch (typeof codecDef) { +            case "string": // Direct alias to other encoding. +                enc = codecDef; +                break; + +            case "object": // Alias with options. Can be layered. +                for (var key in codecDef) +                    codecOptions[key] = codecDef[key]; + +                if (!codecOptions.encodingName) +                    codecOptions.encodingName = enc; +                 +                enc = codecDef.type; +                break; + +            case "function": // Codec itself. +                if (!codecOptions.encodingName) +                    codecOptions.encodingName = enc; + +                // The codec function must load all tables and return object with .encoder and .decoder methods. +                // It'll be called only once (for each different options object). +                codec = new codecDef(codecOptions, iconv); + +                iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later. +                return codec; + +            default: +                throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '"+enc+"')"); +        } +    } +} + +iconv._canonicalizeEncoding = function(encoding) { +    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. +    return (''+encoding).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g, ""); +} + +iconv.getEncoder = function getEncoder(encoding, options) { +    var codec = iconv.getCodec(encoding), +        encoder = new codec.encoder(options, codec); + +    if (codec.bomAware && options && options.addBOM) +        encoder = new bomHandling.PrependBOM(encoder, options); + +    return encoder; +} + +iconv.getDecoder = function getDecoder(encoding, options) { +    var codec = iconv.getCodec(encoding), +        decoder = new codec.decoder(options, codec); + +    if (codec.bomAware && !(options && options.stripBOM === false)) +        decoder = new bomHandling.StripBOM(decoder, 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); +    } + +    iconv.decodeStream = function decodeStream(encoding, options) { +        return new iconv.IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options); +    } + +    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: js files use non-utf8 encoding. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info."); +} diff --git a/node_modules/iconv-lite/lib/streams.js b/node_modules/iconv-lite/lib/streams.js new file mode 100644 index 0000000..a150648 --- /dev/null +++ b/node_modules/iconv-lite/lib/streams.js @@ -0,0 +1,109 @@ +"use strict"; + +var Buffer = require("safer-buffer").Buffer; + +// NOTE: Due to 'stream' module being pretty large (~100Kb, significant in browser environments),  +// we opt to dependency-inject it instead of creating a hard dependency. +module.exports = function(stream_module) { +    var Transform = stream_module.Transform; + +    // == Encoder stream ======================================================= + +    function IconvLiteEncoderStream(conv, options) { +        this.conv = conv; +        options = options || {}; +        options.decodeStrings = false; // We accept only strings, so we don't need to decode them. +        Transform.call(this, options); +    } + +    IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, { +        constructor: { value: IconvLiteEncoderStream } +    }); + +    IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) { +        if (typeof chunk != 'string') +            return done(new Error("Iconv encoding stream needs strings as its input.")); +        try { +            var res = this.conv.write(chunk); +            if (res && res.length) this.push(res); +            done(); +        } +        catch (e) { +            done(e); +        } +    } + +    IconvLiteEncoderStream.prototype._flush = function(done) { +        try { +            var res = this.conv.end(); +            if (res && res.length) this.push(res); +            done(); +        } +        catch (e) { +            done(e); +        } +    } + +    IconvLiteEncoderStream.prototype.collect = function(cb) { +        var chunks = []; +        this.on('error', cb); +        this.on('data', function(chunk) { chunks.push(chunk); }); +        this.on('end', function() { +            cb(null, Buffer.concat(chunks)); +        }); +        return this; +    } + + +    // == Decoder stream ======================================================= + +    function IconvLiteDecoderStream(conv, options) { +        this.conv = conv; +        options = options || {}; +        options.encoding = this.encoding = 'utf8'; // We output strings. +        Transform.call(this, options); +    } + +    IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, { +        constructor: { value: IconvLiteDecoderStream } +    }); + +    IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) { +        if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array)) +            return done(new Error("Iconv decoding stream needs buffers as its input.")); +        try { +            var res = this.conv.write(chunk); +            if (res && res.length) this.push(res, this.encoding); +            done(); +        } +        catch (e) { +            done(e); +        } +    } + +    IconvLiteDecoderStream.prototype._flush = function(done) { +        try { +            var res = this.conv.end(); +            if (res && res.length) this.push(res, this.encoding);                 +            done(); +        } +        catch (e) { +            done(e); +        } +    } + +    IconvLiteDecoderStream.prototype.collect = function(cb) { +        var res = ''; +        this.on('error', cb); +        this.on('data', function(chunk) { res += chunk; }); +        this.on('end', function() { +            cb(null, res); +        }); +        return this; +    } + +    return { +        IconvLiteEncoderStream: IconvLiteEncoderStream, +        IconvLiteDecoderStream: IconvLiteDecoderStream, +    }; +};  | 
