diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 63816ac4..c10353bd 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -37,9 +37,6 @@ jobs:
run: npm run lint
performance:
- needs:
- - lint
- - coverage
name: Run performance test
strategy:
fail-fast: false
@@ -69,6 +66,10 @@ jobs:
matrix:
os: [ubuntu-latest, windows-latest]
node-version:
+ - "0.10"
+ - "0.12"
+ - "4"
+ - "5"
- "6"
- "7"
- "8"
@@ -91,6 +92,28 @@ jobs:
# Use supported versions of our testing tools under older versions of Node
# Install npm in some specific cases where we need to
include:
+ - node-version: "0.10"
+ npm-i: "mocha@3.5.3 nyc@10.3.2 supertest@2.0.0"
+ # Npm isn't being installed on windows w/ setup-node for
+ # 0.10 and 0.12, which will end up choking when npm uses es6
+ npm-version: "npm@2.15.1"
+ npm-rm: 'iconv'
+
+ - node-version: "0.12"
+ npm-i: "mocha@3.5.3 nyc@10.3.2"
+ npm-version: "npm@2.15.11"
+ npm-rm: 'iconv'
+
+ - node-version: "4"
+ npm-i: "mocha@5.2.0 nyc@11.9.0"
+ npm-rm: 'iconv'
+
+ - node-version: "5"
+ npm-i: "mocha@5.2.0 nyc@11.9.0"
+ # fixes https://github.com/npm/cli/issues/681
+ npm-version: npm@2.15.11
+ npm-rm: 'iconv'
+
- node-version: "6"
npm-i: "mocha@6.2.2 nyc@14.1.1"
npm-version: npm@6.13.4
diff --git a/.github/workflows/iojs.yml b/.github/workflows/iojs.yml
new file mode 100644
index 00000000..e1cc51e2
--- /dev/null
+++ b/.github/workflows/iojs.yml
@@ -0,0 +1,73 @@
+name: iojs-ci
+
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+ branches:
+ - master
+
+permissions:
+ contents: read
+
+concurrency:
+ group: "${{ github.workflow }} iojs ✨ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}"
+ cancel-in-progress: true
+
+jobs:
+ test:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ node-version: ["1.8", "2.5", "3.3"]
+ include:
+ - node-version: "1.8"
+ npm-i: "mocha@3.5.3 nyc@10.3.2"
+ npm-rm: 'iconv'
+ - node-version: "2.5"
+ npm-i: "mocha@3.5.3 nyc@10.3.2"
+ npm-rm: 'iconv'
+ - node-version: "3.3"
+ npm-i: "mocha@3.5.3 nyc@10.3.2"
+ npm-rm: 'iconv'
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Install iojs ${{ matrix.node-version }}
+ shell: bash -eo pipefail -l {0}
+ run: |
+ nvm install --default ${{ matrix.node-version }}
+ dirname "$(nvm which ${{ matrix.node-version }})" >> "$GITHUB_PATH"
+
+ - name: Configure npm
+ run: |
+ npm config set loglevel error
+ npm config set shrinkwrap false
+
+ - name: Remove npm module(s) ${{ matrix.npm-rm }}
+ run: npm rm --silent --save-dev ${{ matrix.npm-rm }} neostandard @stylistic/eslint-plugin-js @stylistic/eslint-plugin eslint
+ if: matrix.npm-rm != ''
+
+ - name: Install npm module(s) ${{ matrix.npm-i }}
+ run: npm install --save-dev ${{ matrix.npm-i }}
+ if: matrix.npm-i != ''
+
+ - name: Install Node.js dependencies
+ run: npm install
+
+ - name: List environment
+ id: list_env
+ shell: bash
+ run: |
+ echo "node@$(node -v)"
+ echo "npm@$(npm -v)"
+ npm -s ls ||:
+ (npm -s ls --depth=0 ||:) | awk -F'[ @]' 'NR>1 && $2 { print $2 "=" $3 }' >> "$GITHUB_OUTPUT"
+
+ - name: Run tests
+ shell: bash
+ run: npm run test
+
diff --git a/encodings/dbcs-codec.js b/encodings/dbcs-codec.js
index d7752f13..bfec7f2e 100644
--- a/encodings/dbcs-codec.js
+++ b/encodings/dbcs-codec.js
@@ -1,5 +1,5 @@
"use strict"
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.
// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.
diff --git a/encodings/internal.js b/encodings/internal.js
index 87ab0646..4e5c3ff2 100644
--- a/encodings/internal.js
+++ b/encodings/internal.js
@@ -1,5 +1,5 @@
"use strict"
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
// Export Node.js internal encodings.
diff --git a/encodings/sbcs-codec.js b/encodings/sbcs-codec.js
index e59faf2e..0e2fc924 100644
--- a/encodings/sbcs-codec.js
+++ b/encodings/sbcs-codec.js
@@ -1,5 +1,5 @@
"use strict"
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that
// correspond to encoded bytes (if 128 - then lower half is ASCII).
diff --git a/encodings/utf16.js b/encodings/utf16.js
index 5373a9d1..ae60d98e 100644
--- a/encodings/utf16.js
+++ b/encodings/utf16.js
@@ -1,5 +1,5 @@
"use strict"
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js
diff --git a/encodings/utf32.js b/encodings/utf32.js
index 0a24bb9c..72317893 100644
--- a/encodings/utf32.js
+++ b/encodings/utf32.js
@@ -1,6 +1,6 @@
"use strict"
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
// == UTF32-LE/BE codec. ==========================================================
diff --git a/encodings/utf7.js b/encodings/utf7.js
index 4aa1e018..fe72a9d9 100644
--- a/encodings/utf7.js
+++ b/encodings/utf7.js
@@ -1,5 +1,5 @@
"use strict"
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152
// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3
diff --git a/eslint.config.js b/eslint.config.js
index b789593f..34c0efd5 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -12,6 +12,7 @@ module.exports = [
}),
{
rules: {
+ "object-shorthand": ["off"], // Compatibility with older code
"@stylistic/quotes": [2, "double"], // Prevent many change of code
"new-cap": ["off"], // We need improve this
"no-labels": ["off"], // Can remove the labels?
diff --git a/generation/gen-sbcs.js b/generation/gen-sbcs.js
index 95a183c6..f82bd0f4 100644
--- a/generation/gen-sbcs.js
+++ b/generation/gen-sbcs.js
@@ -1,7 +1,7 @@
var fs = require("fs");
var path = require("path");
var Iconv = require("iconv").Iconv;
-var Buffer = require("buffer").Buffer;
+var Buffer = require("safer-buffer").Buffer;
// Generate encoding families using original iconv.
var destFileName = "encodings/sbcs-data-generated.js";
diff --git a/generation/research/get-iconv-encodings.js b/generation/research/get-iconv-encodings.js
index 964c28e6..da66df73 100644
--- a/generation/research/get-iconv-encodings.js
+++ b/generation/research/get-iconv-encodings.js
@@ -5,7 +5,7 @@
var iconv = require('iconv'),
crypto = require('crypto');
-var Buffer = require("buffer").Buffer;
+var Buffer = require("safer-buffer").Buffer;
var skipEncodings = {};
diff --git a/lib/index.js b/lib/index.js
index 9f36e45e..e3c5c4c4 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -1,6 +1,7 @@
"use strict"
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
+var objectAssign = require("object-assign")
var bomHandling = require("./bom-handling")
var iconv = module.exports
@@ -63,7 +64,7 @@ iconv._codecDataCache = Object.create(null)
iconv.getCodec = function getCodec (encoding) {
if (!iconv.encodings) {
var raw = require("../encodings")
- iconv.encodings = Object.assign(Object.create(null), raw) // Lazy load all encoding definitions.
+ iconv.encodings = objectAssign(Object.create(null), raw) // Lazy load all encoding definitions.
}
// Canonicalize encoding name: strip all non-alphanumeric chars and appended year.
diff --git a/lib/streams.js b/lib/streams.js
index 9e37a633..ebfed8e0 100644
--- a/lib/streams.js
+++ b/lib/streams.js
@@ -1,6 +1,6 @@
"use strict"
-var Buffer = require("buffer").Buffer
+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.
@@ -99,7 +99,7 @@ module.exports = function (streamModule) {
}
return {
- IconvLiteEncoderStream,
- IconvLiteDecoderStream
+ IconvLiteEncoderStream: IconvLiteEncoderStream,
+ IconvLiteDecoderStream: IconvLiteDecoderStream
}
}
diff --git a/package.json b/package.json
index 06830104..f4ceee25 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,7 @@
"url": "git://github.com/ashtuchkin/iconv-lite.git"
},
"engines": {
- "node": ">=6"
+ "node": ">=0.10.0"
},
"scripts": {
"lint": "eslint",
@@ -48,5 +48,9 @@
"request": "^2.88.2",
"semver": "^6.3.0",
"unorm": "^1.6.0"
+ },
+ "dependencies": {
+ "object-assign": ">= 4.1.1 < 5.0.0",
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
}
}
diff --git a/test/big5-test.js b/test/big5-test.js
index 268eec5f..050a24aa 100644
--- a/test/big5-test.js
+++ b/test/big5-test.js
@@ -1,5 +1,5 @@
var assert = require("assert")
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
var join = require("path").join
var iconv = require(join(__dirname, "/../"))
diff --git a/test/bom-test.js b/test/bom-test.js
index 58cb976c..9a08b3b7 100644
--- a/test/bom-test.js
+++ b/test/bom-test.js
@@ -1,5 +1,5 @@
var assert = require("assert")
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
var join = require("path").join
var iconv = require(join(__dirname, "/../"))
@@ -71,13 +71,13 @@ describe("BOM Handling", function () {
var stripBOM = function () { bomStripped = true }
var body = Buffer.concat([utf8BOM, Buffer.from(sampleStr)])
- assert.equal(iconv.decode(body, "utf8", { stripBOM }), sampleStr)
+ assert.equal(iconv.decode(body, "utf8", { stripBOM: stripBOM }), sampleStr)
assert(bomStripped)
bomStripped = false
body = Buffer.from(sampleStr)
- assert.equal(iconv.decode(body, "utf8", { stripBOM }), sampleStr)
+ assert.equal(iconv.decode(body, "utf8", { stripBOM: stripBOM }), sampleStr)
assert(!bomStripped)
})
})
diff --git a/test/cesu8-test.js b/test/cesu8-test.js
index 20cabdf2..58d8e8c8 100644
--- a/test/cesu8-test.js
+++ b/test/cesu8-test.js
@@ -1,5 +1,5 @@
var assert = require("assert")
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
var join = require("path").join
var iconv = require(join(__dirname, "/../"))
diff --git a/test/cyrillic-test.js b/test/cyrillic-test.js
index 8a9f2169..ad7129d9 100644
--- a/test/cyrillic-test.js
+++ b/test/cyrillic-test.js
@@ -1,5 +1,5 @@
var assert = require("assert")
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
var join = require("path").join
var iconv = require(join(__dirname, "/../"))
diff --git a/test/dbcs-test.js b/test/dbcs-test.js
index 7c8e9c37..a969b76a 100644
--- a/test/dbcs-test.js
+++ b/test/dbcs-test.js
@@ -1,5 +1,5 @@
var assert = require("assert")
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
var join = require("path").join
var iconv = require(join(__dirname, "/../"))
@@ -560,7 +560,7 @@ describe("Full DBCS encoding tests", function () {
{ return }
}
- errors.push({ input: inp.toString("hex"), strExpected, strActual })
+ errors.push({ input: inp.toString("hex"), strExpected: strExpected, strActual: strActual })
})
if (errors.length > 0) {
@@ -606,7 +606,7 @@ describe("Full DBCS encoding tests", function () {
if (iconvChgs[str] == str1) { continue } // Skip iconv changes.
- errors.push({ input: strToHex(str), inputChar: str, strExpected, strActual })
+ errors.push({ input: strToHex(str), inputChar: str, strExpected: strExpected, strActual: strActual })
}
if (errors.length > 0) {
diff --git a/test/gbk-test.js b/test/gbk-test.js
index 928c46aa..8fa2bcfe 100644
--- a/test/gbk-test.js
+++ b/test/gbk-test.js
@@ -1,6 +1,6 @@
var fs = require("fs")
var assert = require("assert")
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
var join = require("path").join
var iconv = require(join(__dirname, "/../"))
diff --git a/test/greek-test.js b/test/greek-test.js
index 2f880ddc..8ebfa158 100644
--- a/test/greek-test.js
+++ b/test/greek-test.js
@@ -1,5 +1,5 @@
var assert = require("assert")
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
var join = require("path").join
var iconv = require(join(__dirname, "/../"))
diff --git a/test/main-test.js b/test/main-test.js
index 06147465..1094cc9e 100644
--- a/test/main-test.js
+++ b/test/main-test.js
@@ -1,5 +1,5 @@
var assert = require("assert")
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
var join = require("path").join
var iconv = require(join(__dirname, "/../"))
diff --git a/test/sbcs-test.js b/test/sbcs-test.js
index 96cf4c4c..190cd6ec 100644
--- a/test/sbcs-test.js
+++ b/test/sbcs-test.js
@@ -1,6 +1,6 @@
var assert = require("assert")
var unorm = require("unorm")
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
var join = require("path").join
var iconv = require(join(__dirname, "/../"))
@@ -75,7 +75,7 @@ describe("Full SBCS encoding tests", function () {
var strActual = iconv.decode(buf, enc)
var strExpected = convertWithDefault(conv, buf, iconv.defaultCharUnicode).toString()
- if (strActual != strExpected) { errors.push({ input: buf.toString("hex"), strExpected, strActual }) }
+ if (strActual != strExpected) { errors.push({ input: buf.toString("hex"), strExpected: strExpected, strActual: strActual }) }
}
if (errors.length > 0) {
assert.fail(null, null, "Decoding mismatch: | | | | \n" +
@@ -133,7 +133,7 @@ describe("Full SBCS encoding tests", function () {
if (iconvEquivChars[enc] && iconvEquivChars[enc][str] &&
strExpected == iconv.encode(iconvEquivChars[enc][str], enc).toString("hex")) { continue }
- errors.push({ input: strToHex(str), inputChar: str, strExpected, strActual })
+ errors.push({ input: strToHex(str), inputChar: str, strExpected: strExpected, strActual: strActual })
}
if (errors.length > 0) {
diff --git a/test/shiftjis-test.js b/test/shiftjis-test.js
index 6a18de69..2cf926ba 100644
--- a/test/shiftjis-test.js
+++ b/test/shiftjis-test.js
@@ -1,5 +1,5 @@
var assert = require("assert")
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
var join = require("path").join
var iconv = require(join(__dirname, "/../"))
diff --git a/test/streams-test.js b/test/streams-test.js
index 3938fa3a..1c5276c0 100644
--- a/test/streams-test.js
+++ b/test/streams-test.js
@@ -1,7 +1,7 @@
var mocha = require("mocha")
var describeMocha = mocha.describe
var assert = require("assert")
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
var semver = require("semver")
var join = require("path").join
var iconv = require(join(__dirname, "/../"))
@@ -327,7 +327,7 @@ describe("Encoding using internal modules with surrogates in separate chunks:",
function checkUtf8EncodeStream (input) {
return checkEncodeStream({
encoding: "utf8",
- input,
+ input: input,
output: Buffer.from(input.join(""), "utf8").toString("hex")
})
}
diff --git a/test/turkish-test.js b/test/turkish-test.js
index 9f4577fa..6e170f20 100644
--- a/test/turkish-test.js
+++ b/test/turkish-test.js
@@ -1,5 +1,5 @@
var assert = require("assert")
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
var join = require("path").join
var iconv = require(join(__dirname, "/../"))
@@ -11,7 +11,7 @@ var encodings = [{
variations: ["windows-1254", "win-1254", "win1254", "cp1254", "cp-1254", 1254],
strings: {
empty: "",
- ascii,
+ ascii: ascii,
turkish: "€‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ",
untranslatable: "\x81\x8d\x8e\x8f\x90\x9d\x9e"
},
@@ -34,7 +34,7 @@ var encodings = [{
variations: ["iso-8859-9", "turkish", "turkish8", "cp28599", "cp-28599", 28599],
strings: {
empty: "",
- ascii,
+ ascii: ascii,
turkish: "\xa0¡¢£¤¥¦§¨©ª«¬\xad®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ",
untranslatable: ""
},
diff --git a/test/utf16-test.js b/test/utf16-test.js
index a930db8f..0f98c76d 100644
--- a/test/utf16-test.js
+++ b/test/utf16-test.js
@@ -1,5 +1,5 @@
var assert = require("assert")
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
var join = require("path").join
var iconv = require(join(__dirname, "/../"))
diff --git a/test/utf32-test.js b/test/utf32-test.js
index fcea0653..f43156c5 100644
--- a/test/utf32-test.js
+++ b/test/utf32-test.js
@@ -1,5 +1,5 @@
var assert = require("assert")
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
var join = require("path").join
var iconv = require(join(__dirname, "/../"))
diff --git a/test/utf7-test.js b/test/utf7-test.js
index 62b677bf..41bf93d0 100644
--- a/test/utf7-test.js
+++ b/test/utf7-test.js
@@ -1,5 +1,5 @@
var assert = require("assert")
-var Buffer = require("buffer").Buffer
+var Buffer = require("safer-buffer").Buffer
var join = require("path").join
var iconv = require(join(__dirname, "/../"))