mirror of
				https://github.com/speice-io/isomorphic-rust
				synced 2025-10-31 17:40:31 -04:00 
			
		
		
		
	Remove old binaryen/percy projects
This commit is contained in:
		| @ -1,5 +1,10 @@ | |||||||
| # Electron applications in Rust | # Electron applications in Rust | ||||||
|  |  | ||||||
| Each app is a starter example, and can be run with `yarn install && yarn start`. | It's 2020, and a lot has changed. | ||||||
|  |  | ||||||
| `stdweb` and `yew` examples currently don't run. | - With the advent of Webpack 5, the previous issues with using WASM in Electron have been vanquished. I can only assume some form of sorcery was involved. All examples have been updated to use the new version. | ||||||
|  | - `wasm32-unknown-unknown` targets are enabled for stable Rust | ||||||
|  | - The previous [`percy`](https://github.com/chinedufn/percy) example has been removed. While work continues on the project, there haven't been any releases. | ||||||
|  | - A new framework [`seed`](https://github.com/seed-rs/seed) as been added as an example. | ||||||
|  |  | ||||||
|  | Each app is a starter example, and can be run with `yarn install && yarn start`. | ||||||
| @ -1,42 +0,0 @@ | |||||||
| { |  | ||||||
|   "env": { |  | ||||||
|     "development": { |  | ||||||
|       "application/javascript": { |  | ||||||
|         "presets": [ |  | ||||||
|           [ |  | ||||||
|             "env", |  | ||||||
|             { |  | ||||||
|               "targets": { |  | ||||||
|                 "electron": 2 |  | ||||||
|               } |  | ||||||
|             } |  | ||||||
|           ], |  | ||||||
|           "react" |  | ||||||
|         ], |  | ||||||
|         "plugins": [ |  | ||||||
|           "transform-async-to-generator" |  | ||||||
|         ], |  | ||||||
|         "sourceMaps": "inline" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "production": { |  | ||||||
|       "application/javascript": { |  | ||||||
|         "presets": [ |  | ||||||
|           [ |  | ||||||
|             "env", |  | ||||||
|             { |  | ||||||
|               "targets": { |  | ||||||
|                 "electron": 2 |  | ||||||
|               } |  | ||||||
|             } |  | ||||||
|           ], |  | ||||||
|           "react" |  | ||||||
|         ], |  | ||||||
|         "plugins": [ |  | ||||||
|           "transform-async-to-generator" |  | ||||||
|         ], |  | ||||||
|         "sourceMaps": "none" |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1,9 +0,0 @@ | |||||||
| { |  | ||||||
|   "extends": "eslint-config-airbnb", |  | ||||||
|   "rules": { |  | ||||||
|     "import/extensions": 0, |  | ||||||
|     "import/no-extraneous-dependencies": 0, |  | ||||||
|     "import/no-unresolved": [2, { "ignore": ["electron"] }], |  | ||||||
|     "linebreak-style": 0 |  | ||||||
|   } |  | ||||||
| } |  | ||||||
							
								
								
									
										5
									
								
								binaryen/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								binaryen/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,5 +0,0 @@ | |||||||
| node_modules/ |  | ||||||
| Cargo.lock |  | ||||||
| target/ |  | ||||||
| dist/ |  | ||||||
| binaryen/ |  | ||||||
| @ -1,15 +0,0 @@ | |||||||
| [package] |  | ||||||
| authors = ["Bradlee Speice"] |  | ||||||
| categories = ["wasm"] |  | ||||||
| description = "A no-framework WASM Electron app" |  | ||||||
| license = "Apache-2.0/MIT" |  | ||||||
| name = "stdweb_electron" |  | ||||||
| readme = "./README.md" |  | ||||||
| repository = "https://github.com/rustwasm/rust-webpack-template" |  | ||||||
| version = "0.1.0" |  | ||||||
|  |  | ||||||
| [lib] |  | ||||||
| crate-type = ["cdylib"] |  | ||||||
|  |  | ||||||
| [dependencies] |  | ||||||
| stdweb = "0.4" |  | ||||||
| @ -1,27 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| DIR="$(dirname $0)" |  | ||||||
| WASM_DIR="$DIR/target/wasm32-unknown-unknown" |  | ||||||
| WASM_NAME="$(cat "$DIR/Cargo.toml" | grep name | sed 's/name = "//' | sed 's/"//g')" |  | ||||||
| APP_DIR="$DIR/dist/" |  | ||||||
|  |  | ||||||
| if [ ! -f "$DIR/binaryen/bin/wasm2js" ]; then |  | ||||||
|     git clone "https://github.com/WebAssembly/binaryen" "$DIR/binaryen" |  | ||||||
|     pushd "$DIR/binaryen" |  | ||||||
|     cmake . && make -j8 |  | ||||||
|     popd |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| if [ ! -d "$APP_DIR" ]; then |  | ||||||
|     mkdir "$APP_DIR" |  | ||||||
| fi |  | ||||||
| cp "$DIR/static/"* "$APP_DIR" |  | ||||||
|  |  | ||||||
| if [ -z "$(which cargo)" ]; then |  | ||||||
|     echo 'Must install `cargo` before proceeding. Please see https://rustup.rs/ for more information.' |  | ||||||
|     exit 1 |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| cargo +nightly build --target=wasm32-unknown-unknown && \ |  | ||||||
|     "$DIR/binaryen/bin/wasm2js" --pedantic "$WASM_DIR/debug/stdweb_electron.wasm" -o "$APP_DIR/stdweb_electron.js" && \ |  | ||||||
|     "$DIR/node_modules/webpack-cli/bin/cli.js" --mode=development "$APP_DIR/stdweb_electron.js" -o "$APP_DIR/bundle.js" |  | ||||||
| @ -1,66 +0,0 @@ | |||||||
| { |  | ||||||
|     "name": "electron_percy_wasm", |  | ||||||
|     "productName": "electron_percy_wasm", |  | ||||||
|     "version": "1.0.0", |  | ||||||
|     "description": "My Electron application description", |  | ||||||
|     "main": "dist/index.js", |  | ||||||
|     "scripts": { |  | ||||||
|         "prestart": "./build.sh", |  | ||||||
|         "start": "electron-forge start", |  | ||||||
|         "package": "electron-forge package", |  | ||||||
|         "make": "electron-forge make", |  | ||||||
|         "lint": "eslint src" |  | ||||||
|     }, |  | ||||||
|     "keywords": [], |  | ||||||
|     "author": "bspeice", |  | ||||||
|     "license": "MIT", |  | ||||||
|     "config": { |  | ||||||
|         "forge": { |  | ||||||
|             "make_targets": { |  | ||||||
|                 "win32": [ |  | ||||||
|                     "squirrel" |  | ||||||
|                 ], |  | ||||||
|                 "darwin": [ |  | ||||||
|                     "zip" |  | ||||||
|                 ], |  | ||||||
|                 "linux": [ |  | ||||||
|                     "deb", |  | ||||||
|                     "rpm" |  | ||||||
|                 ] |  | ||||||
|             }, |  | ||||||
|             "electronPackagerConfig": { |  | ||||||
|                 "packageManager": "yarn" |  | ||||||
|             }, |  | ||||||
|             "electronWinstallerConfig": { |  | ||||||
|                 "name": "electron_percy_wasm" |  | ||||||
|             }, |  | ||||||
|             "electronInstallerDebian": {}, |  | ||||||
|             "electronInstallerRedhat": {}, |  | ||||||
|             "github_repository": { |  | ||||||
|                 "owner": "", |  | ||||||
|                 "name": "" |  | ||||||
|             }, |  | ||||||
|             "windowsStoreConfig": { |  | ||||||
|                 "packageName": "", |  | ||||||
|                 "name": "electron_percy_wasm" |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, |  | ||||||
|     "dependencies": { |  | ||||||
|         "electron-compile": "^6.4.3", |  | ||||||
|         "webpack": "^4.17.1", |  | ||||||
|         "webpack-cli": "^3.1.0" |  | ||||||
|     }, |  | ||||||
|     "devDependencies": { |  | ||||||
|         "babel-plugin-transform-async-to-generator": "^6.24.1", |  | ||||||
|         "babel-preset-env": "^1.7.0", |  | ||||||
|         "babel-preset-react": "^6.24.1", |  | ||||||
|         "electron-forge": "^5.2.2", |  | ||||||
|         "electron-prebuilt-compile": "2.0.7", |  | ||||||
|         "eslint": "^3", |  | ||||||
|         "eslint-config-airbnb": "^15", |  | ||||||
|         "eslint-plugin-import": "^2", |  | ||||||
|         "eslint-plugin-jsx-a11y": "^5", |  | ||||||
|         "eslint-plugin-react": "^7" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,16 +0,0 @@ | |||||||
| extern crate stdweb; |  | ||||||
|  |  | ||||||
| use stdweb::web::document; |  | ||||||
| use stdweb::web::INode; |  | ||||||
| use stdweb::web::IElement; |  | ||||||
|  |  | ||||||
| pub fn run() { |  | ||||||
|     stdweb::initialize(); |  | ||||||
|  |  | ||||||
|     let doc = document(); |  | ||||||
|     let val = doc.create_element("p").unwrap(); |  | ||||||
|     val.set_attribute("innerHTML", "IT IS ALIVE").unwrap(); |  | ||||||
|     doc.body().unwrap().append_child(&val); |  | ||||||
|  |  | ||||||
|     stdweb::event_loop(); |  | ||||||
| } |  | ||||||
| @ -1,8 +0,0 @@ | |||||||
| const app = import("./stdweb_electron") |  | ||||||
| app.then(module => { |  | ||||||
|     console.log("Finished resolving application bundle") |  | ||||||
|     module.run() |  | ||||||
| }, (e) => { |  | ||||||
|     console.log("Unable to resolve application bundle: ") |  | ||||||
|     console.log(e) |  | ||||||
| }) |  | ||||||
| @ -1,11 +0,0 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html> |  | ||||||
|   <head> |  | ||||||
|     <meta charset="utf-8"> |  | ||||||
|     <title></title> |  | ||||||
|   </head> |  | ||||||
|   <body> |  | ||||||
|     <p>Loading...</p> |  | ||||||
|   </body> |  | ||||||
|   <script src="./bundle.js"/> |  | ||||||
| </html> |  | ||||||
| @ -1,52 +0,0 @@ | |||||||
| import { app, BrowserWindow } from 'electron'; |  | ||||||
|  |  | ||||||
| // Keep a global reference of the window object, if you don't, the window will |  | ||||||
| // be closed automatically when the JavaScript object is garbage collected. |  | ||||||
| let mainWindow; |  | ||||||
|  |  | ||||||
| const createWindow = () => { |  | ||||||
|   // Create the browser window. |  | ||||||
|   mainWindow = new BrowserWindow({ |  | ||||||
|     width: 800, |  | ||||||
|     height: 600, |  | ||||||
|   }); |  | ||||||
|  |  | ||||||
|   // and load the index.html of the app. |  | ||||||
|   mainWindow.loadURL(`file://${__dirname}/index.html`); |  | ||||||
|  |  | ||||||
|   // Open the DevTools. |  | ||||||
|   mainWindow.webContents.openDevTools(); |  | ||||||
|  |  | ||||||
|   // Emitted when the window is closed. |  | ||||||
|   mainWindow.on('closed', () => { |  | ||||||
|     // Dereference the window object, usually you would store windows |  | ||||||
|     // in an array if your app supports multi windows, this is the time |  | ||||||
|     // when you should delete the corresponding element. |  | ||||||
|     mainWindow = null; |  | ||||||
|   }); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| // This method will be called when Electron has finished |  | ||||||
| // initialization and is ready to create browser windows. |  | ||||||
| // Some APIs can only be used after this event occurs. |  | ||||||
| app.on('ready', createWindow); |  | ||||||
|  |  | ||||||
| // Quit when all windows are closed. |  | ||||||
| app.on('window-all-closed', () => { |  | ||||||
|   // On OS X it is common for applications and their menu bar |  | ||||||
|   // to stay active until the user quits explicitly with Cmd + Q |  | ||||||
|   if (process.platform !== 'darwin') { |  | ||||||
|     app.quit(); |  | ||||||
|   } |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| app.on('activate', () => { |  | ||||||
|   // On OS X it's common to re-create a window in the app when the |  | ||||||
|   // dock icon is clicked and there are no other windows open. |  | ||||||
|   if (mainWindow === null) { |  | ||||||
|     createWindow(); |  | ||||||
|   } |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| // In this file you can include the rest of your app's specific main process |  | ||||||
| // code. You can also put them in separate files and import them here. |  | ||||||
							
								
								
									
										7750
									
								
								binaryen/yarn.lock
									
									
									
									
									
								
							
							
						
						
									
										7750
									
								
								binaryen/yarn.lock
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,42 +0,0 @@ | |||||||
| { |  | ||||||
|   "env": { |  | ||||||
|     "development": { |  | ||||||
|       "application/javascript": { |  | ||||||
|         "presets": [ |  | ||||||
|           [ |  | ||||||
|             "env", |  | ||||||
|             { |  | ||||||
|               "targets": { |  | ||||||
|                 "electron": 2 |  | ||||||
|               } |  | ||||||
|             } |  | ||||||
|           ], |  | ||||||
|           "react" |  | ||||||
|         ], |  | ||||||
|         "plugins": [ |  | ||||||
|           "transform-async-to-generator" |  | ||||||
|         ], |  | ||||||
|         "sourceMaps": "inline" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "production": { |  | ||||||
|       "application/javascript": { |  | ||||||
|         "presets": [ |  | ||||||
|           [ |  | ||||||
|             "env", |  | ||||||
|             { |  | ||||||
|               "targets": { |  | ||||||
|                 "electron": 2 |  | ||||||
|               } |  | ||||||
|             } |  | ||||||
|           ], |  | ||||||
|           "react" |  | ||||||
|         ], |  | ||||||
|         "plugins": [ |  | ||||||
|           "transform-async-to-generator" |  | ||||||
|         ], |  | ||||||
|         "sourceMaps": "none" |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1,9 +0,0 @@ | |||||||
| { |  | ||||||
|   "extends": "eslint-config-airbnb", |  | ||||||
|   "rules": { |  | ||||||
|     "import/extensions": 0, |  | ||||||
|     "import/no-extraneous-dependencies": 0, |  | ||||||
|     "import/no-unresolved": [2, { "ignore": ["electron"] }], |  | ||||||
|     "linebreak-style": 0 |  | ||||||
|   } |  | ||||||
| } |  | ||||||
							
								
								
									
										4
									
								
								percy/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								percy/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,4 +0,0 @@ | |||||||
| node_modules/ |  | ||||||
| Cargo.lock |  | ||||||
| target/ |  | ||||||
| dist/ |  | ||||||
| @ -1,12 +0,0 @@ | |||||||
| [package] |  | ||||||
| name = "percy" |  | ||||||
| version = "0.1.0" |  | ||||||
| authors = ["Bradlee Speice <bradlee@speice.io>"] |  | ||||||
|  |  | ||||||
| [lib] |  | ||||||
| crate-type = ["cdylib"] |  | ||||||
|  |  | ||||||
| [dependencies] |  | ||||||
| percy-webapis = "0.0.1" |  | ||||||
| virtual-dom-rs = "0.1" |  | ||||||
| wasm-bindgen = "0.2" |  | ||||||
| @ -1,25 +0,0 @@ | |||||||
| DIR="$(dirname $0)" |  | ||||||
| WASM_DIR="$DIR/target/wasm32-unknown-unknown" |  | ||||||
| WASM_NAME="$(cat "$DIR/Cargo.toml" | grep name | sed 's/name = "//' | sed 's/"//g')" |  | ||||||
| APP_DIR="$DIR/dist/" |  | ||||||
|  |  | ||||||
| if [ ! -d "$APP_DIR" ]; then |  | ||||||
|     mkdir "$APP_DIR" |  | ||||||
| fi |  | ||||||
| cp "$DIR/static/"* "$APP_DIR" |  | ||||||
|  |  | ||||||
| if [ -z "$(which cargo)" ]; then |  | ||||||
|     echo 'Must install `cargo` before proceeding. Please see https://rustup.rs/ for more information.' |  | ||||||
|     exit 1 |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| if [ -z "$(which wasm-bindgen)" ]; then |  | ||||||
|     echo "Installing wasm-bindgen-cli" |  | ||||||
|     cargo install wasm-bindgen-cli |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| cargo +nightly build --target=wasm32-unknown-unknown && \ |  | ||||||
|     wasm-bindgen "$WASM_DIR/debug/$WASM_NAME.wasm" --out-dir "$APP_DIR" --no-typescript && \ |  | ||||||
|     # Have to use --mode=development so we can patch out the call to instantiateStreaming |  | ||||||
|     "$DIR/node_modules/webpack-cli/bin/cli.js" --mode=development "$APP_DIR/app_loader.js" -o "$APP_DIR/bundle.js" && \ |  | ||||||
|     sed -i 's/.*instantiateStreaming.*//g' "$APP_DIR/bundle.js" |  | ||||||
| @ -1,66 +0,0 @@ | |||||||
| { |  | ||||||
|     "name": "electron_percy_wasm", |  | ||||||
|     "productName": "electron_percy_wasm", |  | ||||||
|     "version": "1.0.0", |  | ||||||
|     "description": "My Electron application description", |  | ||||||
|     "main": "dist/index.js", |  | ||||||
|     "scripts": { |  | ||||||
|         "prestart": "./build.sh", |  | ||||||
|         "start": "electron-forge start", |  | ||||||
|         "package": "electron-forge package", |  | ||||||
|         "make": "electron-forge make", |  | ||||||
|         "lint": "eslint src" |  | ||||||
|     }, |  | ||||||
|     "keywords": [], |  | ||||||
|     "author": "bspeice", |  | ||||||
|     "license": "MIT", |  | ||||||
|     "config": { |  | ||||||
|         "forge": { |  | ||||||
|             "make_targets": { |  | ||||||
|                 "win32": [ |  | ||||||
|                     "squirrel" |  | ||||||
|                 ], |  | ||||||
|                 "darwin": [ |  | ||||||
|                     "zip" |  | ||||||
|                 ], |  | ||||||
|                 "linux": [ |  | ||||||
|                     "deb", |  | ||||||
|                     "rpm" |  | ||||||
|                 ] |  | ||||||
|             }, |  | ||||||
|             "electronPackagerConfig": { |  | ||||||
|                 "packageManager": "yarn" |  | ||||||
|             }, |  | ||||||
|             "electronWinstallerConfig": { |  | ||||||
|                 "name": "electron_percy_wasm" |  | ||||||
|             }, |  | ||||||
|             "electronInstallerDebian": {}, |  | ||||||
|             "electronInstallerRedhat": {}, |  | ||||||
|             "github_repository": { |  | ||||||
|                 "owner": "", |  | ||||||
|                 "name": "" |  | ||||||
|             }, |  | ||||||
|             "windowsStoreConfig": { |  | ||||||
|                 "packageName": "", |  | ||||||
|                 "name": "electron_percy_wasm" |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, |  | ||||||
|     "dependencies": { |  | ||||||
|         "electron-compile": "^6.4.3", |  | ||||||
|         "webpack": "^4.17.1", |  | ||||||
|         "webpack-cli": "^3.1.0" |  | ||||||
|     }, |  | ||||||
|     "devDependencies": { |  | ||||||
|         "babel-plugin-transform-async-to-generator": "^6.24.1", |  | ||||||
|         "babel-preset-env": "^1.7.0", |  | ||||||
|         "babel-preset-react": "^6.24.1", |  | ||||||
|         "electron-forge": "^5.2.2", |  | ||||||
|         "electron-prebuilt-compile": "2.0.7", |  | ||||||
|         "eslint": "^3", |  | ||||||
|         "eslint-config-airbnb": "^15", |  | ||||||
|         "eslint-plugin-import": "^2", |  | ||||||
|         "eslint-plugin-jsx-a11y": "^5", |  | ||||||
|         "eslint-plugin-react": "^7" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,20 +0,0 @@ | |||||||
| #[macro_use] |  | ||||||
| extern crate virtual_dom_rs; |  | ||||||
|  |  | ||||||
| extern crate percy_webapis; |  | ||||||
| extern crate wasm_bindgen; |  | ||||||
|  |  | ||||||
| use percy_webapis::log; |  | ||||||
| use percy_webapis::Element; |  | ||||||
| use wasm_bindgen::prelude::*; |  | ||||||
|  |  | ||||||
| #[wasm_bindgen] |  | ||||||
| pub fn main() -> Element { |  | ||||||
|     log("Entered Rust code"); |  | ||||||
|  |  | ||||||
|     let elem = html! { |  | ||||||
|         <span> {"It is alive!"} </span> |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     elem.create_element() |  | ||||||
| } |  | ||||||
| @ -1,10 +0,0 @@ | |||||||
| const app = import("./percy") |  | ||||||
| app.then(module => { |  | ||||||
|     console.log("Finished resolving application bundle") |  | ||||||
|     let rootNode = document.getElementById('root') |  | ||||||
|     rootNode.parentElement.replaceChild(module.main(), rootNode) |  | ||||||
|     rootNode = document.getElementById('root') |  | ||||||
| }, (e) => { |  | ||||||
|     console.log("Unable to resolve application bundle: ") |  | ||||||
|     console.log(e) |  | ||||||
| }) |  | ||||||
| @ -1,11 +0,0 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html> |  | ||||||
|   <head> |  | ||||||
|     <meta charset="utf-8"> |  | ||||||
|     <title></title> |  | ||||||
|   </head> |  | ||||||
|   <body> |  | ||||||
|     <div id="root">Loading...</div> |  | ||||||
|   </body> |  | ||||||
|   <script src="./bundle.js"/> |  | ||||||
| </html> |  | ||||||
| @ -1,52 +0,0 @@ | |||||||
| import { app, BrowserWindow } from 'electron'; |  | ||||||
|  |  | ||||||
| // Keep a global reference of the window object, if you don't, the window will |  | ||||||
| // be closed automatically when the JavaScript object is garbage collected. |  | ||||||
| let mainWindow; |  | ||||||
|  |  | ||||||
| const createWindow = () => { |  | ||||||
|   // Create the browser window. |  | ||||||
|   mainWindow = new BrowserWindow({ |  | ||||||
|     width: 800, |  | ||||||
|     height: 600, |  | ||||||
|   }); |  | ||||||
|  |  | ||||||
|   // and load the index.html of the app. |  | ||||||
|   mainWindow.loadURL(`file://${__dirname}/index.html`); |  | ||||||
|  |  | ||||||
|   // Open the DevTools. |  | ||||||
|   mainWindow.webContents.openDevTools(); |  | ||||||
|  |  | ||||||
|   // Emitted when the window is closed. |  | ||||||
|   mainWindow.on('closed', () => { |  | ||||||
|     // Dereference the window object, usually you would store windows |  | ||||||
|     // in an array if your app supports multi windows, this is the time |  | ||||||
|     // when you should delete the corresponding element. |  | ||||||
|     mainWindow = null; |  | ||||||
|   }); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| // This method will be called when Electron has finished |  | ||||||
| // initialization and is ready to create browser windows. |  | ||||||
| // Some APIs can only be used after this event occurs. |  | ||||||
| app.on('ready', createWindow); |  | ||||||
|  |  | ||||||
| // Quit when all windows are closed. |  | ||||||
| app.on('window-all-closed', () => { |  | ||||||
|   // On OS X it is common for applications and their menu bar |  | ||||||
|   // to stay active until the user quits explicitly with Cmd + Q |  | ||||||
|   if (process.platform !== 'darwin') { |  | ||||||
|     app.quit(); |  | ||||||
|   } |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| app.on('activate', () => { |  | ||||||
|   // On OS X it's common to re-create a window in the app when the |  | ||||||
|   // dock icon is clicked and there are no other windows open. |  | ||||||
|   if (mainWindow === null) { |  | ||||||
|     createWindow(); |  | ||||||
|   } |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| // In this file you can include the rest of your app's specific main process |  | ||||||
| // code. You can also put them in separate files and import them here. |  | ||||||
							
								
								
									
										7736
									
								
								percy/yarn.lock
									
									
									
									
									
								
							
							
						
						
									
										7736
									
								
								percy/yarn.lock
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,42 +0,0 @@ | |||||||
| { |  | ||||||
|   "env": { |  | ||||||
|     "development": { |  | ||||||
|       "application/javascript": { |  | ||||||
|         "presets": [ |  | ||||||
|           [ |  | ||||||
|             "env", |  | ||||||
|             { |  | ||||||
|               "targets": { |  | ||||||
|                 "electron": 2 |  | ||||||
|               } |  | ||||||
|             } |  | ||||||
|           ], |  | ||||||
|           "react" |  | ||||||
|         ], |  | ||||||
|         "plugins": [ |  | ||||||
|           "transform-async-to-generator" |  | ||||||
|         ], |  | ||||||
|         "sourceMaps": "inline" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "production": { |  | ||||||
|       "application/javascript": { |  | ||||||
|         "presets": [ |  | ||||||
|           [ |  | ||||||
|             "env", |  | ||||||
|             { |  | ||||||
|               "targets": { |  | ||||||
|                 "electron": 2 |  | ||||||
|               } |  | ||||||
|             } |  | ||||||
|           ], |  | ||||||
|           "react" |  | ||||||
|         ], |  | ||||||
|         "plugins": [ |  | ||||||
|           "transform-async-to-generator" |  | ||||||
|         ], |  | ||||||
|         "sourceMaps": "none" |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1,9 +0,0 @@ | |||||||
| { |  | ||||||
|   "extends": "eslint-config-airbnb", |  | ||||||
|   "rules": { |  | ||||||
|     "import/extensions": 0, |  | ||||||
|     "import/no-extraneous-dependencies": 0, |  | ||||||
|     "import/no-unresolved": [2, { "ignore": ["electron"] }], |  | ||||||
|     "linebreak-style": 0 |  | ||||||
|   } |  | ||||||
| } |  | ||||||
							
								
								
									
										4
									
								
								percy_patched_webpack/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								percy_patched_webpack/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,4 +0,0 @@ | |||||||
| node_modules/ |  | ||||||
| Cargo.lock |  | ||||||
| target/ |  | ||||||
| dist/ |  | ||||||
| @ -1,12 +0,0 @@ | |||||||
| [package] |  | ||||||
| name = "percy" |  | ||||||
| version = "0.1.0" |  | ||||||
| authors = ["Bradlee Speice <bradlee@speice.io>"] |  | ||||||
|  |  | ||||||
| [lib] |  | ||||||
| crate-type = ["cdylib"] |  | ||||||
|  |  | ||||||
| [dependencies] |  | ||||||
| percy-webapis = "0.0.1" |  | ||||||
| virtual-dom-rs = "0.1" |  | ||||||
| wasm-bindgen = "0.2" |  | ||||||
| @ -1,372 +0,0 @@ | |||||||
| /* |  | ||||||
| 	MIT License http://www.opensource.org/licenses/mit-license.php |  | ||||||
| 	Author Tobias Koppers @sokra |  | ||||||
| */ |  | ||||||
| "use strict"; |  | ||||||
|  |  | ||||||
| const Template = require("../Template"); |  | ||||||
| const WebAssemblyUtils = require("./WebAssemblyUtils"); |  | ||||||
|  |  | ||||||
| /** @typedef {import("../Module")} Module */ |  | ||||||
| /** @typedef {import("../MainTemplate")} MainTemplate */ |  | ||||||
|  |  | ||||||
| // Get all wasm modules |  | ||||||
| const getAllWasmModules = chunk => { |  | ||||||
| 	const wasmModules = chunk.getAllAsyncChunks(); |  | ||||||
| 	const array = []; |  | ||||||
| 	for (const chunk of wasmModules) { |  | ||||||
| 		for (const m of chunk.modulesIterable) { |  | ||||||
| 			if (m.type.startsWith("webassembly")) { |  | ||||||
| 				array.push(m); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return array; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * generates the import object function for a module |  | ||||||
|  * @param {Module} module the module |  | ||||||
|  * @param {boolean} mangle mangle imports |  | ||||||
|  * @returns {string} source code |  | ||||||
|  */ |  | ||||||
| const generateImportObject = (module, mangle) => { |  | ||||||
| 	const waitForInstances = new Map(); |  | ||||||
| 	const properties = []; |  | ||||||
| 	const usedWasmDependencies = WebAssemblyUtils.getUsedDependencies( |  | ||||||
| 		module, |  | ||||||
| 		mangle |  | ||||||
| 	); |  | ||||||
| 	for (const usedDep of usedWasmDependencies) { |  | ||||||
| 		const dep = usedDep.dependency; |  | ||||||
| 		const importedModule = dep.module; |  | ||||||
| 		const exportName = dep.name; |  | ||||||
| 		const usedName = importedModule && importedModule.isUsed(exportName); |  | ||||||
| 		const description = dep.description; |  | ||||||
| 		const direct = dep.onlyDirectImport; |  | ||||||
|  |  | ||||||
| 		const module = usedDep.module; |  | ||||||
| 		const name = usedDep.name; |  | ||||||
|  |  | ||||||
| 		if (direct) { |  | ||||||
| 			const instanceVar = `m${waitForInstances.size}`; |  | ||||||
| 			waitForInstances.set(instanceVar, importedModule.id); |  | ||||||
| 			properties.push({ |  | ||||||
| 				module, |  | ||||||
| 				name, |  | ||||||
| 				value: `${instanceVar}[${JSON.stringify(usedName)}]` |  | ||||||
| 			}); |  | ||||||
| 		} else { |  | ||||||
| 			const params = description.signature.params.map( |  | ||||||
| 				(param, k) => "p" + k + param.valtype |  | ||||||
| 			); |  | ||||||
|  |  | ||||||
| 			const mod = `installedModules[${JSON.stringify(importedModule.id)}]`; |  | ||||||
| 			const func = `${mod}.exports[${JSON.stringify(usedName)}]`; |  | ||||||
|  |  | ||||||
| 			properties.push({ |  | ||||||
| 				module, |  | ||||||
| 				name, |  | ||||||
| 				value: Template.asString([ |  | ||||||
| 					(importedModule.type.startsWith("webassembly") |  | ||||||
| 						? `${mod} ? ${func} : ` |  | ||||||
| 						: "") + `function(${params}) {`, |  | ||||||
| 					Template.indent([`return ${func}(${params});`]), |  | ||||||
| 					"}" |  | ||||||
| 				]) |  | ||||||
| 			}); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	let importObject; |  | ||||||
| 	if (mangle) { |  | ||||||
| 		importObject = [ |  | ||||||
| 			"return {", |  | ||||||
| 			Template.indent([ |  | ||||||
| 				properties.map(p => `${JSON.stringify(p.name)}: ${p.value}`).join(",\n") |  | ||||||
| 			]), |  | ||||||
| 			"};" |  | ||||||
| 		]; |  | ||||||
| 	} else { |  | ||||||
| 		const propertiesByModule = new Map(); |  | ||||||
| 		for (const p of properties) { |  | ||||||
| 			let list = propertiesByModule.get(p.module); |  | ||||||
| 			if (list === undefined) { |  | ||||||
| 				propertiesByModule.set(p.module, (list = [])); |  | ||||||
| 			} |  | ||||||
| 			list.push(p); |  | ||||||
| 		} |  | ||||||
| 		importObject = [ |  | ||||||
| 			"return {", |  | ||||||
| 			Template.indent([ |  | ||||||
| 				Array.from(propertiesByModule, ([module, list]) => { |  | ||||||
| 					return Template.asString([ |  | ||||||
| 						`${JSON.stringify(module)}: {`, |  | ||||||
| 						Template.indent([ |  | ||||||
| 							list.map(p => `${JSON.stringify(p.name)}: ${p.value}`).join(",\n") |  | ||||||
| 						]), |  | ||||||
| 						"}" |  | ||||||
| 					]); |  | ||||||
| 				}).join(",\n") |  | ||||||
| 			]), |  | ||||||
| 			"};" |  | ||||||
| 		]; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if (waitForInstances.size === 1) { |  | ||||||
| 		const moduleId = Array.from(waitForInstances.values())[0]; |  | ||||||
| 		const promise = `installedWasmModules[${JSON.stringify(moduleId)}]`; |  | ||||||
| 		const variable = Array.from(waitForInstances.keys())[0]; |  | ||||||
| 		return Template.asString([ |  | ||||||
| 			`${JSON.stringify(module.id)}: function() {`, |  | ||||||
| 			Template.indent([ |  | ||||||
| 				`return promiseResolve().then(function() { return ${promise}; }).then(function(${variable}) {`, |  | ||||||
| 				Template.indent(importObject), |  | ||||||
| 				"});" |  | ||||||
| 			]), |  | ||||||
| 			"}," |  | ||||||
| 		]); |  | ||||||
| 	} else if (waitForInstances.size > 0) { |  | ||||||
| 		const promises = Array.from( |  | ||||||
| 			waitForInstances.values(), |  | ||||||
| 			id => `installedWasmModules[${JSON.stringify(id)}]` |  | ||||||
| 		).join(", "); |  | ||||||
| 		const variables = Array.from( |  | ||||||
| 			waitForInstances.keys(), |  | ||||||
| 			(name, i) => `${name} = array[${i}]` |  | ||||||
| 		).join(", "); |  | ||||||
| 		return Template.asString([ |  | ||||||
| 			`${JSON.stringify(module.id)}: function() {`, |  | ||||||
| 			Template.indent([ |  | ||||||
| 				`return promiseResolve().then(function() { return Promise.all([${promises}]); }).then(function(array) {`, |  | ||||||
| 				Template.indent([`var ${variables};`, ...importObject]), |  | ||||||
| 				"});" |  | ||||||
| 			]), |  | ||||||
| 			"}," |  | ||||||
| 		]); |  | ||||||
| 	} else { |  | ||||||
| 		return Template.asString([ |  | ||||||
| 			`${JSON.stringify(module.id)}: function() {`, |  | ||||||
| 			Template.indent(importObject), |  | ||||||
| 			"}," |  | ||||||
| 		]); |  | ||||||
| 	} |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| class WasmMainTemplatePlugin { |  | ||||||
| 	constructor({ generateLoadBinaryCode, supportsStreaming, mangleImports }) { |  | ||||||
| 		this.generateLoadBinaryCode = generateLoadBinaryCode; |  | ||||||
| 		this.supportsStreaming = supportsStreaming; |  | ||||||
| 		this.mangleImports = mangleImports; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/** |  | ||||||
| 	 * @param {MainTemplate} mainTemplate main template |  | ||||||
| 	 * @returns {void} |  | ||||||
| 	 */ |  | ||||||
| 	apply(mainTemplate) { |  | ||||||
| 		mainTemplate.hooks.localVars.tap( |  | ||||||
| 			"WasmMainTemplatePlugin", |  | ||||||
| 			(source, chunk) => { |  | ||||||
| 				const wasmModules = getAllWasmModules(chunk); |  | ||||||
| 				if (wasmModules.length === 0) return source; |  | ||||||
| 				const importObjects = wasmModules.map(module => { |  | ||||||
| 					return generateImportObject(module, this.mangleImports); |  | ||||||
| 				}); |  | ||||||
| 				return Template.asString([ |  | ||||||
| 					source, |  | ||||||
| 					"", |  | ||||||
| 					"// object to store loaded and loading wasm modules", |  | ||||||
| 					"var installedWasmModules = {};", |  | ||||||
| 					"", |  | ||||||
| 					// This function is used to delay reading the installed wasm module promises |  | ||||||
| 					// by a microtask. Sorting them doesn't help because there are egdecases where |  | ||||||
| 					// sorting is not possible (modules splitted into different chunks). |  | ||||||
| 					// So we not even trying and solve this by a microtask delay. |  | ||||||
| 					"function promiseResolve() { return Promise.resolve(); }", |  | ||||||
| 					"", |  | ||||||
| 					"var wasmImportObjects = {", |  | ||||||
| 					Template.indent(importObjects), |  | ||||||
| 					"};" |  | ||||||
| 				]); |  | ||||||
| 			} |  | ||||||
| 		); |  | ||||||
| 		mainTemplate.hooks.requireEnsure.tap( |  | ||||||
| 			"WasmMainTemplatePlugin", |  | ||||||
| 			(source, chunk, hash) => { |  | ||||||
| 				const webassemblyModuleFilename = |  | ||||||
| 					mainTemplate.outputOptions.webassemblyModuleFilename; |  | ||||||
|  |  | ||||||
| 				const chunkModuleMaps = chunk.getChunkModuleMaps(m => |  | ||||||
| 					m.type.startsWith("webassembly") |  | ||||||
| 				); |  | ||||||
| 				if (Object.keys(chunkModuleMaps.id).length === 0) return source; |  | ||||||
| 				const wasmModuleSrcPath = mainTemplate.getAssetPath( |  | ||||||
| 					JSON.stringify(webassemblyModuleFilename), |  | ||||||
| 					{ |  | ||||||
| 						hash: `" + ${mainTemplate.renderCurrentHashCode(hash)} + "`, |  | ||||||
| 						hashWithLength: length => |  | ||||||
| 							`" + ${mainTemplate.renderCurrentHashCode(hash, length)} + "`, |  | ||||||
| 						module: { |  | ||||||
| 							id: '" + wasmModuleId + "', |  | ||||||
| 							hash: `" + ${JSON.stringify( |  | ||||||
| 								chunkModuleMaps.hash |  | ||||||
| 							)}[wasmModuleId] + "`, |  | ||||||
| 							hashWithLength(length) { |  | ||||||
| 								const shortChunkHashMap = Object.create(null); |  | ||||||
| 								for (const wasmModuleId of Object.keys(chunkModuleMaps.hash)) { |  | ||||||
| 									if (typeof chunkModuleMaps.hash[wasmModuleId] === "string") { |  | ||||||
| 										shortChunkHashMap[wasmModuleId] = chunkModuleMaps.hash[ |  | ||||||
| 											wasmModuleId |  | ||||||
| 										].substr(0, length); |  | ||||||
| 									} |  | ||||||
| 								} |  | ||||||
| 								return `" + ${JSON.stringify( |  | ||||||
| 									shortChunkHashMap |  | ||||||
| 								)}[wasmModuleId] + "`; |  | ||||||
| 							} |  | ||||||
| 						} |  | ||||||
| 					} |  | ||||||
| 				); |  | ||||||
| 				const createImportObject = content => |  | ||||||
| 					this.mangleImports |  | ||||||
| 						? `{ ${JSON.stringify( |  | ||||||
| 								WebAssemblyUtils.MANGLED_MODULE |  | ||||||
| 						  )}: ${content} }` |  | ||||||
| 						: content; |  | ||||||
| 				return Template.asString([ |  | ||||||
| 					source, |  | ||||||
| 					"", |  | ||||||
| 					"// Fetch + compile chunk loading for webassembly", |  | ||||||
| 					"", |  | ||||||
| 					`var wasmModules = ${JSON.stringify( |  | ||||||
| 						chunkModuleMaps.id |  | ||||||
| 					)}[chunkId] || [];`, |  | ||||||
| 					"", |  | ||||||
| 					"wasmModules.forEach(function(wasmModuleId) {", |  | ||||||
| 					Template.indent([ |  | ||||||
| 						"var installedWasmModuleData = installedWasmModules[wasmModuleId];", |  | ||||||
| 						"", |  | ||||||
| 						'// a Promise means "currently loading" or "already loaded".', |  | ||||||
| 						"if(installedWasmModuleData)", |  | ||||||
| 						Template.indent(["promises.push(installedWasmModuleData);"]), |  | ||||||
| 						"else {", |  | ||||||
| 						Template.indent([ |  | ||||||
| 							`var importObject = wasmImportObjects[wasmModuleId]();`, |  | ||||||
| 							`var req = ${this.generateLoadBinaryCode(wasmModuleSrcPath)};`, |  | ||||||
| 							"var promise;", |  | ||||||
| 							this.supportsStreaming |  | ||||||
| 								? Template.asString([ |  | ||||||
| 										"if(importObject instanceof Promise && typeof WebAssembly.compileStreaming === 'function') {", |  | ||||||
| 										Template.indent([ |  | ||||||
| 											"promise = Promise.all([WebAssembly.compileStreaming(req), importObject]).then(function(items) {", |  | ||||||
| 											Template.indent([ |  | ||||||
| 												`return WebAssembly.instantiate(items[0], ${createImportObject( |  | ||||||
| 													"items[1]" |  | ||||||
| 												)});` |  | ||||||
| 											]), |  | ||||||
| 											"});" |  | ||||||
| 										]), |  | ||||||
| 										"} else if(typeof WebAssembly.instantiateStreaming === 'function') {", |  | ||||||
| 										Template.indent([ |  | ||||||
| 											`promise = WebAssembly.instantiateStreaming(req, ${createImportObject( |  | ||||||
| 												"importObject" |  | ||||||
| 											)}).catch(function(reason) {`, |  | ||||||
| 											Template.indent([ |  | ||||||
| 												`if (reason.name === "TypeError") {`, |  | ||||||
| 												Template.indent([ |  | ||||||
| 													`console.log("Potential WASM MIME issue detected, falling back to arrayBuffer instantiation");`, |  | ||||||
| 													"return req.then(function(x) { return x.arrayBuffer(); }).then(function(bytes) {", |  | ||||||
| 													Template.indent([ |  | ||||||
| 														"return WebAssembly.instantiate(bytes, importObject);" |  | ||||||
| 													]), |  | ||||||
| 													"});" |  | ||||||
| 												]), |  | ||||||
| 												"}", |  | ||||||
| 												"throw reason;" |  | ||||||
| 											]), |  | ||||||
| 											"});" |  | ||||||
| 										]) |  | ||||||
| 								  ]) |  | ||||||
| 								: Template.asString([ |  | ||||||
| 										"if(importObject instanceof Promise) {", |  | ||||||
| 										Template.indent([ |  | ||||||
| 											"var bytesPromise = req.then(function(x) { return x.arrayBuffer(); });", |  | ||||||
| 											"promise = Promise.all([", |  | ||||||
| 											Template.indent([ |  | ||||||
| 												"bytesPromise.then(function(bytes) { return WebAssembly.compile(bytes); }),", |  | ||||||
| 												"importObject" |  | ||||||
| 											]), |  | ||||||
| 											"]).then(function(items) {", |  | ||||||
| 											Template.indent([ |  | ||||||
| 												`return WebAssembly.instantiate(items[0], ${createImportObject( |  | ||||||
| 													"items[1]" |  | ||||||
| 												)});` |  | ||||||
| 											]), |  | ||||||
| 											"});" |  | ||||||
| 										]) |  | ||||||
| 								  ]), |  | ||||||
| 							"} else {", |  | ||||||
| 							Template.indent([ |  | ||||||
| 								"var bytesPromise = req.then(function(x) { return x.arrayBuffer(); });", |  | ||||||
| 								"promise = bytesPromise.then(function(bytes) {", |  | ||||||
| 								Template.indent([ |  | ||||||
| 									`return WebAssembly.instantiate(bytes, ${createImportObject( |  | ||||||
| 										"importObject" |  | ||||||
| 									)});` |  | ||||||
| 								]), |  | ||||||
| 								"});" |  | ||||||
| 							]), |  | ||||||
| 							"}", |  | ||||||
| 							"promises.push(installedWasmModules[wasmModuleId] = promise.then(function(res) {", |  | ||||||
| 							Template.indent([ |  | ||||||
| 								`return ${ |  | ||||||
| 									mainTemplate.requireFn |  | ||||||
| 								}.w[wasmModuleId] = (res.instance || res).exports;` |  | ||||||
| 							]), |  | ||||||
| 							"}));" |  | ||||||
| 						]), |  | ||||||
| 						"}" |  | ||||||
| 					]), |  | ||||||
| 					"});" |  | ||||||
| 				]); |  | ||||||
| 			} |  | ||||||
| 		); |  | ||||||
| 		mainTemplate.hooks.requireExtensions.tap( |  | ||||||
| 			"WasmMainTemplatePlugin", |  | ||||||
| 			(source, chunk) => { |  | ||||||
| 				if (!chunk.hasModuleInGraph(m => m.type.startsWith("webassembly"))) { |  | ||||||
| 					return source; |  | ||||||
| 				} |  | ||||||
| 				return Template.asString([ |  | ||||||
| 					source, |  | ||||||
| 					"", |  | ||||||
| 					"// object with all WebAssembly.instance exports", |  | ||||||
| 					`${mainTemplate.requireFn}.w = {};` |  | ||||||
| 				]); |  | ||||||
| 			} |  | ||||||
| 		); |  | ||||||
| 		mainTemplate.hooks.hash.tap("WasmMainTemplatePlugin", hash => { |  | ||||||
| 			hash.update("WasmMainTemplatePlugin"); |  | ||||||
| 			hash.update("1"); |  | ||||||
| 			hash.update(`${mainTemplate.outputOptions.webassemblyModuleFilename}`); |  | ||||||
| 			hash.update(`${this.mangleImports}`); |  | ||||||
| 		}); |  | ||||||
| 		mainTemplate.hooks.hashForChunk.tap( |  | ||||||
| 			"WasmMainTemplatePlugin", |  | ||||||
| 			(hash, chunk) => { |  | ||||||
| 				const chunkModuleMaps = chunk.getChunkModuleMaps(m => |  | ||||||
| 					m.type.startsWith("webassembly") |  | ||||||
| 				); |  | ||||||
| 				hash.update(JSON.stringify(chunkModuleMaps.id)); |  | ||||||
| 				const wasmModules = getAllWasmModules(chunk); |  | ||||||
| 				for (const module of wasmModules) { |  | ||||||
| 					hash.update(module.hash); |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| module.exports = WasmMainTemplatePlugin; |  | ||||||
| @ -1,27 +0,0 @@ | |||||||
| DIR="$(dirname $0)" |  | ||||||
| WASM_DIR="$DIR/target/wasm32-unknown-unknown" |  | ||||||
| WASM_NAME="$(cat "$DIR/Cargo.toml" | grep name | sed 's/name = "//' | sed 's/"//g')" |  | ||||||
| APP_DIR="$DIR/dist/" |  | ||||||
|  |  | ||||||
| if [ ! -d "$APP_DIR" ]; then |  | ||||||
|     mkdir "$APP_DIR" |  | ||||||
| fi |  | ||||||
| cp "$DIR/static/"* "$APP_DIR" |  | ||||||
|  |  | ||||||
| if [ -z "$(which cargo)" ]; then |  | ||||||
|     echo 'Must install `cargo` before proceeding. Please see https://rustup.rs/ for more information.' |  | ||||||
|     exit 1 |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| if [ -z "$(which wasm-bindgen)" ]; then |  | ||||||
|     echo "Installing wasm-bindgen-cli" |  | ||||||
|     cargo install wasm-bindgen-cli |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| # Patch from: https://github.com/webpack/webpack/pull/7983 |  | ||||||
| cp "$DIR/WasmMainTemplatePlugin.patched.js" "$DIR/node_modules/webpack/lib/wasm/WasmMainTemplatePlugin.js" |  | ||||||
|  |  | ||||||
| cargo +nightly build --target=wasm32-unknown-unknown && \ |  | ||||||
|     wasm-bindgen "$WASM_DIR/debug/$WASM_NAME.wasm" --out-dir "$APP_DIR" --no-typescript && \ |  | ||||||
|     # --mode=production requires https://github.com/webpack/webpack/pull/7732 |  | ||||||
|     "$DIR/node_modules/webpack-cli/bin/cli.js" --mode=production "$APP_DIR/app_loader.js" -o "$APP_DIR/bundle.js" |  | ||||||
| @ -1,66 +0,0 @@ | |||||||
| { |  | ||||||
|     "name": "electron_percy_wasm", |  | ||||||
|     "productName": "electron_percy_wasm", |  | ||||||
|     "version": "1.0.0", |  | ||||||
|     "description": "My Electron application description", |  | ||||||
|     "main": "dist/index.js", |  | ||||||
|     "scripts": { |  | ||||||
|         "prestart": "./build.sh", |  | ||||||
|         "start": "electron-forge start", |  | ||||||
|         "package": "electron-forge package", |  | ||||||
|         "make": "electron-forge make", |  | ||||||
|         "lint": "eslint src" |  | ||||||
|     }, |  | ||||||
|     "keywords": [], |  | ||||||
|     "author": "bspeice", |  | ||||||
|     "license": "MIT", |  | ||||||
|     "config": { |  | ||||||
|         "forge": { |  | ||||||
|             "make_targets": { |  | ||||||
|                 "win32": [ |  | ||||||
|                     "squirrel" |  | ||||||
|                 ], |  | ||||||
|                 "darwin": [ |  | ||||||
|                     "zip" |  | ||||||
|                 ], |  | ||||||
|                 "linux": [ |  | ||||||
|                     "deb", |  | ||||||
|                     "rpm" |  | ||||||
|                 ] |  | ||||||
|             }, |  | ||||||
|             "electronPackagerConfig": { |  | ||||||
|                 "packageManager": "yarn" |  | ||||||
|             }, |  | ||||||
|             "electronWinstallerConfig": { |  | ||||||
|                 "name": "electron_percy_wasm" |  | ||||||
|             }, |  | ||||||
|             "electronInstallerDebian": {}, |  | ||||||
|             "electronInstallerRedhat": {}, |  | ||||||
|             "github_repository": { |  | ||||||
|                 "owner": "", |  | ||||||
|                 "name": "" |  | ||||||
|             }, |  | ||||||
|             "windowsStoreConfig": { |  | ||||||
|                 "packageName": "", |  | ||||||
|                 "name": "electron_percy_wasm" |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, |  | ||||||
|     "dependencies": { |  | ||||||
|         "electron-compile": "^6.4.3", |  | ||||||
|         "webpack": "^4.17.1", |  | ||||||
|         "webpack-cli": "^3.1.0" |  | ||||||
|     }, |  | ||||||
|     "devDependencies": { |  | ||||||
|         "babel-plugin-transform-async-to-generator": "^6.24.1", |  | ||||||
|         "babel-preset-env": "^1.7.0", |  | ||||||
|         "babel-preset-react": "^6.24.1", |  | ||||||
|         "electron-forge": "^5.2.2", |  | ||||||
|         "electron-prebuilt-compile": "2.0.7", |  | ||||||
|         "eslint": "^3", |  | ||||||
|         "eslint-config-airbnb": "^15", |  | ||||||
|         "eslint-plugin-import": "^2", |  | ||||||
|         "eslint-plugin-jsx-a11y": "^5", |  | ||||||
|         "eslint-plugin-react": "^7" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,20 +0,0 @@ | |||||||
| #[macro_use] |  | ||||||
| extern crate virtual_dom_rs; |  | ||||||
|  |  | ||||||
| extern crate percy_webapis; |  | ||||||
| extern crate wasm_bindgen; |  | ||||||
|  |  | ||||||
| use percy_webapis::log; |  | ||||||
| use percy_webapis::Element; |  | ||||||
| use wasm_bindgen::prelude::*; |  | ||||||
|  |  | ||||||
| #[wasm_bindgen] |  | ||||||
| pub fn main() -> Element { |  | ||||||
|     log("Entered Rust code"); |  | ||||||
|  |  | ||||||
|     let elem = html! { |  | ||||||
|         <span> {"It is alive!"} </span> |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     elem.create_element() |  | ||||||
| } |  | ||||||
| @ -1,10 +0,0 @@ | |||||||
| const app = import("./percy") |  | ||||||
| app.then(module => { |  | ||||||
|     console.log("Finished resolving application bundle") |  | ||||||
|     let rootNode = document.getElementById('root') |  | ||||||
|     rootNode.parentElement.replaceChild(module.main(), rootNode) |  | ||||||
|     rootNode = document.getElementById('root') |  | ||||||
| }, (e) => { |  | ||||||
|     console.log("Unable to resolve application bundle: ") |  | ||||||
|     console.log(e) |  | ||||||
| }) |  | ||||||
| @ -1,11 +0,0 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html> |  | ||||||
|   <head> |  | ||||||
|     <meta charset="utf-8"> |  | ||||||
|     <title></title> |  | ||||||
|   </head> |  | ||||||
|   <body> |  | ||||||
|     <div id="root">Loading...</div> |  | ||||||
|   </body> |  | ||||||
|   <script src="./bundle.js"/> |  | ||||||
| </html> |  | ||||||
| @ -1,52 +0,0 @@ | |||||||
| import { app, BrowserWindow } from 'electron'; |  | ||||||
|  |  | ||||||
| // Keep a global reference of the window object, if you don't, the window will |  | ||||||
| // be closed automatically when the JavaScript object is garbage collected. |  | ||||||
| let mainWindow; |  | ||||||
|  |  | ||||||
| const createWindow = () => { |  | ||||||
|   // Create the browser window. |  | ||||||
|   mainWindow = new BrowserWindow({ |  | ||||||
|     width: 800, |  | ||||||
|     height: 600, |  | ||||||
|   }); |  | ||||||
|  |  | ||||||
|   // and load the index.html of the app. |  | ||||||
|   mainWindow.loadURL(`file://${__dirname}/index.html`); |  | ||||||
|  |  | ||||||
|   // Open the DevTools. |  | ||||||
|   mainWindow.webContents.openDevTools(); |  | ||||||
|  |  | ||||||
|   // Emitted when the window is closed. |  | ||||||
|   mainWindow.on('closed', () => { |  | ||||||
|     // Dereference the window object, usually you would store windows |  | ||||||
|     // in an array if your app supports multi windows, this is the time |  | ||||||
|     // when you should delete the corresponding element. |  | ||||||
|     mainWindow = null; |  | ||||||
|   }); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| // This method will be called when Electron has finished |  | ||||||
| // initialization and is ready to create browser windows. |  | ||||||
| // Some APIs can only be used after this event occurs. |  | ||||||
| app.on('ready', createWindow); |  | ||||||
|  |  | ||||||
| // Quit when all windows are closed. |  | ||||||
| app.on('window-all-closed', () => { |  | ||||||
|   // On OS X it is common for applications and their menu bar |  | ||||||
|   // to stay active until the user quits explicitly with Cmd + Q |  | ||||||
|   if (process.platform !== 'darwin') { |  | ||||||
|     app.quit(); |  | ||||||
|   } |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| app.on('activate', () => { |  | ||||||
|   // On OS X it's common to re-create a window in the app when the |  | ||||||
|   // dock icon is clicked and there are no other windows open. |  | ||||||
|   if (mainWindow === null) { |  | ||||||
|     createWindow(); |  | ||||||
|   } |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| // In this file you can include the rest of your app's specific main process |  | ||||||
| // code. You can also put them in separate files and import them here. |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user