├── .editorconfig ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── index.js ├── package-lock.json ├── package.json └── test └── index_test.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | insert_final_newline = true 6 | charset = utf-8 7 | indent_size = 2 8 | indent_style = space 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | *~ 3 | *\#* 4 | 5 | .DS_Store 6 | node_modules 7 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: "node_js" 2 | node_js: 3 | - "8" 4 | - "7" 5 | - "6" 6 | - "5" 7 | - "4" 8 | services: 9 | - mongodb 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | copyright (c) 2012-2017 Nicholas Penree 2 | Original work: copyright (c) 2012 Jamplify 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in 12 | all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Mongoose findOrCreate Plugin [![Build Status](https://secure.travis-ci.org/drudge/mongoose-findorcreate.png?branch=master)](https://travis-ci.org/drudge/mongoose-findorcreate) 2 | ============================ 3 | 4 | Simple plugin for [Mongoose](https://github.com/LearnBoost/mongoose) which adds 5 | a findOrCreate method to models. This is useful for libraries like 6 | [Passport](http://passportjs.org) which require it. 7 | 8 | ## Installation 9 | 10 | `npm install mongoose-findorcreate` 11 | 12 | ## Usage 13 | 14 | ```javascript 15 | var findOrCreate = require('mongoose-findorcreate') 16 | var ClickSchema = new Schema({ ... }); 17 | ClickSchema.plugin(findOrCreate); 18 | var Click = mongoose.model('Click', ClickSchema); 19 | ``` 20 | 21 | The Click model now has a findOrCreate static method 22 | 23 | ```javascript 24 | Click.findOrCreate({ip: '127.0.0.1'}, function(err, click, created) { 25 | // created will be true here 26 | console.log('A new click from "%s" was inserted', click.ip); 27 | Click.findOrCreate({}, function(err, click, created) { 28 | // created will be false here 29 | console.log('Did not create a new click for "%s"', click.ip); 30 | }) 31 | }); 32 | ``` 33 | 34 | You can also include properties that aren't used in the 35 | find call, but will be added to the object if it is created. 36 | 37 | ```javascript 38 | Click.create({ip: '127.0.0.1'}, {browser: 'Mozilla'}, function(err, val) { 39 | Click.findOrCreate({ip: '127.0.0.1'}, {browser: 'Chrome'}, function(err, click) { 40 | console.log('A click from "%s" using "%s" was found', click.ip, click.browser); 41 | // prints A click from "127.0.0.1" using "Mozilla" was found 42 | }) 43 | }); 44 | ``` 45 | 46 | ### Promise Support 47 | 48 | Choose your Promise library by setting 49 | [`Mongoose.Promise`](http://mongoosejs.com/docs/promises.html). 50 | 51 | The returned `Promise` shall resolve to an object with keys `doc` and 52 | `created` on success. It shall be rejected with `err` on failure. 53 | 54 | ```javascript 55 | // Use environment-provided Promise (necessary to silence a Mongoose warning). 56 | mongoose.Promise = Promise; 57 | // To a findOrCreate(). 58 | Click.findOrCreate({ip: '127.0.0.2'}).then(function (result) { 59 | click = result.doc; 60 | console.log('A click from', click.ip, ' using ', click.browser, ' was ', click.created ? 'created' : 'found'); 61 | }) 62 | ``` 63 | 64 | ## License 65 | 66 | (The MIT License) 67 | 68 | Copyright (c) 2012-2017 Nicholas Penree <nick@penree.com> 69 | 70 | Based on [supergoose](https://github.com/jamplify/supergoose): Copyright (c) 2012 Jamplify 71 | 72 | Permission is hereby granted, free of charge, to any person obtaining 73 | a copy of this software and associated documentation files (the 74 | 'Software'), to deal in the Software without restriction, including 75 | without limitation the rights to use, copy, modify, merge, publish, 76 | distribute, sublicense, and/or sell copies of the Software, and to 77 | permit persons to whom the Software is furnished to do so, subject to 78 | the following conditions: 79 | 80 | The above copyright notice and this permission notice shall be 81 | included in all copies or substantial portions of the Software. 82 | 83 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 84 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 85 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 86 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 87 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 88 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 89 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 90 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Mongoose findOrCreate Plugin 3 | * Copyright(c) 2012 Nicholas Penree 4 | * MIT Licensed 5 | */ 6 | 7 | function findOrCreatePlugin(schema, options) { 8 | schema.statics.findOrCreate = function findOrCreate(conditions, doc, options, callback) { 9 | var self = this; 10 | 11 | var Promise = global.Promise.ES6 ? global.Promise.ES6 : global.Promise; 12 | if (arguments.length < 4) { 13 | if (typeof options === 'function') { 14 | // Scenario: findOrCreate(conditions, doc, callback) 15 | callback = options; 16 | options = {}; 17 | } else if (typeof doc === 'function') { 18 | // Scenario: findOrCreate(conditions, callback); 19 | callback = doc; 20 | doc = {}; 21 | options = {}; 22 | } else { 23 | // Scenario: findOrCreate(conditions[, doc[, options]]) 24 | return new Promise(function(resolve, reject) { 25 | self.findOrCreate(conditions, doc, options, function (ex, result, created) { 26 | if (ex) { 27 | reject(ex); 28 | } else { 29 | resolve({ 30 | doc: result, 31 | created: created, 32 | }); 33 | } 34 | }); 35 | }); 36 | } 37 | } 38 | //mongoose 7.0.x does not support callbacks so we use findOne().exec().then().catch() 39 | this.findOne(conditions).exec().then(function(result){ 40 | if(result == null){ 41 | for(var key in doc){ 42 | conditions[key] = doc[key]; 43 | } 44 | // Prune any keys starting with `$` since those are query operators and not data. 45 | // This library does not support models which have keys starting with `$`. 46 | removeQueryOperators(conditions); 47 | var obj = new self(conditions); 48 | obj.save().then(function(result){ 49 | err = null; 50 | callback(err,obj,true); 51 | }).catch(function(err){ 52 | result = null; 53 | callback(err,result,false); 54 | }); 55 | 56 | } 57 | else{ 58 | if(options && options.upsert){ 59 | self.updateOne(conditions,doc).exec().then(function(count){ 60 | self.findById(result._id).exec().then(function(result){ 61 | 62 | err = null; 63 | callback(err,result,false); 64 | }).catch(function(err){ 65 | result = null; 66 | callback(err,result,false); 67 | }); 68 | }).catch(function(err){ 69 | result = null; 70 | callback(err,result,false); 71 | }); 72 | } 73 | else{ 74 | 75 | err = null; 76 | callback(err,result,false); 77 | } 78 | } 79 | 80 | 81 | }).catch(function(err){ 82 | result = null; 83 | callback(err,result,false); 84 | }); 85 | }; 86 | } 87 | 88 | function removeQueryOperators(o) { 89 | var keys = Object.keys(o); 90 | 91 | for (var z = 0; z < keys.length; z++) { 92 | var key = keys[z]; 93 | if (key[0] === '$') { 94 | delete o[key]; 95 | } else { 96 | var subObject = o[key]; 97 | if (typeof subObject === 'object' && subObject !== null) { 98 | removeQueryOperators(subObject); 99 | } 100 | } 101 | } 102 | } 103 | 104 | /** 105 | * Expose `findOrCreatePlugin`. 106 | */ 107 | 108 | module.exports = findOrCreatePlugin; 109 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mongoose-findorcreate", 3 | "version": "4.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "mongoose-findorcreate", 9 | "version": "4.0.0", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "mocha": "^10.2.0", 13 | "mongoose": "^7.0.3", 14 | "should": "^13.2.3" 15 | } 16 | }, 17 | "node_modules/@types/node": { 18 | "version": "18.15.9", 19 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.9.tgz", 20 | "integrity": "sha512-dUxhiNzBLr6IqlZXz6e/rN2YQXlFgOei/Dxy+e3cyXTJ4txSUbGT2/fmnD6zd/75jDMeW5bDee+YXxlFKHoV0A==", 21 | "dev": true 22 | }, 23 | "node_modules/@types/webidl-conversions": { 24 | "version": "7.0.0", 25 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 26 | "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==", 27 | "dev": true 28 | }, 29 | "node_modules/@types/whatwg-url": { 30 | "version": "8.2.2", 31 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", 32 | "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", 33 | "dev": true, 34 | "dependencies": { 35 | "@types/node": "*", 36 | "@types/webidl-conversions": "*" 37 | } 38 | }, 39 | "node_modules/ansi-colors": { 40 | "version": "4.1.1", 41 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 42 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 43 | "dev": true, 44 | "engines": { 45 | "node": ">=6" 46 | } 47 | }, 48 | "node_modules/ansi-regex": { 49 | "version": "5.0.1", 50 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 51 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 52 | "dev": true, 53 | "engines": { 54 | "node": ">=8" 55 | } 56 | }, 57 | "node_modules/ansi-styles": { 58 | "version": "4.3.0", 59 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 60 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 61 | "dev": true, 62 | "dependencies": { 63 | "color-convert": "^2.0.1" 64 | }, 65 | "engines": { 66 | "node": ">=8" 67 | }, 68 | "funding": { 69 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 70 | } 71 | }, 72 | "node_modules/anymatch": { 73 | "version": "3.1.3", 74 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 75 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 76 | "dev": true, 77 | "dependencies": { 78 | "normalize-path": "^3.0.0", 79 | "picomatch": "^2.0.4" 80 | }, 81 | "engines": { 82 | "node": ">= 8" 83 | } 84 | }, 85 | "node_modules/argparse": { 86 | "version": "2.0.1", 87 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 88 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 89 | "dev": true 90 | }, 91 | "node_modules/balanced-match": { 92 | "version": "1.0.2", 93 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 94 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 95 | "dev": true 96 | }, 97 | "node_modules/binary-extensions": { 98 | "version": "2.2.0", 99 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 100 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 101 | "dev": true, 102 | "engines": { 103 | "node": ">=8" 104 | } 105 | }, 106 | "node_modules/brace-expansion": { 107 | "version": "2.0.1", 108 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 109 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 110 | "dev": true, 111 | "dependencies": { 112 | "balanced-match": "^1.0.0" 113 | } 114 | }, 115 | "node_modules/braces": { 116 | "version": "3.0.2", 117 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 118 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 119 | "dev": true, 120 | "dependencies": { 121 | "fill-range": "^7.0.1" 122 | }, 123 | "engines": { 124 | "node": ">=8" 125 | } 126 | }, 127 | "node_modules/browser-stdout": { 128 | "version": "1.3.1", 129 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 130 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 131 | "dev": true 132 | }, 133 | "node_modules/bson": { 134 | "version": "5.1.0", 135 | "resolved": "https://registry.npmjs.org/bson/-/bson-5.1.0.tgz", 136 | "integrity": "sha512-FEecNHkhYRBe7X9KDkdG12xNuz5VHGeH6mCE0B5sBmYtiR/Ux/9vUH/v4NUoBCDr6NuEhvahjoLiiRogptVW0A==", 137 | "dev": true, 138 | "engines": { 139 | "node": ">=14.20.1" 140 | } 141 | }, 142 | "node_modules/camelcase": { 143 | "version": "6.3.0", 144 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 145 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 146 | "dev": true, 147 | "engines": { 148 | "node": ">=10" 149 | }, 150 | "funding": { 151 | "url": "https://github.com/sponsors/sindresorhus" 152 | } 153 | }, 154 | "node_modules/chalk": { 155 | "version": "4.1.2", 156 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 157 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 158 | "dev": true, 159 | "dependencies": { 160 | "ansi-styles": "^4.1.0", 161 | "supports-color": "^7.1.0" 162 | }, 163 | "engines": { 164 | "node": ">=10" 165 | }, 166 | "funding": { 167 | "url": "https://github.com/chalk/chalk?sponsor=1" 168 | } 169 | }, 170 | "node_modules/chalk/node_modules/supports-color": { 171 | "version": "7.2.0", 172 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 173 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 174 | "dev": true, 175 | "dependencies": { 176 | "has-flag": "^4.0.0" 177 | }, 178 | "engines": { 179 | "node": ">=8" 180 | } 181 | }, 182 | "node_modules/chokidar": { 183 | "version": "3.5.3", 184 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 185 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 186 | "dev": true, 187 | "funding": [ 188 | { 189 | "type": "individual", 190 | "url": "https://paulmillr.com/funding/" 191 | } 192 | ], 193 | "dependencies": { 194 | "anymatch": "~3.1.2", 195 | "braces": "~3.0.2", 196 | "glob-parent": "~5.1.2", 197 | "is-binary-path": "~2.1.0", 198 | "is-glob": "~4.0.1", 199 | "normalize-path": "~3.0.0", 200 | "readdirp": "~3.6.0" 201 | }, 202 | "engines": { 203 | "node": ">= 8.10.0" 204 | }, 205 | "optionalDependencies": { 206 | "fsevents": "~2.3.2" 207 | } 208 | }, 209 | "node_modules/cliui": { 210 | "version": "7.0.4", 211 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 212 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 213 | "dev": true, 214 | "dependencies": { 215 | "string-width": "^4.2.0", 216 | "strip-ansi": "^6.0.0", 217 | "wrap-ansi": "^7.0.0" 218 | } 219 | }, 220 | "node_modules/color-convert": { 221 | "version": "2.0.1", 222 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 223 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 224 | "dev": true, 225 | "dependencies": { 226 | "color-name": "~1.1.4" 227 | }, 228 | "engines": { 229 | "node": ">=7.0.0" 230 | } 231 | }, 232 | "node_modules/color-name": { 233 | "version": "1.1.4", 234 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 235 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 236 | "dev": true 237 | }, 238 | "node_modules/concat-map": { 239 | "version": "0.0.1", 240 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 241 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 242 | "dev": true 243 | }, 244 | "node_modules/debug": { 245 | "version": "4.3.4", 246 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 247 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 248 | "dev": true, 249 | "dependencies": { 250 | "ms": "2.1.2" 251 | }, 252 | "engines": { 253 | "node": ">=6.0" 254 | }, 255 | "peerDependenciesMeta": { 256 | "supports-color": { 257 | "optional": true 258 | } 259 | } 260 | }, 261 | "node_modules/debug/node_modules/ms": { 262 | "version": "2.1.2", 263 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 264 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 265 | "dev": true 266 | }, 267 | "node_modules/decamelize": { 268 | "version": "4.0.0", 269 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 270 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 271 | "dev": true, 272 | "engines": { 273 | "node": ">=10" 274 | }, 275 | "funding": { 276 | "url": "https://github.com/sponsors/sindresorhus" 277 | } 278 | }, 279 | "node_modules/diff": { 280 | "version": "5.0.0", 281 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 282 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 283 | "dev": true, 284 | "engines": { 285 | "node": ">=0.3.1" 286 | } 287 | }, 288 | "node_modules/emoji-regex": { 289 | "version": "8.0.0", 290 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 291 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 292 | "dev": true 293 | }, 294 | "node_modules/escalade": { 295 | "version": "3.1.1", 296 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 297 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 298 | "dev": true, 299 | "engines": { 300 | "node": ">=6" 301 | } 302 | }, 303 | "node_modules/escape-string-regexp": { 304 | "version": "4.0.0", 305 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 306 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 307 | "dev": true, 308 | "engines": { 309 | "node": ">=10" 310 | }, 311 | "funding": { 312 | "url": "https://github.com/sponsors/sindresorhus" 313 | } 314 | }, 315 | "node_modules/fill-range": { 316 | "version": "7.0.1", 317 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 318 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 319 | "dev": true, 320 | "dependencies": { 321 | "to-regex-range": "^5.0.1" 322 | }, 323 | "engines": { 324 | "node": ">=8" 325 | } 326 | }, 327 | "node_modules/find-up": { 328 | "version": "5.0.0", 329 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 330 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 331 | "dev": true, 332 | "dependencies": { 333 | "locate-path": "^6.0.0", 334 | "path-exists": "^4.0.0" 335 | }, 336 | "engines": { 337 | "node": ">=10" 338 | }, 339 | "funding": { 340 | "url": "https://github.com/sponsors/sindresorhus" 341 | } 342 | }, 343 | "node_modules/flat": { 344 | "version": "5.0.2", 345 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 346 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 347 | "dev": true, 348 | "bin": { 349 | "flat": "cli.js" 350 | } 351 | }, 352 | "node_modules/fs.realpath": { 353 | "version": "1.0.0", 354 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 355 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 356 | "dev": true 357 | }, 358 | "node_modules/fsevents": { 359 | "version": "2.3.2", 360 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 361 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 362 | "dev": true, 363 | "hasInstallScript": true, 364 | "optional": true, 365 | "os": [ 366 | "darwin" 367 | ], 368 | "engines": { 369 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 370 | } 371 | }, 372 | "node_modules/get-caller-file": { 373 | "version": "2.0.5", 374 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 375 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 376 | "dev": true, 377 | "engines": { 378 | "node": "6.* || 8.* || >= 10.*" 379 | } 380 | }, 381 | "node_modules/glob": { 382 | "version": "7.2.0", 383 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 384 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 385 | "dev": true, 386 | "dependencies": { 387 | "fs.realpath": "^1.0.0", 388 | "inflight": "^1.0.4", 389 | "inherits": "2", 390 | "minimatch": "^3.0.4", 391 | "once": "^1.3.0", 392 | "path-is-absolute": "^1.0.0" 393 | }, 394 | "engines": { 395 | "node": "*" 396 | }, 397 | "funding": { 398 | "url": "https://github.com/sponsors/isaacs" 399 | } 400 | }, 401 | "node_modules/glob-parent": { 402 | "version": "5.1.2", 403 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 404 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 405 | "dev": true, 406 | "dependencies": { 407 | "is-glob": "^4.0.1" 408 | }, 409 | "engines": { 410 | "node": ">= 6" 411 | } 412 | }, 413 | "node_modules/glob/node_modules/brace-expansion": { 414 | "version": "1.1.11", 415 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 416 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 417 | "dev": true, 418 | "dependencies": { 419 | "balanced-match": "^1.0.0", 420 | "concat-map": "0.0.1" 421 | } 422 | }, 423 | "node_modules/glob/node_modules/minimatch": { 424 | "version": "3.1.2", 425 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 426 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 427 | "dev": true, 428 | "dependencies": { 429 | "brace-expansion": "^1.1.7" 430 | }, 431 | "engines": { 432 | "node": "*" 433 | } 434 | }, 435 | "node_modules/has-flag": { 436 | "version": "4.0.0", 437 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 438 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 439 | "dev": true, 440 | "engines": { 441 | "node": ">=8" 442 | } 443 | }, 444 | "node_modules/he": { 445 | "version": "1.2.0", 446 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 447 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 448 | "dev": true, 449 | "bin": { 450 | "he": "bin/he" 451 | } 452 | }, 453 | "node_modules/inflight": { 454 | "version": "1.0.6", 455 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 456 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 457 | "dev": true, 458 | "dependencies": { 459 | "once": "^1.3.0", 460 | "wrappy": "1" 461 | } 462 | }, 463 | "node_modules/inherits": { 464 | "version": "2.0.4", 465 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 466 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 467 | "dev": true 468 | }, 469 | "node_modules/ip": { 470 | "version": "2.0.0", 471 | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", 472 | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", 473 | "dev": true 474 | }, 475 | "node_modules/is-binary-path": { 476 | "version": "2.1.0", 477 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 478 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 479 | "dev": true, 480 | "dependencies": { 481 | "binary-extensions": "^2.0.0" 482 | }, 483 | "engines": { 484 | "node": ">=8" 485 | } 486 | }, 487 | "node_modules/is-extglob": { 488 | "version": "2.1.1", 489 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 490 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 491 | "dev": true, 492 | "engines": { 493 | "node": ">=0.10.0" 494 | } 495 | }, 496 | "node_modules/is-fullwidth-code-point": { 497 | "version": "3.0.0", 498 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 499 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 500 | "dev": true, 501 | "engines": { 502 | "node": ">=8" 503 | } 504 | }, 505 | "node_modules/is-glob": { 506 | "version": "4.0.3", 507 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 508 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 509 | "dev": true, 510 | "dependencies": { 511 | "is-extglob": "^2.1.1" 512 | }, 513 | "engines": { 514 | "node": ">=0.10.0" 515 | } 516 | }, 517 | "node_modules/is-number": { 518 | "version": "7.0.0", 519 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 520 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 521 | "dev": true, 522 | "engines": { 523 | "node": ">=0.12.0" 524 | } 525 | }, 526 | "node_modules/is-plain-obj": { 527 | "version": "2.1.0", 528 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 529 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 530 | "dev": true, 531 | "engines": { 532 | "node": ">=8" 533 | } 534 | }, 535 | "node_modules/is-unicode-supported": { 536 | "version": "0.1.0", 537 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 538 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 539 | "dev": true, 540 | "engines": { 541 | "node": ">=10" 542 | }, 543 | "funding": { 544 | "url": "https://github.com/sponsors/sindresorhus" 545 | } 546 | }, 547 | "node_modules/js-yaml": { 548 | "version": "4.1.0", 549 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 550 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 551 | "dev": true, 552 | "dependencies": { 553 | "argparse": "^2.0.1" 554 | }, 555 | "bin": { 556 | "js-yaml": "bin/js-yaml.js" 557 | } 558 | }, 559 | "node_modules/kareem": { 560 | "version": "2.5.1", 561 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", 562 | "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", 563 | "dev": true, 564 | "engines": { 565 | "node": ">=12.0.0" 566 | } 567 | }, 568 | "node_modules/locate-path": { 569 | "version": "6.0.0", 570 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 571 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 572 | "dev": true, 573 | "dependencies": { 574 | "p-locate": "^5.0.0" 575 | }, 576 | "engines": { 577 | "node": ">=10" 578 | }, 579 | "funding": { 580 | "url": "https://github.com/sponsors/sindresorhus" 581 | } 582 | }, 583 | "node_modules/log-symbols": { 584 | "version": "4.1.0", 585 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 586 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 587 | "dev": true, 588 | "dependencies": { 589 | "chalk": "^4.1.0", 590 | "is-unicode-supported": "^0.1.0" 591 | }, 592 | "engines": { 593 | "node": ">=10" 594 | }, 595 | "funding": { 596 | "url": "https://github.com/sponsors/sindresorhus" 597 | } 598 | }, 599 | "node_modules/memory-pager": { 600 | "version": "1.5.0", 601 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 602 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 603 | "dev": true, 604 | "optional": true 605 | }, 606 | "node_modules/minimatch": { 607 | "version": "5.0.1", 608 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", 609 | "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", 610 | "dev": true, 611 | "dependencies": { 612 | "brace-expansion": "^2.0.1" 613 | }, 614 | "engines": { 615 | "node": ">=10" 616 | } 617 | }, 618 | "node_modules/mocha": { 619 | "version": "10.2.0", 620 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", 621 | "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", 622 | "dev": true, 623 | "dependencies": { 624 | "ansi-colors": "4.1.1", 625 | "browser-stdout": "1.3.1", 626 | "chokidar": "3.5.3", 627 | "debug": "4.3.4", 628 | "diff": "5.0.0", 629 | "escape-string-regexp": "4.0.0", 630 | "find-up": "5.0.0", 631 | "glob": "7.2.0", 632 | "he": "1.2.0", 633 | "js-yaml": "4.1.0", 634 | "log-symbols": "4.1.0", 635 | "minimatch": "5.0.1", 636 | "ms": "2.1.3", 637 | "nanoid": "3.3.3", 638 | "serialize-javascript": "6.0.0", 639 | "strip-json-comments": "3.1.1", 640 | "supports-color": "8.1.1", 641 | "workerpool": "6.2.1", 642 | "yargs": "16.2.0", 643 | "yargs-parser": "20.2.4", 644 | "yargs-unparser": "2.0.0" 645 | }, 646 | "bin": { 647 | "_mocha": "bin/_mocha", 648 | "mocha": "bin/mocha.js" 649 | }, 650 | "engines": { 651 | "node": ">= 14.0.0" 652 | }, 653 | "funding": { 654 | "type": "opencollective", 655 | "url": "https://opencollective.com/mochajs" 656 | } 657 | }, 658 | "node_modules/mongodb": { 659 | "version": "5.1.0", 660 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.1.0.tgz", 661 | "integrity": "sha512-qgKb7y+EI90y4weY3z5+lIgm8wmexbonz0GalHkSElQXVKtRuwqXuhXKccyvIjXCJVy9qPV82zsinY0W1FBnJw==", 662 | "dev": true, 663 | "dependencies": { 664 | "bson": "^5.0.1", 665 | "mongodb-connection-string-url": "^2.6.0", 666 | "socks": "^2.7.1" 667 | }, 668 | "engines": { 669 | "node": ">=14.20.1" 670 | }, 671 | "optionalDependencies": { 672 | "saslprep": "^1.0.3" 673 | }, 674 | "peerDependencies": { 675 | "@aws-sdk/credential-providers": "^3.201.0", 676 | "mongodb-client-encryption": "^2.3.0", 677 | "snappy": "^7.2.2" 678 | }, 679 | "peerDependenciesMeta": { 680 | "@aws-sdk/credential-providers": { 681 | "optional": true 682 | }, 683 | "mongodb-client-encryption": { 684 | "optional": true 685 | }, 686 | "snappy": { 687 | "optional": true 688 | } 689 | } 690 | }, 691 | "node_modules/mongodb-connection-string-url": { 692 | "version": "2.6.0", 693 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", 694 | "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", 695 | "dev": true, 696 | "dependencies": { 697 | "@types/whatwg-url": "^8.2.1", 698 | "whatwg-url": "^11.0.0" 699 | } 700 | }, 701 | "node_modules/mongoose": { 702 | "version": "7.0.3", 703 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.0.3.tgz", 704 | "integrity": "sha512-3n8vc1/mssuxKa6vfghSocp3MeiCFYzhX36Ok+PsDNNYzHC9tw3rNkAMLemIwZ2jgXqkZ7CfKOxkzjp/d/SWfg==", 705 | "dev": true, 706 | "dependencies": { 707 | "bson": "^5.0.1", 708 | "kareem": "2.5.1", 709 | "mongodb": "5.1.0", 710 | "mpath": "0.9.0", 711 | "mquery": "5.0.0", 712 | "ms": "2.1.3", 713 | "sift": "16.0.1" 714 | }, 715 | "engines": { 716 | "node": ">=14.0.0" 717 | }, 718 | "funding": { 719 | "type": "opencollective", 720 | "url": "https://opencollective.com/mongoose" 721 | } 722 | }, 723 | "node_modules/mpath": { 724 | "version": "0.9.0", 725 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", 726 | "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", 727 | "dev": true, 728 | "engines": { 729 | "node": ">=4.0.0" 730 | } 731 | }, 732 | "node_modules/mquery": { 733 | "version": "5.0.0", 734 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", 735 | "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", 736 | "dev": true, 737 | "dependencies": { 738 | "debug": "4.x" 739 | }, 740 | "engines": { 741 | "node": ">=14.0.0" 742 | } 743 | }, 744 | "node_modules/ms": { 745 | "version": "2.1.3", 746 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 747 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 748 | "dev": true 749 | }, 750 | "node_modules/nanoid": { 751 | "version": "3.3.3", 752 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", 753 | "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", 754 | "dev": true, 755 | "bin": { 756 | "nanoid": "bin/nanoid.cjs" 757 | }, 758 | "engines": { 759 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 760 | } 761 | }, 762 | "node_modules/normalize-path": { 763 | "version": "3.0.0", 764 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 765 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 766 | "dev": true, 767 | "engines": { 768 | "node": ">=0.10.0" 769 | } 770 | }, 771 | "node_modules/once": { 772 | "version": "1.4.0", 773 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 774 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 775 | "dev": true, 776 | "dependencies": { 777 | "wrappy": "1" 778 | } 779 | }, 780 | "node_modules/p-limit": { 781 | "version": "3.1.0", 782 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 783 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 784 | "dev": true, 785 | "dependencies": { 786 | "yocto-queue": "^0.1.0" 787 | }, 788 | "engines": { 789 | "node": ">=10" 790 | }, 791 | "funding": { 792 | "url": "https://github.com/sponsors/sindresorhus" 793 | } 794 | }, 795 | "node_modules/p-locate": { 796 | "version": "5.0.0", 797 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 798 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 799 | "dev": true, 800 | "dependencies": { 801 | "p-limit": "^3.0.2" 802 | }, 803 | "engines": { 804 | "node": ">=10" 805 | }, 806 | "funding": { 807 | "url": "https://github.com/sponsors/sindresorhus" 808 | } 809 | }, 810 | "node_modules/path-exists": { 811 | "version": "4.0.0", 812 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 813 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 814 | "dev": true, 815 | "engines": { 816 | "node": ">=8" 817 | } 818 | }, 819 | "node_modules/path-is-absolute": { 820 | "version": "1.0.1", 821 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 822 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 823 | "dev": true, 824 | "engines": { 825 | "node": ">=0.10.0" 826 | } 827 | }, 828 | "node_modules/picomatch": { 829 | "version": "2.3.1", 830 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 831 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 832 | "dev": true, 833 | "engines": { 834 | "node": ">=8.6" 835 | }, 836 | "funding": { 837 | "url": "https://github.com/sponsors/jonschlinkert" 838 | } 839 | }, 840 | "node_modules/punycode": { 841 | "version": "2.3.0", 842 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 843 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 844 | "dev": true, 845 | "engines": { 846 | "node": ">=6" 847 | } 848 | }, 849 | "node_modules/randombytes": { 850 | "version": "2.1.0", 851 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 852 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 853 | "dev": true, 854 | "dependencies": { 855 | "safe-buffer": "^5.1.0" 856 | } 857 | }, 858 | "node_modules/readdirp": { 859 | "version": "3.6.0", 860 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 861 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 862 | "dev": true, 863 | "dependencies": { 864 | "picomatch": "^2.2.1" 865 | }, 866 | "engines": { 867 | "node": ">=8.10.0" 868 | } 869 | }, 870 | "node_modules/require-directory": { 871 | "version": "2.1.1", 872 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 873 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 874 | "dev": true, 875 | "engines": { 876 | "node": ">=0.10.0" 877 | } 878 | }, 879 | "node_modules/safe-buffer": { 880 | "version": "5.2.1", 881 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 882 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 883 | "dev": true, 884 | "funding": [ 885 | { 886 | "type": "github", 887 | "url": "https://github.com/sponsors/feross" 888 | }, 889 | { 890 | "type": "patreon", 891 | "url": "https://www.patreon.com/feross" 892 | }, 893 | { 894 | "type": "consulting", 895 | "url": "https://feross.org/support" 896 | } 897 | ] 898 | }, 899 | "node_modules/saslprep": { 900 | "version": "1.0.3", 901 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 902 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 903 | "dev": true, 904 | "optional": true, 905 | "dependencies": { 906 | "sparse-bitfield": "^3.0.3" 907 | }, 908 | "engines": { 909 | "node": ">=6" 910 | } 911 | }, 912 | "node_modules/serialize-javascript": { 913 | "version": "6.0.0", 914 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 915 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 916 | "dev": true, 917 | "dependencies": { 918 | "randombytes": "^2.1.0" 919 | } 920 | }, 921 | "node_modules/should": { 922 | "version": "13.2.3", 923 | "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", 924 | "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", 925 | "dev": true, 926 | "dependencies": { 927 | "should-equal": "^2.0.0", 928 | "should-format": "^3.0.3", 929 | "should-type": "^1.4.0", 930 | "should-type-adaptors": "^1.0.1", 931 | "should-util": "^1.0.0" 932 | } 933 | }, 934 | "node_modules/should-equal": { 935 | "version": "2.0.0", 936 | "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", 937 | "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", 938 | "dev": true, 939 | "dependencies": { 940 | "should-type": "^1.4.0" 941 | } 942 | }, 943 | "node_modules/should-format": { 944 | "version": "3.0.3", 945 | "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", 946 | "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", 947 | "dev": true, 948 | "dependencies": { 949 | "should-type": "^1.3.0", 950 | "should-type-adaptors": "^1.0.1" 951 | } 952 | }, 953 | "node_modules/should-type": { 954 | "version": "1.4.0", 955 | "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", 956 | "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", 957 | "dev": true 958 | }, 959 | "node_modules/should-type-adaptors": { 960 | "version": "1.1.0", 961 | "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", 962 | "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", 963 | "dev": true, 964 | "dependencies": { 965 | "should-type": "^1.3.0", 966 | "should-util": "^1.0.0" 967 | } 968 | }, 969 | "node_modules/should-util": { 970 | "version": "1.0.0", 971 | "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.0.tgz", 972 | "integrity": "sha1-yYzaN0qmsZDfi6h8mInCtNtiAGM=", 973 | "dev": true 974 | }, 975 | "node_modules/sift": { 976 | "version": "16.0.1", 977 | "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", 978 | "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==", 979 | "dev": true 980 | }, 981 | "node_modules/smart-buffer": { 982 | "version": "4.2.0", 983 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 984 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 985 | "dev": true, 986 | "engines": { 987 | "node": ">= 6.0.0", 988 | "npm": ">= 3.0.0" 989 | } 990 | }, 991 | "node_modules/socks": { 992 | "version": "2.7.1", 993 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", 994 | "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", 995 | "dev": true, 996 | "dependencies": { 997 | "ip": "^2.0.0", 998 | "smart-buffer": "^4.2.0" 999 | }, 1000 | "engines": { 1001 | "node": ">= 10.13.0", 1002 | "npm": ">= 3.0.0" 1003 | } 1004 | }, 1005 | "node_modules/sparse-bitfield": { 1006 | "version": "3.0.3", 1007 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 1008 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", 1009 | "dev": true, 1010 | "optional": true, 1011 | "dependencies": { 1012 | "memory-pager": "^1.0.2" 1013 | } 1014 | }, 1015 | "node_modules/string-width": { 1016 | "version": "4.2.3", 1017 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1018 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1019 | "dev": true, 1020 | "dependencies": { 1021 | "emoji-regex": "^8.0.0", 1022 | "is-fullwidth-code-point": "^3.0.0", 1023 | "strip-ansi": "^6.0.1" 1024 | }, 1025 | "engines": { 1026 | "node": ">=8" 1027 | } 1028 | }, 1029 | "node_modules/strip-ansi": { 1030 | "version": "6.0.1", 1031 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1032 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1033 | "dev": true, 1034 | "dependencies": { 1035 | "ansi-regex": "^5.0.1" 1036 | }, 1037 | "engines": { 1038 | "node": ">=8" 1039 | } 1040 | }, 1041 | "node_modules/strip-json-comments": { 1042 | "version": "3.1.1", 1043 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1044 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1045 | "dev": true, 1046 | "engines": { 1047 | "node": ">=8" 1048 | }, 1049 | "funding": { 1050 | "url": "https://github.com/sponsors/sindresorhus" 1051 | } 1052 | }, 1053 | "node_modules/supports-color": { 1054 | "version": "8.1.1", 1055 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1056 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1057 | "dev": true, 1058 | "dependencies": { 1059 | "has-flag": "^4.0.0" 1060 | }, 1061 | "engines": { 1062 | "node": ">=10" 1063 | }, 1064 | "funding": { 1065 | "url": "https://github.com/chalk/supports-color?sponsor=1" 1066 | } 1067 | }, 1068 | "node_modules/to-regex-range": { 1069 | "version": "5.0.1", 1070 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1071 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1072 | "dev": true, 1073 | "dependencies": { 1074 | "is-number": "^7.0.0" 1075 | }, 1076 | "engines": { 1077 | "node": ">=8.0" 1078 | } 1079 | }, 1080 | "node_modules/tr46": { 1081 | "version": "3.0.0", 1082 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", 1083 | "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", 1084 | "dev": true, 1085 | "dependencies": { 1086 | "punycode": "^2.1.1" 1087 | }, 1088 | "engines": { 1089 | "node": ">=12" 1090 | } 1091 | }, 1092 | "node_modules/webidl-conversions": { 1093 | "version": "7.0.0", 1094 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 1095 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", 1096 | "dev": true, 1097 | "engines": { 1098 | "node": ">=12" 1099 | } 1100 | }, 1101 | "node_modules/whatwg-url": { 1102 | "version": "11.0.0", 1103 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", 1104 | "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", 1105 | "dev": true, 1106 | "dependencies": { 1107 | "tr46": "^3.0.0", 1108 | "webidl-conversions": "^7.0.0" 1109 | }, 1110 | "engines": { 1111 | "node": ">=12" 1112 | } 1113 | }, 1114 | "node_modules/workerpool": { 1115 | "version": "6.2.1", 1116 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", 1117 | "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", 1118 | "dev": true 1119 | }, 1120 | "node_modules/wrap-ansi": { 1121 | "version": "7.0.0", 1122 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1123 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1124 | "dev": true, 1125 | "dependencies": { 1126 | "ansi-styles": "^4.0.0", 1127 | "string-width": "^4.1.0", 1128 | "strip-ansi": "^6.0.0" 1129 | }, 1130 | "engines": { 1131 | "node": ">=10" 1132 | }, 1133 | "funding": { 1134 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1135 | } 1136 | }, 1137 | "node_modules/wrappy": { 1138 | "version": "1.0.2", 1139 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1140 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1141 | "dev": true 1142 | }, 1143 | "node_modules/y18n": { 1144 | "version": "5.0.8", 1145 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1146 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1147 | "dev": true, 1148 | "engines": { 1149 | "node": ">=10" 1150 | } 1151 | }, 1152 | "node_modules/yargs": { 1153 | "version": "16.2.0", 1154 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 1155 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 1156 | "dev": true, 1157 | "dependencies": { 1158 | "cliui": "^7.0.2", 1159 | "escalade": "^3.1.1", 1160 | "get-caller-file": "^2.0.5", 1161 | "require-directory": "^2.1.1", 1162 | "string-width": "^4.2.0", 1163 | "y18n": "^5.0.5", 1164 | "yargs-parser": "^20.2.2" 1165 | }, 1166 | "engines": { 1167 | "node": ">=10" 1168 | } 1169 | }, 1170 | "node_modules/yargs-parser": { 1171 | "version": "20.2.4", 1172 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 1173 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 1174 | "dev": true, 1175 | "engines": { 1176 | "node": ">=10" 1177 | } 1178 | }, 1179 | "node_modules/yargs-unparser": { 1180 | "version": "2.0.0", 1181 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 1182 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 1183 | "dev": true, 1184 | "dependencies": { 1185 | "camelcase": "^6.0.0", 1186 | "decamelize": "^4.0.0", 1187 | "flat": "^5.0.2", 1188 | "is-plain-obj": "^2.1.0" 1189 | }, 1190 | "engines": { 1191 | "node": ">=10" 1192 | } 1193 | }, 1194 | "node_modules/yocto-queue": { 1195 | "version": "0.1.0", 1196 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 1197 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 1198 | "dev": true, 1199 | "engines": { 1200 | "node": ">=10" 1201 | }, 1202 | "funding": { 1203 | "url": "https://github.com/sponsors/sindresorhus" 1204 | } 1205 | } 1206 | }, 1207 | "dependencies": { 1208 | "@types/node": { 1209 | "version": "18.15.9", 1210 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.9.tgz", 1211 | "integrity": "sha512-dUxhiNzBLr6IqlZXz6e/rN2YQXlFgOei/Dxy+e3cyXTJ4txSUbGT2/fmnD6zd/75jDMeW5bDee+YXxlFKHoV0A==", 1212 | "dev": true 1213 | }, 1214 | "@types/webidl-conversions": { 1215 | "version": "7.0.0", 1216 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 1217 | "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==", 1218 | "dev": true 1219 | }, 1220 | "@types/whatwg-url": { 1221 | "version": "8.2.2", 1222 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", 1223 | "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", 1224 | "dev": true, 1225 | "requires": { 1226 | "@types/node": "*", 1227 | "@types/webidl-conversions": "*" 1228 | } 1229 | }, 1230 | "ansi-colors": { 1231 | "version": "4.1.1", 1232 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 1233 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 1234 | "dev": true 1235 | }, 1236 | "ansi-regex": { 1237 | "version": "5.0.1", 1238 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1239 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1240 | "dev": true 1241 | }, 1242 | "ansi-styles": { 1243 | "version": "4.3.0", 1244 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1245 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1246 | "dev": true, 1247 | "requires": { 1248 | "color-convert": "^2.0.1" 1249 | } 1250 | }, 1251 | "anymatch": { 1252 | "version": "3.1.3", 1253 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 1254 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 1255 | "dev": true, 1256 | "requires": { 1257 | "normalize-path": "^3.0.0", 1258 | "picomatch": "^2.0.4" 1259 | } 1260 | }, 1261 | "argparse": { 1262 | "version": "2.0.1", 1263 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1264 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1265 | "dev": true 1266 | }, 1267 | "balanced-match": { 1268 | "version": "1.0.2", 1269 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1270 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1271 | "dev": true 1272 | }, 1273 | "binary-extensions": { 1274 | "version": "2.2.0", 1275 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 1276 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 1277 | "dev": true 1278 | }, 1279 | "brace-expansion": { 1280 | "version": "2.0.1", 1281 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1282 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1283 | "dev": true, 1284 | "requires": { 1285 | "balanced-match": "^1.0.0" 1286 | } 1287 | }, 1288 | "braces": { 1289 | "version": "3.0.2", 1290 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1291 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1292 | "dev": true, 1293 | "requires": { 1294 | "fill-range": "^7.0.1" 1295 | } 1296 | }, 1297 | "browser-stdout": { 1298 | "version": "1.3.1", 1299 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 1300 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 1301 | "dev": true 1302 | }, 1303 | "bson": { 1304 | "version": "5.1.0", 1305 | "resolved": "https://registry.npmjs.org/bson/-/bson-5.1.0.tgz", 1306 | "integrity": "sha512-FEecNHkhYRBe7X9KDkdG12xNuz5VHGeH6mCE0B5sBmYtiR/Ux/9vUH/v4NUoBCDr6NuEhvahjoLiiRogptVW0A==", 1307 | "dev": true 1308 | }, 1309 | "camelcase": { 1310 | "version": "6.3.0", 1311 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 1312 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 1313 | "dev": true 1314 | }, 1315 | "chalk": { 1316 | "version": "4.1.2", 1317 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1318 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1319 | "dev": true, 1320 | "requires": { 1321 | "ansi-styles": "^4.1.0", 1322 | "supports-color": "^7.1.0" 1323 | }, 1324 | "dependencies": { 1325 | "supports-color": { 1326 | "version": "7.2.0", 1327 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1328 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1329 | "dev": true, 1330 | "requires": { 1331 | "has-flag": "^4.0.0" 1332 | } 1333 | } 1334 | } 1335 | }, 1336 | "chokidar": { 1337 | "version": "3.5.3", 1338 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 1339 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1340 | "dev": true, 1341 | "requires": { 1342 | "anymatch": "~3.1.2", 1343 | "braces": "~3.0.2", 1344 | "fsevents": "~2.3.2", 1345 | "glob-parent": "~5.1.2", 1346 | "is-binary-path": "~2.1.0", 1347 | "is-glob": "~4.0.1", 1348 | "normalize-path": "~3.0.0", 1349 | "readdirp": "~3.6.0" 1350 | } 1351 | }, 1352 | "cliui": { 1353 | "version": "7.0.4", 1354 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 1355 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 1356 | "dev": true, 1357 | "requires": { 1358 | "string-width": "^4.2.0", 1359 | "strip-ansi": "^6.0.0", 1360 | "wrap-ansi": "^7.0.0" 1361 | } 1362 | }, 1363 | "color-convert": { 1364 | "version": "2.0.1", 1365 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1366 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1367 | "dev": true, 1368 | "requires": { 1369 | "color-name": "~1.1.4" 1370 | } 1371 | }, 1372 | "color-name": { 1373 | "version": "1.1.4", 1374 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1375 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1376 | "dev": true 1377 | }, 1378 | "concat-map": { 1379 | "version": "0.0.1", 1380 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1381 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1382 | "dev": true 1383 | }, 1384 | "debug": { 1385 | "version": "4.3.4", 1386 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1387 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1388 | "dev": true, 1389 | "requires": { 1390 | "ms": "2.1.2" 1391 | }, 1392 | "dependencies": { 1393 | "ms": { 1394 | "version": "2.1.2", 1395 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1396 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1397 | "dev": true 1398 | } 1399 | } 1400 | }, 1401 | "decamelize": { 1402 | "version": "4.0.0", 1403 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 1404 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 1405 | "dev": true 1406 | }, 1407 | "diff": { 1408 | "version": "5.0.0", 1409 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 1410 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 1411 | "dev": true 1412 | }, 1413 | "emoji-regex": { 1414 | "version": "8.0.0", 1415 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1416 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1417 | "dev": true 1418 | }, 1419 | "escalade": { 1420 | "version": "3.1.1", 1421 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1422 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1423 | "dev": true 1424 | }, 1425 | "escape-string-regexp": { 1426 | "version": "4.0.0", 1427 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1428 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1429 | "dev": true 1430 | }, 1431 | "fill-range": { 1432 | "version": "7.0.1", 1433 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1434 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1435 | "dev": true, 1436 | "requires": { 1437 | "to-regex-range": "^5.0.1" 1438 | } 1439 | }, 1440 | "find-up": { 1441 | "version": "5.0.0", 1442 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1443 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1444 | "dev": true, 1445 | "requires": { 1446 | "locate-path": "^6.0.0", 1447 | "path-exists": "^4.0.0" 1448 | } 1449 | }, 1450 | "flat": { 1451 | "version": "5.0.2", 1452 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 1453 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 1454 | "dev": true 1455 | }, 1456 | "fs.realpath": { 1457 | "version": "1.0.0", 1458 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1459 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1460 | "dev": true 1461 | }, 1462 | "fsevents": { 1463 | "version": "2.3.2", 1464 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1465 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1466 | "dev": true, 1467 | "optional": true 1468 | }, 1469 | "get-caller-file": { 1470 | "version": "2.0.5", 1471 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1472 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1473 | "dev": true 1474 | }, 1475 | "glob": { 1476 | "version": "7.2.0", 1477 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 1478 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 1479 | "dev": true, 1480 | "requires": { 1481 | "fs.realpath": "^1.0.0", 1482 | "inflight": "^1.0.4", 1483 | "inherits": "2", 1484 | "minimatch": "^3.0.4", 1485 | "once": "^1.3.0", 1486 | "path-is-absolute": "^1.0.0" 1487 | }, 1488 | "dependencies": { 1489 | "brace-expansion": { 1490 | "version": "1.1.11", 1491 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1492 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1493 | "dev": true, 1494 | "requires": { 1495 | "balanced-match": "^1.0.0", 1496 | "concat-map": "0.0.1" 1497 | } 1498 | }, 1499 | "minimatch": { 1500 | "version": "3.1.2", 1501 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1502 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1503 | "dev": true, 1504 | "requires": { 1505 | "brace-expansion": "^1.1.7" 1506 | } 1507 | } 1508 | } 1509 | }, 1510 | "glob-parent": { 1511 | "version": "5.1.2", 1512 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1513 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1514 | "dev": true, 1515 | "requires": { 1516 | "is-glob": "^4.0.1" 1517 | } 1518 | }, 1519 | "has-flag": { 1520 | "version": "4.0.0", 1521 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1522 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1523 | "dev": true 1524 | }, 1525 | "he": { 1526 | "version": "1.2.0", 1527 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1528 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1529 | "dev": true 1530 | }, 1531 | "inflight": { 1532 | "version": "1.0.6", 1533 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1534 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1535 | "dev": true, 1536 | "requires": { 1537 | "once": "^1.3.0", 1538 | "wrappy": "1" 1539 | } 1540 | }, 1541 | "inherits": { 1542 | "version": "2.0.4", 1543 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1544 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1545 | "dev": true 1546 | }, 1547 | "ip": { 1548 | "version": "2.0.0", 1549 | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", 1550 | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", 1551 | "dev": true 1552 | }, 1553 | "is-binary-path": { 1554 | "version": "2.1.0", 1555 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1556 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1557 | "dev": true, 1558 | "requires": { 1559 | "binary-extensions": "^2.0.0" 1560 | } 1561 | }, 1562 | "is-extglob": { 1563 | "version": "2.1.1", 1564 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1565 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1566 | "dev": true 1567 | }, 1568 | "is-fullwidth-code-point": { 1569 | "version": "3.0.0", 1570 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1571 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1572 | "dev": true 1573 | }, 1574 | "is-glob": { 1575 | "version": "4.0.3", 1576 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1577 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1578 | "dev": true, 1579 | "requires": { 1580 | "is-extglob": "^2.1.1" 1581 | } 1582 | }, 1583 | "is-number": { 1584 | "version": "7.0.0", 1585 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1586 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1587 | "dev": true 1588 | }, 1589 | "is-plain-obj": { 1590 | "version": "2.1.0", 1591 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 1592 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 1593 | "dev": true 1594 | }, 1595 | "is-unicode-supported": { 1596 | "version": "0.1.0", 1597 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 1598 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 1599 | "dev": true 1600 | }, 1601 | "js-yaml": { 1602 | "version": "4.1.0", 1603 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1604 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1605 | "dev": true, 1606 | "requires": { 1607 | "argparse": "^2.0.1" 1608 | } 1609 | }, 1610 | "kareem": { 1611 | "version": "2.5.1", 1612 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", 1613 | "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", 1614 | "dev": true 1615 | }, 1616 | "locate-path": { 1617 | "version": "6.0.0", 1618 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1619 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1620 | "dev": true, 1621 | "requires": { 1622 | "p-locate": "^5.0.0" 1623 | } 1624 | }, 1625 | "log-symbols": { 1626 | "version": "4.1.0", 1627 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 1628 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 1629 | "dev": true, 1630 | "requires": { 1631 | "chalk": "^4.1.0", 1632 | "is-unicode-supported": "^0.1.0" 1633 | } 1634 | }, 1635 | "memory-pager": { 1636 | "version": "1.5.0", 1637 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 1638 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 1639 | "dev": true, 1640 | "optional": true 1641 | }, 1642 | "minimatch": { 1643 | "version": "5.0.1", 1644 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", 1645 | "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", 1646 | "dev": true, 1647 | "requires": { 1648 | "brace-expansion": "^2.0.1" 1649 | } 1650 | }, 1651 | "mocha": { 1652 | "version": "10.2.0", 1653 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", 1654 | "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", 1655 | "dev": true, 1656 | "requires": { 1657 | "ansi-colors": "4.1.1", 1658 | "browser-stdout": "1.3.1", 1659 | "chokidar": "3.5.3", 1660 | "debug": "4.3.4", 1661 | "diff": "5.0.0", 1662 | "escape-string-regexp": "4.0.0", 1663 | "find-up": "5.0.0", 1664 | "glob": "7.2.0", 1665 | "he": "1.2.0", 1666 | "js-yaml": "4.1.0", 1667 | "log-symbols": "4.1.0", 1668 | "minimatch": "5.0.1", 1669 | "ms": "2.1.3", 1670 | "nanoid": "3.3.3", 1671 | "serialize-javascript": "6.0.0", 1672 | "strip-json-comments": "3.1.1", 1673 | "supports-color": "8.1.1", 1674 | "workerpool": "6.2.1", 1675 | "yargs": "16.2.0", 1676 | "yargs-parser": "20.2.4", 1677 | "yargs-unparser": "2.0.0" 1678 | } 1679 | }, 1680 | "mongodb": { 1681 | "version": "5.1.0", 1682 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.1.0.tgz", 1683 | "integrity": "sha512-qgKb7y+EI90y4weY3z5+lIgm8wmexbonz0GalHkSElQXVKtRuwqXuhXKccyvIjXCJVy9qPV82zsinY0W1FBnJw==", 1684 | "dev": true, 1685 | "requires": { 1686 | "bson": "^5.0.1", 1687 | "mongodb-connection-string-url": "^2.6.0", 1688 | "saslprep": "^1.0.3", 1689 | "socks": "^2.7.1" 1690 | } 1691 | }, 1692 | "mongodb-connection-string-url": { 1693 | "version": "2.6.0", 1694 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", 1695 | "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", 1696 | "dev": true, 1697 | "requires": { 1698 | "@types/whatwg-url": "^8.2.1", 1699 | "whatwg-url": "^11.0.0" 1700 | } 1701 | }, 1702 | "mongoose": { 1703 | "version": "7.0.3", 1704 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.0.3.tgz", 1705 | "integrity": "sha512-3n8vc1/mssuxKa6vfghSocp3MeiCFYzhX36Ok+PsDNNYzHC9tw3rNkAMLemIwZ2jgXqkZ7CfKOxkzjp/d/SWfg==", 1706 | "dev": true, 1707 | "requires": { 1708 | "bson": "^5.0.1", 1709 | "kareem": "2.5.1", 1710 | "mongodb": "5.1.0", 1711 | "mpath": "0.9.0", 1712 | "mquery": "5.0.0", 1713 | "ms": "2.1.3", 1714 | "sift": "16.0.1" 1715 | } 1716 | }, 1717 | "mpath": { 1718 | "version": "0.9.0", 1719 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", 1720 | "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", 1721 | "dev": true 1722 | }, 1723 | "mquery": { 1724 | "version": "5.0.0", 1725 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", 1726 | "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", 1727 | "dev": true, 1728 | "requires": { 1729 | "debug": "4.x" 1730 | } 1731 | }, 1732 | "ms": { 1733 | "version": "2.1.3", 1734 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1735 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1736 | "dev": true 1737 | }, 1738 | "nanoid": { 1739 | "version": "3.3.3", 1740 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", 1741 | "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", 1742 | "dev": true 1743 | }, 1744 | "normalize-path": { 1745 | "version": "3.0.0", 1746 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1747 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1748 | "dev": true 1749 | }, 1750 | "once": { 1751 | "version": "1.4.0", 1752 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1753 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1754 | "dev": true, 1755 | "requires": { 1756 | "wrappy": "1" 1757 | } 1758 | }, 1759 | "p-limit": { 1760 | "version": "3.1.0", 1761 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1762 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1763 | "dev": true, 1764 | "requires": { 1765 | "yocto-queue": "^0.1.0" 1766 | } 1767 | }, 1768 | "p-locate": { 1769 | "version": "5.0.0", 1770 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1771 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1772 | "dev": true, 1773 | "requires": { 1774 | "p-limit": "^3.0.2" 1775 | } 1776 | }, 1777 | "path-exists": { 1778 | "version": "4.0.0", 1779 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1780 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1781 | "dev": true 1782 | }, 1783 | "path-is-absolute": { 1784 | "version": "1.0.1", 1785 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1786 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1787 | "dev": true 1788 | }, 1789 | "picomatch": { 1790 | "version": "2.3.1", 1791 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1792 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1793 | "dev": true 1794 | }, 1795 | "punycode": { 1796 | "version": "2.3.0", 1797 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 1798 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 1799 | "dev": true 1800 | }, 1801 | "randombytes": { 1802 | "version": "2.1.0", 1803 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1804 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1805 | "dev": true, 1806 | "requires": { 1807 | "safe-buffer": "^5.1.0" 1808 | } 1809 | }, 1810 | "readdirp": { 1811 | "version": "3.6.0", 1812 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1813 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1814 | "dev": true, 1815 | "requires": { 1816 | "picomatch": "^2.2.1" 1817 | } 1818 | }, 1819 | "require-directory": { 1820 | "version": "2.1.1", 1821 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1822 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1823 | "dev": true 1824 | }, 1825 | "safe-buffer": { 1826 | "version": "5.2.1", 1827 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1828 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1829 | "dev": true 1830 | }, 1831 | "saslprep": { 1832 | "version": "1.0.3", 1833 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 1834 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 1835 | "dev": true, 1836 | "optional": true, 1837 | "requires": { 1838 | "sparse-bitfield": "^3.0.3" 1839 | } 1840 | }, 1841 | "serialize-javascript": { 1842 | "version": "6.0.0", 1843 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 1844 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 1845 | "dev": true, 1846 | "requires": { 1847 | "randombytes": "^2.1.0" 1848 | } 1849 | }, 1850 | "should": { 1851 | "version": "13.2.3", 1852 | "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", 1853 | "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", 1854 | "dev": true, 1855 | "requires": { 1856 | "should-equal": "^2.0.0", 1857 | "should-format": "^3.0.3", 1858 | "should-type": "^1.4.0", 1859 | "should-type-adaptors": "^1.0.1", 1860 | "should-util": "^1.0.0" 1861 | } 1862 | }, 1863 | "should-equal": { 1864 | "version": "2.0.0", 1865 | "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", 1866 | "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", 1867 | "dev": true, 1868 | "requires": { 1869 | "should-type": "^1.4.0" 1870 | } 1871 | }, 1872 | "should-format": { 1873 | "version": "3.0.3", 1874 | "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", 1875 | "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", 1876 | "dev": true, 1877 | "requires": { 1878 | "should-type": "^1.3.0", 1879 | "should-type-adaptors": "^1.0.1" 1880 | } 1881 | }, 1882 | "should-type": { 1883 | "version": "1.4.0", 1884 | "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", 1885 | "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", 1886 | "dev": true 1887 | }, 1888 | "should-type-adaptors": { 1889 | "version": "1.1.0", 1890 | "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", 1891 | "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", 1892 | "dev": true, 1893 | "requires": { 1894 | "should-type": "^1.3.0", 1895 | "should-util": "^1.0.0" 1896 | } 1897 | }, 1898 | "should-util": { 1899 | "version": "1.0.0", 1900 | "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.0.tgz", 1901 | "integrity": "sha1-yYzaN0qmsZDfi6h8mInCtNtiAGM=", 1902 | "dev": true 1903 | }, 1904 | "sift": { 1905 | "version": "16.0.1", 1906 | "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", 1907 | "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==", 1908 | "dev": true 1909 | }, 1910 | "smart-buffer": { 1911 | "version": "4.2.0", 1912 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 1913 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 1914 | "dev": true 1915 | }, 1916 | "socks": { 1917 | "version": "2.7.1", 1918 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", 1919 | "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", 1920 | "dev": true, 1921 | "requires": { 1922 | "ip": "^2.0.0", 1923 | "smart-buffer": "^4.2.0" 1924 | } 1925 | }, 1926 | "sparse-bitfield": { 1927 | "version": "3.0.3", 1928 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 1929 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", 1930 | "dev": true, 1931 | "optional": true, 1932 | "requires": { 1933 | "memory-pager": "^1.0.2" 1934 | } 1935 | }, 1936 | "string-width": { 1937 | "version": "4.2.3", 1938 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1939 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1940 | "dev": true, 1941 | "requires": { 1942 | "emoji-regex": "^8.0.0", 1943 | "is-fullwidth-code-point": "^3.0.0", 1944 | "strip-ansi": "^6.0.1" 1945 | } 1946 | }, 1947 | "strip-ansi": { 1948 | "version": "6.0.1", 1949 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1950 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1951 | "dev": true, 1952 | "requires": { 1953 | "ansi-regex": "^5.0.1" 1954 | } 1955 | }, 1956 | "strip-json-comments": { 1957 | "version": "3.1.1", 1958 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1959 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1960 | "dev": true 1961 | }, 1962 | "supports-color": { 1963 | "version": "8.1.1", 1964 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1965 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1966 | "dev": true, 1967 | "requires": { 1968 | "has-flag": "^4.0.0" 1969 | } 1970 | }, 1971 | "to-regex-range": { 1972 | "version": "5.0.1", 1973 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1974 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1975 | "dev": true, 1976 | "requires": { 1977 | "is-number": "^7.0.0" 1978 | } 1979 | }, 1980 | "tr46": { 1981 | "version": "3.0.0", 1982 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", 1983 | "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", 1984 | "dev": true, 1985 | "requires": { 1986 | "punycode": "^2.1.1" 1987 | } 1988 | }, 1989 | "webidl-conversions": { 1990 | "version": "7.0.0", 1991 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 1992 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", 1993 | "dev": true 1994 | }, 1995 | "whatwg-url": { 1996 | "version": "11.0.0", 1997 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", 1998 | "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", 1999 | "dev": true, 2000 | "requires": { 2001 | "tr46": "^3.0.0", 2002 | "webidl-conversions": "^7.0.0" 2003 | } 2004 | }, 2005 | "workerpool": { 2006 | "version": "6.2.1", 2007 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", 2008 | "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", 2009 | "dev": true 2010 | }, 2011 | "wrap-ansi": { 2012 | "version": "7.0.0", 2013 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2014 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2015 | "dev": true, 2016 | "requires": { 2017 | "ansi-styles": "^4.0.0", 2018 | "string-width": "^4.1.0", 2019 | "strip-ansi": "^6.0.0" 2020 | } 2021 | }, 2022 | "wrappy": { 2023 | "version": "1.0.2", 2024 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2025 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2026 | "dev": true 2027 | }, 2028 | "y18n": { 2029 | "version": "5.0.8", 2030 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2031 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 2032 | "dev": true 2033 | }, 2034 | "yargs": { 2035 | "version": "16.2.0", 2036 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 2037 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 2038 | "dev": true, 2039 | "requires": { 2040 | "cliui": "^7.0.2", 2041 | "escalade": "^3.1.1", 2042 | "get-caller-file": "^2.0.5", 2043 | "require-directory": "^2.1.1", 2044 | "string-width": "^4.2.0", 2045 | "y18n": "^5.0.5", 2046 | "yargs-parser": "^20.2.2" 2047 | } 2048 | }, 2049 | "yargs-parser": { 2050 | "version": "20.2.4", 2051 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 2052 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 2053 | "dev": true 2054 | }, 2055 | "yargs-unparser": { 2056 | "version": "2.0.0", 2057 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 2058 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 2059 | "dev": true, 2060 | "requires": { 2061 | "camelcase": "^6.0.0", 2062 | "decamelize": "^4.0.0", 2063 | "flat": "^5.0.2", 2064 | "is-plain-obj": "^2.1.0" 2065 | } 2066 | }, 2067 | "yocto-queue": { 2068 | "version": "0.1.0", 2069 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 2070 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 2071 | "dev": true 2072 | } 2073 | } 2074 | } 2075 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mongoose-findorcreate", 3 | "description": "Mongoose plugin that adds findOrCreate", 4 | "version": "4.0.0", 5 | "author": "Nicholas Penree ", 6 | "keywords": [ 7 | "mongodb", 8 | "mongoose", 9 | "plugin", 10 | "findOrCreate" 11 | ], 12 | "repository": { 13 | "type": "git", 14 | "url": "git://github.com/drudge/mongoose-findorcreate" 15 | }, 16 | "devDependencies": { 17 | "mocha": "^10.2.0", 18 | "mongoose": "^7.0.3", 19 | "should": "^13.2.3" 20 | }, 21 | "scripts": { 22 | "test": "mocha -u bdd -R spec -c ./test/*test.js" 23 | }, 24 | "license": "MIT", 25 | "engine": { 26 | "node": ">=14.0.0" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /test/index_test.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * @list dependencies 4 | **/ 5 | 6 | var mocha = require('mocha'); 7 | var should = require('should'); 8 | var mongoose = require('mongoose'); 9 | var Schema = mongoose.Schema; 10 | var findOrCreate = require('../'); 11 | 12 | mongoose.connect('mongodb://localhost/findOrCreate'); 13 | mongoose.connection.on('error', function (err) { 14 | console.error('MongoDB error: ' + err.message); 15 | console.error('Make sure a mongoDB server is running and accessible by this application') 16 | }); 17 | 18 | var ClickSchema = new Schema({ 19 | ip : {type: String, required: true}, 20 | hostname : {type: String, required: false} 21 | }) 22 | 23 | ClickSchema.plugin(findOrCreate); 24 | 25 | var Click = mongoose.model('Click', ClickSchema); 26 | 27 | 28 | 29 | 30 | after(function(done){ 31 | mongoose.connection.db.dropDatabase().then(function(){ 32 | mongoose.connection.close(); 33 | done(); 34 | }); 35 | }) 36 | 37 | describe('findOrCreate', function() { 38 | it("should create the object if it doesn't exist", function(done) { 39 | Click.findOrCreate({ip: '127.0.0.1'}, function(err, click) { 40 | click.ip.should.eql('127.0.0.1') 41 | Click.count({}).exec().then(function(num){ 42 | num.should.eql(1); 43 | done(); 44 | }); 45 | // Click.count({}, function(err, num) { 46 | // num.should.equal(1) 47 | // done(); 48 | // }) 49 | }) 50 | }) 51 | 52 | it("returns the object if it already exists", function(done) { 53 | Click.create({ip: '127.0.0.2'}).then(function(click){ 54 | click.ip.should.eql('127.0.0.2') 55 | Click.count({ip: '127.0.0.2'}).exec().then(function(num){ 56 | num.should.equal(1); 57 | done(); 58 | }); 59 | }); 60 | }) 61 | 62 | it("should pass created as true if the object didn't exist", function(done) { 63 | Click.findOrCreate({ip: '127.1.1.1'}, function(err, click, created) { 64 | created.should.eql(true); 65 | done(); 66 | }) 67 | }) 68 | 69 | it("should pass created as false if the object already exists", function(done) { 70 | Click.findOrCreate({ip: '127.1.1.1'}, function(err, click, created) { 71 | created.should.eql(false); 72 | done(); 73 | }) 74 | }) 75 | 76 | it("should add values with a $ when creating the object", function(done) { 77 | Click.findOrCreate({ 78 | ip: '$notAnInternetProtocolAddress' 79 | }, function(err, click) { 80 | click.ip.should.eql('$notAnInternetProtocolAddress'); 81 | done(); 82 | }) 83 | }) 84 | 85 | it("should add values with a $ when creating an object different from the find call", function(done) { 86 | Click.findOrCreate({ 87 | ip: '$notIp' 88 | }, { 89 | ip: '$expected' 90 | }, function(err, click) { 91 | click.ip.should.eql('$expected'); 92 | done(); 93 | }) 94 | }) 95 | 96 | it("should not add properties with a $ when creating the object", function(done) { 97 | Click.findOrCreate({ 98 | ip: '127.2.2.2', 99 | subnet: { $exists: true } 100 | }, function(err, click, created) { 101 | click.should.be.an.Object; 102 | click.ip.should.eql('127.2.2.2'); 103 | should.not.exist(click.subnet); 104 | created.should.eql(true); 105 | done(); 106 | }) 107 | }) 108 | 109 | it("should not add properties with a $ when creating an object different from the find call", function(done) { 110 | Click.findOrCreate({ 111 | ip: '127.3.3.3', 112 | subnet: { $exists: true } 113 | }, { 114 | ip: '127.3.3.3', 115 | subnet: { $exists: true }, 116 | hostname: 'noplacelikehome' 117 | }, function(err, click, created) { 118 | click.should.be.an.Object; 119 | click.ip.should.eql('127.3.3.3'); 120 | should.not.exist(click.subnet); 121 | click.hostname.should.eql('noplacelikehome'); 122 | created.should.eql(true); 123 | done(); 124 | }) 125 | }) 126 | 127 | it("should support upsert",function(done){ 128 | new Click({ip: '128.0.0.0'}).save().then(function(click){ 129 | click.should.be.an.Object; 130 | click.ip.should.eql('128.0.0.0'); 131 | should.equal(click.hostname, null); 132 | Click.findOrCreate({ip: '128.0.0.0'},{ hostname: 'example.org'},{upsert: true}, 133 | function (err, click, created) { 134 | click.should.be.an.Object; 135 | click.ip.should.eql('128.0.0.0'); 136 | click.hostname.should.eql('example.org'); 137 | created.should.eql(false); 138 | // Verify that it actually was updated in the database. 139 | Click.findOne({ip: '128.0.0.0'}).exec().then(function(click){ 140 | click.should.be.an.Object; 141 | click.ip.should.eql('128.0.0.0'); 142 | click.hostname.should.eql('example.org'); 143 | done(); 144 | }); 145 | } 146 | ); 147 | }); 148 | }) 149 | 150 | it("should return updated instance after upserting away from the condition",function(done){ 151 | new Click({ip: '128.1.1.1'}).save().then(function(click){ 152 | var _id = click._id; 153 | click.should.be.an.Object; 154 | click.ip.should.eql('128.1.1.1'); 155 | Click.findOrCreate({ip: '128.1.1.1'},{ip: '128.1.1.2'},{upsert: true}, 156 | function(err, click, created) { 157 | // Should have returned upserted object even though it no 158 | // longer matches the conditions. 159 | click.should.be.an.Object 160 | click.ip.should.eql('128.1.1.2'); 161 | created.should.eql(false); 162 | // Verify that it actually was updated in the database. 163 | Click.findById(_id).exec().then(function(click){ 164 | click.should.be.an.Object; 165 | click.ip.should.eql('128.1.1.2'); 166 | done(); 167 | }); 168 | } 169 | ); 170 | }); 171 | }) 172 | 173 | it("should return a Promise when passed conditions", function() { 174 | var ret = Click.findOrCreate({ 175 | ip: '127.4.4.4', 176 | }); 177 | ret.should.be.a.Promise; 178 | return ret.then(function(click) { 179 | click.should.be.an.Object; 180 | click.doc.should.be.an.Object; 181 | click.doc.ip.should.eql('127.4.4.4'); 182 | click.created.should.eql(true); 183 | }) 184 | }) 185 | 186 | it("should return a Promise when passed conditions, doc", function() { 187 | var ret = Click.findOrCreate({ 188 | ip: '127.4.4.4', 189 | }, { 190 | ip: '127.5.5.5', 191 | }); 192 | ret.should.be.a.Promise; 193 | return ret.then(function(result) { 194 | result.should.be.an.Object; 195 | result.doc.should.be.an.Object; 196 | result.doc.ip.should.eql('127.4.4.4'); 197 | result.created.should.eql(false); 198 | }) 199 | }) 200 | 201 | it("should return a Promise when passed conditions, doc, options", function() { 202 | var ret = Click.findOrCreate({ 203 | ip: '127.4.4.4', 204 | }, { 205 | ip: '127.5.5.5', 206 | }, { 207 | upsert: true, 208 | }); 209 | ret.should.be.a.Promise; 210 | return ret.then(function (result) { 211 | result.should.be.an.Object; 212 | result.doc.should.be.an.Object; 213 | result.doc.ip.should.eql('127.5.5.5'); 214 | result.created.should.eql(false); 215 | }) 216 | }) 217 | }) 218 | --------------------------------------------------------------------------------