(base: string, target: string)
| 887 | |
| 888 | // Both arguments are expected to be full path names |
| 889 | export function getPathRelative(base: string, target: string) { |
| 890 | if (os.platform() === 'win32') { |
| 891 | base = base.replace(/\\/g, '/'); |
| 892 | target = target.replace(/\\/g, '/'); |
| 893 | } |
| 894 | if (!path.isAbsolute(base) || !path.isAbsolute(target)) { |
| 895 | return target; |
| 896 | } |
| 897 | const baseElts = base.split('/'); |
| 898 | const targetElts = target.split('/'); |
| 899 | if (!base || !target || (base.length > target.length) || (baseElts[0] !== targetElts[0])) { |
| 900 | // Roots don't even match or base is larger than the target, so no point |
| 901 | return target; |
| 902 | } |
| 903 | while (baseElts.length && targetElts.length) { |
| 904 | if (baseElts[0] !== targetElts[0]) { |
| 905 | break; |
| 906 | } |
| 907 | baseElts.shift(); |
| 908 | targetElts.shift(); |
| 909 | } |
| 910 | if (baseElts.length === 0) { |
| 911 | return './' + targetElts.join('/'); |
| 912 | } |
| 913 | if (baseElts.length > 4) { |
| 914 | return target; |
| 915 | } |
| 916 | while (baseElts.length) { |
| 917 | targetElts.unshift('..'); |
| 918 | baseElts.shift(); |
| 919 | } |
| 920 | const ret = targetElts.join('/'); |
| 921 | return ret; |
| 922 | } |
no outgoing calls
no test coverage detected