UNPKG

locutus

Version:

Locutus other languages' standard libraries to JavaScript for fun and educational purposes

59 lines (58 loc) 2.31 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.realpath = realpath; const path_1 = __importDefault(require("path")); function realpath(path) { // discuss at: https://locutus.io/php/realpath/ // original by: mk.keck // improved by: Kevin van Zonneveld (https://kvz.io) // note 1: Returned path is an url like e.g. 'https://yourhost.tld/path/' // example 1: realpath('some/dir/.././_supporters/pj_test_supportfile_1.htm') // returns 1: 'some/_supporters/pj_test_supportfile_1.htm' if (typeof window === 'undefined') { return path_1.default.normalize(path); } let hasProtocol = false; let parts = []; // Save the root, if not given const href = window.location.href; // Avoid input failures // Check if there's a port in path (like 'https://') let normalizedPath = String(path).replace('\\', '/'); if (normalizedPath.includes('://')) { hasProtocol = true; } // Ok, there's not a port in path, so let's take the root if (!hasProtocol) { normalizedPath = href.substring(0, href.lastIndexOf('/') + 1) + normalizedPath; } // Explode the given path into it's parts parts = normalizedPath.split('/'); // The path is an array now const resolvedParts = []; // Foreach part make a check for (const part of parts) { // This is'nt really interesting if (part === '.') { continue; } // This reduces the realpath if (part === '..') { /* But only if there more than 3 parts in the path-array. * The first three parts are for the uri */ if (resolvedParts.length > 3) { resolvedParts.pop(); } } else { // This adds parts to the realpath // But only if the part is not empty or the uri // (the first three parts ar needed) was not // saved if (resolvedParts.length < 2 || part !== '') { resolvedParts.push(part); } } } // Returns the absloute path as a string return resolvedParts.join('/'); }