summaryrefslogtreecommitdiff
path: root/node_modules/locutus/php/filesystem/realpath.js
blob: f5b55155feadc0340ec6de2f6bfbfebac9f5583e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
'use strict';

module.exports = function realpath(path) {
  //  discuss at: http://locutus.io/php/realpath/
  // original by: mk.keck
  // improved by: Kevin van Zonneveld (http://kvz.io)
  //      note 1: Returned path is an url like e.g. 'http://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') {
    var nodePath = require('path');
    return nodePath.normalize(path);
  }

  var p = 0;
  var arr = []; // Save the root, if not given
  var r = this.window.location.href; // Avoid input failures

  // Check if there's a port in path (like 'http://')
  path = (path + '').replace('\\', '/');
  if (path.indexOf('://') !== -1) {
    p = 1;
  }

  // Ok, there's not a port in path, so let's take the root
  if (!p) {
    path = r.substring(0, r.lastIndexOf('/') + 1) + path;
  }

  // Explode the given path into it's parts
  arr = path.split('/'); // The path is an array now
  path = []; // Foreach part make a check
  for (var k in arr) {
    // This is'nt really interesting
    if (arr[k] === '.') {
      continue;
    }
    // This reduces the realpath
    if (arr[k] === '..') {
      /* But only if there more than 3 parts in the path-array.
       * The first three parts are for the uri */
      if (path.length > 3) {
        path.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 (path.length < 2 || arr[k] !== '') {
        path.push(arr[k]);
      }
    }
  }

  // Returns the absloute path as a string
  return path.join('/');
};
//# sourceMappingURL=realpath.js.map