import { join } from 'lodash'; import { permission } from '../authApi/permissions'; import { appDefinitionFile } from '../common'; import { validateAll } from './validate'; import { apiWrapper } from '../common/apiWrapper'; import { events } from '../common/events'; export const saveApplicationHierarchy = app => async hierarchy => apiWrapper( app, events.templateApi.saveApplicationHierarchy, permission.writeTemplates.isAuthorized, { hierarchy }, _saveApplicationHierarchy, app.datastore, hierarchy, ); export const _saveApplicationHierarchy = async (datastore, hierarchy) => { const validationErrors = await validateAll(hierarchy); if (validationErrors.length > 0) { throw new Error(`Hierarchy is invalid: ${join( validationErrors.map(e => `${e.item.nodeKey ? e.item.nodeKey() : ''} : ${e.error}`), ',', )}`); } if (await datastore.exists(appDefinitionFile)) { const appDefinition = await datastore.loadJson(appDefinitionFile); appDefinition.hierarchy = hierarchy; await datastore.updateJson(appDefinitionFile, appDefinition); } else { await datastore.createFolder('/.config'); const appDefinition = { actions: [], triggers: [], hierarchy }; await datastore.createJson(appDefinitionFile, appDefinition); } };