nitro-nightly 4.0.0-20251010-091516-7cafddba → 4.0.0-20251030-091344-d4418b98

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 (195) hide show
  1. package/dist/{_chunks/build2.mjs → _build/build.mjs} +108 -58
  2. package/dist/_build/build2.mjs +556 -0
  3. package/dist/_build/info.mjs +1002 -0
  4. package/dist/_build/prepare.mjs +1511 -0
  5. package/dist/_build/snapshot.mjs +185 -0
  6. package/dist/{_chunks/plugin.mjs → _build/vite.mjs} +295 -296
  7. package/dist/_build/vite2.mjs +149 -0
  8. package/dist/_chunks/_deps/@jridgewell/gen-mapping.mjs +189 -0
  9. package/dist/_chunks/_deps/@jridgewell/remapping.mjs +137 -0
  10. package/dist/_chunks/_deps/@jridgewell/resolve-uri.mjs +231 -0
  11. package/dist/_chunks/_deps/@jridgewell/sourcemap-codec.mjs +173 -0
  12. package/dist/_chunks/_deps/@jridgewell/trace-mapping.mjs +170 -0
  13. package/dist/_chunks/_deps/@pi0/vite-plugin-fullstack.mjs +575 -0
  14. package/dist/_chunks/_deps/@rollup/plugin-alias.mjs +89 -0
  15. package/dist/_chunks/_deps/@rollup/plugin-commonjs.mjs +2376 -0
  16. package/dist/_chunks/{index2.mjs → _deps/@rollup/plugin-inject.mjs} +5 -90
  17. package/dist/_chunks/_deps/@rollup/plugin-json.mjs +37 -0
  18. package/dist/_chunks/_deps/@rollup/plugin-node-resolve.mjs +1386 -0
  19. package/dist/_chunks/_deps/@rollup/plugin-replace.mjs +133 -0
  20. package/dist/_chunks/_deps/@rollup/pluginutils.mjs +346 -0
  21. package/dist/_chunks/_deps/acorn.mjs +6225 -0
  22. package/dist/_chunks/_deps/c12.mjs +510 -0
  23. package/dist/_chunks/_deps/chokidar.mjs +1428 -0
  24. package/dist/_chunks/_deps/citty.mjs +460 -0
  25. package/dist/_chunks/_deps/commondir.mjs +77 -0
  26. package/dist/_chunks/_deps/compatx.mjs +76 -0
  27. package/dist/_chunks/_deps/confbox.mjs +300 -0
  28. package/dist/_chunks/_deps/debug.mjs +885 -0
  29. package/dist/_chunks/_deps/deepmerge.mjs +147 -0
  30. package/dist/_chunks/_deps/depd.mjs +550 -0
  31. package/dist/_chunks/_deps/dot-prop.mjs +282 -0
  32. package/dist/_chunks/_deps/dotenv.mjs +555 -0
  33. package/dist/_chunks/_deps/duplexer.mjs +1 -0
  34. package/dist/_chunks/_deps/ee-first.mjs +104 -0
  35. package/dist/_chunks/_deps/encodeurl.mjs +69 -0
  36. package/dist/_chunks/_deps/escape-html.mjs +87 -0
  37. package/dist/_chunks/_deps/escape-string-regexp.mjs +13 -0
  38. package/dist/_chunks/_deps/estree-walker.mjs +433 -0
  39. package/dist/_chunks/_deps/etag.mjs +147 -0
  40. package/dist/_chunks/_deps/exsolve.mjs +1416 -0
  41. package/dist/_chunks/_deps/fdir.mjs +569 -0
  42. package/dist/_chunks/_deps/fresh.mjs +145 -0
  43. package/dist/_chunks/_deps/function-bind.mjs +106 -0
  44. package/dist/_chunks/{index4.mjs → _deps/giget.mjs} +21 -776
  45. package/dist/_chunks/_deps/gzip-size.mjs +19 -0
  46. package/dist/_chunks/_deps/hasown.mjs +19 -0
  47. package/dist/_chunks/_deps/http-errors.mjs +307 -0
  48. package/dist/_chunks/_deps/httpxy.mjs +580 -0
  49. package/dist/_chunks/_deps/inherits.mjs +57 -0
  50. package/dist/_chunks/_deps/is-core-module.mjs +596 -0
  51. package/dist/_chunks/_deps/is-module.mjs +25 -0
  52. package/dist/_chunks/_deps/is-reference.mjs +31 -0
  53. package/dist/_chunks/_deps/js-tokens.mjs +411 -0
  54. package/dist/_chunks/_deps/klona.mjs +137 -0
  55. package/dist/_chunks/_deps/knitwork.mjs +172 -0
  56. package/dist/_chunks/_deps/local-pkg.mjs +163 -0
  57. package/dist/_chunks/_deps/magic-string.mjs +1296 -0
  58. package/dist/_chunks/_deps/mime-db.mjs +11685 -0
  59. package/dist/_chunks/_deps/mime-types.mjs +287 -0
  60. package/dist/_chunks/_deps/mime.mjs +1172 -0
  61. package/dist/_chunks/_deps/mlly.mjs +2413 -0
  62. package/dist/_chunks/_deps/ms.mjs +172 -0
  63. package/dist/_chunks/_deps/node-fetch-native.mjs +3 -0
  64. package/dist/_chunks/_deps/nypm.mjs +219 -0
  65. package/dist/_chunks/_deps/on-finished.mjs +246 -0
  66. package/dist/_chunks/_deps/parseurl.mjs +168 -0
  67. package/dist/_chunks/_deps/path-parse.mjs +85 -0
  68. package/dist/_chunks/{pathe.M-eThtNZ.mjs → _deps/pathe.mjs} +48 -1
  69. package/dist/_chunks/_deps/perfect-debounce.mjs +88 -0
  70. package/dist/_chunks/_deps/picomatch.mjs +2144 -0
  71. package/dist/_chunks/_deps/pkg-types.mjs +247 -0
  72. package/dist/_chunks/{snapshot.mjs → _deps/pretty-bytes.mjs} +1 -105
  73. package/dist/_chunks/_deps/quansync.mjs +99 -0
  74. package/dist/_chunks/_deps/range-parser.mjs +171 -0
  75. package/dist/_chunks/_deps/rc9.mjs +219 -0
  76. package/dist/_chunks/_deps/readdirp.mjs +245 -0
  77. package/dist/_chunks/_deps/resolve.mjs +1260 -0
  78. package/dist/_chunks/_deps/rou3.mjs +326 -0
  79. package/dist/_chunks/_deps/send.mjs +1022 -0
  80. package/dist/_chunks/_deps/serve-static.mjs +228 -0
  81. package/dist/_chunks/_deps/setprototypeof.mjs +26 -0
  82. package/dist/_chunks/_deps/statuses.mjs +457 -0
  83. package/dist/_chunks/_deps/std-env.mjs +3 -0
  84. package/dist/_chunks/_deps/strip-literal.mjs +67 -0
  85. package/dist/_chunks/_deps/supports-color.mjs +44 -0
  86. package/dist/_chunks/_deps/tinyexec.mjs +552 -0
  87. package/dist/_chunks/_deps/tinyglobby.mjs +293 -0
  88. package/dist/_chunks/_deps/toidentifier.mjs +41 -0
  89. package/dist/_chunks/_deps/ultrahtml.mjs +3 -0
  90. package/dist/_chunks/_deps/unimport.mjs +2267 -0
  91. package/dist/_chunks/_deps/unplugin-utils.mjs +65 -0
  92. package/dist/_chunks/_deps/unplugin.mjs +1294 -0
  93. package/dist/_chunks/_deps/untyped.mjs +375 -0
  94. package/dist/_chunks/{info.mjs → _deps/unwasm.mjs} +8 -4206
  95. package/dist/_chunks/_deps/webpack-virtual-modules.mjs +360 -0
  96. package/dist/_chunks/_presets/_all.mjs +59 -0
  97. package/dist/_chunks/_presets/_nitro.mjs +74 -0
  98. package/dist/_chunks/_presets/_resolve.mjs +64 -0
  99. package/dist/_chunks/_presets/_static.mjs +69 -0
  100. package/dist/_chunks/_presets/_types.mjs +3 -0
  101. package/dist/_chunks/_presets/_utils.mjs +31 -0
  102. package/dist/_chunks/_presets/alwaysdata.mjs +17 -0
  103. package/dist/_chunks/_presets/aws-amplify.mjs +111 -0
  104. package/dist/_chunks/_presets/aws-lambda.mjs +23 -0
  105. package/dist/_chunks/_presets/azure.mjs +162 -0
  106. package/dist/_chunks/_presets/bun.mjs +19 -0
  107. package/dist/_chunks/_presets/cleavr.mjs +15 -0
  108. package/dist/_chunks/_presets/cloudflare.mjs +608 -0
  109. package/dist/_chunks/_presets/deno.mjs +196 -0
  110. package/dist/_chunks/_presets/digitalocean.mjs +14 -0
  111. package/dist/_chunks/_presets/firebase.mjs +47 -0
  112. package/dist/_chunks/_presets/flightcontrol.mjs +14 -0
  113. package/dist/_chunks/_presets/genezio.mjs +13 -0
  114. package/dist/_chunks/_presets/heroku.mjs +14 -0
  115. package/dist/_chunks/_presets/iis.mjs +194 -0
  116. package/dist/_chunks/_presets/index.mjs +62 -0
  117. package/dist/_chunks/_presets/koyeb.mjs +14 -0
  118. package/dist/_chunks/_presets/netlify.mjs +241 -0
  119. package/dist/_chunks/_presets/node.mjs +54 -0
  120. package/dist/_chunks/_presets/platform.mjs +14 -0
  121. package/dist/_chunks/_presets/render.mjs +14 -0
  122. package/dist/_chunks/_presets/standard.mjs +23 -0
  123. package/dist/_chunks/_presets/stormkit.mjs +18 -0
  124. package/dist/_chunks/_presets/vercel.mjs +375 -0
  125. package/dist/_chunks/_presets/winterjs.mjs +22 -0
  126. package/dist/_chunks/_presets/zeabur.mjs +69 -0
  127. package/dist/_chunks/_presets/zerops.mjs +27 -0
  128. package/dist/_chunks/app.mjs +9 -19206
  129. package/dist/_chunks/{index3.mjs → builder.mjs} +560 -970
  130. package/dist/_chunks/server.mjs +6 -4
  131. package/dist/{cli → _cli}/build.mjs +3 -8
  132. package/dist/{cli → _cli}/dev.mjs +38 -12
  133. package/dist/{cli/index2.mjs → _cli/index.mjs} +1 -2
  134. package/dist/{cli → _cli}/list.mjs +3 -4
  135. package/dist/{cli → _cli}/prepare.mjs +3 -4
  136. package/dist/{cli → _cli}/run.mjs +3 -4
  137. package/dist/{index.d.mts → builder.d.mts} +11 -11
  138. package/dist/builder.mjs +117 -0
  139. package/dist/cli/index.mjs +7 -464
  140. package/dist/node_modules/@speed-highlight/core/dist/index.js +1 -1
  141. package/dist/node_modules/@speed-highlight/core/dist/terminal.js +1 -1
  142. package/dist/node_modules/@speed-highlight/core/package.json +7 -3
  143. package/dist/node_modules/cookie-es/dist/index.mjs +262 -0
  144. package/dist/node_modules/cookie-es/package.json +37 -0
  145. package/dist/node_modules/hookable/dist/index.mjs +243 -266
  146. package/dist/node_modules/hookable/package.json +29 -26
  147. package/dist/node_modules/rendu/dist/index.mjs +380 -0
  148. package/dist/node_modules/rendu/package.json +47 -0
  149. package/dist/presets/_nitro/runtime/nitro-dev.mjs +4 -7
  150. package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +5 -4
  151. package/dist/presets/azure/runtime/azure-swa.mjs +1 -1
  152. package/dist/presets/cloudflare/runtime/_module-handler.mjs +7 -6
  153. package/dist/presets/cloudflare/runtime/cloudflare-durable.mjs +4 -5
  154. package/dist/presets/cloudflare/runtime/plugin.dev.mjs +7 -10
  155. package/dist/presets/cloudflare/runtime/shims/workers.dev.d.mts +21 -0
  156. package/dist/presets/cloudflare/runtime/shims/workers.dev.mjs +27 -0
  157. package/dist/presets/node/runtime/node-server.mjs +1 -1
  158. package/dist/runtime/index.d.mts +1 -1
  159. package/dist/runtime/index.mjs +1 -1
  160. package/dist/runtime/internal/app.d.mts +3 -1
  161. package/dist/runtime/internal/app.mjs +90 -64
  162. package/dist/runtime/internal/error/prod.d.mts +3 -2
  163. package/dist/runtime/internal/error/prod.mjs +9 -13
  164. package/dist/runtime/internal/renderer.mjs +4 -4
  165. package/dist/runtime/internal/routes/dev-tasks.d.mts +30 -2
  166. package/dist/runtime/internal/shutdown.d.mts +1 -2
  167. package/dist/runtime/internal/shutdown.mjs +3 -2
  168. package/dist/runtime/internal/task.mjs +1 -2
  169. package/dist/types/index.d.mts +1603 -10
  170. package/dist/vite.d.mts +5 -0
  171. package/dist/vite.mjs +94 -30
  172. package/lib/index.mjs +1 -0
  173. package/lib/indexd.mts +1 -0
  174. package/lib/runtime/meta.mjs +35 -0
  175. package/package.json +40 -41
  176. package/dist/_chunks/build.mjs +0 -84
  177. package/dist/_chunks/build3.mjs +0 -6452
  178. package/dist/_chunks/detect-acorn.mjs +0 -503
  179. package/dist/_chunks/index.mjs +0 -22242
  180. package/dist/_chunks/json5.mjs +0 -68
  181. package/dist/_chunks/jsonc.mjs +0 -51
  182. package/dist/_chunks/toml.mjs +0 -259
  183. package/dist/_chunks/yaml.mjs +0 -86
  184. package/dist/index.mjs +0 -55
  185. package/dist/node_modules/klona/dist/index.mjs +0 -81
  186. package/dist/node_modules/klona/full/index.mjs +0 -53
  187. package/dist/node_modules/klona/package.json +0 -74
  188. package/dist/node_modules/std-env/dist/index.mjs +0 -1
  189. package/dist/node_modules/std-env/package.json +0 -46
  190. package/dist/presets.mjs +0 -2460
  191. package/dist/runtime/internal/debug.d.mts +0 -2
  192. package/dist/runtime/internal/debug.mjs +0 -5
  193. package/lib/runtime-meta.mjs +0 -38
  194. /package/dist/{cli → _cli}/common.mjs +0 -0
  195. /package/lib/{runtime-meta.d.mts → runtime/meta.d.mts} +0 -0
