"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = __importDefault(require("../types"));
const route_component_1 = require("../route/route-component");
const libs_1 = require("../libs");
const spa_plugin_1 = require("./spa-plugin");
const environment_plugin_1 = require("../environment/environment-plugin");
exports.SINGLEPAGE_INSTANCE_TYPE = "SinglePageComponent";
/**
 * The SinglePageApp is an infrastructure and must implement [[IInfrastructure]]
 *
 * @param props
 */
exports.default = (props) => {
    //console.log ("isomorphic: ",props );
    const infProps = {
        // allows to identify this component as Infrastructure
        infrastructureType: types_1.default.INFRASTRUCTURE_TYPE_CONFIGURATION,
        instanceId: props.stackName,
        instanceType: exports.SINGLEPAGE_INSTANCE_TYPE,
        // only load plugins during compilation
        createPlugins: (configPath, stage, parserMode) => props.infrastructureMode === "COMPILATION" ? [
            // be able to process IsomorphicApps (as top-level-node)
            spa_plugin_1.SpaPlugin({
                stage: stage,
                parserMode: parserMode,
                buildPath: props.buildPath,
                configFilePath: configPath
            }),
            // Single Page apps can have different environments
            environment_plugin_1.EnvironmentPlugin({
                stage: stage,
                parserMode: parserMode
            })
        ] : []
    };
    // TODO maybe edit to support the web-mode?!
    const spaProps = {
        id: props.stackName,
        routes: libs_1.getChildrenArray(props.children)
            .filter(child => route_component_1.isRoute(child)),
        redirects: []
    };
    return Object.assign(props, infProps, spaProps);
};
function isSinglePageApp(component) {
    return component !== undefined &&
        component.instanceType === exports.SINGLEPAGE_INSTANCE_TYPE;
}
exports.isSinglePageApp = isSinglePageApp;
//# sourceMappingURL=spa-component.js.map