Creating Node.js CLI Tool That Generates Type Specific Data

Creating Node.js CLI Tool That Generates Type Specific Data

We will walk through the process of creating a Node.js Command-Line Interface (CLI) tool that generates random data using the faker library. Additionally, we'll enhance the output using the chalk library to add color and style to the command-line interface. This tool allows users to specify the type of data they want and saves the generated data to a JSON file.

Prerequisites

Make sure you have Node.js and npm installed on your machine. You'll also need to install the faker and chalk libraries:

npm install faker chalk

Step 1: Setting up the Project

Create a new directory for your project and navigate into it:

mkdir random-data-generator
cd random-data-generator

Step 2: Writing the CLI Script

Create a new file, e.g., generateData.js, and copy the following script into it:

#!/usr/bin/env node
//above line alows to utilize node on user machine

const fs = require('fs');
const faker = require('faker');
const yargs = require('yargs');
const chalk = require('chalk');

Step 3: Configuring Command-Line Options

Use the yargs library to configure command-line options, making it easy for users to specify the amount and type of data they want.

// ... (copy the rest of the script from the previous code snippet)

// Configure command-line options
const options = yargs
  .usage('<amount of data to generate> <type>')
  .demandCommand(2, 'Please provide both amount and type of data')
  .argv;

// Extract command-line arguments
const amount = parseInt(options._[0]);
const type = options._[1];

Step 4: Generating Random Data

Implement a function that generates random data based on the user's input. Use the faker library to create realistic data entries.

// ... (copy the rest of the script from the previous code snippet)

// Generate random data based on type
function generateData(amount, type) {
  const data = [];
  for (let i = 0; i < amount; i++) {
    let entry;

    //Switch to Add multiple casses in future
    switch (type)
    {
      case 'user':
        entry = {
          name: faker.name.findName(),
          email: faker.internet.email(),
          address: faker.address.streetAddress(),
        };
        break;
      // Add more cases for other types if needed

        default:
        console.error(chalk.red('Invalid data type. Supported types: user'));
        process.exit(1);
    }

    //append data array
    data.push(entry);
  }

  // return generated data 
  return data;
}


// Generate data by calling the generateData function
const generatedData = generateData(amount, type);

Step 5: Writing Data to JSON File

Write the generated data to a JSON file, making it easy for users to consume and share the data.

// ... (copy the rest of the script from the previous code snippet)

// Write data to a JSON file that is saved at root/mockData directory
const fileName = `./mockData/generated_data_${type}_${amount}.json`;
fs.writeFileSync(fileName, JSON.stringify(generatedData, null, 2));

Step 6: Adding Color to Output

Enhance the command-line output by adding color and style using the chalk library. Provide visual feedback for success and error messages.

// ... (copy the rest of the script from the previous code snippet)

//Chalk Library allows us to make fonts and bg colorful
console.log(chalk.green(`Generated data successfully and saved to ${fileName}`));

Step 7: Making the Script Executable

Make the script executable by updating its permissions:

chmod +x generateData.js

Step 8: Running the CLI Tool

Demonstrate how to run the CLI tool and generate random data with examples:

npx ./generateData.js 10 user

NOTE: "./generateData" , is relative path, when using from another dir/file, reference path accordingly.

Conclusion

In this tutorial, we've created a Node.js CLI tool to generate random data with faker and added colorful output using chalk. This tool provides a simple yet effective way to create custom datasets for various applications.

Feel free to expand on this project by adding more data types, refining the output format, or incorporating additional features based on your specific use case.

  • Remember to replace placeholders and customize the content based on your preferences and additional information you'd like to include.


I hope it was insightful and helped you get familiar with how Command-line-interface tools work. Post likes/comments and share in your circles.

p.s Let's connect.
You can follow me on Hashnode, and I also share content on these platforms: