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

gennode

v1.1.1

Published

Simple NodeJs server generator

Downloads

40

Readme

GenNode

Author

Nathan Mersha

Installation

Gen node is available on npm, type:

$ sudo npm i -g gennode

and install it globally, now you can use it from the command line.

New on 1.0.0

  • Added gennode_authorization features as describe here

Introduction

Following the trendy naming paradigm of * aa * , here comes another one Server as a configuration. So what is SAAC about, well a very simple CRUD server has a set of properties that can be described in a simple configuration file. This properties could be one of the ones described below. This information is almost always found in the documentation accompanying the server. However there is an obvious limitation for documentations as such, and with good reason. That is one can read the in's and out's of the server, but one can't recreate it directly from the documentation (say if one wishes to spin up a new server with minor modifications to the first.) The main purpose of this module is to aid the developer to spin up a new REST CRUD project in less than a minute with all the durgeroies completed.

Naming

GenNode is short for Generate NodeJS.

Prerequisite and Note

  1. An installation of mongodb on the running machine is required for the tests to pass, and for the server to start. Make sure the mongod server is up and running. Guide on how to install and run MongoDB can be found here.
  2. Make sure to have a version of NodeJS above or equal to Version 4. Get NodeJs here
  3. The reverse proxy value in environment will be used inside a docker container, so avoid using values like 'http://localhost' or 'http://127.0.0.1, since this would effectively point to the container itself.
  4. Server and model names will be changed to their corresponding cammel case format according to this module.

CLI

RUN $ gennode --help for a list of available commands.

initialize (init)

$ gennode init

Creates a new genNode configuration file with interactive prompt.

sample (s)

$ gennode s

Generates a sample genNode configuration file for a hero academy.

generate (gen)

$ gennode gen -i <configFilePath> -o <outputPath>

Initializes a new server by the provided gennode config file.

options

--input, -i (Required) : Input to the gennode config file path, sample for a config file can be found below or simply run $ gennode init

--output, -o (Required) : Output path where the server files will be generated in.

Configuration

The gennode configuration file is a simple javascript file exporting an object. Default name gennode.config.js

Note

On some debian platforms there seems to be a problem while installing dependencies, generating apidoc and running test. So after you generated all the files run the following commands inside the root folder of the generated code in order.

$ npm install

$ npm run apidoc

$ npm run test

This will insure all of the files are generated.

Main

Main configuration field options.

| Option | Description |Default|Type | |:------------:|:-----------:|:-----------:|:-----------:| |serviceName |Name of the service|Sample gen node server|String| |serviceDescription |A small description of what your service does|This service is generated by gennode...|String| |author |Service author|Gen Node|String| |copyright |Copyright|Copyright : Current Date|String| |runningMode |Service running mode|test_mode|String| |licence |Service Licence|MIT|String| |version |Version|0.0.1|String| |repoURL |Repository url|http://github.com|String| |baseURL |Version|/service|String| |runServer |Runns server after file generation is completed.|false|Boolean| |models |List of models|[]|Array| |dependantServices |Dependant services|Default values here|Object| |environment |Envrionment variables|Default values here|Object| |authentication |Header authentication type|Default values here|Object| |includeApiReqLib |Api request library|true|Boolean| |certificatePath |Path to root and client certificate|Default path here|Object| |mongodb |Includes mongodb docker file in server configuration|true|Boolean| |nginx |Generates a nginx proxy configuration file|true|Boolean| |test |Tests the generated api, creates test and coverage report using Mocha, Chai and Mochawesome|true|Boolean| |docker |Tests docker files for the server.|true|Boolean| |jenkins |Generates CI pipeline for the server.|true|Boolean| |postman |Generates postman collection file|true|Boolean| |elkLogger |Inserts elk stack logger using the bunyan lib|false|Boolean| |enableProxy |Generate Nginx configuraiton file|true|Boolean| |readMe |Generates readme file for the server.|true|Boolean| |documentation |Generates documentation powered by ApiDoc|true|Boolean| |instance |App instance (A value of 0 will run the server in cluster mode utilizing all logical cores)|1|Number| |commit |Commits the generated file.|true|Boolean|

