Create wt-odlux directory
[ccsdk/features.git] / sdnr / wt-odlux / odlux / apps / helpApp / src / utilities / path.ts
1 /**
2  * ============LICENSE_START========================================================================
3  * ONAP : ccsdk feature sdnr wt odlux
4  * =================================================================================================
5  * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
6  * =================================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software distributed under the License
13  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14  * or implied. See the License for the specific language governing permissions and limitations under
15  * the License.
16  * ============LICENSE_END==========================================================================
17  */
18 export const resolvePath = (...paths: string[]): string => {
19   function resolve(pathA: string, pathB: string) {
20     //  ‘a’     => ['a']
21     //  'a/b'   => ['a', 'b']
22     //  '/a/b'  => ['', 'a', 'b']
23     //  '/a/b/' => ['', 'a', 'b', '']
24     const pathBParts = pathB.split('/');
25     if (pathBParts[0] === '') {
26       return pathBParts.join('/');
27     }
28     const pathAParts = pathA.split('/');
29     const aLastIndex = pathAParts.length - 1;
30     if (pathAParts[aLastIndex] !== '') {
31       pathAParts[aLastIndex] = '';
32     }
33
34     let part: string;
35     let i = 0;
36     while (typeof (part = pathBParts[i]) === 'string') {
37       switch (part) {
38         case '..':
39           pathAParts.pop();
40           pathAParts.pop();
41           pathAParts.push('');
42           break;
43         case '.':
44           pathAParts.pop();
45           pathAParts.push('');
46           break;
47         default:
48           pathAParts.pop();
49           pathAParts.push(part);
50           pathAParts.push('');
51           break;
52       }
53       i++;
54     }
55     if (pathBParts[pathBParts.length - 1] !== '') pathAParts.pop(); 
56     return pathAParts.join('/');
57   }
58
59   let i = 0;
60   let path: string;
61   let r = location.pathname;
62
63   const urlRegex = /^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i;
64   const multiSlashReg = /\/\/+/g;
65
66   while (typeof (path = paths[i]) === 'string') {
67     debugger;
68     const matches = path && path.match(urlRegex);
69     if (matches || !i) {
70       r = path;
71     } else {
72       path = path.replace(multiSlashReg, '/');
73       r = resolve(r, path);
74     }
75     i++;
76   }
77
78   return r;
79 };