diff --git a/lib/app/index.js b/lib/app/index.js index d49ee24..e07d532 100644 --- a/lib/app/index.js +++ b/lib/app/index.js @@ -3,8 +3,7 @@ // Depedencies const ip = require('ip') const Site = require('./site') -const Watcher = require('./watcher') -const defaultConfig = require('./config.default.json') +const Watcher = require('./watcher.js') /** * App class @@ -14,73 +13,86 @@ class App /** * Constructor */ - constructor(_options) + constructor() { - this.setArguments() - this.setOptions(_options) - this.setSite() + this.setConfig() + // this.setSite() this.setWatcher() } /** - * Set options + * Set config */ - setOptions(_options) + setConfig() { - const options = typeof _options === 'object' ? _options : {} - - // Defaults - if(typeof options.debug === 'undefined') + const args = require('yargs') + .option('debug', { + alias: 'd', + describe: 'Use debug mode', + default: false, + type: 'boolean' + }) + .option('name', { + alias: 'n', + describe: 'Project name', + default: '', + type: 'string' + }) + .option('port', { + alias: 'p', + describe: 'Port to use', + default: 1571, + type: 'number' + }) + .option('exclude', { + alias: 'e', + describe: 'Files to exclude', + default: + [ + '**/.DS_Store', + 'node_modules/**', + 'vendor/**', + '.git' + ], + type: 'array' + }) + .option('initial-send', { + alias: 'i', + describe: 'Send current file in folder immediately', + default: false, + type: 'boolean' + }) + .option('max-file-size', { + alias: 'm', + describe: 'Maximum file size in octets', + default: 99999, + type: 'number' + }) + .argv + + const config = {} + config.debug = args.debug + config.name = args.name + config.port = args.port + config.exclude = args.exclude + config.initialSend = args['initial-send'] + config.maxFileSize = args['max-file-size'] + config.domain = `http://${ip.address()}:${config.port}` + + if(config.name === '') { - if(this.arguments.length > 1) + if(args._.length > 0 && typeof args._[0] === 'string' && args._[0] !== '') { - options.debug = this.arguments[ this.arguments.length - 1 ] === 'true' + config.name = args._[0] } else { - options.debug = defaultConfig.debug + config.name = 'No name' } } - if(typeof options.port === 'undefined') - { - options.port = defaultConfig.port - } - - if(typeof options.domain === 'undefined') - { - options.domain = `http://${ip.address()}:${options.port}` - } - - if(typeof options.maxFileSize === 'undefined') - { - options.maxFileSize = defaultConfig.maxFileSize - } - - if(typeof options.exclude === 'undefined') - { - options.exclude = defaultConfig.exclude - } - // Save - this.options = options - } - - /** - * Set arguments - * Retrieve arguments and test if missing - */ - setArguments() - { - // Set up - this.arguments = process.argv.slice(2) - - // Missing project name - if(this.arguments.length === 0) - { - // Stop process - throw new Error('Missing arguments: first argument should be the projet name'.red) - } + this.config = config } /** @@ -90,9 +102,9 @@ class App setSite() { this.site = new Site({ - port : this.options.port, - domain: this.options.domain, - debug : this.options.debug + port: this.config.port, + domain: this.config.domain, + debug: this.config.debug }) } @@ -103,12 +115,12 @@ class App setWatcher() { this.watcher = new Watcher({ - port : this.options.port, - domain : this.options.domain, - debug : this.options.debug, - maxFileSize: this.options.maxFileSize, - exclude : this.options.exclude, - name : this.arguments[ 0 ] + port: this.config.port, + domain: this.config.domain, + debug: this.config.debug, + maxFileSize: this.config.maxFileSize, + exclude: this.config.exclude, + name: this.config.name }) } } diff --git a/lib/app/watcher/index.js b/lib/app/watcher.js similarity index 98% rename from lib/app/watcher/index.js rename to lib/app/watcher.js index 4b0e645..6b77ce0 100644 --- a/lib/app/watcher/index.js +++ b/lib/app/watcher.js @@ -6,17 +6,20 @@ const ip = require('ip') const socketIoClient = require('socket.io-client') const fs = require('fs') const mime = require('mime') +const EventEmitter = require('../event-emitter.js') /** * Watcher class */ -class Watcher +class Watcher extends EventEmitter { /** * Constructor */ constructor(_options) { + super() + this.setOptions(_options) this.setWatcher() this.setSocket() diff --git a/lib/event-emitter.js b/lib/event-emitter.js new file mode 100644 index 0000000..6a7a4ec --- /dev/null +++ b/lib/event-emitter.js @@ -0,0 +1,224 @@ +'use strict' + +class EventEmitter +{ + /** + * Constructor + */ + constructor() + { + this.callbacks = {} + this.callbacks.base = {} + } + + /** + * On + */ + on(_names, callback) + { + const that = this + + // Errors + if(typeof _names === 'undefined' || _names === '') + { + console.warn('wrong names') + return false + } + + if(typeof callback === 'undefined') + { + console.warn('wrong callback') + return false + } + + // Resolve names + const names = this.resolveNames(names) + + // Each name + names.forEach(function(_name) + { + // Resolve name + const name = that.resolveName(_name) + + // Create namespace if not exist + if(!(that.callbacks[ name.namespace ] instanceof Object)) + that.callbacks[ name.namespace ] = {} + + // Create callback if not exist + if(!(that.callbacks[ name.namespace ][ name.value ] instanceof Array)) + that.callbacks[ name.namespace ][ name.value ] = [] + + // Add callback + that.callbacks[ name.namespace ][ name.value ].push(callback) + }) + + return this + } + + /** + * Off + */ + off(_names) + { + const that = this + + // Errors + if(typeof _names === 'undefined' || _names === '') + { + console.warn('wrong name') + return false + } + + // Resolve names + const names = this.resolveNames(_names) + + // Each name + names.forEach(function(_name) + { + // Resolve name + const name = that.resolveName(_name) + + // Remove namespace + if(name.namespace !== 'base' && name.value === '') + { + delete that.callbacks[ name.namespace ] + } + + // Remove specific callback in namespace + else + { + // Default + if(name.namespace === 'base') + { + // Try to remove from each namespace + for(const namespace in that.callbacks) + { + if(that.callbacks[ namespace ] instanceof Object && that.callbacks[ namespace ][ name.value ] instanceof Array) + { + delete that.callbacks[ namespace ][ name.value ] + + // Remove namespace if empty + if(Object.keys(that.callbacks[ namespace ]).length === 0) + delete that.callbacks[ namespace ] + } + } + } + + // Specified namespace + else if(that.callbacks[ name.namespace ] instanceof Object && that.callbacks[ name.namespace ][ name.value ] instanceof Array) + { + delete that.callbacks[ name.namespace ][ name.value ] + + // Remove namespace if empty + if(Object.keys(that.callbacks[ name.namespace ]).length === 0) + delete that.callbacks[ name.namespace ] + } + } + }) + + return this + } + + /** + * Trigger + */ + trigger(_name, _args) + { + // Errors + if(typeof _name === 'undefined' || _name === '') + { + console.warn('wrong name') + return false + } + + const that = this + let finalResult = null + let result = null + + // Default args + const args = !(args instanceof Array) ? [] : _args + + // Resolve names (should on have one event) + let name = this.resolveNames(_name) + + // Resolve name + name = this.resolveName(name[ 0 ]) + + // Default namespace + if(name.namespace === 'base') + { + // Try to find callback in each namespace + for(const namespace in that.callbacks) + { + if(that.callbacks[ namespace ] instanceof Object && that.callbacks[ namespace ][ name.value ] instanceof Array) + { + that.callbacks[ namespace ][ name.value ].forEach(function(callback) + { + result = callback.apply(that,args) + + if(typeof finalResult === 'undefined') + { + finalResult = result + } + }) + } + } + } + + // Specified namespace + else if(this.callbacks[ name.namespace ] instanceof Object) + { + if(name.value === '') + { + console.warn('wrong name') + return this + } + + that.callbacks[ name.namespace ][ name.value ].forEach(function(callback) + { + result = callback.apply(that, args) + + if(typeof finalResult === 'undefined') + finalResult = result + }) + } + + return finalResult + } + + /** + * Resolve names + */ + resolveNames(_names) + { + let names = _names + names = names.replace(/[^a-zA-Z0-9 ,\/.]/g, '') + names = names.replace(/[,\/]+/g, ' ') + names = names.split(' ') + + return names + } + + /** + * Resolve name + */ + resolveName(name) + { + const newName = {} + const parts = name.split('.') + + newName.original = name + newName.value = parts[ 0 ] + newName.namespace = 'base' // Base namespace + + // Specified namespace + if(parts.length > 1 && parts[ 1 ] !== '') + { + newName.namespace = parts[ 1 ] + } + + return newName + } +} + +module.exports = EventEmitter diff --git a/package-lock.json b/package-lock.json index a0a25a7..040850d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,10 +37,6 @@ "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", "dev": true }, - "align-text": { - "version": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=" - }, "amdefine": { "version": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" @@ -54,8 +50,7 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { "version": "2.2.1", @@ -180,6 +175,11 @@ "integrity": "sha1-YtThWEwAkKDH01h/JZNKhLizjeQ=", "optional": true }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + }, "caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", @@ -196,18 +196,10 @@ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", "dev": true }, - "camelcase": { - "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" - }, "camelize": { "version": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, - "center-align": { - "version": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=" - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -244,16 +236,17 @@ "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", "dev": true }, - "cliui": { - "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=" - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, + "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=" + }, "color-convert": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", @@ -334,6 +327,11 @@ "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=" + }, "dashify": { "version": "https://registry.npmjs.org/dashify/-/dashify-0.2.2.tgz", "integrity": "sha1-agdBWgHJH69KMuONnfunH2HLIP4=" @@ -432,6 +430,11 @@ "version": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=" }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=" + }, "escape-html": { "version": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" @@ -548,6 +551,11 @@ "version": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=" }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=" + }, "expand-brackets": { "version": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=" @@ -606,6 +614,11 @@ "version": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.5.0.tgz", "integrity": "sha1-6VCKvs6bbbqHGmlCodeRG5GRGsc=" }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=" + }, "flat-cache": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", @@ -1219,6 +1232,16 @@ } } }, + "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=" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -1311,6 +1334,11 @@ "version": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.0.0.tgz", "integrity": "sha1-SoWtZYgfYoV/xwr3F0oRhNzM4ys=" }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" + }, "hpkp": { "version": "https://registry.npmjs.org/hpkp/-/hpkp-1.2.0.tgz", "integrity": "sha1-g/LLOLJs/yHa8m4v9LVxJpId7GU=" @@ -1397,6 +1425,11 @@ } } }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, "ip": { "version": "https://registry.npmjs.org/ip/-/ip-1.1.4.tgz", "integrity": "sha1-3oJH/++UBFGDJVD7ooSUXm4Dm/s=" @@ -1405,6 +1438,11 @@ "version": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.2.0.tgz", "integrity": "sha1-irpJyRknmVhb3WQ+DMtQ6K53e6Q=" }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, "is-binary-path": { "version": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=" @@ -1413,6 +1451,11 @@ "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", "integrity": "sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=" }, + "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=" + }, "is-dotfile": { "version": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=" @@ -1436,8 +1479,7 @@ "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-glob": { "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", @@ -1487,10 +1529,20 @@ "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", "dev": true }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, "isarray": { "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, "isobject": { "version": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=" @@ -1547,9 +1599,10 @@ "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", "integrity": "sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=" }, - "lazy-cache": { - "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=" }, "levn": { "version": "0.3.0", @@ -1557,6 +1610,16 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true }, + "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=" + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=" + }, "lodash": { "version": "4.17.4", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", @@ -1567,14 +1630,20 @@ "version": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.5.0.tgz", "integrity": "sha1-r30uxiEGJEHnfVv0CKHgce+GaRw=" }, - "longest": { - "version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==" }, "media-typer": { "version": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=" + }, "merge-descriptors": { "version": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" @@ -1602,8 +1671,7 @@ "mimic-fn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", - "dev": true + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=" }, "minimatch": { "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", @@ -1650,10 +1718,25 @@ "version": "https://registry.npmjs.org/nocache/-/nocache-1.0.1.tgz", "integrity": "sha1-aVyfc2kmp1VPc2X6JeCHlBBlvTY=" }, + "normalize-package-data": { + "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==" + }, "normalize-path": { "version": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", "integrity": "sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=" }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=" + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, "object-assign": { "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" @@ -1704,16 +1787,41 @@ "version": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==" + }, "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 }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=" + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=" + }, "parse-glob": { "version": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=" }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=" + }, "parsejson": { "version": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=" @@ -1730,6 +1838,11 @@ "version": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=" }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, "path-is-absolute": { "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" @@ -1740,6 +1853,11 @@ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, "path-parse": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", @@ -1750,11 +1868,15 @@ "version": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=" + }, "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", @@ -1806,6 +1928,11 @@ "version": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.3.tgz", "integrity": "sha1-3JdQL1ci6IhGez+iKXp7H/R98HQ=" }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, "pug": { "version": "https://registry.npmjs.org/pug/-/pug-2.0.0-beta6.tgz", "integrity": "sha1-nq0uWeVApGfvw3h8ywPkV0ul+uk=" @@ -1876,6 +2003,16 @@ "version": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=" + }, + "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=" + }, "readable-stream": { "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=" @@ -1900,6 +2037,16 @@ "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "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=" + }, "require-uncached": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", @@ -1922,10 +2069,6 @@ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true }, - "right-align": { - "version": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=" - }, "rimraf": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", @@ -1953,8 +2096,7 @@ "semver": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" }, "send": { "version": "https://registry.npmjs.org/send/-/send-0.14.1.tgz", @@ -1964,6 +2106,11 @@ "version": "https://registry.npmjs.org/serve-static/-/serve-static-1.11.1.tgz", "integrity": "sha1-1sznaTUF9zPHWd5Xvvwa92wPCAU=" }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, "set-immediate-shim": { "version": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" @@ -1972,11 +2119,20 @@ "version": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz", "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg=" }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=" + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "slice-ansi": { "version": "0.0.4", @@ -2052,6 +2208,21 @@ "version": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=" }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=" + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -2070,27 +2241,33 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", - "dev": true, "dependencies": { "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=" } } }, "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 + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "strip-json-comments": { "version": "2.0.1", @@ -2200,6 +2377,11 @@ "version": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=" + }, "vary": { "version": "https://registry.npmjs.org/vary/-/vary-1.1.0.tgz", "integrity": "sha1-4eWv+70WrnaN0mdDlLmtMCJlMUA=" @@ -2208,17 +2390,36 @@ "version": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" }, - "window-size": { - "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=" + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "with": { "version": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=" }, - "wordwrap": { - "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=" + } + } }, "wrappy": { "version": "1.0.2", @@ -2248,9 +2449,56 @@ "version": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=" }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, "yargs": { - "version": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=" + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=" + } + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=" + } + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + } + } }, "yeast": { "version": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", diff --git a/package.json b/package.json index 20527f3..b4f7cc7 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ }, "main": "bin/index.js", "scripts": { - "demo-folder": "cd test/demo-folder && node ../../bin 'Demo folder'" + "demo-folder": "cd test/demo-folder && node ../../bin 'Demo folder' -d" }, "repository": { "type": "git", @@ -32,7 +32,8 @@ "pug": "^2.0.0-beta4", "slug": "^0.9.1", "socket.io": "^1.4.6", - "socket.io-client": "^1.4.6" + "socket.io-client": "^1.4.6", + "yargs": "^8.0.2" }, "devDependencies": { "eslint": "^4.2.0",