protobufjs 6.10.2 → 6.11.2

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 (220) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/bin/pbjs +0 -0
  3. package/bin/pbts +0 -0
  4. package/cli/README.md +163 -0
  5. package/cli/node_modules/.package-lock.json +256 -0
  6. package/cli/node_modules/acorn/CHANGELOG.md +620 -0
  7. package/cli/node_modules/acorn/LICENSE +21 -0
  8. package/cli/node_modules/acorn/README.md +269 -0
  9. package/cli/node_modules/acorn/bin/acorn +4 -0
  10. package/cli/node_modules/acorn/dist/acorn.d.ts +209 -0
  11. package/cli/node_modules/acorn/dist/acorn.js +5186 -0
  12. package/cli/node_modules/acorn/dist/acorn.js.map +1 -0
  13. package/cli/node_modules/acorn/dist/acorn.mjs +5155 -0
  14. package/cli/node_modules/acorn/dist/acorn.mjs.d.ts +2 -0
  15. package/cli/node_modules/acorn/dist/acorn.mjs.map +1 -0
  16. package/cli/node_modules/acorn/dist/bin.js +64 -0
  17. package/cli/node_modules/acorn/package.json +35 -0
  18. package/cli/node_modules/acorn-jsx/LICENSE +19 -0
  19. package/cli/node_modules/acorn-jsx/README.md +40 -0
  20. package/cli/node_modules/acorn-jsx/index.js +488 -0
  21. package/cli/node_modules/acorn-jsx/package.json +27 -0
  22. package/cli/node_modules/acorn-jsx/xhtml.js +255 -0
  23. package/cli/node_modules/balanced-match/.npmignore +5 -0
  24. package/cli/node_modules/balanced-match/LICENSE.md +21 -0
  25. package/cli/node_modules/balanced-match/README.md +91 -0
  26. package/cli/node_modules/balanced-match/index.js +59 -0
  27. package/cli/node_modules/balanced-match/package.json +49 -0
  28. package/cli/node_modules/brace-expansion/LICENSE +21 -0
  29. package/cli/node_modules/brace-expansion/README.md +129 -0
  30. package/cli/node_modules/brace-expansion/index.js +201 -0
  31. package/cli/node_modules/brace-expansion/package.json +47 -0
  32. package/cli/node_modules/concat-map/.travis.yml +4 -0
  33. package/cli/node_modules/concat-map/LICENSE +18 -0
  34. package/cli/node_modules/concat-map/README.markdown +62 -0
  35. package/cli/node_modules/concat-map/example/map.js +6 -0
  36. package/cli/node_modules/concat-map/index.js +13 -0
  37. package/cli/node_modules/concat-map/package.json +43 -0
  38. package/cli/node_modules/concat-map/test/map.js +39 -0
  39. package/cli/node_modules/deep-is/.npmignore +1 -0
  40. package/cli/node_modules/deep-is/.travis.yml +6 -0
  41. package/cli/node_modules/deep-is/LICENSE +22 -0
  42. package/cli/node_modules/deep-is/README.markdown +70 -0
  43. package/cli/node_modules/deep-is/example/cmp.js +11 -0
  44. package/cli/node_modules/deep-is/index.js +102 -0
  45. package/cli/node_modules/deep-is/package.json +61 -0
  46. package/cli/node_modules/deep-is/test/NaN.js +16 -0
  47. package/cli/node_modules/deep-is/test/cmp.js +23 -0
  48. package/cli/node_modules/deep-is/test/neg-vs-pos-0.js +15 -0
  49. package/cli/node_modules/escodegen/LICENSE.BSD +21 -0
  50. package/cli/node_modules/escodegen/README.md +84 -0
  51. package/cli/node_modules/escodegen/bin/escodegen.js +77 -0
  52. package/cli/node_modules/escodegen/bin/esgenerate.js +64 -0
  53. package/cli/node_modules/escodegen/escodegen.js +2647 -0
  54. package/cli/node_modules/escodegen/package.json +62 -0
  55. package/cli/node_modules/eslint-visitor-keys/CHANGELOG.md +25 -0
  56. package/cli/node_modules/eslint-visitor-keys/LICENSE +201 -0
  57. package/cli/node_modules/eslint-visitor-keys/README.md +98 -0
  58. package/cli/node_modules/eslint-visitor-keys/lib/index.js +81 -0
  59. package/cli/node_modules/eslint-visitor-keys/lib/visitor-keys.json +284 -0
  60. package/cli/node_modules/eslint-visitor-keys/package.json +40 -0
  61. package/cli/node_modules/espree/CHANGELOG.md +509 -0
  62. package/cli/node_modules/espree/LICENSE +25 -0
  63. package/cli/node_modules/espree/README.md +233 -0
  64. package/cli/node_modules/espree/espree.js +177 -0
  65. package/cli/node_modules/espree/lib/ast-node-types.js +96 -0
  66. package/cli/node_modules/espree/lib/espree.js +286 -0
  67. package/cli/node_modules/espree/lib/features.js +29 -0
  68. package/cli/node_modules/espree/lib/options.js +106 -0
  69. package/cli/node_modules/espree/lib/token-translator.js +263 -0
  70. package/cli/node_modules/espree/lib/visitor-keys.js +123 -0
  71. package/cli/node_modules/espree/package.json +64 -0
  72. package/cli/node_modules/esprima/ChangeLog +235 -0
  73. package/cli/node_modules/esprima/LICENSE.BSD +21 -0
  74. package/cli/node_modules/esprima/README.md +46 -0
  75. package/cli/node_modules/esprima/bin/esparse.js +139 -0
  76. package/cli/node_modules/esprima/bin/esvalidate.js +236 -0
  77. package/cli/node_modules/esprima/dist/esprima.js +6709 -0
  78. package/cli/node_modules/esprima/package.json +112 -0
  79. package/cli/node_modules/estraverse/.jshintrc +16 -0
  80. package/cli/node_modules/estraverse/LICENSE.BSD +19 -0
  81. package/cli/node_modules/estraverse/README.md +153 -0
  82. package/cli/node_modules/estraverse/estraverse.js +801 -0
  83. package/cli/node_modules/estraverse/gulpfile.js +70 -0
  84. package/cli/node_modules/estraverse/package.json +40 -0
  85. package/cli/node_modules/esutils/LICENSE.BSD +19 -0
  86. package/cli/node_modules/esutils/README.md +174 -0
  87. package/cli/node_modules/esutils/lib/ast.js +144 -0
  88. package/cli/node_modules/esutils/lib/code.js +135 -0
  89. package/cli/node_modules/esutils/lib/keyword.js +165 -0
  90. package/cli/node_modules/esutils/lib/utils.js +33 -0
  91. package/cli/node_modules/esutils/package.json +44 -0
  92. package/cli/node_modules/fast-levenshtein/LICENSE.md +25 -0
  93. package/cli/node_modules/fast-levenshtein/README.md +104 -0
  94. package/cli/node_modules/fast-levenshtein/levenshtein.js +136 -0
  95. package/cli/node_modules/fast-levenshtein/package.json +39 -0
  96. package/cli/node_modules/fs.realpath/LICENSE +43 -0
  97. package/cli/node_modules/fs.realpath/README.md +33 -0
  98. package/cli/node_modules/fs.realpath/index.js +66 -0
  99. package/cli/node_modules/fs.realpath/old.js +303 -0
  100. package/cli/node_modules/fs.realpath/package.json +26 -0
  101. package/cli/node_modules/glob/LICENSE +21 -0
  102. package/cli/node_modules/glob/README.md +375 -0
  103. package/cli/node_modules/glob/changelog.md +67 -0
  104. package/cli/node_modules/glob/common.js +240 -0
  105. package/cli/node_modules/glob/glob.js +790 -0
  106. package/cli/node_modules/glob/package.json +46 -0
  107. package/cli/node_modules/glob/sync.js +486 -0
  108. package/cli/node_modules/inflight/LICENSE +15 -0
  109. package/cli/node_modules/inflight/README.md +37 -0
  110. package/cli/node_modules/inflight/inflight.js +54 -0
  111. package/cli/node_modules/inflight/package.json +29 -0
  112. package/cli/node_modules/inherits/LICENSE +16 -0
  113. package/cli/node_modules/inherits/README.md +42 -0
  114. package/cli/node_modules/inherits/inherits.js +9 -0
  115. package/cli/node_modules/inherits/inherits_browser.js +27 -0
  116. package/cli/node_modules/inherits/package.json +29 -0
  117. package/cli/node_modules/levn/LICENSE +22 -0
  118. package/cli/node_modules/levn/README.md +196 -0
  119. package/cli/node_modules/levn/lib/cast.js +298 -0
  120. package/cli/node_modules/levn/lib/coerce.js +285 -0
  121. package/cli/node_modules/levn/lib/index.js +22 -0
  122. package/cli/node_modules/levn/lib/parse-string.js +113 -0
  123. package/cli/node_modules/levn/lib/parse.js +102 -0
  124. package/cli/node_modules/levn/package.json +47 -0
  125. package/cli/node_modules/minimatch/LICENSE +15 -0
  126. package/cli/node_modules/minimatch/README.md +209 -0
  127. package/cli/node_modules/minimatch/minimatch.js +923 -0
  128. package/cli/node_modules/minimatch/package.json +30 -0
  129. package/cli/node_modules/once/LICENSE +15 -0
  130. package/cli/node_modules/once/README.md +79 -0
  131. package/cli/node_modules/once/once.js +42 -0
  132. package/cli/node_modules/once/package.json +33 -0
  133. package/cli/node_modules/optionator/CHANGELOG.md +56 -0
  134. package/cli/node_modules/optionator/LICENSE +22 -0
  135. package/cli/node_modules/optionator/README.md +238 -0
  136. package/cli/node_modules/optionator/lib/help.js +260 -0
  137. package/cli/node_modules/optionator/lib/index.js +465 -0
  138. package/cli/node_modules/optionator/lib/util.js +54 -0
  139. package/cli/node_modules/optionator/package.json +44 -0
  140. package/cli/node_modules/path-is-absolute/index.js +20 -0
  141. package/cli/node_modules/path-is-absolute/license +21 -0
  142. package/cli/node_modules/path-is-absolute/package.json +43 -0
  143. package/cli/node_modules/path-is-absolute/readme.md +59 -0
  144. package/cli/node_modules/prelude-ls/CHANGELOG.md +99 -0
  145. package/cli/node_modules/prelude-ls/LICENSE +22 -0
  146. package/cli/node_modules/prelude-ls/README.md +15 -0
  147. package/cli/node_modules/prelude-ls/lib/Func.js +65 -0
  148. package/cli/node_modules/prelude-ls/lib/List.js +686 -0
  149. package/cli/node_modules/prelude-ls/lib/Num.js +130 -0
  150. package/cli/node_modules/prelude-ls/lib/Obj.js +154 -0
  151. package/cli/node_modules/prelude-ls/lib/Str.js +92 -0
  152. package/cli/node_modules/prelude-ls/lib/index.js +178 -0
  153. package/cli/node_modules/prelude-ls/package.json +52 -0
  154. package/cli/node_modules/rimraf/CHANGELOG.md +65 -0
  155. package/cli/node_modules/rimraf/LICENSE +15 -0
  156. package/cli/node_modules/rimraf/README.md +101 -0
  157. package/cli/node_modules/rimraf/bin.js +68 -0
  158. package/cli/node_modules/rimraf/package.json +32 -0
  159. package/cli/node_modules/rimraf/rimraf.js +360 -0
  160. package/cli/node_modules/source-map/CHANGELOG.md +301 -0
  161. package/cli/node_modules/source-map/LICENSE +28 -0
  162. package/cli/node_modules/source-map/README.md +742 -0
  163. package/cli/node_modules/source-map/dist/source-map.debug.js +3234 -0
  164. package/cli/node_modules/source-map/dist/source-map.js +3233 -0
  165. package/cli/node_modules/source-map/dist/source-map.min.js +2 -0
  166. package/cli/node_modules/source-map/dist/source-map.min.js.map +1 -0
  167. package/cli/node_modules/source-map/lib/array-set.js +121 -0
  168. package/cli/node_modules/source-map/lib/base64-vlq.js +140 -0
  169. package/cli/node_modules/source-map/lib/base64.js +67 -0
  170. package/cli/node_modules/source-map/lib/binary-search.js +111 -0
  171. package/cli/node_modules/source-map/lib/mapping-list.js +79 -0
  172. package/cli/node_modules/source-map/lib/quick-sort.js +114 -0
  173. package/cli/node_modules/source-map/lib/source-map-consumer.js +1145 -0
  174. package/cli/node_modules/source-map/lib/source-map-generator.js +425 -0
  175. package/cli/node_modules/source-map/lib/source-node.js +413 -0
  176. package/cli/node_modules/source-map/lib/util.js +488 -0
  177. package/cli/node_modules/source-map/package.json +73 -0
  178. package/cli/node_modules/source-map/source-map.d.ts +98 -0
  179. package/cli/node_modules/source-map/source-map.js +8 -0
  180. package/cli/node_modules/tmp/CHANGELOG.md +288 -0
  181. package/cli/node_modules/tmp/LICENSE +21 -0
  182. package/cli/node_modules/tmp/README.md +365 -0
  183. package/cli/node_modules/tmp/lib/tmp.js +780 -0
  184. package/cli/node_modules/tmp/package.json +58 -0
  185. package/cli/node_modules/type-check/LICENSE +22 -0
  186. package/cli/node_modules/type-check/README.md +210 -0
  187. package/cli/node_modules/type-check/lib/check.js +126 -0
  188. package/cli/node_modules/type-check/lib/index.js +16 -0
  189. package/cli/node_modules/type-check/lib/parse-type.js +196 -0
  190. package/cli/node_modules/type-check/package.json +40 -0
  191. package/cli/node_modules/word-wrap/LICENSE +21 -0
  192. package/cli/node_modules/word-wrap/README.md +182 -0
  193. package/cli/node_modules/word-wrap/index.d.ts +50 -0
  194. package/cli/node_modules/word-wrap/index.js +46 -0
  195. package/cli/node_modules/word-wrap/package.json +77 -0
  196. package/cli/node_modules/wrappy/LICENSE +15 -0
  197. package/cli/node_modules/wrappy/README.md +36 -0
  198. package/cli/node_modules/wrappy/package.json +29 -0
  199. package/cli/node_modules/wrappy/wrappy.js +33 -0
  200. package/cli/package.json +1 -0
  201. package/cli/pbjs.js +3 -1
  202. package/cli/targets/static.js +7 -1
  203. package/dist/light/protobuf.js +17 -5
  204. package/dist/light/protobuf.js.map +1 -1
  205. package/dist/light/protobuf.min.js +3 -3
  206. package/dist/light/protobuf.min.js.map +1 -1
  207. package/dist/minimal/protobuf.js +2 -2
  208. package/dist/minimal/protobuf.min.js +3 -3
  209. package/dist/minimal/protobuf.min.js.map +1 -1
  210. package/dist/protobuf.js +54 -9
  211. package/dist/protobuf.js.map +1 -1
  212. package/dist/protobuf.min.js +3 -3
  213. package/dist/protobuf.min.js.map +1 -1
  214. package/index.d.ts +11 -1
  215. package/package.json +2 -2
  216. package/src/field.js +3 -0
  217. package/src/namespace.js +2 -1
  218. package/src/parse.js +37 -4
  219. package/package-lock.json +0 -8922
  220. package/scripts/changelog.js +0 -150
