# Node.js Tooling Group Meeting 2020-09-18 ## Present - Christopher Hiller (@boneskull) - Wes Todd (@wesleytodd) - Ben Coe (@bcoe) - Bryan English (@bengl) - Ruy Adorno (@ruyadorno) - Darcy Clarke (@darcyclarke) - Joe Sepi (@joesepi) - Ian Sutherland (@iansu) ## Recursive FS Operations Deep Dive - `rimraf` lessons learned - we should have been better about calling out that the feature was. - we shuld have researched other products better. - `mkdirp` lessons learned - - What other `fs` functions can we make recursive? - Already identified - `chown` - `chmod`: - https://github.com/nodejs/tooling/issues/59#issuecomment-623653013 - What new recursive things can we add? - `copyTree/copyDir` - What are some considerations when making recursive `fs` functions? - Security - POSIX compatibility - Being similar to other languages - Naming conventions - Should we be using `recursive: true` or creating new functions? - Behaviour w/ links ## Notes - `rimraf` - Did not get properly labeled as experimental - Lots of contention around naming, where to put this functionality - Should have done a better review of other platforms and languages ahead of time - Complicated library, hard to refactor - `mkdirp` - Much less contentious - Was more straightforward and not labeled experimental - Other considerations - Should everything be experimental? - Should we vendor external libraries or copy them into core? - Come up with some usecases for these new features - Security reviews of proposed APIs (@nodejs/security, someone from OpenJS Foundation, academic researchers?) - Start with some kind of proposal or RFC - New argument parser did something like this - There have been a few patch releases of rimraf, we should consider adding them - New things - `chmod` - We did initially try this - Some concerns were raised about security - `chown` - `watch` - This does exist but is not the best implementation - Doesn't work on Linux - Vendor something like `watchman`? - Look over the entire fs API for ideas - Lots of prior art in POSIX - fs already tries to follow POSIX - `readdir` - What would recursive `readdir` look like? - `utime`? - `mv`/`rename` - `copyDir`/`copyTree` - This seems like a valuable addition - What happens with symlinks? Mirror `copyFile` - This is a potential security issue - How does something like bash handle this? - Is this an issue with `rimraf` - Do we just make this `copyFile` with recursive option? - Hopefully not - Can we do this in JS or will it involve libuv - https://github.com/libuv/libuv/issues/925 - POSIX compatibility - How strictly do we want to adhere to this? - Already broken this with `rimraf` - Feels kind of user hostile, especially to non-Unix users - Split this into high and low level APIs? Rust does this - POSIX like layer - Higher layer to implement things like `rimraf`, etc. - We tried this with `rimraf` and there was resistence - Deno is another good example to look at - Action items - Look over existing fs APIs (@joesepi) - Start on an RFC for `copyDir` (@joesepi/@iansu) - Start spending more time on a roadmap for the group - More deep dive type meetings for developing things like RFCs - Do these outside the normal meeting time - On Friday on the off weeks? - Revisit becoming a chartered working group (@boneskull) - Tooling is maybe too broad? - Roadmap would help with this - Talk with Michael Dawson about the idea