mirror of
https://github.com/nodejs/node.git
synced 2024-12-01 16:10:02 +01:00
cbd8d715b2
This adds long-requested methods for asynchronously interacting and iterating through directory entries by using `uv_fs_opendir`, `uv_fs_readdir`, and `uv_fs_closedir`. `fs.opendir()` and friends return an `fs.Dir`, which contains methods for doing reads and cleanup. `fs.Dir` also has the async iterator symbol exposed. The `read()` method and friends only return `fs.Dirent`s for this API. Having a entry type or doing a `stat` call is deemed to be necessary in the majority of cases, so just returning dirents seems like the logical choice for a new api. Reading when there are no more entries returns `null` instead of a dirent. However the async iterator hides that (and does automatic cleanup). The code lives in separate files from the rest of fs, this is done partially to prevent over-pollution of those (already very large) files, but also in the case of js allows loading into `fsPromises`. Due to async_hooks, this introduces a new handle type of `DIRHANDLE`. This PR does not attempt to make complete optimization of this feature. Notable future improvements include: - Moving promise work into C++ land like FileHandle. - Possibly adding `readv()` to do multi-entry directory reads. - Aliasing `fs.readdir` to `fs.scandir` and doing a deprecation. Refs: https://github.com/nodejs/node-v0.x-archive/issues/388 Refs: https://github.com/nodejs/node/issues/583 Refs: https://github.com/libuv/libuv/pull/2057 PR-URL: https://github.com/nodejs/node/pull/29349 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: David Carlier <devnexen@gmail.com> |
||
---|---|---|
.. | ||
bootstrap | ||
clang-format | ||
code_cache | ||
configure.d | ||
doc | ||
eslint-rules | ||
gyp | ||
icu | ||
inspector_protocol | ||
js2c_macros | ||
macos-installer | ||
msvs | ||
node_modules | ||
node-lint-md-cli-rollup | ||
pip | ||
rpm | ||
snapshot | ||
v8_gypfiles | ||
.eslintrc.yaml | ||
build-addons.js | ||
certdata.txt | ||
check-imports.py | ||
compress_json.py | ||
cpplint.py | ||
create_android_makefiles | ||
create_expfile.sh | ||
genv8constants.py | ||
getarch.py | ||
getendian.py | ||
getmachine.py | ||
getmoduleversion.py | ||
getnapibuildversion.py | ||
getnodeversion.py | ||
gyp_node.py | ||
install.py | ||
js2c.py | ||
license2rtf.js | ||
license-builder.sh | ||
lint-js.js | ||
lint-md.js | ||
lint-pr-commit-message.sh | ||
lsan_suppressions.txt | ||
macos-firewall.sh | ||
make-v8.sh | ||
mk-ca-bundle.pl | ||
mkssldef.py | ||
osx-codesign.sh | ||
osx-pkg-postinstall.sh | ||
osx-productsign.sh | ||
release.sh | ||
run-valgrind.py | ||
run-worker.js | ||
sign.bat | ||
specialize_node_d.py | ||
test-npm-package.js | ||
test-v8.bat | ||
test.py | ||
update-authors.js | ||
update-babel-eslint.sh | ||
update-eslint.sh | ||
utils.py | ||
valgrind.supp |