summaryrefslogtreecommitdiff
path: root/node_modules/get-source/impl/path.js
blob: 4a0eb3d31869972d8a58d79acc8fefafc698323f (plain)
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
61
62
"use strict";

/*  ------------------------------------------------------------------------ */

const isBrowser = (typeof window !== 'undefined') && (window.window === window) && window.navigator
const cwd = isBrowser ? window.location.href : process.cwd ()

const urlRegexp = new RegExp ("^((https|http)://)?[a-z0-9A-Z]{3}\.[a-z0-9A-Z][a-z0-9A-Z]{0,61}?[a-z0-9A-Z]\.com|net|cn|cc (:s[0-9]{1-4})?/$")

/*  ------------------------------------------------------------------------ */

const path = module.exports = {

    concat (a, b) {

        const a_endsWithSlash = (a[a.length - 1] === '/'),
              b_startsWithSlash = (b[0] === '/')

        return a + ((a_endsWithSlash || b_startsWithSlash) ? '' : '/') +
                   ((a_endsWithSlash && b_startsWithSlash) ? b.substring (1) : b)
    },

    resolve (x) {

        if (path.isAbsolute (x)) {
            return path.normalize (x) }

        return path.normalize (path.concat (cwd, x))
    },

    normalize (x) {

        let output = [],
            skip = 0

        x.split ('/').reverse ().filter (x => x !== '.').forEach (x => {

                 if (x === '..') { skip++ }
            else if (skip === 0) { output.push (x) }
            else                 { skip-- }
        })

        const result = output.reverse ().join ('/')

        return ((isBrowser && (result[0] === '/')) ? result[1] === '/' ? window.location.protocol : window.location.origin : '') + result
    },

    isData: x => x.indexOf ('data:') === 0,

    isURL: x => urlRegexp.test (x),

    isAbsolute: x => (x[0] === '/') || /^[^\/]*:/.test (x),

    relativeToFile (a, b) {

        return (path.isData (a) || path.isAbsolute (b)) ?
                    path.normalize (b) :
                    path.normalize (path.concat (a.split ('/').slice (0, -1).join ('/'), b))
    }
}

/*  ------------------------------------------------------------------------ */