@@ -0,0 +1,101 @@
1
+ [![Build Status](https://travis-ci.org/isaacs/rimraf.svg?branch=master)](https://travis-ci.org/isaacs/rimraf) [![Dependency Status](https://david-dm.org/isaacs/rimraf.svg)](https://david-dm.org/isaacs/rimraf) [![devDependency Status](https://david-dm.org/isaacs/rimraf/dev-status.svg)](https://david-dm.org/isaacs/rimraf#info=devDependencies)
2
+
3
+ The [UNIX command](http://en.wikipedia.org/wiki/Rm_(Unix)) `rm -rf` for node.
4
+
5
+ Install with `npm install rimraf`, or just drop rimraf.js somewhere.
6
+
7
+ ## API
8
+
9
+ `rimraf(f, [opts], callback)`
10
+
11
+ The first parameter will be interpreted as a globbing pattern for files. If you
12
+ want to disable globbing you can do so with `opts.disableGlob` (defaults to
13
+ `false`). This might be handy, for instance, if you have filenames that contain
14
+ globbing wildcard characters.
15
+
16
+ The callback will be called with an error if there is one. Certain
17
+ errors are handled for you:
18
+
19
+ * Windows: `EBUSY` and `ENOTEMPTY` - rimraf will back off a maximum of
20
+ `opts.maxBusyTries` times before giving up, adding 100ms of wait
21
+ between each attempt. The default `maxBusyTries` is 3.
22
+ * `ENOENT` - If the file doesn't exist, rimraf will return
23
+ successfully, since your desired outcome is already the case.
24
+ * `EMFILE` - Since `readdir` requires opening a file descriptor, it's
25
+ possible to hit `EMFILE` if too many file descriptors are in use.
26
+ In the sync case, there's nothing to be done for this. But in the
27
+ async case, rimraf will gradually back off with timeouts up to
28
+ `opts.emfileWait` ms, which defaults to 1000.
29
+
30
+ ## options
31
+
32
+ * unlink, chmod, stat, lstat, rmdir, readdir,
33
+ unlinkSync, chmodSync, statSync, lstatSync, rmdirSync, readdirSync
34
+
35
+ In order to use a custom file system library, you can override
36
+ specific fs functions on the options object.
37
+
38
+ If any of these functions are present on the options object, then
39
+ the supplied function will be used instead of the default fs
40
+ method.
41
+
42
+ Sync methods are only relevant for `rimraf.sync()`, of course.
43
+
44
+ For example:
45
+
46
+ ```javascript
47
+ var myCustomFS = require('some-custom-fs')
48
+
49
+ rimraf('some-thing', myCustomFS, callback)
50
+ ```
51
+
52
+ * maxBusyTries
53
+
54
+ If an `EBUSY`, `ENOTEMPTY`, or `EPERM` error code is encountered
55
+ on Windows systems, then rimraf will retry with a linear backoff
56
+ wait of 100ms longer on each try. The default maxBusyTries is 3.
57
+
58
+ Only relevant for async usage.
59
+
60
+ * emfileWait
61
+
62
+ If an `EMFILE` error is encountered, then rimraf will retry
63
+ repeatedly with a linear backoff of 1ms longer on each try, until
64
+ the timeout counter hits this max. The default limit is 1000.
65
+
66
+ If you repeatedly encounter `EMFILE` errors, then consider using
67
+ [graceful-fs](http://npm.im/graceful-fs) in your program.
68
+
69
+ Only relevant for async usage.
70
+
71
+ * glob
72
+
73
+ Set to `false` to disable [glob](http://npm.im/glob) pattern
74
+ matching.
75
+
76
+ Set to an object to pass options to the glob module. The default
77
+ glob options are `{ nosort: true, silent: true }`.
78
+
79
+ Glob version 6 is used in this module.
80
+
81
+ Relevant for both sync and async usage.
82
+
83
+ * disableGlob
84
+
85
+ Set to any non-falsey value to disable globbing entirely.
86
+ (Equivalent to setting `glob: false`.)
87
+
88
+ ## rimraf.sync
89
+
90
+ It can remove stuff synchronously, too. But that's not so good. Use
91
+ the async API. It's better.
92
+
93
+ ## CLI
94
+
95
+ If installed with `npm install rimraf -g` it can be used as a global
96
+ command `rimraf <path> [<path> ...]` which is useful for cross platform support.
97
+
98
+ ## mkdirp
99
+
100
+ If you need to create a directory recursively, check out
101
+ [mkdirp](https://github.com/substack/node-mkdirp).
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env node
2
+
3
+ const rimraf = require('./')
4
+
5
+ const path = require('path')
6
+
7
+ const isRoot = arg => /^(\/|[a-zA-Z]:\\)$/.test(path.resolve(arg))
8
+ const filterOutRoot = arg => {
9
+ const ok = preserveRoot === false || !isRoot(arg)
10
+ if (!ok) {
11
+ console.error(`refusing to remove ${arg}`)
12
+ console.error('Set --no-preserve-root to allow this')
13
+ }
14
+ return ok
15
+ }
16
+
17
+ let help = false
18
+ let dashdash = false
19
+ let noglob = false
20
+ let preserveRoot = true
21
+ const args = process.argv.slice(2).filter(arg => {
22
+ if (dashdash)
23
+ return !!arg
24
+ else if (arg === '--')
25
+ dashdash = true
26
+ else if (arg === '--no-glob' || arg === '-G')
27
+ noglob = true
28
+ else if (arg === '--glob' || arg === '-g')
29
+ noglob = false
30
+ else if (arg.match(/^(-+|\/)(h(elp)?|\?)$/))
31
+ help = true
32
+ else if (arg === '--preserve-root')
33
+ preserveRoot = true
34
+ else if (arg === '--no-preserve-root')
35
+ preserveRoot = false
36
+ else
37
+ return !!arg
38
+ }).filter(arg => !preserveRoot || filterOutRoot(arg))
39
+
40
+ const go = n => {
41
+ if (n >= args.length)
42
+ return
43
+ const options = noglob ? { glob: false } : {}
44
+ rimraf(args[n], options, er => {
45
+ if (er)
46
+ throw er
47
+ go(n+1)
48
+ })
49
+ }
50
+
51
+ if (help || args.length === 0) {
52
+ // If they didn't ask for help, then this is not a "success"
53
+ const log = help ? console.log : console.error
54
+ log('Usage: rimraf <path> [<path> ...]')
55
+ log('')
56
+ log(' Deletes all files and folders at "path" recursively.')
57
+ log('')
58
+ log('Options:')
59
+ log('')
60
+ log(' -h, --help Display this usage info')
61
+ log(' -G, --no-glob Do not expand glob patterns in arguments')
62
+ log(' -g, --glob Expand glob patterns in arguments (default)')
63
+ log(' --preserve-root Do not remove \'/\' (default)')
64
+ log(' --no-preserve-root Do not treat \'/\' specially')
65
+ log(' -- Stop parsing flags')
66
+ process.exit(help ? 0 : 1)
67
+ } else
68
+ go(0)
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "rimraf",
3
+ "version": "3.0.2",
4
+ "main": "rimraf.js",
5
+ "description": "A deep deletion module for node (like `rm -rf`)",
6
+ "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
7
+ "license": "ISC",
8
+ "repository": "git://github.com/isaacs/rimraf.git",
9
+ "scripts": {
10
+ "preversion": "npm test",
11
+ "postversion": "npm publish",
12
+ "postpublish": "git push origin --follow-tags",
13
+ "test": "tap test/*.js"
14
+ },
15
+ "bin": "./bin.js",
16
+ "dependencies": {
17
+ "glob": "^7.1.3"
18
+ },
19
+ "files": [
20
+ "LICENSE",
21
+ "README.md",
22
+ "bin.js",
23
+ "rimraf.js"
24
+ ],
25
+ "devDependencies": {
26
+ "mkdirp": "^0.5.1",
27
+ "tap": "^12.1.1"
28
+ },
29
+ "funding": {
30
+ "url": "https://github.com/sponsors/isaacs"
31
+ }
32
+ }
@@ -0,0 +1,360 @@
1
+ const assert = require("assert")
2
+ const path = require("path")
3
+ const fs = require("fs")
4
+ let glob = undefined
5
+ try {
6
+ glob = require("glob")
7
+ } catch (_err) {
8
+ // treat glob as optional.
9
+ }
10
+
11
+ const defaultGlobOpts = {
12
+ nosort: true,
13
+ silent: true
14
+ }
15
+
16
+ // for EMFILE handling
17
+ let timeout = 0
18
+
19
+ const isWindows = (process.platform === "win32")
20
+
21
+ const defaults = options => {
22
+ const methods = [
23
+ 'unlink',
24
+ 'chmod',
25
+ 'stat',
26
+ 'lstat',
27
+ 'rmdir',
28
+ 'readdir'
29
+ ]
30
+ methods.forEach(m => {
31
+ options[m] = options[m] || fs[m]
32
+ m = m + 'Sync'
33
+ options[m] = options[m] || fs[m]
34
+ })
35
+
36
+ options.maxBusyTries = options.maxBusyTries || 3
37
+ options.emfileWait = options.emfileWait || 1000
38
+ if (options.glob === false) {
39
+ options.disableGlob = true
40
+ }
41
+ if (options.disableGlob !== true && glob === undefined) {
42
+ throw Error('glob dependency not found, set `options.disableGlob = true` if intentional')
43
+ }
44
+ options.disableGlob = options.disableGlob || false
45
+ options.glob = options.glob || defaultGlobOpts
46
+ }
47
+
48
+ const rimraf = (p, options, cb) => {
49
+ if (typeof options === 'function') {
50
+ cb = options
51
+ options = {}
52
+ }
53
+
54
+ assert(p, 'rimraf: missing path')
55
+ assert.equal(typeof p, 'string', 'rimraf: path should be a string')
56
+ assert.equal(typeof cb, 'function', 'rimraf: callback function required')
57
+ assert(options, 'rimraf: invalid options argument provided')
58
+ assert.equal(typeof options, 'object', 'rimraf: options should be object')
59
+
60
+ defaults(options)
61
+
62
+ let busyTries = 0
63
+ let errState = null
64
+ let n = 0
65
+
66
+ const next = (er) => {
67
+ errState = errState || er
68
+ if (--n === 0)
69
+ cb(errState)
70
+ }
71
+
72
+ const afterGlob = (er, results) => {
73
+ if (er)
74
+ return cb(er)
75
+
76
+ n = results.length
77
+ if (n === 0)
78
+ return cb()
79
+
80
+ results.forEach(p => {
81
+ const CB = (er) => {
82
+ if (er) {
83
+ if ((er.code === "EBUSY" || er.code === "ENOTEMPTY" || er.code === "EPERM") &&
84
+ busyTries < options.maxBusyTries) {
85
+ busyTries ++
86
+ // try again, with the same exact callback as this one.
87
+ return setTimeout(() => rimraf_(p, options, CB), busyTries * 100)
88
+ }
89
+
90
+ // this one won't happen if graceful-fs is used.
91
+ if (er.code === "EMFILE" && timeout < options.emfileWait) {
92
+ return setTimeout(() => rimraf_(p, options, CB), timeout ++)
93
+ }
94
+
95
+ // already gone
96
+ if (er.code === "ENOENT") er = null
97
+ }
98
+
99
+ timeout = 0
100
+ next(er)
101
+ }
102
+ rimraf_(p, options, CB)
103
+ })
104
+ }
105
+
106
+ if (options.disableGlob || !glob.hasMagic(p))
107
+ return afterGlob(null, [p])
108
+
109
+ options.lstat(p, (er, stat) => {
110
+ if (!er)
111
+ return afterGlob(null, [p])
112
+
113
+ glob(p, options.glob, afterGlob)
114
+ })
115
+
116
+ }
117
+
118
+ // Two possible strategies.
119
+ // 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR
120
+ // 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR
121
+ //
122
+ // Both result in an extra syscall when you guess wrong. However, there
123
+ // are likely far more normal files in the world than directories. This
124
+ // is based on the assumption that a the average number of files per
125
+ // directory is >= 1.
126
+ //
127
+ // If anyone ever complains about this, then I guess the strategy could
128
+ // be made configurable somehow. But until then, YAGNI.
129
+ const rimraf_ = (p, options, cb) => {
130
+ assert(p)
131
+ assert(options)
132
+ assert(typeof cb === 'function')
133
+
134
+ // sunos lets the root user unlink directories, which is... weird.
135
+ // so we have to lstat here and make sure it's not a dir.
136
+ options.lstat(p, (er, st) => {
137
+ if (er && er.code === "ENOENT")
138
+ return cb(null)
139
+
140
+ // Windows can EPERM on stat. Life is suffering.
141
+ if (er && er.code === "EPERM" && isWindows)
142
+ fixWinEPERM(p, options, er, cb)
143
+
144
+ if (st && st.isDirectory())
145
+ return rmdir(p, options, er, cb)
146
+
147
+ options.unlink(p, er => {
148
+ if (er) {
149
+ if (er.code === "ENOENT")
150
+ return cb(null)
151
+ if (er.code === "EPERM")
152
+ return (isWindows)
153
+ ? fixWinEPERM(p, options, er, cb)
154
+ : rmdir(p, options, er, cb)
155
+ if (er.code === "EISDIR")
156
+ return rmdir(p, options, er, cb)
157
+ }
158
+ return cb(er)
159
+ })
160
+ })
161
+ }
162
+
163
+ const fixWinEPERM = (p, options, er, cb) => {
164
+ assert(p)
165
+ assert(options)
166
+ assert(typeof cb === 'function')
167
+
168
+ options.chmod(p, 0o666, er2 => {
169
+ if (er2)
170
+ cb(er2.code === "ENOENT" ? null : er)
171
+ else
172
+ options.stat(p, (er3, stats) => {
173
+ if (er3)
174
+ cb(er3.code === "ENOENT" ? null : er)
175
+ else if (stats.isDirectory())
176
+ rmdir(p, options, er, cb)
177
+ else
178
+ options.unlink(p, cb)
179
+ })
180
+ })
181
+ }
182
+
183
+ const fixWinEPERMSync = (p, options, er) => {
184
+ assert(p)
185
+ assert(options)
186
+
187
+ try {
188
+ options.chmodSync(p, 0o666)
189
+ } catch (er2) {
190
+ if (er2.code === "ENOENT")
191
+ return
192
+ else
193
+ throw er
194
+ }
195
+
196
+ let stats
197
+ try {
198
+ stats = options.statSync(p)
199
+ } catch (er3) {
200
+ if (er3.code === "ENOENT")
201
+ return
202
+ else
203
+ throw er
204
+ }
205
+
206
+ if (stats.isDirectory())
207
+ rmdirSync(p, options, er)
208
+ else
209
+ options.unlinkSync(p)
210
+ }
211
+
212
+ const rmdir = (p, options, originalEr, cb) => {
213
+ assert(p)
214
+ assert(options)
215
+ assert(typeof cb === 'function')
216
+
217
+ // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
218
+ // if we guessed wrong, and it's not a directory, then
219
+ // raise the original error.
220
+ options.rmdir(p, er => {
221
+ if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM"))
222
+ rmkids(p, options, cb)
223
+ else if (er && er.code === "ENOTDIR")
224
+ cb(originalEr)
225
+ else
226
+ cb(er)
227
+ })
228
+ }
229
+
230
+ const rmkids = (p, options, cb) => {
231
+ assert(p)
232
+ assert(options)
233
+ assert(typeof cb === 'function')
234
+
235
+ options.readdir(p, (er, files) => {
236
+ if (er)
237
+ return cb(er)
238
+ let n = files.length
239
+ if (n === 0)
240
+ return options.rmdir(p, cb)
241
+ let errState
242
+ files.forEach(f => {
243
+ rimraf(path.join(p, f), options, er => {
244
+ if (errState)
245
+ return
246
+ if (er)
247
+ return cb(errState = er)
248
+ if (--n === 0)
249
+ options.rmdir(p, cb)
250
+ })
251
+ })
252
+ })
253
+ }
254
+
255
+ // this looks simpler, and is strictly *faster*, but will
256
+ // tie up the JavaScript thread and fail on excessively
257
+ // deep directory trees.
258
+ const rimrafSync = (p, options) => {
259
+ options = options || {}
260
+ defaults(options)
261
+
262
+ assert(p, 'rimraf: missing path')
263
+ assert.equal(typeof p, 'string', 'rimraf: path should be a string')
264
+ assert(options, 'rimraf: missing options')
265
+ assert.equal(typeof options, 'object', 'rimraf: options should be object')
266
+
267
+ let results
268
+
269
+ if (options.disableGlob || !glob.hasMagic(p)) {
270
+ results = [p]
271
+ } else {
272
+ try {
273
+ options.lstatSync(p)
274
+ results = [p]
275
+ } catch (er) {
276
+ results = glob.sync(p, options.glob)
277
+ }
278
+ }
279
+
280
+ if (!results.length)
281
+ return
282
+
283
+ for (let i = 0; i < results.length; i++) {
284
+ const p = results[i]
285
+
286
+ let st
287
+ try {
288
+ st = options.lstatSync(p)
289
+ } catch (er) {
290
+ if (er.code === "ENOENT")
291
+ return
292
+
293
+ // Windows can EPERM on stat. Life is suffering.
294
+ if (er.code === "EPERM" && isWindows)
295
+ fixWinEPERMSync(p, options, er)
296
+ }
297
+
298
+ try {
299
+ // sunos lets the root user unlink directories, which is... weird.
300
+ if (st && st.isDirectory())
301
+ rmdirSync(p, options, null)
302
+ else
303
+ options.unlinkSync(p)
304
+ } catch (er) {
305
+ if (er.code === "ENOENT")
306
+ return
307
+ if (er.code === "EPERM")
308
+ return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
309
+ if (er.code !== "EISDIR")
310
+ throw er
311
+
312
+ rmdirSync(p, options, er)
313
+ }
314
+ }
315
+ }
316
+
317
+ const rmdirSync = (p, options, originalEr) => {
318
+ assert(p)
319
+ assert(options)
320
+
321
+ try {
322
+ options.rmdirSync(p)
323
+ } catch (er) {
324
+ if (er.code === "ENOENT")
325
+ return
326
+ if (er.code === "ENOTDIR")
327
+ throw originalEr
328
+ if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")
329
+ rmkidsSync(p, options)
330
+ }
331
+ }
332
+
333
+ const rmkidsSync = (p, options) => {
334
+ assert(p)
335
+ assert(options)
336
+ options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))
337
+
338
+ // We only end up here once we got ENOTEMPTY at least once, and
339
+ // at this point, we are guaranteed to have removed all the kids.
340
+ // So, we know that it won't be ENOENT or ENOTDIR or anything else.
341
+ // try really hard to delete stuff on windows, because it has a
342
+ // PROFOUNDLY annoying habit of not closing handles promptly when
343
+ // files are deleted, resulting in spurious ENOTEMPTY errors.
344
+ const retries = isWindows ? 100 : 1
345
+ let i = 0
346
+ do {
347
+ let threw = true
348
+ try {
349
+ const ret = options.rmdirSync(p, options)
350
+ threw = false
351
+ return ret
352
+ } finally {
353
+ if (++i < retries && threw)
354
+ continue
355
+ }
356
+ } while (true)
357
+ }
358
+
359
+ module.exports = rimraf
360
+ rimraf.sync = rimrafSync