From adc5017a17e3fddab17b51e6cb5e3064663921e9 Mon Sep 17 00:00:00 2001
From: Brandon Goddard <42152559+bgoddar@users.noreply.github.com>
Date: Thu, 15 Apr 2021 14:16:33 -0500
Subject: [PATCH] Update default start page to included startpage/index.html
 (#350)

* update default start page to included startpage/index.html

* pr feedback
---
 package-lock.json |  95 +++++++++++++++++++++++++++++++++++++++
 package.json      |   6 ++-
 src/utils.ts      |   2 +-
 webpack.config.ts | 112 +++++++++++++++++++++++++---------------------
 4 files changed, 161 insertions(+), 54 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 4117ba66..c4c4a737 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1444,6 +1444,12 @@
             "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
             "dev": true
         },
+        "@types/anymatch": {
+            "version": "1.3.1",
+            "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz",
+            "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==",
+            "dev": true
+        },
         "@types/babel__core": {
             "version": "7.1.14",
             "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz",
@@ -1491,6 +1497,15 @@
             "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
             "dev": true
         },
+        "@types/copy-webpack-plugin": {
+            "version": "6.4.1",
+            "resolved": "https://registry.npmjs.org/@types/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz",
+            "integrity": "sha512-jnM0aMsaMTBr+xlMIO/fu+ZXIbSncmj4UB9ZHTXVfZJsUwGqtdfdSfz1/S8O99R9k7G5V6KhbAd8+QL0f2kUkg==",
+            "dev": true,
+            "requires": {
+                "@types/webpack": "^4"
+            }
+        },
         "@types/eslint": {
             "version": "7.2.7",
             "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.7.tgz",
@@ -1617,6 +1632,12 @@
                 "@types/puppeteer": "*"
             }
         },
+        "@types/source-list-map": {
+            "version": "0.1.2",
+            "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
+            "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==",
+            "dev": true
+        },
         "@types/source-map": {
             "version": "0.1.29",
             "resolved": "https://registry.npmjs.org/@types/source-map/-/source-map-0.1.29.tgz",
@@ -1628,12 +1649,60 @@
             "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==",
             "dev": true
         },
+        "@types/tapable": {
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.7.tgz",
+            "integrity": "sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ==",
+            "dev": true
+        },
+        "@types/uglify-js": {
+            "version": "3.13.0",
+            "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.0.tgz",
+            "integrity": "sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q==",
+            "dev": true,
+            "requires": {
+                "source-map": "^0.6.1"
+            }
+        },
         "@types/vscode": {
             "version": "1.48.0",
             "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.48.0.tgz",
             "integrity": "sha512-sZJKzsJz1gSoFXcOJWw3fnKl2sseUgZmvB4AJZS+Fea+bC/jfGPVhmFL/FfQHld/TKtukVONsmoD3Pkyx9iadg==",
             "dev": true
         },
+        "@types/webpack": {
+            "version": "4.41.27",
+            "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.27.tgz",
+            "integrity": "sha512-wK/oi5gcHi72VMTbOaQ70VcDxSQ1uX8S2tukBK9ARuGXrYM/+u4ou73roc7trXDNmCxCoerE8zruQqX/wuHszA==",
+            "dev": true,
+            "requires": {
+                "@types/anymatch": "*",
+                "@types/node": "*",
+                "@types/tapable": "^1",
+                "@types/uglify-js": "*",
+                "@types/webpack-sources": "*",
+                "source-map": "^0.6.0"
+            }
+        },
+        "@types/webpack-sources": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.0.tgz",
+            "integrity": "sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg==",
+            "dev": true,
+            "requires": {
+                "@types/node": "*",
+                "@types/source-list-map": "*",
+                "source-map": "^0.7.3"
+            },
+            "dependencies": {
+                "source-map": {
+                    "version": "0.7.3",
+                    "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+                    "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+                    "dev": true
+                }
+            }
+        },
         "@types/ws": {
             "version": "7.2.6",
             "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.2.6.tgz",
@@ -2949,6 +3018,32 @@
             "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
             "dev": true
         },
