@pnpm/exe 11.0.0-beta.2 → 11.0.0-beta.4

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 (81) hide show
  1. package/dist/node_modules/@gar/promise-retry/LICENSE +1 -0
  2. package/dist/node_modules/@gar/promise-retry/lib/index.js +43 -9
  3. package/dist/node_modules/@gar/promise-retry/lib/retry.js +109 -0
  4. package/dist/node_modules/@gar/promise-retry/package.json +1 -4
  5. package/dist/node_modules/@npmcli/redact/LICENSE +21 -0
  6. package/dist/node_modules/@npmcli/redact/lib/deep-map.js +71 -0
  7. package/dist/node_modules/@npmcli/redact/lib/error.js +28 -0
  8. package/dist/node_modules/@npmcli/redact/lib/index.js +44 -0
  9. package/dist/node_modules/@npmcli/redact/lib/matchers.js +88 -0
  10. package/dist/node_modules/@npmcli/redact/lib/server.js +59 -0
  11. package/dist/node_modules/@npmcli/redact/lib/utils.js +202 -0
  12. package/dist/node_modules/{unique-slug → @npmcli/redact}/package.json +21 -18
  13. package/dist/node_modules/brace-expansion/dist/commonjs/index.js +3 -1
  14. package/dist/node_modules/brace-expansion/dist/esm/index.js +3 -1
  15. package/dist/node_modules/brace-expansion/package.json +1 -1
  16. package/dist/node_modules/cacache/lib/content/write.js +2 -2
  17. package/dist/node_modules/cacache/lib/entry-index.js +2 -2
  18. package/dist/node_modules/cacache/lib/util/tmp.js +6 -0
  19. package/dist/node_modules/cacache/package.json +4 -5
  20. package/dist/node_modules/make-fetch-happen/lib/remote.js +4 -2
  21. package/dist/node_modules/make-fetch-happen/package.json +2 -1
  22. package/dist/node_modules/minipass-flush/package.json +6 -3
  23. package/dist/node_modules/picomatch/lib/constants.js +4 -0
  24. package/dist/node_modules/picomatch/lib/parse.js +301 -0
  25. package/dist/node_modules/picomatch/lib/picomatch.js +11 -3
  26. package/dist/node_modules/picomatch/package.json +2 -3
  27. package/dist/node_modules/tar/dist/commonjs/create.js +3 -4
  28. package/dist/node_modules/tar/dist/commonjs/get-write-flag.js +7 -4
  29. package/dist/node_modules/tar/dist/commonjs/header.js +14 -27
  30. package/dist/node_modules/tar/dist/commonjs/index.min.js +3 -3
  31. package/dist/node_modules/tar/dist/commonjs/list.js +2 -7
  32. package/dist/node_modules/tar/dist/commonjs/make-command.js +3 -12
  33. package/dist/node_modules/tar/dist/commonjs/mkdir.js +5 -6
  34. package/dist/node_modules/tar/dist/commonjs/normalize-windows-path.js +1 -1
  35. package/dist/node_modules/tar/dist/commonjs/pack.js +3 -8
  36. package/dist/node_modules/tar/dist/commonjs/parse.js +12 -22
  37. package/dist/node_modules/tar/dist/commonjs/path-reservations.js +2 -2
  38. package/dist/node_modules/tar/dist/commonjs/read-entry.js +2 -6
  39. package/dist/node_modules/tar/dist/commonjs/replace.js +5 -10
  40. package/dist/node_modules/tar/dist/commonjs/unpack.js +38 -63
  41. package/dist/node_modules/tar/dist/commonjs/winchars.js +1 -1
  42. package/dist/node_modules/tar/dist/commonjs/write-entry.js +12 -13
  43. package/dist/node_modules/tar/dist/esm/create.js +3 -4
  44. package/dist/node_modules/tar/dist/esm/get-write-flag.js +7 -4
  45. package/dist/node_modules/tar/dist/esm/header.js +14 -27
  46. package/dist/node_modules/tar/dist/esm/index.min.js +3 -3
  47. package/dist/node_modules/tar/dist/esm/list.js +2 -7
  48. package/dist/node_modules/tar/dist/esm/make-command.js +3 -12
  49. package/dist/node_modules/tar/dist/esm/mkdir.js +5 -6
  50. package/dist/node_modules/tar/dist/esm/normalize-windows-path.js +1 -1
  51. package/dist/node_modules/tar/dist/esm/pack.js +4 -9
  52. package/dist/node_modules/tar/dist/esm/parse.js +13 -23
  53. package/dist/node_modules/tar/dist/esm/path-reservations.js +2 -2
  54. package/dist/node_modules/tar/dist/esm/read-entry.js +2 -6
  55. package/dist/node_modules/tar/dist/esm/replace.js +6 -11
  56. package/dist/node_modules/tar/dist/esm/unpack.js +38 -63
  57. package/dist/node_modules/tar/dist/esm/winchars.js +1 -1
  58. package/dist/node_modules/tar/dist/esm/write-entry.js +14 -15
  59. package/dist/node_modules/tar/package.json +9 -4
  60. package/dist/pnpm.mjs +147455 -129305
  61. package/dist/worker.js +173 -62
  62. package/package.json +12 -9
  63. package/pn +1 -0
  64. package/pnpx +1 -0
  65. package/pnx +1 -0
  66. package/prepare.js +12 -3
  67. package/setup.js +28 -1
  68. package/dist/node_modules/imurmurhash/imurmurhash.js +0 -138
  69. package/dist/node_modules/imurmurhash/imurmurhash.min.js +0 -12
  70. package/dist/node_modules/imurmurhash/package.json +0 -40
  71. package/dist/node_modules/minipass-flush/LICENSE +0 -15
  72. package/dist/node_modules/retry/License +0 -21
  73. package/dist/node_modules/retry/index.js +0 -1
  74. package/dist/node_modules/retry/lib/retry.js +0 -100
  75. package/dist/node_modules/retry/lib/retry_operation.js +0 -162
  76. package/dist/node_modules/retry/package.json +0 -36
  77. package/dist/node_modules/unique-filename/LICENSE +0 -5
  78. package/dist/node_modules/unique-filename/lib/index.js +0 -7
  79. package/dist/node_modules/unique-filename/package.json +0 -53
  80. package/dist/node_modules/unique-slug/LICENSE +0 -15
  81. package/dist/node_modules/unique-slug/lib/index.js +0 -11