Dependant Services

Dependant service

| Option | Description |Default|Type | |:------------:|:-----------:|:-----------:|:-----------:| |endPoints |List of endpoint to ping before initializing the service|[]|Array [String]| |abortIfFail |If true server wont start if ping response code is 4** or 5** |false|Boolean|

Authentication

Authentication options

| Option | Description |Default|Type | |:------------:|:-----------:|:-----------:|:-----------:| |type |Authentication type|Bearer|String| |headerKey |Authentication header key|Authentication|String|

Certificate

Certificates path

| Option | Description |Default|Type | |:------------:|:-----------:|:-----------:|:-----------:| |root |Path to root certificate|null|String| |client |Path to client certificate|null|String| |clientKey |Path to client key|null|String|

Environment

Envrionment variables passed

| Option | Description |Default|Type | |:------------:|:-----------:|:-----------:|:-----------:| |DEBUG |Console output view for valid values|*|String| |PORT |Server running port|3300|Number| |MODE |Server running mode|test_mode|String| |MONGODB_URL |Mongodb running url|mongodb://localhost:27017/service|String| |REVERSE_PROXY |Reverse proxy address|http://localhost|String| |COLLECTION_RETURN_SIZE |Collection return size|24|Number| |ELEMENT_IN_PAGE |Elements in pagination return default value|12|Number| |ELASTIC_SEARCH_URL |Elastic search endpint|http://localhost:9200|String| |LOG_STASH_PORT |Log stash port|5000|Number|

Note You can add other environment variables here too.

Model

Model configuraion field options.

| Option | Description |Default|Type | |:------------:|:-----------:|:-----------:|:-----------:| |options |options|Options field|Object| |fields |default fields|firstModified : {type : Date}, lastModified : {type : Date}|Object|

Model options (Valid option for model options key)

| Option | Description |Default|Type | |:------------:|:-----------:|:-----------:|:-----------:| |enableRoute |If true the model will have a CRUD endpoint.|options|Boolean|

Field

Model field configuration options.

| Option | Description |Default|Type | |:------------:|:-----------:|:-----------:|:-----------:| |type |Field type, any Mongoose type is valid|"String"|String| |queryUsing |If true, will be able to query using this key in get requests|true|Boolean| |publicVisibility |If true, field will be visible on public call, will be hidden otherwise.|true|Boolean| |verifyOnCreate |If true, field will be verified on create.|false|Boolean| |editableOnUpdate |If true, field will be editable on update call.|true|Boolean| |visibleOnPagination|If true, field will be visible in pagination calls.|true|Boolean| |es_indexed |If true, field will be indexed in elasticsearch|true|Boolean|

Naming Conflict

Model names are converted to camel case, view this module for how the conversion happends. This could create conflict when at runtime when the naming is clearly not similar at configuration. (_example sample-name and sample_name will both be converted to sampleName at runtime) So avoid using similar names as such.

Sample Configuration

Sample gennode configuration file Postman documentation for my hero academy can be found here

``

/**
 * @author              Gen Node
 * @name                Gen Node
 * @module              gennode.config.js
 * @description         Default gennode configuration file
 * @kind                Config
 * @copyright           2018 Gen Node
 */

