From fe24942b606557ccdf5a4c9b53838bd647192eaf Mon Sep 17 00:00:00 2001 From: Lele <45210281+llibarona@users.noreply.github.com> Date: Tue, 1 Feb 2022 06:30:22 -0800 Subject: [PATCH] ALS-1899: Fix Windows path regression and adopt change from APIMF-3517 (#708) --- .../js/src/main/scala/tmp/TmpResourceLoader.scala | 2 +- .../scala/org/mulesoft/als/common/FileUtils.scala | 12 ++++++++++-- als-node-client/node-package/package-lock.json | 2 +- als-node-client/node-package/package.json | 2 +- .../suggestions/plugins/aml/FilesEnumeration.scala | 7 ++++--- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/als-common/js/src/main/scala/tmp/TmpResourceLoader.scala b/als-common/js/src/main/scala/tmp/TmpResourceLoader.scala index 5bc88157fc..dbf2c59734 100644 --- a/als-common/js/src/main/scala/tmp/TmpResourceLoader.scala +++ b/als-common/js/src/main/scala/tmp/TmpResourceLoader.scala @@ -32,7 +32,7 @@ case class JsServerFileResourceLoader() extends BaseFileResourceLoader { extension(resource).flatMap(mimeFromExtension))) .recoverWith { case _: IOException => // exception for local file system where we accept resources including spaces - Fs.asyncFile(resource.urlDecoded) + Fs.asyncFile(dropSlash.urlDecoded) .read() .map( content => diff --git a/als-common/shared/src/main/scala/org/mulesoft/als/common/FileUtils.scala b/als-common/shared/src/main/scala/org/mulesoft/als/common/FileUtils.scala index f13c2c5bd7..55631e233e 100644 --- a/als-common/shared/src/main/scala/org/mulesoft/als/common/FileUtils.scala +++ b/als-common/shared/src/main/scala/org/mulesoft/als/common/FileUtils.scala @@ -41,7 +41,7 @@ private object FileUtils { * @return */ private def windowsPatchToAbsoluteUri(path: String, platform: Platform): String = - if (platform.operativeSystem() == "win") + if (platform.operativeSystem() == "win" && !path.startsWith("/") && hasDrive(path)) // in windows, if it has a drive letter, it should start with `/` as a URI s"/$path" else path @@ -52,5 +52,13 @@ private object FileUtils { * @return */ private def windowsPatchToPath(path: String, platform: Platform): String = - if (platform.operativeSystem() == "win" && path.startsWith("/")) path.drop(1) else path // need to check if drive letter is defined? (see TmpResourceLoader) + if (platform.operativeSystem() == "win" && hasSlashAndDrive(path)) + path.drop(1) + else path + + private def hasSlashAndDrive(path: String): Boolean = + path.startsWith("/") && hasDrive(path) + + private def hasDrive(path: String): Boolean = + path.contains(":/") } diff --git a/als-node-client/node-package/package-lock.json b/als-node-client/node-package/package-lock.json index 29013ce509..8bf65a8911 100644 --- a/als-node-client/node-package/package-lock.json +++ b/als-node-client/node-package/package-lock.json @@ -1,6 +1,6 @@ { "name": "@aml-org/als-node-client", - "version": "5.0.0-SNAPSHOT", + "version": "5.1.0-SNAPSHOT", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/als-node-client/node-package/package.json b/als-node-client/node-package/package.json index 45d2a367d7..38fd413088 100644 --- a/als-node-client/node-package/package.json +++ b/als-node-client/node-package/package.json @@ -1,6 +1,6 @@ { "name": "@aml-org/als-node-client", - "version": "5.0.0-SNAPSHOT", + "version": "5.1.0-SNAPSHOT", "description": "ALS Node Client", "main": "./dist/als-node-client.min.js", "types": "typescript/als-node-client.d.ts", diff --git a/als-suggestions/shared/src/main/scala/org/mulesoft/als/suggestions/plugins/aml/FilesEnumeration.scala b/als-suggestions/shared/src/main/scala/org/mulesoft/als/suggestions/plugins/aml/FilesEnumeration.scala index bab13e5320..8192ac001c 100644 --- a/als-suggestions/shared/src/main/scala/org/mulesoft/als/suggestions/plugins/aml/FilesEnumeration.scala +++ b/als-suggestions/shared/src/main/scala/org/mulesoft/als/suggestions/plugins/aml/FilesEnumeration.scala @@ -1,5 +1,6 @@ package org.mulesoft.als.suggestions.plugins.aml +import amf.core.internal.utils.UriUtils import org.mulesoft.als.common.DirectoryResolver import org.mulesoft.als.common.URIImplicits._ import org.mulesoft.als.suggestions.RawSuggestion @@ -15,14 +16,14 @@ case class FilesEnumeration(directoryResolver: DirectoryResolver, extends PathCompletion { def filesIn(fullURI: String): Future[Seq[RawSuggestion]] = - directoryResolver.isDirectory(alsConfiguration.platform.resolvePath(fullURI)).flatMap { isDir => + directoryResolver.isDirectory(UriUtils.resolvePath(fullURI)).flatMap { isDir => if (isDir) listDirectory(fullURI) else Future.successful(Nil) } private def listDirectory(fullURI: String): Future[Seq[RawSuggestion]] = directoryResolver - .readDir(alsConfiguration.platform.resolvePath(fullURI)) + .readDir(UriUtils.resolvePath(fullURI)) .flatMap(withIsDir(_, fullURI)) .map(s => { s.filter(tuple => @@ -37,7 +38,7 @@ case class FilesEnumeration(directoryResolver: DirectoryResolver, files.map( file => directoryResolver - .isDirectory(alsConfiguration.platform.resolvePath( + .isDirectory(UriUtils.resolvePath( s"${fullUri.toPath(alsConfiguration.platform)}$file".toAmfUri(alsConfiguration.platform))) .map(isDir => (file, isDir))) }