From e2cb0cf11a924b4c591f0da5f82c8010d154234e Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Fri, 2 Sep 2022 06:08:47 +1000 Subject: [PATCH] [EC-473] Add feature flag config and environment loaders to Desktop (#3389) --- apps/desktop/config/base.json | 4 ++++ apps/desktop/config/config.js | 33 ++++++++++++++++++++++++++++ apps/desktop/config/development.json | 4 ++++ apps/desktop/config/production.json | 3 +++ apps/desktop/webpack.main.js | 10 +++++++++ apps/desktop/webpack.renderer.js | 9 ++++++++ 6 files changed, 63 insertions(+) create mode 100644 apps/desktop/config/base.json create mode 100644 apps/desktop/config/config.js create mode 100644 apps/desktop/config/development.json create mode 100644 apps/desktop/config/production.json diff --git a/apps/desktop/config/base.json b/apps/desktop/config/base.json new file mode 100644 index 00000000000..6df6c2cfdb1 --- /dev/null +++ b/apps/desktop/config/base.json @@ -0,0 +1,4 @@ +{ + "dev_flags": {}, + "flags": {} +} diff --git a/apps/desktop/config/config.js b/apps/desktop/config/config.js new file mode 100644 index 00000000000..2e3347321d7 --- /dev/null +++ b/apps/desktop/config/config.js @@ -0,0 +1,33 @@ +function load(envName) { + return { + ...loadConfig(envName), + ...loadConfig("local"), + }; +} + +function log(configObj) { + const repeatNum = 50; + // eslint-disable-next-line + console.log(`${"=".repeat(repeatNum)}\nenvConfig`); + // eslint-disable-next-line + console.log(JSON.stringify(configObj, null, 2)); + // eslint-disable-next-line + console.log(`${"=".repeat(repeatNum)}`); +} + +function loadConfig(configName) { + try { + return require(`./${configName}.json`); + } catch (e) { + if (e instanceof Error && e.code === "MODULE_NOT_FOUND") { + return {}; + } else { + throw e; + } + } +} + +module.exports = { + load, + log, +}; diff --git a/apps/desktop/config/development.json b/apps/desktop/config/development.json new file mode 100644 index 00000000000..3c93018e65f --- /dev/null +++ b/apps/desktop/config/development.json @@ -0,0 +1,4 @@ +{ + "devFlags": {}, + "flags": {} +} diff --git a/apps/desktop/config/production.json b/apps/desktop/config/production.json new file mode 100644 index 00000000000..b04d1531a2f --- /dev/null +++ b/apps/desktop/config/production.json @@ -0,0 +1,3 @@ +{ + "flags": {} +} diff --git a/apps/desktop/webpack.main.js b/apps/desktop/webpack.main.js index 5f9ec164b22..2563e7d1ede 100644 --- a/apps/desktop/webpack.main.js +++ b/apps/desktop/webpack.main.js @@ -3,9 +3,15 @@ const { merge } = require("webpack-merge"); const CopyWebpackPlugin = require("copy-webpack-plugin"); const { CleanWebpackPlugin } = require("clean-webpack-plugin"); const TsconfigPathsPlugin = require("tsconfig-paths-webpack-plugin"); +const configurator = require("./config/config"); +const { EnvironmentPlugin } = require("webpack"); const NODE_ENV = process.env.NODE_ENV == null ? "development" : process.env.NODE_ENV; +console.log("Main process config"); +const envConfig = configurator.load(NODE_ENV); +configurator.log(envConfig); + const common = { module: { rules: [ @@ -69,6 +75,10 @@ const main = { { from: "./src/locales", to: "locales" }, ], }), + new EnvironmentPlugin({ + FLAGS: envConfig.flags, + DEV_FLAGS: NODE_ENV === "development" ? envConfig.devFlags : {}, + }), ], externals: { "electron-reload": "commonjs2 electron-reload", diff --git a/apps/desktop/webpack.renderer.js b/apps/desktop/webpack.renderer.js index 934e9691124..f6b81f50b9b 100644 --- a/apps/desktop/webpack.renderer.js +++ b/apps/desktop/webpack.renderer.js @@ -5,9 +5,14 @@ const HtmlWebpackPlugin = require("html-webpack-plugin"); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const { AngularWebpackPlugin } = require("@ngtools/webpack"); const TerserPlugin = require("terser-webpack-plugin"); +const configurator = require("./config/config"); const NODE_ENV = process.env.NODE_ENV == null ? "development" : process.env.NODE_ENV; +console.log("Renderer process config"); +const envConfig = configurator.load(NODE_ENV); +configurator.log(envConfig); + const common = { module: { rules: [ @@ -142,6 +147,10 @@ const renderer = { filename: "[name].[contenthash].css", chunkFilename: "[id].[contenthash].css", }), + new webpack.EnvironmentPlugin({ + FLAGS: envConfig.flags, + DEV_FLAGS: NODE_ENV === "development" ? envConfig.devFlags : {}, + }), ], };