protobufjs 6.11.4 → 6.11.6

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 (118) hide show
  1. package/cli/node_modules/.package-lock.json +86 -32
  2. package/cli/node_modules/@babel/parser/package.json +66 -30
  3. package/cli/node_modules/@types/linkify-it/package.json +65 -36
  4. package/cli/node_modules/@types/markdown-it/package.json +67 -39
  5. package/cli/node_modules/@types/mdurl/package.json +53 -21
  6. package/cli/node_modules/acorn/package.json +48 -17
  7. package/cli/node_modules/acorn-jsx/package.json +42 -11
  8. package/cli/node_modules/argparse/package.json +52 -17
  9. package/cli/node_modules/bluebird/package.json +65 -38
  10. package/cli/node_modules/brace-expansion/index.js +14 -12
  11. package/cli/node_modules/brace-expansion/package.json +4 -1
  12. package/cli/node_modules/catharsis/package.json +44 -10
  13. package/cli/node_modules/deep-is/.travis.yml +5 -0
  14. package/cli/node_modules/deep-is/LICENSE +22 -0
  15. package/cli/node_modules/deep-is/README.markdown +70 -0
  16. package/cli/node_modules/deep-is/example/cmp.js +11 -0
  17. package/cli/node_modules/deep-is/index.js +102 -0
  18. package/cli/node_modules/deep-is/package.json +58 -0
  19. package/cli/node_modules/deep-is/test/NaN.js +16 -0
  20. package/cli/node_modules/deep-is/test/cmp.js +23 -0
  21. package/cli/node_modules/deep-is/test/neg-vs-pos-0.js +15 -0
  22. package/cli/node_modules/entities/package.json +95 -60
  23. package/cli/node_modules/escape-string-regexp/package.json +84 -41
  24. package/cli/node_modules/escodegen/escodegen.js +25 -66
  25. package/cli/node_modules/escodegen/package.json +11 -13
  26. package/cli/node_modules/esprima/package.json +82 -54
  27. package/cli/node_modules/estraverse/estraverse.js +1 -24
  28. package/cli/node_modules/estraverse/package.json +1 -1
  29. package/cli/node_modules/esutils/package.json +52 -21
  30. package/cli/node_modules/fast-levenshtein/LICENSE.md +25 -0
  31. package/cli/node_modules/fast-levenshtein/README.md +104 -0
  32. package/cli/node_modules/fast-levenshtein/levenshtein.js +136 -0
  33. package/cli/node_modules/fast-levenshtein/package.json +39 -0
  34. package/cli/node_modules/fs.realpath/package.json +52 -16
  35. package/cli/node_modules/graceful-fs/package.json +57 -25
  36. package/cli/node_modules/inflight/package.json +44 -15
  37. package/cli/node_modules/inherits/package.json +44 -12
  38. package/cli/node_modules/js2xmlparser/package.json +94 -62
  39. package/cli/node_modules/klaw/package.json +53 -23
  40. package/cli/node_modules/levn/LICENSE +22 -0
  41. package/cli/node_modules/levn/README.md +196 -0
  42. package/cli/node_modules/levn/lib/cast.js +298 -0
  43. package/cli/node_modules/levn/lib/coerce.js +285 -0
  44. package/cli/node_modules/levn/lib/index.js +22 -0
  45. package/cli/node_modules/levn/lib/parse-string.js +113 -0
  46. package/cli/node_modules/levn/lib/parse.js +102 -0
  47. package/cli/node_modules/levn/package.json +47 -0
  48. package/cli/node_modules/linkify-it/package.json +58 -23
  49. package/cli/node_modules/lodash/package.json +61 -10
  50. package/cli/node_modules/markdown-it/package.json +68 -33
  51. package/cli/node_modules/markdown-it-anchor/package.json +72 -30
  52. package/cli/node_modules/marked/package.json +87 -52
  53. package/cli/node_modules/mdurl/package.json +44 -9
  54. package/cli/node_modules/minimatch/README.md +37 -0
  55. package/cli/node_modules/minimatch/minimatch.js +160 -102
  56. package/cli/node_modules/minimatch/package.json +2 -2
  57. package/cli/node_modules/mkdirp/package.json +56 -22
  58. package/cli/node_modules/once/package.json +48 -14
  59. package/cli/node_modules/optionator/CHANGELOG.md +56 -0
  60. package/cli/node_modules/optionator/LICENSE +22 -0
  61. package/cli/node_modules/optionator/README.md +238 -0
  62. package/cli/node_modules/optionator/lib/help.js +260 -0
  63. package/cli/node_modules/optionator/lib/index.js +465 -0
  64. package/cli/node_modules/optionator/lib/util.js +54 -0
  65. package/cli/node_modules/optionator/package.json +44 -0
  66. package/cli/node_modules/prelude-ls/CHANGELOG.md +99 -0
  67. package/cli/node_modules/prelude-ls/LICENSE +22 -0
  68. package/cli/node_modules/prelude-ls/README.md +15 -0
  69. package/cli/node_modules/prelude-ls/lib/Func.js +65 -0
  70. package/cli/node_modules/prelude-ls/lib/List.js +686 -0
  71. package/cli/node_modules/prelude-ls/lib/Num.js +130 -0
  72. package/cli/node_modules/prelude-ls/lib/Obj.js +154 -0
  73. package/cli/node_modules/prelude-ls/lib/Str.js +92 -0
  74. package/cli/node_modules/prelude-ls/lib/index.js +178 -0
  75. package/cli/node_modules/prelude-ls/package.json +52 -0
  76. package/cli/node_modules/requizzle/package.json +52 -21
  77. package/cli/node_modules/source-map/package.json +197 -54
  78. package/cli/node_modules/strip-json-comments/package.json +80 -45
  79. package/cli/node_modules/tmp/README.md +47 -21
  80. package/cli/node_modules/tmp/lib/tmp.js +209 -147
  81. package/cli/node_modules/tmp/package.json +73 -37
  82. package/cli/node_modules/type-check/LICENSE +22 -0
  83. package/cli/node_modules/type-check/README.md +210 -0
  84. package/cli/node_modules/type-check/lib/check.js +126 -0
  85. package/cli/node_modules/type-check/lib/index.js +16 -0
  86. package/cli/node_modules/type-check/lib/parse-type.js +196 -0
  87. package/cli/node_modules/type-check/package.json +40 -0
  88. package/cli/node_modules/uc.micro/package.json +45 -9
  89. package/cli/node_modules/underscore/package.json +95 -61
  90. package/cli/node_modules/word-wrap/LICENSE +21 -0
  91. package/cli/node_modules/word-wrap/README.md +201 -0
  92. package/cli/node_modules/word-wrap/index.d.ts +50 -0
  93. package/cli/node_modules/word-wrap/index.js +61 -0
  94. package/cli/node_modules/word-wrap/package.json +77 -0
  95. package/cli/node_modules/wrappy/package.json +46 -16
  96. package/cli/node_modules/xmlcreate/package.json +87 -55
  97. package/cli/package-lock.json +842 -0
  98. package/cli/package.json +1 -1
  99. package/dist/light/protobuf.js +3 -2
  100. package/dist/light/protobuf.js.map +1 -1
  101. package/dist/light/protobuf.min.js +3 -3
  102. package/dist/light/protobuf.min.js.map +1 -1
  103. package/dist/minimal/protobuf.js +2 -2
  104. package/dist/minimal/protobuf.min.js +3 -3
  105. package/dist/minimal/protobuf.min.js.map +1 -1
  106. package/dist/protobuf.js +3 -2
  107. package/dist/protobuf.js.map +1 -1
  108. package/dist/protobuf.min.js +3 -3
  109. package/dist/protobuf.min.js.map +1 -1
  110. package/package.json +1 -1
  111. package/src/type.js +1 -0
  112. package/cli/node_modules/rimraf/CHANGELOG.md +0 -65
  113. package/cli/node_modules/rimraf/LICENSE +0 -15
  114. package/cli/node_modules/rimraf/README.md +0 -101
  115. package/cli/node_modules/rimraf/bin.js +0 -68
  116. package/cli/node_modules/rimraf/package.json +0 -32
  117. package/cli/node_modules/rimraf/rimraf.js +0 -360
  118. package/cli/node_modules/tmp/CHANGELOG.md +0 -288
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "protobufjs",
3
- "version": "6.11.4",
3
+ "version": "6.11.6",
4
4
  "versionScheme": "~",
