Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gripe: deprecating fs.existsSync without a replacement that returns a boolean #4216

Closed
dfabulich opened this issue Dec 9, 2015 · 1 comment
Labels
duplicate Issues and PRs that are duplicates of other issues or PRs.

Comments

@dfabulich
Copy link
Contributor

I'm starting a new thread off of issue #1592 to talk specifically about undeprecating fs.existsSync.

fs.exists was correctly deprecated, for two reasons:

  1. fs.exists doesn't use nodeback semantics; fs.access does.
  2. exists/existsSync promises too much certainty. You can know that a file definitely does exist, but if you can't access it, there's no way to know whether that's because the file truly doesn't exist or because of some other problem (security, connection issues, etc.). access fixes the semantics.

So fs.access is better than fs.exists. (If you disagree, go argue the point in issue #1592.)

But fs.accessSync is worse than fs.existsSync. fs.accessSync does nothing if the file is accessible, and throws an exception when the file is inaccessible, requiring us to wrap it in a try/catch block, which means we can't use it in an if expression. It's pointless boilerplate for simple scripts.

I propose two alternatives:

  1. Add a new fs.accessibleSync method, available only in synchronous mode, with this trivial implementation.
fs.accessibleSync = function(path, mode) {
  try {
    this.accessSync(path, mode);
    return true;
  } catch (e) {
    return false;
  }
};

You might argue that this function is too trivial to be of use, but I bet that without this function in the standard library, it will be written and rewritten and rewritten thousands of times.

  1. Undeprecate fs.existsSync, leaving fs.exists deprecated. This is the option I prefer, because it avoids cluttering the API.

As a synchronous script author I just want a boolean, and I don't really care what the function is called.

Can we reach some consensus around this, separating it from the exists vs. access semantics argument?

@bnoordhuis
Copy link
Member

I'm starting a new thread off of issue #1592 to talk specifically about undeprecating fs.existsSync.

Can you move this to #4077? There's already a lot of discussion there. Thanks.

@bnoordhuis bnoordhuis added the duplicate Issues and PRs that are duplicates of other issues or PRs. label Dec 9, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
duplicate Issues and PRs that are duplicates of other issues or PRs.
Projects
None yet
Development

No branches or pull requests

2 participants