First commit
This commit is contained in:
305
framework/unify/simplePath.js
Normal file
305
framework/unify/simplePath.js
Normal file
@@ -0,0 +1,305 @@
|
||||
/*
|
||||
|
||||
Copyright (c) 2020, 2023, The Unified Company.
|
||||
|
||||
This code is part of Unify.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the ESA Software Community License - Strong Copyleft LICENSE,
|
||||
as published by the ESA.
|
||||
See the ESA Software Community License - Strong Copyleft LICENSE, for more details.
|
||||
|
||||
https://unifyjs.org
|
||||
|
||||
*/
|
||||
|
||||
export default class simplePath{
|
||||
|
||||
useSlash = true;
|
||||
|
||||
parts = new Array();
|
||||
|
||||
env = false;
|
||||
|
||||
beginWithSlash = true;
|
||||
|
||||
endWithSlash = true;
|
||||
|
||||
absolute = false;
|
||||
|
||||
|
||||
|
||||
constructor( part ) {
|
||||
|
||||
if( part ) {
|
||||
|
||||
this.preparePart( part );
|
||||
|
||||
this.parts.push( part );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
preparePart( part ) {
|
||||
|
||||
if( this.parts.length == 0 ) {
|
||||
|
||||
if( part.slice( 0,2 ) == ".." ) {
|
||||
|
||||
this.beginWithSlash = false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
clone() {
|
||||
|
||||
var clone = new simplePath();
|
||||
|
||||
clone.useSlash = this.useSlash;
|
||||
|
||||
clone.parts = [...this.parts];
|
||||
|
||||
clone.env = this.env;
|
||||
|
||||
clone.beginWithSlash = this.beginWithSlash;
|
||||
|
||||
clone.endWithSlash = this.endWithSlash;
|
||||
|
||||
clone.absolute = this.absolute;
|
||||
|
||||
|
||||
return clone;
|
||||
|
||||
}
|
||||
|
||||
getEnvironmentNative() {
|
||||
|
||||
if( typeof document != "undefined" ) {
|
||||
|
||||
return "Browser";
|
||||
|
||||
}
|
||||
|
||||
if( global ) {
|
||||
|
||||
return "Node"
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
getEnvironment() {
|
||||
|
||||
if( this.getEnvironmentNative() == "Browser" ) {
|
||||
|
||||
var env = "Browser";
|
||||
|
||||
} else {
|
||||
|
||||
var env = process.platform;
|
||||
|
||||
}
|
||||
|
||||
return env;
|
||||
|
||||
}
|
||||
|
||||
getSeparator() {
|
||||
|
||||
var env = this.getEnvironment();
|
||||
|
||||
if( env == "win32" || this.env == "win32" ) {
|
||||
|
||||
return '\\';
|
||||
|
||||
} else {
|
||||
|
||||
return "/";
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
slash( path ) {
|
||||
|
||||
const isExtendedLengthPath = path.startsWith('\\\\?\\');
|
||||
|
||||
if ( isExtendedLengthPath ) {
|
||||
|
||||
return path;
|
||||
|
||||
}
|
||||
|
||||
if( this.getSeparator() == "\\" ) {
|
||||
|
||||
return path.replace(/\//g, this.getSeparator());
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
return path.replace(/\\/g, this.getSeparator());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
formatPath( part ) {
|
||||
|
||||
for (var i = 0; i < 4; i++) {
|
||||
|
||||
part = part.replace("//", "/")
|
||||
|
||||
}
|
||||
|
||||
for (var i = 0; i < 4; i++) {
|
||||
|
||||
part = part.replace("\\\\", "\\")
|
||||
|
||||
}
|
||||
|
||||
if( part.endsWith("/") || part.endsWith("\\") ) {
|
||||
|
||||
part = part.slice(0, -1)
|
||||
|
||||
}
|
||||
|
||||
if( part.startsWith("/") || part.startsWith("\\") ) {
|
||||
|
||||
part = part.substring(1);
|
||||
|
||||
}
|
||||
|
||||
return part;
|
||||
|
||||
}
|
||||
|
||||
add( part ) {
|
||||
|
||||
if( !part ) {
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
this.preparePart( part );
|
||||
|
||||
var formattedPath = this.formatPath( part );
|
||||
|
||||
this.parts.push( formattedPath );
|
||||
|
||||
}
|
||||
|
||||
removeFirstSlash( part ) {
|
||||
|
||||
if( part.startsWith("/") || part.startsWith("\\") ) {
|
||||
|
||||
part = part.substring(1);
|
||||
|
||||
}
|
||||
|
||||
return part;
|
||||
|
||||
}
|
||||
|
||||
assureFirstSlash( part ) {
|
||||
|
||||
if( !part.startsWith("/") || !part.startsWith("\\") ) {
|
||||
|
||||
part = "/" + part;
|
||||
|
||||
}
|
||||
|
||||
return part;
|
||||
|
||||
}
|
||||
|
||||
removeLastSlash( part ) {
|
||||
|
||||
if( part.endsWith("/") || part.endsWith("\\") ) {
|
||||
|
||||
part = part.slice(0, -1)
|
||||
|
||||
}
|
||||
|
||||
return part;
|
||||
|
||||
}
|
||||
|
||||
assureLastSlash( part ) {
|
||||
|
||||
if( !part.endsWith("/") || !part.endsWith("\\") ) {
|
||||
|
||||
part = part + "/";
|
||||
|
||||
}
|
||||
|
||||
return part;
|
||||
|
||||
}
|
||||
|
||||
lastItemHasExtension() {
|
||||
|
||||
var length = this.parts.length;
|
||||
|
||||
var lastItem = this.parts[ length - 1 ];
|
||||
|
||||
if( lastItem.includes(".") ) {
|
||||
|
||||
return true;
|
||||
|
||||
} else {
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
resolve() {
|
||||
|
||||
var parts = this.parts;
|
||||
|
||||
var joined = parts.join( this.getSeparator() );
|
||||
|
||||
if( this.useSlash ) {
|
||||
|
||||
joined = this.slash( joined );
|
||||
|
||||
}
|
||||
|
||||
if( !this.beginWithSlash ) {
|
||||
|
||||
joined = this.removeFirstSlash( joined );
|
||||
|
||||
} else {
|
||||
|
||||
joined = this.assureFirstSlash( joined );
|
||||
|
||||
|
||||
}
|
||||
|
||||
if( !this.endWithSlash || this.lastItemHasExtension() ) {
|
||||
|
||||
joined = this.removeLastSlash( joined );
|
||||
|
||||
} else {
|
||||
|
||||
joined = this.assureLastSlash( joined );
|
||||
|
||||
}
|
||||
|
||||
if( this.absolute && global ) {
|
||||
|
||||
return global.path.resolve( joined );
|
||||
|
||||
}
|
||||
|
||||
return joined;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user