If you feel the need to "test" JOSH's functionality from a command line, you're not alone, because I do to! That's why I created a very simple script that lets me directly import and interact with JOSH from the command line. That way I can set, get, delete, and do all the things without having to restart a script every time.
The script uses a simple readline
module that's core to node, so really the only thing it needs to run is josh
itself, and a provider such as @josh-providers/sqlite
.
You'll need to install the appropriate provider, see Providers for instructions.
Here's the script:
const readline = require('readline');const Josh = require('@joshdb/core');const provider = require('@joshdb/sqlite');const clean = async (text) => {if (text && text.constructor.name == 'Promise') {text = await text;}if (typeof evaled !== 'string') {text = require('util').inspect(text, { depth: 1 });}return text;};const evalCode = async (code) => {try {const evaled = eval(code);return await clean(evaled);} catch (err) {return await clean(err);}};const rl = readline.createInterface({input: process.stdin,output: process.stdout,});const db = new Josh({name: 'testing',provider,});(async () => {console.log(`Connected, there are ${await db.size} rows in the database.`);})();rl.on('line', async (input) => {console.log(`PROCESSING INPUT: ${input}`);const result = await evalCode(input);console.log(result);});
Once it runs, you can just type away directly in the command line! For example, db.set("test", "test")
just adds that key/value pair, as you'd expect.
Have fun!