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

mevn-auth-generator

v1.3.1

Published

Node/Express/Mongoose/Vue3/Pinia/Docker/Electron Project Generator

Downloads

50

Readme

mevn-auth-generator 1.3.1

Node/Express/Mongoose project generator with Vue3 PWA, Pinia, Docker and Electron.

Prerequisites

To use the generator, you will need to have node, npm and mongodb installed on your system. In case you want to use Docker, you should have it installed as well. The generator will set up a basic Docker configuration in the generated application, but it will not install any Docker packages.

Installation

To use this package, it is recommended not to use "npm i mevn-auth-generator" but rather, simply navigate to the folder where you want to initialize the project and run the following command:

npx mevn-auth-generator@latest

Given the command, the generator will prompt you to add an icon that will be used to generate all the necessary icons for your PWA. The easiest way to add the icon is to simply copy it directly into the folder where you intend to run the command. When prompted, you can just enter the name of the icon.

In case the entered icon is not found, the generator will ask if you want to proceed with the process. If you wish to continue, press 'y', and the generator will use a default icon.

IMPORTANT: The icon must be in PNG format.

Basic Use

These are the basic operations you will need to perform once the project has been initialized in order to use it. Modify the .env file located in the app/backend folder in this way:

  • If you intend to start the application with Docker, uncomment the "mongo_uri" string and assign a name to your database:
    #with docker mongo connect
    MONGO_URI=mongodb://mongo:27017/db_name?replicaSet=rs0
  • If you instead intend to use the app without Docker, uncomment the "without docker" string:
    # whitout docker mongo connect
    MONGO_URI=mongodb://127.0.0.1:27017/db_name?replicaSet=rs0
  • If you do not wish to use Mongo as a replica set, remove '?replicaSet=rs0' from the MONGO_URI string.
  • Generate an access_token and a refresh_token using, for example: openssl rand -base64 32
  • Configure an email address to use it within the application and add it along with the password.
  • If you want your application to use history routing mode, change the "VITE_ROUTING_MODE" string in the "frontend/.env" file to 'history'. Otherwise, leave it unchanged to use the hash mode.
  • To start the backend from the "app/backend" folder, you can use the following command: npm run start.
  • To start the frontend from the "app/frontend" folder, you can use the following command: npm run dev.

Docker Use

