Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
This repository was archived by the owner on Jul 11, 2019. It is now read-only.

An automatic field transformation plugin for Mongoose 5. Any transformations are registered as save, update and findOneAndUpdate middleware.

License

Notifications You must be signed in to change notification settings

Alorel/mongoose-transform-field-plugin

Open more actions menu

Repository files navigation

mongoose-transform-field-plugin

An automatic field transformation plugin for Mongoose 5. Any transformations are registered as save, update and findOneAndUpdate middleware.

NPM link

Build Status Coverage Status Greenkeeper badge Supports Node >= 6 Supports Mongoose >= 5.0


Table of Contents

Asynchronous transformation

Direct usage

import * as bcrypt from 'bcrypt';
import * as mongoose from 'mongoose';
import {AsyncTransform, MongooseTransformFieldPlugin} from 'mongoose-transform-field-plugin';

const schema = new mongoose.Schema({
  password: String
});

const transformer: AsyncTransform<string> = (pwd: string): Promise<string> => {
  return bcrypt.hash(pwd, 12);
};

// Run as non-parallel Mongoose middleware by default
MongooseTransformFieldPlugin.transformAsync(schema, 'password', transformer);

// Run as non-parallel Mongoose middleware explicitly
MongooseTransformFieldPlugin.transformAsync(schema, 'password', false, transformer);

// Run as a parallel Mongoose middleware
MongooseTransformFieldPlugin.transformAsync(schema, 'password', true, transformer);

Schema plugin usage

import * as bcrypt from 'bcrypt';
import * as mongoose from 'mongoose';
import {AsyncTransform, MongooseTransformFieldPlugin, TransformAsyncOptions} from 'mongoose-transform-field-plugin';

const schema = new mongoose.Schema({
  password: String
});

const transform: AsyncTransform<string> = (pwd: string): Promise<string> => {
  return bcrypt.hash(pwd, 12);
};

// Run as non-parallel Mongoose middleware by default
let config: TransformAsyncOptions<string> = {
  field: 'password',
  transformer: transform
};
schema.plugin(MongooseTransformFieldPlugin.transformAsync.plugin, config);

// Run as non-parallel Mongoose middleware explicitly
config = {
  field: 'password',
  parallel: false,
  transformer: transform
};
schema.plugin(MongooseTransformFieldPlugin.transformAsync.plugin, config);

// Run as a parallel Mongoose middleware
config = {
  field: 'password',
  parallel: true,
  transformer: transform
};
schema.plugin(MongooseTransformFieldPlugin.transformAsync.plugin, config);

Normalisation

This transforms accented characters from a string, trims it and makes it lowercase before storing it in another field. Useful if you want some basic search functionality.

import * as mongoose from 'mongoose';
import {MongooseTransformFieldPlugin} from 'mongoose-transform-field-plugin';

const schema = new mongoose.Schema({
  firstname: String,
  firstname_normalised: {
    select: false,
    type: String
  },
  lastname: String,
  lastname_normalised: {
    select: false,
    type: String
  }
});

const fields = {
  firstname: 'firstname_normalised', // firstname will be normalised into the firstname_normalised field
  lastname: 'lastname_normalised' // lastname will be normalised into the lastname_normalised field
};

// Direct usage
MongooseTransformFieldPlugin.normalise(schema, fields);

// Plugin usage
schema.plugin(MongooseTransformFieldPlugin.normalise.plugin, fields);

Synchronous Transformations

You should really use schema setters instead, but this is included for completeness' sake.

import * as bcrypt from 'bcrypt';
import * as mongoose from 'mongoose';
import {MongooseTransformFieldPlugin, SyncTransform, TransformSyncOptions} from 'mongoose-transform-field-plugin';

const schema = new mongoose.Schema({
  password: String
});

const transform: SyncTransform<string> = (pwd: string): string => {
  return bcrypt.hashSync(pwd, 12);
};

// Direct usage
MongooseTransformFieldPlugin.transformSync(schema, 'password', transform);

// Plugin usage
const conf: TransformSyncOptions<string> = {
  field: 'password',
  transformer: transform
};

schema.plugin(MongooseTransformFieldPlugin.transformSync.plugin, conf);

About

An automatic field transformation plugin for Mongoose 5. Any transformations are registered as save, update and findOneAndUpdate middleware.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  
Morty Proxy This is a proxified and sanitized view of the page, visit original site.