@tsed/mongoose 6.69.0-rc.4 → 6.69.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/.mocharc.js +5 -0
  2. package/.nycrc +26 -0
  3. package/lib/index.js +1402 -10
  4. package/lib/index.js.map +1 -1
  5. package/lib/index.modern.js +1362 -0
  6. package/lib/index.modern.js.map +1 -0
  7. package/package.json +20 -19
  8. package/lib/MongooseModule.js +0 -36
  9. package/lib/MongooseModule.js.map +0 -1
  10. package/lib/constants/index.js +0 -24
  11. package/lib/constants/index.js.map +0 -1
  12. package/lib/decorators/auto.js +0 -28
  13. package/lib/decorators/auto.js.map +0 -1
  14. package/lib/decorators/discriminatorKey.js +0 -12
  15. package/lib/decorators/discriminatorKey.js.map +0 -1
  16. package/lib/decorators/dynamicRef.js +0 -46
  17. package/lib/decorators/dynamicRef.js.map +0 -1
  18. package/lib/decorators/excludeIndexes.js +0 -28
  19. package/lib/decorators/excludeIndexes.js.map +0 -1
  20. package/lib/decorators/expires.js +0 -28
  21. package/lib/decorators/expires.js.map +0 -1
  22. package/lib/decorators/immutable.js +0 -30
  23. package/lib/decorators/immutable.js.map +0 -1
  24. package/lib/decorators/index.js +0 -30
  25. package/lib/decorators/index.js.map +0 -1
  26. package/lib/decorators/indexed.js +0 -26
  27. package/lib/decorators/indexed.js.map +0 -1
  28. package/lib/decorators/lowercase.js +0 -28
  29. package/lib/decorators/lowercase.js.map +0 -1
  30. package/lib/decorators/model.js +0 -67
  31. package/lib/decorators/model.js.map +0 -1
  32. package/lib/decorators/mongooseIndex.js +0 -39
  33. package/lib/decorators/mongooseIndex.js.map +0 -1
  34. package/lib/decorators/mongooseIndexes.d.ts +0 -32
  35. package/lib/decorators/mongooseIndexes.js +0 -39
  36. package/lib/decorators/mongooseIndexes.js.map +0 -1
  37. package/lib/decorators/mongoosePlugin.js +0 -22
  38. package/lib/decorators/mongoosePlugin.js.map +0 -1
  39. package/lib/decorators/numberDecimal.js +0 -75
  40. package/lib/decorators/numberDecimal.js.map +0 -1
  41. package/lib/decorators/objectID.js +0 -26
  42. package/lib/decorators/objectID.js.map +0 -1
  43. package/lib/decorators/postHook.js +0 -26
  44. package/lib/decorators/postHook.js.map +0 -1
  45. package/lib/decorators/preHook.js +0 -71
  46. package/lib/decorators/preHook.js.map +0 -1
  47. package/lib/decorators/ref.js +0 -65
  48. package/lib/decorators/ref.js.map +0 -1
  49. package/lib/decorators/schema.js +0 -32
  50. package/lib/decorators/schema.js.map +0 -1
  51. package/lib/decorators/schemaIgnore.js +0 -27
  52. package/lib/decorators/schemaIgnore.js.map +0 -1
  53. package/lib/decorators/select.js +0 -28
  54. package/lib/decorators/select.js.map +0 -1
  55. package/lib/decorators/sparse.js +0 -30
  56. package/lib/decorators/sparse.js.map +0 -1
  57. package/lib/decorators/text.js +0 -29
  58. package/lib/decorators/text.js.map +0 -1
  59. package/lib/decorators/trim.js +0 -27
  60. package/lib/decorators/trim.js.map +0 -1
  61. package/lib/decorators/unique.js +0 -27
  62. package/lib/decorators/unique.js.map +0 -1
  63. package/lib/decorators/uppercase.js +0 -28
  64. package/lib/decorators/uppercase.js.map +0 -1
  65. package/lib/decorators/versionKey.js +0 -12
  66. package/lib/decorators/versionKey.js.map +0 -1
  67. package/lib/decorators/virtualRef.js +0 -36
  68. package/lib/decorators/virtualRef.js.map +0 -1
  69. package/lib/interfaces/MongooseConnectionOptions.js +0 -3
  70. package/lib/interfaces/MongooseConnectionOptions.js.map +0 -1
  71. package/lib/interfaces/MongooseDocument.js +0 -3
  72. package/lib/interfaces/MongooseDocument.js.map +0 -1
  73. package/lib/interfaces/MongooseModel.js +0 -3
  74. package/lib/interfaces/MongooseModel.js.map +0 -1
  75. package/lib/interfaces/MongooseModelOptions.js +0 -3
  76. package/lib/interfaces/MongooseModelOptions.js.map +0 -1
  77. package/lib/interfaces/MongooseSchemaOptions.js +0 -3
  78. package/lib/interfaces/MongooseSchemaOptions.js.map +0 -1
  79. package/lib/interfaces/MongooseSchemaTypes.js +0 -10
  80. package/lib/interfaces/MongooseSchemaTypes.js.map +0 -1
  81. package/lib/interfaces/MongooseVirtualRefOptions.js +0 -3
  82. package/lib/interfaces/MongooseVirtualRefOptions.js.map +0 -1
  83. package/lib/interfaces/index.js +0 -10
  84. package/lib/interfaces/index.js.map +0 -1
  85. package/lib/registries/MongooseModels.js +0 -5
  86. package/lib/registries/MongooseModels.js.map +0 -1
  87. package/lib/services/MongooseConnections.js +0 -51
  88. package/lib/services/MongooseConnections.js.map +0 -1
  89. package/lib/services/MongooseService.js +0 -73
  90. package/lib/services/MongooseService.js.map +0 -1
  91. package/lib/utils/createModel.js +0 -57
  92. package/lib/utils/createModel.js.map +0 -1
  93. package/lib/utils/createSchema.js +0 -160
  94. package/lib/utils/createSchema.js.map +0 -1
  95. package/lib/utils/index.js +0 -6
  96. package/lib/utils/index.js.map +0 -1
  97. package/lib/utils/resolveRefType.js +0 -19
  98. package/lib/utils/resolveRefType.js.map +0 -1
  99. package/lib/utils/schemaOptions.js +0 -60
  100. package/lib/utils/schemaOptions.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.modern.js","sources":["../src/constants/index.ts","../src/services/MongooseService.ts","../src/services/MongooseConnections.ts","../src/MongooseModule.ts","../src/utils/resolveRefType.ts","../src/utils/schemaOptions.ts","../src/utils/createSchema.ts","../src/registries/MongooseModels.ts","../src/utils/createModel.ts","../src/decorators/schema.ts","../src/decorators/auto.ts","../src/decorators/discriminatorKey.ts","../src/decorators/dynamicRef.ts","../src/decorators/excludeIndexes.ts","../src/decorators/expires.ts","../src/decorators/immutable.ts","../src/decorators/indexed.ts","../src/decorators/lowercase.ts","../src/decorators/model.ts","../src/decorators/mongooseIndex.ts","../src/decorators/mongoosePlugin.ts","../src/decorators/numberDecimal.ts","../src/decorators/objectID.ts","../src/decorators/postHook.ts","../src/decorators/preHook.ts","../src/interfaces/MongooseSchemaTypes.ts","../src/decorators/ref.ts","../src/decorators/schemaIgnore.ts","../src/decorators/select.ts","../src/decorators/sparse.ts","../src/decorators/text.ts","../src/decorators/trim.ts","../src/decorators/unique.ts","../src/decorators/uppercase.ts","../src/decorators/versionKey.ts","../src/decorators/virtualRef.ts"],"sourcesContent":["/**\n *\n * @type {string}\n */\nexport const MONGOOSE_SCHEMA = \"tsed:mongoose:schema\";\n/**\n *\n * @type {string}\n */\nexport const MONGOOSE_SCHEMA_OPTIONS = \"tsed:mongoose:schema:options\";\n/**\n *\n * @type {string}\n */\nexport const MONGOOSE_MODEL = \"tsed:mongoose:model\";\n/**\n *\n * @type {string}\n */\nexport const MONGOOSE_MODEL_NAME = \"tsed:mongoose:model:name\";\n","import {Inject, Injectable} from \"@tsed/di\";\nimport {Logger} from \"@tsed/logger\";\nimport Mongoose from \"mongoose\";\nimport {ConnectOptions} from \"mongoose\";\n\n// istanbul ignore next\nfunction asPromise(c: any) {\n return c && c.asPromise ? c.asPromise() : c;\n}\n\n@Injectable()\nexport class MongooseService {\n readonly connections: Map<string, Mongoose.Connection> = new Map();\n private defaultConnection: string = \"default\";\n\n @Inject()\n logger: Logger;\n\n /**\n *\n * @returns {Promise<\"mongoose\".Connection>}\n */\n async connect(id: string, url: string, connectionOptions: ConnectOptions, isDefault = false): Promise<any> {\n if (this.has(id)) {\n return await this.get(id)!;\n }\n\n this.logger.info(`Connect to mongo database: ${id}`);\n this.logger.debug(`Url: ${url}`);\n this.logger.debug(`options: ${JSON.stringify(connectionOptions)}`);\n\n try {\n const connection = await asPromise(Mongoose.createConnection(url, connectionOptions));\n this.connections.set(id, connection);\n\n if (id === \"default\" || isDefault) {\n this.defaultConnection = id;\n }\n\n return connection;\n } catch (er) {\n /* istanbul ignore next */\n this.logger.error(er);\n /* istanbul ignore next */\n process.exit();\n }\n }\n\n /**\n *\n * @returns {\"mongoose\".Connection}\n */\n get(id?: string): Mongoose.Connection | undefined {\n return this.connections.get(id || this.defaultConnection);\n }\n\n /**\n *\n * @param {string} id\n * @returns {boolean}\n */\n has(id?: string): boolean {\n return this.connections.has(id || this.defaultConnection);\n }\n\n async closeConnections() {\n for (const [id, connection] of this.connections.entries()) {\n await connection.close();\n this.connections.delete(id);\n }\n }\n}\n","import {Configuration, registerProvider} from \"@tsed/di\";\nimport {isArray} from \"@tsed/core\";\nimport {MongooseConnectionOptions} from \"../interfaces\";\nimport {MongooseService} from \"../services/MongooseService\";\n\n/**\n * @ignore\n */\n// tslint:disable-next-line:variable-name\nexport const MONGOOSE_CONNECTIONS = Symbol.for(\"MONGOOSE_CONNECTIONS\");\n/**\n * @ignore\n */\nexport type MONGOOSE_CONNECTIONS = MongooseService;\n\nfunction mapOptions(options: Omit<MongooseConnectionOptions, \"id\"> | MongooseConnectionOptions[]): MongooseConnectionOptions[] {\n if (!options) {\n return [];\n }\n\n if (!isArray(options)) {\n const {url, connectionOptions} = options || {};\n\n return [\n {\n id: \"default\",\n url,\n connectionOptions\n }\n ];\n }\n\n return (options as MongooseConnectionOptions[]).map((settings) => {\n return {\n ...settings,\n connectionOptions: settings.connectionOptions\n };\n });\n}\n\nregisterProvider({\n provide: MONGOOSE_CONNECTIONS,\n injectable: false,\n deps: [Configuration, MongooseService],\n async useAsyncFactory(configuration: Configuration, mongooseService: MongooseService) {\n const settings = mapOptions(configuration.get<MongooseConnectionOptions | MongooseConnectionOptions[]>(\"mongoose\"));\n let isDefault = true;\n\n for (const current of settings) {\n await mongooseService.connect(\n current.id,\n current.url,\n current.connectionOptions || {\n useCreateIndex: true,\n useNewUrlParser: true,\n useUnifiedTopology: true\n },\n isDefault\n );\n\n isDefault = false;\n }\n\n return mongooseService;\n }\n});\n","import {Configuration, OnInit} from \"@tsed/di\";\nimport {Module, OnDestroy} from \"@tsed/di\";\nimport {MONGOOSE_CONNECTIONS} from \"./services/MongooseConnections\";\nimport {MongooseService} from \"./services/MongooseService\";\n\n/**\n * @ignore\n */\n@Module({\n imports: [MONGOOSE_CONNECTIONS]\n})\nexport class MongooseModule implements OnDestroy, OnInit {\n constructor(private mongooseService: MongooseService, @Configuration() private settings: Configuration) {\n // auto configure the cache manager when mongoose is used with @tsed/mongoose\n const cache = this.settings.get<any>(\"cache\");\n\n // istanbul ignore next\n if (cache?.mongoose) {\n cache.connection = this.mongooseService.get();\n }\n }\n\n $onInit(): void | Promise<any> {}\n\n $onDestroy(): Promise<any> | void {\n return this.mongooseService.closeConnections();\n }\n}\n","import {isClass, isString, nameOf, Store, Type} from \"@tsed/core\";\nimport {MONGOOSE_MODEL_NAME} from \"../constants\";\n\n/**\n * @ignore\n */\nexport function resolveRefType(type: string | (() => Type<any>) | Type<any>): string {\n if (isString(type)) {\n return type;\n }\n\n if (!isClass(type)) {\n type = (type as any)();\n }\n\n return Store.from(type).get(MONGOOSE_MODEL_NAME) || nameOf(type);\n}\n","import {cleanObject, deepMerge, Store} from \"@tsed/core\";\nimport {Schema} from \"mongoose\";\nimport {MONGOOSE_SCHEMA_OPTIONS} from \"../constants\";\nimport {MongooseNextCB, MongoosePostHook, MongoosePreHook, MongooseSchemaOptions} from \"../interfaces\";\n\n/**\n * @ignore\n */\nexport function schemaOptions(target: any, options?: MongooseSchemaOptions) {\n const store = Store.from(target);\n\n if (!store.has(MONGOOSE_SCHEMA_OPTIONS)) {\n store.set(MONGOOSE_SCHEMA_OPTIONS, {});\n }\n\n if (options) {\n store.set(MONGOOSE_SCHEMA_OPTIONS, deepMerge(store.get(MONGOOSE_SCHEMA_OPTIONS), options));\n }\n\n return store.get(MONGOOSE_SCHEMA_OPTIONS);\n}\n\nfunction mapHookArgs(hook: MongoosePreHook | MongoosePostHook): [string | RegExp, Function] {\n return [hook.method, hook.options || hook.fn, hook.options ? hook.fn : undefined].filter(Boolean) as any;\n}\n\n/**\n * @ignore\n */\nexport function buildPreHook(fn: Function) {\n return fn.length === 2\n ? function (next: MongooseNextCB) {\n return fn(this, next);\n }\n : function (next: MongooseNextCB, options: any) {\n return fn(this, next, options);\n };\n}\n\n/**\n * @ignore\n */\nexport function applySchemaOptions(schema: Schema, options: MongooseSchemaOptions) {\n if (options.plugins) {\n options.plugins.forEach((item) => schema.plugin(item.plugin, item.options));\n }\n\n if (options.indexes) {\n options.indexes.forEach((item) => schema.index(item.fields, item.options));\n }\n\n if (options.pre) {\n options.pre.forEach((item) => {\n item = {\n ...item,\n fn: buildPreHook(item.fn)\n };\n\n (schema.pre as any)(...mapHookArgs(item));\n });\n }\n\n if (options.post) {\n options.post.forEach((item) => (schema.post as any)(...mapHookArgs(item)));\n }\n}\n","import {cleanObject, nameOf, Store, Type} from \"@tsed/core\";\nimport {deserialize, serialize} from \"@tsed/json-mapper\";\nimport {getProperties, JsonEntityStore} from \"@tsed/schema\";\nimport {pascalCase} from \"change-case\";\nimport mongoose, {Schema, SchemaDefinition, SchemaOptions, SchemaTypeOptions} from \"mongoose\";\nimport {MONGOOSE_SCHEMA, MONGOOSE_SCHEMA_OPTIONS} from \"../constants\";\nimport {MongooseSchemaOptions} from \"../interfaces\";\nimport {MongooseVirtualRefOptions} from \"../interfaces/MongooseVirtualRefOptions\";\nimport {resolveRefType} from \"./resolveRefType\";\nimport {schemaOptions} from \"./schemaOptions\";\n\nconst MONGOOSE_RESERVED_KEYS = [\"_id\"];\n\nexport interface MongooseSchemaMetadata {\n schema: SchemaDefinition;\n virtuals: Map<string, MongooseVirtualRefOptions>;\n}\n\n/**\n * @ignore\n */\nfunction setUpSchema({schema, virtuals}: MongooseSchemaMetadata, options?: SchemaOptions) {\n const mongooseSchema = new mongoose.Schema(schema, options);\n\n for (const [key, options] of virtuals.entries()) {\n mongooseSchema.virtual(key, options);\n }\n\n return mongooseSchema;\n}\n\n/**\n * @ignore\n */\nfunction isVirtualRef(target: Partial<MongooseVirtualRefOptions>): target is MongooseVirtualRefOptions {\n return !!(target.ref && target.localField && target.foreignField);\n}\n\nfunction hasVersionField(schema: mongoose.Schema, versionKey?: string | boolean) {\n // Check if versioning was disabled explicitly\n if (!versionKey) return false;\n\n // Check for alternative version field in schema\n return (versionKey as string) in schema.paths;\n}\n\nexport function createSchema(target: Type<any>, options: MongooseSchemaOptions = {}): mongoose.Schema {\n const schemaOptionsFromStore = Store.from(target).get(MONGOOSE_SCHEMA_OPTIONS) || {};\n options.schemaOptions = {...options.schemaOptions, ...schemaOptionsFromStore};\n\n const schema = setUpSchema(buildMongooseSchema(target), options.schemaOptions);\n\n schemaOptions(target, options);\n\n const outputVersionKey = hasVersionField(schema, options.schemaOptions?.versionKey);\n\n schema.methods.toClass = function toClass() {\n return deserialize(\n this.toObject({\n versionKey: outputVersionKey,\n flattenMaps: true\n }),\n {\n type: target,\n useAlias: false,\n additionalProperties: true,\n groups: false\n }\n );\n };\n\n schema.methods.toJSON = function toJSON(options?: any) {\n return serialize((this as any).toClass(), options);\n };\n\n schema.loadClass(target);\n\n Store.from(target).set(MONGOOSE_SCHEMA, schema);\n\n return schema;\n}\n\n/**\n * Get a schema already created. If the schema doesn't exists in registry, it'll be created.\n * @param target\n * @param options\n */\nexport function getSchema(target: Type<any>, options: MongooseSchemaOptions = {}): Schema {\n const store = Store.from(target);\n\n if (!store.has(MONGOOSE_SCHEMA)) {\n createSchema(target, options);\n }\n\n return store.get(MONGOOSE_SCHEMA);\n}\n\nexport function getSchemaToken(target: Type<any>, options?: any) {\n const collectionName = options.name || nameOf(target);\n const token = Symbol.for(pascalCase(`${collectionName}Schema`));\n\n return {token, collectionName};\n}\n\n/**\n * @ignore\n */\nexport function buildMongooseSchema(target: any): MongooseSchemaMetadata {\n const properties = getProperties(target, {withIgnoredProps: true, mongoose: true, groups: false});\n const schema: MongooseSchemaMetadata = {schema: {}, virtuals: new Map()};\n\n properties.forEach((propertyMetadata, key) => {\n if (MONGOOSE_RESERVED_KEYS.includes(key as string)) {\n return;\n }\n\n // Keeping the Mongoose Schema separate so it can overwrite everything once schema has been built.\n const schemaTypeOptions: any = propertyMetadata.store.get(MONGOOSE_SCHEMA) || {};\n\n if (schemaTypeOptions.schemaIgnore) {\n return;\n }\n\n if (schemaTypeOptions.ref) {\n schemaTypeOptions.ref = resolveRefType(schemaTypeOptions.ref as any);\n }\n\n if (isVirtualRef(schemaTypeOptions)) {\n schema.virtuals.set(key as string, schemaTypeOptions);\n\n return;\n }\n\n schema.schema[key as string] = createSchemaTypeOptions(propertyMetadata);\n });\n\n return schema;\n}\n\n/**\n * @ignore\n */\nexport function createSchemaTypeOptions<T = any>(propEntity: JsonEntityStore): SchemaTypeOptions<T> | SchemaTypeOptions<T>[] {\n const key = propEntity.propertyKey;\n const rawMongooseSchema = propEntity.store.get(MONGOOSE_SCHEMA) || {};\n\n let schemaTypeOptions: SchemaTypeOptions<T> = {\n required: propEntity.required\n ? function () {\n return propEntity.isRequired(this[key]);\n }\n : false\n };\n\n if (!propEntity.isClass) {\n const jsonSchema = propEntity.itemSchema.toJSON();\n const {minimum: min, maximum: max, minLength: minlength, maxLength: maxlength} = jsonSchema;\n\n let match: string | RegExp = jsonSchema.pattern;\n if (match) {\n match = new RegExp(match);\n }\n\n schemaTypeOptions = {\n ...schemaTypeOptions,\n type: propEntity.type,\n match: match as RegExp,\n min,\n max,\n minlength,\n maxlength,\n enum: jsonSchema[\"enum\"],\n default: jsonSchema[\"default\"]\n };\n } else if (!rawMongooseSchema.ref) {\n // References are handled by the final merge\n schemaTypeOptions = {...schemaTypeOptions, type: getSchema(propEntity.type) as any};\n }\n\n schemaTypeOptions = cleanObject({...schemaTypeOptions, ...rawMongooseSchema});\n\n if (propEntity.isCollection) {\n if (propEntity.isArray) {\n return [schemaTypeOptions];\n }\n // Can be a Map or a Set;\n // Mongoose implements only Map;\n if (propEntity.collectionType !== Map) {\n throw new Error(`Invalid collection type. ${nameOf(propEntity.collectionType)} is not supported.`);\n }\n\n return ({type: Map, of: schemaTypeOptions} as unknown) as SchemaTypeOptions<T>;\n }\n\n return schemaTypeOptions;\n}\n","import {Type} from \"@tsed/core\";\n\nexport const MongooseModels: Map<string, Type> = new Map();\n","import {ancestorsOf, nameOf, Store, Type} from \"@tsed/core\";\nimport mongoose, {Connection, Model as MongooseModel} from \"mongoose\";\nimport {MONGOOSE_MODEL, MONGOOSE_MODEL_NAME, MONGOOSE_SCHEMA_OPTIONS} from \"../constants\";\nimport {MongooseModels} from \"../registries/MongooseModels\";\nimport {getSchemaToken} from \"./createSchema\";\n\nexport function getModelToken(target: Type<any>, options: any) {\n const {collectionName, token} = getSchemaToken(target, options);\n\n Store.from(target).set(MONGOOSE_MODEL_NAME, collectionName);\n MongooseModels.set(collectionName, target);\n\n return {token, collectionName};\n}\n\n/**\n * Create an instance of mongoose.model from a class.\n *\n * @param {Type<any>} target Class attached to the schema and model.\n * @param {\"mongoose\".Schema} schema Schema that will be attached to the model.\n * @param name model name\n * @param collection (optional, induced from model name)\n * @param skipInit whether to skip initialization (defaults to false)\n * @param connection\n * @returns {Model<T extends Document>}\n */\nexport function createModel<T>(\n target: any,\n schema: mongoose.Schema,\n name: string = nameOf(target),\n collection?: string,\n skipInit?: boolean,\n connection?: Connection,\n discriminatorValue?: string\n) {\n // if ancestor has a discriminatorKey we need to link model with anscestor schema\n const ancestor = ancestorsOf(target).find((ancestor) => {\n const options = Store.from(ancestor).get(MONGOOSE_SCHEMA_OPTIONS) || {};\n return !!options.discriminatorKey;\n });\n\n if (ancestor && ancestor !== target) {\n const ancestorModel = Store.from(ancestor).get(MONGOOSE_MODEL) as MongooseModel<typeof target> | undefined;\n if (ancestorModel) {\n const discriminatorName = discriminatorValue || name;\n if (ancestorModel.discriminators && ancestorModel.discriminators[discriminatorName]) {\n return ancestorModel.discriminators[discriminatorName];\n } else {\n return ancestorModel.discriminator(discriminatorName, schema);\n }\n }\n }\n\n /* istanbul ignore else */\n if (connection) {\n const model = connection.model(name, schema, collection);\n Store.from(target).set(MONGOOSE_MODEL, model);\n return model;\n }\n\n const model = mongoose.model(name, schema, collection, skipInit);\n Store.from(target).set(MONGOOSE_MODEL, model);\n return model;\n}\n","import {decoratorTypeOf, StoreMerge, useDecorators} from \"@tsed/core\";\nimport {registerProvider} from \"@tsed/di\";\nimport {Property} from \"@tsed/schema\";\nimport {SchemaTypeOptions} from \"mongoose\";\nimport {MONGOOSE_SCHEMA} from \"../constants\";\nimport {MongooseSchemaOptions} from \"../interfaces\";\nimport {getSchema, getSchemaToken} from \"../utils/createSchema\";\n\n/**\n * Define a class as a Mongoose Schema ready to be used to compose other schemes and models.\n *\n * ### Example\n *\n * ```typescript\n * @MongooseSchema()\n * export class EventSchema {\n * @Property()\n * field: string;\n * }\n * ```\n *\n * ### Options\n *\n * - `schemaOptions` (mongoose.SchemaOptions): Option to configure the schema behavior.\n *\n * @param {MongooseSchemaOptions | undefined} options\n * @returns {(target: any) => void}\n * @decorator\n * @mongoose\n * @property\n * @class\n */\nexport function Schema(options?: MongooseSchemaOptions): (target: any) => void;\nexport function Schema(definition: SchemaTypeOptions<any>): Function;\nexport function Schema(options: MongooseSchemaOptions | SchemaTypeOptions<any> = {}) {\n return (...parameters: any[]) => {\n switch (decoratorTypeOf(parameters)) {\n case \"property\":\n return useDecorators(Property(), StoreMerge(MONGOOSE_SCHEMA, options))(parameters[0], parameters[1], parameters[2]);\n\n case \"class\":\n const {token} = getSchemaToken(parameters[0], options);\n\n registerProvider({\n provide: token,\n deps: [],\n useFactory() {\n return getSchema(parameters[0], options as any);\n }\n });\n break;\n }\n };\n}\n\n/**\n * Define a class as a Mongoose Schema ready to be used to compose other schemes and models.\n *\n * ### Example\n *\n * ```typescript\n * @MongooseSchema()\n * export class EventSchema {\n * @Property()\n * field: string;\n * }\n * ```\n *\n * ### Options\n *\n * - `schemaOptions` (mongoose.SchemaOptions): Option to configure the schema behavior.\n *\n * @param {MongooseSchemaOptions | undefined} options\n * @returns {(target: any) => void}\n * @decorator\n * @mongoose\n * @property\n * @class\n */\nexport function MongooseSchema(options?: MongooseSchemaOptions): (target: any) => void;\nexport function MongooseSchema(definition: SchemaTypeOptions<any>): Function;\nexport function MongooseSchema(options: MongooseSchemaOptions | SchemaTypeOptions<any> = {}) {\n return Schema(options as any);\n}\n","import {MongooseSchema} from \"./schema\";\n\n/**\n * If true, uses Mongoose's default _id settings. Only allowed for ObjectIds\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @ExcludeIndexes()\n * field: string;\n * }\n * ```\n *\n * @param {boolean} auto\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function Auto(auto: boolean = true): PropertyDecorator {\n return MongooseSchema({auto} as any);\n}\n","import {Store} from \"@tsed/core\";\nimport {MONGOOSE_SCHEMA_OPTIONS} from \"../constants\";\n\nexport function DiscriminatorKey(): PropertyDecorator {\n return (target: any, propertyKey: string) => {\n Store.from(target).merge(MONGOOSE_SCHEMA_OPTIONS, {discriminatorKey: propertyKey});\n };\n}\n","import {StoreMerge, useDecorators} from \"@tsed/core\";\nimport {Description, Example, Property} from \"@tsed/schema\";\nimport {Schema as MongooseSchema} from \"mongoose\";\nimport {MONGOOSE_SCHEMA} from \"../constants\";\n\n/**\n * Define a property as mongoose reference to other Model (decorated with @Model).\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * class FooModel {\n *\n * @DynamicRef('type')\n * field: DynamicRef<OtherFooModel | OtherModel>\n *\n * @Enum(['OtherFooModel', 'OtherModel'])\n * type: string\n * }\n *\n * @Model()\n * class OtherFooModel {\n * }\n *\n * @Model()\n * class OtherModel {\n * }\n * ```\n *\n * @param refPath\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function DynamicRef(refPath: string): PropertyDecorator {\n return useDecorators(\n Property(String),\n Example(\"5ce7ad3028890bd71749d477\"),\n Description(\"Mongoose Ref ObjectId\"),\n StoreMerge(MONGOOSE_SCHEMA, {\n type: MongooseSchema.Types.ObjectId,\n refPath\n })\n ) as PropertyDecorator;\n}\n\nexport type DynamicRef<T> = T | string;\n","import {MongooseSchema} from \"./schema\";\n\n/**\n * If true, Mongoose will skip gathering indexes on subpaths. Only allowed for subdocuments and subdocument arrays.\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @ExcludeIndexes()\n * field: string;\n * }\n * ```\n *\n * @param {boolean} excludeIndexes\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function ExcludeIndexes(excludeIndexes: boolean = true): PropertyDecorator {\n return MongooseSchema({excludeIndexes} as any);\n}\n","import {MongooseSchema} from \"./schema\";\n\n/**\n * Defines a TTL index on this path. Only allowed for dates.\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @Expires('5d')\n * field: string;\n * }\n * ```\n *\n * @param {boolean | any} expires\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function Expires(expires: number | string | Date): PropertyDecorator {\n return MongooseSchema({expires} as any);\n}\n","import {MongooseSchema} from \"./schema\";\n\n/**\n * If [truthy](https://masteringjs.io/tutorials/fundamentals/truthy), Mongoose will\n * disallow changes to this path once the document is saved to the database for the first time. Read more\n * about [immutability in Mongoose here](http://thecodebarbarian.com/whats-new-in-mongoose-5-6-immutable-properties.html).\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @Immutable()\n * field: string;\n * }\n * ```\n *\n * @param {boolean | any} immutable\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function Immutable(immutable: boolean | ((this: any, doc: any) => boolean) = true): PropertyDecorator {\n return MongooseSchema({immutable} as any);\n}\n","import {IndexOptions} from \"mongoose\";\nimport {MongooseSchema} from \"./schema\";\n\n/**\n * Tell Mongoose whether to define an index for the property.\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @Indexed()\n * field: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function Indexed(index: IndexOptions | boolean | string = true): PropertyDecorator {\n return MongooseSchema({index} as any);\n}\n","import {MongooseSchema} from \"./schema\";\n\n/**\n * If truthy, Mongoose will add a custom setter that lowercases this string using JavaScript's built-in String#toLowerCase().\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @Lowercase()\n * field: string;\n * }\n * ```\n *\n * @param {boolean} lowercase\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function Lowercase(lowercase: boolean = true): PropertyDecorator {\n return MongooseSchema({lowercase} as any);\n}\n","import {Store} from \"@tsed/core\";\nimport {registerProvider} from \"@tsed/di\";\nimport {Schema} from \"mongoose\";\nimport {MONGOOSE_MODEL} from \"../constants\";\nimport {MongooseModelOptions} from \"../interfaces/MongooseModelOptions\";\nimport {MONGOOSE_CONNECTIONS} from \"../services/MongooseConnections\";\nimport {createModel, getModelToken, getSchema} from \"../utils\";\nimport {applySchemaOptions, schemaOptions} from \"../utils/schemaOptions\";\n\n/**\n * Define a class as a Mongoose Model. The model can be injected to the Service, Controller, Middleware, Converters or Filter with\n * `@Inject` annotation.\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @Property()\n * field: string;\n * }\n * ```\n *\n * Then inject the model into a service:\n *\n * ```typescript\n * class MyService {\n * constructor(@Inject(EventModel) eventModel: MongooseModel<EventModel>) {\n * eventModel.findById().exec();\n * }\n * }\n * ```\n *\n * ### Options\n *\n * - `schemaOptions` (mongoose.SchemaOptions): Option to configure the schema behavior.\n * - `name` (String): model name.\n * - `collection` (String): collection (optional, induced from model name).\n * - `skipInit` (Boolean): skipInit whether to skip initialization (defaults to false).\n *\n * @param {MongooseModelOptions} options\n * @returns {(target: any) => void}\n * @decorator\n * @mongoose\n * @class\n */\nexport function Model(options: MongooseModelOptions = {}) {\n return (target: any) => {\n const {token, collectionName} = getModelToken(target, options);\n\n registerProvider({\n provide: token,\n deps: [],\n useFactory() {\n return getSchema(target, options as any);\n }\n });\n\n registerProvider({\n provide: target,\n type: \"mongoose:model\",\n deps: [MONGOOSE_CONNECTIONS, token],\n useFactory(connections: MONGOOSE_CONNECTIONS, schema: Schema) {\n applySchemaOptions(schema, schemaOptions(target));\n return createModel(\n target,\n schema,\n collectionName,\n options.collection,\n options.skipInit,\n connections.get(options.connection),\n options.discriminatorValue\n );\n }\n });\n };\n}\n","import {schemaOptions} from \"../utils/schemaOptions\";\n\n/**\n * Calls schema.index() to define an index (most likely compound) for the schema.\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * @MongooseIndex({first: 1, second: 1}, {unique: 1})\n * export class EventModel {\n *\n * @Property()\n * first: string;\n *\n * @Property()\n * second: string;\n *\n * }\n * ```\n *\n * @param fields\n * @param options\n * @returns {Function}\n * @decorator\n * @mongoose\n * @class\n */\nexport function MongooseIndex(fields: object, options?: any): Function {\n return (target: any) => {\n schemaOptions(target, {\n indexes: [{fields, options}]\n });\n };\n}\n","import mongoose from \"mongoose\";\nimport {schemaOptions} from \"../utils/schemaOptions\";\n\n/**\n *\n * @param {(schema: \"mongoose\".Schema, options?: any) => void} plugin\n * @param options\n * @returns {Function}\n * @decorator\n * @mongoose\n * @class\n */\nexport function MongoosePlugin(plugin: (schema: mongoose.Schema, options?: any) => void, options?: any): Function {\n return (target: any) => {\n schemaOptions(target, {\n plugins: [{plugin, options}]\n });\n };\n}\n","import {Formats, FormatsMethods} from \"@tsed/ajv\";\nimport {isNumber, isString, StoreMerge, useDecorators} from \"@tsed/core\";\nimport {OnDeserialize, OnSerialize} from \"@tsed/json-mapper\";\nimport {Example, Format, Property} from \"@tsed/schema\";\nimport {Types, Schema as MongooseSchema, SchemaTypeOptions} from \"mongoose\";\nimport {MONGOOSE_SCHEMA} from \"../constants\";\n\n@Formats(\"decimal\", {type: \"number\"})\nexport class DecimalFormat implements FormatsMethods<string | number> {\n validate(num: string | number): boolean {\n return isString(num) || isNumber(num);\n }\n}\n\nfunction isDecimal(value: undefined | number | any) {\n return value && value._bsontype === \"Decimal128\";\n}\n\n/**\n * Tell Mongoose whether to define an Decimal128 property.\n * Will be serialized as `number` with format as `decimal`.\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class PriceModel {\n * @NumberDecimal()\n * price: Decimal128;\n * }\n * ```\n * Optionally using custom decimal type, such as `Big` from big.js\n * ```typescript\n * @Model()\n * export class PriceModel {\n * @NumberDecimal(Big)\n * price: Big;\n * }\n * ```\n * @param type Optional decimal type constructor\n * @decorator\n * @mongoose\n * @schema\n */\nexport function NumberDecimal(type?: any) {\n const schema: SchemaTypeOptions<Decimal128> = {\n type: MongooseSchema.Types.Decimal128\n };\n\n if (type) {\n // Define property getter to convert Decimal128 to custom type\n schema.get = (value) => {\n return isDecimal(value) ? new type(value) : value;\n };\n }\n\n return useDecorators(\n Property(Number),\n Format(\"decimal\"),\n Example(12.34),\n StoreMerge(MONGOOSE_SCHEMA, schema),\n\n // Deserialize number value from JSON to Decimal128\n OnDeserialize((value) => {\n if (type) {\n return new type(value);\n }\n if (isString(value)) {\n return Types.Decimal128.fromString(value);\n }\n return Types.Decimal128.fromString(`${value}`);\n }),\n\n // Serialize decimal value to floating point number\n OnSerialize((value: any, ctx) => {\n return value && Number(value);\n })\n );\n}\n\nexport type Decimal128 = Types.Decimal128;\n","import {useDecorators} from \"@tsed/core\";\nimport {Description, Example, Name, Pattern} from \"@tsed/schema\";\nimport {Types} from \"mongoose\";\n\n/**\n * Tell Mongoose whether to define an ObjectId property.\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @ObjectId('id')\n * _id: string;\n * }\n * ```\n * @param name\n * @decorator\n * @mongoose\n * @schema\n */\nexport function ObjectID(name?: string) {\n return useDecorators(\n name && Name(name),\n Pattern(/^[0-9a-fA-F]{24}$/),\n Description(\"Mongoose ObjectId\"),\n Example(\"5ce7ad3028890bd71749d477\")\n );\n}\n\nexport type ObjectID = Types.ObjectId;\n","import {decoratorTypeOf, DecoratorTypes, StaticMethodDecorator} from \"@tsed/core\";\nimport {MongooseHookOptions, MongoosePostHookCB} from \"../interfaces\";\nimport {schemaOptions} from \"../utils/schemaOptions\";\n\n/**\n * We can simply attach a `@PostHook` decorator to your model class and\n * define the hook function like you normally would in Mongoose.\n *\n * ```typescript\n * import {Ignore, Required} from \"@tsed/common\";\n * import {PostHook, Model} from \"@tsed/mongoose\";\n *\n * @Model()\n * @PostHook(\"save\", (car: CarModel) => {\n * if (car.topSpeedInKmH > 300) {\n * console.log(car.model, 'is fast!');\n * }\n * })\n * export class CarModel {\n * @Ignore()\n * _id: string;\n *\n * @Required()\n * model: string;\n *\n * @Required()\n * isFast: boolean;\n *\n * // or Prehook on static method\n * @PostHook(\"save\")\n * static postSave(car: CarModel) {\n * if (car.topSpeedInKmH > 300) {\n * console.log(car.model, 'is fast!');\n * }\n * }\n * }\n * ```\n *\n * This will execute the post-save hook each time a `CarModel` document is saved.\n *\n * @param {string} method\n * @param fn\n * @returns {Function}\n * @decorator\n * @mongoose\n * @class\n */\nexport function PostHook<T = any>(method: string, fn: MongoosePostHookCB<T>): ClassDecorator;\nexport function PostHook<T = any>(method: string, fn: MongoosePostHookCB<T>, options: MongooseHookOptions): ClassDecorator;\nexport function PostHook<T = any>(method: string, options: MongooseHookOptions): StaticMethodDecorator;\nexport function PostHook<T = any>(method: string, ...params: any[]): Function {\n return ((...args: any[]) => {\n let options: MongooseHookOptions = params[1];\n let fn: MongoosePostHookCB<T> = params[0];\n\n if (decoratorTypeOf(args) === DecoratorTypes.METHOD_STC) {\n options = params[0];\n fn = args[0][args[1]].bind(args[0]);\n }\n\n schemaOptions(args[0], {\n post: [\n {\n method,\n fn,\n options\n }\n ]\n });\n }) as any;\n}\n","import {decoratorTypeOf, DecoratorTypes} from \"@tsed/core\";\nimport {MongooseHookOptions, MongoosePreHookCB} from \"../interfaces\";\nimport {schemaOptions} from \"../utils/schemaOptions\";\n\n/**\n *\n * We can simply attach a `@PreHook` decorator to your model class and\n * define the hook function like you normally would in Mongoose.\n *\n * ```typescript\n * import {Ignore, Required} from \"@tsed/common\";\n * import {PreHook, Model} from \"@tsed/mongoose\";\n *\n * @Model()\n * @PreHook(\"save\", (car: CarModel, next) => {\n * if (car.model === 'Tesla') {\n * car.isFast = true;\n * }\n * next();\n *})\n * export class CarModel {\n *\n * @Ignore()\n * _id: string;\n *\n * @Required()\n * model: string;\n *\n * @Required()\n * isFast: boolean;\n *\n * // or Prehook on static method\n * @PreHook(\"save\")\n * static preSave(car: CarModel, next) {\n * if (car.model === 'Tesla') {\n * car.isFast = true;\n * }\n * next();\n * }\n * }\n * ```\n *\n * This will execute the pre-save hook each time a `CarModel` document is saved.\n *\n * @param {string} method\n * @param fn\n * @param options\n * @returns {Function}\n * @decorator\n * @class\n */\nexport function PreHook<T = any>(method: string, fn?: MongoosePreHookCB<T> | MongooseHookOptions, options?: MongooseHookOptions): Function {\n return (...args: any[]) => {\n if (decoratorTypeOf(args) === DecoratorTypes.METHOD_STC) {\n options = fn as MongooseHookOptions;\n fn = args[0][args[1]].bind(args[0]);\n }\n\n schemaOptions(args[0], {\n pre: [\n {\n method,\n fn: fn as MongoosePreHookCB<T>,\n options\n }\n ]\n });\n };\n}\n","export enum MongooseSchemaTypes {\n OBJECT_ID = \"ObjectId\",\n STRING = \"String\",\n NUMBER = \"Number\"\n}\n","import {isArrowFn, isString, StoreMerge, Type, useDecorators} from \"@tsed/core\";\nimport {OnDeserialize, OnSerialize, serialize} from \"@tsed/json-mapper\";\nimport {JsonEntityFn, lazyRef, Property, string} from \"@tsed/schema\";\nimport {Schema as MongooseSchema} from \"mongoose\";\nimport {MONGOOSE_SCHEMA} from \"../constants\";\nimport {MongooseSchemaTypes} from \"../interfaces/MongooseSchemaTypes\";\nimport {MongooseModels} from \"../registries/MongooseModels\";\n\nfunction isRef(value: undefined | string | any) {\n return (value && value._bsontype) || isString(value);\n}\n\n/**\n * Define a property as mongoose reference to other Model (decorated with @Model).\n *\n * ### Example\n *\n * ```typescript\n *\n * @Model()\n * class FooModel {\n *\n * @Ref(Foo2Model)\n * field: Ref<Foo2Model>\n *\n * @Ref(Foo2Model)\n * list: Ref<Foo2Model>[]\n * }\n *\n * @Model()\n * class Foo2Model {\n * }\n * ```\n *\n * @param model\n * @param type\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function Ref(model: string | (() => Type) | any, type: MongooseSchemaTypes = MongooseSchemaTypes.OBJECT_ID): PropertyDecorator {\n const getType = () => (isString(model) ? MongooseModels.get(model) : isArrowFn(model) ? model() : model);\n\n return useDecorators(\n Property(Object),\n StoreMerge(MONGOOSE_SCHEMA, {\n type: MongooseSchema.Types[type],\n ref: model\n }),\n OnDeserialize((value) => {\n if (isRef(value)) {\n return value.toString();\n }\n\n return value;\n }),\n OnSerialize((value: any, ctx) => {\n if (isRef(value)) {\n return value.toString();\n }\n const type = getType();\n\n return serialize(value, {...ctx, type});\n }),\n JsonEntityFn(async (store) => {\n store.itemSchema.oneOf([string().example(\"5ce7ad3028890bd71749d477\").description(\"Mongoose Ref ObjectId\"), lazyRef(getType)]);\n\n store.type = Object;\n })\n ) as PropertyDecorator;\n}\n\nexport type Ref<T> = T | string;\n","import {MongooseSchema} from \"./schema\";\n\n/**\n * Do not apply this property to schema (create virtual property)\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * @SchemaIgnore()\n * @Property()\n * kind: string;\n *\n * ```\n *\n * @returns {Function}\n * @decorator\n * @mongoose\n * @class\n */\n\nexport function SchemaIgnore(): Function {\n return MongooseSchema({schemaIgnore: true} as any);\n}\n","import {MongooseSchema} from \"./schema\";\n\n/**\n * Tell Mongoose to set default select() behavior for this path.\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @Select()\n * field: string;\n * }\n * ```\n *\n * @param {boolean | any} select\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function Select(select: boolean | any = true) {\n return MongooseSchema({select});\n}\n","import {MongooseSchema} from \"./schema\";\n\n/**\n * If [truthy](https://masteringjs.io/tutorials/fundamentals/truthy), Mongoose will\n * disallow changes to this path once the document is saved to the database for the first time. Read more\n * about [immutability in Mongoose here](http://thecodebarbarian.com/whats-new-in-mongoose-5-6-immutable-properties.html).\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @Sparse()\n * field: string;\n * }\n * ```\n *\n * @param {boolean | number} sparse\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function Sparse(sparse: boolean | number = true): PropertyDecorator {\n return MongooseSchema({sparse} as any);\n}\n","import {MongooseSchema} from \"./schema\";\n\n/**\n * If [truthy](https://masteringjs.io/tutorials/fundamentals/truthy), Mongoose\n * will build a text index on this path.\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @Text()\n * field: string;\n * }\n * ```\n *\n * @param {boolean | number | any} text\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function Text(text: boolean | number | any = true): PropertyDecorator {\n return MongooseSchema({text} as any);\n}\n","import {MongooseSchema} from \"./schema\";\n\n/**\n * Tell Mongoose to make the property trimmable.\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @Trim()\n * name: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function Trim() {\n return MongooseSchema({trim: true});\n}\n","import {MongooseSchema} from \"./schema\";\n\n/**\n * Tell Mongoose to ensure a unique index is created for this path.\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @Unique()\n * index: string;\n * }\n * ```\n *\n * @param {boolean | any} unique\n * @returns {Function}\n * @decorator\n * @mongoose\n */\nexport function Unique(unique: boolean | any = true) {\n return MongooseSchema({unique});\n}\n","import {MongooseSchema} from \"./schema\";\n\n/**\n * If truthy, Mongoose will add a custom setter that uppercases this string using JavaScript's built-in String#toUpperCase().\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @Uppercase()\n * field: string;\n * }\n * ```\n *\n * @param {boolean} uppercase\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function Uppercase(uppercase: boolean = true): PropertyDecorator {\n return MongooseSchema({uppercase} as any);\n}\n","import {Store} from \"@tsed/core\";\nimport {MONGOOSE_SCHEMA_OPTIONS} from \"../constants\";\n\nexport function VersionKey(): PropertyDecorator {\n return (target: any, propertyKey: string) => {\n Store.from(target).merge(MONGOOSE_SCHEMA_OPTIONS, {versionKey: propertyKey});\n };\n}\n","import {isPlainObject, isString, Store, StoreMerge, useDecorators} from \"@tsed/core\";\nimport {CollectionOf, Property} from \"@tsed/schema\";\nimport {MONGOOSE_MODEL_NAME, MONGOOSE_SCHEMA} from \"../constants\";\nimport {MongooseVirtualRefOptions} from \"../interfaces/MongooseVirtualRefOptions\";\n\nfunction getRef(opts: any) {\n const ref = opts.ref || opts.type;\n\n return isString(ref) ? ref : Store.from(ref).get(MONGOOSE_MODEL_NAME);\n}\n\nfunction getType(opts: any) {\n const ref = opts.ref || opts.type;\n\n return !isString(ref) ? ref : Object;\n}\n\nfunction getInitialOpts(options: string | MongooseVirtualRefOptions, foreignField?: string): any {\n return isPlainObject(options) ? options : {type: options as any, foreignField};\n}\n\nfunction mapToSchema(opts: any) {\n const ref = getRef(opts);\n\n const schema: any = {\n ref,\n localField: opts.localField || \"_id\",\n foreignField: opts.foreignField,\n justOne: opts.justOne || false,\n options: opts.options\n };\n\n return schema;\n}\n\n/**\n * Define a property as mongoose virtual reference to other Model (decorated with @Model).\n *\n * ::: warning\n * To avoid circular dependencies, do not use the virtual reference model in\n * anything except a type declaration. Using the virtual reference model will prevent\n * typescript transpiler from stripping away the import statement and cause a circular\n * import in node.\n * :::\n *\n * ### Example\n *\n * <<< @/tutorials/snippets/mongoose/virtual-references.ts\n *\n * @param type\n * @param foreignField\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function VirtualRef(type: string, foreignField: string): Function;\nexport function VirtualRef(options: MongooseVirtualRefOptions): Function;\nexport function VirtualRef(options: string | MongooseVirtualRefOptions, foreignField?: string): Function;\nexport function VirtualRef(options: string | MongooseVirtualRefOptions, foreignField?: string): Function {\n const opts = getInitialOpts(options, foreignField);\n const schema = mapToSchema(opts);\n const type = getType(opts);\n\n return useDecorators(StoreMerge(MONGOOSE_SCHEMA, schema), type && (schema.justOne ? Property(type) : CollectionOf(type)));\n}\n\nexport type VirtualRef<T> = T | null;\nexport type VirtualRefs<T> = T[];\n"],"names":["MONGOOSE_SCHEMA","MONGOOSE_SCHEMA_OPTIONS","MONGOOSE_MODEL","MONGOOSE_MODEL_NAME","asPromise","c","MongooseService","constructor","Map","connect","id","url","connectionOptions","isDefault","has","get","logger","info","debug","JSON","stringify","connection","Mongoose","createConnection","connections","set","defaultConnection","er","error","process","exit","closeConnections","entries","close","delete","__decorate","Inject","Logger","Injectable","MONGOOSE_CONNECTIONS","Symbol","for","mapOptions","options","isArray","map","settings","registerProvider","provide","injectable","deps","Configuration","useAsyncFactory","configuration","mongooseService","current","useCreateIndex","useNewUrlParser","useUnifiedTopology","MongooseModule","cache","mongoose","$onInit","$onDestroy","Module","imports","__param","resolveRefType","type","isString","isClass","Store","from","nameOf","schemaOptions","target","store","deepMerge","mapHookArgs","hook","method","fn","undefined","filter","Boolean","buildPreHook","length","next","applySchemaOptions","schema","plugins","forEach","item","plugin","indexes","index","fields","pre","post","MONGOOSE_RESERVED_KEYS","setUpSchema","virtuals","mongooseSchema","Schema","key","virtual","isVirtualRef","ref","localField","foreignField","hasVersionField","versionKey","paths","createSchema","schemaOptionsFromStore","buildMongooseSchema","outputVersionKey","methods","toClass","deserialize","toObject","flattenMaps","useAlias","additionalProperties","groups","toJSON","serialize","loadClass","getSchema","getSchemaToken","collectionName","name","token","pascalCase","properties","getProperties","withIgnoredProps","propertyMetadata","includes","schemaTypeOptions","schemaIgnore","createSchemaTypeOptions","propEntity","propertyKey","rawMongooseSchema","required","isRequired","jsonSchema","itemSchema","minimum","min","maximum","max","minLength","minlength","maxLength","maxlength","match","pattern","RegExp","enum","default","cleanObject","isCollection","collectionType","Error","of","MongooseModels","getModelToken","createModel","collection","skipInit","discriminatorValue","ancestor","ancestorsOf","find","discriminatorKey","ancestorModel","discriminatorName","discriminators","discriminator","model","parameters","decoratorTypeOf","useDecorators","Property","StoreMerge","useFactory","MongooseSchema","Auto","auto","DiscriminatorKey","merge","DynamicRef","refPath","String","Example","Description","Types","ObjectId","ExcludeIndexes","excludeIndexes","Expires","expires","Immutable","immutable","Indexed","Lowercase","lowercase","Model","MongooseIndex","MongoosePlugin","DecimalFormat","validate","num","isNumber","Formats","isDecimal","value","_bsontype","NumberDecimal","Decimal128","Number","Format","OnDeserialize","fromString","OnSerialize","ctx","ObjectID","Name","Pattern","PostHook","params","args","DecoratorTypes","METHOD_STC","bind","PreHook","MongooseSchemaTypes","isRef","Ref","OBJECT_ID","getType","isArrowFn","Object","toString","JsonEntityFn","oneOf","string","example","description","lazyRef","SchemaIgnore","Select","select","Sparse","sparse","Text","text","Trim","trim","Unique","unique","Uppercase","uppercase","VersionKey","getRef","opts","getInitialOpts","isPlainObject","mapToSchema","justOne","VirtualRef","CollectionOf"],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,7 @@
1
1
  {
2
2
  "name": "@tsed/mongoose",
3
- "version": "6.69.0-rc.4",
3
+ "version": "6.69.3",
4
4
  "description": "Mongoose package for Ts.ED framework",
5
- "source": "./src/index.ts",
6
- "main": "./lib/index.js",
7
- "typings": "./lib/index.d.ts",
8
5
  "private": false,
9
6
  "keywords": [
10
7
  "tsed",
@@ -13,40 +10,44 @@
13
10
  "decorators",
14
11
  "orm"
15
12
  ],
16
- "directories": {
17
- "lib": "lib",
18
- "src": "src"
13
+ "source": "./src/index.ts",
14
+ "main": "./lib/index.js",
15
+ "typings": "./lib/index.d.ts",
16
+ "exports": {
17
+ "require": "./lib/index.js",
18
+ "default": "./lib/index.modern.js"
19
19
  },
20
20
  "scripts": {
21
- "build": "tsc --build tsconfig.compile.json"
21
+ "build": "microbundle --target node --no-compress --format modern,cjs --tsconfig ./tsconfig.compile.json",
22
+ "test": "cross-env NODE_ENV=test nyc mocha"
22
23
  },
23
24
  "dependencies": {
24
25
  "change-case": "4.1.2",
25
26
  "tslib": "2.2.0"
26
27
  },
27
28
  "devDependencies": {
28
- "@tsed/ajv": "6.69.0-rc.4",
29
- "@tsed/core": "6.69.0-rc.4",
30
- "@tsed/di": "6.69.0-rc.4",
31
- "@tsed/json-mapper": "6.69.0-rc.4",
29
+ "@tsed/ajv": "6.69.3",
30
+ "@tsed/core": "6.69.3",
31
+ "@tsed/di": "6.69.3",
32
+ "@tsed/json-mapper": "6.69.3",
32
33
  "@tsed/logger": "^5.16.0",
33
- "@tsed/schema": "6.69.0-rc.4",
34
+ "@tsed/schema": "6.69.3",
34
35
  "mongoose": "^5.12.2"
35
36
  },
36
37
  "peerDependencies": {
37
- "@tsed/ajv": "^6.69.0-rc.4",
38
- "@tsed/core": "^6.69.0-rc.4",
39
- "@tsed/di": "^6.69.0-rc.4",
40
- "@tsed/json-mapper": "^6.69.0-rc.4",
38
+ "@tsed/ajv": "^6.69.3",
39
+ "@tsed/core": "^6.69.3",
40
+ "@tsed/di": "^6.69.3",
41
+ "@tsed/json-mapper": "^6.69.3",
41
42
  "@tsed/logger": "^5.16.0",
42
- "@tsed/schema": "^6.69.0-rc.4",
43
+ "@tsed/schema": "^6.69.3",
43
44
  "mongoose": "^5.12.2"
44
45
  },
45
46
  "repository": "https://github.com/tsedio/tsed",
46
47
  "bugs": {
47
48
  "url": "https://github.com/tsedio/tsed/issues"
48
49
  },
49
- "homepage": "https://github.com/tsedio/tsed/tree/production//packages/orm/mongoose",
50
+ "homepage": "https://github.com/tsedio/tsed/tree/production/packages/orm/mongoose",
50
51
  "author": "Romain Lenzotti",
51
52
  "license": "MIT"
52
53
  }
@@ -1,36 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MongooseModule = void 0;
4
- const tslib_1 = require("tslib");
5
- const di_1 = require("@tsed/di");
6
- const di_2 = require("@tsed/di");
7
- const MongooseConnections_1 = require("./services/MongooseConnections");
8
- const MongooseService_1 = require("./services/MongooseService");
9
- /**
10
- * @ignore
11
- */
12
- let MongooseModule = class MongooseModule {
13
- constructor(mongooseService, settings) {
14
- this.mongooseService = mongooseService;
15
- this.settings = settings;
16
- // auto configure the cache manager when mongoose is used with @tsed/mongoose
17
- const cache = this.settings.get("cache");
18
- // istanbul ignore next
19
- if (cache === null || cache === void 0 ? void 0 : cache.mongoose) {
20
- cache.connection = this.mongooseService.get();
21
- }
22
- }
23
- $onInit() { }
24
- $onDestroy() {
25
- return this.mongooseService.closeConnections();
26
- }
27
- };
28
- MongooseModule = tslib_1.__decorate([
29
- di_2.Module({
30
- imports: [MongooseConnections_1.MONGOOSE_CONNECTIONS]
31
- }),
32
- tslib_1.__param(1, di_1.Configuration()),
33
- tslib_1.__metadata("design:paramtypes", [MongooseService_1.MongooseService, Object])
34
- ], MongooseModule);
35
- exports.MongooseModule = MongooseModule;
36
- //# sourceMappingURL=MongooseModule.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MongooseModule.js","sourceRoot":"","sources":["../src/MongooseModule.ts"],"names":[],"mappings":";;;;AAAA,iCAA+C;AAC/C,iCAA2C;AAC3C,wEAAoE;AACpE,gEAA2D;AAE3D;;GAEG;AAIH,IAAa,cAAc,GAA3B,MAAa,cAAc;IACzB,YAAoB,eAAgC,EAA2B,QAAuB;QAAlF,oBAAe,GAAf,eAAe,CAAiB;QAA2B,aAAQ,GAAR,QAAQ,CAAe;QACpG,6EAA6E;QAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAM,OAAO,CAAC,CAAC;QAE9C,uBAAuB;QACvB,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,EAAE;YACnB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;SAC/C;IACH,CAAC;IAED,OAAO,KAAyB,CAAC;IAEjC,UAAU;QACR,OAAO,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC;IACjD,CAAC;CACF,CAAA;AAhBY,cAAc;IAH1B,WAAM,CAAC;QACN,OAAO,EAAE,CAAC,0CAAoB,CAAC;KAChC,CAAC;IAEuD,mBAAA,kBAAa,EAAE,CAAA;6CAAjC,iCAAe;GADzC,cAAc,CAgB1B;AAhBY,wCAAc","sourcesContent":["import {Configuration, OnInit} from \"@tsed/di\";\nimport {Module, OnDestroy} from \"@tsed/di\";\nimport {MONGOOSE_CONNECTIONS} from \"./services/MongooseConnections\";\nimport {MongooseService} from \"./services/MongooseService\";\n\n/**\n * @ignore\n */\n@Module({\n imports: [MONGOOSE_CONNECTIONS]\n})\nexport class MongooseModule implements OnDestroy, OnInit {\n constructor(private mongooseService: MongooseService, @Configuration() private settings: Configuration) {\n // auto configure the cache manager when mongoose is used with @tsed/mongoose\n const cache = this.settings.get<any>(\"cache\");\n\n // istanbul ignore next\n if (cache?.mongoose) {\n cache.connection = this.mongooseService.get();\n }\n }\n\n $onInit(): void | Promise<any> {}\n\n $onDestroy(): Promise<any> | void {\n return this.mongooseService.closeConnections();\n }\n}\n"]}
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MONGOOSE_MODEL_NAME = exports.MONGOOSE_MODEL = exports.MONGOOSE_SCHEMA_OPTIONS = exports.MONGOOSE_SCHEMA = void 0;
4
- /**
5
- *
6
- * @type {string}
7
- */
8
- exports.MONGOOSE_SCHEMA = "tsed:mongoose:schema";
9
- /**
10
- *
11
- * @type {string}
12
- */
13
- exports.MONGOOSE_SCHEMA_OPTIONS = "tsed:mongoose:schema:options";
14
- /**
15
- *
16
- * @type {string}
17
- */
18
- exports.MONGOOSE_MODEL = "tsed:mongoose:model";
19
- /**
20
- *
21
- * @type {string}
22
- */
23
- exports.MONGOOSE_MODEL_NAME = "tsed:mongoose:model:name";
24
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,eAAe,GAAG,sBAAsB,CAAC;AACtD;;;GAGG;AACU,QAAA,uBAAuB,GAAG,8BAA8B,CAAC;AACtE;;;GAGG;AACU,QAAA,cAAc,GAAG,qBAAqB,CAAC;AACpD;;;GAGG;AACU,QAAA,mBAAmB,GAAG,0BAA0B,CAAC","sourcesContent":["/**\n *\n * @type {string}\n */\nexport const MONGOOSE_SCHEMA = \"tsed:mongoose:schema\";\n/**\n *\n * @type {string}\n */\nexport const MONGOOSE_SCHEMA_OPTIONS = \"tsed:mongoose:schema:options\";\n/**\n *\n * @type {string}\n */\nexport const MONGOOSE_MODEL = \"tsed:mongoose:model\";\n/**\n *\n * @type {string}\n */\nexport const MONGOOSE_MODEL_NAME = \"tsed:mongoose:model:name\";\n"]}
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Auto = void 0;
4
- const schema_1 = require("./schema");
5
- /**
6
- * If true, uses Mongoose's default _id settings. Only allowed for ObjectIds
7
- *
8
- * ### Example
9
- *
10
- * ```typescript
11
- * @Model()
12
- * export class EventModel {
13
- * @ExcludeIndexes()
14
- * field: string;
15
- * }
16
- * ```
17
- *
18
- * @param {boolean} auto
19
- * @returns {Function}
20
- * @decorator
21
- * @mongoose
22
- * @property
23
- */
24
- function Auto(auto = true) {
25
- return schema_1.MongooseSchema({ auto });
26
- }
27
- exports.Auto = Auto;
28
- //# sourceMappingURL=auto.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto.js","sourceRoot":"","sources":["../../src/decorators/auto.ts"],"names":[],"mappings":";;;AAAA,qCAAwC;AAExC;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,IAAI,CAAC,OAAgB,IAAI;IACvC,OAAO,uBAAc,CAAC,EAAC,IAAI,EAAQ,CAAC,CAAC;AACvC,CAAC;AAFD,oBAEC","sourcesContent":["import {MongooseSchema} from \"./schema\";\n\n/**\n * If true, uses Mongoose's default _id settings. Only allowed for ObjectIds\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @ExcludeIndexes()\n * field: string;\n * }\n * ```\n *\n * @param {boolean} auto\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function Auto(auto: boolean = true): PropertyDecorator {\n return MongooseSchema({auto} as any);\n}\n"]}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DiscriminatorKey = void 0;
4
- const core_1 = require("@tsed/core");
5
- const constants_1 = require("../constants");
6
- function DiscriminatorKey() {
7
- return (target, propertyKey) => {
8
- core_1.Store.from(target).merge(constants_1.MONGOOSE_SCHEMA_OPTIONS, { discriminatorKey: propertyKey });
9
- };
10
- }
11
- exports.DiscriminatorKey = DiscriminatorKey;
12
- //# sourceMappingURL=discriminatorKey.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"discriminatorKey.js","sourceRoot":"","sources":["../../src/decorators/discriminatorKey.ts"],"names":[],"mappings":";;;AAAA,qCAAiC;AACjC,4CAAqD;AAErD,SAAgB,gBAAgB;IAC9B,OAAO,CAAC,MAAW,EAAE,WAAmB,EAAE,EAAE;QAC1C,YAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,mCAAuB,EAAE,EAAC,gBAAgB,EAAE,WAAW,EAAC,CAAC,CAAC;IACrF,CAAC,CAAC;AACJ,CAAC;AAJD,4CAIC","sourcesContent":["import {Store} from \"@tsed/core\";\nimport {MONGOOSE_SCHEMA_OPTIONS} from \"../constants\";\n\nexport function DiscriminatorKey(): PropertyDecorator {\n return (target: any, propertyKey: string) => {\n Store.from(target).merge(MONGOOSE_SCHEMA_OPTIONS, {discriminatorKey: propertyKey});\n };\n}\n"]}
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DynamicRef = void 0;
4
- const core_1 = require("@tsed/core");
5
- const schema_1 = require("@tsed/schema");
6
- const mongoose_1 = require("mongoose");
7
- const constants_1 = require("../constants");
8
- /**
9
- * Define a property as mongoose reference to other Model (decorated with @Model).
10
- *
11
- * ### Example
12
- *
13
- * ```typescript
14
- * @Model()
15
- * class FooModel {
16
- *
17
- * @DynamicRef('type')
18
- * field: DynamicRef<OtherFooModel | OtherModel>
19
- *
20
- * @Enum(['OtherFooModel', 'OtherModel'])
21
- * type: string
22
- * }
23
- *
24
- * @Model()
25
- * class OtherFooModel {
26
- * }
27
- *
28
- * @Model()
29
- * class OtherModel {
30
- * }
31
- * ```
32
- *
33
- * @param refPath
34
- * @returns {Function}
35
- * @decorator
36
- * @mongoose
37
- * @property
38
- */
39
- function DynamicRef(refPath) {
40
- return core_1.useDecorators(schema_1.Property(String), schema_1.Example("5ce7ad3028890bd71749d477"), schema_1.Description("Mongoose Ref ObjectId"), core_1.StoreMerge(constants_1.MONGOOSE_SCHEMA, {
41
- type: mongoose_1.Schema.Types.ObjectId,
42
- refPath
43
- }));
44
- }
45
- exports.DynamicRef = DynamicRef;
46
- //# sourceMappingURL=dynamicRef.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dynamicRef.js","sourceRoot":"","sources":["../../src/decorators/dynamicRef.ts"],"names":[],"mappings":";;;AAAA,qCAAqD;AACrD,yCAA4D;AAC5D,uCAAkD;AAClD,4CAA6C;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,SAAgB,UAAU,CAAC,OAAe;IACxC,OAAO,oBAAa,CAClB,iBAAQ,CAAC,MAAM,CAAC,EAChB,gBAAO,CAAC,0BAA0B,CAAC,EACnC,oBAAW,CAAC,uBAAuB,CAAC,EACpC,iBAAU,CAAC,2BAAe,EAAE;QAC1B,IAAI,EAAE,iBAAc,CAAC,KAAK,CAAC,QAAQ;QACnC,OAAO;KACR,CAAC,CACkB,CAAC;AACzB,CAAC;AAVD,gCAUC","sourcesContent":["import {StoreMerge, useDecorators} from \"@tsed/core\";\nimport {Description, Example, Property} from \"@tsed/schema\";\nimport {Schema as MongooseSchema} from \"mongoose\";\nimport {MONGOOSE_SCHEMA} from \"../constants\";\n\n/**\n * Define a property as mongoose reference to other Model (decorated with @Model).\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * class FooModel {\n *\n * @DynamicRef('type')\n * field: DynamicRef<OtherFooModel | OtherModel>\n *\n * @Enum(['OtherFooModel', 'OtherModel'])\n * type: string\n * }\n *\n * @Model()\n * class OtherFooModel {\n * }\n *\n * @Model()\n * class OtherModel {\n * }\n * ```\n *\n * @param refPath\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function DynamicRef(refPath: string): PropertyDecorator {\n return useDecorators(\n Property(String),\n Example(\"5ce7ad3028890bd71749d477\"),\n Description(\"Mongoose Ref ObjectId\"),\n StoreMerge(MONGOOSE_SCHEMA, {\n type: MongooseSchema.Types.ObjectId,\n refPath\n })\n ) as PropertyDecorator;\n}\n\nexport type DynamicRef<T> = T | string;\n"]}
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ExcludeIndexes = void 0;
4
- const schema_1 = require("./schema");
5
- /**
6
- * If true, Mongoose will skip gathering indexes on subpaths. Only allowed for subdocuments and subdocument arrays.
7
- *
8
- * ### Example
9
- *
10
- * ```typescript
11
- * @Model()
12
- * export class EventModel {
13
- * @ExcludeIndexes()
14
- * field: string;
15
- * }
16
- * ```
17
- *
18
- * @param {boolean} excludeIndexes
19
- * @returns {Function}
20
- * @decorator
21
- * @mongoose
22
- * @property
23
- */
24
- function ExcludeIndexes(excludeIndexes = true) {
25
- return schema_1.MongooseSchema({ excludeIndexes });
26
- }
27
- exports.ExcludeIndexes = ExcludeIndexes;
28
- //# sourceMappingURL=excludeIndexes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"excludeIndexes.js","sourceRoot":"","sources":["../../src/decorators/excludeIndexes.ts"],"names":[],"mappings":";;;AAAA,qCAAwC;AAExC;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,cAAc,CAAC,iBAA0B,IAAI;IAC3D,OAAO,uBAAc,CAAC,EAAC,cAAc,EAAQ,CAAC,CAAC;AACjD,CAAC;AAFD,wCAEC","sourcesContent":["import {MongooseSchema} from \"./schema\";\n\n/**\n * If true, Mongoose will skip gathering indexes on subpaths. Only allowed for subdocuments and subdocument arrays.\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @ExcludeIndexes()\n * field: string;\n * }\n * ```\n *\n * @param {boolean} excludeIndexes\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function ExcludeIndexes(excludeIndexes: boolean = true): PropertyDecorator {\n return MongooseSchema({excludeIndexes} as any);\n}\n"]}
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Expires = void 0;
4
- const schema_1 = require("./schema");
5
- /**
6
- * Defines a TTL index on this path. Only allowed for dates.
7
- *
8
- * ### Example
9
- *
10
- * ```typescript
11
- * @Model()
12
- * export class EventModel {
13
- * @Expires('5d')
14
- * field: string;
15
- * }
16
- * ```
17
- *
18
- * @param {boolean | any} expires
19
- * @returns {Function}
20
- * @decorator
21
- * @mongoose
22
- * @property
23
- */
24
- function Expires(expires) {
25
- return schema_1.MongooseSchema({ expires });
26
- }
27
- exports.Expires = Expires;
28
- //# sourceMappingURL=expires.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expires.js","sourceRoot":"","sources":["../../src/decorators/expires.ts"],"names":[],"mappings":";;;AAAA,qCAAwC;AAExC;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,OAAO,CAAC,OAA+B;IACrD,OAAO,uBAAc,CAAC,EAAC,OAAO,EAAQ,CAAC,CAAC;AAC1C,CAAC;AAFD,0BAEC","sourcesContent":["import {MongooseSchema} from \"./schema\";\n\n/**\n * Defines a TTL index on this path. Only allowed for dates.\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @Expires('5d')\n * field: string;\n * }\n * ```\n *\n * @param {boolean | any} expires\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function Expires(expires: number | string | Date): PropertyDecorator {\n return MongooseSchema({expires} as any);\n}\n"]}
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Immutable = void 0;
4
- const schema_1 = require("./schema");
5
- /**
6
- * If [truthy](https://masteringjs.io/tutorials/fundamentals/truthy), Mongoose will
7
- * disallow changes to this path once the document is saved to the database for the first time. Read more
8
- * about [immutability in Mongoose here](http://thecodebarbarian.com/whats-new-in-mongoose-5-6-immutable-properties.html).
9
- *
10
- * ### Example
11
- *
12
- * ```typescript
13
- * @Model()
14
- * export class EventModel {
15
- * @Immutable()
16
- * field: string;
17
- * }
18
- * ```
19
- *
20
- * @param {boolean | any} immutable
21
- * @returns {Function}
22
- * @decorator
23
- * @mongoose
24
- * @property
25
- */
26
- function Immutable(immutable = true) {
27
- return schema_1.MongooseSchema({ immutable });
28
- }
29
- exports.Immutable = Immutable;
30
- //# sourceMappingURL=immutable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"immutable.js","sourceRoot":"","sources":["../../src/decorators/immutable.ts"],"names":[],"mappings":";;;AAAA,qCAAwC;AAExC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAgB,SAAS,CAAC,YAA0D,IAAI;IACtF,OAAO,uBAAc,CAAC,EAAC,SAAS,EAAQ,CAAC,CAAC;AAC5C,CAAC;AAFD,8BAEC","sourcesContent":["import {MongooseSchema} from \"./schema\";\n\n/**\n * If [truthy](https://masteringjs.io/tutorials/fundamentals/truthy), Mongoose will\n * disallow changes to this path once the document is saved to the database for the first time. Read more\n * about [immutability in Mongoose here](http://thecodebarbarian.com/whats-new-in-mongoose-5-6-immutable-properties.html).\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @Immutable()\n * field: string;\n * }\n * ```\n *\n * @param {boolean | any} immutable\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function Immutable(immutable: boolean | ((this: any, doc: any) => boolean) = true): PropertyDecorator {\n return MongooseSchema({immutable} as any);\n}\n"]}
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./auto"), exports);
5
- tslib_1.__exportStar(require("./discriminatorKey"), exports);
6
- tslib_1.__exportStar(require("./dynamicRef"), exports);
7
- tslib_1.__exportStar(require("./excludeIndexes"), exports);
8
- tslib_1.__exportStar(require("./expires"), exports);
9
- tslib_1.__exportStar(require("./immutable"), exports);
10
- tslib_1.__exportStar(require("./indexed"), exports);
11
- tslib_1.__exportStar(require("./lowercase"), exports);
12
- tslib_1.__exportStar(require("./model"), exports);
13
- tslib_1.__exportStar(require("./mongooseIndex"), exports);
14
- tslib_1.__exportStar(require("./mongoosePlugin"), exports);
15
- tslib_1.__exportStar(require("./numberDecimal"), exports);
16
- tslib_1.__exportStar(require("./objectID"), exports);
17
- tslib_1.__exportStar(require("./postHook"), exports);
18
- tslib_1.__exportStar(require("./preHook"), exports);
19
- tslib_1.__exportStar(require("./ref"), exports);
20
- tslib_1.__exportStar(require("./schema"), exports);
21
- tslib_1.__exportStar(require("./schemaIgnore"), exports);
22
- tslib_1.__exportStar(require("./select"), exports);
23
- tslib_1.__exportStar(require("./sparse"), exports);
24
- tslib_1.__exportStar(require("./text"), exports);
25
- tslib_1.__exportStar(require("./trim"), exports);
26
- tslib_1.__exportStar(require("./unique"), exports);
27
- tslib_1.__exportStar(require("./uppercase"), exports);
28
- tslib_1.__exportStar(require("./versionKey"), exports);
29
- tslib_1.__exportStar(require("./virtualRef"), exports);
30
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":";;;AAAA,iDAAuB;AACvB,6DAAmC;AACnC,uDAA6B;AAC7B,2DAAiC;AACjC,oDAA0B;AAC1B,sDAA4B;AAC5B,oDAA0B;AAC1B,sDAA4B;AAC5B,kDAAwB;AACxB,0DAAgC;AAChC,2DAAiC;AACjC,0DAAgC;AAChC,qDAA2B;AAC3B,qDAA2B;AAC3B,oDAA0B;AAC1B,gDAAsB;AACtB,mDAAyB;AACzB,yDAA+B;AAC/B,mDAAyB;AACzB,mDAAyB;AACzB,iDAAuB;AACvB,iDAAuB;AACvB,mDAAyB;AACzB,sDAA4B;AAC5B,uDAA6B;AAC7B,uDAA6B","sourcesContent":["export * from \"./auto\";\nexport * from \"./discriminatorKey\";\nexport * from \"./dynamicRef\";\nexport * from \"./excludeIndexes\";\nexport * from \"./expires\";\nexport * from \"./immutable\";\nexport * from \"./indexed\";\nexport * from \"./lowercase\";\nexport * from \"./model\";\nexport * from \"./mongooseIndex\";\nexport * from \"./mongoosePlugin\";\nexport * from \"./numberDecimal\";\nexport * from \"./objectID\";\nexport * from \"./postHook\";\nexport * from \"./preHook\";\nexport * from \"./ref\";\nexport * from \"./schema\";\nexport * from \"./schemaIgnore\";\nexport * from \"./select\";\nexport * from \"./sparse\";\nexport * from \"./text\";\nexport * from \"./trim\";\nexport * from \"./unique\";\nexport * from \"./uppercase\";\nexport * from \"./versionKey\";\nexport * from \"./virtualRef\";\n"]}
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Indexed = void 0;
4
- const schema_1 = require("./schema");
5
- /**
6
- * Tell Mongoose whether to define an index for the property.
7
- * ### Example
8
- *
9
- * ```typescript
10
- * @Model()
11
- * export class EventModel {
12
- * @Indexed()
13
- * field: string;
14
- * }
15
- * ```
16
- *
17
- * @returns {Function}
18
- * @decorator
19
- * @mongoose
20
- * @property
21
- */
22
- function Indexed(index = true) {
23
- return schema_1.MongooseSchema({ index });
24
- }
25
- exports.Indexed = Indexed;
26
- //# sourceMappingURL=indexed.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexed.js","sourceRoot":"","sources":["../../src/decorators/indexed.ts"],"names":[],"mappings":";;;AACA,qCAAwC;AAExC;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,OAAO,CAAC,QAAyC,IAAI;IACnE,OAAO,uBAAc,CAAC,EAAC,KAAK,EAAQ,CAAC,CAAC;AACxC,CAAC;AAFD,0BAEC","sourcesContent":["import {IndexOptions} from \"mongoose\";\nimport {MongooseSchema} from \"./schema\";\n\n/**\n * Tell Mongoose whether to define an index for the property.\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @Indexed()\n * field: string;\n * }\n * ```\n *\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function Indexed(index: IndexOptions | boolean | string = true): PropertyDecorator {\n return MongooseSchema({index} as any);\n}\n"]}
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Lowercase = void 0;
4
- const schema_1 = require("./schema");
5
- /**
6
- * If truthy, Mongoose will add a custom setter that lowercases this string using JavaScript's built-in String#toLowerCase().
7
- *
8
- * ### Example
9
- *
10
- * ```typescript
11
- * @Model()
12
- * export class EventModel {
13
- * @Lowercase()
14
- * field: string;
15
- * }
16
- * ```
17
- *
18
- * @param {boolean} lowercase
19
- * @returns {Function}
20
- * @decorator
21
- * @mongoose
22
- * @property
23
- */
24
- function Lowercase(lowercase = true) {
25
- return schema_1.MongooseSchema({ lowercase });
26
- }
27
- exports.Lowercase = Lowercase;
28
- //# sourceMappingURL=lowercase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lowercase.js","sourceRoot":"","sources":["../../src/decorators/lowercase.ts"],"names":[],"mappings":";;;AAAA,qCAAwC;AAExC;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,SAAS,CAAC,YAAqB,IAAI;IACjD,OAAO,uBAAc,CAAC,EAAC,SAAS,EAAQ,CAAC,CAAC;AAC5C,CAAC;AAFD,8BAEC","sourcesContent":["import {MongooseSchema} from \"./schema\";\n\n/**\n * If truthy, Mongoose will add a custom setter that lowercases this string using JavaScript's built-in String#toLowerCase().\n *\n * ### Example\n *\n * ```typescript\n * @Model()\n * export class EventModel {\n * @Lowercase()\n * field: string;\n * }\n * ```\n *\n * @param {boolean} lowercase\n * @returns {Function}\n * @decorator\n * @mongoose\n * @property\n */\nexport function Lowercase(lowercase: boolean = true): PropertyDecorator {\n return MongooseSchema({lowercase} as any);\n}\n"]}