mirror of https://github.com/vizality/vizality
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.0 KiB
108 lines
3.0 KiB
const { ipcRenderer, webFrame } = require('electron');
|
|
const { join } = require('path');
|
|
require('module-alias/register');
|
|
|
|
function exposeGlobal (name, toMainWorld = false) {
|
|
Object.defineProperty(toMainWorld ? webFrame.top.context : window, name, {
|
|
get: () => (toMainWorld ? window : webFrame.top.context)[name],
|
|
set: (v) => (toMainWorld ? window : webFrame.top.context)[name] = v
|
|
});
|
|
}
|
|
|
|
function fixDocument () {
|
|
const realDoc = webFrame.top.context.document;
|
|
let getI = 0;
|
|
let setI = 0;
|
|
|
|
/**
|
|
* Allow accessing React root container.
|
|
*/
|
|
Object.defineProperty(HTMLElement.prototype, '_reactRootContainer', {
|
|
get () {
|
|
getI++;
|
|
this.setAttribute('vz-react-root-get', getI);
|
|
const elem = realDoc.querySelector(`[vz-react-root-get='${getI}']`);
|
|
elem?.removeAttribute('vz-react-root-get');
|
|
return elem?._reactRootContainer;
|
|
},
|
|
set (prop, value) {
|
|
setI++;
|
|
this.setAttribute('vz-react-root-set', setI);
|
|
const elem = realDoc.querySelector(`[vz-react-root-set='${setI}']`);
|
|
elem?.removeAttribute('vz-react-root-set');
|
|
return elem && (elem[prop] = value);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Bypass the context isolation.
|
|
*/
|
|
exposeGlobal('DiscordSentry');
|
|
exposeGlobal('__SENTRY__');
|
|
exposeGlobal('GLOBAL_ENV');
|
|
exposeGlobal('platform');
|
|
exposeGlobal('_');
|
|
exposeGlobal('webpackChunkdiscord_app');
|
|
exposeGlobal('WebSocket', true);
|
|
|
|
fixDocument();
|
|
|
|
require('@vizality/compilers');
|
|
require('./renderer');
|
|
|
|
(() => {
|
|
const { Module } = require('module');
|
|
const extensions = [ '.jsx', '.js', '.ts', '.tsx' ];
|
|
for (const ext of extensions) {
|
|
const oldRequireExt = Module._extensions[ext];
|
|
Module._extensions[ext] = (module, filename) => {
|
|
const srcDir = join(__dirname, '..', 'renderer', 'src');
|
|
const addonsDir = join(__dirname, '..', 'addons');
|
|
if ((filename.indexOf(srcDir) &&
|
|
filename.indexOf(addonsDir)) ||
|
|
filename.indexOf('node_modules') !== -1
|
|
) {
|
|
return oldRequireExt(module, filename);
|
|
}
|
|
const compiler = new (require(`@vizality/compilers/${ext.substring(1).toUpperCase()}`))(filename);
|
|
const compiled = compiler.compile();
|
|
module._compile(compiled, filename);
|
|
};
|
|
}
|
|
})();
|
|
|
|
/**
|
|
* Instantiate Vizality.
|
|
*/
|
|
const Vizality = require('../renderer/src');
|
|
window.vizality = new Vizality();
|
|
|
|
/**
|
|
* Expose some global objects
|
|
*/
|
|
exposeGlobal('vizality', true);
|
|
exposeGlobal('discord', true);
|
|
exposeGlobal('$vz', true);
|
|
exposeGlobal('$discord', true);
|
|
exposeGlobal('require', true);
|
|
|
|
// https://github.com/electron/electron/issues/9047
|
|
if (process.platform === 'darwin' && !process.env.PATH.includes('/usr/local/bin')) {
|
|
process.env.PATH += ':/usr/local/bin';
|
|
}
|
|
|
|
/**
|
|
* Discord's preload.
|
|
*/
|
|
const preload = ipcRenderer.sendSync('VIZALITY_GET_PRELOAD');
|
|
if (preload) {
|
|
/**
|
|
* Restore original preload for future windows.
|
|
*/
|
|
process._linkedBinding('electron_common_command_line').appendSwitch('preload', preload);
|
|
require(preload);
|
|
}
|
|
|
|
/* @todo Add debug logging. */
|