@@ -0,0 +1,202 @@
1
+ const {
2
+ URL_MATCHER,
3
+ TYPE_URL,
4
+ TYPE_REGEX,
5
+ TYPE_PATH,
6
+ } = require('./matchers')
7
+
8
+ /**
9
+ * creates a string of asterisks,
10
+ * this forces a minimum asterisk for security purposes
11
+ */
12
+ const asterisk = (length = 0) => {
13
+ length = typeof length === 'string' ? length.length : length
14
+ if (length < 8) {
15
+ return '*'.repeat(8)
16
+ }
17
+ return '*'.repeat(length)
18
+ }
19
+
20
+ /**
21
+ * escapes all special regex chars
22
+ * @see https://stackoverflow.com/a/9310752
23
+ * @see https://github.com/tc39/proposal-regex-escaping
24
+ */
25
+ const escapeRegExp = (text) => {
26
+ return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, `\\$&`)
27
+ }
28
+
29
+ /**
30
+ * provieds a regex "or" of the url versions of a string
31
+ */
32
+ const urlEncodeRegexGroup = (value) => {
33
+ const decoded = decodeURIComponent(value)
34
+ const encoded = encodeURIComponent(value)
35
+ const union = [...new Set([encoded, decoded, value])].map(escapeRegExp).join('|')
36
+ return union
37
+ }
38
+
39
+ /**
40
+ * a tagged template literal that returns a regex ensures all variables are excaped
41
+ */
42
+ const urlEncodeRegexTag = (strings, ...values) => {
43
+ let pattern = ''
44
+ for (let i = 0; i < values.length; i++) {
45
+ pattern += strings[i] + `(${urlEncodeRegexGroup(values[i])})`
46
+ }
47
+ pattern += strings[strings.length - 1]
48
+ return new RegExp(pattern)
49
+ }
50
+
51
+ /**
52
+ * creates a matcher for redacting url hostname
53
+ */
54
+ const redactUrlHostnameMatcher = ({ hostname, replacement } = {}) => ({
55
+ type: TYPE_URL,
56
+ predicate: ({ url }) => url.hostname === hostname,
57
+ pattern: ({ url }) => {
58
+ return urlEncodeRegexTag`(^${url.protocol}//${url.username}:.+@)?${url.hostname}`
59
+ },
60
+ replacement: `$1${replacement || asterisk()}`,
61
+ })
62
+
63
+ /**
64
+ * creates a matcher for redacting url search / query parameter values
65
+ */
66
+ const redactUrlSearchParamsMatcher = ({ param, replacement } = {}) => ({
67
+ type: TYPE_URL,
68
+ predicate: ({ url }) => url.searchParams.has(param),
69
+ pattern: ({ url }) => urlEncodeRegexTag`(${param}=)${url.searchParams.get(param)}`,
70
+ replacement: `$1${replacement || asterisk()}`,
71
+ })
72
+
73
+ /** creates a matcher for redacting the url password */
74
+ const redactUrlPasswordMatcher = ({ replacement } = {}) => ({
75
+ type: TYPE_URL,
76
+ predicate: ({ url }) => url.password,
77
+ pattern: ({ url }) => urlEncodeRegexTag`(^${url.protocol}//${url.username}:)${url.password}`,
78
+ replacement: `$1${replacement || asterisk()}`,
79
+ })
80
+
81
+ const redactUrlReplacement = (...matchers) => (subValue) => {
82
+ try {
83
+ const url = new URL(subValue)
84
+ return redactMatchers(...matchers)(subValue, { url })
85
+ } catch (err) {
86
+ return subValue
87
+ }
88
+ }
89
+
90
+ /**
91
+ * creates a matcher / submatcher for urls, this function allows you to first
92
+ * collect all urls within a larger string and then pass those urls to a
93
+ * submatcher
94
+ *
95
+ * @example
96
+ * console.log("this will first match all urls, then pass those urls to the password patcher")
97
+ * redactMatchers(redactUrlMatcher(redactUrlPasswordMatcher()))
98
+ *
99
+ * @example
100
+ * console.log(
101
+ * "this will assume you are passing in a string that is a url, and will redact the password"
102
+ * )
103
+ * redactMatchers(redactUrlPasswordMatcher())
104
+ *
105
+ */
106
+ const redactUrlMatcher = (...matchers) => {
107
+ return {
108
+ ...URL_MATCHER,
109
+ replacement: redactUrlReplacement(...matchers),
110
+ }
111
+ }
112
+
113
+ const matcherFunctions = {
114
+ [TYPE_REGEX]: (matcher) => (value) => {
115
+ if (typeof value === 'string') {
116
+ value = value.replace(matcher.pattern, matcher.replacement)
117
+ }
118
+ return value
119
+ },
120
+ [TYPE_URL]: (matcher) => (value, ctx) => {
121
+ if (typeof value === 'string') {
122
+ try {
123
+ const url = ctx?.url || new URL(value)
124
+ const { predicate, pattern } = matcher
125
+ const predicateValue = predicate({ url })
126
+ if (predicateValue) {
127
+ value = value.replace(pattern({ url }), matcher.replacement)
128
+ }
129
+ } catch (_e) {
130
+ return value
131
+ }
132
+ }
133
+ return value
134
+ },
135
+ [TYPE_PATH]: (matcher) => (value, ctx) => {
136
+ const rawPath = ctx?.path
137
+ const path = rawPath.join('.').toLowerCase()
138
+ const { predicate, replacement } = matcher
139
+ const replace = typeof replacement === 'function' ? replacement : () => replacement
140
+ const shouldRun = predicate({ rawPath, path })
141
+ if (shouldRun) {
142
+ value = replace(value, { rawPath, path })
143
+ }
144
+ return value
145
+ },
146
+ }
147
+
148
+ /** converts a matcher to a function */
149
+ const redactMatcher = (matcher) => {
150
+ return matcherFunctions[matcher.type](matcher)
151
+ }
152
+
153
+ /** converts a series of matchers to a function */
154
+ const redactMatchers = (...matchers) => (value, ctx) => {
155
+ const flatMatchers = matchers.flat()
156
+ return flatMatchers.reduce((result, matcher) => {
157
+ const fn = (typeof matcher === 'function') ? matcher : redactMatcher(matcher)
158
+ return fn(result, ctx)
159
+ }, value)
160
+ }
161
+
162
+ /**
163
+ * replacement handler, keeping $1 (if it exists) and replacing the
164
+ * rest of the string with asterisks, maintaining string length
165
+ */
166
+ const redactDynamicReplacement = () => (value, start) => {
167
+ if (typeof start === 'number') {
168
+ return asterisk(value)
169
+ }
170
+ return start + asterisk(value.substring(start.length).length)
171
+ }
172
+
173
+ /**
174
+ * replacement handler, keeping $1 (if it exists) and replacing the
175
+ * rest of the string with a fixed number of asterisks
176
+ */
177
+ const redactFixedReplacement = (length) => (_value, start) => {
178
+ if (typeof start === 'number') {
179
+ return asterisk(length)
180
+ }
181
+ return start + asterisk(length)
182
+ }
183
+
184
+ const redactUrlPassword = (value, replacement) => {
185
+ return redactMatchers(redactUrlPasswordMatcher({ replacement }))(value)
186
+ }
187
+
188
+ module.exports = {
189
+ asterisk,
190
+ escapeRegExp,
191
+ urlEncodeRegexGroup,
192
+ urlEncodeRegexTag,
193
+ redactUrlHostnameMatcher,
194
+ redactUrlSearchParamsMatcher,
195
+ redactUrlPasswordMatcher,
196
+ redactUrlMatcher,
197
+ redactUrlReplacement,
198
+ redactDynamicReplacement,
199
+ redactFixedReplacement,
200
+ redactMatchers,
201
+ redactUrlPassword,
202
+ }
@@ -1,8 +1,13 @@
1
1
  {
2
- "name": "unique-slug",
3
- "version": "6.0.0",
4
- "description": "Generate a unique character string suitible for use in files and URLs.",
2
+ "name": "@npmcli/redact",
3
+ "version": "4.0.0",
4
+ "description": "Redact sensitive npm information from output",
5
5
  "main": "lib/index.js",
6
+ "exports": {
7
+ ".": "./lib/index.js",
8
+ "./server": "./lib/server.js",
9
+ "./package.json": "./package.json"
10
+ },
6
11
  "scripts": {
7
12
  "test": "tap",
8
13
  "lint": "npm run eslint",
@@ -16,24 +21,13 @@
16
21
  "keywords": [],
17
22
  "author": "GitHub Inc.",
18
23
  "license": "ISC",
19
- "devDependencies": {
20
- "@npmcli/eslint-config": "^5.0.0",
21
- "@npmcli/template-oss": "4.27.1",
22
- "tap": "^16.3.0"
23
- },
24
- "repository": {
25
- "type": "git",
26
- "url": "git+https://github.com/npm/unique-slug.git"
27
- },
28
- "dependencies": {
29
- "imurmurhash": "^0.1.4"
30
- },
31
24
  "files": [
32
25
  "bin/",
33
26
  "lib/"
34
27
  ],
35
- "engines": {
36
- "node": "^20.17.0 || >=22.9.0"
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+https://github.com/npm/redact.git"
37
31
  },
38
32
  "templateOSS": {
39
33
  "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
@@ -44,6 +38,15 @@
44
38
  "nyc-arg": [
45
39
  "--exclude",
46
40
  "tap-snapshots/**"
47
- ]
41
+ ],
42
+ "timeout": 120
43
+ },
44
+ "devDependencies": {
45
+ "@npmcli/eslint-config": "^5.0.0",
46
+ "@npmcli/template-oss": "4.27.1",
47
+ "tap": "^16.3.10"
48
+ },
49
+ "engines": {
50
+ "node": "^20.17.0 || >=22.9.0"
48
51
  }
49
52
  }
