Source: index.js

'use strict';

/** @lends Fluxex */
var Fluxex = require('./lib/fluxex');

// jscs:disable checkRedundantParams
/**
 * Create an fluxex application by provided defintion.
 * @param {Object} stores - Store defination as {storeName: implement} pairs
 * @param {React} HtmlJsx - The Html element defined as a React component
 * @param {Object=} mixins - Extra methods/properties want to be merged into application prototype
 * @returns {Object} The created fluxex application instance
 * @example
var myApp = require('fluxex').createApp({
    product: require('./stores/product')      // Define a 'product' store
}, process.cwd() + '/components/Html.jsx');   // Your Html.jsx
 */
// jscs:enable
Fluxex.createApp = function (stores, HtmlJsx) {
    var App = function FluxexApp() {
        this.stores = stores;
        this.HtmlJsx = HtmlJsx;
        Fluxex.apply(this, arguments);
    };

    if (!stores) {
        throw new Error('You should create app with information of stores as first parameter');
    }

    if (!HtmlJsx) {
        throw new Error('You should create app with HtmlJsx as second parameter');
    }

    App.prototype = new Fluxex();

    if (arguments.length > 2) {
        Object.assign.apply(null, [App.prototype].concat(Array.prototype.slice.call(arguments, 2)));
    }

    App.prototype.constructor = App;

    return App;
};

Fluxex.mixin = require('./lib/fluxmixin');
Fluxex.InitScript = require('./lib/fluxscript');
Fluxex.Title = require('./lib/fluxtitle');

module.exports = Fluxex;