+        "copy-webpack-plugin": {
+            "version": "8.1.1",
+            "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-8.1.1.tgz",
+            "integrity": "sha512-rYM2uzRxrLRpcyPqGceRBDpxxUV8vcDqIKxAUKfcnFpcrPxT5+XvhTxv7XLjo5AvEJFPdAE3zCogG2JVahqgSQ==",
+            "dev": true,
+            "requires": {
+                "fast-glob": "^3.2.5",
+                "glob-parent": "^5.1.1",
+                "globby": "^11.0.3",
+                "normalize-path": "^3.0.0",
+                "p-limit": "^3.1.0",
+                "schema-utils": "^3.0.0",
+                "serialize-javascript": "^5.0.1"
+            },
+            "dependencies": {
+                "p-limit": {
+                    "version": "3.1.0",
+                    "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+                    "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+                    "dev": true,
+                    "requires": {
+                        "yocto-queue": "^0.1.0"
+                    }
+                }
+            }
+        },
         "core-util-is": {
             "version": "1.0.2",
             "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
diff --git a/package.json b/package.json
index 77d6211c..98db7346 100644
--- a/package.json
+++ b/package.json
@@ -131,7 +131,7 @@
                 },
                 "vscode-edge-devtools.defaultUrl": {
                     "type": "string",
-                    "default": "about:blank",
+                    "default": "",
                     "description": "The default url to open when launching the browser without a target"
                 },
                 "vscode-edge-devtools.userDataDir": {
@@ -556,6 +556,7 @@
     },
     "devDependencies": {
         "@opentelemetry/tracing": "0.18.0",
+        "@types/copy-webpack-plugin": "^6.4.1",
         "@types/fs-extra": "9.0.8",
         "@types/jest": "26.0.13",
         "@types/node": "14.6.3",
@@ -564,8 +565,9 @@
         "@types/ws": "7.2.6",
         "@typescript-eslint/eslint-plugin": "4.19.0",
         "@typescript-eslint/parser": "4.19.0",
+        "copy-webpack-plugin": "8.1.1",
         "eslint": "7.22.0",
-        "eslint-plugin-import": "^2.22.1",
+        "eslint-plugin-import": "2.22.1",
         "eslint-plugin-jsdoc": "32.3.0",
         "eslint-plugin-prefer-arrow": "1.2.3",
         "fs-extra": "9.1.0",
diff --git a/src/utils.ts b/src/utils.ts
index 866e458f..c34d8325 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -66,7 +66,7 @@ export const SETTINGS_STORE_NAME = 'vscode-edge-devtools';
 export const SETTINGS_DEFAULT_USE_HTTPS = false;
 export const SETTINGS_DEFAULT_HOSTNAME = 'localhost';
 export const SETTINGS_DEFAULT_PORT = 9222;
-export const SETTINGS_DEFAULT_URL = 'about:blank';
+export const SETTINGS_DEFAULT_URL = path.resolve(path.join(__dirname, 'startpage', 'index.html'));
 export const SETTINGS_WEBVIEW_NAME = 'Edge DevTools';
 export const SETTINGS_PREF_NAME = 'devtools-preferences';
 export const SETTINGS_PREF_DEFAULTS = {
diff --git a/webpack.config.ts b/webpack.config.ts
index 24570205..78ed6a27 100644
--- a/webpack.config.ts
+++ b/webpack.config.ts
@@ -1,51 +1,61 @@
-import path from 'path';
-
-const commonConfig = {
-    devtool: 'source-map',
-    mode: 'development',
-    module: {
-        rules: [
-            {
-                exclude: /node_modules/,
-                test: /\.tsx?$/,
-                use: 'ts-loader',
-            },
-        ],
-    },
-    resolve: {
-        extensions: ['.tsx', '.ts', '.js'],
-    },
-};
-
-module.exports = [
-    {
-        ...commonConfig,
-        entry: {
-            host: './src/host/mainHost.ts',
-            messaging: './src/host/mainMessaging.ts',
-        },
-        name: 'host',
-        output: {
-            filename: '[name].bundle.js',
-            path: path.resolve(__dirname, 'out/host'),
-        },
-    },
-    {
-        ...commonConfig,
-        entry: {
-            extension: './src/extension.ts',
-        },
-        externals: {
-            vscode: 'commonjs vscode',
-        },
-        name: 'extension',
-        output: {
-            devtoolModuleFilenameTemplate: '../[resource-path]',
-            filename: '[name].js',
-            libraryTarget: 'commonjs2',
-            path: path.resolve(__dirname, 'out'),
-        },
-        stats: 'errors-only', // Bug ws package includes dev-dependencies which webpack will report as warnings
-        target: 'node',
-    },
-];
+import copyPlugin from 'copy-webpack-plugin';
+import path from 'path';
+
+const commonConfig = {
+    devtool: 'source-map',
+    mode: 'development',
+    module: {
+        rules: [
+            {
+                exclude: /node_modules/,
+                test: /\.tsx?$/,
+                use: 'ts-loader',
+            },
+        ],
+    },
+    resolve: {
+        extensions: ['.tsx', '.ts', '.js'],
+    },
+};
+
+module.exports = [
+    {
+        ...commonConfig,
+        entry: {
+            host: './src/host/mainHost.ts',
+            messaging: './src/host/mainMessaging.ts',
+        },
+        name: 'host',
+        output: {
+            filename: '[name].bundle.js',
+            path: path.resolve(__dirname, 'out/host'),
+        },
+    },
+    {
+        ...commonConfig,
+        entry: {
+            extension: './src/extension.ts',
+        },
+        externals: {
+            vscode: 'commonjs vscode',
+        },
+        name: 'extension',
+        output: {
+            devtoolModuleFilenameTemplate: '../[resource-path]',
+            filename: '[name].js',
+            libraryTarget: 'commonjs2',
+            path: path.resolve(__dirname, 'out'),
+        },
+        stats: 'errors-only', // Bug ws package includes dev-dependencies which webpack will report as warnings
+        target: 'node',
+        // Copy startpage html to output bundle
+        plugins: [
+            new copyPlugin({
+                patterns: [
+                  { from: 'startpage', to: 'startpage'},
+                  { from: 'icon.png', to: 'icon.png'},
+                ],
+            }),
+        ],
+    },
+];