Merge pull request #260 from samuelthomas2774/electron-4.0.0-beta.7

Node Sass and keytar bindings for Electron 4.0.0 beta.7
This commit is contained in:
Alexei Stukov 2018-11-26 02:45:52 +02:00 committed by GitHub
commit c2c520fe27
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 167 additions and 63 deletions

View File

@ -255,11 +255,11 @@ export class BetterDiscord {
* Basically BetterDiscord needs to load before discord_desktop_core.
*/
static patchBrowserWindow() {
const electron = require('electron');
const electron_path = require.resolve('electron');
Object.assign(BrowserWindow, electron.BrowserWindow); // Assigns the new chrome-specific ones
const newElectron = Object.assign({}, electron, {BrowserWindow});
require.cache[electron_path].exports = newElectron;
const electron = require('electron');
const electron_path = require.resolve('electron');
Object.assign(BrowserWindow, electron.BrowserWindow); // Assigns the new chrome-specific ones
const newElectron = Object.assign({}, electron, {BrowserWindow});
require.cache[electron_path].exports = newElectron;
}
/**

View File

@ -1,3 +1,6 @@
### node-keytar bindings
Copy this directory to `node_modules/keytar/build/Release/keytar.node` to use.
keytar-4.3.0/linux-x64-64.node - poweredge-t30.fancy.org.uk
All others - https://github.com/atom/node-keytar/releases

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

45
package-lock.json generated
View File

@ -2814,7 +2814,8 @@
"deep-extend": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
"integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8="
"integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
"dev": true
},
"deep-is": {
"version": "0.1.3",
@ -7655,12 +7656,12 @@
"dev": true
},
"keytar": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/keytar/-/keytar-4.2.1.tgz",
"integrity": "sha1-igamV3/fY3PgqmsRInfmPex3/RI=",
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/keytar/-/keytar-4.3.0.tgz",
"integrity": "sha512-pd++/v+fS0LQKmzWlW6R1lziTXFqhfGeS6sYLfuTIqEy2pDzAbjutbSW8f9tnJdEEMn/9XhAQlT34VAtl9h4MQ==",
"requires": {
"nan": "2.8.0",
"prebuild-install": "2.5.3"
"prebuild-install": "5.2.1"
}
},
"kind-of": {
@ -8613,6 +8614,11 @@
}
}
},
"napi-build-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz",
"integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA=="
},
"natives": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz",
@ -10445,27 +10451,33 @@
}
},
"prebuild-install": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.5.3.tgz",
"integrity": "sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g==",
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.2.1.tgz",
"integrity": "sha512-9DAccsInWHB48TBQi2eJkLPE049JuAI6FjIH0oIrij4bpDVEbX6JvlWRAcAAlUqBHhjgq0jNqA3m3bBXWm9v6w==",
"requires": {
"detect-libc": "1.0.3",
"expand-template": "1.1.1",
"github-from-package": "0.0.0",
"minimist": "1.2.0",
"mkdirp": "0.5.1",
"napi-build-utils": "1.0.1",
"node-abi": "2.4.3",
"noop-logger": "0.1.1",
"npmlog": "4.1.2",
"os-homedir": "1.0.2",
"pump": "2.0.1",
"rc": "1.2.6",
"rc": "1.2.8",
"simple-get": "2.8.1",
"tar-fs": "1.16.3",
"tunnel-agent": "0.6.0",
"which-pm-runs": "1.0.0"
},
"dependencies": {
"deep-extend": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
},
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
@ -10479,6 +10491,17 @@
"end-of-stream": "1.4.1",
"once": "1.4.0"
}
},
"rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"requires": {
"deep-extend": "0.6.0",
"ini": "1.3.5",
"minimist": "1.2.0",
"strip-json-comments": "2.0.1"
}
}
}
},
@ -10734,6 +10757,7 @@
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.6.tgz",
"integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=",
"dev": true,
"requires": {
"deep-extend": "0.4.2",
"ini": "1.3.5",
@ -10744,7 +10768,8 @@
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
}
}
},

View File

@ -19,7 +19,7 @@
"csp-parse": "github:macropodhq/csp-parse",
"deepmerge": "^2.1.1",
"fs-extra": "^7.0.0",
"keytar": "4.2.1",
"keytar": "4.3.0",
"nedb": "^1.8.0",
"node-sass": "^4.9.2",
"asar": "^0.14.3"

View File

@ -0,0 +1,14 @@
#!/bin/sh
PLATFORM="darwin"
ARCH="x64"
NODE_API_VERSION="53"
ELECTRON_VERSION="1.6.15"
scripts/build-keytar.sh $PLATFORM $ARCH $NODE_API_VERSION $ELECTRON_VERSION
NODE_API_VERSION="64"
ELECTRON_VERSION="4.0.0-beta.7"
scripts/build-keytar.sh $PLATFORM $ARCH $NODE_API_VERSION $ELECTRON_VERSION

14
scripts/build-keytar-linux.sh Executable file
View File

@ -0,0 +1,14 @@
#!/bin/sh
PLATFORM="linux"
ARCH="x64"
NODE_API_VERSION="53"
ELECTRON_VERSION="1.6.15"
scripts/build-keytar.sh $PLATFORM $ARCH $NODE_API_VERSION $ELECTRON_VERSION
NODE_API_VERSION="64"
ELECTRON_VERSION="4.0.0-beta.7"
scripts/build-keytar.sh $PLATFORM $ARCH $NODE_API_VERSION $ELECTRON_VERSION

41
scripts/build-keytar.sh Executable file
View File

@ -0,0 +1,41 @@
#!/bin/sh
PLATFORM="$1"
ARCH="$2"
NODE_API_VERSION="$3"
ELECTRON_VERSION="$4"
ELECTRON_URL="https://atom.io/download/electron"
DIRECTORY="release-tmp/keytar.node/keytar-4.3.0"
FILENAME="$PLATFORM-$ARCH-$NODE_API_VERSION.node"
if [ `node -p 'process.platform'` != "$PLATFORM" ]; then
echo "You must be running on $PLATFORM to build keytar for it."
exit 1
fi
cd node_modules/keytar
mv build/Release release-tmp
if [ -f release-tmp/keytar.node ]; then
rm release-tmp/keytar.node
fi
if [ -f $DIRECTORY/$FILENAME ]; then
echo "A binding already exists at $DIRECTORY/$FILENAME - deleting it"
rm $DIRECTORY/$FILENAME
fi
# Build the keytar binding
# This will be placed at build/Release/keytar.node
echo "Building keytar for $PLATFORM-$ARCH with Node.js API version $NODE_API_VERSION for Electron $ELECTRON_VERSION"
../.bin/node-gyp rebuild --target=$ELECTRON_VERSION --arch $ARCH --dist-url=$ELECTRON_URL
# Move it to the right place
echo "Moving keytar.node to $DIRECTORY"
mkdir -p $DIRECTORY
mv build/Release/keytar.node $DIRECTORY/$FILENAME
rm -rf build/Release
mv release-tmp build/Release

View File

@ -2,7 +2,13 @@
PLATFORM="darwin"
ARCH="x64"
NODE_API_VERSION="53"
ELECTRON_VERSION="1.6.15"
scripts/build-node-sass.sh $PLATFORM $ARCH $NODE_API_VERSION $ELECTRON_VERSION
NODE_API_VERSION="64"
ELECTRON_VERSION="4.0.0-beta.7"
scripts/build-node-sass.sh $PLATFORM $ARCH $NODE_API_VERSION $ELECTRON_VERSION

View File

@ -2,7 +2,13 @@
PLATFORM="linux"
ARCH="x64"
NODE_API_VERSION="53"
ELECTRON_VERSION="1.6.15"
scripts/build-node-sass.sh $PLATFORM $ARCH $NODE_API_VERSION $ELECTRON_VERSION
NODE_API_VERSION="64"
ELECTRON_VERSION="4.0.0-beta.7"
scripts/build-node-sass.sh $PLATFORM $ARCH $NODE_API_VERSION $ELECTRON_VERSION

View File

@ -0,0 +1,13 @@
set "PLATFORM=win32"
set "NODE_API_VERSION=53"
set "ELECTRON_VERSION=1.6.15"
call ./scripts/build-node-sass.bat %PLATFORM% ia32 %NODE_API_VERSION% %ELECTRON_VERSION%
call ./scripts/build-node-sass.bat %PLATFORM% x64 %NODE_API_VERSION% %ELECTRON_VERSION%
set "NODE_API_VERSION=64"
set "ELECTRON_VERSION=4.0.0-beta.7"
call ./scripts/build-node-sass.bat %PLATFORM% ia32 %NODE_API_VERSION% %ELECTRON_VERSION%
call ./scripts/build-node-sass.bat %PLATFORM% x64 %NODE_API_VERSION% %ELECTRON_VERSION%

View File

@ -1,9 +1,9 @@
@echo off
set "ELECTRON=1.6.15"
set "PLATFORM=win32"
set "ARCH=ia32"
set "VER=53"
set "ELECTRON=%4"
set "PLATFORM=%1"
set "ARCH=%2"
set "VER=%3"
set "VENDOR_PATH=.\node_modules\node-sass\vendor"
set "BUILD_PATH=.\node_modules\node-sass\build\Release\binding.node"
@ -26,25 +26,3 @@ if not exist %BUILD_PATH% (
echo Copying %BUILD_PATH% to %VENDOR_PATH%\%PLATFORM%-%ARCH%-%VER%
copy %BUILD_PATH% %VENDOR_PATH%\%PLATFORM%-%ARCH%-%VER%
)
set "ARCH=x64"
echo Building %PLATFORM%-%ARCH% bindings
call ./node_modules/.bin/electron-rebuild -v=%ELECTRON% -a=%ARCH% -m ./node_modules/node-sass
if exist %VENDOR_PATH%\%PLATFORM%-%ARCH%-%VER%\binding.node (
echo Deleting old %VENDOR_PATH%\%PLATFORM%-%ARCH%-%VER%\binding.node
del /S /Q %VENDOR_PATH%\%PLATFORM%-%ARCH%-%VER%\*
)
if not exist %VENDOR_PATH%\%PLATFORM%-%ARCH%-%VER% (
echo Dir %VENDOR_PATH%\%PLATFORM%-%ARCH%-%VER% does not exist, creating.
mkdir %VENDOR_PATH%\%PLATFORM%-%ARCH%-%VER%
)
if not exist %BUILD_PATH% (
echo %BUILD_PATH% Does not exist
) else (
echo Copying %BUILD_PATH% to %VENDOR_PATH%\%PLATFORM%-%ARCH%-%VER%
copy %BUILD_PATH% %VENDOR_PATH%\%PLATFORM%-%ARCH%-%VER%
)

View File

@ -9,7 +9,7 @@ switch (process.platform) {
});
break;
case 'win32':
child_process.execSync(`scripts/rebuild-node-sass.bat`, {
child_process.execSync(`scripts/build-node-sass-win32.bat`, {
stdio: 'inherit'
});
break;

View File

@ -2,27 +2,30 @@ const args = process.argv;
const fs = require('fs');
const path = require('path');
const releaseInput = args[2] ? args[2].toLowerCase() : '';
const release = releaseInput == 'canary' ? 'DiscordCanary' : releaseInput == 'ptb' ? 'DiscordPTB' : 'Discord';
const useBdRelease = args[2] && args[2].toLowerCase() === 'release';
const releaseInput = useBdRelease ? args[3] && args[3].toLowerCase() : args[2] && args[2].toLowerCase();
const release = releaseInput === 'canary' ? 'Discord Canary' : releaseInput === 'ptb' ? 'Discord PTB' : 'Discord';
console.log(`Injecting into version ${release}`);
const discordPath = (function() {
if (process.platform === 'win32') {
const basedir = path.join(process.env.LOCALAPPDATA, release);
const basedir = path.join(process.env.LOCALAPPDATA, release.replace(/ /g, ''));
if (!fs.existsSync(basedir)) throw new Error(`Cannot find directory for ${release}`);
const version = fs.readdirSync(basedir).filter(f => fs.lstatSync(path.join(basedir, f)).isDirectory() && f.split('.').length > 1).sort().reverse()[0];
const dir = path.join(basedir, version, 'resources');
if (!version || !fs.existsSync(dir)) throw new Error(`Cannot find directory for ${release}`);
return dir;
return path.join(basedir, version, 'resources');
} else if (process.platform === 'darwin') {
const appPath = releaseInput === 'canary' ? path.join('/Applications', 'Discord Canary.app')
: releaseInput === 'ptb' ? path.join('/Applications', 'Discord PTB.app')
: useBdRelease && args[3] ? args[3] ? args[2] : args[2]
: path.join('/Applications', 'Discord.app');
return path.join(appPath, 'Contents', 'Resources');
} else if (process.platform === 'linux') {
return path.join('/usr', 'share', release.toLowerCase().replace(/ /g, '-'), 'resources');
}
else if (process.platform == 'darwin') {
const dir = path.join('Applications', `${release}.app`, 'Contents', 'Resources');
if (!fs.existsSync(dir)) throw new Error(`Cannot find directory for ${release}`);
return dir;
}
const dir = path.join('usr', 'share', release.toLowerCase(), 'resources');
if (!fs.existsSync(dir)) throw new Error(`Cannot find directory for ${release}`);
return dir;
})();
if (!fs.existsSync(discordPath)) throw new Error(`Cannot find directory for ${release}`);
console.log(`Found ${release} in ${discordPath}`);
const appPath = path.join(discordPath, 'app');
@ -33,13 +36,14 @@ if (!fs.existsSync(appPath)) fs.mkdirSync(appPath);
if (fs.existsSync(packageJson)) fs.unlinkSync(packageJson);
if (fs.existsSync(indexJs)) fs.unlinkSync(indexJs);
const bdPath = useBdRelease ? path.resolve(__dirname, '..', 'release') : path.resolve(__dirname, '..');
console.log(`Writing package.json`);
fs.writeFileSync(packageJson, JSON.stringify({
name: 'betterdiscord',
description: 'BetterDiscord',
main: 'index.js',
private: true,
dependencies: {}
private: true
}, null, 4));
console.log(`Writing index.js`);
@ -48,9 +52,9 @@ const fs = require('fs');
const Module = require('module');
const electron = require('electron');
const basePath = path.join(__dirname, '..', 'app.asar');
const pkg = require(path.join(basePath, 'package.json'));
electron.app.getAppPath = () => basePath;
Module._load(path.join(basePath, pkg.main), null, true);
electron.app.on('ready', () => {new (require('${path.join(__dirname, '..', 'core').replace(/\\/g, '/')}').BetterDiscord)();});`);
Module._load(basePath, null, true);
electron.app.on('ready', () => new (require('${bdPath.replace(/\\/g, '\\\\').replace(/'/g, '\\\'')}').BetterDiscord)());
`);
console.log(`Injection successful, please restart ${release}.`);
console.log(`Injection successful, please restart ${release}.`);