@viewdo/dxp-story-cli
Version:
README.md
70 lines (59 loc) • 3.13 kB
JavaScript
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;