Explorar o código

edited url.ts isLocal with new URL

adobkin7 %!s(int64=6) %!d(string=hai) anos
pai
achega
4141bea277
Modificáronse 2 ficheiros con 17 adicións e 6 borrados
  1. 13 3
      packages/coreutils/src/url.ts
  2. 4 3
      tests/test-coreutils/src/url.spec.ts

+ 13 - 3
packages/coreutils/src/url.ts

@@ -145,9 +145,19 @@ export namespace URLExt {
    * `data:`, `file:`, and `//` protocol URLs.
    */
   export function isLocal(url: string): boolean {
-    const { protocol } = parse(url);
-
-    return url.toLowerCase().indexOf(protocol) !== 0 && url.indexOf('//') !== 0;
+    try {
+      const absoluteUrl = new URL(url);
+      // Chrome violates the HTML whatwg spec by allowing new URL("#")
+      if (absoluteUrl.protocol === 'about:' && url[0] === '#') {
+        return true;
+      }
+      return false;
+    } catch (e) {
+      if (url[0] === '/') {
+        return false;
+      }
+      return true;
+    }
   }
 
   /**

+ 4 - 3
tests/test-coreutils/src/url.spec.ts

@@ -91,13 +91,14 @@ describe('@jupyterlab/coreutils', () => {
         expect(URLExt.isLocal('https://foo/bar.txt')).to.equal(false);
         expect(URLExt.isLocal('http://foo/bar.txt')).to.equal(false);
         expect(URLExt.isLocal('//foo/bar.txt')).to.equal(false);
+        expect(URLExt.isLocal('file://foo/bar.txt')).to.equal(false);
+        expect(URLExt.isLocal('data:text/plain,123ABC')).to.equal(false);
+        expect(URLExt.isLocal('/foo/bar.txt')).to.equal(false);
+        expect(URLExt.isLocal('httpserver/index.html')).to.equal(true);
         expect(URLExt.isLocal('../foo/bar.txt')).to.equal(true);
         expect(URLExt.isLocal('./foo/bar.txt')).to.equal(true);
-        expect(URLExt.isLocal('/foo/bar.txt')).to.equal(true);
         expect(URLExt.isLocal('foo/bar.txt')).to.equal(true);
         expect(URLExt.isLocal('bar.txt')).to.equal(true);
-        expect(URLExt.isLocal('file://foo/bar.txt')).to.equal(false);
-        expect(URLExt.isLocal('data:text/plain,123ABC')).to.equal(false);
       });
     });
   });