dragonfly_chrome_headless 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (228) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +12 -0
  4. data/Gemfile +4 -0
  5. data/README.md +53 -0
  6. data/Rakefile +10 -0
  7. data/bin/console +14 -0
  8. data/bin/setup +8 -0
  9. data/dragonfly_chrome_headless.gemspec +27 -0
  10. data/lib/dragonfly_chrome_headless.rb +9 -0
  11. data/lib/dragonfly_chrome_headless/plugin.rb +17 -0
  12. data/lib/dragonfly_chrome_headless/processors/rasterize.rb +33 -0
  13. data/lib/dragonfly_chrome_headless/version.rb +3 -0
  14. data/node_modules/.bin/chrome-remote-interface +1 -0
  15. data/node_modules/.bin/mkdirp +1 -0
  16. data/node_modules/.bin/rimraf +1 -0
  17. data/node_modules/@types/core-js/LICENSE +21 -0
  18. data/node_modules/@types/core-js/README.md +16 -0
  19. data/node_modules/@types/core-js/index.d.ts +2452 -0
  20. data/node_modules/@types/core-js/package.json +85 -0
  21. data/node_modules/@types/mkdirp/README.md +18 -0
  22. data/node_modules/@types/mkdirp/index.d.ts +14 -0
  23. data/node_modules/@types/mkdirp/package.json +77 -0
  24. data/node_modules/@types/mkdirp/types-metadata.json +25 -0
  25. data/node_modules/@types/node/README.md +16 -0
  26. data/node_modules/@types/node/index.d.ts +4132 -0
  27. data/node_modules/@types/node/package.json +84 -0
  28. data/node_modules/balanced-match/.npmignore +5 -0
  29. data/node_modules/balanced-match/LICENSE.md +21 -0
  30. data/node_modules/balanced-match/README.md +91 -0
  31. data/node_modules/balanced-match/index.js +59 -0
  32. data/node_modules/balanced-match/package.json +112 -0
  33. data/node_modules/brace-expansion/README.md +123 -0
  34. data/node_modules/brace-expansion/index.js +201 -0
  35. data/node_modules/brace-expansion/package.json +114 -0
  36. data/node_modules/chrome-launcher/.clang-format +6 -0
  37. data/node_modules/chrome-launcher/.npmignore +11 -0
  38. data/node_modules/chrome-launcher/README.md +123 -0
  39. data/node_modules/chrome-launcher/ask.js +32 -0
  40. data/node_modules/chrome-launcher/ask.ts +35 -0
  41. data/node_modules/chrome-launcher/chrome-finder.js +157 -0
  42. data/node_modules/chrome-launcher/chrome-finder.ts +186 -0
  43. data/node_modules/chrome-launcher/chrome-launcher.js +245 -0
  44. data/node_modules/chrome-launcher/chrome-launcher.ts +312 -0
  45. data/node_modules/chrome-launcher/compiled-check.js +14 -0
  46. data/node_modules/chrome-launcher/flags.js +27 -0
  47. data/node_modules/chrome-launcher/flags.ts +26 -0
  48. data/node_modules/chrome-launcher/index.js +7 -0
  49. data/node_modules/chrome-launcher/index.ts +1 -0
  50. data/node_modules/chrome-launcher/manual-chrome-launcher.js +30 -0
  51. data/node_modules/chrome-launcher/package.json +116 -0
  52. data/node_modules/chrome-launcher/random-port.js +24 -0
  53. data/node_modules/chrome-launcher/random-port.ts +23 -0
  54. data/node_modules/chrome-launcher/tsconfig.json +19 -0
  55. data/node_modules/chrome-launcher/utils.js +52 -0
  56. data/node_modules/chrome-launcher/utils.ts +44 -0
  57. data/node_modules/chrome-launcher/yarn.lock +1486 -0
  58. data/node_modules/chrome-remote-interface/LICENSE +18 -0
  59. data/node_modules/chrome-remote-interface/README.md +849 -0
  60. data/node_modules/chrome-remote-interface/bin/client.js +337 -0
  61. data/node_modules/chrome-remote-interface/chrome-remote-interface.js +11 -0
  62. data/node_modules/chrome-remote-interface/index.js +39 -0
  63. data/node_modules/chrome-remote-interface/lib/api.js +84 -0
  64. data/node_modules/chrome-remote-interface/lib/chrome.js +307 -0
  65. data/node_modules/chrome-remote-interface/lib/defaults.js +4 -0
  66. data/node_modules/chrome-remote-interface/lib/devtools.js +245 -0
  67. data/node_modules/chrome-remote-interface/lib/external-request.js +28 -0
  68. data/node_modules/chrome-remote-interface/lib/protocol.json +13780 -0
  69. data/node_modules/chrome-remote-interface/lib/websocket-wrapper.js +32 -0
  70. data/node_modules/chrome-remote-interface/package.json +128 -0
  71. data/node_modules/chrome-remote-interface/webpack.config.js +55 -0
  72. data/node_modules/commander/Readme.md +195 -0
  73. data/node_modules/commander/index.js +851 -0
  74. data/node_modules/commander/package.json +92 -0
  75. data/node_modules/concat-map/.travis.yml +4 -0
  76. data/node_modules/concat-map/LICENSE +18 -0
  77. data/node_modules/concat-map/README.markdown +62 -0
  78. data/node_modules/concat-map/example/map.js +6 -0
  79. data/node_modules/concat-map/index.js +13 -0
  80. data/node_modules/concat-map/package.json +117 -0
  81. data/node_modules/concat-map/test/map.js +39 -0
  82. data/node_modules/debug/.coveralls.yml +1 -0
  83. data/node_modules/debug/.eslintrc +11 -0
  84. data/node_modules/debug/.npmignore +9 -0
  85. data/node_modules/debug/.travis.yml +14 -0
  86. data/node_modules/debug/CHANGELOG.md +357 -0
  87. data/node_modules/debug/LICENSE +19 -0
  88. data/node_modules/debug/Makefile +50 -0
  89. data/node_modules/debug/Readme.md +312 -0
  90. data/node_modules/debug/component.json +19 -0
  91. data/node_modules/debug/karma.conf.js +70 -0
  92. data/node_modules/debug/node.js +1 -0
  93. data/node_modules/debug/package.json +124 -0
  94. data/node_modules/debug/src/browser.js +185 -0
  95. data/node_modules/debug/src/debug.js +202 -0
  96. data/node_modules/debug/src/index.js +10 -0
  97. data/node_modules/debug/src/node.js +246 -0
  98. data/node_modules/fs.realpath/LICENSE +43 -0
  99. data/node_modules/fs.realpath/README.md +33 -0
  100. data/node_modules/fs.realpath/index.js +66 -0
  101. data/node_modules/fs.realpath/old.js +303 -0
  102. data/node_modules/fs.realpath/package.json +94 -0
  103. data/node_modules/glob/LICENSE +15 -0
  104. data/node_modules/glob/README.md +368 -0
  105. data/node_modules/glob/changelog.md +67 -0
  106. data/node_modules/glob/common.js +240 -0
  107. data/node_modules/glob/glob.js +790 -0
  108. data/node_modules/glob/package.json +112 -0
  109. data/node_modules/glob/sync.js +486 -0
  110. data/node_modules/html-pdf-chrome/.npmignore +9 -0
  111. data/node_modules/html-pdf-chrome/LICENSE +21 -0
  112. data/node_modules/html-pdf-chrome/README.md +165 -0
  113. data/node_modules/html-pdf-chrome/lib/src/ChromePrintOptions.d.ts +87 -0
  114. data/node_modules/html-pdf-chrome/lib/src/ChromePrintOptions.js +4 -0
  115. data/node_modules/html-pdf-chrome/lib/src/ChromePrintOptions.js.map +1 -0
  116. data/node_modules/html-pdf-chrome/lib/src/CompletionTrigger.d.ts +120 -0
  117. data/node_modules/html-pdf-chrome/lib/src/CompletionTrigger.js +206 -0
  118. data/node_modules/html-pdf-chrome/lib/src/CompletionTrigger.js.map +1 -0
  119. data/node_modules/html-pdf-chrome/lib/src/CreateResult.d.ts +70 -0
  120. data/node_modules/html-pdf-chrome/lib/src/CreateResult.js +98 -0
  121. data/node_modules/html-pdf-chrome/lib/src/CreateResult.js.map +1 -0
  122. data/node_modules/html-pdf-chrome/lib/src/index.d.ts +72 -0
  123. data/node_modules/html-pdf-chrome/lib/src/index.js +123 -0
  124. data/node_modules/html-pdf-chrome/lib/src/index.js.map +1 -0
  125. data/node_modules/html-pdf-chrome/package.json +133 -0
  126. data/node_modules/html-pdf-chrome/src/ChromePrintOptions.ts +99 -0
  127. data/node_modules/html-pdf-chrome/src/CompletionTrigger.ts +201 -0
  128. data/node_modules/html-pdf-chrome/src/CreateResult.ts +100 -0
  129. data/node_modules/html-pdf-chrome/src/index.ts +179 -0
  130. data/node_modules/inflight/LICENSE +15 -0
  131. data/node_modules/inflight/README.md +37 -0
  132. data/node_modules/inflight/inflight.js +54 -0
  133. data/node_modules/inflight/package.json +105 -0
  134. data/node_modules/inherits/LICENSE +16 -0
  135. data/node_modules/inherits/README.md +42 -0
  136. data/node_modules/inherits/inherits.js +7 -0
  137. data/node_modules/inherits/inherits_browser.js +23 -0
  138. data/node_modules/inherits/package.json +97 -0
  139. data/node_modules/lighthouse-logger/README.md +4 -0
  140. data/node_modules/lighthouse-logger/index.js +212 -0
  141. data/node_modules/lighthouse-logger/package.json +69 -0
  142. data/node_modules/lighthouse-logger/yarn.lock +13 -0
  143. data/node_modules/minimatch/LICENSE +15 -0
  144. data/node_modules/minimatch/README.md +209 -0
  145. data/node_modules/minimatch/minimatch.js +923 -0
  146. data/node_modules/minimatch/package.json +99 -0
  147. data/node_modules/minimist/.travis.yml +4 -0
  148. data/node_modules/minimist/LICENSE +18 -0
  149. data/node_modules/minimist/example/parse.js +2 -0
  150. data/node_modules/minimist/index.js +187 -0
  151. data/node_modules/minimist/package.json +101 -0
  152. data/node_modules/minimist/readme.markdown +73 -0
  153. data/node_modules/minimist/test/dash.js +24 -0
  154. data/node_modules/minimist/test/default_bool.js +20 -0
  155. data/node_modules/minimist/test/dotted.js +16 -0
  156. data/node_modules/minimist/test/long.js +31 -0
  157. data/node_modules/minimist/test/parse.js +318 -0
  158. data/node_modules/minimist/test/parse_modified.js +9 -0
  159. data/node_modules/minimist/test/short.js +67 -0
  160. data/node_modules/minimist/test/whitespace.js +8 -0
  161. data/node_modules/mkdirp/.travis.yml +8 -0
  162. data/node_modules/mkdirp/LICENSE +21 -0
  163. data/node_modules/mkdirp/bin/cmd.js +33 -0
  164. data/node_modules/mkdirp/bin/usage.txt +12 -0
  165. data/node_modules/mkdirp/examples/pow.js +6 -0
  166. data/node_modules/mkdirp/index.js +98 -0
  167. data/node_modules/mkdirp/package.json +93 -0
  168. data/node_modules/mkdirp/readme.markdown +100 -0
  169. data/node_modules/mkdirp/test/chmod.js +41 -0
  170. data/node_modules/mkdirp/test/clobber.js +38 -0
  171. data/node_modules/mkdirp/test/mkdirp.js +28 -0
  172. data/node_modules/mkdirp/test/opts_fs.js +29 -0
  173. data/node_modules/mkdirp/test/opts_fs_sync.js +27 -0
  174. data/node_modules/mkdirp/test/perm.js +32 -0
  175. data/node_modules/mkdirp/test/perm_sync.js +36 -0
  176. data/node_modules/mkdirp/test/race.js +37 -0
  177. data/node_modules/mkdirp/test/rel.js +32 -0
  178. data/node_modules/mkdirp/test/return.js +25 -0
  179. data/node_modules/mkdirp/test/return_sync.js +24 -0
  180. data/node_modules/mkdirp/test/root.js +19 -0
  181. data/node_modules/mkdirp/test/sync.js +32 -0
  182. data/node_modules/mkdirp/test/umask.js +28 -0
  183. data/node_modules/mkdirp/test/umask_sync.js +32 -0
  184. data/node_modules/ms/README.md +51 -0
  185. data/node_modules/ms/index.js +152 -0
  186. data/node_modules/ms/license.md +21 -0
  187. data/node_modules/ms/package.json +109 -0
  188. data/node_modules/once/LICENSE +15 -0
  189. data/node_modules/once/README.md +79 -0
  190. data/node_modules/once/once.js +42 -0
  191. data/node_modules/once/package.json +101 -0
  192. data/node_modules/path-is-absolute/index.js +20 -0
  193. data/node_modules/path-is-absolute/license +21 -0
  194. data/node_modules/path-is-absolute/package.json +111 -0
  195. data/node_modules/path-is-absolute/readme.md +59 -0
  196. data/node_modules/rimraf/LICENSE +15 -0
  197. data/node_modules/rimraf/README.md +101 -0
  198. data/node_modules/rimraf/bin.js +50 -0
  199. data/node_modules/rimraf/package.json +99 -0
  200. data/node_modules/rimraf/rimraf.js +363 -0
  201. data/node_modules/ultron/LICENSE +22 -0
  202. data/node_modules/ultron/index.js +138 -0
  203. data/node_modules/ultron/package.json +112 -0
  204. data/node_modules/wrappy/LICENSE +15 -0
  205. data/node_modules/wrappy/README.md +36 -0
  206. data/node_modules/wrappy/package.json +97 -0
  207. data/node_modules/wrappy/wrappy.js +33 -0
  208. data/node_modules/ws/LICENSE +21 -0
  209. data/node_modules/ws/README.md +259 -0
  210. data/node_modules/ws/SECURITY.md +33 -0
  211. data/node_modules/ws/index.js +15 -0
  212. data/node_modules/ws/lib/BufferUtil.fallback.js +56 -0
  213. data/node_modules/ws/lib/BufferUtil.js +15 -0
  214. data/node_modules/ws/lib/ErrorCodes.js +28 -0
  215. data/node_modules/ws/lib/EventTarget.js +158 -0
  216. data/node_modules/ws/lib/Extensions.js +69 -0
  217. data/node_modules/ws/lib/PerMessageDeflate.js +339 -0
  218. data/node_modules/ws/lib/Receiver.js +520 -0
  219. data/node_modules/ws/lib/Sender.js +438 -0
  220. data/node_modules/ws/lib/Validation.fallback.js +9 -0
  221. data/node_modules/ws/lib/Validation.js +17 -0
  222. data/node_modules/ws/lib/WebSocket.js +705 -0
  223. data/node_modules/ws/lib/WebSocketServer.js +336 -0
  224. data/node_modules/ws/package.json +122 -0
  225. data/package.json +26 -0
  226. data/samples/sample.html +13 -0
  227. data/script/rasterize.js +18 -0
  228. metadata +325 -0
@@ -0,0 +1,112 @@
1
+ {
2
+ "_args": [
3
+ [
4
+ {
5
+ "raw": "glob@^7.0.5",
6
+ "scope": null,
7
+ "escapedName": "glob",
8
+ "name": "glob",
9
+ "rawSpec": "^7.0.5",
10
+ "spec": ">=7.0.5 <8.0.0",
11
+ "type": "range"
12
+ },
13
+ "/Users/tomascelizna/Devel/dragonfly_chrome_headless/node_modules/rimraf"
14
+ ]
15
+ ],
16
+ "_from": "glob@>=7.0.5 <8.0.0",
17
+ "_id": "glob@7.1.2",
18
+ "_inCache": true,
19
+ "_location": "/glob",
20
+ "_nodeVersion": "8.0.0-pre",
21
+ "_npmOperationalInternal": {
22
+ "host": "s3://npm-registry-packages",
23
+ "tmp": "tmp/glob-7.1.2.tgz_1495224925341_0.07115248567424715"
24
+ },
25
+ "_npmUser": {
26
+ "name": "isaacs",
27
+ "email": "i@izs.me"
28
+ },
29
+ "_npmVersion": "5.0.0-beta.56",
30
+ "_phantomChildren": {},
31
+ "_requested": {
32
+ "raw": "glob@^7.0.5",
33
+ "scope": null,
34
+ "escapedName": "glob",
35
+ "name": "glob",
36
+ "rawSpec": "^7.0.5",
37
+ "spec": ">=7.0.5 <8.0.0",
38
+ "type": "range"
39
+ },
40
+ "_requiredBy": [
41
+ "/rimraf"
42
+ ],
43
+ "_resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
44
+ "_shasum": "c19c9df9a028702d678612384a6552404c636d15",
45
+ "_shrinkwrap": null,
46
+ "_spec": "glob@^7.0.5",
47
+ "_where": "/Users/tomascelizna/Devel/dragonfly_chrome_headless/node_modules/rimraf",
48
+ "author": {
49
+ "name": "Isaac Z. Schlueter",
50
+ "email": "i@izs.me",
51
+ "url": "http://blog.izs.me/"
52
+ },
53
+ "bugs": {
54
+ "url": "https://github.com/isaacs/node-glob/issues"
55
+ },
56
+ "dependencies": {
57
+ "fs.realpath": "^1.0.0",
58
+ "inflight": "^1.0.4",
59
+ "inherits": "2",
60
+ "minimatch": "^3.0.4",
61
+ "once": "^1.3.0",
62
+ "path-is-absolute": "^1.0.0"
63
+ },
64
+ "description": "a little globber",
65
+ "devDependencies": {
66
+ "mkdirp": "0",
67
+ "rimraf": "^2.2.8",
68
+ "tap": "^7.1.2",
69
+ "tick": "0.0.6"
70
+ },
71
+ "directories": {},
72
+ "dist": {
73
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
74
+ "shasum": "c19c9df9a028702d678612384a6552404c636d15",
75
+ "tarball": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz"
76
+ },
77
+ "engines": {
78
+ "node": "*"
79
+ },
80
+ "files": [
81
+ "glob.js",
82
+ "sync.js",
83
+ "common.js"
84
+ ],
85
+ "gitHead": "8fa8d561e08c9eed1d286c6a35be2cd8123b2fb7",
86
+ "homepage": "https://github.com/isaacs/node-glob#readme",
87
+ "license": "ISC",
88
+ "main": "glob.js",
89
+ "maintainers": [
90
+ {
91
+ "name": "isaacs",
92
+ "email": "i@izs.me"
93
+ }
94
+ ],
95
+ "name": "glob",
96
+ "optionalDependencies": {},
97
+ "readme": "ERROR: No README data found!",
98
+ "repository": {
99
+ "type": "git",
100
+ "url": "git://github.com/isaacs/node-glob.git"
101
+ },
102
+ "scripts": {
103
+ "bench": "bash benchmark.sh",
104
+ "benchclean": "node benchclean.js",
105
+ "prepublish": "npm run benchclean",
106
+ "prof": "bash prof.sh && cat profile.txt",
107
+ "profclean": "rm -f v8.log profile.txt",
108
+ "test": "tap test/*.js --cov",
109
+ "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js"
110
+ },
111
+ "version": "7.1.2"
112
+ }
@@ -0,0 +1,486 @@
1
+ module.exports = globSync
2
+ globSync.GlobSync = GlobSync
3
+
4
+ var fs = require('fs')
5
+ var rp = require('fs.realpath')
6
+ var minimatch = require('minimatch')
7
+ var Minimatch = minimatch.Minimatch
8
+ var Glob = require('./glob.js').Glob
9
+ var util = require('util')
10
+ var path = require('path')
11
+ var assert = require('assert')
12
+ var isAbsolute = require('path-is-absolute')
13
+ var common = require('./common.js')
14
+ var alphasort = common.alphasort
15
+ var alphasorti = common.alphasorti
16
+ var setopts = common.setopts
17
+ var ownProp = common.ownProp
18
+ var childrenIgnored = common.childrenIgnored
19
+ var isIgnored = common.isIgnored
20
+
21
+ function globSync (pattern, options) {
22
+ if (typeof options === 'function' || arguments.length === 3)
23
+ throw new TypeError('callback provided to sync glob\n'+
24
+ 'See: https://github.com/isaacs/node-glob/issues/167')
25
+
26
+ return new GlobSync(pattern, options).found
27
+ }
28
+
29
+ function GlobSync (pattern, options) {
30
+ if (!pattern)
31
+ throw new Error('must provide pattern')
32
+
33
+ if (typeof options === 'function' || arguments.length === 3)
34
+ throw new TypeError('callback provided to sync glob\n'+
35
+ 'See: https://github.com/isaacs/node-glob/issues/167')
36
+
37
+ if (!(this instanceof GlobSync))
38
+ return new GlobSync(pattern, options)
39
+
40
+ setopts(this, pattern, options)
41
+
42
+ if (this.noprocess)
43
+ return this
44
+
45
+ var n = this.minimatch.set.length
46
+ this.matches = new Array(n)
47
+ for (var i = 0; i < n; i ++) {
48
+ this._process(this.minimatch.set[i], i, false)
49
+ }
50
+ this._finish()
51
+ }
52
+
53
+ GlobSync.prototype._finish = function () {
54
+ assert(this instanceof GlobSync)
55
+ if (this.realpath) {
56
+ var self = this
57
+ this.matches.forEach(function (matchset, index) {
58
+ var set = self.matches[index] = Object.create(null)
59
+ for (var p in matchset) {
60
+ try {
61
+ p = self._makeAbs(p)
62
+ var real = rp.realpathSync(p, self.realpathCache)
63
+ set[real] = true
64
+ } catch (er) {
65
+ if (er.syscall === 'stat')
66
+ set[self._makeAbs(p)] = true
67
+ else
68
+ throw er
69
+ }
70
+ }
71
+ })
72
+ }
73
+ common.finish(this)
74
+ }
75
+
76
+
77
+ GlobSync.prototype._process = function (pattern, index, inGlobStar) {
78
+ assert(this instanceof GlobSync)
79
+
80
+ // Get the first [n] parts of pattern that are all strings.
81
+ var n = 0
82
+ while (typeof pattern[n] === 'string') {
83
+ n ++
84
+ }
85
+ // now n is the index of the first one that is *not* a string.
86
+
87
+ // See if there's anything else
88
+ var prefix
89
+ switch (n) {
90
+ // if not, then this is rather simple
91
+ case pattern.length:
92
+ this._processSimple(pattern.join('/'), index)
93
+ return
94
+
95
+ case 0:
96
+ // pattern *starts* with some non-trivial item.
97
+ // going to readdir(cwd), but not include the prefix in matches.
98
+ prefix = null
99
+ break
100
+
101
+ default:
102
+ // pattern has some string bits in the front.
103
+ // whatever it starts with, whether that's 'absolute' like /foo/bar,
104
+ // or 'relative' like '../baz'
105
+ prefix = pattern.slice(0, n).join('/')
106
+ break
107
+ }
108
+
109
+ var remain = pattern.slice(n)
110
+
111
+ // get the list of entries.
112
+ var read
113
+ if (prefix === null)
114
+ read = '.'
115
+ else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
116
+ if (!prefix || !isAbsolute(prefix))
117
+ prefix = '/' + prefix
118
+ read = prefix
119
+ } else
120
+ read = prefix
121
+
122
+ var abs = this._makeAbs(read)
123
+
124
+ //if ignored, skip processing
125
+ if (childrenIgnored(this, read))
126
+ return
127
+
128
+ var isGlobStar = remain[0] === minimatch.GLOBSTAR
129
+ if (isGlobStar)
130
+ this._processGlobStar(prefix, read, abs, remain, index, inGlobStar)
131
+ else
132
+ this._processReaddir(prefix, read, abs, remain, index, inGlobStar)
133
+ }
134
+
135
+
136
+ GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {
137
+ var entries = this._readdir(abs, inGlobStar)
138
+
139
+ // if the abs isn't a dir, then nothing can match!
140
+ if (!entries)
141
+ return
142
+
143
+ // It will only match dot entries if it starts with a dot, or if
144
+ // dot is set. Stuff like @(.foo|.bar) isn't allowed.
145
+ var pn = remain[0]
146
+ var negate = !!this.minimatch.negate
147
+ var rawGlob = pn._glob
148
+ var dotOk = this.dot || rawGlob.charAt(0) === '.'
149
+
150
+ var matchedEntries = []
151
+ for (var i = 0; i < entries.length; i++) {
152
+ var e = entries[i]
153
+ if (e.charAt(0) !== '.' || dotOk) {
154
+ var m
155
+ if (negate && !prefix) {
156
+ m = !e.match(pn)
157
+ } else {
158
+ m = e.match(pn)
159
+ }
160
+ if (m)
161
+ matchedEntries.push(e)
162
+ }
163
+ }
164
+
165
+ var len = matchedEntries.length
166
+ // If there are no matched entries, then nothing matches.
167
+ if (len === 0)
168
+ return
169
+
170
+ // if this is the last remaining pattern bit, then no need for
171
+ // an additional stat *unless* the user has specified mark or
172
+ // stat explicitly. We know they exist, since readdir returned
173
+ // them.
174
+
175
+ if (remain.length === 1 && !this.mark && !this.stat) {
176
+ if (!this.matches[index])
177
+ this.matches[index] = Object.create(null)
178
+
179
+ for (var i = 0; i < len; i ++) {
180
+ var e = matchedEntries[i]
181
+ if (prefix) {
182
+ if (prefix.slice(-1) !== '/')
183
+ e = prefix + '/' + e
184
+ else
185
+ e = prefix + e
186
+ }
187
+
188
+ if (e.charAt(0) === '/' && !this.nomount) {
189
+ e = path.join(this.root, e)
190
+ }
191
+ this._emitMatch(index, e)
192
+ }
193
+ // This was the last one, and no stats were needed
194
+ return
195
+ }
196
+
197
+ // now test all matched entries as stand-ins for that part
198
+ // of the pattern.
199
+ remain.shift()
200
+ for (var i = 0; i < len; i ++) {
201
+ var e = matchedEntries[i]
202
+ var newPattern
203
+ if (prefix)
204
+ newPattern = [prefix, e]
205
+ else
206
+ newPattern = [e]
207
+ this._process(newPattern.concat(remain), index, inGlobStar)
208
+ }
209
+ }
210
+
211
+
212
+ GlobSync.prototype._emitMatch = function (index, e) {
213
+ if (isIgnored(this, e))
214
+ return
215
+
216
+ var abs = this._makeAbs(e)
217
+
218
+ if (this.mark)
219
+ e = this._mark(e)
220
+
221
+ if (this.absolute) {
222
+ e = abs
223
+ }
224
+
225
+ if (this.matches[index][e])
226
+ return
227
+
228
+ if (this.nodir) {
229
+ var c = this.cache[abs]
230
+ if (c === 'DIR' || Array.isArray(c))
231
+ return
232
+ }
233
+
234
+ this.matches[index][e] = true
235
+
236
+ if (this.stat)
237
+ this._stat(e)
238
+ }
239
+
240
+
241
+ GlobSync.prototype._readdirInGlobStar = function (abs) {
242
+ // follow all symlinked directories forever
243
+ // just proceed as if this is a non-globstar situation
244
+ if (this.follow)
245
+ return this._readdir(abs, false)
246
+
247
+ var entries
248
+ var lstat
249
+ var stat
250
+ try {
251
+ lstat = fs.lstatSync(abs)
252
+ } catch (er) {
253
+ if (er.code === 'ENOENT') {
254
+ // lstat failed, doesn't exist
255
+ return null
256
+ }
257
+ }
258
+
259
+ var isSym = lstat && lstat.isSymbolicLink()
260
+ this.symlinks[abs] = isSym
261
+
262
+ // If it's not a symlink or a dir, then it's definitely a regular file.
263
+ // don't bother doing a readdir in that case.
264
+ if (!isSym && lstat && !lstat.isDirectory())
265
+ this.cache[abs] = 'FILE'
266
+ else
267
+ entries = this._readdir(abs, false)
268
+
269
+ return entries
270
+ }
271
+
272
+ GlobSync.prototype._readdir = function (abs, inGlobStar) {
273
+ var entries
274
+
275
+ if (inGlobStar && !ownProp(this.symlinks, abs))
276
+ return this._readdirInGlobStar(abs)
277
+
278
+ if (ownProp(this.cache, abs)) {
279
+ var c = this.cache[abs]
280
+ if (!c || c === 'FILE')
281
+ return null
282
+
283
+ if (Array.isArray(c))
284
+ return c
285
+ }
286
+
287
+ try {
288
+ return this._readdirEntries(abs, fs.readdirSync(abs))
289
+ } catch (er) {
290
+ this._readdirError(abs, er)
291
+ return null
292
+ }
293
+ }
294
+
295
+ GlobSync.prototype._readdirEntries = function (abs, entries) {
296
+ // if we haven't asked to stat everything, then just
297
+ // assume that everything in there exists, so we can avoid
298
+ // having to stat it a second time.
299
+ if (!this.mark && !this.stat) {
300
+ for (var i = 0; i < entries.length; i ++) {
301
+ var e = entries[i]
302
+ if (abs === '/')
303
+ e = abs + e
304
+ else
305
+ e = abs + '/' + e
306
+ this.cache[e] = true
307
+ }
308
+ }
309
+
310
+ this.cache[abs] = entries
311
+
312
+ // mark and cache dir-ness
313
+ return entries
314
+ }
315
+
316
+ GlobSync.prototype._readdirError = function (f, er) {
317
+ // handle errors, and cache the information
318
+ switch (er.code) {
319
+ case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
320
+ case 'ENOTDIR': // totally normal. means it *does* exist.
321
+ var abs = this._makeAbs(f)
322
+ this.cache[abs] = 'FILE'
323
+ if (abs === this.cwdAbs) {
324
+ var error = new Error(er.code + ' invalid cwd ' + this.cwd)
325
+ error.path = this.cwd
326
+ error.code = er.code
327
+ throw error
328
+ }
329
+ break
330
+
331
+ case 'ENOENT': // not terribly unusual
332
+ case 'ELOOP':
333
+ case 'ENAMETOOLONG':
334
+ case 'UNKNOWN':
335
+ this.cache[this._makeAbs(f)] = false
336
+ break
337
+
338
+ default: // some unusual error. Treat as failure.
339
+ this.cache[this._makeAbs(f)] = false
340
+ if (this.strict)
341
+ throw er
342
+ if (!this.silent)
343
+ console.error('glob error', er)
344
+ break
345
+ }
346
+ }
347
+
348
+ GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {
349
+
350
+ var entries = this._readdir(abs, inGlobStar)
351
+
352
+ // no entries means not a dir, so it can never have matches
353
+ // foo.txt/** doesn't match foo.txt
354
+ if (!entries)
355
+ return
356
+
357
+ // test without the globstar, and with every child both below
358
+ // and replacing the globstar.
359
+ var remainWithoutGlobStar = remain.slice(1)
360
+ var gspref = prefix ? [ prefix ] : []
361
+ var noGlobStar = gspref.concat(remainWithoutGlobStar)
362
+
363
+ // the noGlobStar pattern exits the inGlobStar state
364
+ this._process(noGlobStar, index, false)
365
+
366
+ var len = entries.length
367
+ var isSym = this.symlinks[abs]
368
+
369
+ // If it's a symlink, and we're in a globstar, then stop
370
+ if (isSym && inGlobStar)
371
+ return
372
+
373
+ for (var i = 0; i < len; i++) {
374
+ var e = entries[i]
375
+ if (e.charAt(0) === '.' && !this.dot)
376
+ continue
377
+
378
+ // these two cases enter the inGlobStar state
379
+ var instead = gspref.concat(entries[i], remainWithoutGlobStar)
380
+ this._process(instead, index, true)
381
+
382
+ var below = gspref.concat(entries[i], remain)
383
+ this._process(below, index, true)
384
+ }
385
+ }
386
+
387
+ GlobSync.prototype._processSimple = function (prefix, index) {
388
+ // XXX review this. Shouldn't it be doing the mounting etc
389
+ // before doing stat? kinda weird?
390
+ var exists = this._stat(prefix)
391
+
392
+ if (!this.matches[index])
393
+ this.matches[index] = Object.create(null)
394
+
395
+ // If it doesn't exist, then just mark the lack of results
396
+ if (!exists)
397
+ return
398
+
399
+ if (prefix && isAbsolute(prefix) && !this.nomount) {
400
+ var trail = /[\/\\]$/.test(prefix)
401
+ if (prefix.charAt(0) === '/') {
402
+ prefix = path.join(this.root, prefix)
403
+ } else {
404
+ prefix = path.resolve(this.root, prefix)
405
+ if (trail)
406
+ prefix += '/'
407
+ }
408
+ }
409
+
410
+ if (process.platform === 'win32')
411
+ prefix = prefix.replace(/\\/g, '/')
412
+
413
+ // Mark this as a match
414
+ this._emitMatch(index, prefix)
415
+ }
416
+
417
+ // Returns either 'DIR', 'FILE', or false
418
+ GlobSync.prototype._stat = function (f) {
419
+ var abs = this._makeAbs(f)
420
+ var needDir = f.slice(-1) === '/'
421
+
422
+ if (f.length > this.maxLength)
423
+ return false
424
+
425
+ if (!this.stat && ownProp(this.cache, abs)) {
426
+ var c = this.cache[abs]
427
+
428
+ if (Array.isArray(c))
429
+ c = 'DIR'
430
+
431
+ // It exists, but maybe not how we need it
432
+ if (!needDir || c === 'DIR')
433
+ return c
434
+
435
+ if (needDir && c === 'FILE')
436
+ return false
437
+
438
+ // otherwise we have to stat, because maybe c=true
439
+ // if we know it exists, but not what it is.
440
+ }
441
+
442
+ var exists
443
+ var stat = this.statCache[abs]
444
+ if (!stat) {
445
+ var lstat
446
+ try {
447
+ lstat = fs.lstatSync(abs)
448
+ } catch (er) {
449
+ if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {
450
+ this.statCache[abs] = false
451
+ return false
452
+ }
453
+ }
454
+
455
+ if (lstat && lstat.isSymbolicLink()) {
456
+ try {
457
+ stat = fs.statSync(abs)
458
+ } catch (er) {
459
+ stat = lstat
460
+ }
461
+ } else {
462
+ stat = lstat
463
+ }
464
+ }
465
+
466
+ this.statCache[abs] = stat
467
+
468
+ var c = true
469
+ if (stat)
470
+ c = stat.isDirectory() ? 'DIR' : 'FILE'
471
+
472
+ this.cache[abs] = this.cache[abs] || c
473
+
474
+ if (needDir && c === 'FILE')
475
+ return false
476
+
477
+ return c
478
+ }
479
+
480
+ GlobSync.prototype._mark = function (p) {
481
+ return common.mark(this, p)
482
+ }
483
+
484
+ GlobSync.prototype._makeAbs = function (f) {
485
+ return common.makeAbs(this, f)
486
+ }