redux-providers
Version:
Minimalist dependency injection system for redux. Create providers to be injected and used in redux reducers.
42 lines • 1.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const resolver_1 = require("../resolver/resolver");
const instance_container_1 = require("../container/instance-container");
const metadata_keys_1 = require("../constants/metadata.keys");
const redux_1 = require("redux");
function createReduxStore(moduleTarget) {
if (!Reflect.hasMetadata(metadata_keys_1.METADATA_KEY.REDUX_PROVIDER_MODULE_OPTIONS, moduleTarget)) {
throw new Error("Are you sure " + moduleTarget.name + " is a module?");
}
const moduleOptions = Reflect.getMetadata(metadata_keys_1.METADATA_KEY.REDUX_PROVIDER_MODULE_OPTIONS, moduleTarget);
if (!moduleOptions) {
throw new Error("Module options of " + moduleTarget.name + "must be defined!");
}
let container = new instance_container_1.InstanceContainer();
const providerList = moduleOptions.providers || [];
for (let provider of providerList) {
resolver_1.Resolver.resolve(provider, container, moduleTarget.name);
}
let actionTree = {};
for (let action in moduleOptions.actions) {
if (moduleOptions.actions.hasOwnProperty(action)) {
actionTree[action] = resolver_1.Resolver.resolve(moduleOptions.actions[action], container, moduleTarget.name);
}
}
const actions = actionTree;
const initialState = moduleOptions.initialState;
let store;
if (moduleOptions.middlewares && moduleOptions.middlewares.length > 0) {
store = redux_1.createStore(moduleOptions.rootReducer, initialState, redux_1.applyMiddleware(...moduleOptions.middlewares));
}
else {
store = redux_1.createStore(moduleOptions.rootReducer, initialState);
}
return {
container: container,
reduxActions: actions,
reduxStore: store,
};
}
exports.createReduxStore = createReduxStore;
//# sourceMappingURL=create-store.js.map