protobufjs 6.11.2 → 6.11.3

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 (202) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/bin/pbjs +0 -0
  3. package/bin/pbts +0 -0
  4. package/package-lock.json +7870 -0
  5. package/package.json +3 -3
  6. package/scripts/changelog.js +150 -0
  7. package/src/util.js +3 -0
  8. package/cli/node_modules/.package-lock.json +0 -256
  9. package/cli/node_modules/acorn/CHANGELOG.md +0 -620
  10. package/cli/node_modules/acorn/LICENSE +0 -21
  11. package/cli/node_modules/acorn/README.md +0 -269
  12. package/cli/node_modules/acorn/bin/acorn +0 -4
  13. package/cli/node_modules/acorn/dist/acorn.d.ts +0 -209
  14. package/cli/node_modules/acorn/dist/acorn.js +0 -5186
  15. package/cli/node_modules/acorn/dist/acorn.js.map +0 -1
  16. package/cli/node_modules/acorn/dist/acorn.mjs +0 -5155
  17. package/cli/node_modules/acorn/dist/acorn.mjs.d.ts +0 -2
  18. package/cli/node_modules/acorn/dist/acorn.mjs.map +0 -1
  19. package/cli/node_modules/acorn/dist/bin.js +0 -64
  20. package/cli/node_modules/acorn/package.json +0 -35
  21. package/cli/node_modules/acorn-jsx/LICENSE +0 -19
  22. package/cli/node_modules/acorn-jsx/README.md +0 -40
  23. package/cli/node_modules/acorn-jsx/index.js +0 -488
  24. package/cli/node_modules/acorn-jsx/package.json +0 -27
  25. package/cli/node_modules/acorn-jsx/xhtml.js +0 -255
  26. package/cli/node_modules/balanced-match/.npmignore +0 -5
  27. package/cli/node_modules/balanced-match/LICENSE.md +0 -21
  28. package/cli/node_modules/balanced-match/README.md +0 -91
  29. package/cli/node_modules/balanced-match/index.js +0 -59
  30. package/cli/node_modules/balanced-match/package.json +0 -49
  31. package/cli/node_modules/brace-expansion/LICENSE +0 -21
  32. package/cli/node_modules/brace-expansion/README.md +0 -129
  33. package/cli/node_modules/brace-expansion/index.js +0 -201
  34. package/cli/node_modules/brace-expansion/package.json +0 -47
  35. package/cli/node_modules/concat-map/.travis.yml +0 -4
  36. package/cli/node_modules/concat-map/LICENSE +0 -18
  37. package/cli/node_modules/concat-map/README.markdown +0 -62
  38. package/cli/node_modules/concat-map/example/map.js +0 -6
  39. package/cli/node_modules/concat-map/index.js +0 -13
  40. package/cli/node_modules/concat-map/package.json +0 -43
  41. package/cli/node_modules/concat-map/test/map.js +0 -39
  42. package/cli/node_modules/deep-is/.npmignore +0 -1
  43. package/cli/node_modules/deep-is/.travis.yml +0 -6
  44. package/cli/node_modules/deep-is/LICENSE +0 -22
  45. package/cli/node_modules/deep-is/README.markdown +0 -70
  46. package/cli/node_modules/deep-is/example/cmp.js +0 -11
  47. package/cli/node_modules/deep-is/index.js +0 -102
  48. package/cli/node_modules/deep-is/package.json +0 -61
  49. package/cli/node_modules/deep-is/test/NaN.js +0 -16
  50. package/cli/node_modules/deep-is/test/cmp.js +0 -23
  51. package/cli/node_modules/deep-is/test/neg-vs-pos-0.js +0 -15
  52. package/cli/node_modules/escodegen/LICENSE.BSD +0 -21
  53. package/cli/node_modules/escodegen/README.md +0 -84
  54. package/cli/node_modules/escodegen/bin/escodegen.js +0 -77
  55. package/cli/node_modules/escodegen/bin/esgenerate.js +0 -64
  56. package/cli/node_modules/escodegen/escodegen.js +0 -2647
  57. package/cli/node_modules/escodegen/package.json +0 -62
  58. package/cli/node_modules/eslint-visitor-keys/CHANGELOG.md +0 -25
  59. package/cli/node_modules/eslint-visitor-keys/LICENSE +0 -201
  60. package/cli/node_modules/eslint-visitor-keys/README.md +0 -98
  61. package/cli/node_modules/eslint-visitor-keys/lib/index.js +0 -81
  62. package/cli/node_modules/eslint-visitor-keys/lib/visitor-keys.json +0 -284
  63. package/cli/node_modules/eslint-visitor-keys/package.json +0 -40
  64. package/cli/node_modules/espree/CHANGELOG.md +0 -509
  65. package/cli/node_modules/espree/LICENSE +0 -25
  66. package/cli/node_modules/espree/README.md +0 -233
  67. package/cli/node_modules/espree/espree.js +0 -177
  68. package/cli/node_modules/espree/lib/ast-node-types.js +0 -96
  69. package/cli/node_modules/espree/lib/espree.js +0 -286
  70. package/cli/node_modules/espree/lib/features.js +0 -29
  71. package/cli/node_modules/espree/lib/options.js +0 -106
  72. package/cli/node_modules/espree/lib/token-translator.js +0 -263
  73. package/cli/node_modules/espree/lib/visitor-keys.js +0 -123
  74. package/cli/node_modules/espree/package.json +0 -64
  75. package/cli/node_modules/esprima/ChangeLog +0 -235
  76. package/cli/node_modules/esprima/LICENSE.BSD +0 -21
  77. package/cli/node_modules/esprima/README.md +0 -46
  78. package/cli/node_modules/esprima/bin/esparse.js +0 -139
  79. package/cli/node_modules/esprima/bin/esvalidate.js +0 -236
  80. package/cli/node_modules/esprima/dist/esprima.js +0 -6709
  81. package/cli/node_modules/esprima/package.json +0 -112
  82. package/cli/node_modules/estraverse/.jshintrc +0 -16
  83. package/cli/node_modules/estraverse/LICENSE.BSD +0 -19
  84. package/cli/node_modules/estraverse/README.md +0 -153
  85. package/cli/node_modules/estraverse/estraverse.js +0 -801
  86. package/cli/node_modules/estraverse/gulpfile.js +0 -70
  87. package/cli/node_modules/estraverse/package.json +0 -40
  88. package/cli/node_modules/esutils/LICENSE.BSD +0 -19
  89. package/cli/node_modules/esutils/README.md +0 -174
  90. package/cli/node_modules/esutils/lib/ast.js +0 -144
  91. package/cli/node_modules/esutils/lib/code.js +0 -135
  92. package/cli/node_modules/esutils/lib/keyword.js +0 -165
  93. package/cli/node_modules/esutils/lib/utils.js +0 -33
  94. package/cli/node_modules/esutils/package.json +0 -44
  95. package/cli/node_modules/fast-levenshtein/LICENSE.md +0 -25
  96. package/cli/node_modules/fast-levenshtein/README.md +0 -104
  97. package/cli/node_modules/fast-levenshtein/levenshtein.js +0 -136
  98. package/cli/node_modules/fast-levenshtein/package.json +0 -39
  99. package/cli/node_modules/fs.realpath/LICENSE +0 -43
  100. package/cli/node_modules/fs.realpath/README.md +0 -33
  101. package/cli/node_modules/fs.realpath/index.js +0 -66
  102. package/cli/node_modules/fs.realpath/old.js +0 -303
  103. package/cli/node_modules/fs.realpath/package.json +0 -26
  104. package/cli/node_modules/glob/LICENSE +0 -21
  105. package/cli/node_modules/glob/README.md +0 -375
  106. package/cli/node_modules/glob/changelog.md +0 -67
  107. package/cli/node_modules/glob/common.js +0 -240
  108. package/cli/node_modules/glob/glob.js +0 -790
  109. package/cli/node_modules/glob/package.json +0 -46
  110. package/cli/node_modules/glob/sync.js +0 -486
  111. package/cli/node_modules/inflight/LICENSE +0 -15
  112. package/cli/node_modules/inflight/README.md +0 -37
  113. package/cli/node_modules/inflight/inflight.js +0 -54
  114. package/cli/node_modules/inflight/package.json +0 -29
  115. package/cli/node_modules/inherits/LICENSE +0 -16
  116. package/cli/node_modules/inherits/README.md +0 -42
  117. package/cli/node_modules/inherits/inherits.js +0 -9
  118. package/cli/node_modules/inherits/inherits_browser.js +0 -27
  119. package/cli/node_modules/inherits/package.json +0 -29
  120. package/cli/node_modules/levn/LICENSE +0 -22
  121. package/cli/node_modules/levn/README.md +0 -196
  122. package/cli/node_modules/levn/lib/cast.js +0 -298
  123. package/cli/node_modules/levn/lib/coerce.js +0 -285
  124. package/cli/node_modules/levn/lib/index.js +0 -22
  125. package/cli/node_modules/levn/lib/parse-string.js +0 -113
  126. package/cli/node_modules/levn/lib/parse.js +0 -102
  127. package/cli/node_modules/levn/package.json +0 -47
  128. package/cli/node_modules/minimatch/LICENSE +0 -15
  129. package/cli/node_modules/minimatch/README.md +0 -209
  130. package/cli/node_modules/minimatch/minimatch.js +0 -923
  131. package/cli/node_modules/minimatch/package.json +0 -30
  132. package/cli/node_modules/once/LICENSE +0 -15
  133. package/cli/node_modules/once/README.md +0 -79
  134. package/cli/node_modules/once/once.js +0 -42
  135. package/cli/node_modules/once/package.json +0 -33
  136. package/cli/node_modules/optionator/CHANGELOG.md +0 -56
  137. package/cli/node_modules/optionator/LICENSE +0 -22
  138. package/cli/node_modules/optionator/README.md +0 -238
  139. package/cli/node_modules/optionator/lib/help.js +0 -260
  140. package/cli/node_modules/optionator/lib/index.js +0 -465
  141. package/cli/node_modules/optionator/lib/util.js +0 -54
  142. package/cli/node_modules/optionator/package.json +0 -44
  143. package/cli/node_modules/path-is-absolute/index.js +0 -20
  144. package/cli/node_modules/path-is-absolute/license +0 -21
  145. package/cli/node_modules/path-is-absolute/package.json +0 -43
  146. package/cli/node_modules/path-is-absolute/readme.md +0 -59
  147. package/cli/node_modules/prelude-ls/CHANGELOG.md +0 -99
  148. package/cli/node_modules/prelude-ls/LICENSE +0 -22
  149. package/cli/node_modules/prelude-ls/README.md +0 -15
  150. package/cli/node_modules/prelude-ls/lib/Func.js +0 -65
  151. package/cli/node_modules/prelude-ls/lib/List.js +0 -686
  152. package/cli/node_modules/prelude-ls/lib/Num.js +0 -130
  153. package/cli/node_modules/prelude-ls/lib/Obj.js +0 -154
  154. package/cli/node_modules/prelude-ls/lib/Str.js +0 -92
  155. package/cli/node_modules/prelude-ls/lib/index.js +0 -178
  156. package/cli/node_modules/prelude-ls/package.json +0 -52
  157. package/cli/node_modules/rimraf/CHANGELOG.md +0 -65
  158. package/cli/node_modules/rimraf/LICENSE +0 -15
  159. package/cli/node_modules/rimraf/README.md +0 -101
  160. package/cli/node_modules/rimraf/bin.js +0 -68
  161. package/cli/node_modules/rimraf/package.json +0 -32
  162. package/cli/node_modules/rimraf/rimraf.js +0 -360
  163. package/cli/node_modules/source-map/CHANGELOG.md +0 -301
  164. package/cli/node_modules/source-map/LICENSE +0 -28
  165. package/cli/node_modules/source-map/README.md +0 -742
  166. package/cli/node_modules/source-map/dist/source-map.debug.js +0 -3234
  167. package/cli/node_modules/source-map/dist/source-map.js +0 -3233
  168. package/cli/node_modules/source-map/dist/source-map.min.js +0 -2
  169. package/cli/node_modules/source-map/dist/source-map.min.js.map +0 -1
  170. package/cli/node_modules/source-map/lib/array-set.js +0 -121
  171. package/cli/node_modules/source-map/lib/base64-vlq.js +0 -140
  172. package/cli/node_modules/source-map/lib/base64.js +0 -67
  173. package/cli/node_modules/source-map/lib/binary-search.js +0 -111
  174. package/cli/node_modules/source-map/lib/mapping-list.js +0 -79
  175. package/cli/node_modules/source-map/lib/quick-sort.js +0 -114
  176. package/cli/node_modules/source-map/lib/source-map-consumer.js +0 -1145
  177. package/cli/node_modules/source-map/lib/source-map-generator.js +0 -425
  178. package/cli/node_modules/source-map/lib/source-node.js +0 -413
  179. package/cli/node_modules/source-map/lib/util.js +0 -488
  180. package/cli/node_modules/source-map/package.json +0 -73
  181. package/cli/node_modules/source-map/source-map.d.ts +0 -98
  182. package/cli/node_modules/source-map/source-map.js +0 -8
  183. package/cli/node_modules/tmp/CHANGELOG.md +0 -288
  184. package/cli/node_modules/tmp/LICENSE +0 -21
  185. package/cli/node_modules/tmp/README.md +0 -365
  186. package/cli/node_modules/tmp/lib/tmp.js +0 -780
  187. package/cli/node_modules/tmp/package.json +0 -58
  188. package/cli/node_modules/type-check/LICENSE +0 -22
  189. package/cli/node_modules/type-check/README.md +0 -210
  190. package/cli/node_modules/type-check/lib/check.js +0 -126
  191. package/cli/node_modules/type-check/lib/index.js +0 -16
  192. package/cli/node_modules/type-check/lib/parse-type.js +0 -196
  193. package/cli/node_modules/type-check/package.json +0 -40
  194. package/cli/node_modules/word-wrap/LICENSE +0 -21
  195. package/cli/node_modules/word-wrap/README.md +0 -182
  196. package/cli/node_modules/word-wrap/index.d.ts +0 -50
  197. package/cli/node_modules/word-wrap/index.js +0 -46
  198. package/cli/node_modules/word-wrap/package.json +0 -77
  199. package/cli/node_modules/wrappy/LICENSE +0 -15
  200. package/cli/node_modules/wrappy/README.md +0 -36
  201. package/cli/node_modules/wrappy/package.json +0 -29
  202. package/cli/node_modules/wrappy/wrappy.js +0 -33
@@ -1,101 +0,0 @@
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).
@@ -1,68 +0,0 @@
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)
@@ -1,32 +0,0 @@
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
- }
@@ -1,360 +0,0 @@
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