{"version":3,"sources":["jsdelivr-header.js","/npm/@sudtanj/typegoose-auto-increment@2.2.5/lib/autoIncrement.js"],"names":[],"mappings":"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","file":"/npm/@sudtanj/typegoose-auto-increment@2.2.5/lib/autoIncrement.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@sudtanj/typegoose-auto-increment@2.2.5/lib/autoIncrement.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AutoIncrementID = exports.AutoIncrementIDSkipSymbol = exports.AutoIncrementSimple = exports.isNullOrUndefined = void 0;\nconst tslib_1 = require(\"tslib\");\nconst mongoose = require(\"mongoose\");\nconst logSettings_1 = require(\"./logSettings\");\nconst DEFAULT_INCREMENT = 1;\n/**\n * Because since node 4.0.0 the internal util.is* functions got deprecated\n * @param val Any value to test if null or undefined\n */\nfunction isNullOrUndefined(val) {\n    return val === null || val === undefined;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n/**\n * The Plugin - Simple version\n * Increments an value each time it is saved\n * @param schema The Schema\n * @param options The Options\n */\nfunction AutoIncrementSimple(schema, options) {\n    // convert normal object into an array\n    const fields = Array.isArray(options) ? options : [options];\n    logSettings_1.logger.info('Initilaize AutoIncrement for an schema with %d fields to increment', fields.length);\n    if (fields.length <= 0) {\n        throw new Error('Options with at least one field are required!');\n    }\n    // check if all fields are valid\n    for (const field of fields) {\n        const schemaField = schema.path(field.field);\n        // check if the field is even existing\n        if (isNullOrUndefined(schemaField)) {\n            throw new Error(`Field \"${field.field}\" does not exists on the Schema!`);\n        }\n        // check if the field is an number\n        if (!(schemaField instanceof mongoose.Schema.Types.Number)) {\n            throw new Error(`Field \"${field.field}\" is not an SchemaNumber!`);\n        }\n        if (isNullOrUndefined(field.incrementBy)) {\n            logSettings_1.logger.info('Field \"%s\" does not have an incrementBy defined, defaulting to %d', field.field, DEFAULT_INCREMENT);\n            field.incrementBy = DEFAULT_INCREMENT;\n        }\n    }\n    // to have an name to the function if debugging\n    schema.pre('save', function AutoIncrementPreSaveSimple() {\n        if (!this.isNew) {\n            logSettings_1.logger.info('Starting to increment \"%s\"', this.constructor.modelName);\n            for (const field of fields) {\n                logSettings_1.logger.info('Incrementing \"%s\" by %d', field.field, field.incrementBy);\n                this[field.field] += field.incrementBy;\n            }\n        }\n    });\n}\nexports.AutoIncrementSimple = AutoIncrementSimple;\n/** The Schema used for the trackers */\nconst IDSchema = new mongoose.Schema({\n    field: String,\n    modelName: String,\n    count: Number,\n    prefix: String,\n}, { versionKey: false });\nIDSchema.index({ field: 1, modelName: 1, prefix: 1 }, { unique: true });\nexports.AutoIncrementIDSkipSymbol = Symbol('AutoIncrementIDSkip');\n/**\n * The Plugin - ID\n * Increments an counter in an tracking collection\n * @param schema The Schema\n * @param options The Options\n */\nfunction AutoIncrementID(schema, options) {\n    /** The Options with default options applied */\n    const opt = {\n        field: '_id',\n        incrementBy: DEFAULT_INCREMENT,\n        trackerCollection: 'identitycounters',\n        trackerModelName: 'identitycounter',\n        startAt: 0,\n        overwriteModelName: '',\n        prefix: () => null,\n        postIncrement: () => { },\n        ...options,\n    };\n    if (opt.prefix() !== null && opt.field === '_id') {\n        throw new Error('Cannot use _id when prefix is specified');\n    }\n    // check if the field is an number\n    if (!(schema.path(opt.field) instanceof mongoose.Schema.Types.Number)) {\n        throw new Error(`Field \"${opt.field}\" is not an SchemaNumber!`);\n    }\n    logSettings_1.logger.info('AutoIncrementID called with options %O', opt);\n    schema.pre('save', async function AutoIncrementPreSaveID() {\n        const prefixVal = opt.prefix();\n        const db = this.db ?? this.ownerDocument().db;\n        const model = db.model(opt.trackerModelName, IDSchema, opt.trackerCollection);\n        logSettings_1.logger.info('AutoIncrementID PreSave');\n        const originalModelName = this.constructor.modelName;\n        let modelName;\n        if (typeof opt.overwriteModelName === 'function') {\n            modelName = opt.overwriteModelName(originalModelName, this.constructor);\n            if (!modelName || typeof modelName !== 'string') {\n                throw new Error('\"overwriteModelname\" is a function, but did return a falsy type or is not a string!');\n            }\n        }\n        else {\n            modelName = opt.overwriteModelName || originalModelName;\n        }\n        const counter = await model\n            .findOne({\n            modelName: modelName,\n            field: opt.field,\n            prefix: prefixVal,\n        })\n            .lean()\n            .exec();\n        if (!counter) {\n            const count = opt.startAt;\n            await model.create({\n                modelName: modelName,\n                field: opt.field,\n                count,\n                prefix: prefixVal,\n            });\n            this[opt.field] = count;\n            opt.postIncrement(this);\n            return;\n        }\n        if (!this.isNew) {\n            logSettings_1.logger.info('Document is not new, not incrementing');\n            return;\n        }\n        // @ts-expect-error mongoose now restrics indexes to \"string\"\n        if (typeof this[exports.AutoIncrementIDSkipSymbol] === 'boolean' && exports.AutoIncrementIDSkipSymbol) {\n            logSettings_1.logger.info('Symbol \"AutoIncrementIDSkipSymbol\" is set to \"true\", skipping');\n            return;\n        }\n        const leandoc = await model\n            .findOneAndUpdate({\n            field: opt.field,\n            modelName: modelName,\n            prefix: prefixVal,\n        }, {\n            $inc: { count: opt.incrementBy },\n        }, {\n            new: true,\n            fields: { count: 1, _id: 0 },\n            upsert: true,\n            setDefaultsOnInsert: true,\n        })\n            .lean()\n            .exec();\n        if (isNullOrUndefined(leandoc)) {\n            throw new Error(`\"findOneAndUpdate\" incrementing count failed for \"${modelName}\" on field \"${opt.field}\"`);\n        }\n        logSettings_1.logger.info('Setting \"%s\" to \"%d\"', opt.field, leandoc.count);\n        this[opt.field] = leandoc.count;\n        opt.postIncrement(this);\n        return;\n    });\n}\nexports.AutoIncrementID = AutoIncrementID;\ntslib_1.__exportStar(require(\"./types\"), exports);\n"]}