module.exports = {

    serviceName : 'Hero Academia',
    serviceDescription : "Teacher and student hero registry for Hero Academia",
    author : 'Young Midoria',
    copyright : `Copyright : 2018`,
    runningMode : 'test_mode',
    licence : 'MIT',
    version : '0.0.1',
    repoURL : "http://github.com",
    baseURL : '/heroAcademia',
    runServer : false,
    models : [
        {
            options : {
                name : 'Teacher'
            },
            fields  : {
                name : {type : "Number" , es_indexed : true},
                age : {type : "Number", es_indexed : true},
                gender : {type : "String"},
                followers : {type : "Array"},
                superPower : {type : "String" , es_indexed : false},
                costume : {type : "String"},
                powerGrade : {type : "String"},
                tournament : {type : "ObjectId", ref: "Tournament"},
                history : {type : "ObjectId", ref: "History"},   angerLevel : {type : "Number"},
                optimismLevel : {type : "Number"}
            }
        },

        {
            options : {
                name : 'Student'
            },
            fields  : {
                name : {type : "Number" , es_indexed : true},
                age : {type : "Number", es_indexed : true},
                gender : {type : "String"},
                powerClass : {type : "String"},
                superPower : {type : "String" , es_indexed : false},
                costume : {type : "String"},
                powerGrade : {type : "String"},
                tournament : {type : "ObjectId", ref: "Tournament"},
                history : {type : "ObjectId", ref: "History"},
                wins : {type : "Number"},
                loss : {type : "Number"},
                draw : {type : "Number"}
            }
        },

        {
            options : {
                name : 'Tournament'
            },
            fields  : {
                name : {type : "Number" , es_indexed : true},
                wins : {type : "Number"},
                loss : {type : "Number"},
                draw : {type : "Number"}
            }
        },

        {
            options : {
                name : 'History'
            },
            fields  : {
                angerLevel : {type : "Number"},
                optimismLevel : {type : "Number"},
                enemyDefeat : {type : "Number"},
                archNemesis : {type : "String"},
                battleGroundDefeat : {type : "Number"},
                enemyCapture : {type : "Number"},
                alive : {type : "Boolean"}
            }
        }

    ],

    dependantServices       : { // todo dependant services goes here
        endPoints               : [
            'http://hero_league.com',
            'http://villain_league.com'
        ],
        abortIfFail             : false
    },

    environment             : {
        DEBUG : "*",
        PORT : 3300,
        MODE : "test_mode",
        MONGODB_URL : "mongodb://localhost:27017/heroAcademia",
        REVERSE_PROXY : "http://localhost",
        COLLECTION_RETURN_SIZE : "24",
        ELEMENT_IN_PAGE : "12",
        ELASTIC_SEARCH_URL : "http://localhost:9200"

    },

    // Defines authentication header key and type for api requests
    authentication          : {
        type : 'Bearer',
        headerKey : 'Authentication'
    },

    includeApiReqLib        : true, // If true will include library for requesting outside api call
    certificate             : {
        root : null,
        client : null,
        clientKey : null
    }, // Some path to a certificate if request will be made using https.

    // Defines related containers
    elasticSearch : true,
    mongodb : true,
    nginx : true,

    minify : false,

    test : true,
    docker : true,
    jenkins : true,
    elkLogger : true,
    enableProxy : true,
    readMe : true,
    documentation : true,
    instance : "1",
    commit : true,
    commitMessage : 'Initial commit, generated by gennode.'
};

``

Generated files

Gennode generated files and directories.

| Name | Description | |:------------:|:-----------:| |apidocs |Generated api documentation| |config |Generated server configuration file| |controller |Route controller files| |coverage |Test coverage report| |dal |Data access layer for models| |lib |Libraries| |lib-constant |Error codes and other service related constants.| |lib-helper |Api requester and controller helper modules| |lib-helper-api |Api requester libraries, if certificate is provided it will be copied in the cert directory.| |lib-helper-others |Controller helper module| |lib-middlewares |Initializer middleware| |model |Generated models| |node_modules |Node modules| |report |Test report| |test |Test suite files (dummy data and url generator module is also located here)| |.dockerignore |Docker ignore file| |.env |Environment file| |.gitignore |Git ignore file| |app.js |Application start file| |docker-compose.yml |Docker compose file| |Dockerfile |Docker file| |package.json |Package file|

Upcoming features

  • Multilevel schema support
  • User management service
  • Minify
  • Stress test

Contributing

If you have anything in mind, that you think is would be awesome to include in the generated server files, feel free to create an issue here, or fork the project.