diff --git a/apps/appUtils.js b/apps/appUtils.js
index 349cf71..9616477 100755
--- a/apps/appUtils.js
+++ b/apps/appUtils.js
@@ -1,5 +1,5 @@
/*
- depends on child_process
+ depends on child_process
*/
'use strict'
@@ -8,31 +8,31 @@ var spawn = require('child_process').spawn;
// Export
module.exports.spawn = function( cmd, opts, cwd ){
- if( !cmd ){
- throw new Error('Spawner fucked up');
- }
- if( !opts ){
- opts = [];
- }else if( !(opts instanceof Array) ){
- opts = [opts];
- }
- Logger.log('[UTILS] Spawning', cmd, 'with options', opts);
- var child = spawn(cmd, opts, {
- detached: true,
- stdio: [ 'ignore', 'ignore', 'ignore' ],
- cwd: cwd?cwd:process.cwd()
- });
- child.unref();
+ if( !cmd ){
+ throw new Error('Spawner fucked up');
+ }
+ if( !opts ){
+ opts = [];
+ }else if( !(opts instanceof Array) ){
+ opts = [opts];
+ }
+ Logger.log('[UTILS] Spawning', cmd, 'with options', opts);
+ var child = spawn(cmd, opts, {
+ detached: true,
+ stdio: [ 'ignore', 'ignore', 'ignore' ],
+ cwd: cwd?cwd:process.cwd()
+ });
+ child.unref();
}
module.exports.strSearch = function( str, query ){
-
- if( typeof str !== 'string' || typeof query !== 'string' ){
- return -1;
- }
- str = str.toLowerCase();
- query = query.toLowerCase();
- return str.indexOf(query);
+
+ if( typeof str !== 'string' || typeof query !== 'string' ){
+ return -1;
+ }
+ str = str.toLowerCase();
+ query = query.toLowerCase();
+ return str.indexOf(query);
}
@@ -40,36 +40,36 @@ module.exports.strSearch = function( str, query ){
// out of it, if no match is found null is returned
module.exports.cleanQuery = function( regexArr, query ){
- //Logger.log('[APP_UTILS]', 'cleanQuery', 'regexArr', regexArr, 'query', query)
- var ret = null;
- if( regexArr instanceof Array ){
-
- regexArr.forEach(function( reg ){
-
- if( ret ) return;
- if( reg instanceof RegExp ){
- ret = reg.exec( query );
- }
-
- });
+ //Logger.log('[APP_UTILS]', 'cleanQuery', 'regexArr', regexArr, 'query', query)
+ var ret = null;
+ if( regexArr instanceof Array ){
+
+ regexArr.forEach(function( reg ){
+
+ if( ret ) return;
+ if( reg instanceof RegExp ){
+ ret = reg.exec( query );
+ }
+
+ });
- if( ret && ret[1] !== undefined ){
-
- ret = ret[1].trim();
-
- }
- }
+ if( ret && ret[1] !== undefined ){
+
+ ret = ret[1].trim();
+
+ }
+ }
- Logger.log('[APP_UTILS]', 'cleanQuery', 'result', ret)
+ Logger.log('[APP_UTILS]', 'cleanQuery', 'result', ret)
- return ret;
+ return ret;
}
module.exports.wrapRegex = function( reg ){
- reg || (reg = '');
- if( reg instanceof RegExp ){
- return reg.source.replace(/\^|\(\.\*\)/g, '');
- }
- // Todo: Non regexp case
- return '';
+ reg || (reg = '');
+ if( reg instanceof RegExp ){
+ return reg.source.replace(/\^|\(\.\*\)/g, '');
+ }
+ // Todo: Non regexp case
+ return '';
}
diff --git a/apps/index.js b/apps/index.js
index 00ec3d7..c22d46b 100755
--- a/apps/index.js
+++ b/apps/index.js
@@ -1,115 +1,107 @@
/*
- depends on lodash, electron-router, systemApps, nativeApps
- globals upath, db, async
- globalizes app{ utils, URL_REGEX }
+ depends on lodash, electron-router, systemApps, nativeApps
+ globals upath, db, async
+ globalizes app{ utils, URL_REGEX }
*/
'use strict';
-let _ = require('lodash')
-let _systemApps = require( global.upath.join( __dirname, 'system', 'index' ) )
-let _nativeApps = require( global.upath.join( __dirname, 'native', 'index' ) )
+const { uniqBy } = require('lodash')
+const _systemApps = require( global.upath.join( __dirname, 'system', 'index' ) )
+const _nativeApps = require( global.upath.join( __dirname, 'native', 'index' ) )
+const BrowserHistory = require( global.upath.join( __dirname, 'system', 'BrowserHistory' ) )
// Apps namespace
global.app = {
- utils: require('./appUtils'),
- URL_REGEX: new RegExp(/^(?:http(?:s)?\:\/\/(?:www\.)?)([^ ]+)$/gi)
+ utils: require('./appUtils'),
+ URL_REGEX: new RegExp(/^(?:http(?:s)?\:\/\/(?:www\.)?)([^ ]+)$/gi)
}
-let _searchBrowserHistory = function( query, callback ){
-
- global.db.query('browsers', query, ( err, results ) => {
-
- if( err ){
- return callback( err );
- }
- callback( null, _.uniqBy(results, ( a ) => a.title ).map(( result ) => {
- // Deep copy
- let aux = _systemApps.getInternalApp('browserHistory')
- // Come in the form:
- // url: ...
- // title: ...
- // browser: ...
- aux.name = result.title
- aux.text = result.url
- return aux
- }))
-
- })
+function _searchBrowserHistory( query, callback ){
+
+ global.db.query('browsers', query, ( err, results ) => {
-}
-
-let _lateAppend = function( err, results ){
+ if( err ){
+ return callback( err );
+ }
- if( !err && results && results.length){
- // Send data back to UI
- //Logger.log('[APP LOADER]', 'Late Append', results.length, results);
- router.send('UI::AppendToView', results);
- }else{
- Logger.log('[APP LOADER]', 'Late Append failed', err);
- }
+ const ret = uniqBy(results, ( a ) => a.title )
+ .map(( result ) => new BrowserHistory({
+ name: result.title, text: result.url
+ }).getWrapper())
+ callback( null, ret )
+ })
}
-let _registerEvents = function( callback ){
-
- router.on('launchApp', ( data ) => {
- //Logger.log('[APP LOADER]', data.app);
- // TODO => Type check should not be against undefined but a type
- if( '_native_' === data.app.type ){
- Logger.log('[APP LOADER] for spawner', data.app, data.query);
- global.app.utils.spawn( data.app.exec );
- }else{
- _systemApps.launchApp( data.app.exec, data.app, data.query );
- }
- });
-
- router.get('query', ( req, res ) => {
- Logger.log('[APP LOADER]', 'query', req.params[0])
- let query = req.params[0];
- let matches = [];
-
- if( query !== '' && query !== ' '){
-
- // Internal apps: Preferences, Quit, Url
- matches = matches.concat( _systemApps.searchApp( query, _lateAppend ) );
- // Native apps: User installed applications
- matches = matches.concat( _nativeApps.searchApp( query, _lateAppend ) );
- // Broswser History files
- _searchBrowserHistory( query, _lateAppend)
-
- }
- // If nothing was found, just insert netSearch option
- if( matches.length < 2 ){
- matches.push( _systemApps.getInternalApp('netSearch') );
- }
- Logger.log('[APP LOADER]', 'Sending back', matches.length)
- res.json( null, matches );
-
- matches = null;
-
- })
-
- callback();
+function _lateAppend( err, results ){
+
+ if( !err && results && results.length){
+ // Send data back to UI
+ //Logger.log('[APP LOADER]', 'Late Append', results.length, results);
+ router.send('UI::AppendToView', results);
+ }else{
+ Logger.log('[APP LOADER]', 'Late Append failed', err);
+ }
+}
+function _registerEvents( callback ){
+
+ router.on('launchApp', ( data ) => {
+ //Logger.log('[APP LOADER]', data.app);
+ // TODO => Type check should not be against undefined but a type
+ if( '_native_' === data.app.type ){
+ Logger.log('[APP LOADER] for spawner', data.app, data.query);
+ global.app.utils.spawn( data.app.exec );
+ }else{
+ _systemApps.launchApp( data.app.exec, data.app, data.query );
+ }
+ });
+
+ router.get('query', ( req, res ) => {
+ Logger.log('[APP LOADER]', 'query', req.params[0])
+ let query = req.params[0];
+ let matches = [];
+
+ if( query !== '' && query !== ' '){
+
+ // Internal apps: Preferences, Quit, Url
+ matches = matches.concat( _systemApps.searchApp( query, _lateAppend ) );
+ // Native apps: User installed applications
+ matches = matches.concat( _nativeApps.searchApp( query, _lateAppend ) );
+ // Broswser History files
+ _searchBrowserHistory( query, _lateAppend)
+
+ }
+ // If nothing was found, just insert netSearch option
+ if( matches.length < 2 ){
+ matches.push( _systemApps.getInternalApp('netSearch') );
+ }
+ Logger.log('[APP LOADER]', 'Sending back', matches.length)
+ res.json( null, matches );
+
+ matches = null;
+
+ })
+
+ callback();
}
-let _start = function( callback ){
+function _start( callback ){
- global.async.parallel([
-
- _systemApps.start,
- _nativeApps.start,
- _registerEvents
+ global.async.parallel([
- ], ( err ) => {
+ _systemApps.start,
+ _nativeApps.start,
+ _registerEvents
- Logger.log('[APP LOADER] Done starting modules', (err?err:''));
- callback( err );
+ ], ( err ) => {
- });
+ Logger.log('[APP LOADER] Done starting modules', (err?err:''));
+ callback( err );
+ });
}
module.exports = {
- start: _start
+ start: _start
}
diff --git a/apps/native/index.js b/apps/native/index.js
index 0645835..d1dd257 100755
--- a/apps/native/index.js
+++ b/apps/native/index.js
@@ -20,7 +20,7 @@ const GTK_ICON_LOOKUP_FORCE_SIZE = 16;
const GTK_ICON_LOOKUP_USE_BUILTIN = 4;
const GTK_ICON_LOOKUP_NO_SVG = 1;
-var processApp = function( dstDir, app, callback ){
+function _processApp( dstDir, app, callback ){
if( app.icon !== '__unknown__' ){
// Check svg
@@ -68,7 +68,7 @@ var processApp = function( dstDir, app, callback ){
}
}
-var dumpApps = function( file, apps, callback ){
+function _dumpApps( file, apps, callback ){
Logger.log(`[NATIVE APPS] Found -> ${apps.length} apps`)
Logger.log(`[NATIVE APPS] Saving to -> ${file}`)
fs.writeFile( file, JSON.stringify(apps, null, 4), ( err ) => {
@@ -80,7 +80,7 @@ var dumpApps = function( file, apps, callback ){
})
}
-var cacheFiles = function( cmd, callback ){
+function _cacheFiles( cmd, callback ){
var args = [ appsFile ];
if( cmd.trim() !== '' ){
@@ -114,17 +114,17 @@ var cacheFiles = function( cmd, callback ){
if( global.progOpts.indexOf('--noSvg') !== -1 ){
- dumpApps( appsFile, apps, callback );
+ _dumpApps( appsFile, apps, callback );
}else{
global.async.map(apps, ( app, callback ) => {
- processApp( dstDir, app, callback );
+ _processApp( dstDir, app, callback );
}, function( err, apps ){
//Logger.log('done processing', 'changes', changes, arguments);
- dumpApps( appsFile, apps, callback );
+ _dumpApps( appsFile, apps, callback );
})
}
@@ -134,14 +134,14 @@ var cacheFiles = function( cmd, callback ){
})
}
-var cacheAndUpdate = function( firstTime, callback ){
+function _cacheAndUpdate( firstTime, callback ){
// If its not first time, apps are yet on cache, callback => list => update cache => update db
// Else, list => cache => callback => save db
if( !firstTime ) callback()
// List apps
- cacheFiles( global.settings.get('theme'), ( err, apps ) => {
+ _cacheFiles( global.settings.get('theme'), ( err, apps ) => {
if( err ){
Logger.log('[NATIVE APPS] Error listing apps', err)
if( firstTime ) callback( err )
@@ -196,7 +196,7 @@ var cacheAndUpdate = function( firstTime, callback ){
})
}
-var _start = function( callback ){
+function _start( callback ){
global.db.getMainDB().find({ type: '_native_' }, ( err, docs ) => {
//Logger.log('[NATIVE APPS]', 'from DB', err, docs);
@@ -210,17 +210,16 @@ var _start = function( callback ){
}
// callback( null )
- cacheAndUpdate( !(!!docs.length), callback )
+ _cacheAndUpdate( !(!!docs.length), callback )
})
}
-var _searchApp = function( query, callback ){
+function _searchApp( query, callback ){
return nativeApps.filter(( app ) => {
return ( global.app.utils.strSearch( app.name, query ) !== -1 );
})
-
}
module.exports = {
diff --git a/apps/system/AppBase.js b/apps/system/AppBase.js
new file mode 100644
index 0000000..dcb939f
--- /dev/null
+++ b/apps/system/AppBase.js
@@ -0,0 +1,119 @@
+'use strict'
+
+const properties = ['name', 'text', 'exec', 'icon', 'type']
+
+class AppBase {
+ constructor(options, overLoadOptions) {
+ if( !this._checkProperties(options) ){
+ throw new Error('Bad app instantiation', options)
+ }
+ this.wrapper = {}
+ this._mergeOptions(options)
+ this._mergeOptions(overLoadOptions)
+ this.regex = [/^(\?)$/]
+ }
+
+ _observe() {
+ if( this.observer && this.observer.dispose ){
+ // just one observer
+ this.observer.dispose()
+ }
+ return global.settings.watch(`shortcuts.${this.wrapper.exec}.regex1`, this._addRegex.bind(this))
+ }
+
+ _addRegex(newValue, oldValue) {
+ if( !this.regex instanceof Array ){
+ this.regex = [this.regex]
+ }
+ let idx = this.regex.indexOf(oldValue)
+ if( idx !== -1 ){
+ this.regex.splice(idx, 1)
+ }
+ this.regex.push(newValue)
+ }
+
+ _checkProperties(options) {
+ let i = 0
+ for(; i < properties.length && options.hasOwnProperty(properties[i]); i++);
+ return (i <= properties.length)
+ }
+
+ _cloneWrapper(wrap) {
+ let ret = {}
+ for(let prop in wrap){
+ ret[prop] = wrap[prop]
+ }
+ return ret
+ }
+
+ _mergeOptions(options) {
+ if( options instanceof Object ){
+ for(let prop in options){
+ this.wrapper[prop] = options[prop]
+ }
+ }
+ }
+
+ mergeOptions(options) {
+ this._mergeOptions(options)
+ // just in case...
+ this.observer = this._observe()
+ }
+
+ setup() {
+ let r = global.settings.get(`shortcuts.${this.wrapper.exec}.regex1`)
+ if( r !== undefined && r !== '_unset_' ){
+ this._addRegex(r, null)
+ }
+ this.observer = this._observe()
+ }
+
+ getWrapper() {
+ return this._cloneWrapper(this.wrapper)
+ }
+
+ exec(ex, query) {
+ throw new Error('Uninplemented')
+ }
+
+ match(query) {
+ let ret = null
+ // Search by regex
+ let regs = this.regex
+ if( regs instanceof RegExp ){
+ regs = [regs]
+ }
+ if( regs ){
+ const allRegex = regs.filter(r => r instanceof RegExp)
+
+ if( allRegex.length ){
+ for(let i = 0; i < allRegex.length && !ret; i++){
+ ret = allRegex[i].exec(query)
+ }
+ }
+ }
+ // Search by app name
+ if( !ret ){
+ ret = global.app.utils.strSearch(this.wrapper.exec, query) !== -1
+ }
+ return ret
+ }
+
+ getName() {
+ return this.wrapper.name
+ }
+
+ shouldReload() {
+ return false
+ }
+
+ preLoad(cb) {
+ return (typeof cb === 'function' ? cb : () => {})()
+ }
+
+ postLoad(cb) {
+ return (typeof cb === 'function' ? cb : () => {})()
+ }
+}
+
+module.exports = AppBase
\ No newline at end of file
diff --git a/apps/system/BrowserHistory.js b/apps/system/BrowserHistory.js
new file mode 100644
index 0000000..49326bf
--- /dev/null
+++ b/apps/system/BrowserHistory.js
@@ -0,0 +1,37 @@
+'use strict'
+
+const AppBase = require(global.upath.joinSafe(__dirname, 'AppBase'))
+
+const defaultWrapper = {
+ name: '',
+ text: '',
+ exec: 'browserHistory',
+ icon: 'link.png',
+ type: '_internal_'
+}
+
+class BrowserHistory extends AppBase {
+ constructor(options) {
+ super(defaultWrapper, options)
+ // super.setup()
+ }
+
+ exec( ex, query ) {
+ // Unwrap object, link is on subtext
+ let q = exec.text
+ let reg = /((http|ftp|https)\:\/\/)(www\.)?|(www\.)([^\.]*)/i
+ if( !reg.test( q ) ){
+ // Lack starting www....
+ q = 'http://' + q;
+ }
+
+ global.app.utils.spawn( 'xdg-open', [q] )
+ }
+
+ match(query) {
+ // Never match, searched apart
+ return null
+ }
+}
+
+module.exports = BrowserHistory
\ No newline at end of file
diff --git a/apps/system/Calculator.js b/apps/system/Calculator.js
new file mode 100644
index 0000000..054c676
--- /dev/null
+++ b/apps/system/Calculator.js
@@ -0,0 +1,64 @@
+'use strict';
+
+const { clipboard } = require('electron')
+const AppBase = require(global.upath.joinSafe(__dirname, 'AppBase'))
+
+const _queryRegex = /^calc:?([-+\.\/*\(\)\s\d])+$/
+const _numberRegex = /^([-+\.\/*\(\)\s\d])+$/
+const _defaultText = 'Fast math calculations.'
+
+const defaultWrapper = {
+ name: 'Calculator',
+ text: _defaultText,
+ exec: 'calculator',
+ icon: 'calculator.png',
+ type: '_internal_'
+}
+
+class Calculator extends AppBase {
+ constructor(options) {
+ super(defaultWrapper, options)
+ this.regex = [_queryRegex, _numberRegex]
+ super.setup()
+ this.currentCalc = {
+ leftSide: null,
+ rightSide: null
+ }
+ }
+
+ getWrapper() {
+ let text = _defaultText
+ if( this.currentCalc.leftSide && this.currentCalc.rightSide ){
+ text = `${this.currentCalc.leftSide} = ${this.currentCalc.rightSide} | enter -> clipboard`
+ }
+ global.Logger.log('[CALC] Modifying text', text)
+ this.wrapper.text = text
+ return super.getWrapper()
+ }
+
+ exec( ex, query ) {
+ global.Logger.log('[CALC] Copying calculations to clipboard:', query)
+ clipboard.writeText(query)
+ }
+
+ match( query ) {
+ const anyMatch = super.match(query)
+ if( anyMatch ){
+ // horrible hack
+ global.Logger.log('[CALC] Evaluating... ', anyMatch)
+ let res = null
+ try{
+ res = eval(anyMatch[0])
+ }catch(e){
+ res = null
+ }
+ if( res ){
+ this.currentCalc.leftSide = anyMatch[0]
+ this.currentCalc.rightSide = res
+ }
+ }
+ return !!(anyMatch)
+ }
+}
+
+module.exports = Calculator
diff --git a/apps/system/NetGo.js b/apps/system/NetGo.js
new file mode 100644
index 0000000..2d474b0
--- /dev/null
+++ b/apps/system/NetGo.js
@@ -0,0 +1,32 @@
+'use strict';
+
+const AppBase = require(global.upath.joinSafe(__dirname, 'AppBase'))
+
+const matchRegex = /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]+)?(\/|\/([\da-z\.-]+)?(\?[\da-z\.-_]+\=([\da-z\.-_]+)?(\&[\da-z\.-_]+\=([\da-z\.-_]+)?)?))?$/i
+const http = /((http|ftp|https)\:\/\/)/i
+const defaultWrapper = {
+ name: 'Open Url',
+ text: 'Open given Url',
+ exec: 'netGo',
+ icon: 'openurl.png',
+ type: '_internal_'
+}
+
+class NetGo extends AppBase {
+ constructor(options) {
+ super(defaultWrapper, options)
+ this.regex = [matchRegex]
+ super.setup()
+ }
+
+ exec( ex, query ){
+ if( !httpReg.test( query ) ){
+ // Lack starting http(s)... xdg-open needs it to work
+ query = 'https://' + query
+ }
+
+ global.app.utils.spawn( 'xdg-open', [query] )
+ }
+}
+
+module.exports = NetGo
\ No newline at end of file
diff --git a/apps/system/NetSearch.js b/apps/system/NetSearch.js
new file mode 100644
index 0000000..a7d0394
--- /dev/null
+++ b/apps/system/NetSearch.js
@@ -0,0 +1,25 @@
+'use strict';
+
+const AppBase = require(global.upath.joinSafe(__dirname, 'AppBase'))
+
+const defaultWrapper = {
+ name: 'Google Search',
+ text: 'Search whatever on the net',
+ exec: 'netSearch',
+ icon: 'google.png',
+ type: '_internal_'
+}
+
+class NetSearch extends AppBase {
+ constructor(options) {
+ super(defaultWrapper, options)
+ super.setup()
+ }
+
+ exec( ex, query ){
+ query = 'https://www.google.com/search?q=' + query
+ global.app.utils.spawn( 'xdg-open', [query] )
+ }
+}
+
+module.exports = NetSearch
diff --git a/apps/system/Preferences.js b/apps/system/Preferences.js
new file mode 100644
index 0000000..c4a6406
--- /dev/null
+++ b/apps/system/Preferences.js
@@ -0,0 +1,144 @@
+'use strict'
+
+const AppBase = require(global.upath.joinSafe(__dirname, 'AppBase'))
+
+const ipc = require('electron').ipcMain
+const BrowserWindow = require('electron').BrowserWindow
+const Router = require('electron-router')
+const view = global.upath.joinSafe(global.DIRS.INTERNAL_ROOT, 'ui/html/settings.html')
+
+const defaultWrapper = {
+ name: 'Preferences',
+ text: 'Launch Preferences Tab',
+ exec: 'preferences',
+ icon: 'setting.png',
+ type: '_internal_'
+}
+
+const windowSettings = {
+ width: 800,
+ height: 600,
+ center: true,
+ resizable: true,
+ darkTheme: true,
+ frame: true,
+ show: true,
+ title: 'The Mutant - Preferences'
+}
+
+class Preferences extends AppBase {
+ constructor(options) {
+ super(defaultWrapper, options)
+ this.regex = [/preferences/i]
+ super.setup()
+ this.router = Router('PREFERENCES')
+ this.window = null
+ }
+
+ _registerEvents() {
+ this.router.get('settings', ( req, res ) => {
+ this._fetchApps( req, res )
+ })
+
+ this.router.post('settings', ( req, res ) => {
+ // ToDo
+ global.Logger.log('[PREFERENCES APP] settings save', req)
+ res.json(null, 'OK')
+ })
+
+ this.router.post('changeAppShortcut', ( req, res ) => {
+ global.Logger.log('[PREFERENCES APP]', 'changeAppShortcut', req.params)
+ if( !req.params.length ){
+ global.Logger.log('[PREFERENCES APP]', 'changeAppShortcut', 1)
+ return res.json( 'NO_OK' )
+ }
+ this._changeAppShortcut( req, res )
+ })
+
+ this.router.post('changeAppLocation', ( req, res ) => {
+ // ToDo
+ global.Logger.log('[PREFERENCES APP]', 'changeAppLocation', req.params)
+ res.json(null, 'OK')
+ })
+ }
+
+ _fetchApps( req, res ) {
+ this.router.routes.get('getAllApps', ( err, data ) => {
+ if( err ){
+ return res.json( err )
+ }
+ res.json(null, data.filter(a => {
+ return a.type !== '_system_' && a.type !== '_native_'
+ }).map(a => {
+ a.location = a.data
+ return a
+ }))
+ })
+ }
+
+ _changeAppShortcut( req, res ) {
+ let toReload = []
+ global.async.each( req.params, ( _app, cb ) => {
+
+ let reg = ''
+ // Permit user to unset shortcut (ie setting it to '')
+ if( !_app.scut ){
+ _app.scut = null
+ reg = new RegExp('(?!)')
+ }else{
+ // Replace possible bad regex
+ _app.scut = _app.scut.replace(/\(\.\*\)/gi, '')
+ _app.scut = _app.scut.trim()
+ reg = new RegExp( `^${_app.scut} (.*)`, 'i' )
+ }
+
+ this._updateAppRegex( _app, reg, ( err ) => {
+ global.Logger.log('[PREFERENCES APP]', 'updateRegex', 3, 'saved err', err, `shortcuts.${_app.exec}`, { type: _app.type, regex1: reg })
+ if( !err ){
+ global.settings.set(`shortcuts.${_app.exec}`, { type: _app.type, regex1: reg })
+ toReload.push( _app.exec )
+ }
+ cb( err )
+ })
+ }, ( err, result ) => {
+ global.Logger.log('[PREFERENCES APP] changeAppShortcut end', 'err', err, 'result', result)
+ if( err ){
+ res.json( err )
+ }else{
+ res.json( null, 'OK' )
+ }
+ this.router.send('reloadApplications', toReload)
+ })
+ }
+
+ _updateAppRegex( app, reg, callback ) {
+ // query main db for saving new shortcut
+ let db = global.db.getMainDB()
+ db.findOne({ type: app.type, exec: app.exec }, ( err, doc ) => {
+ global.Logger.log('[PREFERENCES APP]', 'query', app, reg)
+ global.Logger.log('[PREFERENCES APP]', 'query', app.type, app.exec, 'retrieve', doc, doc.regex1)
+ if( err ){
+ return callback( err )
+ }
+ global.Logger.log('[PREFERENCES APP]', 'updateRegex', 1, 'reg pre', reg, doc.regex1)
+ doc.regex1 = reg
+ global.Logger.log('[PREFERENCES APP]', 'updateRegex', 2, 'reg post', reg, doc.regex1)
+ db.save( doc, callback )
+ })
+ }
+
+ exec( ex, query ) {
+ // Launch Preferences window
+ global.Logger.log('[PREFERENCES APP] Launch')
+
+ this.window = new BrowserWindow(windowSettings)
+ this.window.loadURL('file://' + view)
+ this._registerEvents()
+ this.window.on('close', function( evt ){
+ global.Logger.log('[PREFERENCES APP] Closing preferences')
+ // router unregister
+ })
+ }
+}
+
+module.exports = Preferences
diff --git a/apps/system/Quit.js b/apps/system/Quit.js
new file mode 100644
index 0000000..e45159b
--- /dev/null
+++ b/apps/system/Quit.js
@@ -0,0 +1,26 @@
+'use strict';
+
+const router = require('electron-router')('QUIT_APP')
+const AppBase = require(global.upath.joinSafe(__dirname, 'AppBase'))
+
+const defaultWrapper = {
+ name: 'Quit Mutant',
+ text: 'Quit the App',
+ exec: 'quit',
+ icon: 'quit.png',
+ type: '_internal_'
+}
+
+class Quit extends AppBase {
+ constructor(options) {
+ super(defaultWrapper, options)
+ this.regex = [ /QUIT/i ]
+ super.setup()
+ }
+
+ exec( ex, query ){
+ router.send('quit')
+ }
+}
+
+module.exports = Quit
diff --git a/apps/system/Refresh.js b/apps/system/Refresh.js
new file mode 100644
index 0000000..57159cb
--- /dev/null
+++ b/apps/system/Refresh.js
@@ -0,0 +1,26 @@
+'use strict';
+
+let router = require('electron-router')('REFRESH_APP')
+const AppBase = require(global.upath.joinSafe(__dirname, 'AppBase'))
+
+const defaultWrapper = {
+ name: 'Refresh Mutant',
+ text: 'Refresh Apps index, useful when a new application has been installed and you want it to be catched by Mutant',
+ exec: 'refresh',
+ icon: 'refresh.png',
+ type: '_internal_'
+}
+
+class Refresh extends AppBase {
+ constructor(options) {
+ super(defaultWrapper, options)
+ this.regex = [/REFRESH/i]
+ super.setup()
+ }
+
+ exec( ex, query ){
+ router.send('refreshApps')
+ }
+}
+
+module.exports = Refresh
diff --git a/apps/system/browserHistoryApp.js b/apps/system/browserHistoryApp.js
deleted file mode 100755
index 76e033a..0000000
--- a/apps/system/browserHistoryApp.js
+++ /dev/null
@@ -1,40 +0,0 @@
-'use strict'
-
-var _browserLaunch = function( exec, query ){
- // Unwrap object, link is on subtext
- query = exec.text;
- var reg = /((http|ftp|https)\:\/\/)(www\.)?|(www\.)([^\.]*)/i;
- if( !reg.test( query ) ){
- // Lack starting www....
- query = 'http://' + query;
- }
-
- global.app.utils.spawn( 'xdg-open', [query] );
-
-}
-
-var exp = {
- fn: _browserLaunch,
- wrapper: {
- name: '',
- text: '',
- exec: 'browserHistory',
- icon: 'link.png',
- type: '_internal_'
- }
-}
-
-module.exports = {
- getRegex: function(){
- return (exp.regex)?exp.regex:null;
- },
- getUserRegex: function(){
- return (exp.regex && exp.regex.length > 1)?exp.regex[1]:null;
- },
- getStdRegex: function(){
- return (exp.regex && exp.regex.length)?exp.regex[0]:null;
- },
- getWrapper: function(){
- return exp;
- }
-}
diff --git a/apps/system/calculatorApp.js b/apps/system/calculatorApp.js
deleted file mode 100644
index a9fb30a..0000000
--- a/apps/system/calculatorApp.js
+++ /dev/null
@@ -1,80 +0,0 @@
-'use strict';
-
-var { clipboard } = require('electron')
-var _numberRegex = /^([-+\.\/*\d\(\)\s]+)$/
-// make a regex out of the name for searching strings
-var _queryRegex = /^calc ([-+\.\/*\d\(\)\s]+)$/i
-var _fn = function( exec, query ){
-
- Logger.log('[CALC] Copying calculations to clipboard:', query)
- clipboard.writeText(query)
-}
-
-var _defaultText = 'Fast math calculations.'
-var _currentCalc = {
- leftSide: null,
- rightSide: null
-}
-
-var exp = {
- fn: _fn,
- wrapper: {
- name: 'Calculator',
- text: _defaultText,
- exec: 'calculator',
- icon: 'calculator.png',
- type: '_internal_'
- },
- regex: [ _queryRegex, _numberRegex ]
-}
-
-if( global.settings.get('shortcuts.calculator') ){
- // Avoid bad regex
- var r = global.settings.get('shortcuts.calculator').regex1
- if( r !== '_unset_' ){
- // Set default regex (index 0) and name search (index 1),
- // setting to null avoids default behaviour,
- // which goes to the name of the application
- exp.regex = [ _queryRegex, _numberRegex, r ]
- }
-}
-
-module.exports = {
- getWrapper: function(){
- var text = _defaultText
- if( _currentCalc.leftSide && _currentCalc.rightSide ){
- text = `${_currentCalc.leftSide} = ${_currentCalc.rightSide} | enter -> clipboard`
- }
- Logger.log('[CALC] Modifying text', text)
- exp.wrapper.text = text
- return exp
- },
- getStdRegex: function(){
- return (exp.regex && exp.regex.length) ? exp.regex[0] : null
- },
- testQuery: function( query ){
- var allRegex = exp.regex.filter(r => r instanceof RegExp)
- var anyMatch = null
-
- if( allRegex.length ){
- for(var i = 0; i < allRegex.length && !anyMatch; i++){
- anyMatch = allRegex[i].exec(query)
- }
- if( anyMatch ){
- // horrible hack
- Logger.log('[CALC] Evaluating... ', anyMatch)
- var res = null
- try{
- res = eval(anyMatch[1])
- }catch(e){
- res = null
- }
- if( res ){
- _currentCalc.leftSide = anyMatch[1]
- _currentCalc.rightSide = res
- }
- }
- }
- return anyMatch !== null
- }
-}
diff --git a/apps/system/index.js b/apps/system/index.js
index 8bdb1f4..a83570a 100755
--- a/apps/system/index.js
+++ b/apps/system/index.js
@@ -1,215 +1,156 @@
'use strict';
-let router = require('electron-router')('SYSTEMS_APPS')
-// Apps index
-let _appIndex = require( upath.joinSafe(__dirname, './index.json') );
+const router = require('electron-router')('SYSTEMS_APPS')
+const requireNoCache = require('require-no-cache')
// Real applications
-let _internalApps = {};
-// Regex for each application
-let APP_NAMES = [];
+let _internalApps = {}
// *************** Util ***************
-let _searchApp = function( query ){
+function _searchApp( query ){
- let matches = [];
- if( !APP_NAMES.length ){
- _loadApplications();
+ let matches = []
+ if( !Object.keys(_internalApps).length ){
+ _loadApplications()
}
- // For each application,
- // search by name,
- // search by regex
- // As name regex almost always mathces
- // Net search does not get append,
- // better approach, let each app match or not
- // or, at least return its own name regex,
- // based on if it needs text append or is just a launchable
- // Currently: As an app may process input text or not, meaning
- // that it may accept input text, let it decide with its own regex
- // by now may not be very useful, in the future may serve for flags
- APP_NAMES.forEach(function( name, idx ){
- //Logger.log('_searchApp', Q);
- // search by name
- let reg = _internalApps[ name ].getRegex?_internalApps[ name ].getRegex():null;
- if(
- (global.app.utils.strSearch( name, query ) !== -1) ||
- ((reg !== null) && reg instanceof RegExp && reg.test( query )) ||
- (_internalApps[ name ].testQuery && _internalApps[ name ].testQuery( query ))
- ){
- matches.push( _internalApps[ name ].getWrapper().wrapper );
+ for(let appName in _internalApps){
+ let app = _internalApps[appName]
+ if( app.match(query) ){
+ matches.push(app.getWrapper())
}
-
- })
- return matches;
-
+ }
+ return matches
}
-// Wrapper for deep copy, returns a new allocated object
-// avoiding overwrittings, call exceptionally
-let _getInternalApp = function( app ){
+function _getInternalApp( app ){
- let ret = {};
- if( _appIndex.hasOwnProperty( app ) ){
- let wrapper = _internalApps[ app ].getWrapper().wrapper;
- for(let i in wrapper){
- ret[i] = wrapper[ i ];
- }
+ let ret = {}
+ if( _internalApps[ app ] !== undefined ){
+ ret = _internalApps[app].getWrapper()
}
- return ret;
-
+ return ret
}
-let _reloadApplication = function( app ){
+function _reloadApplication( app ){
- Logger.log('[LOADER] Reloading application "' + app + '"');
- //, global.settings.get('shortcuts'), _appIndex);
+ global.Logger.log('[LOADER] Reloading application "' + app + '"');
// Reload index, just in case...
- // require.cache['./index.json'] = undefined;
- _appIndex = require( upath.joinSafe( __dirname, './index.json') );
+ const _appIndex = requireNoCache( upath.joinSafe( __dirname, 'index.json') )
if( _appIndex.hasOwnProperty( app ) ){
- // Invalidate cache to ensure it's required again
- require.cache[require.resolve(_appIndex[ app ])] = undefined;
-
- // Avoid duplicates on regex:
- // Find regex
- // Splice that slot
- let idx = APP_NAMES.indexOf( app );
- if( undefined !== idx && 0 <= idx && APP_NAMES.length > idx ){
- APP_NAMES.splice( idx, 1 );
- }
- _loadApplication( app );
+ _loadApplication( app )
}else{
- Logger.log('[LOADER] Unknown application "' + app + '"');
+ global.Logger.log('[LOADER] Unknown application "' + app + '"')
}
-
}
+
// ************************************
// *************** Main ***************
// API:
-// Every application must expose at least
-// a getWrapper returning the wrapper and
-// function to call upon execution
-// Additionally, it can expose:
-// - shouldReload: Called before everything else, if it returns true, we follow default behaviour
-// preLoad - getRegex - getWrapper - postLoad, else, we skip this and just get the Wrapper
-// - preLoad [ async, receive a callback ]: Called before assignments, useful for initialization (DB...)
-// - getRegex: Called to get the Regex used to match against queries
-// - postLoad [ async, receive a callback ]: Called after assignment, letiables setup, reload?
-// - testQuery: Called on matching, lets the app choose whether to match or not given query
-let _loadApplication = function( mod, callback ){
-
- callback || ( callback = ()=>{} );
- Logger.log('[LOADER] Loading application "' + mod + '"', upath.joinSafe(__dirname, _appIndex[ mod ]) );
+// Every application must expose:
+// - getWrapper : returns the wrapper
+// - exec : to call
+// - shouldReload: if it loads async or not
+// - preLoad : async preLoad call
+// - postLoad : async postLoad call
+function _loadApplication( mod, callback ){
+ callback || ( callback = ()=>{} )
+
+ const _appIndex = requireNoCache( upath.joinSafe( __dirname, './index.json') )
+ global.Logger.log('[LOADER] Loading application "' + mod + '"', global.upath.joinSafe(__dirname, _appIndex[ mod ]) )
+
try{
// Load each module
- let _app = require( upath.joinSafe( __dirname, _appIndex[ mod ] ) );
+ const _appClass = requireNoCache( global.upath.joinSafe( __dirname, _appIndex[ mod ] ) )
+ const _app = new _appClass()
+ _internalApps[ mod ] = _app
+ if( !_app.shouldReload() ){
+ return callback()
+ }
global.async.waterfall([
-
- function( callback ){
- if( !_app.shouldReload || _app.shouldReload() ){
- if( _app.preLoad ){
- return _app.preLoad( callback );
- }
- }
- callback( null );
- },
- function( callback ){
-
- if( _app.getStdRegex() ){
- APP_NAMES.push( mod );
- }
- _internalApps[ mod ] = _app;
- callback( null );
- },
- function( callback ){
- if( !_internalApps[ mod ].shouldReload || _internalApps[ mod ].shouldReload() ){
- if( _internalApps[ mod ].postLoad ){
- return _internalApps[ mod ].postLoad( callback );
- }
- }
- callback( null );
- }
-
- ], function( err ){
+ _app.preLoad.bind(_app),
+ _app.postLoad.bind(_app)
+ ], ( err ) => {
if( err ){
- Logger.log('[LOADER] ERROR Loading application "' + mod + '"', err);
+ global.Logger.log('[LOADER] ERROR Loading application "' + mod + '"', err)
}
- callback( err );
+ callback( err )
})
-
}catch(e){
- Logger.log('[LOADER] ERROR Failed loading application "' + mod + '"', e);
- callback( e );
+ global.Logger.log('[LOADER] ERROR Failed loading application "' + mod + '"', e)
+ callback( e )
}
-
}
-let _loadApplications = function(){
+function _loadApplications(){
// Reload index
- let _appIndex = require( upath.joinSafe(__dirname, './index.json') );
+ const _appIndex = requireNoCache( global.upath.joinSafe(__dirname, './index.json') )
// Load applications
for( let mod in _appIndex ){
- _loadApplication( mod, function(){} );
+ _loadApplication( mod, function(){} )
}
-
}
-let _launchApp = function( cmd, exec, query ){
+function _launchApp( cmd, exec, query ){
if( _internalApps[ cmd ] !== undefined ){
- _internalApps[ cmd ].getWrapper().fn( exec, query );
+ _internalApps[ cmd ].exec( exec, query )
}else{
- Logger.log('[LOADER] LaunchApp unknown application "' + cmd + '"');
+ global.Logger.log('[LOADER] LaunchApp unknown application "' + cmd + '"')
}
-
}
-let _isDefaultRegex = function( reg ){
- return ( (new RegExp('(?!)')).toString() === reg.toString() || (new RegExp().toString()) === reg.toString() );
+function _isDefaultRegex( reg ){
+
+ return ( (new RegExp('(?!)')).toString() === reg.toString() || (new RegExp().toString()) === reg.toString() )
}
-let _getApps = function( callback ){
+function _getApps( callback ){
- let i = 0;
+ let i = 0
global.db.getMainDB().find({})
.sort({ type: '_system_' })
.map((app) => {
- app.id = i++;
- app.scut = _isDefaultRegex( app.regex1 ) ? '_unset_' : global.app.utils.wrapRegex( app.regex1 );
+ app.id = i++
+ app.scut = _isDefaultRegex( app.regex1 ) ? '_unset_' : global.app.utils.wrapRegex( app.regex1 )
//Logger.log('_getApps', 'map', app);
- return app;
+ return app
})
- .exec( callback );
-
+ .exec( callback )
}
// ************************************
// ************* Interface ************
-router.on('newAppShortcut', _reloadApplication);
-router.on('reloadApplication', _reloadApplication);
-router.get('getAllApps', function( req, res ){
+router.on('newAppShortcut', _reloadApplication)
+router.on('reloadApplication', _reloadApplication)
+router.on('reloadApplications', ( apps ) => {
+ if( apps instanceof Array ){
+ for(let app of apps){
+ _reloadApplication(app)
+ }
+ }
+})
+router.get('getAllApps', ( req, res ) => {
_getApps(( err, data ) => {
//Logger.log('[APP LOADER]', 'getApps', err, data);
- if( err ) res.json( err );
- else res.json( null, data );
+ if( err ) res.json( err )
+ else res.json( null, data )
})
-});
+})
// ************************************
-let _start = function( callback ){
+function _start( callback ){
// Locate applications
// Load index (cache)
// TODO => Better setup DB??
- let _appIndex = require( upath.joinSafe(__dirname, './index.json') );
- Logger.log('[SYSTEM APPS] Loading modules...');
+ const _appIndex = requireNoCache( global.upath.joinSafe(__dirname, './index.json') )
+ global.Logger.log('[SYSTEM APPS] Loading modules...')
// Load applications
- global.async.each( Object.keys(_appIndex), _loadApplication, callback );
-
+ global.async.each( Object.keys(_appIndex), _loadApplication, callback )
}
module.exports = {
diff --git a/apps/system/index.json b/apps/system/index.json
index de2a9e4..006cb19 100755
--- a/apps/system/index.json
+++ b/apps/system/index.json
@@ -1,15 +1,15 @@
{
- "preference": "./preferenceApp",
- "netGo": "./netGoApp",
- "netSearch": "./netSearchApp",
- "browserHistory": "./browserHistoryApp",
- "quit": "./quitApp",
- "refresh": "./refreshApp",
- "calculator": "./calculatorApp",
- "webSearch": "./webSearchApp/webSearchApp",
- "bitbucketSearch": "./webSearchApp/bitbucketSearch",
- "githubSearch": "./webSearchApp/githubSearch",
- "wikiSearch": "./webSearchApp/wikiSearch",
- "youtubeSearch": "./webSearchApp/youtubeSearch",
- "aurSearch": "./webSearchApp/aurSearch"
+ "webSearch": "./webSearchApp/WebSearch",
+ "netGo": "./NetGo",
+ "netSearch": "./NetSearch",
+ "browserHistory": "./BrowserHistory",
+ "quit": "./Quit",
+ "refresh": "./Refresh",
+ "calculator": "./Calculator",
+ "preferences": "./Preferences",
+ "githubSearch": "webSearchApp/githubSearch",
+ "wikiSearch": "webSearchApp/wikiSearch",
+ "youtubeSearch": "webSearchApp/youtubeSearch",
+ "bitbucketSearch": "webSearchApp/bitbucketSearch",
+ "aurSearch": "webSearchApp/aurSearch"
}
\ No newline at end of file
diff --git a/apps/system/netGoApp.js b/apps/system/netGoApp.js
deleted file mode 100755
index 5bbca8c..0000000
--- a/apps/system/netGoApp.js
+++ /dev/null
@@ -1,42 +0,0 @@
-'use strict';
-
-var _netGo = function( exec, query ){
-
- var http = /((http|ftp|https)\:\/\/)/i
- if( !http.test( query ) ){
- // Lack starting http(s)... xdg-open needs it to work
- query = 'https://' + query;
- }
-
- global.app.utils.spawn( 'xdg-open', [query] );
-
-}
-
-var exp = {
- fn: _netGo,
- wrapper: {
- name: 'Open Url',
- text: 'Open given Url',
- exec: 'netGo',
- icon: 'openurl.png',
- type: '_internal_'
- },
- regex: [
- /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]+)?(\/|\/([\da-z\.-]+)?(\?[\da-z\.-_]+\=([\da-z\.-_]+)?(\&[\da-z\.-_]+\=([\da-z\.-_]+)?)?))?$/i
- ]
-}
-
-module.exports = {
- getRegex: function(){
- return (exp.regex)?exp.regex[0]:null;
- },
- getUserRegex: function(){
- return (exp.regex && exp.regex.length > 1)?exp.regex[1]:null;
- },
- getStdRegex: function(){
- return (exp.regex && exp.regex.length)?exp.regex[0]:null;
- },
- getWrapper: function(){
- return exp;
- }
-}
\ No newline at end of file
diff --git a/apps/system/netSearchApp.js b/apps/system/netSearchApp.js
deleted file mode 100755
index 21183bc..0000000
--- a/apps/system/netSearchApp.js
+++ /dev/null
@@ -1,34 +0,0 @@
-'use strict';
-
-var _netSearch = function( exec, query ){
-
- query = 'https://www.google.com/search?q=' + query;
- global.app.utils.spawn( 'xdg-open', [query] );
-
-}
-
-var exp = {
- fn: _netSearch,
- wrapper: {
- name: 'Google Search',
- text: 'Search whatever on the net',
- exec: 'netSearch',
- icon: 'google.png',
- type: '_internal_'
- }
-}
-
-module.exports = {
- getRegex: function(){
- return (exp.regex)?exp.regex:null;
- },
- getUserRegex: function(){
- return (exp.regex && exp.regex.length > 1)?exp.regex[1]:null;
- },
- getStdRegex: function(){
- return (exp.regex && exp.regex.length)?exp.regex[0]:null;
- },
- getWrapper: function(){
- return exp;
- }
-}
diff --git a/apps/system/preferenceApp.js b/apps/system/preferenceApp.js
deleted file mode 100755
index cb8d949..0000000
--- a/apps/system/preferenceApp.js
+++ /dev/null
@@ -1,138 +0,0 @@
-'use strict';
-
-let ipc = require('electron').ipcMain;
-let BrowserWindow = require('electron').BrowserWindow;
-
-let _launchPreferences = function(){
- // Launch Preferences window
- Logger.log('[PREFERENCE APP] Launch');
-
- let applications = [];
-
- let settingsWindow = new BrowserWindow({
- width: 800,
- height: 600,
- center: true,
- resizable: true,
- darkTheme: true,
- frame: true,
- show: true,
- title: 'The Mutant - Preferences'
- });
-
- settingsWindow.loadURL('file://' + global.upath.join( global.DIRS.INTERNAL_ROOT, 'ui/html/settings.html' ) );
-
- let router = require('electron-router')('PREFERENCE')
-
- router.get('settings', function( req, res ){
- if( applications.length ){
- return res.json( null, applications );
- }
- router.routes.get('getAllApps', function( err, data ){
- if( err ){
- return res.json( err );
- }
- res.json(null, data.filter(a => {
- return a.type !== '_system_' && a.type !== '_native_'
- }).map(a => {
- a.location = a.data;
- return a;
- }))
- })
- })
-
- router.post('settings', function( req, res ){
- Logger.log('[PREFERENCE APP] settings save', req);
- res.json(null, 'OK');
- })
- router.post('changeAppShortcut', function( req, res ){
- Logger.log('[PREFERENCE APP]', 'changeAppShortcut', req.params);
- if( !req.params.length ){
-
- Logger.log('[PREFERENCE APP]', 'changeAppShortcut', 1);
- return res.json( 'NO_OK' );
-
- }
-
- global.async.each( req.params, ( _app, cb ) => {
-
- let reg = ''
- // Permit user to unset shortcut (ie setting it to '')
- if( !_app.scut ){
- _app.scut = null
- reg = new RegExp('(?!)');
- }else{
- // Replace possible bad regex
- _app.scut = _app.scut.replace(/\(\.\*\)/gi, '');
- _app.scut = _app.scut.trim();
- reg = new RegExp( `^${_app.scut} (.*)`, 'i' );
- }
- // query main db for saving new shortcut
- let db = global.db.getMainDB();
- db.findOne({ type: _app.type, exec: _app.exec }, ( err, doc ) => {
- Logger.log('[PREFERENCE APP]', 'query', _app.type, _app.exec, 'retrieve', doc, doc.regex1);
- if( err ){
- cb( err );
- }else{
- Logger.log('[PREFERENCE APP]', 'updateRegex', 1, 'reg pre', reg, doc.regex1);
- doc.regex1 = reg
- Logger.log('[PREFERENCE APP]', 'updateRegex', 2, 'reg post', reg, doc.regex1);
- db.save( doc, ( err ) => {
- Logger.log('[PREFERENCE APP]', 'updateRegex', 3, 'saved', err, `shortcuts.${_app.exec}`, { type: _app.type, regex1: reg });
- if( !err ){
- global.settings.set(`shortcuts.${_app.exec}`, { type: _app.type, regex1: reg });
- router.send('reloadApplication', _app.exec);
- }
- cb( err );
- })
- }
- })
-
- // Response the result of each save
- }, ( err, result ) => {
- Logger.log('[PREFERENCE APP] changeAppShortcut end', 'err', err, 'result', result)
- if( err ) res.json( err )
- else res.json( null, 'OK' )
- })
-
- })
- router.post('changeAppLocation', function( req, res ){
- Logger.log('[PREFERENCE APP]', 'changeAppLocation', req.params);
- })
-
- settingsWindow.on('close', function( evt ){
- // nullify
- Logger.log('[PREFERENCE APP] Closing preferences');
- // ipc.removeListener( 'prefsReady', _send );
- // ipc.removeListener( 'shortcutChange', _sendToBack );
- //settingsWindow = _send = _prepare = null;
- })
-
-}
-
-let exp = {
- fn: _launchPreferences,
- wrapper: {
- name: 'Preferences',
- text: 'Launch Preferences Tab',
- exec: 'preference',
- icon: 'setting.png',
- type: '_internal_'
- },
- regex: [ /preference/i, 'preference' ]
-}
-
-module.exports = {
- getRegex: function(){
- return (exp.regex)?exp.regex:null;
- },
- getUserRegex: function(){
- return (exp.regex && exp.regex.length > 1)?exp.regex[1]:null;
- },
- getStdRegex: function(){
- return (exp.regex && exp.regex.length)?exp.regex[0]:null;
- },
- getWrapper: function(){
- return exp;
- }
-}
diff --git a/apps/system/quitApp.js b/apps/system/quitApp.js
deleted file mode 100755
index 3683db7..0000000
--- a/apps/system/quitApp.js
+++ /dev/null
@@ -1,39 +0,0 @@
-'use strict';
-
-let router = require('electron-router')('QUIT_APP')
-
-let exp = {
- fn: router.send.bind( router, 'quit' ),
- wrapper: {
- name: 'Quit Mutant',
- text: 'Quit the App',
- exec: 'quit',
- icon: 'quit.png',
- type: '_internal_'
- },
- regex: [ /QUIT/i, 'quit' ]
-}
-
-if( global.settings.get('shortcuts.Quit') ){
-
- // Set default regex (index 0) and name search (index 1),
- // setting to null avoids default behaviour,
- // which goes to the name of the application
- exp.regex.splice(0, 1, global.settings.get('shortcuts.Quit'));
-
-}
-
-module.exports = {
- getRegex: function(){
- return (exp.regex)?exp.regex:null;
- },
- getUserRegex: function(){
- return (exp.regex && exp.regex.length > 1)?exp.regex[1]:null;
- },
- getStdRegex: function(){
- return (exp.regex && exp.regex.length)?exp.regex[0]:null;
- },
- getWrapper: function(){
- return exp;
- }
-}
diff --git a/apps/system/refreshApp.js b/apps/system/refreshApp.js
deleted file mode 100755
index 1589afd..0000000
--- a/apps/system/refreshApp.js
+++ /dev/null
@@ -1,42 +0,0 @@
-'use strict';
-
-let router = require('electron-router')('REFRESH_APP')
-
-let exp = {
- fn: router.send.bind( router, 'refreshApps' ),
- wrapper: {
- name: 'Refresh Mutant',
- text: 'Refresh Apps index, useful when a new application has been installed and you want it to be catched by Mutant',
- exec: 'refresh',
- icon: 'refresh.png',
- type: '_internal_'
- },
- regex: [
- /REFRESH/i, 'refresh'
- ]
-
-}
-
-if( global.settings.get('shortcuts.RefreshApps') ){
-
- // Set default regex (index 0) and name search (index 1),
- // setting to null avoids default behaviour,
- // which goes to the name of the application
- exp.regex.splice(0, 1, global.settings.get('shortcuts.RefreshApps'));
-
-}
-
-module.exports = {
- getRegex: function(){
- return (exp.regex)?exp.regex:null;
- },
- getUserRegex: function(){
- return (exp.regex && exp.regex.length > 1)?exp.regex[1]:null;
- },
- getStdRegex: function(){
- return (exp.regex && exp.regex.length)?exp.regex[0]:null;
- },
- getWrapper: function(){
- return exp;
- }
-}
diff --git a/apps/system/webSearchApp/WebSearch.js b/apps/system/webSearchApp/WebSearch.js
new file mode 100644
index 0000000..f73e14d
--- /dev/null
+++ b/apps/system/webSearchApp/WebSearch.js
@@ -0,0 +1,233 @@
+'use strict'
+
+const router = require('electron-router')('WEB_SEARCH')
+const { flatten } = require('lodash')
+const { exists, writeFile } = require('fs')
+
+const preCwd = global.upath.resolve(__dirname, '..')
+const tpl = require(global.upath.joinSafe(__dirname, 'tpl'))
+const AppBase = require(global.upath.joinSafe(preCwd, 'AppBase'))
+const indexPath = global.upath.joinSafe(preCwd, 'index.json')
+
+// Handle apps save - Not Used Yet
+/*router.post('registerWebApp', function( req, res ){
+ Logger.log('registerWebApp', req.params)
+ if( !req.params.length ){
+
+ Logger.log('[WEBSEARCHAPP]', 'changeAppLocation', 1)
+ return res.json( 'NO_OK')
+ }
+
+ global.async.each( req.params, ( _app, cb ) => {
+
+ if( !_app.name || !_app.exec ){
+ return callback('BAD_PARAMS')
+ }
+
+ let insert = {
+ exec: _app.exec,
+ name: _app.name
+ }
+ if( _app.scut ){
+ insert[ 'regex1' ] = _app.scut
+ }
+ if( _app.icon ){
+ insert[ 'icon' ] = _app.icon
+ }
+ if( _app.location || _app.data || _app.url ){
+ insert[ 'data' ] = _app.data || _app.url
+ }
+
+ global.async.waterfall([
+ ( callback ) => {
+ // Insert on db
+ global.db.query({
+ phrase: 'INSERT INTO apps SET ?',
+ values: insert
+ }, cb )
+ },
+ // Create template
+ ( callback ) => {
+ writeFile( global.upath.join( global.settings.get('appsDir'), 'webSearchApp', _app.exec + '.js'), tpl( _app ), callback )
+ },
+ // Update index
+ ( callback ) => {
+ let index = require('../index.json')
+ index[ app.exec ] = './webSearchApp/' + app.exec
+ writeFile( global.upath.join(__dirname, '/../index.json'), JSON.stringify( index, null, 4 ), callback )
+ },
+ // Save shortcut if any
+ ( callback ) => {
+ if( app.shortcut ){
+ global.settings.set(`shortcut.${exec}`, app.shortcut)
+ }
+ callback( null )
+ }
+ ], cb )
+ }, res.json)
+})*/
+
+// Does not really matter, just for completness
+const defaultWrapper = {
+ name: 'Open search on webSearch',
+ text: 'Search whatever on webSearch',
+ exec: 'webSearch',
+ icon: null,
+ internal: true
+}
+
+class WebSearch extends AppBase {
+ constructor(options) {
+ super(defaultWrapper, options)
+ super.setup()
+ this.appIndex = require(indexPath)
+ this.firstTime = true
+ this.webApps = []
+ this._registerEvents()
+ }
+
+ _addWebApp( app ) {
+ // Check index
+ if( !this.appIndex.hasOwnProperty( app.exec ) ){
+ // save as relative path, resolved on load
+ this.appIndex[ app.exec ] = global.upath.joinSafe('webSearchApp', app.exec)
+ }
+
+ // Check shortcut
+ if( global.settings.get(`shortcut.${app.exec}.regex1`) ){
+ app['shortcut'] = global.settings.get(`shortcut.${app.exec}.regex1`)
+ }
+
+ // TODO => Review array data per application, later, on appRetrieval, other data maybe requested
+ // Save on cache
+ this.webApps.push({
+ name: `Open search on ${app.name}`,
+ text: app.text || `Search whatever on ${app.name}`,
+ exec: app.exec,
+ icon: app.icon,
+ type: '_web_app_'
+ })
+ }
+
+ _createWebApp( app, callback ){
+ // Check template
+ const template = tpl({ name: app.name, exec: app.exec, url: app.data, icon: app.icon })
+ if( !template ){
+ return callback( null, 0 )
+ }
+ // Write file
+ writeFile(
+ global.upath.join(__dirname, '/', `${app.exec}.js`),
+ template,
+ ( err ) => {
+ if( err ){
+ return callback( err )
+ }
+ this._addWebApp( app )
+ callback( null, 1 )
+ }
+ )
+ }
+
+ _dumpIndex( callback ) {
+ writeFile(indexPath, JSON.stringify( this.appIndex, null, 2 ), callback )
+ }
+
+ _registerEvents() {
+ // Handle apps request
+ router.get('webApps', ( req, res ) => {
+ res.json( null, this.webApps)
+ })
+ // Save web app url, maybe reload app?
+ router.get('WEB_APP_URL', ( req, res ) => {
+ global.Logger.log('WEB_APP_URL', req.params)
+ if( !req.params.length ){
+ global.Logger.log('[WEBSEARCHAPP]', 'changeAppLocation', 1)
+ return res.json( null )
+ }
+
+ global.async.map( req.params, ( _app, cb ) => {
+ // query main db for saving new shortcut
+ global.db.query({
+ phrase: 'SELECT data FROM apps WHERE name = ?',
+ values: [ _app.exec ]
+ }, ( err, result ) => {
+ if( !err && result.length ){
+ cb( null )
+ }else{
+ cb( null, { app: _app, url: result[0] })
+ }
+ })
+ // Response the result of each save
+ }, (err, result) => {
+ res.json( null, flatten( result ) )
+ })
+ })
+ }
+
+ match( ex, query ) {
+ // never match
+ return null
+ }
+
+ preLoad( callback ) {
+ let created = 0
+ global.async.waterfall([
+ // Load web apps
+ ( callback ) => {
+ global.db.getMainDB().find({ type: '_web_app_' }, callback)
+ },
+ // Setup every app
+ ( rows, callback ) => {
+ //Logger.log('[WEBSEARCHAPP] loader', rows)
+ // For each row, check that it is present on
+ // the application index and that it has its template
+ global.async.eachSeries( rows, ( app, callback ) => {
+ // If the app exists, check the index, update acordingly
+ // Else, create template, write file, check the index, update acordingly
+ // Check exists
+ exists( global.upath.joinSafe(__dirname, `${app.exec}.js`), ( exists, stat ) => {
+ Logger.log('[WEBSEARCHAPP]', app.exec, exists)
+ if( exists ){
+ app.hasFile = true
+ this._addWebApp( app )
+ callback()
+ }else{
+ this._createWebApp( app, ( err, added ) => {
+ if( err ){
+ callback( err )
+ }else{
+ created += added
+ callback()
+ }
+ })
+ }
+ })
+ }, callback)
+ }
+ ], ( err, result ) => {
+ this.firstTime = (created > 0)
+ if( created > 0 ){
+ this._dumpIndex( callback )
+ }else{
+ callback()
+ }
+ })
+ }
+
+ shouldReload() {
+ return this.firstTime
+ }
+
+ postLoad( callback ) {
+
+ callback()
+ if( this.firstTime ){
+ if( this.webApps.length ){
+ router.send('reloadApplications', this.webApps.map(app => app.exec) )
+ }
+ }
+ }
+}
+
+module.exports = WebSearch
diff --git a/apps/system/webSearchApp/aurSearch.js b/apps/system/webSearchApp/aurSearch.js
index 40eca1f..efb4490 100644
--- a/apps/system/webSearchApp/aurSearch.js
+++ b/apps/system/webSearchApp/aurSearch.js
@@ -1,65 +1,42 @@
/************** AUTO GENERATED ***************/
'use strict';
+ const AppBase = require(global.upath.joinSafe(global.upath.resolve(__dirname, '..'), 'AppBase'))
- var _utils = global.app.utils;
- var _url = 'https://aur.archlinux.org/packages/?K=|https://www.archlinux.org/packages/?q=';
+ const _utils = global.app.utils
+ const _url = 'https://aur.archlinux.org/packages/?K=|https://www.archlinux.org/packages/?q='
// make a regex out of the name for searching strings
- var _queryRegex = /^Aur (.*)/i;
- var _fn = function( exec, query ){
+ const _queryRegex = /^Aur (.*)/i
- var search = null;
- if( exp.regex ){
- search = _utils.cleanQuery(exp.regex.filter(r => r !== null), query);
- if( search ){
- query = search;
- }
- }
- // url can have various values
- _url.split('|')
- .map(str => str + (query.split(' ')).join('+'))
- .forEach(q => _utils.spawn('xdg-open', [q]))
- }
-
- var exp = {
- fn: _fn,
- wrapper: {
- name: 'Open search on Aur',
- text: 'Search whatever on Aur',
- exec: 'aurSearch',
- icon: 'aur.png',
- url: _url,
- type: '_web_app_'
- },
- regex: [ _queryRegex, null ]
+ const defaultWrapper = {
+ name: 'Open search on Aur',
+ text: 'Search whatever on Aur',
+ exec: 'aurSearch',
+ icon: 'aur.png',
+ url: _url,
+ type: '_web_app_'
}
- if( global.settings.get('shortcuts.aurSearch') ){
- // Avoid bad regex
- var r = global.settings.get('shortcuts.aurSearch').regex1;
- if( r !== '_unset_' ){
- // Set default regex (index 0) and name search (index 1),
- // setting to null avoids default behaviour,
- // which goes to the name of the application
- exp.regex = [ _queryRegex, r ];
- }
- }
+ class aurSearch extends AppBase {
+ constructor(options) {
+ super(defaultWrapper, options)
+ this.regex = [_queryRegex]
+ super.setup()
+ }
- module.exports = {
- getRegex: function(){
- return (exp.regex)?exp.regex:null;
- },
- getUserRegex: function(){
- return (exp.regex && exp.regex.length > 1)?exp.regex[1]:null;
- },
- getStdRegex: function(){
- return (exp.regex && exp.regex.length)?exp.regex[0]:null;
- },
- getWrapper: function(){
- return exp;
- },
- testQuery: function( query ){
- // Search by name regexp and by user custom regex
- return exp.regex.filter(r =>{ return r instanceof RegExp }).some(r =>{ return r.test( query ) });
+ exec( ex, query ) {
+ let search = null
+ if( this.regex ){
+ search = _utils.cleanQuery(this.regex.filter(r => r !== null), query)
+ if( search ){
+ query = search
+ }
+ }
+ // url can have various values
+ _url.split('|')
+ .map(str => str + (query.split(' ')).join('+'))
+ .forEach(q => _utils.spawn('xdg-open', [q]))
}
}
+
+ module.exports = aurSearch
\ No newline at end of file
diff --git a/apps/system/webSearchApp/bitbucketSearch.js b/apps/system/webSearchApp/bitbucketSearch.js
index 04f88dc..c42aaf7 100644
--- a/apps/system/webSearchApp/bitbucketSearch.js
+++ b/apps/system/webSearchApp/bitbucketSearch.js
@@ -1,65 +1,42 @@
/************** AUTO GENERATED ***************/
'use strict';
+ const AppBase = require(global.upath.joinSafe(global.upath.resolve(__dirname, '..'), 'AppBase'))
- var _utils = global.app.utils;
- var _url = 'https://www.bitbucket.com/search?q=';
+ const _utils = global.app.utils
+ const _url = 'https://www.bitbucket.com/search?q='
// make a regex out of the name for searching strings
- var _queryRegex = /^BitBucket (.*)/i;
- var _fn = function( exec, query ){
+ const _queryRegex = /^BitBucket (.*)/i
- var search = null;
- if( exp.regex ){
- search = _utils.cleanQuery(exp.regex.filter(r => r !== null), query);
- if( search ){
- query = search;
- }
- }
- // url can have various values
- _url.split('|')
- .map(str => str + (query.split(' ')).join('+'))
- .forEach(q => _utils.spawn('xdg-open', [q]))
- }
-
- var exp = {
- fn: _fn,
- wrapper: {
- name: 'Open search on BitBucket',
- text: 'Search whatever on BitBucket',
- exec: 'bitbucketSearch',
- icon: 'bitbucket.png',
- url: _url,
- type: '_web_app_'
- },
- regex: [ _queryRegex, null ]
+ const defaultWrapper = {
+ name: 'Open search on BitBucket',
+ text: 'Search whatever on BitBucket',
+ exec: 'bitbucketSearch',
+ icon: 'bitbucket.png',
+ url: _url,
+ type: '_web_app_'
}
- if( global.settings.get('shortcuts.bitbucketSearch') ){
- // Avoid bad regex
- var r = global.settings.get('shortcuts.bitbucketSearch').regex1;
- if( r !== '_unset_' ){
- // Set default regex (index 0) and name search (index 1),
- // setting to null avoids default behaviour,
- // which goes to the name of the application
- exp.regex = [ _queryRegex, r ];
- }
- }
+ class bitbucketSearch extends AppBase {
+ constructor(options) {
+ super(defaultWrapper, options)
+ this.regex = [_queryRegex]
+ super.setup()
+ }
- module.exports = {
- getRegex: function(){
- return (exp.regex)?exp.regex:null;
- },
- getUserRegex: function(){
- return (exp.regex && exp.regex.length > 1)?exp.regex[1]:null;
- },
- getStdRegex: function(){
- return (exp.regex && exp.regex.length)?exp.regex[0]:null;
- },
- getWrapper: function(){
- return exp;
- },
- testQuery: function( query ){
- // Search by name regexp and by user custom regex
- return exp.regex.filter(r =>{ return r instanceof RegExp }).some(r =>{ return r.test( query ) });
+ exec( ex, query ) {
+ let search = null
+ if( this.regex ){
+ search = _utils.cleanQuery(this.regex.filter(r => r !== null), query)
+ if( search ){
+ query = search
+ }
+ }
+ // url can have various values
+ _url.split('|')
+ .map(str => str + (query.split(' ')).join('+'))
+ .forEach(q => _utils.spawn('xdg-open', [q]))
}
}
+
+ module.exports = bitbucketSearch
\ No newline at end of file
diff --git a/apps/system/webSearchApp/githubSearch.js b/apps/system/webSearchApp/githubSearch.js
index e464e55..8d90959 100644
--- a/apps/system/webSearchApp/githubSearch.js
+++ b/apps/system/webSearchApp/githubSearch.js
@@ -1,65 +1,42 @@
/************** AUTO GENERATED ***************/
'use strict';
+ const AppBase = require(global.upath.joinSafe(global.upath.resolve(__dirname, '..'), 'AppBase'))
- var _utils = global.app.utils;
- var _url = 'https://www.github.com/search?q=';
+ const _utils = global.app.utils
+ const _url = 'https://www.github.com/search?q='
// make a regex out of the name for searching strings
- var _queryRegex = /^Github (.*)/i;
- var _fn = function( exec, query ){
+ const _queryRegex = /^Github (.*)/i
- var search = null;
- if( exp.regex ){
- search = _utils.cleanQuery(exp.regex.filter(r => r !== null), query);
- if( search ){
- query = search;
- }
- }
- // url can have various values
- _url.split('|')
- .map(str => str + (query.split(' ')).join('+'))
- .forEach(q => _utils.spawn('xdg-open', [q]))
- }
-
- var exp = {
- fn: _fn,
- wrapper: {
- name: 'Open search on Github',
- text: 'Search whatever on Github',
- exec: 'githubSearch',
- icon: 'github.png',
- url: _url,
- type: '_web_app_'
- },
- regex: [ _queryRegex, null ]
+ const defaultWrapper = {
+ name: 'Open search on Github',
+ text: 'Search whatever on Github',
+ exec: 'githubSearch',
+ icon: 'github.png',
+ url: _url,
+ type: '_web_app_'
}
- if( global.settings.get('shortcuts.githubSearch') ){
- // Avoid bad regex
- var r = global.settings.get('shortcuts.githubSearch').regex1;
- if( r !== '_unset_' ){
- // Set default regex (index 0) and name search (index 1),
- // setting to null avoids default behaviour,
- // which goes to the name of the application
- exp.regex = [ _queryRegex, r ];
- }
- }
+ class githubSearch extends AppBase {
+ constructor(options) {
+ super(defaultWrapper, options)
+ this.regex = [_queryRegex]
+ super.setup()
+ }
- module.exports = {
- getRegex: function(){
- return (exp.regex)?exp.regex:null;
- },
- getUserRegex: function(){
- return (exp.regex && exp.regex.length > 1)?exp.regex[1]:null;
- },
- getStdRegex: function(){
- return (exp.regex && exp.regex.length)?exp.regex[0]:null;
- },
- getWrapper: function(){
- return exp;
- },
- testQuery: function( query ){
- // Search by name regexp and by user custom regex
- return exp.regex.filter(r =>{ return r instanceof RegExp }).some(r =>{ return r.test( query ) });
+ exec( ex, query ) {
+ let search = null
+ if( this.regex ){
+ search = _utils.cleanQuery(this.regex.filter(r => r !== null), query)
+ if( search ){
+ query = search
+ }
+ }
+ // url can have various values
+ _url.split('|')
+ .map(str => str + (query.split(' ')).join('+'))
+ .forEach(q => _utils.spawn('xdg-open', [q]))
}
}
+
+ module.exports = githubSearch
\ No newline at end of file
diff --git a/apps/system/webSearchApp/tpl.js b/apps/system/webSearchApp/tpl.js
index a4a4d64..46832e4 100755
--- a/apps/system/webSearchApp/tpl.js
+++ b/apps/system/webSearchApp/tpl.js
@@ -13,82 +13,53 @@ module.exports = function( app ){
return null
}
- var name = app.name;
- var exec = app.exec;
- var url = app.url;
- var icon = app.icon || null;
+ const name = app.name
+ const exec = app.exec
+ const url = app.url
+ const icon = app.icon || null
- var tpl = `/************** AUTO GENERATED ***************/
+ let tpl = `/************** AUTO GENERATED ***************/
'use strict';
+ const AppBase = require(global.upath.joinSafe(global.upath.resolve(__dirname, '..'), 'AppBase'))
- var _utils = global.app.utils;
- var _url = '${url}';
+ const _utils = global.app.utils
+ const _url = '${url}'
// make a regex out of the name for searching strings
- var _queryRegex = /^${name} (\.*)/i;
- var _fn = function( exec, query ){
+ const _queryRegex = /^${name} (\.*)/i
- var search = null;
- if( exp.regex ){
- search = _utils.cleanQuery(exp.regex.filter(r => r !== null), query);
- if( search ){
- query = search;
- }
- }
- // url can have various values
- _url.split('|')
- .map(str => str + (query.split(' ')).join('+'))
- .forEach(q => _utils.spawn('xdg-open', [q]))
- }
-
- var exp = {
- fn: _fn,
- wrapper: {
- name: 'Open search on ${name}',
- text: 'Search whatever on ${name}',
- exec: '${exec}',
- icon: '${icon}',
- url: _url,
- type: '_web_app_'
- },
- regex: [ _queryRegex, null ]
+ const defaultWrapper = {
+ name: 'Open search on ${name}',
+ text: 'Search whatever on ${name}',
+ exec: '${exec}',
+ icon: '${icon}',
+ url: _url,
+ type: '_web_app_'
}
- if( global.settings.get('shortcuts.${exec}') ){
- // Avoid bad regex
- var r = global.settings.get('shortcuts.${exec}').regex1;
- if( r !== '_unset_' ){
- // Set default regex (index 0) and name search (index 1),
- // setting to null avoids default behaviour,
- // which goes to the name of the application
- exp.regex = [ _queryRegex, r ];
- }
- }
+ class ${exec} extends AppBase {
+ constructor(options) {
+ super(defaultWrapper, options)
+ this.regex = [_queryRegex]
+ super.setup()
+ }
- module.exports = {
- getRegex: function(){
- return (exp.regex)?exp.regex:null;
- },
- getUserRegex: function(){
- return (exp.regex && exp.regex.length > 1)?exp.regex[1]:null;
- },
- getStdRegex: function(){
- return (exp.regex && exp.regex.length)?exp.regex[0]:null;
- },
- getWrapper: function(){
- return exp;
- },
- testQuery: function( query ){
- // Search by name regexp and by user custom regex
- return exp.regex.filter(r =>{ return r instanceof RegExp }).some(r =>{ return r.test( query ) });
+ exec( ex, query ) {
+ let search = null
+ if( this.regex ){
+ search = _utils.cleanQuery(this.regex.filter(r => r !== null), query)
+ if( search ){
+ query = search
+ }
+ }
+ // url can have various values
+ _url.split('|')
+ .map(str => str + (query.split(' ')).join('+'))
+ .forEach(q => _utils.spawn('xdg-open', [q]))
}
}
- `
- return tpl;
+ module.exports = ${exec}
+ `
+ return tpl
}
-
-
-
-
-
diff --git a/apps/system/webSearchApp/webSearchApp.js b/apps/system/webSearchApp/webSearchApp.js
deleted file mode 100755
index b4fafc7..0000000
--- a/apps/system/webSearchApp/webSearchApp.js
+++ /dev/null
@@ -1,363 +0,0 @@
-'use strict';
-
-let _spawner = global.spawner;
-let _utils = global.app.utils;
-let _ = require('lodash');
-let sqlite = require('sqlite3').verbose();
-let router = require('electron-router')('WEB_SEARCH');
-let DB = null;
-let fs = require('fs');
-let tpl = require('./tpl');
-let webApps = [];
-let firstTime = false;
-
-// Load every registered web.
-let _loader = function( callback ){
-
- let created = 0;
-
- global.async.waterfall([
-
- // Load web apps
- function( callback ){
-
- global.db.getMainDB().find({ type: '_web_app_' }, callback)
-
- },
- // Setup every app
- function( rows, callback ){
- //Logger.log('[WEBSEARCHAPP] loader', rows);
- // For each row, check that it is present on
- // the application index and that it has its template
- let appIndex = require('../index.json');
-
- let end = function( app, callback ){
- // Check index
- if( app.hasFile ){
-
- if( !appIndex.hasOwnProperty( app.exec ) ){
- created++;
- appIndex[ app.exec ] = './webSearchApp/' + app.exec;
- }
-
- // Check shortcut
- if( global.settings.get(`shortcut.${app.exec}`) ){
- app['shortcut'] = global.settings.get(`shortcut.${app.exec}`);
- }
-
- // TODO => Review array data per application, later, on appRetrieval, other data maybe requested
- // Save on cache
- webApps.push({
- name: `Open search on ${app.name}`,
- text: app.text || `Search whatever on ${app.name}`,
- exec: app.exec,
- icon: app.icon,
- type: '_web_app_'
- });
-
- }
- callback();
- }
-
- global.async.eachSeries( rows, function( app, callback ){
- // If the app exists, check the index, update acordingly
- // Else, create template, write file, check the index, update acordingly
- app.hasFile = false;
-
- // Check exists
- fs.exists( __dirname + '/' + app.exec + '.js', function( exists, stat ){
-
- if( exists ){
- app.hasFile = true;
- return end( app, callback );
- }
-
- // Check template
- let template = tpl({ name: app.name, exec: app.exec, url: app.data, icon: app.icon });
- if( template ){
- // Write file
- fs.writeFile(
- global.upath.join(__dirname, '/', app.exec + '.js'),
- template,
- function( err ){
- if( !err ){
- app.hasFile = true;
- }
- end( app, callback );
- }
- );
-
- }else{
- end( app, callback );
- }
-
- })
-
- }, function(){
- fs.writeFile( global.upath.join(__dirname, '/../index.json'), JSON.stringify( appIndex, null, 4 ), callback );
- })
- }
-
- ], function( err, result ) {
- firstTime = (created === 0);
- callback();
- })
-
-}
-
-let _shouldReload = function(){
- return !firstTime;
-}
-
-let _makeLoad = function( callback ){
-
- callback();
-
- if( webApps.length ){
- webApps.forEach( app => {
- router.send('reloadApplication', app.exec )
- })
- }
-
-}
-
-// Handle apps save - Not Used Yet
-router.post('registerWebApp', function( req, res ){
- Logger.log('registerWebApp', req.params);
- if( !req.params.length ){
-
- Logger.log('[WEBSEARCHAPP]', 'changeAppLocation', 1);
- return res.json( 'NO_OK');
-
- }
-
- global.async.each( req.params, ( _app, cb ) => {
-
- if( !_app.name || !_app.exec ){
- return callback('BAD_PARAMS');
- }
-
- let insert = {
- exec: _app.exec,
- name: _app.name
- }
- if( _app.scut ){
- insert[ 'regex1' ] = _app.scut;
- }
- if( _app.icon ){
- insert[ 'icon' ] = _app.icon;
- }
- if( _app.location || _app.data || _app.url ){
- insert[ 'data' ] = _app.data || _app.url;
- }
-
- global.async.waterfall([
- ( callback ) => {
- // Insert on db
- global.db.query({
- phrase: 'INSERT INTO apps SET ?',
- values: insert
- }, cb )
- },
- // Create template
- ( callback ) => {
- fs.writeFile( global.upath.join( global.settings.get('appsDir'), 'webSearchApp', _app.exec + '.js'), tpl( _app ), callback );
- },
- // Update index
- ( callback ) => {
- let index = require('../index.json');
- index[ app.exec ] = './webSearchApp/' + app.exec;
- fs.writeFile( global.upath.join(__dirname, '/../index.json'), JSON.stringify( index, null, 4 ), callback );
- },
- // Save shortcut if any
- ( callback ) => {
- if( app.shortcut ){
- global.settings.set(`shortcut.${exec}`, app.shortcut);
- }
- callback( null );
- }
- ], cb )
-
- }, res.json)
-
- /*let app = req.params[0];
- if( !app.textName || !app.exec || !app.url ){
- return callback('BAD PARAMS');
- }
-
- global.async.waterfall([
-
- // Init DB
- function( callback ){
- if( !DB ){
- DB = new sqlite.Database( global.settings.get('db_location'), sqlite.OPEN_READWRITE, callback);
- }else{
- callback( null );
- }
- },
- // Check item on db
- function( callback ){
- DB.all('SELECT * FROM apps WHERE name = ? ', [app.exec], callback);
- },
- function( rows, callback ){
- callback( rows.length?'APP ALREADY EXISTS':null );
- },
- // Insert on DB
- function( callback ){
- DB.all(
- 'INSERT INTO apps VALUES( ?, ?, ?, ?, ?, ? ) ',
- [app.exec, app.textName, app.text || ('Search whatever on ' + app.textName), app.data || app.url, app.icon || null, '/' + app.textName.trim() + ' (.*)/i', null],
- callback
- );
- },
- // Create template
- function( id, callback ){
- fs.writeFile( global.upath.join(__dirname, '/', app.exec + '.js'), tpl( app ), callback );
- },
- // Update index
- function( callback ){
- let index = require('../index.json');
- index[ app.exec ] = './webSearchApp/' + app.exec;
- fs.writeFile( global.upath.join(__dirname, '/../index.json'), JSON.stringify( index, null, 4 ), callback );
- },
- // Save shortcut if any
- function( callback ){
- if( app.shortcut ){
- global.settings.set(`shortcut.${exec}`, app.shortcut);
- }
- callback( null );
- },
- // Reload Application
- function( callback ){
- router.send('reloadApplication', app.exec);
- callback( null );
- }
- ], function( err ){
- Logger.log('[WEB_SEARCH APP] END ', arguments);
- res.json( null, 'OK' );
- // res.json( err?err:null, err?undefined:'OK' );
- })*/
-
-})
-
-router.get('WEB_APP_URL', function( req, res ){
- Logger.log('WEB_APP_URL', req.params);
- if( !req.params.length ){
-
- Logger.log('[WEBSEARCHAPP]', 'changeAppLocation', 1);
- return res.json( null );
-
- }
-
- global.async.map( req.params, ( _app, cb ) => {
-
- // query main db for saving new shortcut
- global.db.query({
- phrase: 'SELECT data FROM apps WHERE name = ?',
- values: [ _app.exec ]
- }, ( err, result ) => {
- if( !err && result.length ){
- cb( null );
- }else{
- cb( null, { app: _app, url: result[0] })
- }
- })
-
- // Response the result of each save
- }, (err, result) => {
- res.json( null, _.flatten( result ) );
- })
-
-})
-
-// Handle apps request
-router.get('webApps', function( req, res ){
- res.json( null, webApps);
-})
-
-// TODO => Compose shortcut (ie, regex...), save to shortcut??DB??, reload application, send OK
-/*router.post('changeAppShortcut', function( req, res ){
-
- if( !req.params.length ){
-
- Logger.log('[WEBSEARCHAPP]', 'changeAppLocation', 1);
- return res.json( 'NO_OK');
-
- }
-
- global.async.each( req.params, ( _app, cb ) => {
-
- if( !_app.scut ){
- return callback('BAD_REGEX');
- }
- // Replace possible bad regex
- _app.scut = _app.scut.replace(/\(\.\*\)/gi, '');
- _app.scut = _app.scut.trim();
- // query main db for saving new shortcut
- global.db.query({
- phrase: 'UPDATE apps SET regex1 = ? WHERE exec = ?',
- values: [ new RegExp( `^${_app.scut} (.*)`, 'i' ), _app.exec ]
- }, cb )
-
- // Response the result of each save
- }, res.json )
-
-})
-// TODO => Compose shortcut (ie, regex...), save to shortcut??DB??, reload application, send OK
-router.post('changeAppLocation', function( req, res ){
- Logger.log('[WEBSEARCHAPP] changeAppShortcut save', req);
-
- if( !req.params.length ){
-
- Logger.log('[WEBSEARCHAPP]', 'changeAppLocation', 1);
- return res.json( 'NO_OK');
-
- }
-
- global.async.each( req.params, ( _app, cb ) => {
-
- if( !global.app.URL_REGEX.test( _app.location ) ){
- return callback('BAD_REGEX');
- }
- // Replace possible bad regex
- _app.location = _app.location.trim();
- // query main db for saving new shortcut
- global.db.query({
- phrase: 'UPDATE apps SET data = ? WHERE exec = ?',
- values: [ new RegExp( `^${_app.location}`, 'i' ), _app.exec ]
- }, cb )
-
- // Response the result of each save
- }, res.json )
-
-})*/
-
-// Does not really matter, just for completness
-let exp = {
- fn: function(){},
- wrapper: {
- name: 'Open search on webSearch',
- text: 'Search whatever on webSearch',
- exec: 'webSearch',
- icon: null,
- internal: true
- }
-}
-
-module.exports = {
- preLoad: _loader,
- shouldReload: _shouldReload,
- postLoad: _makeLoad,
- getRegex: function(){
- return (exp.regex)?exp.regex:null;
- },
- getUserRegex: function(){
- return (exp.regex && exp.regex.length > 1)?exp.regex[1]:null;
- },
- getStdRegex: function(){
- return (exp.regex && exp.regex.length)?exp.regex[0]:null;
- },
- getWrapper: function(){
- return exp;
- }
-}
diff --git a/apps/system/webSearchApp/wikiSearch.js b/apps/system/webSearchApp/wikiSearch.js
index 28109f1..c78c167 100644
--- a/apps/system/webSearchApp/wikiSearch.js
+++ b/apps/system/webSearchApp/wikiSearch.js
@@ -1,65 +1,42 @@
/************** AUTO GENERATED ***************/
'use strict';
+ const AppBase = require(global.upath.joinSafe(global.upath.resolve(__dirname, '..'), 'AppBase'))
- var _utils = global.app.utils;
- var _url = 'https://en.wikipedia.org/w/index.php?search=';
+ const _utils = global.app.utils
+ const _url = 'https://en.wikipedia.org/w/index.php?search='
// make a regex out of the name for searching strings
- var _queryRegex = /^Wikipedia (.*)/i;
- var _fn = function( exec, query ){
+ const _queryRegex = /^Wikipedia (.*)/i
- var search = null;
- if( exp.regex ){
- search = _utils.cleanQuery(exp.regex.filter(r => r !== null), query);
- if( search ){
- query = search;
- }
- }
- // url can have various values
- _url.split('|')
- .map(str => str + (query.split(' ')).join('+'))
- .forEach(q => _utils.spawn('xdg-open', [q]))
- }
-
- var exp = {
- fn: _fn,
- wrapper: {
- name: 'Open search on Wikipedia',
- text: 'Search whatever on Wikipedia',
- exec: 'wikiSearch',
- icon: 'wikipedia.png',
- url: _url,
- type: '_web_app_'
- },
- regex: [ _queryRegex, null ]
+ const defaultWrapper = {
+ name: 'Open search on Wikipedia',
+ text: 'Search whatever on Wikipedia',
+ exec: 'wikiSearch',
+ icon: 'wikipedia.png',
+ url: _url,
+ type: '_web_app_'
}
- if( global.settings.get('shortcuts.wikiSearch') ){
- // Avoid bad regex
- var r = global.settings.get('shortcuts.wikiSearch').regex1;
- if( r !== '_unset_' ){
- // Set default regex (index 0) and name search (index 1),
- // setting to null avoids default behaviour,
- // which goes to the name of the application
- exp.regex = [ _queryRegex, r ];
- }
- }
+ class wikiSearch extends AppBase {
+ constructor(options) {
+ super(defaultWrapper, options)
+ this.regex = [_queryRegex]
+ super.setup()
+ }
- module.exports = {
- getRegex: function(){
- return (exp.regex)?exp.regex:null;
- },
- getUserRegex: function(){
- return (exp.regex && exp.regex.length > 1)?exp.regex[1]:null;
- },
- getStdRegex: function(){
- return (exp.regex && exp.regex.length)?exp.regex[0]:null;
- },
- getWrapper: function(){
- return exp;
- },
- testQuery: function( query ){
- // Search by name regexp and by user custom regex
- return exp.regex.filter(r =>{ return r instanceof RegExp }).some(r =>{ return r.test( query ) });
+ exec( ex, query ) {
+ let search = null
+ if( this.regex ){
+ search = _utils.cleanQuery(this.regex.filter(r => r !== null), query)
+ if( search ){
+ query = search
+ }
+ }
+ // url can have various values
+ _url.split('|')
+ .map(str => str + (query.split(' ')).join('+'))
+ .forEach(q => _utils.spawn('xdg-open', [q]))
}
}
+
+ module.exports = wikiSearch
\ No newline at end of file
diff --git a/apps/system/webSearchApp/youtubeSearch.js b/apps/system/webSearchApp/youtubeSearch.js
index 9113982..8ae5892 100644
--- a/apps/system/webSearchApp/youtubeSearch.js
+++ b/apps/system/webSearchApp/youtubeSearch.js
@@ -1,65 +1,42 @@
/************** AUTO GENERATED ***************/
'use strict';
+ const AppBase = require(global.upath.joinSafe(global.upath.resolve(__dirname, '..'), 'AppBase'))
- var _utils = global.app.utils;
- var _url = 'https://www.youtube.com/results?search_query=';
+ const _utils = global.app.utils
+ const _url = 'https://www.youtube.com/results?search_query='
// make a regex out of the name for searching strings
- var _queryRegex = /^YouTube (.*)/i;
- var _fn = function( exec, query ){
+ const _queryRegex = /^YouTube (.*)/i
- var search = null;
- if( exp.regex ){
- search = _utils.cleanQuery(exp.regex.filter(r => r !== null), query);
- if( search ){
- query = search;
- }
- }
- // url can have various values
- _url.split('|')
- .map(str => str + (query.split(' ')).join('+'))
- .forEach(q => _utils.spawn('xdg-open', [q]))
- }
-
- var exp = {
- fn: _fn,
- wrapper: {
- name: 'Open search on YouTube',
- text: 'Search whatever on YouTube',
- exec: 'youtubeSearch',
- icon: 'youtube.png',
- url: _url,
- type: '_web_app_'
- },
- regex: [ _queryRegex, null ]
+ const defaultWrapper = {
+ name: 'Open search on YouTube',
+ text: 'Search whatever on YouTube',
+ exec: 'youtubeSearch',
+ icon: 'youtube.png',
+ url: _url,
+ type: '_web_app_'
}
- if( global.settings.get('shortcuts.youtubeSearch') ){
- // Avoid bad regex
- var r = global.settings.get('shortcuts.youtubeSearch').regex1;
- if( r !== '_unset_' ){
- // Set default regex (index 0) and name search (index 1),
- // setting to null avoids default behaviour,
- // which goes to the name of the application
- exp.regex = [ _queryRegex, r ];
- }
- }
+ class youtubeSearch extends AppBase {
+ constructor(options) {
+ super(defaultWrapper, options)
+ this.regex = [_queryRegex]
+ super.setup()
+ }
- module.exports = {
- getRegex: function(){
- return (exp.regex)?exp.regex:null;
- },
- getUserRegex: function(){
- return (exp.regex && exp.regex.length > 1)?exp.regex[1]:null;
- },
- getStdRegex: function(){
- return (exp.regex && exp.regex.length)?exp.regex[0]:null;
- },
- getWrapper: function(){
- return exp;
- },
- testQuery: function( query ){
- // Search by name regexp and by user custom regex
- return exp.regex.filter(r =>{ return r instanceof RegExp }).some(r =>{ return r.test( query ) });
+ exec( ex, query ) {
+ let search = null
+ if( this.regex ){
+ search = _utils.cleanQuery(this.regex.filter(r => r !== null), query)
+ if( search ){
+ query = search
+ }
+ }
+ // url can have various values
+ _url.split('|')
+ .map(str => str + (query.split(' ')).join('+'))
+ .forEach(q => _utils.spawn('xdg-open', [q]))
}
}
+
+ module.exports = youtubeSearch
\ No newline at end of file
diff --git a/db/dbMain.js b/db/dbMain.js
index 9bff5cc..16738b4 100755
--- a/db/dbMain.js
+++ b/db/dbMain.js
@@ -1,23 +1,23 @@
/*
- depends on electron, Database, linvodb3, medeadown
- global upath, settings, DIRS, Logger
+ depends on electron, Database, linvodb3, medeadown
+ global upath, settings, DIRS, Logger
*/
'use strict'
const exp = {
- name : 'mainDb',
- dir : settings.get('db_location'),
- schema: {
- name: { type: String, index: true },
- text: { type: String, default: '' },
- exec: { type: String, index: true, default: '' },
- icon: { type: String, default: '' },
- data: { type: String, default: '' },
- type: { type: String, index: true, default: '_system_' },
- regex0: { type: RegExp, default: new RegExp('(?!)') },
- regex1: { type: RegExp, default: new RegExp('(?!)') }
- }
+ name : 'mainDb',
+ dir : global.settings.get('db_location'),
+ schema: {
+ name: { type: String, index: true },
+ text: { type: String, default: '' },
+ exec: { type: String, index: true, default: '' },
+ icon: { type: String, default: '' },
+ data: { type: String, default: '' },
+ type: { type: String, index: true, default: '_system_' },
+ regex0: { type: RegExp, default: new RegExp('(?!)') },
+ regex1: { type: RegExp, default: new RegExp('(?!)') }
+ }
}
const LinvoDB = require('linvodb3')
@@ -27,34 +27,34 @@ LinvoDB.dbPath = exp.dir
var AppSchema = null
module.exports = {
- init: function( callback ){
- Logger.log('[DB MAIN] Start')
- if( AppSchema ){
- callback( null, AppSchema )
- }else{
- AppSchema = new LinvoDB('apps', exp.schema, {})
- if( AppSchema ){
- Logger.log('[DB MAIN] Registered on Database', exp.name, exp.dir + '/apps.db')
- if( !settings.get('first_time') ){
- callback( null, AppSchema )
- }else{
- // Load default apps data
- var defaultData = require( upath.join(DIRS.INTERNAL_ROOT, 'misc', 'settings.json') ).apps
- var toSave = Object.keys( defaultData ).map(( key ) => new AppSchema( defaultData[ key ] ) )
- // Logger.log('[DB MAIN]', 'toSave', JSON.stringify(toSave, null, 2))
- AppSchema.save(toSave, function( err ){
- if( err ){
- Logger.log('[DB MAIN] Unable to save default data on Database', this.name, err)
- callback( err )
- }else{
- callback( null, AppSchema )
- }
- })
- }
- }else{
- Logger.log('[DB MAIN] Unable to register on Database', this.name, err)
- callback( 'BAD_INIT' )
- }
- }
- }
+ init: function( callback ){
+ Logger.log('[DB MAIN] Start')
+ if( AppSchema ){
+ callback( null, AppSchema )
+ }else{
+ AppSchema = new LinvoDB('apps', exp.schema, {})
+ if( AppSchema ){
+ Logger.log('[DB MAIN] Registered on Database', exp.name, exp.dir + '/apps.db')
+ if( !global.settings.get('first_time') ){
+ callback( null, AppSchema )
+ }else{
+ // Load default apps data
+ var defaultData = require( upath.joinSafe(global.DIRS.INTERNAL_ROOT, 'misc', 'settings.json') ).apps
+ var toSave = Object.keys( defaultData ).map(( key ) => new AppSchema( defaultData[ key ] ) )
+ // Logger.log('[DB MAIN]', 'toSave', JSON.stringify(toSave, null, 2))
+ AppSchema.save(toSave, function( err ){
+ if( err ){
+ Logger.log('[DB MAIN] Unable to save default data on Database', this.name, err)
+ callback( err )
+ }else{
+ callback( null, AppSchema )
+ }
+ })
+ }
+ }else{
+ Logger.log('[DB MAIN] Unable to register on Database', this.name, err)
+ callback( 'BAD_INIT' )
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/main.js b/main.js
index d8e8c35..c8a7bb4 100755
--- a/main.js
+++ b/main.js
@@ -1,39 +1,43 @@
'use strict'
+const mainApp = require('electron').app
+
+mainApp.on('ready', () => {
+
// Entry point, set globals
// DEPS
+// DECLS{ upath }
+ global.upath = require('upath')
// Load utils
- const util = require( __dirname + '/system/utils' )
+ const util = require( upath.joinSafe(__dirname, '/system/utils' ) )
// DECLS{ progOpts, DIRS, upath, async, Logger, settings }
global.progOpts = Array.prototype.slice.call( process.argv, 2 )
- global.upath = require('upath')
- global.settings = (() => { let s = require('electron-settings'); return new s({debouncedSaveTime: 1}) })()
- global.async = require( __dirname + '/async' )
+ global.settings = require('electron-settings')
+ global.async = require( upath.joinSafe(__dirname, 'async' ) )
global.router = require('electron-router')('MAIN')
global.DIRS = {
- DB: upath.join( util.getBasePath(), 'database' ),
- LOG: upath.join( util.getBasePath(), 'log' ),
+ DB: upath.join( util.getConfigPath(), 'database' ),
+ LOG: upath.join( util.getConfigPath(), 'log' ),
APPS: upath.join( util.getConfigPath(), 'apps' ),
INTERNAL_ROOT: __dirname
}
- global.Logger = require( __dirname + '/system/Logger' ).Logger( global.DIRS.LOG, '*' )
+ global.Logger = require( upath.joinSafe(__dirname, '/system/Logger' ) ).Logger( global.DIRS.LOG, '*' )
global.settings.on('save', function(){ Logger.log('[GLOBAL SETTINGS]', 'SAVE ->', arguments) })
global.settings.on('err', function(){ Logger.log('[GLOBAL SETTINGS]', 'ERR ->', arguments) })
// Save refs
- const db = require( __dirname + '/db/db' )
- const UI = require( __dirname + '/ui/index')
- const apps = require( __dirname + '/apps/index' )
- const mainApp = require('electron').app
- let appReady = false
- mainApp.on('ready', () => { appReady = true })
+ const db = require( upath.joinSafe(__dirname, '/db/db' ) )
+ const UI = require( upath.joinSafe(__dirname, '/ui/index') )
+ const apps = require( upath.joinSafe(__dirname, '/apps/index' ) )
// Allow only one instance
- const shouldQuit = mainApp.makeSingleInstance( UI.handleSingleton )
- if( shouldQuit ){ mainApp.quit(); return; }
+ if( !mainApp.requestSingleInstanceLock() ){
+ UI.handleSingleton()
+ mainApp.quit()
+ return
+ }
-// Handle Interruption
- process.on('SIGINT', () => { Logger.log('SIGINT'); UI.end(); });
+ mainApp.on('second-instance', UI.handleSingleton)
// Start working
global.async.waterfall([
@@ -41,7 +45,7 @@
( callback ) => {
let localSettings = require( upath.join(__dirname, 'misc', 'settings.json') )
- if( Object.keys( settings.get() ).length === 0 ){
+ if( Object.keys( settings.getAll() ).length <= 2 ){
// First launch
// TODO => default config for rsvg
// default theme
@@ -68,6 +72,10 @@
mkdir.sync( upath.join( DIRS.APPS, 'system' ) )
mkdir.sync( upath.join( DIRS.APPS, 'native' ) )
+ Logger.log('[MAIN] Created dir', DIRS.DB)
+ Logger.log('[MAIN] Created dir', DIRS.APPS + '/system')
+ Logger.log('[MAIN] Created dir', DIRS.APPS + '/native')
+
callback( null, localSettings )
},
@@ -85,14 +93,12 @@
async.parallel([
// User Interface start
( callback ) => {
- if( appReady ){
- UI.start( mainApp, callback )
- }else{
- mainApp.on('ready', () => {
- appReady = true
- UI.start( mainApp, callback )
- })
- }
+ // Handle Interruption
+ process.on('SIGINT', () => {
+ Logger.log('SIGINT')
+ router.send('quit')
+ })
+ UI.start( mainApp, callback )
},
// Applications modules start
( callback ) => {
@@ -120,3 +126,4 @@
result = result || 'OK'
Logger.log('[MAIN] End ->', err ? err : result )
})
+})
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 9cfd8d1..d3a6499 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,14 +1,24 @@
{
"name": "Mutant",
+<<<<<<< HEAD
"version": "0.1.11",
+||||||| merged common ancestors
+ "version": "0.1.10",
+=======
+ "version": "1.0.0",
+>>>>>>> develop
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+ "@types/node": {
+ "version": "10.12.26",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.26.tgz",
+ "integrity": "sha512-nMRqS+mL1TOnIJrL6LKJcNZPB8V3eTfRo9FQA2b5gDvrHurC8XbSA86KNe0dShlEL7ReWJv/OU9NL7Z0dnqWTg=="
+ },
"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
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
},
"abstract-leveldown": {
"version": "2.6.3",
@@ -18,17 +28,21 @@
"xtend": "~4.0.0"
}
},
+ "ajv": {
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz",
+ "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==",
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
},
"append-stream": {
"version": "1.2.2",
@@ -38,30 +52,31 @@
"aproba": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "dev": true
+ "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=",
- "dev": true,
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
},
"dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"readable-stream": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -76,7 +91,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
@@ -86,66 +100,38 @@
"array-find-index": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
- "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
- "dev": true
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
},
"asar": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/asar/-/asar-0.8.3.tgz",
- "integrity": "sha1-wuA/kFRRbbv1Z1noVOnOjRqdOdM=",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/asar/-/asar-1.0.0.tgz",
+ "integrity": "sha512-MBiDU5cDr9UWuY2F0zq2fZlnyRq1aOPmJGMas22Qa14K1odpRXL3xkMHPN3uw2hAK5mD89Q+/KidOUtpi4V0Cg==",
"dev": true,
"requires": {
- "chromium-pickle-js": "0.1.0",
- "commander": "2.3.0",
- "cuint": "0.1.5",
- "glob": "^5.0.5",
- "minimatch": "2.0.4",
- "mkdirp": "^0.5.0",
- "mksnapshot": "0.1.0"
+ "chromium-pickle-js": "^0.2.0",
+ "commander": "^2.19.0",
+ "cuint": "^0.2.2",
+ "glob": "^7.1.3",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "pify": "^4.0.1",
+ "tmp-promise": "^1.0.5"
},
"dependencies": {
"commander": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz",
- "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=",
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
"dev": true
},
- "glob": {
- "version": "5.0.15",
- "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
- "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
- "dev": true,
- "requires": {
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "2 || 3",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
- "integrity": "sha1-g76hFYA+egl6eAIkJyh+23Yvr+0=",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.0.0"
- }
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
}
}
},
- "asn1": {
- "version": "0.1.11",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz",
- "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=",
- "dev": true
- },
- "assert-plus": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz",
- "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=",
- "dev": true
- },
"async": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
@@ -154,12 +140,22 @@
"lodash": "^4.14.0"
}
},
- "aws-sign2": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz",
- "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=",
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "author-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz",
+ "integrity": "sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA=",
"dev": true
},
+ "aws4": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
+ },
"backbone": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/backbone/-/backbone-1.3.3.tgz",
@@ -172,13 +168,7 @@
"version": "github:Ivshti/bagpipe#328cc576d682539d635af3a8c360696af353e44a",
"from": "github:Ivshti/bagpipe",
"requires": {
- "inherits": "github:Ivshti/inherits#0c5b02ddc4172bf2e55460916401ac37cfe6f9d3"
- },
- "dependencies": {
- "inherits": {
- "version": "github:Ivshti/inherits#0c5b02ddc4172bf2e55460916401ac37cfe6f9d3",
- "from": "github:Ivshti/inherits"
- }
+ "inherits": "github:Ivshti/inherits"
}
},
"balanced-match": {
@@ -187,19 +177,17 @@
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"base64-js": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
- "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
"dev": true
},
- "binary": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
- "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=",
- "dev": true,
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"requires": {
- "buffers": "~0.1.1",
- "chainsaw": "~0.1.0"
+ "tweetnacl": "^0.14.3"
}
},
"binary-search-tree": {
@@ -222,29 +210,6 @@
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz",
"integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE="
},
- "bl": {
- "version": "0.9.5",
- "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz",
- "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=",
- "dev": true,
- "requires": {
- "readable-stream": "~1.0.26"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- }
- }
- },
"block-stream": {
"version": "0.0.9",
"resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
@@ -252,23 +217,22 @@
"dev": true,
"requires": {
"inherits": "~2.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
}
},
"bluebird": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
- "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=",
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
+ "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==",
"dev": true
},
- "boom": {
- "version": "2.10.1",
- "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
- "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
- "dev": true,
- "requires": {
- "hoek": "2.x.x"
- }
- },
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -278,6 +242,22 @@
"concat-map": "0.0.1"
}
},
+ "buffer-alloc": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+ "dev": true,
+ "requires": {
+ "buffer-alloc-unsafe": "^1.1.0",
+ "buffer-fill": "^1.0.0"
+ }
+ },
+ "buffer-alloc-unsafe": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
+ "dev": true
+ },
"buffer-crc32": {
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
@@ -288,66 +268,40 @@
"resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
"integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs="
},
- "buffers": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
- "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=",
+ "buffer-fill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
"dev": true
},
"builtin-modules": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
- "dev": true
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
},
"camelcase": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
- "dev": true
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
},
"camelcase-keys": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
"integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
- "dev": true,
"requires": {
"camelcase": "^2.0.0",
"map-obj": "^1.0.0"
}
},
- "caseless": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.9.0.tgz",
- "integrity": "sha1-t7Zc5r8UE4hlOc/VM/CzDv+pz4g=",
- "dev": true
- },
- "chainsaw": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
- "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
- "dev": true,
- "requires": {
- "traverse": ">=0.3.0 <0.4"
- }
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
+ "chownr": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
+ "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g=="
},
"chromium-pickle-js": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.1.0.tgz",
- "integrity": "sha1-HUixB9ghJqLz4hHC6iX4A7pVGyE=",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz",
+ "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=",
"dev": true
},
"cli-cursor": {
@@ -376,11 +330,15 @@
"wrap-ansi": "^2.0.0"
}
},
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs="
+ },
"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=",
- "dev": true
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
},
"color-convert": {
"version": "1.9.1",
@@ -398,25 +356,22 @@
"dev": true
},
"colors": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.4.tgz",
- "integrity": "sha512-6Y+iBnWmXL+AWtlOp2Vr6R2w5MUlNJRwR0ShVFaAb1CqWzhPOpQg4L0jxD+xpw/Nc8QJwaq3KM79QUCriY8CWQ==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz",
+ "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==",
"dev": true
},
- "combined-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
- "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=",
- "dev": true,
- "requires": {
- "delayed-stream": "0.0.5"
- }
- },
"commander": {
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
"integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag=="
},
+ "compare-version": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz",
+ "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=",
+ "dev": true
+ },
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -426,24 +381,26 @@
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
"integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
- "dev": true,
"requires": {
"inherits": "^2.0.3",
"readable-stream": "^2.2.2",
"typedarray": "^0.0.6"
},
"dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"readable-stream": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -458,7 +415,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
@@ -468,40 +424,23 @@
"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=",
- "dev": true
+ "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="
},
- "cryptiles": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
- "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
- "dev": true,
- "requires": {
- "boom": "2.x.x"
- }
- },
- "ctype": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz",
- "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=",
- "dev": true
- },
"cuint": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.1.5.tgz",
- "integrity": "sha1-uEixhGbz8YD5bR624HzLfs8Sai4=",
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz",
+ "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=",
"dev": true
},
"currently-unhandled": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
"integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
- "dev": true,
"requires": {
"array-find-index": "^1.0.1"
}
@@ -514,6 +453,21 @@
"es5-ext": "^0.10.9"
}
},
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ }
+ }
+ },
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -525,45 +479,12 @@
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "decompress-zip": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.1.0.tgz",
- "integrity": "sha1-vOYMEWZPLWYPykvPY0r23l1sFMc=",
- "dev": true,
- "requires": {
- "binary": "^0.3.0",
- "graceful-fs": "^3.0.0",
- "mkpath": "^0.1.0",
- "nopt": "^3.0.1",
- "q": "^1.1.2",
- "readable-stream": "^1.1.8",
- "touch": "0.0.3"
- },
- "dependencies": {
- "graceful-fs": {
- "version": "3.0.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
- "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
- "dev": true,
- "requires": {
- "natives": "^1.1.0"
- }
- }
- }
- },
- "deep-diff": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz",
- "integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ="
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
},
"deep-extend": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz",
- "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==",
- "dev": true
+ "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w=="
},
"deferred-leveldown": {
"version": "1.2.2",
@@ -573,164 +494,419 @@
"abstract-leveldown": "~2.6.0"
}
},
- "delayed-stream": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz",
- "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=",
- "dev": true
- },
"delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
- "dev": true
+ "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=",
- "dev": true
+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
},
- "electron-download": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-1.4.1.tgz",
- "integrity": "sha1-T5G6vypVbxReP7hT32qWwoJeGM0=",
- "dev": true,
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"requires": {
- "debug": "^2.2.0",
- "home-path": "^1.0.1",
- "minimist": "^1.2.0",
- "mkdirp": "^0.5.0",
- "mv": "^2.0.3",
- "nugget": "^1.5.1",
- "path-exists": "^1.0.0",
- "rc": "^1.1.2"
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "electron": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/electron/-/electron-4.0.5.tgz",
+ "integrity": "sha512-UWFH6SrzNtzfvusGUFYxXDrgsUEbtBXkH/66hpDWxjA2Ckt7ozcYIujZpshbr7LPy8kV3ZRxIvoyCMdaS5DkVQ==",
+ "requires": {
+ "@types/node": "^10.12.18",
+ "electron-download": "^4.1.0",
+ "extract-zip": "^1.0.3"
},
"dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "electron-download": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz",
+ "integrity": "sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==",
+ "requires": {
+ "debug": "^3.0.0",
+ "env-paths": "^1.0.0",
+ "fs-extra": "^4.0.1",
+ "minimist": "^1.2.0",
+ "nugget": "^2.0.1",
+ "path-exists": "^3.0.0",
+ "rc": "^1.2.1",
+ "semver": "^5.4.1",
+ "sumchecker": "^2.0.2"
+ }
+ },
+ "fs-extra": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+ "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+ },
+ "nugget": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz",
+ "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=",
+ "requires": {
+ "debug": "^2.1.3",
+ "minimist": "^1.1.0",
+ "pretty-bytes": "^1.0.2",
+ "progress-stream": "^1.1.0",
+ "request": "^2.45.0",
+ "single-line-log": "^1.1.2",
+ "throttleit": "0.0.2"
+ },
+ "dependencies": {
+ "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"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "single-line-log": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz",
+ "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=",
+ "requires": {
+ "string-width": "^1.0.1"
+ }
}
}
},
- "electron-packager": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-5.2.0.tgz",
- "integrity": "sha1-4baqaDtlj707+cDMHdrNlw+LCVg=",
+ "electron-download": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz",
+ "integrity": "sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==",
"dev": true,
"requires": {
- "asar": "^0.8.2",
- "electron-download": "^1.0.0",
- "extract-zip": "^1.0.3",
- "minimist": "^1.1.1",
- "mkdirp": "^0.5.0",
- "mv": "^2.0.3",
- "ncp": "^2.0.0",
- "plist": "^1.1.0",
- "rcedit": "^0.3.0",
- "rimraf": "^2.3.2",
- "run-series": "^1.1.1"
+ "debug": "^3.0.0",
+ "env-paths": "^1.0.0",
+ "fs-extra": "^4.0.1",
+ "minimist": "^1.2.0",
+ "nugget": "^2.0.1",
+ "path-exists": "^3.0.0",
+ "rc": "^1.2.1",
+ "semver": "^5.4.1",
+ "sumchecker": "^2.0.2"
},
"dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "fs-extra": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+ "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
}
}
},
- "electron-rebuild": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-1.7.3.tgz",
- "integrity": "sha1-JK4GrZ3WHLfk1oiWH0kRjEChEOs=",
+ "electron-notarize": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-0.0.5.tgz",
+ "integrity": "sha512-YzrqZ6RDQ7Wt2RWlxzRoQUuxnTeXrfp7laH7XKcmQqrZ6GaAr50DMPvFMpqDKdrZSHSbcgZgB7ktIQbjvITmCQ==",
"dev": true,
"requires": {
- "colors": "^1.1.2",
- "debug": "^2.6.3",
- "detect-libc": "^1.0.3",
- "fs-extra": "^3.0.1",
- "node-abi": "^2.0.0",
- "node-gyp": "^3.6.0",
- "ora": "^1.2.0",
- "rimraf": "^2.6.1",
- "spawn-rx": "^2.0.10",
- "yargs": "^7.0.2"
+ "debug": "^4.1.0",
+ "fs-extra": "^7.0.0"
},
"dependencies": {
- "fs-extra": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
- "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^3.0.0",
- "universalify": "^0.1.0"
+ "ms": "^2.1.1"
}
},
- "jsonfile": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
- "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
+ "fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.6"
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
}
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
}
}
},
- "electron-router": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/electron-router/-/electron-router-0.4.1.tgz",
- "integrity": "sha1-tfNrD6RaMfHpooUHoBTBP96e2fU=",
+ "electron-osx-sign": {
+ "version": "0.4.11",
+ "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.11.tgz",
+ "integrity": "sha512-VVd40nrnVqymvFrY9ZkOYgHJOvexHHYTR3di/SN+mjJ0OWhR1I8BRVj3U+Yamw6hnkZZNKZp52rqL5EFAAPFkQ==",
+ "dev": true,
"requires": {
- "eventemitter3": "git+https://github.com/m0n0l0c0/eventemitter3.git#85bc9317cb6edfc43d185ee8e099b7379b08f645",
- "lodash": "^4.13.1",
- "uuid": "^3.0.0"
+ "bluebird": "^3.5.0",
+ "compare-version": "^0.1.2",
+ "debug": "^2.6.8",
+ "isbinaryfile": "^3.0.2",
+ "minimist": "^1.2.0",
+ "plist": "^3.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
}
},
- "electron-settings": {
- "version": "git+https://github.com/m0n0l0c0/electron-settings.git#40e4e1353500bc4f834b2797b92891f7b2166063",
- "from": "git+https://github.com/m0n0l0c0/electron-settings.git",
+ "electron-packager": {
+ "version": "13.1.0",
+ "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-13.1.0.tgz",
+ "integrity": "sha512-XHoDqgG90NGBfgUJ3NcOmELAuvHucOIYzi7AhZKIC8FivRR45PDs0pXSf53OqTXXOkdL/1xSveogvJLjKJwkAQ==",
+ "dev": true,
"requires": {
- "debug": "^2.2.0",
- "deep-diff": "^0.3.3",
- "ensure-array": "0.0.5",
- "fs-extra": "^0.26.0",
- "key-mirror": "^1.0.1",
- "lodash": "^3.10.1",
- "minimatch": "^3.0.0"
+ "asar": "^1.0.0",
+ "debug": "^4.0.1",
+ "electron-download": "^4.1.1",
+ "electron-notarize": "^0.0.5",
+ "electron-osx-sign": "^0.4.11",
+ "extract-zip": "^1.0.3",
+ "fs-extra": "^7.0.0",
+ "galactus": "^0.2.1",
+ "get-package-info": "^1.0.0",
+ "parse-author": "^2.0.0",
+ "pify": "^4.0.0",
+ "plist": "^3.0.0",
+ "rcedit": "^1.0.0",
+ "resolve": "^1.1.6",
+ "sanitize-filename": "^1.6.0",
+ "semver": "^5.3.0",
+ "yargs-parser": "^13.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz",
+ "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
+ },
+ "yargs-parser": {
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz",
+ "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "electron-rebuild": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-1.7.3.tgz",
+ "integrity": "sha1-JK4GrZ3WHLfk1oiWH0kRjEChEOs=",
+ "dev": true,
+ "requires": {
+ "colors": "^1.1.2",
+ "debug": "^2.6.3",
+ "detect-libc": "^1.0.3",
+ "fs-extra": "^3.0.1",
+ "node-abi": "^2.0.0",
+ "node-gyp": "^3.6.0",
+ "ora": "^1.2.0",
+ "rimraf": "^2.6.1",
+ "spawn-rx": "^2.0.10",
+ "yargs": "^7.0.2"
},
"dependencies": {
"fs-extra": {
- "version": "0.26.7",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz",
- "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
+ "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
+ "dev": true,
"requires": {
"graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0",
- "path-is-absolute": "^1.0.0",
- "rimraf": "^2.2.8"
+ "jsonfile": "^3.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "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"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
+ "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
}
},
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ }
+ }
+ },
+ "electron-router": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/electron-router/-/electron-router-0.4.2.tgz",
+ "integrity": "sha512-kexZOVfuc0lky2Zm31+R6Mo8WLWdTcyrgyZoei+Wkpk+wx2/Am08va+yYzZ5GpgsT4skxr6acKUbp8Lx67Rs5g==",
+ "requires": {
+ "eventemitter3": "git+https://github.com/m0n0l0c0/eventemitter3.git",
+ "lodash": "^4.17.11",
+ "uuid": "^3.0.0"
+ },
+ "dependencies": {
"lodash": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
- "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
}
}
},
- "ensure-array": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/ensure-array/-/ensure-array-0.0.5.tgz",
- "integrity": "sha1-NVvsw4LI65nWikm0UK6eboEQJxU="
+ "electron-settings": {
+ "version": "git+https://github.com/m0n0l0c0/electron-settings.git#97e1f55022b3447714c096c268c04199b553828f",
+ "from": "git+https://github.com/m0n0l0c0/electron-settings.git",
+ "requires": {
+ "clone": "^2.1.1",
+ "jsonfile": "^4.0.0"
+ }
+ },
+ "env-paths": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz",
+ "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA="
},
"erbs": {
- "version": "git+https://github.com/m0n0l0c0/erbs.git#d26813fe63fa17f0495ff14f20dd91ba2107b895",
+ "version": "git+https://github.com/m0n0l0c0/erbs.git#07694bdafab23087d9685f155ac011288d435cbb",
"from": "git+https://github.com/m0n0l0c0/erbs.git",
"requires": {
"electron-router": "*"
@@ -748,7 +924,6 @@
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
"integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
- "dev": true,
"requires": {
"is-arrayish": "^0.2.1"
}
@@ -826,11 +1001,15 @@
"version": "git+https://github.com/m0n0l0c0/eventemitter3.git#85bc9317cb6edfc43d185ee8e099b7379b08f645",
"from": "git+https://github.com/m0n0l0c0/eventemitter3.git"
},
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
"extract-zip": {
"version": "1.6.6",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz",
"integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=",
- "dev": true,
"requires": {
"concat-stream": "1.6.0",
"debug": "2.6.9",
@@ -842,13 +1021,27 @@
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
"integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=",
- "dev": true,
"requires": {
"minimist": "0.0.8"
}
}
}
},
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ },
"fastfall": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/fastfall/-/fastfall-1.5.1.tgz",
@@ -887,7 +1080,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
"integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
- "dev": true,
"requires": {
"pend": "~1.2.0"
}
@@ -896,7 +1088,6 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
"integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "dev": true,
"requires": {
"path-exists": "^2.0.0",
"pinkie-promise": "^2.0.0"
@@ -906,56 +1097,71 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
"integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
"requires": {
"pinkie-promise": "^2.0.0"
}
}
}
},
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "dev": true
- },
- "form-data": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz",
- "integrity": "sha1-Jvi8JtpkQOKZy9z7aQNcT3em5GY=",
+ "flora-colossus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/flora-colossus/-/flora-colossus-1.0.0.tgz",
+ "integrity": "sha1-VHKcNh7ezuAU3UQWeeGjfB13OkU=",
"dev": true,
"requires": {
- "async": "~0.9.0",
- "combined-stream": "~0.0.4",
- "mime-types": "~2.0.3"
+ "debug": "^3.1.0",
+ "fs-extra": "^4.0.0"
},
"dependencies": {
- "async": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
- "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "fs-extra": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+ "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"dev": true
}
}
},
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ },
"fs-extra": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.0.tgz",
- "integrity": "sha512-lk2cUCo8QzbiEWEbt7Cw3m27WMiRG321xsssbcIpfMhpRjrlC08WBOVQqj1/nQYYNnPtyIhP1oqLO3QwT2tPCw==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz",
+ "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==",
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
- },
- "dependencies": {
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- }
+ }
+ },
+ "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": {
@@ -973,13 +1179,59 @@
"inherits": "~2.0.0",
"mkdirp": ">=0.5 0",
"rimraf": "2"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "galactus": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/galactus/-/galactus-0.2.1.tgz",
+ "integrity": "sha1-y+0tIKQMH1Z5o1kI4rlBVzPnjbk=",
+ "dev": true,
+ "requires": {
+ "debug": "^3.1.0",
+ "flora-colossus": "^1.0.0",
+ "fs-extra": "^4.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "fs-extra": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+ "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
}
},
"gauge": {
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
- "dev": true,
"requires": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
@@ -991,44 +1243,123 @@
"wide-align": "^1.1.0"
}
},
- "generate-function": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
- "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
- "dev": true
- },
- "generate-object-property": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
- "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
- "dev": true,
- "requires": {
- "is-property": "^1.0.0"
- }
- },
"get-caller-file": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
"integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
"dev": true
},
+ "get-package-info": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-package-info/-/get-package-info-1.0.0.tgz",
+ "integrity": "sha1-ZDJ5ZWPigRPNlHTbvQAFKYWkmZw=",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.1.1",
+ "debug": "^2.2.0",
+ "lodash.get": "^4.0.0",
+ "read-pkg-up": "^2.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "dev": true,
+ "requires": {
+ "pify": "^2.0.0"
+ }
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^2.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
"get-stdin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
- "dev": true
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
},
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
+ "assert-plus": "^1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "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"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
}
},
"graceful-fs": {
@@ -1036,26 +1367,10 @@
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
},
- "har-validator": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-1.8.0.tgz",
- "integrity": "sha1-2DhCsOtMQ1lgrrEIoGejqpTA7rI=",
- "dev": true,
- "requires": {
- "bluebird": "^2.9.30",
- "chalk": "^1.0.0",
- "commander": "^2.8.1",
- "is-my-json-valid": "^2.12.0"
- }
- },
- "has-ansi": {
+ "har-schema": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
},
"has-flag": {
"version": "3.0.0",
@@ -1066,60 +1381,48 @@
"has-unicode": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "dev": true
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
},
"hat": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/hat/-/hat-0.0.3.tgz",
"integrity": "sha1-uwFKnmSzeIrtgAWRdBPU/z1QLYo="
},
- "hawk": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz",
- "integrity": "sha1-HnMc45RH+h0PbXB/e87r7A/R7B8=",
- "dev": true,
- "requires": {
- "boom": "2.x.x",
- "cryptiles": "2.x.x",
- "hoek": "2.x.x",
- "sntp": "1.x.x"
- }
- },
- "hoek": {
- "version": "2.16.3",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
- "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
- "dev": true
- },
- "home-path": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.5.tgz",
- "integrity": "sha1-eIspgVsS1Tus9XVkhHbm+QQdEz8=",
- "dev": true
- },
"hosted-git-info": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz",
- "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==",
- "dev": true
+ "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw=="
},
- "http-signature": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz",
- "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=",
- "dev": true,
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "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": {
- "asn1": "0.1.11",
- "assert-plus": "^0.1.5",
- "ctype": "0.5.3"
+ "minimatch": "^3.0.4"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
}
},
"indent-string": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
"integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
- "dev": true,
"requires": {
"repeating": "^2.0.0"
}
@@ -1134,15 +1437,13 @@
}
},
"inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ "version": "github:Ivshti/inherits#0c5b02ddc4172bf2e55460916401ac37cfe6f9d3",
+ "from": "github:Ivshti/inherits"
},
"ini": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
- "dev": true
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
},
"invert-kv": {
"version": "1.0.0",
@@ -1153,14 +1454,12 @@
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
},
"is-builtin-module": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
"integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
- "dev": true,
"requires": {
"builtin-modules": "^1.0.0"
}
@@ -1169,7 +1468,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
"integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
- "dev": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -1178,47 +1476,34 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
"requires": {
"number-is-nan": "^1.0.0"
}
},
- "is-my-ip-valid": {
+ "is-typedarray": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz",
- "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==",
- "dev": true
- },
- "is-my-json-valid": {
- "version": "2.17.2",
- "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz",
- "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==",
- "dev": true,
- "requires": {
- "generate-function": "^2.0.0",
- "generate-object-property": "^1.1.0",
- "is-my-ip-valid": "^1.0.0",
- "jsonpointer": "^4.0.0",
- "xtend": "^4.0.0"
- }
- },
- "is-property": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
- "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
- "dev": true
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
"is-utf8": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
- "dev": true
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
},
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
+ "isbinaryfile": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz",
+ "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==",
+ "dev": true,
+ "requires": {
+ "buffer-alloc": "^1.2.0"
+ }
+ },
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -1228,38 +1513,58 @@
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "dev": true
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"jquery": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz",
"integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg=="
},
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"requires": {
"graceful-fs": "^4.1.6"
}
},
- "jsonpointer": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
- "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
- "dev": true
- },
- "key-mirror": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/key-mirror/-/key-mirror-1.0.1.tgz",
- "integrity": "sha1-ChMtXIqCo6T8199zL/lRDQSrNms="
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ }
+ }
},
"keydir": {
"version": "2.1.1",
@@ -1269,14 +1574,6 @@
"ltgt": "^1.0.2"
}
},
- "klaw": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
- "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
- "requires": {
- "graceful-fs": "^4.1.9"
- }
- },
"lcid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
@@ -1308,6 +1605,13 @@
"level-errors": "^1.0.3",
"readable-stream": "^1.0.33",
"xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ }
}
},
"leveldown-open": {
@@ -1343,13 +1647,13 @@
"from": "git+https://github.com/m0n0l0c0/linvodb3.git",
"requires": {
"async": "1.x.x",
- "bagpipe": "github:Ivshti/bagpipe#328cc576d682539d635af3a8c360696af353e44a",
+ "bagpipe": "github:Ivshti/bagpipe",
"binary-search-tree": "0.2.6",
"hat": "0.0.3",
"levelup": "^1.2.1",
"path": "^0.12.7",
"underscore": "1.8.x",
- "util": "github:Ivshti/node-util#97b6beed8e0e478cd4184965ac94bf316f94e5f5"
+ "util": "github:Ivshti/node-util"
},
"dependencies": {
"async": {
@@ -1368,7 +1672,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
"integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
- "dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"parse-json": "^2.2.0",
@@ -1377,10 +1680,20 @@
"strip-bom": "^2.0.0"
}
},
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
"lodash": {
- "version": "4.17.10",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
- "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
},
"lodash.assign": {
"version": "4.2.0",
@@ -1388,6 +1701,12 @@
"integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
"dev": true
},
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "dev": true
+ },
"log-symbols": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
@@ -1432,7 +1751,6 @@
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
"integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
- "dev": true,
"requires": {
"currently-unhandled": "^0.4.1",
"signal-exit": "^3.0.0"
@@ -1446,8 +1764,7 @@
"map-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
- "dev": true
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
},
"medea": {
"version": "1.0.3",
@@ -1470,11 +1787,6 @@
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
"integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0="
- },
- "rimraf": {
- "version": "2.2.8",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
- "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI="
}
}
},
@@ -1503,7 +1815,6 @@
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
"integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
- "dev": true,
"requires": {
"camelcase-keys": "^2.0.0",
"decamelize": "^1.1.2",
@@ -1520,26 +1831,10 @@
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
}
}
},
- "mime-db": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz",
- "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=",
- "dev": true
- },
- "mime-types": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz",
- "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=",
- "dev": true,
- "requires": {
- "mime-db": "~1.12.0"
- }
- },
"mimic-fn": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
@@ -1550,6 +1845,7 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -1559,6 +1855,23 @@
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
},
+ "minipass": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
+ "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
+ "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
@@ -1567,45 +1880,6 @@
"minimist": "0.0.8"
}
},
- "mkpath": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz",
- "integrity": "sha1-dVSm+Nhxg0zJe1RisSLEwSTW3pE=",
- "dev": true
- },
- "mksnapshot": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/mksnapshot/-/mksnapshot-0.1.0.tgz",
- "integrity": "sha1-99CavKgGrYw3gNpwG7GHeNfOaaw=",
- "dev": true,
- "requires": {
- "decompress-zip": "0.1.0",
- "fs-extra": "0.18.2",
- "request": "2.55.0"
- },
- "dependencies": {
- "fs-extra": {
- "version": "0.18.2",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.18.2.tgz",
- "integrity": "sha1-rwXKcCsLbfp96AOh96tHnsXCFSU=",
- "dev": true,
- "requires": {
- "graceful-fs": "^3.0.5",
- "jsonfile": "^2.0.0",
- "rimraf": "^2.2.8"
- }
- },
- "graceful-fs": {
- "version": "3.0.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
- "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
- "dev": true,
- "requires": {
- "natives": "^1.1.0"
- }
- }
- }
- },
"monotonic-timestamp": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/monotonic-timestamp/-/monotonic-timestamp-0.0.8.tgz",
@@ -1616,57 +1890,20 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
- "mv": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
- "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=",
- "dev": true,
- "requires": {
- "mkdirp": "~0.5.1",
- "ncp": "~2.0.0",
- "rimraf": "~2.4.0"
- },
- "dependencies": {
- "glob": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
- "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
- "dev": true,
- "requires": {
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "2 || 3",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "rimraf": {
- "version": "2.4.5",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
- "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
- "dev": true,
- "requires": {
- "glob": "^6.0.1"
- }
- }
- }
- },
"nan": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
"integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA=="
},
- "natives": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.3.tgz",
- "integrity": "sha512-BZGSYV4YOLxzoTK73l0/s/0sH9l8SHs2ocReMH1f8JYSh5FUWu4ZrKCpJdRkWXV6HFR/pZDz7bwWOVAY07q77g==",
- "dev": true
- },
- "ncp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
- "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
- "dev": true
+ "needle": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz",
+ "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==",
+ "requires": {
+ "debug": "^2.1.2",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
},
"next-tick": {
"version": "1.0.0",
@@ -1703,6 +1940,35 @@
"which": "1"
},
"dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "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"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
"semver": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
@@ -1711,6 +1977,82 @@
}
}
},
+ "node-pre-gyp": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz",
+ "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==",
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "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"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "tar": {
+ "version": "4.4.8",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
+ "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==",
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.3.4",
+ "minizlib": "^1.1.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.2"
+ }
+ }
+ }
+ },
"nopt": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
@@ -1724,7 +2066,6 @@
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
"integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
- "dev": true,
"requires": {
"hosted-git-info": "^2.1.4",
"is-builtin-module": "^1.0.0",
@@ -1732,11 +2073,24 @@
"validate-npm-package-license": "^3.0.1"
}
},
+ "npm-bundled": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz",
+ "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g=="
+ },
+ "npm-packlist": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz",
+ "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==",
+ "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==",
- "dev": true,
"requires": {
"are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0",
@@ -1745,9 +2099,9 @@
}
},
"nugget": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/nugget/-/nugget-1.6.2.tgz",
- "integrity": "sha1-iMpuA7pXBqmRc/XaCQJZPWvK4Qc=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz",
+ "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=",
"dev": true,
"requires": {
"debug": "^2.1.3",
@@ -1755,7 +2109,7 @@
"pretty-bytes": "^1.0.2",
"progress-stream": "^1.1.0",
"request": "^2.45.0",
- "single-line-log": "^0.4.1",
+ "single-line-log": "^1.1.2",
"throttleit": "0.0.2"
},
"dependencies": {
@@ -1770,26 +2124,17 @@
"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=",
- "dev": true
- },
- "oauth-sign": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.6.0.tgz",
- "integrity": "sha1-fb6uRPbKRU4fFoRR1jB0ZzWBPOM=",
- "dev": true
+ "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=",
- "dev": true
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"object-keys": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
- "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
- "dev": true
+ "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY="
},
"once": {
"version": "1.4.0",
@@ -1854,8 +2199,7 @@
"os-homedir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
- "dev": true
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
},
"os-locale": {
"version": "1.4.0",
@@ -1869,24 +2213,54 @@
"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=",
- "dev": true
+ "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==",
- "dev": true,
"requires": {
"os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.0"
}
},
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "parse-author": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz",
+ "integrity": "sha1-00YL8d3Q367tQtp1QkLmX7aEqB8=",
+ "dev": true,
+ "requires": {
+ "author-regex": "^1.0.0"
+ }
+ },
"parse-json": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
"integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
"requires": {
"error-ex": "^1.2.0"
}
@@ -1898,12 +2272,27 @@
"requires": {
"process": "^0.11.1",
"util": "^0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "util": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ }
}
},
"path-exists": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz",
- "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
"dev": true
},
"path-is-absolute": {
@@ -1911,11 +2300,16 @@
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
"path-type": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
"integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
- "dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"pify": "^2.0.0",
@@ -1925,8 +2319,12 @@
"pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
- "dev": true
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"pidlockfile": {
"version": "1.1.1",
@@ -1936,33 +2334,29 @@
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
},
"pinkie": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
- "dev": true
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
},
"pinkie-promise": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
- "dev": true,
"requires": {
"pinkie": "^2.0.0"
}
},
"plist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz",
- "integrity": "sha1-CEtQk93JJQbiWfh0uNmxr7jHlZM=",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz",
+ "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==",
"dev": true,
"requires": {
- "base64-js": "0.0.8",
- "util-deprecate": "1.0.2",
- "xmlbuilder": "4.0.0",
+ "base64-js": "^1.2.3",
+ "xmlbuilder": "^9.0.7",
"xmldom": "0.1.x"
}
},
@@ -1970,7 +2364,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
"integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
- "dev": true,
"requires": {
"get-stdin": "^4.0.1",
"meow": "^3.1.0"
@@ -1984,14 +2377,12 @@
"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==",
- "dev": true
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
},
"progress-stream": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz",
"integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=",
- "dev": true,
"requires": {
"speedometer": "~0.1.2",
"through2": "~0.2.3"
@@ -2002,29 +2393,20 @@
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
},
+ "psl": {
+ "version": "1.1.31",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
+ "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw=="
+ },
"punycode": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
- "dev": true
- },
- "q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
- "dev": true
- },
- "qs": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-2.4.2.tgz",
- "integrity": "sha1-9854jld33wtQENp/fE5zujJHD1o=",
- "dev": true
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
},
"rc": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz",
"integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==",
- "dev": true,
"requires": {
"deep-extend": "^0.5.1",
"ini": "~1.3.0",
@@ -2035,22 +2417,20 @@
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
}
}
},
"rcedit": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-0.3.0.tgz",
- "integrity": "sha1-y17uGF5Ub57aWXwkjJkGGG+pa84=",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-1.1.1.tgz",
+ "integrity": "sha512-6NjOhOpkvbc/gpMEfk2hpXuWyHfbLFN8as5jx3jf4bhELvouRoYvc8d/W3NVVPwEBF1ICfbpwp1oRm8OJ2WDWw==",
"dev": true
},
"read-pkg": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
"integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
- "dev": true,
"requires": {
"load-json-file": "^1.0.0",
"normalize-package-data": "^2.3.2",
@@ -2061,7 +2441,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
"integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
- "dev": true,
"requires": {
"find-up": "^1.0.0",
"read-pkg": "^1.0.0"
@@ -2076,13 +2455,19 @@
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ }
}
},
"redent": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
"integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
- "dev": true,
"requires": {
"indent-string": "^2.1.0",
"strip-indent": "^1.0.1"
@@ -2092,597 +2477,337 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
"integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
- "dev": true,
- "requires": {
- "is-finite": "^1.0.0"
- }
- },
- "request": {
- "version": "2.55.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.55.0.tgz",
- "integrity": "sha1-11wc32eddrsQD5v/4f5VG1wk6T0=",
- "dev": true,
- "requires": {
- "aws-sign2": "~0.5.0",
- "bl": "~0.9.0",
- "caseless": "~0.9.0",
- "combined-stream": "~0.0.5",
- "forever-agent": "~0.6.0",
- "form-data": "~0.2.0",
- "har-validator": "^1.4.0",
- "hawk": "~2.3.0",
- "http-signature": "~0.10.0",
- "isstream": "~0.1.1",
- "json-stringify-safe": "~5.0.0",
- "mime-types": "~2.0.1",
- "node-uuid": "~1.4.0",
- "oauth-sign": "~0.6.0",
- "qs": "~2.4.0",
- "stringstream": "~0.0.4",
- "tough-cookie": ">=0.12.0",
- "tunnel-agent": "~0.4.0"
- },
- "dependencies": {
- "node-uuid": {
- "version": "1.4.8",
- "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz",
- "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=",
- "dev": true
- }
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
- },
- "require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
- "dev": true
- },
- "restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "dev": true,
- "requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- }
- },
- "reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
- },
- "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"
- }
- },
- "run-parallel": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
- "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q=="
- },
- "run-series": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.8.tgz",
- "integrity": "sha512-+GztYEPRpIsQoCSraWHDBs9WVy4eVME16zhOtDB4H9J4xN0XRhknnmLOl+4gRgZtu8dpp9N/utSPjKH/xmDzXg==",
- "dev": true
- },
- "rxjs": {
- "version": "5.5.10",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.10.tgz",
- "integrity": "sha512-SRjimIDUHJkon+2hFo7xnvNC4ZEHGzCRwh9P7nzX3zPkCGFEg/tuElrNR7L/rZMagnK2JeH2jQwPRpmyXyLB6A==",
- "dev": true,
- "requires": {
- "symbol-observable": "1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "semver": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
- "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg=="
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
- "dev": true
- },
- "single-line-log": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-0.4.1.tgz",
- "integrity": "sha1-h6VWSfdJ14PsDc2AToFA2Yc8fO4=",
- "dev": true
- },
- "sntp": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
- "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
- "dev": true,
- "requires": {
- "hoek": "2.x.x"
- }
- },
- "spawn-rx": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/spawn-rx/-/spawn-rx-2.0.12.tgz",
- "integrity": "sha512-gOPXiQQFQ9lTOLuys0iMn3jfxxv9c7zzwhbYLOEbQGvEShHVJ5sSR1oD3Daj88os7jKArDYT7rbOKdvNhe7iEg==",
- "dev": true,
- "requires": {
- "debug": "^2.5.1",
- "lodash.assign": "^4.2.0",
- "rxjs": "^5.1.1"
- }
- },
- "spdx-correct": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
- "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
- "dev": true,
"requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
- "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
- "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
- "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
- "dev": true
- },
- "speedometer": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz",
- "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=",
- "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",
- "bundled": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- },
- "are-we-there-yet": {
- "version": "1.1.4",
- "bundled": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.0.1",
- "bundled": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true
- },
- "debug": {
- "version": "2.6.9",
- "bundled": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "deep-extend": {
- "version": "0.4.2",
- "bundled": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true
- },
- "fs-minipass": {
- "version": "1.2.5",
- "bundled": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "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",
- "bundled": true,
- "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",
- "bundled": true
- },
- "iconv-lite": {
- "version": "0.4.19",
- "bundled": true
- },
- "ignore-walk": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "bundled": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true
- },
- "minipass": {
- "version": "2.2.1",
- "bundled": true,
- "requires": {
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.0.0",
- "bundled": true
- },
- "nan": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz",
- "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw=="
- },
- "needle": {
- "version": "2.2.0",
- "bundled": true,
- "requires": {
- "debug": "^2.1.2",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.9.0",
- "bundled": true,
- "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",
- "bundled": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.0.3",
- "bundled": true
- },
- "npm-packlist": {
- "version": "1.1.10",
- "bundled": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "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",
- "bundled": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
+ "is-finite": "^1.0.0"
+ }
+ },
+ "request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ },
+ "combined-stream": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
+ "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
"requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
+ "delayed-stream": "~1.0.0"
}
},
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "bundled": true
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
- "rc": {
- "version": "1.2.6",
- "bundled": true,
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"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",
- "bundled": true
- }
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
}
},
- "readable-stream": {
- "version": "2.3.5",
- "bundled": true,
+ "har-validator": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
"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"
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
}
},
- "rimraf": {
- "version": "2.6.2",
- "bundled": true,
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"requires": {
- "glob": "^7.0.5"
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
}
},
- "safe-buffer": {
- "version": "5.1.1",
- "bundled": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true
- },
- "semver": {
- "version": "5.5.0",
- "bundled": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
+ "mime-db": {
+ "version": "1.38.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz",
+ "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg=="
},
- "string_decoder": {
- "version": "1.0.3",
- "bundled": true,
+ "mime-types": {
+ "version": "2.1.22",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz",
+ "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==",
"requires": {
- "safe-buffer": "~5.1.0"
+ "mime-db": "~1.38.0"
}
},
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
"requires": {
- "ansi-regex": "^2.0.0"
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
}
},
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true
- },
- "tar": {
- "version": "4.4.0",
- "bundled": true,
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"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"
+ "safe-buffer": "^5.0.1"
}
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true
- },
- "wide-align": {
- "version": "1.1.2",
- "bundled": true,
+ }
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "require-no-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/require-no-cache/-/require-no-cache-0.2.1.tgz",
+ "integrity": "sha1-8Rxu/uD9kaBH4FcbMdBu0wdf+mg=",
+ "requires": {
+ "stack-trace": "0.0.9"
+ }
+ },
+ "resolve": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
+ "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
+ },
+ "rimraf": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
+ "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI="
+ },
+ "run-parallel": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
+ "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q=="
+ },
+ "rxjs": {
+ "version": "5.5.10",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.10.tgz",
+ "integrity": "sha512-SRjimIDUHJkon+2hFo7xnvNC4ZEHGzCRwh9P7nzX3zPkCGFEg/tuElrNR7L/rZMagnK2JeH2jQwPRpmyXyLB6A==",
+ "dev": true,
+ "requires": {
+ "symbol-observable": "1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "sanitize-filename": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz",
+ "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=",
+ "dev": true,
+ "requires": {
+ "truncate-utf8-bytes": "^1.0.0"
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg=="
+ },
+ "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="
+ },
+ "single-line-log": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz",
+ "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1"
+ }
+ },
+ "spawn-rx": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/spawn-rx/-/spawn-rx-2.0.12.tgz",
+ "integrity": "sha512-gOPXiQQFQ9lTOLuys0iMn3jfxxv9c7zzwhbYLOEbQGvEShHVJ5sSR1oD3Daj88os7jKArDYT7rbOKdvNhe7iEg==",
+ "dev": true,
+ "requires": {
+ "debug": "^2.5.1",
+ "lodash.assign": "^4.2.0",
+ "rxjs": "^5.1.1"
+ }
+ },
+ "spdx-correct": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+ "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg=="
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA=="
+ },
+ "speedometer": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz",
+ "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0="
+ },
+ "sqlite3": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.6.tgz",
+ "integrity": "sha512-EqBXxHdKiwvNMRCgml86VTL5TK1i0IKiumnfxykX0gh6H6jaKijAXvE9O1N7+omfNSawR2fOmIyJZcfe8HYWpw==",
+ "requires": {
+ "nan": "~2.10.0",
+ "node-pre-gyp": "^0.11.0",
+ "request": "^2.87.0"
+ }
+ },
+ "sshpk": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ },
+ "dependencies": {
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
"requires": {
- "string-width": "^1.0.2"
+ "safer-buffer": "~2.1.0"
}
},
- "wrappy": {
- "version": "1.0.2",
- "bundled": true
- },
- "yallist": {
- "version": "3.0.2",
- "bundled": true
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
}
}
},
+ "stack-trace": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz",
+ "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU="
+ },
"steed": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/steed/-/steed-1.1.3.tgz",
@@ -2699,7 +2824,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -2711,17 +2835,10 @@
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
},
- "stringstream": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
- "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
- "dev": true
- },
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@@ -2730,7 +2847,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
"integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
- "dev": true,
"requires": {
"is-utf8": "^0.2.0"
}
@@ -2739,7 +2855,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
"integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
- "dev": true,
"requires": {
"get-stdin": "^4.0.1"
}
@@ -2747,14 +2862,15 @@
"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=",
- "dev": true
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
},
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
+ "sumchecker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz",
+ "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=",
+ "requires": {
+ "debug": "^2.2.0"
+ }
},
"symbol-observable": {
"version": "1.0.1",
@@ -2771,19 +2887,25 @@
"block-stream": "*",
"fstream": "^1.0.2",
"inherits": "2"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
}
},
"throttleit": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
- "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=",
- "dev": true
+ "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8="
},
"through2": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
"integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=",
- "dev": true,
"requires": {
"readable-stream": "~1.1.9",
"xtend": "~2.1.1"
@@ -2793,65 +2915,54 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
"integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
- "dev": true,
"requires": {
"object-keys": "~0.4.0"
}
}
}
},
- "touch": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/touch/-/touch-0.0.3.tgz",
- "integrity": "sha1-Ua7z1ElXHU8oel2Hyci0kYGg2x0=",
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
"dev": true,
"requires": {
- "nopt": "~1.0.10"
- },
- "dependencies": {
- "nopt": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
- "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
- "dev": true,
- "requires": {
- "abbrev": "1"
- }
- }
+ "os-tmpdir": "~1.0.2"
}
},
- "tough-cookie": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
- "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
+ "tmp-promise": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-1.0.5.tgz",
+ "integrity": "sha512-hOabTz9Tp49wCozFwuJe5ISrOqkECm6kzw66XTP23DuzNU7QS/KiZq5LC9Y7QSy8f1rPSLy4bKaViP0OwGI1cA==",
"dev": true,
"requires": {
- "punycode": "^1.4.1"
+ "bluebird": "^3.5.0",
+ "tmp": "0.0.33"
}
},
- "traverse": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
- "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=",
- "dev": true
- },
"trim-newlines": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
- "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
- "dev": true
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
},
- "tunnel-agent": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
- "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
- "dev": true
+ "truncate-utf8-bytes": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
+ "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=",
+ "dev": true,
+ "requires": {
+ "utf8-byte-length": "^1.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
},
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
"underscore": {
"version": "1.9.0",
@@ -2868,40 +2979,70 @@
"resolved": "https://registry.npmjs.org/upath/-/upath-1.0.5.tgz",
"integrity": "sha512-qbKn90aDQ0YEwvXoLqj0oiuUYroLX2lVHZ+b+xwjozFasAOC4GneDq5+OaIG5Zj+jFmbz/uO+f7a9qxjktJQww=="
},
- "util": {
- "version": "github:Ivshti/node-util#97b6beed8e0e478cd4184965ac94bf316f94e5f5",
- "from": "github:Ivshti/node-util",
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
"requires": {
- "inherits": "github:Ivshti/inherits#0c5b02ddc4172bf2e55460916401ac37cfe6f9d3"
+ "punycode": "^2.1.0"
},
"dependencies": {
- "inherits": {
- "version": "github:Ivshti/inherits#0c5b02ddc4172bf2e55460916401ac37cfe6f9d3",
- "from": "github:Ivshti/inherits"
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
}
}
},
+ "utf8-byte-length": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
+ "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=",
+ "dev": true
+ },
+ "util": {
+ "version": "github:Ivshti/node-util#97b6beed8e0e478cd4184965ac94bf316f94e5f5",
+ "from": "github:Ivshti/node-util",
+ "requires": {
+ "inherits": "github:Ivshti/inherits"
+ }
+ },
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"uuid": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
- "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
"validate-npm-package-license": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
"integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
- "dev": true,
"requires": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
}
},
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ }
+ }
+ },
"which": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
@@ -2921,7 +3062,6 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
"integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
- "dev": true,
"requires": {
"string-width": "^1.0.2"
}
@@ -2942,21 +3082,10 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"xmlbuilder": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.0.0.tgz",
- "integrity": "sha1-mLj2UcowqmJANvEn0RzGbce5B6M=",
- "dev": true,
- "requires": {
- "lodash": "^3.5.0"
- },
- "dependencies": {
- "lodash": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
- "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
- "dev": true
- }
- }
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+ "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
+ "dev": true
},
"xmldom": {
"version": "0.1.27",
@@ -2975,6 +3104,11 @@
"integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
"dev": true
},
+ "yallist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A=="
+ },
"yargs": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
@@ -3025,7 +3159,6 @@
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
"integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
- "dev": true,
"requires": {
"fd-slicer": "~1.0.1"
}
diff --git a/package.json b/package.json
index 7d398a6..e4b5adc 100755
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "Mutant",
- "version": "0.1.11",
+ "version": "1.0.0",
"license": "MIT",
"description": "Productivity launcher",
"author": "Guillermo Blanco",
@@ -17,23 +17,25 @@
"async": "~2.6.0",
"backbone": "~1.3.3",
"commander": "~2.15.1",
- "electron-router": "~0.4.1",
+ "electron": "^4.0.5",
+ "electron-router": "^0.4.2",
"electron-settings": "git+https://github.com/m0n0l0c0/electron-settings.git",
"erbs": "git+https://github.com/m0n0l0c0/erbs.git",
"fs-extra": "~6.0.0",
"jquery": "~3.3.1",
"librsvg": "~0.7.0",
"linvodb3": "git+https://github.com/m0n0l0c0/linvodb3.git",
- "lodash": "~4.17.10",
+ "lodash": "^4.17.11",
"medeadown": "~1.1.9",
"mkdirp": "~0.5.1",
- "sqlite3": "~4.0",
+ "require-no-cache": "^0.2.1",
+ "sqlite3": "^4.0.6",
"steed": "~1.1.3",
"underscore": "~1.9.0",
"upath": "~1.0.5"
},
"devDependencies": {
- "electron-packager": "^5.1.0",
+ "electron-packager": "^13.1.0",
"electron-rebuild": "^1.6.0"
},
"scripts": {
diff --git a/system/Logger.js b/system/Logger.js
index ec05982..f5a6f81 100755
--- a/system/Logger.js
+++ b/system/Logger.js
@@ -1,74 +1,76 @@
'use strict'
-const fs = require('fs')
const mkdir = require('mkdirp')
-const utils = require( __dirname + '/utils' )
+const utils = require( global.upath.joinSafe(__dirname, 'utils') )
+const { existsSync, createWriteStream } = require('fs')
+
const extractor = /^\[(.*)\]/
+const marker = '\n\n================ START ================\n'
-let _pickUntakenName = ( baseDir ) => {
- let dir = null
- if( baseDir ){
- let today = (new Date().toLocaleDateString()).replace(/\//g, '-')
- let tries = 0
- let dotExt = '.log'
- dir = `${baseDir}/${today}${dotExt}`
- while( fs.existsSync( `${dir}` )) dir = `${baseDir}/${today} (${++tries})${dotExt}`
- }else{
- console.log('[LOGGER] Err -> Could not find config path')
+class Logger {
+ constructor(baseDir, filter) {
+ // Ensure dir and exists
+ baseDir = baseDir || `${util.getConfigPath()}/log`
+ mkdir.sync( baseDir )
+ // Setup filter
+ this.filterStr = filter || '*'
+ // Ensure log name
+ this.logFile = this._pickName( baseDir )
+ if( this.logFile ){
+ let streamer = createWriteStream(this.logFile, { flags: 'a' })
+ this.ownLogger = new console.Console( streamer, streamer )
+ }else{
+ // Dummy object, just in case...
+ this.ownLogger = { log: () => { console.log('[LOGGER] ERR: NO_LOG_DIR') } }
+ }
+ this.ownLogger.log(marker)
}
- return dir
-}
-let _prettyDate = () => {
- let date = new Date()
- let ret = `${date.getHours()}`
- if( date.getHours() < 100 ){
- ret = `0${date.getHours()}`
- }
- ret += `:${date.getMinutes()}`
- if( date.getMilliseconds() < 100 ){
- ret += `:0${date.getMilliseconds()}`
- }else{
- ret += `:${date.getMilliseconds()}`
+ _prettyDate() {
+ let date = new Date()
+ let hours = `${date.getHours()}`
+ let minutes = `${date.getMinutes()}`
+ let seconds = `${date.getSeconds()}`
+ let millis = `${date.getMilliseconds()}`
+ if( hours < 10 ){
+ hours = `0${date.getHours()}`
+ }
+ if( minutes < 10 ){
+ minutes = `0${date.getMinutes()}`
+ }
+ if( seconds < 10 ){
+ seconds = `0${date.getSeconds()}`
+ }
+ if( millis < 100 ){
+ millis = `0${date.getMilliseconds()}`
+ }
+ return `[${hours}:${minutes}:${seconds}.${millis}]`
}
- return `[${ret}]`
-}
-let Logger = function( baseDir, filter ){
- // Ensure dir and exists
- baseDir = baseDir || `${util.getBasePath()}/log`
- mkdir.sync( baseDir )
- // Setup filter
- this.filterStr = filter || '*'
- // Ensure log name
- this.logDir = _pickUntakenName( baseDir )
- if( this.logDir ){
- let streamer = fs.createWriteStream( this.logDir )
- this.ownLogger = new console.Console( streamer, streamer )
- }else{
- // Dummy object, just in case...
- this.ownLogger = { log: ()=>{ console.log('[LOGGER] ERR: NO_LOG_DIR') } }
+ _pickName( baseDir ) {
+ let today = (new Date().toLocaleDateString()).replace(/\//g, '_')
+ return `${baseDir}/${today}.log`
}
-}
-Logger.prototype.log = function(){
- let args = [ _prettyDate() ].concat( Array.prototype.slice.call( arguments, 0 ) )
- // console.log.apply( console, ['[LOGGER CALLED]'].concat( args ) )
- if( this.filterInput( args[ 0 ] ) ){
- console.log.apply( console, args )
- this.ownLogger.log.apply( this.ownLogger, args )
+ log() {
+ let args = [ this._prettyDate() ].concat( Array.prototype.slice.call( arguments, 0 ) )
+ // console.log.apply( console, ['[LOGGER CALLED]'].concat( args ) )
+ if( this.filterInput( args[ 0 ] ) ){
+ console.log.apply( console, args )
+ this.ownLogger.log.apply( this.ownLogger, args )
+ }
}
-}
-Logger.prototype.filterInput = function( str ){
- let ret = true
- if( this.filterStr !== '*' ){
- let source = str.match( extractor )
- if( !source || this.filterStr.toLowerCase() !== source[ 1 ].toLowerCase() ){
- ret = false
+ filterInput( str ) {
+ let ret = true
+ if( this.filterStr !== '*' ){
+ let source = str.match( extractor )
+ if( !source || this.filterStr.toLowerCase() !== source[ 1 ].toLowerCase() ){
+ ret = false
+ }
}
+ return ret
}
- return ret
}
module.exports.Logger = ( baseDir, filter ) => new Logger( baseDir, filter )
\ No newline at end of file
diff --git a/system/utils.js b/system/utils.js
index d661e3c..88decba 100755
--- a/system/utils.js
+++ b/system/utils.js
@@ -4,7 +4,7 @@ let _getConfigPath = () => {
let conf = null
if( global.settings ){
// => /Users/Nathan/Library/Application Support/Electron/electron-settings/settings.json
- conf = global.settings.getConfigFilePath()
+ conf = global.settings.file()
conf = conf.split('/')
// => /Users/Nathan/Library/Application Support/Electron/electron-settings/
conf.pop()
@@ -13,19 +13,4 @@ let _getConfigPath = () => {
return conf
}
-let _getBasePath = () => {
- // => /Users/Nathan/Library/Application Support/Electron/electron-settings/
- let baseDir = _getConfigPath()
- if( baseDir ){
- baseDir = baseDir.split('/')
- baseDir.pop()
- // => /Users/Nathan/Library/Application Support/Electron/
- baseDir = baseDir.join('/')
- // => /Users/Nathan/Library/Application Support/Electron
- // baseDir = baseDir.replace(/\/$/, '')
- }
- return baseDir
-}
-
module.exports.getConfigPath = _getConfigPath
-module.exports.getBasePath = _getBasePath
\ No newline at end of file
diff --git a/ui/html/settings.html b/ui/html/settings.html
index 377019d..8973c82 100755
--- a/ui/html/settings.html
+++ b/ui/html/settings.html
@@ -2,62 +2,62 @@
-
-
-
-
-
-
-
-
-
- The Mutant - Settings
+
+
+
+
+
+
+
+
+
+ The Mutant - Settings
-
-
- Preferences
-
-
-
-
-
- Icon |
- Command |
- URL/Location |
- Shortcut |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ Preferences
+
+
+
+
+
+ Icon |
+ Command |
+ URL/Location |
+ Shortcut |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ui/index.js b/ui/index.js
index 6774d29..c65f35d 100755
--- a/ui/index.js
+++ b/ui/index.js
@@ -25,7 +25,7 @@ let windowParams = {
}
// ******** WINDOW HANDLES *********
-let _requestSize = function( noElems, size ){
+function _requestSize( noElems, size ){
//Logger.log('requestSize', 1, arguments)
Logger.log('[UI MAIN WINDOW] Requested size change', noElems, size)
let dim = mainWindow.getContentSize()
@@ -35,7 +35,7 @@ let _requestSize = function( noElems, size ){
// *********************************
// ******** VISUAL HANDLES *********
-let _showWindow = function(){
+function _showWindow(){
// Locate display mouse
let displ = screen.getDisplayNearestPoint( screen.getCursorScreenPoint() );
// Get dimensions
@@ -58,20 +58,20 @@ let _showWindow = function(){
mainWindow.focus();
}
-let _handleShortcut = function( evt ){
- //Logger.log('Handle', evt);
- function _shut(){
- //Logger.log('_shut');
- if( mainWindow.isVisible() ){
- //Logger.log('InVisible');
- mainWindow.hide();
- mainWindow.send('halt');
- }
- if( globalShortcut.isRegistered('Esc') ){
- globalShortcut.unregister('Esc');
- }
- router.send('UI::hide');
+function _shut(){
+ //Logger.log('_shut');
+ if( mainWindow.isVisible() ){
+ //Logger.log('InVisible');
+ mainWindow.hide();
+ mainWindow.send('halt');
+ }
+ if( globalShortcut.isRegistered('Esc') ){
+ globalShortcut.unregister('Esc');
}
+ router.send('UI::hide');
+}
+
+function _handleShortcut( evt ){
if( evt === 'TOGGLE' ){
//Logger.log('TOGGLE');
if( mainWindow.isVisible() ){
@@ -92,7 +92,7 @@ let _handleShortcut = function( evt ){
// *********************************
// ************* SETUP *************
-let _createWindow = function(){
+function _createWindow(){
// General Setup
screen = electron.screen;
Logger.log('[UI MAIN WINDOW] Create window');
@@ -120,12 +120,12 @@ let _createWindow = function(){
// Load the main window.
Logger.log('[UI MAIN WINDOW] Load index');
- mainWindow.loadURL('file://' + upath.join( __dirname, 'html/index.html' ));
+ mainWindow.loadURL('file://' + global.upath.joinSafe( __dirname, 'html/index.html' ));
// mainWindow.openDevTools();
}
-let _registerShortcutEvents = function(){
- let launchShortcut = settings.get('shortcuts')['launch'].cmd;
+function _registerShortcutEvents(){
+ let launchShortcut = global.settings.get('shortcuts')['launch'].cmd;
// Register shortcut
Logger.log('[UI MAIN WINDOW] Register shortcut 1/2');
let reg = globalShortcut.register( launchShortcut, () => { _handleShortcut('TOGGLE') });
@@ -136,7 +136,7 @@ let _registerShortcutEvents = function(){
if(!reg) Logger.log('[UI MAIN WINDOW] Failed registering Esc')
}
-let _registerWindowClose = function( callback ){
+function _registerWindowClose( callback ){
mainWindow.on('blur', _handleShortcut);
Logger.log('[UI MAIN WINDOW] Register close 1/2');
let closeTries = 0;
@@ -150,7 +150,7 @@ let _registerWindowClose = function( callback ){
mainWindow.on('closed', callback);
}
-let _registerWindowEvents = function( callback ){
+function _registerWindowEvents( callback ){
// Setup bindings for duplex communication.
// Pass a function to the bridge so that it can call it when it needs anything,
// by now just hide and quit
@@ -164,10 +164,10 @@ let _registerWindowEvents = function( callback ){
router.on('requestSize', _requestSize );
- router.on('launch', ( app ) => {
- Logger.log('[UI MAIN WINDOW] launch', app.name);
+ router.on('launch', ( data ) => {
+ Logger.log('[UI MAIN WINDOW] launch', data.app.name);
router.send('hide');
- router.send('launchApp', app)
+ router.send('launchApp', data)
})
router.on('hide', () => {
@@ -179,10 +179,9 @@ let _registerWindowEvents = function( callback ){
Logger.log('[UI MAIN WINDOW] Received `quit` evt')
callback()
});
-
}
-let _registerEvents = function( callback ){
+function _registerEvents( callback ){
let cb = callback
// Register evts and shortcuts
_registerShortcutEvents();
@@ -201,12 +200,12 @@ let _registerEvents = function( callback ){
}
// *********************************
-let _main = function( callback ) {
+function _main( callback ) {
_createWindow();
_registerEvents( callback );
}
-let _ready = function( elApp, callback ){
+function _ready( elApp, callback ){
Logger.log('[UI MAIN WINDOW] Start');
// Quit when all windows are closed.
app = elApp;
@@ -222,17 +221,20 @@ let _ready = function( elApp, callback ){
})
}
-let _clean = function( callback ){
- Logger.log('[UI MAIN WINDOW] Quit evt');
+function _clean( callback ){
+ Logger.log('[UI MAIN WINDOW] Quit evt')
// mainWindow.removeAllListeners();
// ipc.removeAllListeners();
// globalShortcut.unregisterAll();
- Logger.log('[UI MAIN WINDOW] Killing window');
+ Logger.log('[UI MAIN WINDOW] Killing window')
// mainWindow = null;
- callback();
+ if( typeof callback !== 'function' ){
+ callback = () => {}
+ }
+ callback()
}
-let _singleton = function(){
+function _singleton(){
// Someone tried to run a second instance, we should focus our window.
Logger.log('[UI MAIN WINDOW] ShouldQuit, an instance is already running')
if( mainWindow ){
diff --git a/ui/js/app-settings.js b/ui/js/app-settings.js
index 62dafe4..ad8cfab 100755
--- a/ui/js/app-settings.js
+++ b/ui/js/app-settings.js
@@ -1,24 +1,24 @@
'use strict'
-var app = app || {};
-var buffer = [];
+var app = app || {}
+var buffer = []
const STATES = {
- IDLE : 'IDLE',
- REC : 'REC'
+ IDLE : 'IDLE',
+ REC : 'REC'
};
app.STATE = STATES.IDLE;
$(function(){
- var r = Router('UI::PREFERENCES')
- new app.AppView();
+ var r = Router('UI::PREFERENCES')
+ new app.AppView()
}).keydown(function( event ){
- if( app.STATE === STATES.REC ){
- var key = keys.getCharFromCode( event.which );
- if( key !== null ){
- //console.log('This should be recorded', event.which, keys.getCharFromCode( event.which ));
- app.Items.selected().trigger('appendShortcut', key, event);
- }
- }
+ if( app.STATE === STATES.REC ){
+ var key = keys.getCharFromCode( event.which )
+ if( key !== null ){
+ //console.log('This should be recorded', event.which, keys.getCharFromCode( event.which ));
+ app.Items.selected().trigger('appendShortcut', key, event)
+ }
+ }
})
diff --git a/ui/js/lib/keyboard.js b/ui/js/lib/keyboard.js
index 5b6b50b..1f5f01e 100755
--- a/ui/js/lib/keyboard.js
+++ b/ui/js/lib/keyboard.js
@@ -1,4 +1,4 @@
-'use strict';
+'use strict'
// From https://github.com/atom/electron/blob/master/docs/api/accelerator.md
/*
@@ -34,134 +34,134 @@
// Taken partially from http://stackoverflow.com/questions/1772179/get-character-value-from-keycode-in-javascript-then-trim
// names of known key codes registrable on electron(0-255)
var map = new Map([
- [NaN, null]
- , [17, 'Ctrl']
- , [91, 'Super']
- , [18, 'Alt']
- , [16, 'Shift']
- , [9, 'Tab']
- , [48, '0']
- , [49, '1']
- , [50, '2']
- , [51, '3']
- , [52, '4']
- , [53, '5']
- , [54, '6']
- , [55, '7']
- , [56, '8']
- , [57, '9']
- , [65, 'A']
- , [66, 'B']
- , [67, 'C']
- , [68, 'D']
- , [69, 'E']
- , [70, 'F']
- , [71, 'G']
- , [72, 'H']
- , [73, 'I']
- , [74, 'J']
- , [75, 'K']
- , [76, 'L']
- , [77, 'M']
- , [78, 'N']
- , [79, 'O']
- , [80, 'P']
- , [81, 'Q']
- , [82, 'R']
- , [83, 'S']
- , [84, 'T']
- , [85, 'U']
- , [86, 'V']
- , [87, 'W']
- , [88, 'X']
- , [89, 'Y']
- , [90, 'Z']
- , [112, 'F1']
- , [113, 'F2']
- , [114, 'F3']
- , [115, 'F4']
- , [116, 'F5']
- , [117, 'F6']
- , [118, 'F7']
- , [119, 'F8']
- , [120, 'F9']
- , [121, 'F10']
- , [122, 'F11']
- , [123, 'F12']
- , [124, 'F13']
- , [125, 'F14']
- , [126, 'F15']
- , [127, 'F16']
- , [128, 'F17']
- , [129, 'F18']
- , [130, 'F19']
- , [131, 'F20']
- , [132, 'F21']
- , [133, 'F22']
- , [134, 'F23']
- , [135, 'F24']
- , [171, 'Plus']
- , [32, 'Space']
- , [8, 'Backspace']
- , [46, 'Delete']
- , [45, 'Insert']
- , [13, 'Enter']
- , [38, 'Up']
- , [40, 'Down']
- , [37, 'Left']
- , [39, 'Right']
- , [36, 'Home']
- , [35, 'End']
- , [33, 'PageUp']
- , [34, 'PageDown']
- , [27, 'Esc']
- , [183, 'VolumeUp']
- , [182, 'VolumeDown']
- , [181, 'VolumeMute']
- , [250, 'Play']
- , [19, 'Pause']
- , [58, ':']
- , [60, '<']
- , [62, '>']
- , [63, '?']
- , [64, '@']
- , [161, '!']
- , [162, '"']
- , [164, '$']
- , [165, '%']
- , [166, '&']
- , [167, '_']
- , [168, '(']
- , [169, ')']
- , [170, '*']
- , [171, '+']
- , [172, '|']
- , [174, '{']
- , [175, '}']
- , [176, '~']
- , [186, ';']
- , [187, '=']
- , [188, ',']
- , [189, '-']
- , [190, '.']
- , [191, '/']
- , [192, '`']
- , [219, '[']
- , [220, '\\']
- , [221, ']']
- , [222, '\'']
-]);
+ [NaN, null]
+ , [17, 'Ctrl']
+ , [91, 'Super']
+ , [18, 'Alt']
+ , [16, 'Shift']
+ , [9, 'Tab']
+ , [48, '0']
+ , [49, '1']
+ , [50, '2']
+ , [51, '3']
+ , [52, '4']
+ , [53, '5']
+ , [54, '6']
+ , [55, '7']
+ , [56, '8']
+ , [57, '9']
+ , [65, 'A']
+ , [66, 'B']
+ , [67, 'C']
+ , [68, 'D']
+ , [69, 'E']
+ , [70, 'F']
+ , [71, 'G']
+ , [72, 'H']
+ , [73, 'I']
+ , [74, 'J']
+ , [75, 'K']
+ , [76, 'L']
+ , [77, 'M']
+ , [78, 'N']
+ , [79, 'O']
+ , [80, 'P']
+ , [81, 'Q']
+ , [82, 'R']
+ , [83, 'S']
+ , [84, 'T']
+ , [85, 'U']
+ , [86, 'V']
+ , [87, 'W']
+ , [88, 'X']
+ , [89, 'Y']
+ , [90, 'Z']
+ , [112, 'F1']
+ , [113, 'F2']
+ , [114, 'F3']
+ , [115, 'F4']
+ , [116, 'F5']
+ , [117, 'F6']
+ , [118, 'F7']
+ , [119, 'F8']
+ , [120, 'F9']
+ , [121, 'F10']
+ , [122, 'F11']
+ , [123, 'F12']
+ , [124, 'F13']
+ , [125, 'F14']
+ , [126, 'F15']
+ , [127, 'F16']
+ , [128, 'F17']
+ , [129, 'F18']
+ , [130, 'F19']
+ , [131, 'F20']
+ , [132, 'F21']
+ , [133, 'F22']
+ , [134, 'F23']
+ , [135, 'F24']
+ , [171, 'Plus']
+ , [32, 'Space']
+ , [8, 'Backspace']
+ , [46, 'Delete']
+ , [45, 'Insert']
+ , [13, 'Enter']
+ , [38, 'Up']
+ , [40, 'Down']
+ , [37, 'Left']
+ , [39, 'Right']
+ , [36, 'Home']
+ , [35, 'End']
+ , [33, 'PageUp']
+ , [34, 'PageDown']
+ , [27, 'Esc']
+ , [183, 'VolumeUp']
+ , [182, 'VolumeDown']
+ , [181, 'VolumeMute']
+ , [250, 'Play']
+ , [19, 'Pause']
+ , [58, ':']
+ , [60, '<']
+ , [62, '>']
+ , [63, '?']
+ , [64, '@']
+ , [161, '!']
+ , [162, '"']
+ , [164, '$']
+ , [165, '%']
+ , [166, '&']
+ , [167, '_']
+ , [168, '(']
+ , [169, ')']
+ , [170, '*']
+ , [171, '+']
+ , [172, '|']
+ , [174, '{']
+ , [175, '}']
+ , [176, '~']
+ , [186, ';']
+ , [187, '=']
+ , [188, ',']
+ , [189, '-']
+ , [190, '.']
+ , [191, '/']
+ , [192, '`']
+ , [219, '[']
+ , [220, '\\']
+ , [221, ']']
+ , [222, '\'']
+])
var no_metas = [
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90
-];
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90
+]
module.exports.getCharFromCode = function( code ){
- return (map.get( parseInt(code, 10) ) || null);
+ return (map.get( parseInt(code, 10) ) || null)
}
module.exports.isMeta = function( key ){
- // Key can be the positional code or it's key counterpart
- return (map.has( key )?(no_metas.indexOf( key ) !== -1):(no_metas.indexOf(Object.keys(map.values())[ key ])))
+ // Key can be the positional code or it's key counterpart
+ return (map.has( key )?(no_metas.indexOf( key ) !== -1):(no_metas.indexOf(Object.keys(map.values())[ key ])))
}
\ No newline at end of file
diff --git a/ui/js/models/Model.js b/ui/js/models/Model.js
index 8bbe9fe..f10fb6a 100755
--- a/ui/js/models/Model.js
+++ b/ui/js/models/Model.js
@@ -2,85 +2,85 @@
var _statOrNull = function( path ){
- let ret = null;
- try{ ret = FS.lstatSync( path ) }
- catch( e ){}
- finally{ return ret }
+ let ret = null;
+ try{ ret = FS.lstatSync( path ) }
+ catch( e ){}
+ finally{ return ret }
}
var _getAbsolutePath = function( defaultPath, path ){
- let ret = null;
- let stat = null;
- // Check if its absolute yet
- if( path.indexOf('/') === 0 ){
- // If it does not exist
- ret = path;
- }else{
- ret = upath.join( defaultPath, path );
- }
- stat = _statOrNull( ret );
- if( stat === null ){
- ret = null;
- }
-
- return ret;
+ let ret = null
+ let stat = null
+ // Check if its absolute yet
+ if( path.indexOf('/') === 0 ){
+ // If it does not exist
+ ret = path
+ }else{
+ ret = upath.joinSafe( defaultPath, path )
+ }
+ stat = _statOrNull( ret )
+ if( stat === null ){
+ ret = null
+ }
+ return ret
}
var proto = {
- defaults: {
- name: '',
- text: '',
- icon: 'application.png',
- exec: '',
- location: '',
- type: '_system_',
- scut: '',
- selected: false,
- launching: false
- },
+ defaults: {
+ name: '',
+ text: '',
+ icon: 'application.png',
+ exec: '',
+ location: '',
+ type: '_system_',
+ scut: '',
+ selected: false,
+ launching: false
+ },
- initialize: function( model ){
- // Validate icon
- var path = _getAbsolutePath( ASSETS_PATH, model.icon ) || upath.join( ASSETS_PATH + 'application.png');
- this.set('icon', path)
- },
+ initialize: function( model ){
+ // Validate icon
+ var path = _getAbsolutePath( ASSETS_PATH, model.icon ) || upath.join( ASSETS_PATH + 'application.png')
+ this.set('icon', path)
+ },
- select: function(){
- this.set({ selected: !this.get('selected') });
- },
+ select: function(){
+ this.set({ selected: !this.get('selected') })
+ },
- launch: function( query ){
- this.save({
- selected: true,
- launching: true
- }, { data: { req: 'launch', data: { app: this.extract(), query: query } }});
- console.log('launch on model');
- },
+ launch: function( query ){
+ this.save({
+ selected: true,
+ launching: true
+ }, { data: { req: 'launch', data: { app: this.extract(), query: query } }})
+ console.log('launch on model')
+ },
- // TODO => Validation on object extension
- validate: function(){},
+ // TODO => Validation on object extension
+ validate: function(){},
- extract: function(){
- return ({
- name: this.get('name'),
- text: this.get('text'),
- icon: this.get('icon'),
- exec: this.get('exec'),
- type: this.get('type'),
- location: this.get('location')
- });
- }
+ extract: function(){
+ return ({
+ name: this.get('name'),
+ text: this.get('text'),
+ icon: this.get('icon'),
+ exec: this.get('exec'),
+ type: this.get('type'),
+ location: this.get('location')
+ })
+ }
}
+
module.exports = function( obj ){
- var ret = {}
- _.extend( ret, proto );
- for( var prop in obj ){
- if( ret.hasOwnProperty( prop ) ){
- ret[ prop ] = obj[ prop ];
- }
- }
- return ret;
+ let ret = {}
+ _.extend( ret, proto )
+ for( let prop in obj ){
+ if( ret.hasOwnProperty( prop ) ){
+ ret[ prop ] = obj[ prop ]
+ }
+ }
+ return ret
}
diff --git a/ui/js/models/item-model.js b/ui/js/models/item-model.js
index 5a84bc6..90e4471 100755
--- a/ui/js/models/item-model.js
+++ b/ui/js/models/item-model.js
@@ -1,17 +1,17 @@
'use strict'
-var app = app || {};
-var Model = require(JS_PATH + '/models/Model');
+var app = app || {}
+var Model = require(JS_PATH + '/models/Model')
var item = new Model({
- validate: function( values, xhr ){
- console.log('Model validate', values);
- // We don't update if there was no change on the
- // 'recordable' fields, in this case, the shortcut.
- // Also, we only update on settings screen.
- if( xhr.req && xhr.req === 'settings' ){
- return values.scut === this.get('scut');
- }
- }
+ validate: function( values, xhr ){
+ // console.log('Model validate', values)
+ // We don't update if there was no change on the
+ // 'recordable' fields, in this case, the shortcut.
+ // Also, we only update on settings screen.
+ if( xhr.req && xhr.req === 'settings' ){
+ return values.scut === this.get('scut')
+ }
+ }
})
-app.Item = Backbone.Model.extend( item );
\ No newline at end of file
+app.Item = Backbone.Model.extend( item )
\ No newline at end of file
diff --git a/ui/js/models/item-settings-model.js b/ui/js/models/item-settings-model.js
index 267dd4d..66612de 100755
--- a/ui/js/models/item-settings-model.js
+++ b/ui/js/models/item-settings-model.js
@@ -1,20 +1,20 @@
'use strict'
-var app = app || {};
-var Model = require('./Model');
-var item = Model.use({
- validate: function( values, xhr ){
- //console.log('Model validate' );
- // We don't update if there was no change on the
- // 'recordable' fields, in this case, the shortcut or the url.
- // Also, we only update on settings screen.
- if( xhr.data && xhr.data.req ){
- if( xhr.data.req === 'changeAppShortcut' ){
- return (values.scut === this.get('scut'));
- }else if( xhr.data.req === 'changeAppLocation' ){
- return (values.location === this.get('location'));
- }
- }
- }
+var app = app || {}
+var Model = require(JS_PATH + '/models/Model')
+var item = new Model({
+ validate: function( values, xhr ){
+ // console.log('Item settings Model validate' );
+ // We don't update if there was no change on the
+ // 'recordable' fields, in this case, the shortcut or the url.
+ // Also, we only update on settings screen.
+ if( xhr.data && xhr.data.req ){
+ if( xhr.data.req === 'changeAppShortcut' ){
+ return (values.scut === this.get('scut'))
+ }else if( xhr.data.req === 'changeAppLocation' ){
+ return (values.location === this.get('location'))
+ }
+ }
+ }
})
app.Item = Backbone.Model.extend( item )
\ No newline at end of file
diff --git a/ui/js/views/app-settings-view.js b/ui/js/views/app-settings-view.js
index 0461fb8..45f9b9f 100755
--- a/ui/js/views/app-settings-view.js
+++ b/ui/js/views/app-settings-view.js
@@ -4,79 +4,78 @@ var app = app || {};
app.AppView = Backbone.View.extend({
- el: '#pref-panel',
-
- events:{
- 'click #cancel-rec-btn': '_stopRecording'
- },
-
- initialize: function(){
- this.$table = $('#item-list');
- this.$prefPanel = $('#pref-panel');
- this.$prefPanelHeadTxt = $('#pref-panel-heading-txt');
- this.$cancelRecBtn = $('#cancel-rec-btn');
- this.$cancelRecBtn.hide();
-
- this.baseText = this.$prefPanelHeadTxt.text();
- this.rectText = 'Press keys for the new shortcut';
-
- this.listenTo( app.Items, 'add', this.addOne );
- this.listenTo( app.Items, 'reset', this.addAll );
-
- this.listenTo( app.Items, 'change:state', this.stateChange );
- this.listenTo( app.Items, 'change:launching', this.clearAll );
- this.listenTo( app.Items, 'all', this.render );
-
- app.Items.fetch({ data: { req: 'settings' }});
- },
-
- addOne: function( item ){
- var view = new app.ItemView({ model: item });
- this.$table.append( view.render().el );
- },
-
- addAll: function(){
- this.$table.html('');
- app.Items.each( this.addOne, this );
- },
-
- stateChange: function(){
- var selected = app.Items.selected();
- if( selected !== undefined ){
- if( app.STATE === STATES.IDLE ){
- this._startRecording();
- }else{
- this._stopRecording();
- }
- }
- },
-
- _startRecording: function(){
- this.$prefPanel.removeClass('panel-default');
- this.$prefPanel.addClass('panel-danger');
- this.$prefPanelHeadTxt.text( this.rectText );
- this.$cancelRecBtn.show();
- app.STATE = STATES.REC;
- },
-
- _stopRecording: function( cancel ){
- app.STATE = STATES.IDLE;
- this.$prefPanel.removeClass('panel-danger');
- this.$prefPanel.addClass('panel-default');
- this.$prefPanelHeadTxt.text( this.baseText );
- this.$cancelRecBtn.hide();
- if( cancel !== undefined ){
- app.Items.selected().set({ selected: false, state: STATES.IDLE });
- }
- },
-
- clearAll: function(){
- // We are launching an application
- // 1. Send launch command to backend
- // 2. Reset search keyword (maybe set tooltip to previous search??)
- // 3. Hide all UI
- app.Items.reset( null );
- return false;
- }
-
+ el: '#pref-panel',
+
+ events:{
+ 'click #cancel-rec-btn': '_stopRecording'
+ },
+
+ initialize: function(){
+ this.$table = $('#item-list')
+ this.$prefPanel = $('#pref-panel')
+ this.$prefPanelHeadTxt = $('#pref-panel-heading-txt')
+ this.$cancelRecBtn = $('#cancel-rec-btn')
+ this.$cancelRecBtn.hide()
+
+ this.baseText = this.$prefPanelHeadTxt.text()
+ this.rectText = 'Press keys for the new shortcut'
+
+ this.listenTo( app.Items, 'add', this.addOne )
+ this.listenTo( app.Items, 'reset', this.addAll )
+
+ this.listenTo( app.Items, 'change:state', this.stateChange )
+ this.listenTo( app.Items, 'change:launching', this.clearAll )
+ this.listenTo( app.Items, 'all', this.render )
+
+ app.Items.fetch({ data: { req: 'settings' }})
+ },
+
+ addOne: function( item ){
+ var view = new app.ItemView({ model: item })
+ this.$table.append( view.render().el )
+ },
+
+ addAll: function(){
+ this.$table.html('')
+ app.Items.each( this.addOne, this )
+ },
+
+ stateChange: function(){
+ var selected = app.Items.selected()
+ if( selected !== undefined ){
+ if( app.STATE === STATES.IDLE ){
+ this._startRecording()
+ }else{
+ this._stopRecording()
+ }
+ }
+ },
+
+ _startRecording: function(){
+ this.$prefPanel.removeClass('panel-default')
+ this.$prefPanel.addClass('panel-danger')
+ this.$prefPanelHeadTxt.text( this.rectText )
+ this.$cancelRecBtn.show()
+ app.STATE = STATES.REC
+ },
+
+ _stopRecording: function( cancel ){
+ app.STATE = STATES.IDLE
+ this.$prefPanel.removeClass('panel-danger')
+ this.$prefPanel.addClass('panel-default')
+ this.$prefPanelHeadTxt.text( this.baseText )
+ this.$cancelRecBtn.hide()
+ if( cancel !== undefined ){
+ app.Items.selected().set({ selected: false, state: STATES.IDLE })
+ }
+ },
+
+ clearAll: function(){
+ // We are launching an application
+ // 1. Send launch command to backend
+ // 2. Reset search keyword (maybe set tooltip to previous search??)
+ // 3. Hide all UI
+ app.Items.reset( null )
+ return false
+ }
})
\ No newline at end of file
diff --git a/ui/js/views/items-settings-view.js b/ui/js/views/items-settings-view.js
index 4fc5c20..f900dd5 100755
--- a/ui/js/views/items-settings-view.js
+++ b/ui/js/views/items-settings-view.js
@@ -1,174 +1,156 @@
'use strict'
-var app = app || {};
+var app = app || {}
app.ItemView = Backbone.View.extend({
- tagName: 'tr',
-
- template: _.template( $('#item-template').html() ),
-
- events: {
- 'click .btn': 'click'
- },
-
- initialize: function(){
-
- this.listenTo( this.model, 'change', this.render );
- this.listenTo( this.model, 'destroy', this.remove );
- this.listenTo( this.model, 'appendShortcut', this.appendShortcut );
- this.listenTo( this.model, 'saveShortcut', this.saveShortcut );
-
- },
-
- render: function(){
-
- this.$el.html( this.template(this.model.toJSON()) );
- this.$el.toggleClass('selected', this.model.get('selected'));
-
- // Reverse alt input and normal input if we are on alt rec type
- //this.$input = this.$('.in');
- //this.$altIn = this.$('.altIn');
- var onRec = this.model.get('recording');
- if( onRec ){
- this.$recBtn = this.$('#' + onRec);
- }else{
- this.$recBtn = this.$('.in');
- }
-
- var state = this.model.get('state');
- if(
- state !== undefined &&
- this.$recBtn.length > 0 &&
- state === STATES.REC
- ){
- this.$recBtn.removeClass('btn-default');
- this.$recBtn.addClass('btn-danger');
- this.$recBtn.text('...');
- }
-
- return this;
-
- },
-
- appendShortcut: function( key, event ){
- //console.log('appendShortcut', key);
- // Validate shortcut,
- // if we are on an internal app shortcut will come from a button,
- // else it'll come from an input text
- // on button input we allow meta keys, on input text we do not
- // also, as text input handles adding data itself, no need to do anything
- if( key !== null ){
- if( this.model.get('type') === '_system_' ){
- event.preventDefault();
- var prev = this.$recBtn.text().trim();
- if( prev.indexOf( key ) === -1 ){
- // Only append if we not present on shortcut
- this.$recBtn.text( ((prev !== '' && prev !== '...')?prev + ' + ':'') + key );
- }
- }else if( event.which === ENTER_KEY || event.which === ESCAPE_KEY ){
- // Exit rec
- event.preventDefault();
- if( event.which === ENTER_KEY ){
- this.model.trigger('saveShortcut');
- }
- this.model.set({ state: STATES.IDLE, recording: null });
- }
- }
-
- },
-
- saveShortcut: function(){
-
- var toSave = {
- selected: false,
- state: STATES.IDLE
- };
- var opts = {
- patch: true,
- wait: true,
- data: { req: '' }
- };
- var saveValue = this.$recBtn.text() || this.$recBtn.val();
- var type = this.getRecType();
-
- if( type === 'normal' ){
- toSave['scut'] = saveValue;
- opts.data.req = 'changeAppShortcut';
- }else{
- toSave['location'] = saveValue;
- opts.data.req = 'changeAppLocation';
- }
-
- console.log('Saving', toSave);
- this.model.save( toSave, opts );
-
- },
-
- getRecType: function(){
- if( this.$recBtn.attr('id') === ('btn-' + this.model.get('id')) ){
- return 'normal';
- }else{
- return 'alt';
- }
- },
-
- click: function( event ){
-
- // Unselect previous recording view
- function unselect(){
-
- var sel = app.Items.selected();
-
- if( sel ){
-
- sel.set({ selected: false, state: STATES.IDLE });
- app.STATE = STATES.IDLE;
-
- }
-
- }
-
- if( this.$('.in').attr('id') === event.target.id || this.$('.altIn').attr('id') === event.target.id ){
-
- unselect();
-
- if( this.$('.in').attr('id') === event.target.id ){
- this.$recBtn = this.$('.in');
- }else{
- this.$recBtn = this.$('.altIn');
- }
-
- if( app.STATE === STATES.IDLE ){
- var btnId = this.$recBtn.attr('id');
- this.model.set({ selected: true, state: STATES.REC, 'recording': btnId });
-
- if( this.model.get('type') !== '_system_' ){
-
- this.$recBtn.replaceWith($('', {
- "type": 'text',
- 'placeholder': 'Shortcut',
- 'id': this.$recBtn.attr('id'),
- 'class': this.$recBtn.attr('class')
- }));
- this.$recBtn = this.$('#' + btnId);
- this.$recBtn.focus();
-
- }
- }else if( this.model.get('type') === '_system_' ){
-
- this.model.set({ state: STATES.IDLE, recording: null });
-
- }
-
- }
-
- },
-
- clear: function(){
-
- this.model.destroy();
-
- }
-
+ tagName: 'tr',
+
+ template: _.template( $('#item-template').html() ),
+
+ events: {
+ 'click .btn': 'click'
+ },
+
+ initialize: function(){
+
+ this.listenTo( this.model, 'change', this.render )
+ this.listenTo( this.model, 'destroy', this.remove )
+ this.listenTo( this.model, 'appendShortcut', this.appendShortcut )
+ this.listenTo( this.model, 'saveShortcut', this.saveShortcut )
+ },
+
+ render: function(){
+
+ this.$el.html( this.template(this.model.toJSON()) )
+ this.$el.toggleClass('selected', this.model.get('selected'))
+
+ // Reverse alt input and normal input if we are on alt rec type
+ //this.$input = this.$('.in');
+ //this.$altIn = this.$('.altIn');
+ var onRec = this.model.get('recording')
+ if( onRec ){
+ this.$recBtn = this.$('#' + onRec)
+ }else{
+ this.$recBtn = this.$('.in')
+ }
+
+ var state = this.model.get('state')
+ if(
+ state !== undefined &&
+ this.$recBtn.length > 0 &&
+ state === STATES.REC
+ ){
+ this.$recBtn.removeClass('btn-default')
+ this.$recBtn.addClass('btn-danger')
+ this.$recBtn.text('...')
+ }
+
+ return this
+ },
+
+ appendShortcut: function( key, event ){
+ //console.log('appendShortcut', key);
+ // Validate shortcut,
+ // if we are on an internal app shortcut will come from a button,
+ // else it'll come from an input text
+ // on button input we allow meta keys, on input text we do not
+ // also, as text input handles adding data itself, no need to do anything
+ if( key !== null ){
+ if( this.model.get('type') === '_system_' ){
+ event.preventDefault()
+ var prev = this.$recBtn.text().trim()
+ if( prev.indexOf( key ) === -1 ){
+ // Only append if we not present on shortcut
+ this.$recBtn.text( ((prev !== '' && prev !== '...')?prev + ' + ':'') + key )
+ }
+ }else if( event.which === ENTER_KEY || event.which === ESCAPE_KEY ){
+ // Exit rec
+ event.preventDefault()
+ if( event.which === ENTER_KEY ){
+ this.model.trigger('saveShortcut')
+ }
+ this.model.set({ state: STATES.IDLE, recording: null })
+ }
+ }
+ },
+
+ saveShortcut: function(){
+
+ let toSave = this.model.extract()
+ let opts = {
+ patch: true,
+ wait: true,
+ data: { req: '' }
+ }
+ let saveValue = this.$recBtn.text() || this.$recBtn.val()
+ let type = this.getRecType()
+
+ if( type === 'normal' ){
+ toSave['scut'] = saveValue
+ opts.data.req = 'changeAppShortcut'
+ }else{
+ toSave['location'] = saveValue
+ opts.data.req = 'changeAppLocation'
+ }
+
+ opts.data.data = toSave
+
+ this.model.save( toSave, opts )
+ },
+
+ getRecType: function(){
+ if( this.$recBtn.attr('id') === ('btn-' + this.model.get('id')) ){
+ return 'normal'
+ }else{
+ return 'alt'
+ }
+ },
+
+ click: function( event ){
+
+ // Unselect previous recording view
+ function unselect(){
+
+ var sel = app.Items.selected()
+
+ if( sel ){
+ sel.set({ selected: false, state: STATES.IDLE })
+ app.STATE = STATES.IDLE
+ }
+ }
+
+ if( this.$('.in').attr('id') === event.target.id || this.$('.altIn').attr('id') === event.target.id ){
+
+ unselect()
+
+ if( this.$('.in').attr('id') === event.target.id ){
+ this.$recBtn = this.$('.in')
+ }else{
+ this.$recBtn = this.$('.altIn')
+ }
+
+ if( app.STATE === STATES.IDLE ){
+ var btnId = this.$recBtn.attr('id')
+ this.model.set({ selected: true, state: STATES.REC, 'recording': btnId })
+
+ if( this.model.get('type') !== '_system_' ){
+ this.$recBtn.replaceWith($('', {
+ "type": 'text',
+ 'placeholder': 'Shortcut',
+ 'id': this.$recBtn.attr('id'),
+ 'class': this.$recBtn.attr('class')
+ }));
+ this.$recBtn = this.$('#' + btnId)
+ this.$recBtn.focus()
+ }
+ }else if( this.model.get('type') === '_system_' ){
+ this.model.set({ state: STATES.IDLE, recording: null })
+ }
+ }
+ },
+
+ clear: function(){
+ this.model.destroy()
+ }
})
\ No newline at end of file