@@ -144,7 +144,9 @@ function expand_(str, max, isTop) {
144
144
  const x = numeric(n[0]);
145
145
  const y = numeric(n[1]);
146
146
  const width = Math.max(n[0].length, n[1].length);
147
- let incr = n.length === 3 && n[2] !== undefined ? Math.abs(numeric(n[2])) : 1;
147
+ let incr = n.length === 3 && n[2] !== undefined ?
148
+ Math.max(Math.abs(numeric(n[2])), 1)
149
+ : 1;
148
150
  let test = lte;
149
151
  const reverse = y < x;
150
152
  if (reverse) {
@@ -140,7 +140,9 @@ function expand_(str, max, isTop) {
140
140
  const x = numeric(n[0]);
141
141
  const y = numeric(n[1]);
142
142
  const width = Math.max(n[0].length, n[1].length);
143
- let incr = n.length === 3 && n[2] !== undefined ? Math.abs(numeric(n[2])) : 1;
143
+ let incr = n.length === 3 && n[2] !== undefined ?
144
+ Math.max(Math.abs(numeric(n[2])), 1)
145
+ : 1;
144
146
  let test = lte;
145
147
  const reverse = y < x;
146
148
  if (reverse) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "brace-expansion",
3
3
  "description": "Brace expansion as known from sh/bash",
4
- "version": "5.0.4",
4
+ "version": "5.0.5",
5
5
  "files": [
6
6
  "dist"
7
7
  ],
@@ -10,7 +10,7 @@ const Pipeline = require('minipass-pipeline')
10
10
  const Flush = require('minipass-flush')
11
11
  const path = require('path')
12
12
  const ssri = require('ssri')
13
- const uniqueFilename = require('unique-filename')
13
+ const { tmpName } = require('../util/tmp')
14
14
  const fsm = require('fs-minipass')
15
15
 
16
16
  module.exports = write
@@ -152,7 +152,7 @@ async function pipeToTmp (inputStream, cache, tmpTarget, opts) {
152
152
  }
153
153
 
154
154
  async function makeTmp (cache, opts) {
155
- const tmpTarget = uniqueFilename(path.join(cache, 'tmp'), opts.tmpPrefix)
155
+ const tmpTarget = tmpName(cache, opts.tmpPrefix)
156
156
  await fs.mkdir(path.dirname(tmpTarget), { recursive: true })
157
157
  return {
158
158
  target: tmpTarget,
@@ -12,7 +12,7 @@ const {
12
12
  const { Minipass } = require('minipass')
13
13
  const path = require('path')
14
14
  const ssri = require('ssri')
15
- const uniqueFilename = require('unique-filename')
15
+ const { tmpName } = require('./util/tmp')
16
16
 
17
17
  const contentPath = require('./content/path')
18
18
  const hashToSegments = require('./util/hash-to-segments')
@@ -69,7 +69,7 @@ async function compact (cache, key, matchFn, opts = {}) {
69
69
  }).join('\n')
70
70
 
71
71
  const setup = async () => {
72
- const target = uniqueFilename(path.join(cache, 'tmp'), opts.tmpPrefix)
72
+ const target = tmpName(cache, opts.tmpPrefix)
73
73
  await mkdir(path.dirname(target), { recursive: true })
74
74
  return {
75
75
  target,
@@ -1,11 +1,17 @@
1
1
  'use strict'
2
2
 
3
+ const crypto = require('crypto')
3
4
  const { withTempDir } = require('@npmcli/fs')
4
5
  const fs = require('fs/promises')
5
6
  const path = require('path')
6
7
 
7
8
  module.exports.mkdir = mktmpdir
8
9
 
10
+ module.exports.tmpName = function tmpName (cache, tmpPrefix) {
11
+ const id = crypto.randomUUID()
12
+ return path.join(cache, 'tmp', tmpPrefix ? `${tmpPrefix}-${id}` : id)
13
+ }
14
+
9
15
  async function mktmpdir (cache, opts = {}) {
10
16
  const { tmpPrefix } = opts
11
17
  const tmpDir = path.join(cache, 'tmp')
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cacache",
3
- "version": "20.0.3",
3
+ "version": "20.0.4",
4
4
  "cache-version": {
5
5
  "content": "2",
6
6
  "index": "5"
@@ -55,12 +55,11 @@
55
55
  "minipass-flush": "^1.0.5",
56
56
  "minipass-pipeline": "^1.2.4",
57
57
  "p-map": "^7.0.2",
58
- "ssri": "^13.0.0",
59
- "unique-filename": "^5.0.0"
58
+ "ssri": "^13.0.0"
60
59
  },
61
60
  "devDependencies": {
62
61
  "@npmcli/eslint-config": "^6.0.1",
63
- "@npmcli/template-oss": "4.28.0",
62
+ "@npmcli/template-oss": "4.29.0",
64
63
  "tap": "^16.0.0"
65
64
  },
66
65
  "engines": {
@@ -69,7 +68,7 @@
69
68
  "templateOSS": {
70
69
  "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
71
70
  "windowsCI": false,
72
- "version": "4.28.0",
71
+ "version": "4.29.0",
73
72
  "publish": "true"
74
73
  },
75
74
  "author": "GitHub Inc.",
@@ -3,6 +3,7 @@ const fetch = require('minipass-fetch')
3
3
  const { promiseRetry } = require('@gar/promise-retry')
4
4
  const ssri = require('ssri')
5
5
  const { log } = require('proc-log')
6
+ const { redact: cleanUrl } = require('@npmcli/redact')
6
7
 
7
8
  const CachingMinipassPipeline = require('./pipeline.js')
8
9
  const { getAgent } = require('@npmcli/agent')
@@ -55,6 +56,7 @@ const remoteFetch = (request, options) => {
55
56
 
56
57
  return promiseRetry(async (retryHandler, attemptNum) => {
57
58
  const req = new fetch.Request(request, _opts)
59
+ const url = cleanUrl(req.url)
58
60
  try {
59
61
  let res = await fetch(req, _opts)
60
62
  if (_opts.integrity && res.status === 200) {
@@ -92,7 +94,7 @@ const remoteFetch = (request, options) => {
92
94
  }
93
95
 
94
96
  /* eslint-disable-next-line max-len */
95
- log.http('fetch', `${req.method} ${req.url} attempt ${attemptNum} failed with ${res.status}`)
97
+ log.http('fetch', `${req.method} ${url} attempt ${attemptNum} failed with ${res.status}`)
96
98
  return retryHandler(res)
97
99
  }
98
100
 
@@ -116,7 +118,7 @@ const remoteFetch = (request, options) => {
116
118
  options.onRetry(err)
117
119
  }
118
120
 
119
- log.http('fetch', `${req.method} ${req.url} attempt ${attemptNum} failed with ${err.code}`)
121
+ log.http('fetch', `${req.method} ${url} attempt ${attemptNum} failed with ${err.code}`)
120
122
  return retryHandler(err)
121
123
  }
122
124
  }, options.retry).catch((err) => {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "make-fetch-happen",
3
- "version": "15.0.4",
3
+ "version": "15.0.5",
4
4
  "description": "Opinionated, caching, retrying fetch client",
5
5
  "main": "lib/index.js",
6
6
  "files": [
@@ -35,6 +35,7 @@
35
35
  "dependencies": {
36
36
  "@gar/promise-retry": "^1.0.0",
37
37
  "@npmcli/agent": "^4.0.0",
38
+ "@npmcli/redact": "^4.0.0",
38
39
  "cacache": "^20.0.1",
39
40
  "http-cache-semantics": "^4.1.1",
40
41
  "minipass": "^7.0.2",
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "name": "minipass-flush",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
+ "publishConfig": {
5
+ "tag": "v1-legacy"
6
+ },
4
7
  "description": "A Minipass stream that calls a flush function before emitting 'end'",
5
8
  "author": "Isaac Z. Schlueter <i@izs.me> (https://izs.me)",
6
- "license": "ISC",
9
+ "license": "BlueOak-1.0.0",
7
10
  "scripts": {
8
11
  "test": "tap",
9
12
  "snap": "tap",
@@ -15,7 +18,7 @@
15
18
  "check-coverage": true
16
19
  },
17
20
  "devDependencies": {
18
- "tap": "^14.6.9"
21
+ "tap": "^15.1.6"
19
22
  },
20
23
  "dependencies": {
21
24
  "minipass": "^3.0.0"
@@ -3,6 +3,8 @@
3
3
  const WIN_SLASH = '\\\\/';
4
4
  const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
5
5
 
6
+ const DEFAULT_MAX_EXTGLOB_RECURSION = 0;
7
+
6
8
  /**
7
9
  * Posix glob regex
8
10
  */
@@ -69,6 +71,7 @@ const WINDOWS_CHARS = {
69
71
  */
70
72
 
71
73
  const POSIX_REGEX_SOURCE = {
74
+ __proto__: null,
72
75
  alnum: 'a-zA-Z0-9',
73
76
  alpha: 'a-zA-Z',
74
77
  ascii: '\\x00-\\x7F',
@@ -86,6 +89,7 @@ const POSIX_REGEX_SOURCE = {
86
89
  };
87
90
 
88
91
  module.exports = {
92
+ DEFAULT_MAX_EXTGLOB_RECURSION,
89
93
  MAX_LENGTH: 1024 * 64,
90
94
  POSIX_REGEX_SOURCE,
91
95