refactor: bundle the browser and renderer process electron code (#18553)
* refactor: bundle the browser and renderer process electron code * Bundles browser/init and renderer/init * Improves load performance of main process by ~40% * Improves load performance of renderer process by ~30% * Prevents users from importing our "requiring" our internal logic such as ipc-main-internal. This makes those message buses safer as they are less accessible, there is still some more work to be done though to lock down those buses completely. * The electron.asar file now only contains 2 files, as a future improvement maybe we can use atom_natives to ship these two files embedded in the binary * This also removes our dependency on browserify which had some strange edge cases that caused us to have to hack around require-order and stopped us using certain ES6/7 features we should have been able to use (async / await in some files in the sandboxed renderer init script) TLDR: Things are faster and better :) * fix: I really do not want to talk about it * chore: add performance improvements from debugging * fix: resolve the provided path so webpack thinks it is absolute * chore: fixup per PR review * fix: use webpacks ProvidePlugin to keep global, process and Buffer alive after deletion from global scope for use in internal code * fix: bundle worker/init as well to make node-in-workers work * chore: update wording as per feedback * chore: make the timers hack work when yarn is not used
This commit is contained in:
		
					parent
					
						
							
								a19e55a902
							
						
					
				
			
			
				commit
				
					
						bc527f6b51
					
				
			
		
					 40 changed files with 1612 additions and 920 deletions
				
			
		
							
								
								
									
										172
									
								
								BUILD.gn
									
										
									
									
									
								
							
							
						
						
									
										172
									
								
								BUILD.gn
									
										
									
									
									
								
							| 
						 | 
					@ -10,9 +10,9 @@ import("//tools/grit/repack.gni")
 | 
				
			||||||
import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
 | 
					import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
 | 
				
			||||||
import("//v8/gni/snapshot_toolchain.gni")
 | 
					import("//v8/gni/snapshot_toolchain.gni")
 | 
				
			||||||
import("build/asar.gni")
 | 
					import("build/asar.gni")
 | 
				
			||||||
import("build/js_wrap.gni")
 | 
					 | 
				
			||||||
import("build/npm.gni")
 | 
					import("build/npm.gni")
 | 
				
			||||||
import("build/tsc.gni")
 | 
					import("build/tsc.gni")
 | 
				
			||||||
 | 
					import("build/webpack/webpack.gni")
 | 
				
			||||||
import("buildflags/buildflags.gni")
 | 
					import("buildflags/buildflags.gni")
 | 
				
			||||||
import("electron_paks.gni")
 | 
					import("electron_paks.gni")
 | 
				
			||||||
import("filenames.auto.gni")
 | 
					import("filenames.auto.gni")
 | 
				
			||||||
