From 5789cfdfc6ca5301d7db96b3cc185182c1508d6f Mon Sep 17 00:00:00 2001 From: yrong Date: Tue, 29 Aug 2017 16:00:07 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E8=B0=83=E7=A0=94=E5=B9=B6=E5=BC=95?= =?UTF-8?q?=E5=85=A5node-acl=E5=AE=9E=E7=8E=B0=E6=9D=83=E9=99=90=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=92=8C=E6=8E=A7=E5=88=B6(6h)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 3 - lib/mongodb-backend.js | 280 ----------------------------------------- package.json | 7 +- 3 files changed, 3 insertions(+), 287 deletions(-) delete mode 100644 lib/mongodb-backend.js diff --git a/index.js b/index.js index ea44399..e874d53 100644 --- a/index.js +++ b/index.js @@ -4,7 +4,4 @@ module.exports.__defineGetter__('redisBackend', function(){ }); module.exports.__defineGetter__('memoryBackend', function(){ return require('./lib/memory-backend.js'); -}); -module.exports.__defineGetter__('mongodbBackend', function(){ - return require('./lib/mongodb-backend.js'); }); \ No newline at end of file diff --git a/lib/mongodb-backend.js b/lib/mongodb-backend.js deleted file mode 100644 index e3eb8de..0000000 --- a/lib/mongodb-backend.js +++ /dev/null @@ -1,280 +0,0 @@ -/** - MongoDB Backend. - Implementation of the storage backend using MongoDB -*/ -"use strict"; - -var contract = require('./contract'); -var async = require('async'); -var _ = require('lodash'); - -// Name of the collection where meta and allowsXXX are stored. -// If prefix is specified, it will be prepended to this name, like acl_resources -var aclCollectionName = 'resources'; - -function MongoDBBackend(db, prefix, useSingle, useRawCollectionNames){ - this.db = db; - this.prefix = typeof prefix !== 'undefined' ? prefix : ''; - this.useSingle = (typeof useSingle !== 'undefined') ? useSingle : false; - this.useRawCollectionNames = useRawCollectionNames === false; // requires explicit boolean false value -} - -MongoDBBackend.prototype = { - /** - Begins a transaction. - */ - begin : function(){ - // returns a transaction object(just an array of functions will do here.) - return []; - }, - - /** - Ends a transaction (and executes it) - */ - end : function(transaction, cb){ - contract(arguments).params('array', 'function').end(); - async.series(transaction,function(err){ - cb(err instanceof Error? err : undefined); - }); - }, - - /** - Cleans the whole storage. - */ - clean : function(cb){ - contract(arguments).params('function').end(); - this.db.collections(function(err, collections) { - if (err instanceof Error) return cb(err); - async.forEach(collections,function(coll,innercb){ - coll.drop(function(){innercb()}); // ignores errors - },cb); - }); - }, - - /** - Gets the contents at the bucket's key. - */ - get : function(bucket, key, cb){ - contract(arguments) - .params('string', 'string|number', 'function') - .end(); - key = encodeText(key); - var searchParams = (this.useSingle? {_bucketname: bucket, key:key} : {key:key}); - var collName = (this.useSingle? aclCollectionName : bucket); - - this.db.collection(this.prefix + this.removeUnsupportedChar(collName),function(err,collection){ - if(err instanceof Error) return cb(err); - // Excluding bucket field from search result - collection.findOne(searchParams, {_bucketname: 0},function(err, doc){ - if(err) return cb(err); - if(! _.isObject(doc) ) return cb(undefined,[]); - doc = fixKeys(doc); - cb(undefined,_.without(_.keys(doc),"key","_id")); - }); - }); - }, - - /** - Returns the union of the values in the given keys. - */ - union : function(bucket, keys, cb){ - contract(arguments) - .params('string', 'array', 'function') - .end(); - keys = encodeAll(keys); - var searchParams = (this.useSingle? {_bucketname: bucket, key: { $in: keys }} : {key: { $in: keys }}); - var collName = (this.useSingle? aclCollectionName : bucket); - - this.db.collection(this.prefix + this.removeUnsupportedChar(collName),function(err,collection){ - if(err instanceof Error) return cb(err); - // Excluding bucket field from search result - collection.find(searchParams, {_bucketname: 0}).toArray(function(err,docs){ - if(err instanceof Error) return cb(err); - if( ! docs.length ) return cb(undefined, []); - - var keyArrays = []; - docs = fixAllKeys(docs); - docs.forEach(function(doc){ - keyArrays.push.apply(keyArrays, _.keys(doc)); - }); - cb(undefined, _.without(_.union(keyArrays),"key","_id")); - }); - }); - }, - - /** - Adds values to a given key inside a bucket. - */ - add : function(transaction, bucket, key, values){ - contract(arguments) - .params('array', 'string', 'string|number','string|array|number') - .end(); - - if(key=="key") throw new Error("Key name 'key' is not allowed."); - key = encodeText(key); - var self=this; - var updateParams = (self.useSingle? {_bucketname: bucket, key:key} : {key:key}); - var collName = (self.useSingle? aclCollectionName : bucket); - transaction.push(function(cb){ - values = makeArray(values); - self.db.collection(self.prefix + self.removeUnsupportedChar(collName), function(err,collection){ - if(err instanceof Error) return cb(err); - - // build doc from array values - var doc = {}; - values.forEach(function(value){doc[value]=true;}); - - // update document - collection.update(updateParams,{$set:doc},{safe:true,upsert:true},function(err){ - if(err instanceof Error) return cb(err); - cb(undefined); - }); - }); - }); - - transaction.push(function(cb) { - self.db.collection(self.prefix + self.removeUnsupportedChar(collName), function(err,collection){ - // Create index - collection.ensureIndex({_bucketname: 1, key: 1}, function(err){ - if (err instanceof Error) { - return cb(err); - } else{ - cb(undefined); - } - }); - }); - }) - }, - - /** - Delete the given key(s) at the bucket - */ - del : function(transaction, bucket, keys){ - contract(arguments) - .params('array', 'string', 'string|array') - .end(); - keys = makeArray(keys); - var self= this; - var updateParams = (self.useSingle? {_bucketname: bucket, key:{$in:keys}} : {key:{$in:keys}}); - var collName = (self.useSingle? aclCollectionName : bucket); - - transaction.push(function(cb){ - self.db.collection(self.prefix + self.removeUnsupportedChar(collName),function(err,collection){ - if(err instanceof Error) return cb(err); - collection.remove(updateParams,{safe:true},function(err){ - if(err instanceof Error) return cb(err); - cb(undefined); - }); - }); - }); - }, - - /** - Removes values from a given key inside a bucket. - */ - remove : function(transaction, bucket, key, values){ - contract(arguments) - .params('array', 'string', 'string|number','string|array|number') - .end(); - key = encodeText(key); - var self=this; - var updateParams = (self.useSingle? {_bucketname: bucket, key:key} : {key:key}); - var collName = (self.useSingle? aclCollectionName : bucket); - - values = makeArray(values); - transaction.push(function(cb){ - self.db.collection(self.prefix + self.removeUnsupportedChar(collName),function(err,collection){ - if(err instanceof Error) return cb(err); - - // build doc from array values - var doc = {}; - values.forEach(function(value){doc[value]=true;}); - - // update document - collection.update(updateParams,{$unset:doc},{safe:true,upsert:true},function(err){ - if(err instanceof Error) return cb(err); - cb(undefined); - }); - }); - }); - }, - - removeUnsupportedChar: function(text) { - if (!this.useRawCollectionNames && (typeof text === 'string' || text instanceof String)) { - text = decodeURIComponent(text); - text = text.replace(/[/\s]/g, '_'); // replaces slashes and spaces - } - return text; - } -} - -function encodeText(text) { - if (typeof text == 'string' || text instanceof String) { - text = encodeURIComponent(text); - text = text.replace(/\./g, '%2E'); - } - return text; -} - -function decodeText(text) { - if (typeof text == 'string' || text instanceof String) { - text = decodeURIComponent(text); - } - return text; -} - -function encodeAll(arr) { - if (Array.isArray(arr)) { - var ret = []; - arr.forEach(function(aval) { - ret.push(encodeText(aval)); - }); - return ret; - } else { - return arr; - } -} - -function decodeAll(arr) { - if (Array.isArray(arr)) { - var ret = []; - arr.forEach(function(aval) { - ret.push(decodeText(aval)); - }); - return ret; - } else { - return arr; - } -} - -function fixKeys(doc) { - if (doc) { - var ret = {}; - for (var key in doc) { - if (doc.hasOwnProperty(key)) { - ret[decodeText(key)] = doc[key]; - } - } - return ret; - } else { - return doc; - } -} - -function fixAllKeys(docs) { - if (docs && docs.length) { - var ret = []; - docs.forEach(function(adoc) { - ret.push(fixKeys(adoc)); - }); - return ret; - } else { - return docs; - } -} - -function makeArray(arr){ - return Array.isArray(arr) ? encodeAll(arr) : [encodeText(arr)]; -} - -exports = module.exports = MongoDBBackend; diff --git a/package.json b/package.json index 1f11e6c..d5d7ad8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "acl", - "version": "0.4.10", + "name": "acl-fork", + "version": "0.4.10-beta.3", "description": "An Access Control List module, based on Redis with Express middleware support", "keywords": [ "middleware", @@ -18,8 +18,7 @@ "async": "^2.1.4", "bluebird": "^3.0.2", "lodash": "^4.17.3", - "mongodb": "^2.0.47", - "redis": "^2.2.5" + "redis": "^2.8.0" }, "devDependencies": { "mocha": "^3.2.0", From 255b8e3e2ddab2cc5591a94e65eb37fe65cdf9c5 Mon Sep 17 00:00:00 2001 From: yrong Date: Wed, 27 Jun 2018 14:19:38 +0800 Subject: [PATCH 2/7] =?UTF-8?q?acl=E7=BB=84=E4=BB=B6=E5=8D=87=E7=BA=A7&?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=A0=BC=E5=BC=8F=E5=8C=96=E5=8F=8A=E9=87=8D?= =?UTF-8?q?=E6=9E=84(1.5h)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/memory-backend.js | 320 ++++++++++++++++++++--------------------- lib/redis-backend.js | 323 +++++++++++++++++++++--------------------- package.json | 2 +- 3 files changed, 325 insertions(+), 320 deletions(-) diff --git a/lib/memory-backend.js b/lib/memory-backend.js index 3169253..09cca3a 100644 --- a/lib/memory-backend.js +++ b/lib/memory-backend.js @@ -1,182 +1,182 @@ /** - Memory Backend. + Memory Backend. - In-memory implementation of the storage. -*/ + In-memory implementation of the storage. + */ "use strict"; var - contract = require('./contract'), - _ = require('lodash'); + contract = require('./contract'), + _ = require('lodash'); -function MemoryBackend(){ - this._buckets = {}; +function MemoryBackend() { + this._buckets = {}; }; MemoryBackend.prototype = { - /** + /** Begins a transaction. - */ - begin : function(){ - // returns a transaction object(just an array of functions will do here.) - return []; - }, + */ + begin: function () { + // returns a transaction object(just an array of functions will do here.) + return []; + }, - /** + /** Ends a transaction (and executes it) - */ - end : function(transaction, cb){ - contract(arguments).params('array', 'function').end(); - - // Execute transaction - for(var i=0, len=transaction.length;i Date: Sun, 9 Jun 2019 13:48:01 +0800 Subject: [PATCH 3/7] add mongo backend back&upgrade dependency and test --- .travis.yml | 2 - index.js | 5 +- lib/mongodb-backend.js | 280 +++++++++++++++++++++++++++++++++++++ package.json | 11 +- test/runner.js | 18 +-- yarn.lock | 306 +++++++++++++++++++++++++++++++++++++++++ 6 files changed, 606 insertions(+), 16 deletions(-) create mode 100644 lib/mongodb-backend.js create mode 100644 yarn.lock diff --git a/.travis.yml b/.travis.yml index 62ab624..d2ba44f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,8 +2,6 @@ language: node_js sudo: false node_js: - - '0.10' - - '0.12' - 'stable' services: diff --git a/index.js b/index.js index e874d53..36b7733 100644 --- a/index.js +++ b/index.js @@ -4,4 +4,7 @@ module.exports.__defineGetter__('redisBackend', function(){ }); module.exports.__defineGetter__('memoryBackend', function(){ return require('./lib/memory-backend.js'); -}); \ No newline at end of file +}); +module.exports.__defineGetter__('mongodbBackend', function(){ + return require('./lib/mongodb-backend.js'); +}); diff --git a/lib/mongodb-backend.js b/lib/mongodb-backend.js new file mode 100644 index 0000000..0f08938 --- /dev/null +++ b/lib/mongodb-backend.js @@ -0,0 +1,280 @@ +/** + MongoDB Backend. + Implementation of the storage backend using MongoDB + */ +"use strict"; + +var contract = require('./contract'); +var async = require('async'); +var _ = require('lodash'); + +// Name of the collection where meta and allowsXXX are stored. +// If prefix is specified, it will be prepended to this name, like acl_resources +var aclCollectionName = 'resources'; + +function MongoDBBackend(db, prefix, useSingle, useRawCollectionNames){ + this.db = db; + this.prefix = typeof prefix !== 'undefined' ? prefix : ''; + this.useSingle = (typeof useSingle !== 'undefined') ? useSingle : false; + this.useRawCollectionNames = useRawCollectionNames === false; // requires explicit boolean false value +} + +MongoDBBackend.prototype = { + /** + Begins a transaction. + */ + begin : function(){ + // returns a transaction object(just an array of functions will do here.) + return []; + }, + + /** + Ends a transaction (and executes it) + */ + end : function(transaction, cb){ + contract(arguments).params('array', 'function').end(); + async.series(transaction,function(err){ + cb(err instanceof Error? err : undefined); + }); + }, + + /** + Cleans the whole storage. + */ + clean : function(cb){ + contract(arguments).params('function').end(); + this.db.collections(function(err, collections) { + if (err instanceof Error) return cb(err); + async.forEach(collections,function(coll,innercb){ + coll.drop(function(){innercb()}); // ignores errors + },cb); + }); + }, + + /** + Gets the contents at the bucket's key. + */ + get : function(bucket, key, cb){ + contract(arguments) + .params('string', 'string|number', 'function') + .end(); + key = encodeText(key); + var searchParams = (this.useSingle? {_bucketname: bucket, key:key} : {key:key}); + var collName = (this.useSingle? aclCollectionName : bucket); + + this.db.collection(this.prefix + this.removeUnsupportedChar(collName),function(err,collection){ + if(err instanceof Error) return cb(err); + // Excluding bucket field from search result + collection.findOne(searchParams, {_bucketname: 0},function(err, doc){ + if(err) return cb(err); + if(! _.isObject(doc) ) return cb(undefined,[]); + doc = fixKeys(doc); + cb(undefined,_.without(_.keys(doc),"key","_id")); + }); + }); + }, + + /** + Returns the union of the values in the given keys. + */ + union : function(bucket, keys, cb){ + contract(arguments) + .params('string', 'array', 'function') + .end(); + keys = encodeAll(keys); + var searchParams = (this.useSingle? {_bucketname: bucket, key: { $in: keys }} : {key: { $in: keys }}); + var collName = (this.useSingle? aclCollectionName : bucket); + + this.db.collection(this.prefix + this.removeUnsupportedChar(collName),function(err,collection){ + if(err instanceof Error) return cb(err); + // Excluding bucket field from search result + collection.find(searchParams, {_bucketname: 0}).toArray(function(err,docs){ + if(err instanceof Error) return cb(err); + if( ! docs.length ) return cb(undefined, []); + + var keyArrays = []; + docs = fixAllKeys(docs); + docs.forEach(function(doc){ + keyArrays.push.apply(keyArrays, _.keys(doc)); + }); + cb(undefined, _.without(_.union(keyArrays),"key","_id")); + }); + }); + }, + + /** + Adds values to a given key inside a bucket. + */ + add : function(transaction, bucket, key, values){ + contract(arguments) + .params('array', 'string', 'string|number','string|array|number') + .end(); + + if(key=="key") throw new Error("Key name 'key' is not allowed."); + key = encodeText(key); + var self=this; + var updateParams = (self.useSingle? {_bucketname: bucket, key:key} : {key:key}); + var collName = (self.useSingle? aclCollectionName : bucket); + transaction.push(function(cb){ + values = makeArray(values); + self.db.collection(self.prefix + self.removeUnsupportedChar(collName), function(err,collection){ + if(err instanceof Error) return cb(err); + + // build doc from array values + var doc = {}; + values.forEach(function(value){doc[value]=true;}); + + // update document + collection.update(updateParams,{$set:doc},{safe:true,upsert:true},function(err){ + if(err instanceof Error) return cb(err); + cb(undefined); + }); + }); + }); + + transaction.push(function(cb) { + self.db.collection(self.prefix + self.removeUnsupportedChar(collName), function(err,collection){ + // Create index + collection.ensureIndex({_bucketname: 1, key: 1}, function(err){ + if (err instanceof Error) { + return cb(err); + } else{ + cb(undefined); + } + }); + }); + }) + }, + + /** + Delete the given key(s) at the bucket + */ + del : function(transaction, bucket, keys){ + contract(arguments) + .params('array', 'string', 'string|array') + .end(); + keys = makeArray(keys); + var self= this; + var updateParams = (self.useSingle? {_bucketname: bucket, key:{$in:keys}} : {key:{$in:keys}}); + var collName = (self.useSingle? aclCollectionName : bucket); + + transaction.push(function(cb){ + self.db.collection(self.prefix + self.removeUnsupportedChar(collName),function(err,collection){ + if(err instanceof Error) return cb(err); + collection.remove(updateParams,{safe:true},function(err){ + if(err instanceof Error) return cb(err); + cb(undefined); + }); + }); + }); + }, + + /** + Removes values from a given key inside a bucket. + */ + remove : function(transaction, bucket, key, values){ + contract(arguments) + .params('array', 'string', 'string|number','string|array|number') + .end(); + key = encodeText(key); + var self=this; + var updateParams = (self.useSingle? {_bucketname: bucket, key:key} : {key:key}); + var collName = (self.useSingle? aclCollectionName : bucket); + + values = makeArray(values); + transaction.push(function(cb){ + self.db.collection(self.prefix + self.removeUnsupportedChar(collName),function(err,collection){ + if(err instanceof Error) return cb(err); + + // build doc from array values + var doc = {}; + values.forEach(function(value){doc[value]=true;}); + + // update document + collection.update(updateParams,{$unset:doc},{safe:true,upsert:true},function(err){ + if(err instanceof Error) return cb(err); + cb(undefined); + }); + }); + }); + }, + + removeUnsupportedChar: function(text) { + if (!this.useRawCollectionNames && (typeof text === 'string' || text instanceof String)) { + text = decodeURIComponent(text); + text = text.replace(/[/\s]/g, '_'); // replaces slashes and spaces + } + return text; + } +} + +function encodeText(text) { + if (typeof text == 'string' || text instanceof String) { + text = encodeURIComponent(text); + text = text.replace(/\./g, '%2E'); + } + return text; +} + +function decodeText(text) { + if (typeof text == 'string' || text instanceof String) { + text = decodeURIComponent(text); + } + return text; +} + +function encodeAll(arr) { + if (Array.isArray(arr)) { + var ret = []; + arr.forEach(function(aval) { + ret.push(encodeText(aval)); + }); + return ret; + } else { + return arr; + } +} + +function decodeAll(arr) { + if (Array.isArray(arr)) { + var ret = []; + arr.forEach(function(aval) { + ret.push(decodeText(aval)); + }); + return ret; + } else { + return arr; + } +} + +function fixKeys(doc) { + if (doc) { + var ret = {}; + for (var key in doc) { + if (doc.hasOwnProperty(key)) { + ret[decodeText(key)] = doc[key]; + } + } + return ret; + } else { + return doc; + } +} + +function fixAllKeys(docs) { + if (docs && docs.length) { + var ret = []; + docs.forEach(function(adoc) { + ret.push(fixKeys(adoc)); + }); + return ret; + } else { + return docs; + } +} + +function makeArray(arr){ + return Array.isArray(arr) ? encodeAll(arr) : [encodeText(arr)]; +} + +exports = module.exports = MongoDBBackend; diff --git a/package.json b/package.json index 4b714fd..d6b1ba4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "acl-fork", - "version": "0.4.11", + "name": "acl", + "version": "0.4.12", "description": "An Access Control List module, based on Redis with Express middleware support", "keywords": [ "middleware", @@ -15,9 +15,10 @@ }, "main": "./index.js", "dependencies": { - "async": "^2.1.4", - "bluebird": "^3.0.2", - "lodash": "^4.17.3", + "async": "^3.0.1", + "bluebird": "^3.5.5", + "lodash": "^4.17.11", + "mongodb": "^3.2.7", "redis": "^2.8.0" }, "devDependencies": { diff --git a/test/runner.js b/test/runner.js index 3092900..f0ba79e 100644 --- a/test/runner.js +++ b/test/runner.js @@ -1,18 +1,20 @@ var Acl = require('../') , tests = require('./tests') , backendTests = require('./backendtests'); +const MongoClient = require('mongodb').MongoClient; describe('MongoDB - Default', function () { before(function (done) { - var self = this - , mongodb = require('mongodb') + var self = this; - mongodb.connect('mongodb://localhost:27017/acltest',function(error, db) { + MongoClient.connect('mongodb://localhost:27017',(err,client) => { + const db = client.db('acltest'); db.dropDatabase(function () { self.backend = new Acl.mongodbBackend(db, "acl") done() }) }) + }) run() @@ -21,12 +23,12 @@ describe('MongoDB - Default', function () { describe('MongoDB - useSingle', function () { before(function (done) { - var self = this - , mongodb = require('mongodb') + var self = this; - mongodb.connect('mongodb://localhost:27017/acltest',function(error, db) { + MongoClient.connect('mongodb://localhost:27017',(err,client) => { + const db = client.db('acltest'); db.dropDatabase(function () { - self.backend = new Acl.mongodbBackend(db, "acl", true) + self.backend = new Acl.mongodbBackend(db, "acl") done() }) }) @@ -41,7 +43,7 @@ describe('Redis', function () { , options = { host: '127.0.0.1', port: 6379, - password: null + password: process.env.REDIS_PASSWORD || 'admin' } , Redis = require('redis') diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..ee1283c --- /dev/null +++ b/yarn.lock @@ -0,0 +1,306 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +assertion-error@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + +async@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/async/-/async-3.0.1.tgz#dfeb34657d1e63c94c0eee424297bf8a2c9a8182" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +bluebird@^3.5.5: + version "3.5.5" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + +bson@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz#4330f5e99104c4e751e7351859e2d408279f2f13" + +chai@^3.4.0: + version "3.5.0" + resolved "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" + dependencies: + assertion-error "^1.0.1" + deep-eql "^0.1.3" + type-detect "^1.0.0" + +commander@2.9.0: + version "2.9.0" + resolved "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +debug@2.6.8: + version "2.6.8" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + +deep-eql@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" + dependencies: + type-detect "0.1.1" + +diff@3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + +double-ended-queue@^2.1.0-0: + version "2.1.0-0" + resolved "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" + +escape-string-regexp@1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +glob@7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +growl@1.9.2: + version "1.9.2" + resolved "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +he@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.3" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +json3@3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basecreate@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash.create@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" + dependencies: + lodash._baseassign "^3.0.0" + lodash._basecreate "^3.0.0" + lodash._isiterateecall "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash@^4.17.11: + version "4.17.11" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + +memory-pager@^1.0.2: + version "1.5.0" + resolved "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" + +minimatch@^3.0.2: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +mkdirp@0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mocha@^3.2.0: + version "3.5.3" + resolved "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" + dependencies: + browser-stdout "1.3.0" + commander "2.9.0" + debug "2.6.8" + diff "3.2.0" + escape-string-regexp "1.0.5" + glob "7.1.1" + growl "1.9.2" + he "1.1.1" + json3 "3.3.2" + lodash.create "3.1.1" + mkdirp "0.5.1" + supports-color "3.1.2" + +mongodb-core@3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.7.tgz#a8ef1fe764a192c979252dacbc600dc88d77e28f" + dependencies: + bson "^1.1.1" + require_optional "^1.0.1" + safe-buffer "^5.1.2" + optionalDependencies: + saslprep "^1.0.0" + +mongodb@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/mongodb/-/mongodb-3.2.7.tgz#8ba149e4be708257cad0dea72aebb2bbb311a7ac" + dependencies: + mongodb-core "3.2.7" + safe-buffer "^5.1.2" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +redis-commands@^1.2.0: + version "1.5.0" + resolved "https://registry.npmjs.org/redis-commands/-/redis-commands-1.5.0.tgz#80d2e20698fe688f227127ff9e5164a7dd17e785" + +redis-parser@^2.6.0: + version "2.6.0" + resolved "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b" + +redis@^2.8.0: + version "2.8.0" + resolved "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02" + dependencies: + double-ended-queue "^2.1.0-0" + redis-commands "^1.2.0" + redis-parser "^2.6.0" + +require_optional@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" + dependencies: + resolve-from "^2.0.0" + semver "^5.1.0" + +resolve-from@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" + +safe-buffer@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +saslprep@^1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" + dependencies: + sparse-bitfield "^3.0.3" + +semver@^5.1.0: + version "5.7.0" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + +sparse-bitfield@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" + dependencies: + memory-pager "^1.0.2" + +supports-color@3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" + +type-detect@0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" + +type-detect@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" From 5260b113227ca4a4b459aab601f2d88bd40fda70 Mon Sep 17 00:00:00 2001 From: yrong Date: Sun, 9 Jun 2019 14:06:41 +0800 Subject: [PATCH 4/7] upgrade dependency --- .travis.yml | 2 + README.md | 4 +- lib/memory-backend.js | 320 +++++++++++++++---------------- lib/mongodb-backend.js | 424 ++++++++++++++++++++--------------------- lib/redis-backend.js | 323 ++++++++++++++++--------------- test/runner.js | 1 - 6 files changed, 535 insertions(+), 539 deletions(-) diff --git a/.travis.yml b/.travis.yml index d2ba44f..62ab624 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,8 @@ language: node_js sudo: false node_js: + - '0.10' + - '0.12' - 'stable' services: diff --git a/README.md b/README.md index 274badc..35a6535 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Follow [manast](http://twitter.com/manast) for news and updates regarding this l - Express middleware for protecting resources. - Robust implementation with good unit test coverage. -##Installation +## Installation Using npm: @@ -37,7 +37,7 @@ Using npm: npm install acl ``` -##Documentation +## Documentation * [addUserRoles](#addUserRoles) * [removeUserRoles](#removeUserRoles) diff --git a/lib/memory-backend.js b/lib/memory-backend.js index 09cca3a..3169253 100644 --- a/lib/memory-backend.js +++ b/lib/memory-backend.js @@ -1,182 +1,182 @@ /** - Memory Backend. + Memory Backend. - In-memory implementation of the storage. - */ + In-memory implementation of the storage. +*/ "use strict"; var - contract = require('./contract'), - _ = require('lodash'); + contract = require('./contract'), + _ = require('lodash'); -function MemoryBackend() { - this._buckets = {}; +function MemoryBackend(){ + this._buckets = {}; }; MemoryBackend.prototype = { - /** + /** Begins a transaction. - */ - begin: function () { - // returns a transaction object(just an array of functions will do here.) - return []; - }, + */ + begin : function(){ + // returns a transaction object(just an array of functions will do here.) + return []; + }, - /** + /** Ends a transaction (and executes it) - */ - end: function (transaction, cb) { - contract(arguments).params('array', 'function').end(); + */ + end : function(transaction, cb){ + contract(arguments).params('array', 'function').end(); + + // Execute transaction + for(var i=0, len=transaction.length;i Date: Sun, 9 Jun 2019 14:15:26 +0800 Subject: [PATCH 5/7] upgrade dependency&modify unit test according --- .travis.yml | 2 - package.json | 12 +- test/runner.js | 17 +-- yarn.lock | 306 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 321 insertions(+), 16 deletions(-) create mode 100644 yarn.lock diff --git a/.travis.yml b/.travis.yml index 62ab624..d2ba44f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,8 +2,6 @@ language: node_js sudo: false node_js: - - '0.10' - - '0.12' - 'stable' services: diff --git a/package.json b/package.json index 496e6c6..d6b1ba4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "acl", - "version": "0.4.11", + "version": "0.4.12", "description": "An Access Control List module, based on Redis with Express middleware support", "keywords": [ "middleware", @@ -15,11 +15,11 @@ }, "main": "./index.js", "dependencies": { - "async": "^2.1.4", - "bluebird": "^3.0.2", - "lodash": "^4.17.3", - "mongodb": "^2.0.47", - "redis": "^2.2.5" + "async": "^3.0.1", + "bluebird": "^3.5.5", + "lodash": "^4.17.11", + "mongodb": "^3.2.7", + "redis": "^2.8.0" }, "devDependencies": { "mocha": "^3.2.0", diff --git a/test/runner.js b/test/runner.js index 3092900..3d4769d 100644 --- a/test/runner.js +++ b/test/runner.js @@ -1,13 +1,14 @@ var Acl = require('../') , tests = require('./tests') , backendTests = require('./backendtests'); +const MongoClient = require('mongodb').MongoClient; describe('MongoDB - Default', function () { before(function (done) { - var self = this - , mongodb = require('mongodb') + var self = this; - mongodb.connect('mongodb://localhost:27017/acltest',function(error, db) { + MongoClient.connect('mongodb://localhost:27017',(err,client) => { + const db = client.db('acltest'); db.dropDatabase(function () { self.backend = new Acl.mongodbBackend(db, "acl") done() @@ -21,12 +22,12 @@ describe('MongoDB - Default', function () { describe('MongoDB - useSingle', function () { before(function (done) { - var self = this - , mongodb = require('mongodb') + var self = this; - mongodb.connect('mongodb://localhost:27017/acltest',function(error, db) { + MongoClient.connect('mongodb://localhost:27017',(err,client) => { + const db = client.db('acltest'); db.dropDatabase(function () { - self.backend = new Acl.mongodbBackend(db, "acl", true) + self.backend = new Acl.mongodbBackend(db, "acl") done() }) }) @@ -41,7 +42,7 @@ describe('Redis', function () { , options = { host: '127.0.0.1', port: 6379, - password: null + password: process.env.REDIS_PASSWORD || 'admin' } , Redis = require('redis') diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..ee1283c --- /dev/null +++ b/yarn.lock @@ -0,0 +1,306 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +assertion-error@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + +async@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/async/-/async-3.0.1.tgz#dfeb34657d1e63c94c0eee424297bf8a2c9a8182" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +bluebird@^3.5.5: + version "3.5.5" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + +bson@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz#4330f5e99104c4e751e7351859e2d408279f2f13" + +chai@^3.4.0: + version "3.5.0" + resolved "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" + dependencies: + assertion-error "^1.0.1" + deep-eql "^0.1.3" + type-detect "^1.0.0" + +commander@2.9.0: + version "2.9.0" + resolved "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +debug@2.6.8: + version "2.6.8" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + +deep-eql@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" + dependencies: + type-detect "0.1.1" + +diff@3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + +double-ended-queue@^2.1.0-0: + version "2.1.0-0" + resolved "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" + +escape-string-regexp@1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +glob@7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +growl@1.9.2: + version "1.9.2" + resolved "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +he@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.3" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +json3@3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basecreate@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash.create@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" + dependencies: + lodash._baseassign "^3.0.0" + lodash._basecreate "^3.0.0" + lodash._isiterateecall "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash@^4.17.11: + version "4.17.11" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + +memory-pager@^1.0.2: + version "1.5.0" + resolved "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" + +minimatch@^3.0.2: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +mkdirp@0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mocha@^3.2.0: + version "3.5.3" + resolved "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" + dependencies: + browser-stdout "1.3.0" + commander "2.9.0" + debug "2.6.8" + diff "3.2.0" + escape-string-regexp "1.0.5" + glob "7.1.1" + growl "1.9.2" + he "1.1.1" + json3 "3.3.2" + lodash.create "3.1.1" + mkdirp "0.5.1" + supports-color "3.1.2" + +mongodb-core@3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.7.tgz#a8ef1fe764a192c979252dacbc600dc88d77e28f" + dependencies: + bson "^1.1.1" + require_optional "^1.0.1" + safe-buffer "^5.1.2" + optionalDependencies: + saslprep "^1.0.0" + +mongodb@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/mongodb/-/mongodb-3.2.7.tgz#8ba149e4be708257cad0dea72aebb2bbb311a7ac" + dependencies: + mongodb-core "3.2.7" + safe-buffer "^5.1.2" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +redis-commands@^1.2.0: + version "1.5.0" + resolved "https://registry.npmjs.org/redis-commands/-/redis-commands-1.5.0.tgz#80d2e20698fe688f227127ff9e5164a7dd17e785" + +redis-parser@^2.6.0: + version "2.6.0" + resolved "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b" + +redis@^2.8.0: + version "2.8.0" + resolved "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02" + dependencies: + double-ended-queue "^2.1.0-0" + redis-commands "^1.2.0" + redis-parser "^2.6.0" + +require_optional@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" + dependencies: + resolve-from "^2.0.0" + semver "^5.1.0" + +resolve-from@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" + +safe-buffer@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +saslprep@^1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" + dependencies: + sparse-bitfield "^3.0.3" + +semver@^5.1.0: + version "5.7.0" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + +sparse-bitfield@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" + dependencies: + memory-pager "^1.0.2" + +supports-color@3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" + +type-detect@0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" + +type-detect@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" From fa3d03a372d85205ea57c69fc2250190358bf085 Mon Sep 17 00:00:00 2001 From: yrong Date: Sun, 9 Jun 2019 17:15:20 +0800 Subject: [PATCH 6/7] update version --- .travis.yml | 2 -- package.json | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 62ab624..d2ba44f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,8 +2,6 @@ language: node_js sudo: false node_js: - - '0.10' - - '0.12' - 'stable' services: diff --git a/package.json b/package.json index d6b1ba4..e795fab 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "acl", + "name": "acl-fork", "version": "0.4.12", "description": "An Access Control List module, based on Redis with Express middleware support", "keywords": [ From 7950f6cba9c085abfde549ae694d56056363ba36 Mon Sep 17 00:00:00 2001 From: yrong1997 Date: Sat, 12 Feb 2022 23:53:30 +0800 Subject: [PATCH 7/7] Bump dependencies --- package.json | 10 ++-- yarn.lock | 136 +++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 103 insertions(+), 43 deletions(-) diff --git a/package.json b/package.json index e795fab..22cb72d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "acl-fork", - "version": "0.4.12", + "version": "0.4.13", "description": "An Access Control List module, based on Redis with Express middleware support", "keywords": [ "middleware", @@ -15,10 +15,10 @@ }, "main": "./index.js", "dependencies": { - "async": "^3.0.1", - "bluebird": "^3.5.5", - "lodash": "^4.17.11", - "mongodb": "^3.2.7", + "async": "^3.2.3", + "bluebird": "^3.7.2", + "lodash": "^4.17.21", + "mongodb": "^3.7.3", "redis": "^2.8.0" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index ee1283c..29d67b6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6,17 +6,27 @@ assertion-error@^1.0.1: version "1.1.0" resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" -async@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/async/-/async-3.0.1.tgz#dfeb34657d1e63c94c0eee424297bf8a2c9a8182" +async@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" + integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" -bluebird@^3.5.5: - version "3.5.5" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" +bl@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.1.tgz#8c11a7b730655c5d56898cdc871224f40fd901d5" + integrity sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== brace-expansion@^1.1.7: version "1.1.11" @@ -29,9 +39,10 @@ browser-stdout@1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" -bson@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz#4330f5e99104c4e751e7351859e2d408279f2f13" +bson@^1.1.4: + version "1.1.6" + resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.6.tgz#fb819be9a60cd677e0853aee4ca712a785d6618a" + integrity sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg== chai@^3.4.0: version "3.5.0" @@ -51,6 +62,11 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + debug@2.6.8: version "2.6.8" resolved "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" @@ -63,6 +79,11 @@ deep-eql@^0.1.3: dependencies: type-detect "0.1.1" +denque@^1.4.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" + integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== + diff@3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" @@ -117,6 +138,16 @@ inherits@2: version "2.0.3" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" +inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + json3@3.3.2: version "3.3.2" resolved "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" @@ -168,9 +199,10 @@ lodash.keys@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" -lodash@^4.17.11: - version "4.17.11" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== memory-pager@^1.0.2: version "1.5.0" @@ -209,23 +241,19 @@ mocha@^3.2.0: mkdirp "0.5.1" supports-color "3.1.2" -mongodb-core@3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.7.tgz#a8ef1fe764a192c979252dacbc600dc88d77e28f" +mongodb@^3.7.3: + version "3.7.3" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.7.3.tgz#b7949cfd0adc4cc7d32d3f2034214d4475f175a5" + integrity sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw== dependencies: - bson "^1.1.1" - require_optional "^1.0.1" + bl "^2.2.1" + bson "^1.1.4" + denque "^1.4.1" + optional-require "^1.1.8" safe-buffer "^5.1.2" optionalDependencies: saslprep "^1.0.0" -mongodb@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/mongodb/-/mongodb-3.2.7.tgz#8ba149e4be708257cad0dea72aebb2bbb311a7ac" - dependencies: - mongodb-core "3.2.7" - safe-buffer "^5.1.2" - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -236,10 +264,35 @@ once@^1.3.0: dependencies: wrappy "1" +optional-require@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/optional-require/-/optional-require-1.1.8.tgz#16364d76261b75d964c482b2406cb824d8ec44b7" + integrity sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA== + dependencies: + require-at "^1.0.6" + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +readable-stream@^2.3.5: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + redis-commands@^1.2.0: version "1.5.0" resolved "https://registry.npmjs.org/redis-commands/-/redis-commands-1.5.0.tgz#80d2e20698fe688f227127ff9e5164a7dd17e785" @@ -256,18 +309,17 @@ redis@^2.8.0: redis-commands "^1.2.0" redis-parser "^2.6.0" -require_optional@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" - dependencies: - resolve-from "^2.0.0" - semver "^5.1.0" +require-at@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/require-at/-/require-at-1.0.6.tgz#9eb7e3c5e00727f5a4744070a7f560d4de4f6e6a" + integrity sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g== -resolve-from@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" +safe-buffer@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@^5.1.2: +safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -277,16 +329,19 @@ saslprep@^1.0.0: dependencies: sparse-bitfield "^3.0.3" -semver@^5.1.0: - version "5.7.0" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - sparse-bitfield@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" dependencies: memory-pager "^1.0.2" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + supports-color@3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" @@ -301,6 +356,11 @@ type-detect@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"