5
5
  "description": "Protocol Buffers for JavaScript (& TypeScript).",
6
6
  "author": "Daniel Wirtz <dcode+protobufjs@dcode.io>",
package/src/type.js CHANGED
@@ -29,6 +29,7 @@ var Enum = require("./enum"),
29
29
  * @param {Object.<string,*>} [options] Declared options
30
30
  */
31
31
  function Type(name, options) {
32
+ name = name.replace(/\W/g, "");
32
33
  Namespace.call(this, name, options);
33
34
 
34
35
  /**
@@ -1,65 +0,0 @@
1
- # v3.0
2
-
3
- - Add `--preserve-root` option to executable (default true)
4
- - Drop support for Node.js below version 6
5
-
6
- # v2.7
7
-
8
- - Make `glob` an optional dependency
9
-
10
- # 2.6
11
-
12
- - Retry on EBUSY on non-windows platforms as well
13
- - Make `rimraf.sync` 10000% more reliable on Windows
14
-
15
- # 2.5
16
-
17
- - Handle Windows EPERM when lstat-ing read-only dirs
18
- - Add glob option to pass options to glob
19
-
20
- # 2.4
21
-
22
- - Add EPERM to delay/retry loop
23
- - Add `disableGlob` option
24
-
25
- # 2.3
26
-
27
- - Make maxBusyTries and emfileWait configurable
28
- - Handle weird SunOS unlink-dir issue
29
- - Glob the CLI arg for better Windows support
30
-
31
- # 2.2
32
-
33
- - Handle ENOENT properly on Windows
34
- - Allow overriding fs methods
35
- - Treat EPERM as indicative of non-empty dir
36
- - Remove optional graceful-fs dep
37
- - Consistently return null error instead of undefined on success
38
- - win32: Treat ENOTEMPTY the same as EBUSY
39
- - Add `rimraf` binary
40
-
41
- # 2.1
42
-
43
- - Fix SunOS error code for a non-empty directory
44
- - Try rmdir before readdir
45
- - Treat EISDIR like EPERM
46
- - Remove chmod
47
- - Remove lstat polyfill, node 0.7 is not supported
48
-
49
- # 2.0
50
-
51
- - Fix myGid call to check process.getgid
52
- - Simplify the EBUSY backoff logic.
53
- - Use fs.lstat in node >= 0.7.9
54
- - Remove gently option
55
- - remove fiber implementation
56
- - Delete files that are marked read-only
57
-
58
- # 1.0
59
-
60
- - Allow ENOENT in sync method
61
- - Throw when no callback is provided
62
- - Make opts.gently an absolute path
63
- - use 'stat' if 'lstat' is not available
64
- - Consistent error naming, and rethrow non-ENOENT stat errors
65
- - add fiber implementation
@@ -1,15 +0,0 @@
1
- The ISC License
2
-
3
- Copyright (c) Isaac Z. Schlueter and Contributors
4
-
5
- Permission to use, copy, modify, and/or distribute this software for any
6
- purpose with or without fee is hereby granted, provided that the above
7
- copyright notice and this permission notice appear in all copies.
8
-
9
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
15
- IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -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