12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- "use strict";
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.build = void 0;
- const fs_1 = __importDefault(require("fs"));
- const path_1 = require("path");
- const resolveSymlinksAsync = function (path, state, callback) {
- const { queue, options: { suppressErrors }, } = state;
- queue.enqueue();
- fs_1.default.realpath(path, (error, resolvedPath) => {
- if (error)
- return queue.dequeue(suppressErrors ? null : error, state);
- fs_1.default.stat(resolvedPath, (error, stat) => {
- if (error)
- return queue.dequeue(suppressErrors ? null : error, state);
- if (stat.isDirectory() && isRecursive(path, resolvedPath, state))
- return queue.dequeue(null, state);
- callback(stat, resolvedPath);
- queue.dequeue(null, state);
- });
- });
- };
- const resolveSymlinks = function (path, state, callback) {
- const { queue, options: { suppressErrors }, } = state;
- queue.enqueue();
- try {
- const resolvedPath = fs_1.default.realpathSync(path);
- const stat = fs_1.default.statSync(resolvedPath);
- if (stat.isDirectory() && isRecursive(path, resolvedPath, state))
- return;
- callback(stat, resolvedPath);
- }
- catch (e) {
- if (!suppressErrors)
- throw e;
- }
- };
- function build(options, isSynchronous) {
- if (!options.resolveSymlinks || options.excludeSymlinks)
- return null;
- return isSynchronous ? resolveSymlinks : resolveSymlinksAsync;
- }
- exports.build = build;
- function isRecursive(path, resolved, state) {
- if (state.options.useRealPaths)
- return isRecursiveUsingRealPaths(resolved, state);
- let parent = (0, path_1.dirname)(path);
- let depth = 1;
- while (parent !== state.root && depth < 2) {
- const resolvedPath = state.symlinks.get(parent);
- const isSameRoot = !!resolvedPath &&
- (resolvedPath === resolved ||
- resolvedPath.startsWith(resolved) ||
- resolved.startsWith(resolvedPath));
- if (isSameRoot)
- depth++;
- else
- parent = (0, path_1.dirname)(parent);
- }
- state.symlinks.set(path, resolved);
- return depth > 1;
- }
- function isRecursiveUsingRealPaths(resolved, state) {
- return state.visited.includes(resolved + state.options.pathSeparator);
- }
|