in packages/metro-memory-fs/src/index.js [1337:1379]
_resolveEnt(context, filePath, entName) {
const {node} = context;
if (node == null) {
throw makeError('ENOENT', filePath, 'no such file or directory');
}
if (node.type !== 'directory') {
throw makeError('ENOTDIR', filePath, 'not a directory');
}
const {entries} = node;
if (entName === '' || entName === '.') {
return;
}
if (entName === '..') {
const {nodePath} = context;
if (nodePath.length > 1) {
nodePath.pop();
context.node = nodePath[nodePath.length - 1][1];
}
return;
}
const childNode = entries.get(entName);
if (
childNode == null ||
childNode.type !== 'symbolicLink' ||
(context.keepFinalSymlink && context.entNames.length === 0)
) {
context.node = childNode;
context.nodePath.push([entName, childNode]);
return;
}
if (context.symlinkCount >= 10) {
throw makeError('ELOOP', filePath, 'too many levels of symbolic links');
}
const {entNames, drive} = this._parsePath(childNode.target);
if (drive != null) {
context.drive = drive;
context.node = this._getRoot(drive, filePath);
context.nodePath = [['', context.node]];
}
context.entNames = entNames.concat(context.entNames);
checkPathLength(context.entNames, filePath);
++context.symlinkCount;
}