Browse Source

Improve use of files as input. Add dish to repl

d98762625 6 years ago
parent
commit
25e0585742
4 changed files with 19 additions and 12 deletions
  1. 8 0
      src/node/SyncDish.mjs
  2. 2 12
      src/node/api.mjs
  3. 1 0
      src/node/repl-index.mjs
  4. 8 0
      test/tests/nodeApi/nodeApi.mjs

+ 8 - 0
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

+ 2 - 12
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

+ 1 - 0
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;

+ 8 - 0
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();