@@ -0,0 +1,219 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ import destr from 'destr';
5
+ import 'defu';
6
+
7
+ function isBuffer (obj) {
8
+ return obj &&
9
+ obj.constructor &&
10
+ (typeof obj.constructor.isBuffer === 'function') &&
11
+ obj.constructor.isBuffer(obj)
12
+ }
13
+
14
+ function keyIdentity (key) {
15
+ return key
16
+ }
17
+
18
+ function flatten (target, opts) {
19
+ opts = opts || {};
20
+
21
+ const delimiter = opts.delimiter || '.';
22
+ const maxDepth = opts.maxDepth;
23
+ const transformKey = opts.transformKey || keyIdentity;
24
+ const output = {};
25
+
26
+ function step (object, prev, currentDepth) {
27
+ currentDepth = currentDepth || 1;
28
+ Object.keys(object).forEach(function (key) {
29
+ const value = object[key];
30
+ const isarray = opts.safe && Array.isArray(value);
31
+ const type = Object.prototype.toString.call(value);
32
+ const isbuffer = isBuffer(value);
33
+ const isobject = (
34
+ type === '[object Object]' ||
35
+ type === '[object Array]'
36
+ );
37
+
38
+ const newKey = prev
39
+ ? prev + delimiter + transformKey(key)
40
+ : transformKey(key);
41
+
42
+ if (!isarray && !isbuffer && isobject && Object.keys(value).length &&
43
+ (!opts.maxDepth || currentDepth < maxDepth)) {
44
+ return step(value, newKey, currentDepth + 1)
45
+ }
46
+
47
+ output[newKey] = value;
48
+ });
49
+ }
50
+
51
+ step(target);
52
+
53
+ return output
54
+ }
55
+
56
+ function unflatten (target, opts) {
57
+ opts = opts || {};
58
+
59
+ const delimiter = opts.delimiter || '.';
60
+ const overwrite = opts.overwrite || false;
61
+ const transformKey = opts.transformKey || keyIdentity;
62
+ const result = {};
63
+
64
+ const isbuffer = isBuffer(target);
65
+ if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') {
66
+ return target
67
+ }
68
+
69
+ // safely ensure that the key is
70
+ // an integer.
71
+ function getkey (key) {
72
+ const parsedKey = Number(key);
73
+
74
+ return (
75
+ isNaN(parsedKey) ||
76
+ key.indexOf('.') !== -1 ||
77
+ opts.object
78
+ )
79
+ ? key
80
+ : parsedKey
81
+ }
82
+
83
+ function addKeys (keyPrefix, recipient, target) {
84
+ return Object.keys(target).reduce(function (result, key) {
85
+ result[keyPrefix + delimiter + key] = target[key];
86
+
87
+ return result
88
+ }, recipient)
89
+ }
90
+
91
+ function isEmpty (val) {
92
+ const type = Object.prototype.toString.call(val);
93
+ const isArray = type === '[object Array]';
94
+ const isObject = type === '[object Object]';
95
+
96
+ if (!val) {
97
+ return true
98
+ } else if (isArray) {
99
+ return !val.length
100
+ } else if (isObject) {
101
+ return !Object.keys(val).length
102
+ }
103
+ }
104
+
105
+ target = Object.keys(target).reduce(function (result, key) {
106
+ const type = Object.prototype.toString.call(target[key]);
107
+ const isObject = (type === '[object Object]' || type === '[object Array]');
108
+ if (!isObject || isEmpty(target[key])) {
109
+ result[key] = target[key];
110
+ return result
111
+ } else {
112
+ return addKeys(
113
+ key,
114
+ result,
115
+ flatten(target[key], opts)
116
+ )
117
+ }
118
+ }, {});
119
+
120
+ Object.keys(target).forEach(function (key) {
121
+ const split = key.split(delimiter).map(transformKey);
122
+ let key1 = getkey(split.shift());
123
+ let key2 = getkey(split[0]);
124
+ let recipient = result;
125
+
126
+ while (key2 !== undefined) {
127
+ if (key1 === '__proto__') {
128
+ return
129
+ }
130
+
131
+ const type = Object.prototype.toString.call(recipient[key1]);
132
+ const isobject = (
133
+ type === '[object Object]' ||
134
+ type === '[object Array]'
135
+ );
136
+
137
+ // do not write over falsey, non-undefined values if overwrite is false
138
+ if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') {
139
+ return
140
+ }
141
+
142
+ if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) {
143
+ recipient[key1] = (
144
+ typeof key2 === 'number' &&
145
+ !opts.object
146
+ ? []
147
+ : {}
148
+ );
149
+ }
150
+
151
+ recipient = recipient[key1];
152
+ if (split.length > 0) {
153
+ key1 = getkey(split.shift());
154
+ key2 = getkey(split[0]);
155
+ }
156
+ }
157
+
158
+ // unflatten again for 'messy objects'
159
+ recipient[key1] = unflatten(target[key], opts);
160
+ });
161
+
162
+ return result
163
+ }
164
+
165
+ const RE_KEY_VAL = /^\s*([^\s=]+)\s*=\s*(.*)?\s*$/;
166
+ const RE_LINES = /\n|\r|\r\n/;
167
+ const defaults = {
168
+ name: ".conf",
169
+ dir: process.cwd(),
170
+ flat: false
171
+ };
172
+ function withDefaults(options) {
173
+ if (typeof options === "string") {
174
+ options = { name: options };
175
+ }
176
+ return { ...defaults, ...options };
177
+ }
178
+ function parse(contents, options = {}) {
179
+ const config = {};
180
+ const lines = contents.split(RE_LINES);
181
+ for (const line of lines) {
182
+ const match = line.match(RE_KEY_VAL);
183
+ if (!match) {
184
+ continue;
185
+ }
186
+ const key = match[1];
187
+ if (!key || key === "__proto__" || key === "constructor") {
188
+ continue;
189
+ }
190
+ const value = destr(
191
+ (match[2] || "").trim()
192
+ /* val */
193
+ );
194
+ if (key.endsWith("[]")) {
195
+ const nkey = key.slice(0, Math.max(0, key.length - 2));
196
+ config[nkey] = (config[nkey] || []).concat(value);
197
+ continue;
198
+ }
199
+ config[key] = value;
200
+ }
201
+ return options.flat ? config : unflatten(config, { overwrite: true });
202
+ }
203
+ function parseFile(path, options) {
204
+ if (!existsSync(path)) {
205
+ return {};
206
+ }
207
+ return parse(readFileSync(path, "utf8"), options);
208
+ }
209
+ function read(options) {
210
+ options = withDefaults(options);
211
+ return parseFile(resolve(options.dir, options.name), options);
212
+ }
213
+ function readUser(options) {
214
+ options = withDefaults(options);
215
+ options.dir = process.env.XDG_CONFIG_HOME || homedir();
216
+ return read(options);
217
+ }
218
+
219
+ export { readUser as a, read as r };
@@ -0,0 +1,245 @@
1
+ import { lstat, stat, readdir, realpath } from 'node:fs/promises';
2
+ import { Readable } from 'node:stream';
3
+ import { resolve, join, relative, sep } from 'node:path';
4
+
5
+ const EntryTypes = {
6
+ FILE_TYPE: 'files',
7
+ DIR_TYPE: 'directories',
8
+ FILE_DIR_TYPE: 'files_directories',
9
+ EVERYTHING_TYPE: 'all',
10
+ };
11
+ const defaultOptions = {
12
+ root: '.',
13
+ fileFilter: (_entryInfo) => true,
14
+ directoryFilter: (_entryInfo) => true,
15
+ type: EntryTypes.FILE_TYPE,
16
+ lstat: false,
17
+ depth: 2147483648,
18
+ alwaysStat: false,
19
+ highWaterMark: 4096,
20
+ };
21
+ Object.freeze(defaultOptions);
22
+ const RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR';
23
+ const NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]);
24
+ const ALL_TYPES = [
25
+ EntryTypes.DIR_TYPE,
26
+ EntryTypes.EVERYTHING_TYPE,
27
+ EntryTypes.FILE_DIR_TYPE,
28
+ EntryTypes.FILE_TYPE,
29
+ ];
30
+ const DIR_TYPES = new Set([
31
+ EntryTypes.DIR_TYPE,
32
+ EntryTypes.EVERYTHING_TYPE,
33
+ EntryTypes.FILE_DIR_TYPE,
34
+ ]);
35
+ const FILE_TYPES = new Set([
36
+ EntryTypes.EVERYTHING_TYPE,
37
+ EntryTypes.FILE_DIR_TYPE,
38
+ EntryTypes.FILE_TYPE,
39
+ ]);
40
+ const isNormalFlowError = (error) => NORMAL_FLOW_ERRORS.has(error.code);
41
+ const wantBigintFsStats = process.platform === 'win32';
42
+ const emptyFn = (_entryInfo) => true;
43
+ const normalizeFilter = (filter) => {
44
+ if (filter === undefined)
45
+ return emptyFn;
46
+ if (typeof filter === 'function')
47
+ return filter;
48
+ if (typeof filter === 'string') {
49
+ const fl = filter.trim();
50
+ return (entry) => entry.basename === fl;
51
+ }
52
+ if (Array.isArray(filter)) {
53
+ const trItems = filter.map((item) => item.trim());
54
+ return (entry) => trItems.some((f) => entry.basename === f);
55
+ }
56
+ return emptyFn;
57
+ };
58
+ /** Readable readdir stream, emitting new files as they're being listed. */
59
+ class ReaddirpStream extends Readable {
60
+ constructor(options = {}) {
61
+ super({
62
+ objectMode: true,
63
+ autoDestroy: true,
64
+ highWaterMark: options.highWaterMark,
65
+ });
66
+ const opts = { ...defaultOptions, ...options };
67
+ const { root, type } = opts;
68
+ this._fileFilter = normalizeFilter(opts.fileFilter);
69
+ this._directoryFilter = normalizeFilter(opts.directoryFilter);
70
+ const statMethod = opts.lstat ? lstat : stat;
71
+ // Use bigint stats if it's windows and stat() supports options (node 10+).
72
+ if (wantBigintFsStats) {
73
+ this._stat = (path) => statMethod(path, { bigint: true });
74
+ }
75
+ else {
76
+ this._stat = statMethod;
77
+ }
78
+ this._maxDepth = opts.depth ?? defaultOptions.depth;
79
+ this._wantsDir = type ? DIR_TYPES.has(type) : false;
80
+ this._wantsFile = type ? FILE_TYPES.has(type) : false;
81
+ this._wantsEverything = type === EntryTypes.EVERYTHING_TYPE;
82
+ this._root = resolve(root);
83
+ this._isDirent = !opts.alwaysStat;
84
+ this._statsProp = this._isDirent ? 'dirent' : 'stats';
85
+ this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent };
86
+ // Launch stream with one parent, the root dir.
87
+ this.parents = [this._exploreDir(root, 1)];
88
+ this.reading = false;
89
+ this.parent = undefined;
90
+ }
91
+ async _read(batch) {
92
+ if (this.reading)
93
+ return;
94
+ this.reading = true;
95
+ try {
96
+ while (!this.destroyed && batch > 0) {
97
+ const par = this.parent;
98
+ const fil = par && par.files;
99
+ if (fil && fil.length > 0) {
100
+ const { path, depth } = par;
101
+ const slice = fil.splice(0, batch).map((dirent) => this._formatEntry(dirent, path));
102
+ const awaited = await Promise.all(slice);
103
+ for (const entry of awaited) {
104
+ if (!entry)
105
+ continue;
106
+ if (this.destroyed)
107
+ return;
108
+ const entryType = await this._getEntryType(entry);
109
+ if (entryType === 'directory' && this._directoryFilter(entry)) {
110
+ if (depth <= this._maxDepth) {
111
+ this.parents.push(this._exploreDir(entry.fullPath, depth + 1));
112
+ }
113
+ if (this._wantsDir) {
114
+ this.push(entry);
115
+ batch--;
116
+ }
117
+ }
118
+ else if ((entryType === 'file' || this._includeAsFile(entry)) &&
119
+ this._fileFilter(entry)) {
120
+ if (this._wantsFile) {
121
+ this.push(entry);
122
+ batch--;
123
+ }
124
+ }
125
+ }
126
+ }
127
+ else {
128
+ const parent = this.parents.pop();
129
+ if (!parent) {
130
+ this.push(null);
131
+ break;
132
+ }
133
+ this.parent = await parent;
134
+ if (this.destroyed)
135
+ return;
136
+ }
137
+ }
138
+ }
139
+ catch (error) {
140
+ this.destroy(error);
141
+ }
142
+ finally {
143
+ this.reading = false;
144
+ }
145
+ }
146
+ async _exploreDir(path, depth) {
147
+ let files;
148
+ try {
149
+ files = await readdir(path, this._rdOptions);
150
+ }
151
+ catch (error) {
152
+ this._onError(error);
153
+ }
154
+ return { files, depth, path };
155
+ }
156
+ async _formatEntry(dirent, path) {
157
+ let entry;
158
+ const basename = this._isDirent ? dirent.name : dirent;
159
+ try {
160
+ const fullPath = resolve(join(path, basename));
161
+ entry = { path: relative(this._root, fullPath), fullPath, basename };
162
+ entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath);
163
+ }
164
+ catch (err) {
165
+ this._onError(err);
166
+ return;
167
+ }
168
+ return entry;
169
+ }
170
+ _onError(err) {
171
+ if (isNormalFlowError(err) && !this.destroyed) {
172
+ this.emit('warn', err);
173
+ }
174
+ else {
175
+ this.destroy(err);
176
+ }
177
+ }
178
+ async _getEntryType(entry) {
179
+ // entry may be undefined, because a warning or an error were emitted
180
+ // and the statsProp is undefined
181
+ if (!entry && this._statsProp in entry) {
182
+ return '';
183
+ }
184
+ const stats = entry[this._statsProp];
185
+ if (stats.isFile())
186
+ return 'file';
187
+ if (stats.isDirectory())
188
+ return 'directory';
189
+ if (stats && stats.isSymbolicLink()) {
190
+ const full = entry.fullPath;
191
+ try {
192
+ const entryRealPath = await realpath(full);
193
+ const entryRealPathStats = await lstat(entryRealPath);
194
+ if (entryRealPathStats.isFile()) {
195
+ return 'file';
196
+ }
197
+ if (entryRealPathStats.isDirectory()) {
198
+ const len = entryRealPath.length;
199
+ if (full.startsWith(entryRealPath) && full.substr(len, 1) === sep) {
200
+ const recursiveError = new Error(`Circular symlink detected: "${full}" points to "${entryRealPath}"`);
201
+ // @ts-ignore
202
+ recursiveError.code = RECURSIVE_ERROR_CODE;
203
+ return this._onError(recursiveError);
204
+ }
205
+ return 'directory';
206
+ }
207
+ }
208
+ catch (error) {
209
+ this._onError(error);
210
+ return '';
211
+ }
212
+ }
213
+ }
214
+ _includeAsFile(entry) {
215
+ const stats = entry && entry[this._statsProp];
216
+ return stats && this._wantsEverything && !stats.isDirectory();
217
+ }
218
+ }
219
+ /**
220
+ * Streaming version: Reads all files and directories in given root recursively.
221
+ * Consumes ~constant small amount of RAM.
222
+ * @param root Root directory
223
+ * @param options Options to specify root (start directory), filters and recursion depth
224
+ */
225
+ function readdirp(root, options = {}) {
226
+ // @ts-ignore
227
+ let type = options.entryType || options.type;
228
+ if (type === 'both')
229
+ type = EntryTypes.FILE_DIR_TYPE; // backwards-compatibility
230
+ if (type)
231
+ options.type = type;
232
+ if (!root) {
233
+ throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)');
234
+ }
235
+ else if (typeof root !== 'string') {
236
+ throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)');
237
+ }
238
+ else if (type && !ALL_TYPES.includes(type)) {
239
+ throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`);
240
+ }
241
+ options.root = root;
242
+ return new ReaddirpStream(options);
243
+ }
244
+
245
+ export { readdirp as r };