From 2e2b29eac10949772a3bd06ec628e5efb97a4831 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 28 Oct 2015 14:37:06 -0400 Subject: [PATCH] pushed new blog post --- .../express/node_modules/vary/HISTORY.md | 23 + node_modules/forever/.editorconfig | 3 + .../forever/node_modules/.bin/prettyjson | 1 + .../forever/node_modules/clone/.npmignore | 1 + .../forever/node_modules/clone/.travis.yml | 3 + .../forever/node_modules/clone/LICENSE | 18 + .../forever/node_modules/clone/README.md | 126 + .../forever/node_modules/clone/clone.js | 160 + .../forever/node_modules/clone/package.json | 133 + .../node_modules/clone/test-apart-ctx.html | 22 + .../forever/node_modules/clone/test.html | 148 + .../forever/node_modules/clone/test.js | 372 ++ .../node_modules/chokidar/CHANGELOG.md | 219 ++ .../node_modules/chokidar/README.md | 272 ++ .../node_modules/chokidar/index.js | 603 +++ .../chokidar/lib/fsevents-handler.js | 361 ++ .../chokidar/lib/nodefs-handler.js | 476 +++ .../chokidar/node_modules/anymatch/LICENSE | 15 + .../chokidar/node_modules/anymatch/README.md | 91 + .../chokidar/node_modules/anymatch/index.js | 64 + .../anymatch/node_modules/micromatch/LICENSE | 21 + .../node_modules/micromatch/README.md | 616 +++ .../anymatch/node_modules/micromatch/index.js | 415 +++ .../node_modules/micromatch/lib/chars.js | 67 + .../node_modules/micromatch/lib/expand.js | 328 ++ .../node_modules/micromatch/lib/glob.js | 210 ++ .../node_modules/micromatch/lib/utils.js | 88 + .../micromatch/node_modules/arr-diff/LICENSE | 24 + .../node_modules/arr-diff/README.md | 75 + .../micromatch/node_modules/arr-diff/index.js | 58 + .../arr-diff/node_modules/arr-flatten/LICENSE | 21 + .../node_modules/arr-flatten/README.md | 73 + .../node_modules/arr-flatten/index.js | 27 + .../node_modules/arr-flatten/package.json | 73 + .../arr-diff/node_modules/array-slice/LICENSE | 21 + .../node_modules/array-slice/README.md | 54 + .../node_modules/array-slice/index.js | 36 + .../node_modules/array-slice/package.json | 65 + .../node_modules/arr-diff/package.json | 77 + .../node_modules/array-unique/LICENSE | 21 + .../node_modules/array-unique/README.md | 51 + .../node_modules/array-unique/index.js | 28 + .../node_modules/array-unique/package.json | 59 + .../micromatch/node_modules/braces/LICENSE | 24 + .../micromatch/node_modules/braces/README.md | 242 ++ .../micromatch/node_modules/braces/index.js | 400 ++ .../braces/node_modules/expand-range/LICENSE | 24 + .../node_modules/expand-range/README.md | 107 + .../braces/node_modules/expand-range/index.js | 43 + .../node_modules/fill-range/LICENSE | 21 + .../node_modules/fill-range/README.md | 290 ++ .../node_modules/fill-range/index.js | 408 ++ .../fill-range/node_modules/is-number/LICENSE | 21 + .../node_modules/is-number/README.md | 104 + .../node_modules/is-number/index.js | 14 + .../node_modules/is-number/package.json | 75 + .../fill-range/node_modules/isobject/LICENSE | 21 + .../node_modules/isobject/README.md | 81 + .../fill-range/node_modules/isobject/index.js | 13 + .../node_modules/isobject/package.json | 75 + .../node_modules/randomatic/README.md | 138 + .../node_modules/randomatic/index.js | 86 + .../node_modules/randomatic/package.json | 71 + .../node_modules/repeat-string/LICENSE | 24 + .../node_modules/repeat-string/README.md | 94 + .../node_modules/repeat-string/index.js | 66 + .../node_modules/repeat-string/package.json | 78 + .../node_modules/fill-range/package.json | 90 + .../node_modules/expand-range/package.json | 81 + .../braces/node_modules/lazy-cache/LICENSE | 21 + .../braces/node_modules/lazy-cache/README.md | 92 + .../braces/node_modules/lazy-cache/index.js | 62 + .../node_modules/lazy-cache/package.json | 75 + .../node_modules/preserve/.gitattributes | 14 + .../braces/node_modules/preserve/.jshintrc | 24 + .../braces/node_modules/preserve/.npmignore | 53 + .../braces/node_modules/preserve/.travis.yml | 3 + .../braces/node_modules/preserve/.verb.md | 59 + .../braces/node_modules/preserve/LICENSE | 24 + .../braces/node_modules/preserve/README.md | 90 + .../braces/node_modules/preserve/index.js | 54 + .../braces/node_modules/preserve/package.json | 69 + .../braces/node_modules/preserve/test.js | 48 + .../node_modules/repeat-element/LICENSE | 21 + .../node_modules/repeat-element/README.md | 71 + .../node_modules/repeat-element/index.js | 18 + .../node_modules/repeat-element/package.json | 66 + .../node_modules/braces/package.json | 96 + .../node_modules/expand-brackets/LICENSE | 21 + .../node_modules/expand-brackets/README.md | 89 + .../node_modules/expand-brackets/index.js | 157 + .../node_modules/expand-brackets/package.json | 79 + .../micromatch/node_modules/extglob/LICENSE | 21 + .../micromatch/node_modules/extglob/README.md | 88 + .../micromatch/node_modules/extglob/index.js | 178 + .../extglob/node_modules/ansi-green/LICENSE | 21 + .../extglob/node_modules/ansi-green/index.js | 14 + .../ansi-green/node_modules/ansi-wrap/LICENSE | 21 + .../node_modules/ansi-wrap/README.md | 89 + .../node_modules/ansi-wrap/index.js | 5 + .../node_modules/ansi-wrap/package.json | 55 + .../node_modules/ansi-green/package.json | 82 + .../extglob/node_modules/ansi-green/readme.md | 74 + .../extglob/node_modules/is-extglob/LICENSE | 21 + .../extglob/node_modules/is-extglob/README.md | 75 + .../extglob/node_modules/is-extglob/index.js | 11 + .../node_modules/is-extglob/package.json | 73 + .../node_modules/success-symbol/LICENSE | 21 + .../node_modules/success-symbol/README.md | 52 + .../node_modules/success-symbol/index.js | 1 + .../node_modules/success-symbol/package.json | 79 + .../node_modules/extglob/package.json | 82 + .../node_modules/filename-regex/README.md | 51 + .../node_modules/filename-regex/index.js | 10 + .../node_modules/filename-regex/package.json | 64 + .../micromatch/node_modules/is-glob/LICENSE | 21 + .../micromatch/node_modules/is-glob/README.md | 69 + .../micromatch/node_modules/is-glob/index.js | 11 + .../node_modules/is-glob/package.json | 72 + .../micromatch/node_modules/kind-of/README.md | 155 + .../micromatch/node_modules/kind-of/index.js | 45 + .../node_modules/kind-of/package.json | 82 + .../node_modules/object.omit/LICENSE | 21 + .../node_modules/object.omit/README.md | 75 + .../node_modules/object.omit/index.js | 26 + .../object.omit/node_modules/for-own/LICENSE | 21 + .../node_modules/for-own/README.md | 52 + .../object.omit/node_modules/for-own/index.js | 19 + .../for-own/node_modules/for-in/LICENSE | 21 + .../for-own/node_modules/for-in/README.md | 52 + .../for-own/node_modules/for-in/index.js | 16 + .../for-own/node_modules/for-in/package.json | 69 + .../node_modules/for-own/package.json | 72 + .../object.omit/node_modules/isobject/LICENSE | 21 + .../node_modules/isobject/README.md | 81 + .../node_modules/isobject/index.js | 13 + .../node_modules/isobject/package.json | 74 + .../node_modules/object.omit/package.json | 71 + .../node_modules/parse-glob/LICENSE | 21 + .../node_modules/parse-glob/README.md | 115 + .../node_modules/parse-glob/index.js | 156 + .../parse-glob/node_modules/glob-base/LICENSE | 21 + .../node_modules/glob-base/README.md | 158 + .../node_modules/glob-base/index.js | 51 + .../node_modules/glob-base/package.json | 82 + .../node_modules/is-dotfile/LICENSE | 21 + .../node_modules/is-dotfile/README.md | 66 + .../node_modules/is-dotfile/index.js | 15 + .../node_modules/is-dotfile/package.json | 66 + .../node_modules/is-extglob/LICENSE | 21 + .../node_modules/is-extglob/README.md | 75 + .../node_modules/is-extglob/index.js | 11 + .../node_modules/is-extglob/package.json | 73 + .../parse-glob/node_modules/is-glob/LICENSE | 21 + .../parse-glob/node_modules/is-glob/README.md | 105 + .../parse-glob/node_modules/is-glob/index.js | 14 + .../node_modules/is-glob/package.json | 90 + .../node_modules/parse-glob/package.json | 90 + .../node_modules/regex-cache/LICENSE | 21 + .../node_modules/regex-cache/README.md | 148 + .../node_modules/regex-cache/index.js | 67 + .../node_modules/is-equal-shallow/LICENSE | 21 + .../node_modules/is-equal-shallow/README.md | 90 + .../node_modules/is-equal-shallow/index.js | 27 + .../is-equal-shallow/package.json | 86 + .../node_modules/is-primitive/LICENSE | 21 + .../node_modules/is-primitive/README.md | 57 + .../node_modules/is-primitive/index.js | 13 + .../node_modules/is-primitive/package.json | 68 + .../node_modules/regex-cache/package.json | 75 + .../node_modules/micromatch/package.json | 139 + .../node_modules/anymatch/package.json | 69 + .../chokidar/node_modules/arrify/index.js | 8 + .../chokidar/node_modules/arrify/license | 21 + .../chokidar/node_modules/arrify/package.json | 61 + .../chokidar/node_modules/arrify/readme.md | 36 + .../node_modules/async-each/.npmignore | 25 + .../node_modules/async-each/CHANGELOG.md | 20 + .../node_modules/async-each/README.md | 64 + .../node_modules/async-each/bower.json | 22 + .../node_modules/async-each/component.json | 18 + .../chokidar/node_modules/async-each/index.js | 38 + .../node_modules/async-each/package.json | 61 + .../node_modules/glob-parent/.npmignore | 4 + .../node_modules/glob-parent/.travis.yml | 8 + .../chokidar/node_modules/glob-parent/LICENSE | 15 + .../node_modules/glob-parent/README.md | 43 + .../node_modules/glob-parent/index.js | 10 + .../node_modules/glob-parent/package.json | 59 + .../chokidar/node_modules/glob-parent/test.js | 28 + .../node_modules/is-binary-path/index.js | 12 + .../node_modules/is-binary-path/license | 21 + .../binary-extensions/binary-extensions.json | 186 + .../node_modules/binary-extensions/license | 21 + .../binary-extensions/package.json | 77 + .../node_modules/binary-extensions/readme.md | 33 + .../node_modules/is-binary-path/package.json | 76 + .../node_modules/is-binary-path/readme.md | 34 + .../chokidar/node_modules/is-glob/LICENSE | 21 + .../chokidar/node_modules/is-glob/README.md | 105 + .../chokidar/node_modules/is-glob/index.js | 14 + .../is-glob/node_modules/is-extglob/LICENSE | 21 + .../is-glob/node_modules/is-extglob/README.md | 75 + .../is-glob/node_modules/is-extglob/index.js | 11 + .../node_modules/is-extglob/package.json | 72 + .../node_modules/is-glob/package.json | 89 + .../node_modules/lodash.flatten/LICENSE.txt | 22 + .../node_modules/lodash.flatten/README.md | 20 + .../node_modules/lodash.flatten/index.js | 40 + .../node_modules/lodash._baseflatten/LICENSE | 22 + .../lodash._baseflatten/README.md | 20 + .../node_modules/lodash._baseflatten/index.js | 131 + .../node_modules/lodash.isarguments/LICENSE | 22 + .../node_modules/lodash.isarguments/README.md | 20 + .../node_modules/lodash.isarguments/index.js | 106 + .../lodash.isarguments/package.json | 93 + .../node_modules/lodash.isarray/LICENSE | 22 + .../node_modules/lodash.isarray/README.md | 20 + .../node_modules/lodash.isarray/index.js | 180 + .../node_modules/lodash.isarray/package.json | 93 + .../lodash._baseflatten/package.json | 91 + .../lodash._isiterateecall/LICENSE.txt | 22 + .../lodash._isiterateecall/README.md | 20 + .../lodash._isiterateecall/index.js | 132 + .../lodash._isiterateecall/package.json | 87 + .../node_modules/lodash.flatten/package.json | 97 + .../chokidar/node_modules/readdirp/.npmignore | 15 + .../node_modules/readdirp/.travis.yml | 8 + .../chokidar/node_modules/readdirp/LICENSE | 18 + .../chokidar/node_modules/readdirp/README.md | 233 ++ .../node_modules/readdirp/examples/Readme.md | 37 + .../readdirp/examples/callback-api.js | 10 + .../node_modules/readdirp/examples/grep.js | 71 + .../readdirp/examples/package.json | 9 + .../readdirp/examples/stream-api-pipe.js | 19 + .../readdirp/examples/stream-api.js | 15 + .../readdirp/node_modules/graceful-fs/LICENSE | 15 + .../node_modules/graceful-fs/README.md | 36 + .../readdirp/node_modules/graceful-fs/fs.js | 21 + .../node_modules/graceful-fs/graceful-fs.js | 251 ++ .../graceful-fs/legacy-streams.js | 118 + .../node_modules/graceful-fs/package.json | 72 + .../node_modules/graceful-fs/polyfills.js | 252 ++ .../node_modules/readable-stream/.npmignore | 5 + .../node_modules/readable-stream/.travis.yml | 39 + .../node_modules/readable-stream/.zuul.yml | 1 + .../node_modules/readable-stream/LICENSE | 18 + .../node_modules/readable-stream/README.md | 36 + .../readable-stream/doc/stream.markdown | 1651 ++++++++ .../doc/wg-meetings/2015-01-30.md | 60 + .../node_modules/readable-stream/duplex.js | 1 + .../readable-stream/lib/_stream_duplex.js | 82 + .../lib/_stream_passthrough.js | 27 + .../readable-stream/lib/_stream_readable.js | 959 +++++ .../readable-stream/lib/_stream_transform.js | 197 + .../readable-stream/lib/_stream_writable.js | 520 +++ .../node_modules/core-util-is/README.md | 3 + .../node_modules/core-util-is/float.patch | 604 +++ .../node_modules/core-util-is/lib/util.js | 107 + .../node_modules/core-util-is/package.json | 53 + .../node_modules/core-util-is/util.js | 106 + .../node_modules/inherits/LICENSE | 16 + .../node_modules/inherits/README.md | 42 + .../node_modules/inherits/inherits.js | 1 + .../node_modules/inherits/inherits_browser.js | 23 + .../node_modules/inherits/package.json | 50 + .../node_modules/inherits/test.js | 25 + .../node_modules/isarray/README.md | 54 + .../node_modules/isarray/build/build.js | 209 ++ .../node_modules/isarray/component.json | 19 + .../node_modules/isarray/index.js | 3 + .../node_modules/isarray/package.json | 49 + .../process-nextick-args/.travis.yml | 7 + .../process-nextick-args/index.js | 13 + .../process-nextick-args/license.md | 19 + .../process-nextick-args/package.json | 44 + .../process-nextick-args/readme.md | 18 + .../node_modules/process-nextick-args/test.js | 24 + .../node_modules/string_decoder/.npmignore | 2 + .../node_modules/string_decoder/LICENSE | 20 + .../node_modules/string_decoder/README.md | 7 + .../node_modules/string_decoder/index.js | 221 ++ .../node_modules/string_decoder/package.json | 53 + .../node_modules/util-deprecate/History.md | 11 + .../node_modules/util-deprecate/LICENSE | 24 + .../node_modules/util-deprecate/README.md | 53 + .../node_modules/util-deprecate/browser.js | 62 + .../node_modules/util-deprecate/node.js | 6 + .../node_modules/util-deprecate/package.json | 52 + .../node_modules/readable-stream/package.json | 74 + .../readable-stream/passthrough.js | 1 + .../node_modules/readable-stream/readable.js | 12 + .../node_modules/readable-stream/transform.js | 1 + .../node_modules/readable-stream/writable.js | 1 + .../node_modules/readdirp/package.json | 73 + .../node_modules/readdirp/readdirp.js | 288 ++ .../node_modules/readdirp/stream-api.js | 100 + .../test/bed/root_dir1/root_dir1_file1.ext1 | 0 .../test/bed/root_dir1/root_dir1_file2.ext2 | 0 .../test/bed/root_dir1/root_dir1_file3.ext3 | 0 .../root1_dir1_subdir1_file1.ext1 | 0 .../test/bed/root_dir2/root_dir2_file1.ext1 | 0 .../test/bed/root_dir2/root_dir2_file2.ext2 | 0 .../readdirp/test/bed/root_file1.ext1 | 0 .../readdirp/test/bed/root_file2.ext2 | 0 .../readdirp/test/bed/root_file3.ext3 | 0 .../readdirp/test/readdirp-stream.js | 310 ++ .../node_modules/readdirp/test/readdirp.js | 289 ++ .../node_modules/chokidar/package.json | 84 + .../node_modules/minimatch/browser.js | 1159 ++++++ .../node_modules/brace-expansion/.npmignore | 3 + .../node_modules/brace-expansion/README.md | 122 + .../node_modules/brace-expansion/example.js | 8 + .../node_modules/brace-expansion/index.js | 191 + .../node_modules/balanced-match/.npmignore | 2 + .../node_modules/balanced-match/.travis.yml | 4 + .../node_modules/balanced-match/Makefile | 6 + .../node_modules/balanced-match/README.md | 80 + .../node_modules/balanced-match/example.js | 5 + .../node_modules/balanced-match/index.js | 38 + .../node_modules/balanced-match/package.json | 72 + .../balanced-match/test/balanced.js | 56 + .../node_modules/concat-map/.travis.yml | 4 + .../node_modules/concat-map/LICENSE | 18 + .../node_modules/concat-map/README.markdown | 62 + .../node_modules/concat-map/example/map.js | 6 + .../node_modules/concat-map/index.js | 13 + .../node_modules/concat-map/package.json | 82 + .../node_modules/concat-map/test/map.js | 39 + .../node_modules/brace-expansion/package.json | 74 + .../node_modules/object-assign/index.js | 39 + .../node_modules/object-assign/license | 21 + .../node_modules/object-assign/package.json | 67 + .../node_modules/object-assign/readme.md | 51 + .../node_modules/path-is-absolute/index.js | 20 + .../node_modules/path-is-absolute/license | 21 + .../path-is-absolute/package.json | 69 + .../node_modules/path-is-absolute/readme.md | 51 + .../forever/node_modules/prettyjson/.jshintrc | 34 + .../node_modules/prettyjson/.npmignore | 3 + .../node_modules/prettyjson/.travis.yml | 6 + .../node_modules/prettyjson/Authors.md | 2 + .../node_modules/prettyjson/CONTRIBUTING.md | 53 + .../node_modules/prettyjson/History.md | 2 + .../forever/node_modules/prettyjson/LICENSE | 23 + .../forever/node_modules/prettyjson/README.md | 134 + .../node_modules/prettyjson/bin/prettyjson | 48 + .../prettyjson/images/example1.png | Bin 0 -> 42981 bytes .../prettyjson/images/example2.png | Bin 0 -> 43546 bytes .../prettyjson/images/example3.png | Bin 0 -> 216793 bytes .../prettyjson/images/example4.png | Bin 0 -> 173143 bytes .../prettyjson/images/example5.png | Bin 0 -> 118446 bytes .../node_modules/prettyjson/lib/prettyjson.js | 229 ++ .../node_modules/prettyjson/lib/utils.js | 25 + .../prettyjson/node_modules/colors/LICENSE | 23 + .../prettyjson/node_modules/colors/ReadMe.md | 178 + .../colors/examples/normal-usage.js | 74 + .../colors/examples/safe-string.js | 76 + .../node_modules/colors/lib/colors.js | 187 + .../node_modules/colors/lib/custom/trap.js | 45 + .../node_modules/colors/lib/custom/zalgo.js | 104 + .../colors/lib/extendStringPrototype.js | 113 + .../node_modules/colors/lib/index.js | 12 + .../node_modules/colors/lib/maps/america.js | 12 + .../node_modules/colors/lib/maps/rainbow.js | 13 + .../node_modules/colors/lib/maps/random.js | 8 + .../node_modules/colors/lib/maps/zebra.js | 5 + .../node_modules/colors/lib/styles.js | 77 + .../colors/lib/system/supports-colors.js | 61 + .../node_modules/colors/package.json | 58 + .../prettyjson/node_modules/colors/safe.js | 9 + .../colors/themes/generic-logging.js | 12 + .../node_modules/minimist/.travis.yml | 8 + .../prettyjson/node_modules/minimist/LICENSE | 18 + .../node_modules/minimist/example/parse.js | 2 + .../prettyjson/node_modules/minimist/index.js | 236 ++ .../node_modules/minimist/package.json | 70 + .../node_modules/minimist/readme.markdown | 91 + .../node_modules/minimist/test/all_bool.js | 32 + .../node_modules/minimist/test/bool.js | 166 + .../node_modules/minimist/test/dash.js | 31 + .../minimist/test/default_bool.js | 35 + .../node_modules/minimist/test/dotted.js | 22 + .../node_modules/minimist/test/kv_short.js | 16 + .../node_modules/minimist/test/long.js | 31 + .../node_modules/minimist/test/num.js | 36 + .../node_modules/minimist/test/parse.js | 197 + .../minimist/test/parse_modified.js | 9 + .../node_modules/minimist/test/short.js | 67 + .../node_modules/minimist/test/stop_early.js | 15 + .../node_modules/minimist/test/unknown.js | 102 + .../node_modules/minimist/test/whitespace.js | 8 + .../node_modules/prettyjson/package.json | 71 + .../prettyjson/test/prettyjson_spec.js | 348 ++ .../forever/node_modules/shush/.npmignore | 1 + .../forever/node_modules/shush/.travis.yml | 7 + .../forever/node_modules/shush/LICENSE | 18 + .../forever/node_modules/shush/README.md | 22 + .../forever/node_modules/shush/index.js | 41 + .../node_modules/.bin/strip-json-comments | 1 + .../shush/node_modules/caller/.npmignore | 2 + .../shush/node_modules/caller/LICENSE | 18 + .../shush/node_modules/caller/README.md | 35 + .../shush/node_modules/caller/index.js | 28 + .../caller/node_modules/.bin/tape | 1 + .../caller/node_modules/tape/.npmignore | 2 + .../caller/node_modules/tape/.travis.yml | 4 + .../caller/node_modules/tape/LICENSE | 18 + .../caller/node_modules/tape/bin/tape | 8 + .../caller/node_modules/tape/example/array.js | 35 + .../caller/node_modules/tape/example/fail.js | 35 + .../node_modules/tape/example/nested.js | 51 + .../node_modules/tape/example/nested_fail.js | 51 + .../node_modules/tape/example/not_enough.js | 35 + .../node_modules/tape/example/static/build.sh | 2 + .../tape/example/static/index.html | 21 + .../tape/example/static/server.js | 4 + .../caller/node_modules/tape/example/throw.js | 10 + .../node_modules/tape/example/timing.js | 12 + .../node_modules/tape/example/too_many.js | 35 + .../caller/node_modules/tape/example/two.js | 18 + .../caller/node_modules/tape/index.js | 134 + .../node_modules/tape/lib/default_stream.js | 24 + .../caller/node_modules/tape/lib/results.js | 174 + .../caller/node_modules/tape/lib/test.js | 425 +++ .../tape/node_modules/deep-equal/.travis.yml | 4 + .../node_modules/deep-equal/example/cmp.js | 11 + .../tape/node_modules/deep-equal/index.js | 75 + .../deep-equal/lib/is_arguments.js | 20 + .../tape/node_modules/deep-equal/lib/keys.js | 9 + .../tape/node_modules/deep-equal/package.json | 81 + .../node_modules/deep-equal/readme.markdown | 61 + .../tape/node_modules/deep-equal/test/cmp.js | 79 + .../tape/node_modules/defined/.travis.yml | 4 + .../tape/node_modules/defined/LICENSE | 18 + .../node_modules/defined/example/defined.js | 4 + .../tape/node_modules/defined/index.js | 5 + .../tape/node_modules/defined/package.json | 56 + .../tape/node_modules/defined/readme.markdown | 51 + .../tape/node_modules/defined/test/def.js | 22 + .../tape/node_modules/inherits/LICENSE | 16 + .../tape/node_modules/inherits/README.md | 42 + .../tape/node_modules/inherits/inherits.js | 1 + .../node_modules/inherits/inherits_browser.js | 23 + .../tape/node_modules/inherits/package.json | 50 + .../tape/node_modules/inherits/test.js | 25 + .../tape/node_modules/jsonify/README.markdown | 34 + .../tape/node_modules/jsonify/index.js | 2 + .../tape/node_modules/jsonify/lib/parse.js | 273 ++ .../node_modules/jsonify/lib/stringify.js | 154 + .../tape/node_modules/jsonify/package.json | 52 + .../tape/node_modules/jsonify/test/parse.js | 16 + .../node_modules/jsonify/test/stringify.js | 15 + .../tape/node_modules/resumer/.travis.yml | 4 + .../tape/node_modules/resumer/LICENSE | 18 + .../node_modules/resumer/example/resume.js | 8 + .../tape/node_modules/resumer/index.js | 29 + .../tape/node_modules/resumer/package.json | 68 + .../tape/node_modules/resumer/readme.markdown | 59 + .../tape/node_modules/resumer/test/resume.js | 37 + .../tape/node_modules/resumer/test/through.js | 36 + .../tape/node_modules/through/.travis.yml | 5 + .../tape/node_modules/through/LICENSE.APACHE2 | 15 + .../tape/node_modules/through/LICENSE.MIT | 24 + .../tape/node_modules/through/index.js | 108 + .../tape/node_modules/through/package.json | 65 + .../tape/node_modules/through/readme.markdown | 64 + .../tape/node_modules/through/test/async.js | 28 + .../node_modules/through/test/auto-destroy.js | 30 + .../node_modules/through/test/buffering.js | 71 + .../tape/node_modules/through/test/end.js | 45 + .../tape/node_modules/through/test/index.js | 133 + .../caller/node_modules/tape/package.json | 80 + .../caller/node_modules/tape/readme.markdown | 199 + .../tape/test/add-subtest-async.js | 11 + .../caller/node_modules/tape/test/array.js | 68 + .../node_modules/tape/test/browser/asserts.js | 9 + .../node_modules/tape/test/child_ordering.js | 54 + .../node_modules/tape/test/circular-things.js | 43 + .../caller/node_modules/tape/test/deep.js | 9 + .../caller/node_modules/tape/test/exit.js | 142 + .../node_modules/tape/test/exit/fail.js | 35 + .../caller/node_modules/tape/test/exit/ok.js | 35 + .../node_modules/tape/test/exit/second.js | 11 + .../node_modules/tape/test/exit/too_few.js | 35 + .../caller/node_modules/tape/test/fail.js | 68 + .../caller/node_modules/tape/test/many.js | 8 + .../node_modules/tape/test/max_listeners.js | 7 + .../tape/test/max_listeners/source.js | 5 + .../tape/test/nested-sync-noplan-noend.js | 50 + .../caller/node_modules/tape/test/nested.js | 89 + .../caller/node_modules/tape/test/only.js | 53 + .../caller/node_modules/tape/test/order.js | 17 + .../node_modules/tape/test/plan_optional.js | 15 + .../caller/node_modules/tape/test/skip.js | 34 + .../tape/test/subtest_and_async.js | 23 + .../node_modules/tape/test/subtest_plan.js | 21 + .../caller/node_modules/tape/test/throw.js | 38 + .../caller/node_modules/tape/test/too_many.js | 69 + .../shush/node_modules/caller/package.json | 56 + .../shush/node_modules/caller/test/caller.js | 42 + .../caller/test/fixtures/callee.js | 5 + .../node_modules/caller/test/fixtures/init.js | 6 + .../node_modules/strip-json-comments/cli.js | 41 + .../strip-json-comments/package.json | 76 + .../strip-json-comments/readme.md | 74 + .../strip-json-comments.js | 64 + .../forever/node_modules/shush/package.json | 59 + .../test/core/start-stop-json-array-test.js | 67 + .../test/core/start-stop-json-obj-test.js | 51 + .../forever/test/fixtures/server.json | 6 + .../forever/test/fixtures/servers.json | 15 + node_modules/forever/test/helpers/index.js | 31 + .../constantinople/node_modules/.bin/acorn | 1 + .../node_modules/acorn/.editorconfig | 7 + .../node_modules/acorn/.gitattributes | 1 + .../node_modules/acorn/.npmignore | 3 + .../node_modules/acorn/.tern-project | 6 + .../node_modules/acorn/.travis.yml | 2 + .../constantinople/node_modules/acorn/AUTHORS | 41 + .../constantinople/node_modules/acorn/LICENSE | 19 + .../node_modules/acorn/README.md | 377 ++ .../node_modules/acorn/bin/acorn | 55 + .../node_modules/acorn/bin/build-acorn.js | 51 + .../acorn/bin/generate-identifier-regex.js | 47 + .../node_modules/acorn/bin/update_authors.sh | 6 + .../node_modules/acorn/bin/without_eval | 48 + .../node_modules/acorn/dist/.keep | 0 .../node_modules/acorn/dist/acorn.js | 3312 +++++++++++++++++ .../node_modules/acorn/dist/acorn_csp.js | 3284 ++++++++++++++++ .../node_modules/acorn/dist/acorn_loose.js | 1273 +++++++ .../node_modules/acorn/dist/walk.js | 376 ++ .../node_modules/acorn/package.json | 179 + .../node_modules/acorn/src/expression.js | 694 ++++ .../node_modules/acorn/src/identifier.js | 129 + .../node_modules/acorn/src/index.js | 68 + .../node_modules/acorn/src/location.js | 24 + .../node_modules/acorn/src/locutil.js | 42 + .../acorn/src/loose/acorn_loose.js | 0 .../acorn/src/loose/expression.js | 512 +++ .../node_modules/acorn/src/loose/index.js | 49 + .../node_modules/acorn/src/loose/parseutil.js | 1 + .../node_modules/acorn/src/loose/state.js | 124 + .../node_modules/acorn/src/loose/statement.js | 421 +++ .../node_modules/acorn/src/loose/tokenize.js | 108 + .../node_modules/acorn/src/lval.js | 204 + .../node_modules/acorn/src/node.js | 50 + .../node_modules/acorn/src/options.js | 119 + .../node_modules/acorn/src/parseutil.js | 90 + .../node_modules/acorn/src/state.js | 91 + .../node_modules/acorn/src/statement.js | 612 +++ .../node_modules/acorn/src/tokencontext.js | 109 + .../node_modules/acorn/src/tokenize.js | 682 ++++ .../node_modules/acorn/src/tokentype.js | 142 + .../node_modules/acorn/src/util.js | 9 + .../node_modules/acorn/src/walk/index.js | 339 ++ .../node_modules/acorn/src/whitespace.js | 12 + .../acorn-globals/node_modules/.bin/acorn | 1 + .../node_modules/acorn/.editorconfig | 7 + .../node_modules/acorn/.gitattributes | 1 + .../node_modules/acorn/.npmignore | 3 + .../node_modules/acorn/.tern-project | 6 + .../node_modules/acorn/.travis.yml | 2 + .../acorn-globals/node_modules/acorn/AUTHORS | 41 + .../acorn-globals/node_modules/acorn/LICENSE | 19 + .../node_modules/acorn/README.md | 377 ++ .../node_modules/acorn/bin/acorn | 55 + .../node_modules/acorn/bin/build-acorn.js | 51 + .../acorn/bin/generate-identifier-regex.js | 47 + .../node_modules/acorn/bin/update_authors.sh | 6 + .../node_modules/acorn/bin/without_eval | 48 + .../node_modules/acorn/dist/.keep | 0 .../node_modules/acorn/dist/acorn.js | 3312 +++++++++++++++++ .../node_modules/acorn/dist/acorn_csp.js | 3284 ++++++++++++++++ .../node_modules/acorn/dist/acorn_loose.js | 1273 +++++++ .../node_modules/acorn/dist/walk.js | 376 ++ .../node_modules/acorn/package.json | 180 + .../node_modules/acorn/src/expression.js | 694 ++++ .../node_modules/acorn/src/identifier.js | 129 + .../node_modules/acorn/src/index.js | 68 + .../node_modules/acorn/src/location.js | 24 + .../node_modules/acorn/src/locutil.js | 42 + .../acorn/src/loose/acorn_loose.js | 0 .../acorn/src/loose/expression.js | 512 +++ .../node_modules/acorn/src/loose/index.js | 49 + .../node_modules/acorn/src/loose/parseutil.js | 1 + .../node_modules/acorn/src/loose/state.js | 124 + .../node_modules/acorn/src/loose/statement.js | 421 +++ .../node_modules/acorn/src/loose/tokenize.js | 108 + .../node_modules/acorn/src/lval.js | 204 + .../node_modules/acorn/src/node.js | 50 + .../node_modules/acorn/src/options.js | 119 + .../node_modules/acorn/src/parseutil.js | 90 + .../node_modules/acorn/src/state.js | 91 + .../node_modules/acorn/src/statement.js | 612 +++ .../node_modules/acorn/src/tokencontext.js | 109 + .../node_modules/acorn/src/tokenize.js | 682 ++++ .../node_modules/acorn/src/tokentype.js | 142 + .../node_modules/acorn/src/util.js | 9 + .../node_modules/acorn/src/walk/index.js | 339 ++ .../node_modules/acorn/src/whitespace.js | 12 + views/blogposts/10-28-15.html | 96 + 602 files changed, 63133 insertions(+) create mode 100644 node_modules/express/node_modules/vary/HISTORY.md create mode 100644 node_modules/forever/.editorconfig create mode 120000 node_modules/forever/node_modules/.bin/prettyjson create mode 100644 node_modules/forever/node_modules/clone/.npmignore create mode 100644 node_modules/forever/node_modules/clone/.travis.yml create mode 100644 node_modules/forever/node_modules/clone/LICENSE create mode 100644 node_modules/forever/node_modules/clone/README.md create mode 100644 node_modules/forever/node_modules/clone/clone.js create mode 100644 node_modules/forever/node_modules/clone/package.json create mode 100644 node_modules/forever/node_modules/clone/test-apart-ctx.html create mode 100644 node_modules/forever/node_modules/clone/test.html create mode 100644 node_modules/forever/node_modules/clone/test.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/CHANGELOG.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/README.md create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/lib/fsevents-handler.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/lib/nodefs-handler.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/index.js create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/LICENSE create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/README.md create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/lib/chars.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/lib/expand.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/lib/glob.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/lib/utils.js create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/LICENSE create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/README.md create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/index.js create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/arr-flatten/LICENSE create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/arr-flatten/README.md create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/arr-flatten/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/arr-flatten/package.json create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/array-slice/LICENSE create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/array-slice/README.md create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/array-slice/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/array-slice/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/package.json create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/array-unique/LICENSE create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/array-unique/README.md create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/array-unique/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/array-unique/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/index.js create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/LICENSE create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/README.md create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/index.js create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/LICENSE create mode 100755 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/is-number/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/is-number/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/is-number/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/is-number/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/isobject/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/isobject/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/isobject/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/isobject/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/randomatic/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/randomatic/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/randomatic/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/repeat-string/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/repeat-string/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/repeat-string/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/repeat-string/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/lazy-cache/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/lazy-cache/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/lazy-cache/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/lazy-cache/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.gitattributes create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.jshintrc create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.npmignore create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.travis.yml create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.verb.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/test.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/repeat-element/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/repeat-element/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/repeat-element/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/repeat-element/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/expand-brackets/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/expand-brackets/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/expand-brackets/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/expand-brackets/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/node_modules/ansi-wrap/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/node_modules/ansi-wrap/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/node_modules/ansi-wrap/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/node_modules/ansi-wrap/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/readme.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/is-extglob/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/is-extglob/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/is-extglob/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/is-extglob/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/success-symbol/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/success-symbol/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/success-symbol/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/success-symbol/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/filename-regex/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/filename-regex/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/filename-regex/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/is-glob/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/is-glob/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/is-glob/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/is-glob/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/kind-of/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/kind-of/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/kind-of/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/node_modules/for-in/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/node_modules/for-in/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/node_modules/for-in/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/node_modules/for-in/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/isobject/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/isobject/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/isobject/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/isobject/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/glob-base/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/glob-base/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/glob-base/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/glob-base/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-dotfile/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-dotfile/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-dotfile/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-dotfile/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-extglob/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-extglob/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-extglob/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-extglob/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-glob/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-glob/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-glob/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-glob/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-equal-shallow/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-equal-shallow/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-equal-shallow/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-equal-shallow/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-primitive/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-primitive/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-primitive/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-primitive/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/arrify/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/arrify/license create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/arrify/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/arrify/readme.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/.npmignore create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/CHANGELOG.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/bower.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/component.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/glob-parent/.npmignore create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/glob-parent/.travis.yml create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/glob-parent/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/glob-parent/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/glob-parent/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/glob-parent/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/glob-parent/test.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/is-binary-path/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/is-binary-path/license create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/is-binary-path/node_modules/binary-extensions/binary-extensions.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/is-binary-path/node_modules/binary-extensions/license create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/is-binary-path/node_modules/binary-extensions/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/is-binary-path/node_modules/binary-extensions/readme.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/is-binary-path/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/is-binary-path/readme.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/is-glob/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/is-glob/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/is-glob/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/is-glob/node_modules/is-extglob/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/is-glob/node_modules/is-extglob/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/is-glob/node_modules/is-extglob/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/is-glob/node_modules/is-extglob/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/is-glob/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/LICENSE.txt create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/node_modules/lodash._baseflatten/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/node_modules/lodash._baseflatten/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/node_modules/lodash._baseflatten/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/node_modules/lodash._baseflatten/node_modules/lodash.isarguments/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/node_modules/lodash._baseflatten/node_modules/lodash.isarguments/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/node_modules/lodash._baseflatten/node_modules/lodash.isarguments/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/node_modules/lodash._baseflatten/node_modules/lodash.isarguments/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/node_modules/lodash._baseflatten/node_modules/lodash.isarray/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/node_modules/lodash._baseflatten/node_modules/lodash.isarray/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/node_modules/lodash._baseflatten/node_modules/lodash.isarray/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/node_modules/lodash._baseflatten/node_modules/lodash.isarray/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/node_modules/lodash._baseflatten/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/node_modules/lodash._isiterateecall/LICENSE.txt create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/node_modules/lodash._isiterateecall/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/node_modules/lodash._isiterateecall/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/node_modules/lodash._isiterateecall/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/lodash.flatten/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/.npmignore create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/.travis.yml create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/examples/Readme.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/examples/callback-api.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/examples/grep.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/examples/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/examples/stream-api-pipe.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/examples/stream-api.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/graceful-fs/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/graceful-fs/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/graceful-fs/fs.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/graceful-fs/graceful-fs.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/graceful-fs/legacy-streams.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/graceful-fs/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/graceful-fs/polyfills.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/.npmignore create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/.travis.yml create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/.zuul.yml create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/doc/stream.markdown create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/duplex.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/lib/_stream_duplex.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/lib/_stream_passthrough.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/lib/_stream_readable.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/lib/_stream_transform.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/lib/_stream_writable.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/core-util-is/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/core-util-is/float.patch create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/core-util-is/lib/util.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/core-util-is/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/core-util-is/util.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/inherits/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/inherits/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/inherits/inherits.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/inherits/inherits_browser.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/inherits/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/inherits/test.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/isarray/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/isarray/build/build.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/isarray/component.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/isarray/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/isarray/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/process-nextick-args/.travis.yml create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/process-nextick-args/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/process-nextick-args/license.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/process-nextick-args/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/process-nextick-args/readme.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/process-nextick-args/test.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/string_decoder/.npmignore create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/string_decoder/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/string_decoder/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/string_decoder/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/string_decoder/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/util-deprecate/History.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/util-deprecate/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/util-deprecate/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/util-deprecate/browser.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/util-deprecate/node.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/node_modules/util-deprecate/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/passthrough.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/readable.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/transform.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/node_modules/readable-stream/writable.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/readdirp.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/stream-api.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/test/bed/root_dir1/root_dir1_file1.ext1 create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/test/bed/root_dir1/root_dir1_file2.ext2 create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/test/bed/root_dir1/root_dir1_file3.ext3 create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/test/bed/root_dir1/root_dir1_subdir1/root1_dir1_subdir1_file1.ext1 create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/test/bed/root_dir2/root_dir2_file1.ext1 create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/test/bed/root_dir2/root_dir2_file2.ext2 create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/test/bed/root_file1.ext1 create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/test/bed/root_file2.ext2 create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/test/bed/root_file3.ext3 create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/test/readdirp-stream.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/readdirp/test/readdirp.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/browser.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/.npmignore create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/example.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js create mode 100644 node_modules/forever/node_modules/forever-monitor/node_modules/minimatch/node_modules/brace-expansion/package.json create mode 100644 node_modules/forever/node_modules/object-assign/index.js create mode 100644 node_modules/forever/node_modules/object-assign/license create mode 100644 node_modules/forever/node_modules/object-assign/package.json create mode 100644 node_modules/forever/node_modules/object-assign/readme.md create mode 100644 node_modules/forever/node_modules/path-is-absolute/index.js create mode 100644 node_modules/forever/node_modules/path-is-absolute/license create mode 100644 node_modules/forever/node_modules/path-is-absolute/package.json create mode 100644 node_modules/forever/node_modules/path-is-absolute/readme.md create mode 100644 node_modules/forever/node_modules/prettyjson/.jshintrc create mode 100644 node_modules/forever/node_modules/prettyjson/.npmignore create mode 100644 node_modules/forever/node_modules/prettyjson/.travis.yml create mode 100644 node_modules/forever/node_modules/prettyjson/Authors.md create mode 100644 node_modules/forever/node_modules/prettyjson/CONTRIBUTING.md create mode 100644 node_modules/forever/node_modules/prettyjson/History.md create mode 100644 node_modules/forever/node_modules/prettyjson/LICENSE create mode 100644 node_modules/forever/node_modules/prettyjson/README.md create mode 100755 node_modules/forever/node_modules/prettyjson/bin/prettyjson create mode 100644 node_modules/forever/node_modules/prettyjson/images/example1.png create mode 100644 node_modules/forever/node_modules/prettyjson/images/example2.png create mode 100644 node_modules/forever/node_modules/prettyjson/images/example3.png create mode 100644 node_modules/forever/node_modules/prettyjson/images/example4.png create mode 100644 node_modules/forever/node_modules/prettyjson/images/example5.png create mode 100644 node_modules/forever/node_modules/prettyjson/lib/prettyjson.js create mode 100644 node_modules/forever/node_modules/prettyjson/lib/utils.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/LICENSE create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/ReadMe.md create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/examples/normal-usage.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/examples/safe-string.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/lib/colors.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/lib/custom/trap.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/lib/custom/zalgo.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/lib/extendStringPrototype.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/lib/index.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/lib/maps/america.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/lib/maps/rainbow.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/lib/maps/random.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/lib/maps/zebra.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/lib/styles.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/lib/system/supports-colors.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/package.json create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/safe.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/colors/themes/generic-logging.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/.travis.yml create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/LICENSE create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/example/parse.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/index.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/package.json create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/readme.markdown create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/test/all_bool.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/test/bool.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/test/dash.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/test/default_bool.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/test/dotted.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/test/kv_short.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/test/long.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/test/num.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/test/parse.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/test/parse_modified.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/test/short.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/test/stop_early.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/test/unknown.js create mode 100644 node_modules/forever/node_modules/prettyjson/node_modules/minimist/test/whitespace.js create mode 100644 node_modules/forever/node_modules/prettyjson/package.json create mode 100644 node_modules/forever/node_modules/prettyjson/test/prettyjson_spec.js create mode 100644 node_modules/forever/node_modules/shush/.npmignore create mode 100644 node_modules/forever/node_modules/shush/.travis.yml create mode 100644 node_modules/forever/node_modules/shush/LICENSE create mode 100644 node_modules/forever/node_modules/shush/README.md create mode 100644 node_modules/forever/node_modules/shush/index.js create mode 120000 node_modules/forever/node_modules/shush/node_modules/.bin/strip-json-comments create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/.npmignore create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/LICENSE create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/README.md create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/index.js create mode 120000 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/.bin/tape create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/.npmignore create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/.travis.yml create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/LICENSE create mode 100755 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/bin/tape create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/array.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/fail.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/nested.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/nested_fail.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/not_enough.js create mode 100755 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/static/build.sh create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/static/index.html create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/static/server.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/throw.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/timing.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/too_many.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/two.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/index.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/lib/default_stream.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/lib/results.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/lib/test.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/.travis.yml create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/example/cmp.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/index.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/lib/is_arguments.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/lib/keys.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/package.json create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/readme.markdown create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/test/cmp.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/.travis.yml create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/LICENSE create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/example/defined.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/index.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/package.json create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/readme.markdown create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/test/def.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/LICENSE create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/README.md create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/inherits.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/inherits_browser.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/package.json create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/test.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/README.markdown create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/index.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/lib/parse.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/lib/stringify.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/package.json create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/test/parse.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/test/stringify.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/.travis.yml create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/LICENSE create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/example/resume.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/index.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/package.json create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/readme.markdown create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/test/resume.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/test/through.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/.travis.yml create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/LICENSE.APACHE2 create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/LICENSE.MIT create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/index.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/package.json create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/readme.markdown create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/async.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/auto-destroy.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/buffering.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/end.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/index.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/package.json create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/readme.markdown create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/add-subtest-async.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/array.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/browser/asserts.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/child_ordering.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/circular-things.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/deep.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit/fail.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit/ok.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit/second.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit/too_few.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/fail.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/many.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/max_listeners.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/max_listeners/source.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/nested-sync-noplan-noend.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/nested.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/only.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/order.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/plan_optional.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/skip.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/subtest_and_async.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/subtest_plan.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/throw.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/too_many.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/package.json create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/test/caller.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/test/fixtures/callee.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/caller/test/fixtures/init.js create mode 100755 node_modules/forever/node_modules/shush/node_modules/strip-json-comments/cli.js create mode 100644 node_modules/forever/node_modules/shush/node_modules/strip-json-comments/package.json create mode 100644 node_modules/forever/node_modules/shush/node_modules/strip-json-comments/readme.md create mode 100644 node_modules/forever/node_modules/shush/node_modules/strip-json-comments/strip-json-comments.js create mode 100644 node_modules/forever/node_modules/shush/package.json create mode 100644 node_modules/forever/test/core/start-stop-json-array-test.js create mode 100644 node_modules/forever/test/core/start-stop-json-obj-test.js create mode 100644 node_modules/forever/test/fixtures/server.json create mode 100644 node_modules/forever/test/fixtures/servers.json create mode 100644 node_modules/forever/test/helpers/index.js create mode 120000 node_modules/jade/node_modules/constantinople/node_modules/.bin/acorn create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/.editorconfig create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/.gitattributes create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/.npmignore create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/.tern-project create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/.travis.yml create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/AUTHORS create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/LICENSE create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/README.md create mode 100755 node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/acorn create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/build-acorn.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/generate-identifier-regex.js create mode 100755 node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/update_authors.sh create mode 100755 node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/without_eval create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/dist/.keep create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/dist/acorn.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/dist/acorn_csp.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/dist/acorn_loose.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/dist/walk.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/package.json create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/expression.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/identifier.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/index.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/location.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/locutil.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/loose/acorn_loose.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/loose/expression.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/loose/index.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/loose/parseutil.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/loose/state.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/loose/statement.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/loose/tokenize.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/lval.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/node.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/options.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/parseutil.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/state.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/statement.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/tokencontext.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/tokenize.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/tokentype.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/util.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/walk/index.js create mode 100644 node_modules/jade/node_modules/constantinople/node_modules/acorn/src/whitespace.js create mode 120000 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/.bin/acorn create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/.editorconfig create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/.gitattributes create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/.npmignore create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/.tern-project create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/.travis.yml create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/AUTHORS create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/LICENSE create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/README.md create mode 100755 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/bin/acorn create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/bin/build-acorn.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/bin/generate-identifier-regex.js create mode 100755 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/bin/update_authors.sh create mode 100755 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/bin/without_eval create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/dist/.keep create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/dist/acorn.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/dist/acorn_csp.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/dist/acorn_loose.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/dist/walk.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/package.json create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/expression.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/identifier.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/index.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/location.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/locutil.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/loose/acorn_loose.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/loose/expression.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/loose/index.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/loose/parseutil.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/loose/state.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/loose/statement.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/loose/tokenize.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/lval.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/node.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/options.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/parseutil.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/state.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/statement.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/tokencontext.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/tokenize.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/tokentype.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/util.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/walk/index.js create mode 100644 node_modules/jade/node_modules/with/node_modules/acorn-globals/node_modules/acorn/src/whitespace.js create mode 100644 views/blogposts/10-28-15.html diff --git a/node_modules/express/node_modules/vary/HISTORY.md b/node_modules/express/node_modules/vary/HISTORY.md new file mode 100644 index 0000000..cddbcd4 --- /dev/null +++ b/node_modules/express/node_modules/vary/HISTORY.md @@ -0,0 +1,23 @@ +1.0.1 / 2015-07-08 +================== + + * Fix setting empty header from empty `field` + * perf: enable strict mode + * perf: remove argument reassignments + +1.0.0 / 2014-08-10 +================== + + * Accept valid `Vary` header string as `field` + * Add `vary.append` for low-level string manipulation + * Move to `jshttp` orgainzation + +0.1.0 / 2014-06-05 +================== + + * Support array of fields to set + +0.0.0 / 2014-06-04 +================== + + * Initial release diff --git a/node_modules/forever/.editorconfig b/node_modules/forever/.editorconfig new file mode 100644 index 0000000..0f3bb61 --- /dev/null +++ b/node_modules/forever/.editorconfig @@ -0,0 +1,3 @@ +[*.js] +indent_style = space +indent_size = 2 diff --git a/node_modules/forever/node_modules/.bin/prettyjson b/node_modules/forever/node_modules/.bin/prettyjson new file mode 120000 index 0000000..cf94c3b --- /dev/null +++ b/node_modules/forever/node_modules/.bin/prettyjson @@ -0,0 +1 @@ +../prettyjson/bin/prettyjson \ No newline at end of file diff --git a/node_modules/forever/node_modules/clone/.npmignore b/node_modules/forever/node_modules/clone/.npmignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/node_modules/forever/node_modules/clone/.npmignore @@ -0,0 +1 @@ +node_modules/ diff --git a/node_modules/forever/node_modules/clone/.travis.yml b/node_modules/forever/node_modules/clone/.travis.yml new file mode 100644 index 0000000..20fd86b --- /dev/null +++ b/node_modules/forever/node_modules/clone/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - 0.10 diff --git a/node_modules/forever/node_modules/clone/LICENSE b/node_modules/forever/node_modules/clone/LICENSE new file mode 100644 index 0000000..cc3c87b --- /dev/null +++ b/node_modules/forever/node_modules/clone/LICENSE @@ -0,0 +1,18 @@ +Copyright © 2011-2015 Paul Vorbach + +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, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/forever/node_modules/clone/README.md b/node_modules/forever/node_modules/clone/README.md new file mode 100644 index 0000000..0b6ceca --- /dev/null +++ b/node_modules/forever/node_modules/clone/README.md @@ -0,0 +1,126 @@ +# clone + +[![build status](https://secure.travis-ci.org/pvorb/node-clone.png)](http://travis-ci.org/pvorb/node-clone) + +[![info badge](https://nodei.co/npm/clone.png?downloads=true&downloadRank=true&stars=true)](http://npm-stat.com/charts.html?package=clone) + +offers foolproof _deep cloning_ of objects, arrays, numbers, strings etc. in JavaScript. + + +## Installation + + npm install clone + +(It also works with browserify, ender or standalone.) + + +## Example + +~~~ javascript +var clone = require('clone'); + +var a, b; + +a = { foo: { bar: 'baz' } }; // initial value of a + +b = clone(a); // clone a -> b +a.foo.bar = 'foo'; // change a + +console.log(a); // show a +console.log(b); // show b +~~~ + +This will print: + +~~~ javascript +{ foo: { bar: 'foo' } } +{ foo: { bar: 'baz' } } +~~~ + +**clone** masters cloning simple objects (even with custom prototype), arrays, +Date objects, and RegExp objects. Everything is cloned recursively, so that you +can clone dates in arrays in objects, for example. + + +## API + +`clone(val, circular, depth)` + + * `val` -- the value that you want to clone, any type allowed + * `circular` -- boolean + + Call `clone` with `circular` set to `false` if you are certain that `obj` + contains no circular references. This will give better performance if needed. + There is no error if `undefined` or `null` is passed as `obj`. + * `depth` -- depth to which the object is to be cloned (optional, + defaults to infinity) + +`clone.clonePrototype(obj)` + + * `obj` -- the object that you want to clone + +Does a prototype clone as +[described by Oran Looney](http://oranlooney.com/functional-javascript/). + + +## Circular References + +~~~ javascript +var a, b; + +a = { hello: 'world' }; + +a.myself = a; +b = clone(a); + +console.log(b); +~~~ + +This will print: + +~~~ javascript +{ hello: "world", myself: [Circular] } +~~~ + +So, `b.myself` points to `b`, not `a`. Neat! + + +## Test + + npm test + + +## Caveat + +Some special objects like a socket or `process.stdout`/`stderr` are known to not +be cloneable. If you find other objects that cannot be cloned, please [open an +issue](https://github.com/pvorb/node-clone/issues/new). + + +## Bugs and Issues + +If you encounter any bugs or issues, feel free to [open an issue at +github](https://github.com/pvorb/node-clone/issues) or send me an email to +. I also always like to hear from you, if you’re using my code. + +## License + +Copyright © 2011-2015 [Paul Vorbach](http://paul.vorba.ch/) and +[contributors](https://github.com/pvorb/node-clone/graphs/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, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/forever/node_modules/clone/clone.js b/node_modules/forever/node_modules/clone/clone.js new file mode 100644 index 0000000..6263759 --- /dev/null +++ b/node_modules/forever/node_modules/clone/clone.js @@ -0,0 +1,160 @@ +var clone = (function() { +'use strict'; + +/** + * Clones (copies) an Object using deep copying. + * + * This function supports circular references by default, but if you are certain + * there are no circular references in your object, you can save some CPU time + * by calling clone(obj, false). + * + * Caution: if `circular` is false and `parent` contains circular references, + * your program may enter an infinite loop and crash. + * + * @param `parent` - the object to be cloned + * @param `circular` - set to true if the object to be cloned may contain + * circular references. (optional - true by default) + * @param `depth` - set to a number if the object is only to be cloned to + * a particular depth. (optional - defaults to Infinity) + * @param `prototype` - sets the prototype to be used when cloning an object. + * (optional - defaults to parent prototype). +*/ +function clone(parent, circular, depth, prototype) { + var filter; + if (typeof circular === 'object') { + depth = circular.depth; + prototype = circular.prototype; + filter = circular.filter; + circular = circular.circular + } + // maintain two arrays for circular references, where corresponding parents + // and children have the same index + var allParents = []; + var allChildren = []; + + var useBuffer = typeof Buffer != 'undefined'; + + if (typeof circular == 'undefined') + circular = true; + + if (typeof depth == 'undefined') + depth = Infinity; + + // recurse this function so we don't reset allParents and allChildren + function _clone(parent, depth) { + // cloning null always returns null + if (parent === null) + return null; + + if (depth == 0) + return parent; + + var child; + var proto; + if (typeof parent != 'object') { + return parent; + } + + if (clone.__isArray(parent)) { + child = []; + } else if (clone.__isRegExp(parent)) { + child = new RegExp(parent.source, __getRegExpFlags(parent)); + if (parent.lastIndex) child.lastIndex = parent.lastIndex; + } else if (clone.__isDate(parent)) { + child = new Date(parent.getTime()); + } else if (useBuffer && Buffer.isBuffer(parent)) { + child = new Buffer(parent.length); + parent.copy(child); + return child; + } else { + if (typeof prototype == 'undefined') { + proto = Object.getPrototypeOf(parent); + child = Object.create(proto); + } + else { + child = Object.create(prototype); + proto = prototype; + } + } + + if (circular) { + var index = allParents.indexOf(parent); + + if (index != -1) { + return allChildren[index]; + } + allParents.push(parent); + allChildren.push(child); + } + + for (var i in parent) { + var attrs; + if (proto) { + attrs = Object.getOwnPropertyDescriptor(proto, i); + } + + if (attrs && attrs.set == null) { + continue; + } + child[i] = _clone(parent[i], depth - 1); + } + + return child; + } + + return _clone(parent, depth); +} + +/** + * Simple flat clone using prototype, accepts only objects, usefull for property + * override on FLAT configuration object (no nested props). + * + * USE WITH CAUTION! This may not behave as you wish if you do not know how this + * works. + */ +clone.clonePrototype = function clonePrototype(parent) { + if (parent === null) + return null; + + var c = function () {}; + c.prototype = parent; + return new c(); +}; + +// private utility functions + +function __objToStr(o) { + return Object.prototype.toString.call(o); +}; +clone.__objToStr = __objToStr; + +function __isDate(o) { + return typeof o === 'object' && __objToStr(o) === '[object Date]'; +}; +clone.__isDate = __isDate; + +function __isArray(o) { + return typeof o === 'object' && __objToStr(o) === '[object Array]'; +}; +clone.__isArray = __isArray; + +function __isRegExp(o) { + return typeof o === 'object' && __objToStr(o) === '[object RegExp]'; +}; +clone.__isRegExp = __isRegExp; + +function __getRegExpFlags(re) { + var flags = ''; + if (re.global) flags += 'g'; + if (re.ignoreCase) flags += 'i'; + if (re.multiline) flags += 'm'; + return flags; +}; +clone.__getRegExpFlags = __getRegExpFlags; + +return clone; +})(); + +if (typeof module === 'object' && module.exports) { + module.exports = clone; +} diff --git a/node_modules/forever/node_modules/clone/package.json b/node_modules/forever/node_modules/clone/package.json new file mode 100644 index 0000000..f1aa687 --- /dev/null +++ b/node_modules/forever/node_modules/clone/package.json @@ -0,0 +1,133 @@ +{ + "name": "clone", + "description": "deep cloning of objects and arrays", + "tags": [ + "clone", + "object", + "array", + "function", + "date" + ], + "version": "1.0.2", + "repository": { + "type": "git", + "url": "git://github.com/pvorb/node-clone.git" + }, + "bugs": { + "url": "https://github.com/pvorb/node-clone/issues" + }, + "main": "clone.js", + "author": { + "name": "Paul Vorbach", + "email": "paul@vorba.ch", + "url": "http://paul.vorba.ch/" + }, + "contributors": [ + { + "name": "Blake Miner", + "email": "miner.blake@gmail.com", + "url": "http://www.blakeminer.com/" + }, + { + "name": "Tian You", + "email": "axqd001@gmail.com", + "url": "http://blog.axqd.net/" + }, + { + "name": "George Stagas", + "email": "gstagas@gmail.com", + "url": "http://stagas.com/" + }, + { + "name": "Tobiasz Cudnik", + "email": "tobiasz.cudnik@gmail.com", + "url": "https://github.com/TobiaszCudnik" + }, + { + "name": "Pavel Lang", + "email": "langpavel@phpskelet.org", + "url": "https://github.com/langpavel" + }, + { + "name": "Dan MacTough", + "url": "http://yabfog.com/" + }, + { + "name": "w1nk", + "url": "https://github.com/w1nk" + }, + { + "name": "Hugh Kennedy", + "url": "http://twitter.com/hughskennedy" + }, + { + "name": "Dustin Diaz", + "url": "http://dustindiaz.com" + }, + { + "name": "Ilya Shaisultanov", + "url": "https://github.com/diversario" + }, + { + "name": "Nathan MacInnes", + "email": "nathan@macinn.es", + "url": "http://macinn.es/" + }, + { + "name": "Benjamin E. Coe", + "email": "ben@npmjs.com", + "url": "https://twitter.com/benjamincoe" + }, + { + "name": "Nathan Zadoks", + "url": "https://github.com/nathan7" + }, + { + "name": "Róbert Oroszi", + "email": "robert+gh@oroszi.net", + "url": "https://github.com/oroce" + }, + { + "name": "Aurélio A. Heckert", + "url": "http://softwarelivre.org/aurium" + }, + { + "name": "Guy Ellis", + "url": "http://www.guyellisrocks.com/" + } + ], + "license": "MIT", + "engines": { + "node": ">=0.8" + }, + "dependencies": {}, + "devDependencies": { + "nodeunit": "~0.9.0" + }, + "optionalDependencies": {}, + "scripts": { + "test": "nodeunit test.js" + }, + "gitHead": "0e8216efc672496b612fd7ab62159117d16ec4a0", + "homepage": "https://github.com/pvorb/node-clone", + "_id": "clone@1.0.2", + "_shasum": "260b7a99ebb1edfe247538175f783243cb19d149", + "_from": "clone@>=1.0.2 <2.0.0", + "_npmVersion": "1.4.14", + "_npmUser": { + "name": "pvorb", + "email": "paul@vorba.ch" + }, + "maintainers": [ + { + "name": "pvorb", + "email": "paul@vorb.de" + } + ], + "dist": { + "shasum": "260b7a99ebb1edfe247538175f783243cb19d149", + "tarball": "http://registry.npmjs.org/clone/-/clone-1.0.2.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz" +} diff --git a/node_modules/forever/node_modules/clone/test-apart-ctx.html b/node_modules/forever/node_modules/clone/test-apart-ctx.html new file mode 100644 index 0000000..4d532bb --- /dev/null +++ b/node_modules/forever/node_modules/clone/test-apart-ctx.html @@ -0,0 +1,22 @@ + + + + Clone Test-Suite (Browser) + + + + + diff --git a/node_modules/forever/node_modules/clone/test.html b/node_modules/forever/node_modules/clone/test.html new file mode 100644 index 0000000..a955702 --- /dev/null +++ b/node_modules/forever/node_modules/clone/test.html @@ -0,0 +1,148 @@ + + + + + Clone Test-Suite (Browser) + + + + + +

Clone Test-Suite (Browser)

+ Tests started: ; + Tests finished: . +
    + + + diff --git a/node_modules/forever/node_modules/clone/test.js b/node_modules/forever/node_modules/clone/test.js new file mode 100644 index 0000000..e8b65b3 --- /dev/null +++ b/node_modules/forever/node_modules/clone/test.js @@ -0,0 +1,372 @@ +var clone = require('./'); + +function inspect(obj) { + seen = []; + return JSON.stringify(obj, function (key, val) { + if (val != null && typeof val == "object") { + if (seen.indexOf(val) >= 0) { + return '[cyclic]'; + } + + seen.push(val); + } + + return val; + }); +} + +// Creates a new VM in node, or an iframe in a browser in order to run the +// script +function apartContext(context, script, callback) { + var vm = require('vm'); + + if (vm) { + var ctx = vm.createContext({ ctx: context }); + callback(vm.runInContext(script, ctx)); + } else if (document && document.createElement) { + var iframe = document.createElement('iframe'); + iframe.style.display = 'none'; + document.body.appendChild(iframe); + + var myCtxId = 'tmpCtx' + Math.random(); + + window[myCtxId] = context; + iframe.src = 'test-apart-ctx.html?' + myCtxId + '&' + encodeURIComponent(script); + iframe.onload = function() { + try { + callback(iframe.contentWindow.results); + } catch (e) { + throw e; + } + }; + } else { + console.log('WARNING: cannot create an apart context.'); + } +} + +exports["clone string"] = function (test) { + test.expect(2); // how many tests? + + var a = "foo"; + test.strictEqual(clone(a), a); + a = ""; + test.strictEqual(clone(a), a); + + test.done(); +}; + +exports["clone number"] = function (test) { + test.expect(5); // how many tests? + + var a = 0; + test.strictEqual(clone(a), a); + a = 1; + test.strictEqual(clone(a), a); + a = -1000; + test.strictEqual(clone(a), a); + a = 3.1415927; + test.strictEqual(clone(a), a); + a = -3.1415927; + test.strictEqual(clone(a), a); + + test.done(); +}; + +exports["clone date"] = function (test) { + test.expect(3); // how many tests? + + var a = new Date; + var c = clone(a); + test.ok(!!a.getUTCDate && !!a.toUTCString); + test.ok(!!c.getUTCDate && !!c.toUTCString); + test.equal(a.getTime(), c.getTime()); + + test.done(); +}; + +exports["clone object"] = function (test) { + test.expect(1); // how many tests? + + var a = { foo: { bar: "baz" } }; + var b = clone(a); + + test.deepEqual(b, a); + + test.done(); +}; + +exports["clone array"] = function (test) { + test.expect(2); // how many tests? + + var a = [ + { foo: "bar" }, + "baz" + ]; + var b = clone(a); + + test.ok(b instanceof Array); + test.deepEqual(b, a); + + test.done(); +}; + +exports["clone buffer"] = function (test) { + if (typeof Buffer == 'undefined') { + return test.done(); + } + + test.expect(1); + + var a = new Buffer("this is a test buffer"); + var b = clone(a); + + // no underscore equal since it has no concept of Buffers + test.deepEqual(b, a); + test.done(); +}; + +exports["clone regexp"] = function (test) { + test.expect(5); + + var a = /abc123/gi; + var b = clone(a); + test.deepEqual(b, a); + + var c = /a/g; + test.ok(c.lastIndex === 0); + + c.exec('123a456a'); + test.ok(c.lastIndex === 4); + + var d = clone(c); + test.ok(d.global); + test.ok(d.lastIndex === 4); + + test.done(); +}; + +exports["clone object containing array"] = function (test) { + test.expect(1); // how many tests? + + var a = { + arr1: [ { a: '1234', b: '2345' } ], + arr2: [ { c: '345', d: '456' } ] + }; + + var b = clone(a); + + test.deepEqual(b, a); + + test.done(); +}; + +exports["clone object with circular reference"] = function (test) { + test.expect(8); // how many tests? + + var c = [1, "foo", {'hello': 'bar'}, function () {}, false, [2]]; + var b = [c, 2, 3, 4]; + + var a = {'b': b, 'c': c}; + a.loop = a; + a.loop2 = a; + c.loop = c; + c.aloop = a; + + var aCopy = clone(a); + test.ok(a != aCopy); + test.ok(a.c != aCopy.c); + test.ok(aCopy.c == aCopy.b[0]); + test.ok(aCopy.c.loop.loop.aloop == aCopy); + test.ok(aCopy.c[0] == a.c[0]); + + test.ok(eq(a, aCopy)); + aCopy.c[0] = 2; + test.ok(!eq(a, aCopy)); + aCopy.c = "2"; + test.ok(!eq(a, aCopy)); + + function eq(x, y) { + return inspect(x) === inspect(y); + } + + test.done(); +}; + +exports['clone prototype'] = function (test) { + test.expect(3); // how many tests? + + var a = { + a: "aaa", + x: 123, + y: 45.65 + }; + var b = clone.clonePrototype(a); + + test.strictEqual(b.a, a.a); + test.strictEqual(b.x, a.x); + test.strictEqual(b.y, a.y); + + test.done(); +}; + +exports['clone within an apart context'] = function (test) { + var results = apartContext({ clone: clone }, + "results = ctx.clone({ a: [1, 2, 3], d: new Date(), r: /^foo$/ig })", + function (results) { + test.ok(results.a.constructor.toString() === Array.toString()); + test.ok(results.d.constructor.toString() === Date.toString()); + test.ok(results.r.constructor.toString() === RegExp.toString()); + test.done(); + }); +}; + +exports['clone object with no constructor'] = function (test) { + test.expect(3); + + var n = null; + + var a = { foo: 'bar' }; + a.__proto__ = n; + test.ok(typeof a === 'object'); + test.ok(typeof a !== null); + + var b = clone(a); + test.ok(a.foo, b.foo); + + test.done(); +}; + +exports['clone object with depth argument'] = function (test) { + test.expect(6); + + var a = { + foo: { + bar : { + baz : 'qux' + } + } + }; + + var b = clone(a, false, 1); + test.deepEqual(b, a); + test.notEqual(b, a); + test.strictEqual(b.foo, a.foo); + + b = clone(a, true, 2); + test.deepEqual(b, a); + test.notEqual(b.foo, a.foo); + test.strictEqual(b.foo.bar, a.foo.bar); + + test.done(); +}; + +exports['maintain prototype chain in clones'] = function (test) { + test.expect(1); + + function T() {} + + var a = new T(); + var b = clone(a); + test.strictEqual(Object.getPrototypeOf(a), Object.getPrototypeOf(b)); + + test.done(); +}; + +exports['parent prototype is overriden with prototype provided'] = function (test) { + test.expect(1); + + function T() {} + + var a = new T(); + var b = clone(a, true, Infinity, null); + test.strictEqual(b.__defineSetter__, undefined); + + test.done(); +}; + +exports['clone object with null children'] = function (test) { + test.expect(1); + var a = { + foo: { + bar: null, + baz: { + qux: false + } + } + }; + + var b = clone(a); + + test.deepEqual(b, a); + test.done(); +}; + +exports['clone instance with getter'] = function (test) { + test.expect(1); + function Ctor() {}; + Object.defineProperty(Ctor.prototype, 'prop', { + configurable: true, + enumerable: true, + get: function() { + return 'value'; + } + }); + + var a = new Ctor(); + var b = clone(a); + + test.strictEqual(b.prop, 'value'); + test.done(); +}; + +exports['get RegExp flags'] = function (test) { + test.strictEqual(clone.__getRegExpFlags(/a/), '' ); + test.strictEqual(clone.__getRegExpFlags(/a/i), 'i' ); + test.strictEqual(clone.__getRegExpFlags(/a/g), 'g' ); + test.strictEqual(clone.__getRegExpFlags(/a/gi), 'gi'); + test.strictEqual(clone.__getRegExpFlags(/a/m), 'm' ); + + test.done(); +}; + +exports["recognize Array object"] = function (test) { + var results = apartContext(null, "results = [1, 2, 3]", function(alien) { + var local = [4, 5, 6]; + test.ok(clone.__isArray(alien)); // recognize in other context. + test.ok(clone.__isArray(local)); // recognize in local context. + test.ok(!clone.__isDate(alien)); + test.ok(!clone.__isDate(local)); + test.ok(!clone.__isRegExp(alien)); + test.ok(!clone.__isRegExp(local)); + test.done(); + }); +}; + +exports["recognize Date object"] = function (test) { + var results = apartContext(null, "results = new Date()", function(alien) { + var local = new Date(); + + test.ok(clone.__isDate(alien)); // recognize in other context. + test.ok(clone.__isDate(local)); // recognize in local context. + test.ok(!clone.__isArray(alien)); + test.ok(!clone.__isArray(local)); + test.ok(!clone.__isRegExp(alien)); + test.ok(!clone.__isRegExp(local)); + + test.done(); + }); +}; + +exports["recognize RegExp object"] = function (test) { + var results = apartContext(null, "results = /foo/", function(alien) { + var local = /bar/; + + test.ok(clone.__isRegExp(alien)); // recognize in other context. + test.ok(clone.__isRegExp(local)); // recognize in local context. + test.ok(!clone.__isArray(alien)); + test.ok(!clone.__isArray(local)); + test.ok(!clone.__isDate(alien)); + test.ok(!clone.__isDate(local)); + test.done(); + }); +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/CHANGELOG.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/CHANGELOG.md new file mode 100644 index 0000000..c33cf67 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/CHANGELOG.md @@ -0,0 +1,219 @@ +# Chokidar 1.2.0 (1 October 2015) +* Allow nested arrays of paths to be provided to `.watch()` and `.add()` +* Add `awaitWriteFinish` option + +# Chokidar 1.1.0 (23 September 2015) +* Dependency updates including fsevents@1.0.0, improving installation + +# Chokidar 1.0.6 (18 September 2015) +* Fix issue with `.unwatch()` method and relative paths + +# Chokidar 1.0.5 (20 July 2015) +* Fix regression with regexes/fns using in `ignored` + +# Chokidar 1.0.4 (15 July 2015) +* Fix bug with `ignored` files/globs while `cwd` option is set + +# Chokidar 1.0.3 (4 June 2015) +* Fix race issue with `alwaysStat` option and removed files + +# Chokidar 1.0.2 (30 May 2015) +* Fix bug with absolute paths and ENAMETOOLONG error + +# Chokidar 1.0.1 (8 April 2015) +* Fix bug with `.close()` method in `fs.watch` mode with `persistent: false` option + +# Chokidar 1.0.0 (7 April 2015) +* Glob support! Use globs in `watch`, `add`, and `unwatch` methods +* Comprehensive symlink support +* New `unwatch` method to turn off watching of previously watched paths +* More flexible `ignored` option allowing regex, function, glob, or array courtesy of [anymatch](https://github.com/es128/anymatch) +* New `cwd` option to set base dir from which relative paths are derived +* New `depth` option for limiting recursion +* New `alwaysStat` option to ensure [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) gets passed with every add/change event +* New `ready` event emitted when initial fs tree scan is done and watcher is ready for changes +* New `raw` event exposing data and events from the lower-level watch modules +* New `followSymlinks` option to impact whether symlinks' targets or the symlink files themselves are watched +* New `atomic` option for normalizing artifacts from text editors that use atomic write methods +* Ensured watcher's stability with lots of bugfixes. + +# Chokidar 0.12.6 (6 January 2015) +* Fix bug which breaks `persistent: false` mode when change events occur + +# Chokidar 0.12.5 (17 December 2014) +* Fix bug with matching parent path detection for fsevents instance sharing +* Fix bug with ignored watch path in nodefs modes + +# Chokidar 0.12.4 (14 December 2014) +* Fix bug in `fs.watch` mode that caused watcher to leak into `cwd` +* Fix bug preventing ready event when there are symlinks to ignored paths + +# Chokidar 0.12.3 (13 December 2014) +* Fix handling of special files such as named pipes and sockets + +# Chokidar 0.12.2 (12 December 2014) +* Fix recursive symlink handling and some other path resolution problems + +# Chokidar 0.12.1 (10 December 2014) +* Fix a case where file symlinks were not followed properly + +# Chokidar 0.12.0 (8 December 2014) +* Symlink support + * Add `followSymlinks` option, which defaults to `true` +* Change default watch mode on Linux to non-polling `fs.watch` +* Add `atomic` option to normalize events from editors using atomic writes + * Particularly Vim and Sublime +* Add `raw` event which exposes data from the underlying watch method + +# Chokidar 0.11.1 (19 November 2014) +* Fix a bug where an error is thrown when `fs.watch` instantiation fails + +# Chokidar 0.11.0 (16 November 2014) +* Add a `ready` event, which is emitted after initial file scan completes +* Fix issue with options keys passed in defined as `undefined` +* Rename some internal `FSWatcher` properties to indicate they're private + +# Chokidar 0.10.9 (15 November 2014) +* Fix some leftover issues from adding watcher reuse + +# Chokidar 0.10.8 (14 November 2014) +* Remove accidentally committed/published `console.log` statement. +* Sry 'bout that :crying_cat_face: + +# Chokidar 0.10.7 (14 November 2014) +* Apply watcher reuse methodology to `fs.watch` and `fs.watchFile` as well + +# Chokidar 0.10.6 (12 November 2014) +* More efficient creation/reuse of FSEvents instances to avoid system limits +* Reduce simultaneous FSEvents instances allowed in a process +* Handle errors thrown by `fs.watch` upon invocation + +# Chokidar 0.10.5 (6 November 2014) +* Limit number of simultaneous FSEvents instances (fall back to other methods) +* Prevent some cases of EMFILE errors during initialization +* Fix ignored files emitting events in some fsevents-mode circumstances + +# Chokidar 0.10.4 (5 November 2014) +* Bump fsevents dependency to ~0.3.1 + * Should resolve build warnings and `npm rebuild` on non-Macs + +# Chokidar 0.10.3 (28 October 2014) +* Fix removed dir emitting as `unlink` instead of `unlinkDir` +* Fix issues with file changing to dir or vice versa (gh-165) +* Fix handling of `ignored` option in fsevents mode + +# Chokidar 0.10.2 (23 October 2014) +* Improve individual file watching +* Fix fsevents keeping process alive when `persistent: false` + +# Chokidar 0.10.1 (19 October 2014) +* Improve handling of text editor atomic writes + +# Chokidar 0.10.0 (18 October 2014) +* Many stability and consistency improvements +* Resolve many cases of duplicate or wrong events +* Correct for fsevents inconsistencies +* Standardize handling of errors and relative paths +* Fix issues with watching `./` + +# Chokidar 0.9.0 (25 September 2014) +* Updated fsevents to 0.3 +* Update per-system defaults +* Fix issues with closing chokidar instance +* Fix duplicate change events on win32 + +# Chokidar 0.8.2 (26 March 2014) +* Fixed npm issues related to fsevents dep. +* Updated fsevents to 0.2. + +# Chokidar 0.8.1 (16 December 2013) +* Optional deps are now truly optional on windows and + linux. +* Rewritten in JS, again. +* Fixed some FSEvents-related bugs. + +# Chokidar 0.8.0 (29 November 2013) +* Added ultra-fast low-CPU OS X file watching with FSEvents. + It is enabled by default. +* Added `addDir` and `unlinkDir` events. +* Polling is now disabled by default on all platforms. + +# Chokidar 0.7.1 (18 November 2013) +* `Watcher#close` now also removes all event listeners. + +# Chokidar 0.7.0 (22 October 2013) +* When `options.ignored` is two-argument function, it will + also be called after stating the FS, with `stats` argument. +* `unlink` is no longer emitted on directories. + +# Chokidar 0.6.3 (12 August 2013) +* Added `usePolling` option (default: `true`). + When `false`, chokidar will use `fs.watch` as backend. + `fs.watch` is much faster, but not like super reliable. + +# Chokidar 0.6.2 (19 March 2013) +* Fixed watching initially empty directories with `ignoreInitial` option. + +# Chokidar 0.6.1 (19 March 2013) +* Added node.js 0.10 support. + +# Chokidar 0.6.0 (10 March 2013) +* File attributes (stat()) are now passed to `add` and `change` events + as second arguments. +* Changed default polling interval for binary files to 300ms. + +# Chokidar 0.5.3 (13 January 2013) +* Removed emitting of `change` events before `unlink`. + +# Chokidar 0.5.2 (13 January 2013) +* Removed postinstall script to prevent various npm bugs. + +# Chokidar 0.5.1 (6 January 2013) +* When starting to watch non-existing paths, chokidar will no longer throw +ENOENT error. +* Fixed bug with absolute path. + +# Chokidar 0.5.0 (9 December 2012) +* Added a bunch of new options: + * `ignoreInitial` that allows to ignore initial `add` events. + * `ignorePermissionErrors` that allows to ignore ENOENT etc perm errors. + * `interval` and `binaryInterval` that allow to change default + fs polling intervals. + +# Chokidar 0.4.0 (26 July 2012) +* Added `all` event that receives two args (event name and path) that +combines `add`, `change` and `unlink` events. +* Switched to `fs.watchFile` on node.js 0.8 on windows. +* Files are now correctly unwatched after unlink. + +# Chokidar 0.3.0 (24 June 2012) +* `unlink` event are no longer emitted for directories, for consistency +with `add`. + +# Chokidar 0.2.6 (8 June 2012) +* Prevented creating of duplicate 'add' events. + +# Chokidar 0.2.5 (8 June 2012) +* Fixed a bug when new files in new directories hadn't been added. + +# Chokidar 0.2.4 (7 June 2012) +* Fixed a bug when unlinked files emitted events after unlink. + +# Chokidar 0.2.3 (12 May 2012) +* Fixed watching of files on windows. + +# Chokidar 0.2.2 (4 May 2012) +* Fixed watcher signature. + +# Chokidar 0.2.1 (4 May 2012) +* Fixed invalid API bug when using `watch()`. + +# Chokidar 0.2.0 (4 May 2012) +* Rewritten in js. + +# Chokidar 0.1.1 (26 April 2012) +* Changed api to `chokidar.watch()`. +* Fixed compilation on windows. + +# Chokidar 0.1.0 (20 April 2012) +* Initial release. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/README.md new file mode 100644 index 0000000..074f235 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/README.md @@ -0,0 +1,272 @@ +# Chokidar [![Mac/Linux Build Status](https://img.shields.io/travis/paulmillr/chokidar/master.svg?label=Mac%20OSX%20%26%20Linux)](https://travis-ci.org/paulmillr/chokidar) [![Windows Build status](https://img.shields.io/appveyor/ci/es128/chokidar/master.svg?label=Windows)](https://ci.appveyor.com/project/es128/chokidar/branch/master) [![Coverage Status](https://coveralls.io/repos/paulmillr/chokidar/badge.svg)](https://coveralls.io/r/paulmillr/chokidar) [![Join the chat at https://gitter.im/paulmillr/chokidar](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/paulmillr/chokidar?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + +A neat wrapper around node.js fs.watch / fs.watchFile / fsevents. + +[![NPM](https://nodei.co/npm-dl/chokidar.png)](https://nodei.co/npm/chokidar/) +[![NPM](https://nodei.co/npm/chokidar.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/chokidar/) + +#### [See what's new in v1.0](https://github.com/paulmillr/chokidar/blob/master/CHANGELOG.md#chokidar-100-7-april-2015) + +## Why? +Node.js `fs.watch`: + +* Doesn't report filenames on OS X. +* Doesn't report events at all when using editors like Sublime on OS X. +* Often reports events twice. +* Emits most changes as `rename`. +* Has [a lot of other issues](https://github.com/joyent/node/search?q=fs.watch&type=Issues) +* Does not provide an easy way to recursively watch file trees. + +Node.js `fs.watchFile`: + +* Almost as bad at event handling. +* Also does not provide any recursive watching. +* Results in high CPU utilization. + +Chokidar resolves these problems. + +It is used in +[brunch](http://brunch.io), +[karma](http://karma-runner.github.io), +[PM2](https://github.com/Unitech/PM2), +[browserify](http://browserify.org/), +[webpack](http://webpack.github.io/), +[BrowserSync](http://www.browsersync.io/), +[socketstream](http://www.socketstream.org), +[derby](http://derbyjs.com/), +and [many others](https://www.npmjs.org/browse/depended/chokidar/). +It has proven itself in production environments. + +## How? +Chokidar does still rely on the Node.js core `fs` module, but when using +`fs.watch` and `fs.watchFile` for watching, it normalizes the events it +receives, often checking for truth by getting file stats and/or dir contents. + +On Mac OS X, chokidar by default uses a native extension exposing the Darwin +`FSEvents` API. This provides very efficient recursive watching compared with +implementations like `kqueue` available on most \*nix platforms. Chokidar still +does have to do some work to normalize the events received that way as well. + +On other platforms, the `fs.watch`-based implementation is the default, which +avoids polling and keeps CPU usage down. Be advised that chokidar will initiate +watchers recursively for everything within scope of the paths that have been +specified, so be judicious about not wasting system resources by watching much +more than needed. + +## Getting started +Install with npm: + + npm install chokidar --save + +Then `require` and use it in your code: + +```javascript +var chokidar = require('chokidar'); + +// One-liner for current directory, ignores .dotfiles +chokidar.watch('.', {ignored: /[\/\\]\./}).on('all', function(event, path) { + console.log(event, path); +}); + + +// Example of a more typical implementation structure: + +// Initialize watcher +var watcher = chokidar.watch('file, dir, or glob', { + ignored: /[\/\\]\./, + persistent: true +}); + +// something to use when events are received +var log = console.log.bind(console); + +// Add event listeners +watcher + .on('add', function(path) { log('File', path, 'has been added'); }) + .on('change', function(path) { log('File', path, 'has been changed'); }) + .on('unlink', function(path) { log('File', path, 'has been removed'); }) + // More events. + .on('addDir', function(path) { log('Directory', path, 'has been added'); }) + .on('unlinkDir', function(path) { log('Directory', path, 'has been removed'); }) + .on('error', function(error) { log('Error happened', error); }) + .on('ready', function() { log('Initial scan complete. Ready for changes.'); }) + .on('raw', function(event, path, details) { log('Raw event info:', event, path, details); }) + +// 'add', 'addDir' and 'change' events also receive stat() results as second +// argument when available: http://nodejs.org/api/fs.html#fs_class_fs_stats +watcher.on('change', function(path, stats) { + if (stats) console.log('File', path, 'changed size to', stats.size); +}); + +// Watch new files. +watcher.add('new-file'); +watcher.add(['new-file-2', 'new-file-3', '**/other-file*']); + +// Un-watch some files. +watcher.unwatch('new-file*'); + +// Only needed if watching is `persistent: true`. +watcher.close(); + +// Full list of options. See below for descriptions. (do not use this example) +chokidar.watch('file', { + persistent: true, + + ignored: '*.txt', + ignoreInitial: false, + followSymlinks: true, + cwd: '.', + + usePolling: true, + interval: 100, + binaryInterval: 300, + alwaysStat: false, + depth: 99, + awaitWriteFinish: { + stabilityThreshold: 2000, + pollInterval: 100 + }, + + ignorePermissionErrors: false, + atomic: true +}); + +``` + +## API + +`chokidar.watch(paths, options)` — takes one or more paths (which may be paths +to files, dirs to be watched recursively, or glob patterns) and options: + +#### Persistence + +* `persistent` (default: `true`). Indicates whether the process +should continue to run as long as files are being watched. If set to +`false` when using `fsevents` to watch, no more events will be emitted +after `ready`, even if the process continues to run. + +#### Path filtering + +* `ignored` ([anymatch](https://github.com/es128/anymatch)-compatible definition) +Defines files/paths to be ignored. The whole relative or absolute path is +tested, not just filename. If a function with two arguments is provided, it +gets called twice per path - once with a single argument (the path), second +time with two arguments (the path and the +[`fs.Stats`](http://nodejs.org/api/fs.html#fs_class_fs_stats) +object of that path). +* `ignoreInitial` (default: `false`). Indicates whether chokidar +should ignore the initial `add` events or not. +* `followSymlinks` (default: `true`). When `false`, only the +symlinks themselves will be watched for changes instead of following +the link references and bubbling events through the link's path. +* `cwd` (no default). The base directory from which watch `paths` are to be +derived. Paths emitted with events will be relative to this. + +#### Performance + +* `usePolling` (default: `false`). +Whether to use fs.watchFile (backed by polling), or fs.watch. If polling +leads to high CPU utilization, consider setting this to `false`. It is +typically necessary to **set this to `true` to successfully watch files over +a network**, and it may be necessary to successfully watch files in other +non-standard situations. Setting to `true` explicitly on OS X overrides the +`useFsEvents` default. +* _Polling-specific settings_ (effective when `usePolling: true`) + * `interval` (default: `100`). Interval of file system polling. + * `binaryInterval` (default: `300`). Interval of file system + polling for binary files. + ([see list of binary extensions](https://github.com/sindresorhus/binary-extensions/blob/master/binary-extensions.json)) +* `useFsEvents` (default: `true` on OS X). Whether to use the +`fsevents` watching interface if available. When set to `true` explicitly +and `fsevents` is available this supercedes the `usePolling` setting. When +set to `false` on OS X, `usePolling: true` becomes the default. +* `alwaysStat` (default: `false`). If relying upon the +[`fs.Stats`](http://nodejs.org/api/fs.html#fs_class_fs_stats) +object that may get passed with `add`, `addDir`, and `change` events, set +this to `true` to ensure it is provided even in cases where it wasn't +already available from the underlying watch events. +* `depth` (default: `undefined`). If set, limits how many levels of +subdirectories will be traversed. +* `awaitWriteFinish` (default: `false`). +By default, the `add` event will fire when a file first appear on disk, before +the entire file has been written. Furthermore, in some cases some `change` +events will be emitted while the file is being written. +In some cases, especially when watching for large files there will be a need to +wait for the write operation to finish before responding to the file creation. +Setting `awaitWriteFinish` to `true` (or a truthy value) will poll a newly +created file size, holding its `add` and `change` events until the size does not +change for a configurable amount of time. The appropriate duration setting is +heavily dependent on the OS and hardware. For accurate detection this parameter +should be relatively high, making file watching much less responsive. +Use with caution. + * *`options.awaitWriteFinish` can be set to an object in order to adjust + timing params:* + * `awaitWriteFinish.stabilityThreshold` (default: 2000). Amount of time in + milliseconds for a file size to remain constant before emitting its event. + * `awaitWriteFinish.pollInterval` (default: 100). File size polling interval. + +#### Errors +* `ignorePermissionErrors` (default: `false`). Indicates whether to watch files +that don't have read permissions if possible. If watching fails due to `EPERM` +or `EACCES` with this set to `true`, the errors will be suppressed silently. +* `atomic` (default: `true` if `useFsEvents` and `usePolling` are `false`). +Automatically filters out artifacts that occur when using editors that use +"atomic writes" instead of writing directly to the source file. + +### Methods & Events + +`chokidar.watch()` produces an instance of `FSWatcher`. Methods of `FSWatcher`: + +* `.add(path / paths)`: Add files, directories, or glob patterns for tracking. +Takes an array of strings or just one string. +* `.on(event, callback)`: Listen for an FS event. +Available events: `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `ready`, +`raw`, `error`. +Additionally `all` is available which gets emitted with the underlying event +name and path for every event other than `ready`, `raw`, and `error`. +* `.unwatch(path / paths)`: Stop watching files, directories, or glob patterns. +Takes an array of strings or just one string. +* `.close()`: Removes all listeners from watched files. + +## CLI + +If you need a CLI interface for your file watching, check out +[chokidar-cli](https://github.com/kimmobrunfeldt/chokidar-cli), allowing you to +execute a command on each change, or get a stdio stream of change events. + +## Install Troubleshooting + +* `npm WARN optional dep failed, continuing fsevents@n.n.n` + * This message is normal part of how `npm` handles optional dependencies and is + not indicative of a problem. Even if accompanied by other related error messages, + Chokidar should function properly. + +* `ERR! stack Error: Python executable "python" is v3.4.1, which is not supported by gyp.` + * You should be able to resolve this by installing python 2.7 and running: + `npm config set python python2.7` + +* `gyp ERR! stack Error: not found: make` + * On Mac, install the XCode command-line tools + +## License +The MIT license. + +Copyright (c) 2012 - 2015 Paul Miller (http://paulmillr.com) & Elan Shanker + +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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/index.js new file mode 100755 index 0000000..2066920 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/index.js @@ -0,0 +1,603 @@ +'use strict'; +var EventEmitter = require('events').EventEmitter; +var fs = require('fs'); +var sysPath = require('path'); +var each = require('async-each'); +var anymatch = require('anymatch'); +var globparent = require('glob-parent'); +var isglob = require('is-glob'); +var arrify = require('arrify'); +var isAbsolute = require('path-is-absolute'); +var flatten = require('lodash.flatten'); + +var NodeFsHandler = require('./lib/nodefs-handler'); +var FsEventsHandler = require('./lib/fsevents-handler'); + +// Public: Main class. +// Watches files & directories for changes. +// +// * _opts - object, chokidar options hash +// +// Emitted events: +// `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error` +// +// Examples +// +// var watcher = new FSWatcher() +// .add(directories) +// .on('add', function(path) {console.log('File', path, 'was added');}) +// .on('change', function(path) {console.log('File', path, 'was changed');}) +// .on('unlink', function(path) {console.log('File', path, 'was removed');}) +// .on('all', function(event, path) {console.log(path, ' emitted ', event);}) +// +function FSWatcher(_opts) { + var opts = {}; + // in case _opts that is passed in is a frozen object + if (_opts) for (var opt in _opts) opts[opt] = _opts[opt]; + this._watched = Object.create(null); + this._closers = Object.create(null); + this._ignoredPaths = Object.create(null); + Object.defineProperty(this, '_globIgnored', { + get: function() { return Object.keys(this._ignoredPaths); } + }); + this.closed = false; + this._throttled = Object.create(null); + this._symlinkPaths = Object.create(null); + + function undef(key) { + return opts[key] === undefined; + } + + // Set up default options. + if (undef('persistent')) opts.persistent = true; + if (undef('ignoreInitial')) opts.ignoreInitial = false; + if (undef('ignorePermissionErrors')) opts.ignorePermissionErrors = false; + if (undef('interval')) opts.interval = 100; + if (undef('binaryInterval')) opts.binaryInterval = 300; + this.enableBinaryInterval = opts.binaryInterval !== opts.interval; + + // Enable fsevents on OS X when polling isn't explicitly enabled. + if (undef('useFsEvents')) opts.useFsEvents = !opts.usePolling; + + // If we can't use fsevents, ensure the options reflect it's disabled. + if (!FsEventsHandler.canUse()) opts.useFsEvents = false; + + // Use polling on Mac if not using fsevents. + // Other platforms use non-polling fs.watch. + if (undef('usePolling') && !opts.useFsEvents) { + opts.usePolling = process.platform === 'darwin'; + } + + // Editor atomic write normalization enabled by default with fs.watch + if (undef('atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents; + if (opts.atomic) this._pendingUnlinks = Object.create(null); + + if (undef('followSymlinks')) opts.followSymlinks = true; + + if (undef('awaitWriteFinish')) opts.awaitWriteFinish = false; + if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {}; + var awf = opts.awaitWriteFinish; + if (awf) { + if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000; + if (!awf.pollInterval) awf.pollInterval = 100; + + this._pendingWrites = Object.create(null); + } + + this._isntIgnored = function(path, stat) { + return !this._isIgnored(path, stat); + }.bind(this); + + var readyCalls = 0; + this._emitReady = function() { + if (++readyCalls >= this._readyCount) { + this._emitReady = Function.prototype; + // use process.nextTick to allow time for listener to be bound + process.nextTick(this.emit.bind(this, 'ready')); + } + }.bind(this); + + this.options = opts; + + // You’re frozen when your heart’s not open. + Object.freeze(opts); +} + +FSWatcher.prototype = Object.create(EventEmitter.prototype); + +// Common helpers +// -------------- + +// Private method: Normalize and emit events +// +// * event - string, type of event +// * path - string, file or directory path +// * val[1..3] - arguments to be passed with event +// +// Returns the error if defined, otherwise the value of the +// FSWatcher instance's `closed` flag +FSWatcher.prototype._emit = function(event, path, val1, val2, val3) { + if (this.options.cwd) path = sysPath.relative(this.options.cwd, path); + var args = [event, path]; + if (val3 !== undefined) args.push(val1, val2, val3); + else if (val2 !== undefined) args.push(val1, val2); + else if (val1 !== undefined) args.push(val1); + + var awf = this.options.awaitWriteFinish; + if (awf && this._pendingWrites[path]) return this; + + if (this.options.atomic) { + if (event === 'unlink') { + this._pendingUnlinks[path] = args; + setTimeout(function() { + Object.keys(this._pendingUnlinks).forEach(function(path) { + this.emit.apply(this, this._pendingUnlinks[path]); + this.emit.apply(this, ['all'].concat(this._pendingUnlinks[path])); + delete this._pendingUnlinks[path]; + }.bind(this)); + }.bind(this), 100); + return this; + } else if (event === 'add' && this._pendingUnlinks[path]) { + event = args[0] = 'change'; + delete this._pendingUnlinks[path]; + } + } + + if (event === 'change') { + if (!this._throttle('change', path, 50)) return this; + } + + var emitEvent = function() { + this.emit.apply(this, args); + if (event !== 'error') this.emit.apply(this, ['all'].concat(args)); + }.bind(this); + + if (awf && event === 'add') { + this._awaitWriteFinish(path, awf.stabilityThreshold, function(err, stats) { + if (err) { + event = args[0] = 'error'; + args[1] = err; + emitEvent(); + } else if (stats) { + // if stats doesn't exist the file must have been deleted + args.push(stats); + emitEvent(); + } + }); + } else if ( + this.options.alwaysStat && val1 === undefined && + (event === 'add' || event === 'addDir' || event === 'change') + ) { + fs.stat(path, function(error, stats) { + // Suppress event when fs.stat fails, to avoid sending undefined 'stat' + if (error || !stats) return; + + args.push(stats); + emitEvent(); + }); + } else { + emitEvent(); + } + + return this; +}; + +// Private method: Common handler for errors +// +// * error - object, Error instance +// +// Returns the error if defined, otherwise the value of the +// FSWatcher instance's `closed` flag +FSWatcher.prototype._handleError = function(error) { + var code = error && error.code; + var ipe = this.options.ignorePermissionErrors; + if (error && + code !== 'ENOENT' && + code !== 'ENOTDIR' && + (!ipe || (code !== 'EPERM' && code !== 'EACCES')) + ) this.emit('error', error); + return error || this.closed; +}; + +// Private method: Helper utility for throttling +// +// * action - string, type of action being throttled +// * path - string, path being acted upon +// * timeout - int, duration of time to suppress duplicate actions +// +// Returns throttle tracking object or false if action should be suppressed +FSWatcher.prototype._throttle = function(action, path, timeout) { + if (!(action in this._throttled)) { + this._throttled[action] = Object.create(null); + } + var throttled = this._throttled[action]; + if (path in throttled) return false; + function clear() { + delete throttled[path]; + clearTimeout(timeoutObject); + } + var timeoutObject = setTimeout(clear, timeout); + throttled[path] = {timeoutObject: timeoutObject, clear: clear}; + return throttled[path]; +}; + +// Private method: Awaits write operation to finish +// +// * path - string, path being acted upon +// * threshold - int, time in milliseconds a file size must be fixed before +// acknowledgeing write operation is finished +// * callback - function, callback to call when write operation is finished +// Polls a newly created file for size variations. When files size does not +// change for 'threshold' milliseconds calls callback. +FSWatcher.prototype._awaitWriteFinish = function(path, threshold, callback) { + var timeoutHandler; + + (function awaitWriteFinish (prevStat) { + fs.stat(path, function(err, curStat) { + if (err) { + // if the file have been erased, the file entry in _pendingWrites will + // be deleted in the unlink event. + if (err.code == 'ENOENT') return; + return callback(err); + } + + var now = new Date(); + if (this._pendingWrites[path] === undefined) { + this._pendingWrites[path] = { + creationTime: now, + cancelWait: function() { + delete this._pendingWrites[path]; + clearTimeout(timeoutHandler); + return callback(); + }.bind(this) + } + return timeoutHandler = setTimeout( + awaitWriteFinish.bind(this, curStat), + this.options.awaitWriteFinish.pollInterval + ); + } + + if ( + curStat.size == prevStat.size && + now - this._pendingWrites[path].creationTime > threshold + ) { + delete this._pendingWrites[path]; + callback(null, curStat); + } else { + return timeoutHandler = setTimeout( + awaitWriteFinish.bind(this, curStat), + this.options.awaitWriteFinish.pollInterval + ); + } + }.bind(this)); + }.bind(this))(); +} + +// Private method: Determines whether user has asked to ignore this path +// +// * path - string, path to file or directory +// * stats - object, result of fs.stat +// +// Returns boolean +FSWatcher.prototype._isIgnored = function(path, stats) { + if ( + this.options.atomic && + /\..*\.(sw[px])$|\~$|\.subl.*\.tmp/.test(path) + ) return true; + + if (!this._userIgnored) { + var cwd = this.options.cwd; + var ignored = this.options.ignored; + if (cwd && ignored) { + ignored = arrify(ignored).map(function (path) { + if (typeof path !== 'string') return path; + return isAbsolute(path) ? path : sysPath.join(cwd, path); + }); + } + this._userIgnored = anymatch(this._globIgnored + .concat(ignored) + .concat(arrify(ignored) + .filter(function(path) { + return typeof path === 'string' && !isglob(path); + }).map(function(path) { + return path + '/**/*'; + }) + ) + ); + } + + return this._userIgnored([path, stats]); +}; + +// Private method: Provides a set of common helpers and properties relating to +// symlink and glob handling +// +// * path - string, file, directory, or glob pattern being watched +// * depth - int, at any depth > 0, this isn't a glob +// +// Returns object containing helpers for this path +FSWatcher.prototype._getWatchHelpers = function(path, depth) { + path = path.replace(/^\.[\/\\]/, ''); + var watchPath = depth || !isglob(path) ? path : globparent(path); + var hasGlob = watchPath !== path; + var globFilter = hasGlob ? anymatch(path) : false; + + var entryPath = function(entry) { + return sysPath.join(watchPath, sysPath.relative(watchPath, entry.fullPath)); + } + + var filterPath = function(entry) { + return (!hasGlob || globFilter(entryPath(entry))) && + this._isntIgnored(entryPath(entry), entry.stat) && + (this.options.ignorePermissionErrors || + this._hasReadPermissions(entry.stat)); + }.bind(this); + + var getDirParts = function(path) { + if (!hasGlob) return false; + var parts = sysPath.relative(watchPath, path).split(/[\/\\]/); + return parts; + } + var dirParts = getDirParts(path); + if (dirParts && dirParts.length > 1) dirParts.pop(); + + var filterDir = function(entry) { + if (hasGlob) { + var entryParts = getDirParts(entry.fullPath); + var globstar = false; + var unmatchedGlob = !dirParts.every(function(part, i) { + if (part === '**') globstar = true; + return globstar || !entryParts[i] || anymatch(part, entryParts[i]); + }); + } + return !unmatchedGlob && this._isntIgnored(entryPath(entry), entry.stat); + }.bind(this); + + return { + followSymlinks: this.options.followSymlinks, + statMethod: this.options.followSymlinks ? 'stat' : 'lstat', + path: path, + watchPath: watchPath, + entryPath: entryPath, + hasGlob: hasGlob, + globFilter: globFilter, + filterPath: filterPath, + filterDir: filterDir + }; +} + +// Directory helpers +// ----------------- + +// Private method: Provides directory tracking objects +// +// * directory - string, path of the directory +// +// Returns the directory's tracking object +FSWatcher.prototype._getWatchedDir = function(directory) { + var dir = sysPath.resolve(directory); + var watcherRemove = this._remove.bind(this); + if (!(dir in this._watched)) this._watched[dir] = { + _items: Object.create(null), + add: function(item) {this._items[item] = true;}, + remove: function(item) { + delete this._items[item]; + if (!this.children().length) { + fs.readdir(dir, function(err) { + if (err) watcherRemove(sysPath.dirname(dir), sysPath.basename(dir)); + }); + } + }, + has: function(item) {return item in this._items;}, + children: function() {return Object.keys(this._items);} + }; + return this._watched[dir]; +}; + +// File helpers +// ------------ + +// Private method: Check for read permissions +// Based on this answer on SO: http://stackoverflow.com/a/11781404/1358405 +// +// * stats - object, result of fs.stat +// +// Returns boolean +FSWatcher.prototype._hasReadPermissions = function(stats) { + return Boolean(4 & parseInt(((stats && stats.mode) & 0x1ff).toString(8)[0], 10)); +}; + +// Private method: Handles emitting unlink events for +// files and directories, and via recursion, for +// files and directories within directories that are unlinked +// +// * directory - string, directory within which the following item is located +// * item - string, base path of item/directory +// +// Returns nothing +FSWatcher.prototype._remove = function(directory, item) { + // if what is being deleted is a directory, get that directory's paths + // for recursive deleting and cleaning of watched object + // if it is not a directory, nestedDirectoryChildren will be empty array + var path = sysPath.join(directory, item); + var fullPath = sysPath.resolve(path); + var isDirectory = this._watched[path] || this._watched[fullPath]; + + // prevent duplicate handling in case of arriving here nearly simultaneously + // via multiple paths (such as _handleFile and _handleDir) + if (!this._throttle('remove', path, 100)) return; + + // if the only watched file is removed, watch for its return + var watchedDirs = Object.keys(this._watched); + if (!isDirectory && !this.options.useFsEvents && watchedDirs.length === 1) { + this.add(directory, item, true); + } + + // This will create a new entry in the watched object in either case + // so we got to do the directory check beforehand + var nestedDirectoryChildren = this._getWatchedDir(path).children(); + + // Recursively remove children directories / files. + nestedDirectoryChildren.forEach(function(nestedItem) { + this._remove(path, nestedItem); + }, this); + + // Check if item was on the watched list and remove it + var parent = this._getWatchedDir(directory); + var wasTracked = parent.has(item); + parent.remove(item); + + // If we wait for this file to be fully written, cancel the wait. + if (this.options.awaitWriteFinish && this._pendingWrites[path]) { + this._pendingWrites[path].cancelWait(); + return; + } + + // The Entry will either be a directory that just got removed + // or a bogus entry to a file, in either case we have to remove it + delete this._watched[path]; + delete this._watched[fullPath]; + var eventName = isDirectory ? 'unlinkDir' : 'unlink'; + if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path); +}; + +// Public method: Adds paths to be watched on an existing FSWatcher instance + +// * paths - string or array of strings, file/directory paths and/or globs +// * _origAdd - private boolean, for handling non-existent paths to be watched +// * _internal - private boolean, indicates a non-user add + +// Returns an instance of FSWatcher for chaining. +FSWatcher.prototype.add = function(paths, _origAdd, _internal) { + var cwd = this.options.cwd; + this.closed = false; + paths = flatten(arrify(paths)); + + if (!paths.every(isString)) { + throw new TypeError('Non-string provided as watch path'); + } + + if (cwd) paths = paths.map(function(path) { + if (isAbsolute(path)) { + return path; + } else if (path[0] === '!') { + return '!' + sysPath.join(cwd, path.substring(1)); + } else { + return sysPath.join(cwd, path); + } + }); + + // set aside negated glob strings + paths = paths.filter(function(path) { + if (path[0] === '!') this._ignoredPaths[path.substring(1)] = true; + else { + // if a path is being added that was previously ignored, stop ignoring it + delete this._ignoredPaths[path]; + delete this._ignoredPaths[path + '/**/*']; + + // reset the cached userIgnored anymatch fn + // to make ignoredPaths changes effective + this._userIgnored = null; + + return true; + } + }, this); + + if (this.options.useFsEvents && FsEventsHandler.canUse()) { + if (!this._readyCount) this._readyCount = paths.length; + if (this.options.persistent) this._readyCount *= 2; + paths.forEach(this._addToFsEvents, this); + } else { + if (!this._readyCount) this._readyCount = 0; + this._readyCount += paths.length; + each(paths, function(path, next) { + this._addToNodeFs(path, !_internal, 0, 0, _origAdd, function(err, res) { + if (res) this._emitReady(); + next(err, res); + }.bind(this)); + }.bind(this), function(error, results) { + results.forEach(function(item) { + if (!item) return; + this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item)); + }, this); + }.bind(this)); + } + + return this; +}; + +// Public method: Close watchers or start ignoring events from specified paths. + +// * paths - string or array of strings, file/directory paths and/or globs + +// Returns instance of FSWatcher for chaining. +FSWatcher.prototype.unwatch = function(paths) { + if (this.closed) return this; + paths = flatten(arrify(paths)); + + paths.forEach(function(path) { + if (this._closers[path]) { + this._closers[path](); + delete this._closers[path]; + this._getWatchedDir(sysPath.dirname(path)).remove(sysPath.basename(path)); + } else { + //convert to absolute path + path = sysPath.resolve(path); + + this._ignoredPaths[path] = true; + if (path in this._watched) { + this._ignoredPaths[path + '/**/*'] = true; + } + + // reset the cached userIgnored anymatch fn + // to make ignoredPaths changes effective + this._userIgnored = null; + } + }, this); + + return this; +}; + +// Public method: Close watchers and remove all listeners from watched paths. + +// Returns instance of FSWatcher for chaining. +FSWatcher.prototype.close = function() { + if (this.closed) return this; + + this.closed = true; + Object.keys(this._closers).forEach(function(watchPath) { + this._closers[watchPath](); + delete this._closers[watchPath]; + }, this); + this._watched = Object.create(null); + + this.removeAllListeners(); + return this; +}; + +// Attach watch handler prototype methods +function importHandler(handler) { + Object.keys(handler.prototype).forEach(function(method) { + FSWatcher.prototype[method] = handler.prototype[method]; + }); +} +importHandler(NodeFsHandler); +if (FsEventsHandler.canUse()) importHandler(FsEventsHandler); + +// little isString util for use in Array.prototype.every +function isString(maybeString) { + return typeof maybeString === 'string' +} + +// Export FSWatcher class +exports.FSWatcher = FSWatcher; + +// Public function: Instantiates watcher with paths to be tracked. + +// * paths - string or array of strings, file/directory paths and/or globs +// * options - object, chokidar options + +// Returns an instance of FSWatcher for chaining. +exports.watch = function(paths, options) { + return new FSWatcher(options).add(paths); +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/lib/fsevents-handler.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/lib/fsevents-handler.js new file mode 100644 index 0000000..f0b9dfe --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/lib/fsevents-handler.js @@ -0,0 +1,361 @@ +'use strict'; + +var fs = require('fs'); +var sysPath = require('path'); +var readdirp = require('readdirp'); +var fsevents; +try { fsevents = require('fsevents'); } catch (error) {} + +// fsevents instance helper functions + +// object to hold per-process fsevents instances +// (may be shared across chokidar FSWatcher instances) +var FSEventsWatchers = Object.create(null); + +// Private function: Instantiates the fsevents interface + +// * path - string, path to be watched +// * callback - function, called when fsevents is bound and ready + +// Returns new fsevents instance +function createFSEventsInstance(path, callback) { + return (new fsevents(path)).on('fsevent', callback).start(); +} + +// Private function: Instantiates the fsevents interface or binds listeners +// to an existing one covering the same file tree + +// * path - string, path to be watched +// * realPath - string, real path (in case of symlinks) +// * listener - function, called when fsevents emits events +// * rawEmitter - function, passes data to listeners of the 'raw' event + +// Returns close function +function setFSEventsListener(path, realPath, listener, rawEmitter) { + var watchPath = sysPath.extname(path) ? sysPath.dirname(path) : path; + var watchContainer; + + var resolvedPath = sysPath.resolve(path); + var hasSymlink = resolvedPath !== realPath; + function filteredListener(fullPath, flags, info) { + if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath); + if ( + fullPath === resolvedPath || + !fullPath.indexOf(resolvedPath + sysPath.sep) + ) listener(fullPath, flags, info); + } + + // check if there is already a watcher on a parent path + // modifies `watchPath` to the parent path when it finds a match + function watchedParent() { + return Object.keys(FSEventsWatchers).some(function(watchedPath) { + // condition is met when indexOf returns 0 + if (!realPath.indexOf(sysPath.resolve(watchedPath) + sysPath.sep)) { + watchPath = watchedPath; + return true; + } + }); + } + + if (watchPath in FSEventsWatchers || watchedParent()) { + watchContainer = FSEventsWatchers[watchPath]; + watchContainer.listeners.push(filteredListener); + } else { + watchContainer = FSEventsWatchers[watchPath] = { + listeners: [filteredListener], + rawEmitters: [rawEmitter], + watcher: createFSEventsInstance(watchPath, function(fullPath, flags) { + var info = fsevents.getInfo(fullPath, flags); + watchContainer.listeners.forEach(function(listener) { + listener(fullPath, flags, info); + }); + watchContainer.rawEmitters.forEach(function(emitter) { + emitter(info.event, fullPath, info); + }); + }) + }; + } + var listenerIndex = watchContainer.listeners.length - 1; + + // removes this instance's listeners and closes the underlying fsevents + // instance if there are no more listeners left + return function close() { + delete watchContainer.listeners[listenerIndex]; + delete watchContainer.rawEmitters[listenerIndex]; + if (!Object.keys(watchContainer.listeners).length) { + watchContainer.watcher.stop(); + delete FSEventsWatchers[watchPath]; + } + } +} + +// returns boolean indicating whether fsevents can be used +function canUse() { + return fsevents && Object.keys(FSEventsWatchers).length < 128; +} + +// determines subdirectory traversal levels from root to path +function depth(path, root) { + var i = 0; + while (!path.indexOf(root) && (path = sysPath.dirname(path)) !== root) i++; + return i; +} + +// fake constructor for attaching fsevents-specific prototype methods that +// will be copied to FSWatcher's prototype +function FsEventsHandler() {} + +// Private method: Handle symlinks encountered during directory scan + +// * wathPath - string, file/dir path to be watched with fsevents +// * realPath - string, real path (in case of symlinks) +// * transform - function, path transformer +// * globFilter - function, path filter in case a glob pattern was provided + +// Returns close function for the watcher instance +FsEventsHandler.prototype._watchWithFsEvents = +function(watchPath, realPath, transform, globFilter) { + if (this._isIgnored(watchPath)) return; + var watchCallback = function(fullPath, flags, info) { + if ( + this.options.depth !== undefined && + depth(fullPath, realPath) > this.options.depth + ) return; + var path = transform(sysPath.join( + watchPath, sysPath.relative(watchPath, fullPath) + )); + if (globFilter && !globFilter(path)) return; + // ensure directories are tracked + var parent = sysPath.dirname(path); + var item = sysPath.basename(path); + var watchedDir = this._getWatchedDir( + info.type === 'directory' ? path : parent + ); + var checkIgnored = function(stats) { + if (this._isIgnored(path, stats)) { + this._ignoredPaths[path] = true; + if (stats && stats.isDirectory()) { + this._ignoredPaths[path + '/**/*'] = true; + } + return true; + } else { + delete this._ignoredPaths[path]; + delete this._ignoredPaths[path + '/**/*']; + } + }.bind(this); + + var handleEvent = function(event) { + if (checkIgnored()) return; + + if (event === 'unlink') { + // suppress unlink events on never before seen files + if (info.type === 'directory' || watchedDir.has(item)) { + this._remove(parent, item); + } + } else { + if (event === 'add') { + // track new directories + if (info.type === 'directory') this._getWatchedDir(path); + + if (info.type === 'symlink' && this.options.followSymlinks) { + // push symlinks back to the top of the stack to get handled + var curDepth = this.options.depth === undefined ? + undefined : depth(fullPath, realPath) + 1; + return this._addToFsEvents(path, false, true, curDepth); + } else { + // track new paths + // (other than symlinks being followed, which will be tracked soon) + this._getWatchedDir(parent).add(item); + } + } + var eventName = info.type === 'directory' ? event + 'Dir' : event; + this._emit(eventName, path); + } + }.bind(this); + + function addOrChange() { + handleEvent(watchedDir.has(item) ? 'change' : 'add'); + } + function checkFd() { + fs.open(path, 'r', function(error, fd) { + if (fd) fs.close(fd); + error && error.code !== 'EACCES' ? + handleEvent('unlink') : addOrChange(); + }); + } + // correct for wrong events emitted + var wrongEventFlags = [ + 69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912 + ]; + if (wrongEventFlags.indexOf(flags) !== -1 || info.event === 'unknown') { + if (typeof this.options.ignored === 'function') { + fs.stat(path, function(error, stats) { + if (checkIgnored(stats)) return; + stats ? addOrChange() : handleEvent('unlink'); + }); + } else { + checkFd(); + } + } else { + switch (info.event) { + case 'created': + case 'modified': + return addOrChange(); + case 'deleted': + case 'moved': + return checkFd(); + } + } + }.bind(this); + + var closer = setFSEventsListener( + watchPath, + realPath, + watchCallback, + this.emit.bind(this, 'raw') + ); + + this._emitReady(); + return closer; +}; + +// Private method: Handle symlinks encountered during directory scan + +// * linkPath - string, path to symlink +// * fullPath - string, absolute path to the symlink +// * transform - function, pre-existing path transformer +// * curDepth - int, level of subdirectories traversed to where symlink is + +// Returns nothing +FsEventsHandler.prototype._fsEventsSymlink = +function(linkPath, fullPath, transform, curDepth) { + // don't follow the same symlink more than once + if (this._symlinkPaths[fullPath]) return; + else this._symlinkPaths[fullPath] = true; + + this._readyCount++; + + fs.realpath(linkPath, function(error, linkTarget) { + if (this._handleError(error) || this._isIgnored(linkTarget)) { + return this._emitReady(); + } + + this._readyCount++; + + // add the linkTarget for watching with a wrapper for transform + // that causes emitted paths to incorporate the link's path + this._addToFsEvents(linkTarget || linkPath, function(path) { + var dotSlash = '.' + sysPath.sep; + var aliasedPath = linkPath; + if (linkTarget && linkTarget !== dotSlash) { + aliasedPath = path.replace(linkTarget, linkPath); + } else if (path !== dotSlash) { + aliasedPath = sysPath.join(linkPath, path); + } + return transform(aliasedPath); + }, false, curDepth); + }.bind(this)); +}; + +// Private method: Handle added path with fsevents + +// * path - string, file/directory path or glob pattern +// * transform - function, converts working path to what the user expects +// * forceAdd - boolean, ensure add is emitted +// * priorDepth - int, level of subdirectories already traversed + +// Returns nothing +FsEventsHandler.prototype._addToFsEvents = +function(path, transform, forceAdd, priorDepth) { + + // applies transform if provided, otherwise returns same value + var processPath = typeof transform === 'function' ? + transform : function(val) { return val; }; + + var emitAdd = function(newPath, stats) { + var pp = processPath(newPath); + var isDir = stats.isDirectory(); + var dirObj = this._getWatchedDir(sysPath.dirname(pp)); + var base = sysPath.basename(pp); + + // ensure empty dirs get tracked + if (isDir) this._getWatchedDir(pp); + + if (dirObj.has(base)) return; + dirObj.add(base); + + if (!this.options.ignoreInitial || forceAdd === true) { + this._emit(isDir ? 'addDir' : 'add', pp, stats); + } + }.bind(this); + + var wh = this._getWatchHelpers(path); + + // evaluate what is at the path we're being asked to watch + fs[wh.statMethod](wh.watchPath, function(error, stats) { + if (this._handleError(error) || this._isIgnored(wh.watchPath, stats)) { + this._emitReady(); + return this._emitReady(); + } + + if (stats.isDirectory()) { + // emit addDir unless this is a glob parent + if (!wh.globFilter) emitAdd(processPath(path), stats); + + // don't recurse further if it would exceed depth setting + if (priorDepth && priorDepth > this.options.depth) return; + + // scan the contents of the dir + readdirp({ + root: wh.watchPath, + entryType: 'all', + fileFilter: wh.filterPath, + directoryFilter: wh.filterDir, + lstat: true, + depth: this.options.depth - (priorDepth || 0) + }).on('data', function(entry) { + // need to check filterPath on dirs b/c filterDir is less restrictive + if (entry.stat.isDirectory() && !wh.filterPath(entry)) return; + + var joinedPath = sysPath.join(wh.watchPath, entry.path); + var fullPath = entry.fullPath; + + if (wh.followSymlinks && entry.stat.isSymbolicLink()) { + // preserve the current depth here since it can't be derived from + // real paths past the symlink + var curDepth = this.options.depth === undefined ? + undefined : depth(joinedPath, sysPath.resolve(wh.watchPath)) + 1; + + this._fsEventsSymlink(joinedPath, fullPath, processPath, curDepth); + } else { + emitAdd(joinedPath, entry.stat); + } + }.bind(this)).on('end', this._emitReady); + } else { + emitAdd(wh.watchPath, stats); + this._emitReady(); + } + }.bind(this)); + + if (this.options.persistent) { + var initWatch = function(error, realPath) { + var closer = this._watchWithFsEvents( + wh.watchPath, + sysPath.resolve(realPath || wh.watchPath), + processPath, + wh.globFilter + ); + if (closer) this._closers[path] = closer; + }.bind(this); + + if (typeof transform === 'function') { + // realpath has already been resolved + initWatch(); + } else { + fs.realpath(wh.watchPath, initWatch); + } + } +}; + +module.exports = FsEventsHandler; +module.exports.canUse = canUse; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/lib/nodefs-handler.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/lib/nodefs-handler.js new file mode 100644 index 0000000..8f49bac --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/lib/nodefs-handler.js @@ -0,0 +1,476 @@ +'use strict'; + +var fs = require('fs'); +var sysPath = require('path'); +var readdirp = require('readdirp'); +var isBinaryPath = require('is-binary-path'); + +// fs.watch helpers + +// object to hold per-process fs.watch instances +// (may be shared across chokidar FSWatcher instances) +var FsWatchInstances = Object.create(null); + +// Private function: Instantiates the fs.watch interface + +// * path - string, path to be watched +// * options - object, options to be passed to fs.watch +// * listener - function, main event handler +// * errHandler - function, handler which emits info about errors +// * emitRaw - function, handler which emits raw event data + +// Returns new fsevents instance +function createFsWatchInstance(path, options, listener, errHandler, emitRaw) { + var handleEvent = function(rawEvent, evPath) { + listener(path); + emitRaw(rawEvent, evPath, {watchedPath: path}); + + // emit based on events occuring for files from a directory's watcher in + // case the file's watcher misses it (and rely on throttling to de-dupe) + if (evPath && path !== evPath) { + fsWatchBroadcast( + sysPath.resolve(path, evPath), 'listeners', sysPath.join(path, evPath) + ); + } + }; + try { + return fs.watch(path, options, handleEvent); + } catch (error) { + errHandler(error); + } +} + +// Private function: Helper for passing fs.watch event data to a +// collection of listeners + +// * fullPath - string, absolute path bound to the fs.watch instance +// * type - string, listener type +// * val[1..3] - arguments to be passed to listeners + +// Returns nothing +function fsWatchBroadcast(fullPath, type, val1, val2, val3) { + if (!FsWatchInstances[fullPath]) return; + FsWatchInstances[fullPath][type].forEach(function(listener) { + listener(val1, val2, val3); + }); +} + +// Private function: Instantiates the fs.watch interface or binds listeners +// to an existing one covering the same file system entry + +// * path - string, path to be watched +// * fullPath - string, absolute path +// * options - object, options to be passed to fs.watch +// * handlers - object, container for event listener functions + +// Returns close function +function setFsWatchListener(path, fullPath, options, handlers) { + var listener = handlers.listener; + var errHandler = handlers.errHandler; + var rawEmitter = handlers.rawEmitter; + var container = FsWatchInstances[fullPath]; + var watcher; + if (!options.persistent) { + watcher = createFsWatchInstance( + path, options, listener, errHandler, rawEmitter + ); + return watcher.close.bind(watcher); + } + if (!container) { + watcher = createFsWatchInstance( + path, + options, + fsWatchBroadcast.bind(null, fullPath, 'listeners'), + errHandler, // no need to use broadcast here + fsWatchBroadcast.bind(null, fullPath, 'rawEmitters') + ); + if (!watcher) return; + var broadcastErr = fsWatchBroadcast.bind(null, fullPath, 'errHandlers'); + watcher.on('error', function(error) { + // Workaround for https://github.com/joyent/node/issues/4337 + if (process.platform === 'win32' && error.code === 'EPERM') { + fs.open(path, 'r', function(err, fd) { + if (fd) fs.close(fd); + if (!err) broadcastErr(error); + }); + } else { + broadcastErr(error); + } + }); + container = FsWatchInstances[fullPath] = { + listeners: [listener], + errHandlers: [errHandler], + rawEmitters: [rawEmitter], + watcher: watcher + }; + } else { + container.listeners.push(listener); + container.errHandlers.push(errHandler); + container.rawEmitters.push(rawEmitter); + } + var listenerIndex = container.listeners.length - 1; + + // removes this instance's listeners and closes the underlying fs.watch + // instance if there are no more listeners left + return function close() { + delete container.listeners[listenerIndex]; + delete container.errHandlers[listenerIndex]; + delete container.rawEmitters[listenerIndex]; + if (!Object.keys(container.listeners).length) { + container.watcher.close(); + delete FsWatchInstances[fullPath]; + } + }; +} + +// fs.watchFile helpers + +// object to hold per-process fs.watchFile instances +// (may be shared across chokidar FSWatcher instances) +var FsWatchFileInstances = Object.create(null); + +// Private function: Instantiates the fs.watchFile interface or binds listeners +// to an existing one covering the same file system entry + +// * path - string, path to be watched +// * fullPath - string, absolute path +// * options - object, options to be passed to fs.watchFile +// * handlers - object, container for event listener functions + +// Returns close function +function setFsWatchFileListener(path, fullPath, options, handlers) { + var listener = handlers.listener; + var rawEmitter = handlers.rawEmitter; + var container = FsWatchFileInstances[fullPath]; + var listeners = []; + var rawEmitters = []; + if ( + container && ( + container.options.persistent < options.persistent || + container.options.interval > options.interval + ) + ) { + // "Upgrade" the watcher to persistence or a quicker interval. + // This creates some unlikely edge case issues if the user mixes + // settings in a very weird way, but solving for those cases + // doesn't seem worthwhile for the added complexity. + listeners = container.listeners; + rawEmitters = container.rawEmitters; + fs.unwatchFile(fullPath); + container = false; + } + if (!container) { + listeners.push(listener); + rawEmitters.push(rawEmitter); + container = FsWatchFileInstances[fullPath] = { + listeners: listeners, + rawEmitters: rawEmitters, + options: options, + watcher: fs.watchFile(fullPath, options, function(curr, prev) { + container.rawEmitters.forEach(function(rawEmitter) { + rawEmitter('change', fullPath, {curr: curr, prev: prev}); + }); + var currmtime = curr.mtime.getTime(); + if (curr.size !== prev.size || currmtime > prev.mtime.getTime() || currmtime === 0) { + container.listeners.forEach(function(listener) { + listener(path, curr); + }); + } + }) + }; + } else { + container.listeners.push(listener); + container.rawEmitters.push(rawEmitter); + } + var listenerIndex = container.listeners.length - 1; + + // removes this instance's listeners and closes the underlying fs.watchFile + // instance if there are no more listeners left + return function close() { + delete container.listeners[listenerIndex]; + delete container.rawEmitters[listenerIndex]; + if (!Object.keys(container.listeners).length) { + fs.unwatchFile(fullPath); + delete FsWatchFileInstances[fullPath]; + } + } +} + +// fake constructor for attaching nodefs-specific prototype methods that +// will be copied to FSWatcher's prototype +function NodeFsHandler() {} + +// Private method: Watch file for changes with fs.watchFile or fs.watch. + +// * path - string, path to file or directory. +// * listener - function, to be executed on fs change. + +// Returns close function for the watcher instance +NodeFsHandler.prototype._watchWithNodeFs = +function(path, listener) { + var directory = sysPath.dirname(path); + var basename = sysPath.basename(path); + var parent = this._getWatchedDir(directory); + parent.add(basename); + var absolutePath = sysPath.resolve(path); + var options = {persistent: this.options.persistent}; + if (!listener) listener = Function.prototype; // empty function + + var closer; + if (this.options.usePolling) { + options.interval = this.enableBinaryInterval && isBinaryPath(basename) ? + this.options.binaryInterval : this.options.interval; + closer = setFsWatchFileListener(path, absolutePath, options, { + listener: listener, + rawEmitter: this.emit.bind(this, 'raw') + }); + } else { + closer = setFsWatchListener(path, absolutePath, options, { + listener: listener, + errHandler: this._handleError.bind(this), + rawEmitter: this.emit.bind(this, 'raw') + }); + } + return closer; +}; + +// Private method: Watch a file and emit add event if warranted + +// * file - string, the file's path +// * stats - object, result of fs.stat +// * initialAdd - boolean, was the file added at watch instantiation? +// * callback - function, called when done processing as a newly seen file + +// Returns close function for the watcher instance +NodeFsHandler.prototype._handleFile = +function(file, stats, initialAdd, callback) { + var dirname = sysPath.dirname(file); + var basename = sysPath.basename(file); + var parent = this._getWatchedDir(dirname); + + // if the file is already being watched, do nothing + if (parent.has(basename)) return callback(); + + // kick off the watcher + var closer = this._watchWithNodeFs(file, function(path, newStats) { + if (!this._throttle('watch', file, 5)) return; + if (!newStats || newStats && newStats.mtime.getTime() === 0) { + fs.stat(file, function(error, newStats) { + // Fix issues where mtime is null but file is still present + if (error) { + this._remove(dirname, basename); + } else { + this._emit('change', file, newStats); + } + }.bind(this)); + // add is about to be emitted if file not already tracked in parent + } else if (parent.has(basename)) { + this._emit('change', file, newStats); + } + }.bind(this)); + + // emit an add event if we're supposed to + if (!(initialAdd && this.options.ignoreInitial)) { + if (!this._throttle('add', file, 0)) return; + this._emit('add', file, stats); + } + + if (callback) callback(); + return closer; +}; + +// Private method: Handle symlinks encountered while reading a dir + +// * entry - object, entry object returned by readdirp +// * directory - string, path of the directory being read +// * path - string, path of this item +// * item - string, basename of this item + +// Returns true if no more processing is needed for this entry. +NodeFsHandler.prototype._handleSymlink = +function(entry, directory, path, item) { + var full = entry.fullPath; + var dir = this._getWatchedDir(directory); + + if (!this.options.followSymlinks) { + // watch symlink directly (don't follow) and detect changes + this._readyCount++; + fs.realpath(path, function(error, linkPath) { + if (dir.has(item)) { + if (this._symlinkPaths[full] !== linkPath) { + this._symlinkPaths[full] = linkPath; + this._emit('change', path, entry.stat); + } + } else { + dir.add(item); + this._symlinkPaths[full] = linkPath; + this._emit('add', path, entry.stat); + } + this._emitReady(); + }.bind(this)); + return true; + } + + // don't follow the same symlink more than once + if (this._symlinkPaths[full]) return true; + else this._symlinkPaths[full] = true; +} + +// Private method: Read directory to add / remove files from `@watched` list +// and re-read it on change. + +// * dir - string, fs path. +// * stats - object, result of fs.stat +// * initialAdd - boolean, was the file added at watch instantiation? +// * depth - int, depth relative to user-supplied path +// * target - string, child path actually targeted for watch +// * wh - object, common watch helpers for this path +// * callback - function, called when dir scan is complete + +// Returns close function for the watcher instance +NodeFsHandler.prototype._handleDir = +function(dir, stats, initialAdd, depth, target, wh, callback) { + if (!(initialAdd && this.options.ignoreInitial) && !target && !wh.hasGlob) { + this._emit('addDir', dir, stats); + } + + // ensure dir is tracked + this._getWatchedDir(sysPath.dirname(dir)).add(sysPath.basename(dir)); + this._getWatchedDir(dir); + + var read = function(directory, initialAdd, done) { + // Normalize the directory name on Windows + directory = sysPath.join(directory, ''); + + if (!wh.hasGlob) { + var throttler = this._throttle('readdir', directory, 1000); + if (!throttler) return; + } + + var previous = this._getWatchedDir(wh.path); + var current = []; + + readdirp({ + root: directory, + entryType: 'all', + fileFilter: wh.filterPath, + directoryFilter: wh.filterDir, + depth: 0, + lstat: true + }).on('data', function(entry) { + var item = entry.path; + var path = sysPath.join(directory, item); + current.push(item); + + if (entry.stat.isSymbolicLink() && + this._handleSymlink(entry, directory, path, item)) return; + + // Files that present in current directory snapshot + // but absent in previous are added to watch list and + // emit `add` event. + if (item === target || !target && !previous.has(item)) { + this._readyCount++; + + // ensure relativeness of path is preserved in case of watcher reuse + path = sysPath.join(dir, sysPath.relative(dir, path)); + + this._addToNodeFs(path, initialAdd, wh, depth + 1); + } + }.bind(this)).on('end', function() { + if (throttler) throttler.clear(); + if (done) done(); + + // Files that absent in current directory snapshot + // but present in previous emit `remove` event + // and are removed from @watched[directory]. + previous.children().filter(function(item) { + return item !== directory && + current.indexOf(item) === -1 && + // in case of intersecting globs; + // a path may have been filtered out of this readdir, but + // shouldn't be removed because it matches a different glob + (!wh.hasGlob || wh.filterPath({ + fullPath: sysPath.resolve(directory, item) + })); + }).forEach(function(item) { + this._remove(directory, item); + }, this); + }.bind(this)).on('error', this._handleError.bind(this)); + }.bind(this); + + if (this.options.depth == null || depth <= this.options.depth) { + if (!target) read(dir, initialAdd, callback); + var closer = this._watchWithNodeFs(dir, function(dirPath, stats) { + // if current directory is removed, do nothing + if (stats && stats.mtime.getTime() === 0) return; + + read(dirPath, false); + }); + } else { + callback(); + } + return closer; +}; + +// Private method: Handle added file, directory, or glob pattern. +// Delegates call to _handleFile / _handleDir after checks. + +// * path - string, path to file or directory. +// * initialAdd - boolean, was the file added at watch instantiation? +// * depth - int, depth relative to user-supplied path +// * target - string, child path actually targeted for watch +// * callback - function, indicates whether the path was found or not + +// Returns nothing +NodeFsHandler.prototype._addToNodeFs = +function(path, initialAdd, priorWh, depth, target, callback) { + if (!callback) callback = Function.prototype; + var ready = this._emitReady; + if (this._isIgnored(path) || this.closed) { + ready(); + return callback(null, false); + } + + var wh = this._getWatchHelpers(path, depth); + if (!wh.hasGlob && priorWh) { + wh.hasGlob = priorWh.hasGlob; + wh.filterPath = priorWh.filterPath; + wh.filterDir = priorWh.filterDir; + } + + // evaluate what is at the path we're being asked to watch + fs[wh.statMethod](wh.watchPath, function(error, stats) { + if (this._handleError(error)) return callback(null, path); + if (this._isIgnored(wh.watchPath, stats)) { + ready(); + return callback(null, false); + } + + var initDir = function(dir, target) { + return this._handleDir(dir, stats, initialAdd, depth, target, wh, ready); + }.bind(this); + + var closer; + if (stats.isDirectory()) { + closer = initDir(wh.watchPath, target); + } else if (stats.isSymbolicLink()) { + var parent = sysPath.dirname(wh.watchPath); + this._getWatchedDir(parent).add(wh.watchPath); + this._emit('add', wh.watchPath, stats); + closer = initDir(parent, path); + + // preserve this symlink's target path + fs.realpath(path, function(error, targetPath) { + this._symlinkPaths[sysPath.resolve(path)] = targetPath; + ready(); + }.bind(this)); + } else { + closer = this._handleFile(wh.watchPath, stats, initialAdd, ready); + } + + if (closer) this._closers[path] = closer; + callback(null, false); + }.bind(this)); +}; + +module.exports = NodeFsHandler; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/LICENSE new file mode 100644 index 0000000..bc42470 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2014 Elan Shanker + +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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/README.md new file mode 100644 index 0000000..0a63292 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/README.md @@ -0,0 +1,91 @@ +anymatch [![Build Status](https://travis-ci.org/es128/anymatch.svg?branch=master)](https://travis-ci.org/es128/anymatch) [![Coverage Status](https://img.shields.io/coveralls/es128/anymatch.svg?branch=master)](https://coveralls.io/r/es128/anymatch?branch=master) +====== +Javascript module to match a string against a regular expression, glob, string, +or function that takes the string as an argument and returns a truthy or falsy +value. The matcher can also be an array of any or all of these. Useful for +allowing a very flexible user-defined config to define things like file paths. + +[![NPM](https://nodei.co/npm/anymatch.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/anymatch/) +[![NPM](https://nodei.co/npm-dl/anymatch.png?height=3&months=9)](https://nodei.co/npm-dl/anymatch/) + +Usage +----- +```sh +npm install anymatch --save +``` + +#### anymatch (matchers, testString, [returnIndex], [startIndex], [endIndex]) +* __matchers__: (_Array|String|RegExp|Function_) +String to be directly matched, string with glob patterns, regular expression +test, function that takes the testString as an argument and returns a truthy +value if it should be matched, or an array of any number and mix of these types. +* __testString__: (_String|Array_) The string to test against the matchers. If +passed as an array, the first element of the array will be used as the +`testString` for non-function matchers, while the entire array will be applied +as the arguments for function matchers. +* __returnIndex__: (_Boolean [optional]_) If true, return the array index of +the first matcher that that testString matched, or -1 if no match, instead of a +boolean result. +* __startIndex, endIndex__: (_Integer [optional]_) Can be used to define a +subset out of the array of provided matchers to test against. Can be useful +with bound matcher functions (see below). When used with `returnIndex = true` +preserves original indexing. Behaves the same as `Array.prototype.slice` (i.e. +includes array members up to, but not including endIndex). + +```js +var anymatch = require('anymatch'); + +var matchers = [ + 'path/to/file.js', + 'path/anyjs/**/*.js', + /foo.js$/, + function (string) { + return string.indexOf('bar') !== -1 && string.length > 10 + } +]; + +anymatch(matchers, 'path/to/file.js'); // true +anymatch(matchers, 'path/anyjs/baz.js'); // true +anymatch(matchers, 'path/to/foo.js'); // true +anymatch(matchers, 'path/to/bar.js'); // true +anymatch(matchers, 'bar.js'); // false + +// returnIndex = true +anymatch(matchers, 'foo.js', true); // 2 +anymatch(matchers, 'path/anyjs/foo.js', true); // 1 + +// skip matchers +anymatch(matchers, 'path/to/file.js', false, 1); // false +anymatch(matchers, 'path/anyjs/foo.js', true, 2, 3); // 2 +anymatch(matchers, 'path/to/bar.js', true, 0, 3); // -1 +``` + +#### anymatch (matchers) +You can also pass in only your matcher(s) to get a curried function that has +already been bound to the provided matching criteria. This can be used as an +`Array.prototype.filter` callback. + +```js +var matcher = anymatch(matchers); + +matcher('path/to/file.js'); // true +matcher('path/anyjs/baz.js', true); // 1 +matcher('path/anyjs/baz.js', true, 2); // -1 + +['foo.js', 'bar.js'].filter(matcher); // ['foo.js'] +``` + +Change Log +---------- +[See release notes page on GitHub](https://github.com/es128/anymatch/releases) + +NOTE: As of v1.2.0, anymatch uses [micromatch](https://github.com/jonschlinkert/micromatch) +for glob pattern matching. The glob matching behavior should be functionally +equivalent to the commonly used [minimatch](https://github.com/isaacs/minimatch) +library (aside from some fixed bugs and greater performance), so a major +version bump wasn't merited. Issues with glob pattern matching should be +reported directly to the [micromatch issue tracker](https://github.com/jonschlinkert/micromatch/issues). + +License +------- +[ISC](https://raw.github.com/es128/anymatch/master/LICENSE) diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/index.js new file mode 100644 index 0000000..fd70ba0 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/index.js @@ -0,0 +1,64 @@ +'use strict'; + +var arrify = require('arrify'); +var micromatch = require('micromatch'); +var path = require('path'); + +var anymatch = function(criteria, value, returnIndex, startIndex, endIndex) { + criteria = arrify(criteria); + value = arrify(value); + if (arguments.length === 1) { + return anymatch.bind(null, criteria.map(function(criterion) { + return typeof criterion === 'string' && criterion[0] !== '!' ? + micromatch.matcher(criterion) : criterion; + })); + } + startIndex = startIndex || 0; + var string = value[0]; + var altString; + var matched = false; + var matchIndex = -1; + function testCriteria (criterion, index) { + var result; + switch (toString.call(criterion)) { + case '[object String]': + result = string === criterion || altString && altString === criterion; + result = result || micromatch.isMatch(string, criterion); + break; + case '[object RegExp]': + result = criterion.test(string) || altString && criterion.test(altString); + break; + case '[object Function]': + result = criterion.apply(null, value); + break; + default: + result = false; + } + if (result) { + matchIndex = index + startIndex; + } + return result; + } + var crit = criteria; + var negGlobs = crit.reduce(function(arr, criterion, index) { + if (typeof criterion === 'string' && criterion[0] === '!') { + if (crit === criteria) { + // make a copy before modifying + crit = crit.slice(); + } + crit[index] = null; + arr.push(criterion.substr(1)); + } + return arr; + }, []); + if (!negGlobs.length || !micromatch.any(string, negGlobs)) { + if (path.sep === '\\' && typeof string === 'string') { + altString = string.split('\\').join('/'); + altString = altString === string ? null : altString; + } + matched = crit.slice(startIndex, endIndex).some(testCriteria); + } + return returnIndex === true ? matchIndex : matched; +}; + +module.exports = anymatch; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/LICENSE new file mode 100755 index 0000000..fa30c4c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/README.md new file mode 100755 index 0000000..7d13880 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/README.md @@ -0,0 +1,616 @@ +# micromatch [![NPM version](https://badge.fury.io/js/micromatch.svg)](http://badge.fury.io/js/micromatch) [![Build Status](https://travis-ci.org/jonschlinkert/micromatch.svg)](https://travis-ci.org/jonschlinkert/micromatch) + +> Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. Just use `micromatch.isMatch()` instead of `minimatch()`, or use `micromatch()` instead of `multimatch()`. + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i micromatch --save +``` + +## Table of contents + + + +* [Features](#features) +* [Usage](#usage) +* [Switch from minimatch](#switch-from-minimatch) +* [Methods](#methods) + - [.isMatch](#ismatch) + - [.contains](#contains) + - [.matcher](#matcher) + - [.filter](#filter) + - [.any](#any) + - [.expand](#expand) + - [.makeRe](#makere) +* [Options](#options) + - [options.unixify](#optionsunixify) + - [options.dot](#optionsdot) + - [options.unescape](#optionsunescape) + - [options.nodupes](#optionsnodupes) + - [options.matchBase](#optionsmatchbase) + - [options.nobraces](#optionsnobraces) + - [options.nobrackets](#optionsnobrackets) + - [options.noextglob](#optionsnoextglob) + - [options.nocase](#optionsnocase) + - [options.nonull](#optionsnonull) + - [options.cache](#optionscache) +* [Other features](#other-features) + - [Extended globbing](#extended-globbing) + + [extglobs](#extglobs) + + [brace expansion](#brace-expansion) + + [regex character classes](#regex-character-classes) + + [regex groups](#regex-groups) + + [POSIX bracket expressions](#posix-bracket-expressions) +* [Notes](#notes) +* [Benchmarks](#benchmarks) +* [Run tests](#run-tests) +* [Contributing](#contributing) +* [Related](#related) +* [Author](#author) +* [License](#license) + +_(Table of contents generated by [verb](https://github.com/assemble/verb))_ + + + +## Features + +Micromatch is [10-55x faster](#benchmarks) than [minimatch](https://github.com/isaacs/minimatch#readme), resulting from a combination of caching, tokenization, parsing, runtime compilation and regex optimization strategies. + +* [Drop-in replacement](#switch-from-minimatch) for [minimatch](https://github.com/isaacs/minimatch#readme) and [multimatch](https://github.com/sindresorhus/multimatch) +* Built-in support for multiple glob patterns, like `['foo/*.js', '!bar.js']` +* Better support for the Bash 4.3 specification, and less buggy +* Extensive [unit tests](./test) (approx. 1,300 tests). Minimatch fails many of the tests. + +**Mainstream glob features:** + +* [Brace Expansion](https://github.com/jonschlinkert/braces) (`foo/bar-{1..5}.md`, `one/{two,three}/four.md`) +* Typical glob patterns, like `**/*`, `a/b/*.js`, or `['foo/*.js', '!bar.js']` + +**Extended globbing features:** + +* Logical `OR` (`foo/bar/(abc|xyz).js`) +* Regex character classes (`foo/bar/baz-[1-5].js`) +* POSIX [bracket expressions](https://github.com/jonschlinkert/expand-brackets) (`**/[[:alpha:][:digit:]]/`) +* [extglobs](https://github.com/jonschlinkert/extglob) (`**/+(x|y)`, `!(a|b)`, etc) + +You can combine these to create whatever matching patterns you need. + +## Usage + +```js +var mm = require('micromatch'); +mm(array, patterns); +``` + +**Examples** + +```js +mm(['a.js', 'b.md', 'c.txt'], '*.{js,txt}'); +//=> ['a.js', 'c.txt'] +``` + +**Multiple patterns** + +Multiple patterns can also be passed: + +```js +mm(['a.md', 'b.js', 'c.txt', 'd.json'], ['*.md', '*.txt']); +//=> ['a.md', 'c.txt'] +``` + +**Negation patterns:** + +Behavior; + +* when the pattern is a string, [minimatch](https://github.com/isaacs/minimatch#readme) behavior is used, so patterns are **inclusive by default**. +* when an array of patterns is passed, [multimatch](https://github.com/sindresorhus/multimatch) behavior is used, so patterns are **exclusive by default** + +```js +mm(['a.js', 'b.md', 'c.txt'], '!*.{js,txt}'); +//=> ['b.md'] + +mm(['a.md', 'b.js', 'c.txt', 'd.json'], ['*.*', '!*.{js,txt}']); +//=> ['a.md', 'd.json'] +``` + +## Switch from minimatch + +> Use `micromatch.isMatch()` instead of `minimatch()` + +**Minimatch** + +The main `minimatch()` function returns true/false for a single file path and pattern: + +```js +var minimatch = require('minimatch'); +minimatch('foo.js', '*.js'); +//=> 'true' +``` + +**Micromatch** + +With micromatch, `.isMatch()` to get the same result: + +```js +var mm = require('micromatch'); +mm.isMatch('foo.js', '*.js'); +//=> 'true' +``` + +This implementation difference is necessary since the main `micromatch()` method supports matching on multiple globs, with behavior similar to [multimatch](https://github.com/sindresorhus/multimatch). + +## Methods + +```js +var mm = require('micromatch'); +``` + +### .isMatch + +```js +mm.isMatch(filepath, globPattern); +``` + +Returns true if a file path matches the given glob pattern. + +**Example** + +```js +mm.isMatch('.verb.md', '*.md'); +//=> false + +mm.isMatch('.verb.md', '*.md', {dot: true}); +//=> true +``` + +### .contains + +Returns true if any part of a file path matches the given glob pattern. Think of this is "has path" versus "is path". + +**Example** + +`.isMatch()` would return false for both of the following: + +```js +mm.contains('a/b/c', 'a/b'); +//=> true + +mm.contains('a/b/c', 'a/*'); +//=> true +``` + +### .matcher + +Returns a function for matching using the supplied pattern. e.g. create your own "matcher". The advantage of this method is that the pattern can be compiled outside of a loop. + +**Pattern** + +Can be any of the following: + +* `glob/string` +* `regex` +* `function` + +**Example** + +```js +var isMatch = mm.matcher('*.md'); +var files = []; + +['a.md', 'b.txt', 'c.md'].forEach(function(fp) { + if (isMatch(fp)) { + files.push(fp); + } +}); +``` + +### .filter + +Returns a function that can be passed to `Array#filter()`. + +**Params** + +* `patterns` **{String|Array}**: + +**Examples** + +Single glob: + +```js +var fn = mm.filter('*.md'); +['a.js', 'b.txt', 'c.md'].filter(fn); +//=> ['c.md'] + +var fn = mm.filter('[a-c]'); +['a', 'b', 'c', 'd', 'e'].filter(fn); +//=> ['a', 'b', 'c'] +``` + +Array of glob patterns: + +```js +var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; + +var fn = mm.filter(['{1..10}', '![7-9]', '!{3..4}']); +arr.filter(fn); +//=> [1, 2, 5, 6, 10] +``` + +_(Internally this function generates the matching function by using the [matcher](#matcher) method. You can use the [matcher](#matcher) method directly to create your own filter function)_ + +### .any + +Returns true if a file path matches any of the given patterns. + +```js +mm.any(filepath, patterns, options); +``` + +**Params** + +* filepath `{String}`: The file path to test. +* patterns `{String|Array}`: One or more glob patterns +* options: `{Object}`: options to pass to the `.matcher()` method. + +**Example** + +```js +mm.any('abc', ['!*z']); +//=> true +mm.any('abc', ['a*', 'z*']); +//=> true +mm.any('abc', 'a*'); +//=> true +mm.any('abc', ['z*']); +//=> false +``` + +### .expand + +Returns an object with a regex-compatible string and tokens. + +```js +mm.expand('*.js'); + +// when `track` is enabled (for debugging), the `history` array is used +// to record each mutation to the glob pattern as it's converted to regex +{ options: { track: false, dot: undefined, makeRe: true, negated: false }, + pattern: '(.*\\/|^)bar\\/(?:(?!(?:^|\\/)\\.).)*?', + history: [], + tokens: + { path: + { whole: '**/bar/**', + dirname: '**/bar/', + filename: '**', + basename: '**', + extname: '', + ext: '' }, + is: + { glob: true, + negated: false, + globstar: true, + dotfile: false, + dotdir: false }, + match: {}, + original: '**/bar/**', + pattern: '**/bar/**', + base: '' } } +``` + +### .makeRe + +Create a regular expression for matching file paths based on the given pattern: + +```js +mm.makeRe('*.js'); +//=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ +``` + +## Options + +### options.unixify + +Normalize slashes in file paths and glob patterns to forward slashes. + +Type: `{Boolean}` + +Default: `undefined` on non-windows, `true` on windows. + +### options.dot + +Match dotfiles. Same behavior as [minimatch](https://github.com/isaacs/minimatch#readme). + +Type: `{Boolean}` + +Default: `false` + +### options.unescape + +Unescape slashes in glob patterns. Use cautiously, especially on windows. + +Type: `{Boolean}` + +Default: `undefined` + +**Example** + +```js +mm.isMatch('abc', '\\a\\b\\c', {unescape: true}); +//=> true +``` + +### options.nodupes + +Remove duplicate elements from the result array. + +Type: `{Boolean}` + +Default: `undefined` + +**Example** + +Example of using the `unescape` and `nodupes` options together: + +```js +mm.match(['abc', '\\a\\b\\c'], '\\a\\b\\c', {unescape: true}); +//=> ['abc', 'abc'] + +mm.match(['abc', '\\a\\b\\c'], '\\a\\b\\c', {unescape: true, nodupes: true}); +//=> ['abc'] +``` + +### options.matchBase + +Allow glob patterns without slashes to match a file path based on its basename. . Same behavior as [minimatch](https://github.com/isaacs/minimatch#readme). + +Type: `{Boolean}` + +Default: `false` + +**Example** + +```js +mm(['a/b.js', 'a/c.md'], '*.js'); +//=> [] + +mm(['a/b.js', 'a/c.md'], '*.js', {matchBase: true}); +//=> ['a/b.js'] +``` + +### options.nobraces + +Don't expand braces in glob patterns. Same behavior as [minimatch](https://github.com/isaacs/minimatch#readme) `nobrace`. + +Type: `{Boolean}` + +Default: `undefined` + +See [braces](https://github.com/jonschlinkert/braces) for more information about extended brace expansion. + +### options.nobrackets + +Don't expand POSIX bracket expressions. + +Type: `{Boolean}` + +Default: `undefined` + +See [expand-brackets](https://github.com/jonschlinkert/expand-brackets) for more information about extended bracket expressions. + +### options.noextglob + +Don't expand extended globs. + +Type: `{Boolean}` + +Default: `undefined` + +See [extglob](https://github.com/jonschlinkert/extglob) for more information about extended globs. + +### options.nocase + +Use a case-insensitive regex for matching files. Same behavior as [minimatch](https://github.com/isaacs/minimatch#readme). + +Type: `{Boolean}` + +Default: `false` + +### options.nonull + +If `true`, when no matches are found the actual (array-ified) glob pattern is returned instead of an empty array. Same behavior as [minimatch](https://github.com/isaacs/minimatch#readme). + +Type: `{Boolean}` + +Default: `false` + +### options.cache + +Cache the platform (e.g. `win32`) to prevent this from being looked up for every filepath. + +Type: `{Boolean}` + +Default: `true` + +## Other features + +Micromatch also supports the following. + +### Extended globbing + +#### extglobs + +Extended globbing, as described by the bash man page: + +| **pattern** | **regex equivalent** | **description** | +| --- | --- | --- | +| `?(pattern-list)` | `(...|...)?` | Matches zero or one occurrence of the given patterns | +| `*(pattern-list)` | `(...|...)*` | Matches zero or more occurrences of the given patterns | +| `+(pattern-list)` | `(...|...)+` | Matches one or more occurrences of the given patterns | +| `@(pattern-list)` | `(...|...)` * | Matches one of the given patterns | +| `!(pattern-list)` | N/A | Matches anything except one of the given patterns | + +* `@` isn't a RegEx character. + +Powered by [extglob](https://github.com/jonschlinkert/extglob). Visit that library for the full range of options or to report extglob related issues. + +See [extglob](https://github.com/jonschlinkert/extglob) for more information about extended globs. + +#### brace expansion + +In simple cases, brace expansion appears to work the same way as the logical `OR` operator. For example, `(a|b)` will achieve the same result as `{a,b}`. + +Here are some powerful features unique to brace expansion (versus character classes): + +* range expansion: `a{1..3}b/*.js` expands to: `['a1b/*.js', 'a2b/*.js', 'a3b/*.js']` +* nesting: `a{c,{d,e}}b/*.js` expands to: `['acb/*.js', 'adb/*.js', 'aeb/*.js']` + +Visit [braces](https://github.com/jonschlinkert/braces) to ask questions and create an issue related to brace-expansion, or to see the full range of features and options related to brace expansion. + +#### regex character classes + +With the exception of brace expansion (`{a,b}`, `{1..5}`, etc), most of the special characters convert directly to regex, so you can expect them to follow the same rules and produce the same results as regex. + +For example, given the list: `['a.js', 'b.js', 'c.js', 'd.js', 'E.js']`: + +* `[ac].js`: matches both `a` and `c`, returning `['a.js', 'c.js']` +* `[b-d].js`: matches from `b` to `d`, returning `['b.js', 'c.js', 'd.js']` +* `[b-d].js`: matches from `b` to `d`, returning `['b.js', 'c.js', 'd.js']` +* `a/[A-Z].js`: matches and uppercase letter, returning `['a/E.md']` + +Learn about [regex character classes](http://www.regular-expressions.info/charclass.html). + +#### regex groups + +Given `['a.js', 'b.js', 'c.js', 'd.js', 'E.js']`: + +* `(a|c).js`: would match either `a` or `c`, returning `['a.js', 'c.js']` +* `(b|d).js`: would match either `b` or `d`, returning `['b.js', 'd.js']` +* `(b|[A-Z]).js`: would match either `b` or an uppercase letter, returning `['b.js', 'E.js']` + +As with regex, parenthese can be nested, so patterns like `((a|b)|c)/b` will work. But it might be easier to achieve your goal using brace expansion. + +#### POSIX bracket expressions + +**Example** + +```js +mm.isMatch('a1', '[[:alpha:][:digit:]]'); +//=> true +``` + +See [expand-brackets](https://github.com/jonschlinkert/expand-brackets) for more information about extended bracket expressions. + +## Notes + +Whenever possible parsing behavior for patterns is based on globbing specifications in Bash 4.3. Patterns that aren't described by Bash follow wildmatch spec (used by git). + +## Benchmarks + +Run the [benchmarks](./benchmark): + +```bash +node benchmark +``` + +As of July 24, 2015: + +```bash +#1: basename-braces + micromatch x 28,335 ops/sec ±0.49% (96 runs sampled) + minimatch x 3,496 ops/sec ±0.76% (98 runs sampled) + +#2: basename + micromatch x 28,602 ops/sec ±0.46% (96 runs sampled) + minimatch x 4,389 ops/sec ±0.38% (98 runs sampled) + +#3: braces-no-glob + micromatch x 405,445 ops/sec ±0.64% (91 runs sampled) + minimatch x 31,078 ops/sec ±0.45% (95 runs sampled) + +#4: braces + micromatch x 81,977 ops/sec ±0.36% (99 runs sampled) + minimatch x 2,986 ops/sec ±0.41% (100 runs sampled) + +#5: immediate + micromatch x 20,753 ops/sec ±0.36% (101 runs sampled) + minimatch x 4,233 ops/sec ±0.34% (100 runs sampled) + +#6: large + micromatch x 755 ops/sec ±0.53% (97 runs sampled) + minimatch x 17.06 ops/sec ±0.25% (46 runs sampled) + +#7: long + micromatch x 7,009 ops/sec ±0.33% (100 runs sampled) + minimatch x 592 ops/sec ±0.39% (96 runs sampled) + +#8: mid + micromatch x 60,071 ops/sec ±0.48% (97 runs sampled) + minimatch x 1,853 ops/sec ±0.72% (99 runs sampled) + +#9: multi-patterns + micromatch x 24,308 ops/sec ±0.67% (98 runs sampled) + minimatch x 2,169 ops/sec ±0.62% (96 runs sampled) + +#10: no-glob + micromatch x 552,116 ops/sec ±0.35% (96 runs sampled) + minimatch x 55,957 ops/sec ±0.32% (94 runs sampled) + +#11: range + micromatch x 321,030 ops/sec ±0.62% (95 runs sampled) + minimatch x 14,247 ops/sec ±0.59% (100 runs sampled) + +#12: shallow + micromatch x 253,455 ops/sec ±0.52% (99 runs sampled) + minimatch x 21,169 ops/sec ±0.54% (97 runs sampled) + +#13: short + micromatch x 661,874 ops/sec ±0.42% (96 runs sampled) + minimatch x 60,228 ops/sec ±0.45% (97 runs sampled) +``` + +## Run tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/micromatch/issues/new) + +Please be sure to run the benchmarks before/after any code changes to judge the impact before you do a PR. thanks! + +## Related + +* [braces](https://github.com/jonschlinkert/braces): Fastest brace expansion for node.js, with the most complete… [more](https://github.com/jonschlinkert/braces) +* [extglob](https://github.com/jonschlinkert/extglob): Convert extended globs to regex-compatible strings. Add (almost) the… [more](https://github.com/jonschlinkert/extglob) +* [expand-brackets](https://github.com/jonschlinkert/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. +* [expand-range](https://github.com/jonschlinkert/expand-range): Fast, bash-like range expansion. Expand a range of numbers… [more](https://github.com/jonschlinkert/expand-range) +* [fill-range](https://github.com/jonschlinkert/fill-range): Fill in a range of numbers or letters, optionally… [more](https://github.com/jonschlinkert/fill-range) +* [gulp-micromatch](https://github.com/tunnckoCore/gulp-micromatch#readme): micromatch as gulp plugin. Filtering vinyl files with glob… [more](https://github.com/tunnckoCore/gulp-micromatch#readme) +* [is-glob](https://github.com/jonschlinkert/is-glob): Returns `true` if the given string looks like a… [more](https://github.com/jonschlinkert/is-glob) +* [parse-glob](https://github.com/jonschlinkert/parse-glob): Parse a glob pattern into an object of tokens. + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2014-2015 [Jon Schlinkert](https://github.com/jonschlinkert) +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on July 24, 2015._ + + diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/index.js new file mode 100755 index 0000000..8cdd931 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/index.js @@ -0,0 +1,415 @@ +/*! + * micromatch + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var diff = require('arr-diff'); +var typeOf = require('kind-of'); +var omit = require('object.omit'); +var unique = require('array-unique'); +var cache = require('regex-cache'); +var isGlob = require('is-glob'); +var expand = require('./lib/expand'); +var utils = require('./lib/utils'); + +/** + * The main function. Pass an array of filepaths, + * and a string or array of glob patterns + * + * @param {Array|String} `files` + * @param {Array|String} `patterns` + * @param {Object} `opts` + * @return {Array} Array of matches + */ + +function micromatch(files, patterns, opts) { + if (!files || !patterns) return []; + opts = opts || {}; + + if (typeof opts.cache === 'undefined') { + opts.cache = true; + } + + if (!Array.isArray(patterns)) { + return match(files, patterns, opts); + } + + var len = patterns.length, i = 0; + var omit = [], keep = []; + + while (len--) { + var glob = patterns[i++]; + if (glob.charCodeAt(0) === 33 /* ! */) { + omit.push.apply(omit, match(files, glob.slice(1), opts)); + } else { + keep.push.apply(keep, match(files, glob, opts)); + } + } + return diff(keep, omit); +} + +/** + * Pass an array of files and a glob pattern as a string. + * + * This function is called by the main `micromatch` function + * If you only need to pass a single pattern you might get + * very minor speed improvements using this function. + * + * @param {Array} `files` + * @param {Array} `pattern` + * @param {Object} `options` + * @return {Array} + */ + +function match(files, pattern, opts) { + if (typeOf(files) !== 'string' && !Array.isArray(files)) { + throw new Error(msg('match', 'files', 'a string or array')); + } + + files = utils.arrayify(files); + opts = opts || {}; + + var negate = opts.negate || false; + var orig = pattern; + + if (typeof pattern === 'string' && opts.nonegate !== true) { + negate = pattern.charAt(0) === '!'; + if (negate) { + pattern = pattern.slice(1); + } + } + + var _isMatch = matcher(pattern, opts); + var len = files.length, i = 0; + var res = []; + + while (i < len) { + var file = files[i++]; + var fp = utils.unixify(file, opts); + + if (!_isMatch(fp)) { continue; } + res.push(fp); + } + + if (res.length === 0) { + if (opts.failglob === true) { + throw new Error('micromatch.match() found no matches for: "' + orig + '".'); + } + + if (opts.nonull || opts.nullglob) { + res.push(utils.unescapeGlob(orig)); + } + } + + // if `negate` was defined, diff negated files + if (negate) { res = diff(files, res); } + + // if `ignore` was defined, diff ignored filed + if (opts.ignore && opts.ignore.length) { + pattern = opts.ignore; + opts = omit(opts, ['ignore']); + res = diff(res, micromatch(res, pattern, opts)); + } + + if (opts.nodupes) { + return unique(res); + } + return res; +} + +/** + * Returns a function that takes a glob pattern or array of glob patterns + * to be used with `Array#filter()`. (Internally this function generates + * the matching function using the [matcher] method). + * + * ```js + * var fn = mm.filter('[a-c]'); + * ['a', 'b', 'c', 'd', 'e'].filter(fn); + * //=> ['a', 'b', 'c'] + * ``` + * + * @param {String|Array} `patterns` Can be a glob or array of globs. + * @param {Options} `opts` Options to pass to the [matcher] method. + * @return {Function} Filter function to be passed to `Array#filter()`. + */ + +function filter(patterns, opts) { + if (!Array.isArray(patterns) && typeof patterns !== 'string') { + throw new TypeError(msg('filter', 'patterns', 'a string or array')); + } + + patterns = utils.arrayify(patterns); + return function (fp) { + if (fp == null) return []; + var len = patterns.length, i = 0; + var res = true; + + fp = utils.unixify(fp, opts); + while (i < len) { + var fn = matcher(patterns[i++], opts); + if (!fn(fp)) { + res = false; + break; + } + } + return res; + }; +} + +/** + * Returns true if the filepath contains the given + * pattern. Can also return a function for matching. + * + * ```js + * isMatch('foo.md', '*.md', {}); + * //=> true + * + * isMatch('*.md', {})('foo.md') + * //=> true + * ``` + * + * @param {String} `fp` + * @param {String} `pattern` + * @param {Object} `opts` + * @return {Boolean} + */ + +function isMatch(fp, pattern, opts) { + if (typeof fp !== 'string') { + throw new TypeError(msg('isMatch', 'filepath', 'a string')); + } + + fp = utils.unixify(fp, opts); + if (typeOf(pattern) === 'object') { + return matcher(fp, pattern); + } + return matcher(pattern, opts)(fp); +} + +/** + * Returns true if the filepath matches the + * given pattern. + */ + +function contains(fp, pattern, opts) { + if (typeof fp !== 'string') { + throw new TypeError(msg('contains', 'pattern', 'a string')); + } + + opts = opts || {}; + opts.contains = (pattern !== ''); + fp = utils.unixify(fp, opts); + + if (opts.contains && !isGlob(pattern)) { + return fp.indexOf(pattern) !== -1; + } + return matcher(pattern, opts)(fp); +} + +/** + * Returns true if a file path matches any of the + * given patterns. + * + * @param {String} `fp` The filepath to test. + * @param {String|Array} `patterns` Glob patterns to use. + * @param {Object} `opts` Options to pass to the `matcher()` function. + * @return {String} + */ + +function any(fp, patterns, opts) { + if (!Array.isArray(patterns) && typeof patterns !== 'string') { + throw new TypeError(msg('any', 'patterns', 'a string or array')); + } + + patterns = utils.arrayify(patterns); + var len = patterns.length; + + fp = utils.unixify(fp, opts); + while (len--) { + var isMatch = matcher(patterns[len], opts); + if (isMatch(fp)) { + return true; + } + } + return false; +} + +/** + * Filter the keys of an object with the given `glob` pattern + * and `options` + * + * @param {Object} `object` + * @param {Pattern} `object` + * @return {Array} + */ + +function matchKeys(obj, glob, options) { + if (typeOf(obj) !== 'object') { + throw new TypeError(msg('matchKeys', 'first argument', 'an object')); + } + + var fn = matcher(glob, options); + var res = {}; + + for (var key in obj) { + if (obj.hasOwnProperty(key) && fn(key)) { + res[key] = obj[key]; + } + } + return res; +} + +/** + * Return a function for matching based on the + * given `pattern` and `options`. + * + * @param {String} `pattern` + * @param {Object} `options` + * @return {Function} + */ + +function matcher(pattern, opts) { + // pattern is a function + if (typeof pattern === 'function') { + return pattern; + } + // pattern is a regex + if (pattern instanceof RegExp) { + return function(fp) { + return pattern.test(fp); + }; + } + + // strings, all the way down... + pattern = utils.unixify(pattern, opts); + + // pattern is a non-glob string + if (!isGlob(pattern)) { + return utils.matchPath(pattern, opts); + } + // pattern is a glob string + var re = makeRe(pattern, opts); + + // `matchBase` is defined + if (opts && opts.matchBase) { + return utils.hasFilename(re, opts); + } + // `matchBase` is not defined + return function(fp) { + fp = utils.unixify(fp, opts); + return re.test(fp); + }; +} + +/** + * Create and cache a regular expression for matching + * file paths. + * + * If the leading character in the `glob` is `!`, a negation + * regex is returned. + * + * @param {String} `glob` + * @param {Object} `options` + * @return {RegExp} + */ + +function toRegex(glob, options) { + if (typeOf(glob) !== 'string') { + throw new Error(msg('toRegex', 'glob', 'a string')); + } + + // clone options to prevent mutating the original object + var opts = Object.create(options || {}); + var flags = opts.flags || ''; + if (opts.nocase && flags.indexOf('i') === -1) { + flags += 'i'; + } + + var parsed = expand(glob, opts); + + // pass in tokens to avoid parsing more than once + opts.negated = opts.negated || parsed.negated; + opts.negate = opts.negated; + glob = wrapGlob(parsed.pattern, opts); + var re; + + try { + re = new RegExp(glob, flags); + return re; + } catch (err) { + var msg = 'micromatch invalid regex: (' + re + ')'; + if (opts.strict) throw new SyntaxError(msg + err); + } + return /$^/; +} + +/** + * Create the regex to do the matching. If the leading + * character in the `glob` is `!` a negation regex is returned. + * + * @param {String} `glob` + * @param {Boolean} `negate` + */ + +function wrapGlob(glob, opts) { + var prefix = (opts && !opts.contains) ? '^' : ''; + var after = (opts && !opts.contains) ? '$' : ''; + glob = ('(?:' + glob + ')' + after); + if (opts && opts.negate) { + return prefix + ('(?!^' + glob + ').*$'); + } + return prefix + glob; +} + +/** + * Wrap `toRegex` to memoize the generated regex + * the string and options don't change + */ + +function makeRe(glob, opts) { + return cache(toRegex, glob, opts); +} + +/** + * Make error messages consistent. Follows this format: + * + * ```js + * msg(methodName, argNumber, nativeType); + * // example: + * msg('matchKeys', 'first', 'an object'); + * ``` + * + * @param {String} `method` + * @param {String} `num` + * @param {String} `type` + * @return {String} + */ + +function msg(method, what, type) { + return 'micromatch.' + method + '(): ' + what + ' should be ' + type + '.'; +} + +/** + * Public methods + */ + +micromatch.any = any; +micromatch.braces = micromatch.braceExpand = require('braces'); +micromatch.contains = contains; +micromatch.expand = expand; +micromatch.filter = filter; +micromatch.isMatch = isMatch; +micromatch.makeRe = makeRe; +micromatch.match = match; +micromatch.matcher = matcher; +micromatch.matchKeys = matchKeys; + +/** + * Expose `micromatch` + */ + +module.exports = micromatch; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/lib/chars.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/lib/chars.js new file mode 100644 index 0000000..a9f7199 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/lib/chars.js @@ -0,0 +1,67 @@ +'use strict'; + +var reverse = function(object, prepender) { + return Object.keys(object).reduce(function(reversed, key) { + var newKey = prepender ? prepender + key : key; // Optionally prepend a string to key. + reversed[object[key]] = newKey; // Swap key and value. + return reversed; // Return the result. + }, {}); +}; + +var chars = {}; + +/** + * Regex for common characters + */ + +chars.escapeRegex = { + '?': /\?/g, + '@': /\@/g, + '!': /\!/g, + '+': /\+/g, + '*': /\*/g, + '(': /\(/g, + ')': /\)/g, + '[': /\[/g, + ']': /\]/g, +}; + +/** + * Escape characters + */ + +chars.ESC = { + '?': '__UNESC_QMRK__', + '@': '__UNESC_AMPE__', + '!': '__UNESC_EXCL__', + '+': '__UNESC_PLUS__', + '*': '__UNESC_STAR__', + ',': '__UNESC_COMMA__', + '(': '__UNESC_LTPAREN__', + ')': '__UNESC_RTPAREN__', + '[': '__UNESC_LTBRACK__', + ']': '__UNESC_RTBRACK__', +}; + +/** + * Unescape characters + */ + +chars.UNESC = reverse(chars.ESC, '\\'); + +chars.ESC_TEMP = { + '?': '__TEMP_QMRK__', + '@': '__TEMP_AMPE__', + '!': '__TEMP_EXCL__', + '*': '__TEMP_STAR__', + '+': '__TEMP_PLUS__', + ',': '__TEMP_COMMA__', + '(': '__TEMP_LTPAREN__', + ')': '__TEMP_RTPAREN__', + '[': '__TEMP_LTBRACK__', + ']': '__TEMP_RTBRACK__', +}; + +chars.TEMP = reverse(chars.ESC_TEMP); + +module.exports = chars; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/lib/expand.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/lib/expand.js new file mode 100644 index 0000000..40d8ac4 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/lib/expand.js @@ -0,0 +1,328 @@ +/*! + * micromatch + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var utils = require('./utils'); +var Glob = require('./glob'); + +/** + * Expose `expand` + */ + +module.exports = expand; + +/** + * Expand a glob pattern to resolve braces and + * similar patterns before converting to regex. + * + * @param {String|Array} `pattern` + * @param {Array} `files` + * @param {Options} `opts` + * @return {Array} + */ + +function expand(pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('micromatch.expand(): argument should be a string.'); + } + + var glob = new Glob(pattern, options || {}); + var opts = glob.options; + + if (typeof opts.braces !== 'boolean' && typeof opts.nobraces !== 'boolean') { + opts.braces = true; + } + + // return early if glob pattern matches special patterns + if (specialCase(pattern) && opts.safemode) { + return new RegExp(utils.escapeRe(pattern), 'g'); + } + + if (glob.pattern === '.*') { + return { + pattern: '\\.' + star, + tokens: tok, + options: opts + }; + } + + if (glob.pattern === '.') { + return { + pattern: '\\.', + tokens: tok, + options: opts + }; + } + + if (glob.pattern === '*') { + return { + pattern: oneStar(opts.dot), + tokens: tok, + options: opts + }; + } + + // parse the glob pattern into tokens + glob.parse(); + var tok = glob.tokens; + tok.is.negated = opts.negated; + + // dotfile handling + if ((opts.dotfiles === true || tok.is.dotfile) && opts.dot !== false) { + opts.dotfiles = true; + opts.dot = true; + } + + if ((opts.dotdirs === true || tok.is.dotdir) && opts.dot !== false) { + opts.dotdirs = true; + opts.dot = true; + } + + // check for braces with a dotfile pattern + if (/[{,]\./.test(glob.pattern)) { + opts.makeRe = false; + opts.dot = true; + } + + if (opts.nonegate !== true) { + opts.negated = glob.negated; + } + + // if the leading character is a dot or a slash, escape it + if (glob.pattern.charAt(0) === '.' && glob.pattern.charAt(1) !== '/') { + glob.pattern = '\\' + glob.pattern; + } + + /** + * Extended globs + */ + + // expand brackets, e.g `[[:alpha:]]` + glob.track('before brackets'); + if (tok.is.brackets) { + glob.brackets(); + } + glob.track('after brackets'); + + // expand braces, e.g `{1..5}` + glob.track('before braces'); + if (tok.is.braces) { + glob.braces(); + } + glob.track('after braces'); + + // expand extglobs, e.g `foo/!(a|b)` + glob.track('before extglob'); + if (tok.is.extglob) { + glob.extglob(); + } + glob.track('after extglob'); + + // special patterns + glob._replace('[!', '[^'); + glob._replace('(?', '(%~'); + glob._replace('[]', '\\[\\]'); + glob._replace('/[', '/' + (opts.dot ? dotfiles : nodot) + '[', true); + glob._replace('/?', '/' + (opts.dot ? dotfiles : nodot) + '[^/]', true); + glob._replace('/.', '/(?=.)\\.', true); + + // windows drives + glob._replace(/^(\w):([\\\/]+?)/gi, '(?=.)$1:$2', true); + + // negate slashes in exclusion ranges + if (glob.pattern.indexOf('[^') !== -1) { + glob.pattern = negateSlash(glob.pattern); + } + + if (opts.globstar !== false && glob.pattern === '**') { + glob.pattern = globstar(opts.dot); + + } else { + // '/*/*/*' => '(?:/*){3}' + glob._replace(/(\/\*)+/g, function (match) { + var len = match.length / 2; + if (len === 1) { return match; } + return '(?:\\/*){' + len + '}'; + }); + + glob.pattern = balance(glob.pattern, '[', ']'); + glob.escape(glob.pattern); + + // if the pattern has `**` + if (tok.is.globstar) { + glob.pattern = collapse(glob.pattern, '/**'); + glob.pattern = collapse(glob.pattern, '**/'); + glob._replace(/\*{2,}/g, '**'); + + // 'foo/*' + glob._replace(/(\w+)\*(?!\/)/g, '$1[^/]*?', true); + glob._replace(/\*\*\/\*(\w)/g, globstar(opts.dot) + '\\/' + (opts.dot ? dotfiles : nodot) + '[^/]*?$1', true); + + if (opts.dot !== true) { + glob._replace(/\*\*\/(.)/g, '(?:**\\/|)$1'); + } + + // 'foo/**' or '{**,*}', but not 'foo**' + if (tok.path.dirname !== '' || /,\*\*|\*\*,/.test(glob.orig)) { + glob._replace('**', globstar(opts.dot), true); + } + } + + // ends with /* + glob._replace(/\/\*$/, '\\/' + oneStar(opts.dot), true); + // ends with *, no slashes + glob._replace(/(?!\/)\*$/, star, true); + // has 'n*.' (partial wildcard w/ file extension) + glob._replace(/([^\/]+)\*/, '$1' + oneStar(true), true); + // has '*' + glob._replace('*', oneStar(opts.dot), true); + glob._replace('?.', '?\\.', true); + glob._replace('?:', '?:', true); + + glob._replace(/\?+/g, function (match) { + var len = match.length; + if (len === 1) { + return qmark; + } + return qmark + '{' + len + '}'; + }); + + // escape '.abc' => '\\.abc' + glob._replace(/\.([*\w]+)/g, '\\.$1'); + // fix '[^\\\\/]' + glob._replace(/\[\^[\\\/]+\]/g, qmark); + // '///' => '\/' + glob._replace(/\/+/g, '\\/'); + // '\\\\\\' => '\\' + glob._replace(/\\{2,}/g, '\\'); + } + + // unescape previously escaped patterns + glob.unescape(glob.pattern); + glob._replace('__UNESC_STAR__', '*'); + + // escape dots that follow qmarks + glob._replace('?.', '?\\.'); + + // remove unnecessary slashes in character classes + glob._replace('[^\\/]', qmark); + + if (glob.pattern.length > 1) { + if (glob.pattern.indexOf('\\/') === 0 && glob.pattern.indexOf('\\/' + nodot) !== 0) { + glob.pattern = '\\/' + nodot + glob.pattern.slice(2); + } else if (/^[\[?*]/.test(glob.pattern)) { + // only prepend the string if we don't want to match dotfiles + glob.pattern = (opts.dot ? dotfiles : nodot) + glob.pattern; + } + } + + return glob; +} + +/** + * Special cases. This is somewhat of a placeholder + * for more advanced logic. + */ + +function specialCase(glob) { + if (glob === '\\') { + return true; + } + return false; +} + +/** + * Collapse repeated character sequences. + * + * ```js + * collapse('a/../../../b', '../'); + * //=> 'a/../b' + * ``` + * + * @param {String} `str` + * @param {String} `ch` Character sequence to collapse + * @return {String} + */ + +function collapse(str, ch) { + var res = str.split(ch); + var isFirst = res[0] === ''; + var isLast = res[res.length - 1] === ''; + res = res.filter(Boolean); + if (isFirst) res.unshift(''); + if (isLast) res.push(''); + return res.join(ch); +} + +/** + * Negate slashes in exclusion ranges, per glob spec: + * + * ```js + * negateSlash('[^foo]'); + * //=> '[^\\/foo]' + * ``` + * + * @param {String} `str` glob pattern + * @return {String} + */ + +function negateSlash(str) { + return str.replace(/\[\^([^\]]*?)\]/g, function (match, inner) { + if (inner.indexOf('/') === -1) { + inner = '\\/' + inner; + } + return '[^' + inner + ']'; + }); +} + +/** + * Escape imbalanced braces/bracket. This is a very + * basic, naive implementation that only does enough + * to serve the purpose. + */ + +function balance(str, a, b) { + var aarr = str.split(a); + var alen = aarr.join('').length; + var blen = str.split(b).join('').length; + + if (alen !== blen) { + str = aarr.join('\\' + a); + return str.split(b).join('\\' + b); + } + return str; +} + +/** + * Special patterns to be converted to regex. + * Heuristics are used to simplify patterns + * and speed up processing. + */ + +var qmark = '[^/]'; +var star = qmark + '*?'; +var nodot = '(?!\\.)(?=.)'; +var dotfileGlob = '(?:\\/|^)\\.{1,2}($|\\/)'; +var dotfiles = '(?!' + dotfileGlob + ')(?=.)'; +var twoStarDot = '(?:(?!' + dotfileGlob + ').)*?'; + +/** + * Create a regex for `*`. + * + * If `dot` is true, or the pattern does not begin with + * a leading star, then return the simpler regex. + */ + +function oneStar(dotfile) { + return dotfile ? '(?!' + dotfileGlob + ')(?=.)' + star : (nodot + star); +} + +function globstar(dotfile) { + if (dotfile) { return twoStarDot; } + return '(?:(?!(?:\\/|^)\\.).)*?'; +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/lib/glob.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/lib/glob.js new file mode 100644 index 0000000..d935d7b --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/lib/glob.js @@ -0,0 +1,210 @@ +'use strict'; + +var braces = require('braces'); +var brackets = require('expand-brackets'); +var extglob = require('extglob'); +var parse = require('parse-glob'); +var chars = require('./chars'); + +/** + * Expose `Glob` + */ + +module.exports = Glob; + +function Glob(pattern, options) { + this.options = options || {}; + this.pattern = pattern; + this.history = []; + this.tokens = {}; + this.init(pattern); +} + +/** + * Initialize defaults + */ + +Glob.prototype.init = function(pattern) { + this.orig = pattern; + this.negated = this.isNegated(); + this.options.track = this.options.track || false; + this.options.makeRe = true; +}; + +/** + * Push a change into `glob.history`. Useful + * for debugging. + */ + +Glob.prototype.track = function(msg) { + if (this.options.track) { + this.history.push({msg: msg, pattern: this.pattern}); + } +}; + +/** + * Return true if the glob pattern has the given + * `ch`aracter. + * + * @param {String} `pattern` + * @param {String} `ch` + * @return {Boolean} + */ + +Glob.prototype.has = function(pattern, ch) { + if (ch instanceof RegExp) { + return ch.test(pattern); + } + return pattern.indexOf(ch) !== -1; +}; + +/** + * Return true if `glob.pattern` was negated + * with `!`. Also removes the `!` from the pattern. + * + * @return {Boolean} + */ + +Glob.prototype.isNegated = function() { + if (this.tokens.isNegated) return true; + if (this.pattern.charCodeAt(0) === 33 /* '!' */) { + this.pattern = this.pattern.slice(1); + return true; + } + return false; +}; + +/** + * Expand braces in the given glob pattern. + * + * We only need to use the [braces] lib when + * patterns are nested. + */ + +Glob.prototype.braces = function() { + if (this.options.nobraces !== true && this.options.nobrace !== true) { + // naive/fast check for imbalanced characters + var a = this.pattern.match(/[\{\(\[]/g); + var b = this.pattern.match(/[\}\)\]]/g); + + // if imbalanced, don't optimize the pattern + if (a && b && (a.length !== b.length)) { + this.options.makeRe = false; + } + + // expand brace patterns and join the resulting array + var expanded = braces(this.pattern, this.options); + this.pattern = expanded.join('|'); + } +}; + +/** + * Expand bracket expressions in `glob.pattern` + */ + +Glob.prototype.brackets = function() { + if (this.options.nobrackets !== true) { + this.pattern = brackets(this.pattern); + } +}; + +/** + * Expand bracket expressions in `glob.pattern` + */ + +Glob.prototype.extglob = function() { + if (this.options.noextglob !== true) { + this.pattern = extglob(this.pattern, {escape: true}); + } +}; + +/** + * Parse the given glob `pattern` or `glob.pattern` + */ + +Glob.prototype.parse = function(pattern) { + this.tokens = parse(pattern || this.pattern, true); + return this.tokens; +}; + +/** + * Replace `a` with `b`. Also tracks the change before and + * after each replacement. This is disabled by default, but + * can be enabled by setting `options.track` to true. + * + * Also, when the pattern is a string, `.split()` is used, + * because it's much faster than replace. + * + * @param {RegExp|String} `a` + * @param {String} `b` + * @param {Boolean} `escape` When `true`, escapes `*` and `?` in the replacement. + * @return {String} + */ + +Glob.prototype._replace = function(a, b, escape) { + this.track('before (find): "' + a + '" (replace with): "' + b + '"'); + if (escape) b = esc(b); + if (a && b && typeof a === 'string') { + this.pattern = this.pattern.split(a).join(b); + } else if (a instanceof RegExp) { + this.pattern = this.pattern.replace(a, b); + } + this.track('after'); +}; + +/** + * Escape special characters in the given string. + * + * @param {String} `str` Glob pattern + * @return {String} + */ + +Glob.prototype.escape = function(str) { + this.track('before escape: '); + var re = /["\\](['"]?[^"'\\]['"]?)/g; + + this.pattern = str.replace(re, function($0, $1) { + var o = chars.ESC; + var ch = o && o[$1]; + if (ch) { + return ch; + } + if (/[a-z]/i.test($0)) { + return $0.split('\\').join(''); + } + return $0; + }); + + this.track('after escape: '); +}; + +/** + * Unescape special characters in the given string. + * + * @param {String} `str` + * @return {String} + */ + +Glob.prototype.unescape = function(str) { + var re = /__([A-Z]+)_([A-Z]+)__/g; + this.pattern = str.replace(re, function($0, $1) { + return chars[$1][$0]; + }); + this.pattern = unesc(this.pattern); +}; + +/** + * Escape/unescape utils + */ + +function esc(str) { + str = str.split('?').join('%~'); + str = str.split('*').join('%%'); + return str; +} + +function unesc(str) { + str = str.split('%~').join('?'); + str = str.split('%%').join('*'); + return str; +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/lib/utils.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/lib/utils.js new file mode 100644 index 0000000..b12389c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/lib/utils.js @@ -0,0 +1,88 @@ +'use strict'; + +var path = require('path'); +var fileRe = require('filename-regex'); +var win32 = process && process.platform === 'win32'; + +/** + * Expose `utils` + */ + +var utils = module.exports; + + +utils.filename = function filename(fp) { + var seg = fp.match(fileRe()); + return seg && seg[0]; +}; + +utils.isPath = function isPath(pattern, opts) { + return function (fp) { + return utils.unixify(fp, opts) === pattern; + }; +}; + +utils.hasPath = function hasPath(pattern, opts) { + return function (fp) { + return utils.unixify(fp, opts).indexOf(pattern) !== -1; + }; +}; + +utils.matchPath = function matchPath(pattern, opts) { + var fn = (opts && opts.contains) + ? utils.hasPath(pattern, opts) + : utils.isPath(pattern, opts); + return fn; +}; + +utils.hasFilename = function hasFilename(re) { + return function (fp) { + var name = utils.filename(fp); + return name && re.test(name); + }; +}; + +/** + * Coerce `val` to an array + * + * @param {*} val + * @return {Array} + */ + +utils.arrayify = function arrayify(val) { + return !Array.isArray(val) + ? [val] + : val; +}; + +/** + * Normalize all slashes in a file path or glob pattern to + * forward slashes. + */ + +utils.unixify = function unixify(fp, opts) { + if (opts && opts.unixify === false) return fp; + if (opts && opts.unixify === true || win32 || path.sep === '\\') { + return fp.split('\\').join('/'); + } + if (opts && opts.unescape === true) { + return fp ? fp.toString().replace(/\\(\w)/g, '$1') : ''; + } + return fp; +}; + +/** + * Escape/unescape utils + */ + +utils.escapePath = function escapePath(fp) { + return fp.replace(/[\\.]/g, '\\$&'); +}; + +utils.unescapeGlob = function unescapeGlob(fp) { + return fp.replace(/[\\"']/g, ''); +}; + +utils.escapeRe = function escapeRe(str) { + return str.replace(/[-[\\$*+?.#^\s{}(|)\]]/g, '\\$&'); +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/LICENSE new file mode 100755 index 0000000..0acf79d --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/LICENSE @@ -0,0 +1,24 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/README.md new file mode 100755 index 0000000..34a71f9 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/README.md @@ -0,0 +1,75 @@ +# arr-diff [![NPM version](https://badge.fury.io/js/arr-diff.svg)](http://badge.fury.io/js/arr-diff) [![Build Status](https://travis-ci.org/jonschlinkert/arr-diff.svg)](https://travis-ci.org/jonschlinkert/arr-diff) + +> Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons. + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i arr-diff --save +``` + +Install with [bower](http://bower.io/) + +```sh +$ bower install arr-diff --save +``` + +## API + +### [diff](index.js#L33) + +Return the difference between the first array and additional arrays. + +**Params** + +* `a` **{Array}** +* `b` **{Array}** +* `returns` **{Array}** + +**Example** + +```js +var diff = require('arr-diff'); + +var a = ['a', 'b', 'c', 'd']; +var b = ['b', 'c']; + +console.log(diff(a, b)) +//=> ['a', 'd'] +``` + +## Related projects + +* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten) +* [array-filter](https://www.npmjs.com/package/array-filter): Array#filter for older browsers. | [homepage](https://github.com/juliangruber/array-filter) +* [array-intersection](https://www.npmjs.com/package/array-intersection): Return an array with the unique values present in _all_ given arrays using strict equality… [more](https://www.npmjs.com/package/array-intersection) | [homepage](https://github.com/jonschlinkert/array-intersection) + +## Running tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/arr-diff/issues/new). + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on August 23, 2015._ diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/index.js new file mode 100755 index 0000000..f543f5a --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/index.js @@ -0,0 +1,58 @@ +/*! + * arr-diff + * + * Copyright (c) 2014 Jon Schlinkert, contributors. + * Licensed under the MIT License + */ + +'use strict'; + +var flatten = require('arr-flatten'); +var slice = require('array-slice'); + +/** + * Return the difference between the first array and + * additional arrays. + * + * ```js + * var diff = require('{%= name %}'); + * + * var a = ['a', 'b', 'c', 'd']; + * var b = ['b', 'c']; + * + * console.log(diff(a, b)) + * //=> ['a', 'd'] + * ``` + * + * @param {Array} `a` + * @param {Array} `b` + * @return {Array} + * @api public + */ + +function diff(arr, arrays) { + var argsLen = arguments.length; + var len = arr.length, i = -1; + var res = [], arrays; + + if (argsLen === 1) { + return arr; + } + + if (argsLen > 2) { + arrays = flatten(slice(arguments, 1)); + } + + while (++i < len) { + if (!~arrays.indexOf(arr[i])) { + res.push(arr[i]); + } + } + return res; +} + +/** + * Expose `diff` + */ + +module.exports = diff; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/arr-flatten/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/arr-flatten/LICENSE new file mode 100755 index 0000000..fa30c4c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/arr-flatten/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/arr-flatten/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/arr-flatten/README.md new file mode 100755 index 0000000..bd696e6 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/arr-flatten/README.md @@ -0,0 +1,73 @@ +# arr-flatten [![NPM version](https://badge.fury.io/js/arr-flatten.svg)](http://badge.fury.io/js/arr-flatten) [![Build Status](https://travis-ci.org/jonschlinkert/arr-flatten.svg)](https://travis-ci.org/jonschlinkert/arr-flatten) + +> Recursively flatten an array or arrays. This is the fastest implementation of array flatten. + +Why another flatten utility? I wanted the fastest implementation I could find, with implementation choices that should work for 95% of use cases, but no cruft to cover the other 5%. + +## Run benchmarks + +```bash +npm run benchmarks +``` + +Benchmark results comparing this library to [array-flatten]: + +```bash +#1: large.js + arr-flatten.js x 487,030 ops/sec ±0.67% (92 runs sampled) + array-flatten.js x 347,020 ops/sec ±0.57% (98 runs sampled) + +#2: medium.js + arr-flatten.js x 1,914,516 ops/sec ±0.76% (94 runs sampled) + array-flatten.js x 1,391,661 ops/sec ±0.63% (96 runs sampled) + +#3: small.js + arr-flatten.js x 5,158,980 ops/sec ±0.85% (94 runs sampled) + array-flatten.js x 3,683,173 ops/sec ±0.79% (97 runs sampled) +``` + +## Run tests + +Install dev dependencies: + +```bash +npm i -d && npm test +``` + +## Install with [npm](npmjs.org) + +```bash +npm i arr-flatten --save +``` +### Install with [bower](https://github.com/bower/bower) + +```bash +bower install arr-flatten --save +``` + + +## Usage + +```js +var flatten = require('arr-flatten'); + +flatten(['a', ['b', ['c']], 'd', ['e']]); +//=> ['a', 'b', 'c', 'd', 'e'] +``` + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2014-2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on March 11, 2015._ + +[array-flatten]: https://github.com/blakeembrey/array-flatten \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/arr-flatten/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/arr-flatten/index.js new file mode 100755 index 0000000..f74e48c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/arr-flatten/index.js @@ -0,0 +1,27 @@ +/*! + * arr-flatten + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +module.exports = function flatten(arr) { + return flat(arr, []); +}; + +function flat(arr, res) { + var len = arr.length; + var i = -1; + + while (len--) { + var cur = arr[++i]; + if (Array.isArray(cur)) { + flat(cur, res); + } else { + res.push(cur); + } + } + return res; +} \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/arr-flatten/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/arr-flatten/package.json new file mode 100644 index 0000000..c3929b4 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/arr-flatten/package.json @@ -0,0 +1,73 @@ +{ + "name": "arr-flatten", + "description": "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.", + "version": "1.0.1", + "homepage": "https://github.com/jonschlinkert/arr-flatten", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/arr-flatten.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/arr-flatten/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/arr-flatten/blob/master/LICENSE" + }, + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha", + "benchmarks": "node benchmark" + }, + "devDependencies": { + "array-flatten": "^1.0.2", + "array-slice": "^0.2.2", + "benchmarked": "^0.1.3", + "chalk": "^0.5.1", + "glob": "^4.3.5", + "kind-of": "^1.0.0" + }, + "keywords": [ + "arr", + "array", + "elements", + "flat", + "flatten", + "nested", + "recurse", + "recursive", + "recursively" + ], + "gitHead": "7b3706eaa0093d8f5ba65af8ed590b6fcb3fe7cf", + "_id": "arr-flatten@1.0.1", + "_shasum": "e5ffe54d45e19f32f216e91eb99c8ce892bb604b", + "_from": "arr-flatten@>=1.0.1 <2.0.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "e5ffe54d45e19f32f216e91eb99c8ce892bb604b", + "tarball": "http://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/array-slice/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/array-slice/LICENSE new file mode 100755 index 0000000..c2d4bd0 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/array-slice/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, Jon Schlinkert.Copyright (c) 2012-2015, The Dojo Foundation.copyright (c) 2009-2015, Jeremy Ashkenas. + +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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/array-slice/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/array-slice/README.md new file mode 100755 index 0000000..a26c98e --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/array-slice/README.md @@ -0,0 +1,54 @@ +# array-slice [![NPM version](https://badge.fury.io/js/array-slice.svg)](http://badge.fury.io/js/array-slice) [![Build Status](https://travis-ci.org/jonschlinkert/array-slice.svg)](https://travis-ci.org/jonschlinkert/array-slice) + +> Array-slice method. Slices `array` from the `start` index up to, but not including, the `end` index. + +This function is used instead of `Array#slice` to support node lists in IE < 9 and to ensure dense arrays are returned. + +## Install with [npm](npmjs.org) + +```bash +npm i array-slice --save +``` + +## Usage + +```js +var slice = require('array-slice'); +var arr = ['a', 'b', 'd', 'e', 'f', 'g', 'h', 'i', 'j']; + +slice(arr, 3, 6); +//=> ['e', 'f', 'g'] +``` + +## Useful array utils + * [arr-diff](https://github.com/jonschlinkert/arr-diff): Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons. + * [arr-filter](https://github.com/jonschlinkert/arr-filter): Faster alternative to javascript's native filter method. + * [arr-flatten](https://github.com/jonschlinkert/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. + * [arr-union](https://github.com/jonschlinkert/arr-union): Combines a list of arrays, returning a single array with unique values, using strict equality for comparisons. + * [array-unique](https://github.com/jonschlinkert/array-unique): Return an array free of duplicate values. Fastest ES5 implementation. + * [array-intersection](https://github.com/jonschlinkert/array-intersection): Return an array with the unique values present in _all_ given arrays using strict equality for comparisons. + +## Running tests +Install dev dependencies: + +```bash +npm i -d && npm test +``` + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/array-slice/issues) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on April 07, 2015._ diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/array-slice/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/array-slice/index.js new file mode 100755 index 0000000..785fd02 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/array-slice/index.js @@ -0,0 +1,36 @@ +/*! + * array-slice + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +module.exports = function slice(arr, start, end) { + var len = arr.length >>> 0; + var range = []; + + start = idx(arr, start); + end = idx(arr, end, len); + + while (start < end) { + range.push(arr[start++]); + } + return range; +}; + + +function idx(arr, pos, end) { + var len = arr.length >>> 0; + + if (pos == null) { + pos = end || 0; + } else if (pos < 0) { + pos = Math.max(len + pos, 0); + } else { + pos = Math.min(pos, len); + } + + return pos; +} \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/array-slice/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/array-slice/package.json new file mode 100644 index 0000000..213910a --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/node_modules/array-slice/package.json @@ -0,0 +1,65 @@ +{ + "name": "array-slice", + "description": "Array-slice method. Slices `array` from the `start` index up to, but not including, the `end` index.", + "version": "0.2.3", + "homepage": "https://github.com/jonschlinkert/array-slice", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/array-slice.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/array-slice/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/array-slice/blob/master/LICENSE" + }, + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "mocha": "*", + "should": "^5.2.0" + }, + "keywords": [ + "array", + "javascript", + "js", + "slice", + "util", + "utils" + ], + "gitHead": "15bcb1d3d2d5689a1f519207cecb3ab3a63b8654", + "_id": "array-slice@0.2.3", + "_shasum": "dd3cfb80ed7973a75117cdac69b0b99ec86186f5", + "_from": "array-slice@>=0.2.3 <0.3.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "dd3cfb80ed7973a75117cdac69b0b99ec86186f5", + "tarball": "http://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/package.json new file mode 100644 index 0000000..2fd4072 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/arr-diff/package.json @@ -0,0 +1,77 @@ +{ + "name": "arr-diff", + "description": "Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons.", + "version": "1.1.0", + "homepage": "https://github.com/jonschlinkert/arr-diff", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/arr-diff.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/arr-diff/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" + }, + "devDependencies": { + "array-differ": "^1.0.0", + "benchmarked": "^0.1.4", + "chalk": "^1.1.1", + "mocha": "^2.2.5", + "should": "^7.0.4" + }, + "keywords": [ + "arr", + "array", + "diff", + "differ", + "difference" + ], + "verb": { + "related": { + "list": [ + "arr-flatten", + "array-filter", + "array-intersection" + ] + } + }, + "gitHead": "a749b8f9a21dae711050a14e580860abe7299a01", + "_id": "arr-diff@1.1.0", + "_shasum": "687c32758163588fef7de7b36fabe495eb1a399a", + "_from": "arr-diff@>=1.0.1 <2.0.0", + "_npmVersion": "2.10.1", + "_nodeVersion": "0.12.4", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "687c32758163588fef7de7b36fabe495eb1a399a", + "tarball": "http://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/array-unique/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/array-unique/LICENSE new file mode 100755 index 0000000..fa30c4c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/array-unique/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/array-unique/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/array-unique/README.md new file mode 100755 index 0000000..2e28774 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/array-unique/README.md @@ -0,0 +1,51 @@ +# array-unique [![NPM version](https://badge.fury.io/js/array-unique.svg)](http://badge.fury.io/js/array-unique) [![Build Status](https://travis-ci.org/jonschlinkert/array-unique.svg)](https://travis-ci.org/jonschlinkert/array-unique) + +> Return an array free of duplicate values. Fastest ES5 implementation. + +## Install with [npm](npmjs.org) + +```bash +npm i array-unique --save +``` + +## Usage + +```js +var unique = require('array-unique'); + +unique(['a', 'b', 'c', 'c']); +//=> ['a', 'b', 'c'] +``` + +## Related +* [arr-diff](https://github.com/jonschlinkert/arr-diff): Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons. +* [arr-union](https://github.com/jonschlinkert/arr-union): Returns an array of unique values using strict equality for comparisons. +* [arr-flatten](https://github.com/jonschlinkert/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. +* [arr-reduce](https://github.com/jonschlinkert/arr-reduce): Fast array reduce that also loops over sparse elements. +* [arr-map](https://github.com/jonschlinkert/arr-map): Faster, node.js focused alternative to JavaScript's native array map. +* [arr-pluck](https://github.com/jonschlinkert/arr-pluck): Retrieves the value of a specified property from all elements in the collection. + +## Run tests +Install dev dependencies. + +```bash +npm i -d && npm test +``` + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/array-unique/issues) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on March 24, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/array-unique/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/array-unique/index.js new file mode 100755 index 0000000..7fa75af --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/array-unique/index.js @@ -0,0 +1,28 @@ +/*! + * array-unique + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +module.exports = function unique(arr) { + if (!Array.isArray(arr)) { + throw new TypeError('array-unique expects an array.'); + } + + var len = arr.length; + var i = -1; + + while (i++ < len) { + var j = i + 1; + + for (; j < arr.length; ++j) { + if (arr[i] === arr[j]) { + arr.splice(j--, 1); + } + } + } + return arr; +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/array-unique/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/array-unique/package.json new file mode 100644 index 0000000..3c39f2b --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/array-unique/package.json @@ -0,0 +1,59 @@ +{ + "name": "array-unique", + "description": "Return an array free of duplicate values. Fastest ES5 implementation.", + "version": "0.2.1", + "homepage": "https://github.com/jonschlinkert/array-unique", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/array-unique.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/array-unique/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/array-unique/blob/master/LICENSE" + }, + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "array-uniq": "^1.0.2", + "benchmarked": "^0.1.3", + "mocha": "*", + "should": "*" + }, + "gitHead": "36fde8e586fb7cf880b8b3aa6515df889e64ed85", + "_id": "array-unique@0.2.1", + "_shasum": "a1d97ccafcbc2625cc70fadceb36a50c58b01a53", + "_from": "array-unique@>=0.2.1 <0.3.0", + "_npmVersion": "2.7.1", + "_nodeVersion": "1.6.2", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "a1d97ccafcbc2625cc70fadceb36a50c58b01a53", + "tarball": "http://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/LICENSE new file mode 100644 index 0000000..5a9956a --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/LICENSE @@ -0,0 +1,24 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/README.md new file mode 100644 index 0000000..2998b06 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/README.md @@ -0,0 +1,242 @@ +# braces [![NPM version](https://badge.fury.io/js/braces.svg)](http://badge.fury.io/js/braces) + +> Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces specification. + + - Complete support for the braces part of the [Bash 4.3 specification][bash]. Braces passes [all of the relevant unit tests](#bash-4-3-support) from the spec. + - Expands comma-separated values: `a/{b,c}/d` => `['a/b/d', 'a/c/d']` + - Expands alphabetical or numerical ranges: `{1..3}` => `['1', '2', '3']` + - [Very fast](#benchmarks) + - [Special characters](./patterns.md) can be used to generate interesting patterns. + + +## Install with [npm](npmjs.org) + +```bash +npm i braces --save +``` + + +## Example usage + +```js +var braces = require('braces'); + +braces('a/{x,y}/c{d}e') +//=> ['a/x/cde', 'a/y/cde'] + +braces('a/b/c/{x,y}') +//=> ['a/b/c/x', 'a/b/c/y'] + +braces('a/{x,{1..5},y}/c{d}e') +//=> ['a/x/cde', 'a/1/cde', 'a/y/cde', 'a/2/cde', 'a/3/cde', 'a/4/cde', 'a/5/cde'] +``` + +### Pro tip! + +> Use braces to generate test fixtures! + +**Example** + +```js +var braces = require('./'); +var path = require('path'); +var fs = require('fs'); + +braces('blah/{a..z}.js').forEach(function(fp) { + if (!fs.existsSync(path.dirname(fp))) { + fs.mkdirSync(path.dirname(fp)); + } + fs.writeFileSync(fp, ''); +}); +``` + +See the [tests](./test/test.js) for more examples and use cases (also see the [bash spec tests](./test/bash-mm-adjusted.js)); + + +### Range expansion + +Uses [expand-range](https://github.com/jonschlinkert/expand-range) for range expansion. + +```js +braces('a{1..3}b') +//=> ['a1b', 'a2b', 'a3b'] + +braces('a{5..8}b') +//=> ['a5b', 'a6b', 'a7b', 'a8b'] + +braces('a{00..05}b') +//=> ['a00b', 'a01b', 'a02b', 'a03b', 'a04b', 'a05b'] + +braces('a{01..03}b') +//=> ['a01b', 'a02b', 'a03b'] + +braces('a{000..005}b') +//=> ['a000b', 'a001b', 'a002b', 'a003b', 'a004b', 'a005b'] + +braces('a{a..e}b') +//=> ['aab', 'abb', 'acb', 'adb', 'aeb'] + +braces('a{A..E}b') +//=> ['aAb', 'aBb', 'aCb', 'aDb', 'aEb'] +``` + +Pass a function as the last argument to customize range expansions: + +```js +var range = braces('x{a..e}y', function (str, i) { + return String.fromCharCode(str) + i; +}); + +console.log(range); +//=> ['xa0y', 'xb1y', 'xc2y', 'xd3y', 'xe4y'] +``` + +See [expand-range] for benchmarks, tests and the full list of range expansion features. + +## Options + +### options.makeRe + +Type: `Boolean` + +Deafault: `false` + +Return a regex-optimal string. If you're using braces to generate regex, this will result in dramatically faster performance. + +**Examples** + +With the default settings (`{makeRe: false}`): + +```js +braces('{1..5}'); +//=> ['1', '2', '3', '4', '5'] +``` + +With `{makeRe: true}`: + +```js +braces('{1..5}', {makeRe: true}); +//=> ['[1-5]'] + +braces('{3..9..3}', {makeRe: true}); +//=> ['(3|6|9)'] +``` + +### options.bash + +Type: `Boolean` + +Default: `false` + +Enables complete support for the Bash specification. The downside is a 20-25% speed decrease. + +**Example** + +Using the default setting (`{bash: false}`): + +```js +braces('a{b}c'); +//=> ['abc'] +``` + +In bash (and minimatch), braces with one item are not expanded. To get the same result with braces, set `{bash: true}`: + +```js +braces('a{b}c', {bash: true}); +//=> ['a{b}c'] +``` + +### options.nodupes + +Type: `Boolean` + +Deafault: `true` + +Duplicates are removed by default. To keep duplicates, pass `{nodupes: false}` on the options + + + +## Bash 4.3 Support + +> Better support for Bash 4.3 than minimatch + +This project has comprehensive unit tests, including tests coverted from [Bash 4.3][bash]. Currently only 8 of 102 unit tests fail, and + + +## Run benchmarks + +Install dev dependencies: + +```bash +npm i -d && npm benchmark +``` + + +```bash +#1: escape.js + brace-expansion.js x 114,934 ops/sec ±1.24% (93 runs sampled) + braces.js x 342,254 ops/sec ±0.84% (90 runs sampled) + +#2: exponent.js + brace-expansion.js x 12,359 ops/sec ±0.86% (96 runs sampled) + braces.js x 20,389 ops/sec ±0.71% (97 runs sampled) + +#3: multiple.js + brace-expansion.js x 114,469 ops/sec ±1.44% (94 runs sampled) + braces.js x 401,621 ops/sec ±0.87% (91 runs sampled) + +#4: nested.js + brace-expansion.js x 102,769 ops/sec ±1.55% (92 runs sampled) + braces.js x 314,088 ops/sec ±0.71% (98 runs sampled) + +#5: normal.js + brace-expansion.js x 157,577 ops/sec ±1.65% (91 runs sampled) + braces.js x 1,115,950 ops/sec ±0.74% (94 runs sampled) + +#6: range.js + brace-expansion.js x 138,822 ops/sec ±1.71% (91 runs sampled) + braces.js x 1,108,353 ops/sec ±0.85% (94 runs sampled) +``` + + +## Run tests + +Install dev dependencies: + +```bash +npm i -d && npm test +``` + +## Related + +- [micromatch]: wildcard/glob matcher for javascript. a faster alternative to minimatch. +- [fill-range]: Fill in a range of numbers or letters, optionally passing an increment or multiplier to use +- [expand-range]: Wraps fill-range for fast, bash-like range expansion in strings. Expand a range of numbers or letters, uppercase or lowercase + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/braces/issues). + +Please run benchmarks before and after any code changes to what the impact of the code changes are before submitting a PR. + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2014-2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on March 18, 2015._ + +[bash]: www.gnu.org/software/bash/ +[braces]: https://github.com/jonschlinkert/braces +[expand-range]: https://github.com/jonschlinkert/expand-range +[fill-range]: https://github.com/jonschlinkert/fill-range +[micromatch]: https://github.com/jonschlinkert/micromatch +[minimatch]: https://github.com/isaacs/minimatch + \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/index.js new file mode 100644 index 0000000..39e46ad --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/index.js @@ -0,0 +1,400 @@ +/*! + * braces + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT license. + */ + +'use strict'; + +/** + * Module dependencies + */ + +var lazy = require('lazy-cache')(require); +lazy('expand-range', 'expand'); +lazy('repeat-element', 'repeat'); +lazy('preserve', 'tokens'); + +/** + * Expose `braces` + */ + +module.exports = function (str, options) { + if (typeof str !== 'string') { + throw new Error('braces expects a string'); + } + return braces(str, options); +}; + +/** + * Expand `{foo,bar}` or `{1..5}` braces in the + * given `string`. + * + * @param {String} `str` + * @param {Array} `arr` + * @param {Object} `options` + * @return {Array} + */ + +function braces(str, arr, options) { + if (str === '') { + return []; + } + + if (!Array.isArray(arr)) { + options = arr; + arr = []; + } + + var opts = options || {}; + arr = arr || []; + + if (typeof opts.nodupes === 'undefined') { + opts.nodupes = true; + } + + var fn = opts.fn; + var es6; + + if (typeof opts === 'function') { + fn = opts; + opts = {}; + } + + if (!(patternRe instanceof RegExp)) { + patternRe = patternRegex(); + } + + var matches = str.match(patternRe) || []; + var m = matches[0]; + + switch(m) { + case '\\,': + return escapeCommas(str, arr, opts); + case '\\.': + return escapeDots(str, arr, opts); + case '\/.': + return escapePaths(str, arr, opts); + case ' ': + return splitWhitespace(str); + case '{,}': + return exponential(str, opts, braces); + case '{}': + return emptyBraces(str, arr, opts); + case '\\{': + case '\\}': + return escapeBraces(str, arr, opts); + case '${': + if (!/\{[^{]+\{/.test(str)) { + return arr.concat(str); + } else { + es6 = true; + str = lazy.tokens.before(str, es6Regex()); + } + } + + if (!(braceRe instanceof RegExp)) { + braceRe = braceRegex(); + } + + var match = braceRe.exec(str); + if (match == null) { + return [str]; + } + + var outter = match[1]; + var inner = match[2]; + if (inner === '') { return [str]; } + + var segs, segsLength; + + if (inner.indexOf('..') !== -1) { + segs = lazy.expand(inner, opts, fn) || inner.split(','); + segsLength = segs.length; + + } else if (inner[0] === '"' || inner[0] === '\'') { + return arr.concat(str.split(/['"]/).join('')); + + } else { + segs = inner.split(','); + if (opts.makeRe) { + return braces(str.replace(outter, wrap(segs, '|')), opts); + } + + segsLength = segs.length; + if (segsLength === 1 && opts.bash) { + segs[0] = wrap(segs[0], '\\'); + } + } + + var len = segs.length; + var i = 0, val; + + while (len--) { + var path = segs[i++]; + + if (/(\.[^.\/])/.test(path)) { + if (segsLength > 1) { + return segs; + } else { + return [str]; + } + } + + val = splice(str, outter, path); + + if (/\{[^{}]+?\}/.test(val)) { + arr = braces(val, arr, opts); + } else if (val !== '') { + if (opts.nodupes && arr.indexOf(val) !== -1) { continue; } + arr.push(es6 ? lazy.tokens.after(val) : val); + } + } + + if (opts.strict) { return filter(arr, filterEmpty); } + return arr; +} + +/** + * Expand exponential ranges + * + * `a{,}{,}` => ['a', 'a', 'a', 'a'] + */ + +function exponential(str, options, fn) { + if (typeof options === 'function') { + fn = options; + options = null; + } + + var opts = options || {}; + var esc = '__ESC_EXP__'; + var exp = 0; + var res; + + var parts = str.split('{,}'); + if (opts.nodupes) { + return fn(parts.join(''), opts); + } + + exp = parts.length - 1; + res = fn(parts.join(esc), opts); + var len = res.length; + var arr = []; + var i = 0; + + while (len--) { + var ele = res[i++]; + var idx = ele.indexOf(esc); + + if (idx === -1) { + arr.push(ele); + + } else { + ele = ele.split('__ESC_EXP__').join(''); + if (!!ele && opts.nodupes !== false) { + arr.push(ele); + + } else { + var num = Math.pow(2, exp); + arr.push.apply(arr, lazy.repeat(ele, num)); + } + } + } + return arr; +} + +/** + * Wrap a value with parens, brackets or braces, + * based on the given character/separator. + * + * @param {String|Array} `val` + * @param {String} `ch` + * @return {String} + */ + +function wrap(val, ch) { + if (ch === '|') { + return '(' + val.join(ch) + ')'; + } + if (ch === ',') { + return '{' + val.join(ch) + '}'; + } + if (ch === '-') { + return '[' + val.join(ch) + ']'; + } + if (ch === '\\') { + return '\\{' + val + '\\}'; + } +} + +/** + * Handle empty braces: `{}` + */ + +function emptyBraces(str, arr, opts) { + return braces(str.split('{}').join('\\{\\}'), arr, opts); +} + +/** + * Filter out empty-ish values + */ + +function filterEmpty(ele) { + return !!ele && ele !== '\\'; +} + +/** + * Handle patterns with whitespace + */ + +function splitWhitespace(str) { + var segs = str.split(' '); + var len = segs.length; + var res = []; + var i = 0; + + while (len--) { + res.push.apply(res, braces(segs[i++])); + } + return res; +} + +/** + * Handle escaped braces: `\\{foo,bar}` + */ + +function escapeBraces(str, arr, opts) { + if (!/\{[^{]+\{/.test(str)) { + return arr.concat(str.split('\\').join('')); + } else { + str = str.split('\\{').join('__LT_BRACE__'); + str = str.split('\\}').join('__RT_BRACE__'); + return map(braces(str, arr, opts), function (ele) { + ele = ele.split('__LT_BRACE__').join('{'); + return ele.split('__RT_BRACE__').join('}'); + }); + } +} + +/** + * Handle escaped dots: `{1\\.2}` + */ + +function escapeDots(str, arr, opts) { + if (!/[^\\]\..+\\\./.test(str)) { + return arr.concat(str.split('\\').join('')); + } else { + str = str.split('\\.').join('__ESC_DOT__'); + return map(braces(str, arr, opts), function (ele) { + return ele.split('__ESC_DOT__').join('.'); + }); + } +} + +/** + * Handle escaped dots: `{1\\.2}` + */ + +function escapePaths(str, arr, opts) { + str = str.split('\/.').join('__ESC_PATH__'); + return map(braces(str, arr, opts), function (ele) { + return ele.split('__ESC_PATH__').join('\/.'); + }); +} + +/** + * Handle escaped commas: `{a\\,b}` + */ + +function escapeCommas(str, arr, opts) { + if (!/\w,/.test(str)) { + return arr.concat(str.split('\\').join('')); + } else { + str = str.split('\\,').join('__ESC_COMMA__'); + return map(braces(str, arr, opts), function (ele) { + return ele.split('__ESC_COMMA__').join(','); + }); + } +} + +/** + * Regex for common patterns + */ + +function patternRegex() { + return /\$\{|[ \t]|{}|{,}|\\,(?=.*[{}])|\/\.(?=.*[{}])|\\\.(?={)|\\{|\\}/; +} + +/** + * Braces regex. + */ + +function braceRegex() { + return /.*(\\?\{([^}]+)\})/; +} + +/** + * es6 delimiter regex. + */ + +function es6Regex() { + return /\$\{([^}]+)\}/; +} + +var braceRe; +var patternRe; + +/** + * Faster alternative to `String.replace()` when the + * index of the token to be replaces can't be supplied + */ + +function splice(str, token, replacement) { + var i = str.indexOf(token); + return str.substr(0, i) + replacement + + str.substr(i + token.length); +} + +/** + * Fast array map + */ + +function map(arr, fn) { + if (arr == null) { + return []; + } + + var len = arr.length; + var res = new Array(len); + var i = -1; + + while (++i < len) { + res[i] = fn(arr[i], i, arr); + } + + return res; +} + +/** + * Fast array filter + */ + +function filter(arr, cb) { + if (arr == null) return []; + if (typeof cb !== 'function') { + throw new TypeError('braces: filter expects a callback function.'); + } + + var len = arr.length; + var res = arr.slice(); + var i = 0; + + while (len--) { + if (!cb(arr[len], i++)) { + res.splice(len, 1); + } + } + return res; +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/LICENSE new file mode 100755 index 0000000..5a9956a --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/LICENSE @@ -0,0 +1,24 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/README.md new file mode 100755 index 0000000..b34f0f3 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/README.md @@ -0,0 +1,107 @@ +# expand-range [![NPM version](https://badge.fury.io/js/expand-range.svg)](http://badge.fury.io/js/expand-range) + +> Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch. + +## Install with [npm](npmjs.org) + +```bash +npm i expand-range --save +``` + +Wraps [fill-range] to do range expansion using `..` separated strings. See [fill-range] for the full list of options and features. + + +## Example usage + +```js +var expand = require('expand-range'); +``` + +**Params** + +```js +expand(start, stop, increment); +``` + + - `start`: the number or letter to start with + - `end`: the number or letter to end with + - `increment`: optionally pass the increment to use. works for letters or numbers + +**Examples** + +```js +expand('a..e') +//=> ['a', 'b', 'c', 'd', 'e'] + +expand('a..e..2') +//=> ['a', 'c', 'e'] + +expand('A..E..2') +//=> ['A', 'C', 'E'] + +expand('1..3') +//=> ['1', '2', '3'] + +expand('0..-5') +//=> [ '0', '-1', '-2', '-3', '-4', '-5' ] + +expand('-9..9..3') +//=> [ '-9', '-6', '-3', '0', '3', '6', '9' ]) + +expand('-1..-10..-2') +//=> [ '-1', '-3', '-5', '-7', '-9' ] + +expand('1..10..2') +//=> [ '1', '3', '5', '7', '9' ] +``` + + +### Custom function + +Optionally pass a custom function as the second argument: + +```js +expand('a..e', function (val, isNumber, pad, i) { + if (!isNumber) { + return String.fromCharCode(val) + i; + } + return val; +}); +//=> ['a0', 'b1', 'c2', 'd3', 'e4'] +``` + +## Related + +- [micromatch]: wildcard/glob matcher for javascript. a faster alternative to minimatch. +- [fill-range]: the library this depends on for core functionality +- [braces]: this library is used in braces, a fast Brash-like brace expansion lib. + +## Run tests + +Install dev dependencies + +```bash +npm i -d && npm test +``` + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/expand-range/issues). + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb](https://github.com/assemble/verb) on January 30, 2015._ + +[fill-range]: https://github.com/jonschlinkert/fill-range +[micromatch]: https://github.com/jonschlinkert/micromatch +[braces]: https://github.com/jonschlinkert/braces \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/index.js new file mode 100755 index 0000000..ac1a44e --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/index.js @@ -0,0 +1,43 @@ +/*! + * expand-range + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT license. + */ + +'use strict'; + +var fill = require('fill-range'); + +module.exports = function expandRange(str, options, fn) { + if (typeof str !== 'string') { + throw new TypeError('expand-range expects a string.'); + } + + if (typeof options === 'function') { + fn = options; + options = {}; + } + + if (typeof options === 'boolean') { + options = {}; + options.makeRe = true; + } + + // create arguments to pass to fill-range + var opts = options || {}; + var args = str.split('..'); + var len = args.length; + if (len > 3) { return str; } + + // if only one argument, it can't expand so return it + if (len === 1) { return args; } + + // if `true`, tell fill-range to regexify the string + if (typeof fn === 'boolean' && fn === true) { + opts.makeRe = true; + } + + args.push(opts); + return fill.apply(fill, args.concat(fn)); +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/LICENSE new file mode 100755 index 0000000..fa30c4c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/README.md new file mode 100755 index 0000000..c69694a --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/README.md @@ -0,0 +1,290 @@ +# fill-range [![NPM version](https://badge.fury.io/js/fill-range.svg)](http://badge.fury.io/js/fill-range) [![Build Status](https://travis-ci.org/jonschlinkert/fill-range.svg)](https://travis-ci.org/jonschlinkert/fill-range) + +> Fill in a range of numbers or letters, optionally passing an increment or multiplier to use. + +## Install with [npm](npmjs.org) + +```bash +npm i fill-range --save +``` + + + +- [Usage](#usage) + * [Invalid ranges](#invalid-ranges) + * [Custom function](#custom-function) + * [Special characters](#special-characters) + + [plus](#plus) + + [pipe and tilde](#pipe-and-tilde) + + [angle bracket](#angle-bracket) + + [question mark](#question-mark) +- [Other useful libs](#other-useful-libs) +- [Running tests](#running-tests) +- [Contributing](#contributing) +- [Author](#author) +- [License](#license) + +_(Table of contents generated by [verb])_ + + + +## Usage + +```js +var range = require('fill-range'); + +range('a', 'e'); +//=> ['a', 'b', 'c', 'd', 'e'] +``` + +**Params** + +```js +range(start, stop, step, options, fn); +``` + + - `start`: **{String|Number}** the number or letter to start with + - `end`: **{String|Number}** the number or letter to end with + - `step`: **{String|Number}** optionally pass the step to use. works for letters or numbers. + - `options`: **{Object}**: + + `makeRe`: return a regex-compatible string (still returned as an array for consistency) + + `step`: pass the step on the options as an alternative to passing it as an argument + + `silent`: `true` by default, set to false to throw errors for invalid ranges. + - `fn`: **{Function}** optionally [pass a function](#custom-function) to modify each character + + +**Examples** + +```js +range(1, 3) +//=> ['1', '2', '3'] + +range('1', '3') +//=> ['1', '2', '3'] + +range('0', '-5') +//=> [ '0', '-1', '-2', '-3', '-4', '-5' ] + +range(-9, 9, 3) +//=> [ '-9', '-6', '-3', '0', '3', '6', '9' ]) + +range('-1', '-10', '-2') +//=> [ '-1', '-3', '-5', '-7', '-9' ] + +range('1', '10', '2') +//=> [ '1', '3', '5', '7', '9' ] + +range('a', 'e') +//=> ['a', 'b', 'c', 'd', 'e'] + +range('a', 'e', 2) +//=> ['a', 'c', 'e'] + +range('A', 'E', 2) +//=> ['A', 'C', 'E'] +``` + +### Invalid ranges + +When an invalid range is passed, `null` is returned. + +```js +range('1.1', '2'); +//=> null + +range('a', '2'); +//=> null + +range(1, 10, 'foo'); +//=> null +``` + +If you want errors to be throw, pass `silent: false` on the options: + + +### Custom function + +Optionally pass a custom function as the third or fourth argument: + +```js +range('a', 'e', function (val, isNumber, pad, i) { + if (!isNumber) { + return String.fromCharCode(val) + i; + } + return val; +}); +//=> ['a0', 'b1', 'c2', 'd3', 'e4'] +``` + +### Special characters + +A special character may be passed as the third arg instead of a step increment. These characters can be pretty useful for brace expansion, creating file paths, test fixtures and similar use case. + +```js +range('a', 'z', SPECIAL_CHARACTER_HERE); +``` + +**Supported characters** + + - `+`: repeat the given string `n` times + - `|`: create a regex-ready string, instead of an array + - `>`: join values to single array element + - `?`: randomize the given pattern using [randomatic] + +#### plus + +Character: _(`+`)_ + +Repeat the first argument the number of times passed on the second argument. + +**Examples:** + +```js +range('a', 3, '+'); +//=> ['a', 'a', 'a'] + +range('abc', 2, '+'); +//=> ['abc', 'abc'] +``` + +#### pipe and tilde + +Characters: _(`|` and `~`)_ + +Creates a regex-capable string (either a logical `or` or a character class) from the expanded arguments. + +**Examples:** + +```js +range('a', 'c', '|'); +//=> ['(a|b|c)' + +range('a', 'c', '~'); +//=> ['[a-c]' + +range('a', 'z', '|5'); +//=> ['(a|f|k|p|u|z)' +``` + +**Automatic separator correction** + +To avoid this error: + +> `Range out of order in character class` + +Fill-range detects invalid sequences and uses the correct syntax. For example: + +**invalid** (regex) + +If you pass these: + +```js +range('a', 'z', '~5'); +// which would result in this +//=> ['[a-f-k-p-u-z]'] + +range('10', '20', '~'); +// which would result in this +//=> ['[10-20]'] +``` + +**valid** (regex) + +fill-range corrects them to this: + +```js +range('a', 'z', '~5'); +//=> ['(a|f|k|p|u|z)' + +range('10', '20', '~'); +//=> ['(10-20)' +``` + +#### angle bracket + +Character: _(`>`)_ + +Joins all values in the returned array to a single value. + +**Examples:** + +```js +range('a', 'e', '>'); +//=> ['abcde'] + +range('5', '8', '>'); +//=> ['5678'] + +range('2', '20', '2>'); +//=> ['2468101214161820'] +``` + + +#### question mark + +Character: _(`?`)_ + +Uses [randomatic] to generate randomized alpha, numeric, or alpha-numeric patterns based on the provided arguments. + +**Examples:** + +_(actual results would obviously be randomized)_ + +Generate a 5-character, uppercase, alphabetical string: + +```js +range('A', 5, '?'); +//=> ['NSHAK'] +``` + +Generate a 5-digit random number: + +```js +range('0', 5, '?'); +//=> ['36583'] +``` + +Generate a 10-character alpha-numeric string: + +```js +range('A0', 10, '?'); +//=> ['5YJD60VQNN'] +``` + +See the [randomatic] repo for all available options and or to create issues or feature requests related to randomization. + +## Other useful libs + * [micromatch](https://github.com/jonschlinkert/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. Just use `micromatch.isMatch()` instead of `minimatch()`, or use `micromatch()` instead of `multimatch()`. + * [expand-range](https://github.com/jonschlinkert/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch. + * [braces](https://github.com/jonschlinkert/braces): Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces specification. + * [is-glob](https://github.com/jonschlinkert/is-glob): Returns `true` if the given string looks like a glob pattern. + +## Running tests +Install dev dependencies: + +```bash +npm i -d && npm test +``` + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/fill-range/issues) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2014-2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on April 07, 2015._ + +[randomatic]: https://github.com/jonschlinkert/randomatic +[expand-range]: https://github.com/jonschlinkert/expand-range +[micromatch]: https://github.com/jonschlinkert/micromatch +[braces]: https://github.com/jonschlinkert/braces \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/index.js new file mode 100644 index 0000000..5657051 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/index.js @@ -0,0 +1,408 @@ +/*! + * fill-range + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var isObject = require('isobject'); +var isNumber = require('is-number'); +var randomize = require('randomatic'); +var repeatStr = require('repeat-string'); +var repeat = require('repeat-element'); + +/** + * Expose `fillRange` + */ + +module.exports = fillRange; + +/** + * Return a range of numbers or letters. + * + * @param {String} `a` Start of the range + * @param {String} `b` End of the range + * @param {String} `step` Increment or decrement to use. + * @param {Function} `fn` Custom function to modify each element in the range. + * @return {Array} + */ + +function fillRange(a, b, step, options, fn) { + if (a == null || b == null) { + throw new Error('fill-range expects the first and second args to be strings.'); + } + + if (typeof step === 'function') { + fn = step; options = {}; step = null; + } + + if (typeof options === 'function') { + fn = options; options = {}; + } + + if (isObject(step)) { + options = step; step = ''; + } + + var expand, regex = false, sep = ''; + var opts = options || {}; + + if (typeof opts.silent === 'undefined') { + opts.silent = true; + } + + step = step || opts.step; + + // store a ref to unmodified arg + var origA = a, origB = b; + + b = (b.toString() === '-0') ? 0 : b; + + if (opts.optimize || opts.makeRe) { + step = step ? (step += '~') : step; + expand = true; + regex = true; + sep = '~'; + } + + // handle special step characters + if (typeof step === 'string') { + var match = stepRe().exec(step); + + if (match) { + var i = match.index; + var m = match[0]; + + // repeat string + if (m === '+') { + return repeat(a, b); + + // randomize a, `b` times + } else if (m === '?') { + return [randomize(a, b)]; + + // expand right, no regex reduction + } else if (m === '>') { + step = step.substr(0, i) + step.substr(i + 1); + expand = true; + + // expand to an array, or if valid create a reduced + // string for a regex logic `or` + } else if (m === '|') { + step = step.substr(0, i) + step.substr(i + 1); + expand = true; + regex = true; + sep = m; + + // expand to an array, or if valid create a reduced + // string for a regex range + } else if (m === '~') { + step = step.substr(0, i) + step.substr(i + 1); + expand = true; + regex = true; + sep = m; + } + } else if (!isNumber(step)) { + if (!opts.silent) { + throw new TypeError('fill-range: invalid step.'); + } + return null; + } + } + + if (/[.&*()[\]^%$#@!]/.test(a) || /[.&*()[\]^%$#@!]/.test(b)) { + if (!opts.silent) { + throw new RangeError('fill-range: invalid range arguments.'); + } + return null; + } + + // has neither a letter nor number, or has both letters and numbers + // this needs to be after the step logic + if (!noAlphaNum(a) || !noAlphaNum(b) || hasBoth(a) || hasBoth(b)) { + if (!opts.silent) { + throw new RangeError('fill-range: invalid range arguments.'); + } + return null; + } + + // validate arguments + var isNumA = isNumber(zeros(a)); + var isNumB = isNumber(zeros(b)); + + if ((!isNumA && isNumB) || (isNumA && !isNumB)) { + if (!opts.silent) { + throw new TypeError('fill-range: first range argument is incompatible with second.'); + } + return null; + } + + // by this point both are the same, so we + // can use A to check going forward. + var isNum = isNumA; + var num = formatStep(step); + + // is the range alphabetical? or numeric? + if (isNum) { + // if numeric, coerce to an integer + a = +a; b = +b; + } else { + // otherwise, get the charCode to expand alpha ranges + a = a.charCodeAt(0); + b = b.charCodeAt(0); + } + + // is the pattern descending? + var isDescending = a > b; + + // don't create a character class if the args are < 0 + if (a < 0 || b < 0) { + expand = false; + regex = false; + } + + // detect padding + var padding = isPadded(origA, origB); + var res, pad, arr = []; + var ii = 0; + + // character classes, ranges and logical `or` + if (regex) { + if (shouldExpand(a, b, num, isNum, padding, opts)) { + // make sure the correct separator is used + if (sep === '|' || sep === '~') { + sep = detectSeparator(a, b, num, isNum, isDescending); + } + return wrap([origA, origB], sep, opts); + } + } + + while (isDescending ? (a >= b) : (a <= b)) { + if (padding && isNum) { + pad = padding(a); + } + + // custom function + if (typeof fn === 'function') { + res = fn(a, isNum, pad, ii++); + + // letters + } else if (!isNum) { + if (regex && isInvalidChar(a)) { + res = null; + } else { + res = String.fromCharCode(a); + } + + // numbers + } else { + res = formatPadding(a, pad); + } + + // add result to the array, filtering any nulled values + if (res !== null) arr.push(res); + + // increment or decrement + if (isDescending) { + a -= num; + } else { + a += num; + } + } + + // now that the array is expanded, we need to handle regex + // character classes, ranges or logical `or` that wasn't + // already handled before the loop + if ((regex || expand) && !opts.noexpand) { + // make sure the correct separator is used + if (sep === '|' || sep === '~') { + sep = detectSeparator(a, b, num, isNum, isDescending); + } + if (arr.length === 1 || a < 0 || b < 0) { return arr; } + return wrap(arr, sep, opts); + } + + return arr; +} + +/** + * Wrap the string with the correct regex + * syntax. + */ + +function wrap(arr, sep, opts) { + if (sep === '~') { sep = '-'; } + var str = arr.join(sep); + var pre = opts && opts.regexPrefix; + + // regex logical `or` + if (sep === '|') { + str = pre ? pre + str : str; + str = '(' + str + ')'; + } + + // regex character class + if (sep === '-') { + str = (pre && pre === '^') + ? pre + str + : str; + str = '[' + str + ']'; + } + return [str]; +} + +/** + * Check for invalid characters + */ + +function isCharClass(a, b, step, isNum, isDescending) { + if (isDescending) { return false; } + if (isNum) { return a <= 9 && b <= 9; } + if (a < b) { return step === 1; } + return false; +} + +/** + * Detect the correct separator to use + */ + +function shouldExpand(a, b, num, isNum, padding, opts) { + if (isNum && (a > 9 || b > 9)) { return false; } + return !padding && num === 1 && a < b; +} + +/** + * Detect the correct separator to use + */ + +function detectSeparator(a, b, step, isNum, isDescending) { + var isChar = isCharClass(a, b, step, isNum, isDescending); + if (!isChar) { + return '|'; + } + return '~'; +} + +/** + * Correctly format the step based on type + */ + +function formatStep(step) { + return Math.abs(step >> 0) || 1; +} + +/** + * Format padding, taking leading `-` into account + */ + +function formatPadding(ch, pad) { + var res = pad ? pad + ch : ch; + if (pad && ch.toString().charAt(0) === '-') { + res = '-' + pad + ch.toString().substr(1); + } + return res.toString(); +} + +/** + * Check for invalid characters + */ + +function isInvalidChar(str) { + var ch = toStr(str); + return ch === '\\' + || ch === '[' + || ch === ']' + || ch === '^' + || ch === '(' + || ch === ')' + || ch === '`'; +} + +/** + * Convert to a string from a charCode + */ + +function toStr(ch) { + return String.fromCharCode(ch); +} + + +/** + * Step regex + */ + +function stepRe() { + return /\?|>|\||\+|\~/g; +} + +/** + * Return true if `val` has either a letter + * or a number + */ + +function noAlphaNum(val) { + return /[a-z0-9]/i.test(val); +} + +/** + * Return true if `val` has both a letter and + * a number (invalid) + */ + +function hasBoth(val) { + return /[a-z][0-9]|[0-9][a-z]/i.test(val); +} + +/** + * Normalize zeros for checks + */ + +function zeros(val) { + if (/^-*0+$/.test(val.toString())) { + return '0'; + } + return val; +} + +/** + * Return true if `val` has leading zeros, + * or a similar valid pattern. + */ + +function hasZeros(val) { + return /[^.]\.|^-*0+[0-9]/.test(val); +} + +/** + * If the string is padded, returns a curried function with + * the a cached padding string, or `false` if no padding. + * + * @param {*} `origA` String or number. + * @return {String|Boolean} + */ + +function isPadded(origA, origB) { + if (hasZeros(origA) || hasZeros(origB)) { + var alen = length(origA); + var blen = length(origB); + + var len = alen >= blen + ? alen + : blen; + + return function (a) { + return repeatStr('0', len - length(a)); + }; + } + return false; +} + +/** + * Get the string length of `val` + */ + +function length(val) { + return val.toString().length; +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/is-number/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/is-number/LICENSE new file mode 100644 index 0000000..fa30c4c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/is-number/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/is-number/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/is-number/README.md new file mode 100644 index 0000000..4950412 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/is-number/README.md @@ -0,0 +1,104 @@ +# is-number [![NPM version](https://badge.fury.io/js/is-number.svg)](http://badge.fury.io/js/is-number) [![Build Status](https://travis-ci.org/jonschlinkert/is-number.svg)](https://travis-ci.org/jonschlinkert/is-number) + +> Returns true if the value is a number. comprehensive tests. + +To understand some of the rationale behind the decisions made in this library (and to learn about some oddities of number evaluation in JavaScript), [see this gist][gist]. + + +## Install with [npm](npmjs.org) + +```bash +npm i is-number --save +``` + + +## Usage + +```js +var isNumber = require('is-number'); +``` + +### true + +See the [tests](./test.js) for more examples. + +```js +isNumber(5e3) //=> 'true' +isNumber(0xff) //=> 'true' +isNumber(-1.1) //=> 'true' +isNumber(0) //=> 'true' +isNumber(1) //=> 'true' +isNumber(1.1) //=> 'true' +isNumber(10) //=> 'true' +isNumber(10.10) //=> 'true' +isNumber(100) //=> 'true' +isNumber('-1.1') //=> 'true' +isNumber('0') //=> 'true' +isNumber('012') //=> 'true' +isNumber('0xff') //=> 'true' +isNumber('1') //=> 'true' +isNumber('1.1') //=> 'true' +isNumber('10') //=> 'true' +isNumber('10.10') //=> 'true' +isNumber('100') //=> 'true' +isNumber('5e3') //=> 'true' +isNumber(parseInt('012')) //=> 'true' +isNumber(parseFloat('012')) //=> 'true' +``` + +### False + +See the [tests](./test.js) for more examples. + +```js +isNumber('foo') //=> 'false' +isNumber([1]) //=> 'false' +isNumber([]) //=> 'false' +isNumber(function () {}) //=> 'false' +isNumber(Infinity) //=> 'false' +isNumber(NaN) //=> 'false' +isNumber(new Array('abc')) //=> 'false' +isNumber(new Array(2)) //=> 'false' +isNumber(new Buffer('abc')) //=> 'false' +isNumber(null) //=> 'false' +isNumber(undefined) //=> 'false' +isNumber({abc: 'abc'}) //=> 'false' +``` + +## Other projects +* [kind-of](https://github.com/jonschlinkert/kind-of): Get the native type of a value. +* [is-primitive](https://github.com/jonschlinkert/is-primitive): Returns `true` if the value is a primitive. +* [even](https://github.com/jonschlinkert/even): Get the even numbered items from an array. +* [odd](https://github.com/jonschlinkert/odd): Get the odd numbered items from an array. +* [is-even](https://github.com/jonschlinkert/is-even): Return true if the given number is even. +* [is-odd](https://github.com/jonschlinkert/is-odd): Returns true if the given number is odd. + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-number/issues) + + +## Run tests +Install dev dependencies. + +```bash +npm i -d && npm test +``` + + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on March 05, 2015._ + +[infinity]: http://en.wikipedia.org/wiki/Infinity +[gist]: https://gist.github.com/jonschlinkert/e30c70c713da325d0e81 diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/is-number/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/is-number/index.js new file mode 100644 index 0000000..a927ba9 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/is-number/index.js @@ -0,0 +1,14 @@ +/*! + * is-number + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +module.exports = function isNumber(n) { + return (!!(+n) && !Array.isArray(n)) && isFinite(n) + || n === '0' + || n === 0; +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/is-number/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/is-number/package.json new file mode 100644 index 0000000..773a4d3 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/is-number/package.json @@ -0,0 +1,75 @@ +{ + "name": "is-number", + "description": "Returns true if the value is a number. comprehensive tests.", + "version": "1.1.2", + "homepage": "https://github.com/jonschlinkert/is-number", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/is-number.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-number/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/is-number/blob/master/LICENSE" + }, + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "benchmarked": "^0.1.3", + "chalk": "^0.5.1", + "mocha": "^2.1.0" + }, + "keywords": [ + "check", + "coerce", + "coercion", + "integer", + "is number", + "is", + "is-number", + "istype", + "kind of", + "math", + "number", + "test", + "type", + "typeof", + "value" + ], + "gitHead": "a902495bca1f471beaa8deb6193ba628bf80c0e4", + "_id": "is-number@1.1.2", + "_shasum": "9d82409f3a8a8beecf249b1bc7dada49829966e4", + "_from": "is-number@>=1.1.2 <2.0.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "9d82409f3a8a8beecf249b1bc7dada49829966e4", + "tarball": "http://registry.npmjs.org/is-number/-/is-number-1.1.2.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/is-number/-/is-number-1.1.2.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/isobject/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/isobject/LICENSE new file mode 100644 index 0000000..fa30c4c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/isobject/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/isobject/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/isobject/README.md new file mode 100644 index 0000000..7ee6f31 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/isobject/README.md @@ -0,0 +1,81 @@ +# isobject [![NPM version](https://badge.fury.io/js/isobject.svg)](http://badge.fury.io/js/isobject) [![Build Status](https://travis-ci.org/jonschlinkert/isobject.svg)](https://travis-ci.org/jonschlinkert/isobject) + +> Returns true if the value is an object and not an array or null. + +Use [is-plain-object](https://github.com/jonschlinkert/is-plain-object) if you want only objects that are created by the `Object` constructor. + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i isobject --save +``` + +Install with [bower](http://bower.io/) + +```sh +$ bower install isobject --save +``` + +## Usage + +```js +var isObject = require('isobject'); +``` + +**True** + +All of the following return `true`: + +```js +isObject({}); +isObject(Object.create({})); +isObject(Object.create(Object.prototype)); +isObject(Object.create(null)); +isObject({}); +isObject(new Foo); +isObject(/foo/); +``` + +**False** + +All of the following return `false`: + +```js +isObject(); +isObject(function () {}); +isObject(1); +isObject([]); +isObject(undefined); +isObject(null); +``` + +## Related projects + +* [assign-deep](https://github.com/jonschlinkert/assign-deep): Deeply assign the enumerable properties of source objects to a destination object. +* [extend-shallow](https://github.com/jonschlinkert/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. +* [is-plain-object](https://github.com/jonschlinkert/is-plain-object): Returns true if an object was created by the `Object` constructor. +* [is-extendable](https://github.com/jonschlinkert/is-extendable): Returns true if a value is any of the object types: array, regexp, plain object,… [more](https://github.com/jonschlinkert/is-extendable) +* [is-equal-shallow](https://github.com/jonschlinkert/is-equal-shallow): Does a shallow comparison of two objects, returning false if the keys or values differ. +* [kind-of](https://github.com/jonschlinkert/kind-of): Get the native type of a value. + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/isobject/issues/new) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2014-2015 [Jon Schlinkert](https://github.com/jonschlinkert) +Released under the [MIT](https://github.com/jonschlinkert/isobject/blob/master/LICENSE) license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on July 13, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/isobject/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/isobject/index.js new file mode 100644 index 0000000..3cb7e33 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/isobject/index.js @@ -0,0 +1,13 @@ +/*! + * isobject + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +module.exports = function isObject(val) { + return val != null && typeof val === 'object' + && !Array.isArray(val); +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/isobject/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/isobject/package.json new file mode 100644 index 0000000..6b49645 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/isobject/package.json @@ -0,0 +1,75 @@ +{ + "name": "isobject", + "description": "Returns true if the value is an object and not an array or null.", + "version": "1.0.2", + "homepage": "https://github.com/jonschlinkert/isobject", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/isobject.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/isobject/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/isobject/blob/master/LICENSE" + }, + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "mocha": "*" + }, + "keywords": [ + "check", + "function", + "is", + "is-object", + "isobject", + "javascript", + "kind", + "kind-of", + "kindof", + "native", + "object", + "of", + "type", + "typeof", + "validate", + "value" + ], + "gitHead": "0d3070262eb950e2e19c5781da8f243b629c7731", + "_id": "isobject@1.0.2", + "_shasum": "f0f9b8ce92dd540fa0740882e3835a2e022ec78a", + "_from": "isobject@>=1.0.0 <2.0.0", + "_npmVersion": "2.10.1", + "_nodeVersion": "0.12.4", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "f0f9b8ce92dd540fa0740882e3835a2e022ec78a", + "tarball": "http://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/randomatic/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/randomatic/README.md new file mode 100644 index 0000000..1624330 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/randomatic/README.md @@ -0,0 +1,138 @@ +# randomatic [![NPM version](https://badge.fury.io/js/randomatic.svg)](http://badge.fury.io/js/randomatic) + +> Generate randomized strings of a specified length, fast. Only the length is necessary, but you can optionally generate patterns using any combination of numeric, alpha-numeric, alphabetical, special or custom characters. + +## Install with [npm](npmjs.org) + +```bash +npm i randomatic --save +``` +### Install with [bower](https://github.com/bower/bower) + +```bash +bower install randomatic --save +``` + + +## Usage + +```js +var randomize = require('randomatic'); +``` + + +## API + +``` +randomize(pattern, length, options); +``` + +- `pattern` **{String}**: The pattern to use for randomizing +- `length` **{Object}**: The length of the string to generate + + +### pattern + +> The pattern to use for randomizing + +Patterns can contain any combination of the below characters, specified in any order. + +**Example:** + +To generate a 10-character randomized string using all available characters: + +```js +randomize('*', 10); +//=> + +randomize('Aa0!', 10); +//=> +``` + +* `a`: Lowercase alpha characters (`abcdefghijklmnopqrstuvwxyz'`) +* `A`: Uppercase alpha characters (`ABCDEFGHIJKLMNOPQRSTUVWXYZ'`) +* `0`: Numeric characters (`0123456789'`) +* `!`: Special characters (`~!@#$%^&()_+-={}[];\',.`) +* `*`: All characters (all of the above combined) +* `?`: Custom characters (pass a string of custom characters to the options) + + +### length + +> the length of the string to generate + +**Examples:** + +* `randomize('A', 5)` will generate a 5-character, uppercase, alphabetical, randomized string, e.g. `KDJWJ`. +* `randomize('0', 2)` will generate a 2-digit random number +* `randomize('0', 3)` will generate a 3-digit random number +* `randomize('0', 12)` will generate a 12-digit random number +* `randomize('A0', 16)` will generate a 16-character, alpha-numeric randomized string + +If `length` is left undefined, the length of the pattern in the first parameter will be used. For example: + +* `randomize('00')` will generate a 2-digit random number +* `randomize('000')` will generate a 3-digit random number +* `randomize('0000')` will generate a 4-digit random number... +* `randomize('AAAAA')` will generate a 5-character, uppercase alphabetical random string... + +These are just examples, [see the tests](./test.js) for more use cases and examples. + + + +## options + +#### chars +Type: `String` + +Default: `undefined` + +Define a custom string to be randomized. + +**Example:** + +* `randomize('?', 20, {chars: 'jonschlinkert'})` will generate a 20-character randomized string from the letters contained in `jonschlinkert`. +* `randomize('?', {chars: 'jonschlinkert'})` will generate a 13-character randomized string from the letters contained in `jonschlinkert`. + + + +## Usage Examples + +* `randomize('A', 4)` (_whitespace insenstive_) would result in randomized 4-digit uppercase letters, like, `ZAKH`, `UJSL`... etc. +* `randomize('AAAA')` is equivelant to `randomize('A', 4)` +* `randomize('AAA0')` and `randomize('AA00')` and `randomize('A0A0')` are equivelant to `randomize('A0', 4)` +* `randomize('aa')`: results in double-digit, randomized, lower-case letters (`abcdefghijklmnopqrstuvwxyz`) +* `randomize('AAA')`: results in triple-digit, randomized, upper-case letters (`ABCDEFGHIJKLMNOPQRSTUVWXYZ`) +* `randomize('0', 6)`: results in six-digit, randomized nubmers (`0123456789`) +* `randomize('!', 5)`: results in single-digit randomized, _valid_ non-letter characters (`~!@#$%^&()_+-={}[];\',.`) +* `randomize('A!a0', 9)`: results in nine-digit, randomized characters (any of the above) + +_The order in which the characters are defined is insignificant._ + + + +## Running tests + +Install dev dependencies: + +```bash +npm install -d && mocha +``` + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/randomatic/issues) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb](https://github.com/assemble/verb) on January 26, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/randomatic/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/randomatic/index.js new file mode 100644 index 0000000..b30522d --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/randomatic/index.js @@ -0,0 +1,86 @@ +/*! + * randomatic + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License (MIT) + * + * Many changes have been made, but this was originally + * inspired by + */ + +'use strict'; + +var isNumber = require('is-number'); +var typeOf = require('kind-of'); + +/** + * Expose `randomatic` + */ + +module.exports = randomatic; + +/** + * Available mask characters + */ + +var type = { + lower: 'abcdefghijklmnopqrstuvwxyz', + upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + number: '0123456789', + special: '~!@#$%^&()_+-={}[];\',.' +}; + +type.all = type.lower + type.upper + type.number; + +/** + * Generate random character sequences of a specified `length`, + * based on the given `pattern`. + * + * @param {String} `pattern` The pattern to use for generating the random string. + * @param {String} `length` The length of the string to generate. + * @param {String} `options` + * @return {String} + * @api public + */ + +function randomatic(pattern, length, options) { + if (typeof pattern === 'undefined') { + throw new Error('randomatic expects a string or number.'); + } + + var custom = false; + if (arguments.length === 1) { + if (typeof pattern === 'string') { + length = pattern.length; + + } else if (isNumber(pattern)) { + options = {}; length = pattern; pattern = '*'; + } + } + + if(typeOf(length) === 'object' && length.hasOwnProperty('chars')) { + options = length; + pattern = options.chars; + length = pattern.length; + custom = true; + } + + var opts = options || {}; + var mask = ''; + var res = ''; + + // Characters to be used + if (pattern.indexOf('?') !== -1) mask += opts.chars; + if (pattern.indexOf('a') !== -1) mask += type.lower; + if (pattern.indexOf('A') !== -1) mask += type.upper; + if (pattern.indexOf('0') !== -1) mask += type.number; + if (pattern.indexOf('!') !== -1) mask += type.special; + if (pattern.indexOf('*') !== -1) mask += type.all; + if (custom) mask += pattern; + + while (length--) { + res += mask.charAt(parseInt(Math.random() * mask.length)); + } + + return res; +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/randomatic/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/randomatic/package.json new file mode 100644 index 0000000..6241a3f --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/randomatic/package.json @@ -0,0 +1,71 @@ +{ + "name": "randomatic", + "description": "Generate randomized strings of a specified length, fast. Only the length is necessary, but you can optionally generate patterns using any combination of numeric, alpha-numeric, alphabetical, special or custom characters.", + "version": "1.1.0", + "homepage": "https://github.com/jonschlinkert/randomatic", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "https://github.com/jonschlinkert/randomatic.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/randomatic/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/randomatic/blob/master/LICENSE-MIT" + }, + "scripts": { + "test": "mocha -R spec" + }, + "main": "index.js", + "files": [ + "index.js" + ], + "dependencies": { + "is-number": "^1.1.0", + "kind-of": "^1.0.0" + }, + "devDependencies": { + "benchmarked": "^0.1.3", + "chalk": "^0.5.1", + "glob": "^4.3.5", + "should": "^4.4.1" + }, + "keywords": [ + "alpha", + "alpha-numeric", + "alphanumeric", + "characters", + "chars", + "numeric", + "rand", + "random", + "randomize", + "randomized" + ], + "gitHead": "ca326363bee58a3eb2556a5805822ffbf328397e", + "_id": "randomatic@1.1.0", + "_shasum": "2ca36b9f93747aac985eb242749af88b45d5d42d", + "_from": "randomatic@>=1.1.0 <2.0.0", + "_npmVersion": "1.4.28", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "2ca36b9f93747aac985eb242749af88b45d5d42d", + "tarball": "http://registry.npmjs.org/randomatic/-/randomatic-1.1.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.0.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/repeat-string/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/repeat-string/LICENSE new file mode 100644 index 0000000..5a9956a --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/repeat-string/LICENSE @@ -0,0 +1,24 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/repeat-string/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/repeat-string/README.md new file mode 100644 index 0000000..cee7d17 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/repeat-string/README.md @@ -0,0 +1,94 @@ +# repeat-string [![NPM version](https://badge.fury.io/js/repeat-string.svg)](http://badge.fury.io/js/repeat-string) [![Build Status](https://travis-ci.org/jonschlinkert/repeat-string.svg)](https://travis-ci.org/jonschlinkert/repeat-string) + +> Repeat the given string n times. Fastest implementation for repeating a string. + +## Install with [npm](npmjs.org) + +```bash +npm i repeat-string --save +``` +## Install with [bower](https://github.com/bower/bower) + +```bash +bower install repeat-string --save +``` + +## Usage + +### [repeat](./index.js#L34) + +Repeat the given `string` the specified `number` of times. + +* `string` **{String}**: The string to repeat +* `number` **{Number}**: The number of times to repeat the string +* `returns` **{String}**: Repeated string + +**Example:** + +```js +var repeat = require('repeat-string'); +repeat('A', 5); +//=> AAAAA +``` + +## Benchmarks + +Repeat string is significantly faster than [repeating](https://github.com/sindresorhus/repeating). + +```bash +# 20,000x + repeat-string.js x 16,634,213 ops/sec ±0.92% (93 runs sampled) + repeating.js x 5,883,928 ops/sec ±0.95% (93 runs sampled) + +# 2,000x + repeat-string.js x 17,438,654 ops/sec ±0.76% (97 runs sampled) + repeating.js x 6,639,978 ops/sec ±0.84% (97 runs sampled) + +# 250x + repeat-string.js x 16,246,885 ops/sec ±0.81% (92 runs sampled) + repeating.js x 7,659,342 ops/sec ±0.67% (99 runs sampled) + +# 50x + repeat-string.js x 15,803,340 ops/sec ±0.74% (92 runs sampled) + repeating.js x 9,668,300 ops/sec ±0.89% (98 runs sampled) + +# 5x + repeat-string.js x 16,926,291 ops/sec ±0.78% (97 runs sampled) + repeating.js x 12,215,384 ops/sec ±1.01% (96 runs sampled) +``` + +**Run the benchmarks** + +Install dev dependencies: + +```bash +npm i -d && node benchmark +``` + +### Other javascript/node.js utils +[repeat-element](https://github.com/jonschlinkert/repeat-element): Create an array by repeating the given string n times. + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/repeat-string/issues) + +## Running tests +Install dev dependencies: + +```bash +npm i -d && npm test +``` + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on April 01, 2015._ diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/repeat-string/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/repeat-string/index.js new file mode 100644 index 0000000..c781229 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/repeat-string/index.js @@ -0,0 +1,66 @@ +/*! + * repeat-string + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +/** + * Expose `repeat` + */ + +module.exports = repeat; + +/** + * Repeat the given `string` the specified `number` + * of times. + * + * **Example:** + * + * ```js + * var repeat = require('repeat-string'); + * repeat('A', 5); + * //=> AAAAA + * ``` + * + * @param {String} `string` The string to repeat + * @param {Number} `number` The number of times to repeat the string + * @return {String} Repeated string + * @api public + */ + +function repeat(str, num) { + if (typeof str !== 'string') { + throw new TypeError('repeat-string expects a string.'); + } + + if (num === 1) return str; + if (num === 2) return str + str; + + var max = str.length * num; + if (cache !== str || typeof cache === 'undefined') { + cache = str; + res = ''; + } + + while (max > res.length && num > 0) { + if (num & 1) { + res += str; + } + + num >>= 1; + if (!num) break; + str += str; + } + + return res.substr(0, max); +} + +/** + * Results cache + */ + +var res = ''; +var cache; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/repeat-string/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/repeat-string/package.json new file mode 100644 index 0000000..bcf1027 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/node_modules/repeat-string/package.json @@ -0,0 +1,78 @@ +{ + "name": "repeat-string", + "description": "Repeat the given string n times. Fastest implementation for repeating a string.", + "version": "1.5.2", + "homepage": "https://github.com/jonschlinkert/repeat-string", + "author": { + "name": "Jon Schlinkert", + "url": "http://github.com/jonschlinkert/" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/repeat-string.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/repeat-string/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/repeat-string/blob/master/LICENSE" + }, + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "benchmarked": "^0.1.3", + "chalk": "^0.5.1", + "glob": "^4.3.5", + "mocha": "^2.2.1", + "repeating": "^1.1.1", + "should": "^4.0.4" + }, + "keywords": [ + "fast", + "fastest", + "fill", + "left", + "left-pad", + "multiple", + "pad", + "padding", + "repetition", + "repeat", + "repeating", + "right", + "right-pad", + "string", + "times" + ], + "gitHead": "bf20e5dc1414305bec6ff26d90988378a5bad6ec", + "_id": "repeat-string@1.5.2", + "_shasum": "21065f70727ad053a0dd5e957ac9e00c7560d90a", + "_from": "repeat-string@>=1.5.2 <2.0.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "21065f70727ad053a0dd5e957ac9e00c7560d90a", + "tarball": "http://registry.npmjs.org/repeat-string/-/repeat-string-1.5.2.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.5.2.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/package.json new file mode 100644 index 0000000..abc00c9 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/node_modules/fill-range/package.json @@ -0,0 +1,90 @@ +{ + "name": "fill-range", + "description": "Fill in a range of numbers or letters, optionally passing an increment or multiplier to use.", + "version": "2.2.2", + "homepage": "https://github.com/jonschlinkert/fill-range", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/fill-range.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/fill-range/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/fill-range/blob/master/LICENSE" + }, + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "is-number": "^1.1.2", + "isobject": "^1.0.0", + "randomatic": "^1.1.0", + "repeat-element": "^1.1.0", + "repeat-string": "^1.5.2" + }, + "devDependencies": { + "benchmarked": "^0.1.3", + "chalk": "^0.5.1", + "should": "*" + }, + "keywords": [ + "alpha", + "alphabetical", + "bash", + "brace", + "expand", + "expansion", + "glob", + "match", + "matches", + "matching", + "number", + "numerical", + "range", + "ranges", + "sh" + ], + "gitHead": "dafcb07a8cb9d8138543234fde0cc92340248cb1", + "_id": "fill-range@2.2.2", + "_shasum": "2ad9d158a6a666f9fb8c9f9f05345dff68d45760", + "_from": "fill-range@>=2.1.0 <3.0.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + { + "name": "doowb", + "email": "brian.woodward@gmail.com" + }, + { + "name": "es128", + "email": "elan.shanker+npm@gmail.com" + } + ], + "dist": { + "shasum": "2ad9d158a6a666f9fb8c9f9f05345dff68d45760", + "tarball": "http://registry.npmjs.org/fill-range/-/fill-range-2.2.2.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.2.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/package.json new file mode 100644 index 0000000..f9fae83 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/expand-range/package.json @@ -0,0 +1,81 @@ +{ + "name": "expand-range", + "description": "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch.", + "version": "1.8.1", + "homepage": "https://github.com/jonschlinkert/expand-range", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/expand-range.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/expand-range/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/expand-range/blob/master/LICENSE-MIT" + }, + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha -R spec" + }, + "files": [ + "index.js" + ], + "dependencies": { + "fill-range": "^2.1.0" + }, + "devDependencies": { + "benchmarked": "^0.1.1", + "brace-expansion": "^1.1.0", + "glob": "^4.3.2", + "minimatch": "^2.0.1", + "mocha": "*", + "should": "^4.1.0" + }, + "keywords": [ + "alpha", + "alphabetical", + "bash", + "brace", + "expand", + "expansion", + "glob", + "match", + "matches", + "matching", + "number", + "numerical", + "range", + "ranges", + "sh" + ], + "gitHead": "de01a2ae06e6fe9c69812595c439870cca71839f", + "_id": "expand-range@1.8.1", + "_shasum": "acbd63e56efd9139722b755f099b9db5ac1f33f6", + "_from": "expand-range@>=1.8.1 <2.0.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "acbd63e56efd9139722b755f099b9db5ac1f33f6", + "tarball": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.1.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.1.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/lazy-cache/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/lazy-cache/LICENSE new file mode 100644 index 0000000..65f90ac --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/lazy-cache/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/lazy-cache/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/lazy-cache/README.md new file mode 100644 index 0000000..9549428 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/lazy-cache/README.md @@ -0,0 +1,92 @@ +# lazy-cache [![NPM version](https://badge.fury.io/js/lazy-cache.svg)](http://badge.fury.io/js/lazy-cache) + +> Cache requires to be lazy-loaded when needed. + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i lazy-cache --save +``` + +## Usage + +```js +var lazy = require('lazy-cache')(require); +``` + +**Use as a property on `lazy`** + +The module is also added as a property to the `lazy` function +so it can be called without having to call a function first. + +```js +var lazy = require('lazy-cache')(require); + +// `npm install glob` +lazy('glob'); + +// glob sync +console.log(lazy.glob.sync('*.js')); + +// glob async +lazy.glob('*.js', function (err, files) { + console.log(files); +}); +``` + +**Use as a function** + +```js +var lazy = require('lazy-cache')(require); +var glob = lazy('glob'); + +// `glob` is a now a function that may be called when needed +glob().sync('foo/*.js'); +``` + +## Aliases + +An alias may be passed as the second argument if you don't want to use the automatically camel-cased variable name. + +**Example** + +```js +var lazy = require('lazy-cache')(require); + +lazy('ansi-yellow', 'yellow'); +console.log(lazy.yellow('foo')); +``` + +## Related + +[lint-deps](https://github.com/jonschlinkert/lint-deps): CLI tool that tells you when dependencies are missing from package.json and offers you a… [more](https://github.com/jonschlinkert/lint-deps) + +## Running tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/lazy-cache/issues/new) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on August 19, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/lazy-cache/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/lazy-cache/index.js new file mode 100644 index 0000000..d919cb5 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/lazy-cache/index.js @@ -0,0 +1,62 @@ +'use strict'; + +/** + * Cache results of the first function call to ensure only calling once. + * + * ```js + * var lazy = require('lazy-cache')(require); + * // cache the call to `require('ansi-yellow')` + * lazy('ansi-yellow', 'yellow'); + * // use `ansi-yellow` + * console.log(lazy.yellow('this is yellow')); + * ``` + * + * @param {Function} `fn` Function that will be called only once. + * @return {Function} Function that can be called to get the cached function + * @api public + */ + +function lazyCache(fn) { + var cache = {}; + var proxy = function (mod, name) { + name = name || camelcase(mod); + Object.defineProperty(proxy, name, { + get: getter + }); + + function getter () { + if (cache.hasOwnProperty(name)) { + return cache[name]; + } + try { + return (cache[name] = fn(mod)); + } catch (err) { + err.message = 'lazy-cache ' + err.message + ' ' + __filename; + throw err; + } + }; + return getter; + }; + return proxy; +} + +/** + * Used to camelcase the name to be stored on the `lazy` object. + * + * @param {String} `str` String containing `_`, `.`, `-` or whitespace that will be camelcased. + * @return {String} camelcased string. + */ + +function camelcase(str) { + if (str.length === 1) { return str.toLowerCase(); } + str = str.replace(/^[\W_]+|[\W_]+$/g, '').toLowerCase(); + return str.replace(/[\W_]+(\w|$)/g, function (_, ch) { + return ch.toUpperCase(); + }); +} + +/** + * Expose `lazyCache` + */ + +module.exports = lazyCache; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/lazy-cache/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/lazy-cache/package.json new file mode 100644 index 0000000..6c7c661 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/lazy-cache/package.json @@ -0,0 +1,75 @@ +{ + "name": "lazy-cache", + "description": "Cache requires to be lazy-loaded when needed.", + "version": "0.2.3", + "homepage": "https://github.com/jonschlinkert/lazy-cache", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/lazy-cache.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/lazy-cache/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "ansi-yellow": "^0.1.1", + "glob": "^5.0.14", + "mocha": "*" + }, + "keywords": [ + "cache", + "caching", + "dependencies", + "dependency", + "lazy", + "require", + "requires" + ], + "verb": { + "related": { + "list": [ + "lint-deps" + ] + } + }, + "gitHead": "a25332b0e118340af776729423135a198f10783d", + "_id": "lazy-cache@0.2.3", + "_shasum": "0f30be62cce1e025039f921efde5cce31f2625c8", + "_from": "lazy-cache@>=0.2.3 <0.3.0", + "_npmVersion": "2.10.1", + "_nodeVersion": "0.12.4", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + { + "name": "doowb", + "email": "brian.woodward@gmail.com" + } + ], + "dist": { + "shasum": "0f30be62cce1e025039f921efde5cce31f2625c8", + "tarball": "http://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.3.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.3.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.gitattributes b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.gitattributes new file mode 100644 index 0000000..759c2c5 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.gitattributes @@ -0,0 +1,14 @@ +# Enforce Unix newlines +*.* text eol=lf +*.css text eol=lf +*.html text eol=lf +*.js text eol=lf +*.json text eol=lf +*.less text eol=lf +*.md text eol=lf +*.yml text eol=lf + +*.jpg binary +*.gif binary +*.png binary +*.jpeg binary \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.jshintrc b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.jshintrc new file mode 100644 index 0000000..e72045d --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.jshintrc @@ -0,0 +1,24 @@ +{ + "asi": false, + "boss": true, + "curly": true, + "eqeqeq": true, + "eqnull": true, + "esnext": true, + "immed": true, + "latedef": true, + "laxcomma": false, + "newcap": true, + "noarg": true, + "node": true, + "sub": true, + "undef": true, + "unused": true, + "globals": { + "define": true, + "before": true, + "after": true, + "describe": true, + "it": true + } +} \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.npmignore b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.npmignore new file mode 100644 index 0000000..1a2e47f --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.npmignore @@ -0,0 +1,53 @@ +# Numerous always-ignore extensions +*.csv +*.dat +*.diff +*.err +*.gz +*.log +*.orig +*.out +*.pid +*.rar +*.rej +*.seed +*.swo +*.swp +*.vi +*.yo-rc.json +*.zip +*~ +.ruby-version +lib-cov +npm-debug.log + +# Always-ignore dirs +/bower_components/ +/node_modules/ +/temp/ +/tmp/ +/vendor/ +_gh_pages + +# OS or Editor folders +*.esproj +*.komodoproject +.komodotools +*.sublime-* +._* +.cache +.DS_Store +.idea +.project +.settings +.tmproj +nbproject +Thumbs.db + +# grunt-html-validation +validation-status.json +validation-report.json + +# misc +TODO.md +benchmark \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.travis.yml b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.travis.yml new file mode 100644 index 0000000..ff74a05 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - '0.10' \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.verb.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.verb.md new file mode 100644 index 0000000..72344a9 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/.verb.md @@ -0,0 +1,59 @@ +# {%= name %} {%= badge("fury") %} + +> {%= description %} + +Useful for protecting tokens, like templates in HTML, from being mutated when the string is transformed in some way, like from a formatter/beautifier. + +**Example without `preserve`** + +Let's say you want to use [js-beautify] on a string of html with Lo-Dash/Underscore templates, such as: `
    • <%= name %>
    `: + +js-beautify will render the template unusable (and apply incorrect formatting because of the unfamiliar syntax from the Lo-Dash template): + +```html +
      +
    • + <%=n ame %> +
    • +
    +``` + +**Example with `preserve`** + +Correct. + +```html +
      +
    • <%= name %>
    • +
    +``` + +For the record, this is just a random example, I've had very few issues with js-beautify in general. But with or without js-beautify, this kind of token mangling does happen sometimes when you use formatters, beautifiers or similar tools. + +## Install +{%= include("install-npm", {save: true}) %} + +## Run tests + +```bash +npm test +``` + +## API +{%= apidocs("index.js") %} + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue]({%= bugs.url %}) + +## Author +{%= include("author") %} + +## License +{%= copyright() %} +{%= license() %} + +*** + +{%= include("footer") %} + +[js-beautify]: https://github.com/beautify-web/js-beautify \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/LICENSE new file mode 100644 index 0000000..5a9956a --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/LICENSE @@ -0,0 +1,24 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/README.md new file mode 100644 index 0000000..75000b9 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/README.md @@ -0,0 +1,90 @@ +# preserve [![NPM version](https://badge.fury.io/js/preserve.svg)](http://badge.fury.io/js/preserve) + +> Temporarily substitute tokens in the given `string` with placeholders, then put them back after transforming the string. + +Useful for protecting tokens, like templates in HTML, from being mutated when the string is transformed in some way, like from a formatter/beautifier. + +**Example without `preserve`** + +Let's say you want to use [js-beautify] on a string of html with Lo-Dash/Underscore templates, such as: `
    • <%= name %>
    `: + +js-beautify will render the template unusable (and apply incorrect formatting because of the unfamiliar syntax from the Lo-Dash template): + +```html +
      +
    • + <%=n ame %> +
    • +
    +``` + +**Example with `preserve`** + +Correct. + +```html +
      +
    • <%= name %>
    • +
    +``` + +For the record, this is just a random example, I've had very few issues with js-beautify in general. But with or without js-beautify, this kind of token mangling does happen sometimes when you use formatters, beautifiers or similar tools. + +## Install +## Install with [npm](npmjs.org) + +```bash +npm i preserve --save +``` + +## Run tests + +```bash +npm test +``` + +## API +### [.before](index.js#L23) + +Replace tokens in `str` with a temporary, heuristic placeholder. + +* `str` **{String}** +* `returns` **{String}**: String with placeholders. + +```js +tokens.before('{a\\,b}'); +//=> '{__ID1__}' +``` + +### [.after](index.js#L44) + +Replace placeholders in `str` with original tokens. + +* `str` **{String}**: String with placeholders +* `returns` **{String}** `str`: String with original tokens. + +```js +tokens.after('{__ID1__}'); +//=> '{a\\,b}' +``` + + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/preserve/issues) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2015-2015, Jon Schlinkert. +Released under the MIT license + +*** + +_This file was generated by [verb](https://github.com/assemble/verb) on January 10, 2015._ + +[js-beautify]: https://github.com/beautify-web/js-beautify \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/index.js new file mode 100644 index 0000000..a6c5d48 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/index.js @@ -0,0 +1,54 @@ +/*! + * preserve + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT license. + */ + +'use strict'; + +/** + * Replace tokens in `str` with a temporary, heuristic placeholder. + * + * ```js + * tokens.before('{a\\,b}'); + * //=> '{__ID1__}' + * ``` + * + * @param {String} `str` + * @return {String} String with placeholders. + * @api public + */ + +exports.before = function before(str, re) { + return str.replace(re, function (match) { + var id = randomize(); + cache[id] = match; + return '__ID' + id + '__'; + }); +}; + +/** + * Replace placeholders in `str` with original tokens. + * + * ```js + * tokens.after('{__ID1__}'); + * //=> '{a\\,b}' + * ``` + * + * @param {String} `str` String with placeholders + * @return {String} `str` String with original tokens. + * @api public + */ + +exports.after = function after(str) { + return str.replace(/__ID(.{5})__/g, function (_, id) { + return cache[id]; + }); +}; + +function randomize() { + return Math.random().toString().slice(2, 7); +} + +var cache = {}; \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/package.json new file mode 100644 index 0000000..fa639ec --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/package.json @@ -0,0 +1,69 @@ +{ + "name": "preserve", + "description": "Temporarily substitute tokens in the given `string` with placeholders, then put them back after transforming the string.", + "version": "0.2.0", + "homepage": "https://github.com/jonschlinkert/preserve", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/preserve.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/preserve/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/preserve/blob/master/LICENSE-MIT" + }, + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha -R spec" + }, + "devDependencies": { + "benchmarked": "^0.1.3", + "chalk": "^0.5.1", + "js-beautify": "^1.5.4", + "mocha": "*", + "should": "*" + }, + "keywords": [ + "escape", + "format", + "placeholder", + "placeholders", + "prettify", + "regex", + "replace", + "template", + "templates", + "token", + "tokens" + ], + "gitHead": "1bf405d35e4aea06a2ee83db2d34dc54abc0a1f9", + "_id": "preserve@0.2.0", + "_shasum": "815ed1f6ebc65926f865b310c0713bcb3315ce4b", + "_from": "preserve@>=0.2.0 <0.3.0", + "_npmVersion": "1.4.23", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "815ed1f6ebc65926f865b310c0713bcb3315ce4b", + "tarball": "http://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/test.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/test.js new file mode 100644 index 0000000..9bf174f --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/preserve/test.js @@ -0,0 +1,48 @@ +/*! + * preserve + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License + */ + +'use strict'; + +var should = require('should'); +var tokens = require('./'); + +var re = /<%=\s*[^>]+%>/g; +var pretty = function(str) { + return require('js-beautify').html(str, { + indent_char: ' ', + indent_size: 2, + }); +}; + +describe('preserve tokens', function () { + var testRe = /__ID.{5}__\n__ID.{5}__\n__ID.{5}__/; + var re = /<%=\s*[^>]+%>/g; + + it('should (e.g. shouldn\'t, but will) mangle tokens in the given string', function () { + var html = pretty('
    • <%= name %>
    '); + html.should.equal('
      \n
    • \n <%=n ame %>\n
    • \n
    '); + }); + + it('should preserve tokens in the given string', function () { + var html = tokens.after(pretty(tokens.before('
    • <%= name %>
    ', re))); + html.should.equal('
      \n
    • <%= name %>
    • \n
    '); + }); + + describe('.before()', function () { + it('should replace matches with placeholder tokens:', function () { + tokens.before('<%= a %>\n<%= b %>\n<%= c %>', re).should.match(testRe); + }); + }); + + describe('tokens.after()', function () { + it('should replace placeholder tokens with original values:', function () { + var before = tokens.before('<%= a %>\n<%= b %>\n<%= c %>', re); + before.should.match(testRe); + tokens.after(before).should.equal('<%= a %>\n<%= b %>\n<%= c %>'); + }); + }); +}); diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/repeat-element/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/repeat-element/LICENSE new file mode 100644 index 0000000..33754da --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/repeat-element/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/repeat-element/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/repeat-element/README.md new file mode 100644 index 0000000..008e20e --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/repeat-element/README.md @@ -0,0 +1,71 @@ +# repeat-element [![NPM version](https://badge.fury.io/js/repeat-element.svg)](http://badge.fury.io/js/repeat-element) + +> Create an array by repeating the given value n times. + +## Install + +Install with [npm](https://www.npmjs.com/) + +```bash +npm i repeat-element --save +``` + +## Usage + +```js +var repeat = require('repeat-element'); + +repeat('a', 5); +//=> ['a', 'a', 'a', 'a', 'a'] + +repeat('a', 1); +//=> ['a'] + +repeat('a', 0); +//=> [] + +repeat(null, 5) +//» [ null, null, null, null, null ] + +repeat({some: 'object'}, 5) +//» [ { some: 'object' }, +// { some: 'object' }, +// { some: 'object' }, +// { some: 'object' }, +// { some: 'object' } ] + +repeat(5, 5) +//» [ 5, 5, 5, 5, 5 ] +``` + +## Related projects + +[repeat-string](https://github.com/jonschlinkert/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string. + +## Running tests + +Install dev dependencies: + +```bash +npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/repeat-element/issues) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright (c) 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on May 06, 2015._ diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/repeat-element/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/repeat-element/index.js new file mode 100644 index 0000000..0ad45ab --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/repeat-element/index.js @@ -0,0 +1,18 @@ +/*! + * repeat-element + * + * Copyright (c) 2015 Jon Schlinkert. + * Licensed under the MIT license. + */ + +'use strict'; + +module.exports = function repeat(ele, num) { + var arr = new Array(num); + + for (var i = 0; i < num; i++) { + arr[i] = ele; + } + + return arr; +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/repeat-element/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/repeat-element/package.json new file mode 100644 index 0000000..ec9e62b --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/node_modules/repeat-element/package.json @@ -0,0 +1,66 @@ +{ + "name": "repeat-element", + "description": "Create an array by repeating the given value n times.", + "version": "1.1.2", + "homepage": "https://github.com/jonschlinkert/repeat-element", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/repeat-element.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/repeat-element/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/repeat-element/blob/master/LICENSE" + }, + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "files": [ + "index.js" + ], + "keywords": [ + "array", + "element", + "repeat", + "string" + ], + "devDependencies": { + "benchmarked": "^0.1.4", + "chalk": "^1.0.0", + "glob": "^5.0.5", + "minimist": "^1.1.1", + "mocha": "^2.2.4" + }, + "gitHead": "7a6b21d58eafcc44fc8de133c70a8398ee9fdd8d", + "_id": "repeat-element@1.1.2", + "_shasum": "ef089a178d1483baae4d93eb98b4f9e4e11d990a", + "_from": "repeat-element@>=1.1.2 <2.0.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "ef089a178d1483baae4d93eb98b4f9e4e11d990a", + "tarball": "http://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/package.json new file mode 100644 index 0000000..d058a61 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/braces/package.json @@ -0,0 +1,96 @@ +{ + "name": "braces", + "description": "Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces specification.", + "version": "1.8.1", + "homepage": "https://github.com/jonschlinkert/braces", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/braces.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/braces/issues" + }, + "license": "MIT", + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "files": [ + "index.js" + ], + "dependencies": { + "expand-range": "^1.8.1", + "lazy-cache": "^0.2.3", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + }, + "devDependencies": { + "benchmarked": "^0.1.3", + "brace-expansion": "^1.1.0", + "chalk": "^0.5.1", + "minimatch": "^2.0.1", + "minimist": "^1.1.0", + "mocha": "*", + "should": "*" + }, + "keywords": [ + "alpha", + "alphabetical", + "bash", + "brace", + "expand", + "expansion", + "filepath", + "fill", + "fs", + "glob", + "globbing", + "letter", + "match", + "matches", + "matching", + "number", + "numerical", + "path", + "range", + "ranges", + "sh" + ], + "gitHead": "04aa03dccdadaf469bb7cad86ac8a31d21e974d7", + "_id": "braces@1.8.1", + "_shasum": "2d195b85a0a997ec21be78a7f1bc970480b12a1a", + "_from": "braces@>=1.8.0 <2.0.0", + "_npmVersion": "2.10.1", + "_nodeVersion": "0.12.4", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + { + "name": "es128", + "email": "elan.shanker+npm@gmail.com" + }, + { + "name": "doowb", + "email": "brian.woodward@gmail.com" + } + ], + "dist": { + "shasum": "2d195b85a0a997ec21be78a7f1bc970480b12a1a", + "tarball": "http://registry.npmjs.org/braces/-/braces-1.8.1.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/braces/-/braces-1.8.1.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/expand-brackets/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/expand-brackets/LICENSE new file mode 100644 index 0000000..33754da --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/expand-brackets/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/expand-brackets/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/expand-brackets/README.md new file mode 100644 index 0000000..7eea4ed --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/expand-brackets/README.md @@ -0,0 +1,89 @@ +# expand-brackets [![NPM version](https://badge.fury.io/js/expand-brackets.svg)](http://badge.fury.io/js/expand-brackets) + +> Expand POSIX bracket expressions (character classes) in glob patterns. + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i expand-brackets --save +``` + +## Usage + +```js +var brackets = require('expand-brackets'); + +brackets('[![:lower:]]'); +//=> '[^a-z]' +``` + +## .isMatch + +Return true if the given string matches the bracket expression: + +```js +brackets.isMatch('A', '[![:lower:]]'); +//=> true + +brackets.isMatch('a', '[![:lower:]]'); +//=> false +``` + +## .makeRe + +Make a regular expression from a bracket expression: + +```js +brackets.makeRe('[![:lower:]]'); +//=> /[^a-z]/ +``` + +The following named POSIX bracket expressions are supported: + +* `[:alnum:]`: Alphanumeric characters (`a-zA-Z0-9]`) +* `[:alpha:]`: Alphabetic characters (`a-zA-Z]`) +* `[:blank:]`: Space and tab (`[ t]`) +* `[:digit:]`: Digits (`[0-9]`) +* `[:lower:]`: Lowercase letters (`[a-z]`) +* `[:punct:]`: Punctuation and symbols. (`[!"#$%&'()*+, -./:;<=>?@ [\]^_``{|}~]`) +* `[:upper:]`: Uppercase letters (`[A-Z]`) +* `[:word:]`: Word characters (letters, numbers and underscores) (`[A-Za-z0-9_]`) +* `[:xdigit:]`: Hexadecimal digits (`[A-Fa-f0-9]`) + +Collating sequences are not supported. + +## Related projects + +* [extglob](https://github.com/jonschlinkert/extglob): Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to… [more](https://github.com/jonschlinkert/extglob) +* [is-glob](https://github.com/jonschlinkert/is-glob): Returns `true` if the given string looks like a glob pattern. +* [is-extglob](https://github.com/jonschlinkert/is-extglob): Returns true if a string has an extglob. +* [is-posix-bracket](https://github.com/jonschlinkert/is-posix-bracket): Returns true if the given string is a POSIX bracket expression (POSIX character class). +* [micromatch](https://github.com/jonschlinkert/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. Just… [more](https://github.com/jonschlinkert/micromatch) + +## Running tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/expand-brackets/issues/new) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on August 01, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/expand-brackets/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/expand-brackets/index.js new file mode 100644 index 0000000..0207042 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/expand-brackets/index.js @@ -0,0 +1,157 @@ +/*! + * expand-brackets + * + * Copyright (c) 2015 Jon Schlinkert. + * Licensed under the MIT license. + */ + +'use strict'; + +/** + * POSIX character classes + */ + +var POSIX = { + alnum: 'a-zA-Z0-9', + alpha: 'a-zA-Z', + blank: ' \\t', + cntrl: '\\x00-\\x1F\\x7F', + digit: '0-9', + graph: '\\x21-\\x7E', + lower: 'a-z', + print: '\\x20-\\x7E', + punct: '!"#$%&\'()\\*+,-./:;<=>?@[\\]^_`{|}~', + space: ' \\t\\r\\n\\v\\f', + upper: 'A-Z', + word: 'A-Za-z0-9_', + xdigit: 'A-Fa-f0-9', +}; + +/** + * Expose `brackets` + */ + +module.exports = brackets; + +function brackets(str) { + var negated = false; + if (str.indexOf('[^') !== -1) { + negated = true; + str = str.split('[^').join('['); + } + if (str.indexOf('[!') !== -1) { + negated = true; + str = str.split('[!').join('['); + } + + var a = str.split('['); + var b = str.split(']'); + var imbalanced = a.length !== b.length; + + var parts = str.split(/(?::\]\[:|\[?\[:|:\]\]?)/); + var len = parts.length, i = 0; + var end = '', beg = ''; + var res = []; + + // start at the end (innermost) first + while (len--) { + var inner = parts[i++]; + if (inner === '^[!' || inner === '[!') { + inner = ''; + negated = true; + } + + var prefix = negated ? '^' : ''; + var ch = POSIX[inner]; + + if (ch) { + res.push('[' + prefix + ch + ']'); + } else if (inner) { + if (/^\[?\w-\w\]?$/.test(inner)) { + if (i === parts.length) { + res.push('[' + prefix + inner); + } else if (i === 1) { + res.push(prefix + inner + ']'); + } else { + res.push(prefix + inner); + } + } else { + if (i === 1) { + beg += inner; + } else if (i === parts.length) { + end += inner; + } else { + res.push('[' + prefix + inner + ']'); + } + } + } + } + + var result = res.join('|'); + var rlen = res.length || 1; + if (rlen > 1) { + result = '(?:' + result + ')'; + rlen = 1; + } + if (beg) { + rlen++; + if (beg.charAt(0) === '[') { + if (imbalanced) { + beg = '\\[' + beg.slice(1); + } else { + beg += ']'; + } + } + result = beg + result; + } + if (end) { + rlen++; + if (end.slice(-1) === ']') { + if (imbalanced) { + end = end.slice(0, end.length - 1) + '\\]'; + } else { + end = '[' + end; + } + } + result += end; + } + + if (rlen > 1) { + result = result.split('][').join(']|['); + if (result.indexOf('|') !== -1 && !/\(\?/.test(result)) { + result = '(?:' + result + ')'; + } + } + + result = result.replace(/\[+=|=\]+/g, '\\b'); + return result; +} + +brackets.makeRe = function (pattern) { + try { + return new RegExp(brackets(pattern)); + } catch (err) {} +}; + +brackets.isMatch = function (str, pattern) { + try { + return brackets.makeRe(pattern).test(str); + } catch (err) { + return false; + } +}; + +brackets.match = function (arr, pattern) { + var len = arr.length, i = 0; + var res = arr.slice(); + + var re = brackets.makeRe(pattern); + while (i < len) { + var ele = arr[i++]; + if (!re.test(ele)) { + continue; + } + res.splice(i, 1); + } + return res; +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/expand-brackets/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/expand-brackets/package.json new file mode 100644 index 0000000..f7cd53a --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/expand-brackets/package.json @@ -0,0 +1,79 @@ +{ + "name": "expand-brackets", + "description": "Expand POSIX bracket expressions (character classes) in glob patterns.", + "version": "0.1.4", + "homepage": "https://github.com/jonschlinkert/expand-brackets", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/expand-brackets.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/expand-brackets/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "mocha": "^2.2.5", + "should": "^7.0.2" + }, + "keywords": [ + "bracket", + "character class", + "expression", + "posix" + ], + "verb": { + "related": { + "list": [ + "extglob", + "micromatch", + "is-glob", + "is-extglob", + "is-posix-bracket" + ] + } + }, + "gitHead": "38475d3e4973b8496812e39983d2945a78d0ade3", + "_id": "expand-brackets@0.1.4", + "_shasum": "797b9e484101205f418cecaec6312c132f51e2ae", + "_from": "expand-brackets@>=0.1.1 <0.2.0", + "_npmVersion": "2.10.1", + "_nodeVersion": "0.12.4", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + { + "name": "es128", + "email": "elan.shanker+npm@gmail.com" + }, + { + "name": "doowb", + "email": "brian.woodward@gmail.com" + } + ], + "dist": { + "shasum": "797b9e484101205f418cecaec6312c132f51e2ae", + "tarball": "http://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.4.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.4.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/LICENSE new file mode 100644 index 0000000..65f90ac --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/README.md new file mode 100644 index 0000000..6664406 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/README.md @@ -0,0 +1,88 @@ +# extglob [![NPM version](https://badge.fury.io/js/extglob.svg)](http://badge.fury.io/js/extglob) [![Build Status](https://travis-ci.org/jonschlinkert/extglob.svg)](https://travis-ci.org/jonschlinkert/extglob) + +> Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to glob patterns. + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i extglob --save +``` + +Used by [micromatch](https://github.com/jonschlinkert/micromatch). + +**Features** + +* Convert an extglob string to a regex-compatible string. **Only converts extglobs**, to handle full globs use [micromatch](https://github.com/jonschlinkert/micromatch). +* Pass `{regex: true}` to return a regex +* Handles nested patterns +* More complete (and correct) support than [minimatch](https://github.com/isaacs/minimatch) + +## Usage + +```js +var extglob = require('extglob'); + +extglob('?(z)'); +//=> '(?:z)?' +extglob('*(z)'); +//=> '(?:z)*' +extglob('+(z)'); +//=> '(?:z)+' +extglob('@(z)'); +//=> '(?:z)' +extglob('!(z)'); +//=> '(?!^(?:(?!z)[^/]*?)).*$' +``` + +**Optionally return regex** + +```js +extglob('!(z)', {regex: true}); +//=> /(?!^(?:(?!z)[^/]*?)).*$/ +``` + +## Extglob patterns + +To learn more about how extglobs work, see the docs for [Bash pattern matching](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html): + +* `?(pattern)`: Match zero or one occurrence of the given pattern. +* `*(pattern)`: Match zero or more occurrences of the given pattern. +* `+(pattern)`: Match one or more occurrences of the given pattern. +* `@(pattern)`: Match one of the given pattern. +* `!(pattern)`: Match anything except one of the given pattern. + +## Related + +* [braces](https://github.com/jonschlinkert/braces): Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces… [more](https://github.com/jonschlinkert/braces) +* [expand-brackets](https://github.com/jonschlinkert/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. +* [expand-range](https://github.com/jonschlinkert/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See… [more](https://github.com/jonschlinkert/expand-range) +* [fill-range](https://github.com/jonschlinkert/fill-range): Fill in a range of numbers or letters, optionally passing an increment or multiplier to… [more](https://github.com/jonschlinkert/fill-range) +* [micromatch](https://github.com/jonschlinkert/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. Just… [more](https://github.com/jonschlinkert/micromatch) + +## Run tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/extglob/issues/new) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on August 01, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/index.js new file mode 100644 index 0000000..2e774d4 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/index.js @@ -0,0 +1,178 @@ +/*! + * extglob + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +/** + * Module dependencies + */ + +var isExtglob = require('is-extglob'); +var re, cache = {}; + +/** + * Expose `extglob` + */ + +module.exports = extglob; + +/** + * Convert the given extglob `string` to a regex-compatible + * string. + * + * ```js + * var extglob = require('extglob'); + * extglob('!(a?(b))'); + * //=> '(?!a(?:b)?)[^/]*?' + * ``` + * + * @param {String} `str` The string to convert. + * @param {Object} `options` + * @option {Boolean} [options] `esc` If `false` special characters will not be escaped. Defaults to `true`. + * @option {Boolean} [options] `regex` If `true` a regular expression is returned instead of a string. + * @return {String} + * @api public + */ + + +function extglob(str, opts) { + opts = opts || {}; + var o = {}, i = 0; + + // fix common character reversals + // '*!(.js)' => '*.!(js)' + str = str.replace(/!\(([^\w*()])/g, '$1!('); + + // support file extension negation + str = str.replace(/([*\/])\.!\([*]\)/g, function (m, ch) { + if (ch === '/') { + return escape('\\/[^.]+'); + } + return escape('[^.]+'); + }); + + // create a unique key for caching by + // combining the string and options + var key = str + + String(!!opts.regex) + + String(!!opts.contains) + + String(!!opts.escape); + + if (cache.hasOwnProperty(key)) { + return cache[key]; + } + + if (!(re instanceof RegExp)) { + re = regex(); + } + + opts.negate = false; + var m; + + while (m = re.exec(str)) { + var prefix = m[1]; + var inner = m[3]; + if (prefix === '!') { + opts.negate = true; + } + + var id = '__EXTGLOB_' + (i++) + '__'; + // use the prefix of the _last_ (outtermost) pattern + o[id] = wrap(inner, prefix, opts.escape); + str = str.split(m[0]).join(id); + } + + var keys = Object.keys(o); + var len = keys.length; + + // we have to loop again to allow us to convert + // patterns in reverse order (starting with the + // innermost/last pattern first) + while (len--) { + var prop = keys[len]; + str = str.split(prop).join(o[prop]); + } + + var result = opts.regex + ? toRegex(str, opts.contains, opts.negate) + : str; + + result = result.split('.').join('\\.'); + + // cache the result and return it + return (cache[key] = result); +} + +/** + * Convert `string` to a regex string. + * + * @param {String} `str` + * @param {String} `prefix` Character that determines how to wrap the string. + * @param {Boolean} `esc` If `false` special characters will not be escaped. Defaults to `true`. + * @return {String} + */ + +function wrap(inner, prefix, esc) { + if (esc) inner = escape(inner); + + switch (prefix) { + case '!': + return '(?!' + inner + ')[^/]' + (esc ? '%%%~' : '*?'); + case '@': + return '(?:' + inner + ')'; + case '+': + return '(?:' + inner + ')+'; + case '*': + return '(?:' + inner + ')' + (esc ? '%%' : '*') + case '?': + return '(?:' + inner + '|)'; + default: + return inner; + } +} + +function escape(str) { + str = str.split('*').join('[^/]%%%~'); + str = str.split('.').join('\\.'); + return str; +} + +/** + * extglob regex. + */ + +function regex() { + return /(\\?[@?!+*$]\\?)(\(([^()]*?)\))/; +} + +/** + * Negation regex + */ + +function negate(str) { + return '(?!^' + str + ').*$'; +} + +/** + * Create the regex to do the matching. If + * the leading character in the `pattern` is `!` + * a negation regex is returned. + * + * @param {String} `pattern` + * @param {Boolean} `contains` Allow loose matching. + * @param {Boolean} `isNegated` True if the pattern is a negation pattern. + */ + +function toRegex(pattern, contains, isNegated) { + var prefix = contains ? '^' : ''; + var after = contains ? '$' : ''; + pattern = ('(?:' + pattern + ')' + after); + if (isNegated) { + pattern = prefix + negate(pattern); + } + return new RegExp(prefix + pattern); +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/LICENSE new file mode 100644 index 0000000..41283c9 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) <%= year() %>, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/index.js new file mode 100644 index 0000000..1a741e5 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/index.js @@ -0,0 +1,14 @@ +/*! + * ansi-green + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var wrap = require('ansi-wrap'); + +module.exports = function green(message) { + return wrap(32, 39, message); +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/node_modules/ansi-wrap/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/node_modules/ansi-wrap/LICENSE new file mode 100644 index 0000000..65f90ac --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/node_modules/ansi-wrap/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/node_modules/ansi-wrap/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/node_modules/ansi-wrap/README.md new file mode 100644 index 0000000..032c1e6 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/node_modules/ansi-wrap/README.md @@ -0,0 +1,89 @@ +# ansi-wrap [![NPM version](https://badge.fury.io/js/ansi-wrap.svg)](http://badge.fury.io/js/ansi-wrap) + +> Create ansi colors by passing the open and close codes. + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i ansi-wrap --save +``` + +## Usage + +```js +var wrap = require('ansi-wrap'); +``` + +**Example** + +Pass codes for [ansi magenta background](https://github.com/jonschlinkert/ansi-bgmagenta): + +```js +console.log(wrap(45, 49, 'This is a message...')); +//=> '\u001b[45mfoo\u001b[49m' +``` + +Which prints out... + +[![screen shot 2015-05-21 at 8 28 32 pm](https://cloud.githubusercontent.com/assets/383994/7761769/12488afa-fff8-11e4-9cc1-71a8a6ec14a4.png)](https://www.npmjs.com/) + +## Related projects + +This is used in these projects: + +* [ansi-reset](https://github.com/jonschlinkert/ansi-reset) +* [ansi-bold](https://github.com/jonschlinkert/ansi-bold) +* [ansi-dim](https://github.com/jonschlinkert/ansi-dim) +* [ansi-italic](https://github.com/jonschlinkert/ansi-italic) +* [ansi-underline](https://github.com/jonschlinkert/ansi-underline) +* [ansi-inverse](https://github.com/jonschlinkert/ansi-inverse) +* [ansi-hidden](https://github.com/jonschlinkert/ansi-hidden) +* [ansi-strikethrough](https://github.com/jonschlinkert/ansi-strikethrough) +* [ansi-black](https://github.com/jonschlinkert/ansi-black) +* [ansi-red](https://github.com/jonschlinkert/ansi-red) +* [ansi-green](https://github.com/jonschlinkert/ansi-green) +* [ansi-yellow](https://github.com/jonschlinkert/ansi-yellow) +* [ansi-blue](https://github.com/jonschlinkert/ansi-blue) +* [ansi-magenta](https://github.com/jonschlinkert/ansi-magenta) +* [ansi-cyan](https://github.com/jonschlinkert/ansi-cyan) +* [ansi-white](https://github.com/jonschlinkert/ansi-white) +* [ansi-gray](https://github.com/jonschlinkert/ansi-gray) +* [ansi-grey](https://github.com/jonschlinkert/ansi-grey) +* [ansi-bgblack](https://github.com/jonschlinkert/ansi-bgblack) +* [ansi-bgred](https://github.com/jonschlinkert/ansi-bgred) +* [ansi-bggreen](https://github.com/jonschlinkert/ansi-bggreen) +* [ansi-bgyellow](https://github.com/jonschlinkert/ansi-bgyellow) +* [ansi-bgblue](https://github.com/jonschlinkert/ansi-bgblue) +* [ansi-bgmagenta](https://github.com/jonschlinkert/ansi-bgmagenta) +* [ansi-bgcyan](https://github.com/jonschlinkert/ansi-bgcyan) +* [ansi-bgwhite](https://github.com/jonschlinkert/ansi-bgwhite) + +## Running tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/ansi-wrap/issues/new) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on May 21, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/node_modules/ansi-wrap/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/node_modules/ansi-wrap/index.js new file mode 100644 index 0000000..ffc52d7 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/node_modules/ansi-wrap/index.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = function(a, b, msg) { + return '\u001b['+ a + 'm' + msg + '\u001b[' + b + 'm'; +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/node_modules/ansi-wrap/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/node_modules/ansi-wrap/package.json new file mode 100644 index 0000000..fc512be --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/node_modules/ansi-wrap/package.json @@ -0,0 +1,55 @@ +{ + "name": "ansi-wrap", + "description": "Create ansi colors by passing the open and close codes.", + "version": "0.1.0", + "homepage": "https://github.com/jonschlinkert/ansi-wrap", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "https://github.com/jonschlinkert/ansi-wrap.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/ansi-wrap/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/ansi-wrap/blob/master/LICENSE" + }, + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": {}, + "devDependencies": {}, + "keywords": [], + "_id": "ansi-wrap@0.1.0", + "_shasum": "a82250ddb0015e9a27ca82e82ea603bbfa45efaf", + "_from": "ansi-wrap@0.1.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "a82250ddb0015e9a27ca82e82ea603bbfa45efaf", + "tarball": "http://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/package.json new file mode 100644 index 0000000..01d74ec --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/package.json @@ -0,0 +1,82 @@ +{ + "name": "ansi-green", + "description": "The color green, in ansi.", + "version": "0.1.1", + "homepage": "https://github.com/jonschlinkert/ansi-green", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/ansi-green.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/ansi-green/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "devDependencies": { + "mocha": "*" + }, + "keywords": [ + "green", + "256", + "ansi", + "cli", + "color", + "colors", + "colour", + "command", + "command-line", + "console", + "format", + "formatting", + "iterm", + "log", + "logging", + "rgb", + "shell", + "string", + "style", + "styles", + "styling", + "terminal", + "text", + "tty", + "xterm" + ], + "_id": "ansi-green@0.1.1", + "_shasum": "8a5d9a979e458d57c40e33580b37390b8e10d0f7", + "_from": "ansi-green@>=0.1.1 <0.2.0", + "_resolved": "https://registry.npmjs.org/ansi-green/-/ansi-green-0.1.1.tgz", + "_npmVersion": "2.10.0", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "8a5d9a979e458d57c40e33580b37390b8e10d0f7", + "tarball": "http://registry.npmjs.org/ansi-green/-/ansi-green-0.1.1.tgz" + }, + "directories": {} +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/readme.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/readme.md new file mode 100644 index 0000000..4b9c7ab --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/ansi-green/readme.md @@ -0,0 +1,74 @@ +# ansi-green [![NPM version](https://badge.fury.io/js/ansi-green.svg)](http://badge.fury.io/js/ansi-green) + +> The color green, in ansi. + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i ansi-green --save +``` + +## Usage + +```js +var green = require('ansi-green'); +``` + +## Related projects + +* [ansi-reset](https://github.com/jonschlinkert/ansi-reset) +* [ansi-bold](https://github.com/jonschlinkert/ansi-bold) +* [ansi-dim](https://github.com/jonschlinkert/ansi-dim) +* [ansi-italic](https://github.com/jonschlinkert/ansi-italic) +* [ansi-underline](https://github.com/jonschlinkert/ansi-underline) +* [ansi-inverse](https://github.com/jonschlinkert/ansi-inverse) +* [ansi-hidden](https://github.com/jonschlinkert/ansi-hidden) +* [ansi-strikethrough](https://github.com/jonschlinkert/ansi-strikethrough) +* [ansi-black](https://github.com/jonschlinkert/ansi-black) +* [ansi-red](https://github.com/jonschlinkert/ansi-red) +* [ansi-green](https://github.com/jonschlinkert/ansi-green) +* [ansi-yellow](https://github.com/jonschlinkert/ansi-yellow) +* [ansi-blue](https://github.com/jonschlinkert/ansi-blue) +* [ansi-magenta](https://github.com/jonschlinkert/ansi-magenta) +* [ansi-cyan](https://github.com/jonschlinkert/ansi-cyan) +* [ansi-white](https://github.com/jonschlinkert/ansi-white) +* [ansi-gray](https://github.com/jonschlinkert/ansi-gray) +* [ansi-grey](https://github.com/jonschlinkert/ansi-grey) +* [ansi-bgblack](https://github.com/jonschlinkert/ansi-bgblack) +* [ansi-bgred](https://github.com/jonschlinkert/ansi-bgred) +* [ansi-bggreen](https://github.com/jonschlinkert/ansi-bggreen) +* [ansi-bgyellow](https://github.com/jonschlinkert/ansi-bgyellow) +* [ansi-bgblue](https://github.com/jonschlinkert/ansi-bgblue) +* [ansi-bgmagenta](https://github.com/jonschlinkert/ansi-bgmagenta) +* [ansi-bgcyan](https://github.com/jonschlinkert/ansi-bgcyan) +* [ansi-bgwhite](https://github.com/jonschlinkert/ansi-bgwhite) + +## Running tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/ansi-green/issues/new) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on May 21, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/is-extglob/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/is-extglob/LICENSE new file mode 100644 index 0000000..fa30c4c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/is-extglob/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/is-extglob/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/is-extglob/README.md new file mode 100644 index 0000000..80e7128 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/is-extglob/README.md @@ -0,0 +1,75 @@ +# is-extglob [![NPM version](https://badge.fury.io/js/is-extglob.svg)](http://badge.fury.io/js/is-extglob) [![Build Status](https://travis-ci.org/jonschlinkert/is-extglob.svg)](https://travis-ci.org/jonschlinkert/is-extglob) + +> Returns true if a string has an extglob. + +## Install with [npm](npmjs.org) + +```bash +npm i is-extglob --save +``` + +## Usage + +```js +var isExtglob = require('is-extglob'); +``` + +**True** + +```js +isExtglob('?(abc)'); +isExtglob('@(abc)'); +isExtglob('!(abc)'); +isExtglob('*(abc)'); +isExtglob('+(abc)'); +``` + +**False** + +Everything else... + +```js +isExtglob('foo.js'); +isExtglob('!foo.js'); +isExtglob('*.js'); +isExtglob('**/abc.js'); +isExtglob('abc/*.js'); +isExtglob('abc/(aaa|bbb).js'); +isExtglob('abc/[a-z].js'); +isExtglob('abc/{a,b}.js'); +isExtglob('abc/?.js'); +isExtglob('abc.js'); +isExtglob('abc/def/ghi.js'); +``` + +## Related +* [extglob](https://github.com/jonschlinkert/extglob): Extended globs. extglobs add the expressive power of regular expressions to glob patterns. +* [micromatch](https://github.com/jonschlinkert/micromatch): Glob matching for javascript/node.js. A faster alternative to minimatch (10-45x faster on avg), with all the features you're used to using in your Grunt and gulp tasks. +* [parse-glob](https://github.com/jonschlinkert/parse-glob): Parse a glob pattern into an object of tokens. + +## Run tests +Install dev dependencies. + +```bash +npm i -d && npm test +``` + + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-extglob/issues) + + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on March 06, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/is-extglob/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/is-extglob/index.js new file mode 100644 index 0000000..803047f --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/is-extglob/index.js @@ -0,0 +1,11 @@ +/*! + * is-extglob + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +module.exports = function isExtglob(str) { + return typeof str === 'string' + && /[@?!+*]\(/.test(str); +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/is-extglob/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/is-extglob/package.json new file mode 100644 index 0000000..148383a --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/is-extglob/package.json @@ -0,0 +1,73 @@ +{ + "name": "is-extglob", + "description": "Returns true if a string has an extglob.", + "version": "1.0.0", + "homepage": "https://github.com/jonschlinkert/is-extglob", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/is-extglob.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-extglob/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha", + "prepublish": "browserify -o browser.js -e index.js" + }, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "keywords": [ + "bash", + "braces", + "check", + "exec", + "extglob", + "expression", + "glob", + "globbing", + "globstar", + "match", + "matches", + "pattern", + "regex", + "regular", + "string", + "test" + ], + "_id": "is-extglob@1.0.0", + "_shasum": "ac468177c4943405a092fc8f29760c6ffc6206c0", + "_from": "is-extglob@>=1.0.0 <2.0.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "ac468177c4943405a092fc8f29760c6ffc6206c0", + "tarball": "http://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/success-symbol/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/success-symbol/LICENSE new file mode 100644 index 0000000..65f90ac --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/success-symbol/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/success-symbol/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/success-symbol/README.md new file mode 100644 index 0000000..fbc558c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/success-symbol/README.md @@ -0,0 +1,52 @@ +# success-symbol [![NPM version](https://badge.fury.io/js/success-symbol.svg)](http://badge.fury.io/js/success-symbol) + +> Cross-platform success symbol. + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i success-symbol --save +``` + +## Usage + +```js +var success = require('success-symbol'); +``` + +## Related projects + +* [success-symbol](https://github.com/jonschlinkert/success-symbol) +* [warning-symbol](https://github.com/jonschlinkert/warning-symbol) +* [error-symbol](https://github.com/jonschlinkert/error-symbol) +* [info-symbol](https://github.com/jonschlinkert/info-symbol) + +## Running tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/success-symbol/issues/new) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on May 27, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/success-symbol/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/success-symbol/index.js new file mode 100644 index 0000000..49e89d5 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/success-symbol/index.js @@ -0,0 +1 @@ +module.exports = process.platform === 'win32' ? '√' : '✔'; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/success-symbol/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/success-symbol/package.json new file mode 100644 index 0000000..8e9d8e6 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/node_modules/success-symbol/package.json @@ -0,0 +1,79 @@ +{ + "name": "success-symbol", + "description": "Cross-platform success symbol.", + "version": "0.1.0", + "homepage": "https://github.com/jonschlinkert/success-symbol", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "https://github.com/jonschlinkert/success-symbol" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/success-symbol/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "mocha": "*" + }, + "keywords": [ + "success", + "256", + "ansi", + "cli", + "symbol", + "symbols", + "colour", + "command", + "command-line", + "console", + "format", + "formatting", + "iterm", + "log", + "logging", + "rgb", + "shell", + "string", + "style", + "styles", + "styling", + "terminal", + "text", + "tty", + "xterm" + ], + "_id": "success-symbol@0.1.0", + "_shasum": "24022e486f3bf1cdca094283b769c472d3b72897", + "_from": "success-symbol@>=0.1.0 <0.2.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "24022e486f3bf1cdca094283b769c472d3b72897", + "tarball": "http://registry.npmjs.org/success-symbol/-/success-symbol-0.1.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/success-symbol/-/success-symbol-0.1.0.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/package.json new file mode 100644 index 0000000..869cbea --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/extglob/package.json @@ -0,0 +1,82 @@ +{ + "name": "extglob", + "description": "Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to glob patterns.", + "version": "0.3.1", + "homepage": "https://github.com/jonschlinkert/extglob", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/extglob.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/extglob/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "ansi-green": "^0.1.1", + "is-extglob": "^1.0.0", + "success-symbol": "^0.1.0" + }, + "devDependencies": { + "micromatch": "^2.1.6", + "minimatch": "^2.0.1", + "minimist": "^1.1.0", + "mocha": "*", + "should": "*" + }, + "keywords": [ + "bash", + "extended", + "extglob", + "glob", + "ksh", + "match", + "wildcard" + ], + "verb": { + "related": { + "list": [ + "micromatch", + "expand-brackets", + "braces", + "fill-range", + "expand-range" + ] + } + }, + "gitHead": "7466402011f262f316a3206b6bdce83a57ca3a23", + "_id": "extglob@0.3.1", + "_shasum": "4f31241c0dddc90ac8c729cb6d7c872dee77c8f5", + "_from": "extglob@>=0.3.0 <0.4.0", + "_npmVersion": "2.10.1", + "_nodeVersion": "0.12.4", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "4f31241c0dddc90ac8c729cb6d7c872dee77c8f5", + "tarball": "http://registry.npmjs.org/extglob/-/extglob-0.3.1.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.1.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/filename-regex/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/filename-regex/README.md new file mode 100644 index 0000000..d001e7a --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/filename-regex/README.md @@ -0,0 +1,51 @@ +# filename-regex [![NPM version](https://badge.fury.io/js/filename-regex.svg)](http://badge.fury.io/js/filename-regex) + +> Regular expression for matching file names, with or without extension. + + +## Install with [npm](npmjs.org) + +```bash +npm i filename-regex --save +``` + +## Usage + +```js +var regex = require('filename-regex'); + +'a/b/c/d.min.js'.match(regex()); +//=> match[0] = 'd.min.js' + +'a/b/c/.dotfile'.match(regex()); +//=> match[0] = '.dotfile' +``` + + +## Run tests + +Install dev dependencies: + +```bash +npm i -d && npm test +``` + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/regexps/filename-regex/issues) + + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + + +## License +Copyright (c) 2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb](https://github.com/assemble/verb) on January 24, 2015._ diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/filename-regex/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/filename-regex/index.js new file mode 100644 index 0000000..bb1888b --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/filename-regex/index.js @@ -0,0 +1,10 @@ +/*! + * filename-regex + * + * Copyright (c) 2014-2015, Jon Schlinkert + * Licensed under the MIT license. + */ + +module.exports = function filenameRegex() { + return /([^\\\/]+)$/; +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/filename-regex/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/filename-regex/package.json new file mode 100644 index 0000000..2fda95a --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/filename-regex/package.json @@ -0,0 +1,64 @@ +{ + "name": "filename-regex", + "description": "Regular expression for matching file names, with or without extension.", + "version": "2.0.0", + "homepage": "https://github.com/regexps/filename-regex", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/regexps/filename-regex.git" + }, + "bugs": { + "url": "https://github.com/regexps/filename-regex/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/regexps/filename-regex/blob/master/LICENSE-MIT" + }, + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "scripts": { + "test": "mocha -R spec" + }, + "keywords": [ + "basename", + "regular expression", + "file", + "filename", + "filepath", + "match", + "name", + "path", + "regex", + "regexp" + ], + "gitHead": "aa0f2933322d38cf547ff4c8ced882fbd8422866", + "_id": "filename-regex@2.0.0", + "_shasum": "996e3e80479b98b9897f15a8a58b3d084e926775", + "_from": "filename-regex@>=2.0.0 <3.0.0", + "_npmVersion": "1.4.28", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "996e3e80479b98b9897f15a8a58b3d084e926775", + "tarball": "http://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/is-glob/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/is-glob/LICENSE new file mode 100644 index 0000000..fa30c4c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/is-glob/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/is-glob/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/is-glob/README.md new file mode 100644 index 0000000..f24228e --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/is-glob/README.md @@ -0,0 +1,69 @@ +# is-glob [![NPM version](https://badge.fury.io/js/is-glob.svg)](http://badge.fury.io/js/is-glob) [![Build Status](https://travis-ci.org/jonschlinkert/is-glob.svg)](https://travis-ci.org/jonschlinkert/is-glob) + +> Returns `true` if the given string looks like a glob pattern. + +## Install with [npm](npmjs.org) + +```bash +npm i is-glob --save +``` + +## Usage + +```js +var isGlob = require('is-glob'); + +isGlob('foo.js'); +//=> 'false' +isGlob('!foo.js'); +//=> 'true' +isGlob('*.js'); +//=> 'true' +isGlob('**/abc.js'); +//=> 'true' +isGlob('abc/*.js'); +//=> 'true' +isGlob('abc/(aaa|bbb).js'); +//=> 'true' +isGlob('abc/[a-z].js'); +//=> 'true' +isGlob('abc/{a,b}.js'); +//=> 'true' +isGlob('abc/?.js'); +//=> 'true' +isGlob('abc.js'); +//=> 'false' +isGlob('abc/def/ghi.js'); +//=> 'false' +``` + +## Related +* [micromatch](https://github.com/jonschlinkert/micromatch): Glob matching for javascript/node.js. A faster alternative to minimatch (10-45x faster on avg), with all the features you're used to using in your Grunt and gulp tasks. +* [parse-glob](https://github.com/jonschlinkert/parse-glob): Parse a glob pattern into an object of tokens. + +## Run tests +Install dev dependencies. + +```bash +npm i -d && npm test +``` + + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-glob/issues) + + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on March 04, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/is-glob/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/is-glob/index.js new file mode 100644 index 0000000..16ec18a --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/is-glob/index.js @@ -0,0 +1,11 @@ +/*! + * is-glob + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +module.exports = function isGlob(str) { + return typeof str === 'string' + && /[!*{}?(|)[\]]/.test(str); +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/is-glob/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/is-glob/package.json new file mode 100644 index 0000000..23a3ffa --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/is-glob/package.json @@ -0,0 +1,72 @@ +{ + "name": "is-glob", + "description": "Returns `true` if the given string looks like a glob pattern.", + "version": "1.1.3", + "homepage": "https://github.com/jonschlinkert/is-glob", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "https://github.com/jonschlinkert/is-glob" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-glob/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "keywords": [ + "bash", + "braces", + "check", + "exec", + "extglob", + "expression", + "glob", + "globbing", + "globstar", + "match", + "matches", + "pattern", + "regex", + "regular", + "string", + "test" + ], + "gitHead": "dbfdb6a271cc0fc46168d23dc0603739ff287e01", + "_id": "is-glob@1.1.3", + "_shasum": "b4c64b8303d39114492a460d364ccfb0d3c0a045", + "_from": "is-glob@>=1.1.3 <2.0.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "b4c64b8303d39114492a460d364ccfb0d3c0a045", + "tarball": "http://registry.npmjs.org/is-glob/-/is-glob-1.1.3.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/is-glob/-/is-glob-1.1.3.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/kind-of/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/kind-of/README.md new file mode 100644 index 0000000..9596a94 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/kind-of/README.md @@ -0,0 +1,155 @@ +# kind-of [![NPM version](https://badge.fury.io/js/kind-of.svg)](http://badge.fury.io/js/kind-of) [![Build Status](https://travis-ci.org/jonschlinkert/kind-of.svg)](https://travis-ci.org/jonschlinkert/kind-of) + +> Get the native type of a value. + +## Install with [npm](npmjs.org) + +```bash +npm i kind-of --save +``` + +## Usage + +```js +var kindOf = require('kind-of'); + +kindOf(undefined); +//=> 'undefined' + +kindOf(null); +//=> 'null' + +kindOf(true); +//=> 'boolean' + +kindOf(false); +//=> 'boolean' + +kindOf(new Boolean(true)); +//=> 'boolean' + +kindOf(new Buffer('')); +//=> 'buffer' + +kindOf(42); +//=> 'number' + +kindOf(new Number(42)); +//=> 'number' + +kindOf("string"); +//=> 'string' + +kindOf(arguments); +//=> 'arguments' + +kindOf({}); +//=> 'object' + +kindOf(new Test()); +//=> 'object' + +kindOf(new Date()); +//=> 'date' + +kindOf([]); +//=> 'array' + +kindOf([1, 2, 3]); +//=> 'array' + +kindOf(new Array()); +//=> 'array' + +kindOf(/[\s\S]+/); +//=> 'regexp' + +kindOf(new RegExp('^' + 'foo$')); +//=> 'regexp' + +kindOf(function () {}); +//=> 'function' + +kindOf(new Function()); +//=> 'function' +``` + + +## Run tests + +Install dev dependencies: + +```bash +npm i -d && npm test +``` + +## Benchmarks + +Benchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of). + +```bash +#1: array.js + kind-of x 21,578,944 ops/sec ±1.01% (97 runs sampled) + (lib) type-of x 4,593,840 ops/sec ±0.76% (92 runs sampled) + (lib) typeof x 5,786,776 ops/sec ±0.71% (97 runs sampled) + +#2: boolean.js + kind-of x 25,189,600 ops/sec ±0.60% (97 runs sampled) + (lib) type-of x 2,751,076 ops/sec ±0.78% (100 runs sampled) + (lib) typeof x 4,390,312 ops/sec ±0.61% (99 runs sampled) + +#3: date.js + kind-of x 8,862,303 ops/sec ±0.77% (99 runs sampled) + (lib) type-of x 6,239,662 ops/sec ±0.67% (94 runs sampled) + (lib) typeof x 6,180,922 ops/sec ±0.59% (97 runs sampled) + +#4: function.js + kind-of x 19,685,336 ops/sec ±1.67% (95 runs sampled) + (lib) type-of x 6,648,551 ops/sec ±0.93% (95 runs sampled) + (lib) typeof x 6,631,967 ops/sec ±1.05% (92 runs sampled) + +#5: null.js + kind-of x 24,155,010 ops/sec ±0.95% (91 runs sampled) + (lib) type-of x 12,854,583 ops/sec ±0.69% (94 runs sampled) + (lib) typeof x 8,182,952 ops/sec ±0.48% (99 runs sampled) + +#6: number.js + kind-of x 20,993,521 ops/sec ±0.37% (98 runs sampled) + (lib) type-of x 2,112,716 ops/sec ±0.73% (96 runs sampled) + (lib) typeof x 4,492,943 ops/sec ±0.68% (96 runs sampled) + +#7: object.js + kind-of x 3,686,169 ops/sec ±0.85% (96 runs sampled) + (lib) type-of x 3,661,833 ops/sec ±0.73% (98 runs sampled) + (lib) typeof x 6,159,847 ops/sec ±0.72% (98 runs sampled) + +#8: regex.js + kind-of x 10,780,535 ops/sec ±0.75% (95 runs sampled) + (lib) type-of x 5,380,781 ops/sec ±0.83% (92 runs sampled) + (lib) typeof x 5,852,558 ops/sec ±0.67% (95 runs sampled) + +#9: string.js + kind-of x 19,713,570 ops/sec ±0.69% (91 runs sampled) + (lib) type-of x 4,017,753 ops/sec ±0.85% (98 runs sampled) + (lib) typeof x 4,370,984 ops/sec ±0.62% (100 runs sampled) + +#10: undef.js + kind-of x 23,250,387 ops/sec ±0.88% (91 runs sampled) + (lib) type-of x 13,725,183 ops/sec ±0.62% (91 runs sampled) + (lib) typeof x 20,549,334 ops/sec ±0.74% (97 runs sampled) +``` + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2014-2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb](https://github.com/assemble/verb) on February 09, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/kind-of/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/kind-of/index.js new file mode 100644 index 0000000..4eb70b1 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/kind-of/index.js @@ -0,0 +1,45 @@ +var toString = Object.prototype.toString; + +/** + * Get the native `typeof` a value. + * + * @param {*} `val` + * @return {*} Native javascript type + */ + +module.exports = function kindOf(val) { + if (val === undefined) { + return 'undefined'; + } + if (val === null) { + return 'null'; + } + if (val === true || val === false || val instanceof Boolean) { + return 'boolean'; + } + if (typeof val !== 'object') { + return typeof val; + } + if (Array.isArray(val)) { + return 'array'; + } + + var type = toString.call(val); + + if (val instanceof RegExp || type === '[object RegExp]') { + return 'regexp'; + } + if (val instanceof Date || type === '[object Date]') { + return 'date'; + } + if (type === '[object Function]') { + return 'function'; + } + if (type === '[object Arguments]') { + return 'arguments'; + } + if (typeof Buffer !== 'undefined' && Buffer.isBuffer(val)) { + return 'buffer'; + } + return type.slice(8, -1).toLowerCase(); +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/kind-of/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/kind-of/package.json new file mode 100644 index 0000000..c055d31 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/kind-of/package.json @@ -0,0 +1,82 @@ +{ + "name": "kind-of", + "description": "Get the native type of a value.", + "version": "1.1.0", + "homepage": "https://github.com/jonschlinkert/kind-of", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/kind-of.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/kind-of/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/kind-of/blob/master/LICENSE" + }, + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "benchmarked": "^0.1.3", + "chalk": "^0.5.1", + "glob": "^4.3.5", + "should": "^4.6.1", + "type-of": "^2.0.1", + "typeof": "^1.0.0" + }, + "keywords": [ + "arguments", + "array", + "boolean", + "check", + "date", + "function", + "is", + "is-type", + "is-type-of", + "kind", + "kind-of", + "number", + "object", + "regexp", + "string", + "test", + "type", + "type-of", + "typeof", + "types" + ], + "gitHead": "4ee1c34ffba8743451ddef17b4a6588468ba187d", + "_id": "kind-of@1.1.0", + "_shasum": "140a3d2d41a36d2efcfa9377b62c24f8495a5c44", + "_from": "kind-of@>=1.1.0 <2.0.0", + "_npmVersion": "1.4.28", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "140a3d2d41a36d2efcfa9377b62c24f8495a5c44", + "tarball": "http://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/LICENSE new file mode 100644 index 0000000..fa30c4c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/README.md new file mode 100644 index 0000000..5ecb436 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/README.md @@ -0,0 +1,75 @@ +# object.omit [![NPM version](https://badge.fury.io/js/object.omit.svg)](http://badge.fury.io/js/object.omit) + +> Return a copy of an object without the given key, or array of keys. + +## Install +```bash +npm i object.omit --save-dev +``` + + +## Usage + +```js +var omit = require('object.omit'); +``` + +Pass a string `key` to omit: + +```js +omit({a: 'a', b: 'b', c: 'c'}, 'a') +//=> { b: 'b', c: 'c' } +``` + +Pass an array of `keys` to omit: + +```js +omit({a: 'a', b: 'b', c: 'c'}, ['a', 'c']) +//=> { b: 'b' } +``` + +Returns the object if no keys are passed: + +```js +omit({a: 'a', b: 'b', c: 'c'}) +//=> {a: 'a', b: 'b', c: 'c'} +``` + +Returns an empty object if no value is passed. + +```js +omit() +//=> {} +``` + +### Other awesome javascript/node.js utils + * [object.filter](https://github.com/jonschlinkert/object.filter): Create a new object filtered to have only properties for which the callback returns true. + * [object.pick](https://github.com/jonschlinkert/object.pick): Returns a filtered copy of an object with only the specified keys, like `pick` from lo-dash / underscore. + * [object.pluck](https://github.com/jonschlinkert/object.pluck): Like pluck from underscore / lo-dash, but returns an object composed of specified properties, with values unmodified from those of the original object. + * [object.reduce](https://github.com/jonschlinkert/object.reduce): Reduces an object to a value that is the accumulated result of running each property in the object through a callback. + * [object.defaults](https://github.com/jonschlinkert/object.defaults): Like `extend` but only copies missing properties/values to the target object. + +## Runing tests +Install dev dependencies: + +```bash +npm i -d && npm test +``` + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/object.omit/issues) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2014-2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on April 09, 2015._ diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/index.js new file mode 100644 index 0000000..2cce314 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/index.js @@ -0,0 +1,26 @@ +/*! + * object.omit + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var isObject = require('isobject'); +var forOwn = require('for-own'); + +module.exports = function omit(obj, keys) { + if (!isObject(obj)) return {}; + if (!keys) return obj; + + keys = Array.isArray(keys) ? keys : [keys]; + var res = {}; + + forOwn(obj, function (value, key) { + if (keys.indexOf(key) === -1) { + res[key] = value; + } + }); + return res; +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/LICENSE new file mode 100644 index 0000000..fa30c4c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/README.md new file mode 100644 index 0000000..c9cf429 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/README.md @@ -0,0 +1,52 @@ +# for-own [![NPM version](https://badge.fury.io/js/for-own.svg)](http://badge.fury.io/js/for-own) + +> Iterate over the own and inherited enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. + +## Install +#### Install with [npm](npmjs.org): + +```bash +npm i for-own --save +``` + +## Run tests + +```bash +npm test +``` + +## Usage + +```js +var forOwn = require('for-own'); + +var obj = {a: 'foo', b: 'bar', c: 'baz'}; +var values = []; +var keys = []; + +forOwn(obj, function (value, key, o) { + keys.push(key); + values.push(value); +}); + +console.log(keys); +//=> ['a', 'b', 'c']; + +console.log(values); +//=> ['foo', 'bar', 'baz']; +``` + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2014 Jon Schlinkert, contributors. +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on September 20, 2014._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/index.js new file mode 100644 index 0000000..966294b --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/index.js @@ -0,0 +1,19 @@ +/*! + * for-own + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var forIn = require('for-in'); +var hasOwn = Object.prototype.hasOwnProperty; + +module.exports = function forOwn(o, fn, thisArg) { + forIn(o, function (val, key) { + if (hasOwn.call(o, key)) { + return fn.call(thisArg, o[key], key, o); + } + }); +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/node_modules/for-in/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/node_modules/for-in/LICENSE new file mode 100644 index 0000000..fa30c4c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/node_modules/for-in/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/node_modules/for-in/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/node_modules/for-in/README.md new file mode 100644 index 0000000..e96af5e --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/node_modules/for-in/README.md @@ -0,0 +1,52 @@ +# for-in [![NPM version](https://badge.fury.io/js/for-in.svg)](http://badge.fury.io/js/for-in) + +> Iterate over the own and inherited enumerable properties of an objecte, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js + +## Install +#### Install with [npm](npmjs.org): + +```bash +npm i for-in --save +``` + +## Run tests + +```bash +npm test +``` + +## Usage + +```js +var forIn = require('for-in'); + +var obj = {a: 'foo', b: 'bar', c: 'baz'}; +var values = []; +var keys = []; + +forIn(obj, function (value, key, o) { + keys.push(key); + values.push(value); +}); + +console.log(keys); +//=> ['a', 'b', 'c']; + +console.log(values); +//=> ['foo', 'bar', 'baz']; +``` + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2014 Jon Schlinkert, contributors. +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on September 20, 2014._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/node_modules/for-in/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/node_modules/for-in/index.js new file mode 100644 index 0000000..bc7e452 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/node_modules/for-in/index.js @@ -0,0 +1,16 @@ +/*! + * for-in + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +module.exports = function forIn(o, fn, thisArg) { + for (var key in o) { + if (fn.call(thisArg, o[key], key, o) === false) { + break; + } + } +}; \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/node_modules/for-in/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/node_modules/for-in/package.json new file mode 100644 index 0000000..8d7b7dd --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/node_modules/for-in/package.json @@ -0,0 +1,69 @@ +{ + "name": "for-in", + "description": "Iterate over the own and inherited enumerable properties of an objecte, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js", + "version": "0.1.4", + "homepage": "https://github.com/jonschlinkert/for-in", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/for-in.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/for-in/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/for-in/blob/master/LICENSE" + }, + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "mocha": "*", + "should": "^4.0.4" + }, + "keywords": [ + "for-in", + "for-own", + "has", + "has-own", + "hasOwn", + "key", + "keys", + "object", + "own", + "value" + ], + "gitHead": "fb09612d3e4137486c652a328888872eba5c1548", + "_id": "for-in@0.1.4", + "_shasum": "9f5cf7b4ffc7e1ae6591a4e97b177aa59d70fb2e", + "_from": "for-in@>=0.1.4 <0.2.0", + "_npmVersion": "2.7.1", + "_nodeVersion": "1.6.2", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "9f5cf7b4ffc7e1ae6591a4e97b177aa59d70fb2e", + "tarball": "http://registry.npmjs.org/for-in/-/for-in-0.1.4.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.4.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/package.json new file mode 100644 index 0000000..dee1137 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/for-own/package.json @@ -0,0 +1,72 @@ +{ + "name": "for-own", + "description": "Iterate over the own enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js.", + "version": "0.1.3", + "homepage": "https://github.com/jonschlinkert/for-own", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/for-own.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/for-own/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/for-own/blob/master/LICENSE" + }, + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "for-in": "^0.1.4" + }, + "devDependencies": { + "mocha": "*", + "should": "^5.2.0" + }, + "keywords": [ + "for-in", + "for-own", + "has", + "has-own", + "hasOwn", + "key", + "keys", + "object", + "own", + "value" + ], + "gitHead": "43c5291f22b71297e1b5855236fcc35ac9ce51e4", + "_id": "for-own@0.1.3", + "_shasum": "606444cde77c2f0a11088169e2e354eaf56e74fe", + "_from": "for-own@>=0.1.3 <0.2.0", + "_npmVersion": "2.7.1", + "_nodeVersion": "1.6.2", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "606444cde77c2f0a11088169e2e354eaf56e74fe", + "tarball": "http://registry.npmjs.org/for-own/-/for-own-0.1.3.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.3.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/isobject/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/isobject/LICENSE new file mode 100644 index 0000000..fa30c4c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/isobject/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/isobject/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/isobject/README.md new file mode 100644 index 0000000..7ee6f31 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/isobject/README.md @@ -0,0 +1,81 @@ +# isobject [![NPM version](https://badge.fury.io/js/isobject.svg)](http://badge.fury.io/js/isobject) [![Build Status](https://travis-ci.org/jonschlinkert/isobject.svg)](https://travis-ci.org/jonschlinkert/isobject) + +> Returns true if the value is an object and not an array or null. + +Use [is-plain-object](https://github.com/jonschlinkert/is-plain-object) if you want only objects that are created by the `Object` constructor. + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i isobject --save +``` + +Install with [bower](http://bower.io/) + +```sh +$ bower install isobject --save +``` + +## Usage + +```js +var isObject = require('isobject'); +``` + +**True** + +All of the following return `true`: + +```js +isObject({}); +isObject(Object.create({})); +isObject(Object.create(Object.prototype)); +isObject(Object.create(null)); +isObject({}); +isObject(new Foo); +isObject(/foo/); +``` + +**False** + +All of the following return `false`: + +```js +isObject(); +isObject(function () {}); +isObject(1); +isObject([]); +isObject(undefined); +isObject(null); +``` + +## Related projects + +* [assign-deep](https://github.com/jonschlinkert/assign-deep): Deeply assign the enumerable properties of source objects to a destination object. +* [extend-shallow](https://github.com/jonschlinkert/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. +* [is-plain-object](https://github.com/jonschlinkert/is-plain-object): Returns true if an object was created by the `Object` constructor. +* [is-extendable](https://github.com/jonschlinkert/is-extendable): Returns true if a value is any of the object types: array, regexp, plain object,… [more](https://github.com/jonschlinkert/is-extendable) +* [is-equal-shallow](https://github.com/jonschlinkert/is-equal-shallow): Does a shallow comparison of two objects, returning false if the keys or values differ. +* [kind-of](https://github.com/jonschlinkert/kind-of): Get the native type of a value. + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/isobject/issues/new) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2014-2015 [Jon Schlinkert](https://github.com/jonschlinkert) +Released under the [MIT](https://github.com/jonschlinkert/isobject/blob/master/LICENSE) license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on July 13, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/isobject/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/isobject/index.js new file mode 100644 index 0000000..3cb7e33 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/isobject/index.js @@ -0,0 +1,13 @@ +/*! + * isobject + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +module.exports = function isObject(val) { + return val != null && typeof val === 'object' + && !Array.isArray(val); +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/isobject/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/isobject/package.json new file mode 100644 index 0000000..5d1a096 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/node_modules/isobject/package.json @@ -0,0 +1,74 @@ +{ + "name": "isobject", + "description": "Returns true if the value is an object and not an array or null.", + "version": "1.0.2", + "homepage": "https://github.com/jonschlinkert/isobject", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/isobject.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/isobject/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/isobject/blob/master/LICENSE" + }, + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "mocha": "*" + }, + "keywords": [ + "check", + "function", + "is", + "is-object", + "isobject", + "javascript", + "kind", + "kind-of", + "kindof", + "native", + "object", + "of", + "type", + "typeof", + "validate", + "value" + ], + "gitHead": "0d3070262eb950e2e19c5781da8f243b629c7731", + "_id": "isobject@1.0.2", + "_shasum": "f0f9b8ce92dd540fa0740882e3835a2e022ec78a", + "_from": "isobject@>=1.0.0 <2.0.0", + "_npmVersion": "2.10.1", + "_nodeVersion": "0.12.4", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "f0f9b8ce92dd540fa0740882e3835a2e022ec78a", + "tarball": "http://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/package.json new file mode 100644 index 0000000..4ec0b2a --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/object.omit/package.json @@ -0,0 +1,71 @@ +{ + "name": "object.omit", + "description": "Return a copy of an object without the given key, or array of keys.", + "version": "1.1.0", + "homepage": "https://github.com/jonschlinkert/object.omit", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/object.omit.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/object.omit/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/object.omit/blob/master/LICENSE" + }, + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "keywords": [ + "clear", + "delete", + "key", + "value", + "object", + "omit", + "property", + "remove" + ], + "dependencies": { + "for-own": "^0.1.3", + "isobject": "^1.0.0" + }, + "devDependencies": { + "mocha": "^2.2.4", + "should": "^5.2.0" + }, + "gitHead": "9dc4d35d57b04515e32c644cf7c59d0e0f363137", + "_id": "object.omit@1.1.0", + "_shasum": "9d17ea16778e5057deba7752c6f55f1496829e94", + "_from": "object.omit@>=1.1.0 <2.0.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "9d17ea16778e5057deba7752c6f55f1496829e94", + "tarball": "http://registry.npmjs.org/object.omit/-/object.omit-1.1.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/object.omit/-/object.omit-1.1.0.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/LICENSE new file mode 100644 index 0000000..65f90ac --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/README.md new file mode 100644 index 0000000..000ccd9 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/README.md @@ -0,0 +1,115 @@ +# parse-glob [![NPM version](https://badge.fury.io/js/parse-glob.svg)](http://badge.fury.io/js/parse-glob) [![Build Status](https://travis-ci.org/jonschlinkert/parse-glob.svg)](https://travis-ci.org/jonschlinkert/parse-glob) + +> Parse a glob pattern into an object of tokens. + +**Changes from v1.0.0 to v3.0.4** + +* all path-related properties are now on the `path` object +* all boolean properties are now on the `is` object +* adds `base` property + +See the [properties](#properties) section for details. + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i parse-glob --save +``` + +* parses 1,000+ glob patterns in 29ms (2.3 GHz Intel Core i7) +* Extensive [unit tests](./test.js) (more than 1,000 lines), covering wildcards, globstars, character classes, brace patterns, extglobs, dotfiles and other complex patterns. + +See the tests for [hundreds of examples](./test.js). + +## Usage + +```js +var parseGlob = require('parse-glob'); +``` + +**Example** + +```js +parseGlob('a/b/c/**/*.{yml,json}'); +``` + +**Returns:** + +```js +{ orig: 'a/b/c/**/*.{yml,json}', + is: + { glob: true, + negated: false, + extglob: false, + braces: true, + brackets: false, + globstar: true, + dotfile: false, + dotdir: false }, + glob: '**/*.{yml,json}', + base: 'a/b/c', + path: + { dirname: 'a/b/c/**/', + basename: '*.{yml,json}', + filename: '*', + extname: '.{yml,json}', + ext: '{yml,json}' } } +``` + +## Properties + +The object returned by parseGlob has the following properties: + +* `orig`: a copy of the original, unmodified glob pattern +* `is`: an object with boolean information about the glob: + - `glob`: true if the pattern actually a glob pattern + - `negated`: true if it's a negation pattern (`!**/foo.js`) + - `extglob`: true if it has extglobs (`@(foo|bar)`) + - `braces`: true if it has braces (`{1..2}` or `.{txt,md}`) + - `brackets`: true if it has POSIX brackets (`[[:alpha:]]`) + - `globstar`: true if the pattern has a globstar (double star, `**`) + - `dotfile`: true if the pattern should match dotfiles + - `dotdir`: true if the pattern should match dot-directories (like `.git`) +* `glob`: the glob pattern part of the string, if any +* `base`: the non-glob part of the string, if any +* `path`: file path segments + - `dirname`: directory + - `basename`: file name with extension + - `filename`: file name without extension + - `extname`: file extension with dot + - `ext`: file extension without dot + +## Related +* [glob-base](https://www.npmjs.com/package/glob-base): Returns an object with the (non-glob) base path and the actual pattern. | [homepage](https://github.com/jonschlinkert/glob-base) +* [glob-parent](https://www.npmjs.com/package/glob-parent): Strips glob magic from a string to provide the parent path | [homepage](https://github.com/es128/glob-parent) +* [glob-path-regex](https://www.npmjs.com/package/glob-path-regex): Regular expression for matching the parts of glob pattern. | [homepage](https://github.com/regexps/glob-path-regex) +* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern. | [homepage](https://github.com/jonschlinkert/is-glob) +* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. Just… [more](https://www.npmjs.com/package/micromatch) | [homepage](https://github.com/jonschlinkert/micromatch) + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/parse-glob/issues/new). + +## Tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2014-2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on September 22, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/index.js new file mode 100644 index 0000000..4ab691a --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/index.js @@ -0,0 +1,156 @@ +/*! + * parse-glob + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var isGlob = require('is-glob'); +var findBase = require('glob-base'); +var extglob = require('is-extglob'); +var dotfile = require('is-dotfile'); + +/** + * Expose `cache` + */ + +var cache = module.exports.cache = {}; + +/** + * Parse a glob pattern into tokens. + * + * When no paths or '**' are in the glob, we use a + * different strategy for parsing the filename, since + * file names can contain braces and other difficult + * patterns. such as: + * + * - `*.{a,b}` + * - `(**|*.js)` + */ + +module.exports = function parseGlob(glob) { + if (cache.hasOwnProperty(glob)) { + return cache[glob]; + } + + var tok = {}; + tok.orig = glob; + tok.is = {}; + + // unescape dots and slashes in braces/brackets + glob = escape(glob); + + var parsed = findBase(glob); + tok.is.glob = parsed.isGlob; + + tok.glob = parsed.glob; + tok.base = parsed.base; + var segs = /([^\/]*)$/.exec(glob); + + tok.path = {}; + tok.path.dirname = ''; + tok.path.basename = segs[1] || ''; + tok.path.dirname = glob.split(tok.path.basename).join('') || ''; + var basename = (tok.path.basename || '').split('.') || ''; + tok.path.filename = basename[0] || ''; + tok.path.extname = basename.slice(1).join('.') || ''; + tok.path.ext = ''; + + if (isGlob(tok.path.dirname) && !tok.path.basename) { + if (!/\/$/.test(tok.glob)) { + tok.path.basename = tok.glob; + } + tok.path.dirname = tok.base; + } + + if (glob.indexOf('/') === -1 && !tok.is.globstar) { + tok.path.dirname = ''; + tok.path.basename = tok.orig; + } + + var dot = tok.path.basename.indexOf('.'); + if (dot !== -1) { + tok.path.filename = tok.path.basename.slice(0, dot); + tok.path.extname = tok.path.basename.slice(dot); + } + + if (tok.path.extname.charAt(0) === '.') { + var exts = tok.path.extname.split('.'); + tok.path.ext = exts[exts.length - 1]; + } + + // unescape dots and slashes in braces/brackets + tok.glob = unescape(tok.glob); + tok.path.dirname = unescape(tok.path.dirname); + tok.path.basename = unescape(tok.path.basename); + tok.path.filename = unescape(tok.path.filename); + tok.path.extname = unescape(tok.path.extname); + + // Booleans + var is = (glob && tok.is.glob); + tok.is.negated = glob && glob.charAt(0) === '!'; + tok.is.extglob = glob && extglob(glob); + tok.is.braces = has(is, glob, '{'); + tok.is.brackets = has(is, glob, '[:'); + tok.is.globstar = has(is, glob, '**'); + tok.is.dotfile = dotfile(tok.path.basename) || dotfile(tok.path.filename); + tok.is.dotdir = dotdir(tok.path.dirname); + return (cache[glob] = tok); +} + +/** + * Returns true if the glob matches dot-directories. + * + * @param {Object} `tok` The tokens object + * @param {Object} `path` The path object + * @return {Object} + */ + +function dotdir(base) { + if (base.indexOf('/.') !== -1) { + return true; + } + if (base.charAt(0) === '.' && base.charAt(1) !== '/') { + return true; + } + return false; +} + +/** + * Returns true if the pattern has the given `ch`aracter(s) + * + * @param {Object} `glob` The glob pattern. + * @param {Object} `ch` The character to test for + * @return {Object} + */ + +function has(is, glob, ch) { + return is && glob.indexOf(ch) !== -1; +} + +/** + * Escape/unescape utils + */ + +function escape(str) { + var re = /\{([^{}]*?)}|\(([^()]*?)\)|\[([^\[\]]*?)\]/g; + return str.replace(re, function (outter, braces, parens, brackets) { + var inner = braces || parens || brackets; + if (!inner) { return outter; } + return outter.split(inner).join(esc(inner)); + }); +} + +function esc(str) { + str = str.split('/').join('__SLASH__'); + str = str.split('.').join('__DOT__'); + return str; +} + +function unescape(str) { + str = str.split('__SLASH__').join('/'); + str = str.split('__DOT__').join('.'); + return str; +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/glob-base/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/glob-base/LICENSE new file mode 100644 index 0000000..65f90ac --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/glob-base/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/glob-base/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/glob-base/README.md new file mode 100644 index 0000000..1da2e82 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/glob-base/README.md @@ -0,0 +1,158 @@ +# glob-base [![NPM version](https://badge.fury.io/js/glob-base.svg)](http://badge.fury.io/js/glob-base) [![Build Status](https://travis-ci.org/jonschlinkert/glob-base.svg)](https://travis-ci.org/jonschlinkert/glob-base) + +> Returns an object with the (non-glob) base path and the actual pattern. + +Use [glob-parent](https://github.com/es128/glob-parent) if you just want the base path. + +## Install with [npm](npmjs.org) + +```bash +npm i glob-base --save +``` + +## Related projects +* [glob-parent](https://github.com/es128/glob-parent): Strips glob magic from a string to provide the parent path +* [micromatch](https://github.com/jonschlinkert/micromatch): Glob matching for javascript/node.js. A faster alternative to minimatch (10-45x faster on avg), with all the features you're used to using in your Grunt and gulp tasks. +* [parse-glob](https://github.com/jonschlinkert/parse-glob): Parse a glob pattern into an object of tokens. +* [is-glob](https://github.com/jonschlinkert/is-glob): Returns `true` if the given string looks like a glob pattern. +* [braces](https://github.com/jonschlinkert/braces): Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces specification. +* [fill-range](https://github.com/jonschlinkert/fill-range): Fill in a range of numbers or letters, optionally passing an increment or multiplier to use. +* [expand-range](https://github.com/jonschlinkert/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch. + +## Usage + +```js +var globBase = require('glob-base'); + +globBase('a/b/.git/'); +//=> { base: 'a/b/.git/', isGlob: false, glob: '' }) + +globBase('a/b/**/e'); +//=> { base: 'a/b', isGlob: true, glob: '**/e' } + +globBase('a/b/*.{foo,bar}'); +//=> { base: 'a/b', isGlob: true, glob: '*.{foo,bar}' } + +globBase('a/b/.git/**'); +//=> { base: 'a/b/.git', isGlob: true, glob: '**' } + +globBase('a/b/c/*.md'); +//=> { base: 'a/b/c', isGlob: true, glob: '*.md' } + +globBase('a/b/c/.*.md'); +//=> { base: 'a/b/c', isGlob: true, glob: '.*.md' } + +globBase('a/b/{c,d}'); +//=> { base: 'a/b', isGlob: true, glob: '{c,d}' } + +globBase('!*.min.js'); +//=> { base: '.', isGlob: true, glob: '!*.min.js' } + +globBase('!foo'); +//=> { base: '.', isGlob: true, glob: '!foo' } + +globBase('!foo/(a|b).min.js'); +//=> { base: '.', isGlob: true, glob: '!foo/(a|b).min.js' } + +globBase(''); +//=> { base: '.', isGlob: false, glob: '' } + +globBase('**/*.md'); +//=> { base: '.', isGlob: true, glob: '**/*.md' } + +globBase('**/*.min.js'); +//=> { base: '.', isGlob: true, glob: '**/*.min.js' } + +globBase('**/.*'); +//=> { base: '.', isGlob: true, glob: '**/.*' } + +globBase('**/d'); +//=> { base: '.', isGlob: true, glob: '**/d' } + +globBase('*.*'); +//=> { base: '.', isGlob: true, glob: '*.*' } + +globBase('*.min.js'); +//=> { base: '.', isGlob: true, glob: '*.min.js' } + +globBase('*/*'); +//=> { base: '.', isGlob: true, glob: '*/*' } + +globBase('*b'); +//=> { base: '.', isGlob: true, glob: '*b' } + +globBase('.'); +//=> { base: '.', isGlob: false, glob: '.' } + +globBase('.*'); +//=> { base: '.', isGlob: true, glob: '.*' } + +globBase('./*'); +//=> { base: '.', isGlob: true, glob: '*' } + +globBase('/a'); +//=> { base: '/', isGlob: false, glob: 'a' } + +globBase('@(a|b)/e.f.g/'); +//=> { base: '.', isGlob: true, glob: '@(a|b)/e.f.g/' } + +globBase('[a-c]b*'); +//=> { base: '.', isGlob: true, glob: '[a-c]b*' } + +globBase('a'); +//=> { base: '.', isGlob: false, glob: 'a' } + +globBase('a.min.js'); +//=> { base: '.', isGlob: false, glob: 'a.min.js' } + +globBase('a/'); +//=> { base: 'a/', isGlob: false, glob: '' } + +globBase('a/**/j/**/z/*.md'); +//=> { base: 'a', isGlob: true, glob: '**/j/**/z/*.md' } + +globBase('a/*/c/*.md'); +//=> { base: 'a', isGlob: true, glob: '*/c/*.md' } + +globBase('a/?/c.md'); +//=> { base: 'a', isGlob: true, glob: '?/c.md' } + +globBase('a/??/c.js'); +//=> { base: 'a', isGlob: true, glob: '??/c.js' } + +globBase('a?b'); +//=> { base: '.', isGlob: true, glob: 'a?b' } + +globBase('bb'); +//=> { base: '.', isGlob: false, glob: 'bb' } + +globBase('c.md'); +//=> { base: '.', isGlob: false, glob: 'c.md' } +``` + +## Running tests +Install dev dependencies. + +```bash +npm i -d && npm test +``` + + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/glob-base/issues) + + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on March 08, 2015._ diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/glob-base/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/glob-base/index.js new file mode 100644 index 0000000..564b4a8 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/glob-base/index.js @@ -0,0 +1,51 @@ +/*! + * glob-base + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var path = require('path'); +var parent = require('glob-parent'); +var isGlob = require('is-glob'); + +module.exports = function globBase(pattern) { + if (typeof pattern !== 'string') { + throw new TypeError('glob-base expects a string.'); + } + + var res = {}; + res.base = parent(pattern); + res.isGlob = isGlob(pattern); + + if (res.base !== '.') { + res.glob = pattern.substr(res.base.length); + if (res.glob.charAt(0) === '/') { + res.glob = res.glob.substr(1); + } + } else { + res.glob = pattern; + } + + if (!res.isGlob) { + res.base = dirname(pattern); + res.glob = res.base !== '.' + ? pattern.substr(res.base.length) + : pattern; + } + + if (res.glob.substr(0, 2) === './') { + res.glob = res.glob.substr(2); + } + if (res.glob.charAt(0) === '/') { + res.glob = res.glob.substr(1); + } + return res; +}; + +function dirname(glob) { + if (glob.slice(-1) === '/') return glob; + return path.dirname(glob); +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/glob-base/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/glob-base/package.json new file mode 100644 index 0000000..6c8661b --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/glob-base/package.json @@ -0,0 +1,82 @@ +{ + "name": "glob-base", + "description": "Returns an object with the (non-glob) base path and the actual pattern.", + "version": "0.3.0", + "homepage": "https://github.com/jonschlinkert/glob-base", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/glob-base.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/glob-base/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/glob-base/blob/master/LICENSE" + }, + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "devDependencies": { + "mocha": "*", + "should": "^5.1.0" + }, + "keywords": [ + "base", + "directory", + "dirname", + "expression", + "glob", + "parent", + "path", + "pattern", + "regex", + "regular", + "root" + ], + "gitHead": "adbc0ab07ec8a85f76ffd1b54dd41cdb9d1d0b83", + "_id": "glob-base@0.3.0", + "_shasum": "dbb164f6221b1c0b1ccf82aea328b497df0ea3c4", + "_from": "glob-base@>=0.3.0 <0.4.0", + "_npmVersion": "2.11.3", + "_nodeVersion": "0.12.7", + "_npmUser": { + "name": "es128", + "email": "elan.shanker+npm@gmail.com" + }, + "dist": { + "shasum": "dbb164f6221b1c0b1ccf82aea328b497df0ea3c4", + "tarball": "http://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz" + }, + "maintainers": [ + { + "name": "doowb", + "email": "brian.woodward@gmail.com" + }, + { + "name": "es128", + "email": "elan.shanker+npm@gmail.com" + }, + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "directories": {}, + "_resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-dotfile/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-dotfile/LICENSE new file mode 100644 index 0000000..33754da --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-dotfile/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-dotfile/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-dotfile/README.md new file mode 100644 index 0000000..3f2460e --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-dotfile/README.md @@ -0,0 +1,66 @@ +# is-dotfile [![NPM version](https://badge.fury.io/js/is-dotfile.svg)](http://badge.fury.io/js/is-dotfile) + +> Return true if a file path is (or has) a dotfile. + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i is-dotfile --save +``` + +## Usage + +```js +var isDotfile = require('is-dotfile'); + +isDotfile('a/b/c.js'); +//=> false + +isDotfile('a/b/.gitignore'); +//=> true + +isDotfile('.gitignore'); +//=> true + +isDotfile('/.gitignore'); +//=> true + +isDotfile('/.gitignore/foo'); +//=> false +``` + +## Related projects + +* [dotfile-regex](https://github.com/regexps/dotfile-regex): Regular expresson for matching dotfiles. +* [is-glob](https://github.com/jonschlinkert/is-glob): Returns `true` if the given string looks like a glob pattern. +* [micromatch](https://github.com/jonschlinkert/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. Just… [more](https://github.com/jonschlinkert/micromatch) + +## Running tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-dotfile/issues/new) + +## Authors + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on May 25, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-dotfile/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-dotfile/index.js new file mode 100644 index 0000000..5a0a0ca --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-dotfile/index.js @@ -0,0 +1,15 @@ +/*! + * is-dotfile + * + * Copyright (c) 2015 Jon Schlinkert, contributors. + * Licensed under the MIT license. + */ + +module.exports = function(str) { + if (str.charCodeAt(0) === 46 /* . */ && str.indexOf('/', 1) === -1) { + return true; + } + + var last = str.lastIndexOf('/'); + return last !== -1 ? str.charCodeAt(last + 1) === 46 /* . */ : false; +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-dotfile/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-dotfile/package.json new file mode 100644 index 0000000..c6d2675 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-dotfile/package.json @@ -0,0 +1,66 @@ +{ + "name": "is-dotfile", + "description": "Return true if a file path is (or has) a dotfile.", + "version": "1.0.1", + "homepage": "https://github.com/jonschlinkert/is-dotfile", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/is-dotfile.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-dotfile/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "benchmarked": "^0.1.3", + "dotfile-regex": "^0.1.2", + "mocha": "*" + }, + "keywords": [ + "detect", + "dotfile", + "expression", + "regular expression", + "find", + "match", + "regex", + "regexp", + "regular" + ], + "gitHead": "73de4314c679e80783335a95d6c37139c1fd40c0", + "_id": "is-dotfile@1.0.1", + "_shasum": "38beee44a79a835242c6cce328a88b7eddac5d5f", + "_from": "is-dotfile@>=1.0.0 <2.0.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "38beee44a79a835242c6cce328a88b7eddac5d5f", + "tarball": "http://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.1.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.1.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-extglob/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-extglob/LICENSE new file mode 100644 index 0000000..fa30c4c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-extglob/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-extglob/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-extglob/README.md new file mode 100644 index 0000000..80e7128 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-extglob/README.md @@ -0,0 +1,75 @@ +# is-extglob [![NPM version](https://badge.fury.io/js/is-extglob.svg)](http://badge.fury.io/js/is-extglob) [![Build Status](https://travis-ci.org/jonschlinkert/is-extglob.svg)](https://travis-ci.org/jonschlinkert/is-extglob) + +> Returns true if a string has an extglob. + +## Install with [npm](npmjs.org) + +```bash +npm i is-extglob --save +``` + +## Usage + +```js +var isExtglob = require('is-extglob'); +``` + +**True** + +```js +isExtglob('?(abc)'); +isExtglob('@(abc)'); +isExtglob('!(abc)'); +isExtglob('*(abc)'); +isExtglob('+(abc)'); +``` + +**False** + +Everything else... + +```js +isExtglob('foo.js'); +isExtglob('!foo.js'); +isExtglob('*.js'); +isExtglob('**/abc.js'); +isExtglob('abc/*.js'); +isExtglob('abc/(aaa|bbb).js'); +isExtglob('abc/[a-z].js'); +isExtglob('abc/{a,b}.js'); +isExtglob('abc/?.js'); +isExtglob('abc.js'); +isExtglob('abc/def/ghi.js'); +``` + +## Related +* [extglob](https://github.com/jonschlinkert/extglob): Extended globs. extglobs add the expressive power of regular expressions to glob patterns. +* [micromatch](https://github.com/jonschlinkert/micromatch): Glob matching for javascript/node.js. A faster alternative to minimatch (10-45x faster on avg), with all the features you're used to using in your Grunt and gulp tasks. +* [parse-glob](https://github.com/jonschlinkert/parse-glob): Parse a glob pattern into an object of tokens. + +## Run tests +Install dev dependencies. + +```bash +npm i -d && npm test +``` + + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-extglob/issues) + + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on March 06, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-extglob/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-extglob/index.js new file mode 100644 index 0000000..803047f --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-extglob/index.js @@ -0,0 +1,11 @@ +/*! + * is-extglob + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +module.exports = function isExtglob(str) { + return typeof str === 'string' + && /[@?!+*]\(/.test(str); +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-extglob/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-extglob/package.json new file mode 100644 index 0000000..148383a --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-extglob/package.json @@ -0,0 +1,73 @@ +{ + "name": "is-extglob", + "description": "Returns true if a string has an extglob.", + "version": "1.0.0", + "homepage": "https://github.com/jonschlinkert/is-extglob", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/is-extglob.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-extglob/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha", + "prepublish": "browserify -o browser.js -e index.js" + }, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "keywords": [ + "bash", + "braces", + "check", + "exec", + "extglob", + "expression", + "glob", + "globbing", + "globstar", + "match", + "matches", + "pattern", + "regex", + "regular", + "string", + "test" + ], + "_id": "is-extglob@1.0.0", + "_shasum": "ac468177c4943405a092fc8f29760c6ffc6206c0", + "_from": "is-extglob@>=1.0.0 <2.0.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "ac468177c4943405a092fc8f29760c6ffc6206c0", + "tarball": "http://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-glob/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-glob/LICENSE new file mode 100644 index 0000000..fa30c4c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-glob/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-glob/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-glob/README.md new file mode 100644 index 0000000..b162542 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-glob/README.md @@ -0,0 +1,105 @@ +# is-glob [![NPM version](https://badge.fury.io/js/is-glob.svg)](http://badge.fury.io/js/is-glob) [![Build Status](https://travis-ci.org/jonschlinkert/is-glob.svg)](https://travis-ci.org/jonschlinkert/is-glob) + +> Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a better user experience. + +Also take a look at [is-valid-glob](https://github.com/jonschlinkert/is-valid-glob) and [has-glob](https://github.com/jonschlinkert/has-glob). + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i is-glob --save +``` + +## Usage + +```js +var isGlob = require('is-glob'); +``` + +**True** + +Patterns that have glob characters or regex patterns will return `true`: + +```js +isGlob('!foo.js'); +isGlob('*.js'); +isGlob('**/abc.js'); +isGlob('abc/*.js'); +isGlob('abc/(aaa|bbb).js'); +isGlob('abc/[a-z].js'); +isGlob('abc/{a,b}.js'); +isGlob('abc/?.js'); +//=> true +``` + +Extglobs + +```js +isGlob('abc/@(a).js'); +isGlob('abc/!(a).js'); +isGlob('abc/+(a).js'); +isGlob('abc/*(a).js'); +isGlob('abc/?(a).js'); +//=> true +``` + +**False** + +Patterns that do not have glob patterns return `false`: + +```js +isGlob('abc.js'); +isGlob('abc/def/ghi.js'); +isGlob('foo.js'); +isGlob('abc/@.js'); +isGlob('abc/+.js'); +isGlob(); +isGlob(null); +//=> false +``` + +Arrays are also `false` (If you want to check if an array has a glob pattern, use [has-glob](https://github.com/jonschlinkert/has-glob)): + +```js +isGlob(['**/*.js']); +isGlob(['foo.js']); +//=> false +``` + +## Related + +* [has-glob](https://www.npmjs.com/package/has-glob): Returns `true` if an array has a glob pattern. | [homepage](https://github.com/jonschlinkert/has-glob) +* [is-extglob](https://www.npmjs.com/package/is-extglob): Returns true if a string has an extglob. | [homepage](https://github.com/jonschlinkert/is-extglob) +* [is-posix-bracket](https://www.npmjs.com/package/is-posix-bracket): Returns true if the given string is a POSIX bracket expression (POSIX character class). | [homepage](https://github.com/jonschlinkert/is-posix-bracket) +* [is-valid-glob](https://www.npmjs.com/package/is-valid-glob): Return true if a value is a valid glob pattern or patterns. | [homepage](https://github.com/jonschlinkert/is-valid-glob) +* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. Just… [more](https://www.npmjs.com/package/micromatch) | [homepage](https://github.com/jonschlinkert/micromatch) + +## Run tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-glob/issues/new). + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on October 02, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-glob/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-glob/index.js new file mode 100644 index 0000000..ef27bba --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-glob/index.js @@ -0,0 +1,14 @@ +/*! + * is-glob + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +var isExtglob = require('is-extglob'); + +module.exports = function isGlob(str) { + return typeof str === 'string' + && (/[*!?{}(|)[\]]/.test(str) + || isExtglob(str)); +}; \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-glob/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-glob/package.json new file mode 100644 index 0000000..2efdd09 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/node_modules/is-glob/package.json @@ -0,0 +1,90 @@ +{ + "name": "is-glob", + "description": "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet", + "version": "2.0.1", + "homepage": "https://github.com/jonschlinkert/is-glob", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/is-glob.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-glob/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "devDependencies": { + "mocha": "*" + }, + "keywords": [ + "bash", + "braces", + "check", + "exec", + "extglob", + "expression", + "glob", + "globbing", + "globstar", + "match", + "matches", + "pattern", + "regex", + "regular", + "string", + "test" + ], + "verb": { + "related": { + "list": [ + "has-glob", + "is-extglob", + "is-posix-bracket", + "is-valid-glob", + "micromatch" + ] + } + }, + "gitHead": "d7db1b2dd559b3d5a73f89dbe72d9e9f4d6587d7", + "_id": "is-glob@2.0.1", + "_shasum": "d096f926a3ded5600f3fdfd91198cb0888c2d863", + "_from": "is-glob@>=2.0.0 <3.0.0", + "_npmVersion": "2.10.1", + "_nodeVersion": "0.12.4", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + { + "name": "doowb", + "email": "brian.woodward@gmail.com" + } + ], + "dist": { + "shasum": "d096f926a3ded5600f3fdfd91198cb0888c2d863", + "tarball": "http://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/package.json new file mode 100644 index 0000000..601b946 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/parse-glob/package.json @@ -0,0 +1,90 @@ +{ + "name": "parse-glob", + "description": "Parse a glob pattern into an object of tokens.", + "version": "3.0.4", + "homepage": "https://github.com/jonschlinkert/parse-glob", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/parse-glob.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/parse-glob/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha", + "prepublish": "browserify -o browser.js -e index.js" + }, + "dependencies": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "devDependencies": { + "browserify": "^9.0.3", + "lodash": "^3.3.1", + "mocha": "*" + }, + "keywords": [ + "glob", + "match", + "bash", + "expand", + "expansion", + "expression", + "file", + "files", + "filter", + "find", + "glob", + "globbing", + "globs", + "globstar", + "match", + "matcher", + "matches", + "matching", + "path", + "pattern", + "patterns", + "regex", + "regexp", + "regular", + "shell", + "wildcard" + ], + "gitHead": "9bfccb63acdeb3b1ed62035b3adef0e5081d8fc6", + "_id": "parse-glob@3.0.4", + "_shasum": "b2c376cfb11f35513badd173ef0bb6e3a388391c", + "_from": "parse-glob@>=3.0.1 <4.0.0", + "_npmVersion": "2.10.1", + "_nodeVersion": "0.12.4", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "b2c376cfb11f35513badd173ef0bb6e3a388391c", + "tarball": "http://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/LICENSE new file mode 100644 index 0000000..33754da --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/README.md new file mode 100644 index 0000000..512de06 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/README.md @@ -0,0 +1,148 @@ +# regex-cache [![NPM version](https://badge.fury.io/js/regex-cache.svg)](http://badge.fury.io/js/regex-cache) [![Build Status](https://travis-ci.org/jonschlinkert/regex-cache.svg)](https://travis-ci.org/jonschlinkert/regex-cache) + +> Memoize the results of a call to the RegExp constructor, avoiding repetitious runtime compilation of the same string and options, resulting in dramatic speed improvements. + +- Read [what this does](#what-this-does). +- See [the benchmarks](#benchmarks) + +## Install with [npm](npmjs.org) + +```bash +npm i regex-cache --save +``` + +## Usage + +Wrap a function like this: + +```js +var cache = require('regex-cache'); +var someRegex = cache(require('some-regex-lib')); +``` + +**Caching a regex** + +If you want to cache a regex after calling `new RegExp()`, or you're requiring a module that returns a regex, wrap it with a function first: + +```js +var cache = require('regex-cache'); + +function yourRegex(str, opts) { + // do stuff to str and opts + return new RegExp(str, opts.flags); +} + +var regex = cache(yourRegex); +``` + +## Recommendations + +### Use this when... + +* **No options are passed** to the function that creates the regex. Regardless of how big or small the regex is, when zero options are passed, caching will be faster than not. +* **A few options are passed**, and the values are primitives. The limited benchmarks I did show that caching is beneficial when up to 8 or 9 options are passed. + +### Do not use this when... + +* **The values of options are not primitives**. When non-primitives must be compared for equality, the time to compare the options is most likely as long or longer than the time to just create a new regex. + + +### Example benchmarks + +Performance results, with and without regex-cache: + +```bash +# no args passed (defaults) + with-cache x 8,699,231 ops/sec ±0.86% (93 runs sampled) + without-cache x 2,777,551 ops/sec ±0.63% (95 runs sampled) + +# string and six options passed + with-cache x 1,885,934 ops/sec ±0.80% (93 runs sampled) + without-cache x 1,256,893 ops/sec ±0.65% (97 runs sampled) + +# string only + with-cache x 7,723,256 ops/sec ±0.87% (92 runs sampled) + without-cache x 2,303,060 ops/sec ±0.47% (99 runs sampled) + +# one option passed + with-cache x 4,179,877 ops/sec ±0.53% (100 runs sampled) + without-cache x 2,198,422 ops/sec ±0.47% (95 runs sampled) + +# two options passed + with-cache x 3,256,222 ops/sec ±0.51% (99 runs sampled) + without-cache x 2,121,401 ops/sec ±0.79% (97 runs sampled) + +# six options passed + with-cache x 1,816,018 ops/sec ±1.08% (96 runs sampled) + without-cache x 1,157,176 ops/sec ±0.53% (100 runs sampled) + +# +# diminishing returns happen about here +# + +# ten options passed + with-cache x 1,210,598 ops/sec ±0.56% (92 runs sampled) + without-cache x 1,665,588 ops/sec ±1.07% (100 runs sampled) + +# twelve options passed + with-cache x 1,042,096 ops/sec ±0.68% (92 runs sampled) + without-cache x 1,389,414 ops/sec ±0.68% (97 runs sampled) + +# twenty options passed + with-cache x 661,125 ops/sec ±0.80% (93 runs sampled) + without-cache x 1,208,757 ops/sec ±0.65% (97 runs sampled) + +# +# when non-primitive values are compared +# + +# single value on the options is an object + with-cache x 1,398,313 ops/sec ±1.05% (95 runs sampled) + without-cache x 2,228,281 ops/sec ±0.56% (99 runs sampled) +``` + +## Run benchmarks + +Install dev dependencies: + +```bash +npm i -d && npm run benchmarks +``` + + +## What this does + +If you're using `new RegExp('foo')` instead of a regex literal, it's probably because you need to dyamically generate a regex based on user options or some other potentially changing factors. + +When your function creates a string based on user inputs and passes it to the `RegExp` constructor, regex-cache caches the results. The next time the function is called if the key of a cached regex matches the user input (or no input was given), the cached regex is returned, avoiding unnecessary runtime compilation. + +Using the RegExp constructor offers a lot of flexibility, but the runtime compilation comes at a price - it's slow. Not specifically because of the call to the RegExp constructor, but **because you have to build up the string before `new RegExp()` is even called**. + + +## Run tests + +Install dev dependencies: + +```bash +npm i -d && npm test +``` + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/regex-cache/issues) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on March 25, 2015._ + +[mentions-regex]: https://github.com/regexps/mentions-regex \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/index.js new file mode 100644 index 0000000..ce0ddda --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/index.js @@ -0,0 +1,67 @@ +/*! + * regex-cache + * + * Copyright (c) 2015 Jon Schlinkert. + * Licensed under the MIT license. + */ + +'use strict'; + +var isPrimitive = require('is-primitive'); +var equal = require('is-equal-shallow'); + +/** + * Expose `regexCache` + */ + +module.exports = regexCache; + +/** + * Memoize the results of a call to the new RegExp constructor. + * + * @param {Function} fn [description] + * @param {String} str [description] + * @param {Options} options [description] + * @param {Boolean} nocompare [description] + * @return {RegExp} + */ + +function regexCache(fn, str, opts) { + var key = '_default_', regex, cached; + + if (!str && !opts) { + if (typeof fn !== 'function') { + return fn; + } + return basic[key] || (basic[key] = fn()); + } + + var isString = typeof str === 'string'; + if (isString) { + if (!opts) { + return basic[str] || (basic[str] = fn(str)); + } + key = str; + } else { + opts = str; + } + + cached = cache[key]; + if (cached && equal(cached.opts, opts)) { + return cached.regex; + } + + memo(key, opts, (regex = fn(str, opts))); + return regex; +} + +function memo(key, opts, regex) { + cache[key] = {regex: regex, opts: opts}; +} + +/** + * Expose `cache` + */ + +var cache = module.exports.cache = {}; +var basic = module.exports.basic = {}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-equal-shallow/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-equal-shallow/LICENSE new file mode 100644 index 0000000..65f90ac --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-equal-shallow/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-equal-shallow/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-equal-shallow/README.md new file mode 100644 index 0000000..1142276 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-equal-shallow/README.md @@ -0,0 +1,90 @@ +# is-equal-shallow [![NPM version](https://badge.fury.io/js/is-equal-shallow.svg)](http://badge.fury.io/js/is-equal-shallow) [![Build Status](https://travis-ci.org/jonschlinkert/is-equal-shallow.svg)](https://travis-ci.org/jonschlinkert/is-equal-shallow) + +> Does a shallow comparison of two objects, returning false if the keys or values differ. + +The purpose of this lib is to do the fastest comparison possible of two objects when the values will predictably be primitives. + +* only compares objects. +* only compares the first level of each object +* values must be primitives. If a value is not a primitive, even if the values are the same, `false` is returned. + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i is-equal-shallow --save +``` + +## Usage + +```js +var equals = require('is-equal-shallow'); +equals(object_a, object_b); +``` + +**Examples** + +```js +equals({a: true, b: true}, {a: true, b: true}); +//=> 'true' + +equals({a: true, b: false}, {c: false, b: false}); +//=> 'false' + +equals({a: true, b: false}, {a: false, b: false}); +//=> 'false' +``` + +Strict comparison for equality: + +```js +equals({a: true, b: true}, {a: true, b: 'true'}); +//=> 'false' +``` + +When values are not primitives, `false` is always returned: + +```js +equals({ b: {}}, { b: {}}); +//=> 'false' + +equals({ b: []}, { b: []}); +//=> 'false' +``` + +## Related projects + +Other object utils: + +* [clone-deep](https://github.com/jonschlinkert/clone-deep): Recursively (deep) clone JavaScript native types, like Object, Array, RegExp, Date as well as primitives. +* [for-in](https://github.com/jonschlinkert/for-in): Iterate over the own and inherited enumerable properties of an objecte, and return an object… [more](https://github.com/jonschlinkert/for-in) +* [for-own](https://github.com/jonschlinkert/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://github.com/jonschlinkert/for-own) +* [is-plain-object](https://github.com/jonschlinkert/is-plain-object): Returns true if an object was created by the `Object` constructor. +* [isobject](https://github.com/jonschlinkert/isobject): Returns true if the value is an object and not an array or null. + +## Running tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-equal-shallow/issues/new) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on June 22, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-equal-shallow/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-equal-shallow/index.js new file mode 100644 index 0000000..1006eef --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-equal-shallow/index.js @@ -0,0 +1,27 @@ +/*! + * is-equal-shallow + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var isPrimitive = require('is-primitive'); + +module.exports = function isEqual(a, b) { + if (!a && !b) { return true; } + if (!a && b || a && !b) { return false; } + + var numKeysA = 0, numKeysB = 0, key; + for (key in b) { + numKeysB++; + if (!isPrimitive(b[key]) || !a.hasOwnProperty(key) || (a[key] !== b[key])) { + return false; + } + } + for (key in a) { + numKeysA++; + } + return numKeysA === numKeysB; +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-equal-shallow/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-equal-shallow/package.json new file mode 100644 index 0000000..6fa7b20 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-equal-shallow/package.json @@ -0,0 +1,86 @@ +{ + "name": "is-equal-shallow", + "description": "Does a shallow comparison of two objects, returning false if the keys or values differ.", + "version": "0.1.3", + "homepage": "https://github.com/jonschlinkert/is-equal-shallow", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/is-equal-shallow.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-equal-shallow/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "is-primitive": "^2.0.0" + }, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "keywords": [ + "compare", + "comparison", + "equal", + "equals", + "is", + "is-equal", + "key", + "object", + "same", + "shallow", + "value" + ], + "verbiage": { + "related": { + "description": "Other object utils:", + "list": [ + "is-plain-object", + "isobject", + "for-in", + "for-own", + "clone-deep" + ] + } + }, + "gitHead": "dceb47dd9c9c21066958116e3b54b3c8c251ee4a", + "_id": "is-equal-shallow@0.1.3", + "_shasum": "2238098fc221de0bcfa5d9eac4c45d638aa1c534", + "_from": "is-equal-shallow@>=0.1.1 <0.2.0", + "_npmVersion": "2.10.1", + "_nodeVersion": "0.12.4", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + { + "name": "doowb", + "email": "brian.woodward@gmail.com" + } + ], + "dist": { + "shasum": "2238098fc221de0bcfa5d9eac4c45d638aa1c534", + "tarball": "http://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-primitive/LICENSE b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-primitive/LICENSE new file mode 100644 index 0000000..fa30c4c --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-primitive/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, 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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-primitive/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-primitive/README.md new file mode 100644 index 0000000..e1c3064 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-primitive/README.md @@ -0,0 +1,57 @@ +# is-primitive [![NPM version](https://badge.fury.io/js/is-primitive.svg)](http://badge.fury.io/js/is-primitive) [![Build Status](https://travis-ci.org/jonschlinkert/is-primitive.svg)](https://travis-ci.org/jonschlinkert/is-primitive) + +> Returns `true` if the value is a primitive. + +## Install with [npm](npmjs.org) + +```bash +npm i is-primitive --save +``` + +## Running tests +Install dev dependencies. + +```bash +npm i -d && npm test +``` + +## Usage + +```js +var isPrimitive = require('is-primitive'); +isPrimitive('abc'); +//=> true + +isPrimitive(42); +//=> true + +isPrimitive(false); +//=> true + +isPrimitive(true); +//=> true + +isPrimitive({}); +//=> false + +isPrimitive([]); +//=> false + +isPrimitive(function(){}); +//=> false +``` + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2014-2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on March 16, 2015._ \ No newline at end of file diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-primitive/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-primitive/index.js new file mode 100644 index 0000000..55f11cf --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-primitive/index.js @@ -0,0 +1,13 @@ +/*! + * is-primitive + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +// see http://jsperf.com/testing-value-is-primitive/7 +module.exports = function isPrimitive(value) { + return value == null || (typeof value !== 'function' && typeof value !== 'object'); +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-primitive/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-primitive/package.json new file mode 100644 index 0000000..cd87f15 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/node_modules/is-primitive/package.json @@ -0,0 +1,68 @@ +{ + "name": "is-primitive", + "description": "Returns `true` if the value is a primitive. ", + "version": "2.0.0", + "homepage": "https://github.com/jonschlinkert/is-primitive", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/is-primitive.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-primitive/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/is-primitive/blob/master/LICENSE" + }, + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "mocha": "*", + "should": "^4.0.4" + }, + "keywords": [ + "boolean", + "check", + "number", + "primitive", + "string", + "symbol", + "type", + "typeof", + "util" + ], + "gitHead": "c512b7c95fb049aa9b1f039ddc0670611b66cce2", + "_id": "is-primitive@2.0.0", + "_shasum": "207bab91638499c07b2adf240a41a87210034575", + "_from": "is-primitive@>=2.0.0 <3.0.0", + "_npmVersion": "2.5.1", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "207bab91638499c07b2adf240a41a87210034575", + "tarball": "http://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/package.json new file mode 100644 index 0000000..3249b3f --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/node_modules/regex-cache/package.json @@ -0,0 +1,75 @@ +{ + "name": "regex-cache", + "description": "Memoize the results of a call to the RegExp constructor, avoiding repetitious runtime compilation of the same string and options, resulting in dramatic speed improvements.", + "version": "0.4.2", + "homepage": "https://github.com/jonschlinkert/regex-cache", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/regex-cache.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/regex-cache/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/regex-cache/blob/master/LICENSE" + }, + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha", + "benchmarks": "node benchmark" + }, + "dependencies": { + "is-equal-shallow": "^0.1.1", + "is-primitive": "^2.0.0" + }, + "devDependencies": { + "benchmarked": "^0.1.4", + "chalk": "^1.0.0", + "micromatch": "^2.1.0", + "mocha": "^2.1.0", + "should": "*" + }, + "keywords": [ + "cache", + "expression", + "regex", + "regexp", + "regular", + "regular expression", + "store", + "to-regex" + ], + "gitHead": "9478eec6d9322a96a6ceb3e5488cd8433295a95f", + "_id": "regex-cache@0.4.2", + "_shasum": "6e4f89c266bc03c33fd129c062184687f4663487", + "_from": "regex-cache@>=0.4.2 <0.5.0", + "_npmVersion": "2.7.1", + "_nodeVersion": "1.6.2", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + } + ], + "dist": { + "shasum": "6e4f89c266bc03c33fd129c062184687f4663487", + "tarball": "http://registry.npmjs.org/regex-cache/-/regex-cache-0.4.2.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.2.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/package.json new file mode 100644 index 0000000..621be79 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/node_modules/micromatch/package.json @@ -0,0 +1,139 @@ +{ + "name": "micromatch", + "description": "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. Just use `micromatch.isMatch()` instead of `minimatch()`, or use `micromatch()` instead of `multimatch()`.", + "version": "2.2.0", + "homepage": "https://github.com/jonschlinkert/micromatch", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/micromatch.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/micromatch/issues" + }, + "license": "MIT", + "files": [ + "index.js", + "lib/" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha", + "prepublish": "browserify -o browser.js -e index.js" + }, + "dependencies": { + "arr-diff": "^1.0.1", + "array-unique": "^0.2.1", + "braces": "^1.8.0", + "expand-brackets": "^0.1.1", + "extglob": "^0.3.0", + "filename-regex": "^2.0.0", + "is-glob": "^1.1.3", + "kind-of": "^1.1.0", + "object.omit": "^1.1.0", + "parse-glob": "^3.0.1", + "regex-cache": "^0.4.2" + }, + "devDependencies": { + "benchmarked": "^0.1.4", + "browserify": "^9.0.8", + "chalk": "^1.0.0", + "minimatch": "^2.0.4", + "minimist": "^1.1.1", + "mocha": "^2.2.4", + "multimatch": "^2.0.0", + "should": "^6.0.1", + "write": "^0.2.0" + }, + "keywords": [ + "bash", + "expand", + "expansion", + "expression", + "file", + "files", + "filter", + "find", + "glob", + "globbing", + "globs", + "globstar", + "match", + "matcher", + "matches", + "matching", + "minimatch", + "multimatch", + "path", + "pattern", + "patterns", + "regex", + "regexp", + "regular", + "shell", + "wildcard" + ], + "verb": { + "deps": { + "ignore": [ + "browser.js" + ] + }, + "related": { + "list": [ + "braces", + "extglob", + "expand-brackets", + "fill-range", + "expand-range", + "gulp-micromatch", + "parse-glob", + "is-glob" + ] + }, + "reflinks": [ + "braces", + "expand-brackets", + "extglob", + "minimatch", + "multimatch", + "verb" + ] + }, + "gitHead": "5017fd78202e04c684cc31d3c2fb1f469ea222ff", + "_id": "micromatch@2.2.0", + "_shasum": "e7281bf971100827b890e375d994f12034898ff5", + "_from": "micromatch@>=2.1.5 <3.0.0", + "_npmVersion": "2.10.1", + "_nodeVersion": "0.12.4", + "_npmUser": { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + "maintainers": [ + { + "name": "jonschlinkert", + "email": "github@sellside.com" + }, + { + "name": "doowb", + "email": "brian.woodward@gmail.com" + }, + { + "name": "es128", + "email": "elan.shanker+npm@gmail.com" + } + ], + "dist": { + "shasum": "e7281bf971100827b890e375d994f12034898ff5", + "tarball": "http://registry.npmjs.org/micromatch/-/micromatch-2.2.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.2.0.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/package.json new file mode 100644 index 0000000..c396e37 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/anymatch/package.json @@ -0,0 +1,69 @@ +{ + "name": "anymatch", + "version": "1.3.0", + "description": "Matches strings against configurable strings, globs, regular expressions, and/or functions", + "files": [ + "index.js" + ], + "author": { + "name": "Elan Shanker", + "url": "http://github.com/es128" + }, + "license": "ISC", + "homepage": "https://github.com/es128/anymatch", + "repository": { + "type": "git", + "url": "https://github.com/es128/anymatch" + }, + "bugs": { + "url": "https://github.com/es128/anymatch/issues" + }, + "keywords": [ + "match", + "any", + "string", + "file", + "fs", + "list", + "glob", + "regex", + "regexp", + "regular", + "expression", + "function" + ], + "scripts": { + "test": "istanbul cover _mocha && cat ./coverage/lcov.info | coveralls" + }, + "dependencies": { + "arrify": "^1.0.0", + "micromatch": "^2.1.5" + }, + "devDependencies": { + "coveralls": "^2.11.2", + "istanbul": "^0.3.13", + "mocha": "^2.2.4" + }, + "gitHead": "253d2ad42f644ed18557f561312a7f8426daca84", + "_id": "anymatch@1.3.0", + "_shasum": "a3e52fa39168c825ff57b0248126ce5a8ff95507", + "_from": "anymatch@>=1.1.0 <2.0.0", + "_npmVersion": "2.7.3", + "_nodeVersion": "1.6.2", + "_npmUser": { + "name": "es128", + "email": "elan.shanker+npm@gmail.com" + }, + "maintainers": [ + { + "name": "es128", + "email": "elan.shanker+npm@gmail.com" + } + ], + "dist": { + "shasum": "a3e52fa39168c825ff57b0248126ce5a8ff95507", + "tarball": "http://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/arrify/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/arrify/index.js new file mode 100644 index 0000000..4cd753e --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/arrify/index.js @@ -0,0 +1,8 @@ +'use strict'; +module.exports = function (val) { + if (val == null) { + return []; + } + + return Array.isArray(val) ? val : [val]; +}; diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/arrify/license b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/arrify/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/arrify/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/arrify/package.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/arrify/package.json new file mode 100644 index 0000000..72391f0 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/arrify/package.json @@ -0,0 +1,61 @@ +{ + "name": "arrify", + "version": "1.0.0", + "description": "Convert a value to an array", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/sindresorhus/arrify" + }, + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "node test.js" + }, + "files": [ + "index.js" + ], + "keywords": [ + "array", + "arr", + "arrify", + "arrayify", + "convert", + "value" + ], + "devDependencies": { + "ava": "0.0.4" + }, + "gitHead": "4576e944677c722c356480b17a6d709d34d0733c", + "bugs": { + "url": "https://github.com/sindresorhus/arrify/issues" + }, + "homepage": "https://github.com/sindresorhus/arrify", + "_id": "arrify@1.0.0", + "_shasum": "d6c361518250802fa2147ea7fb67597128cb8c81", + "_from": "arrify@>=1.0.0 <2.0.0", + "_npmVersion": "2.5.0", + "_nodeVersion": "0.12.0", + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "dist": { + "shasum": "d6c361518250802fa2147ea7fb67597128cb8c81", + "tarball": "http://registry.npmjs.org/arrify/-/arrify-1.0.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.0.tgz" +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/arrify/readme.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/arrify/readme.md new file mode 100644 index 0000000..c69ff4b --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/arrify/readme.md @@ -0,0 +1,36 @@ +# arrify [![Build Status](https://travis-ci.org/sindresorhus/arrify.svg?branch=master)](https://travis-ci.org/sindresorhus/arrify) + +> Convert a value to an array + + +## Install + +``` +$ npm install --save arrify +``` + + +## Usage + +```js +var arrify = require('arrify'); + +arrify('unicorn'); +//=> ['unicorn'] + +arrify(['unicorn']); +//=> ['unicorn'] + +arrify(null); +//=> [] + +arrift(undefined); +//=> [] +``` + +*Supplying `null` or `undefined` results in an empty array.* + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/.npmignore b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/.npmignore new file mode 100644 index 0000000..b2971ef --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/.npmignore @@ -0,0 +1,25 @@ +# Numerous always-ignore extensions +*.diff +*.err +*.orig +*.log +*~ + +# OS or Editor folders +.DS_Store +.cache +Icon? + +# Folders to ignore +.hg +.svn + +# Node.js package manager +/node_modules +/npm-debug.log + +# Other stuff +*.pyc +/tmp + +# Project stuff diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/CHANGELOG.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/CHANGELOG.md new file mode 100644 index 0000000..949a2cf --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/CHANGELOG.md @@ -0,0 +1,20 @@ +# async-each 0.1.6 (5 November 2014) +* Add license to package.json + +# async-each 0.1.5 (22 October 2014) +* Clean up package.json to fix npm warning about `repo` + +# async-each 0.1.4 (12 November 2013) +* Fixed AMD definition. + +# async-each 0.1.3 (25 July 2013) +* Fixed double wrapping of errors. + +# async-each 0.1.2 (7 July 2013) +* Fixed behaviour on empty arrays. + +# async-each 0.1.1 (14 June 2013) +* Wrapped function in closure, enabled strict mode. + +# async-each 0.1.0 (14 June 2013) +* Initial release. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/README.md b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/README.md new file mode 100644 index 0000000..5300186 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/README.md @@ -0,0 +1,64 @@ +# async-each + +No-bullshit, ultra-simple, 35-lines-of-code async parallel forEach function for JavaScript. + +We don't need junky 30K async libs. Really. + +For browsers and node.js. + +## Installation +* Just include async-each before your scripts. +* `npm install async-each` if you’re using node.js. +* `component install paulmillr/async-each` if you’re using [component(1)](https://github.com/component/component). +* `bower install async-each` if you’re using [Twitter Bower](http://bower.io). + +## Usage + +* `each(array, iterator, callback);` — `Array`, `Function`, `(optional) Function` +* `iterator(item, next)` receives current item and a callback that will mark the item as done. `next` callback receives optional `error, transformedItem` arguments. +* `callback(error, transformedArray)` optionally receives first error and transformed result `Array`. + +Node.js: + +```javascript +var each = require('async-each'); +each(['a.js', 'b.js', 'c.js'], fs.readFile, function(error, contents) { + if (error) console.error(error); + console.log('Contents for a, b and c:', contents); +}); +``` + +Browser: + +```javascript +// component(1) +var each = require('async-each'); +each(list, fn, callback); + +// Default: +window.asyncEach(list, fn, callback); +``` + +## License + +The MIT License (MIT) + +Copyright (c) 2013 Paul Miller (http://paulmillr.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. diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/bower.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/bower.json new file mode 100644 index 0000000..6510855 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/bower.json @@ -0,0 +1,22 @@ +{ + "name": "async-each", + "repo": "paulmillr/async-each", + "description": "No-bullshit, ultra-simple, 35-lines-of-code async parallel forEach / map function for JavaScript.", + "version": "0.1.6", + "keywords": [ + "async", "forEach", "each", "map", + "asynchronous", + "iteration", "iterate", + "loop", "parallel", + "concurrent", "array", + "flow", "control flow" + ], + "main": "index.js", + "dependencies": {}, + "development": {}, + "ignore": [ + "**/.*", + "node_modules", + "bower_components" + ] +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/component.json b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/component.json new file mode 100644 index 0000000..83bc0a5 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/component.json @@ -0,0 +1,18 @@ +{ + "name": "async-each", + "repo": "paulmillr/async-each", + "description": "No-bullshit, ultra-simple, 35-lines-of-code async parallel forEach / map function for JavaScript.", + "version": "0.1.6", + "keywords": [ + "async", "forEach", "each", "map", + "asynchronous", + "iteration", "iterate", + "loop", "parallel", + "concurrent", "array", + "flow", "control flow" + ], + "main": "index.js", + "scripts": ["index.js"], + "dependencies": {}, + "development": {} +} diff --git a/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/index.js b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/index.js new file mode 100644 index 0000000..1c51c95 --- /dev/null +++ b/node_modules/forever/node_modules/forever-monitor/node_modules/chokidar/node_modules/async-each/index.js @@ -0,0 +1,38 @@ +// async-each MIT license (by Paul Miller from http://paulmillr.com). +(function(globals) { + 'use strict'; + var each = function(items, next, callback) { + if (!Array.isArray(items)) throw new TypeError('each() expects array as first argument'); + if (typeof next !== 'function') throw new TypeError('each() expects function as second argument'); + if (typeof callback !== 'function') callback = Function.prototype; // no-op + + if (items.length === 0) return callback(undefined, items); + + var transformed = new Array(items.length); + var count = 0; + var returned = false; + + items.forEach(function(item, index) { + next(item, function(error, transformedItem) { + if (returned) return; + if (error) { + returned = true; + return callback(error); + } + transformed[index] = transformedItem; + count += 1; + if (count === items.length) return callback(undefined, transformed); + }); + }); + }; + + if (typeof define !== 'undefined' && define.amd) { + define([], function() { + return each; + }); // RequireJS + } else if (typeof module !== 'undefined' && module.exports) { + module.exports = each; // CommonJS + } else { + globals.asyncEach = each; // + + + diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/static/server.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/static/server.js new file mode 100644 index 0000000..80cea43 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/static/server.js @@ -0,0 +1,4 @@ +var http = require('http'); +var ecstatic = require('ecstatic')(__dirname); +var server = http.createServer(ecstatic); +server.listen(8000); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/throw.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/throw.js new file mode 100644 index 0000000..9a69ec0 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/throw.js @@ -0,0 +1,10 @@ +var falafel = require('falafel'); +var test = require('../'); + +test('throw', function (t) { + t.plan(2); + + setTimeout(function () { + throw new Error('doom'); + }, 100); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/timing.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/timing.js new file mode 100644 index 0000000..0268dc7 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/timing.js @@ -0,0 +1,12 @@ +var test = require('../'); + +test('timing test', function (t) { + t.plan(2); + + t.equal(typeof Date.now, 'function'); + var start = new Date; + + setTimeout(function () { + t.equal(new Date - start, 100); + }, 100); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/too_many.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/too_many.js new file mode 100644 index 0000000..ee285fb --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/too_many.js @@ -0,0 +1,35 @@ +var falafel = require('falafel'); +var test = require('../'); + +test('array', function (t) { + t.plan(3); + + var src = '(' + function () { + var xs = [ 1, 2, [ 3, 4 ] ]; + var ys = [ 5, 6 ]; + g([ xs, ys ]); + } + ')()'; + + var output = falafel(src, function (node) { + if (node.type === 'ArrayExpression') { + node.update('fn(' + node.source() + ')'); + } + }); + + var arrays = [ + [ 3, 4 ], + [ 1, 2, [ 3, 4 ] ], + [ 5, 6 ], + [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], + ]; + + Function(['fn','g'], output)( + function (xs) { + t.same(arrays.shift(), xs); + return xs; + }, + function (xs) { + t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); + } + ); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/two.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/two.js new file mode 100644 index 0000000..78e49c3 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/example/two.js @@ -0,0 +1,18 @@ +var test = require('../'); + +test('one', function (t) { + t.plan(2); + t.ok(true); + setTimeout(function () { + t.equal(1+3, 4); + }, 100); +}); + +test('two', function (t) { + t.plan(3); + t.equal(5, 2+3); + setTimeout(function () { + t.equal('a'.charCodeAt(0), 97); + t.ok(true); + }, 50); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/index.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/index.js new file mode 100644 index 0000000..d88aaac --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/index.js @@ -0,0 +1,134 @@ +var defined = require('defined'); +var createDefaultStream = require('./lib/default_stream'); +var Test = require('./lib/test'); +var createResult = require('./lib/results'); + +var canEmitExit = typeof process !== 'undefined' && process + && typeof process.on === 'function' && process.browser !== true +; +var canExit = typeof process !== 'undefined' && process + && typeof process.exit === 'function' +; + +var nextTick = typeof setImmediate !== 'undefined' + ? setImmediate + : process.nextTick +; + +exports = module.exports = (function () { + var harness; + var lazyLoad = function () { + if (!harness) harness = createExitHarness({ + autoclose: !canEmitExit + }); + + return harness.apply(this, arguments); + }; + + lazyLoad.only = function () { + if (!harness) harness = createExitHarness({ + autoclose: !canEmitExit + }); + + return harness.only.apply(this, arguments); + } + + return lazyLoad +})(); + +function createExitHarness (conf) { + if (!conf) conf = {}; + var harness = createHarness({ + autoclose: defined(conf.autoclose, false) + }); + + var stream = harness.createStream(); + var es = stream.pipe(createDefaultStream()); + if (canEmitExit) { + es.on('error', function (err) { harness._exitCode = 1 }); + } + + var ended = false; + stream.on('end', function () { ended = true }); + + if (conf.exit === false) return harness; + if (!canEmitExit || !canExit) return harness; + + var _error; + + process.on('uncaughtException', function (err) { + if (err && err.code === 'EPIPE' && err.errno === 'EPIPE' + && err.syscall === 'write') return; + + _error = err + + throw err + }) + + process.on('exit', function (code) { + if (_error) { + return + } + + if (!ended) { + for (var i = 0; i < harness._tests.length; i++) { + var t = harness._tests[i]; + t._exit(); + } + } + harness.close(); + process.exit(code || harness._exitCode); + }); + + return harness; +} + +exports.createHarness = createHarness; +exports.Test = Test; +exports.test = exports; // tap compat + +var exitInterval; + +function createHarness (conf_) { + if (!conf_) conf_ = {}; + var results = createResult(); + if (conf_.autoclose !== false) { + results.once('done', function () { results.close() }); + } + + var test = function (name, conf, cb) { + var t = new Test(name, conf, cb); + test._tests.push(t); + + (function inspectCode (st) { + st.on('test', function sub (st_) { + inspectCode(st_); + }); + st.on('result', function (r) { + if (!r.ok) test._exitCode = 1 + }); + })(t); + + results.push(t); + return t; + }; + + test._tests = []; + + test.createStream = function () { + return results.createStream(); + }; + + var only = false; + test.only = function (name) { + if (only) throw new Error('there can only be one only test'); + results.only(name); + only = true; + return test.apply(null, arguments); + }; + test._exitCode = 0; + + test.close = function () { results.close() }; + + return test; +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/lib/default_stream.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/lib/default_stream.js new file mode 100644 index 0000000..a267dde --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/lib/default_stream.js @@ -0,0 +1,24 @@ +var through = require('through'); + +module.exports = function () { + var line = ''; + var stream = through(write, flush); + return stream; + + function write (buf) { + for (var i = 0; i < buf.length; i++) { + var c = typeof buf === 'string' + ? buf.charAt(i) + : String.fromCharCode(buf[i]) + ; + if (c === '\n') flush(); + else line += c; + } + } + + function flush () { + try { console.log(line); } + catch (e) { stream.emit('error', e) } + line = ''; + } +}; diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/lib/results.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/lib/results.js new file mode 100644 index 0000000..d8ba3f0 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/lib/results.js @@ -0,0 +1,174 @@ +var Stream = require('stream'); +var EventEmitter = require('events').EventEmitter; +var inherits = require('inherits'); +var json = typeof JSON === 'object' ? JSON : require('jsonify'); +var through = require('through'); +var resumer = require('resumer'); +var nextTick = typeof setImmediate !== 'undefined' + ? setImmediate + : process.nextTick +; + +module.exports = Results; +inherits(Results, EventEmitter); + +function Results () { + if (!(this instanceof Results)) return new Results; + this.count = 0; + this.fail = 0; + this.pass = 0; + this._stream = through(); + this.tests = []; +} + +Results.prototype.createStream = function () { + var self = this; + var output = resumer(); + output.queue('TAP version 13\n'); + + nextTick(function () { + var t = getNextTest(self); + if (t) t.run() + else self.emit('done') + }); + self._stream.pipe(output); + + return output; +}; + +Results.prototype.push = function (t) { + var self = this; + self.tests.push(t); + self._watch(t); + t.once('end', function () { + var nt = getNextTest(self); + if (nt) nt.run() + else self.emit('done') + }); +}; + +Results.prototype.only = function (name) { + if (this._only) { + self.count ++; + self.fail ++; + write('not ok ' + self.count + ' already called .only()\n'); + } + this._only = name; +}; + +Results.prototype._watch = function (t) { + var self = this; + var write = function (s) { self._stream.queue(s) }; + t.once('prerun', function () { + write('# ' + t.name + '\n'); + }); + + t.on('result', function (res) { + if (typeof res === 'string') { + write('# ' + res + '\n'); + return; + } + write(encodeResult(res, self.count + 1)); + self.count ++; + + if (res.ok) self.pass ++ + else self.fail ++ + }); + + t.on('test', function (st) { self._watch(st) }); +}; + +Results.prototype.close = function () { + var self = this; + if (self.closed) self._stream.emit('error', new Error('ALREADY CLOSED')); + self.closed = true; + var write = function (s) { self._stream.queue(s) }; + + write('\n1..' + self.count + '\n'); + write('# tests ' + self.count + '\n'); + write('# pass ' + self.pass + '\n'); + if (self.fail) write('# fail ' + self.fail + '\n') + else write('\n# ok\n') + + self._stream.queue(null); +}; + +function encodeResult (res, count) { + var output = ''; + output += (res.ok ? 'ok ' : 'not ok ') + count; + output += res.name ? ' ' + res.name.toString().replace(/\s+/g, ' ') : ''; + + if (res.skip) output += ' # SKIP'; + else if (res.todo) output += ' # TODO'; + + output += '\n'; + if (res.ok) return output; + + var outer = ' '; + var inner = outer + ' '; + output += outer + '---\n'; + output += inner + 'operator: ' + res.operator + '\n'; + + var ex = json.stringify(res.expected, getSerialize()) || ''; + var ac = json.stringify(res.actual, getSerialize()) || ''; + + if (Math.max(ex.length, ac.length) > 65) { + output += inner + 'expected:\n' + inner + ' ' + ex + '\n'; + output += inner + 'actual:\n' + inner + ' ' + ac + '\n'; + } + else { + output += inner + 'expected: ' + ex + '\n'; + output += inner + 'actual: ' + ac + '\n'; + } + if (res.at) { + output += inner + 'at: ' + res.at + '\n'; + } + if (res.operator === 'error' && res.actual && res.actual.stack) { + var lines = String(res.actual.stack).split('\n'); + output += inner + 'stack:\n'; + output += inner + ' ' + lines[0] + '\n'; + for (var i = 1; i < lines.length; i++) { + output += inner + lines[i] + '\n'; + } + } + + output += outer + '...\n'; + return output; +} + +function getSerialize () { + var seen = []; + + return function (key, value) { + var ret = value; + if (typeof value === 'object' && value) { + var found = false; + for (var i = 0; i < seen.length; i++) { + if (seen[i] === value) { + found = true + break; + } + } + + if (found) ret = '[Circular]' + else seen.push(value) + } + return ret; + }; +} + +function getNextTest(results) { + if (!results._only) { + return results.tests.shift(); + } + + do { + var t = results.tests.shift(); + if (!t) { + return null; + } + if (results._only === t.name) { + return t; + } + } while (results.tests.length !== 0) +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/lib/test.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/lib/test.js new file mode 100644 index 0000000..9d03a88 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/lib/test.js @@ -0,0 +1,425 @@ +var Stream = require('stream'); +var deepEqual = require('deep-equal'); +var defined = require('defined'); +var path = require('path'); +var inherits = require('util').inherits; +var EventEmitter = require('events').EventEmitter; + +module.exports = Test; + +var nextTick = typeof setImmediate !== 'undefined' + ? setImmediate + : process.nextTick +; + +inherits(Test, EventEmitter); + +function Test (name_, opts_, cb_) { + var self = this; + var name = '(anonymous)'; + var opts = {}; + var cb; + + for (var i = 0; i < arguments.length; i++) { + switch (typeof arguments[i]) { + case 'string': + name = arguments[i]; + break; + case 'object': + opts = arguments[i] || opts; + break; + case 'function': + cb = arguments[i]; + } + } + + this.readable = true; + this.name = name || '(anonymous)'; + this.assertCount = 0; + this.pendingCount = 0; + this._skip = opts.skip || false; + this._plan = undefined; + this._cb = cb; + this._progeny = []; + this._ok = true; +} + +Test.prototype.run = function () { + if (this._skip) { + return this.end(); + } + this.emit('prerun'); + try { + this._cb(this); + } + catch (err) { + this.error(err); + this.end(); + return; + } + this.emit('run'); +}; + +Test.prototype.test = function (name, opts, cb) { + var self = this; + var t = new Test(name, opts, cb); + this._progeny.push(t); + this.pendingCount++; + this.emit('test', t); + t.on('prerun', function () { + self.assertCount++; + }) + + if (!self._pendingAsserts()) { + nextTick(function () { + self.end(); + }); + } + + nextTick(function() { + if (!self._plan && self.pendingCount == self._progeny.length) { + self.end(); + } + }); +}; + +Test.prototype.comment = function (msg) { + this.emit('result', msg.trim().replace(/^#\s*/, '')); +}; + +Test.prototype.plan = function (n) { + this._plan = n; + this.emit('plan', n); +}; + +Test.prototype.end = function () { + var self = this; + + if (this._progeny.length) { + var t = this._progeny.shift(); + t.on('end', function () { + self.end(); + }); + t.run(); + return; + } + + if (!this.ended) this.emit('end'); + var pendingAsserts = this._pendingAsserts(); + if (!this._planError && this._plan !== undefined && pendingAsserts) { + this._planError = true; + this.fail('plan != count', { + expected : this._plan, + actual : this.assertCount + }); + } + this.ended = true; +}; + +Test.prototype._exit = function () { + if (this._plan !== undefined && + !this._planError && this.assertCount !== this._plan) { + this._planError = true; + this.fail('plan != count', { + expected : this._plan, + actual : this.assertCount, + exiting : true + }); + } + else if (!this.ended) { + this.fail('test exited without ending', { + exiting: true + }); + } +}; + +Test.prototype._pendingAsserts = function () { + if (this._plan === undefined) { + return 1; + } else { + return this._plan - + (this._progeny.length + this.assertCount); + } +} + +Test.prototype._assert = function assert (ok, opts) { + var self = this; + var extra = opts.extra || {}; + + var res = { + id : self.assertCount ++, + ok : Boolean(ok), + skip : defined(extra.skip, opts.skip), + name : defined(extra.message, opts.message, '(unnamed assert)'), + operator : defined(extra.operator, opts.operator), + actual : defined(extra.actual, opts.actual), + expected : defined(extra.expected, opts.expected) + }; + this._ok = Boolean(this._ok && ok); + + if (!ok) { + res.error = defined(extra.error, opts.error, new Error(res.name)); + } + + var e = new Error('exception'); + var err = (e.stack || '').split('\n'); + var dir = path.dirname(__dirname) + '/'; + + for (var i = 0; i < err.length; i++) { + var m = /^\s*\bat\s+(.+)/.exec(err[i]); + if (!m) continue; + + var s = m[1].split(/\s+/); + var filem = /(\/[^:\s]+:(\d+)(?::(\d+))?)/.exec(s[1]); + if (!filem) { + filem = /(\/[^:\s]+:(\d+)(?::(\d+))?)/.exec(s[3]); + + if (!filem) continue; + } + + if (filem[1].slice(0, dir.length) === dir) continue; + + res.functionName = s[0]; + res.file = filem[1]; + res.line = Number(filem[2]); + if (filem[3]) res.column = filem[3]; + + res.at = m[1]; + break; + } + + self.emit('result', res); + + var pendingAsserts = self._pendingAsserts(); + if (!pendingAsserts) { + if (extra.exiting) { + self.end(); + } else { + nextTick(function () { + self.end(); + }); + } + } + + if (!self._planError && pendingAsserts < 0) { + self._planError = true; + self.fail('plan != count', { + expected : self._plan, + actual : self._plan - pendingAsserts + }); + } +}; + +Test.prototype.fail = function (msg, extra) { + this._assert(false, { + message : msg, + operator : 'fail', + extra : extra + }); +}; + +Test.prototype.pass = function (msg, extra) { + this._assert(true, { + message : msg, + operator : 'pass', + extra : extra + }); +}; + +Test.prototype.skip = function (msg, extra) { + this._assert(true, { + message : msg, + operator : 'skip', + skip : true, + extra : extra + }); +}; + +Test.prototype.ok += Test.prototype['true'] += Test.prototype.assert += function (value, msg, extra) { + this._assert(value, { + message : msg, + operator : 'ok', + expected : true, + actual : value, + extra : extra + }); +}; + +Test.prototype.notOk += Test.prototype['false'] += Test.prototype.notok += function (value, msg, extra) { + this._assert(!value, { + message : msg, + operator : 'notOk', + expected : false, + actual : value, + extra : extra + }); +}; + +Test.prototype.error += Test.prototype.ifError += Test.prototype.ifErr += Test.prototype.iferror += function (err, msg, extra) { + this._assert(!err, { + message : defined(msg, String(err)), + operator : 'error', + actual : err, + extra : extra + }); +}; + +Test.prototype.equal += Test.prototype.equals += Test.prototype.isEqual += Test.prototype.is += Test.prototype.strictEqual += Test.prototype.strictEquals += function (a, b, msg, extra) { + this._assert(a === b, { + message : defined(msg, 'should be equal'), + operator : 'equal', + actual : a, + expected : b, + extra : extra + }); +}; + +Test.prototype.notEqual += Test.prototype.notEquals += Test.prototype.notStrictEqual += Test.prototype.notStrictEquals += Test.prototype.isNotEqual += Test.prototype.isNot += Test.prototype.not += Test.prototype.doesNotEqual += Test.prototype.isInequal += function (a, b, msg, extra) { + this._assert(a !== b, { + message : defined(msg, 'should not be equal'), + operator : 'notEqual', + actual : a, + notExpected : b, + extra : extra + }); +}; + +Test.prototype.deepEqual += Test.prototype.deepEquals += Test.prototype.isEquivalent += Test.prototype.same += function (a, b, msg, extra) { + this._assert(deepEqual(a, b, { strict: true }), { + message : defined(msg, 'should be equivalent'), + operator : 'deepEqual', + actual : a, + expected : b, + extra : extra + }); +}; + +Test.prototype.deepLooseEqual += Test.prototype.looseEqual += Test.prototype.looseEquals += function (a, b, msg, extra) { + this._assert(deepEqual(a, b), { + message : defined(msg, 'should be equivalent'), + operator : 'deepLooseEqual', + actual : a, + expected : b, + extra : extra + }); +}; + +Test.prototype.notDeepEqual += Test.prototype.notEquivalent += Test.prototype.notDeeply += Test.prototype.notSame += Test.prototype.isNotDeepEqual += Test.prototype.isNotDeeply += Test.prototype.isNotEquivalent += Test.prototype.isInequivalent += function (a, b, msg, extra) { + this._assert(!deepEqual(a, b, { strict: true }), { + message : defined(msg, 'should not be equivalent'), + operator : 'notDeepEqual', + actual : a, + notExpected : b, + extra : extra + }); +}; + +Test.prototype.notDeepLooseEqual += Test.prototype.notLooseEqual += Test.prototype.notLooseEquals += function (a, b, msg, extra) { + this._assert(deepEqual(a, b), { + message : defined(msg, 'should be equivalent'), + operator : 'notDeepLooseEqual', + actual : a, + expected : b, + extra : extra + }); +}; + +Test.prototype['throws'] = function (fn, expected, msg, extra) { + if (typeof expected === 'string') { + msg = expected; + expected = undefined; + } + var caught = undefined; + try { + fn(); + } + catch (err) { + caught = { error : err }; + var message = err.message; + delete err.message; + err.message = message; + } + + var passed = caught; + + if (expected instanceof RegExp) { + passed = expected.test(caught && caught.error); + expected = String(expected); + } + + this._assert(passed, { + message : defined(msg, 'should throw'), + operator : 'throws', + actual : caught && caught.error, + expected : expected, + error: !passed && caught && caught.error, + extra : extra + }); +}; + +Test.prototype.doesNotThrow = function (fn, expected, msg, extra) { + if (typeof expected === 'string') { + msg = expected; + expected = undefined; + } + var caught = undefined; + try { + fn(); + } + catch (err) { + caught = { error : err }; + } + this._assert(!caught, { + message : defined(msg, 'should throw'), + operator : 'throws', + actual : caught && caught.error, + expected : expected, + error : caught && caught.error, + extra : extra + }); +}; + +// vim: set softtabstop=4 shiftwidth=4: diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/.travis.yml b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/.travis.yml new file mode 100644 index 0000000..f1d0f13 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.4 + - 0.6 diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/example/cmp.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/example/cmp.js new file mode 100644 index 0000000..67014b8 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/example/cmp.js @@ -0,0 +1,11 @@ +var equal = require('../'); +console.dir([ + equal( + { a : [ 2, 3 ], b : [ 4 ] }, + { a : [ 2, 3 ], b : [ 4 ] } + ), + equal( + { x : 5, y : [6] }, + { x : 5, y : 6 } + ) +]); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/index.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/index.js new file mode 100644 index 0000000..7d8ca4e --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/index.js @@ -0,0 +1,75 @@ +var pSlice = Array.prototype.slice; +var objectKeys = require('./lib/keys.js'); +var isArguments = require('./lib/is_arguments.js'); + +var deepEqual = module.exports = function (actual, expected, opts) { + if (!opts) opts = {}; + // 7.1. All identical values are equivalent, as determined by ===. + if (actual === expected) { + return true; + + } else if (actual instanceof Date && expected instanceof Date) { + return actual.getTime() === expected.getTime(); + + // 7.3. Other pairs that do not both pass typeof value == 'object', + // equivalence is determined by ==. + } else if (typeof actual != 'object' && typeof expected != 'object') { + return opts.strict ? actual === expected : actual == expected; + + // 7.4. For all other Object pairs, including Array objects, equivalence is + // determined by having the same number of owned properties (as verified + // with Object.prototype.hasOwnProperty.call), the same set of keys + // (although not necessarily the same order), equivalent values for every + // corresponding key, and an identical 'prototype' property. Note: this + // accounts for both named and indexed properties on Arrays. + } else { + return objEquiv(actual, expected, opts); + } +} + +function isUndefinedOrNull(value) { + return value === null || value === undefined; +} + +function objEquiv(a, b, opts) { + if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) + return false; + // an identical 'prototype' property. + if (a.prototype !== b.prototype) return false; + //~~~I've managed to break Object.keys through screwy arguments passing. + // Converting to array solves the problem. + if (isArguments(a)) { + if (!isArguments(b)) { + return false; + } + a = pSlice.call(a); + b = pSlice.call(b); + return deepEqual(a, b, opts); + } + try { + var ka = objectKeys(a), + kb = objectKeys(b), + key, i; + } catch (e) {//happens when one is a string literal and the other isn't + return false; + } + // having the same number of owned properties (keys incorporates + // hasOwnProperty) + if (ka.length != kb.length) + return false; + //the same set of keys (although not necessarily the same order), + ka.sort(); + kb.sort(); + //~~~cheap key test + for (i = ka.length - 1; i >= 0; i--) { + if (ka[i] != kb[i]) + return false; + } + //equivalent values for every corresponding key, and + //~~~possibly expensive deep test + for (i = ka.length - 1; i >= 0; i--) { + key = ka[i]; + if (!deepEqual(a[key], b[key], opts)) return false; + } + return true; +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/lib/is_arguments.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/lib/is_arguments.js new file mode 100644 index 0000000..1ff150f --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/lib/is_arguments.js @@ -0,0 +1,20 @@ +var supportsArgumentsClass = (function(){ + return Object.prototype.toString.call(arguments) +})() == '[object Arguments]'; + +exports = module.exports = supportsArgumentsClass ? supported : unsupported; + +exports.supported = supported; +function supported(object) { + return Object.prototype.toString.call(object) == '[object Arguments]'; +}; + +exports.unsupported = unsupported; +function unsupported(object){ + return object && + typeof object == 'object' && + typeof object.length == 'number' && + Object.prototype.hasOwnProperty.call(object, 'callee') && + !Object.prototype.propertyIsEnumerable.call(object, 'callee') || + false; +}; diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/lib/keys.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/lib/keys.js new file mode 100644 index 0000000..13af263 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/lib/keys.js @@ -0,0 +1,9 @@ +exports = module.exports = typeof Object.keys === 'function' + ? Object.keys : shim; + +exports.shim = shim; +function shim (obj) { + var keys = []; + for (var key in obj) keys.push(key); + return keys; +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/package.json b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/package.json new file mode 100644 index 0000000..7a0875c --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/package.json @@ -0,0 +1,81 @@ +{ + "name": "deep-equal", + "version": "0.1.2", + "description": "node's assert.deepEqual algorithm", + "main": "index.js", + "directories": { + "lib": ".", + "example": "example", + "test": "test" + }, + "scripts": { + "test": "tape test/*.js" + }, + "devDependencies": { + "tape": "~2.3.2" + }, + "repository": { + "type": "git", + "url": "http://github.com/substack/node-deep-equal.git" + }, + "keywords": [ + "equality", + "equal", + "compare" + ], + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "license": "MIT", + "testling": { + "files": "test/*.js", + "browsers": { + "ie": [ + 6, + 7, + 8, + 9 + ], + "ff": [ + 3.5, + 10, + 15 + ], + "chrome": [ + 10, + 22 + ], + "safari": [ + 5.1 + ], + "opera": [ + 12 + ] + } + }, + "bugs": { + "url": "https://github.com/substack/node-deep-equal/issues" + }, + "homepage": "https://github.com/substack/node-deep-equal", + "_id": "deep-equal@0.1.2", + "dist": { + "shasum": "b246c2b80a570a47c11be1d9bd1070ec878b87ce", + "tarball": "http://registry.npmjs.org/deep-equal/-/deep-equal-0.1.2.tgz" + }, + "_from": "deep-equal@>=0.1.0 <0.2.0", + "_npmVersion": "1.3.21", + "_npmUser": { + "name": "substack", + "email": "mail@substack.net" + }, + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "_shasum": "b246c2b80a570a47c11be1d9bd1070ec878b87ce", + "_resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.1.2.tgz" +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/readme.markdown b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/readme.markdown new file mode 100644 index 0000000..f489c2a --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/readme.markdown @@ -0,0 +1,61 @@ +# deep-equal + +Node's `assert.deepEqual() algorithm` as a standalone module. + +This module is around [5 times faster](https://gist.github.com/2790507) +than wrapping `assert.deepEqual()` in a `try/catch`. + +[![browser support](https://ci.testling.com/substack/node-deep-equal.png)](https://ci.testling.com/substack/node-deep-equal) + +[![build status](https://secure.travis-ci.org/substack/node-deep-equal.png)](https://travis-ci.org/substack/node-deep-equal) + +# example + +``` js +var equal = require('deep-equal'); +console.dir([ + equal( + { a : [ 2, 3 ], b : [ 4 ] }, + { a : [ 2, 3 ], b : [ 4 ] } + ), + equal( + { x : 5, y : [6] }, + { x : 5, y : 6 } + ) +]); +``` + +# methods + +``` js +var deepEqual = require('deep-equal') +``` + +## deepEqual(a, b, opts) + +Compare objects `a` and `b`, returning whether they are equal according to a +recursive equality algorithm. + +If `opts.strict` is `true`, use strict equality (`===`) to compare leaf nodes. +The default is to use coercive equality (`==`) because that's how +`assert.deepEqual()` works by default. + +# install + +With [npm](http://npmjs.org) do: + +``` +npm install deep-equal +``` + +# test + +With [npm](http://npmjs.org) do: + +``` +npm test +``` + +# license + +MIT. Derived largely from node's assert module. diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/test/cmp.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/test/cmp.js new file mode 100644 index 0000000..0cfce25 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/deep-equal/test/cmp.js @@ -0,0 +1,79 @@ +var test = require('tape'); +var equal = require('../'); +var isArguments = require('../lib/is_arguments.js'); +var objectKeys = require('../lib/keys.js'); + +test('equal', function (t) { + t.ok(equal( + { a : [ 2, 3 ], b : [ 4 ] }, + { a : [ 2, 3 ], b : [ 4 ] } + )); + t.end(); +}); + +test('not equal', function (t) { + t.notOk(equal( + { x : 5, y : [6] }, + { x : 5, y : 6 } + )); + t.end(); +}); + +test('nested nulls', function (t) { + t.ok(equal([ null, null, null ], [ null, null, null ])); + t.end(); +}); + +test('strict equal', function (t) { + t.notOk(equal( + [ { a: 3 }, { b: 4 } ], + [ { a: '3' }, { b: '4' } ], + { strict: true } + )); + t.end(); +}); + +test('non-objects', function (t) { + t.ok(equal(3, 3)); + t.ok(equal('beep', 'beep')); + t.ok(equal('3', 3)); + t.notOk(equal('3', 3, { strict: true })); + t.notOk(equal('3', [3])); + t.end(); +}); + +test('arguments class', function (t) { + t.ok(equal( + (function(){return arguments})(1,2,3), + (function(){return arguments})(1,2,3), + "compares arguments" + )); + t.notOk(equal( + (function(){return arguments})(1,2,3), + [1,2,3], + "differenciates array and arguments" + )); + t.end(); +}); + +test('test the arguments shim', function (t) { + t.ok(isArguments.supported((function(){return arguments})())); + t.notOk(isArguments.supported([1,2,3])); + + t.ok(isArguments.unsupported((function(){return arguments})())); + t.notOk(isArguments.unsupported([1,2,3])); + + t.end(); +}); + +test('test the keys shim', function (t) { + t.deepEqual(objectKeys.shim({ a: 1, b : 2 }), [ 'a', 'b' ]); + t.end(); +}); + +test('dates', function (t) { + var d0 = new Date(1387585278000); + var d1 = new Date('Fri Dec 20 2013 16:21:18 GMT-0800 (PST)'); + t.ok(equal(d0, d1)); + t.end(); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/.travis.yml b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/.travis.yml new file mode 100644 index 0000000..895dbd3 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.6 + - 0.8 diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/LICENSE b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/LICENSE new file mode 100644 index 0000000..ee27ba4 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/LICENSE @@ -0,0 +1,18 @@ +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. diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/example/defined.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/example/defined.js new file mode 100644 index 0000000..7b5d982 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/example/defined.js @@ -0,0 +1,4 @@ +var defined = require('../'); +var opts = { y : false, w : 4 }; +var x = defined(opts.x, opts.y, opts.w, 8); +console.log(x); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/index.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/index.js new file mode 100644 index 0000000..f8a2219 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/index.js @@ -0,0 +1,5 @@ +module.exports = function () { + for (var i = 0; i < arguments.length; i++) { + if (arguments[i] !== undefined) return arguments[i]; + } +}; diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/package.json b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/package.json new file mode 100644 index 0000000..3f28541 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/package.json @@ -0,0 +1,56 @@ +{ + "name": "defined", + "version": "0.0.0", + "description": "return the first argument that is `!== undefined`", + "main": "index.js", + "directories": { + "example": "example", + "test": "test" + }, + "dependencies": {}, + "devDependencies": { + "tap": "~0.3.0", + "tape": "~0.0.2" + }, + "scripts": { + "test": "tap test/*.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/substack/defined.git" + }, + "homepage": "https://github.com/substack/defined", + "keywords": [ + "undefined", + "short-circuit", + "||", + "or", + "//", + "defined-or" + ], + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "license": "MIT", + "_id": "defined@0.0.0", + "dist": { + "shasum": "f35eea7d705e933baf13b2f03b3f83d921403b3e", + "tarball": "http://registry.npmjs.org/defined/-/defined-0.0.0.tgz" + }, + "_npmVersion": "1.1.59", + "_npmUser": { + "name": "substack", + "email": "mail@substack.net" + }, + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "_shasum": "f35eea7d705e933baf13b2f03b3f83d921403b3e", + "_resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz", + "_from": "defined@>=0.0.0 <0.1.0" +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/readme.markdown b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/readme.markdown new file mode 100644 index 0000000..2280351 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/readme.markdown @@ -0,0 +1,51 @@ +# defined + +return the first argument that is `!== undefined` + +[![build status](https://secure.travis-ci.org/substack/defined.png)](http://travis-ci.org/substack/defined) + +Most of the time when I chain together `||`s, I actually just want the first +item that is not `undefined`, not the first non-falsy item. + +This module is like the defined-or (`//`) operator in perl 5.10+. + +# example + +``` js +var defined = require('defined'); +var opts = { y : false, w : 4 }; +var x = defined(opts.x, opts.y, opts.w, 100); +console.log(x); +``` + +``` +$ node example/defined.js +false +``` + +The return value is `false` because `false` is the first item that is +`!== undefined`. + +# methods + +``` js +var defined = require('defined') +``` + +## var x = defined(a, b, c...) + +Return the first item in the argument list `a, b, c...` that is `!== undefined`. + +If all the items are `=== undefined`, return undefined. + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install defined +``` + +# license + +MIT diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/test/def.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/test/def.js new file mode 100644 index 0000000..48da517 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/defined/test/def.js @@ -0,0 +1,22 @@ +var defined = require('../'); +var test = require('tape'); + +test('defined-or', function (t) { + var u = undefined; + + t.equal(defined(), u, 'empty arguments'); + t.equal(defined(u), u, '1 undefined'); + t.equal(defined(u, u), u, '2 undefined'); + t.equal(defined(u, u, u, u), u, '4 undefineds'); + + t.equal(defined(undefined, false, true), false, 'false[0]'); + t.equal(defined(false, true), false, 'false[1]'); + t.equal(defined(undefined, 0, true), 0, 'zero[0]'); + t.equal(defined(0, true), 0, 'zero[1]'); + + t.equal(defined(3, undefined, 4), 3, 'first arg'); + t.equal(defined(undefined, 3, 4), 3, 'second arg'); + t.equal(defined(undefined, undefined, 3), 3, 'third arg'); + + t.end(); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/LICENSE b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/LICENSE new file mode 100644 index 0000000..dea3013 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/LICENSE @@ -0,0 +1,16 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter + +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. + diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/README.md b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/README.md new file mode 100644 index 0000000..b1c5665 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/README.md @@ -0,0 +1,42 @@ +Browser-friendly inheritance fully compatible with standard node.js +[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor). + +This package exports standard `inherits` from node.js `util` module in +node environment, but also provides alternative browser-friendly +implementation through [browser +field](https://gist.github.com/shtylman/4339901). Alternative +implementation is a literal copy of standard one located in standalone +module to avoid requiring of `util`. It also has a shim for old +browsers with no `Object.create` support. + +While keeping you sure you are using standard `inherits` +implementation in node.js environment, it allows bundlers such as +[browserify](https://github.com/substack/node-browserify) to not +include full `util` package to your client code if all you need is +just `inherits` function. It worth, because browser shim for `util` +package is large and `inherits` is often the single function you need +from it. + +It's recommended to use this package instead of +`require('util').inherits` for any code that has chances to be used +not only in node.js but in browser too. + +## usage + +```js +var inherits = require('inherits'); +// then use exactly as the standard one +``` + +## note on version ~1.0 + +Version ~1.0 had completely different motivation and is not compatible +neither with 2.0 nor with standard node.js `inherits`. + +If you are using version ~1.0 and planning to switch to ~2.0, be +careful: + +* new version uses `super_` instead of `super` for referencing + superclass +* new version overwrites current prototype while old one preserves any + existing fields on it diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/inherits.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/inherits.js new file mode 100644 index 0000000..29f5e24 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/inherits.js @@ -0,0 +1 @@ +module.exports = require('util').inherits diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/inherits_browser.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/inherits_browser.js new file mode 100644 index 0000000..c1e78a7 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/inherits_browser.js @@ -0,0 +1,23 @@ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/package.json b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/package.json new file mode 100644 index 0000000..93d5078 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/package.json @@ -0,0 +1,50 @@ +{ + "name": "inherits", + "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", + "version": "2.0.1", + "keywords": [ + "inheritance", + "class", + "klass", + "oop", + "object-oriented", + "inherits", + "browser", + "browserify" + ], + "main": "./inherits.js", + "browser": "./inherits_browser.js", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/inherits.git" + }, + "license": "ISC", + "scripts": { + "test": "node test" + }, + "bugs": { + "url": "https://github.com/isaacs/inherits/issues" + }, + "_id": "inherits@2.0.1", + "dist": { + "shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1", + "tarball": "http://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "_from": "inherits@>=2.0.1 <2.1.0", + "_npmVersion": "1.3.8", + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "directories": {}, + "_shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1", + "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "readme": "ERROR: No README data found!", + "homepage": "https://github.com/isaacs/inherits#readme" +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/test.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/test.js new file mode 100644 index 0000000..fc53012 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/inherits/test.js @@ -0,0 +1,25 @@ +var inherits = require('./inherits.js') +var assert = require('assert') + +function test(c) { + assert(c.constructor === Child) + assert(c.constructor.super_ === Parent) + assert(Object.getPrototypeOf(c) === Child.prototype) + assert(Object.getPrototypeOf(Object.getPrototypeOf(c)) === Parent.prototype) + assert(c instanceof Child) + assert(c instanceof Parent) +} + +function Child() { + Parent.call(this) + test(this) +} + +function Parent() {} + +inherits(Child, Parent) + +var c = new Child +test(c) + +console.log('ok') diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/README.markdown b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/README.markdown new file mode 100644 index 0000000..71d9a93 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/README.markdown @@ -0,0 +1,34 @@ +jsonify +======= + +This module provides Douglas Crockford's JSON implementation without modifying +any globals. + +`stringify` and `parse` are merely exported without respect to whether or not a +global `JSON` object exists. + +methods +======= + +var json = require('jsonify'); + +json.parse(source, reviver) +--------------------------- + +Return a new javascript object from a parse of the `source` string. + +If a `reviver` function is specified, walk the structure passing each name/value +pair to `reviver.call(parent, key, value)` to transform the `value` before +parsing it. + +json.stringify(value, replacer, space) +-------------------------------------- + +Return a string representation for `value`. + +If `replacer` is specified, walk the structure passing each name/value pair to +`replacer.call(parent, key, value)` to transform the `value` before stringifying +it. + +If `space` is a number, indent the result by that many spaces. +If `space` is a string, use `space` as the indentation. diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/index.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/index.js new file mode 100644 index 0000000..f728a16 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/index.js @@ -0,0 +1,2 @@ +exports.parse = require('./lib/parse'); +exports.stringify = require('./lib/stringify'); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/lib/parse.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/lib/parse.js new file mode 100644 index 0000000..30e2f01 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/lib/parse.js @@ -0,0 +1,273 @@ +var at, // The index of the current character + ch, // The current character + escapee = { + '"': '"', + '\\': '\\', + '/': '/', + b: '\b', + f: '\f', + n: '\n', + r: '\r', + t: '\t' + }, + text, + + error = function (m) { + // Call error when something is wrong. + throw { + name: 'SyntaxError', + message: m, + at: at, + text: text + }; + }, + + next = function (c) { + // If a c parameter is provided, verify that it matches the current character. + if (c && c !== ch) { + error("Expected '" + c + "' instead of '" + ch + "'"); + } + + // Get the next character. When there are no more characters, + // return the empty string. + + ch = text.charAt(at); + at += 1; + return ch; + }, + + number = function () { + // Parse a number value. + var number, + string = ''; + + if (ch === '-') { + string = '-'; + next('-'); + } + while (ch >= '0' && ch <= '9') { + string += ch; + next(); + } + if (ch === '.') { + string += '.'; + while (next() && ch >= '0' && ch <= '9') { + string += ch; + } + } + if (ch === 'e' || ch === 'E') { + string += ch; + next(); + if (ch === '-' || ch === '+') { + string += ch; + next(); + } + while (ch >= '0' && ch <= '9') { + string += ch; + next(); + } + } + number = +string; + if (!isFinite(number)) { + error("Bad number"); + } else { + return number; + } + }, + + string = function () { + // Parse a string value. + var hex, + i, + string = '', + uffff; + + // When parsing for string values, we must look for " and \ characters. + if (ch === '"') { + while (next()) { + if (ch === '"') { + next(); + return string; + } else if (ch === '\\') { + next(); + if (ch === 'u') { + uffff = 0; + for (i = 0; i < 4; i += 1) { + hex = parseInt(next(), 16); + if (!isFinite(hex)) { + break; + } + uffff = uffff * 16 + hex; + } + string += String.fromCharCode(uffff); + } else if (typeof escapee[ch] === 'string') { + string += escapee[ch]; + } else { + break; + } + } else { + string += ch; + } + } + } + error("Bad string"); + }, + + white = function () { + +// Skip whitespace. + + while (ch && ch <= ' ') { + next(); + } + }, + + word = function () { + +// true, false, or null. + + switch (ch) { + case 't': + next('t'); + next('r'); + next('u'); + next('e'); + return true; + case 'f': + next('f'); + next('a'); + next('l'); + next('s'); + next('e'); + return false; + case 'n': + next('n'); + next('u'); + next('l'); + next('l'); + return null; + } + error("Unexpected '" + ch + "'"); + }, + + value, // Place holder for the value function. + + array = function () { + +// Parse an array value. + + var array = []; + + if (ch === '[') { + next('['); + white(); + if (ch === ']') { + next(']'); + return array; // empty array + } + while (ch) { + array.push(value()); + white(); + if (ch === ']') { + next(']'); + return array; + } + next(','); + white(); + } + } + error("Bad array"); + }, + + object = function () { + +// Parse an object value. + + var key, + object = {}; + + if (ch === '{') { + next('{'); + white(); + if (ch === '}') { + next('}'); + return object; // empty object + } + while (ch) { + key = string(); + white(); + next(':'); + if (Object.hasOwnProperty.call(object, key)) { + error('Duplicate key "' + key + '"'); + } + object[key] = value(); + white(); + if (ch === '}') { + next('}'); + return object; + } + next(','); + white(); + } + } + error("Bad object"); + }; + +value = function () { + +// Parse a JSON value. It could be an object, an array, a string, a number, +// or a word. + + white(); + switch (ch) { + case '{': + return object(); + case '[': + return array(); + case '"': + return string(); + case '-': + return number(); + default: + return ch >= '0' && ch <= '9' ? number() : word(); + } +}; + +// Return the json_parse function. It will have access to all of the above +// functions and variables. + +module.exports = function (source, reviver) { + var result; + + text = source; + at = 0; + ch = ' '; + result = value(); + white(); + if (ch) { + error("Syntax error"); + } + + // If there is a reviver function, we recursively walk the new structure, + // passing each name/value pair to the reviver function for possible + // transformation, starting with a temporary root object that holds the result + // in an empty key. If there is not a reviver function, we simply return the + // result. + + return typeof reviver === 'function' ? (function walk(holder, key) { + var k, v, value = holder[key]; + if (value && typeof value === 'object') { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + }({'': result}, '')) : result; +}; diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/lib/stringify.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/lib/stringify.js new file mode 100644 index 0000000..1345870 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/lib/stringify.js @@ -0,0 +1,154 @@ +var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, + gap, + indent, + meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + rep; + +function quote(string) { + // If the string contains no control characters, no quote characters, and no + // backslash characters, then we can safely slap some quotes around it. + // Otherwise we must also replace the offending characters with safe escape + // sequences. + + escapable.lastIndex = 0; + return escapable.test(string) ? '"' + string.replace(escapable, function (a) { + var c = meta[a]; + return typeof c === 'string' ? c : + '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; +} + +function str(key, holder) { + // Produce a string from holder[key]. + var i, // The loop counter. + k, // The member key. + v, // The member value. + length, + mind = gap, + partial, + value = holder[key]; + + // If the value has a toJSON method, call it to obtain a replacement value. + if (value && typeof value === 'object' && + typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + // If we were called with a replacer function, then call the replacer to + // obtain a replacement value. + if (typeof rep === 'function') { + value = rep.call(holder, key, value); + } + + // What happens next depends on the value's type. + switch (typeof value) { + case 'string': + return quote(value); + + case 'number': + // JSON numbers must be finite. Encode non-finite numbers as null. + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + // If the value is a boolean or null, convert it to a string. Note: + // typeof null does not produce 'null'. The case is included here in + // the remote chance that this gets fixed someday. + return String(value); + + case 'object': + if (!value) return 'null'; + gap += indent; + partial = []; + + // Array.isArray + if (Object.prototype.toString.apply(value) === '[object Array]') { + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || 'null'; + } + + // Join all of the elements together, separated with commas, and + // wrap them in brackets. + v = partial.length === 0 ? '[]' : gap ? + '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : + '[' + partial.join(',') + ']'; + gap = mind; + return v; + } + + // If the replacer is an array, use it to select the members to be + // stringified. + if (rep && typeof rep === 'object') { + length = rep.length; + for (i = 0; i < length; i += 1) { + k = rep[i]; + if (typeof k === 'string') { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + else { + // Otherwise, iterate through all of the keys in the object. + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + (gap ? ': ' : ':') + v); + } + } + } + } + + // Join all of the member texts together, separated with commas, + // and wrap them in braces. + + v = partial.length === 0 ? '{}' : gap ? + '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : + '{' + partial.join(',') + '}'; + gap = mind; + return v; + } +} + +module.exports = function (value, replacer, space) { + var i; + gap = ''; + indent = ''; + + // If the space parameter is a number, make an indent string containing that + // many spaces. + if (typeof space === 'number') { + for (i = 0; i < space; i += 1) { + indent += ' '; + } + } + // If the space parameter is a string, it will be used as the indent string. + else if (typeof space === 'string') { + indent = space; + } + + // If there is a replacer, it must be a function or an array. + // Otherwise, throw an error. + rep = replacer; + if (replacer && typeof replacer !== 'function' + && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) { + throw new Error('JSON.stringify'); + } + + // Make a fake root object containing our value under the key of ''. + // Return the result of stringifying the value. + return str('', {'': value}); +}; diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/package.json b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/package.json new file mode 100644 index 0000000..0ad78d1 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/package.json @@ -0,0 +1,52 @@ +{ + "name": "jsonify", + "version": "0.0.0", + "description": "JSON without touching any globals", + "main": "index.js", + "directories": { + "lib": ".", + "test": "test" + }, + "devDependencies": { + "tap": "0.0.x", + "garbage": "0.0.x" + }, + "scripts": { + "test": "tap test" + }, + "repository": { + "type": "git", + "url": "git://github.com/substack/jsonify.git" + }, + "keywords": [ + "json", + "browser" + ], + "author": { + "name": "Douglas Crockford", + "url": "http://crockford.com/" + }, + "license": "Public Domain", + "_id": "jsonify@0.0.0", + "dependencies": {}, + "engines": { + "node": "*" + }, + "_engineSupported": true, + "_npmVersion": "1.0.10", + "_nodeVersion": "v0.5.0-pre", + "_defaultsLoaded": true, + "dist": { + "shasum": "2c74b6ee41d93ca51b7b5aaee8f503631d252a73", + "tarball": "http://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" + }, + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "_shasum": "2c74b6ee41d93ca51b7b5aaee8f503631d252a73", + "_resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "_from": "jsonify@>=0.0.0 <0.1.0" +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/test/parse.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/test/parse.js new file mode 100644 index 0000000..e2313f5 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/test/parse.js @@ -0,0 +1,16 @@ +var test = require('tap').test; +var json = require('../'); +var garbage = require('garbage'); + +test('parse', function (t) { + for (var i = 0; i < 50; i++) { + var s = JSON.stringify(garbage(50)); + + t.deepEqual( + json.parse(s), + JSON.parse(s) + ); + } + + t.end(); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/test/stringify.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/test/stringify.js new file mode 100644 index 0000000..89b0b67 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/jsonify/test/stringify.js @@ -0,0 +1,15 @@ +var test = require('tap').test; +var json = require('../'); +var garbage = require('garbage'); + +test('stringify', function (t) { + for (var i = 0; i < 50; i++) { + var obj = garbage(50); + t.equal( + json.stringify(obj), + JSON.stringify(obj) + ); + } + + t.end(); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/.travis.yml b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/.travis.yml new file mode 100644 index 0000000..cc4dba2 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - "0.8" + - "0.10" diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/LICENSE b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/LICENSE new file mode 100644 index 0000000..ee27ba4 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/LICENSE @@ -0,0 +1,18 @@ +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. diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/example/resume.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/example/resume.js new file mode 100644 index 0000000..d04e61a --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/example/resume.js @@ -0,0 +1,8 @@ +var resumer = require('../'); +createStream().pipe(process.stdout); + +function createStream () { + var stream = resumer(); + stream.queue('beep boop\n'); + return stream; +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/index.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/index.js new file mode 100644 index 0000000..14de798 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/index.js @@ -0,0 +1,29 @@ +var through = require('through'); +var nextTick = typeof setImmediate !== 'undefined' + ? setImmediate + : process.nextTick +; + +module.exports = function (write, end) { + var tr = through(write, end); + tr.pause(); + var resume = tr.resume; + var pause = tr.pause; + var paused = false; + + tr.pause = function () { + paused = true; + return pause.apply(this, arguments); + }; + + tr.resume = function () { + paused = false; + return resume.apply(this, arguments); + }; + + nextTick(function () { + if (!paused) tr.resume(); + }); + + return tr; +}; diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/package.json b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/package.json new file mode 100644 index 0000000..6c6e5fb --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/package.json @@ -0,0 +1,68 @@ +{ + "name": "resumer", + "version": "0.0.0", + "description": "a through stream that starts paused and resumes on the next tick", + "main": "index.js", + "dependencies": { + "through": "~2.3.4" + }, + "devDependencies": { + "tap": "~0.4.0", + "tape": "~1.0.2", + "concat-stream": "~0.1.1" + }, + "scripts": { + "test": "tap test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "chrome/20..latest", + "firefox/10..latest", + "safari/latest", + "opera/11.0..latest", + "iphone/6", + "ipad/6" + ] + }, + "repository": { + "type": "git", + "url": "git://github.com/substack/resumer.git" + }, + "homepage": "https://github.com/substack/resumer", + "keywords": [ + "through", + "stream", + "pause", + "resume" + ], + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "license": "MIT", + "readme": "# resumer\n\nReturn a through stream that starts out paused and resumes on the next tick,\nunless somebody called `.pause()`.\n\nThis module has the same signature as\n[through](https://npmjs.com/package/through).\n\n[![browser support](https://ci.testling.com/substack/resumer.png)](http://ci.testling.com/substack/resumer)\n\n[![build status](https://secure.travis-ci.org/substack/resumer.png)](http://travis-ci.org/substack/resumer)\n\n# example\n\n``` js\nvar resumer = require('resumer');\nvar s = createStream();\ns.pipe(process.stdout);\n\nfunction createStream () {\n var stream = resumer();\n stream.queue('beep boop\\n');\n return stream;\n}\n```\n\n```\n$ node example/resume.js\nbeep boop\n```\n\n# methods\n\n``` js\nvar resumer = require('resumer')\n```\n\n## resumer(write, end)\n\nReturn a new through stream from `write` and `end`, which default to\npass-through `.queue()` functions if not specified.\n\nThe stream starts out paused and will be resumed on the next tick unless you\ncall `.pause()` first.\n\n`write` and `end` get passed directly through to\n[through](https://npmjs.com/package/through).\n\n# install\n\nWith [npm](https://npmjs.org) do:\n\n```\nnpm install resumer\n```\n\n# license\n\nMIT\n", + "readmeFilename": "readme.markdown", + "_id": "resumer@0.0.0", + "dist": { + "shasum": "f1e8f461e4064ba39e82af3cdc2a8c893d076759", + "tarball": "http://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz" + }, + "_from": "resumer@>=0.0.0 <0.1.0", + "_npmVersion": "1.2.2", + "_npmUser": { + "name": "substack", + "email": "mail@substack.net" + }, + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "directories": {}, + "_shasum": "f1e8f461e4064ba39e82af3cdc2a8c893d076759", + "_resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz" +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/readme.markdown b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/readme.markdown new file mode 100644 index 0000000..5d9df66 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/readme.markdown @@ -0,0 +1,59 @@ +# resumer + +Return a through stream that starts out paused and resumes on the next tick, +unless somebody called `.pause()`. + +This module has the same signature as +[through](https://npmjs.com/package/through). + +[![browser support](https://ci.testling.com/substack/resumer.png)](http://ci.testling.com/substack/resumer) + +[![build status](https://secure.travis-ci.org/substack/resumer.png)](http://travis-ci.org/substack/resumer) + +# example + +``` js +var resumer = require('resumer'); +var s = createStream(); +s.pipe(process.stdout); + +function createStream () { + var stream = resumer(); + stream.queue('beep boop\n'); + return stream; +} +``` + +``` +$ node example/resume.js +beep boop +``` + +# methods + +``` js +var resumer = require('resumer') +``` + +## resumer(write, end) + +Return a new through stream from `write` and `end`, which default to +pass-through `.queue()` functions if not specified. + +The stream starts out paused and will be resumed on the next tick unless you +call `.pause()` first. + +`write` and `end` get passed directly through to +[through](https://npmjs.com/package/through). + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install resumer +``` + +# license + +MIT diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/test/resume.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/test/resume.js new file mode 100644 index 0000000..1eaecac --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/test/resume.js @@ -0,0 +1,37 @@ +var test = require('tape'); +var resumer = require('../'); +var concat = require('concat-stream'); + +test('implicit resume', function (t) { + t.plan(1); + + var s = createStream(); + s.pipe(concat(function (err, body) { + t.equal(body, 'beep boop\n'); + })); +}); + +test('pause/resume', function (t) { + t.plan(2); + + var s = createStream(); + s.pause(); + + var paused = true; + setTimeout(function () { + paused = false; + s.resume(); + }, 100); + + s.pipe(concat(function (err, body) { + t.equal(paused, false); + t.equal(body, 'beep boop\n'); + })); +}); + +function createStream () { + var stream = resumer(); + stream.queue('beep boop\n'); + stream.queue(null); + return stream; +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/test/through.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/test/through.js new file mode 100644 index 0000000..ddcaf48 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/resumer/test/through.js @@ -0,0 +1,36 @@ +var test = require('tape'); +var resumer = require('../'); +var concat = require('concat-stream'); + +test('through write/end', function (t) { + t.plan(2); + + var s = createStream(); + + s.on('okok', function () { + t.ok(true); + }); + + s.pipe(concat(function (err, body) { + t.equal(body, 'BEGIN\nRAWR\nEND\n'); + })); + + setTimeout(function () { + s.end('rawr\n'); + }, 50); +}); + +function createStream () { + var stream = resumer(write, end); + stream.queue('BEGIN\n'); + return stream; + + function write (x) { + this.queue(String(x).toUpperCase()); + } + function end () { + this.emit('okok'); + this.queue('END\n'); + this.queue(null); + } +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/.travis.yml b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/.travis.yml new file mode 100644 index 0000000..c693a93 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - 0.6 + - 0.8 + - "0.10" diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/LICENSE.APACHE2 b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/LICENSE.APACHE2 new file mode 100644 index 0000000..6366c04 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/LICENSE.APACHE2 @@ -0,0 +1,15 @@ +Apache License, Version 2.0 + +Copyright (c) 2011 Dominic Tarr + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/LICENSE.MIT b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/LICENSE.MIT new file mode 100644 index 0000000..6eafbd7 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/LICENSE.MIT @@ -0,0 +1,24 @@ +The MIT License + +Copyright (c) 2011 Dominic Tarr + +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. diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/index.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/index.js new file mode 100644 index 0000000..ca5fc59 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/index.js @@ -0,0 +1,108 @@ +var Stream = require('stream') + +// through +// +// a stream that does nothing but re-emit the input. +// useful for aggregating a series of changing but not ending streams into one stream) + +exports = module.exports = through +through.through = through + +//create a readable writable stream. + +function through (write, end, opts) { + write = write || function (data) { this.queue(data) } + end = end || function () { this.queue(null) } + + var ended = false, destroyed = false, buffer = [], _ended = false + var stream = new Stream() + stream.readable = stream.writable = true + stream.paused = false + +// stream.autoPause = !(opts && opts.autoPause === false) + stream.autoDestroy = !(opts && opts.autoDestroy === false) + + stream.write = function (data) { + write.call(this, data) + return !stream.paused + } + + function drain() { + while(buffer.length && !stream.paused) { + var data = buffer.shift() + if(null === data) + return stream.emit('end') + else + stream.emit('data', data) + } + } + + stream.queue = stream.push = function (data) { +// console.error(ended) + if(_ended) return stream + if(data === null) _ended = true + buffer.push(data) + drain() + return stream + } + + //this will be registered as the first 'end' listener + //must call destroy next tick, to make sure we're after any + //stream piped from here. + //this is only a problem if end is not emitted synchronously. + //a nicer way to do this is to make sure this is the last listener for 'end' + + stream.on('end', function () { + stream.readable = false + if(!stream.writable && stream.autoDestroy) + process.nextTick(function () { + stream.destroy() + }) + }) + + function _end () { + stream.writable = false + end.call(stream) + if(!stream.readable && stream.autoDestroy) + stream.destroy() + } + + stream.end = function (data) { + if(ended) return + ended = true + if(arguments.length) stream.write(data) + _end() // will emit or queue + return stream + } + + stream.destroy = function () { + if(destroyed) return + destroyed = true + ended = true + buffer.length = 0 + stream.writable = stream.readable = false + stream.emit('close') + return stream + } + + stream.pause = function () { + if(stream.paused) return + stream.paused = true + return stream + } + + stream.resume = function () { + if(stream.paused) { + stream.paused = false + stream.emit('resume') + } + drain() + //may have become paused again, + //as drain emits 'data'. + if(!stream.paused) + stream.emit('drain') + return stream + } + return stream +} + diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/package.json b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/package.json new file mode 100644 index 0000000..c6433ea --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/package.json @@ -0,0 +1,65 @@ +{ + "name": "through", + "version": "2.3.8", + "description": "simplified stream construction", + "main": "index.js", + "scripts": { + "test": "set -e; for t in test/*.js; do node $t; done" + }, + "devDependencies": { + "stream-spec": "~0.3.5", + "tape": "~2.3.2", + "from": "~0.1.3" + }, + "keywords": [ + "stream", + "streams", + "user-streams", + "pipe" + ], + "author": { + "name": "Dominic Tarr", + "email": "dominic.tarr@gmail.com", + "url": "dominictarr.com" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/dominictarr/through.git" + }, + "homepage": "https://github.com/dominictarr/through", + "testling": { + "browsers": [ + "ie/8..latest", + "ff/15..latest", + "chrome/20..latest", + "safari/5.1..latest" + ], + "files": "test/*.js" + }, + "gitHead": "2c5a6f9a0cc54da759b6e10964f2081c358e49dc", + "bugs": { + "url": "https://github.com/dominictarr/through/issues" + }, + "_id": "through@2.3.8", + "_shasum": "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5", + "_from": "through@>=2.3.4 <2.4.0", + "_npmVersion": "2.12.0", + "_nodeVersion": "2.3.1", + "_npmUser": { + "name": "dominictarr", + "email": "dominic.tarr@gmail.com" + }, + "maintainers": [ + { + "name": "dominictarr", + "email": "dominic.tarr@gmail.com" + } + ], + "dist": { + "shasum": "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5", + "tarball": "http://registry.npmjs.org/through/-/through-2.3.8.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/readme.markdown b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/readme.markdown new file mode 100644 index 0000000..cb34c81 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/readme.markdown @@ -0,0 +1,64 @@ +#through + +[![build status](https://secure.travis-ci.org/dominictarr/through.png)](http://travis-ci.org/dominictarr/through) +[![testling badge](https://ci.testling.com/dominictarr/through.png)](https://ci.testling.com/dominictarr/through) + +Easy way to create a `Stream` that is both `readable` and `writable`. + +* Pass in optional `write` and `end` methods. +* `through` takes care of pause/resume logic if you use `this.queue(data)` instead of `this.emit('data', data)`. +* Use `this.pause()` and `this.resume()` to manage flow. +* Check `this.paused` to see current flow state. (`write` always returns `!this.paused`). + +This function is the basis for most of the synchronous streams in +[event-stream](http://github.com/dominictarr/event-stream). + +``` js +var through = require('through') + +through(function write(data) { + this.queue(data) //data *must* not be null + }, + function end () { //optional + this.queue(null) + }) +``` + +Or, can also be used _without_ buffering on pause, use `this.emit('data', data)`, +and this.emit('end') + +``` js +var through = require('through') + +through(function write(data) { + this.emit('data', data) + //this.pause() + }, + function end () { //optional + this.emit('end') + }) +``` + +## Extended Options + +You will probably not need these 99% of the time. + +### autoDestroy=false + +By default, `through` emits close when the writable +and readable side of the stream has ended. +If that is not desired, set `autoDestroy=false`. + +``` js +var through = require('through') + +//like this +var ts = through(write, end, {autoDestroy: false}) +//or like this +var ts = through(write, end) +ts.autoDestroy = false +``` + +## License + +MIT / Apache2 diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/async.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/async.js new file mode 100644 index 0000000..46bdbae --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/async.js @@ -0,0 +1,28 @@ +var from = require('from') +var through = require('../') + +var tape = require('tape') + +tape('simple async example', function (t) { + + var n = 0, expected = [1,2,3,4,5], actual = [] + from(expected) + .pipe(through(function(data) { + this.pause() + n ++ + setTimeout(function(){ + console.log('pushing data', data) + this.push(data) + this.resume() + }.bind(this), 300) + })).pipe(through(function(data) { + console.log('pushing data second time', data); + this.push(data) + })).on('data', function (d) { + actual.push(d) + }).on('end', function() { + t.deepEqual(actual, expected) + t.end() + }) + +}) diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/auto-destroy.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/auto-destroy.js new file mode 100644 index 0000000..9a8fd00 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/auto-destroy.js @@ -0,0 +1,30 @@ +var test = require('tape') +var through = require('../') + +// must emit end before close. + +test('end before close', function (assert) { + var ts = through() + ts.autoDestroy = false + var ended = false, closed = false + + ts.on('end', function () { + assert.ok(!closed) + ended = true + }) + ts.on('close', function () { + assert.ok(ended) + closed = true + }) + + ts.write(1) + ts.write(2) + ts.write(3) + ts.end() + assert.ok(ended) + assert.notOk(closed) + ts.destroy() + assert.ok(closed) + assert.end() +}) + diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/buffering.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/buffering.js new file mode 100644 index 0000000..b0084bf --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/buffering.js @@ -0,0 +1,71 @@ +var test = require('tape') +var through = require('../') + +// must emit end before close. + +test('buffering', function(assert) { + var ts = through(function (data) { + this.queue(data) + }, function () { + this.queue(null) + }) + + var ended = false, actual = [] + + ts.on('data', actual.push.bind(actual)) + ts.on('end', function () { + ended = true + }) + + ts.write(1) + ts.write(2) + ts.write(3) + assert.deepEqual(actual, [1, 2, 3]) + ts.pause() + ts.write(4) + ts.write(5) + ts.write(6) + assert.deepEqual(actual, [1, 2, 3]) + ts.resume() + assert.deepEqual(actual, [1, 2, 3, 4, 5, 6]) + ts.pause() + ts.end() + assert.ok(!ended) + ts.resume() + assert.ok(ended) + assert.end() +}) + +test('buffering has data in queue, when ends', function (assert) { + + /* + * If stream ends while paused with data in the queue, + * stream should still emit end after all data is written + * on resume. + */ + + var ts = through(function (data) { + this.queue(data) + }, function () { + this.queue(null) + }) + + var ended = false, actual = [] + + ts.on('data', actual.push.bind(actual)) + ts.on('end', function () { + ended = true + }) + + ts.pause() + ts.write(1) + ts.write(2) + ts.write(3) + ts.end() + assert.deepEqual(actual, [], 'no data written yet, still paused') + assert.ok(!ended, 'end not emitted yet, still paused') + ts.resume() + assert.deepEqual(actual, [1, 2, 3], 'resumed, all data should be delivered') + assert.ok(ended, 'end should be emitted once all data was delivered') + assert.end(); +}) diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/end.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/end.js new file mode 100644 index 0000000..fa113f5 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/end.js @@ -0,0 +1,45 @@ +var test = require('tape') +var through = require('../') + +// must emit end before close. + +test('end before close', function (assert) { + var ts = through() + var ended = false, closed = false + + ts.on('end', function () { + assert.ok(!closed) + ended = true + }) + ts.on('close', function () { + assert.ok(ended) + closed = true + }) + + ts.write(1) + ts.write(2) + ts.write(3) + ts.end() + assert.ok(ended) + assert.ok(closed) + assert.end() +}) + +test('end only once', function (t) { + + var ts = through() + var ended = false, closed = false + + ts.on('end', function () { + t.equal(ended, false) + ended = true + }) + + ts.queue(null) + ts.queue(null) + ts.queue(null) + + ts.resume() + + t.end() +}) diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/index.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/index.js new file mode 100644 index 0000000..96da82f --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/node_modules/through/test/index.js @@ -0,0 +1,133 @@ + +var test = require('tape') +var spec = require('stream-spec') +var through = require('../') + +/* + I'm using these two functions, and not streams and pipe + so there is less to break. if this test fails it must be + the implementation of _through_ +*/ + +function write(array, stream) { + array = array.slice() + function next() { + while(array.length) + if(stream.write(array.shift()) === false) + return stream.once('drain', next) + + stream.end() + } + + next() +} + +function read(stream, callback) { + var actual = [] + stream.on('data', function (data) { + actual.push(data) + }) + stream.once('end', function () { + callback(null, actual) + }) + stream.once('error', function (err) { + callback(err) + }) +} + +test('simple defaults', function(assert) { + + var l = 1000 + , expected = [] + + while(l--) expected.push(l * Math.random()) + + var t = through() + var s = spec(t).through().pausable() + + read(t, function (err, actual) { + assert.ifError(err) + assert.deepEqual(actual, expected) + assert.end() + }) + + t.on('close', s.validate) + + write(expected, t) +}); + +test('simple functions', function(assert) { + + var l = 1000 + , expected = [] + + while(l--) expected.push(l * Math.random()) + + var t = through(function (data) { + this.emit('data', data*2) + }) + var s = spec(t).through().pausable() + + + read(t, function (err, actual) { + assert.ifError(err) + assert.deepEqual(actual, expected.map(function (data) { + return data*2 + })) + assert.end() + }) + + t.on('close', s.validate) + + write(expected, t) +}) + +test('pauses', function(assert) { + + var l = 1000 + , expected = [] + + while(l--) expected.push(l) //Math.random()) + + var t = through() + + var s = spec(t) + .through() + .pausable() + + t.on('data', function () { + if(Math.random() > 0.1) return + t.pause() + process.nextTick(function () { + t.resume() + }) + }) + + read(t, function (err, actual) { + assert.ifError(err) + assert.deepEqual(actual, expected) + }) + + t.on('close', function () { + s.validate() + assert.end() + }) + + write(expected, t) +}) + +test('does not soft-end on `undefined`', function(assert) { + var stream = through() + , count = 0 + + stream.on('data', function (data) { + count++ + }) + + stream.write(undefined) + stream.write(undefined) + + assert.equal(count, 2) + + assert.end() +}) diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/package.json b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/package.json new file mode 100644 index 0000000..418d225 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/package.json @@ -0,0 +1,80 @@ +{ + "name": "tape", + "version": "2.3.3", + "description": "tap-producing test harness for node and browsers", + "main": "index.js", + "bin": { + "tape": "./bin/tape" + }, + "directories": { + "example": "example", + "test": "test" + }, + "dependencies": { + "jsonify": "~0.0.0", + "deep-equal": "~0.1.0", + "defined": "~0.0.0", + "through": "~2.3.4", + "resumer": "~0.0.0", + "inherits": "~2.0.1" + }, + "devDependencies": { + "tap": "~0.3.0", + "falafel": "~0.1.4" + }, + "scripts": { + "test": "tap test/*.js" + }, + "testling": { + "files": "test/browser/*.js", + "browsers": [ + "ie/6..latest", + "chrome/20..latest", + "firefox/10..latest", + "safari/latest", + "opera/11.0..latest", + "iphone/6", + "ipad/6" + ] + }, + "repository": { + "type": "git", + "url": "git://github.com/substack/tape.git" + }, + "homepage": "https://github.com/substack/tape", + "keywords": [ + "tap", + "test", + "harness", + "assert", + "browser" + ], + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/substack/tape/issues" + }, + "_id": "tape@2.3.3", + "dist": { + "shasum": "2e7ce0a31df09f8d6851664a71842e0ca5057af7", + "tarball": "http://registry.npmjs.org/tape/-/tape-2.3.3.tgz" + }, + "_from": "tape@>=2.3.2 <2.4.0", + "_npmVersion": "1.4.6", + "_npmUser": { + "name": "substack", + "email": "mail@substack.net" + }, + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "_shasum": "2e7ce0a31df09f8d6851664a71842e0ca5057af7", + "_resolved": "https://registry.npmjs.org/tape/-/tape-2.3.3.tgz" +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/readme.markdown b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/readme.markdown new file mode 100644 index 0000000..800da36 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/readme.markdown @@ -0,0 +1,199 @@ +# tape + +tap-producing test harness for node and browsers + +[![browser support](https://ci.testling.com/substack/tape.png)](http://ci.testling.com/substack/tape) + +[![build status](https://secure.travis-ci.org/substack/tape.png)](http://travis-ci.org/substack/tape) + +![tape](http://substack.net/images/tape_drive.png) + +# browser compatibility + +chrome, firefox, opera, safari, IE6, IE7, IE8, IE9 + +using browserify@1.16.5 + +# example + +``` js +var test = require('tape'); + +test('timing test', function (t) { + t.plan(2); + + t.equal(typeof Date.now, 'function'); + var start = Date.now(); + + setTimeout(function () { + t.equal(Date.now() - start, 100); + }, 100); +}); +``` + +``` +$ node example/timing.js +TAP version 13 +# timing test +ok 1 should be equal +not ok 2 should be equal + --- + operator: equal + expected: 100 + actual: 107 + ... + +1..2 +# tests 2 +# pass 1 +# fail 1 +``` + +# methods + +The assertion methods in tape are heavily influenced or copied from the methods +in [node-tap](https://github.com/isaacs/node-tap). + +``` +var test = require('tape') +``` + +## test(name, cb) + +Create a new test with an optional `name` string. `cb(t)` fires with the new +test object `t` once all preceeding tests have finished. Tests execute serially. + +If you forget to `t.plan()` out how many assertions you are going to run and you +don't call `t.end()` explicitly, your test will hang. + +## t.plan(n) + +Declare that `n` assertions should be run. `t.end()` will be called +automatically after the `n`th assertion. If there are any more assertions after +the `n`th, or after `t.end()` is called, they will generate errors. + +## t.end() + +Declare the end of a test explicitly. + +## t.fail(msg) + +Generate a failing assertion with a message `msg`. + +## t.pass(msg) + +Generate a passing assertion with a message `msg`. + +## t.skip(msg) + +Generate an assertion that will be skipped over. + +## t.ok(value, msg) + +Assert that `value` is truthy with an optional description message `msg`. + +Aliases: `t.true()`, `t.assert()` + +## t.notOk(value, msg) + +Assert that `value` is falsy with an optional description message `msg`. + +Aliases: `t.false()`, `t.notok()` + +## t.error(err, msg) + +Assert that `err` is falsy. If `err` is non-falsy, use its `err.message` as the +description message. + +Aliases: `t.ifError()`, `t.ifErr()`, `t.iferror()` + +## t.equal(a, b, msg) + +Assert that `a === b` with an optional description `msg`. + +Aliases: `t.equals()`, `t.isEqual()`, `t.is()`, `t.strictEqual()`, +`t.strictEquals()` + +## t.notEqual(a, b, msg) + +Assert that `a !== b` with an optional description `msg`. + +Aliases: `t.notEquals()`, `t.notStrictEqual()`, `t.notStrictEquals()`, +`t.isNotEqual()`, `t.isNot()`, `t.not()`, `t.doesNotEqual()`, `t.isInequal()` + +## t.deepEqual(a, b, msg) + +Assert that `a` and `b` have the same structure and nested values using +[node's deepEqual() algorithm](https://github.com/substack/node-deep-equal) +with strict comparisons (`===`) on leaf nodes and an optional description +`msg`. + +Aliases: `t.deepEquals()`, `t.isEquivalent()`, `t.same()` + +## t.notDeepEqual(a, b, msg) + +Assert that `a` and `b` do not have the same structure and nested values using +[node's deepEqual() algorithm](https://github.com/substack/node-deep-equal) +with strict comparisons (`===`) on leaf nodes and an optional description +`msg`. + +Aliases: `t.notEquivalent()`, `t.notDeeply()`, `t.notSame()`, +`t.isNotDeepEqual()`, `t.isNotDeeply()`, `t.isNotEquivalent()`, +`t.isInequivalent()` + +## t.deepLooseEqual(a, b, msg) + +Assert that `a` and `b` have the same structure and nested values using +[node's deepEqual() algorithm](https://github.com/substack/node-deep-equal) +with loose comparisons (`==`) on leaf nodes and an optional description `msg`. + +Aliases: `t.looseEqual()`, `t.looseEquals()` + +## t.notDeepLooseEqual(a, b, msg) + +Assert that `a` and `b` do not have the same structure and nested values using +[node's deepEqual() algorithm](https://github.com/substack/node-deep-equal) +with loose comparisons (`==`) on leaf nodes and an optional description `msg`. + +Aliases: `t.notLooseEqual()`, `t.notLooseEquals()` + +## t.throws(fn, expected, msg) + +Assert that the function call `fn()` throws an exception. + +## t.doesNotThrow(fn, expected, msg) + +Assert that the function call `fn()` does not throw an exception. + +## t.test(name, cb) + +Create a subtest with a new test handle `st` from `cb(st)` inside the current +test `t`. `cb(st)` will only fire when `t` finishes. Additional tests queued up +after `t` will not be run until all subtests finish. + +## var htest = test.createHarness() + +Create a new test harness instance, which is a function like `test()`, but with +a new pending stack and test state. + +By default the TAP output goes to `process.stdout` or `console.log()` if the +environment doesn't have `process.stdout`. You can pipe the output to someplace +else if you `test.stream.pipe()` to a destination stream on the first tick. + +## test.only(name, cb) + +Like `test(name, cb)` except if you use `.only` this is the only test case +that will run for the entire process, all other test cases using tape will +be ignored + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install tape +``` + +# license + +MIT diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/add-subtest-async.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/add-subtest-async.js new file mode 100644 index 0000000..74b4d8a --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/add-subtest-async.js @@ -0,0 +1,11 @@ +var test = require('../') + +test('parent', function (t) { + t.pass('parent'); + setTimeout(function () { + t.test('child', function (t) { + t.pass('child'); + t.end(); + }); + }, 100) +}) diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/array.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/array.js new file mode 100644 index 0000000..2d49863 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/array.js @@ -0,0 +1,68 @@ +var falafel = require('falafel'); +var tape = require('../'); +var tap = require('tap'); + +tap.test('array test', function (tt) { + tt.plan(1); + + var test = tape.createHarness(); + var tc = tap.createConsumer(); + + var rows = []; + tc.on('data', function (r) { rows.push(r) }); + tc.on('end', function () { + var rs = rows.map(function (r) { + if (r && typeof r === 'object') { + return { id : r.id, ok : r.ok, name : r.name.trim() }; + } + else return r; + }); + tt.same(rs, [ + 'TAP version 13', + 'array', + { id: 1, ok: true, name: 'should be equivalent' }, + { id: 2, ok: true, name: 'should be equivalent' }, + { id: 3, ok: true, name: 'should be equivalent' }, + { id: 4, ok: true, name: 'should be equivalent' }, + { id: 5, ok: true, name: 'should be equivalent' }, + 'tests 5', + 'pass 5', + 'ok' + ]); + }); + + test.createStream().pipe(tc); + + test('array', function (t) { + t.plan(5); + + var src = '(' + function () { + var xs = [ 1, 2, [ 3, 4 ] ]; + var ys = [ 5, 6 ]; + g([ xs, ys ]); + } + ')()'; + + var output = falafel(src, function (node) { + if (node.type === 'ArrayExpression') { + node.update('fn(' + node.source() + ')'); + } + }); + + var arrays = [ + [ 3, 4 ], + [ 1, 2, [ 3, 4 ] ], + [ 5, 6 ], + [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], + ]; + + Function(['fn','g'], output)( + function (xs) { + t.same(arrays.shift(), xs); + return xs; + }, + function (xs) { + t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); + } + ); + }); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/browser/asserts.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/browser/asserts.js new file mode 100644 index 0000000..a1b24f6 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/browser/asserts.js @@ -0,0 +1,9 @@ +var test = require('../../'); + +test(function (t) { + t.plan(4); + t.ok(true); + t.equal(3, 1+2); + t.deepEqual([1,2,[3,4]], [1,2,[3,4]]); + t.notDeepEqual([1,2,[3,4,5]], [1,2,[3,4]]); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/child_ordering.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/child_ordering.js new file mode 100644 index 0000000..12efafe --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/child_ordering.js @@ -0,0 +1,54 @@ +var test = require('../'); + +var childRan = false; + +test('parent', function(t) { + t.test('child', function(t) { + childRan = true; + t.pass('child ran'); + t.end(); + }); + t.end(); +}); + +test('uncle', function(t) { + t.ok(childRan, 'Child should run before next top-level test'); + t.end(); +}); + +var grandParentRan = false; +var parentRan = false; +var grandChildRan = false; +test('grandparent', function(t) { + t.ok(!grandParentRan, 'grand parent ran twice'); + grandParentRan = true; + t.test('parent', function(t) { + t.ok(!parentRan, 'parent ran twice'); + parentRan = true; + t.test('grandchild', function(t) { + t.ok(!grandChildRan, 'grand child ran twice'); + grandChildRan = true; + t.pass('grand child ran'); + t.end(); + }); + t.pass('parent ran'); + t.end(); + }); + t.test('other parent', function(t) { + t.ok(parentRan, 'first parent runs before second parent'); + t.ok(grandChildRan, 'grandchild runs before second parent'); + t.end(); + }); + t.pass('grandparent ran'); + t.end(); +}); + +test('second grandparent', function(t) { + t.ok(grandParentRan, 'grandparent ran'); + t.ok(parentRan, 'parent ran'); + t.ok(grandChildRan, 'grandchild ran'); + t.pass('other grandparent ran'); + t.end(); +}); + +// vim: set softtabstop=4 shiftwidth=4: diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/circular-things.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/circular-things.js new file mode 100644 index 0000000..4ff4fec --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/circular-things.js @@ -0,0 +1,43 @@ +var tape = require('../'); +var tap = require('tap'); + +tap.test('circular test', function (assert) { + var test = tape.createHarness({ exit : false }); + var tc = tap.createConsumer(); + + var rows = []; + tc.on('data', function (r) { rows.push(r) }); + tc.on('end', function () { + // console.log("rs", rows) + + // console.log("deepEqual?") + + assert.same(rows, [ + "TAP version 13" + , "circular" + , { id: 1 + , ok: false + , name: " should be equal" + , operator: "equal" + , expected: "{}" + , actual: '{"circular":"[Circular]"}' + } + , "tests 1" + , "pass 0" + , "fail 1" + ]) + assert.end() + }) + + // tt.equal(10, 10) + // tt.end() + + test.createStream().pipe(tc); + + test("circular", function (t) { + t.plan(1) + var circular = {} + circular.circular = circular + t.equal(circular, {}) + }) +}) diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/deep.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/deep.js new file mode 100644 index 0000000..02f3681 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/deep.js @@ -0,0 +1,9 @@ +var test = require('../'); + +test('deep strict equal', function (t) { + t.notDeepEqual( + [ { a: '3' } ], + [ { a: 3 } ] + ); + t.end(); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit.js new file mode 100644 index 0000000..7f7c5d0 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit.js @@ -0,0 +1,142 @@ +var tap = require('tap'); +var spawn = require('child_process').spawn; + +tap.test('exit ok', function (t) { + t.plan(2); + + var tc = tap.createConsumer(); + + var rows = []; + tc.on('data', function (r) { rows.push(r) }); + tc.on('end', function () { + var rs = rows.map(function (r) { + if (r && typeof r === 'object') { + return { id : r.id, ok : r.ok, name : r.name.trim() }; + } + else return r; + }); + t.same(rs, [ + 'TAP version 13', + 'array', + { id: 1, ok: true, name: 'should be equivalent' }, + { id: 2, ok: true, name: 'should be equivalent' }, + { id: 3, ok: true, name: 'should be equivalent' }, + { id: 4, ok: true, name: 'should be equivalent' }, + { id: 5, ok: true, name: 'should be equivalent' }, + 'tests 5', + 'pass 5', + 'ok' + ]); + }); + + var ps = spawn(process.execPath, [ __dirname + '/exit/ok.js' ]); + ps.stdout.pipe(tc); + ps.on('exit', function (code) { + t.equal(code, 0); + }); +}); + +tap.test('exit fail', function (t) { + t.plan(2); + + var tc = tap.createConsumer(); + + var rows = []; + tc.on('data', function (r) { rows.push(r) }); + tc.on('end', function () { + var rs = rows.map(function (r) { + if (r && typeof r === 'object') { + return { id : r.id, ok : r.ok, name : r.name.trim() }; + } + else return r; + }); + t.same(rs, [ + 'TAP version 13', + 'array', + { id: 1, ok: true, name: 'should be equivalent' }, + { id: 2, ok: true, name: 'should be equivalent' }, + { id: 3, ok: true, name: 'should be equivalent' }, + { id: 4, ok: true, name: 'should be equivalent' }, + { id: 5, ok: false, name: 'should be equivalent' }, + 'tests 5', + 'pass 4', + 'fail 1' + ]); + }); + + var ps = spawn(process.execPath, [ __dirname + '/exit/fail.js' ]); + ps.stdout.pipe(tc); + ps.on('exit', function (code) { + t.notEqual(code, 0); + }); +}); + +tap.test('too few exit', function (t) { + t.plan(2); + + var tc = tap.createConsumer(); + + var rows = []; + tc.on('data', function (r) { rows.push(r) }); + tc.on('end', function () { + var rs = rows.map(function (r) { + if (r && typeof r === 'object') { + return { id : r.id, ok : r.ok, name : r.name.trim() }; + } + else return r; + }); + t.same(rs, [ + 'TAP version 13', + 'array', + { id: 1, ok: true, name: 'should be equivalent' }, + { id: 2, ok: true, name: 'should be equivalent' }, + { id: 3, ok: true, name: 'should be equivalent' }, + { id: 4, ok: true, name: 'should be equivalent' }, + { id: 5, ok: true, name: 'should be equivalent' }, + { id: 6, ok: false, name: 'plan != count' }, + 'tests 6', + 'pass 5', + 'fail 1' + ]); + }); + + var ps = spawn(process.execPath, [ __dirname + '/exit/too_few.js' ]); + ps.stdout.pipe(tc); + ps.on('exit', function (code) { + t.notEqual(code, 0); + }); +}); + +tap.test('more planned in a second test', function (t) { + t.plan(2); + + var tc = tap.createConsumer(); + + var rows = []; + tc.on('data', function (r) { rows.push(r) }); + tc.on('end', function () { + var rs = rows.map(function (r) { + if (r && typeof r === 'object') { + return { id : r.id, ok : r.ok, name : r.name.trim() }; + } + else return r; + }); + t.same(rs, [ + 'TAP version 13', + 'first', + { id: 1, ok: true, name: '(unnamed assert)' }, + 'second', + { id: 2, ok: true, name: '(unnamed assert)' }, + { id: 3, ok: false, name: 'plan != count' }, + 'tests 3', + 'pass 2', + 'fail 1' + ]); + }); + + var ps = spawn(process.execPath, [ __dirname + '/exit/second.js' ]); + ps.stdout.pipe(tc); + ps.on('exit', function (code) { + t.notEqual(code, 0); + }); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit/fail.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit/fail.js new file mode 100644 index 0000000..d7fd3ce --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit/fail.js @@ -0,0 +1,35 @@ +var test = require('../../'); +var falafel = require('falafel'); + +test('array', function (t) { + t.plan(5); + + var src = '(' + function () { + var xs = [ 1, 2, [ 3, 4 ] ]; + var ys = [ 5, 6 ]; + g([ xs, ys ]); + } + ')()'; + + var output = falafel(src, function (node) { + if (node.type === 'ArrayExpression') { + node.update('fn(' + node.source() + ')'); + } + }); + + var arrays = [ + [ 3, 4 ], + [ 1, 2, [ 3, 4 ] ], + [ 5, 6 ], + [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], + ]; + + Function(['fn','g'], output)( + function (xs) { + t.same(arrays.shift(), xs); + return xs; + }, + function (xs) { + t.same(xs, [ [ 1, 2, [ 3, 4444 ] ], [ 5, 6 ] ]); + } + ); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit/ok.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit/ok.js new file mode 100644 index 0000000..a02c7b6 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit/ok.js @@ -0,0 +1,35 @@ +var falafel = require('falafel'); +var test = require('../../'); + +test('array', function (t) { + t.plan(5); + + var src = '(' + function () { + var xs = [ 1, 2, [ 3, 4 ] ]; + var ys = [ 5, 6 ]; + g([ xs, ys ]); + } + ')()'; + + var output = falafel(src, function (node) { + if (node.type === 'ArrayExpression') { + node.update('fn(' + node.source() + ')'); + } + }); + + var arrays = [ + [ 3, 4 ], + [ 1, 2, [ 3, 4 ] ], + [ 5, 6 ], + [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], + ]; + + Function(['fn','g'], output)( + function (xs) { + t.same(arrays.shift(), xs); + return xs; + }, + function (xs) { + t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); + } + ); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit/second.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit/second.js new file mode 100644 index 0000000..8a206bb --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit/second.js @@ -0,0 +1,11 @@ +var test = require('../../'); + +test('first', function (t) { + t.plan(1); + t.ok(true); +}); + +test('second', function (t) { + t.plan(2); + t.ok(true); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit/too_few.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit/too_few.js new file mode 100644 index 0000000..8e60ce5 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/exit/too_few.js @@ -0,0 +1,35 @@ +var falafel = require('falafel'); +var test = require('../../'); + +test('array', function (t) { + t.plan(6); + + var src = '(' + function () { + var xs = [ 1, 2, [ 3, 4 ] ]; + var ys = [ 5, 6 ]; + g([ xs, ys ]); + } + ')()'; + + var output = falafel(src, function (node) { + if (node.type === 'ArrayExpression') { + node.update('fn(' + node.source() + ')'); + } + }); + + var arrays = [ + [ 3, 4 ], + [ 1, 2, [ 3, 4 ] ], + [ 5, 6 ], + [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], + ]; + + Function(['fn','g'], output)( + function (xs) { + t.same(arrays.shift(), xs); + return xs; + }, + function (xs) { + t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); + } + ); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/fail.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/fail.js new file mode 100644 index 0000000..d56045a --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/fail.js @@ -0,0 +1,68 @@ +var falafel = require('falafel'); +var tape = require('../'); +var tap = require('tap'); + +tap.test('array test', function (tt) { + tt.plan(1); + + var test = tape.createHarness({ exit : false }); + var tc = tap.createConsumer(); + + var rows = []; + tc.on('data', function (r) { rows.push(r) }); + tc.on('end', function () { + var rs = rows.map(function (r) { + if (r && typeof r === 'object') { + return { id : r.id, ok : r.ok, name : r.name.trim() }; + } + else return r; + }); + tt.same(rs, [ + 'TAP version 13', + 'array', + { id: 1, ok: true, name: 'should be equivalent' }, + { id: 2, ok: true, name: 'should be equivalent' }, + { id: 3, ok: true, name: 'should be equivalent' }, + { id: 4, ok: true, name: 'should be equivalent' }, + { id: 5, ok: false, name: 'should be equivalent' }, + 'tests 5', + 'pass 4', + 'fail 1' + ]); + }); + + test.createStream().pipe(tc); + + test('array', function (t) { + t.plan(5); + + var src = '(' + function () { + var xs = [ 1, 2, [ 3, 4 ] ]; + var ys = [ 5, 6 ]; + g([ xs, ys ]); + } + ')()'; + + var output = falafel(src, function (node) { + if (node.type === 'ArrayExpression') { + node.update('fn(' + node.source() + ')'); + } + }); + + var arrays = [ + [ 3, 4 ], + [ 1, 2, [ 3, 4 ] ], + [ 5, 6 ], + [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], + ]; + + Function(['fn','g'], output)( + function (xs) { + t.same(arrays.shift(), xs); + return xs; + }, + function (xs) { + t.same(xs, [ [ 1, 2, [ 3, 4444 ] ], [ 5, 6 ] ]); + } + ); + }); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/many.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/many.js new file mode 100644 index 0000000..10556e5 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/many.js @@ -0,0 +1,8 @@ +var test = require('../'); + +test('many tests', function (t) { + t.plan(100); + for (var i = 0; i < 100; i++) { + setTimeout(function () { t.pass() }, Math.random() * 50); + } +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/max_listeners.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/max_listeners.js new file mode 100644 index 0000000..5edfb15 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/max_listeners.js @@ -0,0 +1,7 @@ +var spawn = require('child_process').spawn; +var ps = spawn(process.execPath, [ __dirname + '/max_listeners/source.js' ]); +ps.stdout.pipe(process.stdout, { end : false }); + +ps.stderr.on('data', function (buf) { + console.log('not ok ' + buf); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/max_listeners/source.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/max_listeners/source.js new file mode 100644 index 0000000..839a327 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/max_listeners/source.js @@ -0,0 +1,5 @@ +var test = require('../../'); + +for (var i = 0; i < 11; i ++) { + test(function (t) { t.end() }); +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/nested-sync-noplan-noend.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/nested-sync-noplan-noend.js new file mode 100644 index 0000000..a206c50 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/nested-sync-noplan-noend.js @@ -0,0 +1,50 @@ +var tape = require('../'); +var tap = require('tap'); + +tap.test('nested sync test without plan or end', function (tt) { + tt.plan(1); + + var test = tape.createHarness(); + var tc = tap.createConsumer(); + + var rows = []; + tc.on('data', function (r) { rows.push(r) }); + tc.on('end', function () { + var rs = rows.map(function (r) { + if (r && typeof r === 'object') { + return { id : r.id, ok : r.ok, name : r.name.trim() }; + } + else return r; + }); + var expected = [ + 'TAP version 13', + 'nested without plan or end', + 'first', + { id: 1, ok: true, name: '(unnamed assert)' }, + 'second', + { id: 2, ok: true, name: '(unnamed assert)' }, + 'tests 2', + 'pass 2', + 'ok' + ] + tt.same(rs, expected); + }); + + test.createStream().pipe(tc); + + test('nested without plan or end', function(t) { + t.test('first', function(q) { + setTimeout(function first() { + q.ok(true); + q.end() + }, 10); + }); + t.test('second', function(q) { + setTimeout(function second() { + q.ok(true); + q.end() + }, 10); + }); + }); + +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/nested.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/nested.js new file mode 100644 index 0000000..673465d --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/nested.js @@ -0,0 +1,89 @@ +var falafel = require('falafel'); +var tape = require('../'); +var tap = require('tap'); + +tap.test('array test', function (tt) { + tt.plan(1); + + var test = tape.createHarness(); + var tc = tap.createConsumer(); + + var rows = []; + tc.on('data', function (r) { rows.push(r) }); + tc.on('end', function () { + var rs = rows.map(function (r) { + if (r && typeof r === 'object') { + return { id : r.id, ok : r.ok, name : r.name.trim() }; + } + else return r; + }); + tt.same(rs, [ + 'TAP version 13', + 'nested array test', + { id: 1, ok: true, name: 'should be equivalent' }, + { id: 2, ok: true, name: 'should be equivalent' }, + { id: 3, ok: true, name: 'should be equivalent' }, + { id: 4, ok: true, name: 'should be equivalent' }, + { id: 5, ok: true, name: 'should be equivalent' }, + 'inside test', + { id: 6, ok: true, name: '(unnamed assert)' }, + { id: 7, ok: true, name: '(unnamed assert)' }, + 'another', + { id: 8, ok: true, name: '(unnamed assert)' }, + 'tests 8', + 'pass 8', + 'ok' + ]); + }); + + test.createStream().pipe(tc); + + test('nested array test', function (t) { + t.plan(6); + + var src = '(' + function () { + var xs = [ 1, 2, [ 3, 4 ] ]; + var ys = [ 5, 6 ]; + g([ xs, ys ]); + } + ')()'; + + var output = falafel(src, function (node) { + if (node.type === 'ArrayExpression') { + node.update('fn(' + node.source() + ')'); + } + }); + + t.test('inside test', function (q) { + q.plan(2); + q.ok(true); + + setTimeout(function () { + q.ok(true); + }, 100); + }); + + var arrays = [ + [ 3, 4 ], + [ 1, 2, [ 3, 4 ] ], + [ 5, 6 ], + [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], + ]; + + Function(['fn','g'], output)( + function (xs) { + t.same(arrays.shift(), xs); + return xs; + }, + function (xs) { + t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); + } + ); + }); + + test('another', function (t) { + t.plan(1); + setTimeout(function () { + t.ok(true); + }, 50); + }); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/only.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/only.js new file mode 100644 index 0000000..9e6bc26 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/only.js @@ -0,0 +1,53 @@ +var tap = require('tap'); +var tape = require('../'); + +tap.test('tape only test', function (tt) { + var test = tape.createHarness({ exit: false }); + var tc = tap.createConsumer(); + var ran = []; + + var rows = [] + tc.on('data', function (r) { rows.push(r) }) + tc.on('end', function () { + var rs = rows.map(function (r) { + if (r && typeof r === 'object') { + return { id: r.id, ok: r.ok, name: r.name.trim() }; + } + else { + return r; + } + }) + + tt.deepEqual(rs, [ + 'TAP version 13', + 'run success', + { id: 1, ok: true, name: 'assert name'}, + 'tests 1', + 'pass 1', + 'ok' + ]) + tt.deepEqual(ran, [ 3 ]); + + tt.end() + }) + + test.createStream().pipe(tc) + + test("never run fail", function (t) { + ran.push(1); + t.equal(true, false) + t.end() + }) + + test("never run success", function (t) { + ran.push(2); + t.equal(true, true) + t.end() + }) + + test.only("run success", function (t) { + ran.push(3); + t.ok(true, "assert name") + t.end() + }) +}) diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/order.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/order.js new file mode 100644 index 0000000..02aaa05 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/order.js @@ -0,0 +1,17 @@ +var test = require('../'); +var current = 0; + +test(function (t) { + t.equal(current++, 0); + t.end(); +}); +test(function (t) { + t.plan(1); + setTimeout(function () { + t.equal(current++, 1); + }, 100); +}); +test(function (t) { + t.equal(current++, 2); + t.end(); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/plan_optional.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/plan_optional.js new file mode 100644 index 0000000..a092eab --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/plan_optional.js @@ -0,0 +1,15 @@ +var test = require('../'); + +test('plan should be optional', function (t) { + t.pass('no plan here'); + t.end(); +}); + +test('no plan async', function (t) { + setTimeout(function() { + t.pass('ok'); + t.end(); + }, 100); +}); + +// vim: set softtabstop=4 shiftwidth=4: diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/skip.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/skip.js new file mode 100644 index 0000000..13dd9cf --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/skip.js @@ -0,0 +1,34 @@ +var test = require('../'); +var ran = 0; + +test('do not skip this', { skip: false }, function(t) { + t.pass('this should run'); + ran ++; + t.end(); +}); + +test('skip this', { skip: true }, function(t) { + t.fail('this should not even run'); + t.end(); +}); + +test('skip subtest', function(t) { + ran ++; + t.test('do not skip this', { skip: false }, function(t) { + ran ++; + t.pass('this should run'); + t.end(); + }); + t.test('skip this', { skip: true }, function(t) { + t.fail('this should not even run'); + t.end(); + }); + t.end(); +}); + +test('right number of tests ran', function(t) { + t.equal(ran, 3, 'ran the right number of tests'); + t.end(); +}); + +// vim: set softtabstop=4 shiftwidth=4: diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/subtest_and_async.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/subtest_and_async.js new file mode 100644 index 0000000..719dbf5 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/subtest_and_async.js @@ -0,0 +1,23 @@ +var test = require('../'); + +var asyncFunction = function (callback) { + setTimeout(callback, Math.random * 50); +}; + +test('master test', function (t) { + t.test('subtest 1', function (t) { + t.pass('subtest 1 before async call'); + asyncFunction(function () { + t.pass('subtest 1 in async callback'); + t.end(); + }) + }); + + t.test('subtest 2', function (t) { + t.pass('subtest 2 before async call'); + asyncFunction(function () { + t.pass('subtest 2 in async callback'); + t.end(); + }) + }); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/subtest_plan.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/subtest_plan.js new file mode 100644 index 0000000..2b075ae --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/subtest_plan.js @@ -0,0 +1,21 @@ +var test = require('../'); + +test('parent', function (t) { + t.plan(3) + + var firstChildRan = false; + + t.pass('assertion in parent'); + + t.test('first child', function (t) { + t.plan(1); + t.pass('pass first child'); + firstChildRan = true; + }); + + t.test('second child', function (t) { + t.plan(2); + t.ok(firstChildRan, 'first child ran first'); + t.pass('pass second child'); + }); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/throw.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/throw.js new file mode 100644 index 0000000..32970b2 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/throw.js @@ -0,0 +1,38 @@ +var falafel = require('falafel'); +var tape = require('../'); +var tap = require('tap'); + +tap.test('throw test', function (tt) { + tt.plan(1); + + var test = tape.createHarness({ exit : false }); + var tc = tap.createConsumer(); + + var rows = []; + tc.on('data', function (r) { rows.push(r) }); + tc.on('end', function () { + var rs = rows.map(function (r) { + if (r && typeof r === 'object') { + return { id : r.id, ok : r.ok, name : r.name.trim() }; + } + else return r; + }); + tt.same(rs, [ + 'TAP version 13', + 'thrower', + { id: 1, ok: true, name: 'should be equal' }, + { id: 2, ok: false, name: 'Error: rawr' }, + 'tests 2', + 'pass 1', + 'fail 1', + ]); + }); + + test.createStream().pipe(tc); + + test('thrower', function (t) { + t.equal(1 + 1, 2); + + throw new Error('rawr'); + }); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/too_many.js b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/too_many.js new file mode 100644 index 0000000..b5c3881 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/node_modules/tape/test/too_many.js @@ -0,0 +1,69 @@ +var falafel = require('falafel'); +var tape = require('../'); +var tap = require('tap'); + +tap.test('array test', function (tt) { + tt.plan(1); + + var test = tape.createHarness({ exit : false }); + var tc = tap.createConsumer(); + + var rows = []; + tc.on('data', function (r) { rows.push(r) }); + tc.on('end', function () { + var rs = rows.map(function (r) { + if (r && typeof r === 'object') { + return { id : r.id, ok : r.ok, name : r.name.trim() }; + } + else return r; + }); + tt.same(rs, [ + 'TAP version 13', + 'array', + { id: 1, ok: true, name: 'should be equivalent' }, + { id: 2, ok: true, name: 'should be equivalent' }, + { id: 3, ok: true, name: 'should be equivalent' }, + { id: 4, ok: true, name: 'should be equivalent' }, + { id: 5, ok: false, name: 'plan != count' }, + { id: 6, ok: true, name: 'should be equivalent' }, + 'tests 6', + 'pass 5', + 'fail 1' + ]); + }); + + test.createStream().pipe(tc); + + test('array', function (t) { + t.plan(3); + + var src = '(' + function () { + var xs = [ 1, 2, [ 3, 4 ] ]; + var ys = [ 5, 6 ]; + g([ xs, ys ]); + } + ')()'; + + var output = falafel(src, function (node) { + if (node.type === 'ArrayExpression') { + node.update('fn(' + node.source() + ')'); + } + }); + + var arrays = [ + [ 3, 4 ], + [ 1, 2, [ 3, 4 ] ], + [ 5, 6 ], + [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ], + ]; + + Function(['fn','g'], output)( + function (xs) { + t.same(arrays.shift(), xs); + return xs; + }, + function (xs) { + t.same(xs, [ [ 1, 2, [ 3, 4 ] ], [ 5, 6 ] ]); + } + ); + }); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/package.json b/node_modules/forever/node_modules/shush/node_modules/caller/package.json new file mode 100644 index 0000000..3032727 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/package.json @@ -0,0 +1,56 @@ +{ + "name": "caller", + "version": "0.0.1", + "description": "@substack's caller.js as a module", + "main": "index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "tape test/*.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/totherik/caller.git" + }, + "keywords": [ + "caller", + "file", + "require" + ], + "author": { + "name": "Erik Toth", + "email": "totherik@gmail.com" + }, + "license": "MIT", + "devDependencies": { + "tape": "~2.3.2" + }, + "gitHead": "15bef0805246629cc89fb71ded29e674009ffc45", + "dependencies": { + "tape": "~2.3.2" + }, + "bugs": { + "url": "https://github.com/totherik/caller/issues" + }, + "homepage": "https://github.com/totherik/caller", + "_id": "caller@0.0.1", + "dist": { + "shasum": "f37a1d6ea10e829d94721ae29a90bb4fb52ab767", + "tarball": "http://registry.npmjs.org/caller/-/caller-0.0.1.tgz" + }, + "_from": "caller@>=0.0.1 <0.1.0", + "_npmVersion": "1.3.17", + "_npmUser": { + "name": "totherik", + "email": "totherik@gmail.com" + }, + "maintainers": [ + { + "name": "totherik", + "email": "totherik@gmail.com" + } + ], + "_shasum": "f37a1d6ea10e829d94721ae29a90bb4fb52ab767", + "_resolved": "https://registry.npmjs.org/caller/-/caller-0.0.1.tgz" +} diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/test/caller.js b/node_modules/forever/node_modules/shush/node_modules/caller/test/caller.js new file mode 100644 index 0000000..9c1916e --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/test/caller.js @@ -0,0 +1,42 @@ +'use strict'; + + +var test = require('tape'), + caller = require('../'); + + +test('caller', function (t) { + + t.test('determine caller', function (t) { + var actual, expected; + + actual = caller(); + expected = require.resolve('tape/lib/test'); + t.equal(actual, expected); + t.end(); + }); + + + t.test('determine caller at runtime', function (t) { + var callee, actual, expected; + + callee = require('./fixtures/callee'); + actual = callee(caller); + expected = __filename; + + t.equal(actual, expected); + t.end(); + }); + + + t.test('determine caller at initialization time', function (t) { + var actual, expected; + + actual = require('./fixtures/init'); + expected = __filename; + + t.equal(actual, expected); + t.end(); + }); + +}); \ No newline at end of file diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/test/fixtures/callee.js b/node_modules/forever/node_modules/shush/node_modules/caller/test/fixtures/callee.js new file mode 100644 index 0000000..3de54b7 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/test/fixtures/callee.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = function (caller) { + return caller(); +}; \ No newline at end of file diff --git a/node_modules/forever/node_modules/shush/node_modules/caller/test/fixtures/init.js b/node_modules/forever/node_modules/shush/node_modules/caller/test/fixtures/init.js new file mode 100644 index 0000000..cbfa7f4 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/caller/test/fixtures/init.js @@ -0,0 +1,6 @@ +'use strict'; + +var caller = require('../../'); + +console.log(caller()); +module.exports = caller(); \ No newline at end of file diff --git a/node_modules/forever/node_modules/shush/node_modules/strip-json-comments/cli.js b/node_modules/forever/node_modules/shush/node_modules/strip-json-comments/cli.js new file mode 100755 index 0000000..ac4da48 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/strip-json-comments/cli.js @@ -0,0 +1,41 @@ +#!/usr/bin/env node +'use strict'; +var fs = require('fs'); +var strip = require('./strip-json-comments'); +var input = process.argv[2]; + + +function getStdin(cb) { + var ret = ''; + + process.stdin.setEncoding('utf8'); + + process.stdin.on('data', function (data) { + ret += data; + }); + + process.stdin.on('end', function () { + cb(ret); + }); +} + +if (process.argv.indexOf('-h') !== -1 || process.argv.indexOf('--help') !== -1) { + console.log('strip-json-comments > '); + console.log('or'); + console.log('cat | strip-json-comments > '); + return; +} + +if (process.argv.indexOf('-v') !== -1 || process.argv.indexOf('--version') !== -1) { + console.log(require('./package').version); + return; +} + +if (input) { + process.stdout.write(strip(fs.readFileSync(input, 'utf8'))); + return; +} + +getStdin(function (data) { + process.stdout.write(strip(data)); +}); diff --git a/node_modules/forever/node_modules/shush/node_modules/strip-json-comments/package.json b/node_modules/forever/node_modules/shush/node_modules/strip-json-comments/package.json new file mode 100644 index 0000000..77bf207 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/strip-json-comments/package.json @@ -0,0 +1,76 @@ +{ + "name": "strip-json-comments", + "version": "0.1.3", + "description": "Strip comments from JSON. Lets you use comments in your JSON files!", + "keywords": [ + "json", + "strip", + "remove", + "delete", + "trim", + "comments", + "multiline", + "parse", + "config", + "configuration", + "conf", + "settings", + "util", + "env", + "environment", + "cli", + "bin" + ], + "license": "MIT", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "http://sindresorhus.com" + }, + "files": [ + "cli.js", + "strip-json-comments.js" + ], + "main": "strip-json-comments", + "bin": { + "strip-json-comments": "cli.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/sindresorhus/strip-json-comments" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "mocha": "*" + }, + "engines": { + "node": ">=0.8.0" + }, + "gitHead": "cbd5aede7ccbe5d5a9065b1d47070fd99ad579af", + "bugs": { + "url": "https://github.com/sindresorhus/strip-json-comments/issues" + }, + "homepage": "https://github.com/sindresorhus/strip-json-comments", + "_id": "strip-json-comments@0.1.3", + "_shasum": "164c64e370a8a3cc00c9e01b539e569823f0ee54", + "_from": "strip-json-comments@>=0.1.1 <0.2.0", + "_npmVersion": "1.4.13", + "_npmUser": { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + }, + "maintainers": [ + { + "name": "sindresorhus", + "email": "sindresorhus@gmail.com" + } + ], + "dist": { + "shasum": "164c64e370a8a3cc00c9e01b539e569823f0ee54", + "tarball": "http://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz" +} diff --git a/node_modules/forever/node_modules/shush/node_modules/strip-json-comments/readme.md b/node_modules/forever/node_modules/shush/node_modules/strip-json-comments/readme.md new file mode 100644 index 0000000..ad6a178 --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/strip-json-comments/readme.md @@ -0,0 +1,74 @@ +# strip-json-comments [![Build Status](https://travis-ci.org/sindresorhus/strip-json-comments.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-json-comments) + +> Strip comments from JSON. Lets you use comments in your JSON files! + +This is now possible: + +```js +{ + // rainbows + "unicorn": /* ❤ */ "cake" +} +``` + +It will remove single-line comments `//` and mult-line comments `/**/`. + +Also available as a [gulp](https://github.com/sindresorhus/gulp-strip-json-comments)/[grunt](https://github.com/sindresorhus/grunt-strip-json-comments)/[broccoli](https://github.com/sindresorhus/broccoli-strip-json-comments) plugin and a [require hook](https://github.com/uTest/autostrip-json-comments). + + +*There's already [json-comments](https://npmjs.org/package/json-comments), but it's only for Node.js and uses a naive regex to strip comments which fails on simple cases like `{"a":"//"}`. This module however parses out the comments.* + + +## Install + +```sh +$ npm install --save strip-json-comments +``` + +```sh +$ bower install --save strip-json-comments +``` + +```sh +$ component install sindresorhus/strip-json-comments +``` + + +## Usage + +```js +var json = '{/*rainbows*/"unicorn":"cake"}'; +JSON.parse(stripJsonComments(json)); +//=> {unicorn: 'cake'} +``` + + +## API + +### stripJsonComments(input) + +#### input + +Type: `string` + +Accepts a string with JSON and returns a string without comments. + + +## CLI + +```sh +$ npm install --global strip-json-comments +``` + +```sh +$ strip-json-comments --help + +strip-json-comments > +# or +cat | strip-json-comments > +``` + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/forever/node_modules/shush/node_modules/strip-json-comments/strip-json-comments.js b/node_modules/forever/node_modules/shush/node_modules/strip-json-comments/strip-json-comments.js new file mode 100644 index 0000000..2e7fdef --- /dev/null +++ b/node_modules/forever/node_modules/shush/node_modules/strip-json-comments/strip-json-comments.js @@ -0,0 +1,64 @@ +/*! + strip-json-comments + Strip comments from JSON. Lets you use comments in your JSON files! + https://github.com/sindresorhus/strip-json-comments + by Sindre Sorhus + MIT License +*/ +(function () { + 'use strict'; + + function stripJsonComments(str) { + var currentChar; + var nextChar; + var insideString = false; + var insideComment = false; + var ret = ''; + + for (var i = 0; i < str.length; i++) { + currentChar = str[i]; + nextChar = str[i + 1]; + + if (!insideComment && str[i - 1] !== '\\' && currentChar === '"') { + insideString = !insideString; + } + + if (insideString) { + ret += currentChar; + continue; + } + + if (!insideComment && currentChar + nextChar === '//') { + insideComment = 'single'; + i++; + } else if (insideComment === 'single' && currentChar + nextChar === '\r\n') { + insideComment = false; + i++; + } else if (insideComment === 'single' && currentChar === '\n') { + insideComment = false; + } else if (!insideComment && currentChar + nextChar === '/*') { + insideComment = 'multi'; + i++; + continue; + } else if (insideComment === 'multi' && currentChar + nextChar === '*/') { + insideComment = false; + i++; + continue; + } + + if (insideComment) { + continue; + } + + ret += currentChar; + } + + return ret; + } + + if (typeof module !== 'undefined' && module.exports) { + module.exports = stripJsonComments; + } else { + window.stripJsonComments = stripJsonComments; + } +})(); diff --git a/node_modules/forever/node_modules/shush/package.json b/node_modules/forever/node_modules/shush/package.json new file mode 100644 index 0000000..2795805 --- /dev/null +++ b/node_modules/forever/node_modules/shush/package.json @@ -0,0 +1,59 @@ +{ + "name": "shush", + "version": "1.0.0", + "description": "Sugar for silencing JSON comments.", + "main": "index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "tape test/*.js", + "cover": "istanbul cover tape -- test/*.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/totherik/shush.git" + }, + "author": { + "name": "Erik Toth", + "email": "totherik@gmail.com" + }, + "license": "MIT", + "devDependencies": { + "tape": "~2.3.2", + "istanbul": "~0.2.1" + }, + "dependencies": { + "strip-json-comments": "~0.1.1", + "caller": "~0.0.1" + }, + "bugs": { + "url": "https://github.com/totherik/shush/issues" + }, + "homepage": "https://github.com/totherik/shush", + "gitHead": "a6f3f35ad650ae744ed1aa1cb8be68f86bcba706", + "_id": "shush@1.0.0", + "_shasum": "c27415a9e458f2fed39b27cf8eb37c003782b431", + "_from": "shush@>=1.0.0 <2.0.0", + "_npmVersion": "2.8.1", + "_nodeVersion": "0.12.2", + "_npmUser": { + "name": "aredridel", + "email": "aredridel@nbtsc.org" + }, + "maintainers": [ + { + "name": "totherik", + "email": "totherik@gmail.com" + }, + { + "name": "aredridel", + "email": "aredridel@nbtsc.org" + } + ], + "dist": { + "shasum": "c27415a9e458f2fed39b27cf8eb37c003782b431", + "tarball": "http://registry.npmjs.org/shush/-/shush-1.0.0.tgz" + }, + "_resolved": "https://registry.npmjs.org/shush/-/shush-1.0.0.tgz" +} diff --git a/node_modules/forever/test/core/start-stop-json-array-test.js b/node_modules/forever/test/core/start-stop-json-array-test.js new file mode 100644 index 0000000..6e9184e --- /dev/null +++ b/node_modules/forever/test/core/start-stop-json-array-test.js @@ -0,0 +1,67 @@ +/* + * start-stop-json-test.js: start or stop forever using relative paths, the script path could be start with './', '../' ... + * + * (C) 2010 Charlie Robbins & the Contributors + * MIT LICENCE + * + */ + +var assert = require('assert'), + path = require('path'), + fs = require('fs'), + vows = require('vows'), + async = require('utile').async, + request = require('request'), + forever = require('../../lib/forever'), + runCmd = require('../helpers').runCmd; + +vows.describe('forever/core/start-stop-json-array').addBatch({ + "When using forever" : { + "to start process using JSON configuration file containing an array" : { + topic: function () { + runCmd('start', [ + './test/fixtures/servers.json' + ]); + setTimeout(function (that) { + forever.list(false, that.callback); + }, 2000, this); + }, + "the startup should works fine": function (err, procs) { + assert.isNull(err); + assert.isArray(procs); + assert.equal(procs.length, 2); + } + } + } +}).addBatch({ + "When the script is running": { + "request to both ports": { + topic: function () { + async.parallel({ + one: async.apply(request, { uri: 'http://localhost:8080', json: true }), + two: async.apply(request, { uri: 'http://localhost:8081', json: true }) + }, this.callback); + }, + "should respond correctly": function (err, results) { + assert.isNull(err); + assert.isTrue(!results.one[1].p); + assert.equal(results.two[1].p, 8081); + } + } + } +}).addBatch({ + "When the script is running" : { + "try to stopall" : { + topic: function () { + runCmd('stopall', []); + setTimeout(function (that) { + forever.list(false, that.callback); + }, 2000, this); + }, + "the shut down should works fine": function (err, procs) { + assert.isNull(err); + assert.isNull(procs); + } + } + } + }).export(module); diff --git a/node_modules/forever/test/core/start-stop-json-obj-test.js b/node_modules/forever/test/core/start-stop-json-obj-test.js new file mode 100644 index 0000000..39953fa --- /dev/null +++ b/node_modules/forever/test/core/start-stop-json-obj-test.js @@ -0,0 +1,51 @@ +/* + * start-stop-json-test.js: start or stop forever using relative paths, the script path could be start with './', '../' ... + * + * (C) 2010 Charlie Robbins & the Contributors + * MIT LICENCE + * + */ + +var assert = require('assert'), + path = require('path'), + fs = require('fs'), + vows = require('vows'), + forever = require('../../lib/forever'), + runCmd = require('../helpers').runCmd; + +vows.describe('forever/core/start-stop-json-obj').addBatch({ + "When using forever" : { + "to start process using JSON configuration file containing an object" : { + topic: function () { + runCmd('start', [ + './test/fixtures/server.json' + ]); + setTimeout(function (that) { + forever.list(false, that.callback); + }, 2000, this); + }, + "the startup should works fine": function (err, procs) { + assert.isNull(err); + assert.isArray(procs); + assert.equal(procs.length, 1); + } + } + } +}).addBatch({ + "When the script is running" : { + "try to stop by uid" : { + topic: function () { + runCmd('stop', [ + 'server' + ]); + setTimeout(function (that) { + forever.list(false, that.callback); + }, 2000, this); + }, + "the shut down should works fine": function (err, procs) { + assert.isNull(err); + assert.isNull(procs); + } + } + } + }).export(module); diff --git a/node_modules/forever/test/fixtures/server.json b/node_modules/forever/test/fixtures/server.json new file mode 100644 index 0000000..1763907 --- /dev/null +++ b/node_modules/forever/test/fixtures/server.json @@ -0,0 +1,6 @@ +{ + "uid": "server", + "append": true, + "script": "server.js", + "sourceDir": "./test/fixtures" +} diff --git a/node_modules/forever/test/fixtures/servers.json b/node_modules/forever/test/fixtures/servers.json new file mode 100644 index 0000000..d97e0e6 --- /dev/null +++ b/node_modules/forever/test/fixtures/servers.json @@ -0,0 +1,15 @@ +[ + { + "uid": "server1", + "append": true, + "script": "server.js", + "sourceDir": "./test/fixtures" + }, + { + "uid": "server2", + "append": true, + "script": "server.js", + "sourceDir": "./test/fixtures", + "args": ["-p", 8081] + } +] diff --git a/node_modules/forever/test/helpers/index.js b/node_modules/forever/test/helpers/index.js new file mode 100644 index 0000000..38a9c4a --- /dev/null +++ b/node_modules/forever/test/helpers/index.js @@ -0,0 +1,31 @@ +/* + * index.js: Test helpers for forever. + * + * (C) 2015 Charlie Robbins & the Contributors + * MIT LICENCE + * + */ + +var path = require('path'), + spawn = require('child_process').spawn; + +/* + * function runCmd (cmd, args) + * Executes forever with the `cmd` and arguments. + */ +exports.runCmd = function runCmd(cmd, args) { + var proc = spawn(process.execPath, [ + path.resolve(__dirname, '../../', 'bin/forever'), + cmd + ].concat(args), {detached: true}); + + // + // Pipe everything to `stderr` so it can + // be seen when running `npm test`. + // + proc.stdout.pipe(process.stderr); + proc.stderr.pipe(process.stderr); + + proc.unref(); + return proc; +} diff --git a/node_modules/jade/node_modules/constantinople/node_modules/.bin/acorn b/node_modules/jade/node_modules/constantinople/node_modules/.bin/acorn new file mode 120000 index 0000000..cf76760 --- /dev/null +++ b/node_modules/jade/node_modules/constantinople/node_modules/.bin/acorn @@ -0,0 +1 @@ +../acorn/bin/acorn \ No newline at end of file diff --git a/node_modules/jade/node_modules/constantinople/node_modules/acorn/.editorconfig b/node_modules/jade/node_modules/constantinople/node_modules/acorn/.editorconfig new file mode 100644 index 0000000..c14d5c6 --- /dev/null +++ b/node_modules/jade/node_modules/constantinople/node_modules/acorn/.editorconfig @@ -0,0 +1,7 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true diff --git a/node_modules/jade/node_modules/constantinople/node_modules/acorn/.gitattributes b/node_modules/jade/node_modules/constantinople/node_modules/acorn/.gitattributes new file mode 100644 index 0000000..fcadb2c --- /dev/null +++ b/node_modules/jade/node_modules/constantinople/node_modules/acorn/.gitattributes @@ -0,0 +1 @@ +* text eol=lf diff --git a/node_modules/jade/node_modules/constantinople/node_modules/acorn/.npmignore b/node_modules/jade/node_modules/constantinople/node_modules/acorn/.npmignore new file mode 100644 index 0000000..ecba291 --- /dev/null +++ b/node_modules/jade/node_modules/constantinople/node_modules/acorn/.npmignore @@ -0,0 +1,3 @@ +/.tern-port +/test +/local diff --git a/node_modules/jade/node_modules/constantinople/node_modules/acorn/.tern-project b/node_modules/jade/node_modules/constantinople/node_modules/acorn/.tern-project new file mode 100644 index 0000000..6718ce0 --- /dev/null +++ b/node_modules/jade/node_modules/constantinople/node_modules/acorn/.tern-project @@ -0,0 +1,6 @@ +{ + "plugins": { + "node": true, + "es_modules": true + } +} \ No newline at end of file diff --git a/node_modules/jade/node_modules/constantinople/node_modules/acorn/.travis.yml b/node_modules/jade/node_modules/constantinople/node_modules/acorn/.travis.yml new file mode 100644 index 0000000..ffb9f71 --- /dev/null +++ b/node_modules/jade/node_modules/constantinople/node_modules/acorn/.travis.yml @@ -0,0 +1,2 @@ +language: node_js +node_js: '0.10' diff --git a/node_modules/jade/node_modules/constantinople/node_modules/acorn/AUTHORS b/node_modules/jade/node_modules/constantinople/node_modules/acorn/AUTHORS new file mode 100644 index 0000000..2f39def --- /dev/null +++ b/node_modules/jade/node_modules/constantinople/node_modules/acorn/AUTHORS @@ -0,0 +1,41 @@ +List of Acorn contributors. Updated before every release. + +Adrian Rakovsky +Alistair Braidwood +Andres Suarez +Aparajita Fishman +Arian Stolwijk +Artem Govorov +Brandon Mills +Charles Hughes +Conrad Irwin +David Bonnet +Forbes Lindesay +Gilad Peleg +impinball +Ingvar Stepanyan +Jesse McCarthy +Jiaxing Wang +Joel Kemp +Johannes Herr +Jürg Lehni +keeyipchan +Kevin Kwok +krator +Marijn Haverbeke +Martin Carlberg +Mathias Bynens +Mathieu 'p01' Henri +Max Schaefer +Max Zerzouri +Mihai Bazon +Mike Rennie +Nick Fitzgerald +Oskar Schöldström +Paul Harper +Peter Rust +PlNG +r-e-d +Rich Harris +Sebastian McKenzie +zsjforcn diff --git a/node_modules/jade/node_modules/constantinople/node_modules/acorn/LICENSE b/node_modules/jade/node_modules/constantinople/node_modules/acorn/LICENSE new file mode 100644 index 0000000..d4c7fc5 --- /dev/null +++ b/node_modules/jade/node_modules/constantinople/node_modules/acorn/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2012-2014 by various contributors (see AUTHORS) + +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. diff --git a/node_modules/jade/node_modules/constantinople/node_modules/acorn/README.md b/node_modules/jade/node_modules/constantinople/node_modules/acorn/README.md new file mode 100644 index 0000000..b1291ea --- /dev/null +++ b/node_modules/jade/node_modules/constantinople/node_modules/acorn/README.md @@ -0,0 +1,377 @@ +# Acorn + +[![Build Status](https://travis-ci.org/marijnh/acorn.svg?branch=master)](https://travis-ci.org/marijnh/acorn) +[![NPM version](https://img.shields.io/npm/v/acorn.svg)](https://www.npmjs.org/package/acorn) +[Author funding status: ![maintainer happiness](https://marijnhaverbeke.nl/fund/status_s.png?force)](https://marijnhaverbeke.nl/fund/) + +A tiny, fast JavaScript parser, written completely in JavaScript. + +## Installation + +The easiest way to install acorn is with [`npm`][npm]. + +[npm]: http://npmjs.org + +```sh +npm install acorn +``` + +Alternately, download the source. + +```sh +git clone https://github.com/marijnh/acorn.git +``` + +## Components + +When run in a CommonJS (node.js) or AMD environment, exported values +appear in the interfaces exposed by the individual files, as usual. +When loaded in the browser (Acorn works in any JS-enabled browser more +recent than IE5) without any kind of module management, a single +global object `acorn` will be defined, and all the exported properties +will be added to that. + +### Main parser + +This is implemented in `dist/acorn.js`, and is what you get when you +`require("acorn")` in node.js. + +**parse**`(input, options)` is used to parse a JavaScript program. +The `input` parameter is a string, `options` can be undefined or an +object setting some of the options listed below. The return value will +be an abstract syntax tree object as specified by the +[ESTree spec][estree]. + +When encountering a syntax error, the parser will raise a +`SyntaxError` object with a meaningful message. The error object will +have a `pos` property that indicates the character offset at which the +error occurred, and a `loc` object that contains a `{line, column}` +object referring to that same position. + +[estree]: https://github.com/estree/estree + +- **ecmaVersion**: Indicates the ECMAScript version to parse. Must be + either 3, 5, or 6. This influences support for strict mode, the set + of reserved words, and support for new syntax features. Default is 5. + +- **sourceType**: Indicate the mode the code should be parsed in. Can be + either `"script"` or `"module"`. + +- **onInsertedSemicolon**: If given a callback, that callback will be + called whenever a missing semicolon is inserted by the parser. The + callback will be given the character offset of the point where the + semicolon is inserted as argument, and if `locations` is on, also a + `{line, column}` object representing this position. + +- **onTrailingComma**: Like `onInsertedSemicolon`, but for trailing + commas. + +- **allowReserved**: If `false`, using a reserved word will generate + an error. Defaults to `true`. When given the value `"never"`, + reserved words and keywords can also not be used as property names + (as in Internet Explorer's old parser). + +- **allowReturnOutsideFunction**: By default, a return statement at + the top level raises an error. Set this to `true` to accept such + code. + +- **allowImportExportEverywhere**: By default, `import` and `export` + declarations can only appear at a program's top level. Setting this + option to `true` allows them anywhere where a statement is allowed. + +- **allowHashBang**: When this is enabled (off by default), if the + code starts with the characters `#!` (as in a shellscript), the + first line will be treated as a comment. + +- **locations**: When `true`, each node has a `loc` object attached + with `start` and `end` subobjects, each of which contains the + one-based line and zero-based column numbers in `{line, column}` + form. Default is `false`. + +- **onToken**: If a function is passed for this option, each found + token will be passed in same format as `tokenize()` returns. + + If array is passed, each found token is pushed to it. + + Note that you are not allowed to call the parser from the + callback—that will corrupt its internal state. + +- **onComment**: If a function is passed for this option, whenever a + comment is encountered the function will be called with the + following parameters: + + - `block`: `true` if the comment is a block comment, false if it + is a line comment. + - `text`: The content of the comment. + - `start`: Character offset of the start of the comment. + - `end`: Character offset of the end of the comment. + + When the `locations` options is on, the `{line, column}` locations + of the comment’s start and end are passed as two additional + parameters. + + If array is passed for this option, each found comment is pushed + to it as object in Esprima format: + + ```javascript + { + "type": "Line" | "Block", + "value": "comment text", + "range": ..., + "loc": ... + } + ``` + + Note that you are not allowed to call the parser from the + callback—that will corrupt its internal state. + +- **ranges**: Nodes have their start and end characters offsets + recorded in `start` and `end` properties (directly on the node, + rather than the `loc` object, which holds line/column data. To also + add a [semi-standardized][range] `range` property holding a + `[start, end]` array with the same numbers, set the `ranges` option + to `true`. + +- **program**: It is possible to parse multiple files into a single + AST by passing the tree produced by parsing the first file as the + `program` option in subsequent parses. This will add the toplevel + forms of the parsed file to the "Program" (top) node of an existing + parse tree. + +- **sourceFile**: When the `locations` option is `true`, you can pass + this option to add a `source` attribute in every node’s `loc` + object. Note that the contents of this option are not examined or + processed in any way; you are free to use whatever format you + choose. + +- **directSourceFile**: Like `sourceFile`, but a `sourceFile` property + will be added directly to the nodes, rather than the `loc` object. + +- **preserveParens**: If this option is `true`, parenthesized expressions + are represented by (non-standard) `ParenthesizedExpression` nodes + that have a single `expression` property containing the expression + inside parentheses. + +[range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678 + +**parseExpressionAt**`(input, offset, options)` will parse a single +expression in a string, and return its AST. It will not complain if +there is more of the string left after the expression. + +**getLineInfo**`(input, offset)` can be used to get a `{line, +column}` object for a given program string and character offset. + +**tokenizer**`(input, options)` returns an object with a `getToken` +method that can be called repeatedly to get the next token, a `{start, +end, type, value}` object (with added `loc` property when the +`locations` option is enabled and `range` property when the `ranges` +option is enabled). When the token's type is `tokTypes.eof`, you +should stop calling the method, since it will keep returning that same +token forever. + +In ES6 environment, returned result can be used as any other +protocol-compliant iterable: + +```javascript +for (let token of acorn.tokenize(str)) { + // iterate over the tokens +} + +// transform code to array of tokens: +var tokens = [...acorn.tokenize(str)]; +``` + +**tokTypes** holds an object mapping names to the token type objects +that end up in the `type` properties of tokens. + +#### Note on using with [Escodegen][escodegen] + +Escodegen supports generating comments from AST, attached in +Esprima-specific format. In order to simulate same format in +Acorn, consider following example: + +```javascript +var comments = [], tokens = []; + +var ast = acorn.parse('var x = 42; // answer', { + // collect ranges for each node + ranges: true, + // collect comments in Esprima's format + onComment: comments, + // collect token ranges + onToken: tokens +}); + +// attach comments using collected information +escodegen.attachComments(ast, comments, tokens); + +// generate code +console.log(escodegen.generate(ast, {comment: true})); +// > 'var x = 42; // answer' +``` + +[escodegen]: https://github.com/Constellation/escodegen + +#### Using Acorn in an environment with a Content Security Policy + +Some contexts, such as Chrome Web Apps, disallow run-time code evaluation. +Acorn uses `new Function` to generate fast functions that test whether +a word is in a given set, and will trigger a security error when used +in a context with such a +[Content Security Policy](http://www.html5rocks.com/en/tutorials/security/content-security-policy/#eval-too) +(see [#90](https://github.com/marijnh/acorn/issues/90) and +[#123](https://github.com/marijnh/acorn/issues/123)). + +The `dist/acorn_csp.js` file in the distribution (which is built +by the `bin/without_eval` script) has the generated code inlined, and +can thus run without evaluating anything. + +### dist/acorn_loose.js ### + +This file implements an error-tolerant parser. It exposes a single +function. The loose parser is accessible in node.js via `require("acorn/dist/acorn_loose")`. + +**parse_dammit**`(input, options)` takes the same arguments and +returns the same syntax tree as the `parse` function in `acorn.js`, +but never raises an error, and will do its best to parse syntactically +invalid code in as meaningful a way as it can. It'll insert identifier +nodes with name `"✖"` as placeholders in places where it can't make +sense of the input. Depends on `acorn.js`, because it uses the same +tokenizer. + +### dist/walk.js ### + +Implements an abstract syntax tree walker. Will store its interface in +`acorn.walk` when loaded without a module system. + +**simple**`(node, visitors, base, state)` does a 'simple' walk over +a tree. `node` should be the AST node to walk, and `visitors` an +object with properties whose names correspond to node types in the +[ESTree spec][estree]. The properties should contain functions +that will be called with the node object and, if applicable the state +at that point. The last two arguments are optional. `base` is a walker +algorithm, and `state` is a start state. The default walker will +simply visit all statements and expressions and not produce a +meaningful state. (An example of a use of state it to track scope at +each point in the tree.) + +**ancestor**`(node, visitors, base, state)` does a 'simple' walk over +a tree, building up an array of ancestor nodes (including the current node) +and passing the array to callbacks in the `state` parameter. + +**recursive**`(node, state, functions, base)` does a 'recursive' +walk, where the walker functions are responsible for continuing the +walk on the child nodes of their target node. `state` is the start +state, and `functions` should contain an object that maps node types +to walker functions. Such functions are called with `(node, state, c)` +arguments, and can cause the walk to continue on a sub-node by calling +the `c` argument on it with `(node, state)` arguments. The optional +`base` argument provides the fallback walker functions for node types +that aren't handled in the `functions` object. If not given, the +default walkers will be used. + +**make**`(functions, base)` builds a new walker object by using the +walker functions in `functions` and filling in the missing ones by +taking defaults from `base`. + +**findNodeAt**`(node, start, end, test, base, state)` tries to +locate a node in a tree at the given start and/or end offsets, which +satisfies the predicate `test`. `start` end `end` can be either `null` +(as wildcard) or a number. `test` may be a string (indicating a node +type) or a function that takes `(nodeType, node)` arguments and +returns a boolean indicating whether this node is interesting. `base` +and `state` are optional, and can be used to specify a custom walker. +Nodes are tested from inner to outer, so if two nodes match the +boundaries, the inner one will be preferred. + +**findNodeAround**`(node, pos, test, base, state)` is a lot like +`findNodeAt`, but will match any node that exists 'around' (spanning) +the given position. + +**findNodeAfter**`(node, pos, test, base, state)` is similar to +`findNodeAround`, but will match all nodes *after* the given position +(testing outer nodes before inner nodes). + +## Command line interface + +The `bin/acorn` utility can be used to parse a file from the command +line. It accepts as arguments its input file and the following +options: + +- `--ecma3|--ecma5|--ecma6`: Sets the ECMAScript version to parse. Default is + version 5. + +- `--locations`: Attaches a "loc" object to each node with "start" and + "end" subobjects, each of which contains the one-based line and + zero-based column numbers in `{line, column}` form. + +- `--allow-hash-bang`: If the code starts with the characters #! (as in a shellscript), the first line will be treated as a comment. + +- `--compact`: No whitespace is used in the AST output. + +- `--silent`: Do not output the AST, just return the exit status. + +- `--help`: Print the usage information and quit. + +The utility spits out the syntax tree as JSON data. + +## Build system + +Acorn is written in ECMAScript 6, as a set of small modules, in the +project's `src` directory, and compiled down to bigger ECMAScript 3 +files in `dist` using [Browserify](http://browserify.org) and +[Babel](http://babeljs.io/). If you are already using Babel, you can +consider including the modules directly. + +The command-line test runner (`npm test`) uses the ES6 modules. The +browser-based test page (`test/index.html`) uses the compiled modules. +The `bin/build-acorn.js` script builds the latter from the former. + +If you are working on Acorn, you'll probably want to try the code out +directly, without an intermediate build step. In your scripts, you can +register the Babel require shim like this: + + require("babel-core/register") + +That will allow you to directly `require` the ES6 modules. + +## Plugins + +Acorn is designed support allow plugins which, within reasonable +bounds, redefine the way the parser works. Plugins can add new token +types and new tokenizer contexts (if necessary), and extend methods in +the parser object. This is not a clean, elegant API—using it requires +an understanding of Acorn's internals, and plugins are likely to break +whenever those internals are significantly changed. But still, it is +_possible_, in this way, to create parsers for JavaScript dialects +without forking all of Acorn. And in principle it is even possible to +combine such plugins, so that if you have, for example, a plugin for +parsing types and a plugin for parsing JSX-style XML literals, you +could load them both and parse code with both JSX tags and types. + +A plugin should register itself by adding a property to +`acorn.plugins`, which holds a function. Calling `acorn.parse`, a +`plugins` option can be passed, holding an object mapping plugin names +to configuration values (or just `true` for plugins that don't take +options). After the parser object has been created, the initialization +functions for the chosen plugins are called with `(parser, +configValue)` arguments. They are expected to use the `parser.extend` +method to extend parser methods. For example, the `readToken` method +could be extended like this: + +```javascript +parser.extend("readToken", function(nextMethod) { + return function(code) { + console.log("Reading a token!") + return nextMethod.call(this, code) + } +}) +``` + +The `nextMethod` argument passed to `extend`'s second argument is the +previous value of this method, and should usually be called through to +whenever the extended method does not handle the call itself. + +There is a proof-of-concept JSX plugin in the [`jsx` +branch](https://github.com/marijnh/acorn/tree/jsx) branch of the +Github repository. diff --git a/node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/acorn b/node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/acorn new file mode 100755 index 0000000..41fd156 --- /dev/null +++ b/node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/acorn @@ -0,0 +1,55 @@ +#!/usr/bin/env node + +var path = require("path"); +var fs = require("fs"); +var acorn = require("../dist/acorn.js"); + +var infile, parsed, tokens, options = {}, silent = false, compact = false, tokenize = false; + +function help(status) { + var print = (status == 0) ? console.log : console.error; + print("usage: " + path.basename(process.argv[1]) + " [--ecma3|--ecma5|--ecma6]"); + print(" [--tokenize] [--locations] [---allow-hash-bang] [--compact] [--silent] [--module] [--help] [--] infile"); + process.exit(status); +} + +for (var i = 2; i < process.argv.length; ++i) { + var arg = process.argv[i]; + if (arg[0] != "-" && !infile) infile = arg; + else if (arg == "--" && !infile && i + 2 == process.argv.length) infile = process.argv[++i]; + else if (arg == "--ecma3") options.ecmaVersion = 3; + else if (arg == "--ecma5") options.ecmaVersion = 5; + else if (arg == "--ecma6") options.ecmaVersion = 6; + else if (arg == "--ecma7") options.ecmaVersion = 7; + else if (arg == "--locations") options.locations = true; + else if (arg == "--allow-hash-bang") options.allowHashBang = true; + else if (arg == "--silent") silent = true; + else if (arg == "--compact") compact = true; + else if (arg == "--help") help(0); + else if (arg == "--tokenize") tokenize = true; + else if (arg == "--module") options.sourceType = 'module'; + else help(1); +} + +try { + var code = fs.readFileSync(infile, "utf8"); + + if (!tokenize) + parsed = acorn.parse(code, options); + else { + var get = acorn.tokenize(code, options); + tokens = []; + while (true) { + var token = get(); + tokens.push(token); + if (token.type.type == "eof") + break; + } + } +} catch(e) { + console.log(e.message); + process.exit(1); +} + +if (!silent) + console.log(JSON.stringify(tokenize ? tokens : parsed, null, compact ? null : 2)); diff --git a/node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/build-acorn.js b/node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/build-acorn.js new file mode 100644 index 0000000..a97b757 --- /dev/null +++ b/node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/build-acorn.js @@ -0,0 +1,51 @@ +var fs = require("fs"), path = require("path") +var stream = require("stream") + +var browserify = require("browserify") +var babelify = require("babelify").configure({loose: "all"}) + +process.chdir(path.resolve(__dirname, "..")) + +browserify({standalone: "acorn"}) + .plugin(require('browserify-derequire')) + .transform(babelify) + .require("./src/index.js", {entry: true}) + .bundle() + .on("error", function (err) { console.log("Error: " + err.message) }) + .pipe(fs.createWriteStream("dist/acorn.js")) + +function acornShim(file) { + var tr = new stream.Transform + if (file == path.resolve(__dirname, "../src/index.js")) { + var sent = false + tr._transform = function(chunk, _, callback) { + if (!sent) { + sent = true + callback(null, "module.exports = typeof acorn != 'undefined' ? acorn : _dereq_(\"./acorn\")") + } else { + callback() + } + } + } else { + tr._transform = function(chunk, _, callback) { callback(null, chunk) } + } + return tr +} + +browserify({standalone: "acorn.loose"}) + .plugin(require('browserify-derequire')) + .transform(acornShim) + .transform(babelify) + .require("./src/loose/index.js", {entry: true}) + .bundle() + .on("error", function (err) { console.log("Error: " + err.message) }) + .pipe(fs.createWriteStream("dist/acorn_loose.js")) + +browserify({standalone: "acorn.walk"}) + .plugin(require('browserify-derequire')) + .transform(acornShim) + .transform(babelify) + .require("./src/walk/index.js", {entry: true}) + .bundle() + .on("error", function (err) { console.log("Error: " + err.message) }) + .pipe(fs.createWriteStream("dist/walk.js")) diff --git a/node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/generate-identifier-regex.js b/node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/generate-identifier-regex.js new file mode 100644 index 0000000..0d7c50f --- /dev/null +++ b/node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/generate-identifier-regex.js @@ -0,0 +1,47 @@ +// Note: run `npm install unicode-7.0.0` first. + +// Which Unicode version should be used? +var version = '7.0.0'; + +var start = require('unicode-' + version + '/properties/ID_Start/code-points') + .filter(function(ch) { return ch > 127; }); +var cont = [0x200c, 0x200d].concat(require('unicode-' + version + '/properties/ID_Continue/code-points') + .filter(function(ch) { return ch > 127 && start.indexOf(ch) == -1; })); + +function pad(str, width) { + while (str.length < width) str = "0" + str; + return str; +} + +function esc(code) { + var hex = code.toString(16); + if (hex.length <= 2) return "\\x" + pad(hex, 2); + else return "\\u" + pad(hex, 4); +} + +function generate(chars) { + var astral = [], re = ""; + for (var i = 0, at = 0x10000; i < chars.length; i++) { + var from = chars[i], to = from; + while (i < chars.length - 1 && chars[i + 1] == to + 1) { + i++; + to++; + } + if (to <= 0xffff) { + if (from == to) re += esc(from); + else if (from + 1 == to) re += esc(from) + esc(to); + else re += esc(from) + "-" + esc(to); + } else { + astral.push(from - at, to - from); + at = to; + } + } + return {nonASCII: re, astral: astral}; +} + +var startData = generate(start), contData = generate(cont); + +console.log(" var nonASCIIidentifierStartChars = \"" + startData.nonASCII + "\";"); +console.log(" var nonASCIIidentifierChars = \"" + contData.nonASCII + "\";"); +console.log(" var astralIdentifierStartCodes = " + JSON.stringify(startData.astral) + ";"); +console.log(" var astralIdentifierCodes = " + JSON.stringify(contData.astral) + ";"); diff --git a/node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/update_authors.sh b/node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/update_authors.sh new file mode 100755 index 0000000..466c8db --- /dev/null +++ b/node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/update_authors.sh @@ -0,0 +1,6 @@ +# Combine existing list of authors with everyone known in git, sort, add header. +tail --lines=+3 AUTHORS > AUTHORS.tmp +git log --format='%aN' | grep -v abraidwood >> AUTHORS.tmp +echo -e "List of Acorn contributors. Updated before every release.\n" > AUTHORS +sort -u AUTHORS.tmp >> AUTHORS +rm -f AUTHORS.tmp diff --git a/node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/without_eval b/node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/without_eval new file mode 100755 index 0000000..4331e70 --- /dev/null +++ b/node_modules/jade/node_modules/constantinople/node_modules/acorn/bin/without_eval @@ -0,0 +1,48 @@ +#!/usr/bin/env node + +var fs = require("fs") + +var acornSrc = fs.readFileSync(require.resolve("../dist/acorn"), "utf8") +var acorn = require("../dist/acorn"), walk = require("../dist/walk") + +var ast = acorn.parse(acornSrc) +var touchups = [], uses = [] + +var makePred + +walk.simple(ast, { + FunctionDeclaration: function(node) { + if (node.id.name == "makePredicate") { + makePred = node + touchups.push({text: "// Removed to create an eval-free library", from: node.start, to: node.end}) + } + }, + ObjectExpression: function(node) { + node.properties.forEach(function(prop) { + if (prop.value.type == "CallExpression" && + prop.value.callee.name == "makePredicate") + uses.push(prop.value) + }) + } +}) + +var results = [] +var dryRun = acornSrc.slice(0, makePred.end) + "; makePredicate = (function(mp) {" + + "return function(words) { var r = mp(words); predicates.push(r); return r }})(makePredicate);" + + acornSrc.slice(makePred.end) +;(new Function("predicates", dryRun))(results) + +uses.forEach(function (node, i) { + touchups.push({text: results[i].toString(), from: node.start, to: node.end}) +}) + +var result = "", pos = 0 +touchups.sort(function(a, b) { return a.from - b.from }) +touchups.forEach(function(touchup) { + result += acornSrc.slice(pos, touchup.from) + result += touchup.text + pos = touchup.to +}) +result += acornSrc.slice(pos) + +process.stdout.write(result) diff --git a/node_modules/jade/node_modules/constantinople/node_modules/acorn/dist/.keep b/node_modules/jade/node_modules/constantinople/node_modules/acorn/dist/.keep new file mode 100644 index 0000000..e69de29 diff --git a/node_modules/jade/node_modules/constantinople/node_modules/acorn/dist/acorn.js b/node_modules/jade/node_modules/constantinople/node_modules/acorn/dist/acorn.js new file mode 100644 index 0000000..b44edb9 --- /dev/null +++ b/node_modules/jade/node_modules/constantinople/node_modules/acorn/dist/acorn.js @@ -0,0 +1,3312 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.acorn = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 6 && (prop.computed || prop.method || prop.shorthand)) return; + var key = prop.key, + name = undefined; + switch (key.type) { + case "Identifier": + name = key.name;break; + case "Literal": + name = String(key.value);break; + default: + return; + } + var kind = prop.kind; + if (this.options.ecmaVersion >= 6) { + if (name === "__proto__" && kind === "init") { + if (propHash.proto) this.raise(key.start, "Redefinition of __proto__ property"); + propHash.proto = true; + } + return; + } + var other = undefined; + if (_util.has(propHash, name)) { + other = propHash[name]; + var isGetSet = kind !== "init"; + if ((this.strict || isGetSet) && other[kind] || !(isGetSet ^ other.init)) this.raise(key.start, "Redefinition of property"); + } else { + other = propHash[name] = { + init: false, + get: false, + set: false + }; + } + other[kind] = true; +}; + +// ### Expression parsing + +// These nest, from the most general expression type at the top to +// 'atomic', nondivisible expression types at the bottom. Most of +// the functions will simply let the function(s) below them parse, +// and, *if* the syntactic construct they handle is present, wrap +// the AST node that the inner parser gave them in another node. + +// Parse a full expression. The optional arguments are used to +// forbid the `in` operator (in for loops initalization expressions) +// and provide reference for storing '=' operator inside shorthand +// property assignment in contexts where both object expression +// and object pattern might appear (so it's possible to raise +// delayed syntax error at correct position). + +pp.parseExpression = function (noIn, refShorthandDefaultPos) { + var startPos = this.start, + startLoc = this.startLoc; + var expr = this.parseMaybeAssign(noIn, refShorthandDefaultPos); + if (this.type === _tokentype.types.comma) { + var node = this.startNodeAt(startPos, startLoc); + node.expressions = [expr]; + while (this.eat(_tokentype.types.comma)) node.expressions.push(this.parseMaybeAssign(noIn, refShorthandDefaultPos)); + return this.finishNode(node, "SequenceExpression"); + } + return expr; +}; + +// Parse an assignment expression. This includes applications of +// operators like `+=`. + +pp.parseMaybeAssign = function (noIn, refShorthandDefaultPos, afterLeftParse) { + if (this.type == _tokentype.types._yield && this.inGenerator) return this.parseYield(); + + var failOnShorthandAssign = undefined; + if (!refShorthandDefaultPos) { + refShorthandDefaultPos = { start: 0 }; + failOnShorthandAssign = true; + } else { + failOnShorthandAssign = false; + } + var startPos = this.start, + startLoc = this.startLoc; + if (this.type == _tokentype.types.parenL || this.type == _tokentype.types.name) this.potentialArrowAt = this.start; + var left = this.parseMaybeConditional(noIn, refShorthandDefaultPos); + if (afterLeftParse) left = afterLeftParse.call(this, left, startPos, startLoc); + if (this.type.isAssign) { + var node = this.startNodeAt(startPos, startLoc); + node.operator = this.value; + node.left = this.type === _tokentype.types.eq ? this.toAssignable(left) : left; + refShorthandDefaultPos.start = 0; // reset because shorthand default was used correctly + this.checkLVal(left); + this.next(); + node.right = this.parseMaybeAssign(noIn); + return this.finishNode(node, "AssignmentExpression"); + } else if (failOnShorthandAssign && refShorthandDefaultPos.start) { + this.unexpected(refShorthandDefaultPos.start); + } + return left; +}; + +// Parse a ternary conditional (`?:`) operator. + +pp.parseMaybeConditional = function (noIn, refShorthandDefaultPos) { + var startPos = this.start, + startLoc = this.startLoc; + var expr = this.parseExprOps(noIn, refShorthandDefaultPos); + if (refShorthandDefaultPos && refShorthandDefaultPos.start) return expr; + if (this.eat(_tokentype.types.question)) { + var node = this.startNodeAt(startPos, startLoc); + node.test = expr; + node.consequent = this.parseMaybeAssign(); + this.expect(_tokentype.types.colon); + node.alternate = this.parseMaybeAssign(noIn); + return this.finishNode(node, "ConditionalExpression"); + } + return expr; +}; + +// Start the precedence parser. + +pp.parseExprOps = function (noIn, refShorthandDefaultPos) { + var startPos = this.start, + startLoc = this.startLoc; + var expr = this.parseMaybeUnary(refShorthandDefaultPos); + if (refShorthandDefaultPos && refShorthandDefaultPos.start) return expr; + return this.parseExprOp(expr, startPos, startLoc, -1, noIn); +}; + +// Parse binary operators with the operator precedence parsing +// algorithm. `left` is the left-hand side of the operator. +// `minPrec` provides context that allows the function to stop and +// defer further parser to one of its callers when it encounters an +// operator that has a lower precedence than the set it is parsing. + +pp.parseExprOp = function (left, leftStartPos, leftStartLoc, minPrec, noIn) { + var prec = this.type.binop; + if (prec != null && (!noIn || this.type !== _tokentype.types._in)) { + if (prec > minPrec) { + var node = this.startNodeAt(leftStartPos, leftStartLoc); + node.left = left; + node.operator = this.value; + var op = this.type; + this.next(); + var startPos = this.start, + startLoc = this.startLoc; + node.right = this.parseExprOp(this.parseMaybeUnary(), startPos, startLoc, prec, noIn); + this.finishNode(node, op === _tokentype.types.logicalOR || op === _tokentype.types.logicalAND ? "LogicalExpression" : "BinaryExpression"); + return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, noIn); + } + } + return left; +}; + +// Parse unary operators, both prefix and postfix. + +pp.parseMaybeUnary = function (refShorthandDefaultPos) { + if (this.type.prefix) { + var node = this.startNode(), + update = this.type === _tokentype.types.incDec; + node.operator = this.value; + node.prefix = true; + this.next(); + node.argument = this.parseMaybeUnary(); + if (refShorthandDefaultPos && refShorthandDefaultPos.start) this.unexpected(refShorthandDefaultPos.start); + if (update) this.checkLVal(node.argument);else if (this.strict && node.operator === "delete" && node.argument.type === "Identifier") this.raise(node.start, "Deleting local variable in strict mode"); + return this.finishNode(node, update ? "UpdateExpression" : "UnaryExpression"); + } + var startPos = this.start, + startLoc = this.startLoc; + var expr = this.parseExprSubscripts(refShorthandDefaultPos); + if (refShorthandDefaultPos && refShorthandDefaultPos.start) return expr; + while (this.type.postfix && !this.canInsertSemicolon()) { + var node = this.startNodeAt(startPos, startLoc); + node.operator = this.value; + node.prefix = false; + node.argument = expr; + this.checkLVal(expr); + this.next(); + expr = this.finishNode(node, "UpdateExpression"); + } + return expr; +}; + +// Parse call, dot, and `[]`-subscript expressions. + +pp.parseExprSubscripts = function (refShorthandDefaultPos) { + var startPos = this.start, + startLoc = this.startLoc; + var expr = this.parseExprAtom(refShorthandDefaultPos); + if (refShorthandDefaultPos && refShorthandDefaultPos.start) return expr; + return this.parseSubscripts(expr, startPos, startLoc); +}; + +pp.parseSubscripts = function (base, startPos, startLoc, noCalls) { + for (;;) { + if (this.eat(_tokentype.types.dot)) { + var node = this.startNodeAt(startPos, startLoc); + node.object = base; + node.property = this.parseIdent(true); + node.computed = false; + base = this.finishNode(node, "MemberExpression"); + } else if (this.eat(_tokentype.types.bracketL)) { + var node = this.startNodeAt(startPos, startLoc); + node.object = base; + node.property = this.parseExpression(); + node.computed = true; + this.expect(_tokentype.types.bracketR); + base = this.finishNode(node, "MemberExpression"); + } else if (!noCalls && this.eat(_tokentype.types.parenL)) { + var node = this.startNodeAt(startPos, startLoc); + node.callee = base; + node.arguments = this.parseExprList(_tokentype.types.parenR, false); + base = this.finishNode(node, "CallExpression"); + } else if (this.type === _tokentype.types.backQuote) { + var node = this.startNodeAt(startPos, startLoc); + node.tag = base; + node.quasi = this.parseTemplate(); + base = this.finishNode(node, "TaggedTemplateExpression"); + } else { + return base; + } + } +}; + +// Parse an atomic expression — either a single token that is an +// expression, an expression started by a keyword like `function` or +// `new`, or an expression wrapped in punctuation like `()`, `[]`, +// or `{}`. + +pp.parseExprAtom = function (refShorthandDefaultPos) { + var node = undefined, + canBeArrow = this.potentialArrowAt == this.start; + switch (this.type) { + case _tokentype.types._super: + if (!this.inFunction) this.raise(this.start, "'super' outside of function or class"); + case _tokentype.types._this: + var type = this.type === _tokentype.types._this ? "ThisExpression" : "Super"; + node = this.startNode(); + this.next(); + return this.finishNode(node, type); + + case _tokentype.types._yield: + if (this.inGenerator) this.unexpected(); + + case _tokentype.types.name: + var startPos = this.start, + startLoc = this.startLoc; + var id = this.parseIdent(this.type !== _tokentype.types.name); + if (canBeArrow && !this.canInsertSemicolon() && this.eat(_tokentype.types.arrow)) return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id]); + return id; + + case _tokentype.types.regexp: + var value = this.value; + node = this.parseLiteral(value.value); + node.regex = { pattern: value.pattern, flags: value.flags }; + return node; + + case _tokentype.types.num:case _tokentype.types.string: + return this.parseLiteral(this.value); + + case _tokentype.types._null:case _tokentype.types._true:case _tokentype.types._false: + node = this.startNode(); + node.value = this.type === _tokentype.types._null ? null : this.type === _tokentype.types._true; + node.raw = this.type.keyword; + this.next(); + return this.finishNode(node, "Literal"); + + case _tokentype.types.parenL: + return this.parseParenAndDistinguishExpression(canBeArrow); + + case _tokentype.types.bracketL: + node = this.startNode(); + this.next(); + // check whether this is array comprehension or regular array + if (this.options.ecmaVersion >= 7 && this.type === _tokentype.types._for) { + return this.parseComprehension(node, false); + } + node.elements = this.parseExprList(_tokentype.types.bracketR, true, true, refShorthandDefaultPos); + return this.finishNode(node, "ArrayExpression"); + + case _tokentype.types.braceL: + return this.parseObj(false, refShorthandDefaultPos); + + case _tokentype.types._function: + node = this.startNode(); + this.next(); + return this.parseFunction(node, false); + + case _tokentype.types._class: + return this.parseClass(this.startNode(), false); + + case _tokentype.types._new: + return this.parseNew(); + + case _tokentype.types.backQuote: + return this.parseTemplate(); + + default: + this.unexpected(); + } +}; + +pp.parseLiteral = function (value) { + var node = this.startNode(); + node.value = value; + node.raw = this.input.slice(this.start, this.end); + this.next(); + return this.finishNode(node, "Literal"); +}; + +pp.parseParenExpression = function () { + this.expect(_tokentype.types.parenL); + var val = this.parseExpression(); + this.expect(_tokentype.types.parenR); + return val; +}; + +pp.parseParenAndDistinguishExpression = function (canBeArrow) { + var startPos = this.start, + startLoc = this.startLoc, + val = undefined; + if (this.options.ecmaVersion >= 6) { + this.next(); + + if (this.options.ecmaVersion >= 7 && this.type === _tokentype.types._for) { + return this.parseComprehension(this.startNodeAt(startPos, startLoc), true); + } + + var innerStartPos = this.start, + innerStartLoc = this.startLoc; + var exprList = [], + first = true; + var refShorthandDefaultPos = { start: 0 }, + spreadStart = undefined, + innerParenStart = undefined; + while (this.type !== _tokentype.types.parenR) { + first ? first = false : this.expect(_tokentype.types.comma); + if (this.type === _tokentype.types.ellipsis) { + spreadStart = this.start; + exprList.push(this.parseParenItem(this.parseRest())); + break; + } else { + if (this.type === _tokentype.types.parenL && !innerParenStart) { + innerParenStart = this.start; + } + exprList.push(this.parseMaybeAssign(false, refShorthandDefaultPos, this.parseParenItem)); + } + } + var innerEndPos = this.start, + innerEndLoc = this.startLoc; + this.expect(_tokentype.types.parenR); + + if (canBeArrow && !this.canInsertSemicolon() && this.eat(_tokentype.types.arrow)) { + if (innerParenStart) this.unexpected(innerParenStart); + return this.parseParenArrowList(startPos, startLoc, exprList); + } + + if (!exprList.length) this.unexpected(this.lastTokStart); + if (spreadStart) this.unexpected(spreadStart); + if (refShorthandDefaultPos.start) this.unexpected(refShorthandDefaultPos.start); + + if (exprList.length > 1) { + val = this.startNodeAt(innerStartPos, innerStartLoc); + val.expressions = exprList; + this.finishNodeAt(val, "SequenceExpression", innerEndPos, innerEndLoc); + } else { + val = exprList[0]; + } + } else { + val = this.parseParenExpression(); + } + + if (this.options.preserveParens) { + var par = this.startNodeAt(startPos, startLoc); + par.expression = val; + return this.finishNode(par, "ParenthesizedExpression"); + } else { + return val; + } +}; + +pp.parseParenItem = function (item) { + return item; +}; + +pp.parseParenArrowList = function (startPos, startLoc, exprList) { + return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList); +}; + +// New's precedence is slightly tricky. It must allow its argument +// to be a `[]` or dot subscript expression, but not a call — at +// least, not without wrapping it in parentheses. Thus, it uses the + +var empty = []; + +pp.parseNew = function () { + var node = this.startNode(); + var meta = this.parseIdent(true); + if (this.options.ecmaVersion >= 6 && this.eat(_tokentype.types.dot)) { + node.meta = meta; + node.property = this.parseIdent(true); + if (node.property.name !== "target") this.raise(node.property.start, "The only valid meta property for new is new.target"); + return this.finishNode(node, "MetaProperty"); + } + var startPos = this.start, + startLoc = this.startLoc; + node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true); + if (this.eat(_tokentype.types.parenL)) node.arguments = this.parseExprList(_tokentype.types.parenR, false);else node.arguments = empty; + return this.finishNode(node, "NewExpression"); +}; + +// Parse template expression. + +pp.parseTemplateElement = function () { + var elem = this.startNode(); + elem.value = { + raw: this.input.slice(this.start, this.end).replace(/\r\n?/g, "\n"), + cooked: this.value + }; + this.next(); + elem.tail = this.type === _tokentype.types.backQuote; + return this.finishNode(elem, "TemplateElement"); +}; + +pp.parseTemplate = function () { + var node = this.startNode(); + this.next(); + node.expressions = []; + var curElt = this.parseTemplateElement(); + node.quasis = [curElt]; + while (!curElt.tail) { + this.expect(_tokentype.types.dollarBraceL); + node.expressions.push(this.parseExpression()); + this.expect(_tokentype.types.braceR); + node.quasis.push(curElt = this.parseTemplateElement()); + } + this.next(); + return this.finishNode(node, "TemplateLiteral"); +}; + +// Parse an object literal or binding pattern. + +pp.parseObj = function (isPattern, refShorthandDefaultPos) { + var node = this.startNode(), + first = true, + propHash = {}; + node.properties = []; + this.next(); + while (!this.eat(_tokentype.types.braceR)) { + if (!first) { + this.expect(_tokentype.types.comma); + if (this.afterTrailingComma(_tokentype.types.braceR)) break; + } else first = false; + + var prop = this.startNode(), + isGenerator = undefined, + startPos = undefined, + startLoc = undefined; + if (this.options.ecmaVersion >= 6) { + prop.method = false; + prop.shorthand = false; + if (isPattern || refShorthandDefaultPos) { + startPos = this.start; + startLoc = this.startLoc; + } + if (!isPattern) isGenerator = this.eat(_tokentype.types.star); + } + this.parsePropertyName(prop); + this.parsePropertyValue(prop, isPattern, isGenerator, startPos, startLoc, refShorthandDefaultPos); + this.checkPropClash(prop, propHash); + node.properties.push(this.finishNode(prop, "Property")); + } + return this.finishNode(node, isPattern ? "ObjectPattern" : "ObjectExpression"); +}; + +pp.parsePropertyValue = function (prop, isPattern, isGenerator, startPos, startLoc, refShorthandDefaultPos) { + if (this.eat(_tokentype.types.colon)) { + prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refShorthandDefaultPos); + prop.kind = "init"; + } else if (this.options.ecmaVersion >= 6 && this.type === _tokentype.types.parenL) { + if (isPattern) this.unexpected(); + prop.kind = "init"; + prop.method = true; + prop.value = this.parseMethod(isGenerator); + } else if (this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === "Identifier" && (prop.key.name === "get" || prop.key.name === "set") && (this.type != _tokentype.types.comma && this.type != _tokentype.types.braceR)) { + if (isGenerator || isPattern) this.unexpected(); + prop.kind = prop.key.name; + this.parsePropertyName(prop); + prop.value = this.parseMethod(false); + var paramCount = prop.kind === "get" ? 0 : 1; + if (prop.value.params.length !== paramCount) { + var start = prop.value.start; + if (prop.kind === "get") this.raise(start, "getter should have no params");else this.raise(start, "setter should have exactly one param"); + } + } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === "Identifier") { + prop.kind = "init"; + if (isPattern) { + if (this.isKeyword(prop.key.name) || this.strict && (_identifier.reservedWords.strictBind(prop.key.name) || _identifier.reservedWords.strict(prop.key.name)) || !this.options.allowReserved && this.isReservedWord(prop.key.name)) this.raise(prop.key.start, "Binding " + prop.key.name); + prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key); + } else if (this.type === _tokentype.types.eq && refShorthandDefaultPos) { + if (!refShorthandDefaultPos.start) refShorthandDefaultPos.start = this.start; + prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key); + } else { + prop.value = prop.key; + } + prop.shorthand = true; + } else this.unexpected(); +}; + +pp.parsePropertyName = function (prop) { + if (this.options.ecmaVersion >= 6) { + if (this.eat(_tokentype.types.bracketL)) { + prop.computed = true; + prop.key = this.parseMaybeAssign(); + this.expect(_tokentype.types.bracketR); + return prop.key; + } else { + prop.computed = false; + } + } + return prop.key = this.type === _tokentype.types.num || this.type === _tokentype.types.string ? this.parseExprAtom() : this.parseIdent(true); +}; + +// Initialize empty function node. + +pp.initFunction = function (node) { + node.id = null; + if (this.options.ecmaVersion >= 6) { + node.generator = false; + node.expression = false; + } +}; + +// Parse object or class method. + +pp.parseMethod = function (isGenerator) { + var node = this.startNode(); + this.initFunction(node); + this.expect(_tokentype.types.parenL); + node.params = this.parseBindingList(_tokentype.types.parenR, false, false); + var allowExpressionBody = undefined; + if (this.options.ecmaVersion >= 6) { + node.generator = isGenerator; + } + this.parseFunctionBody(node, false); + return this.finishNode(node, "FunctionExpression"); +}; + +// Parse arrow function expression with given parameters. + +pp.parseArrowExpression = function (node, params) { + this.initFunction(node); + node.params = this.toAssignableList(params, true); + this.parseFunctionBody(node, true); + return this.finishNode(node, "ArrowFunctionExpression"); +}; + +// Parse function body and check parameters. + +pp.parseFunctionBody = function (node, allowExpression) { + var isExpression = allowExpression && this.type !== _tokentype.types.braceL; + + if (isExpression) { + node.body = this.parseMaybeAssign(); + node.expression = true; + } else { + // Start a new scope with regard to labels and the `inFunction` + // flag (restore them to their old value afterwards). + var oldInFunc = this.inFunction, + oldInGen = this.inGenerator, + oldLabels = this.labels; + this.inFunction = true;this.inGenerator = node.generator;this.labels = []; + node.body = this.parseBlock(true); + node.expression = false; + this.inFunction = oldInFunc;this.inGenerator = oldInGen;this.labels = oldLabels; + } + + // If this is a strict mode function, verify that argument names + // are not repeated, and it does not try to bind the words `eval` + // or `arguments`. + if (this.strict || !isExpression && node.body.body.length && this.isUseStrict(node.body.body[0])) { + var nameHash = {}, + oldStrict = this.strict; + this.strict = true; + if (node.id) this.checkLVal(node.id, true); + for (var i = 0; i < node.params.length; i++) { + this.checkLVal(node.params[i], true, nameHash); + }this.strict = oldStrict; + } +}; + +// Parses a comma-separated list of expressions, and returns them as +// an array. `close` is the token type that ends the list, and +// `allowEmpty` can be turned on to allow subsequent commas with +// nothing in between them to be parsed as `null` (which is needed +// for array literals). + +pp.parseExprList = function (close, allowTrailingComma, allowEmpty, refShorthandDefaultPos) { + var elts = [], + first = true; + while (!this.eat(close)) { + if (!first) { + this.expect(_tokentype.types.comma); + if (allowTrailingComma && this.afterTrailingComma(close)) break; + } else first = false; + + var elt = undefined; + if (allowEmpty && this.type === _tokentype.types.comma) elt = null;else if (this.type === _tokentype.types.ellipsis) elt = this.parseSpread(refShorthandDefaultPos);else elt = this.parseMaybeAssign(false, refShorthandDefaultPos); + elts.push(elt); + } + return elts; +}; + +// Parse the next token as an identifier. If `liberal` is true (used +// when parsing properties), it will also convert keywords into +// identifiers. + +pp.parseIdent = function (liberal) { + var node = this.startNode(); + if (liberal && this.options.allowReserved == "never") liberal = false; + if (this.type === _tokentype.types.name) { + if (!liberal && (!this.options.allowReserved && this.isReservedWord(this.value) || this.strict && _identifier.reservedWords.strict(this.value) && (this.options.ecmaVersion >= 6 || this.input.slice(this.start, this.end).indexOf("\\") == -1))) this.raise(this.start, "The keyword '" + this.value + "' is reserved"); + node.name = this.value; + } else if (liberal && this.type.keyword) { + node.name = this.type.keyword; + } else { + this.unexpected(); + } + this.next(); + return this.finishNode(node, "Identifier"); +}; + +// Parses yield expression inside generator. + +pp.parseYield = function () { + var node = this.startNode(); + this.next(); + if (this.type == _tokentype.types.semi || this.canInsertSemicolon() || this.type != _tokentype.types.star && !this.type.startsExpr) { + node.delegate = false; + node.argument = null; + } else { + node.delegate = this.eat(_tokentype.types.star); + node.argument = this.parseMaybeAssign(); + } + return this.finishNode(node, "YieldExpression"); +}; + +// Parses array and generator comprehensions. + +pp.parseComprehension = function (node, isGenerator) { + node.blocks = []; + while (this.type === _tokentype.types._for) { + var block = this.startNode(); + this.next(); + this.expect(_tokentype.types.parenL); + block.left = this.parseBindingAtom(); + this.checkLVal(block.left, true); + this.expectContextual("of"); + block.right = this.parseExpression(); + this.expect(_tokentype.types.parenR); + node.blocks.push(this.finishNode(block, "ComprehensionBlock")); + } + node.filter = this.eat(_tokentype.types._if) ? this.parseParenExpression() : null; + node.body = this.parseExpression(); + this.expect(isGenerator ? _tokentype.types.parenR : _tokentype.types.bracketR); + node.generator = isGenerator; + return this.finishNode(node, "ComprehensionExpression"); +}; + +},{"./identifier":2,"./state":10,"./tokentype":14,"./util":15}],2:[function(_dereq_,module,exports){ +// This is a trick taken from Esprima. It turns out that, on +// non-Chrome browsers, to check whether a string is in a set, a +// predicate containing a big ugly `switch` statement is faster than +// a regular expression, and on Chrome the two are about on par. +// This function uses `eval` (non-lexical) to produce such a +// predicate from a space-separated string of words. +// +// It starts by sorting the words by length. + +"use strict"; + +exports.__esModule = true; +exports.isIdentifierStart = isIdentifierStart; +exports.isIdentifierChar = isIdentifierChar; +function makePredicate(words) { + words = words.split(" "); + var f = "", + cats = []; + out: for (var i = 0; i < words.length; ++i) { + for (var j = 0; j < cats.length; ++j) { + if (cats[j][0].length == words[i].length) { + cats[j].push(words[i]); + continue out; + } + }cats.push([words[i]]); + } + function compareTo(arr) { + if (arr.length == 1) return f += "return str === " + JSON.stringify(arr[0]) + ";"; + f += "switch(str){"; + for (var i = 0; i < arr.length; ++i) { + f += "case " + JSON.stringify(arr[i]) + ":"; + }f += "return true}return false;"; + } + + // When there are more than three length categories, an outer + // switch first dispatches on the lengths, to save on comparisons. + + if (cats.length > 3) { + cats.sort(function (a, b) { + return b.length - a.length; + }); + f += "switch(str.length){"; + for (var i = 0; i < cats.length; ++i) { + var cat = cats[i]; + f += "case " + cat[0].length + ":"; + compareTo(cat); + } + f += "}" + + // Otherwise, simply generate a flat `switch` statement. + + ; + } else { + compareTo(words); + } + return new Function("str", f); +} + +// Reserved word lists for various dialects of the language + +var reservedWords = { + 3: makePredicate("abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile"), + 5: makePredicate("class enum extends super const export import"), + 6: makePredicate("enum await"), + strict: makePredicate("implements interface let package private protected public static yield"), + strictBind: makePredicate("eval arguments") +}; + +exports.reservedWords = reservedWords; +// And the keywords + +var ecma5AndLessKeywords = "break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this"; + +var keywords = { + 5: makePredicate(ecma5AndLessKeywords), + 6: makePredicate(ecma5AndLessKeywords + " let const class extends export import yield super") +}; + +exports.keywords = keywords; +// ## Character categories + +// Big ugly regular expressions that match characters in the +// whitespace, identifier, and identifier-start categories. These +// are only applied when a character is found to actually have a +// code point above 128. +// Generated by `tools/generate-identifier-regex.js`. + +var nonASCIIidentifierStartChars = "ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠ-ࢲऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ゛-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞭꞰꞱꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭟꭤꭥꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ"; +var nonASCIIidentifierChars = "‌‍·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-٩ٰۖ-ۜ۟-۪ۤۧۨ-ۭ۰-۹ܑܰ-݊ަ-ް߀-߉߫-߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛ࣤ-ःऺ-़ा-ॏ॑-ॗॢॣ०-९ঁ-ঃ়া-ৄেৈো-্ৗৢৣ০-৯ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣ૦-૯ଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୢୣ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఀ-ఃా-ౄె-ైొ-్ౕౖౢౣ౦-౯ಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣ೦-೯ഁ-ഃാ-ൄെ-ൈൊ-്ൗൢൣ൦-൯ංඃ්ා-ුූෘ-ෟ෦-෯ෲෳัิ-ฺ็-๎๐-๙ັິ-ູົຼ່-ໍ໐-໙༘༙༠-༩༹༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှ၀-၉ၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟፩-፱ᜒ-᜔ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝០-៩᠋-᠍᠐-᠙ᢩᤠ-ᤫᤰ-᤻᥆-᥏ᦰ-ᧀᧈᧉ᧐-᧚ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪰-᪽ᬀ-ᬄ᬴-᭄᭐-᭙᭫-᭳ᮀ-ᮂᮡ-ᮭ᮰-᮹᯦-᯳ᰤ-᰷᱀-᱉᱐-᱙᳐-᳔᳒-᳨᳭ᳲ-᳴᳸᳹᷀-᷵᷼-᷿‿⁀⁔⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꘠-꘩꙯ꙴ-꙽ꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧꢀꢁꢴ-꣄꣐-꣙꣠-꣱꤀-꤉ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀꧐-꧙ꧥ꧰-꧹ꨩ-ꨶꩃꩌꩍ꩐-꩙ꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭꯰-꯹ﬞ︀-️︠-︭︳︴﹍-﹏0-9_"; + +var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); +var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]"); + +nonASCIIidentifierStartChars = nonASCIIidentifierChars = null; + +// These are a run-length and offset encoded representation of the +// >0xffff code points that are a valid part of identifiers. The +// offset starts at 0x10000, and each pair of numbers represents an +// offset to the next range, and then a size of the range. They were +// generated by tools/generate-identifier-regex.js +var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 17, 26, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 99, 39, 9, 51, 157, 310, 10, 21, 11, 7, 153, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 98, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 26, 45, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 955, 52, 76, 44, 33, 24, 27, 35, 42, 34, 4, 0, 13, 47, 15, 3, 22, 0, 38, 17, 2, 24, 133, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 32, 4, 287, 47, 21, 1, 2, 0, 185, 46, 82, 47, 21, 0, 60, 42, 502, 63, 32, 0, 449, 56, 1288, 920, 104, 110, 2962, 1070, 13266, 568, 8, 30, 114, 29, 19, 47, 17, 3, 32, 20, 6, 18, 881, 68, 12, 0, 67, 12, 16481, 1, 3071, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 4149, 196, 1340, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42710, 42, 4148, 12, 221, 16355, 541]; +var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 1306, 2, 54, 14, 32, 9, 16, 3, 46, 10, 54, 9, 7, 2, 37, 13, 2, 9, 52, 0, 13, 2, 49, 13, 16, 9, 83, 11, 168, 11, 6, 9, 8, 2, 57, 0, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 316, 19, 13, 9, 214, 6, 3, 8, 112, 16, 16, 9, 82, 12, 9, 9, 535, 9, 20855, 9, 135, 4, 60, 6, 26, 9, 1016, 45, 17, 3, 19723, 1, 5319, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 4305, 6, 792618, 239]; + +// This has a complexity linear to the value of the code. The +// assumption is that looking up astral identifier characters is +// rare. +function isInAstralSet(code, set) { + var pos = 0x10000; + for (var i = 0; i < set.length; i += 2) { + pos += set[i]; + if (pos > code) return false; + pos += set[i + 1]; + if (pos >= code) return true; + } +} + +// Test whether a given character code starts an identifier. + +function isIdentifierStart(code, astral) { + if (code < 65) return code === 36; + if (code < 91) return true; + if (code < 97) return code === 95; + if (code < 123) return true; + if (code <= 0xffff) return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)); + if (astral === false) return false; + return isInAstralSet(code, astralIdentifierStartCodes); +} + +// Test whether a given character is part of an identifier. + +function isIdentifierChar(code, astral) { + if (code < 48) return code === 36; + if (code < 58) return true; + if (code < 65) return false; + if (code < 91) return true; + if (code < 97) return code === 95; + if (code < 123) return true; + if (code <= 0xffff) return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)); + if (astral === false) return false; + return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes); +} + +},{}],3:[function(_dereq_,module,exports){ +// Acorn is a tiny, fast JavaScript parser written in JavaScript. +// +// Acorn was written by Marijn Haverbeke, Ingvar Stepanyan, and +// various contributors and released under an MIT license. +// +// Git repositories for Acorn are available at +// +// http://marijnhaverbeke.nl/git/acorn +// https://github.com/marijnh/acorn.git +// +// Please use the [github bug tracker][ghbt] to report issues. +// +// [ghbt]: https://github.com/marijnh/acorn/issues +// +// This file defines the main parser interface. The library also comes +// with a [error-tolerant parser][dammit] and an +// [abstract syntax tree walker][walk], defined in other files. +// +// [dammit]: acorn_loose.js +// [walk]: util/walk.js + +"use strict"; + +exports.__esModule = true; +exports.parse = parse; +exports.parseExpressionAt = parseExpressionAt; +exports.tokenizer = tokenizer; + +var _state = _dereq_("./state"); + +var _options = _dereq_("./options"); + +_dereq_("./parseutil"); + +_dereq_("./statement"); + +_dereq_("./lval"); + +_dereq_("./expression"); + +_dereq_("./location"); + +exports.Parser = _state.Parser; +exports.plugins = _state.plugins; +exports.defaultOptions = _options.defaultOptions; + +var _locutil = _dereq_("./locutil"); + +exports.Position = _locutil.Position; +exports.SourceLocation = _locutil.SourceLocation; +exports.getLineInfo = _locutil.getLineInfo; + +var _node = _dereq_("./node"); + +exports.Node = _node.Node; + +var _tokentype = _dereq_("./tokentype"); + +exports.TokenType = _tokentype.TokenType; +exports.tokTypes = _tokentype.types; + +var _tokencontext = _dereq_("./tokencontext"); + +exports.TokContext = _tokencontext.TokContext; +exports.tokContexts = _tokencontext.types; + +var _identifier = _dereq_("./identifier"); + +exports.isIdentifierChar = _identifier.isIdentifierChar; +exports.isIdentifierStart = _identifier.isIdentifierStart; + +var _tokenize = _dereq_("./tokenize"); + +exports.Token = _tokenize.Token; + +var _whitespace = _dereq_("./whitespace"); + +exports.isNewLine = _whitespace.isNewLine; +exports.lineBreak = _whitespace.lineBreak; +exports.lineBreakG = _whitespace.lineBreakG; +var version = "2.3.0"; + +exports.version = version; +// The main exported interface (under `self.acorn` when in the +// browser) is a `parse` function that takes a code string and +// returns an abstract syntax tree as specified by [Mozilla parser +// API][api]. +// +// [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API + +function parse(input, options) { + return new _state.Parser(options, input).parse(); +} + +// This function tries to parse a single expression at a given +// offset in a string. Useful for parsing mixed-language formats +// that embed JavaScript expressions. + +function parseExpressionAt(input, pos, options) { + var p = new _state.Parser(options, input, pos); + p.nextToken(); + return p.parseExpression(); +} + +// Acorn is organized as a tokenizer and a recursive-descent parser. +// The `tokenize` export provides an interface to the tokenizer. + +function tokenizer(input, options) { + return new _state.Parser(options, input); +} + +},{"./expression":1,"./identifier":2,"./location":4,"./locutil":5,"./lval":6,"./node":7,"./options":8,"./parseutil":9,"./state":10,"./statement":11,"./tokencontext":12,"./tokenize":13,"./tokentype":14,"./whitespace":16}],4:[function(_dereq_,module,exports){ +"use strict"; + +var _state = _dereq_("./state"); + +var _locutil = _dereq_("./locutil"); + +var pp = _state.Parser.prototype; + +// This function is used to raise exceptions on parse errors. It +// takes an offset integer (into the current `input`) to indicate +// the location of the error, attaches the position to the end +// of the error message, and then raises a `SyntaxError` with that +// message. + +pp.raise = function (pos, message) { + var loc = _locutil.getLineInfo(this.input, pos); + message += " (" + loc.line + ":" + loc.column + ")"; + var err = new SyntaxError(message); + err.pos = pos;err.loc = loc;err.raisedAt = this.pos; + throw err; +}; + +pp.curPosition = function () { + if (this.options.locations) { + return new _locutil.Position(this.curLine, this.pos - this.lineStart); + } +}; + +},{"./locutil":5,"./state":10}],5:[function(_dereq_,module,exports){ +"use strict"; + +exports.__esModule = true; +exports.getLineInfo = getLineInfo; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var _whitespace = _dereq_("./whitespace"); + +// These are used when `options.locations` is on, for the +// `startLoc` and `endLoc` properties. + +var Position = (function () { + function Position(line, col) { + _classCallCheck(this, Position); + + this.line = line; + this.column = col; + } + + Position.prototype.offset = function offset(n) { + return new Position(this.line, this.column + n); + }; + + return Position; +})(); + +exports.Position = Position; + +var SourceLocation = function SourceLocation(p, start, end) { + _classCallCheck(this, SourceLocation); + + this.start = start; + this.end = end; + if (p.sourceFile !== null) this.source = p.sourceFile; +}; + +exports.SourceLocation = SourceLocation; + +// The `getLineInfo` function is mostly useful when the +// `locations` option is off (for performance reasons) and you +// want to find the line/column position for a given character +// offset. `input` should be the code string that the offset refers +// into. + +function getLineInfo(input, offset) { + for (var line = 1, cur = 0;;) { + _whitespace.lineBreakG.lastIndex = cur; + var match = _whitespace.lineBreakG.exec(input); + if (match && match.index < offset) { + ++line; + cur = match.index + match[0].length; + } else { + return new Position(line, offset - cur); + } + } +} + +},{"./whitespace":16}],6:[function(_dereq_,module,exports){ +"use strict"; + +var _tokentype = _dereq_("./tokentype"); + +var _state = _dereq_("./state"); + +var _identifier = _dereq_("./identifier"); + +var _util = _dereq_("./util"); + +var pp = _state.Parser.prototype; + +// Convert existing expression atom to assignable pattern +// if possible. + +pp.toAssignable = function (node, isBinding) { + if (this.options.ecmaVersion >= 6 && node) { + switch (node.type) { + case "Identifier": + case "ObjectPattern": + case "ArrayPattern": + case "AssignmentPattern": + break; + + case "ObjectExpression": + node.type = "ObjectPattern"; + for (var i = 0; i < node.properties.length; i++) { + var prop = node.properties[i]; + if (prop.kind !== "init") this.raise(prop.key.start, "Object pattern can't contain getter or setter"); + this.toAssignable(prop.value, isBinding); + } + break; + + case "ArrayExpression": + node.type = "ArrayPattern"; + this.toAssignableList(node.elements, isBinding); + break; + + case "AssignmentExpression": + if (node.operator === "=") { + node.type = "AssignmentPattern"; + delete node.operator; + } else { + this.raise(node.left.end, "Only '=' operator can be used for specifying default value."); + } + break; + + case "ParenthesizedExpression": + node.expression = this.toAssignable(node.expression, isBinding); + break; + + case "MemberExpression": + if (!isBinding) break; + + default: + this.raise(node.start, "Assigning to rvalue"); + } + } + return node; +}; + +// Convert list of expression atoms to binding list. + +pp.toAssignableList = function (exprList, isBinding) { + var end = exprList.length; + if (end) { + var last = exprList[end - 1]; + if (last && last.type == "RestElement") { + --end; + } else if (last && last.type == "SpreadElement") { + last.type = "RestElement"; + var arg = last.argument; + this.toAssignable(arg, isBinding); + if (arg.type !== "Identifier" && arg.type !== "MemberExpression" && arg.type !== "ArrayPattern") this.unexpected(arg.start); + --end; + } + } + for (var i = 0; i < end; i++) { + var elt = exprList[i]; + if (elt) this.toAssignable(elt, isBinding); + } + return exprList; +}; + +// Parses spread element. + +pp.parseSpread = function (refShorthandDefaultPos) { + var node = this.startNode(); + this.next(); + node.argument = this.parseMaybeAssign(refShorthandDefaultPos); + return this.finishNode(node, "SpreadElement"); +}; + +pp.parseRest = function () { + var node = this.startNode(); + this.next(); + node.argument = this.type === _tokentype.types.name || this.type === _tokentype.types.bracketL ? this.parseBindingAtom() : this.unexpected(); + return this.finishNode(node, "RestElement"); +}; + +// Parses lvalue (assignable) atom. + +pp.parseBindingAtom = function () { + if (this.options.ecmaVersion < 6) return this.parseIdent(); + switch (this.type) { + case _tokentype.types.name: + return this.parseIdent(); + + case _tokentype.types.bracketL: + var node = this.startNode(); + this.next(); + node.elements = this.parseBindingList(_tokentype.types.bracketR, true, true); + return this.finishNode(node, "ArrayPattern"); + + case _tokentype.types.braceL: + return this.parseObj(true); + + default: + this.unexpected(); + } +}; + +pp.parseBindingList = function (close, allowEmpty, allowTrailingComma) { + var elts = [], + first = true; + while (!this.eat(close)) { + if (first) first = false;else this.expect(_tokentype.types.comma); + if (allowEmpty && this.type === _tokentype.types.comma) { + elts.push(null); + } else if (allowTrailingComma && this.afterTrailingComma(close)) { + break; + } else if (this.type === _tokentype.types.ellipsis) { + var rest = this.parseRest(); + this.parseBindingListItem(rest); + elts.push(rest); + this.expect(close); + break; + } else { + var elem = this.parseMaybeDefault(this.start, this.startLoc); + this.parseBindingListItem(elem); + elts.push(elem); + } + } + return elts; +}; + +pp.parseBindingListItem = function (param) { + return param; +}; + +// Parses assignment pattern around given atom if possible. + +pp.parseMaybeDefault = function (startPos, startLoc, left) { + left = left || this.parseBindingAtom(); + if (!this.eat(_tokentype.types.eq)) return left; + var node = this.startNodeAt(startPos, startLoc); + node.left = left; + node.right = this.parseMaybeAssign(); + return this.finishNode(node, "AssignmentPattern"); +}; + +// Verify that a node is an lval — something that can be assigned +// to. + +pp.checkLVal = function (expr, isBinding, checkClashes) { + switch (expr.type) { + case "Identifier": + if (this.strict && (_identifier.reservedWords.strictBind(expr.name) || _identifier.reservedWords.strict(expr.name))) this.raise(expr.start, (isBinding ? "Binding " : "Assigning to ") + expr.name + " in strict mode"); + if (checkClashes) { + if (_util.has(checkClashes, expr.name)) this.raise(expr.start, "Argument name clash in strict mode"); + checkClashes[expr.name] = true; + } + break; + + case "MemberExpression": + if (isBinding) this.raise(expr.start, (isBinding ? "Binding" : "Assigning to") + " member expression"); + break; + + case "ObjectPattern": + for (var i = 0; i < expr.properties.length; i++) { + this.checkLVal(expr.properties[i].value, isBinding, checkClashes); + }break; + + case "ArrayPattern": + for (var i = 0; i < expr.elements.length; i++) { + var elem = expr.elements[i]; + if (elem) this.checkLVal(elem, isBinding, checkClashes); + } + break; + + case "AssignmentPattern": + this.checkLVal(expr.left, isBinding, checkClashes); + break; + + case "RestElement": + this.checkLVal(expr.argument, isBinding, checkClashes); + break; + + case "ParenthesizedExpression": + this.checkLVal(expr.expression, isBinding, checkClashes); + break; + + default: + this.raise(expr.start, (isBinding ? "Binding" : "Assigning to") + " rvalue"); + } +}; + +},{"./identifier":2,"./state":10,"./tokentype":14,"./util":15}],7:[function(_dereq_,module,exports){ +"use strict"; + +exports.__esModule = true; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var _state = _dereq_("./state"); + +var _locutil = _dereq_("./locutil"); + +var Node = function Node(parser, pos, loc) { + _classCallCheck(this, Node); + + this.type = ""; + this.start = pos; + this.end = 0; + if (parser.options.locations) this.loc = new _locutil.SourceLocation(parser, loc); + if (parser.options.directSourceFile) this.sourceFile = parser.options.directSourceFile; + if (parser.options.ranges) this.range = [pos, 0]; +}; + +exports.Node = Node; + +// Start an AST node, attaching a start offset. + +var pp = _state.Parser.prototype; + +pp.startNode = function () { + return new Node(this, this.start, this.startLoc); +}; + +pp.startNodeAt = function (pos, loc) { + return new Node(this, pos, loc); +}; + +// Finish an AST node, adding `type` and `end` properties. + +function finishNodeAt(node, type, pos, loc) { + node.type = type; + node.end = pos; + if (this.options.locations) node.loc.end = loc; + if (this.options.ranges) node.range[1] = pos; + return node; +} + +pp.finishNode = function (node, type) { + return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc); +}; + +// Finish node at given position + +pp.finishNodeAt = function (node, type, pos, loc) { + return finishNodeAt.call(this, node, type, pos, loc); +}; + +},{"./locutil":5,"./state":10}],8:[function(_dereq_,module,exports){ +"use strict"; + +exports.__esModule = true; +exports.getOptions = getOptions; + +var _util = _dereq_("./util"); + +var _locutil = _dereq_("./locutil"); + +// A second optional argument can be given to further configure +// the parser process. These options are recognized: + +var defaultOptions = { + // `ecmaVersion` indicates the ECMAScript version to parse. Must + // be either 3, or 5, or 6. This influences support for strict + // mode, the set of reserved words, support for getters and + // setters and other features. + ecmaVersion: 5, + // Source type ("script" or "module") for different semantics + sourceType: "script", + // `onInsertedSemicolon` can be a callback that will be called + // when a semicolon is automatically inserted. It will be passed + // th position of the comma as an offset, and if `locations` is + // enabled, it is given the location as a `{line, column}` object + // as second argument. + onInsertedSemicolon: null, + // `onTrailingComma` is similar to `onInsertedSemicolon`, but for + // trailing commas. + onTrailingComma: null, + // By default, reserved words are not enforced. Disable + // `allowReserved` to enforce them. When this option has the + // value "never", reserved words and keywords can also not be + // used as property names. + allowReserved: true, + // When enabled, a return at the top level is not considered an + // error. + allowReturnOutsideFunction: false, + // When enabled, import/export statements are not constrained to + // appearing at the top of the program. + allowImportExportEverywhere: false, + // When enabled, hashbang directive in the beginning of file + // is allowed and treated as a line comment. + allowHashBang: false, + // When `locations` is on, `loc` properties holding objects with + // `start` and `end` properties in `{line, column}` form (with + // line being 1-based and column 0-based) will be attached to the + // nodes. + locations: false, + // A function can be passed as `onToken` option, which will + // cause Acorn to call that function with object in the same + // format as tokenize() returns. Note that you are not + // allowed to call the parser from the callback—that will + // corrupt its internal state. + onToken: null, + // A function can be passed as `onComment` option, which will + // cause Acorn to call that function with `(block, text, start, + // end)` parameters whenever a comment is skipped. `block` is a + // boolean indicating whether this is a block (`/* */`) comment, + // `text` is the content of the comment, and `start` and `end` are + // character offsets that denote the start and end of the comment. + // When the `locations` option is on, two more parameters are + // passed, the full `{line, column}` locations of the start and + // end of the comments. Note that you are not allowed to call the + // parser from the callback—that will corrupt its internal state. + onComment: null, + // Nodes have their start and end characters offsets recorded in + // `start` and `end` properties (directly on the node, rather than + // the `loc` object, which holds line/column data. To also add a + // [semi-standardized][range] `range` property holding a `[start, + // end]` array with the same numbers, set the `ranges` option to + // `true`. + // + // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678 + ranges: false, + // It is possible to parse multiple files into a single AST by + // passing the tree produced by parsing the first file as + // `program` option in subsequent parses. This will add the + // toplevel forms of the parsed file to the `Program` (top) node + // of an existing parse tree. + program: null, + // When `locations` is on, you can pass this to record the source + // file in every node's `loc` object. + sourceFile: null, + // This value, if given, is stored in every node, whether + // `locations` is on or off. + directSourceFile: null, + // When enabled, parenthesized expressions are represented by + // (non-standard) ParenthesizedExpression nodes + preserveParens: false, + plugins: {} +}; + +exports.defaultOptions = defaultOptions; +// Interpret and default an options object + +function getOptions(opts) { + var options = {}; + for (var opt in defaultOptions) { + options[opt] = opts && _util.has(opts, opt) ? opts[opt] : defaultOptions[opt]; + }if (_util.isArray(options.onToken)) { + (function () { + var tokens = options.onToken; + options.onToken = function (token) { + return tokens.push(token); + }; + })(); + } + if (_util.isArray(options.onComment)) options.onComment = pushComment(options, options.onComment); + + return options; +} + +function pushComment(options, array) { + return function (block, text, start, end, startLoc, endLoc) { + var comment = { + type: block ? "Block" : "Line", + value: text, + start: start, + end: end + }; + if (options.locations) comment.loc = new _locutil.SourceLocation(this, startLoc, endLoc); + if (options.ranges) comment.range = [start, end]; + array.push(comment); + }; +} + +},{"./locutil":5,"./util":15}],9:[function(_dereq_,module,exports){ +"use strict"; + +var _tokentype = _dereq_("./tokentype"); + +var _state = _dereq_("./state"); + +var _whitespace = _dereq_("./whitespace"); + +var pp = _state.Parser.prototype; + +// ## Parser utilities + +// Test whether a statement node is the string literal `"use strict"`. + +pp.isUseStrict = function (stmt) { + return this.options.ecmaVersion >= 5 && stmt.type === "ExpressionStatement" && stmt.expression.type === "Literal" && stmt.expression.raw.slice(1, -1) === "use strict"; +}; + +// Predicate that tests whether the next token is of the given +// type, and if yes, consumes it as a side effect. + +pp.eat = function (type) { + if (this.type === type) { + this.next(); + return true; + } else { + return false; + } +}; + +// Tests whether parsed token is a contextual keyword. + +pp.isContextual = function (name) { + return this.type === _tokentype.types.name && this.value === name; +}; + +// Consumes contextual keyword if possible. + +pp.eatContextual = function (name) { + return this.value === name && this.eat(_tokentype.types.name); +}; + +// Asserts that following token is given contextual keyword. + +pp.expectContextual = function (name) { + if (!this.eatContextual(name)) this.unexpected(); +}; + +// Test whether a semicolon can be inserted at the current position. + +pp.canInsertSemicolon = function () { + return this.type === _tokentype.types.eof || this.type === _tokentype.types.braceR || _whitespace.lineBreak.test(this.input.slice(this.lastTokEnd, this.start)); +}; + +pp.insertSemicolon = function () { + if (this.canInsertSemicolon()) { + if (this.options.onInsertedSemicolon) this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); + return true; + } +}; + +// Consume a semicolon, or, failing that, see if we are allowed to +// pretend that there is a semicolon at this position. + +pp.semicolon = function () { + if (!this.eat(_tokentype.types.semi) && !this.insertSemicolon()) this.unexpected(); +}; + +pp.afterTrailingComma = function (tokType) { + if (this.type == tokType) { + if (this.options.onTrailingComma) this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); + this.next(); + return true; + } +}; + +// Expect a token of a given type. If found, consume it, otherwise, +// raise an unexpected token error. + +pp.expect = function (type) { + this.eat(type) || this.unexpected(); +}; + +// Raise an unexpected token error. + +pp.unexpected = function (pos) { + this.raise(pos != null ? pos : this.start, "Unexpected token"); +}; + +},{"./state":10,"./tokentype":14,"./whitespace":16}],10:[function(_dereq_,module,exports){ +"use strict"; + +exports.__esModule = true; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var _identifier = _dereq_("./identifier"); + +var _tokentype = _dereq_("./tokentype"); + +var _whitespace = _dereq_("./whitespace"); + +var _options = _dereq_("./options"); + +// Registered plugins +var plugins = {}; + +exports.plugins = plugins; + +var Parser = (function () { + function Parser(options, input, startPos) { + _classCallCheck(this, Parser); + + this.options = _options.getOptions(options); + this.sourceFile = this.options.sourceFile; + this.isKeyword = _identifier.keywords[this.options.ecmaVersion >= 6 ? 6 : 5]; + this.isReservedWord = _identifier.reservedWords[this.options.ecmaVersion]; + this.input = String(input); + + // Used to signal to callers of `readWord1` whether the word + // contained any escape sequences. This is needed because words with + // escape sequences must not be interpreted as keywords. + this.containsEsc = false; + + // Load plugins + this.loadPlugins(this.options.plugins); + + // Set up token state + + // The current position of the tokenizer in the input. + if (startPos) { + this.pos = startPos; + this.lineStart = Math.max(0, this.input.lastIndexOf("\n", startPos)); + this.curLine = this.input.slice(0, this.lineStart).split(_whitespace.lineBreak).length; + } else { + this.pos = this.lineStart = 0; + this.curLine = 1; + } + + // Properties of the current token: + // Its type + this.type = _tokentype.types.eof; + // For tokens that include more information than their type, the value + this.value = null; + // Its start and end offset + this.start = this.end = this.pos; + // And, if locations are used, the {line, column} object + // corresponding to those offsets + this.startLoc = this.endLoc = this.curPosition(); + + // Position information for the previous token + this.lastTokEndLoc = this.lastTokStartLoc = null; + this.lastTokStart = this.lastTokEnd = this.pos; + + // The context stack is used to superficially track syntactic + // context to predict whether a regular expression is allowed in a + // given position. + this.context = this.initialContext(); + this.exprAllowed = true; + + // Figure out if it's a module code. + this.strict = this.inModule = this.options.sourceType === "module"; + + // Used to signify the start of a potential arrow function + this.potentialArrowAt = -1; + + // Flags to track whether we are in a function, a generator. + this.inFunction = this.inGenerator = false; + // Labels in scope. + this.labels = []; + + // If enabled, skip leading hashbang line. + if (this.pos === 0 && this.options.allowHashBang && this.input.slice(0, 2) === "#!") this.skipLineComment(2); + } + + Parser.prototype.extend = function extend(name, f) { + this[name] = f(this[name]); + }; + + Parser.prototype.loadPlugins = function loadPlugins(pluginConfigs) { + for (var _name in pluginConfigs) { + var plugin = plugins[_name]; + if (!plugin) throw new Error("Plugin '" + _name + "' not found"); + plugin(this, pluginConfigs[_name]); + } + }; + + Parser.prototype.parse = function parse() { + var node = this.options.program || this.startNode(); + this.nextToken(); + return this.parseTopLevel(node); + }; + + return Parser; +})(); + +exports.Parser = Parser; + +},{"./identifier":2,"./options":8,"./tokentype":14,"./whitespace":16}],11:[function(_dereq_,module,exports){ +"use strict"; + +var _tokentype = _dereq_("./tokentype"); + +var _state = _dereq_("./state"); + +var _whitespace = _dereq_("./whitespace"); + +var pp = _state.Parser.prototype; + +// ### Statement parsing + +// Parse a program. Initializes the parser, reads any number of +// statements, and wraps them in a Program node. Optionally takes a +// `program` argument. If present, the statements will be appended +// to its body instead of creating a new node. + +pp.parseTopLevel = function (node) { + var first = true; + if (!node.body) node.body = []; + while (this.type !== _tokentype.types.eof) { + var stmt = this.parseStatement(true, true); + node.body.push(stmt); + if (first) { + if (this.isUseStrict(stmt)) this.setStrict(true); + first = false; + } + } + this.next(); + if (this.options.ecmaVersion >= 6) { + node.sourceType = this.options.sourceType; + } + return this.finishNode(node, "Program"); +}; + +var loopLabel = { kind: "loop" }, + switchLabel = { kind: "switch" }; + +// Parse a single statement. +// +// If expecting a statement and finding a slash operator, parse a +// regular expression literal. This is to handle cases like +// `if (foo) /blah/.exec(foo)`, where looking at the previous token +// does not help. + +pp.parseStatement = function (declaration, topLevel) { + var starttype = this.type, + node = this.startNode(); + + // Most types of statements are recognized by the keyword they + // start with. Many are trivial to parse, some require a bit of + // complexity. + + switch (starttype) { + case _tokentype.types._break:case _tokentype.types._continue: + return this.parseBreakContinueStatement(node, starttype.keyword); + case _tokentype.types._debugger: + return this.parseDebuggerStatement(node); + case _tokentype.types._do: + return this.parseDoStatement(node); + case _tokentype.types._for: + return this.parseForStatement(node); + case _tokentype.types._function: + if (!declaration && this.options.ecmaVersion >= 6) this.unexpected(); + return this.parseFunctionStatement(node); + case _tokentype.types._class: + if (!declaration) this.unexpected(); + return this.parseClass(node, true); + case _tokentype.types._if: + return this.parseIfStatement(node); + case _tokentype.types._return: + return this.parseReturnStatement(node); + case _tokentype.types._switch: + return this.parseSwitchStatement(node); + case _tokentype.types._throw: + return this.parseThrowStatement(node); + case _tokentype.types._try: + return this.parseTryStatement(node); + case _tokentype.types._let:case _tokentype.types._const: + if (!declaration) this.unexpected(); // NOTE: falls through to _var + case _tokentype.types._var: + return this.parseVarStatement(node, starttype); + case _tokentype.types._while: + return this.parseWhileStatement(node); + case _tokentype.types._with: + return this.parseWithStatement(node); + case _tokentype.types.braceL: + return this.parseBlock(); + case _tokentype.types.semi: + return this.parseEmptyStatement(node); + case _tokentype.types._export: + case _tokentype.types._import: + if (!this.options.allowImportExportEverywhere) { + if (!topLevel) this.raise(this.start, "'import' and 'export' may only appear at the top level"); + if (!this.inModule) this.raise(this.start, "'import' and 'export' may appear only with 'sourceType: module'"); + } + return starttype === _tokentype.types._import ? this.parseImport(node) : this.parseExport(node); + + // If the statement does not start with a statement keyword or a + // brace, it's an ExpressionStatement or LabeledStatement. We + // simply start parsing an expression, and afterwards, if the + // next token is a colon and the expression was a simple + // Identifier node, we switch to interpreting it as a label. + default: + var maybeName = this.value, + expr = this.parseExpression(); + if (starttype === _tokentype.types.name && expr.type === "Identifier" && this.eat(_tokentype.types.colon)) return this.parseLabeledStatement(node, maybeName, expr);else return this.parseExpressionStatement(node, expr); + } +}; + +pp.parseBreakContinueStatement = function (node, keyword) { + var isBreak = keyword == "break"; + this.next(); + if (this.eat(_tokentype.types.semi) || this.insertSemicolon()) node.label = null;else if (this.type !== _tokentype.types.name) this.unexpected();else { + node.label = this.parseIdent(); + this.semicolon(); + } + + // Verify that there is an actual destination to break or + // continue to. + for (var i = 0; i < this.labels.length; ++i) { + var lab = this.labels[i]; + if (node.label == null || lab.name === node.label.name) { + if (lab.kind != null && (isBreak || lab.kind === "loop")) break; + if (node.label && isBreak) break; + } + } + if (i === this.labels.length) this.raise(node.start, "Unsyntactic " + keyword); + return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement"); +}; + +pp.parseDebuggerStatement = function (node) { + this.next(); + this.semicolon(); + return this.finishNode(node, "DebuggerStatement"); +}; + +pp.parseDoStatement = function (node) { + this.next(); + this.labels.push(loopLabel); + node.body = this.parseStatement(false); + this.labels.pop(); + this.expect(_tokentype.types._while); + node.test = this.parseParenExpression(); + if (this.options.ecmaVersion >= 6) this.eat(_tokentype.types.semi);else this.semicolon(); + return this.finishNode(node, "DoWhileStatement"); +}; + +// Disambiguating between a `for` and a `for`/`in` or `for`/`of` +// loop is non-trivial. Basically, we have to parse the init `var` +// statement or expression, disallowing the `in` operator (see +// the second parameter to `parseExpression`), and then check +// whether the next token is `in` or `of`. When there is no init +// part (semicolon immediately after the opening parenthesis), it +// is a regular `for` loop. + +pp.parseForStatement = function (node) { + this.next(); + this.labels.push(loopLabel); + this.expect(_tokentype.types.parenL); + if (this.type === _tokentype.types.semi) return this.parseFor(node, null); + if (this.type === _tokentype.types._var || this.type === _tokentype.types._let || this.type === _tokentype.types._const) { + var _init = this.startNode(), + varKind = this.type; + this.next(); + this.parseVar(_init, true, varKind); + this.finishNode(_init, "VariableDeclaration"); + if ((this.type === _tokentype.types._in || this.options.ecmaVersion >= 6 && this.isContextual("of")) && _init.declarations.length === 1 && !(varKind !== _tokentype.types._var && _init.declarations[0].init)) return this.parseForIn(node, _init); + return this.parseFor(node, _init); + } + var refShorthandDefaultPos = { start: 0 }; + var init = this.parseExpression(true, refShorthandDefaultPos); + if (this.type === _tokentype.types._in || this.options.ecmaVersion >= 6 && this.isContextual("of")) { + this.toAssignable(init); + this.checkLVal(init); + return this.parseForIn(node, init); + } else if (refShorthandDefaultPos.start) { + this.unexpected(refShorthandDefaultPos.start); + } + return this.parseFor(node, init); +}; + +pp.parseFunctionStatement = function (node) { + this.next(); + return this.parseFunction(node, true); +}; + +pp.parseIfStatement = function (node) { + this.next(); + node.test = this.parseParenExpression(); + node.consequent = this.parseStatement(false); + node.alternate = this.eat(_tokentype.types._else) ? this.parseStatement(false) : null; + return this.finishNode(node, "IfStatement"); +}; + +pp.parseReturnStatement = function (node) { + if (!this.inFunction && !this.options.allowReturnOutsideFunction) this.raise(this.start, "'return' outside of function"); + this.next(); + + // In `return` (and `break`/`continue`), the keywords with + // optional arguments, we eagerly look for a semicolon or the + // possibility to insert one. + + if (this.eat(_tokentype.types.semi) || this.insertSemicolon()) node.argument = null;else { + node.argument = this.parseExpression();this.semicolon(); + } + return this.finishNode(node, "ReturnStatement"); +}; + +pp.parseSwitchStatement = function (node) { + this.next(); + node.discriminant = this.parseParenExpression(); + node.cases = []; + this.expect(_tokentype.types.braceL); + this.labels.push(switchLabel); + + // Statements under must be grouped (by label) in SwitchCase + // nodes. `cur` is used to keep the node that we are currently + // adding statements to. + + for (var cur, sawDefault = false; this.type != _tokentype.types.braceR;) { + if (this.type === _tokentype.types._case || this.type === _tokentype.types._default) { + var isCase = this.type === _tokentype.types._case; + if (cur) this.finishNode(cur, "SwitchCase"); + node.cases.push(cur = this.startNode()); + cur.consequent = []; + this.next(); + if (isCase) { + cur.test = this.parseExpression(); + } else { + if (sawDefault) this.raise(this.lastTokStart, "Multiple default clauses"); + sawDefault = true; + cur.test = null; + } + this.expect(_tokentype.types.colon); + } else { + if (!cur) this.unexpected(); + cur.consequent.push(this.parseStatement(true)); + } + } + if (cur) this.finishNode(cur, "SwitchCase"); + this.next(); // Closing brace + this.labels.pop(); + return this.finishNode(node, "SwitchStatement"); +}; + +pp.parseThrowStatement = function (node) { + this.next(); + if (_whitespace.lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) this.raise(this.lastTokEnd, "Illegal newline after throw"); + node.argument = this.parseExpression(); + this.semicolon(); + return this.finishNode(node, "ThrowStatement"); +}; + +// Reused empty array added for node fields that are always empty. + +var empty = []; + +pp.parseTryStatement = function (node) { + this.next(); + node.block = this.parseBlock(); + node.handler = null; + if (this.type === _tokentype.types._catch) { + var clause = this.startNode(); + this.next(); + this.expect(_tokentype.types.parenL); + clause.param = this.parseBindingAtom(); + this.checkLVal(clause.param, true); + this.expect(_tokentype.types.parenR); + clause.guard = null; + clause.body = this.parseBlock(); + node.handler = this.finishNode(clause, "CatchClause"); + } + node.guardedHandlers = empty; + node.finalizer = this.eat(_tokentype.types._finally) ? this.parseBlock() : null; + if (!node.handler && !node.finalizer) this.raise(node.start, "Missing catch or finally clause"); + return this.finishNode(node, "TryStatement"); +}; + +pp.parseVarStatement = function (node, kind) { + this.next(); + this.parseVar(node, false, kind); + this.semicolon(); + return this.finishNode(node, "VariableDeclaration"); +}; + +pp.parseWhileStatement = function (node) { + this.next(); + node.test = this.parseParenExpression(); + this.labels.push(loopLabel); + node.body = this.parseStatement(false); + this.labels.pop(); + return this.finishNode(node, "WhileStatement"); +}; + +pp.parseWithStatement = function (node) { + if (this.strict) this.raise(this.start, "'with' in strict mode"); + this.next(); + node.object = this.parseParenExpression(); + node.body = this.parseStatement(false); + return this.finishNode(node, "WithStatement"); +}; + +pp.parseEmptyStatement = function (node) { + this.next(); + return this.finishNode(node, "EmptyStatement"); +}; + +pp.parseLabeledStatement = function (node, maybeName, expr) { + for (var i = 0; i < this.labels.length; ++i) { + if (this.labels[i].name === maybeName) this.raise(expr.start, "Label '" + maybeName + "' is already declared"); + }var kind = this.type.isLoop ? "loop" : this.type === _tokentype.types._switch ? "switch" : null; + for (var i = this.labels.length - 1; i >= 0; i--) { + var label = this.labels[i]; + if (label.statementStart == node.start) { + label.statementStart = this.start; + label.kind = kind; + } else break; + } + this.labels.push({ name: maybeName, kind: kind, statementStart: this.start }); + node.body = this.parseStatement(true); + this.labels.pop(); + node.label = expr; + return this.finishNode(node, "LabeledStatement"); +}; + +pp.parseExpressionStatement = function (node, expr) { + node.expression = expr; + this.semicolon(); + return this.finishNode(node, "ExpressionStatement"); +}; + +// Parse a semicolon-enclosed block of statements, handling `"use +// strict"` declarations when `allowStrict` is true (used for +// function bodies). + +pp.parseBlock = function (allowStrict) { + var node = this.startNode(), + first = true, + oldStrict = undefined; + node.body = []; + this.expect(_tokentype.types.braceL); + while (!this.eat(_tokentype.types.braceR)) { + var stmt = this.parseStatement(true); + node.body.push(stmt); + if (first && allowStrict && this.isUseStrict(stmt)) { + oldStrict = this.strict; + this.setStrict(this.strict = true); + } + first = false; + } + if (oldStrict === false) this.setStrict(false); + return this.finishNode(node, "BlockStatement"); +}; + +// Parse a regular `for` loop. The disambiguation code in +// `parseStatement` will already have parsed the init statement or +// expression. + +pp.parseFor = function (node, init) { + node.init = init; + this.expect(_tokentype.types.semi); + node.test = this.type === _tokentype.types.semi ? null : this.parseExpression(); + this.expect(_tokentype.types.semi); + node.update = this.type === _tokentype.types.parenR ? null : this.parseExpression(); + this.expect(_tokentype.types.parenR); + node.body = this.parseStatement(false); + this.labels.pop(); + return this.finishNode(node, "ForStatement"); +}; + +// Parse a `for`/`in` and `for`/`of` loop, which are almost +// same from parser's perspective. + +pp.parseForIn = function (node, init) { + var type = this.type === _tokentype.types._in ? "ForInStatement" : "ForOfStatement"; + this.next(); + node.left = init; + node.right = this.parseExpression(); + this.expect(_tokentype.types.parenR); + node.body = this.parseStatement(false); + this.labels.pop(); + return this.finishNode(node, type); +}; + +// Parse a list of variable declarations. + +pp.parseVar = function (node, isFor, kind) { + node.declarations = []; + node.kind = kind.keyword; + for (;;) { + var decl = this.startNode(); + this.parseVarId(decl); + if (this.eat(_tokentype.types.eq)) { + decl.init = this.parseMaybeAssign(isFor); + } else if (kind === _tokentype.types._const && !(this.type === _tokentype.types._in || this.options.ecmaVersion >= 6 && this.isContextual("of"))) { + this.unexpected(); + } else if (decl.id.type != "Identifier" && !(isFor && (this.type === _tokentype.types._in || this.isContextual("of")))) { + this.raise(this.lastTokEnd, "Complex binding patterns require an initialization value"); + } else { + decl.init = null; + } + node.declarations.push(this.finishNode(decl, "VariableDeclarator")); + if (!this.eat(_tokentype.types.comma)) break; + } + return node; +}; + +pp.parseVarId = function (decl) { + decl.id = this.parseBindingAtom(); + this.checkLVal(decl.id, true); +}; + +// Parse a function declaration or literal (depending on the +// `isStatement` parameter). + +pp.parseFunction = function (node, isStatement, allowExpressionBody) { + this.initFunction(node); + if (this.options.ecmaVersion >= 6) node.generator = this.eat(_tokentype.types.star); + if (isStatement || this.type === _tokentype.types.name) node.id = this.parseIdent(); + this.parseFunctionParams(node); + this.parseFunctionBody(node, allowExpressionBody); + return this.finishNode(node, isStatement ? "FunctionDeclaration" : "FunctionExpression"); +}; + +pp.parseFunctionParams = function (node) { + this.expect(_tokentype.types.parenL); + node.params = this.parseBindingList(_tokentype.types.parenR, false, false); +}; + +// Parse a class declaration or literal (depending on the +// `isStatement` parameter). + +pp.parseClass = function (node, isStatement) { + this.next(); + this.parseClassId(node, isStatement); + this.parseClassSuper(node); + var classBody = this.startNode(); + var hadConstructor = false; + classBody.body = []; + this.expect(_tokentype.types.braceL); + while (!this.eat(_tokentype.types.braceR)) { + if (this.eat(_tokentype.types.semi)) continue; + var method = this.startNode(); + var isGenerator = this.eat(_tokentype.types.star); + var isMaybeStatic = this.type === _tokentype.types.name && this.value === "static"; + this.parsePropertyName(method); + method["static"] = isMaybeStatic && this.type !== _tokentype.types.parenL; + if (method["static"]) { + if (isGenerator) this.unexpected(); + isGenerator = this.eat(_tokentype.types.star); + this.parsePropertyName(method); + } + method.kind = "method"; + var isGetSet = false; + if (!method.computed) { + var key = method.key; + + if (!isGenerator && key.type === "Identifier" && this.type !== _tokentype.types.parenL && (key.name === "get" || key.name === "set")) { + isGetSet = true; + method.kind = key.name; + key = this.parsePropertyName(method); + } + if (!method["static"] && (key.type === "Identifier" && key.name === "constructor" || key.type === "Literal" && key.value === "constructor")) { + if (hadConstructor) this.raise(key.start, "Duplicate constructor in the same class"); + if (isGetSet) this.raise(key.start, "Constructor can't have get/set modifier"); + if (isGenerator) this.raise(key.start, "Constructor can't be a generator"); + method.kind = "constructor"; + hadConstructor = true; + } + } + this.parseClassMethod(classBody, method, isGenerator); + if (isGetSet) { + var paramCount = method.kind === "get" ? 0 : 1; + if (method.value.params.length !== paramCount) { + var start = method.value.start; + if (method.kind === "get") this.raise(start, "getter should have no params");else this.raise(start, "setter should have exactly one param"); + } + } + } + node.body = this.finishNode(classBody, "ClassBody"); + return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression"); +}; + +pp.parseClassMethod = function (classBody, method, isGenerator) { + method.value = this.parseMethod(isGenerator); + classBody.body.push(this.finishNode(method, "MethodDefinition")); +}; + +pp.parseClassId = function (node, isStatement) { + node.id = this.type === _tokentype.types.name ? this.parseIdent() : isStatement ? this.unexpected() : null; +}; + +pp.parseClassSuper = function (node) { + node.superClass = this.eat(_tokentype.types._extends) ? this.parseExprSubscripts() : null; +}; + +// Parses module export declaration. + +pp.parseExport = function (node) { + this.next(); + // export * from '...' + if (this.eat(_tokentype.types.star)) { + this.expectContextual("from"); + node.source = this.type === _tokentype.types.string ? this.parseExprAtom() : this.unexpected(); + this.semicolon(); + return this.finishNode(node, "ExportAllDeclaration"); + } + if (this.eat(_tokentype.types._default)) { + // export default ... + var expr = this.parseMaybeAssign(); + var needsSemi = true; + if (expr.type == "FunctionExpression" || expr.type == "ClassExpression") { + needsSemi = false; + if (expr.id) { + expr.type = expr.type == "FunctionExpression" ? "FunctionDeclaration" : "ClassDeclaration"; + } + } + node.declaration = expr; + if (needsSemi) this.semicolon(); + return this.finishNode(node, "ExportDefaultDeclaration"); + } + // export var|const|let|function|class ... + if (this.shouldParseExportStatement()) { + node.declaration = this.parseStatement(true); + node.specifiers = []; + node.source = null; + } else { + // export { x, y as z } [from '...'] + node.declaration = null; + node.specifiers = this.parseExportSpecifiers(); + if (this.eatContextual("from")) { + node.source = this.type === _tokentype.types.string ? this.parseExprAtom() : this.unexpected(); + } else { + node.source = null; + } + this.semicolon(); + } + return this.finishNode(node, "ExportNamedDeclaration"); +}; + +pp.shouldParseExportStatement = function () { + return this.type.keyword; +}; + +// Parses a comma-separated list of module exports. + +pp.parseExportSpecifiers = function () { + var nodes = [], + first = true; + // export { x, y as z } [from '...'] + this.expect(_tokentype.types.braceL); + while (!this.eat(_tokentype.types.braceR)) { + if (!first) { + this.expect(_tokentype.types.comma); + if (this.afterTrailingComma(_tokentype.types.braceR)) break; + } else first = false; + + var node = this.startNode(); + node.local = this.parseIdent(this.type === _tokentype.types._default); + node.exported = this.eatContextual("as") ? this.parseIdent(true) : node.local; + nodes.push(this.finishNode(node, "ExportSpecifier")); + } + return nodes; +}; + +// Parses import declaration. + +pp.parseImport = function (node) { + this.next(); + // import '...' + if (this.type === _tokentype.types.string) { + node.specifiers = empty; + node.source = this.parseExprAtom(); + } else { + node.specifiers = this.parseImportSpecifiers(); + this.expectContextual("from"); + node.source = this.type === _tokentype.types.string ? this.parseExprAtom() : this.unexpected(); + } + this.semicolon(); + return this.finishNode(node, "ImportDeclaration"); +}; + +// Parses a comma-separated list of module imports. + +pp.parseImportSpecifiers = function () { + var nodes = [], + first = true; + if (this.type === _tokentype.types.name) { + // import defaultObj, { x, y as z } from '...' + var node = this.startNode(); + node.local = this.parseIdent(); + this.checkLVal(node.local, true); + nodes.push(this.finishNode(node, "ImportDefaultSpecifier")); + if (!this.eat(_tokentype.types.comma)) return nodes; + } + if (this.type === _tokentype.types.star) { + var node = this.startNode(); + this.next(); + this.expectContextual("as"); + node.local = this.parseIdent(); + this.checkLVal(node.local, true); + nodes.push(this.finishNode(node, "ImportNamespaceSpecifier")); + return nodes; + } + this.expect(_tokentype.types.braceL); + while (!this.eat(_tokentype.types.braceR)) { + if (!first) { + this.expect(_tokentype.types.comma); + if (this.afterTrailingComma(_tokentype.types.braceR)) break; + } else first = false; + + var node = this.startNode(); + node.imported = this.parseIdent(true); + node.local = this.eatContextual("as") ? this.parseIdent() : node.imported; + this.checkLVal(node.local, true); + nodes.push(this.finishNode(node, "ImportSpecifier")); + } + return nodes; +}; + +},{"./state":10,"./tokentype":14,"./whitespace":16}],12:[function(_dereq_,module,exports){ +// The algorithm used to determine whether a regexp can appear at a +// given point in the program is loosely based on sweet.js' approach. +// See https://github.com/mozilla/sweet.js/wiki/design + +"use strict"; + +exports.__esModule = true; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var _state = _dereq_("./state"); + +var _tokentype = _dereq_("./tokentype"); + +var _whitespace = _dereq_("./whitespace"); + +var TokContext = function TokContext(token, isExpr, preserveSpace, override) { + _classCallCheck(this, TokContext); + + this.token = token; + this.isExpr = !!isExpr; + this.preserveSpace = !!preserveSpace; + this.override = override; +}; + +exports.TokContext = TokContext; +var types = { + b_stat: new TokContext("{", false), + b_expr: new TokContext("{", true), + b_tmpl: new TokContext("${", true), + p_stat: new TokContext("(", false), + p_expr: new TokContext("(", true), + q_tmpl: new TokContext("`", true, true, function (p) { + return p.readTmplToken(); + }), + f_expr: new TokContext("function", true) +}; + +exports.types = types; +var pp = _state.Parser.prototype; + +pp.initialContext = function () { + return [types.b_stat]; +}; + +pp.braceIsBlock = function (prevType) { + if (prevType === _tokentype.types.colon) { + var _parent = this.curContext(); + if (_parent === types.b_stat || _parent === types.b_expr) return !_parent.isExpr; + } + if (prevType === _tokentype.types._return) return _whitespace.lineBreak.test(this.input.slice(this.lastTokEnd, this.start)); + if (prevType === _tokentype.types._else || prevType === _tokentype.types.semi || prevType === _tokentype.types.eof || prevType === _tokentype.types.parenR) return true; + if (prevType == _tokentype.types.braceL) return this.curContext() === types.b_stat; + return !this.exprAllowed; +}; + +pp.updateContext = function (prevType) { + var update = undefined, + type = this.type; + if (type.keyword && prevType == _tokentype.types.dot) this.exprAllowed = false;else if (update = type.updateContext) update.call(this, prevType);else this.exprAllowed = type.beforeExpr; +}; + +// Token-specific context update code + +_tokentype.types.parenR.updateContext = _tokentype.types.braceR.updateContext = function () { + if (this.context.length == 1) { + this.exprAllowed = true; + return; + } + var out = this.context.pop(); + if (out === types.b_stat && this.curContext() === types.f_expr) { + this.context.pop(); + this.exprAllowed = false; + } else if (out === types.b_tmpl) { + this.exprAllowed = true; + } else { + this.exprAllowed = !out.isExpr; + } +}; + +_tokentype.types.braceL.updateContext = function (prevType) { + this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr); + this.exprAllowed = true; +}; + +_tokentype.types.dollarBraceL.updateContext = function () { + this.context.push(types.b_tmpl); + this.exprAllowed = true; +}; + +_tokentype.types.parenL.updateContext = function (prevType) { + var statementParens = prevType === _tokentype.types._if || prevType === _tokentype.types._for || prevType === _tokentype.types._with || prevType === _tokentype.types._while; + this.context.push(statementParens ? types.p_stat : types.p_expr); + this.exprAllowed = true; +}; + +_tokentype.types.incDec.updateContext = function () {}; + +_tokentype.types._function.updateContext = function () { + if (this.curContext() !== types.b_stat) this.context.push(types.f_expr); + this.exprAllowed = false; +}; + +_tokentype.types.backQuote.updateContext = function () { + if (this.curContext() === types.q_tmpl) this.context.pop();else this.context.push(types.q_tmpl); + this.exprAllowed = false; +}; + +// tokExprAllowed stays unchanged + +},{"./state":10,"./tokentype":14,"./whitespace":16}],13:[function(_dereq_,module,exports){ +"use strict"; + +exports.__esModule = true; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var _identifier = _dereq_("./identifier"); + +var _tokentype = _dereq_("./tokentype"); + +var _state = _dereq_("./state"); + +var _locutil = _dereq_("./locutil"); + +var _whitespace = _dereq_("./whitespace"); + +// Object type used to represent tokens. Note that normally, tokens +// simply exist as properties on the parser object. This is only +// used for the onToken callback and the external tokenizer. + +var Token = function Token(p) { + _classCallCheck(this, Token); + + this.type = p.type; + this.value = p.value; + this.start = p.start; + this.end = p.end; + if (p.options.locations) this.loc = new _locutil.SourceLocation(p, p.startLoc, p.endLoc); + if (p.options.ranges) this.range = [p.start, p.end]; +}; + +exports.Token = Token; + +// ## Tokenizer + +var pp = _state.Parser.prototype; + +// Are we running under Rhino? +var isRhino = typeof Packages == "object" && Object.prototype.toString.call(Packages) == "[object JavaPackage]"; + +// Move to the next token + +pp.next = function () { + if (this.options.onToken) this.options.onToken(new Token(this)); + + this.lastTokEnd = this.end; + this.lastTokStart = this.start; + this.lastTokEndLoc = this.endLoc; + this.lastTokStartLoc = this.startLoc; + this.nextToken(); +}; + +pp.getToken = function () { + this.next(); + return new Token(this); +}; + +// If we're in an ES6 environment, make parsers iterable +if (typeof Symbol !== "undefined") pp[Symbol.iterator] = function () { + var self = this; + return { next: function next() { + var token = self.getToken(); + return { + done: token.type === _tokentype.types.eof, + value: token + }; + } }; +}; + +// Toggle strict mode. Re-reads the next number or string to please +// pedantic tests (`"use strict"; 010;` should fail). + +pp.setStrict = function (strict) { + this.strict = strict; + if (this.type !== _tokentype.types.num && this.type !== _tokentype.types.string) return; + this.pos = this.start; + if (this.options.locations) { + while (this.pos < this.lineStart) { + this.lineStart = this.input.lastIndexOf("\n", this.lineStart - 2) + 1; + --this.curLine; + } + } + this.nextToken(); +}; + +pp.curContext = function () { + return this.context[this.context.length - 1]; +}; + +// Read a single token, updating the parser object's token-related +// properties. + +pp.nextToken = function () { + var curContext = this.curContext(); + if (!curContext || !curContext.preserveSpace) this.skipSpace(); + + this.start = this.pos; + if (this.options.locations) this.startLoc = this.curPosition(); + if (this.pos >= this.input.length) return this.finishToken(_tokentype.types.eof); + + if (curContext.override) return curContext.override(this);else this.readToken(this.fullCharCodeAtPos()); +}; + +pp.readToken = function (code) { + // Identifier or keyword. '\uXXXX' sequences are allowed in + // identifiers, so '\' also dispatches to that. + if (_identifier.isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\' */) return this.readWord(); + + return this.getTokenFromCode(code); +}; + +pp.fullCharCodeAtPos = function () { + var code = this.input.charCodeAt(this.pos); + if (code <= 0xd7ff || code >= 0xe000) return code; + var next = this.input.charCodeAt(this.pos + 1); + return (code << 10) + next - 0x35fdc00; +}; + +pp.skipBlockComment = function () { + var startLoc = this.options.onComment && this.curPosition(); + var start = this.pos, + end = this.input.indexOf("*/", this.pos += 2); + if (end === -1) this.raise(this.pos - 2, "Unterminated comment"); + this.pos = end + 2; + if (this.options.locations) { + _whitespace.lineBreakG.lastIndex = start; + var match = undefined; + while ((match = _whitespace.lineBreakG.exec(this.input)) && match.index < this.pos) { + ++this.curLine; + this.lineStart = match.index + match[0].length; + } + } + if (this.options.onComment) this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos, startLoc, this.curPosition()); +}; + +pp.skipLineComment = function (startSkip) { + var start = this.pos; + var startLoc = this.options.onComment && this.curPosition(); + var ch = this.input.charCodeAt(this.pos += startSkip); + while (this.pos < this.input.length && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233) { + ++this.pos; + ch = this.input.charCodeAt(this.pos); + } + if (this.options.onComment) this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos, startLoc, this.curPosition()); +}; + +// Called at the start of the parse and after every token. Skips +// whitespace and comments, and. + +pp.skipSpace = function () { + loop: while (this.pos < this.input.length) { + var ch = this.input.charCodeAt(this.pos); + switch (ch) { + case 32:case 160: + // ' ' + ++this.pos; + break; + case 13: + if (this.input.charCodeAt(this.pos + 1) === 10) { + ++this.pos; + } + case 10:case 8232:case 8233: + ++this.pos; + if (this.options.locations) { + ++this.curLine; + this.lineStart = this.pos; + } + break; + case 47: + // '/' + switch (this.input.charCodeAt(this.pos + 1)) { + case 42: + // '*' + this.skipBlockComment(); + break; + case 47: + this.skipLineComment(2); + break; + default: + break loop; + } + break; + default: + if (ch > 8 && ch < 14 || ch >= 5760 && _whitespace.nonASCIIwhitespace.test(String.fromCharCode(ch))) { + ++this.pos; + } else { + break loop; + } + } + } +}; + +// Called at the end of every token. Sets `end`, `val`, and +// maintains `context` and `exprAllowed`, and skips the space after +// the token, so that the next one's `start` will point at the +// right position. + +pp.finishToken = function (type, val) { + this.end = this.pos; + if (this.options.locations) this.endLoc = this.curPosition(); + var prevType = this.type; + this.type = type; + this.value = val; + + this.updateContext(prevType); +}; + +// ### Token reading + +// This is the function that is called to fetch the next token. It +// is somewhat obscure, because it works in character codes rather +// than characters, and because operator parsing has been inlined +// into it. +// +// All in the name of speed. +// +pp.readToken_dot = function () { + var next = this.input.charCodeAt(this.pos + 1); + if (next >= 48 && next <= 57) return this.readNumber(true); + var next2 = this.input.charCodeAt(this.pos + 2); + if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { + // 46 = dot '.' + this.pos += 3; + return this.finishToken(_tokentype.types.ellipsis); + } else { + ++this.pos; + return this.finishToken(_tokentype.types.dot); + } +}; + +pp.readToken_slash = function () { + // '/' + var next = this.input.charCodeAt(this.pos + 1); + if (this.exprAllowed) { + ++this.pos;return this.readRegexp(); + } + if (next === 61) return this.finishOp(_tokentype.types.assign, 2); + return this.finishOp(_tokentype.types.slash, 1); +}; + +pp.readToken_mult_modulo = function (code) { + // '%*' + var next = this.input.charCodeAt(this.pos + 1); + if (next === 61) return this.finishOp(_tokentype.types.assign, 2); + return this.finishOp(code === 42 ? _tokentype.types.star : _tokentype.types.modulo, 1); +}; + +pp.readToken_pipe_amp = function (code) { + // '|&' + var next = this.input.charCodeAt(this.pos + 1); + if (next === code) return this.finishOp(code === 124 ? _tokentype.types.logicalOR : _tokentype.types.logicalAND, 2); + if (next === 61) return this.finishOp(_tokentype.types.assign, 2); + return this.finishOp(code === 124 ? _tokentype.types.bitwiseOR : _tokentype.types.bitwiseAND, 1); +}; + +pp.readToken_caret = function () { + // '^' + var next = this.input.charCodeAt(this.pos + 1); + if (next === 61) return this.finishOp(_tokentype.types.assign, 2); + return this.finishOp(_tokentype.types.bitwiseXOR, 1); +}; + +pp.readToken_plus_min = function (code) { + // '+-' + var next = this.input.charCodeAt(this.pos + 1); + if (next === code) { + if (next == 45 && this.input.charCodeAt(this.pos + 2) == 62 && _whitespace.lineBreak.test(this.input.slice(this.lastTokEnd, this.pos))) { + // A `-->` line comment + this.skipLineComment(3); + this.skipSpace(); + return this.nextToken(); + } + return this.finishOp(_tokentype.types.incDec, 2); + } + if (next === 61) return this.finishOp(_tokentype.types.assign, 2); + return this.finishOp(_tokentype.types.plusMin, 1); +}; + +pp.readToken_lt_gt = function (code) { + // '<>' + var next = this.input.charCodeAt(this.pos + 1); + var size = 1; + if (next === code) { + size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2; + if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp(_tokentype.types.assign, size + 1); + return this.finishOp(_tokentype.types.bitShift, size); + } + if (next == 33 && code == 60 && this.input.charCodeAt(this.pos + 2) == 45 && this.input.charCodeAt(this.pos + 3) == 45) { + if (this.inModule) this.unexpected(); + // `` line comment + this.skipLineComment(3); + this.skipSpace(); + return this.nextToken(); + } + return this.finishOp(_tokentype.types.incDec, 2); + } + if (next === 61) return this.finishOp(_tokentype.types.assign, 2); + return this.finishOp(_tokentype.types.plusMin, 1); +}; + +pp.readToken_lt_gt = function (code) { + // '<>' + var next = this.input.charCodeAt(this.pos + 1); + var size = 1; + if (next === code) { + size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2; + if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp(_tokentype.types.assign, size + 1); + return this.finishOp(_tokentype.types.bitShift, size); + } + if (next == 33 && code == 60 && this.input.charCodeAt(this.pos + 2) == 45 && this.input.charCodeAt(this.pos + 3) == 45) { + if (this.inModule) this.unexpected(); + // `` line comment + this.skipLineComment(3) + this.skipSpace() + return this.nextToken() + } + return this.finishOp(tt.incDec, 2) + } + if (next === 61) return this.finishOp(tt.assign, 2) + return this.finishOp(tt.plusMin, 1) +} + +pp.readToken_lt_gt = function(code) { // '<>' + let next = this.input.charCodeAt(this.pos + 1) + let size = 1 + if (next === code) { + size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2 + if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp(tt.assign, size + 1) + return this.finishOp(tt.bitShift, size) + } + if (next == 33 && code == 60 && this.input.charCodeAt(this.pos + 2) == 45 && + this.input.charCodeAt(this.pos + 3) == 45) { + if (this.inModule) this.unexpected() + // `` line comment + this.skipLineComment(3); + this.skipSpace(); + return this.nextToken(); + } + return this.finishOp(_tokentype.types.incDec, 2); + } + if (next === 61) return this.finishOp(_tokentype.types.assign, 2); + return this.finishOp(_tokentype.types.plusMin, 1); +}; + +pp.readToken_lt_gt = function (code) { + // '<>' + var next = this.input.charCodeAt(this.pos + 1); + var size = 1; + if (next === code) { + size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2; + if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp(_tokentype.types.assign, size + 1); + return this.finishOp(_tokentype.types.bitShift, size); + } + if (next == 33 && code == 60 && this.input.charCodeAt(this.pos + 2) == 45 && this.input.charCodeAt(this.pos + 3) == 45) { + if (this.inModule) this.unexpected(); + // `` line comment + this.skipLineComment(3); + this.skipSpace(); + return this.nextToken(); + } + return this.finishOp(_tokentype.types.incDec, 2); + } + if (next === 61) return this.finishOp(_tokentype.types.assign, 2); + return this.finishOp(_tokentype.types.plusMin, 1); +}; + +pp.readToken_lt_gt = function (code) { + // '<>' + var next = this.input.charCodeAt(this.pos + 1); + var size = 1; + if (next === code) { + size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2; + if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp(_tokentype.types.assign, size + 1); + return this.finishOp(_tokentype.types.bitShift, size); + } + if (next == 33 && code == 60 && this.input.charCodeAt(this.pos + 2) == 45 && this.input.charCodeAt(this.pos + 3) == 45) { + if (this.inModule) this.unexpected(); + // `` line comment + this.skipLineComment(3) + this.skipSpace() + return this.nextToken() + } + return this.finishOp(tt.incDec, 2) + } + if (next === 61) return this.finishOp(tt.assign, 2) + return this.finishOp(tt.plusMin, 1) +} + +pp.readToken_lt_gt = function(code) { // '<>' + let next = this.input.charCodeAt(this.pos + 1) + let size = 1 + if (next === code) { + size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2 + if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp(tt.assign, size + 1) + return this.finishOp(tt.bitShift, size) + } + if (next == 33 && code == 60 && this.input.charCodeAt(this.pos + 2) == 45 && + this.input.charCodeAt(this.pos + 3) == 45) { + if (this.inModule) this.unexpected() + // `