diff --git a/.scripts/run-ha.ts b/.scripts/run-ha.ts new file mode 100644 index 000000000000..9efc64bef906 --- /dev/null +++ b/.scripts/run-ha.ts @@ -0,0 +1,95 @@ +import { spawn, SpawnOptions } from 'child_process'; +import * as path from 'path'; + +enum ModeParam { + MAIN = 'main', + INSTANCE = 'instance', +} + +interface IConfig extends SpawnOptions { + customEnv: typeof process.env; + parentEnv: typeof process.env; +} + +function isMode(value: any): value is ModeParam { + return Object.values(ModeParam).includes(value); +} + +function buildConfig(cwd: string): IConfig { + const customEnv: IConfig['customEnv'] = { + INSTANCE_IP: '127.0.0.1', + MONGO_URL: 'mongodb://localhost:3001/meteor', + MONGO_OPLOG_URL: 'mongodb://localhost:3001/local', + }; + + return { + cwd, + stdio: 'inherit', + shell: true, + customEnv, + parentEnv: process.env, + env: { + ...customEnv, + ...process.env, + }, + }; +} + +async function runMain(config: IConfig): Promise { + const { customEnv: { INSTANCE_IP }, parentEnv, ...mainConfig } = config; + + const spawnConfig = { + ...mainConfig, + env: { + INSTANCE_IP, + ...parentEnv, + }, + }; + + spawn('meteor', spawnConfig); +} + +async function runInstance(config: IConfig): Promise { + // Desctructuring the unused variables allows us to omit them in the `mainConfig` + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { customEnv, parentEnv, ...mainConfig } = config; + + const env = { + PORT: '3030', + ROOT_URL: '', + ...mainConfig.env, + }; + + env.ROOT_URL = `http://localhost:${ env.PORT }`; + + const spawnConfig = { + ...mainConfig, + env, + }; + + spawn('node', ['.meteor/local/build/main.js'], spawnConfig); +} + +async function main(mode: any): Promise { + if (!isMode(mode)) { + mode = 'main'; + } + + const config = buildConfig( + path.resolve(__dirname, '..'), + ); + + switch (mode) { + case ModeParam.MAIN: + runMain(config); + break; + case ModeParam.INSTANCE: + runInstance(config); + break; + } +} + +// First two parameters are the executable and the path to this script +const [, , mode] = process.argv; + +main(mode); diff --git a/package.json b/package.json index 4d428c9cb2c3..c82e5f4b5883 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,9 @@ ], "scripts": { "start": "meteor", + "ha": "meteor npm run ha:start", + "ha:start": "ts-node .scripts/run-ha.ts main", + "ha:add": "ts-node .scripts/run-ha.ts instance", "debug": "meteor run --inspect", "debug-brk": "meteor run --inspect-brk", "lint": "meteor npm run stylelint && meteor npm run eslint",