Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@noreajs/mongoose

Package Overview
Dependencies
Maintainers
1
Versions
55
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@noreajs/mongoose

Mongoose helpers

  • 0.2.5
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
5
increased by150%
Maintainers
1
Weekly downloads
 
Created
Source

Norea.js Mongoose

Norea.js Mongoose is a package which contains a set of tools intended to facilitate the use of mongoose.

Version

Downloads/week

License

Installation

The package already has his type definitions.

npm install @noreajs/mongoose --save

Initial Features

  • MongoDB initialization
  • Model creation
  • Extraction of errors during validations

MongoDB initialization

To use MongoDB in your application, initialization is required. To do so with this little baby package, here's how:

Import the MongoDB context:

import { MongodbContext } from "@noreajs/mongoose";

Then use this line of code to initialize:

MongodbContext.init({
  connectionUrl: `MONGODB_CONNECTION_URL`,
  options: {}, // optional
  onConnect: () => {}, // optional
  onError: () => {}, // optional
});

Model creation

Mongoose is the ideal tool when working with MongoDB. Very often to create a model, there is a set of information to take into account and the organization of the different elements constituting a model can become complicated. This package offers you a relatively simple way to proceed to create a model.

Full example of model declaration: Task.ts file (or Task.js):

import { mongooseModel, Document, Schema } from "@noreajs/mongoose";

interface ITask extends Document {
  name: string;
  description?: string;
  createdAt: Date;
  updatedAt: Date;
}

export default mongooseModel<ITask>({
  name: "Task",
  collection: "tasks",
  schema: new Schema(
    {
      name: {
        type: Schema.Types.String,
        required: [true, "Task's name is required"],
      },
      description: {
        type: Schema.Types.String,
      },
    },
    {
      timestamps: true, // createdAt and UpdatedAt are created and managed by mongoose
    }
  ),
  // + other properties
});

After creating the model, you can import it anywhere and use it.

Some details

The generic method used is mongooseModel, Where T is the interface which describes the model, and which must extend the mongoose Document interface.

The parameter of method mongooseModel is of the generic type MoongooseModelParams;

type MoongooseModelParams<T extends Document> = {
  name: string;
  collection?: string;
  skipInit?: boolean;
  paginate?: boolean;
  aggregatePaginate?: boolean;
  autopopulate?: boolean;
  leanVirtuals?: boolean;
  uniqueValidator?: boolean;
  uniqueValidatorMessage?: string;
  softDelete?: boolean;
  softDeleteOptions?: {
    deletedBy?: boolean;
    deletedAt?: boolean;
    overrideMethods?: boolean | string | string[];
    validateBeforeDelete?: boolean;
    indexFields?: boolean | string | string[];
    use$neOperator?: boolean;
    [key: string]: any;
  };
  onDeleteOptions: {
    action?: "cascade" | "restrict" | "set_null" // default "restrict";
    errorCb?: HookErrorCallback;
  };
  virtuals?: [
    {
      fieldName: string;
      options?: any;
      get: Function;
      set?: Function;
    }
  ];
  protectOptions?: {
      fillable?: Array<keyof T | string>;
      guarded?: Array<keyof T | string>;
      errorCb?: HookErrorCallback;
  };
  privacyOptions?: {
      hidden?: Array<keyof T | string>;
      visible?: Array<keyof T | string>;
      errorCb?: HookErrorCallback;
  };
  postFilters?: {
      [key in QueryMethod]?: (docs: T[]) => void;
  };
  methods: {
    [K in keyof Partial<T>]: Function;
  };
  plugins?: (schema: Schema) => void;
  schema: Schema<T>;
  externalConfig?: (schema: Schema) => void;
};

MoongooseModelParams descriptions:

AttributeTypeOptionalDefaultDescription
namestringfalseModel name
collectionstringtrueCollection name (optional, induced from model name)
skipInitbooleantruefalseWhether to skip initialization or not
paginatebooleantruetrueThe plugin automatically added when true is Mongoose Paginate
aggregatePaginatebooleantruetrueThe plugin automatically added when true is Mongoose Aggregate Paginate V2
autopopulatebooleantruetrueAlways populate() certain fields in your Mongoose schemas. Only apply this plugin to top-level schemas. Don't apply this plugin to child schemas.
leanVirtualsbooleantruetrueAttach virtuals to the results of Mongoose queries when using .lean().
uniqueValidatorbooleantruetrueCatch unique validation error like normal validation error
uniqueValidatorMessagestringtrueExpected {PATH} to be unique.Unique validator message You can pass through a custom error message as part of the optional options argument: You have access to all of the standard Mongoose error message templating: :{PATH}, {VALUE}, {TYPE}
softDeletebooleantruefalseActive soft delete on model
softDeleteOptionsanytrueSoft delete options
onDeleteOptionsanytrueOn record delete options
pluginsfunctiontrueAdd globally a plugin to a mongoose schema
schemamongoose.SchematrueMongoose schema defining the model
virtualsarraytrueDefine the virtual attributes of the model
methodsobjecttrueDefine the methods associated with the models
externalConfigfunctiontrueConfigure the schema created by adding methods, middlewares, virtuals and many other things provided by Mongoose - Methods - https://mongoosejs\.com/docs/guide\.html\#methods - Middlewares - https://mongoosejs\.com/docs/middleware\.html - Virtuals - https://mongoosejs\.com/docs/guide\.html\#virtuals
protectOptionsobjecttruePrevent mass assignment on some attributes
privacyOptionsobjecttruehide or display some attributes while fetching data
postFiltersobjecttrueFilters to apply on post middleware

Table made with Table Convert

Todos

  • (more things will be added soon)

License

MIT

Keywords

FAQs

Package last updated on 13 Jan 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc