dragonfly_chrome_headless 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }