1319
1320
dirname(path: string): string {
1321
>
validateString(path, 'path');
path.ts
1322
>
if (path.length === 0) {
1323
return '.';
1324
}
1325
>
const hasRoot = path.charCodeAt(0) === CHAR_FORWARD_SLASH;
path.ts
1326
>
let end = -1;
1327
>
let matchedSlash = true;
1328
>
for (let i = path.length - 1; i >= 1; --i) {
1329
>
if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) {
1330
if (!matchedSlash) {
1331
end = i;
1332
break;
1333
}
1335
>
// We saw the first non-path separator
1336
>
matchedSlash = false;
1337
>
}
1338
>
}
1339
>
1340
>
if (end === -1) {
1341
return hasRoot ? '/' : '.';
1342
}
1343
>
if (hasRoot && end === 1) {
path.ts
1344
return '//';
1345
}
1346
return path.slice(0, end);
1348
1349
basename(path: string, suffix?: string): string {