npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

knowledge-quest

v1.0.3

Published

Answer multiple choice questions and get a result of how well you did it.

Downloads

9

Readme

knowledge-quest

Build Status

Answer multiple choice questions and get a result of how well you did it.

screenshot

How it works?

knowledge-quest reads JSON question files in a directory and it constructs a topics menu from the main key in each JSON file. When the app starts it displays the topics menu. After the user selects a topic it starts displaying all available questions for that topic, one after the other. By default all questions are multiple choice and the user can select an answer from a list. After all questions are answered the results are shown, displaying how many questions where answered correctly and how many were wrong.

Install

npm install -g knowledge-quest

Run

knowledge-quest

Adding questions

Just run the app passing the path to your questions folder as first argument:

knowledge-quest [absolute-path-to-your-questions-folder]

It will read all the question files in the directory, construct the topics menu for each file and once the user selects a topic display all available questions for it.

Question files

Question files are normal JSON files.

Expected file structure is:

{
  "Topic title": [] <-- questions array
}

'Topic title' is what the user will see in the interactive menu.

Question format

Each question is a plain JavaScript object. Expected structure:

{
  "type": "list",
  "name": "A unique name for this question",
  "message": "The question you want to ask",
  "choices": [
    {
      "name": "An answer, the correct one, note the value below.",
      "value": true
    },
    {
      "name": "An answer, incorrect one.",
      "value": false
    },
    {
      "name": "Another incorrect answer.",
      "value": false
    }
  ]
}

IMPORTANT: If you have repeated question names the final count won't be correct! Answering questions with repeated names will overwrite previous count for that question name.

Sample questions file

{
  "JavaScript": [
    {
      "type": "list",
      "name": "promises",
      "message": "Select a proper implementation for promises in NodeJS:",
      "choices": [
        {
          "name": "new Promise((resolve, reject) => {...})",
          "value": true
        },
        {
          "name": "Promise((resolve, reject) => {...})",
          "value": false
        },
        {
          "name": "const promise = new Promise(); promise.resolve(true)",
          "value": false
        }
      ]
    },
    {
      "type": "list",
      "name": "event-loop",
      "message": "When does the event loop runs in the browser?",
      "choices": [
        {
          "name": "Always.",
          "value": true
        },
        {
          "name": "Once each time a function is excecuted.",
          "value": false
        },
        {
          "name": "After each line of code is read by the interpreter.",
          "value": false
        }
      ]
    }
  ]
}

Reference

knowledge-quest uses inquirer to display awesome interactive menues in the console.

You should refer to its documentation if you want to construct a specific interface.

Enjoy!