| 
						 | 
					@ -71,135 +71,70 @@ npm_action("build_electron_definitions") {
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
npm_action("atom_browserify_sandbox_unwrapped") {
 | 
					webpack_build("electron_browser_bundle") {
 | 
				
			||||||
  script = "browserify"
 | 
					 | 
				
			||||||
  deps = [
 | 
					  deps = [
 | 
				
			||||||
    ":build_electron_definitions",
 | 
					    ":build_electron_definitions",
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  inputs = auto_filenames.sandbox_browserify_deps
 | 
					  inputs = auto_filenames.browser_bundle_deps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  outputs = [
 | 
					  config_file = "//electron/build/webpack/webpack.config.browser.js"
 | 
				
			||||||
    "$target_gen_dir/js2c/sandbox_bundle_unwrapped.js",
 | 
					  out_file = "$target_gen_dir/electron_asar/browser/init.js"
 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  args = [
 | 
					 | 
				
			||||||
    "lib/sandboxed_renderer/init.js",
 | 
					 | 
				
			||||||
    "-r",
 | 
					 | 
				
			||||||
    "./lib/sandboxed_renderer/api/exports/electron.js:electron",
 | 
					 | 
				
			||||||
    "-t",
 | 
					 | 
				
			||||||
    "aliasify",
 | 
					 | 
				
			||||||
    "-p",
 | 
					 | 
				
			||||||
    "[",
 | 
					 | 
				
			||||||
    "tsify",
 | 
					 | 
				
			||||||
    "-p",
 | 
					 | 
				
			||||||
    "tsconfig.electron.json",
 | 
					 | 
				
			||||||
    "]",
 | 
					 | 
				
			||||||
    "--standalone",
 | 
					 | 
				
			||||||
    "sandboxed_preload",
 | 
					 | 
				
			||||||
    "-o",
 | 
					 | 
				
			||||||
    rebase_path(outputs[0]),
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
npm_action("atom_browserify_isolated_unwrapped") {
 | 
					webpack_build("electron_renderer_bundle") {
 | 
				
			||||||
  script = "browserify"
 | 
					 | 
				
			||||||
  deps = [
 | 
					  deps = [
 | 
				
			||||||
    ":build_electron_definitions",
 | 
					    ":build_electron_definitions",
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  inputs = auto_filenames.isolated_browserify_deps
 | 
					  inputs = auto_filenames.renderer_bundle_deps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  outputs = [
 | 
					  config_file = "//electron/build/webpack/webpack.config.renderer.js"
 | 
				
			||||||
    "$target_gen_dir/js2c/isolated_bundle_unwrapped.js",
 | 
					  out_file = "$target_gen_dir/electron_asar/renderer/init.js"
 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  args = [
 | 
					 | 
				
			||||||
    "lib/isolated_renderer/init.js",
 | 
					 | 
				
			||||||
    "-t",
 | 
					 | 
				
			||||||
    "aliasify",
 | 
					 | 
				
			||||||
    "-p",
 | 
					 | 
				
			||||||
    "[",
 | 
					 | 
				
			||||||
    "tsify",
 | 
					 | 
				
			||||||
    "-p",
 | 
					 | 
				
			||||||
    "tsconfig.electron.json",
 | 
					 | 
				
			||||||
    "]",
 | 
					 | 
				
			||||||
    "--standalone",
 | 
					 | 
				
			||||||
    "isolated_preload",
 | 
					 | 
				
			||||||
    "-o",
 | 
					 | 
				
			||||||
    rebase_path(outputs[0]),
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
npm_action("atom_browserify_content_script_unwrapped") {
 | 
					webpack_build("electron_worker_bundle") {
 | 
				
			||||||
  script = "browserify"
 | 
					 | 
				
			||||||
  deps = [
 | 
					  deps = [
 | 
				
			||||||
    ":build_electron_definitions",
 | 
					    ":build_electron_definitions",
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  inputs = auto_filenames.context_script_browserify_deps
 | 
					  inputs = auto_filenames.worker_bundle_deps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  outputs = [
 | 
					  config_file = "//electron/build/webpack/webpack.config.worker.js"
 | 
				
			||||||
    "$target_gen_dir/js2c/content_script_bundle_unwrapped.js",
 | 
					  out_file = "$target_gen_dir/electron_asar/worker/init.js"
 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  args = [
 | 
					 | 
				
			||||||
    "lib/content_script/init.js",
 | 
					 | 
				
			||||||
    "-t",
 | 
					 | 
				
			||||||
    "aliasify",
 | 
					 | 
				
			||||||
    "-p",
 | 
					 | 
				
			||||||
    "[",
 | 
					 | 
				
			||||||
    "tsify",
 | 
					 | 
				
			||||||
    "-p",
 | 
					 | 
				
			||||||
    "tsconfig.electron.json",
 | 
					 | 
				
			||||||
    "]",
 | 
					 | 
				
			||||||
    "--standalone",
 | 
					 | 
				
			||||||
    "content_script_preload",
 | 
					 | 
				
			||||||
    "-o",
 | 
					 | 
				
			||||||
    rebase_path(outputs[0]),
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
js_wrap("atom_browserify_content_script") {
 | 
					webpack_build("electron_sandboxed_renderer_bundle") {
 | 
				
			||||||
  deps = [
 | 
					  deps = [
 | 
				
			||||||
    ":atom_browserify_content_script_unwrapped",
 | 
					    ":build_electron_definitions",
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  inputs = [
 | 
					  inputs = auto_filenames.sandbox_bundle_deps
 | 
				
			||||||
    "$target_gen_dir/js2c/content_script_bundle_unwrapped.js",
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  outputs = [
 | 
					  config_file = "//electron/build/webpack/webpack.config.sandboxed_renderer.js"
 | 
				
			||||||
    "$target_gen_dir/js2c/content_script_bundle.js",
 | 
					  out_file = "$target_gen_dir/js2c/sandbox_bundle.js"
 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
js_wrap("atom_browserify_isolated") {
 | 
					webpack_build("electron_isolated_renderer_bundle") {
 | 
				
			||||||
  deps = [
 | 
					  deps = [
 | 
				
			||||||
    ":atom_browserify_isolated_unwrapped",
 | 
					    ":build_electron_definitions",
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  inputs = [
 | 
					  inputs = auto_filenames.isolated_bundle_deps
 | 
				
			||||||
    "$target_gen_dir/js2c/isolated_bundle_unwrapped.js",
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  outputs = [
 | 
					  config_file = "//electron/build/webpack/webpack.config.isolated_renderer.js"
 | 
				
			||||||
    "$target_gen_dir/js2c/isolated_bundle.js",
 | 
					  out_file = "$target_gen_dir/js2c/isolated_bundle.js"
 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
js_wrap("atom_browserify_sandbox") {
 | 
					webpack_build("electron_content_script_bundle") {
 | 
				
			||||||
  deps = [
 | 
					  deps = [
 | 
				
			||||||
    ":atom_browserify_sandbox_unwrapped",
 | 
					    ":build_electron_definitions",
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  inputs = [
 | 
					  inputs = auto_filenames.content_script_bundle_deps
 | 
				
			||||||
    "$target_gen_dir/js2c/sandbox_bundle_unwrapped.js",
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  outputs = [
 | 
					  config_file = "//electron/build/webpack/webpack.config.content_script.js"
 | 
				
			||||||
    "$target_gen_dir/js2c/sandbox_bundle.js",
 | 
					  out_file = "$target_gen_dir/js2c/content_script_bundle.js"
 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
copy("atom_js2c_copy") {
 | 
					copy("atom_js2c_copy") {
 | 
				
			||||||
| 
						 | 
					@ -214,19 +149,19 @@ copy("atom_js2c_copy") {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
action("atom_js2c") {
 | 
					action("atom_js2c") {
 | 
				
			||||||
  deps = [
 | 
					  deps = [
 | 
				
			||||||
    ":atom_browserify_content_script",
 | 
					 | 
				
			||||||
    ":atom_browserify_isolated",
 | 
					 | 
				
			||||||
    ":atom_browserify_sandbox",
 | 
					 | 
				
			||||||
    ":atom_js2c_copy",
 | 
					    ":atom_js2c_copy",
 | 
				
			||||||
 | 
					    ":electron_content_script_bundle",
 | 
				
			||||||
 | 
					    ":electron_isolated_renderer_bundle",
 | 
				
			||||||
 | 
					    ":electron_sandboxed_renderer_bundle",
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  browserify_sources = [
 | 
					  webpack_sources = [
 | 
				
			||||||
    "$target_gen_dir/js2c/content_script_bundle.js",
 | 
					    "$target_gen_dir/js2c/content_script_bundle.js",
 | 
				
			||||||
    "$target_gen_dir/js2c/isolated_bundle.js",
 | 
					    "$target_gen_dir/js2c/isolated_bundle.js",
 | 
				
			||||||
    "$target_gen_dir/js2c/sandbox_bundle.js",
 | 
					    "$target_gen_dir/js2c/sandbox_bundle.js",
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  sources = browserify_sources + [
 | 
					  sources = webpack_sources + [
 | 
				
			||||||
              "$target_gen_dir/js2c/asar.js",
 | 
					              "$target_gen_dir/js2c/asar.js",
 | 
				
			||||||
              "$target_gen_dir/js2c/asar_init.js",
 | 
					              "$target_gen_dir/js2c/asar_init.js",
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
| 
						 | 
					@ -242,46 +177,19 @@ action("atom_js2c") {
 | 
				
			||||||
         rebase_path(sources, root_build_dir)
 | 
					         rebase_path(sources, root_build_dir)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
target_gen_electron_js = "$target_gen_dir/js/electron"
 | 
					 | 
				
			||||||
target_gen_default_app_js = "$target_gen_dir/js/default_app"
 | 
					target_gen_default_app_js = "$target_gen_dir/js/default_app"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typescript_build("lib_js") {
 | 
					 | 
				
			||||||
  deps = [
 | 
					 | 
				
			||||||
    ":build_electron_definitions",
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
  type_root = rebase_path("$target_gen_dir/tsc/electron/typings")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  sources = filenames.js_sources
 | 
					 | 
				
			||||||
  if (enable_desktop_capturer) {
 | 
					 | 
				
			||||||
    sources += [
 | 
					 | 
				
			||||||
      "lib/browser/desktop-capturer.js",
 | 
					 | 
				
			||||||
      "lib/renderer/api/desktop-capturer.js",
 | 
					 | 
				
			||||||
    ]
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  if (enable_view_api) {
 | 
					 | 
				
			||||||
    sources += [
 | 
					 | 
				
			||||||
      "lib/browser/api/views/box-layout.js",
 | 
					 | 
				
			||||||
      "lib/browser/api/views/button.js",
 | 
					 | 
				
			||||||
      "lib/browser/api/views/label-button.js",
 | 
					 | 
				
			||||||
      "lib/browser/api/views/layout-manager.js",
 | 
					 | 
				
			||||||
      "lib/browser/api/views/md-text-button.js",
 | 
					 | 
				
			||||||
      "lib/browser/api/views/resize-area.js",
 | 
					 | 
				
			||||||
      "lib/browser/api/views/text-field.js",
 | 
					 | 
				
			||||||
    ]
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  output_gen_dir = target_gen_electron_js
 | 
					 | 
				
			||||||
  output_dir_name = "lib"
 | 
					 | 
				
			||||||
  tsconfig = "tsconfig.electron.json"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
asar("electron_asar") {
 | 
					asar("electron_asar") {
 | 
				
			||||||
  deps = [
 | 
					  deps = [
 | 
				
			||||||
    ":lib_js",
 | 
					    ":electron_browser_bundle",
 | 
				
			||||||
 | 
					    ":electron_renderer_bundle",
 | 
				
			||||||
 | 
					    ":electron_worker_bundle",
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  root = "$target_gen_electron_js/electron/lib"
 | 
					  root = "$target_gen_dir/electron_asar"
 | 
				
			||||||
  sources = get_target_outputs(":lib_js")
 | 
					  sources = get_target_outputs(":electron_browser_bundle") +
 | 
				
			||||||
 | 
					            get_target_outputs(":electron_renderer_bundle") +
 | 
				
			||||||
 | 
					            get_target_outputs(":electron_worker_bundle")
 | 
				
			||||||
  outputs = [
 | 
					  outputs = [
 | 
				
			||||||
    "$root_out_dir/resources/electron.asar",
 | 
					    "$root_out_dir/resources/electron.asar",
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,19 +0,0 @@
 | 
				
			||||||
template("js_wrap") {
 | 
					 | 
				
			||||||
  assert(defined(invoker.inputs), "Need input JS script")
 | 
					 | 
				
			||||||
  assert(defined(invoker.outputs), "Need output JS script")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  action(target_name) {
 | 
					 | 
				
			||||||
    forward_variables_from(invoker,
 | 
					 | 
				
			||||||
                           [
 | 
					 | 
				
			||||||
                             "deps",
 | 
					 | 
				
			||||||
                             "public_deps",
 | 
					 | 
				
			||||||
                             "sources",
 | 
					 | 
				
			||||||
                             "inputs",
 | 
					 | 
				
			||||||
                             "outputs",
 | 
					 | 
				
			||||||
                           ])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    script = "//electron/build/js_wrap.py"
 | 
					 | 
				
			||||||
    args = [ "--in" ] + rebase_path(invoker.inputs) + [ "--out" ] +
 | 
					 | 
				
			||||||
           rebase_path(invoker.outputs)
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,19 +0,0 @@
 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
in_start = sys.argv.index("--in") + 1
 | 
					 | 
				
			||||||
out_start = sys.argv.index("--out") + 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
in_bundles = sys.argv[in_start:out_start - 1]
 | 
					 | 
				
			||||||
out_bundles = sys.argv[out_start:]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if len(in_bundles) != len(out_bundles):
 | 
					 | 
				
			||||||
  print("--out and --in must provide the same number of arguments")
 | 
					 | 
				
			||||||
  sys.exit(1)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
for i in range(len(in_bundles)):
 | 
					 | 
				
			||||||
  in_bundle = in_bundles[i]
 | 
					 | 
				
			||||||
  out_path = out_bundles[i]
 | 
					 | 
				
			||||||
  with open(in_bundle, 'r') as f:
 | 
					 | 
				
			||||||
    lines = ["(function(){var exports={},module={exports};"] + f.readlines() + ["})();"]
 | 
					 | 
				
			||||||
    with open(out_path, 'w') as out_f:
 | 
					 | 
				
			||||||
      out_f.writelines(lines)
 | 
					 | 
				
			||||||
							
								
								
									
										2
									
								
								build/webpack/get-outputs.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								build/webpack/get-outputs.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					process.env.PRINT_WEBPACK_GRAPH = true
 | 
				
			||||||
 | 
					require('./run-compiler')
 | 
				
			||||||
							
								
								
									
										22
									
								
								build/webpack/run-compiler.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								build/webpack/run-compiler.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,22 @@
 | 
				
			||||||
 | 
					const path = require('path')
 | 
				
			||||||
 | 
					const webpack = require('webpack')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const configPath = process.argv[2]
 | 
				
			||||||
 | 
					const outPath = path.resolve(process.argv[3])
 | 
				
			||||||
 | 
					const config = require(configPath)
 | 
				
			||||||
 | 
					config.output = {
 | 
				
			||||||
 | 
					  path: path.dirname(outPath),
 | 
				
			||||||
 | 
					  filename: path.basename(outPath)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					webpack(config, (err, stats) => {
 | 
				
			||||||
 | 
					  if (err) {
 | 
				
			||||||
 | 
					    console.error(err)
 | 
				
			||||||
 | 
					    process.exit(1)
 | 
				
			||||||
 | 
					  } else if (stats.hasErrors()) {
 | 
				
			||||||
 | 
					    console.error(stats.toString('normal'))
 | 
				
			||||||
 | 
					    process.exit(1)
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    process.exit(0)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
							
								
								
									
										80
									
								
								build/webpack/webpack.config.base.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								build/webpack/webpack.config.base.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,80 @@
 | 
				
			||||||
 | 
					const fs = require('fs')
 | 
				
			||||||
 | 
					const path = require('path')
 | 
				
			||||||
 | 
					const webpack = require('webpack')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const electronRoot = path.resolve(__dirname, '../..')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const onlyPrintingGraph = !!process.env.PRINT_WEBPACK_GRAPH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class AccessDependenciesPlugin {
 | 
				
			||||||
 | 
					  apply(compiler) {
 | 
				
			||||||
 | 
					    // Only hook into webpack when we are printing the dependency graph
 | 
				
			||||||
 | 
					    if (!onlyPrintingGraph) return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    compiler.hooks.compilation.tap('AccessDependenciesPlugin', compilation => {
 | 
				
			||||||
 | 
					      compilation.hooks.finishModules.tap('AccessDependenciesPlugin', modules => {
 | 
				
			||||||
 | 
					        const filePaths = modules.map(m => m.resource).filter(p => p).map(p => path.relative(electronRoot, p))
 | 
				
			||||||
 | 
					        console.info(JSON.stringify(filePaths))
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = ({
 | 
				
			||||||
 | 
					  alwaysHasNode,
 | 
				
			||||||
 | 
					  loadElectronFromAlternateTarget,
 | 
				
			||||||
 | 
					  targetDeletesNodeGlobals,
 | 
				
			||||||
 | 
					  target
 | 
				
			||||||
 | 
					}) => {
 | 
				
			||||||
 | 
					  let entry = path.resolve(electronRoot, 'lib', target, 'init.ts')
 | 
				
			||||||
 | 
					  if (!fs.existsSync(entry)) {
 | 
				
			||||||
 | 
					    entry = path.resolve(electronRoot, 'lib', target, 'init.js')
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return ({
 | 
				
			||||||
 | 
					    mode: 'development',
 | 
				
			||||||
 | 
					    devtool: 'inline-source-map',
 | 
				
			||||||
 | 
					    entry,
 | 
				
			||||||
 | 
					    target: alwaysHasNode ? 'node' : 'web',
 | 
				
			||||||
 | 
					    output: {
 | 
				
			||||||
 | 
					      filename: `${target}.bundle.js`
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    resolve: {
 | 
				
			||||||
 | 
					      alias: {
 | 
				
			||||||
 | 
					        '@electron/internal': path.resolve(electronRoot, 'lib'),
 | 
				
			||||||
 | 
					        'electron': path.resolve(electronRoot, 'lib', loadElectronFromAlternateTarget || target, 'api', 'exports', 'electron.js'),
 | 
				
			||||||
 | 
					        // Force timers to resolve to our dependency that doens't use window.postMessage
 | 
				
			||||||
 | 
					        'timers': path.resolve(electronRoot, 'node_modules', 'timers-browserify', 'main.js')
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      extensions: ['.ts', '.js']
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    module: {
 | 
				
			||||||
 | 
					      rules: [{
 | 
				
			||||||
 | 
					        test: /\.ts$/,
 | 
				
			||||||
 | 
					        loader: 'ts-loader',
 | 
				
			||||||
 | 
					        options: {
 | 
				
			||||||
 | 
					          configFile: path.resolve(electronRoot, 'tsconfig.electron.json'),
 | 
				
			||||||
 | 
					          transpileOnly: onlyPrintingGraph,
 | 
				
			||||||
 | 
					          ignoreDiagnostics: [6059]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    node: {
 | 
				
			||||||
 | 
					      __dirname: false,
 | 
				
			||||||
 | 
					      __filename: false,
 | 
				
			||||||
 | 
					      // We provide our own "timers" import above, any usage of setImmediate inside
 | 
				
			||||||
 | 
					      // one of our renderer bundles should import it from the 'timers' package
 | 
				
			||||||
 | 
					      setImmediate: false,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    plugins: [
 | 
				
			||||||
 | 
					      new AccessDependenciesPlugin(),
 | 
				
			||||||
 | 
					      ...(targetDeletesNodeGlobals ? [
 | 
				
			||||||
 | 
					        new webpack.ProvidePlugin({
 | 
				
			||||||
 | 
					          process: ['@electron/internal/renderer/webpack-provider', 'process'],
 | 
				
			||||||
 | 
					          global: ['@electron/internal/renderer/webpack-provider', '_global'],
 | 
				
			||||||
 | 
					          Buffer: ['@electron/internal/renderer/webpack-provider', 'Buffer'],
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      ] : [])
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										4
									
								
								build/webpack/webpack.config.browser.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								build/webpack/webpack.config.browser.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					module.exports = require('./webpack.config.base')({
 | 
				
			||||||
 | 
					  target: 'browser',
 | 
				
			||||||
 | 
					  alwaysHasNode: true
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
							
								
								
									
										4
									
								
								build/webpack/webpack.config.content_script.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								build/webpack/webpack.config.content_script.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					module.exports = require('./webpack.config.base')({
 | 
				
			||||||
 | 
					  target: 'content_script',
 | 
				
			||||||
 | 
					  alwaysHasNode: false
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
							
								
								
									
										4
									
								
								build/webpack/webpack.config.isolated_renderer.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								build/webpack/webpack.config.isolated_renderer.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					module.exports = require('./webpack.config.base')({
 | 
				
			||||||
 | 
					  target: 'isolated_renderer',
 | 
				
			||||||
 | 
					  alwaysHasNode: false
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
							
								
								
									
										5
									
								
								build/webpack/webpack.config.renderer.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								build/webpack/webpack.config.renderer.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					module.exports = require('./webpack.config.base')({
 | 
				
			||||||
 | 
					  target: 'renderer',
 | 
				
			||||||
 | 
					  alwaysHasNode: true,
 | 
				
			||||||
 | 
					  targetDeletesNodeGlobals: true
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
							
								
								
									
										4
									
								
								build/webpack/webpack.config.sandboxed_renderer.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								build/webpack/webpack.config.sandboxed_renderer.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					module.exports = require('./webpack.config.base')({
 | 
				
			||||||
 | 
					  target: 'sandboxed_renderer',
 | 
				
			||||||
 | 
					  alwaysHasNode: false
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
							
								
								
									
										6
									
								
								build/webpack/webpack.config.worker.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								build/webpack/webpack.config.worker.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					module.exports = require('./webpack.config.base')({
 | 
				
			||||||
 | 
					  target: 'worker',
 | 
				
			||||||
 | 
					  loadElectronFromAlternateTarget: 'renderer',
 | 
				
			||||||
 | 
					  alwaysHasNode: true,
 | 
				
			||||||
 | 
					  targetDeletesNodeGlobals: true
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
							
								
								
									
										35
									
								
								build/webpack/webpack.gni
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								build/webpack/webpack.gni
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,35 @@
 | 
				
			||||||
 | 
					import("../npm.gni")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template("webpack_build") {
 | 
				
			||||||
 | 
					  assert(defined(invoker.config_file), "Need webpack config file to run")
 | 
				
			||||||
 | 
					  assert(defined(invoker.out_file), "Need output file to run")
 | 
				
			||||||
 | 
					  assert(defined(invoker.inputs), "Need webpack inputs to run")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  npm_action(target_name) {
 | 
				
			||||||
 | 
					    forward_variables_from(invoker,
 | 
				
			||||||
 | 
					                           [
 | 
				
			||||||
 | 
					                             "deps",
 | 
				
			||||||
 | 
					                             "public_deps",
 | 
				
			||||||
 | 
					                           ])
 | 
				
			||||||
 | 
					    script = "webpack"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    inputs = [
 | 
				
			||||||
 | 
					               invoker.config_file,
 | 
				
			||||||
 | 
					               "//electron/build/webpack/webpack.config.base.js",
 | 
				
			||||||
 | 
					               "//electron/tsconfig.json",
 | 
				
			||||||
 | 
					               "//electron/yarn.lock",
 | 
				
			||||||
 | 
					               "//electron/typings/internal-ambient.d.ts",
 | 
				
			||||||
 | 
					               "//electron/typings/internal-electron.d.ts",
 | 
				
			||||||
 | 
					               "//electron/typings/internal-helpers.d.ts",
 | 
				
			||||||
 | 
					             ] + invoker.inputs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    args = [
 | 
				
			||||||
 | 
					      rebase_path(invoker.config_file),
 | 
				
			||||||
 | 
					      rebase_path(invoker.out_file),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    outputs = [
 | 
				
			||||||
 | 
					      invoker.out_file,
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -119,8 +119,7 @@ Important things to notice in the preload script:
 | 
				
			||||||
  `remote` and `ipcRenderer` modules.
 | 
					  `remote` and `ipcRenderer` modules.
 | 
				
			||||||
- The preload script must be contained in a single script, but it is possible to have
 | 
					- The preload script must be contained in a single script, but it is possible to have
 | 
				
			||||||
  complex preload code composed with multiple modules by using a tool like
 | 
					  complex preload code composed with multiple modules by using a tool like
 | 
				
			||||||
  browserify, as explained below. In fact, browserify is already used by
 | 
					  webpack or browserify. An example of using browserify is below.
 | 
				
			||||||
  Electron to provide a node-like environment to the preload script.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
To create a browserify bundle and use it as a preload script, something like
 | 
					To create a browserify bundle and use it as a preload script, something like
 | 
				
			||||||
the following should be used:
 | 
					the following should be used:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -112,13 +112,16 @@ auto_filenames = {
 | 
				
			||||||
    "docs/api/structures/web-source.md",
 | 
					    "docs/api/structures/web-source.md",
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  sandbox_browserify_deps = [
 | 
					  sandbox_bundle_deps = [
 | 
				
			||||||
    "lib/browser/api/module-list.js",
 | 
					    "lib/browser/api/module-keys.js",
 | 
				
			||||||
 | 
					    "lib/common/api/clipboard.js",
 | 
				
			||||||
    "lib/common/api/deprecate.ts",
 | 
					    "lib/common/api/deprecate.ts",
 | 
				
			||||||
    "lib/common/api/is-promise.js",
 | 
					    "lib/common/api/is-promise.js",
 | 
				
			||||||
    "lib/common/api/module-list.js",
 | 
					    "lib/common/api/module-list.js",
 | 
				
			||||||
    "lib/common/api/native-image.js",
 | 
					    "lib/common/api/native-image.js",
 | 
				
			||||||
 | 
					    "lib/common/api/shell.js",
 | 
				
			||||||
    "lib/common/buffer-utils.js",
 | 
					    "lib/common/buffer-utils.js",
 | 
				
			||||||
 | 
					    "lib/common/clipboard-utils.js",
 | 
				
			||||||
    "lib/common/crash-reporter.js",
 | 
					    "lib/common/crash-reporter.js",
 | 
				
			||||||
    "lib/common/electron-binding-setup.ts",
 | 
					    "lib/common/electron-binding-setup.ts",
 | 
				
			||||||
    "lib/common/error-utils.js",
 | 
					    "lib/common/error-utils.js",
 | 
				
			||||||
| 
						 | 
					@ -142,29 +145,31 @@ auto_filenames = {
 | 
				
			||||||
    "lib/renderer/web-frame-init.ts",
 | 
					    "lib/renderer/web-frame-init.ts",
 | 
				
			||||||
    "lib/renderer/web-view/guest-view-internal.ts",
 | 
					    "lib/renderer/web-view/guest-view-internal.ts",
 | 
				
			||||||
    "lib/renderer/web-view/web-view-attributes.ts",
 | 
					    "lib/renderer/web-view/web-view-attributes.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/web-view/web-view-constants.ts",
 | 
				
			||||||
    "lib/renderer/web-view/web-view-element.ts",
 | 
					    "lib/renderer/web-view/web-view-element.ts",
 | 
				
			||||||
    "lib/renderer/web-view/web-view-impl.ts",
 | 
					    "lib/renderer/web-view/web-view-impl.ts",
 | 
				
			||||||
    "lib/renderer/web-view/web-view-init.ts",
 | 
					    "lib/renderer/web-view/web-view-init.ts",
 | 
				
			||||||
    "lib/sandboxed_renderer/api/exports/electron.js",
 | 
					    "lib/sandboxed_renderer/api/exports/electron.js",
 | 
				
			||||||
    "lib/sandboxed_renderer/api/module-list.js",
 | 
					    "lib/sandboxed_renderer/api/module-list.js",
 | 
				
			||||||
    "lib/sandboxed_renderer/init.js",
 | 
					    "lib/sandboxed_renderer/init.js",
 | 
				
			||||||
    "tsconfig.json",
 | 
					 | 
				
			||||||
    "tsconfig.electron.json",
 | 
					 | 
				
			||||||
    "package.json",
 | 
					    "package.json",
 | 
				
			||||||
 | 
					    "tsconfig.electron.json",
 | 
				
			||||||
 | 
					    "tsconfig.json",
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  isolated_browserify_deps = [
 | 
					  isolated_bundle_deps = [
 | 
				
			||||||
    "lib/common/electron-binding-setup.ts",
 | 
					    "lib/common/electron-binding-setup.ts",
 | 
				
			||||||
    "lib/isolated_renderer/init.js",
 | 
					    "lib/isolated_renderer/init.js",
 | 
				
			||||||
    "lib/renderer/ipc-renderer-internal.ts",
 | 
					    "lib/renderer/ipc-renderer-internal.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/web-view/web-view-constants.ts",
 | 
				
			||||||
    "lib/renderer/web-view/web-view-element.ts",
 | 
					    "lib/renderer/web-view/web-view-element.ts",
 | 
				
			||||||
    "lib/renderer/window-setup.ts",
 | 
					    "lib/renderer/window-setup.ts",
 | 
				
			||||||
    "tsconfig.json",
 | 
					 | 
				
			||||||
    "tsconfig.electron.json",
 | 
					 | 
				
			||||||
    "package.json",
 | 
					    "package.json",
 | 
				
			||||||
 | 
					    "tsconfig.electron.json",
 | 
				
			||||||
 | 
					    "tsconfig.json",
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  context_script_browserify_deps = [
 | 
					  content_script_bundle_deps = [
 | 
				
			||||||
    "lib/common/electron-binding-setup.ts",
 | 
					    "lib/common/electron-binding-setup.ts",
 | 
				
			||||||
    "lib/common/error-utils.js",
 | 
					    "lib/common/error-utils.js",
 | 
				
			||||||
    "lib/content_script/init.js",
 | 
					    "lib/content_script/init.js",
 | 
				
			||||||
| 
						 | 
					@ -176,8 +181,172 @@ auto_filenames = {
 | 
				
			||||||
    "lib/renderer/ipc-renderer-internal-utils.ts",
 | 
					    "lib/renderer/ipc-renderer-internal-utils.ts",
 | 
				
			||||||
    "lib/renderer/ipc-renderer-internal.ts",
 | 
					    "lib/renderer/ipc-renderer-internal.ts",
 | 
				
			||||||
    "lib/renderer/window-setup.ts",
 | 
					    "lib/renderer/window-setup.ts",
 | 
				
			||||||
    "tsconfig.json",
 | 
					 | 
				
			||||||
    "tsconfig.electron.json",
 | 
					 | 
				
			||||||
    "package.json",
 | 
					    "package.json",
 | 
				
			||||||
 | 
					    "tsconfig.electron.json",
 | 
				
			||||||
 | 
					    "tsconfig.json",
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  browser_bundle_deps = [
 | 
				
			||||||
 | 
					    "lib/browser/api/app.ts",
 | 
				
			||||||
 | 
					    "lib/browser/api/auto-updater.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/auto-updater/auto-updater-native.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/auto-updater/auto-updater-win.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/auto-updater/squirrel-update-win.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/browser-view.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/browser-window.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/content-tracing.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/crash-reporter.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/dialog.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/exports/electron.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/global-shortcut.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/in-app-purchase.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/ipc-main.ts",
 | 
				
			||||||
 | 
					    "lib/browser/api/menu-item-roles.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/menu-item.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/menu-utils.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/menu.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/module-list.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/net-log.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/net.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/notification.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/power-monitor.ts",
 | 
				
			||||||
 | 
					    "lib/browser/api/power-save-blocker.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/protocol.ts",
 | 
				
			||||||
 | 
					    "lib/browser/api/screen.ts",
 | 
				
			||||||
 | 
					    "lib/browser/api/session.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/system-preferences.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/top-level-window.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/touch-bar.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/tray.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/view.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/views/box-layout.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/views/button.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/views/label-button.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/views/layout-manager.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/views/md-text-button.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/views/resize-area.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/views/text-field.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/web-contents-view.js",
 | 
				
			||||||
 | 
					    "lib/browser/api/web-contents.js",
 | 
				
			||||||
 | 
					    "lib/browser/chrome-extension.js",
 | 
				
			||||||
 | 
					    "lib/browser/crash-reporter-init.js",
 | 
				
			||||||
 | 
					    "lib/browser/default-menu.ts",
 | 
				
			||||||
 | 
					    "lib/browser/desktop-capturer.js",
 | 
				
			||||||
 | 
					    "lib/browser/devtools.js",
 | 
				
			||||||
 | 
					    "lib/browser/guest-view-manager.js",
 | 
				
			||||||
 | 
					    "lib/browser/guest-window-manager.js",
 | 
				
			||||||
 | 
					    "lib/browser/init.ts",
 | 
				
			||||||
 | 
					    "lib/browser/ipc-main-internal-utils.ts",
 | 
				
			||||||
 | 
					    "lib/browser/ipc-main-internal.ts",
 | 
				
			||||||
 | 
					    "lib/browser/navigation-controller.js",
 | 
				
			||||||
 | 
					    "lib/browser/objects-registry.js",
 | 
				
			||||||
 | 
					    "lib/browser/rpc-server.js",
 | 
				
			||||||
 | 
					    "lib/browser/utils.ts",
 | 
				
			||||||
 | 
					    "lib/common/api/clipboard.js",
 | 
				
			||||||
 | 
					    "lib/common/api/deprecate.ts",
 | 
				
			||||||
 | 
					    "lib/common/api/exports/electron.js",
 | 
				
			||||||
 | 
					    "lib/common/api/is-promise.js",
 | 
				
			||||||
 | 
					    "lib/common/api/module-list.js",
 | 
				
			||||||
 | 
					    "lib/common/api/native-image.js",
 | 
				
			||||||
 | 
					    "lib/common/api/shell.js",
 | 
				
			||||||
 | 
					    "lib/common/buffer-utils.js",
 | 
				
			||||||
 | 
					    "lib/common/clipboard-utils.js",
 | 
				
			||||||
 | 
					    "lib/common/crash-reporter.js",
 | 
				
			||||||
 | 
					    "lib/common/electron-binding-setup.ts",
 | 
				
			||||||
 | 
					    "lib/common/error-utils.js",
 | 
				
			||||||
 | 
					    "lib/common/init.ts",
 | 
				
			||||||
 | 
					    "lib/common/parse-features-string.js",
 | 
				
			||||||
 | 
					    "lib/common/path-utils.ts",
 | 
				
			||||||
 | 
					    "lib/common/reset-search-paths.ts",
 | 
				
			||||||
 | 
					    "lib/common/web-view-methods.js",
 | 
				
			||||||
 | 
					    "lib/renderer/ipc-renderer-internal-utils.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/ipc-renderer-internal.ts",
 | 
				
			||||||
 | 
					    "package.json",
 | 
				
			||||||
 | 
					    "tsconfig.electron.json",
 | 
				
			||||||
 | 
					    "tsconfig.json",
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  renderer_bundle_deps = [
 | 
				
			||||||
 | 
					    "lib/browser/api/module-keys.js",
 | 
				
			||||||
 | 
					    "lib/common/api/clipboard.js",
 | 
				
			||||||
 | 
					    "lib/common/api/deprecate.ts",
 | 
				
			||||||
 | 
					    "lib/common/api/exports/electron.js",
 | 
				
			||||||
 | 
					    "lib/common/api/is-promise.js",
 | 
				
			||||||
 | 
					    "lib/common/api/module-list.js",
 | 
				
			||||||
 | 
					    "lib/common/api/native-image.js",
 | 
				
			||||||
 | 
					    "lib/common/api/shell.js",
 | 
				
			||||||
 | 
					    "lib/common/buffer-utils.js",
 | 
				
			||||||
 | 
					    "lib/common/clipboard-utils.js",
 | 
				
			||||||
 | 
					    "lib/common/crash-reporter.js",
 | 
				
			||||||
 | 
					    "lib/common/electron-binding-setup.ts",
 | 
				
			||||||
 | 
					    "lib/common/error-utils.js",
 | 
				
			||||||
 | 
					    "lib/common/init.ts",
 | 
				
			||||||
 | 
					    "lib/common/path-utils.ts",
 | 
				
			||||||
 | 
					    "lib/common/reset-search-paths.ts",
 | 
				
			||||||
 | 
					    "lib/common/web-view-methods.js",
 | 
				
			||||||
 | 
					    "lib/renderer/api/crash-reporter.js",
 | 
				
			||||||
 | 
					    "lib/renderer/api/desktop-capturer.js",
 | 
				
			||||||
 | 
					    "lib/renderer/api/exports/electron.js",
 | 
				
			||||||
 | 
					    "lib/renderer/api/ipc-renderer.js",
 | 
				
			||||||
 | 
					    "lib/renderer/api/module-list.js",
 | 
				
			||||||
 | 
					    "lib/renderer/api/remote.js",
 | 
				
			||||||
 | 
					    "lib/renderer/api/web-frame.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/callbacks-registry.js",
 | 
				
			||||||
 | 
					    "lib/renderer/chrome-api.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/content-scripts-injector.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/extensions/event.js",
 | 
				
			||||||
 | 
					    "lib/renderer/extensions/i18n.js",
 | 
				
			||||||
 | 
					    "lib/renderer/extensions/storage.js",
 | 
				
			||||||
 | 
					    "lib/renderer/extensions/web-navigation.js",
 | 
				
			||||||
 | 
					    "lib/renderer/init.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/inspector.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/ipc-renderer-internal-utils.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/ipc-renderer-internal.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/security-warnings.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/web-frame-init.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/web-view/guest-view-internal.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/web-view/web-view-attributes.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/web-view/web-view-constants.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/web-view/web-view-element.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/web-view/web-view-impl.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/web-view/web-view-init.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/webpack-provider.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/window-setup.ts",
 | 
				
			||||||
 | 
					    "package.json",
 | 
				
			||||||
 | 
					    "tsconfig.electron.json",
 | 
				
			||||||
 | 
					    "tsconfig.json",
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  worker_bundle_deps = [
 | 
				
			||||||
 | 
					    "lib/browser/api/module-keys.js",
 | 
				
			||||||
 | 
					    "lib/common/api/clipboard.js",
 | 
				
			||||||
 | 
					    "lib/common/api/deprecate.ts",
 | 
				
			||||||
 | 
					    "lib/common/api/exports/electron.js",
 | 
				
			||||||
 | 
					    "lib/common/api/is-promise.js",
 | 
				
			||||||
 | 
					    "lib/common/api/module-list.js",
 | 
				
			||||||
 | 
					    "lib/common/api/native-image.js",
 | 
				
			||||||
 | 
					    "lib/common/api/shell.js",
 | 
				
			||||||
 | 
					    "lib/common/buffer-utils.js",
 | 
				
			||||||
 | 
					    "lib/common/clipboard-utils.js",
 | 
				
			||||||
 | 
					    "lib/common/crash-reporter.js",
 | 
				
			||||||
 | 
					    "lib/common/electron-binding-setup.ts",
 | 
				
			||||||
 | 
					    "lib/common/error-utils.js",
 | 
				
			||||||
 | 
					    "lib/common/init.ts",
 | 
				
			||||||
 | 
					    "lib/common/reset-search-paths.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/api/crash-reporter.js",
 | 
				
			||||||
 | 
					    "lib/renderer/api/desktop-capturer.js",
 | 
				
			||||||
 | 
					    "lib/renderer/api/exports/electron.js",
 | 
				
			||||||
 | 
					    "lib/renderer/api/ipc-renderer.js",
 | 
				
			||||||
 | 
					    "lib/renderer/api/module-list.js",
 | 
				
			||||||
 | 
					    "lib/renderer/api/remote.js",
 | 
				
			||||||
 | 
					    "lib/renderer/api/web-frame.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/callbacks-registry.js",
 | 
				
			||||||
 | 
					    "lib/renderer/ipc-renderer-internal-utils.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/ipc-renderer-internal.ts",
 | 
				
			||||||
 | 
					    "lib/renderer/webpack-provider.ts",
 | 
				
			||||||
 | 
					    "lib/worker/init.js",
 | 
				
			||||||
 | 
					    "package.json",
 | 
				
			||||||
 | 
					    "tsconfig.electron.json",
 | 
				
			||||||
 | 
					    "tsconfig.json",
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,98 +1,4 @@
 | 
				
			||||||
filenames = {
 | 
					filenames = {
 | 
				
			||||||
  js_sources = [
 | 
					 | 
				
			||||||
    "lib/browser/api/app.ts",
 | 
					 | 
				
			||||||
    "lib/browser/api/auto-updater.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/auto-updater/auto-updater-native.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/auto-updater/auto-updater-win.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/auto-updater/squirrel-update-win.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/browser-view.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/browser-window.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/content-tracing.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/crash-reporter.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/dialog.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/exports/electron.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/global-shortcut.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/ipc-main.ts",
 | 
					 | 
				
			||||||
    "lib/browser/api/in-app-purchase.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/menu-item-roles.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/menu-item.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/menu-utils.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/menu.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/module-list.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/net.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/net-log.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/notification.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/power-monitor.ts",
 | 
					 | 
				
			||||||
    "lib/browser/api/power-save-blocker.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/protocol.ts",
 | 
					 | 
				
			||||||
    "lib/browser/api/screen.ts",
 | 
					 | 
				
			||||||
    "lib/browser/api/session.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/system-preferences.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/top-level-window.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/touch-bar.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/tray.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/view.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/web-contents.js",
 | 
					 | 
				
			||||||
    "lib/browser/api/web-contents-view.js",
 | 
					 | 
				
			||||||
    "lib/browser/devtools.js",
 | 
					 | 
				
			||||||
    "lib/browser/chrome-extension.js",
 | 
					 | 
				
			||||||
    "lib/browser/crash-reporter-init.js",
 | 
					 | 
				
			||||||
    "lib/browser/default-menu.ts",
 | 
					 | 
				
			||||||
    "lib/browser/guest-view-manager.js",
 | 
					 | 
				
			||||||
    "lib/browser/guest-window-manager.js",
 | 
					 | 
				
			||||||
    "lib/browser/init.ts",
 | 
					 | 
				
			||||||
    "lib/browser/ipc-main-internal-utils.ts",
 | 
					 | 
				
			||||||
    "lib/browser/ipc-main-internal.ts",
 | 
					 | 
				
			||||||
    "lib/browser/navigation-controller.js",
 | 
					 | 
				
			||||||
    "lib/browser/objects-registry.js",
 | 
					 | 
				
			||||||
    "lib/browser/rpc-server.js",
 | 
					 | 
				
			||||||
    "lib/browser/utils.ts",
 | 
					 | 
				
			||||||
    "lib/common/api/clipboard.js",
 | 
					 | 
				
			||||||
    "lib/common/api/deprecate.ts",
 | 
					 | 
				
			||||||
    "lib/common/api/is-promise.js",
 | 
					 | 
				
			||||||
    "lib/common/api/exports/electron.js",
 | 
					 | 
				
			||||||
    "lib/common/api/module-list.js",
 | 
					 | 
				
			||||||
    "lib/common/api/native-image.js",
 | 
					 | 
				
			||||||
    "lib/common/api/shell.js",
 | 
					 | 
				
			||||||
    "lib/common/buffer-utils.js",
 | 
					 | 
				
			||||||
    "lib/common/clipboard-utils.js",
 | 
					 | 
				
			||||||
    "lib/common/crash-reporter.js",
 | 
					 | 
				
			||||||
    "lib/common/electron-binding-setup.ts",
 | 
					 | 
				
			||||||
    "lib/common/error-utils.js",
 | 
					 | 
				
			||||||
    "lib/common/init.ts",
 | 
					 | 
				
			||||||
    "lib/common/parse-features-string.js",
 | 
					 | 
				
			||||||
    "lib/common/path-utils.ts",
 | 
					 | 
				
			||||||
    "lib/common/reset-search-paths.ts",
 | 
					 | 
				
			||||||
    "lib/common/web-view-methods.js",
 | 
					 | 
				
			||||||
    "lib/renderer/callbacks-registry.js",
 | 
					 | 
				
			||||||
    "lib/renderer/chrome-api.ts",
 | 
					 | 
				
			||||||
    "lib/renderer/content-scripts-injector.ts",
 | 
					 | 
				
			||||||
    "lib/renderer/init.ts",
 | 
					 | 
				
			||||||
    "lib/renderer/inspector.ts",
 | 
					 | 
				
			||||||
    "lib/renderer/ipc-renderer-internal-utils.ts",
 | 
					 | 
				
			||||||
    "lib/renderer/ipc-renderer-internal.ts",
 | 
					 | 
				
			||||||
    "lib/renderer/security-warnings.ts",
 | 
					 | 
				
			||||||
    "lib/renderer/window-setup.ts",
 | 
					 | 
				
			||||||
    "lib/renderer/web-frame-init.ts",
 | 
					 | 
				
			||||||
    "lib/renderer/web-view/guest-view-internal.ts",
 | 
					 | 
				
			||||||
    "lib/renderer/web-view/web-view-attributes.ts",
 | 
					 | 
				
			||||||
    "lib/renderer/web-view/web-view-constants.ts",
 | 
					 | 
				
			||||||
    "lib/renderer/web-view/web-view-element.ts",
 | 
					 | 
				
			||||||
    "lib/renderer/web-view/web-view-impl.ts",
 | 
					 | 
				
			||||||
    "lib/renderer/web-view/web-view-init.ts",
 | 
					 | 
				
			||||||
    "lib/renderer/api/exports/electron.js",
 | 
					 | 
				
			||||||
    "lib/renderer/api/crash-reporter.js",
 | 
					 | 
				
			||||||
    "lib/renderer/api/ipc-renderer.js",
 | 
					 | 
				
			||||||
    "lib/renderer/api/module-list.js",
 | 
					 | 
				
			||||||
    "lib/renderer/api/remote.js",
 | 
					 | 
				
			||||||
    "lib/renderer/api/web-frame.ts",
 | 
					 | 
				
			||||||
    "lib/renderer/extensions/event.js",
 | 
					 | 
				
			||||||
    "lib/renderer/extensions/i18n.js",
 | 
					 | 
				
			||||||
    "lib/renderer/extensions/storage.js",
 | 
					 | 
				
			||||||
    "lib/renderer/extensions/web-navigation.js",
 | 
					 | 
				
			||||||
    "lib/worker/init.js",
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  default_app_ts_sources = [
 | 
					  default_app_ts_sources = [
 | 
				
			||||||
    "default_app/default_app.ts",
 | 
					    "default_app/default_app.ts",
 | 
				
			||||||
    "default_app/index.ts",
 | 
					    "default_app/index.ts",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
import * as path from 'path'
 | 
					import * as path from 'path'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import * as electron from 'electron'
 | 
					import { deprecate, Menu } from 'electron'
 | 
				
			||||||
import { EventEmitter } from 'events'
 | 
					import { EventEmitter } from 'events'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const bindings = process.electronBinding('app')
 | 
					const bindings = process.electronBinding('app')
 | 
				
			||||||
| 
						 | 
					@ -10,8 +10,6 @@ const { app, App } = bindings
 | 
				
			||||||
// Only one app object permitted.
 | 
					// Only one app object permitted.
 | 
				
			||||||
export default app
 | 
					export default app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const { deprecate, Menu } = electron
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let dockMenu: Electron.Menu | null = null
 | 
					let dockMenu: Electron.Menu | null = null
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// App is an EventEmitter.
 | 
					// App is an EventEmitter.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,11 +10,6 @@ common.defineProperties(exports)
 | 
				
			||||||
for (const module of moduleList) {
 | 
					for (const module of moduleList) {
 | 
				
			||||||
  Object.defineProperty(exports, module.name, {
 | 
					  Object.defineProperty(exports, module.name, {
 | 
				
			||||||
    enumerable: !module.private,
 | 
					    enumerable: !module.private,
 | 
				
			||||||
    get: common.memoizedGetter(() => {
 | 
					    get: common.handleESModule(module.loader)
 | 
				
			||||||
      const value = require(`@electron/internal/browser/api/${module.file}.js`)
 | 
					 | 
				
			||||||
      // Handle Typescript modules with an "export default X" statement
 | 
					 | 
				
			||||||
      if (value.__esModule) return value.default
 | 
					 | 
				
			||||||
      return value
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										51
									
								
								lib/browser/api/module-keys.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								lib/browser/api/module-keys.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,51 @@
 | 
				
			||||||
 | 
					'use strict'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TODO: Figure out a way to not duplicate this information between here and module-list
 | 
				
			||||||
 | 
					// It is currently duplicated as module-list "require"s all the browser API file and the
 | 
				
			||||||
 | 
					// remote module in the renderer process depends on that file.  As a result webpack
 | 
				
			||||||
 | 
					// includes all the browser API files in the renderer process as well and we want to avoid that
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const features = process.electronBinding('features')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Browser side modules, please sort alphabetically.
 | 
				
			||||||
 | 
					module.exports = [
 | 
				
			||||||
 | 
					  { name: 'app' },
 | 
				
			||||||
 | 
					  { name: 'autoUpdater' },
 | 
				
			||||||
 | 
					  { name: 'BrowserView' },
 | 
				
			||||||
 | 
					  { name: 'BrowserWindow' },
 | 
				
			||||||
 | 
					  { name: 'contentTracing' },
 | 
				
			||||||
 | 
					  { name: 'crashReporter' },
 | 
				
			||||||
 | 
					  { name: 'dialog' },
 | 
				
			||||||
 | 
					  { name: 'globalShortcut' },
 | 
				
			||||||
 | 
					  { name: 'ipcMain' },
 | 
				
			||||||
 | 
					  { name: 'inAppPurchase' },
 | 
				
			||||||
 | 
					  { name: 'Menu' },
 | 
				
			||||||
 | 
					  { name: 'MenuItem' },
 | 
				
			||||||
 | 
					  { name: 'net' },
 | 
				
			||||||
 | 
					  { name: 'netLog' },
 | 
				
			||||||
 | 
					  { name: 'Notification' },
 | 
				
			||||||
 | 
					  { name: 'powerMonitor' },
 | 
				
			||||||
 | 
					  { name: 'powerSaveBlocker' },
 | 
				
			||||||
 | 
					  { name: 'protocol' },
 | 
				
			||||||
 | 
					  { name: 'screen' },
 | 
				
			||||||
 | 
					  { name: 'session' },
 | 
				
			||||||
 | 
					  { name: 'systemPreferences' },
 | 
				
			||||||
 | 
					  { name: 'TopLevelWindow' },
 | 
				
			||||||
 | 
					  { name: 'TouchBar' },
 | 
				
			||||||
 | 
					  { name: 'Tray' },
 | 
				
			||||||
 | 
					  { name: 'View' },
 | 
				
			||||||
 | 
					  { name: 'webContents' },
 | 
				
			||||||
 | 
					  { name: 'WebContentsView' }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (features.isViewApiEnabled()) {
 | 
				
			||||||
 | 
					  module.exports.push(
 | 
				
			||||||
 | 
					    { name: 'BoxLayout' },
 | 
				
			||||||
 | 
					    { name: 'Button' },
 | 
				
			||||||
 | 
					    { name: 'LabelButton' },
 | 
				
			||||||
 | 
					    { name: 'LayoutManager' },
 | 
				
			||||||
 | 
					    { name: 'MdTextButton' },
 | 
				
			||||||
 | 
					    { name: 'ResizeArea' },
 | 
				
			||||||
 | 
					    { name: 'TextField' }
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,46 +1,48 @@
 | 
				
			||||||
'use strict'
 | 
					'use strict'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TODO: Updating this file also required updating the module-keys file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const features = process.electronBinding('features')
 | 
					const features = process.electronBinding('features')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Browser side modules, please sort alphabetically.
 | 
					// Browser side modules, please sort alphabetically.
 | 
				
			||||||
module.exports = [
 | 
					module.exports = [
 | 
				
			||||||
  { name: 'app', file: 'app' },
 | 
					  { name: 'app', loader: () => require('./app') },
 | 
				
			||||||
  { name: 'autoUpdater', file: 'auto-updater' },
 | 
					  { name: 'autoUpdater', loader: () => require('./auto-updater') },
 | 
				
			||||||
  { name: 'BrowserView', file: 'browser-view' },
 | 
					  { name: 'BrowserView', loader: () => require('./browser-view') },
 | 
				
			||||||
  { name: 'BrowserWindow', file: 'browser-window' },
 | 
					  { name: 'BrowserWindow', loader: () => require('./browser-window') },
 | 
				
			||||||
  { name: 'contentTracing', file: 'content-tracing' },
 | 
					  { name: 'contentTracing', loader: () => require('./content-tracing') },
 | 
				
			||||||
  { name: 'crashReporter', file: 'crash-reporter' },
 | 
					  { name: 'crashReporter', loader: () => require('./crash-reporter') },
 | 
				
			||||||
  { name: 'dialog', file: 'dialog' },
 | 
					  { name: 'dialog', loader: () => require('./dialog') },
 | 
				
			||||||
  { name: 'globalShortcut', file: 'global-shortcut' },
 | 
					  { name: 'globalShortcut', loader: () => require('./global-shortcut') },
 | 
				
			||||||
  { name: 'ipcMain', file: 'ipc-main' },
 | 
					  { name: 'ipcMain', loader: () => require('./ipc-main') },
 | 
				
			||||||
  { name: 'inAppPurchase', file: 'in-app-purchase' },
 | 
					  { name: 'inAppPurchase', loader: () => require('./in-app-purchase') },
 | 
				
			||||||
  { name: 'Menu', file: 'menu' },
 | 
					  { name: 'Menu', loader: () => require('./menu') },
 | 
				
			||||||
  { name: 'MenuItem', file: 'menu-item' },
 | 
					  { name: 'MenuItem', loader: () => require('./menu-item') },
 | 
				
			||||||
  { name: 'net', file: 'net' },
 | 
					  { name: 'net', loader: () => require('./net') },
 | 
				
			||||||
  { name: 'netLog', file: 'net-log' },
 | 
					  { name: 'netLog', loader: () => require('./net-log') },
 | 
				
			||||||
  { name: 'Notification', file: 'notification' },
 | 
					  { name: 'Notification', loader: () => require('./notification') },
 | 
				
			||||||
  { name: 'powerMonitor', file: 'power-monitor' },
 | 
					  { name: 'powerMonitor', loader: () => require('./power-monitor') },
 | 
				
			||||||
  { name: 'powerSaveBlocker', file: 'power-save-blocker' },
 | 
					  { name: 'powerSaveBlocker', loader: () => require('./power-save-blocker') },
 | 
				
			||||||
  { name: 'protocol', file: 'protocol' },
 | 
					  { name: 'protocol', loader: () => require('./protocol') },
 | 
				
			||||||
  { name: 'screen', file: 'screen' },
 | 
					  { name: 'screen', loader: () => require('./screen') },
 | 
				
			||||||
  { name: 'session', file: 'session' },
 | 
					  { name: 'session', loader: () => require('./session') },
 | 
				
			||||||
  { name: 'systemPreferences', file: 'system-preferences' },
 | 
					  { name: 'systemPreferences', loader: () => require('./system-preferences') },
 | 
				
			||||||
  { name: 'TopLevelWindow', file: 'top-level-window' },
 | 
					  { name: 'TopLevelWindow', loader: () => require('./top-level-window') },
 | 
				
			||||||
  { name: 'TouchBar', file: 'touch-bar' },
 | 
					  { name: 'TouchBar', loader: () => require('./touch-bar') },
 | 
				
			||||||
  { name: 'Tray', file: 'tray' },
 | 
					  { name: 'Tray', loader: () => require('./tray') },
 | 
				
			||||||
  { name: 'View', file: 'view' },
 | 
					  { name: 'View', loader: () => require('./view') },
 | 
				
			||||||
  { name: 'webContents', file: 'web-contents' },
 | 
					  { name: 'webContents', loader: () => require('./web-contents') },
 | 
				
			||||||
  { name: 'WebContentsView', file: 'web-contents-view' }
 | 
					  { name: 'WebContentsView', loader: () => require('./web-contents-view') }
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (features.isViewApiEnabled()) {
 | 
					if (features.isViewApiEnabled()) {
 | 
				
			||||||
  module.exports.push(
 | 
					  module.exports.push(
 | 
				
			||||||
    { name: 'BoxLayout', file: 'views/box-layout' },
 | 
					    { name: 'BoxLayout', loader: () => require('./views/box-layout') },
 | 
				
			||||||
    { name: 'Button', file: 'views/button' },
 | 
					    { name: 'Button', loader: () => require('./views/button') },
 | 
				
			||||||
    { name: 'LabelButton', file: 'views/label-button' },
 | 
					    { name: 'LabelButton', loader: () => require('./views/label-button') },
 | 
				
			||||||
    { name: 'LayoutManager', file: 'views/layout-manager' },
 | 
					    { name: 'LayoutManager', loader: () => require('./views/layout-manager') },
 | 
				
			||||||
    { name: 'MdTextButton', file: 'views/md-text-button' },
 | 
					    { name: 'MdTextButton', loader: () => require('./views/md-text-button') },
 | 
				
			||||||
    { name: 'ResizeArea', file: 'views/resize-area' },
 | 
					    { name: 'ResizeArea', loader: () => require('./views/resize-area') },
 | 
				
			||||||
    { name: 'TextField', file: 'views/text-field' }
 | 
					    { name: 'TextField', loader: () => require('./views/text-field') }
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,14 +2,15 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const { app } = require('electron')
 | 
					const { app } = require('electron')
 | 
				
			||||||
const cp = require('child_process')
 | 
					const cp = require('child_process')
 | 
				
			||||||
const os = require('os')
 | 
					 | 
				
			||||||
const path = require('path')
 | 
					const path = require('path')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const getTempDirectory = function () {
 | 
					const getTempDirectory = function () {
 | 
				
			||||||
  try {
 | 
					  try {
 | 
				
			||||||
    return app.getPath('temp')
 | 
					    return app.getPath('temp')
 | 
				
			||||||
  } catch {
 | 
					  } catch {
 | 
				
			||||||
    return os.tmpdir()
 | 
					    // Delibrately laze-load the os module, this file is on the hot
 | 
				
			||||||
 | 
					    // path when booting Electron and os takes between 5 - 8ms to load and we do not need it yet
 | 
				
			||||||
 | 
					    return require('os').tmpdir()
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,11 +16,6 @@ require('../common/reset-search-paths')
 | 
				
			||||||
// Import common settings.
 | 
					// Import common settings.
 | 
				
			||||||
require('@electron/internal/common/init')
 | 
					require('@electron/internal/common/init')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const globalPaths = Module.globalPaths
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Expose public APIs.
 | 
					 | 
				
			||||||
globalPaths.push(path.join(__dirname, 'api', 'exports'))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if (process.platform === 'win32') {
 | 
					if (process.platform === 'win32') {
 | 
				
			||||||
  // Redirect node's console to use our own implementations, since node can not
 | 
					  // Redirect node's console to use our own implementations, since node can not
 | 
				
			||||||
  // handle console output when running as GUI program.
 | 
					  // handle console output when running as GUI program.
 | 
				
			||||||
| 
						 | 
					@ -112,7 +107,7 @@ if (process.resourcesPath) {
 | 
				
			||||||
  for (packagePath of searchPaths) {
 | 
					  for (packagePath of searchPaths) {
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      packagePath = path.join(process.resourcesPath, packagePath)
 | 
					      packagePath = path.join(process.resourcesPath, packagePath)
 | 
				
			||||||
      packageJson = require(path.join(packagePath, 'package.json'))
 | 
					      packageJson = __non_webpack_require__(path.join(packagePath, 'package.json')) // eslint-disable-line
 | 
				
			||||||
      break
 | 
					      break
 | 
				
			||||||
    } catch {
 | 
					    } catch {
 | 
				
			||||||
      continue
 | 
					      continue
 | 
				
			||||||
| 
						 | 
					@ -194,7 +189,7 @@ app.on('window-all-closed', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Promise.all([
 | 
					Promise.all([
 | 
				
			||||||
  import('@electron/internal/browser/default-menu'),
 | 
					  import('@electron/internal/browser/default-menu'),
 | 
				
			||||||
  app.whenReady
 | 
					  app.whenReady()
 | 
				
			||||||
]).then(([{ setDefaultApplicationMenu }]) => {
 | 
					]).then(([{ setDefaultApplicationMenu }]) => {
 | 
				
			||||||
  // Create default menu
 | 
					  // Create default menu
 | 
				
			||||||
  setDefaultApplicationMenu()
 | 
					  setDefaultApplicationMenu()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,12 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const moduleList = require('@electron/internal/common/api/module-list')
 | 
					const moduleList = require('@electron/internal/common/api/module-list')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exports.handleESModule = (loader) => () => {
 | 
				
			||||||
 | 
					  const value = loader()
 | 
				
			||||||
 | 
					  if (value.__esModule) return value.default
 | 
				
			||||||
 | 
					  return value
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exports.memoizedGetter = (getter) => {
 | 
					exports.memoizedGetter = (getter) => {
 | 
				
			||||||
  /*
 | 
					  /*
 | 
				
			||||||
   * It's ok to leak this value as it would be leaked by the global
 | 
					   * It's ok to leak this value as it would be leaked by the global
 | 
				
			||||||
| 
						 | 
					@ -24,12 +30,7 @@ exports.defineProperties = function (targetExports) {
 | 
				
			||||||
  for (const module of moduleList) {
 | 
					  for (const module of moduleList) {
 | 
				
			||||||
    descriptors[module.name] = {
 | 
					    descriptors[module.name] = {
 | 
				
			||||||
      enumerable: !module.private,
 | 
					      enumerable: !module.private,
 | 
				
			||||||
      get: exports.memoizedGetter(() => {
 | 
					      get: exports.handleESModule(module.loader)
 | 
				
			||||||
        const value = require(`@electron/internal/common/api/${module.file}.js`)
 | 
					 | 
				
			||||||
        // Handle Typescript modules with an "export default X" statement
 | 
					 | 
				
			||||||
        if (value.__esModule) return value.default
 | 
					 | 
				
			||||||
        return value
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  return Object.defineProperties(targetExports, descriptors)
 | 
					  return Object.defineProperties(targetExports, descriptors)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,10 +2,10 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Common modules, please sort alphabetically
 | 
					// Common modules, please sort alphabetically
 | 
				
			||||||
module.exports = [
 | 
					module.exports = [
 | 
				
			||||||
  { name: 'clipboard', file: 'clipboard' },
 | 
					  { name: 'clipboard', loader: () => require('./clipboard') },
 | 
				
			||||||
  { name: 'nativeImage', file: 'native-image' },
 | 
					  { name: 'nativeImage', loader: () => require('./native-image') },
 | 
				
			||||||
  { name: 'shell', file: 'shell' },
 | 
					  { name: 'shell', loader: () => require('./shell') },
 | 
				
			||||||
  // The internal modules, invisible unless you know their names.
 | 
					  // The internal modules, invisible unless you know their names.
 | 
				
			||||||
  { name: 'deprecate', file: 'deprecate', private: true },
 | 
					  { name: 'deprecate', loader: () => require('./deprecate'), private: true },
 | 
				
			||||||
  { name: 'isPromise', file: 'is-promise', private: true }
 | 
					  { name: 'isPromise', loader: () => require('./is-promise'), private: true }
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,9 +5,11 @@ const Module = require('module')
 | 
				
			||||||
// Clear Node's global search paths.
 | 
					// Clear Node's global search paths.
 | 
				
			||||||
Module.globalPaths.length = 0
 | 
					Module.globalPaths.length = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Clear current and parent(init.js)'s search paths.
 | 
					// Clear current bundles search paths.
 | 
				
			||||||
module.paths = []
 | 
					const currentNodeModule = Module._cache[__filename]
 | 
				
			||||||
module.parent!.paths = []
 | 
					if (currentNodeModule) {
 | 
				
			||||||
 | 
					  currentNodeModule.paths = []
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Prevent Node from adding paths outside this app to search paths.
 | 
					// Prevent Node from adding paths outside this app to search paths.
 | 
				
			||||||
const resourcesPathWithTrailingSlash = process.resourcesPath + path.sep
 | 
					const resourcesPathWithTrailingSlash = process.resourcesPath + path.sep
 | 
				
			||||||
| 
						 | 
					@ -25,19 +27,21 @@ Module._nodeModulePaths = function (from: string) {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const BASE_INTERNAL_PATH = path.resolve(__dirname, '..')
 | 
					// Make a fake Electron module that we will insert into the module cache
 | 
				
			||||||
const INTERNAL_MODULE_PREFIX = '@electron/internal/'
 | 
					const electronModule = new Module('electron', null)
 | 
				
			||||||
 | 
					electronModule.id = 'electron'
 | 
				
			||||||
 | 
					electronModule.loaded = true
 | 
				
			||||||
 | 
					electronModule.filename = 'electron'
 | 
				
			||||||
 | 
					Object.defineProperty(electronModule, 'exports', {
 | 
				
			||||||
 | 
					  get: () => require('electron')
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Module._cache['electron'] = electronModule
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Patch Module._resolveFilename to always require the Electron API when
 | 
					 | 
				
			||||||
// require('electron') is done.
 | 
					 | 
				
			||||||
const electronPath = path.join(__dirname, '..', process.type!, 'api', 'exports', 'electron.js')
 | 
					 | 
				
			||||||
const originalResolveFilename = Module._resolveFilename
 | 
					const originalResolveFilename = Module._resolveFilename
 | 
				
			||||||
Module._resolveFilename = function (request: string, parent: NodeModule, isMain: boolean) {
 | 
					Module._resolveFilename = function (request: string, parent: NodeModule, isMain: boolean) {
 | 
				
			||||||
  if (request === 'electron') {
 | 
					  if (request === 'electron') {
 | 
				
			||||||
    return electronPath
 | 
					    return 'electron'
 | 
				
			||||||
  } else if (request.startsWith(INTERNAL_MODULE_PREFIX) && request.length > INTERNAL_MODULE_PREFIX.length) {
 | 
					 | 
				
			||||||
    const slicedRequest = request.slice(INTERNAL_MODULE_PREFIX.length)
 | 
					 | 
				
			||||||
    return path.resolve(BASE_INTERNAL_PATH, `${slicedRequest}${slicedRequest.endsWith('.js') ? '' : '.js'}`)
 | 
					 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    return originalResolveFilename(request, parent, isMain)
 | 
					    return originalResolveFilename(request, parent, isMain)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@ const v8Util = process.electronBinding('v8_util')
 | 
				
			||||||
// "ipc-internal" hidden value
 | 
					// "ipc-internal" hidden value
 | 
				
			||||||
v8Util.setHiddenValue(global, 'ipc-internal', v8Util.getHiddenValue(isolatedWorld, 'ipc-internal'))
 | 
					v8Util.setHiddenValue(global, 'ipc-internal', v8Util.getHiddenValue(isolatedWorld, 'ipc-internal'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// The process object created by browserify is not an event emitter, fix it so
 | 
					// The process object created by webpack is not an event emitter, fix it so
 | 
				
			||||||
// the API is more compatible with non-sandboxed renderers.
 | 
					// the API is more compatible with non-sandboxed renderers.
 | 
				
			||||||
for (const prop of Object.keys(EventEmitter.prototype)) {
 | 
					for (const prop of Object.keys(EventEmitter.prototype)) {
 | 
				
			||||||
  if (process.hasOwnProperty(prop)) {
 | 
					  if (process.hasOwnProperty(prop)) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,23 +6,9 @@ const moduleList = require('@electron/internal/renderer/api/module-list')
 | 
				
			||||||
// Import common modules.
 | 
					// Import common modules.
 | 
				
			||||||
common.defineProperties(exports)
 | 
					common.defineProperties(exports)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for (const {
 | 
					for (const module of moduleList) {
 | 
				
			||||||
  name,
 | 
					  Object.defineProperty(exports, module.name, {
 | 
				
			||||||
  file,
 | 
					    enumerable: !module.private,
 | 
				
			||||||
  enabled = true,
 | 
					    get: common.handleESModule(module.loader)
 | 
				
			||||||
  private: isPrivate = false
 | 
					 | 
				
			||||||
} of moduleList) {
 | 
					 | 
				
			||||||
  if (!enabled) {
 | 
					 | 
				
			||||||
    continue
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Object.defineProperty(exports, name, {
 | 
					 | 
				
			||||||
    enumerable: !isPrivate,
 | 
					 | 
				
			||||||
    get: common.memoizedGetter(() => {
 | 
					 | 
				
			||||||
      const value = require(`@electron/internal/renderer/api/${file}.js`)
 | 
					 | 
				
			||||||
      // Handle Typescript modules with an "export default X" statement
 | 
					 | 
				
			||||||
      if (value.__esModule) return value.default
 | 
					 | 
				
			||||||
      return value
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,13 +8,15 @@ const enableRemoteModule = v8Util.getHiddenValue(global, 'enableRemoteModule')
 | 
				
			||||||
// Renderer side modules, please sort alphabetically.
 | 
					// Renderer side modules, please sort alphabetically.
 | 
				
			||||||
// A module is `enabled` if there is no explicit condition defined.
 | 
					// A module is `enabled` if there is no explicit condition defined.
 | 
				
			||||||
module.exports = [
 | 
					module.exports = [
 | 
				
			||||||
  { name: 'crashReporter', file: 'crash-reporter', enabled: true },
 | 
					  { name: 'crashReporter', loader: () => require('./crash-reporter') },
 | 
				
			||||||
  {
 | 
					  { name: 'ipcRenderer', loader: () => require('./ipc-renderer') },
 | 
				
			||||||
    name: 'desktopCapturer',
 | 
					  { name: 'webFrame', loader: () => require('./web-frame') }
 | 
				
			||||||
    file: 'desktop-capturer',
 | 
					 | 
				
			||||||
    enabled: features.isDesktopCapturerEnabled()
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  { name: 'ipcRenderer', file: 'ipc-renderer' },
 | 
					 | 
				
			||||||
  { name: 'remote', file: 'remote', enabled: enableRemoteModule },
 | 
					 | 
				
			||||||
  { name: 'webFrame', file: 'web-frame' }
 | 
					 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (features.isDesktopCapturerEnabled()) {
 | 
				
			||||||
 | 
					  module.exports.push({ name: 'desktopCapturer', loader: () => require('./desktop-capturer') })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (enableRemoteModule) {
 | 
				
			||||||
 | 
					  module.exports.push({ name: 'remote', loader: () => require('./remote') })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -350,7 +350,7 @@ const addBuiltinProperty = (name) => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const browserModules =
 | 
					const browserModules =
 | 
				
			||||||
  require('@electron/internal/common/api/module-list').concat(
 | 
					  require('@electron/internal/common/api/module-list').concat(
 | 
				
			||||||
    require('@electron/internal/browser/api/module-list'))
 | 
					    require('@electron/internal/browser/api/module-keys'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// And add a helper receiver for each one.
 | 
					// And add a helper receiver for each one.
 | 
				
			||||||
browserModules
 | 
					browserModules
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,6 +14,10 @@ const Module = require('module')
 | 
				
			||||||
// code, which does not work with this hack. However by modifying the
 | 
					// code, which does not work with this hack. However by modifying the
 | 
				
			||||||
// "Module.wrapper" we can force Node to use the old code path to wrap module
 | 
					// "Module.wrapper" we can force Node to use the old code path to wrap module
 | 
				
			||||||
// code with JavaScript.
 | 
					// code with JavaScript.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Note 3: We provide the equivilant extra variables internally through the
 | 
				
			||||||
 | 
					// webpack ProvidePlugin in webpack.config.base.js.  If you add any extra
 | 
				
			||||||
 | 
					// variables to this wrapper please ensure to update that plugin as well.
 | 
				
			||||||
Module.wrapper = [
 | 
					Module.wrapper = [
 | 
				
			||||||
  '(function (exports, require, module, __filename, __dirname, process, global, Buffer) { ' +
 | 
					  '(function (exports, require, module, __filename, __dirname, process, global, Buffer) { ' +
 | 
				
			||||||
  // By running the code in a new closure, it would be possible for the module
 | 
					  // By running the code in a new closure, it would be possible for the module
 | 
				
			||||||
| 
						 | 
					@ -33,11 +37,6 @@ require('../common/reset-search-paths')
 | 
				
			||||||
// Import common settings.
 | 
					// Import common settings.
 | 
				
			||||||
require('@electron/internal/common/init')
 | 
					require('@electron/internal/common/init')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const globalPaths = Module.globalPaths
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Expose public APIs.
 | 
					 | 
				
			||||||
globalPaths.push(path.join(__dirname, 'api', 'exports'))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// The global variable will be used by ipc for event dispatching
 | 
					// The global variable will be used by ipc for event dispatching
 | 
				
			||||||
const v8Util = process.electronBinding('v8_util')
 | 
					const v8Util = process.electronBinding('v8_util')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -129,8 +128,8 @@ if (contextIsolation) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (nodeIntegration) {
 | 
					if (nodeIntegration) {
 | 
				
			||||||
  // Export node bindings to global.
 | 
					  // Export node bindings to global.
 | 
				
			||||||
  global.require = require
 | 
					  global.require = __non_webpack_require__ // eslint-disable-line
 | 
				
			||||||
  global.module = module
 | 
					  global.module = Module._cache[__filename]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Set the __filename to the path of html file if it is file: protocol.
 | 
					  // Set the __filename to the path of html file if it is file: protocol.
 | 
				
			||||||
  if (window.location.protocol === 'file:') {
 | 
					  if (window.location.protocol === 'file:') {
 | 
				
			||||||
| 
						 | 
					@ -140,7 +139,7 @@ if (nodeIntegration) {
 | 
				
			||||||
    if (process.platform === 'win32') {
 | 
					    if (process.platform === 'win32') {
 | 
				
			||||||
      if (pathname[0] === '/') pathname = pathname.substr(1)
 | 
					      if (pathname[0] === '/') pathname = pathname.substr(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      const isWindowsNetworkSharePath = location.hostname.length > 0 && globalPaths[0].startsWith('\\')
 | 
					      const isWindowsNetworkSharePath = location.hostname.length > 0 && __filename.startsWith('\\')
 | 
				
			||||||
      if (isWindowsNetworkSharePath) {
 | 
					      if (isWindowsNetworkSharePath) {
 | 
				
			||||||
        pathname = `//${location.host}/${pathname}`
 | 
					        pathname = `//${location.host}/${pathname}`
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
| 
						 | 
					@ -150,17 +149,17 @@ if (nodeIntegration) {
 | 
				
			||||||
    global.__dirname = path.dirname(global.__filename)
 | 
					    global.__dirname = path.dirname(global.__filename)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Set module's filename so relative require can work as expected.
 | 
					    // Set module's filename so relative require can work as expected.
 | 
				
			||||||
    module.filename = global.__filename
 | 
					    global.module.filename = global.__filename
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Also search for module under the html file.
 | 
					    // Also search for module under the html file.
 | 
				
			||||||
    module.paths = module.paths.concat(Module._nodeModulePaths(global.__dirname))
 | 
					    global.module.paths = global.module.paths.concat(Module._nodeModulePaths(global.__dirname))
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    global.__filename = __filename
 | 
					    global.__filename = __filename
 | 
				
			||||||
    global.__dirname = __dirname
 | 
					    global.__dirname = __dirname
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (appPath) {
 | 
					    if (appPath) {
 | 
				
			||||||
      // Search for module under the app directory
 | 
					      // Search for module under the app directory
 | 
				
			||||||
      module.paths = module.paths.concat(Module._nodeModulePaths(appPath))
 | 
					      global.module.paths = global.module.paths.concat(Module._nodeModulePaths(appPath))
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -204,7 +203,7 @@ for (const preloadScript of preloadScripts) {
 | 
				
			||||||
    if (!isParentDir(getAppPath(), fs.realpathSync(preloadScript))) {
 | 
					    if (!isParentDir(getAppPath(), fs.realpathSync(preloadScript))) {
 | 
				
			||||||
      throw new Error('Preload scripts outside of app path are not allowed')
 | 
					      throw new Error('Preload scripts outside of app path are not allowed')
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    require(preloadScript)
 | 
					    __non_webpack_require__(preloadScript)  // eslint-disable-line
 | 
				
			||||||
  } catch (error) {
 | 
					  } catch (error) {
 | 
				
			||||||
    console.error(`Unable to load preload script: ${preloadScript}`)
 | 
					    console.error(`Unable to load preload script: ${preloadScript}`)
 | 
				
			||||||
    console.error(`${error}`)
 | 
					    console.error(`${error}`)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,8 @@ import { invokeSync } from '@electron/internal/renderer/ipc-renderer-internal-ut
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let shouldLog: boolean | null = null
 | 
					let shouldLog: boolean | null = null
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const { platform, execPath, env } = process
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * This method checks if a security message should be logged.
 | 
					 * This method checks if a security message should be logged.
 | 
				
			||||||
 * It does so by determining whether we're running as Electron,
 | 
					 * It does so by determining whether we're running as Electron,
 | 
				
			||||||
| 
						 | 
					@ -16,8 +18,6 @@ const shouldLogSecurityWarnings = function (): boolean {
 | 
				
			||||||
    return shouldLog
 | 
					    return shouldLog
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const { platform, execPath, env } = process
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  switch (platform) {
 | 
					  switch (platform) {
 | 
				
			||||||
    case 'darwin':
 | 
					    case 'darwin':
 | 
				
			||||||
      shouldLog = execPath.endsWith('MacOS/Electron') ||
 | 
					      shouldLog = execPath.endsWith('MacOS/Electron') ||
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										18
									
								
								lib/renderer/webpack-provider.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								lib/renderer/webpack-provider.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					// This file provides the global, process and Buffer variables to internal
 | 
				
			||||||
 | 
					// Electron code once they have been deleted from the global scope.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// It does this through the ProvidePlugin in the webpack.config.base.js file
 | 
				
			||||||
 | 
					// Check out the Module.wrapper override in renderer/init.ts for more
 | 
				
			||||||
 | 
					// information on how this works and why we need it
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Rip global off of window (which is also global) so that webpack doesn't
 | 
				
			||||||
 | 
					// auto replace it with a looped reference to this file
 | 
				
			||||||
 | 
					const _global = (self as any || window as any).global as NodeJS.Global
 | 
				
			||||||
 | 
					const process = _global.process
 | 
				
			||||||
 | 
					const Buffer = _global.Buffer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export {
 | 
				
			||||||
 | 
					  _global,
 | 
				
			||||||
 | 
					  process,
 | 
				
			||||||
 | 
					  Buffer
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ const { EventEmitter } = events
 | 
				
			||||||
process.electronBinding = require('@electron/internal/common/electron-binding-setup').electronBindingSetup(binding.get, 'renderer')
 | 
					process.electronBinding = require('@electron/internal/common/electron-binding-setup').electronBindingSetup(binding.get, 'renderer')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const v8Util = process.electronBinding('v8_util')
 | 
					const v8Util = process.electronBinding('v8_util')
 | 
				
			||||||
// Expose browserify Buffer as a hidden value. This is used by C++ code to
 | 
					// Expose Buffer shim as a hidden value. This is used by C++ code to
 | 
				
			||||||
// deserialize Buffer instances sent from browser process.
 | 
					// deserialize Buffer instances sent from browser process.
 | 
				
			||||||
v8Util.setHiddenValue(global, 'Buffer', Buffer)
 | 
					v8Util.setHiddenValue(global, 'Buffer', Buffer)
 | 
				
			||||||
// The `lib/renderer/api/ipc-renderer.js` module looks for the ipc object in the
 | 
					// The `lib/renderer/api/ipc-renderer.js` module looks for the ipc object in the
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,7 @@ v8Util.setHiddenValue(global, 'ipc', new EventEmitter())
 | 
				
			||||||
// The `lib/renderer/ipc-renderer-internal.js` module looks for the ipc object in the
 | 
					// The `lib/renderer/ipc-renderer-internal.js` module looks for the ipc object in the
 | 
				
			||||||
// "ipc-internal" hidden value
 | 
					// "ipc-internal" hidden value
 | 
				
			||||||
v8Util.setHiddenValue(global, 'ipc-internal', new EventEmitter())
 | 
					v8Util.setHiddenValue(global, 'ipc-internal', new EventEmitter())
 | 
				
			||||||
// The process object created by browserify is not an event emitter, fix it so
 | 
					// The process object created by webpack is not an event emitter, fix it so
 | 
				
			||||||
// the API is more compatible with non-sandboxed renderers.
 | 
					// the API is more compatible with non-sandboxed renderers.
 | 
				
			||||||
for (const prop of Object.keys(EventEmitter.prototype)) {
 | 
					for (const prop of Object.keys(EventEmitter.prototype)) {
 | 
				
			||||||
  if (process.hasOwnProperty(prop)) {
 | 
					  if (process.hasOwnProperty(prop)) {
 | 
				
			||||||
| 
						 | 
					@ -143,20 +143,8 @@ const errorUtils = require('@electron/internal/common/error-utils')
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// - `require`: The `preloadRequire` function
 | 
					// - `require`: The `preloadRequire` function
 | 
				
			||||||
// - `process`: The `preloadProcess` object
 | 
					// - `process`: The `preloadProcess` object
 | 
				
			||||||
// - `Buffer`: Browserify `Buffer` implementation
 | 
					// - `Buffer`: Shim of `Buffer` implementation
 | 
				
			||||||
// - `global`: The window object, which is aliased to `global` by browserify.
 | 
					// - `global`: The window object, which is aliased to `global` by webpack.
 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// Browserify bundles can make use of an external require function as explained
 | 
					 | 
				
			||||||
// in https://github.com/substack/node-browserify#multiple-bundles, so electron
 | 
					 | 
				
			||||||
// apps can use multi-module preload scripts in sandboxed renderers.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// For example, the user can create a bundle with:
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//     $ browserify -x electron preload.js > renderer.js
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// and any `require('electron')` calls in `preload.js` will work as expected
 | 
					 | 
				
			||||||
// since browserify won't try to include `electron` in the bundle, falling back
 | 
					 | 
				
			||||||
// to the `preloadRequire` function above.
 | 
					 | 
				
			||||||
function runPreloadScript (preloadSrc) {
 | 
					function runPreloadScript (preloadSrc) {
 | 
				
			||||||
  const preloadWrapperSrc = `(function(require, process, Buffer, global, setImmediate, clearImmediate, exports) {
 | 
					  const preloadWrapperSrc = `(function(require, process, Buffer, global, setImmediate, clearImmediate, exports) {
 | 
				
			||||||
  ${preloadSrc}
 | 
					  ${preloadSrc}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,12 +13,9 @@ require('../common/reset-search-paths')
 | 
				
			||||||
// Import common settings.
 | 
					// Import common settings.
 | 
				
			||||||
require('@electron/internal/common/init')
 | 
					require('@electron/internal/common/init')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Expose public APIs.
 | 
					 | 
				
			||||||
Module.globalPaths.push(path.join(__dirname, 'api', 'exports'))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Export node bindings to global.
 | 
					// Export node bindings to global.
 | 
				
			||||||
global.require = require
 | 
					global.require = __non_webpack_require__ // eslint-disable-line
 | 
				
			||||||
global.module = module
 | 
					global.module = Module._cache[__filename]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Set the __filename to the path of html file if it is file: protocol.
 | 
					// Set the __filename to the path of html file if it is file: protocol.
 | 
				
			||||||
if (self.location.protocol === 'file:') {
 | 
					if (self.location.protocol === 'file:') {
 | 
				
			||||||
| 
						 | 
					@ -27,10 +24,10 @@ if (self.location.protocol === 'file:') {
 | 
				
			||||||
  global.__dirname = path.dirname(global.__filename)
 | 
					  global.__dirname = path.dirname(global.__filename)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Set module's filename so relative require can work as expected.
 | 
					  // Set module's filename so relative require can work as expected.
 | 
				
			||||||
  module.filename = global.__filename
 | 
					  global.module.filename = global.__filename
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Also search for module under the html file.
 | 
					  // Also search for module under the html file.
 | 
				
			||||||
  module.paths = module.paths.concat(Module._nodeModulePaths(global.__dirname))
 | 
					  global.module.paths = global.module.paths.concat(Module._nodeModulePaths(global.__dirname))
 | 
				
			||||||
} else {
 | 
					} else {
 | 
				
			||||||
  global.__filename = __filename
 | 
					  global.__filename = __filename
 | 
				
			||||||
  global.__dirname = __dirname
 | 
					  global.__dirname = __dirname
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										26
									
								
								package.json
									
										
									
									
									
								
							
							
						
						
									
										26
									
								
								package.json
									
										
									
									
									
								
							| 
						 | 
					@ -14,11 +14,11 @@
 | 
				
			||||||
    "@types/mocha": "^5.2.6",
 | 
					    "@types/mocha": "^5.2.6",
 | 
				
			||||||
    "@types/node": "^10.12.21",
 | 
					    "@types/node": "^10.12.21",
 | 
				
			||||||
    "@types/split": "^1.0.0",
 | 
					    "@types/split": "^1.0.0",
 | 
				
			||||||
 | 
					    "@types/webpack": "^4.4.32",
 | 
				
			||||||
 | 
					    "@types/webpack-env": "^1.13.9",
 | 
				
			||||||
    "@typescript-eslint/eslint-plugin": "^1.4.2",
 | 
					    "@typescript-eslint/eslint-plugin": "^1.4.2",
 | 
				
			||||||
    "@typescript-eslint/parser": "^1.4.2",
 | 
					    "@typescript-eslint/parser": "^1.4.2",
 | 
				
			||||||
    "aliasify": "^2.1.0",
 | 
					 | 
				
			||||||
    "asar": "^1.0.0",
 | 
					    "asar": "^1.0.0",
 | 
				
			||||||
    "browserify": "^16.2.3",
 | 
					 | 
				
			||||||
    "check-for-leaks": "^1.0.2",
 | 
					    "check-for-leaks": "^1.0.2",
 | 
				
			||||||
    "clang-format": "^1.2.3",
 | 
					    "clang-format": "^1.2.3",
 | 
				
			||||||
    "colors": "^1.1.2",
 | 
					    "colors": "^1.1.2",
 | 
				
			||||||
| 
						 | 
					@ -51,14 +51,16 @@
 | 
				
			||||||
    "standard-markdown": "^5.0.0",
 | 
					    "standard-markdown": "^5.0.0",
 | 
				
			||||||
    "sumchecker": "^2.0.2",
 | 
					    "sumchecker": "^2.0.2",
 | 
				
			||||||
    "temp": "^0.8.3",
 | 
					    "temp": "^0.8.3",
 | 
				
			||||||
 | 
					    "timers-browserify": "1.4.2",
 | 
				
			||||||
 | 
					    "ts-loader": "^6.0.2",
 | 
				
			||||||
    "ts-node": "^6.0.3",
 | 
					    "ts-node": "^6.0.3",
 | 
				
			||||||
    "tsify": "^4.0.1",
 | 
					    "typescript": "~3.3.3333",
 | 
				
			||||||
    "typescript": "~3.3.3333"
 | 
					    "webpack": "^4.32.2",
 | 
				
			||||||
 | 
					    "webpack-cli": "^3.3.2"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "private": true,
 | 
					  "private": true,
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "asar": "asar",
 | 
					    "asar": "asar",
 | 
				
			||||||
    "browserify": "browserify",
 | 
					 | 
				
			||||||
    "bump-version": "./script/bump-version.js",
 | 
					    "bump-version": "./script/bump-version.js",
 | 
				
			||||||
    "check-tls": "python ./script/tls.py",
 | 
					    "check-tls": "python ./script/tls.py",
 | 
				
			||||||
    "clang-format": "find atom/ chromium_src/ -iname *.h -o -iname *.cc -o -iname *.mm | xargs clang-format -i",
 | 
					    "clang-format": "find atom/ chromium_src/ -iname *.h -o -iname *.cc -o -iname *.mm | xargs clang-format -i",
 | 
				
			||||||
| 
						 | 
					@ -82,24 +84,14 @@
 | 
				
			||||||
    "repl": "node ./script/start.js --interactive",
 | 
					    "repl": "node ./script/start.js --interactive",
 | 
				
			||||||
    "start": "node ./script/start.js",
 | 
					    "start": "node ./script/start.js",
 | 
				
			||||||
    "test": "node ./script/spec-runner.js",
 | 
					    "test": "node ./script/spec-runner.js",
 | 
				
			||||||
    "tsc": "tsc"
 | 
					    "tsc": "tsc",
 | 
				
			||||||
 | 
					    "webpack": "node build/webpack/run-compiler"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "license": "MIT",
 | 
					  "license": "MIT",
 | 
				
			||||||
  "author": "Electron Community",
 | 
					  "author": "Electron Community",
 | 
				
			||||||
  "keywords": [
 | 
					  "keywords": [
 | 
				
			||||||
    "electron"
 | 
					    "electron"
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "aliasify": {
 | 
					 | 
				
			||||||
    "replacements": {
 | 
					 | 
				
			||||||
      "@electron/internal/(.+)": "./lib/$1"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "appliesTo": {
 | 
					 | 
				
			||||||
      "includeExtensions": [
 | 
					 | 
				
			||||||
        ".js",
 | 
					 | 
				
			||||||
        ".ts"
 | 
					 | 
				
			||||||
      ]
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "husky": {
 | 
					  "husky": {
 | 
				
			||||||
    "hooks": {
 | 
					    "hooks": {
 | 
				
			||||||
      "pre-commit": "lint-staged",
 | 
					      "pre-commit": "lint-staged",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,41 +14,39 @@ const allDocs = fs.readdirSync(path.resolve(__dirname, '../docs/api'))
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const main = async () => {
 | 
					const main = async () => {
 | 
				
			||||||
  const browserifyTargets = [
 | 
					  const webpackTargets = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name: 'sandbox_browserify_deps',
 | 
					      name: 'sandbox_bundle_deps',
 | 
				
			||||||
      entry: 'lib/sandboxed_renderer/init.js'
 | 
					      config: 'webpack.config.sandboxed_renderer.js'
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name: 'isolated_browserify_deps',
 | 
					      name: 'isolated_bundle_deps',
 | 
				
			||||||
      entry: 'lib/isolated_renderer/init.js'
 | 
					      config: 'webpack.config.isolated_renderer.js'
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name: 'context_script_browserify_deps',
 | 
					      name: 'content_script_bundle_deps',
 | 
				
			||||||
      entry: 'lib/content_script/init.js'
 | 
					      config: 'webpack.config.content_script.js'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      name: 'browser_bundle_deps',
 | 
				
			||||||
 | 
					      config: 'webpack.config.browser.js'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      name: 'renderer_bundle_deps',
 | 
				
			||||||
 | 
					      config: 'webpack.config.renderer.js'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      name: 'worker_bundle_deps',
 | 
				
			||||||
 | 
					      config: 'webpack.config.worker.js'
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  await Promise.all(browserifyTargets.map(async browserifyTarget => {
 | 
					  await Promise.all(webpackTargets.map(async webpackTarget => {
 | 
				
			||||||
    const tmpDir = await fs.mkdtemp(path.resolve(os.tmpdir(), 'electron-filenames-'))
 | 
					    const tmpDir = await fs.mkdtemp(path.resolve(os.tmpdir(), 'electron-filenames-'))
 | 
				
			||||||
    const child = cp.spawn('node', [
 | 
					    const child = cp.spawn('node', [
 | 
				
			||||||
      'node_modules/browserify/bin/cmd.js',
 | 
					      'build/webpack/get-outputs.js',
 | 
				
			||||||
      browserifyTarget.entry,
 | 
					      `./${webpackTarget.config}`,
 | 
				
			||||||
      ...(browserifyTarget.name === 'sandbox_browserify_deps' ? [
 | 
					      path.resolve(tmpDir, `${webpackTarget.name}.measure.js`)
 | 
				
			||||||
        '-r',
 | 
					 | 
				
			||||||
        './lib/sandboxed_renderer/api/exports/electron.js:electron'
 | 
					 | 
				
			||||||
      ] : []),
 | 
					 | 
				
			||||||
      '-t',
 | 
					 | 
				
			||||||
      'aliasify',
 | 
					 | 
				
			||||||
      '-p',
 | 
					 | 
				
			||||||
      '[',
 | 
					 | 
				
			||||||
      'tsify',
 | 
					 | 
				
			||||||
      '-p',
 | 
					 | 
				
			||||||
      'tsconfig.electron.json',
 | 
					 | 
				
			||||||
      ']',
 | 
					 | 
				
			||||||
      '-o',
 | 
					 | 
				
			||||||
      path.resolve(tmpDir, 'out.js'),
 | 
					 | 
				
			||||||
      '--list'
 | 
					 | 
				
			||||||
    ], {
 | 
					    ], {
 | 
				
			||||||
      cwd: path.resolve(__dirname, '..')
 | 
					      cwd: path.resolve(__dirname, '..')
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
| 
						 | 
					@ -60,28 +58,25 @@ const main = async () => {
 | 
				
			||||||
    await new Promise((resolve, reject) => child.on('exit', (code) => {
 | 
					    await new Promise((resolve, reject) => child.on('exit', (code) => {
 | 
				
			||||||
      if (code !== 0) {
 | 
					      if (code !== 0) {
 | 
				
			||||||
        console.error(output)
 | 
					        console.error(output)
 | 
				
			||||||
        return reject(new Error(`Failed to list browserify dependencies for entry: ${browserifyTarget.name}`))
 | 
					        return reject(new Error(`Failed to list webpack dependencies for entry: ${webpackTarget.name}`))
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      resolve()
 | 
					      resolve()
 | 
				
			||||||
    }))
 | 
					    }))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    browserifyTarget.dependencies = output
 | 
					    webpackTarget.dependencies = JSON.parse(output)
 | 
				
			||||||
      .split('\n')
 | 
					 | 
				
			||||||
      // Remove whitespace
 | 
					      // Remove whitespace
 | 
				
			||||||
      .map(line => line.trim())
 | 
					      .map(line => line.trim())
 | 
				
			||||||
      // Ignore empty lines
 | 
					 | 
				
			||||||
      .filter(line => line)
 | 
					 | 
				
			||||||
      // Get the relative path
 | 
					      // Get the relative path
 | 
				
			||||||
      .map(line => path.relative(rootPath, line))
 | 
					      .map(line => path.relative(rootPath, line))
 | 
				
			||||||
      // Only care about files in //electron
 | 
					      // Only care about files in //electron
 | 
				
			||||||
      .filter(line => !line.startsWith('..'))
 | 
					      .filter(line => !line.startsWith('..'))
 | 
				
			||||||
      // Only care about our own files
 | 
					      // Only care about our own files
 | 
				
			||||||
      .filter(line => !line.startsWith('node_modules'))
 | 
					      .filter(line => !line.startsWith('node_modules'))
 | 
				
			||||||
 | 
					      // All webpack builds depend on the tsconfig  and package json files
 | 
				
			||||||
 | 
					      .concat(['tsconfig.json', 'tsconfig.electron.json', 'package.json'])
 | 
				
			||||||
      // Make the generated list easier to read
 | 
					      // Make the generated list easier to read
 | 
				
			||||||
      .sort()
 | 
					      .sort()
 | 
				
			||||||
      // All browserify commands depend on the tsconfig  and package json files
 | 
					 | 
				
			||||||
      .concat(['tsconfig.json', 'tsconfig.electron.json', 'package.json'])
 | 
					 | 
				
			||||||
    await fs.remove(tmpDir)
 | 
					    await fs.remove(tmpDir)
 | 
				
			||||||
  }))
 | 
					  }))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -93,7 +88,7 @@ auto_filenames = {
 | 
				
			||||||
${allDocs.map(doc => `    "${doc}",`).join('\n')}
 | 
					${allDocs.map(doc => `    "${doc}",`).join('\n')}
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
${browserifyTargets.map(target => `  ${target.name} = [
 | 
					${webpackTargets.map(target => `  ${target.name} = [
 | 
				
			||||||
${target.dependencies.map(dep => `    "${dep}",`).join('\n')}
 | 
					${target.dependencies.map(dep => `    "${dep}",`).join('\n')}
 | 
				
			||||||
  ]`).join('\n\n')}
 | 
					  ]`).join('\n\n')}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,7 +42,7 @@ describe('asar package', function () {
 | 
				
			||||||
      it('does not leak fd', function () {
 | 
					      it('does not leak fd', function () {
 | 
				
			||||||
        let readCalls = 1
 | 
					        let readCalls = 1
 | 
				
			||||||
        while (readCalls <= 10000) {
 | 
					        while (readCalls <= 10000) {
 | 
				
			||||||
          fs.readFileSync(path.join(process.resourcesPath, 'electron.asar', 'renderer', 'api', 'ipc-renderer.js'))
 | 
					          fs.readFileSync(path.join(process.resourcesPath, 'electron.asar', 'renderer', 'init.js'))
 | 
				
			||||||
          readCalls++
 | 
					          readCalls++
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,7 @@ const { expect } = chai
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('feature-string parsing', () => {
 | 
					describe('feature-string parsing', () => {
 | 
				
			||||||
  it('is indifferent to whitespace around keys and values', () => {
 | 
					  it('is indifferent to whitespace around keys and values', () => {
 | 
				
			||||||
    const parseFeaturesString = require('@electron/internal/common/parse-features-string')
 | 
					    const parseFeaturesString = require('../lib/common/parse-features-string')
 | 
				
			||||||
    const checkParse = (string, parsed) => {
 | 
					    const checkParse = (string, parsed) => {
 | 
				
			||||||
      const features = {}
 | 
					      const features = {}
 | 
				
			||||||
      parseFeaturesString(string, (k, v) => { features[k] = v })
 | 
					      parseFeaturesString(string, (k, v) => { features[k] = v })
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,19 +0,0 @@
 | 
				
			||||||
#!/usr/bin/env python
 | 
					 | 
				
			||||||
import os
 | 
					 | 
				
			||||||
import subprocess
 | 
					 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SOURCE_ROOT = os.path.dirname(os.path.dirname(__file__))
 | 
					 | 
				
			||||||
BROWSERIFY = os.path.join(SOURCE_ROOT, 'node_modules', '.bin', 'browserify')
 | 
					 | 
				
			||||||
if sys.platform == 'win32':
 | 
					 | 
				
			||||||
  BROWSERIFY += '.cmd'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
deps = subprocess.check_output([BROWSERIFY, '--list'] + sys.argv[1:])
 | 
					 | 
				
			||||||
for dep in deps.split('\n'):
 | 
					 | 
				
			||||||
    if dep:
 | 
					 | 
				
			||||||
        dep = os.path.relpath(dep, SOURCE_ROOT)
 | 
					 | 
				
			||||||
        if sys.platform == 'win32':
 | 
					 | 
				
			||||||
            print('/'.join(dep.split('\\')))
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            print(dep)
 | 
					 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue