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, "/../"))