source: trip-planner-front/node_modules/path-dirname/index.js@ 8d391a1

Last change on this file since 8d391a1 was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 3.5 KB
Line 
1'use strict';
2
3var path = require('path');
4var inspect = require('util').inspect;
5
6function assertPath(path) {
7 if (typeof path !== 'string') {
8 throw new TypeError('Path must be a string. Received ' + inspect(path));
9 }
10}
11
12function posix(path) {
13 assertPath(path);
14 if (path.length === 0)
15 return '.';
16 var code = path.charCodeAt(0);
17 var hasRoot = (code === 47/*/*/);
18 var end = -1;
19 var matchedSlash = true;
20 for (var i = path.length - 1; i >= 1; --i) {
21 code = path.charCodeAt(i);
22 if (code === 47/*/*/) {
23 if (!matchedSlash) {
24 end = i;
25 break;
26 }
27 } else {
28 // We saw the first non-path separator
29 matchedSlash = false;
30 }
31 }
32
33 if (end === -1)
34 return hasRoot ? '/' : '.';
35 if (hasRoot && end === 1)
36 return '//';
37 return path.slice(0, end);
38}
39
40function win32(path) {
41 assertPath(path);
42 var len = path.length;
43 if (len === 0)
44 return '.';
45 var rootEnd = -1;
46 var end = -1;
47 var matchedSlash = true;
48 var offset = 0;
49 var code = path.charCodeAt(0);
50
51 // Try to match a root
52 if (len > 1) {
53 if (code === 47/*/*/ || code === 92/*\*/) {
54 // Possible UNC root
55
56 rootEnd = offset = 1;
57
58 code = path.charCodeAt(1);
59 if (code === 47/*/*/ || code === 92/*\*/) {
60 // Matched double path separator at beginning
61 var j = 2;
62 var last = j;
63 // Match 1 or more non-path separators
64 for (; j < len; ++j) {
65 code = path.charCodeAt(j);
66 if (code === 47/*/*/ || code === 92/*\*/)
67 break;
68 }
69 if (j < len && j !== last) {
70 // Matched!
71 last = j;
72 // Match 1 or more path separators
73 for (; j < len; ++j) {
74 code = path.charCodeAt(j);
75 if (code !== 47/*/*/ && code !== 92/*\*/)
76 break;
77 }
78 if (j < len && j !== last) {
79 // Matched!
80 last = j;
81 // Match 1 or more non-path separators
82 for (; j < len; ++j) {
83 code = path.charCodeAt(j);
84 if (code === 47/*/*/ || code === 92/*\*/)
85 break;
86 }
87 if (j === len) {
88 // We matched a UNC root only
89 return path;
90 }
91 if (j !== last) {
92 // We matched a UNC root with leftovers
93
94 // Offset by 1 to include the separator after the UNC root to
95 // treat it as a "normal root" on top of a (UNC) root
96 rootEnd = offset = j + 1;
97 }
98 }
99 }
100 }
101 } else if ((code >= 65/*A*/ && code <= 90/*Z*/) ||
102 (code >= 97/*a*/ && code <= 122/*z*/)) {
103 // Possible device root
104
105 code = path.charCodeAt(1);
106 if (path.charCodeAt(1) === 58/*:*/) {
107 rootEnd = offset = 2;
108 if (len > 2) {
109 code = path.charCodeAt(2);
110 if (code === 47/*/*/ || code === 92/*\*/)
111 rootEnd = offset = 3;
112 }
113 }
114 }
115 } else if (code === 47/*/*/ || code === 92/*\*/) {
116 return path[0];
117 }
118
119 for (var i = len - 1; i >= offset; --i) {
120 code = path.charCodeAt(i);
121 if (code === 47/*/*/ || code === 92/*\*/) {
122 if (!matchedSlash) {
123 end = i;
124 break;
125 }
126 } else {
127 // We saw the first non-path separator
128 matchedSlash = false;
129 }
130 }
131
132 if (end === -1) {
133 if (rootEnd === -1)
134 return '.';
135 else
136 end = rootEnd;
137 }
138 return path.slice(0, end);
139}
140
141module.exports = process.platform === 'win32' ? win32 : posix;
142module.exports.posix = posix;
143module.exports.win32 = win32;
Note: See TracBrowser for help on using the repository browser.