├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── Gruntfile.js ├── README.md ├── index.js ├── lib └── field-alias-plugin.js ├── package.json ├── tests └── aliasfields.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .directory 2 | .settings 3 | node_modules 4 | npm-debug.log 5 | .project 6 | .npmrc -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.10" 4 | - "0.12" 5 | - "4" 6 | - "6" 7 | services: 8 | - mongodb 9 | before_script: 10 | - npm install -g mocha 11 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 0.3.5 4 | 5 | - Fix a bug on node 0.10 6 | 7 | ## 0.3.4 8 | 9 | - Remove dependency to lodash 10 | 11 | ## 0.3.0 12 | 13 | - Fix (#9)[https://github.com/ramiel/mongoose-aliasfield/issues/9]: now property defined in array can be correctly aliased 14 | 15 | ## 0.2.0 16 | 17 | - `toOriginalFieldsObject` permit to convert thtough representations 18 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | grunt.initConfig({ 3 | mochacov: { 4 | coverage: { 5 | options: { 6 | coveralls: true 7 | } 8 | }, 9 | test: { 10 | options: { 11 | reporter: 'spec' 12 | } 13 | }, 14 | options: { 15 | files: 'tests/*.js' 16 | } 17 | } 18 | }); 19 | 20 | grunt.loadNpmTasks('grunt-mocha-cov'); 21 | 22 | if(process.env.TRAVIS){ 23 | grunt.registerTask('test', ['mochacov:test','mochacov:coverage']); 24 | }else{ 25 | grunt.registerTask('test', ['mochacov:test']); 26 | } 27 | }; -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | mongoose-aliasfield 2 | =================== 3 | 4 | [![gitcheese.com](https://s3.amazonaws.com/gitcheese-ui-master/images/badge.svg)](https://www.gitcheese.com/donate/users/324687/repos/3234125) 5 | [![Build Status](https://travis-ci.org/ramiel/mongoose-aliasfield.svg?branch=master)](https://travis-ci.org/ramiel/mongoose-aliasfield) 6 | [![Dependency Status](https://david-dm.org/ramiel/mongoose-aliasfield.svg)](https://david-dm.org/ramiel/mongoose-aliasfield) 7 | [![devDependency Status](https://david-dm.org/ramiel/mongoose-aliasfield/dev-status.svg)](https://david-dm.org/ramiel/mongoose-aliasfield#info=devDependencies) 8 | [![Coverage Status](https://coveralls.io/repos/ramiel/mongoose-aliasfield/badge.svg?branch=master&service=github)](https://coveralls.io/github/ramiel/mongoose-aliasfield?branch=master) 9 | 10 | Discover on [Ramiel's creations](http://www.ramielcreations.com/projects/alias-fields-plugin-for-mongoose/ "Ramiel's creations page") 11 | 12 | This plugin let you add a `alias` key to your schema and create getter and setter for your field using that alternate name. 13 | 14 | Plugin is intended to write short-keys for you documents on the DB but let you use long, descriptive name when reading fetched documents. 15 | This will result in less storage needed to memorize your data having no need to remember short key meanings. 16 | 17 | ## Note 18 | 19 | **IMPORTANT**: Starting from version 4.10.0 of mongoose, a feature similar to the one provided by this plugin has been developed in the core library. Even if the implementation are not exactly the same, I prefer to deprecate this plugin in favor of the core implementation. For this reason this plugin won't install anymore alongside a recent version of mongoose. If something is missing in the core implementation you should open a request on the [mongoose github page](https://github.com/Automattic/mongoose/issues). 20 | 21 | ## Installation 22 | 23 | To install it in your node.js project 24 | 25 | ``` 26 | npm install mongoose-aliasfield 27 | ``` 28 | 29 | or add it to your package.json dependencies 30 | 31 | ## Schema Example 32 | 33 | Take this schema as example: 34 | 35 | ```javascript 36 | var mongoose = require('mongoose'); 37 | var fieldsAliasPlugin = require('mongoose-aliasfield'); 38 | 39 | /*Describe a Schema*/ 40 | var PersonSchema = new Schema({ 41 | 't' : {'type': Date, 'index': true, 'alias': 'timestamp'}, 42 | 'n' : {'type' : String, 'alias': 'name'}, 43 | 's' : {'type' : String, 'alias': 'surname'}, 44 | 'p' : { 45 | 'a' : {'type' : String, 'alias': 'profile.address'}, 46 | 'pn': {'type' : String, 'alias': 'profile.phone_number'} 47 | } 48 | }); 49 | 50 | /*Add field alias plugin*/ 51 | PersonSchema.plugin(fieldsAliasPlugin); 52 | 53 | /*Person will be the model*/ 54 | ``` 55 | 56 | Now that your `schema` is created you can use alias field name to describe an instance of your model 57 | 58 | ```javascript 59 | var person = new Person({ 60 | 'timestamp' : new Date(), 61 | 'name' : 'Jhon', 62 | 'surname' : 'Doe', 63 | 'profile.address': 'Rue de Morgane', 64 | 'profile.phone_number': '051-123456 78', 65 | }); 66 | 67 | person.save(); 68 | 69 | ``` 70 | 71 | Even getters will run out of the box 72 | 73 | ```javascript 74 | var full_name = person.name+' '+person.surname; 75 | ``` 76 | 77 | `full_name` will be `Jhon Doe` 78 | 79 | The only limitation in setters and getters is that you can't use partial path for nested properties 80 | 81 | ```javascript 82 | /*THIS WON'T ACT AS EXPECTED!*/ 83 | var user_profile = person.profile; 84 | ``` 85 | 86 | You'll be able to obtain even an aliased description of object as i the example below 87 | 88 | ```javascript 89 | Person.findOne({'n': 'Jhon'}, function(err,person){ 90 | console.log( person.toAliasedFieldsObject() ); 91 | }); 92 | 93 | ``` 94 | Your models gain a method called `toAliasedFieldsObject` which return a long-descriptive version of your docs: 95 | 96 | ```javascript 97 | { 98 | 'name' : 'Jhon', 99 | 'surname': 'Doe', 100 | 'profile': { 101 | 'address' : 'Rue de Morgane', 102 | 'phone_number' : '051-123456 78' 103 | } 104 | } 105 | ``` 106 | 107 | The same is applyable to an array of results 108 | 109 | ```javascript 110 | Person.find({}, function(err,people){ 111 | people = people.map(function(p){ 112 | return p.toAliasedFieldsObject(); 113 | }); 114 | }); 115 | 116 | ``` 117 | 118 | ## Utilities 119 | 120 | ### Transform between representations 121 | 122 | #### toOriginalFieldsObject 123 | 124 | Sometimes you want to do some operation but you have just the aliased representation of an instance. Consider the following example: 125 | 126 | ```js 127 | var PersonSchema = new Schema({ 128 | n : {type : String, required : true, alias: 'name'}, 129 | a : { 130 | s: {type: String, alias: 'address.street' }, 131 | d: {type: Date, alias: 'address.date'} 132 | }, 133 | likes: {type: Number} 134 | 135 | }); 136 | PersonSchema.plugin(fieldsAliasPlugin); 137 | this.Person = mongoose.model('person', PersonSchema); 138 | ``` 139 | 140 | let's say you want to do an update 141 | 142 | ```js 143 | var data = { 144 | name: 'John', 145 | address: { 146 | street: 'Avenue ...', 147 | date: new Date() 148 | }, 149 | likes: 5 150 | } 151 | Person.update({name: 'John'}, data, function(){ 152 | ... 153 | }); 154 | ``` 155 | This won't work because mongoose is not able to understand the aliases. 156 | Your model has a static method which help you to move from an aliased representation of your data to the one you have on the database. 157 | You can write 158 | 159 | ```js 160 | Person.update({name: 'John'}, Person.toOriginalFieldsObject(data), function(){ 161 | ... 162 | }); 163 | ``` 164 | Edge case: you cannot transform mixed representation. All the properties which have an alias must be represented with the alias. 165 | In our example this won't work: 166 | 167 | ```js 168 | var data = { 169 | name: 'John', 170 | address: { 171 | s: 'Avenue ...', 172 | d: new Date() 173 | }, 174 | likes: 5 175 | } 176 | Person.toOriginalFieldsObject(data); // This will result in an invalid object 177 | ``` 178 | here we are mixing `address` (aliased) and `s` (not aliased), which is not permitted. 179 | `toOriginalFieldsObject` can be expensive, so use it only if you're forced to. 180 | 181 | #### toOriginalFieldFromAlias 182 | 183 | You can transform even a single field. Given the same schema as before 184 | 185 | ```js 186 | const flatten = Person.toOriginalFieldFromAlias('address.street'); 187 | // flatten is 188 | // 'a.s' 189 | ``` 190 | 191 | ## Author 192 | 193 | Fabrizio 'ramiel' Ruggeri 194 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author Fabrizio Ruggeri 3 | */ 4 | 5 | module.exports = require('./lib/field-alias-plugin.js'); 6 | -------------------------------------------------------------------------------- /lib/field-alias-plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Mongoose Plugin to alias fields name 3 | * Schema gains a property: 'alias' which is long name for a property. It will be used as getter and setter 4 | * Limitation. For deep nested properties only the entire property is get/set-table 5 | * @param schema 6 | * @param options 7 | */ 8 | 9 | 10 | /** 11 | * Dinamically set an array-descripted property into an object 12 | * Es: [key,to,set] => obj{key:{to:{set: value} } } 13 | * @param {Object} document Object to enrich. Note that document will be modified 14 | * @param {Array} property Array descripted property. If property is p='key.to.set' simply pass p.split('.') 15 | * @param {Any} value Value to set at the end of key chain 16 | */ 17 | function _propertyInflector(document, property ,value){ 18 | if(property.length > 1){ 19 | document[property[0]] = document[property[0]] || {}; 20 | return _propertyInflector( document[property[0]], property.slice(1), value); 21 | }else{ 22 | document[property[0]] = value; 23 | return document; 24 | } 25 | } 26 | 27 | function _flattenObject(ob) { 28 | var toReturn = {}; 29 | var flatObject; 30 | for (var i in ob) { 31 | if (!ob.hasOwnProperty(i)) { 32 | continue; 33 | } 34 | if(ob[[i]] && typeof ob[[i]] == 'object' && ob[[i]].constructor == Object) { 35 | flatObject = _flattenObject(ob[i]); 36 | for (var x in flatObject) { 37 | if (!flatObject.hasOwnProperty(x)) { 38 | continue; 39 | } 40 | toReturn[i + (!!isNaN(x) ? '.' + x : '')] = flatObject[x]; 41 | } 42 | } else { 43 | toReturn[i] = ob[i]; 44 | } 45 | } 46 | return toReturn; 47 | } 48 | 49 | /** 50 | * Return a function which, given an aliased object, return the non-aliased object 51 | * 52 | * @param {Object} schema The schema as reference 53 | * @return {Object} The non-aliased obejct 54 | */ 55 | function _toShortFieldsObjectProvider(schema){ 56 | return function toShortFieldsObject(ob){ 57 | var flatten = _flattenObject(ob); 58 | var shortObject = {}; 59 | for(var key in flatten){ 60 | var set = false; 61 | schema.eachPath(function(path, def){ 62 | if(def.options.alias !== undefined && def.options.alias === key){ 63 | shortObject[path] = flatten[key]; 64 | set = true; 65 | } 66 | }); 67 | if(!set){ 68 | shortObject[key] = flatten[key]; 69 | } 70 | } 71 | var document = {}; 72 | for(var i in shortObject){ 73 | _propertyInflector(document, i.split('.'), shortObject[i]); 74 | } 75 | return document; 76 | } 77 | } 78 | 79 | 80 | /** 81 | * Give a instance method to retrieve object using aliased field 82 | * @param {Object}Schema schema to modify 83 | * @returns {Function} Methods (Mongoose intended) for schema 84 | */ 85 | function _toAliasedFieldsObjectProvider(schema){ 86 | 87 | return function toAliasedFieldsObject(){ 88 | var document = {}; 89 | for(var p in schema.paths){ 90 | var property = schema.paths[p]; 91 | if(this.get(property.path) !== undefined){ 92 | var options = property.caster ? property.caster.options : property.options; 93 | if( options.alias && 'string' == typeof options.alias && options.alias !== ''){ 94 | var alias = options.alias.split('.'); 95 | _propertyInflector(document,alias, this.get(property.path) ); 96 | }else{ 97 | document[property.path] = this.get(property.path); 98 | } 99 | } 100 | } 101 | return document; 102 | }; 103 | } 104 | 105 | 106 | /** 107 | * Convert the name of a single alised field back to the original name 108 | * @param {Object}Schema schema to modify 109 | * @returns {Function} Methods (Mongoose intended) for schema 110 | */ 111 | function _toOriginalFieldFromAlias(schema){ 112 | return function toOriginalFieldFromAlias(key){ 113 | var originalName = key; 114 | 115 | schema.eachPath(function(path, def){ 116 | if(def.options.alias !== undefined && def.options.alias === key){ 117 | originalName = path; 118 | } 119 | }); 120 | 121 | return originalName; 122 | }; 123 | } 124 | 125 | function getter_helper(prop){ 126 | return function(){ 127 | return this.get(prop); 128 | }; 129 | } 130 | 131 | function setter_helper(prop){ 132 | return function(value){ 133 | return this.set(prop, value); 134 | }; 135 | } 136 | 137 | 138 | module.exports = exports = function fieldsAliasPlugin(schema, options) { 139 | 140 | for(var path in schema.paths){ 141 | /*Set alias name only if alias property is setted in schema*/ 142 | if( schema.paths[path].options.alias && 'string' == typeof schema.paths[path].options.alias && schema.paths[path].options.alias !== ''){ 143 | var aliased_property = schema.paths[path].options.alias; 144 | var real_property = schema.paths[path].path; 145 | 146 | //Adding getters and setters for virtual alias names 147 | schema 148 | .virtual(aliased_property) 149 | .get(getter_helper(real_property)) 150 | .set(setter_helper(real_property)); 151 | } 152 | } 153 | 154 | /*Adding method toAliasedFieldsObject to schema*/ 155 | 156 | schema.methods.toAliasedFieldsObject = _toAliasedFieldsObjectProvider(schema); 157 | schema.statics.toOriginalFieldsObject = _toShortFieldsObjectProvider(schema); 158 | schema.statics.toOriginalFieldFromAlias = _toOriginalFieldFromAlias(schema); 159 | }; 160 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mongoose-aliasfield", 3 | "description": "Field alias support for mongoose", 4 | "version": "0.3.7", 5 | "author": { 6 | "name": "Fabrizio Ruggeri", 7 | "email": "fabrizio.ruggeri@gmail.com", 8 | "url": "http://www.ramielcreations.com/" 9 | }, 10 | "license": "GPL-2.0", 11 | "main": "./index.js", 12 | "scripts": { 13 | "test": "./node_modules/.bin/mocha tests/*.js" 14 | }, 15 | "devDependencies": { 16 | "chai": "^3.5.0", 17 | "grunt": "^1.0.1", 18 | "grunt-mocha-cov": "^0.4.0", 19 | "mocha": "^3.2.0", 20 | "mongoose": "<4.10.0" 21 | }, 22 | "peerDependencies": { 23 | "mongoose": ">=2 <4.10.0" 24 | }, 25 | "keywords": [ 26 | "mongoose", 27 | "mongo", 28 | "mongodb", 29 | "alias", 30 | "field" 31 | ], 32 | "homepage": "http://www.ramielcreations.com/projects/alias-fields-plugin-for-mongoose/", 33 | "repository": { 34 | "type": "git", 35 | "url": "git://github.com/ramiel/mongoose-aliasfield.git" 36 | }, 37 | "bugs": { 38 | "url": "https://github.com/ramiel/mongoose-aliasfield/issues/new" 39 | }, 40 | "config": { 41 | "blanket": { 42 | "pattern": [ 43 | "lib" 44 | ], 45 | "data-cover-never": [ 46 | "node_modules", 47 | "tests" 48 | ] 49 | } 50 | }, 51 | "engines": { 52 | "node": ">=0.4.0" 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /tests/aliasfields.js: -------------------------------------------------------------------------------- 1 | var fieldsAliasPlugin = require('../lib/field-alias-plugin'), 2 | mongoose = require('mongoose'), 3 | Schema = mongoose.Schema, 4 | mocha = require('mocha'), 5 | chai = require('chai'), 6 | assert = chai.assert; 7 | 8 | 9 | describe('Aliased fields',function(){ 10 | 11 | before(function connection(done){ 12 | mongoose.connection.on('open',done); 13 | mongoose.connection.on('error',done); 14 | mongoose.connect('mongodb://127.0.0.1/testing'); 15 | }); 16 | 17 | after(function(done){ 18 | mongoose.connection.db.dropDatabase(function(err, result) { 19 | mongoose.disconnect(done); 20 | }); 21 | }); 22 | 23 | describe('creating a test schema with aliased fields',function(){ 24 | 25 | before(function create_schema(){ 26 | var TestSchema = new Schema({ 27 | 't' : {'type': Date, 'default': new Date(), 'alias': 'timestamp'}, 28 | 'v' : {'type' : Number, 'required' : true}, 29 | 'ext' : { 30 | 'min' : {'type':Number, 'alias':'external.minimum'} 31 | }, 32 | 'a':{ 33 | 'b':{ 34 | 'c': {type:Number, alias:'depthly.carlo'}, 35 | 'd': {type:String, alias:'depthly.david'} 36 | } 37 | } 38 | }); 39 | TestSchema.plugin(fieldsAliasPlugin); 40 | this.TestModel = mongoose.model('test', TestSchema); 41 | }); 42 | 43 | it('model gained toAliasedFieldsObject method', function(){ 44 | var t = new this.TestModel(); 45 | assert.isFunction(t.toAliasedFieldsObject); 46 | }); 47 | 48 | 49 | 50 | describe('after generating a model instance',function(){ 51 | 52 | before(function create_instance(done){ 53 | this.t = new this.TestModel({ 54 | 'timestamp' : new Date(), 55 | 'v' : 15, 56 | 'external.minimum': 30, 57 | 'depthly.david' :'hello' 58 | }); 59 | this.t.save(done); 60 | }); 61 | 62 | it('has aliased properties', function(){ 63 | var instance = this.t; 64 | assert.equal(instance.external.minimum, 30); 65 | assert.equal(instance.depthly.david, 'hello'); 66 | var i = instance.toAliasedFieldsObject(); 67 | assert.property (i, 'timestamp'); 68 | }); 69 | 70 | it('hasn\'t not aliased properties which are mantained unaltered',function(){ 71 | var i = this.t.toAliasedFieldsObject(); 72 | assert.property(i, 'v'); 73 | }); 74 | 75 | it('hasn\'t getter for properties which have not a value',function(){ 76 | var i = this.t.toAliasedFieldsObject(); 77 | assert.isUndefined(i.depthly.carlo); 78 | }); 79 | 80 | }); 81 | }); 82 | 83 | describe('creating a test schema with array properties',function(){ 84 | 85 | before(function create_schema(done){ 86 | var TestSchema = new Schema({ 87 | 't' : [{'type': Date, 'default': new Date(), 'alias': 'timestamp'}] 88 | }); 89 | TestSchema.plugin(fieldsAliasPlugin); 90 | this.TestModel = mongoose.model('testarrays', TestSchema); 91 | this.t = new this.TestModel({ 92 | 'timestamp' : [new Date()] 93 | }); 94 | this.t.save(done); 95 | }); 96 | 97 | it('has aliased properties', function(){ 98 | var i = this.t.toAliasedFieldsObject(); 99 | assert.property (i, 'timestamp'); 100 | }); 101 | }); 102 | 103 | describe('creating a test schema with an external reference',function(){ 104 | 105 | before(function create_schema_with_reference(done){ 106 | this.Person = null; 107 | this.parent = null; 108 | var PersonSchema = new Schema({ 109 | 'n' : {'type' : String, 'required' : true, alias: 'name'}, 110 | 'c' : {'type': Schema.Types.ObjectId, ref: 'person', alias: 'child' } 111 | 112 | }); 113 | PersonSchema.plugin(fieldsAliasPlugin); 114 | this.Person = mongoose.model('person', PersonSchema); 115 | 116 | var children = new this.Person({name: 'Tim'}); 117 | 118 | children.save(function(err){ 119 | if(err) return done(err); 120 | this.parent = new this.Person({name: 'Mike', child: children._id }); 121 | this.parent.save(done); 122 | }.bind(this)); 123 | }); 124 | 125 | it('using population aliased fields are mantained',function(done){ 126 | this.found_parent = null; 127 | this.Person 128 | .findOne({n: 'Mike'}) 129 | .populate('c') 130 | .exec(function(err, person){ 131 | if(err) return done(err); 132 | this.found_parent = person; 133 | assert.isFunction(person.toAliasedFieldsObject); 134 | assert.isFunction(person.child.toAliasedFieldsObject); 135 | assert.equal(person.name, 'Mike'); 136 | assert.equal(person.child.name, 'Tim'); 137 | done(); 138 | }.bind(this)); 139 | }); 140 | 141 | it('applying "toAliasedFieldsObject" to referenced model is possible',function(){ 142 | var t = this.found_parent.child.toAliasedFieldsObject(); 143 | assert.equal(t.name, 'Tim'); 144 | }); 145 | 146 | }); 147 | 148 | describe('Transforming aliased objects to original names', function(){ 149 | before(function(){ 150 | var PersonSchema = new Schema({ 151 | n : {type : String, required : true, alias: 'name'}, 152 | a : { 153 | s: {type: String, alias: 'address.street' }, 154 | d: {type: Date, alias: 'address.date'} 155 | }, 156 | likes: {type: Number} 157 | 158 | }); 159 | PersonSchema.plugin(fieldsAliasPlugin); 160 | this.Person = mongoose.model('person_transforming', PersonSchema); 161 | }); 162 | 163 | it('works with primitive', function(){ 164 | var ex1 = {name: 'John', address: {street: 'Rue Morand'}}; 165 | var flatten = this.Person.toOriginalFieldsObject(ex1); 166 | assert.deepEqual(flatten, { n: 'John', a: {s: 'Rue Morand'} }); 167 | }); 168 | 169 | it('works with dates', function(){ 170 | var date = new Date(); 171 | var ex2 = {name: 'John', address: {street: 'Rue Morand', date: date}}; 172 | var flatten = this.Person.toOriginalFieldsObject(ex2); 173 | assert.deepEqual(flatten, { n: 'John', a: {s: 'Rue Morand', d: date}}); 174 | }); 175 | 176 | it('preserves null values', function(){ 177 | var ex3 = {name: 'John', address: {street: 'Rue Morand', date: null}}; 178 | var flatten = this.Person.toOriginalFieldsObject(ex3); 179 | assert.deepEqual(flatten, { n: 'John', a: {s: 'Rue Morand', d: null}}); 180 | }); 181 | 182 | it('works with properties which have no alias', function(){ 183 | var ex4 = {name: 'John', address: {street: 'Rue Morand'},likes: 5}; 184 | var flatten = this.Person.toOriginalFieldsObject(ex4); 185 | assert.deepEqual(flatten, { n: 'John', a: {s: 'Rue Morand'}, likes: 5 }); 186 | }); 187 | 188 | it('do not works with mixed representations', function(){ 189 | var ex4 = {n: 'John', address: {s: 'Rue Morand'},likes: 5}; 190 | var flatten = this.Person.toOriginalFieldsObject(ex4); 191 | assert.notEqual(flatten, { n: 'John', a: {s: 'Rue Morand'}, likes: 5 }); 192 | }); 193 | }) 194 | 195 | describe('Transforming aliased property to original name', function(){ 196 | before(function(){ 197 | var PersonSchema = new Schema({ 198 | n : {type : String, required : true, alias: 'name'}, 199 | a : { 200 | s: {type: String, alias: 'address.street' }, 201 | d: {type: Date, alias: 'address.date'} 202 | }, 203 | likes: {type: Number} 204 | 205 | }); 206 | PersonSchema.plugin(fieldsAliasPlugin); 207 | this.Person = mongoose.model('aliased_property_test', PersonSchema); 208 | }); 209 | 210 | it('works top level property', function(){ 211 | var flatten = this.Person.toOriginalFieldFromAlias('name'); 212 | assert.equal(flatten, 'n'); 213 | }); 214 | 215 | it('works sub level property', function(){ 216 | var flatten = this.Person.toOriginalFieldFromAlias('address.street'); 217 | assert.equal(flatten, 'a.s'); 218 | }); 219 | 220 | it('works non-aliased property', function(){ 221 | var flatten = this.Person.toOriginalFieldFromAlias('likes'); 222 | assert.equal(flatten, 'likes'); 223 | }); 224 | }) 225 | 226 | }); 227 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | abbrev@1: 6 | version "1.1.0" 7 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" 8 | 9 | ansi-regex@^2.0.0: 10 | version "2.1.1" 11 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 12 | 13 | ansi-styles@^2.2.1: 14 | version "2.2.1" 15 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 16 | 17 | argparse@^1.0.2: 18 | version "1.0.9" 19 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" 20 | dependencies: 21 | sprintf-js "~1.0.2" 22 | 23 | "argparse@~ 0.1.11": 24 | version "0.1.16" 25 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-0.1.16.tgz#cfd01e0fbba3d6caed049fbd758d40f65196f57c" 26 | dependencies: 27 | underscore "~1.7.0" 28 | underscore.string "~2.4.0" 29 | 30 | array-find-index@^1.0.1: 31 | version "1.0.2" 32 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" 33 | 34 | asn1@0.1.11: 35 | version "0.1.11" 36 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" 37 | 38 | assert-plus@^0.1.5: 39 | version "0.1.5" 40 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" 41 | 42 | assertion-error@^1.0.1: 43 | version "1.0.2" 44 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" 45 | 46 | async@2.1.4: 47 | version "2.1.4" 48 | resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" 49 | dependencies: 50 | lodash "^4.14.0" 51 | 52 | async@~0.9.0: 53 | version "0.9.2" 54 | resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" 55 | 56 | async@~1.5.2: 57 | version "1.5.2" 58 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" 59 | 60 | aws-sign2@~0.5.0: 61 | version "0.5.0" 62 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" 63 | 64 | balanced-match@^0.4.1: 65 | version "0.4.2" 66 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 67 | 68 | bl@~0.9.0: 69 | version "0.9.5" 70 | resolved "https://registry.yarnpkg.com/bl/-/bl-0.9.5.tgz#c06b797af085ea00bc527afc8efcf11de2232054" 71 | dependencies: 72 | readable-stream "~1.0.26" 73 | 74 | blanket@1.1.6: 75 | version "1.1.6" 76 | resolved "https://registry.yarnpkg.com/blanket/-/blanket-1.1.6.tgz#ff93783dfe08b4f8baa790cd46948f5f3c6fd152" 77 | dependencies: 78 | esprima "~1.0.2" 79 | falafel "~0.1.6" 80 | xtend "~2.1.1" 81 | 82 | bluebird@2.10.2: 83 | version "2.10.2" 84 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.10.2.tgz#024a5517295308857f14f91f1106fc3b555f446b" 85 | 86 | boom@0.4.x: 87 | version "0.4.2" 88 | resolved "https://registry.yarnpkg.com/boom/-/boom-0.4.2.tgz#7a636e9ded4efcefb19cef4947a3c67dfaee911b" 89 | dependencies: 90 | hoek "0.9.x" 91 | 92 | boom@2.x.x: 93 | version "2.10.1" 94 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 95 | dependencies: 96 | hoek "2.x.x" 97 | 98 | brace-expansion@^1.1.7: 99 | version "1.1.7" 100 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" 101 | dependencies: 102 | balanced-match "^0.4.1" 103 | concat-map "0.0.1" 104 | 105 | browser-stdout@1.3.0: 106 | version "1.3.0" 107 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" 108 | 109 | bson@~1.0.4: 110 | version "1.0.4" 111 | resolved "https://registry.yarnpkg.com/bson/-/bson-1.0.4.tgz#93c10d39eaa5b58415cbc4052f3e53e562b0b72c" 112 | 113 | buffer-shims@~1.0.0: 114 | version "1.0.0" 115 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 116 | 117 | builtin-modules@^1.0.0: 118 | version "1.1.1" 119 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 120 | 121 | camelcase-keys@^2.0.0: 122 | version "2.1.0" 123 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" 124 | dependencies: 125 | camelcase "^2.0.0" 126 | map-obj "^1.0.0" 127 | 128 | camelcase@^2.0.0: 129 | version "2.1.1" 130 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 131 | 132 | caseless@~0.9.0: 133 | version "0.9.0" 134 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.9.0.tgz#b7b65ce6bf1413886539cfd533f0b30effa9cf88" 135 | 136 | chai@^3.5.0: 137 | version "3.5.0" 138 | resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" 139 | dependencies: 140 | assertion-error "^1.0.1" 141 | deep-eql "^0.1.3" 142 | type-detect "^1.0.0" 143 | 144 | chalk@~1.1.1: 145 | version "1.1.3" 146 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 147 | dependencies: 148 | ansi-styles "^2.2.1" 149 | escape-string-regexp "^1.0.2" 150 | has-ansi "^2.0.0" 151 | strip-ansi "^3.0.0" 152 | supports-color "^2.0.0" 153 | 154 | coffee-script@~1.10.0: 155 | version "1.10.0" 156 | resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.10.0.tgz#12938bcf9be1948fa006f92e0c4c9e81705108c0" 157 | 158 | colors@~1.1.2: 159 | version "1.1.2" 160 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" 161 | 162 | combined-stream@~0.0.4, combined-stream@~0.0.5: 163 | version "0.0.7" 164 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f" 165 | dependencies: 166 | delayed-stream "0.0.5" 167 | 168 | commander@0.6.1: 169 | version "0.6.1" 170 | resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" 171 | 172 | commander@2.3.0: 173 | version "2.3.0" 174 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873" 175 | 176 | commander@2.9.0: 177 | version "2.9.0" 178 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 179 | dependencies: 180 | graceful-readlink ">= 1.0.0" 181 | 182 | concat-map@0.0.1: 183 | version "0.0.1" 184 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 185 | 186 | core-util-is@~1.0.0: 187 | version "1.0.2" 188 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 189 | 190 | coveralls@2.11.2: 191 | version "2.11.2" 192 | resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.2.tgz#d4d982016cb2f9da89d77ab204d86a8537e6a12d" 193 | dependencies: 194 | js-yaml "3.0.1" 195 | lcov-parse "0.0.6" 196 | log-driver "1.2.4" 197 | request "2.40.0" 198 | 199 | cryptiles@0.2.x: 200 | version "0.2.2" 201 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-0.2.2.tgz#ed91ff1f17ad13d3748288594f8a48a0d26f325c" 202 | dependencies: 203 | boom "0.4.x" 204 | 205 | cryptiles@2.x.x: 206 | version "2.0.5" 207 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 208 | dependencies: 209 | boom "2.x.x" 210 | 211 | ctype@0.5.3: 212 | version "0.5.3" 213 | resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" 214 | 215 | currently-unhandled@^0.4.1: 216 | version "0.4.1" 217 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" 218 | dependencies: 219 | array-find-index "^1.0.1" 220 | 221 | dateformat@~1.0.12: 222 | version "1.0.12" 223 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" 224 | dependencies: 225 | get-stdin "^4.0.1" 226 | meow "^3.3.0" 227 | 228 | debug@2.0.0: 229 | version "2.0.0" 230 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.0.0.tgz#89bd9df6732b51256bc6705342bba02ed12131ef" 231 | dependencies: 232 | ms "0.6.2" 233 | 234 | debug@2.2.0: 235 | version "2.2.0" 236 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" 237 | dependencies: 238 | ms "0.7.1" 239 | 240 | debug@2.6.0: 241 | version "2.6.0" 242 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" 243 | dependencies: 244 | ms "0.7.2" 245 | 246 | decamelize@^1.1.2: 247 | version "1.2.0" 248 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 249 | 250 | deep-eql@^0.1.3: 251 | version "0.1.3" 252 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" 253 | dependencies: 254 | type-detect "0.1.1" 255 | 256 | delayed-stream@0.0.5: 257 | version "0.0.5" 258 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f" 259 | 260 | diff@1.0.8: 261 | version "1.0.8" 262 | resolved "https://registry.yarnpkg.com/diff/-/diff-1.0.8.tgz#343276308ec991b7bc82267ed55bc1411f971666" 263 | 264 | diff@3.2.0: 265 | version "3.2.0" 266 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" 267 | 268 | error-ex@^1.2.0: 269 | version "1.3.1" 270 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" 271 | dependencies: 272 | is-arrayish "^0.2.1" 273 | 274 | es6-promise@3.2.1: 275 | version "3.2.1" 276 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4" 277 | 278 | escape-string-regexp@1.0.2: 279 | version "1.0.2" 280 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" 281 | 282 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2: 283 | version "1.0.5" 284 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 285 | 286 | esprima@^2.6.0: 287 | version "2.7.3" 288 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 289 | 290 | "esprima@~ 1.0.2", esprima@~1.0.2: 291 | version "1.0.4" 292 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" 293 | 294 | eventemitter2@~0.4.13: 295 | version "0.4.14" 296 | resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" 297 | 298 | exit@~0.1.1: 299 | version "0.1.2" 300 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 301 | 302 | falafel@~0.1.6: 303 | version "0.1.6" 304 | resolved "https://registry.yarnpkg.com/falafel/-/falafel-0.1.6.tgz#3084cf3d41b59d15c813be6f259557fdc82b0660" 305 | dependencies: 306 | esprima "~1.0.2" 307 | 308 | find-up@^1.0.0: 309 | version "1.1.2" 310 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 311 | dependencies: 312 | path-exists "^2.0.0" 313 | pinkie-promise "^2.0.0" 314 | 315 | findup-sync@~0.3.0: 316 | version "0.3.0" 317 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" 318 | dependencies: 319 | glob "~5.0.0" 320 | 321 | forever-agent@~0.5.0: 322 | version "0.5.2" 323 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.5.2.tgz#6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" 324 | 325 | form-data@~0.1.0: 326 | version "0.1.4" 327 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.1.4.tgz#91abd788aba9702b1aabfa8bc01031a2ac9e3b12" 328 | dependencies: 329 | async "~0.9.0" 330 | combined-stream "~0.0.4" 331 | mime "~1.2.11" 332 | 333 | form-data@~0.2.0: 334 | version "0.2.0" 335 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.2.0.tgz#26f8bc26da6440e299cbdcfb69035c4f77a6e466" 336 | dependencies: 337 | async "~0.9.0" 338 | combined-stream "~0.0.4" 339 | mime-types "~2.0.3" 340 | 341 | fs.realpath@^1.0.0: 342 | version "1.0.0" 343 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 344 | 345 | get-stdin@^4.0.1: 346 | version "4.0.1" 347 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" 348 | 349 | getobject@~0.1.0: 350 | version "0.1.0" 351 | resolved "https://registry.yarnpkg.com/getobject/-/getobject-0.1.0.tgz#047a449789fa160d018f5486ed91320b6ec7885c" 352 | 353 | glob@3.2.3: 354 | version "3.2.3" 355 | resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.3.tgz#e313eeb249c7affaa5c475286b0e115b59839467" 356 | dependencies: 357 | graceful-fs "~2.0.0" 358 | inherits "2" 359 | minimatch "~0.2.11" 360 | 361 | glob@7.1.1: 362 | version "7.1.1" 363 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 364 | dependencies: 365 | fs.realpath "^1.0.0" 366 | inflight "^1.0.4" 367 | inherits "2" 368 | minimatch "^3.0.2" 369 | once "^1.3.0" 370 | path-is-absolute "^1.0.0" 371 | 372 | glob@~5.0.0: 373 | version "5.0.15" 374 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" 375 | dependencies: 376 | inflight "^1.0.4" 377 | inherits "2" 378 | minimatch "2 || 3" 379 | once "^1.3.0" 380 | path-is-absolute "^1.0.0" 381 | 382 | glob@~7.0.0: 383 | version "7.0.6" 384 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" 385 | dependencies: 386 | fs.realpath "^1.0.0" 387 | inflight "^1.0.4" 388 | inherits "2" 389 | minimatch "^3.0.2" 390 | once "^1.3.0" 391 | path-is-absolute "^1.0.0" 392 | 393 | graceful-fs@^4.1.2: 394 | version "4.1.11" 395 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 396 | 397 | graceful-fs@~2.0.0: 398 | version "2.0.3" 399 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-2.0.3.tgz#7cd2cdb228a4a3f36e95efa6cc142de7d1a136d0" 400 | 401 | "graceful-readlink@>= 1.0.0": 402 | version "1.0.1" 403 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 404 | 405 | growl@1.8.1: 406 | version "1.8.1" 407 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.8.1.tgz#4b2dec8d907e93db336624dcec0183502f8c9428" 408 | 409 | growl@1.9.2: 410 | version "1.9.2" 411 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" 412 | 413 | grunt-cli@~1.2.0: 414 | version "1.2.0" 415 | resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-1.2.0.tgz#562b119ebb069ddb464ace2845501be97b35b6a8" 416 | dependencies: 417 | findup-sync "~0.3.0" 418 | grunt-known-options "~1.1.0" 419 | nopt "~3.0.6" 420 | resolve "~1.1.0" 421 | 422 | grunt-known-options@~1.1.0: 423 | version "1.1.0" 424 | resolved "https://registry.yarnpkg.com/grunt-known-options/-/grunt-known-options-1.1.0.tgz#a4274eeb32fa765da5a7a3b1712617ce3b144149" 425 | 426 | grunt-legacy-log-utils@~1.0.0: 427 | version "1.0.0" 428 | resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz#a7b8e2d0fb35b5a50f4af986fc112749ebc96f3d" 429 | dependencies: 430 | chalk "~1.1.1" 431 | lodash "~4.3.0" 432 | 433 | grunt-legacy-log@~1.0.0: 434 | version "1.0.0" 435 | resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz#fb86f1809847bc07dc47843f9ecd6cacb62df2d5" 436 | dependencies: 437 | colors "~1.1.2" 438 | grunt-legacy-log-utils "~1.0.0" 439 | hooker "~0.2.3" 440 | lodash "~3.10.1" 441 | underscore.string "~3.2.3" 442 | 443 | grunt-legacy-util@~1.0.0: 444 | version "1.0.0" 445 | resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz#386aa78dc6ed50986c2b18957265b1b48abb9b86" 446 | dependencies: 447 | async "~1.5.2" 448 | exit "~0.1.1" 449 | getobject "~0.1.0" 450 | hooker "~0.2.3" 451 | lodash "~4.3.0" 452 | underscore.string "~3.2.3" 453 | which "~1.2.1" 454 | 455 | grunt-mocha-cov@^0.4.0: 456 | version "0.4.0" 457 | resolved "https://registry.yarnpkg.com/grunt-mocha-cov/-/grunt-mocha-cov-0.4.0.tgz#8023966db058753741b8578dace63c6f71021d7a" 458 | dependencies: 459 | blanket "1.1.6" 460 | coveralls "2.11.2" 461 | lcov-parse "0.0.9" 462 | lodash.defaults "3.0.0" 463 | mkdirp "0.5.0" 464 | mocha "2.2.1" 465 | mocha-lcov-reporter "0.0.2" 466 | request "2.53.0" 467 | 468 | grunt@^1.0.1: 469 | version "1.0.1" 470 | resolved "https://registry.yarnpkg.com/grunt/-/grunt-1.0.1.tgz#e8778764e944b18f32bb0f10b9078475c9dfb56b" 471 | dependencies: 472 | coffee-script "~1.10.0" 473 | dateformat "~1.0.12" 474 | eventemitter2 "~0.4.13" 475 | exit "~0.1.1" 476 | findup-sync "~0.3.0" 477 | glob "~7.0.0" 478 | grunt-cli "~1.2.0" 479 | grunt-known-options "~1.1.0" 480 | grunt-legacy-log "~1.0.0" 481 | grunt-legacy-util "~1.0.0" 482 | iconv-lite "~0.4.13" 483 | js-yaml "~3.5.2" 484 | minimatch "~3.0.0" 485 | nopt "~3.0.6" 486 | path-is-absolute "~1.0.0" 487 | rimraf "~2.2.8" 488 | 489 | has-ansi@^2.0.0: 490 | version "2.0.0" 491 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 492 | dependencies: 493 | ansi-regex "^2.0.0" 494 | 495 | has-flag@^1.0.0: 496 | version "1.0.0" 497 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 498 | 499 | hawk@1.1.1: 500 | version "1.1.1" 501 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-1.1.1.tgz#87cd491f9b46e4e2aeaca335416766885d2d1ed9" 502 | dependencies: 503 | boom "0.4.x" 504 | cryptiles "0.2.x" 505 | hoek "0.9.x" 506 | sntp "0.2.x" 507 | 508 | hawk@~2.3.0: 509 | version "2.3.1" 510 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-2.3.1.tgz#1e731ce39447fa1d0f6d707f7bceebec0fd1ec1f" 511 | dependencies: 512 | boom "2.x.x" 513 | cryptiles "2.x.x" 514 | hoek "2.x.x" 515 | sntp "1.x.x" 516 | 517 | hoek@0.9.x: 518 | version "0.9.1" 519 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505" 520 | 521 | hoek@2.x.x: 522 | version "2.16.3" 523 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 524 | 525 | hooker@~0.2.3: 526 | version "0.2.3" 527 | resolved "https://registry.yarnpkg.com/hooker/-/hooker-0.2.3.tgz#b834f723cc4a242aa65963459df6d984c5d3d959" 528 | 529 | hooks-fixed@2.0.0: 530 | version "2.0.0" 531 | resolved "https://registry.yarnpkg.com/hooks-fixed/-/hooks-fixed-2.0.0.tgz#a01d894d52ac7f6599bbb1f63dfc9c411df70cba" 532 | 533 | hosted-git-info@^2.1.4: 534 | version "2.4.2" 535 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" 536 | 537 | http-signature@~0.10.0: 538 | version "0.10.1" 539 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.10.1.tgz#4fbdac132559aa8323121e540779c0a012b27e66" 540 | dependencies: 541 | asn1 "0.1.11" 542 | assert-plus "^0.1.5" 543 | ctype "0.5.3" 544 | 545 | iconv-lite@~0.4.13: 546 | version "0.4.17" 547 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.17.tgz#4fdaa3b38acbc2c031b045d0edcdfe1ecab18c8d" 548 | 549 | indent-string@^2.1.0: 550 | version "2.1.0" 551 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" 552 | dependencies: 553 | repeating "^2.0.0" 554 | 555 | inflight@^1.0.4: 556 | version "1.0.6" 557 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 558 | dependencies: 559 | once "^1.3.0" 560 | wrappy "1" 561 | 562 | inherits@2, inherits@~2.0.1: 563 | version "2.0.3" 564 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 565 | 566 | is-arrayish@^0.2.1: 567 | version "0.2.1" 568 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 569 | 570 | is-builtin-module@^1.0.0: 571 | version "1.0.0" 572 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 573 | dependencies: 574 | builtin-modules "^1.0.0" 575 | 576 | is-finite@^1.0.0: 577 | version "1.0.2" 578 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 579 | dependencies: 580 | number-is-nan "^1.0.0" 581 | 582 | is-utf8@^0.2.0: 583 | version "0.2.1" 584 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 585 | 586 | isarray@0.0.1: 587 | version "0.0.1" 588 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 589 | 590 | isarray@~1.0.0: 591 | version "1.0.0" 592 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 593 | 594 | isexe@^2.0.0: 595 | version "2.0.0" 596 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 597 | 598 | isstream@~0.1.1: 599 | version "0.1.2" 600 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 601 | 602 | jade@0.26.3: 603 | version "0.26.3" 604 | resolved "https://registry.yarnpkg.com/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c" 605 | dependencies: 606 | commander "0.6.1" 607 | mkdirp "0.3.0" 608 | 609 | js-yaml@3.0.1: 610 | version "3.0.1" 611 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.0.1.tgz#76405fea5bce30fc8f405d48c6dca7f0a32c6afe" 612 | dependencies: 613 | argparse "~ 0.1.11" 614 | esprima "~ 1.0.2" 615 | 616 | js-yaml@~3.5.2: 617 | version "3.5.5" 618 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.5.5.tgz#0377c38017cabc7322b0d1fbcd25a491641f2fbe" 619 | dependencies: 620 | argparse "^1.0.2" 621 | esprima "^2.6.0" 622 | 623 | json-stringify-safe@~5.0.0: 624 | version "5.0.1" 625 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 626 | 627 | json3@3.3.2: 628 | version "3.3.2" 629 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" 630 | 631 | kareem@1.4.1: 632 | version "1.4.1" 633 | resolved "https://registry.yarnpkg.com/kareem/-/kareem-1.4.1.tgz#ed76200044fa041ef32b4da8261e2553f1173531" 634 | 635 | lcov-parse@0.0.6: 636 | version "0.0.6" 637 | resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.6.tgz#819e5da8bf0791f9d3f39eea5ed1868187f11175" 638 | 639 | lcov-parse@0.0.9: 640 | version "0.0.9" 641 | resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.9.tgz#dddc893082aea7856477a3b8df86265ccab3ec04" 642 | 643 | load-json-file@^1.0.0: 644 | version "1.1.0" 645 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 646 | dependencies: 647 | graceful-fs "^4.1.2" 648 | parse-json "^2.2.0" 649 | pify "^2.0.0" 650 | pinkie-promise "^2.0.0" 651 | strip-bom "^2.0.0" 652 | 653 | lodash._arraycopy@^3.0.0: 654 | version "3.0.0" 655 | resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" 656 | 657 | lodash._baseassign@^3.0.0: 658 | version "3.2.0" 659 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" 660 | dependencies: 661 | lodash._basecopy "^3.0.0" 662 | lodash.keys "^3.0.0" 663 | 664 | lodash._basecopy@^3.0.0: 665 | version "3.0.1" 666 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 667 | 668 | lodash._basecreate@^3.0.0: 669 | version "3.0.3" 670 | resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" 671 | 672 | lodash._bindcallback@^3.0.0: 673 | version "3.0.1" 674 | resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" 675 | 676 | lodash._createassigner@^3.0.0: 677 | version "3.1.1" 678 | resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" 679 | dependencies: 680 | lodash._bindcallback "^3.0.0" 681 | lodash._isiterateecall "^3.0.0" 682 | lodash.restparam "^3.0.0" 683 | 684 | lodash._getnative@^3.0.0: 685 | version "3.9.1" 686 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 687 | 688 | lodash._isiterateecall@^3.0.0: 689 | version "3.0.9" 690 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" 691 | 692 | lodash.assign@^3.0.0: 693 | version "3.2.0" 694 | resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" 695 | dependencies: 696 | lodash._baseassign "^3.0.0" 697 | lodash._createassigner "^3.0.0" 698 | lodash.keys "^3.0.0" 699 | 700 | lodash.create@3.1.1: 701 | version "3.1.1" 702 | resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" 703 | dependencies: 704 | lodash._baseassign "^3.0.0" 705 | lodash._basecreate "^3.0.0" 706 | lodash._isiterateecall "^3.0.0" 707 | 708 | lodash.defaults@3.0.0: 709 | version "3.0.0" 710 | resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.0.0.tgz#8f1984541e88b00218ca0900f9d8959038c72e9a" 711 | dependencies: 712 | lodash._arraycopy "^3.0.0" 713 | lodash.assign "^3.0.0" 714 | 715 | lodash.isarguments@^3.0.0: 716 | version "3.1.0" 717 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 718 | 719 | lodash.isarray@^3.0.0: 720 | version "3.0.4" 721 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 722 | 723 | lodash.keys@^3.0.0: 724 | version "3.1.2" 725 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 726 | dependencies: 727 | lodash._getnative "^3.0.0" 728 | lodash.isarguments "^3.0.0" 729 | lodash.isarray "^3.0.0" 730 | 731 | lodash.restparam@^3.0.0: 732 | version "3.6.1" 733 | resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" 734 | 735 | lodash@^4.14.0: 736 | version "4.17.4" 737 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 738 | 739 | lodash@~3.10.1: 740 | version "3.10.1" 741 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" 742 | 743 | lodash@~4.3.0: 744 | version "4.3.0" 745 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.3.0.tgz#efd9c4a6ec53f3b05412429915c3e4824e4d25a4" 746 | 747 | log-driver@1.2.4: 748 | version "1.2.4" 749 | resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.4.tgz#2d62d7faef45d8a71341961a04b0761eca99cfa3" 750 | 751 | loud-rejection@^1.0.0: 752 | version "1.6.0" 753 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" 754 | dependencies: 755 | currently-unhandled "^0.4.1" 756 | signal-exit "^3.0.0" 757 | 758 | lru-cache@2: 759 | version "2.7.3" 760 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" 761 | 762 | map-obj@^1.0.0, map-obj@^1.0.1: 763 | version "1.0.1" 764 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" 765 | 766 | meow@^3.3.0: 767 | version "3.7.0" 768 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" 769 | dependencies: 770 | camelcase-keys "^2.0.0" 771 | decamelize "^1.1.2" 772 | loud-rejection "^1.0.0" 773 | map-obj "^1.0.1" 774 | minimist "^1.1.3" 775 | normalize-package-data "^2.3.4" 776 | object-assign "^4.0.1" 777 | read-pkg-up "^1.0.1" 778 | redent "^1.0.0" 779 | trim-newlines "^1.0.0" 780 | 781 | mime-db@~1.12.0: 782 | version "1.12.0" 783 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.12.0.tgz#3d0c63180f458eb10d325aaa37d7c58ae312e9d7" 784 | 785 | mime-types@~1.0.1: 786 | version "1.0.2" 787 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-1.0.2.tgz#995ae1392ab8affcbfcb2641dd054e943c0d5dce" 788 | 789 | mime-types@~2.0.1, mime-types@~2.0.3: 790 | version "2.0.14" 791 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.0.14.tgz#310e159db23e077f8bb22b748dabfa4957140aa6" 792 | dependencies: 793 | mime-db "~1.12.0" 794 | 795 | mime@~1.2.11: 796 | version "1.2.11" 797 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" 798 | 799 | "minimatch@2 || 3", minimatch@^3.0.2, minimatch@~3.0.0: 800 | version "3.0.4" 801 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 802 | dependencies: 803 | brace-expansion "^1.1.7" 804 | 805 | minimatch@~0.2.11: 806 | version "0.2.14" 807 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" 808 | dependencies: 809 | lru-cache "2" 810 | sigmund "~1.0.0" 811 | 812 | minimist@0.0.8: 813 | version "0.0.8" 814 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 815 | 816 | minimist@^1.1.3: 817 | version "1.2.0" 818 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 819 | 820 | mkdirp@0.3.0: 821 | version "0.3.0" 822 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" 823 | 824 | mkdirp@0.5.0: 825 | version "0.5.0" 826 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" 827 | dependencies: 828 | minimist "0.0.8" 829 | 830 | mkdirp@0.5.1: 831 | version "0.5.1" 832 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 833 | dependencies: 834 | minimist "0.0.8" 835 | 836 | mocha-lcov-reporter@0.0.2: 837 | version "0.0.2" 838 | resolved "https://registry.yarnpkg.com/mocha-lcov-reporter/-/mocha-lcov-reporter-0.0.2.tgz#add13ad24158431570cada442c614edc5e4feb95" 839 | 840 | mocha@2.2.1: 841 | version "2.2.1" 842 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-2.2.1.tgz#04a2f8aeb149fe50177e00a7ef5d08c639e9126b" 843 | dependencies: 844 | commander "2.3.0" 845 | debug "2.0.0" 846 | diff "1.0.8" 847 | escape-string-regexp "1.0.2" 848 | glob "3.2.3" 849 | growl "1.8.1" 850 | jade "0.26.3" 851 | mkdirp "0.5.0" 852 | supports-color "~1.2.0" 853 | 854 | mocha@^3.2.0: 855 | version "3.4.1" 856 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.4.1.tgz#a3802b4aa381934cacb38de70cf771621da8f9af" 857 | dependencies: 858 | browser-stdout "1.3.0" 859 | commander "2.9.0" 860 | debug "2.6.0" 861 | diff "3.2.0" 862 | escape-string-regexp "1.0.5" 863 | glob "7.1.1" 864 | growl "1.9.2" 865 | json3 "3.3.2" 866 | lodash.create "3.1.1" 867 | mkdirp "0.5.1" 868 | supports-color "3.1.2" 869 | 870 | mongodb-core@2.1.10: 871 | version "2.1.10" 872 | resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-2.1.10.tgz#eb290681d196d3346a492161aa2ea0905e63151b" 873 | dependencies: 874 | bson "~1.0.4" 875 | require_optional "~1.0.0" 876 | 877 | mongodb@2.2.26: 878 | version "2.2.26" 879 | resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-2.2.26.tgz#1bd50c557c277c98e1a05da38c9839c4922b034a" 880 | dependencies: 881 | es6-promise "3.2.1" 882 | mongodb-core "2.1.10" 883 | readable-stream "2.2.7" 884 | 885 | mongoose@<4.10.0: 886 | version "4.9.10" 887 | resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-4.9.10.tgz#3e35963e1ab72b275a998582baeb26e8f202d2e3" 888 | dependencies: 889 | async "2.1.4" 890 | bson "~1.0.4" 891 | hooks-fixed "2.0.0" 892 | kareem "1.4.1" 893 | mongodb "2.2.26" 894 | mpath "0.2.1" 895 | mpromise "0.5.5" 896 | mquery "2.3.0" 897 | ms "0.7.2" 898 | muri "1.2.1" 899 | regexp-clone "0.0.1" 900 | sliced "1.0.1" 901 | 902 | mpath@0.2.1: 903 | version "0.2.1" 904 | resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.2.1.tgz#3a4e829359801de96309c27a6b2e102e89f9e96e" 905 | 906 | mpromise@0.5.5: 907 | version "0.5.5" 908 | resolved "https://registry.yarnpkg.com/mpromise/-/mpromise-0.5.5.tgz#f5b24259d763acc2257b0a0c8c6d866fd51732e6" 909 | 910 | mquery@2.3.0: 911 | version "2.3.0" 912 | resolved "https://registry.yarnpkg.com/mquery/-/mquery-2.3.0.tgz#3d1717ad8958d0c99e42ea2461a109f3e5f3e458" 913 | dependencies: 914 | bluebird "2.10.2" 915 | debug "2.2.0" 916 | regexp-clone "0.0.1" 917 | sliced "0.0.5" 918 | 919 | ms@0.6.2: 920 | version "0.6.2" 921 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.6.2.tgz#d89c2124c6fdc1353d65a8b77bf1aac4b193708c" 922 | 923 | ms@0.7.1: 924 | version "0.7.1" 925 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" 926 | 927 | ms@0.7.2: 928 | version "0.7.2" 929 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" 930 | 931 | muri@1.2.1: 932 | version "1.2.1" 933 | resolved "https://registry.yarnpkg.com/muri/-/muri-1.2.1.tgz#ec7ea5ce6ca6a523eb1ab35bacda5fa816c9aa3c" 934 | 935 | node-uuid@~1.4.0: 936 | version "1.4.8" 937 | resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" 938 | 939 | nopt@~3.0.6: 940 | version "3.0.6" 941 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" 942 | dependencies: 943 | abbrev "1" 944 | 945 | normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: 946 | version "2.3.8" 947 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" 948 | dependencies: 949 | hosted-git-info "^2.1.4" 950 | is-builtin-module "^1.0.0" 951 | semver "2 || 3 || 4 || 5" 952 | validate-npm-package-license "^3.0.1" 953 | 954 | number-is-nan@^1.0.0: 955 | version "1.0.1" 956 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 957 | 958 | oauth-sign@~0.3.0: 959 | version "0.3.0" 960 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.3.0.tgz#cb540f93bb2b22a7d5941691a288d60e8ea9386e" 961 | 962 | oauth-sign@~0.6.0: 963 | version "0.6.0" 964 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.6.0.tgz#7dbeae44f6ca454e1f168451d630746735813ce3" 965 | 966 | object-assign@^4.0.1: 967 | version "4.1.1" 968 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 969 | 970 | object-keys@~0.4.0: 971 | version "0.4.0" 972 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" 973 | 974 | once@^1.3.0: 975 | version "1.4.0" 976 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 977 | dependencies: 978 | wrappy "1" 979 | 980 | parse-json@^2.2.0: 981 | version "2.2.0" 982 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 983 | dependencies: 984 | error-ex "^1.2.0" 985 | 986 | path-exists@^2.0.0: 987 | version "2.1.0" 988 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 989 | dependencies: 990 | pinkie-promise "^2.0.0" 991 | 992 | path-is-absolute@^1.0.0, path-is-absolute@~1.0.0: 993 | version "1.0.1" 994 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 995 | 996 | path-type@^1.0.0: 997 | version "1.1.0" 998 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 999 | dependencies: 1000 | graceful-fs "^4.1.2" 1001 | pify "^2.0.0" 1002 | pinkie-promise "^2.0.0" 1003 | 1004 | pify@^2.0.0: 1005 | version "2.3.0" 1006 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1007 | 1008 | pinkie-promise@^2.0.0: 1009 | version "2.0.1" 1010 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1011 | dependencies: 1012 | pinkie "^2.0.0" 1013 | 1014 | pinkie@^2.0.0: 1015 | version "2.0.4" 1016 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1017 | 1018 | process-nextick-args@~1.0.6: 1019 | version "1.0.7" 1020 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1021 | 1022 | punycode@^1.4.1: 1023 | version "1.4.1" 1024 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1025 | 1026 | qs@~1.0.0: 1027 | version "1.0.2" 1028 | resolved "https://registry.yarnpkg.com/qs/-/qs-1.0.2.tgz#50a93e2b5af6691c31bcea5dae78ee6ea1903768" 1029 | 1030 | qs@~2.3.1: 1031 | version "2.3.3" 1032 | resolved "https://registry.yarnpkg.com/qs/-/qs-2.3.3.tgz#e9e85adbe75da0bbe4c8e0476a086290f863b404" 1033 | 1034 | read-pkg-up@^1.0.1: 1035 | version "1.0.1" 1036 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 1037 | dependencies: 1038 | find-up "^1.0.0" 1039 | read-pkg "^1.0.0" 1040 | 1041 | read-pkg@^1.0.0: 1042 | version "1.1.0" 1043 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 1044 | dependencies: 1045 | load-json-file "^1.0.0" 1046 | normalize-package-data "^2.3.2" 1047 | path-type "^1.0.0" 1048 | 1049 | readable-stream@2.2.7: 1050 | version "2.2.7" 1051 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.7.tgz#07057acbe2467b22042d36f98c5ad507054e95b1" 1052 | dependencies: 1053 | buffer-shims "~1.0.0" 1054 | core-util-is "~1.0.0" 1055 | inherits "~2.0.1" 1056 | isarray "~1.0.0" 1057 | process-nextick-args "~1.0.6" 1058 | string_decoder "~1.0.0" 1059 | util-deprecate "~1.0.1" 1060 | 1061 | readable-stream@~1.0.26: 1062 | version "1.0.34" 1063 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" 1064 | dependencies: 1065 | core-util-is "~1.0.0" 1066 | inherits "~2.0.1" 1067 | isarray "0.0.1" 1068 | string_decoder "~0.10.x" 1069 | 1070 | redent@^1.0.0: 1071 | version "1.0.0" 1072 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" 1073 | dependencies: 1074 | indent-string "^2.1.0" 1075 | strip-indent "^1.0.1" 1076 | 1077 | regexp-clone@0.0.1: 1078 | version "0.0.1" 1079 | resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-0.0.1.tgz#a7c2e09891fdbf38fbb10d376fb73003e68ac589" 1080 | 1081 | repeating@^2.0.0: 1082 | version "2.0.1" 1083 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 1084 | dependencies: 1085 | is-finite "^1.0.0" 1086 | 1087 | request@2.40.0: 1088 | version "2.40.0" 1089 | resolved "https://registry.yarnpkg.com/request/-/request-2.40.0.tgz#4dd670f696f1e6e842e66b4b5e839301ab9beb67" 1090 | dependencies: 1091 | forever-agent "~0.5.0" 1092 | json-stringify-safe "~5.0.0" 1093 | mime-types "~1.0.1" 1094 | node-uuid "~1.4.0" 1095 | qs "~1.0.0" 1096 | optionalDependencies: 1097 | aws-sign2 "~0.5.0" 1098 | form-data "~0.1.0" 1099 | hawk "1.1.1" 1100 | http-signature "~0.10.0" 1101 | oauth-sign "~0.3.0" 1102 | stringstream "~0.0.4" 1103 | tough-cookie ">=0.12.0" 1104 | tunnel-agent "~0.4.0" 1105 | 1106 | request@2.53.0: 1107 | version "2.53.0" 1108 | resolved "https://registry.yarnpkg.com/request/-/request-2.53.0.tgz#180a3ae92b7b639802e4f9545dd8fcdeb71d760c" 1109 | dependencies: 1110 | aws-sign2 "~0.5.0" 1111 | bl "~0.9.0" 1112 | caseless "~0.9.0" 1113 | combined-stream "~0.0.5" 1114 | forever-agent "~0.5.0" 1115 | form-data "~0.2.0" 1116 | hawk "~2.3.0" 1117 | http-signature "~0.10.0" 1118 | isstream "~0.1.1" 1119 | json-stringify-safe "~5.0.0" 1120 | mime-types "~2.0.1" 1121 | node-uuid "~1.4.0" 1122 | oauth-sign "~0.6.0" 1123 | qs "~2.3.1" 1124 | stringstream "~0.0.4" 1125 | tough-cookie ">=0.12.0" 1126 | tunnel-agent "~0.4.0" 1127 | 1128 | require_optional@~1.0.0: 1129 | version "1.0.0" 1130 | resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.0.tgz#52a86137a849728eb60a55533617f8f914f59abf" 1131 | dependencies: 1132 | resolve-from "^2.0.0" 1133 | semver "^5.1.0" 1134 | 1135 | resolve-from@^2.0.0: 1136 | version "2.0.0" 1137 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" 1138 | 1139 | resolve@~1.1.0: 1140 | version "1.1.7" 1141 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 1142 | 1143 | rimraf@~2.2.8: 1144 | version "2.2.8" 1145 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" 1146 | 1147 | safe-buffer@^5.0.1: 1148 | version "5.0.1" 1149 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" 1150 | 1151 | "semver@2 || 3 || 4 || 5", semver@^5.1.0: 1152 | version "5.3.0" 1153 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 1154 | 1155 | sigmund@~1.0.0: 1156 | version "1.0.1" 1157 | resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" 1158 | 1159 | signal-exit@^3.0.0: 1160 | version "3.0.2" 1161 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1162 | 1163 | sliced@0.0.5: 1164 | version "0.0.5" 1165 | resolved "https://registry.yarnpkg.com/sliced/-/sliced-0.0.5.tgz#5edc044ca4eb6f7816d50ba2fc63e25d8fe4707f" 1166 | 1167 | sliced@1.0.1: 1168 | version "1.0.1" 1169 | resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" 1170 | 1171 | sntp@0.2.x: 1172 | version "0.2.4" 1173 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-0.2.4.tgz#fb885f18b0f3aad189f824862536bceeec750900" 1174 | dependencies: 1175 | hoek "0.9.x" 1176 | 1177 | sntp@1.x.x: 1178 | version "1.0.9" 1179 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 1180 | dependencies: 1181 | hoek "2.x.x" 1182 | 1183 | spdx-correct@~1.0.0: 1184 | version "1.0.2" 1185 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" 1186 | dependencies: 1187 | spdx-license-ids "^1.0.2" 1188 | 1189 | spdx-expression-parse@~1.0.0: 1190 | version "1.0.4" 1191 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" 1192 | 1193 | spdx-license-ids@^1.0.2: 1194 | version "1.2.2" 1195 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" 1196 | 1197 | sprintf-js@~1.0.2: 1198 | version "1.0.3" 1199 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1200 | 1201 | string_decoder@~0.10.x: 1202 | version "0.10.31" 1203 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1204 | 1205 | string_decoder@~1.0.0: 1206 | version "1.0.1" 1207 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.1.tgz#62e200f039955a6810d8df0a33ffc0f013662d98" 1208 | dependencies: 1209 | safe-buffer "^5.0.1" 1210 | 1211 | stringstream@~0.0.4: 1212 | version "0.0.5" 1213 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 1214 | 1215 | strip-ansi@^3.0.0: 1216 | version "3.0.1" 1217 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1218 | dependencies: 1219 | ansi-regex "^2.0.0" 1220 | 1221 | strip-bom@^2.0.0: 1222 | version "2.0.0" 1223 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 1224 | dependencies: 1225 | is-utf8 "^0.2.0" 1226 | 1227 | strip-indent@^1.0.1: 1228 | version "1.0.1" 1229 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" 1230 | dependencies: 1231 | get-stdin "^4.0.1" 1232 | 1233 | supports-color@3.1.2: 1234 | version "3.1.2" 1235 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" 1236 | dependencies: 1237 | has-flag "^1.0.0" 1238 | 1239 | supports-color@^2.0.0: 1240 | version "2.0.0" 1241 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1242 | 1243 | supports-color@~1.2.0: 1244 | version "1.2.1" 1245 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.1.tgz#12ee21507086cd98c1058d9ec0f4ac476b7af3b2" 1246 | 1247 | tough-cookie@>=0.12.0: 1248 | version "2.3.2" 1249 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" 1250 | dependencies: 1251 | punycode "^1.4.1" 1252 | 1253 | trim-newlines@^1.0.0: 1254 | version "1.0.0" 1255 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" 1256 | 1257 | tunnel-agent@~0.4.0: 1258 | version "0.4.3" 1259 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" 1260 | 1261 | type-detect@0.1.1: 1262 | version "0.1.1" 1263 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" 1264 | 1265 | type-detect@^1.0.0: 1266 | version "1.0.0" 1267 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" 1268 | 1269 | underscore.string@~2.4.0: 1270 | version "2.4.0" 1271 | resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b" 1272 | 1273 | underscore.string@~3.2.3: 1274 | version "3.2.3" 1275 | resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.2.3.tgz#806992633665d5e5fcb4db1fb3a862eb68e9e6da" 1276 | 1277 | underscore@~1.7.0: 1278 | version "1.7.0" 1279 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" 1280 | 1281 | util-deprecate@~1.0.1: 1282 | version "1.0.2" 1283 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1284 | 1285 | validate-npm-package-license@^3.0.1: 1286 | version "3.0.1" 1287 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" 1288 | dependencies: 1289 | spdx-correct "~1.0.0" 1290 | spdx-expression-parse "~1.0.0" 1291 | 1292 | which@~1.2.1: 1293 | version "1.2.14" 1294 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" 1295 | dependencies: 1296 | isexe "^2.0.0" 1297 | 1298 | wrappy@1: 1299 | version "1.0.2" 1300 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1301 | 1302 | xtend@~2.1.1: 1303 | version "2.1.2" 1304 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" 1305 | dependencies: 1306 | object-keys "~0.4.0" 1307 | --------------------------------------------------------------------------------