@mjcctech/meteor-desktop
Version:
Build a Meteor's desktop client with hot code push.
270 lines (229 loc) • 9.2 kB
JavaScript
"use strict";var module1=module;module1.export({default:()=>Env});var path;module1.link('path',{default(v){path=v}},0);var os;module1.link('os',{default(v){os=v}},1);var assignIn;module1.link('lodash/assignIn',{default(v){assignIn=v}},2);
const { join } = path;
/**
* @class
* @property {packagePaths} paths
*/
class Env {
constructor(input, output, options) {
this.options = options;
if (this.isProductionBuild()) {
process.env.NODE_ENV = 'production';
}
this.sys = {
platform: process.platform,
arch: process.arch
};
// Operational System.
this.os = {
isWindows: (process.platform === 'win32'),
isLinux: (process.platform === 'linux'),
isOsx: (process.platform === 'darwin')
};
this.stdio = 'inherit';
this.os.name = (this.sys.platform === 'darwin' ? 'osx' : this.sys.platform);
this.os.home = process.env[(this.os.isWindows ? 'USERPROFILE' : 'HOME')];
this.os.tmp = os.tmpdir();
/** @type {packagePaths} */
this.paths = {};
/** @type {meteorDesktopPaths} */
this.paths.meteorDesktop = {
root: path.resolve(__dirname, '..')
};
this.paths.meteorDesktop.skeleton = join(this.paths.meteorDesktop.root, 'skeleton');
/** @type {meteorAppPaths} */
this.paths.meteorApp = {
root: input
};
/** @type {desktopPaths} */
this.paths.desktop = {
rootName: '.desktop',
root: join(this.paths.meteorApp.root, '.desktop')
};
assignIn(this.paths.desktop, {
modules: join(this.paths.desktop.root, 'modules'),
import: join(this.paths.desktop.root, 'import'),
assets: join(this.paths.desktop.root, 'assets'),
settings: join(this.paths.desktop.root, 'settings.json'),
desktop: join(this.paths.desktop.root, 'desktop.js')
});
this.paths.desktop.splashScreen = join(this.paths.desktop.assets, 'splashScreen.png');
this.paths.desktop.loadingGif = join(this.paths.desktop.assets, 'loading.gif');
this.paths.desktop.meteorIco = join(this.paths.desktop.assets, 'meteor.ico');
/** @type {electronAppPaths} */
this.paths.electronApp = {
rootName: 'desktop-build',
};
this.paths.electronApp.root =
join(this.paths.meteorApp.root, '.meteor', this.paths.electronApp.rootName);
this.paths.electronApp.tmpNodeModules =
join(this.paths.meteorApp.root, '.meteor', '.desktop_node_modules');
this.paths.cache =
join(this.paths.meteorApp.root, '.meteor', 'local', 'desktop-cache');
this.paths.electronApp.extractedNodeModules =
join(this.paths.meteorApp.root, '.meteor', '.desktop_extracted_node_modules');
this.paths.electronApp.extractedNodeModulesBin =
join(this.paths.electronApp.extractedNodeModules, '.bin');
this.paths.electronApp.appRoot =
join(this.paths.electronApp.root, 'app');
assignIn(this.paths.electronApp, {
app: join(this.paths.electronApp.appRoot, 'app.js'),
cordova: join(this.paths.electronApp.appRoot, 'cordova.js'),
index: join(this.paths.electronApp.appRoot, 'index.js'),
preload: join(this.paths.electronApp.appRoot, 'preload.js'),
modules: join(this.paths.electronApp.appRoot, 'modules'),
desktopAsar: join(this.paths.electronApp.root, 'desktop.asar'),
extracted: join(this.paths.electronApp.root, 'extracted'),
appAsar: join(this.paths.electronApp.root, 'app.asar'),
import: join(this.paths.electronApp.root, 'import'),
assets: join(this.paths.electronApp.root, 'assets'),
packageJson: join(this.paths.electronApp.root, 'package.json'),
settings: join(this.paths.electronApp.root, 'settings.json'),
desktop: join(this.paths.electronApp.root, 'desktop.js'),
desktopTmp: join(this.paths.electronApp.root, '__desktop'),
nodeModules: join(this.paths.electronApp.root, 'node_modules'),
meteorAsar: join(this.paths.electronApp.root, 'meteor.asar'),
meteorApp: join(this.paths.electronApp.root, 'meteor'),
meteorAppIndex: join(this.paths.electronApp.root, 'meteor', 'index.html'),
meteorAppProgramJson: join(this.paths.electronApp.root, 'meteor', 'program.json'),
skeleton: join(this.paths.electronApp.root, 'skeleton')
});
assignIn(this.paths.meteorApp, {
platforms: join(this.paths.meteorApp.root, '.meteor', 'platforms'),
packages: join(this.paths.meteorApp.root, '.meteor', 'packages'),
versions: join(this.paths.meteorApp.root, '.meteor', 'versions'),
release: join(this.paths.meteorApp.root, '.meteor', 'release'),
packageJson: join(this.paths.meteorApp.root, 'package.json'),
gitIgnore: join(this.paths.meteorApp.root, '.meteor', '.gitignore'),
cordovaBuild: join(
this.paths.meteorApp.root,
'.meteor',
'local',
'cordova-build',
'www',
'application'
),
webCordova: join(
this.paths.meteorApp.root,
'.meteor',
'local',
'build',
'programs',
'web.cordova'
)
});
assignIn(this.paths.meteorApp, {
cordovaBuildIndex: join(
this.paths.meteorApp.cordovaBuild, 'index.html'
),
cordovaBuildProgramJson: join(
this.paths.meteorApp.cordovaBuild, 'program.json'
)
});
assignIn(this.paths.meteorApp, {
webCordovaProgramJson: join(
this.paths.meteorApp.webCordova, 'program.json'
)
});
/** @type {desktopTmpPaths} */
this.paths.desktopTmp = {
root: join(this.paths.electronApp.root, '__desktop'),
};
assignIn(this.paths.desktopTmp, {
modules: join(this.paths.desktopTmp.root, 'modules'),
settings: join(this.paths.desktopTmp.root, 'settings.json')
});
this.paths.packageDir = '.desktop-package';
this.paths.installerDir = '.desktop-installer';
// Scaffold
this.paths.scaffold = join(__dirname, '..', 'scaffold');
}
/**
* @returns {boolean|*}
* @public
*/
isProductionBuild() {
return !!('production' in this.options && this.options.production);
}
}
module.exports = Env;
/**
* @typedef {Object} desktopPaths
* @property {string} rootName
* @property {string} root
* @property {string} modules
* @property {string} import
* @property {string} assets
* @property {string} settings
* @property {string} desktop
* @property {string} splashScreen
* @property {string} loadingGif
* @property {string} meteorIco
*/
/**
* @typedef {Object} meteorAppPaths
* @property {string} root
* @property {string} platforms
* @property {string} release
* @property {string} packages
* @property {string} versions
* @property {string} gitIgnore
* @property {string} packageJson
* @property {string} cordovaBuild
* @property {string} cordovaBuildIndex
* @property {string} cordovaBuildProgramJson
* @property {string} webCordova
* @property {string} webCordovaIndex
* @property {string} webCordovaProgramJson
*/
/**
* @typedef {Object} electronAppPaths
* @property {string} rootName
* @property {string} root
* @property {Object} appRoot
* @property {string} appRoot.cordova
* @property {string} appRoot.index
* @property {string} appRoot.app
* @property {string} appRoot.modules
* @property {string} desktopAsar
* @property {string} extracted
* @property {string} appAsar
* @property {string} preload
* @property {string} import
* @property {string} assets
* @property {string} gitIgnore
* @property {string} packageJson
* @property {string} settings
* @property {string} desktop
* @property {string} desktopTmp
* @property {string} nodeModules
* @property {string} meteorAsar
* @property {string} meteorApp
* @property {string} meteorAppIndex
* @property {string} meteorAppProgramJson
* @property {string} skeleton
* @property {string} tmpNodeModules
* @property {string} extractedNodeModules
* @property {string} extractedNodeModulesBin
*/
/**
* @typedef {Object} desktopTmpPaths
* @property {string} root
* @property {string} modules
* @property {string} settings
*/
/**
* @typedef {Object} meteorDesktopPaths
* @property {string} root
* @property {string} skeleton
*/
/**
* @typedef {Object} packagePaths
* @property {meteorAppPaths} meteorApp
* @property {desktopPaths} desktop
* @property {electronAppPaths} electronApp
* @property {desktopTmpPaths} desktopTmp
* @property {meteorDesktopPaths} meteorDesktop
* @property {string} packageDir
* @property {string} scaffold
*/