From 25e0585742a5b16ae88e0f20a3169a2b839741f5 Mon Sep 17 00:00:00 2001 From: d98762625 Date: Fri, 5 Oct 2018 16:32:12 +0100 Subject: [PATCH] Improve use of files as input. Add dish to repl --- src/node/SyncDish.mjs | 8 ++++++++ src/node/api.mjs | 14 ++------------ src/node/repl-index.mjs | 1 + test/tests/nodeApi/nodeApi.mjs | 8 ++++++++ 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/node/SyncDish.mjs b/src/node/SyncDish.mjs index 0d8fed75..b95e3e1f 100644 --- a/src/node/SyncDish.mjs +++ b/src/node/SyncDish.mjs @@ -23,6 +23,14 @@ class SyncDish extends Dish { * @param {String|Number} - The dish type, as enum or string */ constructor(inputOrDish=null, type=null) { + + // Allow `fs` file input: + // Any node fs Buffers transformed to array buffer + // NOT Buffer.buff, as this makes a buffer of the whole object. + if (Buffer.isBuffer(inputOrDish)) { + inputOrDish = new Uint8Array(inputOrDish).buffer; + } + super(inputOrDish, type); // Add operations to make it composable diff --git a/src/node/api.mjs b/src/node/api.mjs index bedff90e..1f85dc12 100644 --- a/src/node/api.mjs +++ b/src/node/api.mjs @@ -8,8 +8,6 @@ /*eslint no-console: ["off"] */ - -import Dish from "../core/Dish"; import SyncDish from "./SyncDish"; import NodeRecipe from "./NodeRecipe"; import OperationConfig from "./config/OperationConfig.json"; @@ -107,15 +105,11 @@ function ensureIsDish(input) { return new SyncDish(); } - let dish; if (input instanceof SyncDish) { - dish = input; + return input; } else { - dish = new SyncDish(); - const type = Dish.typeEnum(input.constructor.name); - dish.set(input, type); + return new SyncDish(input); } - return dish; } /** @@ -126,10 +120,6 @@ function ensureIsDish(input) { * @param args - operation args */ function prepareOp(opInstance, input, args) { - // convert any Buffers into ArrayBuffers. - if (input instanceof Buffer) { - input = input.buffer; - } const dish = ensureIsDish(input); let transformedArgs; // Transform object-style args to original args array diff --git a/src/node/repl-index.mjs b/src/node/repl-index.mjs index 7ac69451..b949d74f 100644 --- a/src/node/repl-index.mjs +++ b/src/node/repl-index.mjs @@ -34,3 +34,4 @@ operations.forEach((op) => { replServer.context.help = chef.help; replServer.context.bake = chef.bake; +replServer.context.Dish = chef.Dish; diff --git a/test/tests/nodeApi/nodeApi.mjs b/test/tests/nodeApi/nodeApi.mjs index 3ca83f72..849b5297 100644 --- a/test/tests/nodeApi/nodeApi.mjs +++ b/test/tests/nodeApi/nodeApi.mjs @@ -15,6 +15,7 @@ import it from "../assertionHandler"; import chef from "../../../src/node/index"; import OperationError from "../../../src/core/errors/OperationError"; import SyncDish from "../../../src/node/SyncDish"; +import fs from "fs"; import { toBase32, Dish } from "../../../src/node/index"; import TestRegister from "../../TestRegister"; @@ -349,6 +350,13 @@ TestRegister.addApiTests([ assert.strictEqual(JSONDish.type, 6); }), + it("Composable dish: Buffer type dishes should be converted to strings", () => { + fs.writeFileSync("test.txt", "abc"); + const dish = new Dish(fs.readFileSync("test.txt")); + assert.strictEqual(dish.type, 4); + fs.unlinkSync("test.txt"); + }), + it("Excluded operations: throw a sensible error when you try and call one", () => { try { chef.fork();