Merge branch 'angular-6-fix'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 08fccce..fd3ba96 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,9 +1,12 @@
 ## 1.4.5
 
-Fixes for Angular 6+ applications using compiled Dart package w/ preamble:
+* Improve `location.href` so that Dart's `Uri.current` works for more paths.
+    * Make `location.href` a getter so Dart's `Uri.current` changes along with the
+      process's working directory.
 
-* Checks for global if it's not polyfilled, then try for window.
-* Don't assume that since we have CommonJS we have process, __dirname, __filename.
+* Fixes for Angular 6+ applications using compiled Dart package w/ preamble:
+    * Checks for global if it's not polyfilled, then try for window.
+    * Don't assume that since we have CommonJS we have process, __dirname, __filename.
 
 ## 1.4.4
 
diff --git a/lib/preamble.dart b/lib/preamble.dart
index 1449403..f075043 100644
--- a/lib/preamble.dart
+++ b/lib/preamble.dart
@@ -1,16 +1,13 @@
 library node_preamble;
 
-final _minified = r"""var dartNodePreambleHasGlobal="undefined"!=typeof global,dartNodePreambleSelf=dartNodePreambleHasGlobal?global:window,self=Object.create(dartNodePreambleSelf);self.scheduleImmediate=self.setImmediate?function(e){dartNodePreambleSelf.setImmediate(e)}:function(e){setTimeout(e,0)},self.require=require,self.exports=exports;var dartNodePreambleHasProcess="undefined"!=typeof process;dartNodePreambleHasProcess&&(self.process=process);var dartNodePreambleHasDirname="undefined"!=typeof __dirname;dartNodePreambleHasDirname&&(self.__dirname=__dirname);var dartNodePreambleHasFilename="undefined"!=typeof __filename;dartNodePreambleHasFilename&&(self.__filename=__filename),dartNodePreambleSelf.window||(self.location={get href(){return"file://"+(e=process.cwd(),"win32"!=process.platform?e:"/"+e.replace(/\\/g,"/"))+"/";var e}},function(){function e(){try{throw new Error}catch(t){var e=t.stack,r=new RegExp("^ *at [^(]*\\((.*):[0-9]*:[0-9]*\\)$","mg"),a=null;do{var l=r.exec(e);null!=l&&(a=l)}while(null!=l);return a[1]}}var r=null;self.document={get currentScript(){return null==r&&(r={src:e()}),r}}}(),self.dartDeferredLibraryLoader=function(e,r,a){try{load(e),r()}catch(e){a(e)}});""";
+final _minified = r"""var url=require("url"),dartNodePreambleSelf="undefined"!=typeof global?global:window,self=Object.create(dartNodePreambleSelf);self.scheduleImmediate=self.setImmediate?function(e){dartNodePreambleSelf.setImmediate(e)}:function(e){setTimeout(e,0)},self.require=require,self.exports=exports,"undefined"!=typeof process&&(self.process=process),"undefined"!=typeof __dirname&&(self.__dirname=__dirname),"undefined"!=typeof __filename&&(self.__filename=__filename),dartNodePreambleSelf.window||(self.location={get href(){return url.pathToFileURL(process.cwd()).href+"/"}},function(){function e(){try{throw new Error}catch(n){var e=n.stack,r=new RegExp("^ *at [^(]*\\((.*):[0-9]*:[0-9]*\\)$","mg"),l=null;do{var t=r.exec(e);null!=t&&(l=t)}while(null!=t);return l[1]}}var r=null;self.document={get currentScript(){return null==r&&(r={src:e()}),r}}}(),self.dartDeferredLibraryLoader=function(e,r,l){try{load(e),r()}catch(e){l(e)}});""";
 
 final _normal = r"""
 // make sure to keep this as 'var'
 // we don't want block scoping
 
-// Making typeof its own variable prevents Angular or Webpack
-// from 'breaking guard' and ruining our check.
-// https://github.com/medialize/sass.js/commit/6241c10dbe35b181ad78ecbd692fed5f86213ffb
-var dartNodePreambleHasGlobal = typeof global !== "undefined";
-var dartNodePreambleSelf = dartNodePreambleHasGlobal ? global : window;
+var url = require("url");
+var dartNodePreambleSelf = typeof global !== "undefined" ? global : window;
 
 var self = Object.create(dartNodePreambleSelf);
 
@@ -28,18 +25,15 @@
 
 // Node.js specific exports, check to see if they exist & or polyfilled
 
-var dartNodePreambleHasProcess = typeof process !== "undefined";
-if (dartNodePreambleHasProcess) {
+if (typeof process !== "undefined") {
   self.process = process;
 }
 
-var dartNodePreambleHasDirname = typeof __dirname !== "undefined";
-if (dartNodePreambleHasDirname) {
+if (typeof __dirname !== "undefined") {
   self.__dirname = __dirname;
 }
 
-var dartNodePreambleHasFilename = typeof __filename !== "undefined";
-if (dartNodePreambleHasFilename) {
+if (typeof __filename !== "undefined") {
   self.__filename = __filename;
 }
 
@@ -51,11 +45,7 @@
   // dart-lang/sdk#27979 is fixed, it should be possible to make it better.
   self.location = {
     get href() {
-      return "file://" + (function() {
-        var cwd = process.cwd();
-        if (process.platform != "win32") return cwd;
-        return "/" + cwd.replace(/\\/g, "/");
-      })() + "/";
+      return url.pathToFileURL(process.cwd()).href + "/";
     }
   };
 
diff --git a/lib/preamble.js b/lib/preamble.js
index eaf6265..a0ac71c 100644
--- a/lib/preamble.js
+++ b/lib/preamble.js
@@ -1,11 +1,8 @@
 // make sure to keep this as 'var'
 // we don't want block scoping
 
-// Making typeof its own variable prevents Angular or Webpack
-// from 'breaking guard' and ruining our check.
-// https://github.com/medialize/sass.js/commit/6241c10dbe35b181ad78ecbd692fed5f86213ffb
-var dartNodePreambleHasGlobal = typeof global !== "undefined";
-var dartNodePreambleSelf = dartNodePreambleHasGlobal ? global : window;
+var url = require("url");
+var dartNodePreambleSelf = typeof global !== "undefined" ? global : window;
 
 var self = Object.create(dartNodePreambleSelf);
 
@@ -23,18 +20,15 @@
 
 // Node.js specific exports, check to see if they exist & or polyfilled
 
-var dartNodePreambleHasProcess = typeof process !== "undefined";
-if (dartNodePreambleHasProcess) {
+if (typeof process !== "undefined") {
   self.process = process;
 }
 
-var dartNodePreambleHasDirname = typeof __dirname !== "undefined";
-if (dartNodePreambleHasDirname) {
+if (typeof __dirname !== "undefined") {
   self.__dirname = __dirname;
 }
 
-var dartNodePreambleHasFilename = typeof __filename !== "undefined";
-if (dartNodePreambleHasFilename) {
+if (typeof __filename !== "undefined") {
   self.__filename = __filename;
 }
 
@@ -46,11 +40,7 @@
   // dart-lang/sdk#27979 is fixed, it should be possible to make it better.
   self.location = {
     get href() {
-      return "file://" + (function() {
-        var cwd = process.cwd();
-        if (process.platform != "win32") return cwd;
-        return "/" + cwd.replace(/\\/g, "/");
-      })() + "/";
+      return url.pathToFileURL(process.cwd()).href + "/";
     }
   };
 
diff --git a/lib/preamble.min.js b/lib/preamble.min.js
index 995a527..5b07aff 100644
--- a/lib/preamble.min.js
+++ b/lib/preamble.min.js
@@ -1 +1 @@
-var dartNodePreambleHasGlobal="undefined"!=typeof global,dartNodePreambleSelf=dartNodePreambleHasGlobal?global:window,self=Object.create(dartNodePreambleSelf);self.scheduleImmediate=self.setImmediate?function(e){dartNodePreambleSelf.setImmediate(e)}:function(e){setTimeout(e,0)},self.require=require,self.exports=exports;var dartNodePreambleHasProcess="undefined"!=typeof process;dartNodePreambleHasProcess&&(self.process=process);var dartNodePreambleHasDirname="undefined"!=typeof __dirname;dartNodePreambleHasDirname&&(self.__dirname=__dirname);var dartNodePreambleHasFilename="undefined"!=typeof __filename;dartNodePreambleHasFilename&&(self.__filename=__filename),dartNodePreambleSelf.window||(self.location={get href(){return"file://"+(e=process.cwd(),"win32"!=process.platform?e:"/"+e.replace(/\\/g,"/"))+"/";var e}},function(){function e(){try{throw new Error}catch(t){var e=t.stack,r=new RegExp("^ *at [^(]*\\((.*):[0-9]*:[0-9]*\\)$","mg"),a=null;do{var l=r.exec(e);null!=l&&(a=l)}while(null!=l);return a[1]}}var r=null;self.document={get currentScript(){return null==r&&(r={src:e()}),r}}}(),self.dartDeferredLibraryLoader=function(e,r,a){try{load(e),r()}catch(e){a(e)}});
\ No newline at end of file
+var url=require("url"),dartNodePreambleSelf="undefined"!=typeof global?global:window,self=Object.create(dartNodePreambleSelf);self.scheduleImmediate=self.setImmediate?function(e){dartNodePreambleSelf.setImmediate(e)}:function(e){setTimeout(e,0)},self.require=require,self.exports=exports,"undefined"!=typeof process&&(self.process=process),"undefined"!=typeof __dirname&&(self.__dirname=__dirname),"undefined"!=typeof __filename&&(self.__filename=__filename),dartNodePreambleSelf.window||(self.location={get href(){return url.pathToFileURL(process.cwd()).href+"/"}},function(){function e(){try{throw new Error}catch(n){var e=n.stack,r=new RegExp("^ *at [^(]*\\((.*):[0-9]*:[0-9]*\\)$","mg"),l=null;do{var t=r.exec(e);null!=t&&(l=t)}while(null!=t);return l[1]}}var r=null;self.document={get currentScript(){return null==r&&(r={src:e()}),r}}}(),self.dartDeferredLibraryLoader=function(e,r,l){try{load(e),r()}catch(e){l(e)}});
\ No newline at end of file
diff --git a/pubspec.yaml b/pubspec.yaml
index 57b8378..4f2f215 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,7 +1,7 @@
 name: node_preamble
 author: Michael Bullington <mikebullingtn@gmail.com>
 homepage: https://github.com/mbullington/node_preamble.dart
-version: 1.5.0
+version: 1.4.5
 description: Better node.js preamble for dart2js, use it in your build system.
 
 environment: