|
@@ -0,0 +1,40 @@
|
|
|
+import deepmerge from 'deepmerge'
|
|
|
+import { experiments } from '@/../experimentConfig'
|
|
|
+
|
|
|
+// Merge a default config with a specific scene config
|
|
|
+const buildConfig = ({ defaultConfig = {}, scenesConfig = {} }, sceneName) =>
|
|
|
+ deepmerge(defaultConfig, scenesConfig[sceneName] || {})
|
|
|
+
|
|
|
+/**
|
|
|
+* Build a configuration file by merging the default config with the asked scene.
|
|
|
+* The asked scene config will overwrite the default config.
|
|
|
+* It merges the mixin config with the experiment config.
|
|
|
+* Experiment config overwrites all.
|
|
|
+*
|
|
|
+* @param {Object} experimentName The selected experiment
|
|
|
+* @param {Object} sceneName The selected scene
|
|
|
+* @returns {Object} The config for the selected experiment with the selected scene
|
|
|
+*/
|
|
|
+export const getExperimentConfig = (experimentName, sceneName) => {
|
|
|
+ if (!experiments[experimentName])
|
|
|
+ throw new Error(`Could not find the experiment "${experimentName}" in the config file.`)
|
|
|
+
|
|
|
+ // Build parent mixin config
|
|
|
+ const mixinConfig = buildConfig(experiments[experimentName].mixin, sceneName)
|
|
|
+ // Build global config
|
|
|
+ const globalConfig = buildConfig(experiments[experimentName], sceneName)
|
|
|
+ // Merge configs
|
|
|
+ return deepmerge(mixinConfig, globalConfig)
|
|
|
+}
|
|
|
+
|
|
|
+// /**
|
|
|
+// * Read config to get the list of available scenes for a given experiment
|
|
|
+// *
|
|
|
+// * @param {Object} experimentName The selected experiment
|
|
|
+// * @param {String[]} scenesList List of scenes
|
|
|
+// * @returns {String[]} The list of available scenes for this experiment
|
|
|
+// */
|
|
|
+// export const getExperimentSceneList = (experimentName, scenesList) => {
|
|
|
+// // TODO: scene blacklist, scene array, all
|
|
|
+// return []
|
|
|
+// }
|