Socket
Socket
Sign inDemoInstall

@nestjs/mongoose

Package Overview
Dependencies
Maintainers
3
Versions
62
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@nestjs/mongoose - npm Package Compare versions

Comparing version 7.1.1 to 7.1.2

tests/e2e/schema.factory.spec.ts

35

dist/factories/definitions.factory.js

@@ -32,22 +32,27 @@ "use strict";

}
static inspectTypeDefinition(options) {
if (typeof options === 'function') {
if (this.isPrimitive(options)) {
return options;
static inspectTypeDefinition(optionsOrType) {
if (typeof optionsOrType === 'function') {
if (this.isPrimitive(optionsOrType)) {
return optionsOrType;
}
else if (this.isMongooseSchemaType(options)) {
return options;
else if (this.isMongooseSchemaType(optionsOrType)) {
return optionsOrType;
}
return this.createForClass(options);
const schemaDefinition = this.createForClass(optionsOrType);
const schemaMetadata = type_metadata_storage_1.TypeMetadataStorage.getSchemaMetadataByTarget(optionsOrType);
if (schemaMetadata === null || schemaMetadata === void 0 ? void 0 : schemaMetadata.options) {
return new mongoose.Schema(schemaDefinition, schemaMetadata.options);
}
return schemaDefinition;
}
else if (typeof options.type === 'function') {
options.type = this.inspectTypeDefinition(options.type);
return options;
else if (typeof optionsOrType.type === 'function') {
optionsOrType.type = this.inspectTypeDefinition(optionsOrType.type);
return optionsOrType;
}
else if (Array.isArray(options)) {
return options.length > 0
? [this.inspectTypeDefinition(options[0])]
: options;
else if (Array.isArray(optionsOrType)) {
return optionsOrType.length > 0
? [this.inspectTypeDefinition(optionsOrType[0])]
: optionsOrType;
}
return options;
return optionsOrType;
}

@@ -54,0 +59,0 @@ static isPrimitive(type) {

@@ -1,12 +0,4 @@

import { Connection, Document, Model } from 'mongoose';
import { Provider } from '@nestjs/common';
import { AsyncModelFactory, ModelDefinition } from './interfaces';
export declare function createMongooseProviders(connectionName?: string, options?: ModelDefinition[]): {
provide: string;
useFactory: (connection: Connection) => Model<Document, {}>;
inject: string[];
}[];
export declare function createMongooseAsyncProviders(connectionName?: string, modelFactories?: AsyncModelFactory[]): {
provide: string;
useFactory: (connection: Connection, ...args: unknown[]) => Promise<Model<Document, {}>>;
inject: any[];
}[];
export declare function createMongooseProviders(connectionName?: string, options?: ModelDefinition[]): Provider[];
export declare function createMongooseAsyncProviders(connectionName?: string, modelFactories?: AsyncModelFactory[]): Provider[];

@@ -12,39 +12,40 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
const common_1 = require("@nestjs/common");
const mongoose_utils_1 = require("./common/mongoose.utils");
function addDiscriminators(model, discriminators) {
if (discriminators) {
for (const { name, schema } of discriminators) {
model.discriminator(name, schema);
}
}
return model;
function addDiscriminators(model, discriminators = []) {
discriminators.forEach(({ name, schema }) => model.discriminator(name, schema));
}
function createMongooseProviders(connectionName, options = []) {
const providers = (options || []).map((option) => ({
provide: mongoose_utils_1.getModelToken(option.name),
useFactory: (connection) => {
const model = connection.model(option.name, option.schema, option.collection);
return addDiscriminators(model, option.discriminators);
},
inject: [mongoose_utils_1.getConnectionToken(connectionName)],
}));
return providers;
}
exports.createMongooseProviders = createMongooseProviders;
function createMongooseAsyncProviders(connectionName, modelFactories = []) {
const providers = (modelFactories || []).map((option) => [
return options.reduce((providers, option) => [
...providers,
...createMongooseProviders(connectionName, option.discriminators),
{
provide: mongoose_utils_1.getModelToken(option.name),
useFactory: (connection, ...args) => __awaiter(this, void 0, void 0, function* () {
const schema = yield option.useFactory(...args);
const model = connection.model(option.name, schema, option.collection);
useFactory: (connection) => {
const model = connection.model(option.name, option.schema, option.collection);
addDiscriminators(model, option.discriminators);
return model;
}),
inject: [mongoose_utils_1.getConnectionToken(connectionName), ...(option.inject || [])],
},
inject: [mongoose_utils_1.getConnectionToken(connectionName)],
},
]);
return common_1.flatten(providers);
], []);
}
exports.createMongooseProviders = createMongooseProviders;
function createMongooseAsyncProviders(connectionName, modelFactories = []) {
return modelFactories.reduce((providers, option) => {
return [
...providers,
{
provide: mongoose_utils_1.getModelToken(option.name),
useFactory: (connection, ...args) => __awaiter(this, void 0, void 0, function* () {
const schema = yield option.useFactory(...args);
const model = connection.model(option.name, schema, option.collection);
addDiscriminators(model, option.discriminators);
return model;
}),
inject: [mongoose_utils_1.getConnectionToken(connectionName), ...(option.inject || [])],
},
...createMongooseAsyncProviders(connectionName, (option.discriminators || []).map(({ name, schema }) => ({ name, useFactory: () => __awaiter(this, void 0, void 0, function* () { return schema; }) }))),
];
}, []);
}
exports.createMongooseAsyncProviders = createMongooseAsyncProviders;
{
"name": "@nestjs/mongoose",
"version": "7.1.1",
"version": "7.1.2",
"description": "Nest - modern, fast, powerful node.js web framework (@mongoose)",

@@ -32,4 +32,4 @@ "author": "Kamil Mysliwiec",

"@types/node": "11.15.0",
"@typescript-eslint/eslint-plugin": "4.8.1",
"@typescript-eslint/parser": "4.8.1",
"@typescript-eslint/eslint-plugin": "4.8.2",
"@typescript-eslint/parser": "4.8.2",
"eslint": "7.14.0",

@@ -40,3 +40,3 @@ "eslint-config-prettier": "6.15.0",

"jest": "26.6.3",
"lint-staged": "10.5.1",
"lint-staged": "10.5.2",
"mongoose": "5.10.15",

@@ -43,0 +43,0 @@ "prettier": "2.2.0",

@@ -1,8 +0,47 @@

import { HttpStatus, INestApplication } from '@nestjs/common';
import { DynamicModule, HttpStatus, INestApplication } from '@nestjs/common';
import { Test } from '@nestjs/testing';
import { Server } from 'http';
import * as request from 'supertest';
import { AppModule } from '../src/app.module';
import { MongooseModule } from '../../lib';
import { EventModule } from '../src/event/event.module';
import {
ClickLinkEvent,
ClieckLinkEventSchema,
} from '../src/event/schemas/click-link-event.schema';
import { Event, EventSchema } from '../src/event/schemas/event.schema';
import {
SignUpEvent,
SignUpEventSchema,
} from '../src/event/schemas/sign-up-event.schema';
describe('Discriminator', () => {
const testCase: [string, DynamicModule][] = [
[
'forFeature',
MongooseModule.forFeature([
{
name: Event.name,
schema: EventSchema,
discriminators: [
{ name: ClickLinkEvent.name, schema: ClieckLinkEventSchema },
{ name: SignUpEvent.name, schema: SignUpEventSchema },
],
},
]),
],
[
'forFeatureAsync',
MongooseModule.forFeatureAsync([
{
name: Event.name,
useFactory: async () => EventSchema,
discriminators: [
{ name: ClickLinkEvent.name, schema: ClieckLinkEventSchema },
{ name: SignUpEvent.name, schema: SignUpEventSchema },
],
},
]),
],
];
describe.each(testCase)('Discriminator - %s', (_, features) => {
let server: Server;

@@ -13,3 +52,6 @@ let app: INestApplication;

const module = await Test.createTestingModule({
imports: [AppModule],
imports: [
MongooseModule.forRoot('mongodb://localhost:27017/test'),
EventModule.forFeature(features),
],
}).compile();

@@ -16,0 +58,0 @@

import { Module } from '@nestjs/common';
import { MongooseModule } from '../../lib';
import { CatsModule } from './cats/cats.module';
import { EventModule } from './event/event.module';

@@ -10,5 +9,4 @@ @Module({

CatsModule,
EventModule,
],
})
export class AppModule {}
import { Body, Controller, Get, Post } from '@nestjs/common';
import { EventService } from './event.service';
import { CreateClickLinkEventDto } from './dto/create-click-link-event.dto';
import { CreateSignUpEventDto } from './dto/create-sign-up-event.dto';
import { EventService } from './event.service';
import { ClickLinkEvent } from './schemas/click-link-event.schema';
import { Event } from './schemas/event.schema';
import { ClieckLinkEvent } from './schemas/click-link-event.schema';
import { SignUpEvent } from './schemas/sign-up-event.schema';

@@ -20,3 +20,3 @@

time: new Date(),
kind: ClieckLinkEvent.name,
kind: ClickLinkEvent.name,
});

@@ -23,0 +23,0 @@ }

@@ -1,28 +0,15 @@

import { Module } from '@nestjs/common';
import { MongooseModule } from '../../../lib';
import { DynamicModule, Module } from '@nestjs/common';
import { EventService } from './event.service';
import { EventController } from './event.controller';
import { Event, EventSchema } from './schemas/event.schema';
import {
ClieckLinkEvent,
ClieckLinkEventSchema,
} from './schemas/click-link-event.schema';
import { SignUpEvent, SignUpEventSchema } from './schemas/sign-up-event.schema';
@Module({
imports: [
MongooseModule.forFeature([
{
name: Event.name,
schema: EventSchema,
discriminators: [
{ name: ClieckLinkEvent.name, schema: ClieckLinkEventSchema },
{ name: SignUpEvent.name, schema: SignUpEventSchema },
],
},
]),
],
controllers: [EventController],
providers: [EventService],
})
export class EventModule {}
@Module({})
export class EventModule {
static forFeature(module: DynamicModule): DynamicModule {
return {
imports: [module],
module: EventModule,
controllers: [EventController],
providers: [EventService],
};
}
}

@@ -6,3 +6,5 @@ import { Injectable } from '@nestjs/common';

import { CreateSignUpEventDto } from './dto/create-sign-up-event.dto';
import { ClickLinkEvent } from './schemas/click-link-event.schema';
import { Event } from './schemas/event.schema';
import { SignUpEvent } from './schemas/sign-up-event.schema';

@@ -14,2 +16,8 @@ @Injectable()

private readonly eventModel: Model<Event & Document>,
@InjectModel(ClickLinkEvent.name)
private readonly clickEventModel: Model<Event & Document>,
@InjectModel(SignUpEvent.name)
private readonly signUpEventModel: Model<Event & Document>,
) {}

@@ -16,0 +24,0 @@

@@ -5,3 +5,3 @@ import { Prop, Schema, SchemaFactory } from '../../../../lib';

@Schema({})
export class ClieckLinkEvent implements Event {
export class ClickLinkEvent implements Event {
kind: string;

@@ -16,3 +16,3 @@

export const ClieckLinkEventSchema = SchemaFactory.createForClass(
ClieckLinkEvent,
ClickLinkEvent,
);
import { Prop, Schema, SchemaFactory } from '../../../../lib';
import { ClieckLinkEvent } from './click-link-event.schema';
import { ClickLinkEvent } from './click-link-event.schema';
import { SignUpEvent } from './sign-up-event.schema';

@@ -10,3 +10,3 @@

required: true,
enum: [ClieckLinkEvent.name, SignUpEvent.name],
enum: [ClickLinkEvent.name, SignUpEvent.name],
})

@@ -13,0 +13,0 @@ kind: string;

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