diff options
author | 2020-11-18 23:26:45 +0100 | |
---|---|---|
committer | 2020-11-18 23:26:45 +0100 | |
commit | 81ddf9b700bc48a1f8e472209f080f9c1d9a9b09 (patch) | |
tree | 8b959d50c5a614cbf9fcb346ed556140374d4b6d /node_modules/mongoose/lib/cursor | |
parent | 1870f3fdf43707a15fda0f609a021f516f45eb63 (diff) | |
download | website_creator-81ddf9b700bc48a1f8e472209f080f9c1d9a9b09.tar.gz website_creator-81ddf9b700bc48a1f8e472209f080f9c1d9a9b09.tar.bz2 website_creator-81ddf9b700bc48a1f8e472209f080f9c1d9a9b09.zip |
rm node_modules
Diffstat (limited to 'node_modules/mongoose/lib/cursor')
-rw-r--r-- | node_modules/mongoose/lib/cursor/AggregationCursor.js | 368 | ||||
-rw-r--r-- | node_modules/mongoose/lib/cursor/ChangeStream.js | 61 | ||||
-rw-r--r-- | node_modules/mongoose/lib/cursor/QueryCursor.js | 418 |
3 files changed, 0 insertions, 847 deletions
diff --git a/node_modules/mongoose/lib/cursor/AggregationCursor.js b/node_modules/mongoose/lib/cursor/AggregationCursor.js deleted file mode 100644 index 5023b1c..0000000 --- a/node_modules/mongoose/lib/cursor/AggregationCursor.js +++ /dev/null @@ -1,368 +0,0 @@ -/*! - * Module dependencies. - */ - -'use strict'; - -const MongooseError = require('../error/mongooseError'); -const Readable = require('stream').Readable; -const promiseOrCallback = require('../helpers/promiseOrCallback'); -const eachAsync = require('../helpers/cursor/eachAsync'); -const util = require('util'); - -/** - * An AggregationCursor is a concurrency primitive for processing aggregation - * results one document at a time. It is analogous to QueryCursor. - * - * An AggregationCursor fulfills the Node.js streams3 API, - * in addition to several other mechanisms for loading documents from MongoDB - * one at a time. - * - * Creating an AggregationCursor executes the model's pre aggregate hooks, - * but **not** the model's post aggregate hooks. - * - * Unless you're an advanced user, do **not** instantiate this class directly. - * Use [`Aggregate#cursor()`](/docs/api.html#aggregate_Aggregate-cursor) instead. - * - * @param {Aggregate} agg - * @param {Object} options - * @inherits Readable - * @event `cursor`: Emitted when the cursor is created - * @event `error`: Emitted when an error occurred - * @event `data`: Emitted when the stream is flowing and the next doc is ready - * @event `end`: Emitted when the stream is exhausted - * @api public - */ - -function AggregationCursor(agg) { - Readable.call(this, { objectMode: true }); - - this.cursor = null; - this.agg = agg; - this._transforms = []; - const model = agg._model; - delete agg.options.cursor.useMongooseAggCursor; - this._mongooseOptions = {}; - - _init(model, this, agg); -} - -util.inherits(AggregationCursor, Readable); - -/*! - * ignore - */ - -function _init(model, c, agg) { - if (!model.collection.buffer) { - model.hooks.execPre('aggregate', agg, function() { - c.cursor = model.collection.aggregate(agg._pipeline, agg.options || {}); - c.emit('cursor', c.cursor); - }); - } else { - model.collection.emitter.once('queue', function() { - model.hooks.execPre('aggregate', agg, function() { - c.cursor = model.collection.aggregate(agg._pipeline, agg.options || {}); - c.emit('cursor', c.cursor); - }); - }); - } -} - -/*! - * Necessary to satisfy the Readable API - */ - -AggregationCursor.prototype._read = function() { - const _this = this; - _next(this, function(error, doc) { - if (error) { - return _this.emit('error', error); - } - if (!doc) { - _this.push(null); - _this.cursor.close(function(error) { - if (error) { - return _this.emit('error', error); - } - setTimeout(function() { - // on node >= 14 streams close automatically (gh-8834) - const isNotClosedAutomatically = !_this.destroyed; - if (isNotClosedAutomatically) { - _this.emit('close'); - } - }, 0); - }); - return; - } - _this.push(doc); - }); -}; - -if (Symbol.asyncIterator != null) { - const msg = 'Mongoose does not support using async iterators with an ' + - 'existing aggregation cursor. See http://bit.ly/mongoose-async-iterate-aggregation'; - - AggregationCursor.prototype[Symbol.asyncIterator] = function() { - throw new MongooseError(msg); - }; -} - -/** - * Registers a transform function which subsequently maps documents retrieved - * via the streams interface or `.next()` - * - * ####Example - * - * // Map documents returned by `data` events - * Thing. - * find({ name: /^hello/ }). - * cursor(). - * map(function (doc) { - * doc.foo = "bar"; - * return doc; - * }) - * on('data', function(doc) { console.log(doc.foo); }); - * - * // Or map documents returned by `.next()` - * const cursor = Thing.find({ name: /^hello/ }). - * cursor(). - * map(function (doc) { - * doc.foo = "bar"; - * return doc; - * }); - * cursor.next(function(error, doc) { - * console.log(doc.foo); - * }); - * - * @param {Function} fn - * @return {AggregationCursor} - * @api public - * @method map - */ - -AggregationCursor.prototype.map = function(fn) { - this._transforms.push(fn); - return this; -}; - -/*! - * Marks this cursor as errored - */ - -AggregationCursor.prototype._markError = function(error) { - this._error = error; - return this; -}; - -/** - * Marks this cursor as closed. Will stop streaming and subsequent calls to - * `next()` will error. - * - * @param {Function} callback - * @return {Promise} - * @api public - * @method close - * @emits close - * @see MongoDB driver cursor#close http://mongodb.github.io/node-mongodb-native/2.1/api/Cursor.html#close - */ - -AggregationCursor.prototype.close = function(callback) { - return promiseOrCallback(callback, cb => { - this.cursor.close(error => { - if (error) { - cb(error); - return this.listeners('error').length > 0 && this.emit('error', error); - } - this.emit('close'); - cb(null); - }); - }); -}; - -/** - * Get the next document from this cursor. Will return `null` when there are - * no documents left. - * - * @param {Function} callback - * @return {Promise} - * @api public - * @method next - */ - -AggregationCursor.prototype.next = function(callback) { - return promiseOrCallback(callback, cb => { - _next(this, cb); - }); -}; - -/** - * Execute `fn` for every document in the cursor. If `fn` returns a promise, - * will wait for the promise to resolve before iterating on to the next one. - * Returns a promise that resolves when done. - * - * @param {Function} fn - * @param {Object} [options] - * @param {Number} [options.parallel] the number of promises to execute in parallel. Defaults to 1. - * @param {Function} [callback] executed when all docs have been processed - * @return {Promise} - * @api public - * @method eachAsync - */ - -AggregationCursor.prototype.eachAsync = function(fn, opts, callback) { - const _this = this; - if (typeof opts === 'function') { - callback = opts; - opts = {}; - } - opts = opts || {}; - - return eachAsync(function(cb) { return _next(_this, cb); }, fn, opts, callback); -}; - -/** - * Returns an asyncIterator for use with [`for/await/of` loops](https://thecodebarbarian.com/getting-started-with-async-iterators-in-node-js - * You do not need to call this function explicitly, the JavaScript runtime - * will call it for you. - * - * ####Example - * - * // Async iterator without explicitly calling `cursor()`. Mongoose still - * // creates an AggregationCursor instance internally. - * const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]); - * for await (const doc of agg) { - * console.log(doc.name); - * } - * - * // You can also use an AggregationCursor instance for async iteration - * const cursor = Model.aggregate([{ $match: { age: { $gte: 25 } } }]).cursor(); - * for await (const doc of cursor) { - * console.log(doc.name); - * } - * - * Node.js 10.x supports async iterators natively without any flags. You can - * enable async iterators in Node.js 8.x using the [`--harmony_async_iteration` flag](https://github.com/tc39/proposal-async-iteration/issues/117#issuecomment-346695187). - * - * **Note:** This function is not set if `Symbol.asyncIterator` is undefined. If - * `Symbol.asyncIterator` is undefined, that means your Node.js version does not - * support async iterators. - * - * @method Symbol.asyncIterator - * @memberOf AggregationCursor - * @instance - * @api public - */ - -if (Symbol.asyncIterator != null) { - AggregationCursor.prototype[Symbol.asyncIterator] = function() { - return this.transformNull()._transformForAsyncIterator(); - }; -} - -/*! - * ignore - */ - -AggregationCursor.prototype._transformForAsyncIterator = function() { - if (this._transforms.indexOf(_transformForAsyncIterator) === -1) { - this.map(_transformForAsyncIterator); - } - return this; -}; - -/*! - * ignore - */ - -AggregationCursor.prototype.transformNull = function(val) { - if (arguments.length === 0) { - val = true; - } - this._mongooseOptions.transformNull = val; - return this; -}; - -/*! - * ignore - */ - -function _transformForAsyncIterator(doc) { - return doc == null ? { done: true } : { value: doc, done: false }; -} - -/** - * Adds a [cursor flag](http://mongodb.github.io/node-mongodb-native/2.2/api/Cursor.html#addCursorFlag). - * Useful for setting the `noCursorTimeout` and `tailable` flags. - * - * @param {String} flag - * @param {Boolean} value - * @return {AggregationCursor} this - * @api public - * @method addCursorFlag - */ - -AggregationCursor.prototype.addCursorFlag = function(flag, value) { - const _this = this; - _waitForCursor(this, function() { - _this.cursor.addCursorFlag(flag, value); - }); - return this; -}; - -/*! - * ignore - */ - -function _waitForCursor(ctx, cb) { - if (ctx.cursor) { - return cb(); - } - ctx.once('cursor', function() { - cb(); - }); -} - -/*! - * Get the next doc from the underlying cursor and mongooseify it - * (populate, etc.) - */ - -function _next(ctx, cb) { - let callback = cb; - if (ctx._transforms.length) { - callback = function(err, doc) { - if (err || (doc === null && !ctx._mongooseOptions.transformNull)) { - return cb(err, doc); - } - cb(err, ctx._transforms.reduce(function(doc, fn) { - return fn(doc); - }, doc)); - }; - } - - if (ctx._error) { - return process.nextTick(function() { - callback(ctx._error); - }); - } - - if (ctx.cursor) { - return ctx.cursor.next(function(error, doc) { - if (error) { - return callback(error); - } - if (!doc) { - return callback(null, null); - } - - callback(null, doc); - }); - } else { - ctx.once('cursor', function() { - _next(ctx, cb); - }); - } -} - -module.exports = AggregationCursor; diff --git a/node_modules/mongoose/lib/cursor/ChangeStream.js b/node_modules/mongoose/lib/cursor/ChangeStream.js deleted file mode 100644 index b3445b0..0000000 --- a/node_modules/mongoose/lib/cursor/ChangeStream.js +++ /dev/null @@ -1,61 +0,0 @@ -'use strict'; - -/*! - * Module dependencies. - */ - -const EventEmitter = require('events').EventEmitter; - -/*! - * ignore - */ - -class ChangeStream extends EventEmitter { - constructor(changeStreamThunk, pipeline, options) { - super(); - - this.driverChangeStream = null; - this.closed = false; - this.pipeline = pipeline; - this.options = options; - - // This wrapper is necessary because of buffering. - changeStreamThunk((err, driverChangeStream) => { - if (err != null) { - this.emit('error', err); - return; - } - - this.driverChangeStream = driverChangeStream; - this._bindEvents(); - this.emit('ready'); - }); - } - - _bindEvents() { - this.driverChangeStream.on('close', () => { - this.closed = true; - }); - - ['close', 'change', 'end', 'error'].forEach(ev => { - this.driverChangeStream.on(ev, data => this.emit(ev, data)); - }); - } - - _queue(cb) { - this.once('ready', () => cb()); - } - - close() { - this.closed = true; - if (this.driverChangeStream) { - this.driverChangeStream.close(); - } - } -} - -/*! - * ignore - */ - -module.exports = ChangeStream; diff --git a/node_modules/mongoose/lib/cursor/QueryCursor.js b/node_modules/mongoose/lib/cursor/QueryCursor.js deleted file mode 100644 index 2b5f2c1..0000000 --- a/node_modules/mongoose/lib/cursor/QueryCursor.js +++ /dev/null @@ -1,418 +0,0 @@ -/*! - * Module dependencies. - */ - -'use strict'; - -const Readable = require('stream').Readable; -const promiseOrCallback = require('../helpers/promiseOrCallback'); -const eachAsync = require('../helpers/cursor/eachAsync'); -const helpers = require('../queryhelpers'); -const util = require('util'); - -/** - * A QueryCursor is a concurrency primitive for processing query results - * one document at a time. A QueryCursor fulfills the Node.js streams3 API, - * in addition to several other mechanisms for loading documents from MongoDB - * one at a time. - * - * QueryCursors execute the model's pre find hooks, but **not** the model's - * post find hooks. - * - * Unless you're an advanced user, do **not** instantiate this class directly. - * Use [`Query#cursor()`](/docs/api.html#query_Query-cursor) instead. - * - * @param {Query} query - * @param {Object} options query options passed to `.find()` - * @inherits Readable - * @event `cursor`: Emitted when the cursor is created - * @event `error`: Emitted when an error occurred - * @event `data`: Emitted when the stream is flowing and the next doc is ready - * @event `end`: Emitted when the stream is exhausted - * @api public - */ - -function QueryCursor(query, options) { - Readable.call(this, { objectMode: true }); - - this.cursor = null; - this.query = query; - const _this = this; - const model = query.model; - this._mongooseOptions = {}; - this._transforms = []; - this.model = model; - this.options = options || {}; - - model.hooks.execPre('find', query, () => { - this._transforms = this._transforms.concat(query._transforms.slice()); - if (this.options.transform) { - this._transforms.push(options.transform); - } - // Re: gh-8039, you need to set the `cursor.batchSize` option, top-level - // `batchSize` option doesn't work. - if (this.options.batchSize) { - this.options.cursor = options.cursor || {}; - this.options.cursor.batchSize = options.batchSize; - } - model.collection.find(query._conditions, this.options, function(err, cursor) { - if (_this._error) { - cursor.close(function() {}); - _this.listeners('error').length > 0 && _this.emit('error', _this._error); - } - if (err) { - return _this.emit('error', err); - } - _this.cursor = cursor; - _this.emit('cursor', cursor); - }); - }); -} - -util.inherits(QueryCursor, Readable); - -/*! - * Necessary to satisfy the Readable API - */ - -QueryCursor.prototype._read = function() { - const _this = this; - _next(this, function(error, doc) { - if (error) { - return _this.emit('error', error); - } - if (!doc) { - _this.push(null); - _this.cursor.close(function(error) { - if (error) { - return _this.emit('error', error); - } - setTimeout(function() { - // on node >= 14 streams close automatically (gh-8834) - const isNotClosedAutomatically = !_this.destroyed; - if (isNotClosedAutomatically) { - _this.emit('close'); - } - }, 0); - }); - return; - } - _this.push(doc); - }); -}; - -/** - * Registers a transform function which subsequently maps documents retrieved - * via the streams interface or `.next()` - * - * ####Example - * - * // Map documents returned by `data` events - * Thing. - * find({ name: /^hello/ }). - * cursor(). - * map(function (doc) { - * doc.foo = "bar"; - * return doc; - * }) - * on('data', function(doc) { console.log(doc.foo); }); - * - * // Or map documents returned by `.next()` - * const cursor = Thing.find({ name: /^hello/ }). - * cursor(). - * map(function (doc) { - * doc.foo = "bar"; - * return doc; - * }); - * cursor.next(function(error, doc) { - * console.log(doc.foo); - * }); - * - * @param {Function} fn - * @return {QueryCursor} - * @api public - * @method map - */ - -QueryCursor.prototype.map = function(fn) { - this._transforms.push(fn); - return this; -}; - -/*! - * Marks this cursor as errored - */ - -QueryCursor.prototype._markError = function(error) { - this._error = error; - return this; -}; - -/** - * Marks this cursor as closed. Will stop streaming and subsequent calls to - * `next()` will error. - * - * @param {Function} callback - * @return {Promise} - * @api public - * @method close - * @emits close - * @see MongoDB driver cursor#close http://mongodb.github.io/node-mongodb-native/2.1/api/Cursor.html#close - */ - -QueryCursor.prototype.close = function(callback) { - return promiseOrCallback(callback, cb => { - this.cursor.close(error => { - if (error) { - cb(error); - return this.listeners('error').length > 0 && this.emit('error', error); - } - this.emit('close'); - cb(null); - }); - }, this.model.events); -}; - -/** - * Get the next document from this cursor. Will return `null` when there are - * no documents left. - * - * @param {Function} callback - * @return {Promise} - * @api public - * @method next - */ - -QueryCursor.prototype.next = function(callback) { - return promiseOrCallback(callback, cb => { - _next(this, function(error, doc) { - if (error) { - return cb(error); - } - cb(null, doc); - }); - }, this.model.events); -}; - -/** - * Execute `fn` for every document in the cursor. If `fn` returns a promise, - * will wait for the promise to resolve before iterating on to the next one. - * Returns a promise that resolves when done. - * - * ####Example - * - * // Iterate over documents asynchronously - * Thing. - * find({ name: /^hello/ }). - * cursor(). - * eachAsync(async function (doc, i) { - * doc.foo = doc.bar + i; - * await doc.save(); - * }) - * - * @param {Function} fn - * @param {Object} [options] - * @param {Number} [options.parallel] the number of promises to execute in parallel. Defaults to 1. - * @param {Function} [callback] executed when all docs have been processed - * @return {Promise} - * @api public - * @method eachAsync - */ - -QueryCursor.prototype.eachAsync = function(fn, opts, callback) { - const _this = this; - if (typeof opts === 'function') { - callback = opts; - opts = {}; - } - opts = opts || {}; - - return eachAsync(function(cb) { return _next(_this, cb); }, fn, opts, callback); -}; - -/** - * The `options` passed in to the `QueryCursor` constructor. - * - * @api public - * @property options - */ - -QueryCursor.prototype.options; - -/** - * Adds a [cursor flag](http://mongodb.github.io/node-mongodb-native/2.2/api/Cursor.html#addCursorFlag). - * Useful for setting the `noCursorTimeout` and `tailable` flags. - * - * @param {String} flag - * @param {Boolean} value - * @return {AggregationCursor} this - * @api public - * @method addCursorFlag - */ - -QueryCursor.prototype.addCursorFlag = function(flag, value) { - const _this = this; - _waitForCursor(this, function() { - _this.cursor.addCursorFlag(flag, value); - }); - return this; -}; - -/*! - * ignore - */ - -QueryCursor.prototype.transformNull = function(val) { - if (arguments.length === 0) { - val = true; - } - this._mongooseOptions.transformNull = val; - return this; -}; - -/*! - * ignore - */ - -QueryCursor.prototype._transformForAsyncIterator = function() { - if (this._transforms.indexOf(_transformForAsyncIterator) === -1) { - this.map(_transformForAsyncIterator); - } - return this; -}; - -/** - * Returns an asyncIterator for use with [`for/await/of` loops](https://thecodebarbarian.com/getting-started-with-async-iterators-in-node-js). - * You do not need to call this function explicitly, the JavaScript runtime - * will call it for you. - * - * ####Example - * - * // Works without using `cursor()` - * for await (const doc of Model.find([{ $sort: { name: 1 } }])) { - * console.log(doc.name); - * } - * - * // Can also use `cursor()` - * for await (const doc of Model.find([{ $sort: { name: 1 } }]).cursor()) { - * console.log(doc.name); - * } - * - * Node.js 10.x supports async iterators natively without any flags. You can - * enable async iterators in Node.js 8.x using the [`--harmony_async_iteration` flag](https://github.com/tc39/proposal-async-iteration/issues/117#issuecomment-346695187). - * - * **Note:** This function is not if `Symbol.asyncIterator` is undefined. If - * `Symbol.asyncIterator` is undefined, that means your Node.js version does not - * support async iterators. - * - * @method Symbol.asyncIterator - * @memberOf Query - * @instance - * @api public - */ - -if (Symbol.asyncIterator != null) { - QueryCursor.prototype[Symbol.asyncIterator] = function() { - return this.transformNull()._transformForAsyncIterator(); - }; -} - -/*! - * ignore - */ - -function _transformForAsyncIterator(doc) { - return doc == null ? { done: true } : { value: doc, done: false }; -} - -/*! - * Get the next doc from the underlying cursor and mongooseify it - * (populate, etc.) - */ - -function _next(ctx, cb) { - let callback = cb; - if (ctx._transforms.length) { - callback = function(err, doc) { - if (err || (doc === null && !ctx._mongooseOptions.transformNull)) { - return cb(err, doc); - } - cb(err, ctx._transforms.reduce(function(doc, fn) { - return fn.call(ctx, doc); - }, doc)); - }; - } - - if (ctx._error) { - return process.nextTick(function() { - callback(ctx._error); - }); - } - - if (ctx.cursor) { - return ctx.cursor.next(function(error, doc) { - if (error) { - return callback(error); - } - if (!doc) { - return callback(null, null); - } - - const opts = ctx.query._mongooseOptions; - if (!opts.populate) { - return opts.lean ? - callback(null, doc) : - _create(ctx, doc, null, callback); - } - - const pop = helpers.preparePopulationOptionsMQ(ctx.query, - ctx.query._mongooseOptions); - pop.__noPromise = true; - ctx.query.model.populate(doc, pop, function(err, doc) { - if (err) { - return callback(err); - } - return opts.lean ? - callback(null, doc) : - _create(ctx, doc, pop, callback); - }); - }); - } else { - ctx.once('cursor', function() { - _next(ctx, cb); - }); - } -} - -/*! - * ignore - */ - -function _waitForCursor(ctx, cb) { - if (ctx.cursor) { - return cb(); - } - ctx.once('cursor', function() { - cb(); - }); -} - -/*! - * Convert a raw doc into a full mongoose doc. - */ - -function _create(ctx, doc, populatedIds, cb) { - const instance = helpers.createModel(ctx.query.model, doc, ctx.query._fields); - const opts = populatedIds ? - { populated: populatedIds } : - undefined; - - instance.init(doc, opts, function(err) { - if (err) { - return cb(err); - } - cb(null, instance); - }); -} - -module.exports = QueryCursor; |