chore: tsify sandboxed init (#23719)
This commit is contained in:
		
					parent
					
						
							
								9f21d09dfd
							
						
					
				
			
			
				commit
				
					
						236c1334e3
					
				
			
		
					 4 changed files with 32 additions and 19 deletions
				
			
		|  | @ -167,10 +167,12 @@ auto_filenames = { | ||||||
|     "lib/renderer/window-setup.ts", |     "lib/renderer/window-setup.ts", | ||||||
|     "lib/sandboxed_renderer/api/exports/electron.ts", |     "lib/sandboxed_renderer/api/exports/electron.ts", | ||||||
|     "lib/sandboxed_renderer/api/module-list.ts", |     "lib/sandboxed_renderer/api/module-list.ts", | ||||||
|     "lib/sandboxed_renderer/init.js", |     "lib/sandboxed_renderer/init.ts", | ||||||
|     "package.json", |     "package.json", | ||||||
|     "tsconfig.electron.json", |     "tsconfig.electron.json", | ||||||
|     "tsconfig.json", |     "tsconfig.json", | ||||||
|  |     "typings/internal-ambient.d.ts", | ||||||
|  |     "typings/internal-electron.d.ts", | ||||||
|   ] |   ] | ||||||
| 
 | 
 | ||||||
|   isolated_bundle_deps = [ |   isolated_bundle_deps = [ | ||||||
|  | @ -181,6 +183,8 @@ auto_filenames = { | ||||||
|     "package.json", |     "package.json", | ||||||
|     "tsconfig.electron.json", |     "tsconfig.electron.json", | ||||||
|     "tsconfig.json", |     "tsconfig.json", | ||||||
|  |     "typings/internal-ambient.d.ts", | ||||||
|  |     "typings/internal-electron.d.ts", | ||||||
|   ] |   ] | ||||||
| 
 | 
 | ||||||
|   browser_bundle_deps = [ |   browser_bundle_deps = [ | ||||||
|  | @ -256,6 +260,8 @@ auto_filenames = { | ||||||
|     "package.json", |     "package.json", | ||||||
|     "tsconfig.electron.json", |     "tsconfig.electron.json", | ||||||
|     "tsconfig.json", |     "tsconfig.json", | ||||||
|  |     "typings/internal-ambient.d.ts", | ||||||
|  |     "typings/internal-electron.d.ts", | ||||||
|   ] |   ] | ||||||
| 
 | 
 | ||||||
|   renderer_bundle_deps = [ |   renderer_bundle_deps = [ | ||||||
|  | @ -298,6 +304,8 @@ auto_filenames = { | ||||||
|     "package.json", |     "package.json", | ||||||
|     "tsconfig.electron.json", |     "tsconfig.electron.json", | ||||||
|     "tsconfig.json", |     "tsconfig.json", | ||||||
|  |     "typings/internal-ambient.d.ts", | ||||||
|  |     "typings/internal-electron.d.ts", | ||||||
|   ] |   ] | ||||||
| 
 | 
 | ||||||
|   worker_bundle_deps = [ |   worker_bundle_deps = [ | ||||||
|  | @ -329,5 +337,7 @@ auto_filenames = { | ||||||
|     "package.json", |     "package.json", | ||||||
|     "tsconfig.electron.json", |     "tsconfig.electron.json", | ||||||
|     "tsconfig.json", |     "tsconfig.json", | ||||||
|  |     "typings/internal-ambient.d.ts", | ||||||
|  |     "typings/internal-electron.d.ts", | ||||||
|   ] |   ] | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,11 +1,11 @@ | ||||||
| 'use strict'; |  | ||||||
| 
 |  | ||||||
| /* eslint no-eval: "off" */ | /* eslint no-eval: "off" */ | ||||||
| /* global binding, Buffer */ | /* global binding, Buffer */ | ||||||
| const events = require('events'); | import { electronBindingSetup } from '@electron/internal/common/electron-binding-setup'; | ||||||
|  | import * as events from 'events'; | ||||||
|  | 
 | ||||||
| const { EventEmitter } = events; | const { EventEmitter } = events; | ||||||
| 
 | 
 | ||||||
| process.electronBinding = require('@electron/internal/common/electron-binding-setup').electronBindingSetup(binding.get, 'renderer'); | process.electronBinding = electronBindingSetup(binding.get, 'renderer'); | ||||||
| 
 | 
 | ||||||
| const v8Util = process.electronBinding('v8_util'); | const v8Util = process.electronBinding('v8_util'); | ||||||
| // Expose Buffer shim 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
 | ||||||
|  | @ -19,7 +19,7 @@ v8Util.setHiddenValue(global, 'ipc', new EventEmitter()); | ||||||
| v8Util.setHiddenValue(global, 'ipc-internal', new EventEmitter()); | v8Util.setHiddenValue(global, 'ipc-internal', new EventEmitter()); | ||||||
| // The process object created by webpack 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) as (keyof typeof process)[]) { | ||||||
|   if (Object.prototype.hasOwnProperty.call(process, prop)) { |   if (Object.prototype.hasOwnProperty.call(process, prop)) { | ||||||
|     delete process[prop]; |     delete process[prop]; | ||||||
|   } |   } | ||||||
|  | @ -53,7 +53,7 @@ const loadedModules = new Map([ | ||||||
| // ElectronApiServiceImpl will look for the "ipcNative" hidden object when
 | // ElectronApiServiceImpl will look for the "ipcNative" hidden object when
 | ||||||
| // invoking the 'onMessage' callback.
 | // invoking the 'onMessage' callback.
 | ||||||
| v8Util.setHiddenValue(global, 'ipcNative', { | v8Util.setHiddenValue(global, 'ipcNative', { | ||||||
|   onMessage (internal, channel, ports, args, senderId) { |   onMessage (internal: boolean, channel: string, ports: MessagePort[], args: any[], senderId: number) { | ||||||
|     const sender = internal ? ipcRendererInternal : electron.ipcRenderer; |     const sender = internal ? ipcRendererInternal : electron.ipcRenderer; | ||||||
|     sender.emit(channel, { sender, senderId, ports }, ...args); |     sender.emit(channel, { sender, senderId, ports }, ...args); | ||||||
|   } |   } | ||||||
|  | @ -62,16 +62,16 @@ v8Util.setHiddenValue(global, 'ipcNative', { | ||||||
| // ElectronSandboxedRendererClient will look for the "lifecycle" hidden object when
 | // ElectronSandboxedRendererClient will look for the "lifecycle" hidden object when
 | ||||||
| v8Util.setHiddenValue(global, 'lifecycle', { | v8Util.setHiddenValue(global, 'lifecycle', { | ||||||
|   onLoaded () { |   onLoaded () { | ||||||
|     process.emit('loaded'); |     (process as events.EventEmitter).emit('loaded'); | ||||||
|   }, |   }, | ||||||
|   onExit () { |   onExit () { | ||||||
|     process.emit('exit'); |     (process as events.EventEmitter).emit('exit'); | ||||||
|   }, |   }, | ||||||
|   onDocumentStart () { |   onDocumentStart () { | ||||||
|     process.emit('document-start'); |     (process as events.EventEmitter).emit('document-start'); | ||||||
|   }, |   }, | ||||||
|   onDocumentEnd () { |   onDocumentEnd () { | ||||||
|     process.emit('document-end'); |     (process as events.EventEmitter).emit('document-end'); | ||||||
|   } |   } | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
|  | @ -80,7 +80,7 @@ webFrameInit(); | ||||||
| 
 | 
 | ||||||
| // Pass different process object to the preload script(which should not have
 | // Pass different process object to the preload script(which should not have
 | ||||||
| // access to things like `process.electronBinding`).
 | // access to things like `process.electronBinding`).
 | ||||||
| const preloadProcess = new EventEmitter(); | const preloadProcess: NodeJS.Process = new EventEmitter() as any; | ||||||
| 
 | 
 | ||||||
| Object.assign(preloadProcess, binding.process); | Object.assign(preloadProcess, binding.process); | ||||||
| Object.assign(preloadProcess, processProps); | Object.assign(preloadProcess, processProps); | ||||||
|  | @ -97,13 +97,13 @@ Object.defineProperty(preloadProcess, 'noDeprecation', { | ||||||
|   } |   } | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| process.on('loaded', () => preloadProcess.emit('loaded')); | process.on('loaded', () => (preloadProcess as events.EventEmitter).emit('loaded')); | ||||||
| process.on('exit', () => preloadProcess.emit('exit')); | process.on('exit', () => (preloadProcess as events.EventEmitter).emit('exit')); | ||||||
| process.on('document-start', () => preloadProcess.emit('document-start')); | (process as events.EventEmitter).on('document-start', () => (preloadProcess as events.EventEmitter).emit('document-start')); | ||||||
| process.on('document-end', () => preloadProcess.emit('document-end')); | (process as events.EventEmitter).on('document-end', () => (preloadProcess as events.EventEmitter).emit('document-end')); | ||||||
| 
 | 
 | ||||||
| // This is the `require` function that will be visible to the preload script
 | // This is the `require` function that will be visible to the preload script
 | ||||||
| function preloadRequire (module) { | function preloadRequire (module: string) { | ||||||
|   if (loadedModules.has(module)) { |   if (loadedModules.has(module)) { | ||||||
|     return loadedModules.get(module); |     return loadedModules.get(module); | ||||||
|   } |   } | ||||||
|  | @ -156,7 +156,7 @@ if (process.isMainFrame) { | ||||||
| // - `process`: The `preloadProcess` object
 | // - `process`: The `preloadProcess` object
 | ||||||
| // - `Buffer`: Shim of `Buffer` implementation
 | // - `Buffer`: Shim of `Buffer` implementation
 | ||||||
| // - `global`: The window object, which is aliased to `global` by webpack.
 | // - `global`: The window object, which is aliased to `global` by webpack.
 | ||||||
| function runPreloadScript (preloadSrc) { | function runPreloadScript (preloadSrc: string) { | ||||||
|   const preloadWrapperSrc = `(function(require, process, Buffer, global, setImmediate, clearImmediate, exports) {
 |   const preloadWrapperSrc = `(function(require, process, Buffer, global, setImmediate, clearImmediate, exports) {
 | ||||||
|   ${preloadSrc} |   ${preloadSrc} | ||||||
|   })`;
 |   })`;
 | ||||||
|  | @ -13,6 +13,8 @@ const allDocs = fs.readdirSync(path.resolve(__dirname, '../docs/api')) | ||||||
|       .map(doc => `docs/api/structures/${doc}`) |       .map(doc => `docs/api/structures/${doc}`) | ||||||
|   ); |   ); | ||||||
| 
 | 
 | ||||||
|  | const typingFiles = fs.readdirSync(path.resolve(__dirname, '../typings')).map(child => `typings/${child}`); | ||||||
|  | 
 | ||||||
| const main = async () => { | const main = async () => { | ||||||
|   const webpackTargets = [ |   const webpackTargets = [ | ||||||
|     { |     { | ||||||
|  | @ -70,7 +72,7 @@ const main = async () => { | ||||||
|       // 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
 |       // All webpack builds depend on the tsconfig  and package json files
 | ||||||
|       .concat(['tsconfig.json', 'tsconfig.electron.json', 'package.json']) |       .concat(['tsconfig.json', 'tsconfig.electron.json', 'package.json', ...typingFiles]) | ||||||
|       // Make the generated list easier to read
 |       // Make the generated list easier to read
 | ||||||
|       .sort(); |       .sort(); | ||||||
|     await fs.remove(tmpDir); |     await fs.remove(tmpDir); | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								typings/internal-ambient.d.ts
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								typings/internal-ambient.d.ts
									
										
									
									
										vendored
									
									
								
							|  | @ -1,4 +1,5 @@ | ||||||
| declare var internalBinding: any; | declare var internalBinding: any; | ||||||
|  | declare var binding: { get: (name: string) => any; process: NodeJS.Process; createPreloadScript: (src: string) => Function }; | ||||||
| 
 | 
 | ||||||
| declare const BUILDFLAG: (flag: boolean) => boolean; | declare const BUILDFLAG: (flag: boolean) => boolean; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Samuel Attard
				Samuel Attard