public ProjectionsSubsystem(ProjectionSubsystemOptions projectionSubsystemOptions)
        {
            if (projectionSubsystemOptions.RunProjections <= ProjectionType.System)
            {
                _projectionWorkerThreadCount = 1;
            }
            else
            {
                _projectionWorkerThreadCount = projectionSubsystemOptions.ProjectionWorkerThreadCount;
            }

            _runProjections = projectionSubsystemOptions.RunProjections;
            // Projection manager & Projection Core Coordinator
            // The manager only starts when projections are running
            _componentCount = _runProjections == ProjectionType.None ? 1 : 2;

            // Projection manager & each projection core worker
            _dispatcherCount = 1 + _projectionWorkerThreadCount;

            _startStandardProjections   = projectionSubsystemOptions.StartStandardProjections;
            _projectionsQueryExpiry     = projectionSubsystemOptions.ProjectionQueryExpiry;
            _faultOutOfOrderProjections = projectionSubsystemOptions.FaultOutOfOrderProjections;

            _leaderMainBus        = new InMemoryBus("manager input bus");
            _subsystemInitialized = 0;
            _projectionRuntime    = projectionSubsystemOptions.Runtime;
            _executionTimeout     = projectionSubsystemOptions.ExecutionTimeout;
            _compilationTimeout   = projectionSubsystemOptions.CompilationTimeout;
        }
 public ProjectionsStandardComponents(
     int projectionWorkerThreadCount,
     ProjectionType runProjections,
     IBus leaderOutputBus,
     IQueuedHandler leaderInputQueue,
     IBus leaderMainBus,
     bool faultOutOfOrderProjections, JavascriptProjectionRuntime projectionRuntime, int projectionCompilationTimeout, int projectionExecutionTimeout)
 {
     ProjectionWorkerThreadCount = projectionWorkerThreadCount;
     RunProjections               = runProjections;
     LeaderOutputBus              = leaderOutputBus;
     LeaderInputQueue             = leaderInputQueue;
     LeaderMainBus                = leaderMainBus;
     FaultOutOfOrderProjections   = faultOutOfOrderProjections;
     ProjectionRuntime            = projectionRuntime;
     ProjectionCompilationTimeout = projectionCompilationTimeout;
     ProjectionExecutionTimeout   = projectionExecutionTimeout;
 }
 public ProjectionStateHandlerFactory(TimeSpan javascriptCompilationTimeout, TimeSpan javascriptExecutionTimeout, JavascriptProjectionRuntime runtime)
 {
     _jsFactory = runtime switch {
         JavascriptProjectionRuntime.Legacy => (source, logger, cancelCallbackFactory, enableContentTypeValidation) =>
         new DefaultV8ProjectionStateHandler(source, logger, cancelCallbackFactory, enableContentTypeValidation),
         JavascriptProjectionRuntime.Interpreted => (source, _, _, enableContentTypeValidation) =>
         new JintProjectionStateHandler(source, enableContentTypeValidation, javascriptCompilationTimeout, javascriptExecutionTimeout),
         _ => throw new ArgumentOutOfRangeException(nameof(runtime), runtime, "Unknown javascript projection runtime")
     };
 }