add immutable presentAs method to Dish for node REPL display. add test for exact match help

This commit is contained in:
d98762625 2019-03-20 11:57:47 +00:00
parent 8f5f3e56cb
commit 8eed2232ee
5 changed files with 55 additions and 11 deletions

View file

@ -184,6 +184,22 @@ class Dish {
}
}
/**
* Returns the Dish as the given type, without mutating the original dish.
*
* If running in a browser, get is asynchronous.
*
* @Node
*
* @param {number} type - The data type of value, see Dish enums.
* @param {boolean} [notUTF8=false] - Do not treat strings as UTF8.
* @returns {Dish | Promise} - (Broswer) A promise | (Node) value of dish in given type
*/
presentAs(type, notUTF8=false) {
const clone = this.clone();
return clone.get(type, notUTF8);
}
/**
* Validates that the value is the type that has been specified.

View file

@ -21,12 +21,17 @@ class File {
*
* https://w3c.github.io/FileAPI/#file-constructor
*
* @param {String|Array|ArrayBuffer|Buffer} bits - file content
* @param {String|Array|ArrayBuffer|Buffer|[File]} bits - file content
* @param {String} name (optional) - file name
* @param {Object} stats (optional) - file stats e.g. lastModified
*/
constructor(data, name="", stats={}) {
const buffers = data.map(d => Buffer.from(d));
const buffers = data.map((d) => {
if (d instanceof File) {
return Buffer.from(d.data);
}
return Buffer.from(d);
});
const totalLength = buffers.reduce((p, c) => p + c.length, 0);
this.data = Buffer.concat(buffers, totalLength);

View file

@ -53,14 +53,14 @@ class NodeDish extends Dish {
* Avoid coercion to a String primitive.
*/
toString() {
return this.get(Dish.typeEnum("string"));
return this.presentAs(Dish.typeEnum("string"));
}
/**
* What we want to log to the console.
*/
[util.inspect.custom](depth, options) {
return this.get(Dish.typeEnum("string"));
return this.presentAs(Dish.typeEnum("string"));
}
/**
@ -68,14 +68,14 @@ class NodeDish extends Dish {
* Log only the value to the console in node.
*/
inspect() {
return this.get(Dish.typeEnum("string"));
return this.presentAs(Dish.typeEnum("string"));
}
/**
* Avoid coercion to a Number primitive.
*/
valueOf() {
return this.get(Dish.typeEnum("number"));
return this.presentAs(Dish.typeEnum("number"));
}
}