diff --git a/src/core/Dish.mjs b/src/core/Dish.mjs index de3cff99..54591cdd 100755 --- a/src/core/Dish.mjs +++ b/src/core/Dish.mjs @@ -387,7 +387,7 @@ class Dish { [Dish.BIG_NUMBER]: () => Promise.resolve(DishBigNumber.toArrayBuffer.bind(this)()), [Dish.JSON]: () => Promise.resolve(DishJSON.toArrayBuffer.bind(this)()), [Dish.FILE]: () => DishFile.toArrayBuffer.bind(this)(), - [Dish.LIST_FILE]: () => DishListFile.toArrayBuffer.bind(this)(), + [Dish.LIST_FILE]: () => Promise.resolve(DishListFile.toArrayBuffer.bind(this)()), [Dish.BYTE_ARRAY]: () => Promise.resolve(DishByteArray.toArrayBuffer.bind(this)()), }, node: { diff --git a/src/core/Utils.mjs b/src/core/Utils.mjs index dfc3f018..0472f14d 100755 --- a/src/core/Utils.mjs +++ b/src/core/Utils.mjs @@ -94,7 +94,7 @@ class Utils { const paddedBytes = new Array(numBytes); paddedBytes.fill(padByte); - Array.prototype.map.call(arr, function(b, i) { + [...arr].forEach((b, i) => { paddedBytes[i] = b; }); @@ -1033,8 +1033,10 @@ class Utils { if (!Utils.isNode()) { throw new TypeError("Browser environment cannot support readFileSync"); } - - return file.data.buffer; + // Resist using node's Buffer.buffer here - this yields a 8192 length byteArray + // regardless of the length of the buffer. + const arrayBuffer = Uint8Array.from(file.data); + return arrayBuffer.buffer; } diff --git a/src/core/dishTranslationTypes/DishListFile.mjs b/src/core/dishTranslationTypes/DishListFile.mjs index ac200a76..1e043d66 100644 --- a/src/core/dishTranslationTypes/DishListFile.mjs +++ b/src/core/dishTranslationTypes/DishListFile.mjs @@ -17,14 +17,7 @@ class DishListFile extends DishTranslationType { */ static toArrayBuffer() { DishListFile.checkForValue(this.value); - if (Utils.isNode()) { - // TODO - this.value = [].concat.apply([], this.value.map(f => Utils.readFileSync(f)).map(b => Array.prototype.slice.call(b))); - } else { - return new Promise((resolve, reject) => { - resolve(DishListFile.concatenateTypedArrays(...this.value).buffer); - }); - } + this.value = DishListFile.concatenateTypedArrays(...this.value).buffer; } /** diff --git a/src/node/config/scripts/generateNodeIndex.mjs b/src/node/config/scripts/generateNodeIndex.mjs index 3eb2859a..b129f0fe 100644 --- a/src/node/config/scripts/generateNodeIndex.mjs +++ b/src/node/config/scripts/generateNodeIndex.mjs @@ -41,6 +41,7 @@ let code = `/** import "babel-polyfill"; import NodeDish from "./NodeDish"; import { _wrap, help, bake, _explainExludedFunction } from "./api"; +import File from "./File"; import { // import as core_ to avoid name clashes after wrap. `; @@ -53,6 +54,8 @@ includedOperations.forEach((op) => { code +=` } from "../core/operations/index"; +global.File = File; + // Define global environment functions global.ENVIRONMENT_IS_WORKER = function() { return typeof importScripts === "function"; diff --git a/src/node/index.mjs b/src/node/index.mjs index 16bd91b0..bed5b972 100644 --- a/src/node/index.mjs +++ b/src/node/index.mjs @@ -12,6 +12,7 @@ import "babel-polyfill"; import NodeDish from "./NodeDish"; import { _wrap, help, bake, _explainExludedFunction } from "./api"; +import File from "./File"; import { // import as core_ to avoid name clashes after wrap. A1Z26CipherDecode as core_A1Z26CipherDecode, @@ -316,6 +317,8 @@ import { } from "../core/operations/index"; +global.File = File; + // Define global environment functions global.ENVIRONMENT_IS_WORKER = function() { return typeof importScripts === "function"; diff --git a/tests/lib/utils.mjs b/tests/lib/utils.mjs index 4f27492c..b747b071 100644 --- a/tests/lib/utils.mjs +++ b/tests/lib/utils.mjs @@ -79,11 +79,6 @@ export function logTestReport(testStatus, results) { } } - if (!testStatus.allTestsPassing) { - console.log("\nFailing tests:\n"); - results.filter(r => r.status !== "passing").forEach(handleTestResult); - } - process.exit(testStatus.allTestsPassing ? 0 : 1); }