From 4af27ff9bb689d8b912bd91b68ef8ecd8b23d5b2 Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Mon, 10 Sep 2012 00:54:33 -0700 Subject: [PATCH 01/49] first pass updating for sqlite3 support --- lib/connect-sqlite.js | 59 ++++++++++++++++++++----------------------- package.json | 25 ++++++++++++------ 2 files changed, 45 insertions(+), 39 deletions(-) diff --git a/lib/connect-sqlite.js b/lib/connect-sqlite.js index 5737230..ab2feb8 100644 --- a/lib/connect-sqlite.js +++ b/lib/connect-sqlite.js @@ -1,15 +1,15 @@ -/*! - * Connect - SQLite - * Copyright(c) 2011 tnantoka +/* + * Connect - SQLite3 + * Copyright(c) 2012 David Feinberg * MIT Licensed - * forked from https://github.com/visionmedia/connect-redis + * forked from https://github.com/tnantoka/connect-sqlite */ /** * Module dependencies. */ -var sqlite = require('sqlite'); +var sqlite3 = require('sqlite3'); var events = require('events'); /** @@ -19,14 +19,14 @@ var events = require('events'); var oneDay = 86400; /** - * Return the `SQLiteStore` extending `connect`'s session Store. + * Return the SQLiteStore extending connect's session Store. * * @param {object} connect * @return {Function} * @api public */ -module.exports = function(connect){ +module.exports = function(connect) { /** * Connect's Store. @@ -46,24 +46,20 @@ module.exports = function(connect){ Store.call(this, options); this.table = options.db || 'sessions'; - this.db = new sqlite.Database(); + var dbFile = (options.dir || '.') + '/' + this.table + '.db'; + + this.db = new sqlite3.Database(dbFile); this.client = new events.EventEmitter(); var self = this; - var dbFile = (options.dir || '.') + '/' + this.table + '.db'; + - this.db.open(dbFile, function(err) { - if (err) throw err; - self.db.executeScript('CREATE TABLE IF NOT EXISTS ' + self.table + ' (' + - 'sid PRIMARY KEY, ' + - 'expired, sess);', - function(err) { - if (err) throw err; - self.client.emit('connect'); - } - ); - }); - } + this.db.exec('CREATE TABLE IF NOT EXISTS ' + this.table + ' (' + 'sid PRIMARY KEY, ' + 'expired, sess);', + function(err) { + if (err) throw err; + self.client.emit('connect'); + } + ); /** * Inherit from `Store`. @@ -79,9 +75,9 @@ module.exports = function(connect){ * @api public */ - SQLiteStore.prototype.get = function(sid, fn){ + SQLiteStore.prototype.get = function(sid, fn) { var now = new Date().getTime(); - this.db.execute('SELECT sess FROM ' + this.table + ' WHERE sid = ? AND ? <= expired;', + this.db.run('SELECT sess FROM ' + this.table + ' WHERE sid = ? AND ? <= expired;', [sid, now], function(err, rows) { if (err) fn(err); @@ -115,7 +111,7 @@ module.exports = function(connect){ var expired = maxAge ? now + maxAge : now + oneDay; sess = JSON.stringify(sess); - this.db.execute('INSERT OR REPLACE INTO ' + this.table + ' VALUES (?, ?, ?);', + this.db.run('INSERT OR REPLACE INTO ' + this.table + ' VALUES (?, ?, ?);', [sid, expired, sess], function(err, rows) { if (fn) fn.apply(this, arguments); @@ -134,8 +130,8 @@ module.exports = function(connect){ * @api public */ - SQLiteStore.prototype.destroy = function(sid, fn){ - this.db.execute('DELETE FROM ' + this.table + ' WHERE sid = ?;', [sid], fn); + SQLiteStore.prototype.destroy = function(sid, fn) { + this.db.run('DELETE FROM ' + this.table + ' WHERE sid = ?;', [sid], fn); }; @@ -146,8 +142,8 @@ module.exports = function(connect){ * @api public */ - SQLiteStore.prototype.length = function(fn){ - this.db.execute('SELECT COUNT(*) AS count FROM ' + this.table + ';', function(err, rows) { + SQLiteStore.prototype.length = function(fn) { + this.db.run('SELECT COUNT(*) AS count FROM ' + this.table + ';', function(err, rows) { if (err) fn(err); fn(null, rows[0].count); }); @@ -161,13 +157,14 @@ module.exports = function(connect){ * @api public */ - SQLiteStore.prototype.clear = function(fn){ + SQLiteStore.prototype.clear = function(fn) { //this.db.executeScript('TRUNCATE TABLE ' + this.table + ';', fn); - this.db.executeScript('DELETE FROM ' + this.table + ';', function(err) { + this.db.execute('DELETE FROM ' + this.table + ';', function(err) { if (err) fn(err); fn(null, true); }); }; return SQLiteStore; -}; + +} diff --git a/package.json b/package.json index 5ab38d7..7f1aec2 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,25 @@ { - "name": "connect-sqlite", - "description": "SQLite session store for Connect", - "version": "0.0.1", - "author": "tnantoka ", - "main": "lib/connect-sqlite", + "name": "connect-sqlite3", + "description": "SQLite3 session store for Connect", + "version": "0.8.0", + "author": "David Feinberg", + "main": "lib/connect-sqlite3", "dependencies": { - "sqlite": ">= 1.0.4" + "sqlite": "~2.1.5" }, "devDependencies": { "connect": "1.4.x" }, "engines": { - "node": ">= 0.1.98" - } + "node": "~0.6.11" + }, + "repository": { + "type": "git", + "url": "https://github.com/rawberg/connect-sqlite3.git" + }, + "licenses": [ + { + "type": "MIT" + } + ] } From 38d5e0d79bfd205e75ef4944971930417914883a Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Mon, 10 Sep 2012 01:19:30 -0700 Subject: [PATCH 02/49] troublehsooting test runner --- lib/connect-sqlite.js | 170 ------------------------------------------ package.json | 2 +- test.js | 10 +-- 3 files changed, 6 insertions(+), 176 deletions(-) delete mode 100644 lib/connect-sqlite.js diff --git a/lib/connect-sqlite.js b/lib/connect-sqlite.js deleted file mode 100644 index ab2feb8..0000000 --- a/lib/connect-sqlite.js +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Connect - SQLite3 - * Copyright(c) 2012 David Feinberg - * MIT Licensed - * forked from https://github.com/tnantoka/connect-sqlite - */ - -/** - * Module dependencies. - */ - -var sqlite3 = require('sqlite3'); -var events = require('events'); - -/** - * One day in seconds. - */ - -var oneDay = 86400; - -/** - * Return the SQLiteStore extending connect's session Store. - * - * @param {object} connect - * @return {Function} - * @api public - */ - -module.exports = function(connect) { - - /** - * Connect's Store. - */ - - var Store = connect.session.Store; - - /** - * Initialize SQLiteStore with the given `options`. - * - * @param {Object} options - * @api public - */ - - function SQLiteStore(options) { - options = options || {}; - Store.call(this, options); - - this.table = options.db || 'sessions'; - var dbFile = (options.dir || '.') + '/' + this.table + '.db'; - - this.db = new sqlite3.Database(dbFile); - this.client = new events.EventEmitter(); - var self = this; - - - - this.db.exec('CREATE TABLE IF NOT EXISTS ' + this.table + ' (' + 'sid PRIMARY KEY, ' + 'expired, sess);', - function(err) { - if (err) throw err; - self.client.emit('connect'); - } - ); - - /** - * Inherit from `Store`. - */ - - SQLiteStore.prototype.__proto__ = Store.prototype; - - /** - * Attempt to fetch session by the given `sid`. - * - * @param {String} sid - * @param {Function} fn - * @api public - */ - - SQLiteStore.prototype.get = function(sid, fn) { - var now = new Date().getTime(); - this.db.run('SELECT sess FROM ' + this.table + ' WHERE sid = ? AND ? <= expired;', - [sid, now], - function(err, rows) { - if (err) fn(err); - // AssesionError occurs !? - //try { - if (!rows || rows.length === 0) { - return fn(); - } - fn(null, JSON.parse(rows[0].sess)); - //} catch (e) { - // fn(e); - //} - } - ); - }; - - - /** - * Commit the given `sess` object associated with the given `sid`. - * - * @param {String} sid - * @param {Session} sess - * @param {Function} fn - * @api public - */ - - SQLiteStore.prototype.set = function(sid, sess, fn) { - try { - var maxAge = sess.cookie.maxAge; - var now = new Date().getTime(); - var expired = maxAge ? now + maxAge : now + oneDay; - sess = JSON.stringify(sess); - - this.db.run('INSERT OR REPLACE INTO ' + this.table + ' VALUES (?, ?, ?);', - [sid, expired, sess], - function(err, rows) { - if (fn) fn.apply(this, arguments); - } - ); - } catch (e) { - if (fn) fn(e); - } - }; - - - /** - * Destroy the session associated with the given `sid`. - * - * @param {String} sid - * @api public - */ - - SQLiteStore.prototype.destroy = function(sid, fn) { - this.db.run('DELETE FROM ' + this.table + ' WHERE sid = ?;', [sid], fn); - }; - - - /** - * Fetch number of sessions. - * - * @param {Function} fn - * @api public - */ - - SQLiteStore.prototype.length = function(fn) { - this.db.run('SELECT COUNT(*) AS count FROM ' + this.table + ';', function(err, rows) { - if (err) fn(err); - fn(null, rows[0].count); - }); - }; - - - /** - * Clear all sessions. - * - * @param {Function} fn - * @api public - */ - - SQLiteStore.prototype.clear = function(fn) { - //this.db.executeScript('TRUNCATE TABLE ' + this.table + ';', fn); - this.db.execute('DELETE FROM ' + this.table + ';', function(err) { - if (err) fn(err); - fn(null, true); - }); - }; - - return SQLiteStore; - -} diff --git a/package.json b/package.json index 7f1aec2..829c516 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "David Feinberg", "main": "lib/connect-sqlite3", "dependencies": { - "sqlite": "~2.1.5" + "sqlite3": "~2.1.5" }, "devDependencies": { "connect": "1.4.x" diff --git a/test.js b/test.js index e88ae54..be514fc 100644 --- a/test.js +++ b/test.js @@ -3,11 +3,11 @@ * Module dependencies. */ -var assert = require('assert') - , connect = require('connect') - , SQLiteStore = require('./lib/connect-sqlite.js')(connect); +var assert = require('assert'), + connect = require('connect'), + SQLiteStore = require('./lib/connect-sqlite3.js')(connect); -var store = new SQLiteStore; +var store = new SQLiteStore(); var store_alt = new SQLiteStore({ db: 'sessions2' }); store.client.on('connect', function(){ @@ -29,7 +29,7 @@ store.client.on('connect', function(){ // #db option store_alt.length(function (err, len) { assert.ok(!err, '#alt db got an error'); - assert.equal(0, len, '#alt db with keys'); + assert.equal(0, len, '#alt db with keys'); // #clear() store.clear(function(err, ok){ From 648b36fa920327f0848b7811424f81d2f024c39e Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Mon, 10 Sep 2012 02:09:12 -0700 Subject: [PATCH 03/49] updated the code to make sure all existing test cases pass --- lib/connect-sqlite3.js | 161 +++++++++++++++++++++++++++++++++++++++++ test.js | 6 +- 2 files changed, 164 insertions(+), 3 deletions(-) create mode 100644 lib/connect-sqlite3.js diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js new file mode 100644 index 0000000..4a07b5f --- /dev/null +++ b/lib/connect-sqlite3.js @@ -0,0 +1,161 @@ +/* +* Connect - SQLite3 +* Copyright(c) 2012 David Feinberg +* MIT Licensed +* forked from https://github.com/tnantoka/connect-sqlite +*/ + +/** +* Module dependencies. +*/ + +var sqlite3 = require('sqlite3'); +var events = require('events'); + +/** +* One day in seconds. +*/ + +var oneDay = 86400; + +/** +* Return the SQLiteStore extending connect's session Store. +* +* @param {object} connect +* @return {Function} +* @api public +*/ + +module.exports = function(connect) { + + /** + * Connect's Store. + */ + + var Store = connect.session.Store; + + /** + * Initialize SQLiteStore with the given `options`. + * + * @param {Object} options + * @api public + */ + + function SQLiteStore(options) { + options = options || {}; + Store.call(this, options); + + this.table = options.db || 'sessions'; + var dbFile = (options.dir || '.') + '/' + this.table + '.db'; + + this.db = new sqlite3.Database(dbFile); + this.client = new events.EventEmitter(); + var self = this; + + + + this.db.exec('CREATE TABLE IF NOT EXISTS ' + this.table + ' (' + 'sid PRIMARY KEY, ' + 'expired, sess)', + function(err) { + if (err) throw err; + self.client.emit('connect'); + } + ); + } + + /** + * Inherit from `Store`. + */ + + SQLiteStore.prototype.__proto__ = Store.prototype; + + /** + * Attempt to fetch session by the given `sid`. + * + * @param {String} sid + * @param {Function} fn + * @api public + */ + + SQLiteStore.prototype.get = function(sid, fn) { + var now = new Date().getTime(); + this.db.get('SELECT sess FROM ' + this.table + ' WHERE sid = ? AND ? <= expired', [sid, now], + function(err, row) { + if (err) fn(err); + fn(null, JSON.parse(row.sess)); + } + ); + }; + + + /** + * Commit the given `sess` object associated with the given `sid`. + * + * @param {String} sid + * @param {Session} sess + * @param {Function} fn + * @api public + */ + + SQLiteStore.prototype.set = function(sid, sess, fn) { + try { + var maxAge = sess.cookie.maxAge; + var now = new Date().getTime(); + var expired = maxAge ? now + maxAge : now + oneDay; + sess = JSON.stringify(sess); + + this.db.all('INSERT OR REPLACE INTO ' + this.table + ' VALUES (?, ?, ?)', + [sid, expired, sess], + function(err, rows) { + if (fn) fn.apply(this, arguments); + } + ); + } catch (e) { + if (fn) fn(e); + } + }; + + + /** + * Destroy the session associated with the given `sid`. + * + * @param {String} sid + * @api public + */ + + SQLiteStore.prototype.destroy = function(sid, fn) { + this.db.run('DELETE FROM ' + this.table + ' WHERE sid = ?', [sid], fn); + }; + + + /** + * Fetch number of sessions. + * + * @param {Function} fn + * @api public + */ + + SQLiteStore.prototype.length = function(fn) { + this.db.all('SELECT COUNT(*) AS count FROM ' + this.table + '', function(err, rows) { + if (err) fn(err); + fn(null, rows[0].count); + }); + }; + + + /** + * Clear all sessions. + * + * @param {Function} fn + * @api public + */ + + SQLiteStore.prototype.clear = function(fn) { + this.db.exec('DELETE FROM ' + this.table + '', function(err) { + if (err) fn(err); + fn(null, true); + }); + }; + + return SQLiteStore; + +}; \ No newline at end of file diff --git a/test.js b/test.js index be514fc..ecad591 100644 --- a/test.js +++ b/test.js @@ -47,8 +47,8 @@ store.client.on('connect', function(){ store.length(function(err, len){ assert.equal(0, len, '#set() null'); console.log('done'); -// store.client.end(); -// store_alt.client.end(); + //store.client.end(); + //store_alt.client.end(); }); }); }); @@ -56,7 +56,7 @@ store.client.on('connect', function(){ }); }); }); - }) + }); }); }); From c1c1434dbe22b75bc79588a51f585848c01a66fb Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Mon, 10 Sep 2012 02:15:46 -0700 Subject: [PATCH 04/49] Update Readme.md --- Readme.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Readme.md b/Readme.md index d91b2d3..dd8ee6d 100644 --- a/Readme.md +++ b/Readme.md @@ -1,13 +1,10 @@ +# Connect SQLite3 -# Connect SQLite - -connect-sqlite is a SQLite session store, just copied connect-redis. - - connect-sqlite support only connect `>= 1.4.0`. +connect-sqlite3 is a SQLite3 session store modeled after the TJ's connect-redis store. ## Installation - $ npm install connect-sqlite + $ npm install connect-sqlite3 ## Options From 4e4c2386f9355cd1f6a9f253e1ac52528e711255 Mon Sep 17 00:00:00 2001 From: Nibbler999 Date: Tue, 11 Sep 2012 14:02:44 +0200 Subject: [PATCH 05/49] Fixed selecting unknown session --- lib/connect-sqlite3.js | 1 + test.js | 64 +++++++++++++++++++++++------------------- 2 files changed, 36 insertions(+), 29 deletions(-) diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index 4a07b5f..174fb0b 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -81,6 +81,7 @@ module.exports = function(connect) { this.db.get('SELECT sess FROM ' + this.table + ' WHERE sid = ? AND ? <= expired', [sid, now], function(err, row) { if (err) fn(err); + if (!row) return fn(); fn(null, JSON.parse(row.sess)); } ); diff --git a/test.js b/test.js index ecad591..ae79c83 100644 --- a/test.js +++ b/test.js @@ -20,35 +20,41 @@ store.client.on('connect', function(){ store.get('123', function(err, data){ assert.ok(!err, '#get() got an error'); assert.deepEqual({ cookie: { maxAge: 2000 }, name: 'tnantoka' }, data); - - // #length() - store.length(function(err, len){ - assert.ok(!err, '#length() got an error'); - assert.equal(1, len, '#length() with keys'); - - // #db option - store_alt.length(function (err, len) { - assert.ok(!err, '#alt db got an error'); - assert.equal(0, len, '#alt db with keys'); - - // #clear() - store.clear(function(err, ok){ - assert.ok(!err, '#clear()'); - assert.ok(ok, '#clear()'); - - // #length() - store.length(function(err, len){ - assert.ok(!err, '#length()'); - assert.equal(0, len, '#length() without keys'); - - // #set null - store.set('123', { cookie: { maxAge: 2000 }, name: 'tnantoka' }, function(){ - store.destroy('123', function(){ - store.length(function(err, len){ - assert.equal(0, len, '#set() null'); - console.log('done'); - //store.client.end(); - //store_alt.client.end(); + + // #get() unknown session + store.get('1234', function(err, data){ + assert.ok(!err, '#get() unknown session got an error'); + assert.equal(undefined, data, '#get() unknown session'); + + // #length() + store.length(function(err, len){ + assert.ok(!err, '#length() got an error'); + assert.equal(1, len, '#length() with keys'); + + // #db option + store_alt.length(function (err, len) { + assert.ok(!err, '#alt db got an error'); + assert.equal(0, len, '#alt db with keys'); + + // #clear() + store.clear(function(err, ok){ + assert.ok(!err, '#clear()'); + assert.ok(ok, '#clear()'); + + // #length() + store.length(function(err, len){ + assert.ok(!err, '#length()'); + assert.equal(0, len, '#length() without keys'); + + // #set null + store.set('123', { cookie: { maxAge: 2000 }, name: 'tnantoka' }, function(){ + store.destroy('123', function(){ + store.length(function(err, len){ + assert.equal(0, len, '#set() null'); + console.log('done'); + //store.client.end(); + //store_alt.client.end(); + }); }); }); }); From 16bfc3386e4ec5ca1de686f3d8449957fe51918e Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Wed, 12 Sep 2012 00:36:26 -0700 Subject: [PATCH 06/49] - re-wrote unit tests with Mocha and Should.js - added option param for db file name (seperate from table name) - updated readme --- History.md | 12 ++ Readme.md | 17 ++- lib/connect-sqlite3.js | 249 +++++++++++++++++++++-------------------- package.json | 2 +- sessions | 0 test.js | 62 ---------- 6 files changed, 148 insertions(+), 194 deletions(-) delete mode 100644 sessions delete mode 100644 test.js diff --git a/History.md b/History.md index 492ca0b..198764d 100644 --- a/History.md +++ b/History.md @@ -1,3 +1,15 @@ +0.9.0 / 2012-09-11 +================== + - re-wrote unit tests with Mocha and Should.js + - added option param for db file name (seperate from table name) + - updated readme + +0.8.0 / 2012-09-10 +================== + - forked previous lib + - swapped out sqlite lib for node-sqlite3 + - made sure existing unit tests work + 0.0.1 / 2011-09-24 ================== diff --git a/Readme.md b/Readme.md index d91b2d3..f076315 100644 --- a/Readme.md +++ b/Readme.md @@ -1,23 +1,22 @@ -# Connect SQLite +# Connect SQLite3 -connect-sqlite is a SQLite session store, just copied connect-redis. - - connect-sqlite support only connect `>= 1.4.0`. +connect-sqlite3 is a SQLite3 session store, modeled after connect-redis. ## Installation - $ npm install connect-sqlite + $ npm install connect-sqlite3 ## Options - - `db='sessions'` Database file & table name + - `db='sessions'` Database table name + - `db= Database file name (defaults to table name) - `dir='.'` Direcotry to save '.db' file ## Usage - var connect = require('connect') - , SQLiteStore = require('connect-sqlite')(connect); + var connect = require('connect'), + SQLiteStore = require('connect-sqlite3')(connect); connect.createServer( connect.cookieParser(), @@ -26,7 +25,7 @@ connect-sqlite is a SQLite session store, just copied connect-redis. with express - var SQLiteStore = require('connect-sqlite')(express); + var SQLiteStore = require('connect-sqlite3')(express); app.configure(function() { app.set('views', __dirname + '/views'); diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index 4a07b5f..26f2fa3 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -9,8 +9,8 @@ * Module dependencies. */ -var sqlite3 = require('sqlite3'); -var events = require('events'); +var sqlite3 = require('sqlite3'), + events = require('events'); /** * One day in seconds. @@ -28,134 +28,139 @@ var oneDay = 86400; module.exports = function(connect) { - /** - * Connect's Store. - */ + /** + * Connect's Store. + */ - var Store = connect.session.Store; + var Store = connect.session.Store; - /** - * Initialize SQLiteStore with the given `options`. - * - * @param {Object} options - * @api public - */ + /** + * Initialize SQLiteStore with the given options. + * + * @param {Object} options + * @api public + */ - function SQLiteStore(options) { - options = options || {}; - Store.call(this, options); + function SQLiteStore(options) { + options = options || {}; + Store.call(this, options); - this.table = options.db || 'sessions'; - var dbFile = (options.dir || '.') + '/' + this.table + '.db'; + this.table = options.table || 'sessions'; + this.db = options.db || this.table; + var dbPath; - this.db = new sqlite3.Database(dbFile); - this.client = new events.EventEmitter(); - var self = this; + if(this.db !== ':memory:') { + dbPath = (options.dir || '.') + '/' + this.db + '.db'; + } else { + dbPath = this.db; + } - + this.db = new sqlite3.Database(dbPath); + this.client = new events.EventEmitter(); + var self = this; - this.db.exec('CREATE TABLE IF NOT EXISTS ' + this.table + ' (' + 'sid PRIMARY KEY, ' + 'expired, sess)', - function(err) { - if (err) throw err; - self.client.emit('connect'); - } - ); - } + this.db.exec('CREATE TABLE IF NOT EXISTS ' + this.table + ' (' + 'sid PRIMARY KEY, ' + 'expired, sess)', + function(err) { + if (err) throw err; + self.client.emit('connect'); + } + ); + } - /** - * Inherit from `Store`. - */ - - SQLiteStore.prototype.__proto__ = Store.prototype; - - /** - * Attempt to fetch session by the given `sid`. - * - * @param {String} sid - * @param {Function} fn - * @api public - */ - - SQLiteStore.prototype.get = function(sid, fn) { - var now = new Date().getTime(); - this.db.get('SELECT sess FROM ' + this.table + ' WHERE sid = ? AND ? <= expired', [sid, now], - function(err, row) { - if (err) fn(err); - fn(null, JSON.parse(row.sess)); - } - ); - }; - - - /** - * Commit the given `sess` object associated with the given `sid`. - * - * @param {String} sid - * @param {Session} sess - * @param {Function} fn - * @api public - */ - - SQLiteStore.prototype.set = function(sid, sess, fn) { - try { - var maxAge = sess.cookie.maxAge; - var now = new Date().getTime(); - var expired = maxAge ? now + maxAge : now + oneDay; - sess = JSON.stringify(sess); - - this.db.all('INSERT OR REPLACE INTO ' + this.table + ' VALUES (?, ?, ?)', - [sid, expired, sess], - function(err, rows) { - if (fn) fn.apply(this, arguments); + /** + * Inherit from Store. + */ + + SQLiteStore.prototype.__proto__ = Store.prototype; + + /** + * Attempt to fetch session by the given sid. + * + * @param {String} sid + * @param {Function} fn + * @api public + */ + + SQLiteStore.prototype.get = function(sid, fn) { + var now = new Date().getTime(); + this.db.get('SELECT sess FROM ' + this.table + ' WHERE sid = ? AND ? <= expired', [sid, now], + function(err, row) { + if (err) fn(err); + fn(null, JSON.parse(row.sess)); + } + ); + }; + + + /** + * Commit the given sess object associated with the given sid. + * + * @param {String} sid + * @param {Session} sess + * @param {Function} fn + * @api public + */ + + SQLiteStore.prototype.set = function(sid, sess, fn) { + try { + var maxAge = sess.cookie.maxAge; + var now = new Date().getTime(); + var expired = maxAge ? now + maxAge : now + oneDay; + sess = JSON.stringify(sess); + + this.db.all('INSERT OR REPLACE INTO ' + this.table + ' VALUES (?, ?, ?)', + [sid, expired, sess], + function(err, rows) { + if (fn) fn.apply(this, arguments); + } + ); + } catch (e) { + if (fn) fn(e); } - ); - } catch (e) { - if (fn) fn(e); - } - }; - - - /** - * Destroy the session associated with the given `sid`. - * - * @param {String} sid - * @api public - */ - - SQLiteStore.prototype.destroy = function(sid, fn) { - this.db.run('DELETE FROM ' + this.table + ' WHERE sid = ?', [sid], fn); - }; - - - /** - * Fetch number of sessions. - * - * @param {Function} fn - * @api public - */ - - SQLiteStore.prototype.length = function(fn) { - this.db.all('SELECT COUNT(*) AS count FROM ' + this.table + '', function(err, rows) { - if (err) fn(err); - fn(null, rows[0].count); - }); - }; - - - /** - * Clear all sessions. - * - * @param {Function} fn - * @api public - */ - - SQLiteStore.prototype.clear = function(fn) { - this.db.exec('DELETE FROM ' + this.table + '', function(err) { - if (err) fn(err); - fn(null, true); - }); - }; - - return SQLiteStore; + }; + + + /** + * Destroy the session associated with the given `sid`. + * + * @param {String} sid + * @api public + */ + + SQLiteStore.prototype.destroy = function(sid, fn) { + this.db.run('DELETE FROM ' + this.table + ' WHERE sid = ?', [sid], fn); + }; + + + /** + * Fetch number of sessions. + * + * @param {Function} fn + * @api public + */ + + SQLiteStore.prototype.length = function(fn) { + this.db.all('SELECT COUNT(*) AS count FROM ' + this.table + '', function(err, rows) { + if (err) fn(err); + fn(null, rows[0].count); + }); + }; + + + /** + * Clear all sessions. + * + * @param {Function} fn + * @api public + */ + + SQLiteStore.prototype.clear = function(fn) { + this.db.exec('DELETE FROM ' + this.table + '', function(err) { + if (err) fn(err); + fn(null, true); + }); + }; + + return SQLiteStore; }; \ No newline at end of file diff --git a/package.json b/package.json index 829c516..dfd7020 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/rawberg/connect-sqlite3.git" + "url": "git://github.com/rawberg/connect-sqlite3.git" }, "licenses": [ { diff --git a/sessions b/sessions deleted file mode 100644 index e69de29..0000000 diff --git a/test.js b/test.js deleted file mode 100644 index ecad591..0000000 --- a/test.js +++ /dev/null @@ -1,62 +0,0 @@ - -/** - * Module dependencies. - */ - -var assert = require('assert'), - connect = require('connect'), - SQLiteStore = require('./lib/connect-sqlite3.js')(connect); - -var store = new SQLiteStore(); -var store_alt = new SQLiteStore({ db: 'sessions2' }); - -store.client.on('connect', function(){ - // #set() - store.set('123', { cookie: { maxAge: 2000 }, name: 'tnantoka' }, function(err, ok){ - assert.ok(!err, '#set() got an error'); - assert.ok(ok, '#set() is not ok'); - - // #get() - store.get('123', function(err, data){ - assert.ok(!err, '#get() got an error'); - assert.deepEqual({ cookie: { maxAge: 2000 }, name: 'tnantoka' }, data); - - // #length() - store.length(function(err, len){ - assert.ok(!err, '#length() got an error'); - assert.equal(1, len, '#length() with keys'); - - // #db option - store_alt.length(function (err, len) { - assert.ok(!err, '#alt db got an error'); - assert.equal(0, len, '#alt db with keys'); - - // #clear() - store.clear(function(err, ok){ - assert.ok(!err, '#clear()'); - assert.ok(ok, '#clear()'); - - // #length() - store.length(function(err, len){ - assert.ok(!err, '#length()'); - assert.equal(0, len, '#length() without keys'); - - // #set null - store.set('123', { cookie: { maxAge: 2000 }, name: 'tnantoka' }, function(){ - store.destroy('123', function(){ - store.length(function(err, len){ - assert.equal(0, len, '#set() null'); - console.log('done'); - //store.client.end(); - //store_alt.client.end(); - }); - }); - }); - }); - }); - }); - }); - }); - }); -}); - From 62a37e71e1d8d74a9dd0fc99590b2e2842ea2429 Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Wed, 12 Sep 2012 00:56:38 -0700 Subject: [PATCH 07/49] Update Readme.md --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index f721b96..5c2f1dc 100644 --- a/Readme.md +++ b/Readme.md @@ -10,7 +10,7 @@ connect-sqlite3 is a SQLite3 session store modeled after the TJ's connect-redis ## Options - `db='sessions'` Database table name - - `db= Database file name (defaults to table name) + - `db='sessions'` Database file name (defaults to table name) - `dir='.'` Direcotry to save '.db' file ## Usage From 9285795111a34b5cd9babc5b6d7d79e5f9793859 Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Wed, 12 Sep 2012 00:58:00 -0700 Subject: [PATCH 08/49] updated package.json version number --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index dfd7020..ccd05b9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.8.0", + "version": "0.9.0", "author": "David Feinberg", "main": "lib/connect-sqlite3", "dependencies": { From 363ad18d7256f38dc5ac674f8075d1f329260d95 Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Thu, 20 Sep 2012 00:46:47 -0700 Subject: [PATCH 09/49] updated package.json to be less restrictive about dependencies --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index ccd05b9..de27fee 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,17 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.9.0", + "version": "0.9.1", "author": "David Feinberg", "main": "lib/connect-sqlite3", "dependencies": { - "sqlite3": "~2.1.5" + "sqlite3": ">=2.1.5" }, "devDependencies": { - "connect": "1.4.x" + "connect": ">=1.0.0" }, "engines": { - "node": "~0.6.11" + "node": ">=0.4.x" }, "repository": { "type": "git", From ad891f84240edfa4b1b82c44743477b998bdb0e5 Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Sat, 5 Jan 2013 21:25:39 -0800 Subject: [PATCH 10/49] fixed default session length to be one day in milliseconds (used to seconds). bumped nom version and set the sqlite3 dependancy to be the latest master branch on github --- lib/connect-sqlite3.js | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index 0da68f9..0eb1b6a 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -13,10 +13,10 @@ var sqlite3 = require('sqlite3'), events = require('events'); /** -* One day in seconds. +* One day in milliseconds. */ -var oneDay = 86400; +var oneDay = 86400000; /** * Return the SQLiteStore extending connect's session Store. diff --git a/package.json b/package.json index de27fee..f581e66 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,11 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.9.1", + "version": "0.9.2", "author": "David Feinberg", "main": "lib/connect-sqlite3", "dependencies": { - "sqlite3": ">=2.1.5" + "sqlite3": "git+https://github.com/developmentseed/node-sqlite3.git" }, "devDependencies": { "connect": ">=1.0.0" From 4be9fe3ed397de56ae68d8516ce6f39a6b6b73aa Mon Sep 17 00:00:00 2001 From: Chris Cowan Date: Thu, 21 Nov 2013 20:18:10 -0600 Subject: [PATCH 11/49] Clean out expired sessions from database regularly. --- lib/connect-sqlite3.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index 0eb1b6a..f6476bb 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -34,6 +34,17 @@ module.exports = function(connect) { var Store = connect.session.Store; + /** + * Remove expired sessions from database. + * @param {Object} store + * @api private + */ + + function dbCleanup(store) { + var now = new Date().getTime(); + store.db.run('DELETE FROM ' + store.table + ' WHERE ? > expired', [now]); + } + /** * Initialize SQLiteStore with the given options. * @@ -63,6 +74,9 @@ module.exports = function(connect) { function(err) { if (err) throw err; self.client.emit('connect'); + + dbCleanup(self); + setInterval(dbCleanup, oneDay, self); } ); } From 0e49e24010a8023bc733eddf85e06a32c286f2c0 Mon Sep 17 00:00:00 2001 From: Chris Cowan Date: Fri, 22 Nov 2013 00:22:43 -0600 Subject: [PATCH 12/49] Unref cleanup interval timer so that the node process won't wait on it to shutdown. --- lib/connect-sqlite3.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index f6476bb..0e1cbad 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -76,7 +76,7 @@ module.exports = function(connect) { self.client.emit('connect'); dbCleanup(self); - setInterval(dbCleanup, oneDay, self); + setInterval(dbCleanup, oneDay, self).unref(); } ); } From 516cece684fd8c13ce040d96d534c62ebfaf2202 Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Tue, 22 Apr 2014 21:57:50 -0700 Subject: [PATCH 13/49] options correction in readme --- Readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index 5c2f1dc..b6c7d56 100644 --- a/Readme.md +++ b/Readme.md @@ -9,8 +9,8 @@ connect-sqlite3 is a SQLite3 session store modeled after the TJ's connect-redis ## Options - - `db='sessions'` Database table name - - `db='sessions'` Database file name (defaults to table name) + - `table='sessions'` Database table name + - `db='sessionsDB'` Database file name (defaults to table name) - `dir='.'` Direcotry to save '.db' file ## Usage From 3621f0b9fceea98bebf76176b58d6726c26c9ce4 Mon Sep 17 00:00:00 2001 From: fauxpark Date: Mon, 12 May 2014 10:54:18 +1000 Subject: [PATCH 14/49] Add support for Express 4.x --- Readme.md | 7 ++++++- lib/connect-sqlite3.js | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Readme.md b/Readme.md index b6c7d56..18dc964 100644 --- a/Readme.md +++ b/Readme.md @@ -23,10 +23,15 @@ connect-sqlite3 is a SQLite3 session store modeled after the TJ's connect-redis connect.session({ store: new SQLiteStore, secret: 'your secret' }) ); - with express + with express + 3.x: var SQLiteStore = require('connect-sqlite3')(express); + 4.x: + var session = require('express-session'); + var SQLiteStore = require('connect-sqlite3')(session); + app.configure(function() { app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index 0e1cbad..6818ef3 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -32,7 +32,7 @@ module.exports = function(connect) { * Connect's Store. */ - var Store = connect.session.Store; + var Store = (connect.session) ? connect.session.Store : connect.Store; /** * Remove expired sessions from database. @@ -178,4 +178,4 @@ module.exports = function(connect) { return SQLiteStore; -}; \ No newline at end of file +}; From cfb044b5dee0ce0e60ebaa6752006c8ab77b6b4a Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Tue, 13 May 2014 09:48:10 -0700 Subject: [PATCH 15/49] bumped version number --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f581e66..d24821b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.9.2", + "version": "0.9.3", "author": "David Feinberg", "main": "lib/connect-sqlite3", "dependencies": { From 97d59980b1f81200e8462c66148bca56044fdcf1 Mon Sep 17 00:00:00 2001 From: Usandfriends Date: Tue, 3 Jun 2014 22:08:11 -0700 Subject: [PATCH 16/49] Update package.json User renamed to MapBox... This might fix the error on Cloud9IDE where this package cannot be installed. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d24821b..194fea4 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "David Feinberg", "main": "lib/connect-sqlite3", "dependencies": { - "sqlite3": "git+https://github.com/developmentseed/node-sqlite3.git" + "sqlite3": "git+https://github.com/mapbox/node-sqlite3.git" }, "devDependencies": { "connect": ">=1.0.0" From 86a8fcbeec578861c1e4dfd76a563c4a72761fa3 Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Sun, 11 Jan 2015 10:57:11 -0800 Subject: [PATCH 17/49] 0.9.4 --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 194fea4..3bf8543 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.9.3", + "version": "0.9.4", "author": "David Feinberg", "main": "lib/connect-sqlite3", "dependencies": { @@ -16,10 +16,10 @@ "repository": { "type": "git", "url": "git://github.com/rawberg/connect-sqlite3.git" - }, + }, "licenses": [ { "type": "MIT" } - ] + ] } From 9a30823da0f1556ea80b2910efa2d63175aff5ab Mon Sep 17 00:00:00 2001 From: Joshua Wise Date: Fri, 20 Mar 2015 02:27:42 -0400 Subject: [PATCH 18/49] added touch protocol --- lib/connect-sqlite3.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index 6818ef3..d71ce44 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -175,6 +175,32 @@ module.exports = function(connect) { fn(null, true); }); }; + + + /** + * Touch the given session object associated with the given session ID. + * + * @param {string} sid + * @param {object} session + * @param {function} fn + * @public + */ + SQLiteStore.prototype.touch = function(sid, session, fn) { + if (session && session.cookie && session.cookie.expires) { + var now = new Date().getTime(); + var cookieExpires = new Date(session.cookie.expires).getTime(); + this.db.run('UPDATE ' + this.table + ' SET expired=? WHERE sid = ? AND ? <= expired', + [cookieExpires, sid, now], + function(err) { + if (fn) { + if (err) fn(err); + fn(null, true); + } + } + ); + } + } + return SQLiteStore; From 53f92bef2bd7814bf99ed3d8bf3a9c382be9e7f3 Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Fri, 20 Mar 2015 23:18:23 -0700 Subject: [PATCH 19/49] version bump for touch protocol suppport --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3bf8543..ebe49ab 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.9.4", + "version": "0.9.5", "author": "David Feinberg", "main": "lib/connect-sqlite3", "dependencies": { From b01ab343062f0e91c597037a1aeabd4d44dd15ce Mon Sep 17 00:00:00 2001 From: Valvi Date: Fri, 20 Nov 2015 15:19:29 -0500 Subject: [PATCH 20/49] Reference latest packaged sqlite instead of last revision --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ebe49ab..75f1e03 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "David Feinberg", "main": "lib/connect-sqlite3", "dependencies": { - "sqlite3": "git+https://github.com/mapbox/node-sqlite3.git" + "sqlite3": "^3.1.1" }, "devDependencies": { "connect": ">=1.0.0" From 604d62afb42cad7d1cf8c9e73271d95f0aef401f Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Sat, 21 Nov 2015 01:33:05 -0800 Subject: [PATCH 21/49] version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3bf8543..ebe49ab 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.9.4", + "version": "0.9.5", "author": "David Feinberg", "main": "lib/connect-sqlite3", "dependencies": { From a078268fd77516ac57a6062aab033b158ba10046 Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Sat, 21 Nov 2015 01:34:36 -0800 Subject: [PATCH 22/49] version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 75f1e03..d5c4cc5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.9.5", + "version": "0.9.6", "author": "David Feinberg", "main": "lib/connect-sqlite3", "dependencies": { From 71d5a92fe92564c37d8c461cd15b50fe08f94945 Mon Sep 17 00:00:00 2001 From: Doug Luce Date: Sun, 24 Jan 2016 12:10:59 -0800 Subject: [PATCH 23/49] Handle shared cache stores Which means passing through db names like file::memory:?cache=shared as well as passing through mode so shared-cache mode can be enabled. Also update the test to use connect-session instead of the outdated connect.session store. Add mocha and should as well as connect-expression to dev dependencies, add a test runner for the nodejs tests. --- lib/connect-sqlite3.js | 10 +++++----- package.json | 8 +++++++- test/test.js | 43 +++++++++++++++++++++++++++++++++++++++--- 3 files changed, 52 insertions(+), 9 deletions(-) diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index d71ce44..d697f09 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -60,13 +60,13 @@ module.exports = function(connect) { this.db = options.db || this.table; var dbPath; - if(this.db !== ':memory:') { - dbPath = (options.dir || '.') + '/' + this.db + '.db'; - } else { + if (this.db.indexOf(':memory:') > -1 || this.db.indexOf('?mode=memory') > -1) { dbPath = this.db; + } else { + dbPath = (options.dir || '.') + '/' + this.db + '.db'; } - - this.db = new sqlite3.Database(dbPath); + + this.db = new sqlite3.Database(dbPath, options.mode); this.client = new events.EventEmitter(); var self = this; diff --git a/package.json b/package.json index d5c4cc5..16ba7c4 100644 --- a/package.json +++ b/package.json @@ -4,11 +4,17 @@ "version": "0.9.6", "author": "David Feinberg", "main": "lib/connect-sqlite3", + "scripts": { + "test": "mocha test/test.js" + }, "dependencies": { "sqlite3": "^3.1.1" }, "devDependencies": { - "connect": ">=1.0.0" + "connect": ">=1.0.0", + "express-session": "^1.13.0", + "mocha": "^2.3.4", + "should": "^8.2.0" }, "engines": { "node": ">=0.4.x" diff --git a/test/test.js b/test/test.js index b99db5b..540aae8 100644 --- a/test/test.js +++ b/test/test.js @@ -1,8 +1,7 @@ var should = require('should'), - connect = require('connect'), + session = require('express-session'), util = require('util'), - SQLiteStore = require('../lib/connect-sqlite3.js')(connect); - + SQLiteStore = require('../lib/connect-sqlite3.js')(session); describe('connect-sqlite3 basic test suite', function() { before(function() { @@ -85,3 +84,41 @@ describe('connect-sqlite3 basic test suite', function() { }); + + +describe('connect-sqlite3 shared cache', function() { + it("should retrieve in one cached session what's stored in another.", function(done) { + var cwd = process.cwd(); + var memStore = new SQLiteStore({db: 'file::memory:?cache=shared', mode: 0x20046}); + process.chdir('..'); // Ensure we aren't opening a shared disk file + var memStore2 = new SQLiteStore({db: 'file::memory:?cache=shared', mode: 0x20046}); + + memStore.set('1111222233334444', {cookie: {maxAge:2011}, name: 'sample name'}, function(err, rows) { + process.chdir(cwd); // Restore dir + should.not.exist(err, 'set() returned an error'); + rows.should.be.empty; + memStore2.get('1111222233334444', function(err, session) { + should.not.exist(err, 'get() returned an error'); + should.exist(session); + (session).should.eql({cookie: {maxAge:2011}, name: 'sample name'}); + done(); + }); + }); + }); + + it("should not retrieve in one uncached session what's stored in another.", function(done) { + var memStore = new SQLiteStore({db: ':memory:'}); + var memStore2 = new SQLiteStore({db: ':memory:'}); + + memStore.set('1111222233334444', {cookie: {maxAge:2011}, name: 'sample name'}, function(err, rows) { + should.not.exist(err, 'set() returned an error'); + rows.should.be.empty; + memStore2.get('1111222233334444', function(err, session) { + should.not.exist(err, 'get() returned an error'); + should.not.exist(session); + done(); + }); + }); + }); +}); + From e840d9d3fc85048241521d61a3079116b796ec56 Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Sun, 24 Jan 2016 13:31:13 -0800 Subject: [PATCH 24/49] version bump --- Readme.md | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 18dc964..f24151d 100644 --- a/Readme.md +++ b/Readme.md @@ -47,3 +47,6 @@ connect-sqlite3 is a SQLite3 session store modeled after the TJ's connect-redis app.use(express.static(__dirname + '/public')); }); +## Test + + npm test \ No newline at end of file diff --git a/package.json b/package.json index 16ba7c4..05dc99e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.9.6", + "version": "0.9.7", "author": "David Feinberg", "main": "lib/connect-sqlite3", "scripts": { From ce6e06c0653ea5a23393458b70d1d3d01f43ae72 Mon Sep 17 00:00:00 2001 From: AJ Heller Date: Sat, 12 Mar 2016 19:01:21 -0800 Subject: [PATCH 25/49] resolve rawberg/connect-sqlite3#11: server hang due to missing callback invocation in `touch` See express-session's implementation: https://github.com/expressjs/session/blob/master/index.js#L303 The callback needs to be invoked in all calls to `touch`, or else `writeend` is never called inside express-session's `end` method, which finishes the response. In connect-sqlite3's `touch` method, the callback was not invoked if the cookie wasn't set to expire (which happens when no maxAge is set for the cookie, or with resave=false in the connect-sqlite3 configuration). This resulted in a browser hang and an `ERR_CONTENT_LENGTH_MISMATCH` due to a missing chunk at the end of the response. This patch fixes that by invoking the `touch` callback even if the db doesn't require an update. --- lib/connect-sqlite3.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index d697f09..4c493cc 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -198,7 +198,9 @@ module.exports = function(connect) { } } ); - } + } else { + fn(null, true); + } } From 56a01f56096ed88d2b8e8ba5d229fa8866513d3a Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Sat, 12 Mar 2016 19:48:26 -0800 Subject: [PATCH 26/49] version bump for PR #13 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 05dc99e..25722c3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.9.7", + "version": "0.9.8", "author": "David Feinberg", "main": "lib/connect-sqlite3", "scripts": { From c4a0eec8021885ae742bebbdd696f9000091a409 Mon Sep 17 00:00:00 2001 From: Jonathan Niles Date: Wed, 16 Mar 2016 11:34:03 +0100 Subject: [PATCH 27/49] docs: typos and syntax highlighting This commit fixes a minor typo in the README and adds syntax highlighting for easier reading. --- Readme.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Readme.md b/Readme.md index f24151d..76b56e8 100644 --- a/Readme.md +++ b/Readme.md @@ -4,17 +4,18 @@ connect-sqlite3 is a SQLite3 session store modeled after the TJ's connect-redis ## Installation - +```sh $ npm install connect-sqlite3 +``` ## Options - `table='sessions'` Database table name - `db='sessionsDB'` Database file name (defaults to table name) - - `dir='.'` Direcotry to save '.db' file + - `dir='.'` Directory to save '.db' file ## Usage - +```js var connect = require('connect'), SQLiteStore = require('connect-sqlite3')(connect); @@ -22,9 +23,9 @@ connect-sqlite3 is a SQLite3 session store modeled after the TJ's connect-redis connect.cookieParser(), connect.session({ store: new SQLiteStore, secret: 'your secret' }) ); - +``` with express - +```js 3.x: var SQLiteStore = require('connect-sqlite3')(express); @@ -46,7 +47,8 @@ connect-sqlite3 is a SQLite3 session store modeled after the TJ's connect-redis app.use(app.router); app.use(express.static(__dirname + '/public')); }); - +``` ## Test - - npm test \ No newline at end of file +```sh + $ npm test +``` From 9b510dc802908cea92c7305d722fdb86b749c5fa Mon Sep 17 00:00:00 2001 From: Quinn Hosler Date: Sat, 31 Dec 2016 08:57:38 -0500 Subject: [PATCH 28/49] replaced deprecated inheritance statement --- lib/connect-sqlite3.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index 4c493cc..f714eba 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -85,8 +85,9 @@ module.exports = function(connect) { * Inherit from Store. */ - SQLiteStore.prototype.__proto__ = Store.prototype; - + SQLiteStore.prototype = Object.create(Store.prototype); + SQLiteStore.prototype.constructor = SQLiteStore; + /** * Attempt to fetch session by the given sid. * From c6c6a2b5d97cecd45d045bd3b825d30a4fb4a07a Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Sun, 1 Jan 2017 11:23:49 -0800 Subject: [PATCH 29/49] version bump for PR #16 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 25722c3..ee349ac 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.9.8", + "version": "0.9.9", "author": "David Feinberg", "main": "lib/connect-sqlite3", "scripts": { From 6e5b3ef1f9b440820d75848331068b2f27484694 Mon Sep 17 00:00:00 2001 From: Wout Mertens Date: Mon, 7 Aug 2017 12:06:13 +0200 Subject: [PATCH 30/49] Use WAL mode for the database Fixes #15 --- lib/connect-sqlite3.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index f714eba..dafdcb6 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -70,7 +70,7 @@ module.exports = function(connect) { this.client = new events.EventEmitter(); var self = this; - this.db.exec('CREATE TABLE IF NOT EXISTS ' + this.table + ' (' + 'sid PRIMARY KEY, ' + 'expired, sess)', + this.db.exec('PRAGMA journal_mode = wal; CREATE TABLE IF NOT EXISTS ' + this.table + ' (' + 'sid PRIMARY KEY, ' + 'expired, sess)', function(err) { if (err) throw err; self.client.emit('connect'); From 92ef997cd6527136136844106d813107b02ed5e2 Mon Sep 17 00:00:00 2001 From: PauloASilva Date: Mon, 7 Aug 2017 22:02:33 +0100 Subject: [PATCH 31/49] '.db' database file extension was removed There's no reason to force the file extension. It should be up to the developer to provide the desired file name with or without file extension. Moreover, forcing file extension may prevent sessions to be store in a single database unless the main database file also uses the '.db' file extension. --- lib/connect-sqlite3.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index f714eba..2d7b0ab 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -63,7 +63,7 @@ module.exports = function(connect) { if (this.db.indexOf(':memory:') > -1 || this.db.indexOf('?mode=memory') > -1) { dbPath = this.db; } else { - dbPath = (options.dir || '.') + '/' + this.db + '.db'; + dbPath = (options.dir || '.') + '/' + this.db; } this.db = new sqlite3.Database(dbPath, options.mode); From e665a1da321ba343aac574a29b100c148fec5aba Mon Sep 17 00:00:00 2001 From: PauloASilva Date: Mon, 7 Aug 2017 22:17:13 +0100 Subject: [PATCH 32/49] fix: JSDoc, extra empty spaces and identation --- lib/connect-sqlite3.js | 192 ++++++++++++++++++----------------------- 1 file changed, 86 insertions(+), 106 deletions(-) diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index 2d7b0ab..b6d91a5 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -1,57 +1,50 @@ -/* -* Connect - SQLite3 -* Copyright(c) 2012 David Feinberg -* MIT Licensed -* forked from https://github.com/tnantoka/connect-sqlite -*/ - /** -* Module dependencies. -*/ + * Connect - SQLite3 + * Copyright(c) 2012 David Feinberg + * MIT Licensed + * forked from https://github.com/tnantoka/connect-sqlite + */ +/** + * Module dependencies. + */ var sqlite3 = require('sqlite3'), events = require('events'); /** -* One day in milliseconds. -*/ - + * @type {Integer} One day in milliseconds. + */ var oneDay = 86400000; /** -* Return the SQLiteStore extending connect's session Store. -* -* @param {object} connect -* @return {Function} -* @api public -*/ - + * Return the SQLiteStore extending connect's session Store. + * + * @param {object} connect + * @return {Function} + * @api public + */ module.exports = function(connect) { - /** - * Connect's Store. - */ - + * Connect's Store. + */ var Store = (connect.session) ? connect.session.Store : connect.Store; /** - * Remove expired sessions from database. - * @param {Object} store - * @api private - */ - + * Remove expired sessions from database. + * @param {Object} store + * @api private + */ function dbCleanup(store) { var now = new Date().getTime(); store.db.run('DELETE FROM ' + store.table + ' WHERE ? > expired', [now]); } /** - * Initialize SQLiteStore with the given options. - * - * @param {Object} options - * @api public - */ - + * Initialize SQLiteStore with the given options. + * + * @param {Object} options + * @api public + */ function SQLiteStore(options) { options = options || {}; Store.call(this, options); @@ -80,22 +73,20 @@ module.exports = function(connect) { } ); } - - /** - * Inherit from Store. - */ - SQLiteStore.prototype = Object.create(Store.prototype); - SQLiteStore.prototype.constructor = SQLiteStore; - /** - * Attempt to fetch session by the given sid. - * - * @param {String} sid - * @param {Function} fn - * @api public - */ + * Inherit from Store. + */ + SQLiteStore.prototype = Object.create(Store.prototype); + SQLiteStore.prototype.constructor = SQLiteStore; + /** + * Attempt to fetch session by the given sid. + * + * @param {String} sid + * @param {Function} fn + * @api public + */ SQLiteStore.prototype.get = function(sid, fn) { var now = new Date().getTime(); this.db.get('SELECT sess FROM ' + this.table + ' WHERE sid = ? AND ? <= expired', [sid, now], @@ -107,54 +98,48 @@ module.exports = function(connect) { ); }; + /** + * Commit the given `sess` object associated with the given `sid`. + * + * @param {String} sid + * @param {Session} sess + * @param {Function} fn + * @api public + */ + SQLiteStore.prototype.set = function(sid, sess, fn) { + try { + var maxAge = sess.cookie.maxAge; + var now = new Date().getTime(); + var expired = maxAge ? now + maxAge : now + oneDay; + sess = JSON.stringify(sess); - /** - * Commit the given `sess` object associated with the given `sid`. - * - * @param {String} sid - * @param {Session} sess - * @param {Function} fn - * @api public - */ - - SQLiteStore.prototype.set = function(sid, sess, fn) { - try { - var maxAge = sess.cookie.maxAge; - var now = new Date().getTime(); - var expired = maxAge ? now + maxAge : now + oneDay; - sess = JSON.stringify(sess); - - this.db.all('INSERT OR REPLACE INTO ' + this.table + ' VALUES (?, ?, ?)', - [sid, expired, sess], - function(err, rows) { - if (fn) fn.apply(this, arguments); + this.db.all('INSERT OR REPLACE INTO ' + this.table + ' VALUES (?, ?, ?)', + [sid, expired, sess], + function(err, rows) { + if (fn) fn.apply(this, arguments); + } + ); + } catch (e) { + if (fn) fn(e); } - ); - } catch (e) { - if (fn) fn(e); - } - }; - + }; /** - * Destroy the session associated with the given `sid`. - * - * @param {String} sid - * @api public - */ - + * Destroy the session associated with the given `sid`. + * + * @param {String} sid + * @api public + */ SQLiteStore.prototype.destroy = function(sid, fn) { this.db.run('DELETE FROM ' + this.table + ' WHERE sid = ?', [sid], fn); }; - /** - * Fetch number of sessions. - * - * @param {Function} fn - * @api public - */ - + * Fetch number of sessions. + * + * @param {Function} fn + * @api public + */ SQLiteStore.prototype.length = function(fn) { this.db.all('SELECT COUNT(*) AS count FROM ' + this.table + '', function(err, rows) { if (err) fn(err); @@ -162,30 +147,27 @@ module.exports = function(connect) { }); }; - /** - * Clear all sessions. - * - * @param {Function} fn - * @api public - */ - + * Clear all sessions. + * + * @param {Function} fn + * @api public + */ SQLiteStore.prototype.clear = function(fn) { this.db.exec('DELETE FROM ' + this.table + '', function(err) { if (err) fn(err); fn(null, true); }); }; - - + /** - * Touch the given session object associated with the given session ID. - * - * @param {string} sid - * @param {object} session - * @param {function} fn - * @public - */ + * Touch the given session object associated with the given session ID. + * + * @param {string} sid + * @param {object} session + * @param {function} fn + * @public + */ SQLiteStore.prototype.touch = function(sid, session, fn) { if (session && session.cookie && session.cookie.expires) { var now = new Date().getTime(); @@ -200,11 +182,9 @@ module.exports = function(connect) { } ); } else { - fn(null, true); - } + fn(null, true); + } } - return SQLiteStore; - }; From ca2b8a8adb4d74ce6c0c3041c506704b7c8851a1 Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Mon, 7 Aug 2017 19:13:28 -0700 Subject: [PATCH 33/49] version bump for PR #18 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ee349ac..6c4e92a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.9.9", + "version": "0.9.10", "author": "David Feinberg", "main": "lib/connect-sqlite3", "scripts": { From 2b13b60f4b34abf76998a6590095ac7724d26f04 Mon Sep 17 00:00:00 2001 From: Wout Mertens Date: Wed, 18 Apr 2018 16:51:26 +0200 Subject: [PATCH 34/49] add concurrentDb boolean to trigger WAL --- lib/connect-sqlite3.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index dafdcb6..6dc14ae 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -70,7 +70,7 @@ module.exports = function(connect) { this.client = new events.EventEmitter(); var self = this; - this.db.exec('PRAGMA journal_mode = wal; CREATE TABLE IF NOT EXISTS ' + this.table + ' (' + 'sid PRIMARY KEY, ' + 'expired, sess)', + this.db.exec((options.concurrentDb ? 'PRAGMA journal_mode = wal; ' : '') + 'CREATE TABLE IF NOT EXISTS ' + this.table + ' (' + 'sid PRIMARY KEY, ' + 'expired, sess)', function(err) { if (err) throw err; self.client.emit('connect'); From daf129a0f0a4c1b0e8166d9b8ece35e72a9e6c17 Mon Sep 17 00:00:00 2001 From: guilala Date: Fri, 27 Apr 2018 11:39:27 +0200 Subject: [PATCH 35/49] package: bump sqlite3 to ^4.0.0 --- package-lock.json | 821 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 +- 2 files changed, 823 insertions(+), 2 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..c4abc2e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,821 @@ +{ + "name": "connect-sqlite3", + "version": "0.9.11", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "commander": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", + "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", + "dev": true + }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + } + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "crc": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", + "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", + "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", + "dev": true + }, + "express-session": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz", + "integrity": "sha512-r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA==", + "dev": true, + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "crc": "3.4.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "on-headers": "~1.0.1", + "parseurl": "~1.3.2", + "uid-safe": "~2.1.5", + "utils-merge": "1.0.1" + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + } + }, + "glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "dev": true, + "requires": { + "inherits": "2", + "minimatch": "0.3" + } + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "jade": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", + "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", + "dev": true, + "requires": { + "commander": "0.6.1", + "mkdirp": "0.3.0" + }, + "dependencies": { + "commander": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", + "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", + "dev": true + }, + "mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", + "dev": true + } + } + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "dev": true, + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", + "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", + "dev": true, + "requires": { + "commander": "2.3.0", + "debug": "2.2.0", + "diff": "1.4.0", + "escape-string-regexp": "1.0.2", + "glob": "3.2.11", + "growl": "1.9.2", + "jade": "0.26.3", + "mkdirp": "0.5.1", + "supports-color": "1.2.0", + "to-iso-string": "0.0.2" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nan": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz", + "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=", + "dev": true + }, + "should": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/should/-/should-8.4.0.tgz", + "integrity": "sha1-XmCInT5kS73Tl6MM00+tKPz5C8A=", + "dev": true, + "requires": { + "should-equal": "0.8.0", + "should-format": "0.3.2", + "should-type": "0.2.0" + } + }, + "should-equal": { + "version": "0.8.0", + "resolved": "http://registry.npmjs.org/should-equal/-/should-equal-0.8.0.tgz", + "integrity": "sha1-o/BXMv9FusG3ukEvhAiFaBlkEpk=", + "dev": true, + "requires": { + "should-type": "0.2.0" + } + }, + "should-format": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-0.3.2.tgz", + "integrity": "sha1-pZgx4Bot3uFJkRvHFIvlyAMZ4f8=", + "dev": true, + "requires": { + "should-type": "0.2.0" + } + }, + "should-type": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-0.2.0.tgz", + "integrity": "sha1-ZwfvlVKdmJ3MCY/gdTqx+RNrt/Y=", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "sqlite3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.0.tgz", + "integrity": "sha512-6OlcAQNGaRSBLK1CuaRbKwlMFBb9DEhzmZyQP+fltNRF6XcIMpVIfXCBEcXPe1d4v9LnhkQUYkknDbA5JReqJg==", + "requires": { + "nan": "~2.9.2", + "node-pre-gyp": "~0.9.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "minipass": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.1.tgz", + "integrity": "sha512-u1aUllxPJUI07cOqzR7reGmQxmCqlH88uIIsf6XZFEWgw7gXKpJdR+5R9Y3KEDmWYkdIz9wXZs3C0jOPxejk/Q==", + "requires": { + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "needle": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", + "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.9.0.tgz", + "integrity": "sha1-vdTDr6ybGx6/8Kn/M2KFnrZ4G7g=", + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", + "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==" + }, + "npm-packlist": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", + "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "rc": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.6.tgz", + "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=", + "requires": { + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "readable-stream": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "requires": { + "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.0.3", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "tar": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.0.tgz", + "integrity": "sha512-gJlTiiErwo96K904FnoYWl+5+FBgS+FimU6GMh66XLdLa55al8+d4jeDfPoGwSNHdtWI5FJP6xurmVqhBuGJpQ==", + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.3", + "minipass": "^2.2.1", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" + } + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "supports-color": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", + "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", + "dev": true + }, + "to-iso-string": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", + "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=", + "dev": true + }, + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "dev": true, + "requires": { + "random-bytes": "~1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + } + } +} diff --git a/package.json b/package.json index 6c4e92a..3962640 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.9.10", + "version": "0.9.11", "author": "David Feinberg", "main": "lib/connect-sqlite3", "scripts": { "test": "mocha test/test.js" }, "dependencies": { - "sqlite3": "^3.1.1" + "sqlite3": "^4.0.0" }, "devDependencies": { "connect": ">=1.0.0", From 22c47ea04a5de9319e317c64395256ced36cedec Mon Sep 17 00:00:00 2001 From: guilala Date: Fri, 27 Apr 2018 13:36:22 +0200 Subject: [PATCH 36/49] Remove package-lock file --- package-lock.json | 821 ---------------------------------------------- 1 file changed, 821 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index c4abc2e..0000000 --- a/package-lock.json +++ /dev/null @@ -1,821 +0,0 @@ -{ - "name": "connect-sqlite3", - "version": "0.9.11", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "commander": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", - "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", - "dev": true - }, - "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", - "utils-merge": "1.0.1" - } - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "crc": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", - "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", - "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", - "dev": true - }, - "express-session": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz", - "integrity": "sha512-r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA==", - "dev": true, - "requires": { - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "crc": "3.4.4", - "debug": "2.6.9", - "depd": "~1.1.1", - "on-headers": "~1.0.1", - "parseurl": "~1.3.2", - "uid-safe": "~2.1.5", - "utils-merge": "1.0.1" - } - }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" - } - }, - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dev": true, - "requires": { - "inherits": "2", - "minimatch": "0.3" - } - }, - "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", - "dev": true - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "jade": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", - "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", - "dev": true, - "requires": { - "commander": "0.6.1", - "mkdirp": "0.3.0" - }, - "dependencies": { - "commander": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", - "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", - "dev": true - }, - "mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", - "dev": true - } - } - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true, - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "mocha": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", - "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", - "dev": true, - "requires": { - "commander": "2.3.0", - "debug": "2.2.0", - "diff": "1.4.0", - "escape-string-regexp": "1.0.2", - "glob": "3.2.11", - "growl": "1.9.2", - "jade": "0.26.3", - "mkdirp": "0.5.1", - "supports-color": "1.2.0", - "to-iso-string": "0.0.2" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "nan": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz", - "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw==" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", - "dev": true - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=", - "dev": true - }, - "should": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/should/-/should-8.4.0.tgz", - "integrity": "sha1-XmCInT5kS73Tl6MM00+tKPz5C8A=", - "dev": true, - "requires": { - "should-equal": "0.8.0", - "should-format": "0.3.2", - "should-type": "0.2.0" - } - }, - "should-equal": { - "version": "0.8.0", - "resolved": "http://registry.npmjs.org/should-equal/-/should-equal-0.8.0.tgz", - "integrity": "sha1-o/BXMv9FusG3ukEvhAiFaBlkEpk=", - "dev": true, - "requires": { - "should-type": "0.2.0" - } - }, - "should-format": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/should-format/-/should-format-0.3.2.tgz", - "integrity": "sha1-pZgx4Bot3uFJkRvHFIvlyAMZ4f8=", - "dev": true, - "requires": { - "should-type": "0.2.0" - } - }, - "should-type": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/should-type/-/should-type-0.2.0.tgz", - "integrity": "sha1-ZwfvlVKdmJ3MCY/gdTqx+RNrt/Y=", - "dev": true - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, - "sqlite3": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.0.tgz", - "integrity": "sha512-6OlcAQNGaRSBLK1CuaRbKwlMFBb9DEhzmZyQP+fltNRF6XcIMpVIfXCBEcXPe1d4v9LnhkQUYkknDbA5JReqJg==", - "requires": { - "nan": "~2.9.2", - "node-pre-gyp": "~0.9.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" - }, - "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" - }, - "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "minipass": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.1.tgz", - "integrity": "sha512-u1aUllxPJUI07cOqzR7reGmQxmCqlH88uIIsf6XZFEWgw7gXKpJdR+5R9Y3KEDmWYkdIz9wXZs3C0jOPxejk/Q==", - "requires": { - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", - "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "needle": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", - "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.9.0.tgz", - "integrity": "sha1-vdTDr6ybGx6/8Kn/M2KFnrZ4G7g=", - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", - "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==" - }, - "npm-packlist": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", - "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "rc": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.6.tgz", - "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=", - "requires": { - "deep-extend": "~0.4.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "requires": { - "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.0.3", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "tar": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.0.tgz", - "integrity": "sha512-gJlTiiErwo96K904FnoYWl+5+FBgS+FimU6GMh66XLdLa55al8+d4jeDfPoGwSNHdtWI5FJP6xurmVqhBuGJpQ==", - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.3", - "minipass": "^2.2.1", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "requires": { - "string-width": "^1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "yallist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" - } - } - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - }, - "supports-color": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", - "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", - "dev": true - }, - "to-iso-string": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", - "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=", - "dev": true - }, - "uid-safe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", - "dev": true, - "requires": { - "random-bytes": "~1.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - } - } -} From ccf5b3eac3b66bc69e93079ff1c07df0154862d4 Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Fri, 27 Apr 2018 08:52:11 -0700 Subject: [PATCH 37/49] remove legacy history file --- History.md | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 History.md diff --git a/History.md b/History.md deleted file mode 100644 index f435338..0000000 --- a/History.md +++ /dev/null @@ -1,17 +0,0 @@ -0.9.0 / 2012-09-11 -================== - - re-wrote unit tests with Mocha and Should.js - - added option param for db file name (seperate from table name) - - merged pull request from Nibbler999 (added support for returning undefined for unknown sessions) - - updated readme - -0.8.0 / 2012-09-10 -================== - - forked previous lib - - swapped out sqlite lib for node-sqlite3 - - made sure existing unit tests work - -0.0.1 / 2011-09-24 -================== - - * Publish From c251bc31ce728563d4270db1080d25a558cd861c Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Fri, 27 Apr 2018 08:55:53 -0700 Subject: [PATCH 38/49] add WAL mode option to Readme --- Readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Readme.md b/Readme.md index 76b56e8..fb80ec4 100644 --- a/Readme.md +++ b/Readme.md @@ -13,6 +13,7 @@ connect-sqlite3 is a SQLite3 session store modeled after the TJ's connect-redis - `table='sessions'` Database table name - `db='sessionsDB'` Database file name (defaults to table name) - `dir='.'` Directory to save '.db' file + - `concurrentDB='false'` Enables (WAL)[https://www.sqlite.org/wal.html] mode (defaults to false) ## Usage ```js From 19c6a0b17a8ccad345a4340a6704a3e46560c534 Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Fri, 27 Apr 2018 08:57:06 -0700 Subject: [PATCH 39/49] readme WAL mode link --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index fb80ec4..2254f3d 100644 --- a/Readme.md +++ b/Readme.md @@ -13,7 +13,7 @@ connect-sqlite3 is a SQLite3 session store modeled after the TJ's connect-redis - `table='sessions'` Database table name - `db='sessionsDB'` Database file name (defaults to table name) - `dir='.'` Directory to save '.db' file - - `concurrentDB='false'` Enables (WAL)[https://www.sqlite.org/wal.html] mode (defaults to false) + - `concurrentDB='false'` Enables [WAL](https://www.sqlite.org/wal.html) mode (defaults to false) ## Usage ```js From 2b924c96bdd9e0e18e29ddfcba9edbe5843c8a4d Mon Sep 17 00:00:00 2001 From: Akshaye Shenoi Date: Wed, 11 Jul 2018 14:46:52 +0530 Subject: [PATCH 40/49] Updated usage docs for express 4.x Express does not bundle middleware like `session` anymore. Use the express-session middleware instead to avoid errors. Error: Most middleware (like session) is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware. --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 2254f3d..0350fd1 100644 --- a/Readme.md +++ b/Readme.md @@ -40,7 +40,7 @@ connect-sqlite3 is a SQLite3 session store modeled after the TJ's connect-redis app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser()); - app.use(express.session({ + app.use(session({ store: new SQLiteStore, secret: 'your secret', cookie: { maxAge: 7 * 24 * 60 * 60 * 1000 } // 1 week From 1a569dc26699269dcce8f1dfa0c7b051ab732220 Mon Sep 17 00:00:00 2001 From: driverjb Date: Fri, 13 Aug 2021 16:07:04 -0400 Subject: [PATCH 41/49] updated to latest sqlite3 plugin --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 3962640..77cb37a 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.9.11", + "version": "0.9.12", "author": "David Feinberg", "main": "lib/connect-sqlite3", "scripts": { "test": "mocha test/test.js" }, "dependencies": { - "sqlite3": "^4.0.0" + "sqlite3": "^5.0.2" }, "devDependencies": { "connect": ">=1.0.0", From 3f402da50a4c43e7731bc2db8b9145061847b7d2 Mon Sep 17 00:00:00 2001 From: Joe Harvey <51208233+jdharvey-ibm@users.noreply.github.com> Date: Sun, 28 Nov 2021 23:03:52 -0500 Subject: [PATCH 42/49] Create LICENSE Add missing license file to match the license type specified in the package.json file. --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..859634b --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 David Feinberg + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From c1779b37f99f1585fdedf83a803ca242662d0aeb Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Mon, 29 Nov 2021 17:47:39 -0700 Subject: [PATCH 43/49] version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 77cb37a..100839c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.9.12", + "version": "0.9.13", "author": "David Feinberg", "main": "lib/connect-sqlite3", "scripts": { From f852f8391a45dd773878d50250c9db1ab1e7d8fd Mon Sep 17 00:00:00 2001 From: apkovy Date: Mon, 11 Mar 2024 10:41:53 +0100 Subject: [PATCH 44/49] new option createDirIfNotExists --- Readme.md | 1 + lib/connect-sqlite3.js | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 0350fd1..8e3290b 100644 --- a/Readme.md +++ b/Readme.md @@ -13,6 +13,7 @@ connect-sqlite3 is a SQLite3 session store modeled after the TJ's connect-redis - `table='sessions'` Database table name - `db='sessionsDB'` Database file name (defaults to table name) - `dir='.'` Directory to save '.db' file + - `createDirIfNotExists='false'` Directory 'options.dir' is created recursively if not exists - `concurrentDB='false'` Enables [WAL](https://www.sqlite.org/wal.html) mode (defaults to false) ## Usage diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index 17d2574..409d1ef 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -9,7 +9,8 @@ * Module dependencies. */ var sqlite3 = require('sqlite3'), - events = require('events'); + events = require('events'), + fs = require('fs'); /** * @type {Integer} One day in milliseconds. @@ -58,6 +59,17 @@ module.exports = function(connect) { } else { dbPath = (options.dir || '.') + '/' + this.db; } + + if (options.dir && options.createDirIfNotExists) { + try { + fs.mkdirSync(options.dir, + { + recursive: true + }); + } + catch { + } + } this.db = new sqlite3.Database(dbPath, options.mode); this.client = new events.EventEmitter(); From 263a5876550928dd31861b3f99ee634a03d4fca6 Mon Sep 17 00:00:00 2001 From: apkovy Date: Mon, 11 Mar 2024 10:46:44 +0100 Subject: [PATCH 45/49] readme --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 8e3290b..789482c 100644 --- a/Readme.md +++ b/Readme.md @@ -13,7 +13,7 @@ connect-sqlite3 is a SQLite3 session store modeled after the TJ's connect-redis - `table='sessions'` Database table name - `db='sessionsDB'` Database file name (defaults to table name) - `dir='.'` Directory to save '.db' file - - `createDirIfNotExists='false'` Directory 'options.dir' is created recursively if not exists + - `createDirIfNotExists='false'` Directory 'dir' is created recursively if not exists - `concurrentDB='false'` Enables [WAL](https://www.sqlite.org/wal.html) mode (defaults to false) ## Usage From 13ce02abde2a8a878411d76f9cd8ec29576860b5 Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Mon, 11 Mar 2024 07:57:36 -0700 Subject: [PATCH 46/49] version bump for create dir option --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 100839c..8c59283 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.9.13", + "version": "0.9.15", "author": "David Feinberg", "main": "lib/connect-sqlite3", "scripts": { From 095fe17cb4a39f7f566a481aedc0d06a5175e913 Mon Sep 17 00:00:00 2001 From: Xavi Date: Fri, 25 Apr 2025 11:40:47 -0500 Subject: [PATCH 47/49] Implemented SQLiteStore.prototype.all --- lib/connect-sqlite3.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index 409d1ef..9f21cb7 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -146,6 +146,19 @@ module.exports = function(connect) { this.db.run('DELETE FROM ' + this.table + ' WHERE sid = ?', [sid], fn); }; + /** + * Fetch all sessions. + * + * @param {Function} fn + * @api public + */ + SQLiteStore.prototype.all = function(fn) { + this.db.all('SELECT * FROM ' + this.table + '', function(err, rows) { + if (err) fn(err); + fn(null, rows.map((row) => JSON.parse(row.sess))); + }); + }; + /** * Fetch number of sessions. * From de797ae32bdaa9cfb6943b921996cc9f540aa553 Mon Sep 17 00:00:00 2001 From: David Feinberg Date: Sun, 27 Apr 2025 11:58:24 -0700 Subject: [PATCH 48/49] version bump for retrieve all --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8c59283..d865ef1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "connect-sqlite3", "description": "SQLite3 session store for Connect", - "version": "0.9.15", + "version": "0.9.16", "author": "David Feinberg", "main": "lib/connect-sqlite3", "scripts": { From 2707af50870a31d760bb2c2d3f88d178577227cd Mon Sep 17 00:00:00 2001 From: Ewald Benes Date: Thu, 12 Jun 2025 11:55:03 +0200 Subject: [PATCH 49/49] pass the db connection object into the store object for more flexibilty This design allows the library to remain flexible about database connection management in your application. Also delete the shared cache tests since are not meaningful anymore, furthermore its use is discouraged https://www.sqlite.org/sharedcache.html#use_of_shared_cache_is_discouraged --- Readme.md | 12 +- lib/connect-sqlite3.js | 26 +- package-lock.json | 2257 ++++++++++++++++++++++++++++++++++++++++ package.json | 10 +- test/test.js | 48 +- 5 files changed, 2278 insertions(+), 75 deletions(-) create mode 100644 package-lock.json diff --git a/Readme.md b/Readme.md index 789482c..44e87a9 100644 --- a/Readme.md +++ b/Readme.md @@ -11,19 +11,20 @@ connect-sqlite3 is a SQLite3 session store modeled after the TJ's connect-redis ## Options - `table='sessions'` Database table name - - `db='sessionsDB'` Database file name (defaults to table name) - - `dir='.'` Directory to save '.db' file - - `createDirIfNotExists='false'` Directory 'dir' is created recursively if not exists + - `db=dbConnection` SQLite database connection object - `concurrentDB='false'` Enables [WAL](https://www.sqlite.org/wal.html) mode (defaults to false) +> **Note:** The `options` parameter requires an already initialized database connection instead of a file name. This design allows the library to remain flexible about database connection management in your application. + ## Usage ```js var connect = require('connect'), + dbConnection = new sqlite3.Database(':memory:'), SQLiteStore = require('connect-sqlite3')(connect); connect.createServer( connect.cookieParser(), - connect.session({ store: new SQLiteStore, secret: 'your secret' }) + connect.session({ store: new SQLiteStore({ db: dbConnection }), secret: 'your secret' }) ); ``` with express @@ -35,6 +36,7 @@ connect-sqlite3 is a SQLite3 session store modeled after the TJ's connect-redis var session = require('express-session'); var SQLiteStore = require('connect-sqlite3')(session); + var dbConnection = new sqlite3.Database('./sessions.db') app.configure(function() { app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); @@ -42,7 +44,7 @@ connect-sqlite3 is a SQLite3 session store modeled after the TJ's connect-redis app.use(express.methodOverride()); app.use(express.cookieParser()); app.use(session({ - store: new SQLiteStore, + store: new SQLiteStore({ db: dbConnection }), secret: 'your secret', cookie: { maxAge: 7 * 24 * 60 * 60 * 1000 } // 1 week })); diff --git a/lib/connect-sqlite3.js b/lib/connect-sqlite3.js index 9f21cb7..69a9240 100644 --- a/lib/connect-sqlite3.js +++ b/lib/connect-sqlite3.js @@ -8,9 +8,7 @@ /** * Module dependencies. */ -var sqlite3 = require('sqlite3'), - events = require('events'), - fs = require('fs'); +var events = require('events'); /** * @type {Integer} One day in milliseconds. @@ -51,27 +49,7 @@ module.exports = function(connect) { Store.call(this, options); this.table = options.table || 'sessions'; - this.db = options.db || this.table; - var dbPath; - - if (this.db.indexOf(':memory:') > -1 || this.db.indexOf('?mode=memory') > -1) { - dbPath = this.db; - } else { - dbPath = (options.dir || '.') + '/' + this.db; - } - - if (options.dir && options.createDirIfNotExists) { - try { - fs.mkdirSync(options.dir, - { - recursive: true - }); - } - catch { - } - } - - this.db = new sqlite3.Database(dbPath, options.mode); + this.db = options.db; this.client = new events.EventEmitter(); var self = this; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..2247044 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2257 @@ +{ + "name": "connect-sqlite3", + "version": "0.9.16", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "connect-sqlite3", + "version": "0.9.16", + "devDependencies": { + "connect": ">=1.0.0", + "express-session": "^1.18.1", + "mocha": "^2.3.4", + "should": "^8.2.0", + "sqlite3": "^5.0.0" + }, + "engines": { + "node": ">=0.4.x" + }, + "peerDependencies": { + "express-session": "^1.18.1", + "sqlite3": "^5.0.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/commander": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", + "integrity": "sha512-CD452fnk0jQyk3NfnK+KkR/hUPoHt5pVaKHogtyyv3N0U4QfAal9W0/rXLOg/vVZgQKa7jdtXypKs1YAip11uQ==", + "dev": true, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha512-VzVc42hMZbYU9Sx/ltb7KYuQ6pqAw+cbFWVy4XKdkuEL2CFaRLGEnISPs7YdzaUGpi+CpIqvRmu7hPQ4T7EQ5w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", + "integrity": "sha512-cQpUid7bdTUnFin8S7BnNdOk+/eDqQmKgCANSyd/jAhrKEvxUvr9VQ8XZzXiOtest8NLfk3FSBZzwvemZNQ6Vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/express-session": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.1.tgz", + "integrity": "sha512-a5mtTqEaZvBCL9A9aqkrtfz+3SMDhOVUnjafjo+s7A9Txkq+SVX2DLvSp1Zrv4uCXa3lMSK3viWnh9Gg07PBUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cookie": "0.7.2", + "cookie-signature": "1.0.7", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "license": "MIT" + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha512-hVb0zwEZwC1FXSKRPFTeOtN7AArJcJlI6ULGLtrstaswKNlrTJqAA+1lYlSUop4vjA423xlBzqfVS3iWGlqJ+g==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "BSD", + "dependencies": { + "inherits": "2", + "minimatch": "0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha512-RTBwDHhNuOx4F0hqzItc/siXCasGfC4DeWcBamclWd+6jWtBaeB/SGbMkGf0eiQoW7ib8JpvOgnUsmgMHI3Mfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/jade": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", + "integrity": "sha512-mkk3vzUHFjzKjpCXeu+IjXeZD+QOTjUUdubgmHtHTDwvAO2ZTkMTTVrapts5CWz3JvJryh/4KWZpjeZrCepZ3A==", + "deprecated": "Jade has been renamed to pug, please install the latest version of pug instead of jade", + "dev": true, + "dependencies": { + "commander": "0.6.1", + "mkdirp": "0.3.0" + }, + "bin": { + "jade": "bin/jade" + } + }, + "node_modules/jade/node_modules/commander": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", + "integrity": "sha512-0fLycpl1UMTGX257hRsu/arL/cUbcvQM4zMKwvLvzXtfdezIV4yotPS2dYtknF+NmEfWSoCEF6+hj9XLm/6hEw==", + "dev": true, + "engines": { + "node": ">= 0.4.x" + } + }, + "node_modules/jade/node_modules/mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "license": "MIT/X11", + "engines": { + "node": "*" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha512-WpibWJ60c3AgAz8a2iYErDrcT2C7OmKnsWhIcHOjkUHFjkXncJhtLxNSqUmxRxRunpb5I8Vprd7aNSd2NtksJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha512-WFX1jI1AaxNTZVOHLBVazwTWKaQjoykSzCBNXB72vDTCzopQGtyP91tKdFK5cv1+qMwPyiTu1HqUriqplI8pcA==", + "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", + "dev": true, + "license": "MIT", + "dependencies": { + "lru-cache": "2", + "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/mocha": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", + "integrity": "sha512-jNt2iEk9FPmZLzL+sm4FNyOIDYXf2wUU6L4Cc8OIKK/kzgMHKPi4YhTZqG4bW4kQVdIv6wutDybRhXfdnujA1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "2.3.0", + "debug": "2.2.0", + "diff": "1.4.0", + "escape-string-regexp": "1.0.2", + "glob": "3.2.11", + "growl": "1.9.2", + "jade": "0.26.3", + "mkdirp": "0.5.1", + "supports-color": "1.2.0", + "to-iso-string": "0.0.2" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 0.8.x" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "0.7.1" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==", + "dev": true + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-abi": { + "version": "3.75.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.75.0.tgz", + "integrity": "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prebuild-install/node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/should": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/should/-/should-8.4.0.tgz", + "integrity": "sha512-esuzfKgt0DqCeFI9x9rGpb6MCQiZHR/2cAoLEaxAGUdReVbRla3BuLVVraaQLgBMXCoziRmaGxm/ohLhriCv9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "should-equal": "0.8.0", + "should-format": "0.3.2", + "should-type": "0.2.0" + } + }, + "node_modules/should-equal": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-0.8.0.tgz", + "integrity": "sha512-rv701O2TmiTLfehYKFbOJ4OJpLBRlePXLvE8vfcxs3DwuYej67lUa/A7z6RBOWeSdDx2ThIih1h8G2YSkiulCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "should-type": "0.2.0" + } + }, + "node_modules/should-format": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-0.3.2.tgz", + "integrity": "sha512-B4siojq9d+OOLEaRXvuq6bfq65pHIu6PqMkJ4g2df2o3O6XVdtNZ7yWe/snLgtd1rmZneDULCzTA6tMmec5y/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "should-type": "0.2.0" + } + }, + "node_modules/should-type": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-0.2.0.tgz", + "integrity": "sha512-ixbc1p6gw4W29fp4MifFynWVQvuqfuZjib+y1tWezbjinoXu0eab/rXxLDP6drfZXlz6lZBwuzHJrs/BjLCLuQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.5.tgz", + "integrity": "sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socks-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/sqlite3": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", + "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", + "dev": true, + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "bindings": "^1.5.0", + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.1", + "tar": "^6.1.11" + }, + "optionalDependencies": { + "node-gyp": "8.x" + }, + "peerDependencies": { + "node-gyp": "8.x" + }, + "peerDependenciesMeta": { + "node-gyp": { + "optional": true + } + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", + "integrity": "sha512-mS5xsnjTh5b7f2DM6bch6lR582UCOTphzINlZnDsfpIRrwI6r58rb6YSSGsdexkm8qw2bBVO2ID2fnJOTuLiPA==", + "dev": true, + "license": "MIT", + "bin": { + "supports-color": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", + "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "license": "ISC" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/to-iso-string": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", + "integrity": "sha512-oeHLgfWA7d0CPQa6h0+i5DAJZISz5un0d5SHPkw+Untclcvzv9T+AC3CvGXlZJdOlIbxbTfyyzlqCXc5hjpXYg==", + "deprecated": "to-iso-string has been deprecated, use @segment/to-iso-string instead.", + "dev": true, + "license": "MIT" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "dev": true, + "license": "MIT", + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/package.json b/package.json index d865ef1..b5caaa1 100644 --- a/package.json +++ b/package.json @@ -7,14 +7,16 @@ "scripts": { "test": "mocha test/test.js" }, - "dependencies": { - "sqlite3": "^5.0.2" + "peerDependencies": { + "sqlite3": "^5.0.0", + "express-session": "^1.0.0" }, "devDependencies": { "connect": ">=1.0.0", - "express-session": "^1.13.0", + "express-session": "^1.18.1", "mocha": "^2.3.4", - "should": "^8.2.0" + "should": "^8.2.0", + "sqlite3": "^5.1.7" }, "engines": { "node": ">=0.4.x" diff --git a/test/test.js b/test/test.js index 540aae8..769d739 100644 --- a/test/test.js +++ b/test/test.js @@ -1,15 +1,19 @@ var should = require('should'), session = require('express-session'), + sqlite3 = require('sqlite3'), util = require('util'), SQLiteStore = require('../lib/connect-sqlite3.js')(session); describe('connect-sqlite3 basic test suite', function() { + var dbConnection; + before(function() { - this.memStore = new SQLiteStore({db: ':memory:', dir: 'dbs'}); + dbConnection = new sqlite3.Database(':memory:'); + this.memStore = new SQLiteStore({db: dbConnection}); }); after(function() { - //this.memStore.close(); + dbConnection.close(); }); it('it should save a new session record', function(done) { @@ -80,45 +84,5 @@ describe('connect-sqlite3 basic test suite', function() { }); }); }); - - - -}); - - -describe('connect-sqlite3 shared cache', function() { - it("should retrieve in one cached session what's stored in another.", function(done) { - var cwd = process.cwd(); - var memStore = new SQLiteStore({db: 'file::memory:?cache=shared', mode: 0x20046}); - process.chdir('..'); // Ensure we aren't opening a shared disk file - var memStore2 = new SQLiteStore({db: 'file::memory:?cache=shared', mode: 0x20046}); - - memStore.set('1111222233334444', {cookie: {maxAge:2011}, name: 'sample name'}, function(err, rows) { - process.chdir(cwd); // Restore dir - should.not.exist(err, 'set() returned an error'); - rows.should.be.empty; - memStore2.get('1111222233334444', function(err, session) { - should.not.exist(err, 'get() returned an error'); - should.exist(session); - (session).should.eql({cookie: {maxAge:2011}, name: 'sample name'}); - done(); - }); - }); - }); - - it("should not retrieve in one uncached session what's stored in another.", function(done) { - var memStore = new SQLiteStore({db: ':memory:'}); - var memStore2 = new SQLiteStore({db: ':memory:'}); - - memStore.set('1111222233334444', {cookie: {maxAge:2011}, name: 'sample name'}, function(err, rows) { - should.not.exist(err, 'set() returned an error'); - rows.should.be.empty; - memStore2.get('1111222233334444', function(err, session) { - should.not.exist(err, 'get() returned an error'); - should.not.exist(session); - done(); - }); - }); - }); });