is-recursive-symlink.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.isRecursive = exports.isRecursiveAsync = void 0;
  4. const path_1 = require("path");
  5. const fs_1 = require("fs");
  6. const isRecursiveAsync = (state, path, resolved, callback) => {
  7. if (state.options.useRealPaths)
  8. return callback(state.visited.has(resolved + state.options.pathSeparator));
  9. let parent = (0, path_1.dirname)(path);
  10. if (parent + state.options.pathSeparator === state.root || parent === path)
  11. return callback(false);
  12. if (state.symlinks.get(parent) === resolved)
  13. return callback(true);
  14. (0, fs_1.readlink)(parent, (error, resolvedParent) => {
  15. if (error)
  16. return (0, exports.isRecursiveAsync)(state, parent, resolved, callback);
  17. callback(resolvedParent === resolved);
  18. });
  19. };
  20. exports.isRecursiveAsync = isRecursiveAsync;
  21. function isRecursive(state, path, resolved) {
  22. if (state.options.useRealPaths)
  23. return state.visited.has(resolved + state.options.pathSeparator);
  24. let parent = (0, path_1.dirname)(path);
  25. if (parent + state.options.pathSeparator === state.root || parent === path)
  26. return false;
  27. try {
  28. const resolvedParent = state.symlinks.get(parent) || (0, fs_1.readlinkSync)(parent);
  29. return resolvedParent === resolved;
  30. }
  31. catch (e) {
  32. return isRecursive(state, parent, resolved);
  33. }
  34. }
  35. exports.isRecursive = isRecursive;