To create the necessary Docker images for launching the application, you will need to follow some steps:

  • delete the "node_modules" folders and the "package-lock.json" files from both the backend and frontend folders.
  • Open a terminal and navigate to the root of the project, then run the command:
    docker-compose up --build
  • The execution of the command, in case you have maintained the MongoDB replica_set, will generate an error(if you have removed the replica_set from the MongoDB connection string, the following steps in this point will not be necessary nd your application will be immediately available at the address: http://localhost:8080/). Leave the current shell open and open a new one. In the new shell, run the following command:
    docker container ls -a
  • Check the name assigned to your MongoDB container and run the command:
    docker exec -it  name_mongo_container bash
  • At this point, you can start the mongoshell and enable MongoDB as a replica_set. To do this, execute the following commands sequentially (note: in the "use" command, use the database name set previously in the env file):
    mongosh
    use your_database_name
    rs.initiate()
  • Exit the MongoDB shell with Ctrl + D and close the shell. Return to the shell where you have Docker running and stop the process with Ctrl + C.
  • Now execute the following command, and your application will be available at http://localhost:8080/
    docker-compose up

If you have no interest in using Docker, you can remove all the reference files, which are:

  • docker-compose.yml
  • mongo/ *
  • frontend/Dockerfile
  • frontend/default.config
  • backend/Dockerfile

Electron Use

If you intend to use the application with Electron, you will find a basic configuration in the "frontend/electron-src" folder. When using Electron, you should keep the Vue router configuration set to hash mode, so make sure that the "VITE_ROUTING_MODE" string in the "frontend/.env" file is set to 'hash'.

To start the Electron application in development, you can simply run the command npm run electron:dev. To build the application, use npm run electron:build, and you will find the built application in "frontend/dist_electron".

If you are not interested in using Electron, you can delete the "electron_src" folder and remove the following properties from "frontend/package.json":

  • scripts[electron:dev]
  • scripts[electron:build]
  • devDependencies[electron]
  • devDependencies[electron-builder]
  • main
  • build

At this point, I recommend deleting the entire "frontend/node_modules" folder and the "frontend/package-lock.json" file. Afterward, inside the "frontend/" folder, run the command npm i to reinstall the dependencies.

Features

mevn-auth-generator aims to provide a foundation for a complete application developed with the MEVN stack, utilizing the bare minimum of external dependencies, in order to make your projects more customizable and maintainable, in this regard, it provides a set of basic components ready for you to extend and modify according to your needs and the project you will be developing. You can find these components inside the folder app/frontend/src/components/, and the components' names will have the "Base" prefix. You can see the pre-made components in action at the routes /dashboard/components-example and /dashboard/form-example.

NOTE: The Base components are written using the integrated mini CSS library, which we will discuss in the next section. If you decide to remove it, you will need to completely revise the styling of the components as well.

Extra

For those who don't want to rely on a CSS framework like Bootstrap or Tailwind, the application provides a small and lightweight CSS library to make styling more manageable. You can find the file in app/frontend/src/assets/css/style.min.css. You can also modify the variables in app/frontend/src/assets/css/_variables.css to better adapt the style to your preferences. If you don't want to use it, you can simply delete the two specified files and the corresponding import in the app/frontend/src/main.js file.

The available classes are as follows:

Breackpoint

// xs
@media (min-width: 576px) { ... }

// sm 
@media (min-width: 768px) { ... }

// md
@media (min-width: 992px) { ... }

// lg
@media (min-width: 1200px) { ... }

// xl
@media (min-width: 1400px) { ... }

Spacing

Spaces are defined by prefixes p (padding) & m (margin), combined with sevens abbreviations that identify the position:

  • a(all): top, right, bottom, left
  • x: right, left
  • y: top, bottom
  • t: top
  • r: right
  • b: bottom
  • l: left

And numbers from 1 to 5 to define the quantity. The sizes of margins and paddings are defined in the file app/frontend/src/assets/css/_variable.css.

They can also be set for various breakpoints using the abbreviations:

  • xs
  • sm
  • md
  • ls
  • xl

Example:

.pa-2
.px-3-sm

Grid

We can use Bootstrap-like classes to define the grid. We have .container, which will be responsive for various breakpoints, and .container-fluid, which will always have a width of 100%.

Then we have .row, which introduces the display: flex and flex-wrap properties to accommodate our columns.

And finally, we have the columns distributed in a 12-column grid, as in the example:

.col-2
.col-xs-3
.col.lg-5

We can also define an offset from 0 to 12 for each breakpoint:

.offset-0
.offset-xs-6

Position

For positioning, we use classes with the prefix pos-. The available types of positions are:

  • relative
  • absolute
  • fixed
  • sticky
.pos-fixed

There are also additional classes that allow us to position an element according to certain parameters. In addition to "expand," which you will have an example of here, the others are easily understandable:

.pos-expand{
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
}
.pos-center
.posX-center
.posY-center
.pos-top-left
.pos-top-right
.pos-bottom-left
.pos-bottom-right

All pos- classes are available for all breakpoints:

.posY-center-xs
.pos-absolute-lg

Text align

Classes for text alignment are also available for every breakpoint:

.text-center
.text-right-lg
.text-left-sm

Flexbox

Flexbox classes are available for every breakpoint as well. Here is a list of all the flex classes you can use:

.flex-column{
    flex-direction: column;
}
.flex-row{
    flex-direction: row;
}
.flex-wrap{
    flex-wrap: wrap;
}
.flex-no-wrap{
    flex-wrap: nowrap;
}
.justify-between {
    justify-content: space-between;
}
.justify-start{
    justify-content: flex-start;
}
.justify-end{
    justify-content: flex-end;
}
.justify-center {
    justify-content: center;
}
.align-center {
    align-items: center;
}
.align-start{
    align-items: flex-start;
}
.align-end{
    align-items: flex-end;
}

//example for breackpoint
.justify-center-xs {
    justify-content: center;
}

Display

There are 4 display classes available for every breakpoint, with the prefix d-:

.d-none
.d-block
.d-flex 
.d-inline-block

//example for breackpoint
.d-flex-sm

Dimension

For each breakpoint, there are also w-number and h-number classes available to set width and height in percentage.

The available numbers are: 0, 25, 50, 75, 100.

.w-25
.h-25-xs

In addition to these, we have the classes .w-max-content and .w-fit-content available for all breakpoints as well.

For dimensions that are based on viewport width and viewport height, we have .w-100-vw and .h-100-vh.

Finally, we can set both the minimum and maximum height and width to 100% with classes like .max-h-100 and .min-w-100, etc.

Colors

Colors can be customized in the app/frontend/src/assets/css/_variables.css file, and for each color, we have the classes color- and bg-color, along with 4 additional classes for white and black colors:

.color-10-1
.bg-color-2
.color-black
.bg-color-white

Extra Class

By default, the library sets the imported font-family from the _variables file for the entire app, the default font-size defined in the --size-default variable, and the default color set in --color-default.

It sets the font sizes for the h1, h2, h3, etc. tags based on those defined in the corresponding variables --size-h1, --size-h2, --size-h3, and provides a class for each of them (e.g., .h1, .h2, etc.).

All the other available classes are listed below:

.list-unstyled{
    list-style: none;
}
.uppercase{
    text-transform: uppercase;
}
.lowercase{
    text-transform: lowercase;
}
.capitalize{
    text-transform: capitalize;
}
.pointer{
    cursor: pointer;
}
.font2{
    font-family: var(--font-family-secondary);
}
.bold-500{
    font-weight: 500;
}
.bold-600{
    font-weight: 600;
}
.bold-700{
    font-weight: 700;
}
.small{
    font-size: var(--size-small);
}
.extra-small{
    font-size: var(--size-extra-small);
}
.medium{
    font-size: var(--size-medium);
}
.large{
    font-size: var(--size-large);
}  

Box-sizing, padding, and margin are set as follows for all elements:

* {
    box-sizing: border-box;
    padding: 0;
    margin: 0;
}

ENJOY!!!