UNPKG

@viewdo/dxp-story-cli

Version:
70 lines (59 loc) 3.13 kB
const IndexJsWriter = require('../common/index.js.js.js'); const SettingsJsWriter = require('../common/_settings.js.js.js'); const TemplateWriter = require('../_utilities/template-writer'); const FileNames = require('../_utilities/file-names'); const isEmpty = require('lodash/isEmpty'); const camelCase = require('lodash/camelCase'); const sortBy = require('lodash/sortBy'); class StatesFileCreator { constructor(_console = console) { Object.assign(this, { index_js_writer: new IndexJsWriter(_console), settings_js_writer: new SettingsJsWriter(__dirname, _console), common_states_settings_js_writer: new TemplateWriter(`${__dirname}/_settings._common.js.ejs`, _console), camelCase, states_settings_file_name: FileNames.state.embedded.states_settings(), isEmpty, sortBy }); } create(states, states_folder_path, common_states = [], common_states_file_path) { const { index_js_writer, settings_js_writer, camelCase, sortBy, common_states_settings_js_writer, states_settings_file_name } = this; const folder_states = states.filter(state => !state.embedded); const sorted_folder_states = sortBy(folder_states, 'id'); const sorted_common_states = sortBy(common_states, 'id'); const folder_states_variables = sorted_folder_states.reduce((current_folder_state_variables, folder_state) => { const { id: folder_state_id } = folder_state; current_folder_state_variables[folder_state_id] = `${camelCase(folder_state_id)}`; return current_folder_state_variables; }, {}); const folder_states_imports = sorted_folder_states.map((folder_state, index) => { const { id: folder_state_id } = folder_state; const variable = folder_states_variables[folder_state_id]; const file_path = `./${folder_state_id}`; return { file_path, variable } }); const common_states_variables = sorted_common_states.reduce((current_common_state_variables, common_state) => { const { id: common_state_id } = common_state; current_common_state_variables[common_state_id] = `${camelCase(common_state_id)}`; return current_common_state_variables; }, {}); const common_states_imports = sorted_common_states.map((common_state, index) => { const { id: common_state_id } = common_state; const variable = common_states_variables[common_state_id]; const file_path = `./${common_state_id}`; return { file_path, variable } }); index_js_writer.write(states_folder_path); index_js_writer.write(common_states_file_path); settings_js_writer.write({ imports: folder_states_imports }, states_folder_path); common_states_settings_js_writer.write({imports: common_states_imports}, `${common_states_file_path}/${states_settings_file_name}`); } } module.exports = StatesFileCreator;