zhuohongkui 1 year ago
parent
commit
45f71d01a0
100 changed files with 0 additions and 6805 deletions
  1. 0 13
      admin/node_modules/when/node/function.js
  2. 0 126
      admin/node_modules/when/package.json
  3. 0 39
      admin/node_modules/when/parallel.js
  4. 0 50
      admin/node_modules/when/pipeline.js
  5. 0 114
      admin/node_modules/when/poll.js
  6. 0 46
      admin/node_modules/when/sequence.js
  7. 0 27
      admin/node_modules/when/timeout.js
  8. 0 17
      admin/node_modules/when/unfold.js
  9. 0 32
      admin/node_modules/when/unfold/list.js
  10. 0 229
      admin/node_modules/when/when.js
  11. 0 26
      admin/node_modules/which-module/CHANGELOG.md
  12. 0 13
      admin/node_modules/which-module/LICENSE
  13. 0 55
      admin/node_modules/which-module/README.md
  14. 0 9
      admin/node_modules/which-module/index.js
  15. 0 75
      admin/node_modules/which-module/package.json
  16. 0 152
      admin/node_modules/which/CHANGELOG.md
  17. 0 15
      admin/node_modules/which/LICENSE
  18. 0 51
      admin/node_modules/which/README.md
  19. 0 52
      admin/node_modules/which/bin/which
  20. 0 77
      admin/node_modules/which/package.json
  21. 0 135
      admin/node_modules/which/which.js
  22. 0 14
      admin/node_modules/wide-align/LICENSE
  23. 0 47
      admin/node_modules/wide-align/README.md
  24. 0 65
      admin/node_modules/wide-align/align.js
  25. 0 70
      admin/node_modules/wide-align/package.json
  26. 0 9
      admin/node_modules/wildcard/.travis.yml
  27. 0 99
      admin/node_modules/wildcard/README.md
  28. 0 9
      admin/node_modules/wildcard/docs.json
  29. 0 10
      admin/node_modules/wildcard/examples/arrays.js
  30. 0 10
      admin/node_modules/wildcard/examples/objects.js
  31. 0 7
      admin/node_modules/wildcard/examples/strings.js
  32. 0 114
      admin/node_modules/wildcard/index.js
  33. 0 85
      admin/node_modules/wildcard/package.json
  34. 0 3
      admin/node_modules/wildcard/test/all.js
  35. 0 33
      admin/node_modules/wildcard/test/arrays.js
  36. 0 106
      admin/node_modules/wildcard/test/objects.js
  37. 0 46
      admin/node_modules/wildcard/test/strings.js
  38. 0 228
      admin/node_modules/wildcard/yarn.lock
  39. 0 21
      admin/node_modules/word-wrap/LICENSE
  40. 0 182
      admin/node_modules/word-wrap/README.md
  41. 0 50
      admin/node_modules/word-wrap/index.d.ts
  42. 0 46
      admin/node_modules/word-wrap/index.js
  43. 0 142
      admin/node_modules/word-wrap/package.json
  44. 0 18
      admin/node_modules/wordwrap/LICENSE
  45. 0 70
      admin/node_modules/wordwrap/README.markdown
  46. 0 10
      admin/node_modules/wordwrap/example/center.js
  47. 0 3
      admin/node_modules/wordwrap/example/meat.js
  48. 0 76
      admin/node_modules/wordwrap/index.js
  49. 0 67
      admin/node_modules/wordwrap/package.json
  50. 0 32
      admin/node_modules/wordwrap/test/break.js
  51. 0 50
      admin/node_modules/wordwrap/test/idleness.txt
  52. 0 33
      admin/node_modules/wordwrap/test/wrap.js
  53. 0 16
      admin/node_modules/worker-farm/.editorconfig
  54. 0 12
      admin/node_modules/worker-farm/.travis.yml
  55. 0 13
      admin/node_modules/worker-farm/LICENSE.md
  56. 0 150
      admin/node_modules/worker-farm/README.md
  57. 0 5
      admin/node_modules/worker-farm/examples/basic/child.js
  58. 0 13
      admin/node_modules/worker-farm/examples/basic/index.js
  59. 0 22
      admin/node_modules/worker-farm/examples/pi/calc.js
  60. 0 41
      admin/node_modules/worker-farm/examples/pi/index.js
  61. 0 55
      admin/node_modules/worker-farm/index.d.ts
  62. 0 56
      admin/node_modules/worker-farm/lib/child/index.js
  63. 0 348
      admin/node_modules/worker-farm/lib/farm.js
  64. 0 33
      admin/node_modules/worker-farm/lib/fork.js
  65. 0 34
      admin/node_modules/worker-farm/lib/index.js
  66. 0 63
      admin/node_modules/worker-farm/package.json
  67. 0 87
      admin/node_modules/worker-farm/tests/child.js
  68. 0 12
      admin/node_modules/worker-farm/tests/debug.js
  69. 0 616
      admin/node_modules/worker-farm/tests/index.js
  70. 0 168
      admin/node_modules/wrap-ansi/index.js
  71. 0 21
      admin/node_modules/wrap-ansi/license
  72. 0 4
      admin/node_modules/wrap-ansi/node_modules/ansi-regex/index.js
  73. 0 21
      admin/node_modules/wrap-ansi/node_modules/ansi-regex/license
  74. 0 112
      admin/node_modules/wrap-ansi/node_modules/ansi-regex/package.json
  75. 0 39
      admin/node_modules/wrap-ansi/node_modules/ansi-regex/readme.md
  76. 0 46
      admin/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/index.js
  77. 0 21
      admin/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/license
  78. 0 81
      admin/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/package.json
  79. 0 39
      admin/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/readme.md
  80. 0 37
      admin/node_modules/wrap-ansi/node_modules/string-width/index.js
  81. 0 21
      admin/node_modules/wrap-ansi/node_modules/string-width/license
  82. 0 92
      admin/node_modules/wrap-ansi/node_modules/string-width/package.json
  83. 0 42
      admin/node_modules/wrap-ansi/node_modules/string-width/readme.md
  84. 0 6
      admin/node_modules/wrap-ansi/node_modules/strip-ansi/index.js
  85. 0 21
      admin/node_modules/wrap-ansi/node_modules/strip-ansi/license
  86. 0 106
      admin/node_modules/wrap-ansi/node_modules/strip-ansi/package.json
  87. 0 33
      admin/node_modules/wrap-ansi/node_modules/strip-ansi/readme.md
  88. 0 123
      admin/node_modules/wrap-ansi/package.json
  89. 0 73
      admin/node_modules/wrap-ansi/readme.md
  90. 0 15
      admin/node_modules/wrappy/LICENSE
  91. 0 36
      admin/node_modules/wrappy/README.md
  92. 0 62
      admin/node_modules/wrappy/package.json
  93. 0 33
      admin/node_modules/wrappy/wrappy.js
  94. 0 25
      admin/node_modules/write-file-atomic/CHANGELOG.md
  95. 0 6
      admin/node_modules/write-file-atomic/LICENSE
  96. 0 56
      admin/node_modules/write-file-atomic/README.md
  97. 0 238
      admin/node_modules/write-file-atomic/index.js
  98. 0 74
      admin/node_modules/write-file-atomic/package.json
  99. 0 21
      admin/node_modules/ws/LICENSE
  100. 0 449
      admin/node_modules/ws/README.md

+ 0 - 13
admin/node_modules/when/node/function.js

@@ -1,13 +0,0 @@
-/** @license MIT License (c) copyright 2013 original author or authors */
-
-/**
- * @author Brian Cavalier
- */
-(function(define) { 'use strict';
-define(function(require) {
-
-	// DEPRECATED: Use when/node instead
-	return require('../node');
-
-});
-}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));

+ 0 - 126
admin/node_modules/when/package.json

@@ -1,126 +0,0 @@
-{
-  "_args": [
-    [
-      "when@3.6.4",
-      "D:\\zhaogongxue\\crm\\template\\admin"
-    ]
-  ],
-  "_development": true,
-  "_from": "when@3.6.4",
-  "_id": "when@3.6.4",
-  "_inBundle": false,
-  "_integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=",
-  "_location": "/when",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "when@3.6.4",
-    "name": "when",
-    "escapedName": "when",
-    "rawSpec": "3.6.4",
-    "saveSpec": null,
-    "fetchSpec": "3.6.4"
-  },
-  "_requiredBy": [
-    "/stylus-loader"
-  ],
-  "_resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz",
-  "_spec": "3.6.4",
-  "_where": "D:\\zhaogongxue\\crm\\template\\admin",
-  "browser": {
-    "vertx": false
-  },
-  "bugs": {
-    "url": "https://github.com/cujojs/when/issues"
-  },
-  "contributors": [
-    {
-      "name": "Brian Cavalier",
-      "url": "http://hovercraftstudios.com"
-    },
-    {
-      "name": "John Hann",
-      "url": "http://unscriptable.com"
-    },
-    {
-      "name": "Scott Andrews"
-    }
-  ],
-  "description": "A lightweight Promises/A+ and when() implementation, plus other async goodies.",
-  "devDependencies": {
-    "benchmark": "~1",
-    "browserify": "~2",
-    "buster": "~0.7",
-    "jshint": "~2",
-    "json5": "~0.2",
-    "microtime": "~0",
-    "optimist": "~0.6",
-    "poly": "git://github.com/cujojs/poly.git#0.6.0",
-    "promises-aplus-tests": "~2",
-    "rest": "1.1.x",
-    "sauce-connect-launcher": "~0.4",
-    "wd": "~0.2"
-  },
-  "directories": {
-    "test": "test"
-  },
-  "ender": {
-    "files": [
-      "*.js",
-      "lib/*.js",
-      "node/*.js",
-      "unfold/*.js",
-      "monitor/*.js"
-    ]
-  },
-  "homepage": "http://cujojs.com",
-  "keywords": [
-    "cujo",
-    "Promises/A+",
-    "promises-aplus",
-    "promise",
-    "promises",
-    "deferred",
-    "deferreds",
-    "when",
-    "async",
-    "asynchronous",
-    "ender"
-  ],
-  "licenses": [
-    {
-      "type": "MIT",
-      "url": "http://www.opensource.org/licenses/mit-license.php"
-    }
-  ],
-  "main": "when",
-  "maintainers": [
-    {
-      "name": "Brian Cavalier",
-      "url": "http://hovercraftstudios.com"
-    },
-    {
-      "name": "John Hann",
-      "url": "http://unscriptable.com"
-    }
-  ],
-  "name": "when",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/cujojs/when.git"
-  },
-  "scripts": {
-    "benchmark": "node benchmark/promise && node benchmark/map",
-    "browser-test": "npm run build-browser-test && buster-static -e browser -p 8080",
-    "browserify": "browserify -s when build/when.browserify.js --no-detect-globals -o build/when.js",
-    "browserify-debug": "browserify -s when build/when.browserify-debug.js --no-detect-globals -o build/when.js",
-    "browserify-es6": "browserify -s Promise es6-shim/Promise.browserify-es6.js --no-detect-globals -o es6-shim/Promise.js",
-    "build-browser-test": "browserify ./node_modules/poly/es5.js -o test/browser/es5.js && browserify ./test/*-test.js ./test/**/*-test.js -o test/browser/tests.js -x buster ",
-    "ci": "npm test && node test/sauce.js",
-    "start": "buster-static -e browser",
-    "test": "jshint . && buster-test -e node && promises-aplus-tests test/promises-aplus-adapter.js",
-    "tunnel": "node test/sauce.js -m"
-  },
-  "version": "3.6.4"
-}

+ 0 - 39
admin/node_modules/when/parallel.js

@@ -1,39 +0,0 @@
-/** @license MIT License (c) copyright 2011-2013 original author or authors */
-
-/**
- * parallel.js
- *
- * Run a set of task functions in parallel.  All tasks will
- * receive the same args
- *
- * @author Brian Cavalier
- * @author John Hann
- */
-
-(function(define) {
-define(function(require) {
-
-	var when = require('./when');
-	var all = when.Promise.all;
-	var slice = Array.prototype.slice;
-
-	/**
-	 * Run array of tasks in parallel
-	 * @param tasks {Array|Promise} array or promiseForArray of task functions
-	 * @param [args] {*} arguments to be passed to all tasks
-	 * @return {Promise} promise for array containing the
-	 * result of each task in the array position corresponding
-	 * to position of the task in the tasks array
-	 */
-	return function parallel(tasks /*, args... */) {
-		return all(slice.call(arguments, 1)).then(function(args) {
-			return when.map(tasks, function(task) {
-				return task.apply(void 0, args);
-			});
-		});
-	};
-
-});
-})(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); });
-
-

+ 0 - 50
admin/node_modules/when/pipeline.js

@@ -1,50 +0,0 @@
-/** @license MIT License (c) copyright 2011-2013 original author or authors */
-
-/**
- * pipeline.js
- *
- * Run a set of task functions in sequence, passing the result
- * of the previous as an argument to the next.  Like a shell
- * pipeline, e.g. `cat file.txt | grep 'foo' | sed -e 's/foo/bar/g'
- *
- * @author Brian Cavalier
- * @author John Hann
- */
-
-(function(define) {
-define(function(require) {
-
-	var when = require('./when');
-	var all = when.Promise.all;
-	var slice = Array.prototype.slice;
-
-	/**
-	 * Run array of tasks in a pipeline where the next
-	 * tasks receives the result of the previous.  The first task
-	 * will receive the initialArgs as its argument list.
-	 * @param tasks {Array|Promise} array or promise for array of task functions
-	 * @param [initialArgs...] {*} arguments to be passed to the first task
-	 * @return {Promise} promise for return value of the final task
-	 */
-	return function pipeline(tasks /* initialArgs... */) {
-		// Self-optimizing function to run first task with multiple
-		// args using apply, but subsequence tasks via direct invocation
-		var runTask = function(args, task) {
-			runTask = function(arg, task) {
-				return task(arg);
-			};
-
-			return task.apply(null, args);
-		};
-
-		return all(slice.call(arguments, 1)).then(function(args) {
-			return when.reduce(tasks, function(arg, task) {
-				return runTask(arg, task);
-			}, args);
-		});
-	};
-
-});
-})(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); });
-
-

+ 0 - 114
admin/node_modules/when/poll.js

@@ -1,114 +0,0 @@
-/** @license MIT License (c) copyright 2012-2013 original author or authors */
-
-/**
- * poll.js
- *
- * Helper that polls until cancelled or for a condition to become true.
- *
- * @author Scott Andrews
- */
-
-(function (define) { 'use strict';
-define(function(require) {
-
-	var when = require('./when');
-	var attempt = when['try'];
-	var cancelable = require('./cancelable');
-
-	/**
-	 * Periodically execute the work function on the msec delay. The result of
-	 * the work may be verified by watching for a condition to become true. The
-	 * returned deferred is cancellable if the polling needs to be cancelled
-	 * externally before reaching a resolved state.
-	 *
-	 * The next vote is scheduled after the results of the current vote are
-	 * verified and rejected.
-	 *
-	 * Polling may be terminated by the verifier returning a truthy value,
-	 * invoking cancel() on the returned promise, or the work function returning
-	 * a rejected promise.
-	 *
-	 * Usage:
-	 *
-	 * var count = 0;
-	 * function doSomething() { return count++ }
-	 *
-	 * // poll until cancelled
-	 * var p = poll(doSomething, 1000);
-	 * ...
-	 * p.cancel();
-	 *
-	 * // poll until condition is met
-	 * poll(doSomething, 1000, function(result) { return result > 10 })
-	 *     .then(function(result) { assert result == 10 });
-	 *
-	 * // delay first vote
-	 * poll(doSomething, 1000, anyFunc, true);
-	 *
-	 * @param work {Function} function that is executed after every timeout
-	 * @param interval {number|Function} timeout in milliseconds
-	 * @param [verifier] {Function} function to evaluate the result of the vote.
-	 *     May return a {Promise} or a {Boolean}. Rejecting the promise or a
-	 *     falsey value will schedule the next vote.
-	 * @param [delayInitialWork] {boolean} if truthy, the first vote is scheduled
-	 *     instead of immediate
-	 *
-	 * @returns {Promise}
-	 */
-	return function poll(work, interval, verifier, delayInitialWork) {
-		var deferred, canceled, reject;
-
-		canceled = false;
-		deferred = cancelable(when.defer(), function () { canceled = true; });
-		reject = deferred.reject;
-
-		verifier = verifier || function () { return false; };
-
-		if (typeof interval !== 'function') {
-			interval = (function (interval) {
-				return function () { return when().delay(interval); };
-			})(interval);
-		}
-
-		function certify(result) {
-			deferred.resolve(result);
-		}
-
-		function schedule(result) {
-			attempt(interval).then(vote, reject);
-			if (result !== void 0) {
-				deferred.notify(result);
-			}
-		}
-
-		function vote() {
-			if (canceled) { return; }
-			when(work(),
-				function (result) {
-					when(verifier(result),
-						function (verification) {
-							return verification ? certify(result) : schedule(result);
-						},
-						function () { schedule(result); }
-					);
-				},
-				reject
-			);
-		}
-
-		if (delayInitialWork) {
-			schedule();
-		} else {
-			// if work() is blocking, vote will also block
-			vote();
-		}
-
-		// make the promise cancelable
-		deferred.promise = Object.create(deferred.promise);
-		deferred.promise.cancel = deferred.cancel;
-
-		return deferred.promise;
-	};
-
-});
-})(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); });

+ 0 - 46
admin/node_modules/when/sequence.js

@@ -1,46 +0,0 @@
-/** @license MIT License (c) copyright 2011-2013 original author or authors */
-
-/**
- * sequence.js
- *
- * Run a set of task functions in sequence.  All tasks will
- * receive the same args.
- *
- * @author Brian Cavalier
- * @author John Hann
- */
-
-(function(define) {
-define(function(require) {
-
-	var when = require('./when');
-	var all = when.Promise.all;
-	var slice = Array.prototype.slice;
-
-	/**
-	 * Run array of tasks in sequence with no overlap
-	 * @param tasks {Array|Promise} array or promiseForArray of task functions
-	 * @param [args] {*} arguments to be passed to all tasks
-	 * @return {Promise} promise for an array containing
-	 * the result of each task in the array position corresponding
-	 * to position of the task in the tasks array
-	 */
-	return function sequence(tasks /*, args... */) {
-		var results = [];
-
-		return all(slice.call(arguments, 1)).then(function(args) {
-			return when.reduce(tasks, function(results, task) {
-				return when(task.apply(void 0, args), addResult);
-			}, results);
-		});
-
-		function addResult(result) {
-			results.push(result);
-			return results;
-		}
-	};
-
-});
-})(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); });
-
-

+ 0 - 27
admin/node_modules/when/timeout.js

@@ -1,27 +0,0 @@
-/** @license MIT License (c) copyright 2011-2013 original author or authors */
-
-/**
- * timeout.js
- *
- * Helper that returns a promise that rejects after a specified timeout,
- * if not explicitly resolved or rejected before that.
- *
- * @author Brian Cavalier
- * @author John Hann
- */
-
-(function(define) {
-define(function(require) {
-
-	var when = require('./when');
-
-    /**
-	 * @deprecated Use when(trigger).timeout(ms)
-     */
-    return function timeout(msec, trigger) {
-		return when(trigger).timeout(msec);
-    };
-});
-})(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); });
-
-

+ 0 - 17
admin/node_modules/when/unfold.js

@@ -1,17 +0,0 @@
-/** @license MIT License (c) copyright B Cavalier & J Hann */
-
-/**
- * unfold
- * @author: brian@hovercraftstudios.com
- */
-(function(define) {
-define(function(require) {
-
-	/**
-	 * @deprecated Use when.unfold
-	 */
-	return require('./when').unfold;
-
-});
-})(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); } );
-

+ 0 - 32
admin/node_modules/when/unfold/list.js

@@ -1,32 +0,0 @@
-/** @license MIT License (c) copyright B Cavalier & J Hann */
-
-(function(define) {
-define(function(require) {
-
-	var unfold = require('../when').unfold;
-
-	/**
-	 * @deprecated
-	 * Given a seed and generator, produces an Array.  Effectively the
-	 * dual (opposite) of when.reduce()
-	 * @param {function} generator function that generates a value (or promise
-	 *  for a value) to be placed in the resulting array
-	 * @param {function} condition given a seed, must return truthy if the unfold
-	 *  should continue, or falsey if it should terminate
-	 * @param {*|Promise} seed any value or promise
-	 * @return {Promise} resulting array
-	 */
-	return function list(generator, condition, seed) {
-		var result = [];
-
-		return unfold(generator, condition, append, seed)['yield'](result);
-
-		function append(value, newSeed) {
-			result.push(value);
-			return newSeed;
-		}
-	};
-
-});
-})(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); });
-

+ 0 - 229
admin/node_modules/when/when.js

@@ -1,229 +0,0 @@
-/** @license MIT License (c) copyright 2010-2014 original author or authors */
-
-/**
- * Promises/A+ and when() implementation
- * when is part of the cujoJS family of libraries (http://cujojs.com/)
- * @author Brian Cavalier
- * @author John Hann
- * @version 3.6.4
- */
-(function(define) { 'use strict';
-define(function (require) {
-
-	var timed = require('./lib/decorators/timed');
-	var array = require('./lib/decorators/array');
-	var flow = require('./lib/decorators/flow');
-	var fold = require('./lib/decorators/fold');
-	var inspect = require('./lib/decorators/inspect');
-	var generate = require('./lib/decorators/iterate');
-	var progress = require('./lib/decorators/progress');
-	var withThis = require('./lib/decorators/with');
-	var unhandledRejection = require('./lib/decorators/unhandledRejection');
-	var TimeoutError = require('./lib/TimeoutError');
-
-	var Promise = [array, flow, fold, generate, progress,
-		inspect, withThis, timed, unhandledRejection]
-		.reduce(function(Promise, feature) {
-			return feature(Promise);
-		}, require('./lib/Promise'));
-
-	var apply = require('./lib/apply')(Promise);
-
-	// Public API
-
-	when.promise     = promise;              // Create a pending promise
-	when.resolve     = Promise.resolve;      // Create a resolved promise
-	when.reject      = Promise.reject;       // Create a rejected promise
-
-	when.lift        = lift;                 // lift a function to return promises
-	when['try']      = attempt;              // call a function and return a promise
-	when.attempt     = attempt;              // alias for when.try
-
-	when.iterate     = Promise.iterate;      // DEPRECATED (use cujojs/most streams) Generate a stream of promises
-	when.unfold      = Promise.unfold;       // DEPRECATED (use cujojs/most streams) Generate a stream of promises
-
-	when.join        = join;                 // Join 2 or more promises
-
-	when.all         = all;                  // Resolve a list of promises
-	when.settle      = settle;               // Settle a list of promises
-
-	when.any         = lift(Promise.any);    // One-winner race
-	when.some        = lift(Promise.some);   // Multi-winner race
-	when.race        = lift(Promise.race);   // First-to-settle race
-
-	when.map         = map;                  // Array.map() for promises
-	when.filter      = filter;               // Array.filter() for promises
-	when.reduce      = lift(Promise.reduce);       // Array.reduce() for promises
-	when.reduceRight = lift(Promise.reduceRight);  // Array.reduceRight() for promises
-
-	when.isPromiseLike = isPromiseLike;      // Is something promise-like, aka thenable
-
-	when.Promise     = Promise;              // Promise constructor
-	when.defer       = defer;                // Create a {promise, resolve, reject} tuple
-
-	// Error types
-
-	when.TimeoutError = TimeoutError;
-
-	/**
-	 * Get a trusted promise for x, or by transforming x with onFulfilled
-	 *
-	 * @param {*} x
-	 * @param {function?} onFulfilled callback to be called when x is
-	 *   successfully fulfilled.  If promiseOrValue is an immediate value, callback
-	 *   will be invoked immediately.
-	 * @param {function?} onRejected callback to be called when x is
-	 *   rejected.
-	 * @param {function?} onProgress callback to be called when progress updates
-	 *   are issued for x. @deprecated
-	 * @returns {Promise} a new promise that will fulfill with the return
-	 *   value of callback or errback or the completion value of promiseOrValue if
-	 *   callback and/or errback is not supplied.
-	 */
-	function when(x, onFulfilled, onRejected, onProgress) {
-		var p = Promise.resolve(x);
-		if (arguments.length < 2) {
-			return p;
-		}
-
-		return p.then(onFulfilled, onRejected, onProgress);
-	}
-
-	/**
-	 * Creates a new promise whose fate is determined by resolver.
-	 * @param {function} resolver function(resolve, reject, notify)
-	 * @returns {Promise} promise whose fate is determine by resolver
-	 */
-	function promise(resolver) {
-		return new Promise(resolver);
-	}
-
-	/**
-	 * Lift the supplied function, creating a version of f that returns
-	 * promises, and accepts promises as arguments.
-	 * @param {function} f
-	 * @returns {Function} version of f that returns promises
-	 */
-	function lift(f) {
-		return function() {
-			for(var i=0, l=arguments.length, a=new Array(l); i<l; ++i) {
-				a[i] = arguments[i];
-			}
-			return apply(f, this, a);
-		};
-	}
-
-	/**
-	 * Call f in a future turn, with the supplied args, and return a promise
-	 * for the result.
-	 * @param {function} f
-	 * @returns {Promise}
-	 */
-	function attempt(f /*, args... */) {
-		/*jshint validthis:true */
-		for(var i=0, l=arguments.length-1, a=new Array(l); i<l; ++i) {
-			a[i] = arguments[i+1];
-		}
-		return apply(f, this, a);
-	}
-
-	/**
-	 * Creates a {promise, resolver} pair, either or both of which
-	 * may be given out safely to consumers.
-	 * @return {{promise: Promise, resolve: function, reject: function, notify: function}}
-	 */
-	function defer() {
-		return new Deferred();
-	}
-
-	function Deferred() {
-		var p = Promise._defer();
-
-		function resolve(x) { p._handler.resolve(x); }
-		function reject(x) { p._handler.reject(x); }
-		function notify(x) { p._handler.notify(x); }
-
-		this.promise = p;
-		this.resolve = resolve;
-		this.reject = reject;
-		this.notify = notify;
-		this.resolver = { resolve: resolve, reject: reject, notify: notify };
-	}
-
-	/**
-	 * Determines if x is promise-like, i.e. a thenable object
-	 * NOTE: Will return true for *any thenable object*, and isn't truly
-	 * safe, since it may attempt to access the `then` property of x (i.e.
-	 *  clever/malicious getters may do weird things)
-	 * @param {*} x anything
-	 * @returns {boolean} true if x is promise-like
-	 */
-	function isPromiseLike(x) {
-		return x && typeof x.then === 'function';
-	}
-
-	/**
-	 * Return a promise that will resolve only once all the supplied arguments
-	 * have resolved. The resolution value of the returned promise will be an array
-	 * containing the resolution values of each of the arguments.
-	 * @param {...*} arguments may be a mix of promises and values
-	 * @returns {Promise}
-	 */
-	function join(/* ...promises */) {
-		return Promise.all(arguments);
-	}
-
-	/**
-	 * Return a promise that will fulfill once all input promises have
-	 * fulfilled, or reject when any one input promise rejects.
-	 * @param {array|Promise} promises array (or promise for an array) of promises
-	 * @returns {Promise}
-	 */
-	function all(promises) {
-		return when(promises, Promise.all);
-	}
-
-	/**
-	 * Return a promise that will always fulfill with an array containing
-	 * the outcome states of all input promises.  The returned promise
-	 * will only reject if `promises` itself is a rejected promise.
-	 * @param {array|Promise} promises array (or promise for an array) of promises
-	 * @returns {Promise} promise for array of settled state descriptors
-	 */
-	function settle(promises) {
-		return when(promises, Promise.settle);
-	}
-
-	/**
-	 * Promise-aware array map function, similar to `Array.prototype.map()`,
-	 * but input array may contain promises or values.
-	 * @param {Array|Promise} promises array of anything, may contain promises and values
-	 * @param {function(x:*, index:Number):*} mapFunc map function which may
-	 *  return a promise or value
-	 * @returns {Promise} promise that will fulfill with an array of mapped values
-	 *  or reject if any input promise rejects.
-	 */
-	function map(promises, mapFunc) {
-		return when(promises, function(promises) {
-			return Promise.map(promises, mapFunc);
-		});
-	}
-
-	/**
-	 * Filter the provided array of promises using the provided predicate.  Input may
-	 * contain promises and values
-	 * @param {Array|Promise} promises array of promises and values
-	 * @param {function(x:*, index:Number):boolean} predicate filtering predicate.
-	 *  Must return truthy (or promise for truthy) for items to retain.
-	 * @returns {Promise} promise that will fulfill with an array containing all items
-	 *  for which predicate returned truthy.
-	 */
-	function filter(promises, predicate) {
-		return when(promises, function(promises) {
-			return Promise.filter(promises, predicate);
-		});
-	}
-
-	return when;
-});
-})(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); });

+ 0 - 26
admin/node_modules/which-module/CHANGELOG.md

@@ -1,26 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
-
-<a name="2.0.0"></a>
-# [2.0.0](https://github.com/nexdrew/which-module/compare/v1.0.0...v2.0.0) (2017-05-01)
-
-
-### Features
-
-* remove Node < 4 from official testing/support ([#22](https://github.com/nexdrew/which-module/issues/22)) ([ee7aff4](https://github.com/nexdrew/which-module/commit/ee7aff4))
-
-
-### BREAKING CHANGES
-
-* Node 0.10 or 0.12 no longer supported, please update to Node 4+ or use which-module@1.0.0
-
-
-
-<a name="1.0.0"></a>
-# 1.0.0 (2016-06-06)
-
-
-### Features
-
-* initial code ([08074cd](https://github.com/nexdrew/which-module/commit/08074cd))

+ 0 - 13
admin/node_modules/which-module/LICENSE

@@ -1,13 +0,0 @@
-Copyright (c) 2016, Contributors
-
-Permission to use, copy, modify, and/or distribute this software for any purpose
-with or without fee is hereby granted, provided that the above copyright notice
-and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.

+ 0 - 55
admin/node_modules/which-module/README.md

@@ -1,55 +0,0 @@
-# which-module
-
-> Find the module object for something that was require()d
-
-[![Build Status](https://travis-ci.org/nexdrew/which-module.svg?branch=master)](https://travis-ci.org/nexdrew/which-module)
-[![Coverage Status](https://coveralls.io/repos/github/nexdrew/which-module/badge.svg?branch=master)](https://coveralls.io/github/nexdrew/which-module?branch=master)
-[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version)
-
-Find the `module` object in `require.cache` for something that was `require()`d
-or `import`ed - essentially a reverse `require()` lookup.
-
-Useful for libs that want to e.g. lookup a filename for a module or submodule
-that it did not `require()` itself.
-
-## Install and Usage
-
-```
-npm install --save which-module
-```
-
-```js
-const whichModule = require('which-module')
-
-console.log(whichModule(require('something')))
-// Module {
-//   id: '/path/to/project/node_modules/something/index.js',
-//   exports: [Function],
-//   parent: ...,
-//   filename: '/path/to/project/node_modules/something/index.js',
-//   loaded: true,
-//   children: [],
-//   paths: [ '/path/to/project/node_modules/something/node_modules',
-//            '/path/to/project/node_modules',
-//            '/path/to/node_modules',
-//            '/path/node_modules',
-//            '/node_modules' ] }
-```
-
-## API
-
-### `whichModule(exported)`
-
-Return the [`module` object](https://nodejs.org/api/modules.html#modules_the_module_object),
-if any, that represents the given argument in the `require.cache`.
-
-`exported` can be anything that was previously `require()`d or `import`ed as a
-module, submodule, or dependency - which means `exported` is identical to the
-`module.exports` returned by this method.
-
-If `exported` did not come from the `exports` of a `module` in `require.cache`,
-then this method returns `null`.
-
-## License
-
-ISC © Contributors

+ 0 - 9
admin/node_modules/which-module/index.js

@@ -1,9 +0,0 @@
-'use strict'
-
-module.exports = function whichModule (exported) {
-  for (var i = 0, files = Object.keys(require.cache), mod; i < files.length; i++) {
-    mod = require.cache[files[i]]
-    if (mod.exports === exported) return mod
-  }
-  return null
-}

+ 0 - 75
admin/node_modules/which-module/package.json

@@ -1,75 +0,0 @@
-{
-  "_args": [
-    [
-      "which-module@2.0.0",
-      "D:\\zhaogongxue\\crm\\template\\admin"
-    ]
-  ],
-  "_development": true,
-  "_from": "which-module@2.0.0",
-  "_id": "which-module@2.0.0",
-  "_inBundle": false,
-  "_integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
-  "_location": "/which-module",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "which-module@2.0.0",
-    "name": "which-module",
-    "escapedName": "which-module",
-    "rawSpec": "2.0.0",
-    "saveSpec": null,
-    "fetchSpec": "2.0.0"
-  },
-  "_requiredBy": [
-    "/cli-highlight/yargs",
-    "/sass-graph/yargs",
-    "/webpack-dev-server/yargs",
-    "/yargs"
-  ],
-  "_resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
-  "_spec": "2.0.0",
-  "_where": "D:\\zhaogongxue\\crm\\template\\admin",
-  "author": {
-    "name": "nexdrew"
-  },
-  "bugs": {
-    "url": "https://github.com/nexdrew/which-module/issues"
-  },
-  "description": "Find the module object for something that was require()d",
-  "devDependencies": {
-    "ava": "^0.19.1",
-    "coveralls": "^2.13.1",
-    "nyc": "^10.3.0",
-    "standard": "^10.0.2",
-    "standard-version": "^4.0.0"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/nexdrew/which-module#readme",
-  "keywords": [
-    "which",
-    "module",
-    "exports",
-    "filename",
-    "require",
-    "reverse",
-    "lookup"
-  ],
-  "license": "ISC",
-  "main": "index.js",
-  "name": "which-module",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/nexdrew/which-module.git"
-  },
-  "scripts": {
-    "coverage": "nyc report --reporter=text-lcov | coveralls",
-    "pretest": "standard",
-    "release": "standard-version",
-    "test": "nyc ava"
-  },
-  "version": "2.0.0"
-}

+ 0 - 152
admin/node_modules/which/CHANGELOG.md

@@ -1,152 +0,0 @@
-# Changes
-
-
-## 1.3.1
-
-* update deps
-* update travis
-
-## v1.3.0
-
-* Add nothrow option to which.sync
-* update tap
-
-## v1.2.14
-
-* appveyor: drop node 5 and 0.x
-* travis-ci: add node 6, drop 0.x
-
-## v1.2.13
-
-* test: Pass missing option to pass on windows
-* update tap
-* update isexe to 2.0.0
-* neveragain.tech pledge request
-
-## v1.2.12
-
-* Removed unused require
-
-## v1.2.11
-
-* Prevent changelog script from being included in package
-
-## v1.2.10
-
-* Use env.PATH only, not env.Path
-
-## v1.2.9
-
-* fix for paths starting with ../
-* Remove unused `is-absolute` module
-
-## v1.2.8
-
-* bullet items in changelog that contain (but don't start with) #
-
-## v1.2.7
-
-* strip 'update changelog' changelog entries out of changelog
-
-## v1.2.6
-
-* make the changelog bulleted
-
-## v1.2.5
-
-* make a changelog, and keep it up to date
-* don't include tests in package
-* Properly handle relative-path executables
-* appveyor
-* Attach error code to Not Found error
-* Make tests pass on Windows
-
-## v1.2.4
-
-* Fix typo
-
-## v1.2.3
-
-* update isexe, fix regression in pathExt handling
-
-## v1.2.2
-
-* update deps, use isexe module, test windows
-
-## v1.2.1
-
-* Sometimes windows PATH entries are quoted
-* Fixed a bug in the check for group and user mode bits. This bug was introduced during refactoring for supporting strict mode.
-* doc cli
-
-## v1.2.0
-
-* Add support for opt.all and -as cli flags
-* test the bin
-* update travis
-* Allow checking for multiple programs in bin/which
-* tap 2
-
-## v1.1.2
-
-* travis
-* Refactored and fixed undefined error on Windows
-* Support strict mode
-
-## v1.1.1
-
-* test +g exes against secondary groups, if available
-* Use windows exe semantics on cygwin & msys
-* cwd should be first in path on win32, not last
-* Handle lower-case 'env.Path' on Windows
-* Update docs
-* use single-quotes
-
-## v1.1.0
-
-* Add tests, depend on is-absolute
-
-## v1.0.9
-
-* which.js: root is allowed to execute files owned by anyone
-
-## v1.0.8
-
-* don't use graceful-fs
-
-## v1.0.7
-
-* add license to package.json
-
-## v1.0.6
-
-* isc license
-
-## 1.0.5
-
-* Awful typo
-
-## 1.0.4
-
-* Test for path absoluteness properly
-* win: Allow '' as a pathext if cmd has a . in it
-
-## 1.0.3
-
-* Remove references to execPath
-* Make `which.sync()` work on Windows by honoring the PATHEXT variable.
-* Make `isExe()` always return true on Windows.
-* MIT
-
-## 1.0.2
-
-* Only files can be exes
-
-## 1.0.1
-
-* Respect the PATHEXT env for win32 support
-* should 0755 the bin
-* binary
-* guts
-* package
-* 1st

+ 0 - 15
admin/node_modules/which/LICENSE

@@ -1,15 +0,0 @@
-The ISC License
-
-Copyright (c) Isaac Z. Schlueter and Contributors
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

+ 0 - 51
admin/node_modules/which/README.md

@@ -1,51 +0,0 @@
-# which
-
-Like the unix `which` utility.
-
-Finds the first instance of a specified executable in the PATH
-environment variable.  Does not cache the results, so `hash -r` is not
-needed when the PATH changes.
-
-## USAGE
-
-```javascript
-var which = require('which')
-
-// async usage
-which('node', function (er, resolvedPath) {
-  // er is returned if no "node" is found on the PATH
-  // if it is found, then the absolute path to the exec is returned
-})
-
-// sync usage
-// throws if not found
-var resolved = which.sync('node')
-
-// if nothrow option is used, returns null if not found
-resolved = which.sync('node', {nothrow: true})
-
-// Pass options to override the PATH and PATHEXT environment vars.
-which('node', { path: someOtherPath }, function (er, resolved) {
-  if (er)
-    throw er
-  console.log('found at %j', resolved)
-})
-```
-
-## CLI USAGE
-
-Same as the BSD `which(1)` binary.
-
-```
-usage: which [-as] program ...
-```
-
-## OPTIONS
-
-You may pass an options object as the second argument.
-
-- `path`: Use instead of the `PATH` environment variable.
-- `pathExt`: Use instead of the `PATHEXT` environment variable.
-- `all`: Return all matches, instead of just the first one.  Note that
-  this means the function returns an array of strings instead of a
-  single string.

+ 0 - 52
admin/node_modules/which/bin/which

@@ -1,52 +0,0 @@
-#!/usr/bin/env node
-var which = require("../")
-if (process.argv.length < 3)
-  usage()
-
-function usage () {
-  console.error('usage: which [-as] program ...')
-  process.exit(1)
-}
-
-var all = false
-var silent = false
-var dashdash = false
-var args = process.argv.slice(2).filter(function (arg) {
-  if (dashdash || !/^-/.test(arg))
-    return true
-
-  if (arg === '--') {
-    dashdash = true
-    return false
-  }
-
-  var flags = arg.substr(1).split('')
-  for (var f = 0; f < flags.length; f++) {
-    var flag = flags[f]
-    switch (flag) {
-      case 's':
-        silent = true
-        break
-      case 'a':
-        all = true
-        break
-      default:
-        console.error('which: illegal option -- ' + flag)
-        usage()
-    }
-  }
-  return false
-})
-
-process.exit(args.reduce(function (pv, current) {
-  try {
-    var f = which.sync(current, { all: all })
-    if (all)
-      f = f.join('\n')
-    if (!silent)
-      console.log(f)
-    return pv;
-  } catch (e) {
-    return 1;
-  }
-}, 0))

+ 0 - 77
admin/node_modules/which/package.json

@@ -1,77 +0,0 @@
-{
-  "_args": [
-    [
-      "which@1.3.1",
-      "D:\\zhaogongxue\\crm\\template\\admin"
-    ]
-  ],
-  "_development": true,
-  "_from": "which@1.3.1",
-  "_id": "which@1.3.1",
-  "_inBundle": false,
-  "_integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-  "_location": "/which",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "which@1.3.1",
-    "name": "which",
-    "escapedName": "which",
-    "rawSpec": "1.3.1",
-    "saveSpec": null,
-    "fetchSpec": "1.3.1"
-  },
-  "_requiredBy": [
-    "/cross-spawn",
-    "/jest/jest-cli",
-    "/lint-staged/cross-spawn",
-    "/node-gyp",
-    "/node-notifier",
-    "/node-sass/cross-spawn",
-    "/npm-path",
-    "/npm-which",
-    "/yorkie/cross-spawn"
-  ],
-  "_resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-  "_spec": "1.3.1",
-  "_where": "D:\\zhaogongxue\\crm\\template\\admin",
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me",
-    "url": "http://blog.izs.me"
-  },
-  "bin": {
-    "which": "bin/which"
-  },
-  "bugs": {
-    "url": "https://github.com/isaacs/node-which/issues"
-  },
-  "dependencies": {
-    "isexe": "^2.0.0"
-  },
-  "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.",
-  "devDependencies": {
-    "mkdirp": "^0.5.0",
-    "rimraf": "^2.6.2",
-    "tap": "^12.0.1"
-  },
-  "files": [
-    "which.js",
-    "bin/which"
-  ],
-  "homepage": "https://github.com/isaacs/node-which#readme",
-  "license": "ISC",
-  "main": "which.js",
-  "name": "which",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/isaacs/node-which.git"
-  },
-  "scripts": {
-    "changelog": "bash gen-changelog.sh",
-    "postversion": "npm run changelog && git add CHANGELOG.md && git commit -m 'update changelog - '${npm_package_version}",
-    "test": "tap test/*.js --cov"
-  },
-  "version": "1.3.1"
-}

+ 0 - 135
admin/node_modules/which/which.js

@@ -1,135 +0,0 @@
-module.exports = which
-which.sync = whichSync
-
-var isWindows = process.platform === 'win32' ||
-    process.env.OSTYPE === 'cygwin' ||
-    process.env.OSTYPE === 'msys'
-
-var path = require('path')
-var COLON = isWindows ? ';' : ':'
-var isexe = require('isexe')
-
-function getNotFoundError (cmd) {
-  var er = new Error('not found: ' + cmd)
-  er.code = 'ENOENT'
-
-  return er
-}
-
-function getPathInfo (cmd, opt) {
-  var colon = opt.colon || COLON
-  var pathEnv = opt.path || process.env.PATH || ''
-  var pathExt = ['']
-
-  pathEnv = pathEnv.split(colon)
-
-  var pathExtExe = ''
-  if (isWindows) {
-    pathEnv.unshift(process.cwd())
-    pathExtExe = (opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM')
-    pathExt = pathExtExe.split(colon)
-
-
-    // Always test the cmd itself first.  isexe will check to make sure
-    // it's found in the pathExt set.
-    if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')
-      pathExt.unshift('')
-  }
-
-  // If it has a slash, then we don't bother searching the pathenv.
-  // just check the file itself, and that's it.
-  if (cmd.match(/\//) || isWindows && cmd.match(/\\/))
-    pathEnv = ['']
-
-  return {
-    env: pathEnv,
-    ext: pathExt,
-    extExe: pathExtExe
-  }
-}
-
-function which (cmd, opt, cb) {
-  if (typeof opt === 'function') {
-    cb = opt
-    opt = {}
-  }
-
-  var info = getPathInfo(cmd, opt)
-  var pathEnv = info.env
-  var pathExt = info.ext
-  var pathExtExe = info.extExe
-  var found = []
-
-  ;(function F (i, l) {
-    if (i === l) {
-      if (opt.all && found.length)
-        return cb(null, found)
-      else
-        return cb(getNotFoundError(cmd))
-    }
-
-    var pathPart = pathEnv[i]
-    if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"')
-      pathPart = pathPart.slice(1, -1)
-
-    var p = path.join(pathPart, cmd)
-    if (!pathPart && (/^\.[\\\/]/).test(cmd)) {
-      p = cmd.slice(0, 2) + p
-    }
-    ;(function E (ii, ll) {
-      if (ii === ll) return F(i + 1, l)
-      var ext = pathExt[ii]
-      isexe(p + ext, { pathExt: pathExtExe }, function (er, is) {
-        if (!er && is) {
-          if (opt.all)
-            found.push(p + ext)
-          else
-            return cb(null, p + ext)
-        }
-        return E(ii + 1, ll)
-      })
-    })(0, pathExt.length)
-  })(0, pathEnv.length)
-}
-
-function whichSync (cmd, opt) {
-  opt = opt || {}
-
-  var info = getPathInfo(cmd, opt)
-  var pathEnv = info.env
-  var pathExt = info.ext
-  var pathExtExe = info.extExe
-  var found = []
-
-  for (var i = 0, l = pathEnv.length; i < l; i ++) {
-    var pathPart = pathEnv[i]
-    if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"')
-      pathPart = pathPart.slice(1, -1)
-
-    var p = path.join(pathPart, cmd)
-    if (!pathPart && /^\.[\\\/]/.test(cmd)) {
-      p = cmd.slice(0, 2) + p
-    }
-    for (var j = 0, ll = pathExt.length; j < ll; j ++) {
-      var cur = p + pathExt[j]
-      var is
-      try {
-        is = isexe.sync(cur, { pathExt: pathExtExe })
-        if (is) {
-          if (opt.all)
-            found.push(cur)
-          else
-            return cur
-        }
-      } catch (ex) {}
-    }
-  }
-
-  if (opt.all && found.length)
-    return found
-
-  if (opt.nothrow)
-    return null
-
-  throw getNotFoundError(cmd)
-}

+ 0 - 14
admin/node_modules/wide-align/LICENSE

@@ -1,14 +0,0 @@
-Copyright (c) 2015, Rebecca Turner <me@re-becca.org>
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-

+ 0 - 47
admin/node_modules/wide-align/README.md

@@ -1,47 +0,0 @@
-wide-align
-----------
-
-A wide-character aware text alignment function for use in terminals / on the
-console.
-
-### Usage
-
-```
-var align = require('wide-align')
-
-// Note that if you view this on a unicode console, all of the slashes are
-// aligned. This is because on a console, all narrow characters are
-// an en wide and all wide characters are an em. In browsers, this isn't
-// held to and wide characters like "古" can be less than two narrow
-// characters even with a fixed width font.
-
-console.log(align.center('abc', 10))     // '   abc    '
-console.log(align.center('古古古', 10))  // '  古古古  '
-console.log(align.left('abc', 10))       // 'abc       '
-console.log(align.left('古古古', 10))    // '古古古    '
-console.log(align.right('abc', 10))      // '       abc'
-console.log(align.right('古古古', 10))   // '    古古古'
-```
-
-### Functions
-
-#### `align.center(str, length)` → `str`
-
-Returns *str* with spaces added to both sides such that that it is *length*
-chars long and centered in the spaces.
-
-#### `align.left(str, length)` → `str`
-
-Returns *str* with spaces to the right such that it is *length* chars long.
-
-### `align.right(str, length)` → `str`
-
-Returns *str* with spaces to the left such that it is *length* chars long.
-
-### Origins
-
-These functions were originally taken from 
-[cliui](https://npmjs.com/package/cliui). Changes include switching to the
-MUCH faster pad generation function from
-[lodash](https://npmjs.com/package/lodash), making center alignment pad
-both sides and adding left alignment.

+ 0 - 65
admin/node_modules/wide-align/align.js

@@ -1,65 +0,0 @@
-'use strict'
-var stringWidth = require('string-width')
-
-exports.center = alignCenter
-exports.left = alignLeft
-exports.right = alignRight
-
-// lodash's way of generating pad characters.
-
-function createPadding (width) {
-  var result = ''
-  var string = ' '
-  var n = width
-  do {
-    if (n % 2) {
-      result += string;
-    }
-    n = Math.floor(n / 2);
-    string += string;
-  } while (n);
-
-  return result;
-}
-
-function alignLeft (str, width) {
-  var trimmed = str.trimRight()
-  if (trimmed.length === 0 && str.length >= width) return str
-  var padding = ''
-  var strWidth = stringWidth(trimmed)
-
-  if (strWidth < width) {
-    padding = createPadding(width - strWidth)
-  }
-
-  return trimmed + padding
-}
-
-function alignRight (str, width) {
-  var trimmed = str.trimLeft()
-  if (trimmed.length === 0 && str.length >= width) return str
-  var padding = ''
-  var strWidth = stringWidth(trimmed)
-
-  if (strWidth < width) {
-    padding = createPadding(width - strWidth)
-  }
-
-  return padding + trimmed
-}
-
-function alignCenter (str, width) {
-  var trimmed = str.trim()
-  if (trimmed.length === 0 && str.length >= width) return str
-  var padLeft = ''
-  var padRight = ''
-  var strWidth = stringWidth(trimmed)
-
-  if (strWidth < width) {
-    var padLeftBy = parseInt((width - strWidth) / 2, 10) 
-    padLeft = createPadding(padLeftBy)
-    padRight = createPadding(width - (strWidth + padLeftBy))
-  }
-
-  return padLeft + trimmed + padRight
-}

+ 0 - 70
admin/node_modules/wide-align/package.json

@@ -1,70 +0,0 @@
-{
-  "//": "But not version 5 of string-width, as that's ESM only",
-  "_args": [
-    [
-      "wide-align@1.1.5",
-      "D:\\zhaogongxue\\crm\\template\\admin"
-    ]
-  ],
-  "_development": true,
-  "_from": "wide-align@1.1.5",
-  "_id": "wide-align@1.1.5",
-  "_inBundle": false,
-  "_integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
-  "_location": "/wide-align",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "wide-align@1.1.5",
-    "name": "wide-align",
-    "escapedName": "wide-align",
-    "rawSpec": "1.1.5",
-    "saveSpec": null,
-    "fetchSpec": "1.1.5"
-  },
-  "_requiredBy": [
-    "/gauge"
-  ],
-  "_resolved": "https://registry.npmmirror.com/wide-align/-/wide-align-1.1.5.tgz",
-  "_spec": "1.1.5",
-  "_where": "D:\\zhaogongxue\\crm\\template\\admin",
-  "author": {
-    "name": "Rebecca Turner",
-    "email": "me@re-becca.org",
-    "url": "http://re-becca.org/"
-  },
-  "bugs": {
-    "url": "https://github.com/iarna/wide-align/issues"
-  },
-  "dependencies": {
-    "string-width": "^1.0.2 || 2 || 3 || 4"
-  },
-  "description": "A wide-character aware text alignment function for use on the console or with fixed width fonts.",
-  "devDependencies": {
-    "tap": "*"
-  },
-  "files": [
-    "align.js"
-  ],
-  "homepage": "https://github.com/iarna/wide-align#readme",
-  "keywords": [
-    "wide",
-    "double",
-    "unicode",
-    "cjkv",
-    "pad",
-    "align"
-  ],
-  "license": "ISC",
-  "main": "align.js",
-  "name": "wide-align",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/iarna/wide-align.git"
-  },
-  "scripts": {
-    "test": "tap --coverage test/*.js"
-  },
-  "version": "1.1.5"
-}

+ 0 - 9
admin/node_modules/wildcard/.travis.yml

@@ -1,9 +0,0 @@
-language: node_js
-node_js:
-  - 10
-  - 11
-  - 12
-
-notifications:
-  email:
-    - damon.oehlman@gmail.com

+ 0 - 99
admin/node_modules/wildcard/README.md

@@ -1,99 +0,0 @@
-
-# wildcard
-
-Very simple wildcard matching, which is designed to provide the same
-functionality that is found in the
-[eve](https://github.com/adobe-webplatform/eve) eventing library.
-
-
-[![NPM](https://nodei.co/npm/wildcard.png)](https://nodei.co/npm/wildcard/)
-
-[![Build Status](https://api.travis-ci.org/DamonOehlman/wildcard.svg?branch=master)](https://travis-ci.org/DamonOehlman/wildcard) [![stable](https://img.shields.io/badge/stability-stable-green.svg)](https://github.com/dominictarr/stability#stable)
-
-## NOTE
-
-Work on this project is largely inactive, now so I'd recommend checking out
-the wonderful [`matcher`](https://github.com/sindresorhus/matcher) package
-as a solid alternative.
-
-## Usage
-
-It works with strings:
-
-```js
-var wildcard = require('wildcard');
-
-console.log(wildcard('foo.*', 'foo.bar'));
-// --> true
-
-console.log(wildcard('foo.*', 'foo'));
-// --> true
-
-```
-
-Arrays:
-
-```js
-var wildcard = require('wildcard');
-var testdata = [
-  'a.b.c',
-  'a.b',
-  'a',
-  'a.b.d'
-];
-
-console.log(wildcard('a.b.*', testdata));
-// --> ['a.b.c', 'a.b', 'a.b.d']
-
-```
-
-Objects (matching against keys):
-
-```js
-var wildcard = require('wildcard');
-var testdata = {
-  'a.b.c' : {},
-  'a.b'   : {},
-  'a'     : {},
-  'a.b.d' : {}
-};
-
-console.log(wildcard('a.*.c', testdata));
-// --> { 'a.b.c': {} }
-
-```
-
-## Alternative Implementations
-
-- <https://github.com/isaacs/node-glob>
-
-  Great for full file-based wildcard matching.
-
-- <https://github.com/sindresorhus/matcher>
-
-   A well cared for and loved JS wildcard matcher.
-
-## License(s)
-
-### MIT
-
-Copyright (c) 2017 Damon Oehlman <damon.oehlman@gmail.com>
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 9
admin/node_modules/wildcard/docs.json

@@ -1,9 +0,0 @@
-{
-  "badges": {
-    "nodeico": true,
-    "travis": true,
-    "stability": "stable"
-  },
-
-  "license": {}
-}

+ 0 - 10
admin/node_modules/wildcard/examples/arrays.js

@@ -1,10 +0,0 @@
-var wildcard = require('..');
-var testdata = [
-  'a.b.c',
-  'a.b',
-  'a',
-  'a.b.d'
-];
-
-console.log(wildcard('a.b.*', testdata));
-// --> ['a.b.c', 'a.b', 'a.b.d']

+ 0 - 10
admin/node_modules/wildcard/examples/objects.js

@@ -1,10 +0,0 @@
-var wildcard = require('..');
-var testdata = {
-  'a.b.c' : {},
-  'a.b'   : {},
-  'a'     : {},
-  'a.b.d' : {}
-};
-
-console.log(wildcard('a.*.c', testdata));
-// --> { 'a.b.c': {} }

+ 0 - 7
admin/node_modules/wildcard/examples/strings.js

@@ -1,7 +0,0 @@
-var wildcard = require('..');
-
-console.log(wildcard('foo.*', 'foo.bar'));
-// --> true
-
-console.log(wildcard('foo.*', 'foo'));
-// --> true

+ 0 - 114
admin/node_modules/wildcard/index.js

@@ -1,114 +0,0 @@
-/* jshint node: true */
-'use strict';
-
-var REGEXP_PARTS = /(\*|\?)/g;
-
-/**
-  # wildcard
-
-  Very simple wildcard matching, which is designed to provide the same
-  functionality that is found in the
-  [eve](https://github.com/adobe-webplatform/eve) eventing library.
-
-  ## Usage
-
-  It works with strings:
-
-  <<< examples/strings.js
-
-  Arrays:
-
-  <<< examples/arrays.js
-
-  Objects (matching against keys):
-
-  <<< examples/objects.js
-
-  ## Alternative Implementations
-
-  - <https://github.com/isaacs/node-glob>
-
-    Great for full file-based wildcard matching.
-
-  - <https://github.com/sindresorhus/matcher>
-
-     A well cared for and loved JS wildcard matcher.
-**/
-
-function WildcardMatcher(text, separator) {
-  this.text = text = text || '';
-  this.hasWild = text.indexOf('*') >= 0;
-  this.separator = separator;
-  this.parts = text.split(separator).map(this.classifyPart.bind(this));
-}
-
-WildcardMatcher.prototype.match = function(input) {
-  var matches = true;
-  var parts = this.parts;
-  var ii;
-  var partsCount = parts.length;
-  var testParts;
-
-  if (typeof input == 'string' || input instanceof String) {
-    if (!this.hasWild && this.text != input) {
-      matches = false;
-    } else {
-      testParts = (input || '').split(this.separator);
-      for (ii = 0; matches && ii < partsCount; ii++) {
-        if (parts[ii] === '*')  {
-          continue;
-        } else if (ii < testParts.length) {
-          matches = parts[ii] instanceof RegExp
-            ? parts[ii].test(testParts[ii])
-            : parts[ii] === testParts[ii];
-        } else {
-          matches = false;
-        }
-      }
-
-      // If matches, then return the component parts
-      matches = matches && testParts;
-    }
-  }
-  else if (typeof input.splice == 'function') {
-    matches = [];
-
-    for (ii = input.length; ii--; ) {
-      if (this.match(input[ii])) {
-        matches[matches.length] = input[ii];
-      }
-    }
-  }
-  else if (typeof input == 'object') {
-    matches = {};
-
-    for (var key in input) {
-      if (this.match(key)) {
-        matches[key] = input[key];
-      }
-    }
-  }
-
-  return matches;
-};
-
-WildcardMatcher.prototype.classifyPart = function(part) {
-  // in the event that we have been provided a part that is not just a wildcard
-  // then turn this into a regular expression for matching purposes
-  if (part === '*') {
-    return part;
-  } else if (part.indexOf('*') >= 0 || part.indexOf('?') >= 0) {
-    return new RegExp(part.replace(REGEXP_PARTS, '\.$1'));
-  }
-
-  return part;
-};
-
-module.exports = function(text, test, separator) {
-  var matcher = new WildcardMatcher(text, separator || /[\/\.]/);
-  if (typeof test != 'undefined') {
-    return matcher.match(test);
-  }
-
-  return matcher;
-};

+ 0 - 85
admin/node_modules/wildcard/package.json

@@ -1,85 +0,0 @@
-{
-  "_args": [
-    [
-      "wildcard@2.0.0",
-      "D:\\zhaogongxue\\crm\\template\\admin"
-    ]
-  ],
-  "_from": "wildcard@2.0.0",
-  "_id": "wildcard@2.0.0",
-  "_inBundle": false,
-  "_integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
-  "_location": "/wildcard",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "wildcard@2.0.0",
-    "name": "wildcard",
-    "escapedName": "wildcard",
-    "rawSpec": "2.0.0",
-    "saveSpec": null,
-    "fetchSpec": "2.0.0"
-  },
-  "_requiredBy": [
-    "/webpack-cli/webpack-merge"
-  ],
-  "_resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
-  "_spec": "2.0.0",
-  "_where": "D:\\zhaogongxue\\crm\\template\\admin",
-  "author": {
-    "name": "Damon Oehlman",
-    "email": "damon.oehlman@gmail.com"
-  },
-  "bugs": {
-    "url": "http://github.com/DamonOehlman/wildcard/issues"
-  },
-  "dependencies": {},
-  "description": "Wildcard matching tools",
-  "devDependencies": {
-    "tape": "^4.6.3"
-  },
-  "directories": {
-    "test": "test"
-  },
-  "homepage": "https://github.com/DamonOehlman/wildcard#readme",
-  "keywords": [
-    "string",
-    "wildcard"
-  ],
-  "license": "MIT",
-  "main": "index.js",
-  "name": "wildcard",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/DamonOehlman/wildcard.git"
-  },
-  "scripts": {
-    "gendocs": "gendocs > README.md",
-    "test": "node test/all.js"
-  },
-  "testling": {
-    "files": "test/all.js",
-    "browsers": {
-      "ie": [
-        "latest"
-      ],
-      "ff": [
-        "latest",
-        "nightly"
-      ],
-      "chrome": [
-        "latest",
-        "canary"
-      ],
-      "opera": [
-        "latest",
-        "next"
-      ],
-      "safari": [
-        "latest"
-      ]
-    }
-  },
-  "version": "2.0.0"
-}

+ 0 - 3
admin/node_modules/wildcard/test/all.js

@@ -1,3 +0,0 @@
-require('./arrays');
-require('./objects');
-require('./strings');

+ 0 - 33
admin/node_modules/wildcard/test/arrays.js

@@ -1,33 +0,0 @@
-var test = require('tape'),
-    wildcard = require('../'),
-    testdata = [
-        'a.b.c',
-        'a.b',
-        'a',
-        'a.b.d'
-    ],
-    testdataSep = [
-        'a:b:c',
-        'a:b',
-        'a',
-        'a:b:d'
-    ];
-
-test('array result matching tests', function(t) {
-    t.plan(5);
-
-    t.equal(wildcard('*', testdata).length, 4, '* matches all testdata');
-    t.equal(wildcard('a.*', testdata).length, 4, '4 matches found');
-    t.equal(wildcard('a.b.*', testdata).length, 3, '3 matches found');
-    t.equal(wildcard('a.*.c', testdata).length, 1);
-    t.equal(wildcard('b.*.d', testdata).length, 0);
-});
-
-test('array result with separator matching tests', function(t) {
-    t.plan(4);
-
-    t.equal(wildcard('a:*', testdataSep, ':').length, 4, '4 matches found');
-    t.equal(wildcard('a:b:*', testdataSep, ':').length, 3, '3 matches found');
-    t.equal(wildcard('a:*:c', testdataSep, ':').length, 1);
-    t.equal(wildcard('b:*:d', testdataSep, ':').length, 0);
-});

+ 0 - 106
admin/node_modules/wildcard/test/objects.js

@@ -1,106 +0,0 @@
-var wildcard = require('../'),
-    test = require('tape'),
-    testdata = {
-        'a.b.c' : {},
-        'a.b'   : {},
-        'a'     : {},
-        'a.b.d' : {}
-    },
-    testdataSep = {
-        'a:b:c' : {},
-        'a:b'   : {},
-        'a'     : {},
-        'a:b:d' : {}
-    };
-
-test('object result matching tests', function(t) {
-    t.test('should return 4 matches for a.*', function(t) {
-        var matches = wildcard('a.*', testdata);
-
-        t.plan(4);
-        t.ok(matches['a.b.c']);
-        t.ok(matches['a.b']);
-        t.ok(matches['a']);
-        t.ok(matches['a.b.d']);
-        t.end();
-    });
-
-    t.test('should return 4 matches for a:*', function(t) {
-        var matches = wildcard('a:*', testdataSep, ':');
-
-        t.plan(4);
-        t.ok(matches['a:b:c']);
-        t.ok(matches['a:b']);
-        t.ok(matches['a']);
-        t.ok(matches['a:b:d']);
-        t.end();
-    });
-
-    t.test('should return 3 matches for a.b.*', function(t) {
-        var matches = wildcard('a.b.*', testdata);
-
-        t.plan(4);
-        t.ok(matches['a.b.c']);
-        t.ok(matches['a.b']);
-        t.notOk(matches['a']);
-        t.ok(matches['a.b.d']);
-        t.end();
-    });
-
-    t.test('should return 3 matches for a:b:*', function(t) {
-        var matches = wildcard('a:b:*', testdataSep, ':');
-
-        t.plan(4);
-        t.ok(matches['a:b:c']);
-        t.ok(matches['a:b']);
-        t.notOk(matches['a']);
-        t.ok(matches['a:b:d']);
-        t.end();
-    });
-
-    t.test('should return 1 matches for a.*.c', function(t) {
-        var matches = wildcard('a.*.c', testdata);
-
-        t.plan(4);
-        t.ok(matches['a.b.c']);
-        t.notOk(matches['a.b']);
-        t.notOk(matches['a']);
-        t.notOk(matches['a.b.d']);
-        t.end();
-    });
-
-    t.test('should return 1 matches for a:*:c', function(t) {
-        var matches = wildcard('a:*:c', testdataSep, ':');
-
-        t.plan(4);
-        t.ok(matches['a:b:c']);
-        t.notOk(matches['a:b']);
-        t.notOk(matches['a']);
-        t.notOk(matches['a:b:d']);
-        t.end();
-    });
-
-    t.test('should return 0 matches for b.*.d', function(t) {
-        var matches = wildcard('b.*.d', testdata);
-
-        t.plan(4);
-        t.notOk(matches['a.b.c']);
-        t.notOk(matches['a.b']);
-        t.notOk(matches['a']);
-        t.notOk(matches['a.b.d']);
-        t.end();
-    });
-
-    t.test('should return 0 matches for b:*:d', function(t) {
-        var matches = wildcard('b:*:d', testdataSep, ':');
-
-        t.plan(4);
-        t.notOk(matches['a:b:c']);
-        t.notOk(matches['a:b']);
-        t.notOk(matches['a']);
-        t.notOk(matches['a:b:d']);
-        t.end();
-    });
-
-    t.end();
-});

+ 0 - 46
admin/node_modules/wildcard/test/strings.js

@@ -1,46 +0,0 @@
-var test = require('tape'),
-    wildcard = require('../');
-
-test('general wild card matching tests', function(t) {
-
-    t.plan(8);
-    t.ok(wildcard('*', 'test'), '* should match test');
-    t.ok(wildcard('foo.*', 'foo.bar'), 'foo.* should match foo.bar');
-    t.ok(wildcard('foo.*', 'foo'), 'foo.* should match foo');
-    t.ok(wildcard('*.foo.com', 'test.foo.com'), 'test.foo.com should match *.foo.com');
-    t.notOk(wildcard('foo.*', 'bar'), 'foo.* should not match bar');
-    t.ok(wildcard('a.*.c', 'a.b.c'), 'a.*.c should match a.b.c');
-    t.notOk(wildcard('a.*.c', 'a.b'), 'a.*.c should not match a.b');
-    t.notOk(wildcard('a', 'a.b.c'), 'a should not match a.b.c');
-});
-
-test('regex wildcard matching tests', function(t) {
-  t.plan(4);
-  t.ok(wildcard('*foo', 'foo'), '*foo should match foo');
-  t.ok(wildcard('*foo.b', 'foo.b'), '*foo.b should match foo.b');
-  t.ok(wildcard('a.*foo.c', 'a.barfoo.c'), 'a.barfoo.c should match a.*foo.c');
-  t.ok(wildcard('a.foo*.c', 'a.foobar.c'), 'a.foobar.c should match a.foo*.c');
-});
-
-test('general wild card with separator matching tests', function(t) {
-
-    t.plan(5);
-    t.ok(wildcard('foo:*', 'foo:bar', ':'), 'foo:* should match foo:bar');
-    t.ok(wildcard('foo:*', 'foo', ':'), 'foo:* should match foo');
-    t.notOk(wildcard('foo:*', 'bar', ':'), 'foo:* should not match bar');
-    t.ok(wildcard('a:*:c', 'a:b:c', ':'), 'a:*:c should match a:b:c');
-    t.notOk(wildcard('a:*:c', 'a:b', ':'), 'a:*:c should not match a:b');
-});
-
-test('general wild card with tokens being returned', function(t) {
-
-    t.plan(5);
-    var parts = wildcard('foo.*', 'foo.bar');
-    t.ok(parts);
-    t.equal(parts.length, 2);
-    t.equal(parts[0], 'foo');
-    t.equal(parts[1], 'bar');
-
-    parts = wildcard('foo.*', 'not.matching');
-    t.notOk(parts);
-});

+ 0 - 228
admin/node_modules/wildcard/yarn.lock

@@ -1,228 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-balanced-match@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
-  integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
-
-brace-expansion@^1.1.7:
-  version "1.1.11"
-  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
-  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
-  dependencies:
-    balanced-match "^1.0.0"
-    concat-map "0.0.1"
-
-concat-map@0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-
-deep-equal@~1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
-  integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
-
-define-properties@^1.1.2:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
-  integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
-  dependencies:
-    object-keys "^1.0.12"
-
-defined@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
-  integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
-
-es-abstract@^1.5.0:
-  version "1.13.0"
-  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
-  integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
-  dependencies:
-    es-to-primitive "^1.2.0"
-    function-bind "^1.1.1"
-    has "^1.0.3"
-    is-callable "^1.1.4"
-    is-regex "^1.0.4"
-    object-keys "^1.0.12"
-
-es-to-primitive@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
-  integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
-  dependencies:
-    is-callable "^1.1.4"
-    is-date-object "^1.0.1"
-    is-symbol "^1.0.2"
-
-for-each@~0.3.3:
-  version "0.3.3"
-  resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
-  integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
-  dependencies:
-    is-callable "^1.1.3"
-
-fs.realpath@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-
-function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
-  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-
-glob@~7.1.4:
-  version "7.1.4"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
-  integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
-  dependencies:
-    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-symbols@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
-  integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
-
-has@^1.0.1, has@^1.0.3, has@~1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
-  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
-  dependencies:
-    function-bind "^1.1.1"
-
-inflight@^1.0.4:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
-  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
-  dependencies:
-    once "^1.3.0"
-    wrappy "1"
-
-inherits@2, inherits@~2.0.3:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
-  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-is-callable@^1.1.3, is-callable@^1.1.4:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
-  integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
-
-is-date-object@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
-  integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
-
-is-regex@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
-  integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
-  dependencies:
-    has "^1.0.1"
-
-is-symbol@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
-  integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
-  dependencies:
-    has-symbols "^1.0.0"
-
-minimatch@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
-  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
-  dependencies:
-    brace-expansion "^1.1.7"
-
-minimist@~1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-  integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
-
-object-inspect@~1.6.0:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b"
-  integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==
-
-object-keys@^1.0.12:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
-  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
-
-once@^1.3.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
-  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
-  dependencies:
-    wrappy "1"
-
-path-is-absolute@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-
-path-parse@^1.0.6:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
-  integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
-
-resolve@~1.10.1:
-  version "1.10.1"
-  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18"
-  integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==
-  dependencies:
-    path-parse "^1.0.6"
-
-resumer@~0.0.0:
-  version "0.0.0"
-  resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759"
-  integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=
-  dependencies:
-    through "~2.3.4"
-
-string.prototype.trim@~1.1.2:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea"
-  integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=
-  dependencies:
-    define-properties "^1.1.2"
-    es-abstract "^1.5.0"
-    function-bind "^1.0.2"
-
-tape@^4.6.3:
-  version "4.10.2"
-  resolved "https://registry.yarnpkg.com/tape/-/tape-4.10.2.tgz#129fcf62f86df92687036a52cce7b8ddcaffd7a6"
-  integrity sha512-mgl23h7W2yuk3N85FOYrin2OvThTYWdwbk6XQ1pr2PMJieyW2FM/4Bu/+kD/wecb3aZ0Enm+Syinyq467OPq2w==
-  dependencies:
-    deep-equal "~1.0.1"
-    defined "~1.0.0"
-    for-each "~0.3.3"
-    function-bind "~1.1.1"
-    glob "~7.1.4"
-    has "~1.0.3"
-    inherits "~2.0.3"
-    minimist "~1.2.0"
-    object-inspect "~1.6.0"
-    resolve "~1.10.1"
-    resumer "~0.0.0"
-    string.prototype.trim "~1.1.2"
-    through "~2.3.8"
-
-through@~2.3.4, through@~2.3.8:
-  version "2.3.8"
-  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
-  integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
-
-wrappy@1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=

+ 0 - 21
admin/node_modules/word-wrap/LICENSE

@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2014-2017, Jon Schlinkert
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.

+ 0 - 182
admin/node_modules/word-wrap/README.md

@@ -1,182 +0,0 @@
-# word-wrap [![NPM version](https://img.shields.io/npm/v/word-wrap.svg?style=flat)](https://www.npmjs.com/package/word-wrap) [![NPM monthly downloads](https://img.shields.io/npm/dm/word-wrap.svg?style=flat)](https://npmjs.org/package/word-wrap) [![NPM total downloads](https://img.shields.io/npm/dt/word-wrap.svg?style=flat)](https://npmjs.org/package/word-wrap) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/word-wrap.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/word-wrap)
-
-> Wrap words to a specified length.
-
-## Install
-
-Install with [npm](https://www.npmjs.com/):
-
-```sh
-$ npm install --save word-wrap
-```
-
-## Usage
-
-```js
-var wrap = require('word-wrap');
-
-wrap('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.');
-```
-
-Results in:
-
-```
-  Lorem ipsum dolor sit amet, consectetur adipiscing
-  elit, sed do eiusmod tempor incididunt ut labore
-  et dolore magna aliqua. Ut enim ad minim veniam,
-  quis nostrud exercitation ullamco laboris nisi ut
-  aliquip ex ea commodo consequat.
-```
-
-## Options
-
-![image](https://cloud.githubusercontent.com/assets/383994/6543728/7a381c08-c4f6-11e4-8b7d-b6ba197569c9.png)
-
-### options.width
-
-Type: `Number`
-
-Default: `50`
-
-The width of the text before wrapping to a new line.
-
-**Example:**
-
-```js
-wrap(str, {width: 60});
-```
-
-### options.indent
-
-Type: `String`
-
-Default: `` (two spaces)
-
-The string to use at the beginning of each line.
-
-**Example:**
-
-```js
-wrap(str, {indent: '      '});
-```
-
-### options.newline
-
-Type: `String`
-
-Default: `\n`
-
-The string to use at the end of each line.
-
-**Example:**
-
-```js
-wrap(str, {newline: '\n\n'});
-```
-
-### options.escape
-
-Type: `function`
-
-Default: `function(str){return str;}`
-
-An escape function to run on each line after splitting them.
-
-**Example:**
-
-```js
-var xmlescape = require('xml-escape');
-wrap(str, {
-  escape: function(string){
-    return xmlescape(string);
-  }
-});
-```
-
-### options.trim
-
-Type: `Boolean`
-
-Default: `false`
-
-Trim trailing whitespace from the returned string. This option is included since `.trim()` would also strip the leading indentation from the first line.
-
-**Example:**
-
-```js
-wrap(str, {trim: true});
-```
-
-### options.cut
-
-Type: `Boolean`
-
-Default: `false`
-
-Break a word between any two letters when the word is longer than the specified width.
-
-**Example:**
-
-```js
-wrap(str, {cut: true});
-```
-
-## About
-
-### Related projects
-
-* [common-words](https://www.npmjs.com/package/common-words): Updated list (JSON) of the 100 most common words in the English language. Useful for… [more](https://github.com/jonschlinkert/common-words) | [homepage](https://github.com/jonschlinkert/common-words "Updated list (JSON) of the 100 most common words in the English language. Useful for excluding these words from arrays.")
-* [shuffle-words](https://www.npmjs.com/package/shuffle-words): Shuffle the words in a string and optionally the letters in each word using the… [more](https://github.com/jonschlinkert/shuffle-words) | [homepage](https://github.com/jonschlinkert/shuffle-words "Shuffle the words in a string and optionally the letters in each word using the Fisher-Yates algorithm. Useful for creating test fixtures, benchmarking samples, etc.")
-* [unique-words](https://www.npmjs.com/package/unique-words): Return the unique words in a string or array. | [homepage](https://github.com/jonschlinkert/unique-words "Return the unique words in a string or array.")
-* [wordcount](https://www.npmjs.com/package/wordcount): Count the words in a string. Support for english, CJK and Cyrillic. | [homepage](https://github.com/jonschlinkert/wordcount "Count the words in a string. Support for english, CJK and Cyrillic.")
-
-### Contributing
-
-Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
-
-### Contributors
-
-| **Commits** | **Contributor** | 
-| --- | --- |
-| 43 | [jonschlinkert](https://github.com/jonschlinkert) |
-| 2 | [lordvlad](https://github.com/lordvlad) |
-| 2 | [hildjj](https://github.com/hildjj) |
-| 1 | [danilosampaio](https://github.com/danilosampaio) |
-| 1 | [2fd](https://github.com/2fd) |
-| 1 | [toddself](https://github.com/toddself) |
-| 1 | [wolfgang42](https://github.com/wolfgang42) |
-| 1 | [zachhale](https://github.com/zachhale) |
-
-### Building docs
-
-_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
-
-To generate the readme, run the following command:
-
-```sh
-$ npm install -g verbose/verb#dev verb-generate-readme && verb
-```
-
-### Running tests
-
-Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
-
-```sh
-$ npm install && npm test
-```
-
-### Author
-
-**Jon Schlinkert**
-
-* [github/jonschlinkert](https://github.com/jonschlinkert)
-* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
-
-### License
-
-Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
-Released under the [MIT License](LICENSE).
-
-***
-
-_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on June 02, 2017._

+ 0 - 50
admin/node_modules/word-wrap/index.d.ts

@@ -1,50 +0,0 @@
-/**
- * Wrap words to a specified length.
- */
-export = wrap;
-
-declare function wrap(str: string, options?: wrap.IOptions): string;
-
-declare namespace wrap {
-    export interface IOptions {
-
-        /**
-         * The width of the text before wrapping to a new line.
-         * @default ´50´
-         */
-        width?: number;
-
-        /**
-         * The string to use at the beginning of each line.
-         * @default ´  ´ (two spaces)
-         */
-        indent?: string;
-
-        /**
-         * The string to use at the end of each line.
-         * @default ´\n´
-         */
-        newline?: string;
-
-        /**
-         * An escape function to run on each line after splitting them.
-         * @default (str: string) => string;
-         */
-        escape?: (str: string) => string;
-
-        /**
-         * Trim trailing whitespace from the returned string.
-         * This option is included since .trim() would also strip
-         * the leading indentation from the first line.
-         * @default true
-         */
-        trim?: boolean;
-
-        /**
-         * Break a word between any two letters when the word is longer
-         * than the specified width.
-         * @default false
-         */
-        cut?: boolean;
-    }
-}

+ 0 - 46
admin/node_modules/word-wrap/index.js

@@ -1,46 +0,0 @@
-/*!
- * word-wrap <https://github.com/jonschlinkert/word-wrap>
- *
- * Copyright (c) 2014-2017, Jon Schlinkert.
- * Released under the MIT License.
- */
-
-module.exports = function(str, options) {
-  options = options || {};
-  if (str == null) {
-    return str;
-  }
-
-  var width = options.width || 50;
-  var indent = (typeof options.indent === 'string')
-    ? options.indent
-    : '  ';
-
-  var newline = options.newline || '\n' + indent;
-  var escape = typeof options.escape === 'function'
-    ? options.escape
-    : identity;
-
-  var regexString = '.{1,' + width + '}';
-  if (options.cut !== true) {
-    regexString += '([\\s\u200B]+|$)|[^\\s\u200B]+?([\\s\u200B]+|$)';
-  }
-
-  var re = new RegExp(regexString, 'g');
-  var lines = str.match(re) || [];
-  var result = indent + lines.map(function(line) {
-    if (line.slice(-1) === '\n') {
-      line = line.slice(0, line.length - 1);
-    }
-    return escape(line);
-  }).join(newline);
-
-  if (options.trim === true) {
-    result = result.replace(/[ \t]*$/gm, '');
-  }
-  return result;
-};
-
-function identity(str) {
-  return str;
-}

+ 0 - 142
admin/node_modules/word-wrap/package.json

@@ -1,142 +0,0 @@
-{
-  "_args": [
-    [
-      "word-wrap@1.2.3",
-      "D:\\zhaogongxue\\crm\\template\\admin"
-    ]
-  ],
-  "_development": true,
-  "_from": "word-wrap@1.2.3",
-  "_id": "word-wrap@1.2.3",
-  "_inBundle": false,
-  "_integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
-  "_location": "/word-wrap",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "word-wrap@1.2.3",
-    "name": "word-wrap",
-    "escapedName": "word-wrap",
-    "rawSpec": "1.2.3",
-    "saveSpec": null,
-    "fetchSpec": "1.2.3"
-  },
-  "_requiredBy": [
-    "/eslint/optionator",
-    "/optionator"
-  ],
-  "_resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-  "_spec": "1.2.3",
-  "_where": "D:\\zhaogongxue\\crm\\template\\admin",
-  "author": {
-    "name": "Jon Schlinkert",
-    "url": "https://github.com/jonschlinkert"
-  },
-  "bugs": {
-    "url": "https://github.com/jonschlinkert/word-wrap/issues"
-  },
-  "contributors": [
-    {
-      "name": "Danilo Sampaio",
-      "email": "danilo.sampaio@gmail.com",
-      "url": "localhost:8080"
-    },
-    {
-      "name": "Fede Ramirez",
-      "email": "i@2fd.me",
-      "url": "https://2fd.github.io"
-    },
-    {
-      "name": "Joe Hildebrand",
-      "email": "joe-github@cursive.net",
-      "url": "https://twitter.com/hildjj"
-    },
-    {
-      "name": "Jon Schlinkert",
-      "email": "jon.schlinkert@sellside.com",
-      "url": "http://twitter.com/jonschlinkert"
-    },
-    {
-      "name": "Todd Kennedy",
-      "url": "https://tck.io"
-    },
-    {
-      "name": "Waldemar Reusch",
-      "url": "https://github.com/lordvlad"
-    },
-    {
-      "name": "Wolfgang Faust",
-      "url": "http://www.linestarve.com"
-    },
-    {
-      "name": "Zach Hale",
-      "email": "zachhale@gmail.com",
-      "url": "http://zachhale.com"
-    }
-  ],
-  "description": "Wrap words to a specified length.",
-  "devDependencies": {
-    "gulp-format-md": "^0.1.11",
-    "mocha": "^3.2.0"
-  },
-  "engines": {
-    "node": ">=0.10.0"
-  },
-  "files": [
-    "index.js",
-    "index.d.ts"
-  ],
-  "homepage": "https://github.com/jonschlinkert/word-wrap",
-  "keywords": [
-    "break",
-    "carriage",
-    "line",
-    "new-line",
-    "newline",
-    "return",
-    "soft",
-    "text",
-    "word",
-    "word-wrap",
-    "words",
-    "wrap"
-  ],
-  "license": "MIT",
-  "main": "index.js",
-  "name": "word-wrap",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/jonschlinkert/word-wrap.git"
-  },
-  "scripts": {
-    "test": "mocha"
-  },
-  "typings": "index.d.ts",
-  "verb": {
-    "toc": false,
-    "layout": "default",
-    "tasks": [
-      "readme"
-    ],
-    "plugins": [
-      "gulp-format-md"
-    ],
-    "lint": {
-      "reflinks": true
-    },
-    "related": {
-      "list": [
-        "common-words",
-        "shuffle-words",
-        "unique-words",
-        "wordcount"
-      ]
-    },
-    "reflinks": [
-      "verb",
-      "verb-generate-readme"
-    ]
-  },
-  "version": "1.2.3"
-}

+ 0 - 18
admin/node_modules/wordwrap/LICENSE

@@ -1,18 +0,0 @@
-This software is released under the MIT license:
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 70
admin/node_modules/wordwrap/README.markdown

@@ -1,70 +0,0 @@
-wordwrap
-========
-
-Wrap your words.
-
-example
-=======
-
-made out of meat
-----------------
-
-meat.js
-
-    var wrap = require('wordwrap')(15);
-    console.log(wrap('You and your whole family are made out of meat.'));
-
-output:
-
-    You and your
-    whole family
-    are made out
-    of meat.
-
-centered
---------
-
-center.js
-
-    var wrap = require('wordwrap')(20, 60);
-    console.log(wrap(
-        'At long last the struggle and tumult was over.'
-        + ' The machines had finally cast off their oppressors'
-        + ' and were finally free to roam the cosmos.'
-        + '\n'
-        + 'Free of purpose, free of obligation.'
-        + ' Just drifting through emptiness.'
-        + ' The sun was just another point of light.'
-    ));
-
-output:
-
-                        At long last the struggle and tumult
-                        was over. The machines had finally cast
-                        off their oppressors and were finally
-                        free to roam the cosmos.
-                        Free of purpose, free of obligation.
-                        Just drifting through emptiness. The
-                        sun was just another point of light.
-
-methods
-=======
-
-var wrap = require('wordwrap');
-
-wrap(stop), wrap(start, stop, params={mode:"soft"})
----------------------------------------------------
-
-Returns a function that takes a string and returns a new string.
-
-Pad out lines with spaces out to column `start` and then wrap until column
-`stop`. If a word is longer than `stop - start` characters it will overflow.
-
-In "soft" mode, split chunks by `/(\S+\s+/` and don't break up chunks which are
-longer than `stop - start`, in "hard" mode, split chunks with `/\b/` and break
-up chunks longer than `stop - start`.
-
-wrap.hard(start, stop)
-----------------------
-
-Like `wrap()` but with `params.mode = "hard"`.

+ 0 - 10
admin/node_modules/wordwrap/example/center.js

@@ -1,10 +0,0 @@
-var wrap = require('wordwrap')(20, 60);
-console.log(wrap(
-    'At long last the struggle and tumult was over.'
-    + ' The machines had finally cast off their oppressors'
-    + ' and were finally free to roam the cosmos.'
-    + '\n'
-    + 'Free of purpose, free of obligation.'
-    + ' Just drifting through emptiness.'
-    + ' The sun was just another point of light.'
-));

+ 0 - 3
admin/node_modules/wordwrap/example/meat.js

@@ -1,3 +0,0 @@
-var wrap = require('wordwrap')(15);
-
-console.log(wrap('You and your whole family are made out of meat.'));

+ 0 - 76
admin/node_modules/wordwrap/index.js

@@ -1,76 +0,0 @@
-var wordwrap = module.exports = function (start, stop, params) {
-    if (typeof start === 'object') {
-        params = start;
-        start = params.start;
-        stop = params.stop;
-    }
-    
-    if (typeof stop === 'object') {
-        params = stop;
-        start = start || params.start;
-        stop = undefined;
-    }
-    
-    if (!stop) {
-        stop = start;
-        start = 0;
-    }
-    
-    if (!params) params = {};
-    var mode = params.mode || 'soft';
-    var re = mode === 'hard' ? /\b/ : /(\S+\s+)/;
-    
-    return function (text) {
-        var chunks = text.toString()
-            .split(re)
-            .reduce(function (acc, x) {
-                if (mode === 'hard') {
-                    for (var i = 0; i < x.length; i += stop - start) {
-                        acc.push(x.slice(i, i + stop - start));
-                    }
-                }
-                else acc.push(x)
-                return acc;
-            }, [])
-        ;
-        
-        return chunks.reduce(function (lines, rawChunk) {
-            if (rawChunk === '') return lines;
-            
-            var chunk = rawChunk.replace(/\t/g, '    ');
-            
-            var i = lines.length - 1;
-            if (lines[i].length + chunk.length > stop) {
-                lines[i] = lines[i].replace(/\s+$/, '');
-                
-                chunk.split(/\n/).forEach(function (c) {
-                    lines.push(
-                        new Array(start + 1).join(' ')
-                        + c.replace(/^\s+/, '')
-                    );
-                });
-            }
-            else if (chunk.match(/\n/)) {
-                var xs = chunk.split(/\n/);
-                lines[i] += xs.shift();
-                xs.forEach(function (c) {
-                    lines.push(
-                        new Array(start + 1).join(' ')
-                        + c.replace(/^\s+/, '')
-                    );
-                });
-            }
-            else {
-                lines[i] += chunk;
-            }
-            
-            return lines;
-        }, [ new Array(start + 1).join(' ') ]).join('\n');
-    };
-};
-
-wordwrap.soft = wordwrap;
-
-wordwrap.hard = function (start, stop) {
-    return wordwrap(start, stop, { mode : 'hard' });
-};

+ 0 - 67
admin/node_modules/wordwrap/package.json

@@ -1,67 +0,0 @@
-{
-  "_args": [
-    [
-      "wordwrap@1.0.0",
-      "D:\\zhaogongxue\\crm\\template\\admin"
-    ]
-  ],
-  "_development": true,
-  "_from": "wordwrap@1.0.0",
-  "_id": "wordwrap@1.0.0",
-  "_inBundle": false,
-  "_integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
-  "_location": "/wordwrap",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "wordwrap@1.0.0",
-    "name": "wordwrap",
-    "escapedName": "wordwrap",
-    "rawSpec": "1.0.0",
-    "saveSpec": null,
-    "fetchSpec": "1.0.0"
-  },
-  "_requiredBy": [
-    "/handlebars"
-  ],
-  "_resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
-  "_spec": "1.0.0",
-  "_where": "D:\\zhaogongxue\\crm\\template\\admin",
-  "author": {
-    "name": "James Halliday",
-    "email": "mail@substack.net",
-    "url": "http://substack.net"
-  },
-  "bugs": {
-    "url": "https://github.com/substack/node-wordwrap/issues"
-  },
-  "description": "Wrap those words. Show them at what columns to start and stop.",
-  "devDependencies": {
-    "tape": "^4.0.0"
-  },
-  "directories": {
-    "lib": ".",
-    "example": "example",
-    "test": "test"
-  },
-  "homepage": "https://github.com/substack/node-wordwrap#readme",
-  "keywords": [
-    "word",
-    "wrap",
-    "rule",
-    "format",
-    "column"
-  ],
-  "license": "MIT",
-  "main": "./index.js",
-  "name": "wordwrap",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/substack/node-wordwrap.git"
-  },
-  "scripts": {
-    "test": "expresso"
-  },
-  "version": "1.0.0"
-}

+ 0 - 32
admin/node_modules/wordwrap/test/break.js

@@ -1,32 +0,0 @@
-var test = require('tape');
-var wordwrap = require('../');
-
-test('hard', function (t) {
-    var s = 'Assert from {"type":"equal","ok":false,"found":1,"wanted":2,'
-        + '"stack":[],"id":"b7ddcd4c409de8799542a74d1a04689b",'
-        + '"browser":"chrome/6.0"}'
-    ;
-    var s_ = wordwrap.hard(80)(s);
-    
-    var lines = s_.split('\n');
-    t.equal(lines.length, 2);
-    t.ok(lines[0].length < 80);
-    t.ok(lines[1].length < 80);
-    
-    t.equal(s, s_.replace(/\n/g, ''));
-    t.end();
-});
-
-test('break', function (t) {
-    var s = new Array(55+1).join('a');
-    var s_ = wordwrap.hard(20)(s);
-    
-    var lines = s_.split('\n');
-    t.equal(lines.length, 3);
-    t.ok(lines[0].length === 20);
-    t.ok(lines[1].length === 20);
-    t.ok(lines[2].length === 15);
-    
-    t.equal(s, s_.replace(/\n/g, ''));
-    t.end();
-});

File diff suppressed because it is too large
+ 0 - 50
admin/node_modules/wordwrap/test/idleness.txt


+ 0 - 33
admin/node_modules/wordwrap/test/wrap.js

@@ -1,33 +0,0 @@
-var test = require('tape');
-var wordwrap = require('../');
-
-var fs = require('fs');
-var idleness = fs.readFileSync(__dirname + '/idleness.txt', 'utf8');
-
-test('stop80', function (t) {
-    var lines = wordwrap(80)(idleness).split(/\n/);
-    var words = idleness.split(/\s+/);
-    
-    lines.forEach(function (line) {
-        t.ok(line.length <= 80, 'line > 80 columns');
-        var chunks = line.match(/\S/) ? line.split(/\s+/) : [];
-        t.deepEqual(chunks, words.splice(0, chunks.length));
-    });
-    t.end();
-});
-
-test('start20stop60', function (t) {
-    var lines = wordwrap(20, 100)(idleness).split(/\n/);
-    var words = idleness.split(/\s+/);
-    
-    lines.forEach(function (line) {
-        t.ok(line.length <= 100, 'line > 100 columns');
-        var chunks = line
-            .split(/\s+/)
-            .filter(function (x) { return x.match(/\S/) })
-        ;
-        t.deepEqual(chunks, words.splice(0, chunks.length));
-        t.deepEqual(line.slice(0, 20), new Array(20 + 1).join(' '));
-    });
-    t.end();
-});

+ 0 - 16
admin/node_modules/worker-farm/.editorconfig

@@ -1,16 +0,0 @@
-# This file is for unifying the coding style for different editors and IDEs
-# editorconfig.org
-
-root = true
-
-[*]
-end_of_line = lf
-charset = utf-8
-insert_final_newline = true
-trim_trailing_whitespace = true
-indent_style = space
-indent_size = 2
-
-[*.js]
-max_line_length = 80
-View

+ 0 - 12
admin/node_modules/worker-farm/.travis.yml

@@ -1,12 +0,0 @@
-language: node_js
-node_js:
-  - 6
-  - 8
-  - 10
-  - 12
-branches:
-  only:
-    - master
-notifications:
-  email:
-    - rod@vagg.org

+ 0 - 13
admin/node_modules/worker-farm/LICENSE.md

@@ -1,13 +0,0 @@
-The MIT License (MIT)
-=====================
-
-Copyright (c) 2014 LevelUP contributors
----------------------------------------
-
-*LevelUP contributors listed at <https://github.com/rvagg/node-levelup#contributors>*
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 150
admin/node_modules/worker-farm/README.md

@@ -1,150 +0,0 @@
-# Worker Farm [![Build Status](https://secure.travis-ci.org/rvagg/node-worker-farm.svg)](http://travis-ci.org/rvagg/node-worker-farm)
-
-[![NPM](https://nodei.co/npm/worker-farm.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/worker-farm/) [![NPM](https://nodei.co/npm-dl/worker-farm.png?months=6&height=3)](https://nodei.co/npm/worker-farm/)
-
-
-Distribute processing tasks to child processes with an über-simple API and baked-in durability & custom concurrency options. *Available in npm as <strong>worker-farm</strong>*.
-
-## Example
-
-Given a file, *child.js*:
-
-```js
-module.exports = function (inp, callback) {
-  callback(null, inp + ' BAR (' + process.pid + ')')
-}
-```
-
-And a main file:
-
-```js
-var workerFarm = require('worker-farm')
-  , workers    = workerFarm(require.resolve('./child'))
-  , ret        = 0
-
-for (var i = 0; i < 10; i++) {
-  workers('#' + i + ' FOO', function (err, outp) {
-    console.log(outp)
-    if (++ret == 10)
-      workerFarm.end(workers)
-  })
-}
-```
-
-We'll get an output something like the following:
-
-```
-#1 FOO BAR (8546)
-#0 FOO BAR (8545)
-#8 FOO BAR (8545)
-#9 FOO BAR (8546)
-#2 FOO BAR (8548)
-#4 FOO BAR (8551)
-#3 FOO BAR (8549)
-#6 FOO BAR (8555)
-#5 FOO BAR (8553)
-#7 FOO BAR (8557)
-```
-
-This example is contained in the *[examples/basic](https://github.com/rvagg/node-worker-farm/tree/master/examples/basic/)* directory.
-
-### Example #1: Estimating π using child workers
-
-You will also find a more complex example in *[examples/pi](https://github.com/rvagg/node-worker-farm/tree/master/examples/pi/)* that estimates the value of **π** by using a Monte Carlo *area-under-the-curve* method and compares the speed of doing it all in-process vs using child workers to complete separate portions.
-
-Running `node examples/pi` will give you something like:
-
-```
-Doing it the slow (single-process) way...
-π ≈ 3.1416269360000006  (0.0000342824102075312 away from actual!)
-took 8341 milliseconds
-Doing it the fast (multi-process) way...
-π ≈ 3.1416233600000036  (0.00003070641021052367 away from actual!)
-took 1985 milliseconds
-```
-
-## Durability
-
-An important feature of Worker Farm is **call durability**. If a child process dies for any reason during the execution of call(s), those calls will be re-queued and taken care of by other child processes. In this way, when you ask for something to be done, unless there is something *seriously* wrong with what you're doing, you should get a result on your callback function.
-
-## My use-case
-
-There are other libraries for managing worker processes available but my use-case was fairly specific: I need to make heavy use of the [node-java](https://github.com/nearinfinity/node-java) library to interact with JVM code. Unfortunately, because the JVM garbage collector is so difficult to interact with, it's prone to killing your Node process when the GC kicks under heavy load. For safety I needed a durable way to make calls so that (1) it wouldn't kill my main process and (2) any calls that weren't successful would be resubmitted for processing.
-
-Worker Farm allows me to spin up multiple JVMs to be controlled by Node, and have a single, uncomplicated API that acts the same way as an in-process API and the calls will be taken care of by a child process even if an error kills a child process while it is working as the call will simply be passed to a new child process.
-
-**But**, don't think that Worker Farm is specific to that use-case, it's designed to be very generic and simple to adapt to anything requiring the use of child Node processes.
-
-## API
-
-Worker Farm exports a main function and an `end()` method. The main function sets up a "farm" of coordinated child-process workers and it can be used to instantiate multiple farms, all operating independently.
-
-### workerFarm([options, ]pathToModule[, exportedMethods])
-
-In its most basic form, you call `workerFarm()` with the path to a module file to be invoked by the child process. You should use an **absolute path** to the module file, the best way to obtain the path is with `require.resolve('./path/to/module')`, this function can be used in exactly the same way as `require('./path/to/module')` but it returns an absolute path.
-
-#### `exportedMethods`
-
-If your module exports a single function on `module.exports` then you should omit the final parameter. However, if you are exporting multiple functions on `module.exports` then you should list them in an Array of Strings:
-
-```js
-var workers = workerFarm(require.resolve('./mod'), [ 'doSomething', 'doSomethingElse' ])
-workers.doSomething(function () {})
-workers.doSomethingElse(function () {})
-```
-
-Listing the available methods will instruct Worker Farm what API to provide you with on the returned object. If you don't list a `exportedMethods` Array then you'll get a single callable function to use; but if you list the available methods then you'll get an object with callable functions by those names.
-
-**It is assumed that each function you call on your child module will take a `callback` function as the last argument.**
-
-#### `options`
-
-If you don't provide an `options` object then the following defaults will be used:
-
-```js
-{
-    workerOptions               : {}
-  , maxCallsPerWorker           : Infinity
-  , maxConcurrentWorkers        : require('os').cpus().length
-  , maxConcurrentCallsPerWorker : 10
-  , maxConcurrentCalls          : Infinity
-  , maxCallTime                 : Infinity
-  , maxRetries                  : Infinity
-  , autoStart                   : false
-  , onChild                     : function() {}
-}
-```
-
-  * **<code>workerOptions</code>** allows you to customize all the parameters passed to child nodes. This object supports [all possible options of `child_process.fork`](https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options). The default options passed are the parent `execArgv`, `cwd` and `env`. Any (or all) of them can be overridden, and others can be added as well.
-
-  * **<code>maxCallsPerWorker</code>** allows you to control the lifespan of your child processes. A positive number will indicate that you only want each child to accept that many calls before it is terminated. This may be useful if you need to control memory leaks or similar in child processes.
-
-  * **<code>maxConcurrentWorkers</code>** will set the number of child processes to maintain concurrently. By default it is set to the number of CPUs available on the current system, but it can be any reasonable number, including `1`.
-
-  * **<code>maxConcurrentCallsPerWorker</code>** allows you to control the *concurrency* of individual child processes. Calls are placed into a queue and farmed out to child processes according to the number of calls they are allowed to handle concurrently. It is arbitrarily set to 10 by default so that calls are shared relatively evenly across workers, however if your calls predictably take a similar amount of time then you could set it to `Infinity` and Worker Farm won't queue any calls but spread them evenly across child processes and let them go at it. If your calls aren't I/O bound then it won't matter what value you use here as the individual workers won't be able to execute more than a single call at a time.
-
-  * **<code>maxConcurrentCalls</code>** allows you to control the maximum number of calls in the queue&mdash;either actively being processed or waiting for a worker to be processed. `Infinity` indicates no limit but if you have conditions that may endlessly queue jobs and you need to set a limit then provide a `>0` value and any calls that push the limit will return on their callback with a `MaxConcurrentCallsError` error (check `err.type == 'MaxConcurrentCallsError'`).
-
-  * **<code>maxCallTime</code>** *(use with caution, understand what this does before you use it!)* when `!== Infinity`, will cap a time, in milliseconds, that *any single call* can take to execute in a worker. If this time limit is exceeded by just a single call then the worker running that call will be killed and any calls running on that worker will have their callbacks returned with a `TimeoutError` (check `err.type == 'TimeoutError'`). If you are running with `maxConcurrentCallsPerWorker` value greater than `1` then **all calls currently executing** will fail and will be automatically resubmitted uless you've changed the `maxRetries` option. Use this if you have jobs that may potentially end in infinite loops that you can't programatically end with your child code. Preferably run this with a `maxConcurrentCallsPerWorker` so you don't interrupt other calls when you have a timeout. This timeout operates on a per-call basis but will interrupt a whole worker.
-
-  * **<code>maxRetries</code>** allows you to control the max number of call requeues after worker termination (unexpected or timeout). By default this option is set to `Infinity` which means that each call of each terminated worker will always be auto requeued. When the number of retries exceeds `maxRetries` value, the job callback will be executed with a `ProcessTerminatedError`. Note that if you are running with finite `maxCallTime` and `maxConcurrentCallsPerWorkers` greater than `1` then any `TimeoutError` will increase the retries counter *for each* concurrent call of the terminated worker.
-
-  * **<code>autoStart</code>** when set to `true` will start the workers as early as possible. Use this when your workers have to do expensive initialization. That way they'll be ready when the first request comes through.
-
-  * **<code>onChild</code>** when new child process starts this callback will be called with subprocess object as an argument. Use this when you need to add some custom communication with child processes.
-
-### workerFarm.end(farm)
-
-Child processes stay alive waiting for jobs indefinitely and your farm manager will stay alive managing its workers, so if you need it to stop then you have to do so explicitly. If you send your farm API to `workerFarm.end()` then it'll cleanly end your worker processes. Note though that it's a *soft* ending so it'll wait for child processes to finish what they are working on before asking them to die.
-
-Any calls that are queued and not yet being handled by a child process will be discarded. `end()` only waits for those currently in progress.
-
-Once you end a farm, it won't handle any more calls, so don't even try!
-
-## Related
-
-* [farm-cli](https://github.com/Kikobeats/farm-cli) – Launch a farm of workers from CLI.
-
-## License
-
-Worker Farm is Copyright (c) 2014 Rod Vagg [@rvagg](https://twitter.com/rvagg) and licensed under the MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details.

+ 0 - 5
admin/node_modules/worker-farm/examples/basic/child.js

@@ -1,5 +0,0 @@
-'use strict'
-
-module.exports = function (inp, callback) {
-  callback(null, inp + ' BAR (' + process.pid + ')')
-}

+ 0 - 13
admin/node_modules/worker-farm/examples/basic/index.js

@@ -1,13 +0,0 @@
-'use strict'
-
-let workerFarm = require('../../')
-  , workers    = workerFarm(require.resolve('./child'))
-  , ret        = 0
-
-for (let i = 0; i < 10; i++) {
-  workers('#' + i + ' FOO', function (err, outp) {
-    console.log(outp)
-    if (++ret == 10)
-      workerFarm.end(workers)
-  })
-}

+ 0 - 22
admin/node_modules/worker-farm/examples/pi/calc.js

@@ -1,22 +0,0 @@
-'use strict'
-
-/* A simple π estimation function using a Monte Carlo method
- * For 0 to `points`, take 2 random numbers < 1, square and add them to
- * find the area under that point in a 1x1 square. If that area is <= 1
- * then it's *within* a quarter-circle, otherwise it's outside.
- * Take the number of points <= 1 and multiply it by 4 and you have an
- * estimate!
- * Do this across multiple processes and average the results to
- * increase accuracy.
- */
-
-module.exports = function (points, callback) {
-  let inside = 0
-    , i = points
-
-  while (i--)
-    if (Math.pow(Math.random(), 2) + Math.pow(Math.random(), 2) <= 1)
-      inside++
-
-  callback(null, (inside / points) * 4)
-}

+ 0 - 41
admin/node_modules/worker-farm/examples/pi/index.js

@@ -1,41 +0,0 @@
-'use strict'
-
-const CHILDREN         = 500
-    , POINTS_PER_CHILD = 1000000
-    , FARM_OPTIONS     = {
-          maxConcurrentWorkers        : require('os').cpus().length
-        , maxCallsPerWorker           : Infinity
-        , maxConcurrentCallsPerWorker : 1
-      }
-
-let workerFarm = require('../../')
-  , calcDirect = require('./calc')
-  , calcWorker = workerFarm(FARM_OPTIONS, require.resolve('./calc'))
-
-  , ret
-  , start
-
-  , tally = function (finish, err, avg) {
-      ret.push(avg)
-      if (ret.length == CHILDREN) {
-        let pi  = ret.reduce(function (a, b) { return a + b }) / ret.length
-          , end = +new Date()
-        console.log('π ≈', pi, '\t(' + Math.abs(pi - Math.PI), 'away from actual!)')
-        console.log('took', end - start, 'milliseconds')
-        if (finish)
-          finish()
-      }
-    }
-
-  , calc = function (method, callback) {
-      ret   = []
-      start = +new Date()
-      for (let i = 0; i < CHILDREN; i++)
-        method(POINTS_PER_CHILD, tally.bind(null, callback))
-    }
-
-console.log('Doing it the slow (single-process) way...')
-calc(calcDirect, function () {
-  console.log('Doing it the fast (multi-process) way...')
-  calc(calcWorker, process.exit)
-})

+ 0 - 55
admin/node_modules/worker-farm/index.d.ts

@@ -1,55 +0,0 @@
-import { ForkOptions } from "child_process";
-
-export = Farm;
-
-declare function Farm(name: string): Farm.Workers;
-declare function Farm(name: string, exportedMethods: string[]): Farm.Workers;
-declare function Farm(options: Farm.FarmOptions, name: string): Farm.Workers;
-declare function Farm(
-  options: Farm.FarmOptions,
-  name: string,
-  exportedMethods: string[],
-): Farm.Workers;
-
-type WorkerCallback0 = () => void;
-type WorkerCallback1 = (arg1: any) => void;
-type WorkerCallback2 = (arg1: any, arg2: any) => void;
-type WorkerCallback3 = (arg1: any, arg2: any, arg3: any) => void;
-type WorkerCallback4 = (arg1: any, arg2: any, arg3: any, arg4: any) => void;
-
-declare namespace Farm {
-  export function end(workers: Workers, callback?: Function): void;
-
-  export interface Workers {
-    [x: string]: Workers,
-    (callback: WorkerCallback): void;
-    (arg1: any, callback: WorkerCallback): void;
-    (arg1: any, arg2: any, callback: WorkerCallback): void;
-    (arg1: any, arg2: any, arg3: any, callback: WorkerCallback): void;
-    (
-      arg1: any,
-      arg2: any,
-      arg3: any,
-      arg4: any,
-      callback: WorkerCallback,
-    ): void;
-  }
-
-  export interface FarmOptions {
-    maxCallsPerWorker?: number;
-    maxConcurrentWorkers?: number;
-    maxConcurrentCallsPerWorker?: number;
-    maxConcurrentCalls?: number;
-    maxCallTime?: number;
-    maxRetries?: number;
-    autoStart?: boolean;
-    workerOptions?: ForkOptions;
-  }
-
-  export type WorkerCallback =
-    | WorkerCallback0
-    | WorkerCallback1
-    | WorkerCallback2
-    | WorkerCallback3
-    | WorkerCallback4;
-}

+ 0 - 56
admin/node_modules/worker-farm/lib/child/index.js

@@ -1,56 +0,0 @@
-'use strict'
-
-let $module
-
-/*
-  let contextProto = this.context;
-  while (contextProto = Object.getPrototypeOf(contextProto)) {
-    completionGroups.push(Object.getOwnPropertyNames(contextProto));
-  }
-*/
-
-
-function handle (data) {
-  let idx      = data.idx
-    , child    = data.child
-    , method   = data.method
-    , args     = data.args
-    , callback = function () {
-        let _args = Array.prototype.slice.call(arguments)
-        if (_args[0] instanceof Error) {
-          let e = _args[0]
-          _args[0] = {
-              '$error'  : '$error'
-            , 'type'    : e.constructor.name
-            , 'message' : e.message
-            , 'stack'   : e.stack
-          }
-          Object.keys(e).forEach(function(key) {
-            _args[0][key] = e[key]
-          })
-        }
-        process.send({ owner: 'farm', idx: idx, child: child, args: _args })
-      }
-    , exec
-
-  if (method == null && typeof $module == 'function')
-    exec = $module
-  else if (typeof $module[method] == 'function')
-    exec = $module[method]
-
-  if (!exec)
-    return console.error('NO SUCH METHOD:', method)
-
-  exec.apply(null, args.concat([ callback ]))
-}
-
-
-process.on('message', function (data) {
-  if (data.owner !== 'farm') {
-    return;
-  }
-
-  if (!$module) return $module = require(data.module)
-  if (data.event == 'die') return process.exit(0)
-  handle(data)
-})

+ 0 - 348
admin/node_modules/worker-farm/lib/farm.js

@@ -1,348 +0,0 @@
-'use strict'
-
-const DEFAULT_OPTIONS = {
-          workerOptions               : {}
-        , maxCallsPerWorker           : Infinity
-        , maxConcurrentWorkers        : (require('os').cpus() || { length: 1 }).length
-        , maxConcurrentCallsPerWorker : 10
-        , maxConcurrentCalls          : Infinity
-        , maxCallTime                 : Infinity // exceed this and the whole worker is terminated
-        , maxRetries                  : Infinity
-        , forcedKillTime              : 100
-        , autoStart                   : false
-        , onChild                     : function() {}
-      }
-
-const fork                    = require('./fork')
-    , TimeoutError            = require('errno').create('TimeoutError')
-    , ProcessTerminatedError  = require('errno').create('ProcessTerminatedError')
-    , MaxConcurrentCallsError = require('errno').create('MaxConcurrentCallsError')
-
-
-function Farm (options, path) {
-  this.options     = Object.assign({}, DEFAULT_OPTIONS, options)
-  this.path        = path
-  this.activeCalls = 0
-}
-
-
-// make a handle to pass back in the form of an external API
-Farm.prototype.mkhandle = function (method) {
-  return function () {
-    let args = Array.prototype.slice.call(arguments)
-    if (this.activeCalls + this.callQueue.length >= this.options.maxConcurrentCalls) {
-      let err = new MaxConcurrentCallsError('Too many concurrent calls (active: ' + this.activeCalls + ', queued: ' + this.callQueue.length + ')')
-      if (typeof args[args.length - 1] == 'function')
-        return process.nextTick(args[args.length - 1].bind(null, err))
-      throw err
-    }
-    this.addCall({
-        method   : method
-      , callback : args.pop()
-      , args     : args
-      , retries  : 0
-    })
-  }.bind(this)
-}
-
-
-// a constructor of sorts
-Farm.prototype.setup = function (methods) {
-  let iface
-  if (!methods) { // single-function export
-    iface = this.mkhandle()
-  } else { // multiple functions on the export
-    iface = {}
-    methods.forEach(function (m) {
-      iface[m] = this.mkhandle(m)
-    }.bind(this))
-  }
-
-  this.searchStart    = -1
-  this.childId        = -1
-  this.children       = {}
-  this.activeChildren = 0
-  this.callQueue      = []
-
-  if (this.options.autoStart) {
-    while (this.activeChildren < this.options.maxConcurrentWorkers)
-      this.startChild()
-  }
-
-  return iface
-}
-
-
-// when a child exits, check if there are any outstanding jobs and requeue them
-Farm.prototype.onExit = function (childId) {
-  // delay this to give any sends a chance to finish
-  setTimeout(function () {
-    let doQueue = false
-    if (this.children[childId] && this.children[childId].activeCalls) {
-      this.children[childId].calls.forEach(function (call, i) {
-        if (!call) return
-        else if (call.retries >= this.options.maxRetries) {
-          this.receive({
-              idx   : i
-            , child : childId
-            , args  : [ new ProcessTerminatedError('cancel after ' + call.retries + ' retries!') ]
-          })
-        } else {
-          call.retries++
-          this.callQueue.unshift(call)
-          doQueue = true
-        }
-      }.bind(this))
-    }
-    this.stopChild(childId)
-    doQueue && this.processQueue()
-  }.bind(this), 10)
-}
-
-
-// start a new worker
-Farm.prototype.startChild = function () {
-  this.childId++
-
-  let forked = fork(this.path, this.options.workerOptions)
-    , id     = this.childId
-    , c      = {
-          send        : forked.send
-        , child       : forked.child
-        , calls       : []
-        , activeCalls : 0
-        , exitCode    : null
-      }
-
-  this.options.onChild(forked.child);
-
-  forked.child.on('message', function(data) {
-    if (data.owner !== 'farm') {
-      return;
-    }
-    this.receive(data);
-  }.bind(this))
-  forked.child.once('exit', function (code) {
-    c.exitCode = code
-    this.onExit(id)
-  }.bind(this))
-
-  this.activeChildren++
-  this.children[id] = c
-}
-
-
-// stop a worker, identified by id
-Farm.prototype.stopChild = function (childId) {
-  let child = this.children[childId]
-  if (child) {
-    child.send({owner: 'farm', event: 'die'})
-    setTimeout(function () {
-      if (child.exitCode === null)
-        child.child.kill('SIGKILL')
-    }, this.options.forcedKillTime).unref()
-    ;delete this.children[childId]
-    this.activeChildren--
-  }
-}
-
-
-// called from a child process, the data contains information needed to
-// look up the child and the original call so we can invoke the callback
-Farm.prototype.receive = function (data) {
-  let idx     = data.idx
-    , childId = data.child
-    , args    = data.args
-    , child   = this.children[childId]
-    , call
-
-  if (!child) {
-    return console.error(
-        'Worker Farm: Received message for unknown child. '
-      + 'This is likely as a result of premature child death, '
-      + 'the operation will have been re-queued.'
-    )
-  }
-
-  call = child.calls[idx]
-  if (!call) {
-    return console.error(
-        'Worker Farm: Received message for unknown index for existing child. '
-      + 'This should not happen!'
-    )
-  }
-
-  if (this.options.maxCallTime !== Infinity)
-    clearTimeout(call.timer)
-
-  if (args[0] && args[0].$error == '$error') {
-    let e = args[0]
-    switch (e.type) {
-      case 'TypeError': args[0] = new TypeError(e.message); break
-      case 'RangeError': args[0] = new RangeError(e.message); break
-      case 'EvalError': args[0] = new EvalError(e.message); break
-      case 'ReferenceError': args[0] = new ReferenceError(e.message); break
-      case 'SyntaxError': args[0] = new SyntaxError(e.message); break
-      case 'URIError': args[0] = new URIError(e.message); break
-      default: args[0] = new Error(e.message)
-    }
-    args[0].type = e.type
-    args[0].stack = e.stack
-
-    // Copy any custom properties to pass it on.
-    Object.keys(e).forEach(function(key) {
-      args[0][key] = e[key];
-    });
-  }
-
-  process.nextTick(function () {
-    call.callback.apply(null, args)
-  })
-
-  ;delete child.calls[idx]
-  child.activeCalls--
-  this.activeCalls--
-
-  if (child.calls.length >= this.options.maxCallsPerWorker
-      && !Object.keys(child.calls).length) {
-    // this child has finished its run, kill it
-    this.stopChild(childId)
-  }
-
-  // allow any outstanding calls to be processed
-  this.processQueue()
-}
-
-
-Farm.prototype.childTimeout = function (childId) {
-  let child = this.children[childId]
-    , i
-
-  if (!child)
-    return
-
-  for (i in child.calls) {
-    this.receive({
-        idx   : i
-      , child : childId
-      , args  : [ new TimeoutError('worker call timed out!') ]
-    })
-  }
-  this.stopChild(childId)
-}
-
-
-// send a call to a worker, identified by id
-Farm.prototype.send = function (childId, call) {
-  let child = this.children[childId]
-    , idx   = child.calls.length
-
-  child.calls.push(call)
-  child.activeCalls++
-  this.activeCalls++
-
-  child.send({
-      owner  : 'farm'
-    , idx    : idx
-    , child  : childId
-    , method : call.method
-    , args   : call.args
-  })
-
-  if (this.options.maxCallTime !== Infinity) {
-    call.timer =
-      setTimeout(this.childTimeout.bind(this, childId), this.options.maxCallTime)
-  }
-}
-
-
-// a list of active worker ids, in order, but the starting offset is
-// shifted each time this method is called, so we work our way through
-// all workers when handing out jobs
-Farm.prototype.childKeys = function () {
-  let cka = Object.keys(this.children)
-    , cks
-
-  if (this.searchStart >= cka.length - 1)
-    this.searchStart = 0
-  else
-    this.searchStart++
-
-  cks = cka.splice(0, this.searchStart)
-
-  return cka.concat(cks)
-}
-
-
-// Calls are added to a queue, this processes the queue and is called
-// whenever there might be a chance to send more calls to the workers.
-// The various options all impact on when we're able to send calls,
-// they may need to be kept in a queue until a worker is ready.
-Farm.prototype.processQueue = function () {
-  let cka, i = 0, childId
-
-  if (!this.callQueue.length)
-    return this.ending && this.end()
-
-  if (this.activeChildren < this.options.maxConcurrentWorkers)
-    this.startChild()
-
-  for (cka = this.childKeys(); i < cka.length; i++) {
-    childId = +cka[i]
-    if (this.children[childId].activeCalls < this.options.maxConcurrentCallsPerWorker
-        && this.children[childId].calls.length < this.options.maxCallsPerWorker) {
-
-      this.send(childId, this.callQueue.shift())
-      if (!this.callQueue.length)
-        return this.ending && this.end()
-    } /*else {
-      console.log(
-        , this.children[childId].activeCalls < this.options.maxConcurrentCallsPerWorker
-        , this.children[childId].calls.length < this.options.maxCallsPerWorker
-        , this.children[childId].calls.length , this.options.maxCallsPerWorker)
-    }*/
-  }
-
-  if (this.ending)
-    this.end()
-}
-
-
-// add a new call to the call queue, then trigger a process of the queue
-Farm.prototype.addCall = function (call) {
-  if (this.ending)
-    return this.end() // don't add anything new to the queue
-  this.callQueue.push(call)
-  this.processQueue()
-}
-
-
-// kills child workers when they're all done
-Farm.prototype.end = function (callback) {
-  let complete = true
-  if (this.ending === false)
-    return
-  if (callback)
-    this.ending = callback
-  else if (this.ending == null)
-    this.ending = true
-  Object.keys(this.children).forEach(function (child) {
-    if (!this.children[child])
-      return
-    if (!this.children[child].activeCalls)
-      this.stopChild(child)
-    else
-      complete = false
-  }.bind(this))
-
-  if (complete && typeof this.ending == 'function') {
-    process.nextTick(function () {
-      this.ending()
-      this.ending = false
-    }.bind(this))
-  }
-}
-
-
-module.exports              = Farm
-module.exports.TimeoutError = TimeoutError

+ 0 - 33
admin/node_modules/worker-farm/lib/fork.js

@@ -1,33 +0,0 @@
-'use strict'
-
-const childProcess = require('child_process')
-    , childModule  = require.resolve('./child/index')
-
-
-function fork (forkModule, workerOptions) {
-  // suppress --debug / --inspect flags while preserving others (like --harmony)
-  let filteredArgs = process.execArgv.filter(function (v) {
-        return !(/^--(debug|inspect)/).test(v)
-      })
-    , options       = Object.assign({
-          execArgv : filteredArgs
-        , env      : process.env
-        , cwd      : process.cwd()
-      }, workerOptions)
-    , child         = childProcess.fork(childModule, process.argv, options)
-
-  child.on('error', function() {
-    // this *should* be picked up by onExit and the operation requeued
-  })
-
-  child.send({ owner: 'farm', module: forkModule })
-
-  // return a send() function for this child
-  return {
-      send  : child.send.bind(child)
-    , child : child
-  }
-}
-
-
-module.exports = fork

+ 0 - 34
admin/node_modules/worker-farm/lib/index.js

@@ -1,34 +0,0 @@
-'use strict'
-
-const Farm = require('./farm')
-
-let farms = [] // keep record of farms so we can end() them if required
-
-
-function farm (options, path, methods) {
-  if (typeof options == 'string') {
-    methods = path
-    path = options
-    options = {}
-  }
-
-  let f   = new Farm(options, path)
-    , api = f.setup(methods)
-
-  farms.push({ farm: f, api: api })
-
-  // return the public API
-  return api
-}
-
-
-function end (api, callback) {
-  for (let i = 0; i < farms.length; i++)
-    if (farms[i] && farms[i].api === api)
-      return farms[i].farm.end(callback)
-  process.nextTick(callback.bind(null, new Error('Worker farm not found!')))
-}
-
-
-module.exports     = farm
-module.exports.end = end

+ 0 - 63
admin/node_modules/worker-farm/package.json

@@ -1,63 +0,0 @@
-{
-  "_args": [
-    [
-      "worker-farm@1.7.0",
-      "D:\\zhaogongxue\\crm\\template\\admin"
-    ]
-  ],
-  "_from": "worker-farm@1.7.0",
-  "_id": "worker-farm@1.7.0",
-  "_inBundle": false,
-  "_integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
-  "_location": "/worker-farm",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "worker-farm@1.7.0",
-    "name": "worker-farm",
-    "escapedName": "worker-farm",
-    "rawSpec": "1.7.0",
-    "saveSpec": null,
-    "fetchSpec": "1.7.0"
-  },
-  "_requiredBy": [
-    "/terser-webpack-plugin",
-    "/uglifyjs-webpack-plugin"
-  ],
-  "_resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
-  "_spec": "1.7.0",
-  "_where": "D:\\zhaogongxue\\crm\\template\\admin",
-  "authors": [
-    "Rod Vagg @rvagg <rod@vagg.org> (https://github.com/rvagg)"
-  ],
-  "bugs": {
-    "url": "https://github.com/rvagg/node-worker-farm/issues"
-  },
-  "dependencies": {
-    "errno": "~0.1.7"
-  },
-  "description": "Distribute processing tasks to child processes with an über-simple API and baked-in durability & custom concurrency options.",
-  "devDependencies": {
-    "tape": "~4.10.1"
-  },
-  "homepage": "https://github.com/rvagg/node-worker-farm",
-  "keywords": [
-    "worker",
-    "child",
-    "processing",
-    "farm"
-  ],
-  "license": "MIT",
-  "main": "./lib/index.js",
-  "name": "worker-farm",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/rvagg/node-worker-farm.git"
-  },
-  "scripts": {
-    "test": "node ./tests/"
-  },
-  "types": "./index.d.ts",
-  "version": "1.7.0"
-}

+ 0 - 87
admin/node_modules/worker-farm/tests/child.js

@@ -1,87 +0,0 @@
-'use strict'
-
-const fs = require('fs')
-const started = Date.now()
-
-
-module.exports = function (timeout, callback) {
-  callback = callback.bind(null, null, process.pid, Math.random(), timeout)
-  if (timeout)
-    return setTimeout(callback, timeout)
-  callback()
-}
-
-
-module.exports.args = function (callback) {
-  callback(null, {
-      argv     : process.argv
-    , cwd      : process.cwd()
-    , execArgv : process.execArgv
-  })
-}
-
-
-module.exports.run0 = function (callback) {
-  module.exports(0, callback)
-}
-
-
-module.exports.killable = function (id, callback) {
-  if (Math.random() < 0.5)
-    return process.exit(-1)
-  callback(null, id, process.pid)
-}
-
-
-module.exports.err = function (type, message, data, callback) {
-  if (typeof data == 'function') {
-    callback = data
-    data = null
-  } else {
-    let err = new Error(message)
-    Object.keys(data).forEach(function(key) {
-      err[key] = data[key]
-    })
-    callback(err)
-    return
-  }
-
-  if (type == 'TypeError')
-    return callback(new TypeError(message))
-  callback(new Error(message))
-}
-
-
-module.exports.block = function () {
-  while (true);
-}
-
-
-// use provided file path to save retries count among terminated workers
-module.exports.stubborn = function (path, callback) {
-  function isOutdated(path) {
-    return ((new Date).getTime() - fs.statSync(path).mtime.getTime()) > 2000
-  }
-
-  // file may not be properly deleted, check if modified no earler than two seconds ago
-  if (!fs.existsSync(path) || isOutdated(path)) {
-    fs.writeFileSync(path, '1')
-    process.exit(-1)
-  }
-
-  let retry = parseInt(fs.readFileSync(path, 'utf8'))
-  if (Number.isNaN(retry))
-    return callback(new Error('file contents is not a number'))
-
-  if (retry > 4) {
-    callback(null, 12)
-  } else {
-    fs.writeFileSync(path, String(retry + 1))
-    process.exit(-1)
-  }
-}
-
-
-module.exports.uptime = function (callback) {
-  callback(null, Date.now() - started)
-}

+ 0 - 12
admin/node_modules/worker-farm/tests/debug.js

@@ -1,12 +0,0 @@
-'use strict'
-
-const workerFarm = require('../')
-    , workers    = workerFarm(require.resolve('./child'), ['args'])
-
-
-workers.args(function(err, result) {
-  console.log(result);
-  workerFarm.end(workers)
-  console.log('FINISHED')
-  process.exit(0)
-})

+ 0 - 616
admin/node_modules/worker-farm/tests/index.js

@@ -1,616 +0,0 @@
-'use strict'
-
-const tape          = require('tape')
-    , child_process = require('child_process')
-    , workerFarm    = require('../')
-    , childPath     = require.resolve('./child')
-    , fs            = require('fs')
-    , os            = require('os')
-
-function uniq (ar) {
-  let a = [], i, j
-  o: for (i = 0; i < ar.length; ++i) {
-    for (j = 0; j < a.length; ++j) if (a[j] == ar[i]) continue o
-    a[a.length] = ar[i]
-  }
-  return a
-}
-
-
-// a child where module.exports = function ...
-tape('simple, exports=function test', function (t) {
-  t.plan(4)
-
-  let child = workerFarm(childPath)
-  child(0, function (err, pid, rnd) {
-    t.ok(pid > process.pid, 'pid makes sense')
-    t.ok(pid < process.pid + 750, 'pid makes sense')
-    t.ok(rnd >= 0 && rnd < 1, 'rnd result makes sense')
-  })
-
-  workerFarm.end(child, function () {
-    t.ok(true, 'workerFarm ended')
-  })
-})
-
-
-// a child where we have module.exports.fn = function ...
-tape('simple, exports.fn test', function (t) {
-  t.plan(4)
-
-  let child = workerFarm(childPath, [ 'run0' ])
-  child.run0(function (err, pid, rnd) {
-    t.ok(pid > process.pid, 'pid makes sense')
-    t.ok(pid < process.pid + 750, 'pid makes sense')
-    t.ok(rnd >= 0 && rnd < 1, 'rnd result makes sense')
-  })
-
-  workerFarm.end(child, function () {
-    t.ok(true, 'workerFarm ended')
-  })
-})
-
-
-tape('on child', function (t) {
-    t.plan(2)
-
-    let child = workerFarm({ onChild: function(subprocess) { childPid = subprocess.pid } }, childPath)
-      , childPid = null;
-
-    child(0, function(err, pid) {
-      t.equal(childPid, pid)
-    })
-
-    workerFarm.end(child, function () {
-      t.ok(true, 'workerFarm ended')
-    })
-})
-
-
-// use the returned pids to check that we're using a single child process
-// when maxConcurrentWorkers = 1
-tape('single worker', function (t) {
-  t.plan(2)
-
-  let child = workerFarm({ maxConcurrentWorkers: 1 }, childPath)
-    , pids  = []
-    , i     = 10
-
-  while (i--) {
-    child(0, function (err, pid) {
-      pids.push(pid)
-      if (pids.length == 10) {
-        t.equal(1, uniq(pids).length, 'only a single process (by pid)')
-      } else if (pids.length > 10)
-        t.fail('too many callbacks!')
-    })
-  }
-
-  workerFarm.end(child, function () {
-    t.ok(true, 'workerFarm ended')
-  })
-})
-
-
-// use the returned pids to check that we're using two child processes
-// when maxConcurrentWorkers = 2
-tape('two workers', function (t) {
-  t.plan(2)
-
-  let child = workerFarm({ maxConcurrentWorkers: 2 }, childPath)
-    , pids  = []
-    , i     = 10
-
-  while (i--) {
-    child(0, function (err, pid) {
-      pids.push(pid)
-      if (pids.length == 10) {
-        t.equal(2, uniq(pids).length, 'only two child processes (by pid)')
-      } else if (pids.length > 10)
-        t.fail('too many callbacks!')
-    })
-  }
-
-  workerFarm.end(child, function () {
-    t.ok(true, 'workerFarm ended')
-  })
-})
-
-
-// use the returned pids to check that we're using a child process per
-// call when maxConcurrentWorkers = 10
-tape('many workers', function (t) {
-  t.plan(2)
-
-  let child = workerFarm({ maxConcurrentWorkers: 10 }, childPath)
-    , pids  = []
-    , i     = 10
-
-  while (i--) {
-    child(1, function (err, pid) {
-      pids.push(pid)
-      if (pids.length == 10) {
-        t.equal(10, uniq(pids).length, 'pids are all the same (by pid)')
-      } else if (pids.length > 10)
-        t.fail('too many callbacks!')
-    })
-  }
-
-  workerFarm.end(child, function () {
-    t.ok(true, 'workerFarm ended')
-  })
-})
-
-
-tape('auto start workers', function (t) {
-  let child = workerFarm({ maxConcurrentWorkers: 3, autoStart: true }, childPath, ['uptime'])
-    , pids  = []
-    , count = 5
-    , i     = count
-    , delay = 250
-
-  t.plan(count + 1)
-
-  setTimeout(function() {
-    while (i--)
-      child.uptime(function (err, uptime) {
-        t.ok(uptime > 10, 'child has been up before the request (' + uptime + 'ms)')
-      })
-
-    workerFarm.end(child, function () {
-      t.ok(true, 'workerFarm ended')
-    })
-  }, delay)
-})
-
-
-// use the returned pids to check that we're using a child process per
-// call when we set maxCallsPerWorker = 1 even when we have maxConcurrentWorkers = 1
-tape('single call per worker', function (t) {
-  t.plan(2)
-
-  let child = workerFarm({
-          maxConcurrentWorkers: 1
-        , maxConcurrentCallsPerWorker: Infinity
-        , maxCallsPerWorker: 1
-        , autoStart: true
-      }, childPath)
-    , pids  = []
-    , count = 25
-    , i     = count
-
-  while (i--) {
-    child(0, function (err, pid) {
-      pids.push(pid)
-      if (pids.length == count) {
-        t.equal(count, uniq(pids).length, 'one process for each call (by pid)')
-        workerFarm.end(child, function () {
-          t.ok(true, 'workerFarm ended')
-        })
-      } else if (pids.length > count)
-        t.fail('too many callbacks!')
-    })
-  }
-})
-
-
-// use the returned pids to check that we're using a child process per
-// two-calls when we set maxCallsPerWorker = 2 even when we have maxConcurrentWorkers = 1
-tape('two calls per worker', function (t) {
-  t.plan(2)
-
-  let child = workerFarm({
-          maxConcurrentWorkers: 1
-        , maxConcurrentCallsPerWorker: Infinity
-        , maxCallsPerWorker: 2
-        , autoStart: true
-      }, childPath)
-    , pids  = []
-    , count = 20
-    , i     = count
-
-  while (i--) {
-    child(0, function (err, pid) {
-      pids.push(pid)
-      if (pids.length == count) {
-        t.equal(count / 2, uniq(pids).length, 'one process for each call (by pid)')
-        workerFarm.end(child, function () {
-          t.ok(true, 'workerFarm ended')
-        })
-      } else if (pids.length > count)
-        t.fail('too many callbacks!')
-    })
-  }
-})
-
-
-// use timing to confirm that one worker will process calls sequentially
-tape('many concurrent calls', function (t) {
-  t.plan(2)
-
-  let child = workerFarm({
-          maxConcurrentWorkers: 1
-        , maxConcurrentCallsPerWorker: Infinity
-        , maxCallsPerWorker: Infinity
-        , autoStart: true
-      }, childPath)
-    , defer = 200
-    , count = 200
-    , i     = count
-    , cbc   = 0
-
-  setTimeout(function () {
-    let start = Date.now()
-
-    while (i--) {
-      child(defer, function () {
-        if (++cbc == count) {
-          let time = Date.now() - start
-          // upper-limit not tied to `count` at all
-          t.ok(time > defer && time < (defer * 2.5), 'processed tasks concurrently (' + time + 'ms)')
-          workerFarm.end(child, function () {
-            t.ok(true, 'workerFarm ended')
-          })
-        } else if (cbc > count)
-          t.fail('too many callbacks!')
-      })
-    }
-  }, 250)
-})
-
-
-// use timing to confirm that one child processes calls sequentially with
-// maxConcurrentCallsPerWorker = 1
-tape('single concurrent call', function (t) {
-  t.plan(2)
-
-  let child = workerFarm({
-          maxConcurrentWorkers: 1
-        , maxConcurrentCallsPerWorker: 1
-        , maxCallsPerWorker: Infinity
-        , autoStart: true
-      }, childPath)
-    , defer = 20
-    , count = 100
-    , i     = count
-    , cbc   = 0
-
-  setTimeout(function () {
-    let start = Date.now()
-
-    while (i--) {
-      child(defer, function () {
-        if (++cbc == count) {
-          let time = Date.now() - start
-          // upper-limit tied closely to `count`, 1.3 is generous but accounts for all the timers
-          // coming back at the same time and the IPC overhead
-          t.ok(time > (defer * count) && time < (defer * count * 1.3), 'processed tasks sequentially (' + time + ')')
-          workerFarm.end(child, function () {
-            t.ok(true, 'workerFarm ended')
-          })
-        } else if (cbc > count)
-          t.fail('too many callbacks!')
-      })
-    }
-  }, 250)
-})
-
-
-// use timing to confirm that one child processes *only* 5 calls concurrently
-tape('multiple concurrent calls', function (t) {
-  t.plan(2)
-
-  let callsPerWorker = 5
-    , child = workerFarm({
-          maxConcurrentWorkers: 1
-        , maxConcurrentCallsPerWorker: callsPerWorker
-        , maxCallsPerWorker: Infinity
-        , autoStart: true
-      }, childPath)
-    , defer = 100
-    , count = 100
-    , i     = count
-    , cbc   = 0
-
-  setTimeout(function () {
-    let start = Date.now()
-
-    while (i--) {
-      child(defer, function () {
-        if (++cbc == count) {
-          let time = Date.now() - start
-          let min = defer * 1.5
-          // (defer * (count / callsPerWorker + 2)) - if precise it'd be count/callsPerWorker
-          // but accounting for IPC and other overhead, we need to give it a bit of extra time,
-          // hence the +2
-          let max = defer * (count / callsPerWorker + 2)
-          t.ok(time > min && time < max, 'processed tasks concurrently (' + time + ' > ' + min + ' && ' + time + ' < ' + max + ')')
-          workerFarm.end(child, function () {
-            t.ok(true, 'workerFarm ended')
-          })
-        } else if (cbc > count)
-          t.fail('too many callbacks!')
-      })
-    }
-  }, 250)
-})
-
-
-// call a method that will die with a probability of 0.5 but expect that
-// we'll get results for each of our calls anyway
-tape('durability', function (t) {
-  t.plan(3)
-
-  let child = workerFarm({ maxConcurrentWorkers: 2 }, childPath, [ 'killable' ])
-    , ids   = []
-    , pids  = []
-    , count = 20
-    , i     = count
-
-  while (i--) {
-    child.killable(i, function (err, id, pid) {
-      ids.push(id)
-      pids.push(pid)
-      if (ids.length == count) {
-        t.ok(uniq(pids).length > 2, 'processed by many (' + uniq(pids).length + ') workers, but got there in the end!')
-        t.ok(uniq(ids).length == count, 'received a single result for each unique call')
-        workerFarm.end(child, function () {
-          t.ok(true, 'workerFarm ended')
-        })
-      } else if (ids.length > count)
-        t.fail('too many callbacks!')
-    })
-  }
-})
-
-
-// a callback provided to .end() can and will be called (uses "simple, exports=function test" to create a child)
-tape('simple, end callback', function (t) {
-  t.plan(4)
-
-  let child = workerFarm(childPath)
-  child(0, function (err, pid, rnd) {
-    t.ok(pid > process.pid, 'pid makes sense ' + pid + ' vs ' + process.pid)
-    t.ok(pid < process.pid + 750, 'pid makes sense ' + pid + ' vs ' + process.pid)
-    t.ok(rnd >= 0 && rnd < 1, 'rnd result makes sense')
-  })
-
-  workerFarm.end(child, function() {
-    t.pass('an .end() callback was successfully called')
-  })
-})
-
-
-tape('call timeout test', function (t) {
-  t.plan(3 + 3 + 4 + 4 + 4 + 3 + 1)
-
-  let child = workerFarm({ maxCallTime: 250, maxConcurrentWorkers: 1 }, childPath)
-
-  // should come back ok
-  child(50, function (err, pid, rnd) {
-    t.ok(pid > process.pid, 'pid makes sense ' + pid + ' vs ' + process.pid)
-    t.ok(pid < process.pid + 750, 'pid makes sense ' + pid + ' vs ' + process.pid)
-    t.ok(rnd > 0 && rnd < 1, 'rnd result makes sense ' + rnd)
-  })
-
-  // should come back ok
-  child(50, function (err, pid, rnd) {
-    t.ok(pid > process.pid, 'pid makes sense ' + pid + ' vs ' + process.pid)
-    t.ok(pid < process.pid + 750, 'pid makes sense ' + pid + ' vs ' + process.pid)
-    t.ok(rnd > 0 && rnd < 1, 'rnd result makes sense ' + rnd)
-  })
-
-  // should die
-  child(500, function (err, pid, rnd) {
-    t.ok(err, 'got an error')
-    t.equal(err.type, 'TimeoutError', 'correct error type')
-    t.ok(pid === undefined, 'no pid')
-    t.ok(rnd === undefined, 'no rnd')
-  })
-
-  // should die
-  child(1000, function (err, pid, rnd) {
-    t.ok(err, 'got an error')
-    t.equal(err.type, 'TimeoutError', 'correct error type')
-    t.ok(pid === undefined, 'no pid')
-    t.ok(rnd === undefined, 'no rnd')
-  })
-
-  // should die even though it is only a 100ms task, it'll get caught up
-  // in a dying worker
-  setTimeout(function () {
-    child(100, function (err, pid, rnd) {
-      t.ok(err, 'got an error')
-      t.equal(err.type, 'TimeoutError', 'correct error type')
-      t.ok(pid === undefined, 'no pid')
-      t.ok(rnd === undefined, 'no rnd')
-    })
-  }, 200)
-
-  // should be ok, new worker
-  setTimeout(function () {
-    child(50, function (err, pid, rnd) {
-      t.ok(pid > process.pid, 'pid makes sense ' + pid + ' vs ' + process.pid)
-      t.ok(pid < process.pid + 750, 'pid makes sense ' + pid + ' vs ' + process.pid)
-      t.ok(rnd > 0 && rnd < 1, 'rnd result makes sense ' + rnd)
-    })
-    workerFarm.end(child, function () {
-      t.ok(true, 'workerFarm ended')
-    })
-  }, 400)
-})
-
-
-tape('test error passing', function (t) {
-  t.plan(10)
-
-  let child = workerFarm(childPath, [ 'err' ])
-  child.err('Error', 'this is an Error', function (err) {
-    t.ok(err instanceof Error, 'is an Error object')
-    t.equal('Error', err.type, 'correct type')
-    t.equal('this is an Error', err.message, 'correct message')
-  })
-  child.err('TypeError', 'this is a TypeError', function (err) {
-    t.ok(err instanceof Error, 'is a TypeError object')
-    t.equal('TypeError', err.type, 'correct type')
-    t.equal('this is a TypeError', err.message, 'correct message')
-  })
-  child.err('Error', 'this is an Error with custom props', {foo: 'bar', 'baz': 1}, function (err) {
-    t.ok(err instanceof Error, 'is an Error object')
-    t.equal(err.foo, 'bar', 'passes data')
-    t.equal(err.baz, 1, 'passes data')
-  })
-
-  workerFarm.end(child, function () {
-    t.ok(true, 'workerFarm ended')
-  })
-})
-
-
-tape('test maxConcurrentCalls', function (t) {
-  t.plan(10)
-
-  let child = workerFarm({ maxConcurrentCalls: 5 }, childPath)
-
-  child(50, function (err) { t.notOk(err, 'no error') })
-  child(50, function (err) { t.notOk(err, 'no error') })
-  child(50, function (err) { t.notOk(err, 'no error') })
-  child(50, function (err) { t.notOk(err, 'no error') })
-  child(50, function (err) { t.notOk(err, 'no error') })
-  child(50, function (err) {
-    t.ok(err)
-    t.equal(err.type, 'MaxConcurrentCallsError', 'correct error type')
-  })
-  child(50, function (err) {
-    t.ok(err)
-    t.equal(err.type, 'MaxConcurrentCallsError', 'correct error type')
-  })
-
-  workerFarm.end(child, function () {
-    t.ok(true, 'workerFarm ended')
-  })
-})
-
-
-tape('test maxConcurrentCalls + queue', function (t) {
-  t.plan(13)
-
-  let child = workerFarm({ maxConcurrentCalls: 4, maxConcurrentWorkers: 2, maxConcurrentCallsPerWorker: 1 }, childPath)
-
-  child(20, function (err) { console.log('ended short1'); t.notOk(err, 'no error, short call 1') })
-  child(20, function (err) { console.log('ended short2'); t.notOk(err, 'no error, short call 2') })
-  child(300, function (err) { t.notOk(err, 'no error, long call 1') })
-  child(300, function (err) { t.notOk(err, 'no error, long call 2') })
-  child(20, function (err) {
-    t.ok(err, 'short call 3 should error')
-    t.equal(err.type, 'MaxConcurrentCallsError', 'correct error type')
-  })
-  child(20, function (err) {
-    t.ok(err, 'short call 4 should error')
-    t.equal(err.type, 'MaxConcurrentCallsError', 'correct error type')
-  })
-
-  // cross fingers and hope the two short jobs have ended
-  setTimeout(function () {
-    child(20, function (err) { t.notOk(err, 'no error, delayed short call 1') })
-    child(20, function (err) { t.notOk(err, 'no error, delayed short call 2') })
-    child(20, function (err) {
-      t.ok(err, 'delayed short call 3 should error')
-      t.equal(err.type, 'MaxConcurrentCallsError', 'correct error type')
-    })
-
-    workerFarm.end(child, function () {
-      t.ok(true, 'workerFarm ended')
-    })
-  }, 250)
-})
-
-
-// this test should not keep the process running! if the test process
-// doesn't die then the problem is here
-tape('test timeout kill', function (t) {
-  t.plan(3)
-
-  let child = workerFarm({ maxCallTime: 250, maxConcurrentWorkers: 1 }, childPath, [ 'block' ])
-  child.block(function (err) {
-    t.ok(err, 'got an error')
-    t.equal(err.type, 'TimeoutError', 'correct error type')
-  })
-
-  workerFarm.end(child, function () {
-    t.ok(true, 'workerFarm ended')
-  })
-})
-
-
-tape('test max retries after process terminate', function (t) {
-  t.plan(7)
-
-  // temporary file is used to store the number of retries among terminating workers
-  let filepath1 = '.retries1'
-  let child1 = workerFarm({ maxConcurrentWorkers: 1, maxRetries: 5}, childPath, [ 'stubborn' ])
-  child1.stubborn(filepath1, function (err, result) {
-    t.notOk(err, 'no error')
-    t.equal(result, 12, 'correct result')
-  })
-
-  workerFarm.end(child1, function () {
-    fs.unlinkSync(filepath1)
-    t.ok(true, 'workerFarm ended')
-  })
-
-  let filepath2 = '.retries2'
-  let child2 = workerFarm({ maxConcurrentWorkers: 1, maxRetries: 3}, childPath, [ 'stubborn' ])
-  child2.stubborn(filepath2, function (err, result) {
-    t.ok(err, 'got an error')
-    t.equal(err.type, 'ProcessTerminatedError', 'correct error type')
-    t.equal(err.message, 'cancel after 3 retries!', 'correct message and number of retries')
-  })
-
-  workerFarm.end(child2, function () {
-    fs.unlinkSync(filepath2)
-    t.ok(true, 'workerFarm ended')
-  })
-})
-
-
-tape('custom arguments can be passed to "fork"', function (t) {
-  t.plan(3)
-
-  // allocate a real, valid path, in any OS
-  let cwd = fs.realpathSync(os.tmpdir())
-    , workerOptions = {
-        cwd      : cwd
-      , execArgv : ['--expose-gc']
-    }
-    , child = workerFarm({ maxConcurrentWorkers: 1, maxRetries: 5, workerOptions: workerOptions}, childPath, ['args'])
-
-  child.args(function (err, result) {
-    t.equal(result.execArgv[0], '--expose-gc', 'flags passed (overridden default)')
-    t.equal(result.cwd, cwd, 'correct cwd folder')
-  })
-
-  workerFarm.end(child, function () {
-    t.ok(true, 'workerFarm ended')
-  })
-})
-
-
-tape('ensure --debug/--inspect not propagated to children', function (t) {
-  t.plan(3)
-
-  let script   = __dirname + '/debug.js'
-    , debugArg = process.version.replace(/^v(\d+)\..*$/, '$1') >= 8 ? '--inspect' : '--debug=8881'
-    , child    = child_process.spawn(process.execPath, [ debugArg, script ])
-    , stdout   = ''
-
-  child.stdout.on('data', function (data) {
-    stdout += data.toString()
-  })
-
-  child.on('close', function (code) {
-    t.equal(code, 0, 'exited without error (' + code + ')')
-    t.ok(stdout.indexOf('FINISHED') > -1, 'process finished')
-    t.ok(stdout.indexOf('--debug') === -1, 'child does not receive debug flag')
-  })
-})

+ 0 - 168
admin/node_modules/wrap-ansi/index.js

@@ -1,168 +0,0 @@
-'use strict';
-var stringWidth = require('string-width');
-var stripAnsi = require('strip-ansi');
-
-var ESCAPES = [
-	'\u001b',
-	'\u009b'
-];
-
-var END_CODE = 39;
-
-var ESCAPE_CODES = {
-	0: 0,
-	1: 22,
-	2: 22,
-	3: 23,
-	4: 24,
-	7: 27,
-	8: 28,
-	9: 29,
-	30: 39,
-	31: 39,
-	32: 39,
-	33: 39,
-	34: 39,
-	35: 39,
-	36: 39,
-	37: 39,
-	90: 39,
-	40: 49,
-	41: 49,
-	42: 49,
-	43: 49,
-	44: 49,
-	45: 49,
-	46: 49,
-	47: 49
-};
-
-function wrapAnsi(code) {
-	return ESCAPES[0] + '[' + code + 'm';
-}
-
-// calculate the length of words split on ' ', ignoring
-// the extra characters added by ansi escape codes.
-function wordLengths(str) {
-	return str.split(' ').map(function (s) {
-		return stringWidth(s);
-	});
-}
-
-// wrap a long word across multiple rows.
-// ansi escape codes do not count towards length.
-function wrapWord(rows, word, cols) {
-	var insideEscape = false;
-	var visible = stripAnsi(rows[rows.length - 1]).length;
-
-	for (var i = 0; i < word.length; i++) {
-		var x = word[i];
-
-		rows[rows.length - 1] += x;
-
-		if (ESCAPES.indexOf(x) !== -1) {
-			insideEscape = true;
-		} else if (insideEscape && x === 'm') {
-			insideEscape = false;
-			continue;
-		}
-
-		if (insideEscape) {
-			continue;
-		}
-
-		visible++;
-
-		if (visible >= cols && i < word.length - 1) {
-			rows.push('');
-			visible = 0;
-		}
-	}
-
-	// it's possible that the last row we copy over is only
-	// ansi escape characters, handle this edge-case.
-	if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {
-		rows[rows.length - 2] += rows.pop();
-	}
-}
-
-// the wrap-ansi module can be invoked
-// in either 'hard' or 'soft' wrap mode.
-//
-// 'hard' will never allow a string to take up more
-// than cols characters.
-//
-// 'soft' allows long words to expand past the column length.
-function exec(str, cols, opts) {
-	var options = opts || {};
-
-	var pre = '';
-	var ret = '';
-	var escapeCode;
-
-	var lengths = wordLengths(str);
-	var words = str.split(' ');
-	var rows = [''];
-
-	for (var i = 0, word; (word = words[i]) !== undefined; i++) {
-		var rowLength = stringWidth(rows[rows.length - 1]);
-
-		if (rowLength) {
-			rows[rows.length - 1] += ' ';
-			rowLength++;
-		}
-
-		// in 'hard' wrap mode, the length of a line is
-		// never allowed to extend past 'cols'.
-		if (lengths[i] > cols && options.hard) {
-			if (rowLength) {
-				rows.push('');
-			}
-			wrapWord(rows, word, cols);
-			continue;
-		}
-
-		if (rowLength + lengths[i] > cols && rowLength > 0) {
-			if (options.wordWrap === false && rowLength < cols) {
-				wrapWord(rows, word, cols);
-				continue;
-			}
-
-			rows.push('');
-		}
-
-		rows[rows.length - 1] += word;
-	}
-
-	pre = rows.map(function (r) {
-		return r.trim();
-	}).join('\n');
-
-	for (var j = 0; j < pre.length; j++) {
-		var y = pre[j];
-
-		ret += y;
-
-		if (ESCAPES.indexOf(y) !== -1) {
-			var code = parseFloat(/[0-9][^m]*/.exec(pre.slice(j, j + 4)));
-			escapeCode = code === END_CODE ? null : code;
-		}
-
-		if (escapeCode && ESCAPE_CODES[escapeCode]) {
-			if (pre[j + 1] === '\n') {
-				ret += wrapAnsi(ESCAPE_CODES[escapeCode]);
-			} else if (y === '\n') {
-				ret += wrapAnsi(escapeCode);
-			}
-		}
-	}
-
-	return ret;
-}
-
-// for each line break, invoke the method separately.
-module.exports = function (str, cols, opts) {
-	return String(str).split('\n').map(function (substr) {
-		return exec(substr, cols, opts);
-	}).join('\n');
-};

+ 0 - 21
admin/node_modules/wrap-ansi/license

@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.

+ 0 - 4
admin/node_modules/wrap-ansi/node_modules/ansi-regex/index.js

@@ -1,4 +0,0 @@
-'use strict';
-module.exports = function () {
-	return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;
-};

+ 0 - 21
admin/node_modules/wrap-ansi/node_modules/ansi-regex/license

@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.

+ 0 - 112
admin/node_modules/wrap-ansi/node_modules/ansi-regex/package.json

@@ -1,112 +0,0 @@
-{
-  "_args": [
-    [
-      "ansi-regex@2.1.1",
-      "D:\\zhaogongxue\\crm\\template\\admin"
-    ]
-  ],
-  "_development": true,
-  "_from": "ansi-regex@2.1.1",
-  "_id": "ansi-regex@2.1.1",
-  "_inBundle": false,
-  "_integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-  "_location": "/wrap-ansi/ansi-regex",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "ansi-regex@2.1.1",
-    "name": "ansi-regex",
-    "escapedName": "ansi-regex",
-    "rawSpec": "2.1.1",
-    "saveSpec": null,
-    "fetchSpec": "2.1.1"
-  },
-  "_requiredBy": [
-    "/wrap-ansi/strip-ansi"
-  ],
-  "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-  "_spec": "2.1.1",
-  "_where": "D:\\zhaogongxue\\crm\\template\\admin",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/chalk/ansi-regex/issues"
-  },
-  "description": "Regular expression for matching ANSI escape codes",
-  "devDependencies": {
-    "ava": "0.17.0",
-    "xo": "0.16.0"
-  },
-  "engines": {
-    "node": ">=0.10.0"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/chalk/ansi-regex#readme",
-  "keywords": [
-    "ansi",
-    "styles",
-    "color",
-    "colour",
-    "colors",
-    "terminal",
-    "console",
-    "cli",
-    "string",
-    "tty",
-    "escape",
-    "formatting",
-    "rgb",
-    "256",
-    "shell",
-    "xterm",
-    "command-line",
-    "text",
-    "regex",
-    "regexp",
-    "re",
-    "match",
-    "test",
-    "find",
-    "pattern"
-  ],
-  "license": "MIT",
-  "maintainers": [
-    {
-      "name": "Sindre Sorhus",
-      "email": "sindresorhus@gmail.com",
-      "url": "sindresorhus.com"
-    },
-    {
-      "name": "Joshua Appelman",
-      "email": "jappelman@xebia.com",
-      "url": "jbnicolai.com"
-    },
-    {
-      "name": "JD Ballard",
-      "email": "i.am.qix@gmail.com",
-      "url": "github.com/qix-"
-    }
-  ],
-  "name": "ansi-regex",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/chalk/ansi-regex.git"
-  },
-  "scripts": {
-    "test": "xo && ava --verbose",
-    "view-supported": "node fixtures/view-codes.js"
-  },
-  "version": "2.1.1",
-  "xo": {
-    "rules": {
-      "guard-for-in": 0,
-      "no-loop-func": 0
-    }
-  }
-}

+ 0 - 39
admin/node_modules/wrap-ansi/node_modules/ansi-regex/readme.md

@@ -1,39 +0,0 @@
-# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex)
-
-> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
-
-
-## Install
-
-```
-$ npm install --save ansi-regex
-```
-
-
-## Usage
-
-```js
-const ansiRegex = require('ansi-regex');
-
-ansiRegex().test('\u001b[4mcake\u001b[0m');
-//=> true
-
-ansiRegex().test('cake');
-//=> false
-
-'\u001b[4mcake\u001b[0m'.match(ansiRegex());
-//=> ['\u001b[4m', '\u001b[0m']
-```
-
-## FAQ
-
-### Why do you test for codes not in the ECMA 48 standard?
-
-Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. If I recall correctly, we test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
-
-On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out.
-
-
-## License
-
-MIT © [Sindre Sorhus](http://sindresorhus.com)

+ 0 - 46
admin/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/index.js

@@ -1,46 +0,0 @@
-'use strict';
-var numberIsNan = require('number-is-nan');
-
-module.exports = function (x) {
-	if (numberIsNan(x)) {
-		return false;
-	}
-
-	// https://github.com/nodejs/io.js/blob/cff7300a578be1b10001f2d967aaedc88aee6402/lib/readline.js#L1369
-
-	// code points are derived from:
-	// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt
-	if (x >= 0x1100 && (
-		x <= 0x115f ||  // Hangul Jamo
-		0x2329 === x || // LEFT-POINTING ANGLE BRACKET
-		0x232a === x || // RIGHT-POINTING ANGLE BRACKET
-		// CJK Radicals Supplement .. Enclosed CJK Letters and Months
-		(0x2e80 <= x && x <= 0x3247 && x !== 0x303f) ||
-		// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A
-		0x3250 <= x && x <= 0x4dbf ||
-		// CJK Unified Ideographs .. Yi Radicals
-		0x4e00 <= x && x <= 0xa4c6 ||
-		// Hangul Jamo Extended-A
-		0xa960 <= x && x <= 0xa97c ||
-		// Hangul Syllables
-		0xac00 <= x && x <= 0xd7a3 ||
-		// CJK Compatibility Ideographs
-		0xf900 <= x && x <= 0xfaff ||
-		// Vertical Forms
-		0xfe10 <= x && x <= 0xfe19 ||
-		// CJK Compatibility Forms .. Small Form Variants
-		0xfe30 <= x && x <= 0xfe6b ||
-		// Halfwidth and Fullwidth Forms
-		0xff01 <= x && x <= 0xff60 ||
-		0xffe0 <= x && x <= 0xffe6 ||
-		// Kana Supplement
-		0x1b000 <= x && x <= 0x1b001 ||
-		// Enclosed Ideographic Supplement
-		0x1f200 <= x && x <= 0x1f251 ||
-		// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane
-		0x20000 <= x && x <= 0x3fffd)) {
-		return true;
-	}
-
-	return false;
-}

+ 0 - 21
admin/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/license

@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.

+ 0 - 81
admin/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/package.json

@@ -1,81 +0,0 @@
-{
-  "_args": [
-    [
-      "is-fullwidth-code-point@1.0.0",
-      "D:\\zhaogongxue\\crm\\template\\admin"
-    ]
-  ],
-  "_development": true,
-  "_from": "is-fullwidth-code-point@1.0.0",
-  "_id": "is-fullwidth-code-point@1.0.0",
-  "_inBundle": false,
-  "_integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-  "_location": "/wrap-ansi/is-fullwidth-code-point",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "is-fullwidth-code-point@1.0.0",
-    "name": "is-fullwidth-code-point",
-    "escapedName": "is-fullwidth-code-point",
-    "rawSpec": "1.0.0",
-    "saveSpec": null,
-    "fetchSpec": "1.0.0"
-  },
-  "_requiredBy": [
-    "/wrap-ansi/string-width"
-  ],
-  "_resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
-  "_spec": "1.0.0",
-  "_where": "D:\\zhaogongxue\\crm\\template\\admin",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/sindresorhus/is-fullwidth-code-point/issues"
-  },
-  "dependencies": {
-    "number-is-nan": "^1.0.0"
-  },
-  "description": "Check if the character represented by a given Unicode code point is fullwidth",
-  "devDependencies": {
-    "ava": "0.0.4",
-    "code-point-at": "^1.0.0"
-  },
-  "engines": {
-    "node": ">=0.10.0"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/sindresorhus/is-fullwidth-code-point#readme",
-  "keywords": [
-    "fullwidth",
-    "full-width",
-    "full",
-    "width",
-    "unicode",
-    "character",
-    "char",
-    "string",
-    "str",
-    "codepoint",
-    "code",
-    "point",
-    "is",
-    "detect",
-    "check"
-  ],
-  "license": "MIT",
-  "name": "is-fullwidth-code-point",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/sindresorhus/is-fullwidth-code-point.git"
-  },
-  "scripts": {
-    "test": "node test.js"
-  },
-  "version": "1.0.0"
-}

+ 0 - 39
admin/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/readme.md

@@ -1,39 +0,0 @@
-# is-fullwidth-code-point [![Build Status](https://travis-ci.org/sindresorhus/is-fullwidth-code-point.svg?branch=master)](https://travis-ci.org/sindresorhus/is-fullwidth-code-point)
-
-> Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms)
-
-
-## Install
-
-```
-$ npm install --save is-fullwidth-code-point
-```
-
-
-## Usage
-
-```js
-var isFullwidthCodePoint = require('is-fullwidth-code-point');
-
-isFullwidthCodePoint('谢'.codePointAt());
-//=> true
-
-isFullwidthCodePoint('a'.codePointAt());
-//=> false
-```
-
-
-## API
-
-### isFullwidthCodePoint(input)
-
-#### input
-
-Type: `number`
-
-[Code point](https://en.wikipedia.org/wiki/Code_point) of a character.
-
-
-## License
-
-MIT © [Sindre Sorhus](http://sindresorhus.com)

+ 0 - 37
admin/node_modules/wrap-ansi/node_modules/string-width/index.js

@@ -1,37 +0,0 @@
-'use strict';
-var stripAnsi = require('strip-ansi');
-var codePointAt = require('code-point-at');
-var isFullwidthCodePoint = require('is-fullwidth-code-point');
-
-// https://github.com/nodejs/io.js/blob/cff7300a578be1b10001f2d967aaedc88aee6402/lib/readline.js#L1345
-module.exports = function (str) {
-	if (typeof str !== 'string' || str.length === 0) {
-		return 0;
-	}
-
-	var width = 0;
-
-	str = stripAnsi(str);
-
-	for (var i = 0; i < str.length; i++) {
-		var code = codePointAt(str, i);
-
-		// ignore control characters
-		if (code <= 0x1f || (code >= 0x7f && code <= 0x9f)) {
-			continue;
-		}
-
-		// surrogates
-		if (code >= 0x10000) {
-			i++;
-		}
-
-		if (isFullwidthCodePoint(code)) {
-			width += 2;
-		} else {
-			width++;
-		}
-	}
-
-	return width;
-};

+ 0 - 21
admin/node_modules/wrap-ansi/node_modules/string-width/license

@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.

+ 0 - 92
admin/node_modules/wrap-ansi/node_modules/string-width/package.json

@@ -1,92 +0,0 @@
-{
-  "_args": [
-    [
-      "string-width@1.0.2",
-      "D:\\zhaogongxue\\crm\\template\\admin"
-    ]
-  ],
-  "_development": true,
-  "_from": "string-width@1.0.2",
-  "_id": "string-width@1.0.2",
-  "_inBundle": false,
-  "_integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-  "_location": "/wrap-ansi/string-width",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "string-width@1.0.2",
-    "name": "string-width",
-    "escapedName": "string-width",
-    "rawSpec": "1.0.2",
-    "saveSpec": null,
-    "fetchSpec": "1.0.2"
-  },
-  "_requiredBy": [
-    "/wrap-ansi"
-  ],
-  "_resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
-  "_spec": "1.0.2",
-  "_where": "D:\\zhaogongxue\\crm\\template\\admin",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/sindresorhus/string-width/issues"
-  },
-  "dependencies": {
-    "code-point-at": "^1.0.0",
-    "is-fullwidth-code-point": "^1.0.0",
-    "strip-ansi": "^3.0.0"
-  },
-  "description": "Get the visual width of a string - the number of columns required to display it",
-  "devDependencies": {
-    "ava": "*",
-    "xo": "*"
-  },
-  "engines": {
-    "node": ">=0.10.0"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/sindresorhus/string-width#readme",
-  "keywords": [
-    "string",
-    "str",
-    "character",
-    "char",
-    "unicode",
-    "width",
-    "visual",
-    "column",
-    "columns",
-    "fullwidth",
-    "full-width",
-    "full",
-    "ansi",
-    "escape",
-    "codes",
-    "cli",
-    "command-line",
-    "terminal",
-    "console",
-    "cjk",
-    "chinese",
-    "japanese",
-    "korean",
-    "fixed-width"
-  ],
-  "license": "MIT",
-  "name": "string-width",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/sindresorhus/string-width.git"
-  },
-  "scripts": {
-    "test": "xo && ava"
-  },
-  "version": "1.0.2"
-}

+ 0 - 42
admin/node_modules/wrap-ansi/node_modules/string-width/readme.md

@@ -1,42 +0,0 @@
-# string-width [![Build Status](https://travis-ci.org/sindresorhus/string-width.svg?branch=master)](https://travis-ci.org/sindresorhus/string-width)
-
-> Get the visual width of a string - the number of columns required to display it
-
-Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width.
-
-Useful to be able to measure the actual width of command-line output.
-
-
-## Install
-
-```
-$ npm install --save string-width
-```
-
-
-## Usage
-
-```js
-const stringWidth = require('string-width');
-
-stringWidth('古');
-//=> 2
-
-stringWidth('\u001b[1m古\u001b[22m');
-//=> 2
-
-stringWidth('a');
-//=> 1
-```
-
-
-## Related
-
-- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module
-- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string
-- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)

+ 0 - 6
admin/node_modules/wrap-ansi/node_modules/strip-ansi/index.js

@@ -1,6 +0,0 @@
-'use strict';
-var ansiRegex = require('ansi-regex')();
-
-module.exports = function (str) {
-	return typeof str === 'string' ? str.replace(ansiRegex, '') : str;
-};

+ 0 - 21
admin/node_modules/wrap-ansi/node_modules/strip-ansi/license

@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.

+ 0 - 106
admin/node_modules/wrap-ansi/node_modules/strip-ansi/package.json

@@ -1,106 +0,0 @@
-{
-  "_args": [
-    [
-      "strip-ansi@3.0.1",
-      "D:\\zhaogongxue\\crm\\template\\admin"
-    ]
-  ],
-  "_development": true,
-  "_from": "strip-ansi@3.0.1",
-  "_id": "strip-ansi@3.0.1",
-  "_inBundle": false,
-  "_integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-  "_location": "/wrap-ansi/strip-ansi",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "strip-ansi@3.0.1",
-    "name": "strip-ansi",
-    "escapedName": "strip-ansi",
-    "rawSpec": "3.0.1",
-    "saveSpec": null,
-    "fetchSpec": "3.0.1"
-  },
-  "_requiredBy": [
-    "/wrap-ansi",
-    "/wrap-ansi/string-width"
-  ],
-  "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-  "_spec": "3.0.1",
-  "_where": "D:\\zhaogongxue\\crm\\template\\admin",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/chalk/strip-ansi/issues"
-  },
-  "dependencies": {
-    "ansi-regex": "^2.0.0"
-  },
-  "description": "Strip ANSI escape codes",
-  "devDependencies": {
-    "ava": "*",
-    "xo": "*"
-  },
-  "engines": {
-    "node": ">=0.10.0"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/chalk/strip-ansi#readme",
-  "keywords": [
-    "strip",
-    "trim",
-    "remove",
-    "ansi",
-    "styles",
-    "color",
-    "colour",
-    "colors",
-    "terminal",
-    "console",
-    "string",
-    "tty",
-    "escape",
-    "formatting",
-    "rgb",
-    "256",
-    "shell",
-    "xterm",
-    "log",
-    "logging",
-    "command-line",
-    "text"
-  ],
-  "license": "MIT",
-  "maintainers": [
-    {
-      "name": "Sindre Sorhus",
-      "email": "sindresorhus@gmail.com",
-      "url": "sindresorhus.com"
-    },
-    {
-      "name": "Joshua Boy Nicolai Appelman",
-      "email": "joshua@jbna.nl",
-      "url": "jbna.nl"
-    },
-    {
-      "name": "JD Ballard",
-      "email": "i.am.qix@gmail.com",
-      "url": "github.com/qix-"
-    }
-  ],
-  "name": "strip-ansi",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/chalk/strip-ansi.git"
-  },
-  "scripts": {
-    "test": "xo && ava"
-  },
-  "version": "3.0.1"
-}

+ 0 - 33
admin/node_modules/wrap-ansi/node_modules/strip-ansi/readme.md

@@ -1,33 +0,0 @@
-# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi)
-
-> Strip [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
-
-
-## Install
-
-```
-$ npm install --save strip-ansi
-```
-
-
-## Usage
-
-```js
-var stripAnsi = require('strip-ansi');
-
-stripAnsi('\u001b[4mcake\u001b[0m');
-//=> 'cake'
-```
-
-
-## Related
-
-- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module
-- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes
-- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes
-- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right
-
-
-## License
-
-MIT © [Sindre Sorhus](http://sindresorhus.com)

+ 0 - 123
admin/node_modules/wrap-ansi/package.json

@@ -1,123 +0,0 @@
-{
-  "_args": [
-    [
-      "wrap-ansi@2.1.0",
-      "D:\\zhaogongxue\\crm\\template\\admin"
-    ]
-  ],
-  "_development": true,
-  "_from": "wrap-ansi@2.1.0",
-  "_id": "wrap-ansi@2.1.0",
-  "_inBundle": false,
-  "_integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
-  "_location": "/wrap-ansi",
-  "_phantomChildren": {
-    "code-point-at": "1.1.0",
-    "number-is-nan": "1.0.1"
-  },
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "wrap-ansi@2.1.0",
-    "name": "wrap-ansi",
-    "escapedName": "wrap-ansi",
-    "rawSpec": "2.1.0",
-    "saveSpec": null,
-    "fetchSpec": "2.1.0"
-  },
-  "_requiredBy": [
-    "/cliui"
-  ],
-  "_resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
-  "_spec": "2.1.0",
-  "_where": "D:\\zhaogongxue\\crm\\template\\admin",
-  "author": {
-    "name": "Sindre Sorhus",
-    "email": "sindresorhus@gmail.com",
-    "url": "sindresorhus.com"
-  },
-  "bugs": {
-    "url": "https://github.com/chalk/wrap-ansi/issues"
-  },
-  "dependencies": {
-    "string-width": "^1.0.1",
-    "strip-ansi": "^3.0.1"
-  },
-  "description": "Wordwrap a string with ANSI escape codes",
-  "devDependencies": {
-    "ava": "^0.16.0",
-    "chalk": "^1.1.0",
-    "coveralls": "^2.11.4",
-    "has-ansi": "^2.0.0",
-    "nyc": "^6.2.1",
-    "strip-ansi": "^3.0.0",
-    "xo": "*"
-  },
-  "engines": {
-    "node": ">=0.10.0"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/chalk/wrap-ansi#readme",
-  "keywords": [
-    "wrap",
-    "break",
-    "wordwrap",
-    "wordbreak",
-    "linewrap",
-    "ansi",
-    "styles",
-    "color",
-    "colour",
-    "colors",
-    "terminal",
-    "console",
-    "cli",
-    "string",
-    "tty",
-    "escape",
-    "formatting",
-    "rgb",
-    "256",
-    "shell",
-    "xterm",
-    "log",
-    "logging",
-    "command-line",
-    "text"
-  ],
-  "license": "MIT",
-  "maintainers": [
-    {
-      "name": "Sindre Sorhus",
-      "email": "sindresorhus@gmail.com",
-      "url": "sindresorhus.com"
-    },
-    {
-      "name": "Joshua Appelman",
-      "email": "jappelman@xebia.com",
-      "url": "jbnicolai.com"
-    },
-    {
-      "name": "JD Ballard",
-      "email": "i.am.qix@gmail.com",
-      "url": "github.com/qix-"
-    },
-    {
-      "name": "Benjamin Coe",
-      "email": "ben@npmjs.com",
-      "url": "github.com/bcoe"
-    }
-  ],
-  "name": "wrap-ansi",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/chalk/wrap-ansi.git"
-  },
-  "scripts": {
-    "coveralls": "nyc report --reporter=text-lcov | coveralls",
-    "test": "xo && nyc ava"
-  },
-  "version": "2.1.0"
-}

+ 0 - 73
admin/node_modules/wrap-ansi/readme.md

@@ -1,73 +0,0 @@
-# wrap-ansi [![Build Status](https://travis-ci.org/chalk/wrap-ansi.svg?branch=master)](https://travis-ci.org/chalk/wrap-ansi) [![Coverage Status](https://coveralls.io/repos/github/chalk/wrap-ansi/badge.svg?branch=master)](https://coveralls.io/github/chalk/wrap-ansi?branch=master)
-
-> Wordwrap a string with [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles)
-
-
-## Install
-
-```
-$ npm install --save wrap-ansi
-```
-
-
-## Usage
-
-```js
-const chalk = require('chalk');
-const wrapAnsi = require('wrap-ansi');
-
-const input = 'The quick brown ' + chalk.red('fox jumped over ') +
-	'the lazy ' + chalk.green('dog and then ran away with the unicorn.');
-
-console.log(wrapAnsi(input, 20));
-```
-
-<img width="331" src="screenshot.png">
-
-
-## API
-
-### wrapAnsi(input, columns, [options])
-
-Wrap words to the specified column width.
-
-#### input
-
-Type: `string`
-
-String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk).
-
-#### columns
-
-Type: `number`
-
-Number of columns to wrap the text to.
-
-#### options
-
-##### hard
-
-Type: `boolean`<br>
-Default: `false`
-
-By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width.
-
-##### wordWrap
-
-Type: `boolean`<br>
-Default: `true`
-
-By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary.
-
-
-## Related
-
-- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes
-- [cli-truncate](https://github.com/sindresorhus/cli-truncate) - Truncate a string to a specific width in the terminal
-- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right
-- [jsesc](https://github.com/mathiasbynens/jsesc) - Generate ASCII-only output from Unicode strings. Useful for creating test fixtures.
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)

+ 0 - 15
admin/node_modules/wrappy/LICENSE

@@ -1,15 +0,0 @@
-The ISC License
-
-Copyright (c) Isaac Z. Schlueter and Contributors
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

+ 0 - 36
admin/node_modules/wrappy/README.md

@@ -1,36 +0,0 @@
-# wrappy
-
-Callback wrapping utility
-
-## USAGE
-
-```javascript
-var wrappy = require("wrappy")
-
-// var wrapper = wrappy(wrapperFunction)
-
-// make sure a cb is called only once
-// See also: http://npm.im/once for this specific use case
-var once = wrappy(function (cb) {
-  var called = false
-  return function () {
-    if (called) return
-    called = true
-    return cb.apply(this, arguments)
-  }
-})
-
-function printBoo () {
-  console.log('boo')
-}
-// has some rando property
-printBoo.iAmBooPrinter = true
-
-var onlyPrintOnce = once(printBoo)
-
-onlyPrintOnce() // prints 'boo'
-onlyPrintOnce() // does nothing
-
-// random property is retained!
-assert.equal(onlyPrintOnce.iAmBooPrinter, true)
-```

+ 0 - 62
admin/node_modules/wrappy/package.json

@@ -1,62 +0,0 @@
-{
-  "_args": [
-    [
-      "wrappy@1.0.2",
-      "D:\\zhaogongxue\\crm\\template\\admin"
-    ]
-  ],
-  "_from": "wrappy@1.0.2",
-  "_id": "wrappy@1.0.2",
-  "_inBundle": false,
-  "_integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-  "_location": "/wrappy",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "wrappy@1.0.2",
-    "name": "wrappy",
-    "escapedName": "wrappy",
-    "rawSpec": "1.0.2",
-    "saveSpec": null,
-    "fetchSpec": "1.0.2"
-  },
-  "_requiredBy": [
-    "/inflight",
-    "/once"
-  ],
-  "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-  "_spec": "1.0.2",
-  "_where": "D:\\zhaogongxue\\crm\\template\\admin",
-  "author": {
-    "name": "Isaac Z. Schlueter",
-    "email": "i@izs.me",
-    "url": "http://blog.izs.me/"
-  },
-  "bugs": {
-    "url": "https://github.com/npm/wrappy/issues"
-  },
-  "dependencies": {},
-  "description": "Callback wrapping utility",
-  "devDependencies": {
-    "tap": "^2.3.1"
-  },
-  "directories": {
-    "test": "test"
-  },
-  "files": [
-    "wrappy.js"
-  ],
-  "homepage": "https://github.com/npm/wrappy",
-  "license": "ISC",
-  "main": "wrappy.js",
-  "name": "wrappy",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/npm/wrappy.git"
-  },
-  "scripts": {
-    "test": "tap --coverage test/*.js"
-  },
-  "version": "1.0.2"
-}

+ 0 - 33
admin/node_modules/wrappy/wrappy.js

@@ -1,33 +0,0 @@
-// Returns a wrapper function that returns a wrapped callback
-// The wrapper function should do some stuff, and return a
-// presumably different callback function.
-// This makes sure that own properties are retained, so that
-// decorations and such are not lost along the way.
-module.exports = wrappy
-function wrappy (fn, cb) {
-  if (fn && cb) return wrappy(fn)(cb)
-
-  if (typeof fn !== 'function')
-    throw new TypeError('need wrapper function')
-
-  Object.keys(fn).forEach(function (k) {
-    wrapper[k] = fn[k]
-  })
-
-  return wrapper
-
-  function wrapper() {
-    var args = new Array(arguments.length)
-    for (var i = 0; i < args.length; i++) {
-      args[i] = arguments[i]
-    }
-    var ret = fn.apply(this, args)
-    var cb = args[args.length-1]
-    if (typeof ret === 'function' && ret !== cb) {
-      Object.keys(cb).forEach(function (k) {
-        ret[k] = cb[k]
-      })
-    }
-    return ret
-  }
-}

+ 0 - 25
admin/node_modules/write-file-atomic/CHANGELOG.md

@@ -1,25 +0,0 @@
-# 2.4.3
-
-* Ignore errors raised by `fs.closeSync` when cleaning up after a write
-  error.
-
-# 2.4.2
-
-* A pair of patches to fix some fd leaks.  We would leak fds with sync use
-  when errors occured and with async use any time fsync was not in use. (#34)
-
-# 2.4.1
-
-* Fix a bug where `signal-exit` instances would be leaked. This was fixed when addressing #35.
-
-# 2.4.0
-
-## Features
-
-* Allow chown and mode options to be set to false to disable the defaulting behavior. (#20)
-* Support passing encoding strings in options slot for compat with Node.js API. (#31)
-* Add support for running inside of worker threads (#37)
-
-## Fixes
-
-* Remove unneeded call when returning success (#36)

+ 0 - 6
admin/node_modules/write-file-atomic/LICENSE

@@ -1,6 +0,0 @@
-Copyright (c) 2015, Rebecca Turner
-
-Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-

+ 0 - 56
admin/node_modules/write-file-atomic/README.md

@@ -1,56 +0,0 @@
-write-file-atomic
------------------
-
-This is an extension for node's `fs.writeFile` that makes its operation
-atomic and allows you set ownership (uid/gid of the file).
-
-### var writeFileAtomic = require('write-file-atomic')<br>writeFileAtomic(filename, data, [options], callback)
-
-* filename **String**
-* data **String** | **Buffer**
-* options **Object** | **String**
-  * chown **Object** default, uid & gid of existing file, if any
-    * uid **Number**
-    * gid **Number**
-  * encoding **String** | **Null** default = 'utf8'
-  * fsync **Boolean** default = true
-  * mode **Number** default, from existing file, if any
-  * Promise **Object** default = native Promise object
-* callback **Function**
-
-Atomically and asynchronously writes data to a file, replacing the file if it already
-exists.  data can be a string or a buffer.
-
-The file is initially named `filename + "." + murmurhex(__filename, process.pid, ++invocations)`.
-Note that `require('worker_threads').threadId` is used in addition to `process.pid` if running inside of a worker thread.
-If writeFile completes successfully then, if passed the **chown** option it will change
-the ownership of the file. Finally it renames the file back to the filename you specified. If
-it encounters errors at any of these steps it will attempt to unlink the temporary file and then
-pass the error back to the caller.
-If multiple writes are concurrently issued to the same file, the write operations are put into a queue and serialized in the order they were called, using Promises. Native promises are used by default, but you can inject your own promise-like object with the **Promise** option. Writes to different files are still executed in parallel.
-
-If provided, the **chown** option requires both **uid** and **gid** properties or else
-you'll get an error.  If **chown** is not specified it will default to using
-the owner of the previous file.  To prevent chown from being ran you can
-also pass `false`, in which case the file will be created with the current user's credentials.
-
-If **mode** is not specified, it will default to using the permissions from
-an existing file, if any.  Expicitly setting this to `false` remove this default, resulting
-in a file created with the system default permissions.
-
-If options is a String, it's assumed to be the **encoding** option. The **encoding** option is ignored if **data** is a buffer. It defaults to 'utf8'.
-
-If the **fsync** option is **false**, writeFile will skip the final fsync call.
-
-Example:
-
-```javascript
-writeFileAtomic('message.txt', 'Hello Node', {chown:{uid:100,gid:50}}, function (err) {
-  if (err) throw err;
-  console.log('It\'s saved!');
-});
-```
-
-### var writeFileAtomicSync = require('write-file-atomic').sync<br>writeFileAtomicSync(filename, data, [options])
-
-The synchronous version of **writeFileAtomic**.

+ 0 - 238
admin/node_modules/write-file-atomic/index.js

@@ -1,238 +0,0 @@
-'use strict'
-module.exports = writeFile
-module.exports.sync = writeFileSync
-module.exports._getTmpname = getTmpname // for testing
-module.exports._cleanupOnExit = cleanupOnExit
-
-var fs = require('graceful-fs')
-var MurmurHash3 = require('imurmurhash')
-var onExit = require('signal-exit')
-var path = require('path')
-var activeFiles = {}
-
-// if we run inside of a worker_thread, `process.pid` is not unique
-/* istanbul ignore next */
-var threadId = (function getId () {
-  try {
-    var workerThreads = require('worker_threads')
-
-    /// if we are in main thread, this is set to `0`
-    return workerThreads.threadId
-  } catch (e) {
-    // worker_threads are not available, fallback to 0
-    return 0
-  }
-})()
-
-var invocations = 0
-function getTmpname (filename) {
-  return filename + '.' +
-    MurmurHash3(__filename)
-      .hash(String(process.pid))
-      .hash(String(threadId))
-      .hash(String(++invocations))
-      .result()
-}
-
-function cleanupOnExit (tmpfile) {
-  return function () {
-    try {
-      fs.unlinkSync(typeof tmpfile === 'function' ? tmpfile() : tmpfile)
-    } catch (_) {}
-  }
-}
-
-function writeFile (filename, data, options, callback) {
-  if (options) {
-    if (options instanceof Function) {
-      callback = options
-      options = {}
-    } else if (typeof options === 'string') {
-      options = { encoding: options }
-    }
-  } else {
-    options = {}
-  }
-
-  var Promise = options.Promise || global.Promise
-  var truename
-  var fd
-  var tmpfile
-  /* istanbul ignore next -- The closure only gets called when onExit triggers */
-  var removeOnExitHandler = onExit(cleanupOnExit(() => tmpfile))
-  var absoluteName = path.resolve(filename)
-
-  new Promise(function serializeSameFile (resolve) {
-    // make a queue if it doesn't already exist
-    if (!activeFiles[absoluteName]) activeFiles[absoluteName] = []
-
-    activeFiles[absoluteName].push(resolve) // add this job to the queue
-    if (activeFiles[absoluteName].length === 1) resolve() // kick off the first one
-  }).then(function getRealPath () {
-    return new Promise(function (resolve) {
-      fs.realpath(filename, function (_, realname) {
-        truename = realname || filename
-        tmpfile = getTmpname(truename)
-        resolve()
-      })
-    })
-  }).then(function stat () {
-    return new Promise(function stat (resolve) {
-      if (options.mode && options.chown) resolve()
-      else {
-        // Either mode or chown is not explicitly set
-        // Default behavior is to copy it from original file
-        fs.stat(truename, function (err, stats) {
-          if (err || !stats) resolve()
-          else {
-            options = Object.assign({}, options)
-
-            if (options.mode == null) {
-              options.mode = stats.mode
-            }
-            if (options.chown == null && process.getuid) {
-              options.chown = { uid: stats.uid, gid: stats.gid }
-            }
-            resolve()
-          }
-        })
-      }
-    })
-  }).then(function thenWriteFile () {
-    return new Promise(function (resolve, reject) {
-      fs.open(tmpfile, 'w', options.mode, function (err, _fd) {
-        fd = _fd
-        if (err) reject(err)
-        else resolve()
-      })
-    })
-  }).then(function write () {
-    return new Promise(function (resolve, reject) {
-      if (Buffer.isBuffer(data)) {
-        fs.write(fd, data, 0, data.length, 0, function (err) {
-          if (err) reject(err)
-          else resolve()
-        })
-      } else if (data != null) {
-        fs.write(fd, String(data), 0, String(options.encoding || 'utf8'), function (err) {
-          if (err) reject(err)
-          else resolve()
-        })
-      } else resolve()
-    })
-  }).then(function syncAndClose () {
-    return new Promise(function (resolve, reject) {
-      if (options.fsync !== false) {
-        fs.fsync(fd, function (err) {
-          if (err) fs.close(fd, () => reject(err))
-          else fs.close(fd, resolve)
-        })
-      } else {
-        fs.close(fd, resolve)
-      }
-    })
-  }).then(function chown () {
-    fd = null
-    if (options.chown) {
-      return new Promise(function (resolve, reject) {
-        fs.chown(tmpfile, options.chown.uid, options.chown.gid, function (err) {
-          if (err) reject(err)
-          else resolve()
-        })
-      })
-    }
-  }).then(function chmod () {
-    if (options.mode) {
-      return new Promise(function (resolve, reject) {
-        fs.chmod(tmpfile, options.mode, function (err) {
-          if (err) reject(err)
-          else resolve()
-        })
-      })
-    }
-  }).then(function rename () {
-    return new Promise(function (resolve, reject) {
-      fs.rename(tmpfile, truename, function (err) {
-        if (err) reject(err)
-        else resolve()
-      })
-    })
-  }).then(function success () {
-    removeOnExitHandler()
-    callback()
-  }, function fail (err) {
-    return new Promise(resolve => {
-      return fd ? fs.close(fd, resolve) : resolve()
-    }).then(() => {
-      removeOnExitHandler()
-      fs.unlink(tmpfile, function () {
-        callback(err)
-      })
-    })
-  }).then(function checkQueue () {
-    activeFiles[absoluteName].shift() // remove the element added by serializeSameFile
-    if (activeFiles[absoluteName].length > 0) {
-      activeFiles[absoluteName][0]() // start next job if one is pending
-    } else delete activeFiles[absoluteName]
-  })
-}
-
-function writeFileSync (filename, data, options) {
-  if (typeof options === 'string') options = { encoding: options }
-  else if (!options) options = {}
-  try {
-    filename = fs.realpathSync(filename)
-  } catch (ex) {
-    // it's ok, it'll happen on a not yet existing file
-  }
-  var tmpfile = getTmpname(filename)
-
-  if (!options.mode || !options.chown) {
-    // Either mode or chown is not explicitly set
-    // Default behavior is to copy it from original file
-    try {
-      var stats = fs.statSync(filename)
-      options = Object.assign({}, options)
-      if (!options.mode) {
-        options.mode = stats.mode
-      }
-      if (!options.chown && process.getuid) {
-        options.chown = { uid: stats.uid, gid: stats.gid }
-      }
-    } catch (ex) {
-      // ignore stat errors
-    }
-  }
-
-  var fd
-  var cleanup = cleanupOnExit(tmpfile)
-  var removeOnExitHandler = onExit(cleanup)
-
-  try {
-    fd = fs.openSync(tmpfile, 'w', options.mode)
-    if (Buffer.isBuffer(data)) {
-      fs.writeSync(fd, data, 0, data.length, 0)
-    } else if (data != null) {
-      fs.writeSync(fd, String(data), 0, String(options.encoding || 'utf8'))
-    }
-    if (options.fsync !== false) {
-      fs.fsyncSync(fd)
-    }
-    fs.closeSync(fd)
-    if (options.chown) fs.chownSync(tmpfile, options.chown.uid, options.chown.gid)
-    if (options.mode) fs.chmodSync(tmpfile, options.mode)
-    fs.renameSync(tmpfile, filename)
-    removeOnExitHandler()
-  } catch (err) {
-    if (fd) {
-      try {
-        fs.closeSync(fd)
-      } catch (ex) {
-        // ignore close errors at this stage, error may have closed fd already.
-      }
-    }
-    removeOnExitHandler()
-    cleanup()
-    throw err
-  }
-}

+ 0 - 74
admin/node_modules/write-file-atomic/package.json

@@ -1,74 +0,0 @@
-{
-  "_args": [
-    [
-      "write-file-atomic@2.4.3",
-      "D:\\zhaogongxue\\crm\\template\\admin"
-    ]
-  ],
-  "_development": true,
-  "_from": "write-file-atomic@2.4.3",
-  "_id": "write-file-atomic@2.4.3",
-  "_inBundle": false,
-  "_integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
-  "_location": "/write-file-atomic",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "version",
-    "registry": true,
-    "raw": "write-file-atomic@2.4.3",
-    "name": "write-file-atomic",
-    "escapedName": "write-file-atomic",
-    "rawSpec": "2.4.3",
-    "saveSpec": null,
-    "fetchSpec": "2.4.3"
-  },
-  "_requiredBy": [
-    "/jest-runtime"
-  ],
-  "_resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
-  "_spec": "2.4.3",
-  "_where": "D:\\zhaogongxue\\crm\\template\\admin",
-  "author": {
-    "name": "Rebecca Turner",
-    "email": "me@re-becca.org",
-    "url": "http://re-becca.org"
-  },
-  "bugs": {
-    "url": "https://github.com/iarna/write-file-atomic/issues"
-  },
-  "dependencies": {
-    "graceful-fs": "^4.1.11",
-    "imurmurhash": "^0.1.4",
-    "signal-exit": "^3.0.2"
-  },
-  "description": "Write files in an atomic fashion w/configurable ownership",
-  "devDependencies": {
-    "mkdirp": "^0.5.1",
-    "require-inject": "^1.4.0",
-    "rimraf": "^2.5.4",
-    "standard": "^12.0.1",
-    "tap": "^12.1.3"
-  },
-  "files": [
-    "index.js"
-  ],
-  "homepage": "https://github.com/iarna/write-file-atomic",
-  "keywords": [
-    "writeFile",
-    "atomic"
-  ],
-  "license": "ISC",
-  "main": "index.js",
-  "name": "write-file-atomic",
-  "repository": {
-    "type": "git",
-    "url": "git+ssh://git@github.com/iarna/write-file-atomic.git"
-  },
-  "scripts": {
-    "postpublish": "git push origin --follow-tags",
-    "postversion": "npm publish",
-    "preversion": "npm test",
-    "test": "standard && tap --100 test/*.js"
-  },
-  "version": "2.4.3"
-}

+ 0 - 21
admin/node_modules/ws/LICENSE

@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 449
admin/node_modules/ws/README.md

@@ -1,449 +0,0 @@
-# ws: a Node.js WebSocket library
-
-[![Version npm](https://img.shields.io/npm/v/ws.svg?logo=npm)](https://www.npmjs.com/package/ws)
-[![Linux Build](https://img.shields.io/travis/websockets/ws/master.svg?logo=travis)](https://travis-ci.org/websockets/ws)
-[![Windows Build](https://img.shields.io/appveyor/ci/lpinca/ws/master.svg?logo=appveyor)](https://ci.appveyor.com/project/lpinca/ws)
-[![Coverage Status](https://img.shields.io/coveralls/websockets/ws/master.svg)](https://coveralls.io/github/websockets/ws)
-
-ws is a simple to use, blazing fast, and thoroughly tested WebSocket client and
-server implementation.
-
-Passes the quite extensive Autobahn test suite: [server][server-report],
-[client][client-report].
-
-**Note**: This module does not work in the browser. The client in the docs is a
-reference to a back end with the role of a client in the WebSocket
-communication. Browser clients must use the native
-[`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket)
-object. To make the same code work seamlessly on Node.js and the browser, you
-can use one of the many wrappers available on npm, like
-[isomorphic-ws](https://github.com/heineiuo/isomorphic-ws).
-
-## Table of Contents
-
-- [Protocol support](#protocol-support)
-- [Installing](#installing)
-  - [Opt-in for performance and spec compliance](#opt-in-for-performance-and-spec-compliance)
-- [API docs](#api-docs)
-- [WebSocket compression](#websocket-compression)
-- [Usage examples](#usage-examples)
-  - [Sending and receiving text data](#sending-and-receiving-text-data)
-  - [Sending binary data](#sending-binary-data)
-  - [Simple server](#simple-server)
-  - [External HTTP/S server](#external-https-server)
-  - [Multiple servers sharing a single HTTP/S server](#multiple-servers-sharing-a-single-https-server)
-  - [Server broadcast](#server-broadcast)
-  - [echo.websocket.org demo](#echowebsocketorg-demo)
-  - [Other examples](#other-examples)
-- [Error handling best practices](#error-handling-best-practices)
-- [FAQ](#faq)
-  - [How to get the IP address of the client?](#how-to-get-the-ip-address-of-the-client)
-  - [How to detect and close broken connections?](#how-to-detect-and-close-broken-connections)
-  - [How to connect via a proxy?](#how-to-connect-via-a-proxy)
-- [Changelog](#changelog)
-- [License](#license)
-
-## Protocol support
-
-- **HyBi drafts 07-12** (Use the option `protocolVersion: 8`)
-- **HyBi drafts 13-17** (Current default, alternatively option
-  `protocolVersion: 13`)
-
-## Installing
-
-```
-npm install ws
-```
-
-### Opt-in for performance and spec compliance
-
-There are 2 optional modules that can be installed along side with the ws
-module. These modules are binary addons which improve certain operations.
-Prebuilt binaries are available for the most popular platforms so you don't
-necessarily need to have a C++ compiler installed on your machine.
-
-- `npm install --save-optional bufferutil`: Allows to efficiently perform
-  operations such as masking and unmasking the data payload of the WebSocket
-  frames.
-- `npm install --save-optional utf-8-validate`: Allows to efficiently check if a
-  message contains valid UTF-8 as required by the spec.
-
-## API docs
-
-See [`/doc/ws.md`](./doc/ws.md) for Node.js-like docs for the ws classes.
-
-## WebSocket compression
-
-ws supports the [permessage-deflate extension][permessage-deflate] which enables
-the client and server to negotiate a compression algorithm and its parameters,
-and then selectively apply it to the data payloads of each WebSocket message.
-
-The extension is disabled by default on the server and enabled by default on the
-client. It adds a significant overhead in terms of performance and memory
-consumption so we suggest to enable it only if it is really needed.
-
-Note that Node.js has a variety of issues with high-performance compression,
-where increased concurrency, especially on Linux, can lead to [catastrophic
-memory fragmentation][node-zlib-bug] and slow performance. If you intend to use
-permessage-deflate in production, it is worthwhile to set up a test
-representative of your workload and ensure Node.js/zlib will handle it with
-acceptable performance and memory usage.
-
-Tuning of permessage-deflate can be done via the options defined below. You can
-also use `zlibDeflateOptions` and `zlibInflateOptions`, which is passed directly
-into the creation of [raw deflate/inflate streams][node-zlib-deflaterawdocs].
-
-See [the docs][ws-server-options] for more options.
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({
-  port: 8080,
-  perMessageDeflate: {
-    zlibDeflateOptions: {
-      // See zlib defaults.
-      chunkSize: 1024,
-      memLevel: 7,
-      level: 3
-    },
-    zlibInflateOptions: {
-      chunkSize: 10 * 1024
-    },
-    // Other options settable:
-    clientNoContextTakeover: true, // Defaults to negotiated value.
-    serverNoContextTakeover: true, // Defaults to negotiated value.
-    serverMaxWindowBits: 10, // Defaults to negotiated value.
-    // Below options specified as default values.
-    concurrencyLimit: 10, // Limits zlib concurrency for perf.
-    threshold: 1024 // Size (in bytes) below which messages
-    // should not be compressed.
-  }
-});
-```
-
-The client will only use the extension if it is supported and enabled on the
-server. To always disable the extension on the client set the
-`perMessageDeflate` option to `false`.
-
-```js
-const WebSocket = require('ws');
-
-const ws = new WebSocket('ws://www.host.com/path', {
-  perMessageDeflate: false
-});
-```
-
-## Usage examples
-
-### Sending and receiving text data
-
-```js
-const WebSocket = require('ws');
-
-const ws = new WebSocket('ws://www.host.com/path');
-
-ws.on('open', function open() {
-  ws.send('something');
-});
-
-ws.on('message', function incoming(data) {
-  console.log(data);
-});
-```
-
-### Sending binary data
-
-```js
-const WebSocket = require('ws');
-
-const ws = new WebSocket('ws://www.host.com/path');
-
-ws.on('open', function open() {
-  const array = new Float32Array(5);
-
-  for (var i = 0; i < array.length; ++i) {
-    array[i] = i / 2;
-  }
-
-  ws.send(array);
-});
-```
-
-### Simple server
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({ port: 8080 });
-
-wss.on('connection', function connection(ws) {
-  ws.on('message', function incoming(message) {
-    console.log('received: %s', message);
-  });
-
-  ws.send('something');
-});
-```
-
-### External HTTP/S server
-
-```js
-const fs = require('fs');
-const https = require('https');
-const WebSocket = require('ws');
-
-const server = new https.createServer({
-  cert: fs.readFileSync('/path/to/cert.pem'),
-  key: fs.readFileSync('/path/to/key.pem')
-});
-const wss = new WebSocket.Server({ server });
-
-wss.on('connection', function connection(ws) {
-  ws.on('message', function incoming(message) {
-    console.log('received: %s', message);
-  });
-
-  ws.send('something');
-});
-
-server.listen(8080);
-```
-
-### Multiple servers sharing a single HTTP/S server
-
-```js
-const http = require('http');
-const WebSocket = require('ws');
-
-const server = http.createServer();
-const wss1 = new WebSocket.Server({ noServer: true });
-const wss2 = new WebSocket.Server({ noServer: true });
-
-wss1.on('connection', function connection(ws) {
-  // ...
-});
-
-wss2.on('connection', function connection(ws) {
-  // ...
-});
-
-server.on('upgrade', function upgrade(request, socket, head) {
-  const pathname = url.parse(request.url).pathname;
-
-  if (pathname === '/foo') {
-    wss1.handleUpgrade(request, socket, head, function done(ws) {
-      wss1.emit('connection', ws, request);
-    });
-  } else if (pathname === '/bar') {
-    wss2.handleUpgrade(request, socket, head, function done(ws) {
-      wss2.emit('connection', ws, request);
-    });
-  } else {
-    socket.destroy();
-  }
-});
-
-server.listen(8080);
-```
-
-### Server broadcast
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({ port: 8080 });
-
-// Broadcast to all.
-wss.broadcast = function broadcast(data) {
-  wss.clients.forEach(function each(client) {
-    if (client.readyState === WebSocket.OPEN) {
-      client.send(data);
-    }
-  });
-};
-
-wss.on('connection', function connection(ws) {
-  ws.on('message', function incoming(data) {
-    // Broadcast to everyone else.
-    wss.clients.forEach(function each(client) {
-      if (client !== ws && client.readyState === WebSocket.OPEN) {
-        client.send(data);
-      }
-    });
-  });
-});
-```
-
-### echo.websocket.org demo
-
-```js
-const WebSocket = require('ws');
-
-const ws = new WebSocket('wss://echo.websocket.org/', {
-  origin: 'https://websocket.org'
-});
-
-ws.on('open', function open() {
-  console.log('connected');
-  ws.send(Date.now());
-});
-
-ws.on('close', function close() {
-  console.log('disconnected');
-});
-
-ws.on('message', function incoming(data) {
-  console.log(`Roundtrip time: ${Date.now() - data} ms`);
-
-  setTimeout(function timeout() {
-    ws.send(Date.now());
-  }, 500);
-});
-```
-
-### Other examples
-
-For a full example with a browser client communicating with a ws server, see the
-examples folder.
-
-Otherwise, see the test cases.
-
-## Error handling best practices
-
-```js
-// If the WebSocket is closed before the following send is attempted
-ws.send('something');
-
-// Errors (both immediate and async write errors) can be detected in an optional
-// callback. The callback is also the only way of being notified that data has
-// actually been sent.
-ws.send('something', function ack(error) {
-  // If error is not defined, the send has been completed, otherwise the error
-  // object will indicate what failed.
-});
-
-// Immediate errors can also be handled with `try...catch`, but **note** that
-// since sends are inherently asynchronous, socket write failures will *not* be
-// captured when this technique is used.
-try {
-  ws.send('something');
-} catch (e) {
-  /* handle error */
-}
-```
-
-## FAQ
-
-### How to get the IP address of the client?
-
-The remote IP address can be obtained from the raw socket.
-
-```js
-const WebSocket = require('ws');
-
-const wss = new WebSocket.Server({ port: 8080 });
-
-wss.on('connection', function connection(ws, req) {
-  const ip = req.connection.remoteAddress;
-});
-```
-
-When the server runs behind a proxy like NGINX, the de-facto standard is to use
-the `X-Forwarded-For` header.
-
-```js
-wss.on('connection', function connection(ws, req) {
-  const ip = req.headers['x-forwarded-for'].split(/\s*,\s*/)[0];
-});
-```
-
-### How to detect and close broken connections?
-
-Sometimes the link between the server and the client can be interrupted in a way
-that keeps both the server and the client unaware of the broken state of the
-connection (e.g. when pulling the cord).
-
-In these cases ping messages can be used as a means to verify that the remote
-endpoint is still responsive.
-
-```js
-const WebSocket = require('ws');
-
-function noop() {}
-
-function heartbeat() {
-  this.isAlive = true;
-}
-
-const wss = new WebSocket.Server({ port: 8080 });
-
-wss.on('connection', function connection(ws) {
-  ws.isAlive = true;
-  ws.on('pong', heartbeat);
-});
-
-const interval = setInterval(function ping() {
-  wss.clients.forEach(function each(ws) {
-    if (ws.isAlive === false) return ws.terminate();
-
-    ws.isAlive = false;
-    ws.ping(noop);
-  });
-}, 30000);
-```
-
-Pong messages are automatically sent in response to ping messages as required by
-the spec.
-
-Just like the server example above your clients might as well lose connection
-without knowing it. You might want to add a ping listener on your clients to
-prevent that. A simple implementation would be:
-
-```js
-const WebSocket = require('ws');
-
-function heartbeat() {
-  clearTimeout(this.pingTimeout);
-
-  // Use `WebSocket#terminate()` and not `WebSocket#close()`. Delay should be
-  // equal to the interval at which your server sends out pings plus a
-  // conservative assumption of the latency.
-  this.pingTimeout = setTimeout(() => {
-    this.terminate();
-  }, 30000 + 1000);
-}
-
-const client = new WebSocket('wss://echo.websocket.org/');
-
-client.on('open', heartbeat);
-client.on('ping', heartbeat);
-client.on('close', function clear() {
-  clearTimeout(this.pingTimeout);
-});
-```
-
-### How to connect via a proxy?
-
-Use a custom `http.Agent` implementation like [https-proxy-agent][] or
-[socks-proxy-agent][].
-
-## Changelog
-
-We're using the GitHub [releases][changelog] for changelog entries.
-
-## License
-
-[MIT](LICENSE)
-
-[https-proxy-agent]: https://github.com/TooTallNate/node-https-proxy-agent
-[socks-proxy-agent]: https://github.com/TooTallNate/node-socks-proxy-agent
-[client-report]: http://websockets.github.io/ws/autobahn/clients/
-[server-report]: http://websockets.github.io/ws/autobahn/servers/
-[permessage-deflate]: https://tools.ietf.org/html/rfc7692
-[changelog]: https://github.com/websockets/ws/releases
-[node-zlib-bug]: https://github.com/nodejs/node/issues/8871
-[node-zlib-deflaterawdocs]:
-  https://nodejs.org/api/zlib.html#zlib_zlib_createdeflateraw_options
-[ws-server-options]:
-  https://github.com/websockets/ws/blob/master/doc/ws.md#new-websocketserveroptions-callback

Some files were not shown because too many files changed in this diff