deno.land / x / deno@v1.28.2 / ext / node / path.rs

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
use std::path::Component;use std::path::PathBuf;
/// Extenion to path_clean::PathCleanpub trait PathClean<T> { fn clean(&self) -> T;}
impl PathClean<PathBuf> for PathBuf { fn clean(&self) -> PathBuf { let path = path_clean::PathClean::clean(self); if cfg!(windows) && path.to_string_lossy().contains("..\\") { // temporary workaround because path_clean::PathClean::clean is // not good enough on windows let mut components = Vec::new();
for component in path.components() { match component { Component::CurDir => { // skip } Component::ParentDir => { let poped_component = components.pop(); if !matches!(poped_component, Some(Component::Normal(_))) { panic!("Error normalizing: {}", path.display()); } } Component::Normal(_) | Component::RootDir | Component::Prefix(_) => { components.push(component); } } } components.into_iter().collect::<PathBuf>() } else { path } }}
deno

Version Info

Tagged at
a year ago