diff --git a/src/Umbraco.Core/Components/Components.cs b/src/Umbraco.Core/Components/Components.cs index cb73e9cc5c..dffa471be6 100644 --- a/src/Umbraco.Core/Components/Components.cs +++ b/src/Umbraco.Core/Components/Components.cs @@ -41,6 +41,7 @@ namespace Umbraco.Core.Components public int Weight = -1; } + public void Compose() { var orderedComponentTypes = PrepareComponentTypes(); @@ -49,11 +50,11 @@ namespace Umbraco.Core.Components ComposeComponents(); } - public void Initialize() + public void Initialize(IFactory factory) { - using (var scope = _composition.Container.GetInstance().CreateScope()) + using (var scope = factory.GetInstance().CreateScope()) { - InitializeComponents(); + InitializeComponents(factory); scope.Complete(); } } @@ -303,12 +304,12 @@ namespace Umbraco.Core.Components } } - private void InitializeComponents() + private void InitializeComponents(IFactory factory) { // use a container scope to ensure that PerScope instances are disposed // components that require instances that should not survive should register them with PerScope lifetime using (_logger.DebugDuration($"Initializing components. (log when >{LogThresholdMilliseconds}ms)", "Initialized components.")) - using (_composition.Container.BeginScope()) + using (factory.BeginScope()) { foreach (var component in _components) { @@ -320,7 +321,7 @@ namespace Umbraco.Core.Components foreach (var initializer in initializers) { var parameters = initializer.GetParameters() - .Select(x => GetParameter(componentType, x.ParameterType)) + .Select(x => GetParameter(factory, componentType, x.ParameterType)) .ToArray(); initializer.Invoke(component, parameters); } @@ -329,13 +330,13 @@ namespace Umbraco.Core.Components } } - private object GetParameter(Type componentType, Type parameterType) + private object GetParameter(IFactory factory, Type componentType, Type parameterType) { object param; try { - param = _composition.Container.TryGetInstance(parameterType); + param = factory.TryGetInstance(parameterType); } catch (Exception e) { diff --git a/src/Umbraco.Core/Components/Composition.cs b/src/Umbraco.Core/Components/Composition.cs index 4a6c312968..6032dd303d 100644 --- a/src/Umbraco.Core/Components/Composition.cs +++ b/src/Umbraco.Core/Components/Composition.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using Umbraco.Core.Composing; +using Umbraco.Core.Logging; namespace Umbraco.Core.Components { @@ -12,35 +13,32 @@ namespace Umbraco.Core.Components /// avoid accessing the container. This is because everything needs to be properly registered and with /// the proper lifecycle. These methods will take care of it. Directly registering into the container /// may cause issues. - public class Composition + public class Composition : IRegister { private readonly Dictionary _builders = new Dictionary(); + private readonly IRegister _register; /// /// Initializes a new instance of the class. /// - /// A container. - /// The type loader. + /// A register. + /// A type loader. + /// A logger. /// The runtime level. - public Composition(IContainer container, TypeLoader typeLoader, RuntimeLevel level) + public Composition(IRegister register, TypeLoader typeLoader, IProfilingLogger logger, RuntimeLevel level) { - Container = container; + _register = register; TypeLoader = typeLoader; + Logger = logger; RuntimeLevel = level; } - // used for tests - internal Composition(IContainer container, RuntimeLevel level) - { - Container = container; - RuntimeLevel = level; - } + #region Services /// - /// Gets the container. + /// Gets the logger. /// - /// Use with care! - public IContainer Container { get; } + public IProfilingLogger Logger { get; } /// /// Gets the type loader. @@ -52,6 +50,45 @@ namespace Umbraco.Core.Components /// public RuntimeLevel RuntimeLevel { get; } + #endregion + + #region IRegister + + /// + public object ConcreteContainer => _register.ConcreteContainer; + + /// + public void Register(Type serviceType, Lifetime lifetime = Lifetime.Transient) + => _register.Register(serviceType, lifetime); + + /// + public void Register(Type serviceType, Type implementingType, Lifetime lifetime = Lifetime.Transient) + => _register.Register(serviceType, implementingType, lifetime); + + /// + public void Register(Func factory, Lifetime lifetime = Lifetime.Transient) + => _register.Register(factory, lifetime); + + /// + public void RegisterInstance(Type serviceType, object instance) + => _register.RegisterInstance(serviceType, instance); + + /// + public void RegisterAuto(Type serviceBaseType) + => _register.RegisterAuto(serviceBaseType); + + /// + public IContainer ConfigureForWeb() + => _register.ConfigureForWeb(); + + /// + public IContainer EnablePerWebRequestScope() + => _register.EnablePerWebRequestScope(); + + #endregion + + #region Collection Builders + /// /// Gets a collection builder (and registers the collection). /// @@ -66,11 +103,13 @@ namespace Umbraco.Core.Components return (TBuilder) o; var builder = new TBuilder(); - builder.Initialize(Container); + builder.Initialize(_register); _builders[typeOfBuilder] = builder; return builder; } + + #endregion } } diff --git a/src/Umbraco.Core/Components/CompositionExtensions.cs b/src/Umbraco.Core/Components/CompositionExtensions.cs index abc0fa3862..8ac8c66bc1 100644 --- a/src/Umbraco.Core/Components/CompositionExtensions.cs +++ b/src/Umbraco.Core/Components/CompositionExtensions.cs @@ -24,56 +24,56 @@ namespace Umbraco.Core.Components /// /// The composition. public static CacheRefresherCollectionBuilder CacheRefreshers(this Composition composition) - => composition.Container.GetInstance(); + => composition.GetCollectionBuilder(); /// /// Gets the mappers collection builder. /// /// The composition. public static MapperCollectionBuilder Mappers(this Composition composition) - => composition.Container.GetInstance(); + => composition.GetCollectionBuilder(); /// /// Gets the package actions collection builder. /// /// The composition. internal static PackageActionCollectionBuilder PackageActions(this Composition composition) - => composition.Container.GetInstance(); + => composition.GetCollectionBuilder(); /// /// Gets the data editor collection builder. /// /// The composition. public static DataEditorCollectionBuilder DataEditors(this Composition composition) - => composition.Container.GetInstance(); + => composition.GetCollectionBuilder(); /// /// Gets the property value converters collection builder. /// /// The composition. public static PropertyValueConverterCollectionBuilder PropertyValueConverters(this Composition composition) - => composition.Container.GetInstance(); + => composition.GetCollectionBuilder(); /// /// Gets the url segment providers collection builder. /// /// The composition. public static UrlSegmentProviderCollectionBuilder UrlSegmentProviders(this Composition composition) - => composition.Container.GetInstance(); + => composition.GetCollectionBuilder(); /// /// Gets the validators collection builder. /// /// The composition. internal static ManifestValueValidatorCollectionBuilder Validators(this Composition composition) - => composition.Container.GetInstance(); + => composition.GetCollectionBuilder(); /// /// Gets the post-migrations collection builder. /// /// The composition. internal static PostMigrationCollectionBuilder PostMigrations(this Composition composition) - => composition.Container.GetInstance(); + => composition.GetCollectionBuilder(); #endregion @@ -87,7 +87,7 @@ namespace Umbraco.Core.Components public static void SetCultureDictionaryFactory(this Composition composition) where T : ICultureDictionaryFactory { - composition.Container.RegisterSingleton(); + composition.RegisterSingleton(); } /// @@ -95,9 +95,9 @@ namespace Umbraco.Core.Components /// /// The composition. /// A function creating a culture dictionary factory. - public static void SetCultureDictionaryFactory(this Composition composition, Func factory) + public static void SetCultureDictionaryFactory(this Composition composition, Func factory) { - composition.Container.RegisterSingleton(factory); + composition.RegisterSingleton(factory); } /// @@ -107,7 +107,7 @@ namespace Umbraco.Core.Components /// A factory. public static void SetCultureDictionaryFactory(this Composition composition, ICultureDictionaryFactory factory) { - composition.Container.RegisterSingleton(_ => factory); + composition.RegisterSingleton(_ => factory); } /// @@ -118,7 +118,7 @@ namespace Umbraco.Core.Components public static void SetPublishedContentModelFactory(this Composition composition) where T : IPublishedModelFactory { - composition.Container.RegisterSingleton(); + composition.RegisterSingleton(); } /// @@ -126,9 +126,9 @@ namespace Umbraco.Core.Components /// /// The composition. /// A function creating a published content model factory. - public static void SetPublishedContentModelFactory(this Composition composition, Func factory) + public static void SetPublishedContentModelFactory(this Composition composition, Func factory) { - composition.Container.RegisterSingleton(factory); + composition.RegisterSingleton(factory); } /// @@ -138,7 +138,7 @@ namespace Umbraco.Core.Components /// A published content model factory. public static void SetPublishedContentModelFactory(this Composition composition, IPublishedModelFactory factory) { - composition.Container.RegisterSingleton(_ => factory); + composition.RegisterSingleton(_ => factory); } /// @@ -149,7 +149,7 @@ namespace Umbraco.Core.Components public static void SetServerRegistrar(this Composition composition) where T : IServerRegistrar { - composition.Container.RegisterSingleton(); + composition.RegisterSingleton(); } /// @@ -157,9 +157,9 @@ namespace Umbraco.Core.Components /// /// The composition. /// A function creating a server registar. - public static void SetServerRegistrar(this Composition composition, Func factory) + public static void SetServerRegistrar(this Composition composition, Func factory) { - composition.Container.RegisterSingleton(factory); + composition.RegisterSingleton(factory); } /// @@ -169,7 +169,7 @@ namespace Umbraco.Core.Components /// A server registrar. public static void SetServerRegistrar(this Composition composition, IServerRegistrar registrar) { - composition.Container.RegisterSingleton(_ => registrar); + composition.RegisterSingleton(_ => registrar); } /// @@ -180,7 +180,7 @@ namespace Umbraco.Core.Components public static void SetServerMessenger(this Composition composition) where T : IServerMessenger { - composition.Container.Register(Lifetime.Singleton); + composition.Register(Lifetime.Singleton); } /// @@ -188,9 +188,9 @@ namespace Umbraco.Core.Components /// /// The composition. /// A function creating a server messenger. - public static void SetServerMessenger(this Composition composition, Func factory) + public static void SetServerMessenger(this Composition composition, Func factory) { - composition.Container.RegisterSingleton(factory); + composition.RegisterSingleton(factory); } /// @@ -200,7 +200,7 @@ namespace Umbraco.Core.Components /// A server messenger. public static void SetServerMessenger(this Composition composition, IServerMessenger registrar) { - composition.Container.RegisterSingleton(_ => registrar); + composition.RegisterSingleton(_ => registrar); } /// @@ -211,7 +211,7 @@ namespace Umbraco.Core.Components public static void SetShortStringHelper(this Composition composition) where T : IShortStringHelper { - composition.Container.RegisterSingleton(); + composition.RegisterSingleton(); } /// @@ -219,9 +219,9 @@ namespace Umbraco.Core.Components /// /// The composition. /// A function creating a short string helper. - public static void SetShortStringHelper(this Composition composition, Func factory) + public static void SetShortStringHelper(this Composition composition, Func factory) { - composition.Container.RegisterSingleton(factory); + composition.RegisterSingleton(factory); } /// @@ -231,7 +231,7 @@ namespace Umbraco.Core.Components /// A short string helper. public static void SetShortStringHelper(this Composition composition, IShortStringHelper helper) { - composition.Container.RegisterSingleton(_ => helper); + composition.RegisterSingleton(_ => helper); } #endregion diff --git a/src/Umbraco.Core/Composing/CollectionBuilderBase.cs b/src/Umbraco.Core/Composing/CollectionBuilderBase.cs index b1d43d101c..b9ba687316 100644 --- a/src/Umbraco.Core/Composing/CollectionBuilderBase.cs +++ b/src/Umbraco.Core/Composing/CollectionBuilderBase.cs @@ -21,7 +21,7 @@ namespace Umbraco.Core.Composing /// /// Gets the container. /// - protected IContainer Container { get; private set; } + protected IRegister Container { get; private set; } /// /// Gets the internal list of types as an IEnumerable (immutable). @@ -32,7 +32,7 @@ namespace Umbraco.Core.Composing /// Initializes a new instance of the builder. /// /// By default, this registers the collection automatically. - public virtual void Initialize(IContainer container) + public virtual void Initialize(IRegister container) { if (Container != null) throw new InvalidOperationException("This builder has already been initialized."); @@ -40,7 +40,7 @@ namespace Umbraco.Core.Composing Container = container; // register the collection - Container.Register(_ => CreateCollection(), CollectionLifetime); + Container.Register(factory => CreateCollection(factory), CollectionLifetime); } /// @@ -98,12 +98,12 @@ namespace Umbraco.Core.Composing /// Creates the collection items. /// /// The collection items. - protected virtual IEnumerable CreateItems() + protected virtual IEnumerable CreateItems(IFactory factory) { RegisterTypes(); // will do it only once return _registeredTypes // respect order - .Select(x => (TItem) Container.GetInstance(x)) + .Select(x => (TItem) factory.GetInstance(x)) .ToArray(); // safe } @@ -112,9 +112,9 @@ namespace Umbraco.Core.Composing /// /// A collection. /// Creates a new collection each time it is invoked. - public virtual TCollection CreateCollection() + public virtual TCollection CreateCollection(IFactory factory) { - return Container.CreateInstance(CreateItems()); + return factory.CreateInstance(CreateItems(factory)); } protected Type EnsureType(Type type, string action) diff --git a/src/Umbraco.Core/Composing/Composers/ConfigurationComposer.cs b/src/Umbraco.Core/Composing/Composers/ConfigurationComposer.cs index 08b88dfc04..8e81256e3b 100644 --- a/src/Umbraco.Core/Composing/Composers/ConfigurationComposer.cs +++ b/src/Umbraco.Core/Composing/Composers/ConfigurationComposer.cs @@ -11,13 +11,11 @@ namespace Umbraco.Core.Composing.Composers { public static Composition ComposeConfiguration(this Composition composition) { - var container = composition.Container; - - container.Register(factory => UmbracoConfig.For.UmbracoSettings()); - container.Register(factory => factory.GetInstance().Content); - container.Register(factory => factory.GetInstance().Templates); - container.Register(factory => factory.GetInstance().RequestHandler); - container.Register(factory => UmbracoConfig.For.GlobalSettings()); + composition.Register(factory => UmbracoConfig.For.UmbracoSettings()); + composition.Register(factory => factory.GetInstance().Content); + composition.Register(factory => factory.GetInstance().Templates); + composition.Register(factory => factory.GetInstance().RequestHandler); + composition.Register(factory => UmbracoConfig.For.GlobalSettings()); // fixme - other sections we need to add? diff --git a/src/Umbraco.Core/Composing/Composers/CoreMappingProfilesComposer.cs b/src/Umbraco.Core/Composing/Composers/CoreMappingProfilesComposer.cs index 38b15b6084..0274b8f1a9 100644 --- a/src/Umbraco.Core/Composing/Composers/CoreMappingProfilesComposer.cs +++ b/src/Umbraco.Core/Composing/Composers/CoreMappingProfilesComposer.cs @@ -9,8 +9,7 @@ namespace Umbraco.Core.Composing.Composers { public static Composition ComposeCoreMappingProfiles(this Composition composition) { - var container = composition.Container; - container.Register(); + composition.Register(); return composition; } } diff --git a/src/Umbraco.Core/Composing/Composers/FileSystemsComposer.cs b/src/Umbraco.Core/Composing/Composers/FileSystemsComposer.cs index a1895df4e6..1970fc7f4c 100644 --- a/src/Umbraco.Core/Composing/Composers/FileSystemsComposer.cs +++ b/src/Umbraco.Core/Composing/Composers/FileSystemsComposer.cs @@ -67,22 +67,20 @@ namespace Umbraco.Core.Composing.Composers public static Composition ComposeFileSystems(this Composition composition) { - var container = composition.Container; - // register FileSystems, which manages all filesystems // it needs to be registered (not only the interface) because it provides additional // functionality eg for scoping, and is injected in the scope provider - whereas the // interface is really for end-users to get access to filesystems. - container.RegisterSingleton(factory => factory.CreateInstance(container)); + composition.RegisterSingleton(factory => factory.CreateInstance(factory)); // register IFileSystems, which gives access too all filesystems - container.RegisterSingleton(factory => factory.GetInstance()); + composition.RegisterSingleton(factory => factory.GetInstance()); // register the scheme for media paths - container.RegisterSingleton(); + composition.RegisterSingleton(); // register the IMediaFileSystem implementation with a supporting filesystem - container.RegisterFileSystem( + composition.RegisterFileSystem( factory => new PhysicalFileSystem("~/media")); return composition; diff --git a/src/Umbraco.Core/Composing/Composers/RepositoriesComposer.cs b/src/Umbraco.Core/Composing/Composers/RepositoriesComposer.cs index d0fdf63fb9..54f9ff3e53 100644 --- a/src/Umbraco.Core/Composing/Composers/RepositoriesComposer.cs +++ b/src/Umbraco.Core/Composing/Composers/RepositoriesComposer.cs @@ -11,44 +11,42 @@ namespace Umbraco.Core.Composing.Composers { public static Composition ComposeRepositories(this Composition composition) { - var container = composition.Container; - // repositories - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); return composition; } diff --git a/src/Umbraco.Core/Composing/Composers/ServicesComposer.cs b/src/Umbraco.Core/Composing/Composers/ServicesComposer.cs index 2db718f0ce..ec53f7efdc 100644 --- a/src/Umbraco.Core/Composing/Composers/ServicesComposer.cs +++ b/src/Umbraco.Core/Composing/Composers/ServicesComposer.cs @@ -15,58 +15,56 @@ namespace Umbraco.Core.Composing.Composers { public static Composition ComposeServices(this Composition composition) { - var container = composition.Container; - // register a transient messages factory, which will be replaced by the web // boot manager when running in a web context - container.RegisterSingleton(); + composition.RegisterSingleton(); // register the service context - container.RegisterSingleton(); + composition.RegisterSingleton(); // register the special idk map - container.RegisterSingleton(); + composition.RegisterSingleton(); // register the services - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.Register(SourcesFactory); - container.RegisterSingleton(factory => new LocalizedTextService( + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.Register(SourcesFactory); + composition.RegisterSingleton(factory => new LocalizedTextService( factory.GetInstance>(), factory.GetInstance())); //TODO: These are replaced in the web project - we need to declare them so that // something is wired up, just not sure this is very nice but will work for now. - container.RegisterSingleton(); - container.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); return composition; } - private static LocalizedTextServiceFileSources SourcesFactory(IContainer container) + private static LocalizedTextServiceFileSources SourcesFactory(IFactory container) { var mainLangFolder = new DirectoryInfo(IOHelper.MapPath(SystemDirectories.Umbraco + "/config/lang/")); var appPlugins = new DirectoryInfo(IOHelper.MapPath(SystemDirectories.AppPlugins)); diff --git a/src/Umbraco.Core/Composing/Current.cs b/src/Umbraco.Core/Composing/Current.cs index 17c8fcd48b..312d9251a3 100644 --- a/src/Umbraco.Core/Composing/Current.cs +++ b/src/Umbraco.Core/Composing/Current.cs @@ -26,7 +26,7 @@ namespace Umbraco.Core.Composing /// public static class Current { - private static IContainer _container; + private static IFactory _factory; private static IShortStringHelper _shortStringHelper; private static ILogger _logger; @@ -35,30 +35,30 @@ namespace Umbraco.Core.Composing private static IPublishedValueFallback _publishedValueFallback; /// - /// Gets or sets the DI container. + /// Gets or sets the factory. /// - public static IContainer Container + public static IFactory Factory { get { - if (_container == null) throw new Exception("No container has been set."); - return _container; + if (_factory == null) throw new Exception("No factory has been set."); + return _factory; } set { - if (_container != null) throw new Exception("A container has already been set."); - _container = value; + if (_factory != null) throw new Exception("A factory has already been set."); + _factory = value; } } - internal static bool HasContainer => _container != null; + internal static bool HasContainer => _factory != null; // for UNIT TESTS exclusively! // resets *everything* that is 'current' internal static void Reset() { - _container?.Dispose(); - _container = null; + _factory.DisposeIfDisposable(); + _factory = null; _shortStringHelper = null; _logger = null; @@ -80,89 +80,89 @@ namespace Umbraco.Core.Composing // not happen. Will do when we get rid of IShortStringHelper. public static IShortStringHelper ShortStringHelper - => _shortStringHelper ?? (_shortStringHelper = _container?.TryGetInstance() + => _shortStringHelper ?? (_shortStringHelper = _factory?.TryGetInstance() ?? new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(UmbracoConfig.For.UmbracoSettings()))); public static ILogger Logger - => _logger ?? (_logger = _container?.TryGetInstance() + => _logger ?? (_logger = _factory?.TryGetInstance() ?? new DebugDiagnosticsLogger()); public static IProfiler Profiler - => _profiler ?? (_profiler = _container?.TryGetInstance() + => _profiler ?? (_profiler = _factory?.TryGetInstance() ?? new LogProfiler(Logger)); public static IProfilingLogger ProfilingLogger - => _profilingLogger ?? (_profilingLogger = _container?.TryGetInstance()) + => _profilingLogger ?? (_profilingLogger = _factory?.TryGetInstance()) ?? new ProfilingLogger(Logger, Profiler); public static IRuntimeState RuntimeState - => Container.GetInstance(); + => Factory.GetInstance(); public static TypeLoader TypeLoader - => Container.GetInstance(); + => Factory.GetInstance(); public static IFileSystems FileSystems - => Container.GetInstance(); + => Factory.GetInstance(); public static IMediaFileSystem MediaFileSystem - => Container.GetInstance(); + => Factory.GetInstance(); public static UrlSegmentProviderCollection UrlSegmentProviders - => Container.GetInstance(); + => Factory.GetInstance(); public static CacheRefresherCollection CacheRefreshers - => Container.GetInstance(); + => Factory.GetInstance(); public static DataEditorCollection DataEditors - => Container.GetInstance(); + => Factory.GetInstance(); public static PropertyEditorCollection PropertyEditors - => Container.GetInstance(); + => Factory.GetInstance(); public static ParameterEditorCollection ParameterEditors - => Container.GetInstance(); + => Factory.GetInstance(); internal static ManifestValueValidatorCollection ManifestValidators - => Container.GetInstance(); + => Factory.GetInstance(); internal static PackageActionCollection PackageActions - => Container.GetInstance(); + => Factory.GetInstance(); internal static PropertyValueConverterCollection PropertyValueConverters - => Container.GetInstance(); + => Factory.GetInstance(); internal static IPublishedModelFactory PublishedModelFactory - => Container.GetInstance(); + => Factory.GetInstance(); public static IServerMessenger ServerMessenger - => Container.GetInstance(); + => Factory.GetInstance(); public static IServerRegistrar ServerRegistrar - => Container.GetInstance(); + => Factory.GetInstance(); public static ICultureDictionaryFactory CultureDictionaryFactory - => Container.GetInstance(); + => Factory.GetInstance(); public static CacheHelper ApplicationCache - => Container.GetInstance(); + => Factory.GetInstance(); public static ServiceContext Services - => Container.GetInstance(); + => Factory.GetInstance(); public static IScopeProvider ScopeProvider - => Container.GetInstance(); + => Factory.GetInstance(); public static ISqlContext SqlContext - => Container.GetInstance(); + => Factory.GetInstance(); public static IPublishedContentTypeFactory PublishedContentTypeFactory - => Container.GetInstance(); + => Factory.GetInstance(); public static IPublishedValueFallback PublishedValueFallback - => _publishedValueFallback ?? Container.GetInstance() ?? new NoopPublishedValueFallback(); + => _publishedValueFallback ?? Factory.GetInstance() ?? new NoopPublishedValueFallback(); public static IVariationContextAccessor VariationContextAccessor - => Container.GetInstance(); + => Factory.GetInstance(); #endregion } diff --git a/src/Umbraco.Core/Composing/ICollectionBuilder.cs b/src/Umbraco.Core/Composing/ICollectionBuilder.cs index a493d90a0a..e17a362e6d 100644 --- a/src/Umbraco.Core/Composing/ICollectionBuilder.cs +++ b/src/Umbraco.Core/Composing/ICollectionBuilder.cs @@ -8,7 +8,7 @@ /// /// Initializes a new instance of the builder, and registers the collection. /// - void Initialize(IContainer container); + void Initialize(IRegister container); } /// @@ -24,6 +24,6 @@ /// /// A collection. /// Creates a new collection each time it is invoked. - TCollection CreateCollection(); + TCollection CreateCollection(IFactory factory); } } diff --git a/src/Umbraco.Core/Composing/IContainer.cs b/src/Umbraco.Core/Composing/IContainer.cs index 4975f5d08d..22b6ac3eae 100644 --- a/src/Umbraco.Core/Composing/IContainer.cs +++ b/src/Umbraco.Core/Composing/IContainer.cs @@ -20,17 +20,76 @@ namespace Umbraco.Core.Composing // IEnumerable of the service, nameless, returns them all /// - /// Defines a container for Umbraco. + /// Defines a service register for Umbraco. /// - public interface IContainer : IDisposable + public interface IRegister { /// /// Gets the concrete container. /// object ConcreteContainer { get; } - #region Factory + /// + /// Registers a service as its own implementation. + /// + void Register(Type serviceType, Lifetime lifetime = Lifetime.Transient); + /// + /// Registers a service with an implementation type. + /// + void Register(Type serviceType, Type implementingType, Lifetime lifetime = Lifetime.Transient); + + /// + /// Registers a service with an implementation factory. + /// + void Register(Func factory, Lifetime lifetime = Lifetime.Transient); + + /// + /// Registers a service with an implementing instance. + /// + void RegisterInstance(Type serviceType, object instance); + + /// + /// Registers a base type for auto-registration. + /// + /// + /// Auto-registration means that anytime the container is asked to create an instance + /// of a type deriving from , it will first register that + /// type automatically. + /// This can be used for instance for views or controllers. Then, one just needs to + /// register a common base class or interface, and the container knows how to create instances. + /// + void RegisterAuto(Type serviceBaseType); + + #region Control + + /// + /// Configures the container for web support. + /// + /// The container. + /// + /// Enables support for MVC, WebAPI, but *not* per-request scope. This is used early in the boot + /// process, where anything "scoped" should not be linked to a web request. + /// + IContainer ConfigureForWeb(); + + /// + /// Enables per-request scope. + /// + /// The container. + /// + /// Ties scopes to web requests. + /// + IContainer EnablePerWebRequestScope(); + + #endregion + } + + /// + /// Defines a service factory for Umbraco. + /// + public interface IFactory + { /// /// Gets an instance of a service. /// @@ -72,46 +131,6 @@ namespace Umbraco.Core.Composing /// void Release(object instance); - #endregion - - #region Registry - - /// - /// Registers a service as its own implementation. - /// - void Register(Type serviceType, Lifetime lifetime = Lifetime.Transient); - - /// - /// Registers a service with an implementation type. - /// - void Register(Type serviceType, Type implementingType, Lifetime lifetime = Lifetime.Transient); - - /// - /// Registers a service with an implementation factory. - /// - void Register(Func factory, Lifetime lifetime = Lifetime.Transient); - - /// - /// Registers a service with an implementing instance. - /// - void RegisterInstance(Type serviceType, object instance); - - /// - /// Registers a base type for auto-registration. - /// - /// - /// Auto-registration means that anytime the container is asked to create an instance - /// of a type deriving from , it will first register that - /// type automatically. - /// This can be used for instance for views or controllers. Then, one just needs to - /// register a common base class or interface, and the container knows how to create instances. - /// - void RegisterAuto(Type serviceBaseType); - - #endregion - - #region Control - /// /// Begins a scope. /// @@ -120,26 +139,11 @@ namespace Umbraco.Core.Composing /// Scopes can be nested. Each instance is disposed individually. /// IDisposable BeginScope(); - - /// - /// Configures the container for web support. - /// - /// The container. - /// - /// Enables support for MVC, WebAPI, but *not* per-request scope. This is used early in the boot - /// process, where anything "scoped" should not be linked to a web request. - /// - IContainer ConfigureForWeb(); - - /// - /// Enables per-request scope. - /// - /// The container. - /// - /// Ties scopes to web requests. - /// - IContainer EnablePerWebRequestScope(); - - #endregion } + + /// + /// Defines a container for Umbraco. + /// + public interface IContainer : IRegister, IFactory, IDisposable // fixme kill? + { } } diff --git a/src/Umbraco.Core/Composing/LazyCollectionBuilderBase.cs b/src/Umbraco.Core/Composing/LazyCollectionBuilderBase.cs index 79e5ffd4b1..50d76b47a2 100644 --- a/src/Umbraco.Core/Composing/LazyCollectionBuilderBase.cs +++ b/src/Umbraco.Core/Composing/LazyCollectionBuilderBase.cs @@ -14,8 +14,7 @@ namespace Umbraco.Core.Composing where TBuilder : LazyCollectionBuilderBase where TCollection : IBuilderCollection { - private readonly List>> _producers1 = new List>>(); - private readonly List>> _producers2 = new List>>(); + private readonly List>> _producers = new List>>(); private readonly List _excluded = new List(); protected abstract TBuilder This { get; } @@ -29,9 +28,8 @@ namespace Umbraco.Core.Composing Configure(types => { types.Clear(); - _producers1.Clear(); - _producers2.Clear(); - _excluded.Clear(); + _producers.Clear(); + _excluded.Clear(); }); return This; } @@ -107,21 +105,7 @@ namespace Umbraco.Core.Composing { Configure(types => { - _producers1.Add(producer); - }); - return This; - } - - /// - /// Adds a types producer to the collection. - /// - /// The types producer. - /// The builder. - public TBuilder Add(Func> producer) - { - Configure(types => - { - _producers2.Add(producer); + _producers.Add(producer); }); return This; } @@ -160,8 +144,7 @@ namespace Umbraco.Core.Composing protected override IEnumerable GetRegisteringTypes(IEnumerable types) { return types - .Union(_producers1.SelectMany(x => x())) - .Union(_producers2.SelectMany(x => x(Container))) + .Union(_producers.SelectMany(x => x())) .Distinct() .Select(x => EnsureType(x, "register")) .Except(_excluded); diff --git a/src/Umbraco.Core/Composing/LightInject/LightInjectContainer.cs b/src/Umbraco.Core/Composing/LightInject/LightInjectContainer.cs index e3b93f5aea..a15bfdfb16 100644 --- a/src/Umbraco.Core/Composing/LightInject/LightInjectContainer.cs +++ b/src/Umbraco.Core/Composing/LightInject/LightInjectContainer.cs @@ -174,7 +174,7 @@ namespace Umbraco.Core.Composing.LightInject } /// - public void Register(Func factory, Lifetime lifetime = Lifetime.Transient) + public void Register(Func factory, Lifetime lifetime = Lifetime.Transient) { switch (lifetime) { diff --git a/src/Umbraco.Core/Composing/OrderedCollectionBuilderBase.cs b/src/Umbraco.Core/Composing/OrderedCollectionBuilderBase.cs index 5acf716ec0..bde1bf96c5 100644 --- a/src/Umbraco.Core/Composing/OrderedCollectionBuilderBase.cs +++ b/src/Umbraco.Core/Composing/OrderedCollectionBuilderBase.cs @@ -78,26 +78,6 @@ namespace Umbraco.Core.Composing return This; } - /// - /// Appends types to the collections. - /// - /// The types to append. - /// The builder. - public TBuilder Append(Func> types) - { - Configure(list => - { - foreach (var type in types(Container)) - { - // would be detected by CollectionBuilderBase when registering, anyways, but let's fail fast - EnsureType(type, "register"); - if (list.Contains(type)) list.Remove(type); - list.Add(type); - } - }); - return This; - } - /// /// Appends a type after another type. /// diff --git a/src/Umbraco.Core/Composing/ContainerExtensions.cs b/src/Umbraco.Core/Composing/RegisterExtensions.cs similarity index 84% rename from src/Umbraco.Core/Composing/ContainerExtensions.cs rename to src/Umbraco.Core/Composing/RegisterExtensions.cs index 047bcd2ae5..fc6aa78f0b 100644 --- a/src/Umbraco.Core/Composing/ContainerExtensions.cs +++ b/src/Umbraco.Core/Composing/RegisterExtensions.cs @@ -10,7 +10,7 @@ namespace Umbraco.Core.Composing /// /// Provides extension methods to the class. /// - public static class ContainerExtensions + public static class RegisterExtensions { /// /// Gets an instance of a service. @@ -19,7 +19,7 @@ namespace Umbraco.Core.Composing /// The container. /// An instance of the specified type. /// Throws an exception if the container failed to get an instance of the specified type. - public static T GetInstance(this IContainer container) + public static T GetInstance(this IFactory container) => (T) container.GetInstance(typeof(T)); /// @@ -30,7 +30,7 @@ namespace Umbraco.Core.Composing /// Returns null if the container does not know how to get an instance /// of the specified type. Throws an exception if the container does know how /// to get an instance of the specified type, but failed to do so. - public static T TryGetInstance(this IContainer container) + public static T TryGetInstance(this IFactory container) => (T) container.TryGetInstance(typeof(T)); /// @@ -44,49 +44,49 @@ namespace Umbraco.Core.Composing /// Throws an exception if the container failed to get an instance of the specified type. /// The arguments are used as dependencies by the container. /// - public static T CreateInstance(this IContainer container, params object[] args) + public static T CreateInstance(this IFactory container, params object[] args) => (T) container.CreateInstance(typeof(T), args); /// /// Registers a service with an implementation type. /// - public static void Register(this IContainer container, Lifetime lifetime = Lifetime.Transient) + public static void Register(this IRegister container, Lifetime lifetime = Lifetime.Transient) => container.Register(typeof(TService), typeof(TImplementing), lifetime); /// /// Registers a service as its own implementation. /// - public static void Register(this IContainer container, Lifetime lifetime = Lifetime.Transient) + public static void Register(this IRegister container, Lifetime lifetime = Lifetime.Transient) => container.Register(typeof(TService), lifetime); /// /// Registers a singleton service as its own implementation. /// - public static void RegisterSingleton(this IContainer container) + public static void RegisterSingleton(this IRegister container) => container.Register(typeof(TService), Lifetime.Singleton); /// /// Registers a singleton service with an implementation type. /// - public static void RegisterSingleton(this IContainer container) + public static void RegisterSingleton(this IRegister container) => container.Register(typeof(TService), typeof(TImplementing), Lifetime.Singleton); /// /// Registers a singleton service with an implementation factory. /// - public static void RegisterSingleton(this IContainer container, Func factory) + public static void RegisterSingleton(this IRegister container, Func factory) => container.Register(factory, Lifetime.Singleton); /// /// Registers a service with an implementing instance. /// - public static void RegisterInstance(this IContainer container, TService instance) + public static void RegisterInstance(this IRegister container, TService instance) => container.RegisterInstance(typeof(TService), instance); /// /// Registers a base type for auto-registration. /// - public static void RegisterAuto(this IContainer container) + public static void RegisterAuto(this IRegister container) => container.RegisterAuto(typeof(TServiceBase)); /// @@ -101,7 +101,7 @@ namespace Umbraco.Core.Composing /// The arguments are used as dependencies by the container. Other dependencies /// are retrieved from the container. /// - public static object CreateInstance(this IContainer container, Type type, params object[] args) + public static object CreateInstance(this IFactory container, Type type, params object[] args) { // LightInject has this, but then it requires RegisterConstructorDependency etc and has various oddities // including the most annoying one, which is that it does not work on singletons (hard to fix) @@ -137,7 +137,7 @@ namespace Umbraco.Core.Composing /// The container. /// A factory method creating the supporting filesystem. /// The container. - public static IContainer RegisterFileSystem(this IContainer container, Func supportingFileSystemFactory) + public static IRegister RegisterFileSystem(this IRegister container, Func supportingFileSystemFactory) where TImplementing : FileSystemWrapper, TFileSystem { container.RegisterSingleton(factory => @@ -156,7 +156,7 @@ namespace Umbraco.Core.Composing /// The container. /// A factory method creating the supporting filesystem. /// The container. - public static IContainer RegisterFileSystem(this IContainer container, Func supportingFileSystemFactory) + public static IRegister RegisterFileSystem(this IRegister container, Func supportingFileSystemFactory) where TFileSystem : FileSystemWrapper { container.RegisterSingleton(factory => diff --git a/src/Umbraco.Core/Composing/TypeLoader.cs b/src/Umbraco.Core/Composing/TypeLoader.cs index 714c5c0ec5..3e7baf66b8 100644 --- a/src/Umbraco.Core/Composing/TypeLoader.cs +++ b/src/Umbraco.Core/Composing/TypeLoader.cs @@ -87,6 +87,13 @@ namespace Umbraco.Core.Composing } } + /// + /// Initializes a new, test/blank, instance of the class. + /// + /// The initialized instance cannot get types. + internal TypeLoader() + { } + /// /// Gets or sets the set of assemblies to scan. /// @@ -514,6 +521,9 @@ namespace Umbraco.Core.Composing /// Caching is disabled when using specific assemblies. public IEnumerable GetTypes(bool cache = true, IEnumerable specificAssemblies = null) { + if (_logger == null) + throw new InvalidOperationException("Cannot get types from a test/blank type loader."); + // do not cache anything from specific assemblies cache &= specificAssemblies == null; @@ -553,6 +563,9 @@ namespace Umbraco.Core.Composing public IEnumerable GetTypesWithAttribute(bool cache = true, IEnumerable specificAssemblies = null) where TAttribute : Attribute { + if (_logger == null) + throw new InvalidOperationException("Cannot get types from a test/blank type loader."); + // do not cache anything from specific assemblies cache &= specificAssemblies == null; @@ -592,6 +605,9 @@ namespace Umbraco.Core.Composing public IEnumerable GetAttributedTypes(bool cache = true, IEnumerable specificAssemblies = null) where TAttribute : Attribute { + if (_logger == null) + throw new InvalidOperationException("Cannot get types from a test/blank type loader."); + // do not cache anything from specific assemblies cache &= specificAssemblies == null; diff --git a/src/Umbraco.Core/IO/FileSystems.cs b/src/Umbraco.Core/IO/FileSystems.cs index 47e2b02bb7..7fc846319b 100644 --- a/src/Umbraco.Core/IO/FileSystems.cs +++ b/src/Umbraco.Core/IO/FileSystems.cs @@ -9,7 +9,7 @@ namespace Umbraco.Core.IO { public class FileSystems : IFileSystems { - private readonly IContainer _container; + private readonly IFactory _container; private readonly ILogger _logger; private readonly ConcurrentDictionary> _filesystems = new ConcurrentDictionary>(); @@ -34,7 +34,7 @@ namespace Umbraco.Core.IO #region Constructor // DI wants a public ctor - public FileSystems(IContainer container, ILogger logger) + public FileSystems(IFactory container, ILogger logger) { _container = container; _logger = logger; diff --git a/src/Umbraco.Core/Migrations/MigrationBuilder.cs b/src/Umbraco.Core/Migrations/MigrationBuilder.cs index aebd8bd1ee..d2d2b7d32a 100644 --- a/src/Umbraco.Core/Migrations/MigrationBuilder.cs +++ b/src/Umbraco.Core/Migrations/MigrationBuilder.cs @@ -5,9 +5,9 @@ namespace Umbraco.Core.Migrations { public class MigrationBuilder : IMigrationBuilder { - private readonly IContainer _container; + private readonly IFactory _container; - public MigrationBuilder(IContainer container) + public MigrationBuilder(IFactory container) { _container = container; } diff --git a/src/Umbraco.Core/Models/Language.cs b/src/Umbraco.Core/Models/Language.cs index e190c8ad3b..03f8f87cd3 100644 --- a/src/Umbraco.Core/Models/Language.cs +++ b/src/Umbraco.Core/Models/Language.cs @@ -88,7 +88,7 @@ namespace Umbraco.Core.Models try { - var globalSettings = (IGlobalSettings) Composing.Current.Container.GetInstance(typeof(IGlobalSettings)); + var globalSettings = (IGlobalSettings) Composing.Current.Factory.GetInstance(typeof(IGlobalSettings)); var defaultUiCulture = CultureInfo.GetCultureInfo(globalSettings.DefaultUILanguage); Thread.CurrentThread.CurrentUICulture = defaultUiCulture; diff --git a/src/Umbraco.Core/Persistence/Mappers/MapperCollectionBuilder.cs b/src/Umbraco.Core/Persistence/Mappers/MapperCollectionBuilder.cs index 28e19088bf..40bc76928b 100644 --- a/src/Umbraco.Core/Persistence/Mappers/MapperCollectionBuilder.cs +++ b/src/Umbraco.Core/Persistence/Mappers/MapperCollectionBuilder.cs @@ -6,7 +6,7 @@ namespace Umbraco.Core.Persistence.Mappers { protected override MapperCollectionBuilder This => this; - public override void Initialize(IContainer container) + public override void Initialize(IRegister container) { base.Initialize(container); diff --git a/src/Umbraco.Core/Runtime/CoreRuntime.cs b/src/Umbraco.Core/Runtime/CoreRuntime.cs index 21ce073719..4793b1994b 100644 --- a/src/Umbraco.Core/Runtime/CoreRuntime.cs +++ b/src/Umbraco.Core/Runtime/CoreRuntime.cs @@ -47,7 +47,7 @@ namespace Umbraco.Core.Runtime public virtual void Boot(IContainer container) { // assign current container - Current.Container = _container = container; + Current.Factory = _container = container; // create and register the essential services // ie the bare minimum required to boot @@ -94,7 +94,7 @@ namespace Umbraco.Core.Runtime container.RegisterInstance(_state); // create the composition - var composition = new Composition(container, typeLoader, RuntimeLevel.Boot); + var composition = new Composition(container, typeLoader, profilingLogger, RuntimeLevel.Boot); // register runtime-level services Compose(composition); @@ -134,8 +134,9 @@ namespace Umbraco.Core.Runtime // we should have a Current.Factory not a Current.Container // we should compile the register into a factory *now* // using the factory before this point should just throw + IFactory factory = container; - _components.Initialize(); + _components.Initialize(factory); } catch (Exception e) { diff --git a/src/Umbraco.Core/Runtime/CoreRuntimeComponent.cs b/src/Umbraco.Core/Runtime/CoreRuntimeComponent.cs index 7fbdd46f36..c4167af2b0 100644 --- a/src/Umbraco.Core/Runtime/CoreRuntimeComponent.cs +++ b/src/Umbraco.Core/Runtime/CoreRuntimeComponent.cs @@ -34,8 +34,6 @@ namespace Umbraco.Core.Runtime { base.Compose(composition); - var container = composition.Container; - // composers composition .ComposeConfiguration() @@ -50,16 +48,16 @@ namespace Umbraco.Core.Runtime composition.GetCollectionBuilder().AddCoreMappers(); // register the scope provider - container.RegisterSingleton(); // implements both IScopeProvider and IScopeAccessor - container.RegisterSingleton(f => f.GetInstance()); - container.RegisterSingleton(f => f.GetInstance()); + composition.RegisterSingleton(); // implements both IScopeProvider and IScopeAccessor + composition.RegisterSingleton(f => f.GetInstance()); + composition.RegisterSingleton(f => f.GetInstance()); // register database builder // *not* a singleton, don't want to keep it around - composition.Container.Register(); + composition.Register(); // register manifest parser, will be injected in collection builders where needed - composition.Container.RegisterSingleton(); + composition.RegisterSingleton(); // register our predefined validators composition.GetCollectionBuilder() @@ -72,12 +70,12 @@ namespace Umbraco.Core.Runtime // properties and parameters derive from data editors composition.GetCollectionBuilder() - .Add(factory => factory.GetInstance().GetDataEditors()); - composition.Container.RegisterSingleton(); - composition.Container.RegisterSingleton(); + .Add(() => composition.TypeLoader.GetDataEditors()); + composition.RegisterSingleton(); + composition.RegisterSingleton(); // register a server registrar, by default it's the db registrar - composition.Container.RegisterSingleton(f => + composition.RegisterSingleton(f => { if ("true".InvariantEquals(ConfigurationManager.AppSettings["umbracoDisableElectionForSingleServer"])) return new SingleServerRegistrar(f.GetInstance()); @@ -89,7 +87,7 @@ namespace Umbraco.Core.Runtime // by default we'll use the database server messenger with default options (no callbacks), // this will be overridden by either the legacy thing or the db thing in the corresponding // components in the web project - fixme - should obsolete the legacy thing - composition.Container.RegisterSingleton(factory + composition.RegisterSingleton(factory => new DatabaseServerMessenger( factory.GetInstance(), factory.GetInstance(), @@ -99,29 +97,29 @@ namespace Umbraco.Core.Runtime true, new DatabaseServerMessengerOptions())); composition.GetCollectionBuilder() - .Add(factory => factory.GetInstance().GetCacheRefreshers()); + .Add(() => composition.TypeLoader.GetCacheRefreshers()); composition.GetCollectionBuilder() - .Add(f => f.GetInstance().GetPackageActions()); + .Add(() => composition.TypeLoader.GetPackageActions()); composition.GetCollectionBuilder() - .Append(factory => factory.GetInstance().GetTypes()); + .Append(composition.TypeLoader.GetTypes()); - composition.Container.RegisterSingleton(); + composition.RegisterSingleton(); - composition.Container.RegisterSingleton(factory + composition.RegisterSingleton(factory => new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(factory.GetInstance()))); composition.GetCollectionBuilder() .Append(); composition.GetCollectionBuilder() - .Add(factory => factory.GetInstance().GetTypes()); + .Add(() => composition.TypeLoader.GetTypes()); - composition.Container.RegisterSingleton(factory => new MigrationBuilder(composition.Container)); + composition.RegisterSingleton(factory => new MigrationBuilder(factory)); // by default, register a noop factory - composition.Container.RegisterSingleton(); + composition.RegisterSingleton(); } internal void Initialize(IEnumerable mapperProfiles) diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 2e235dcd23..3dfde3b175 100755 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -321,7 +321,7 @@ - + diff --git a/src/Umbraco.Tests/Cache/DistributedCache/DistributedCacheTests.cs b/src/Umbraco.Tests/Cache/DistributedCache/DistributedCacheTests.cs index d3b0b6cda8..2c68b1608a 100644 --- a/src/Umbraco.Tests/Cache/DistributedCache/DistributedCacheTests.cs +++ b/src/Umbraco.Tests/Cache/DistributedCache/DistributedCacheTests.cs @@ -1,11 +1,14 @@ using System; using System.Collections.Generic; using System.Linq; +using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Components; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; +using Umbraco.Core.Logging; using Umbraco.Core.Sync; namespace Umbraco.Tests.Cache.DistributedCache @@ -21,8 +24,9 @@ namespace Umbraco.Tests.Cache.DistributedCache [SetUp] public void Setup() { - var container = Current.Container = ContainerFactory.Create(); - var composition = new Composition(container, RuntimeLevel.Run); + var container = ContainerFactory.Create(); + Current.Factory = container; + var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); container.Register(_ => new TestServerRegistrar()); container.RegisterSingleton(_ => new TestServerMessenger()); diff --git a/src/Umbraco.Tests/Components/ComponentTests.cs b/src/Umbraco.Tests/Components/ComponentTests.cs index 9c38731cb8..e455f9e6e7 100644 --- a/src/Umbraco.Tests/Components/ComponentTests.cs +++ b/src/Umbraco.Tests/Components/ComponentTests.cs @@ -4,8 +4,10 @@ using System.Linq; using Moq; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Cache; using Umbraco.Core.Components; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Persistence; @@ -21,11 +23,11 @@ namespace Umbraco.Tests.Components private static readonly List Composed = new List(); private static readonly List Initialized = new List(); - private static IContainer MockContainer(Action> setup = null) + private static IFactory GetMockFactory(Action> setup = null) { // fixme use IUmbracoDatabaseFactory vs UmbracoDatabaseFactory, clean it all up! - var mock = new Mock(); + var mock = new Mock(); var logger = Mock.Of(); var f = new UmbracoDatabaseFactory(logger, new Lazy(() => new MapperCollection(Enumerable.Empty()))); @@ -41,11 +43,23 @@ namespace Umbraco.Tests.Components return mock.Object; } + private static IRegister GetMockRegister() + { + return Mock.Of(); + } + + private static TypeLoader GetMockTypeLoader() + { + return new TypeLoader(); + } + + // fixme should we have Composition.Logger, which would be a profiling logger too? + [Test] public void Boot1A() { - var container = MockContainer(); - var composition = new Composition(container, RuntimeLevel.Unknown); + var register = GetMockRegister(); + var composition = new Composition(register, GetMockTypeLoader(), Mock.Of(), RuntimeLevel.Unknown); var types = TypeArray(); var components = new Core.Components.Components(composition, types, Mock.Of()); @@ -60,8 +74,8 @@ namespace Umbraco.Tests.Components [Test] public void Boot1B() { - var container = MockContainer(); - var composition = new Composition(container, RuntimeLevel.Run); + var register = GetMockRegister(); + var composition = new Composition(register, GetMockTypeLoader(), Mock.Of(), RuntimeLevel.Run); var types = TypeArray(); var components = new Core.Components.Components(composition, types, Mock.Of()); @@ -76,8 +90,8 @@ namespace Umbraco.Tests.Components [Test] public void Boot2() { - var container = MockContainer(); - var composition = new Composition(container, RuntimeLevel.Unknown); + var register = GetMockRegister(); + var composition = new Composition(register, GetMockTypeLoader(), Mock.Of(), RuntimeLevel.Unknown); var types = TypeArray(); var components = new Core.Components.Components(composition, types, Mock.Of()); @@ -91,8 +105,8 @@ namespace Umbraco.Tests.Components [Test] public void Boot3() { - var container = MockContainer(); - var composition = new Composition(container, RuntimeLevel.Unknown); + var register = GetMockRegister(); + var composition = new Composition(register, GetMockTypeLoader(), Mock.Of(), RuntimeLevel.Unknown); var types = TypeArray(); var components = new Core.Components.Components(composition, types, Mock.Of()); @@ -108,8 +122,8 @@ namespace Umbraco.Tests.Components [Test] public void BrokenRequire() { - var container = MockContainer(); - var composition = new Composition(container, RuntimeLevel.Unknown); + var register = GetMockRegister(); + var composition = new Composition(register, GetMockTypeLoader(), Mock.Of(), RuntimeLevel.Unknown); var types = TypeArray(); var components = new Core.Components.Components(composition, types, Mock.Of()); @@ -131,8 +145,8 @@ namespace Umbraco.Tests.Components [Test] public void BrokenRequired() { - var container = MockContainer(); - var composition = new Composition(container, RuntimeLevel.Unknown); + var register = GetMockRegister(); + var composition = new Composition(register, GetMockTypeLoader(), Mock.Of(), RuntimeLevel.Unknown); var types = TypeArray(); var components = new Core.Components.Components(composition, types, Mock.Of()); @@ -148,18 +162,19 @@ namespace Umbraco.Tests.Components [Test] public void Initialize() { - var container = MockContainer(m => + var register = GetMockRegister(); + var factory = GetMockFactory(m => { m.Setup(x => x.TryGetInstance(It.Is(t => t == typeof (ISomeResource)))).Returns(() => new SomeResource()); }); - var composition = new Composition(container, RuntimeLevel.Unknown); + var composition = new Composition(register, GetMockTypeLoader(), Mock.Of(), RuntimeLevel.Unknown); var types = new[] { typeof(Component1), typeof(Component5) }; var components = new Core.Components.Components(composition, types, Mock.Of()); Composed.Clear(); Initialized.Clear(); components.Compose(); - components.Initialize(); + components.Initialize(factory); Assert.AreEqual(2, Composed.Count); Assert.AreEqual(typeof(Component1), Composed[0]); Assert.AreEqual(typeof(Component5), Composed[1]); @@ -170,8 +185,8 @@ namespace Umbraco.Tests.Components [Test] public void Requires1() { - var container = MockContainer(); - var composition = new Composition(container, RuntimeLevel.Unknown); + var register = GetMockRegister(); + var composition = new Composition(register, GetMockTypeLoader(), Mock.Of(), RuntimeLevel.Unknown); var types = new[] { typeof(Component6), typeof(Component7), typeof(Component8) }; var components = new Core.Components.Components(composition, types, Mock.Of()); @@ -185,8 +200,8 @@ namespace Umbraco.Tests.Components [Test] public void Requires2A() { - var container = MockContainer(); - var composition = new Composition(container, RuntimeLevel.Unknown); + var register = GetMockRegister(); + var composition = new Composition(register, GetMockTypeLoader(), Mock.Of(), RuntimeLevel.Unknown); var types = new[] { typeof(Component9), typeof(Component2), typeof(Component4) }; var components = new Core.Components.Components(composition, types, Mock.Of()); @@ -201,14 +216,15 @@ namespace Umbraco.Tests.Components [Test] public void Requires2B() { - var container = MockContainer(); - var composition = new Composition(container, RuntimeLevel.Run); + var register = GetMockRegister(); + var factory = GetMockFactory(); + var composition = new Composition(register, GetMockTypeLoader(), Mock.Of(), RuntimeLevel.Run); var types = new[] { typeof(Component9), typeof(Component2), typeof(Component4) }; var components = new Core.Components.Components(composition, types, Mock.Of()); Composed.Clear(); components.Compose(); - components.Initialize(); + components.Initialize(factory); Assert.AreEqual(3, Composed.Count); Assert.AreEqual(typeof(Component4), Composed[0]); Assert.AreEqual(typeof(Component2), Composed[1]); @@ -218,8 +234,8 @@ namespace Umbraco.Tests.Components [Test] public void WeakDependencies() { - var container = MockContainer(); - var composition = new Composition(container, RuntimeLevel.Unknown); + var register = GetMockRegister(); + var composition = new Composition(register, GetMockTypeLoader(), Mock.Of(), RuntimeLevel.Unknown); var types = new[] { typeof(Component10) }; var components = new Core.Components.Components(composition, types, Mock.Of()); @@ -249,8 +265,8 @@ namespace Umbraco.Tests.Components [Test] public void DisableMissing() { - var container = MockContainer(); - var composition = new Composition(container, RuntimeLevel.Unknown); + var register = GetMockRegister(); + var composition = new Composition(register, GetMockTypeLoader(), Mock.Of(), RuntimeLevel.Unknown); var types = new[] { typeof(Component6), typeof(Component8) }; // 8 disables 7 which is not in the list var components = new Core.Components.Components(composition, types, Mock.Of()); diff --git a/src/Umbraco.Tests/Composing/CollectionBuildersTests.cs b/src/Umbraco.Tests/Composing/CollectionBuildersTests.cs index 23914ef2bf..6047b5bb9a 100644 --- a/src/Umbraco.Tests/Composing/CollectionBuildersTests.cs +++ b/src/Umbraco.Tests/Composing/CollectionBuildersTests.cs @@ -1,10 +1,14 @@ using System; using System.Collections.Generic; using System.Linq; +using Moq; using NUnit.Framework; using Umbraco.Core.Composing; using Umbraco.Core; +using Umbraco.Core.Cache; using Umbraco.Core.Components; +using Umbraco.Core.Configuration; +using Umbraco.Core.Logging; namespace Umbraco.Tests.Composing { @@ -12,6 +16,7 @@ namespace Umbraco.Tests.Composing public class CollectionBuildersTests { private IContainer _container; + private IFactory _factory; private Composition _composition; [SetUp] @@ -19,8 +24,10 @@ namespace Umbraco.Tests.Composing { Current.Reset(); - _container = Current.Container = ContainerFactory.Create(); - _composition = new Composition(_container, RuntimeLevel.Run); + _container = ContainerFactory.Create(); + _factory = _container; + Current.Factory = _container; + _composition = new Composition(_container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); } [TearDown] @@ -44,7 +51,7 @@ namespace Umbraco.Tests.Composing Assert.IsFalse(builder.Has()); //Assert.IsFalse(col.ContainsType()); // does not compile - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); AssertCollection(col, typeof(Resolved1), typeof(Resolved2)); } @@ -59,7 +66,7 @@ namespace Umbraco.Tests.Composing Assert.IsFalse(builder.Has()); Assert.IsFalse(builder.Has()); - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); AssertCollection(col); } @@ -70,7 +77,7 @@ namespace Umbraco.Tests.Composing .Append() .Append(); - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); Assert.Throws(() => builder.Clear()); } @@ -86,7 +93,7 @@ namespace Umbraco.Tests.Composing Assert.IsTrue(builder.Has()); Assert.IsFalse(builder.Has()); - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); AssertCollection(col, typeof(Resolved1), typeof(Resolved2)); } @@ -95,7 +102,7 @@ namespace Umbraco.Tests.Composing { var builder = _composition.GetCollectionBuilder(); - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); Assert.Throws(() => builder.Append() @@ -109,7 +116,7 @@ namespace Umbraco.Tests.Composing builder.Append(); builder.Append(); - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); AssertCollection(col, typeof(Resolved1)); } @@ -135,7 +142,7 @@ namespace Umbraco.Tests.Composing Assert.IsFalse(builder.Has()); Assert.IsFalse(builder.Has()); - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); AssertCollection(col, typeof(Resolved1)); } @@ -147,7 +154,7 @@ namespace Umbraco.Tests.Composing .Append() .Remove(); - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); AssertCollection(col, typeof(Resolved1), typeof(Resolved2)); } @@ -158,7 +165,7 @@ namespace Umbraco.Tests.Composing .Append() .Append(); - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); Assert.Throws(() => builder.Remove() // throws ); @@ -176,7 +183,7 @@ namespace Umbraco.Tests.Composing Assert.IsTrue(builder.Has()); Assert.IsTrue(builder.Has()); - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); AssertCollection(col, typeof(Resolved3), typeof(Resolved1), typeof(Resolved2)); } @@ -187,7 +194,7 @@ namespace Umbraco.Tests.Composing .Append() .Append(); - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); Assert.Throws(() => builder.Insert() // throws ); @@ -201,7 +208,7 @@ namespace Umbraco.Tests.Composing .Append() .Insert(); - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); AssertCollection(col, typeof(Resolved2), typeof(Resolved1)); } @@ -211,7 +218,7 @@ namespace Umbraco.Tests.Composing var builder = _composition.GetCollectionBuilder(); builder.Insert(); - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); AssertCollection(col, typeof(Resolved2)); } @@ -243,7 +250,7 @@ namespace Umbraco.Tests.Composing Assert.IsTrue(builder.Has()); Assert.IsTrue(builder.Has()); - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); AssertCollection(col, typeof(Resolved1), typeof(Resolved3), typeof(Resolved2)); } @@ -254,7 +261,7 @@ namespace Umbraco.Tests.Composing .Append() .Append(); - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); Assert.Throws(() => builder.InsertBefore() ); @@ -268,7 +275,7 @@ namespace Umbraco.Tests.Composing .Append() .InsertBefore(); - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); AssertCollection(col, typeof(Resolved2), typeof(Resolved1)); } @@ -331,7 +338,7 @@ namespace Umbraco.Tests.Composing .Insert() .InsertBefore(); - var col1 = builder.CreateCollection(); + var col1 = builder.CreateCollection(_factory); AssertCollection(col1, typeof(Resolved1), typeof(Resolved2), typeof(Resolved3)); } @@ -376,7 +383,7 @@ namespace Umbraco.Tests.Composing .Add() .Add(); - var col = builder.CreateCollection(); + var col = builder.CreateCollection(_factory); AssertCollection(col, typeof(Resolved2), typeof(Resolved1)); } diff --git a/src/Umbraco.Tests/Composing/ContainerImplementationTests.cs b/src/Umbraco.Tests/Composing/ContainerImplementationTests.cs index 5b72bc17b4..7b0ac4acf9 100644 --- a/src/Umbraco.Tests/Composing/ContainerImplementationTests.cs +++ b/src/Umbraco.Tests/Composing/ContainerImplementationTests.cs @@ -9,7 +9,7 @@ namespace Umbraco.Tests.Composing // complies with Umbraco's requirements. [TestFixture] - public class ContainerImplementationTests + public class ContainerImplementationTests // FIXME merge into ContainerTests or ContainerConformingTests { private IContainer CreateContainer() => ContainerFactory.Create(); diff --git a/src/Umbraco.Tests/Composing/LazyCollectionBuilderTests.cs b/src/Umbraco.Tests/Composing/LazyCollectionBuilderTests.cs index 3d0a9602a2..c39b7d6943 100644 --- a/src/Umbraco.Tests/Composing/LazyCollectionBuilderTests.cs +++ b/src/Umbraco.Tests/Composing/LazyCollectionBuilderTests.cs @@ -1,10 +1,14 @@ using System; using System.Collections.Generic; using System.Linq; +using Moq; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Cache; using Umbraco.Core.Components; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; +using Umbraco.Core.Logging; namespace Umbraco.Tests.Composing { @@ -24,7 +28,11 @@ namespace Umbraco.Tests.Composing } private IContainer CreateContainer() - => Current.Container = ContainerFactory.Create(); + { + var container = ContainerFactory.Create(); + Current.Factory = container; + return container; + } // note // lazy collection builder does not throw on duplicate, just uses distinct types @@ -34,7 +42,7 @@ namespace Umbraco.Tests.Composing public void LazyCollectionBuilderHandlesTypes() { var container = CreateContainer(); - var composition = new Composition(container, RuntimeLevel.Run); + var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder() .Add() @@ -58,7 +66,7 @@ namespace Umbraco.Tests.Composing public void LazyCollectionBuilderHandlesProducers() { var container = CreateContainer(); - var composition = new Composition(container, RuntimeLevel.Run); + var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder() .Add(() => new[] { typeof(TransientObject3), typeof(TransientObject2) }) @@ -81,7 +89,7 @@ namespace Umbraco.Tests.Composing public void LazyCollectionBuilderHandlesTypesAndProducers() { var container = CreateContainer(); - var composition = new Composition(container, RuntimeLevel.Run); + var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder() .Add() @@ -105,7 +113,7 @@ namespace Umbraco.Tests.Composing public void LazyCollectionBuilderThrowsOnIllegalTypes() { var container = CreateContainer(); - var composition = new Composition(container, RuntimeLevel.Run); + var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder() .Add() @@ -127,7 +135,7 @@ namespace Umbraco.Tests.Composing public void LazyCollectionBuilderCanExcludeTypes() { var container = CreateContainer(); - var composition = new Composition(container, RuntimeLevel.Run); + var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder() .Add() diff --git a/src/Umbraco.Tests/Composing/PackageActionCollectionTests.cs b/src/Umbraco.Tests/Composing/PackageActionCollectionTests.cs index 8893b61fde..c130165d69 100644 --- a/src/Umbraco.Tests/Composing/PackageActionCollectionTests.cs +++ b/src/Umbraco.Tests/Composing/PackageActionCollectionTests.cs @@ -1,10 +1,12 @@ using System; using System.Linq; using System.Xml; +using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Components; using Umbraco.Core.Composing; +using Umbraco.Core.Logging; using Umbraco.Core._Legacy.PackageActions; namespace Umbraco.Tests.Composing @@ -15,8 +17,9 @@ namespace Umbraco.Tests.Composing [Test] public void PackageActionCollectionBuilderWorks() { - var container = Current.Container = ContainerFactory.Create(); - var composition = new Composition(container, RuntimeLevel.Run); + var container = ContainerFactory.Create(); + Current.Factory = container; + var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder() .Add(() => TypeLoader.GetPackageActions()); diff --git a/src/Umbraco.Tests/CoreThings/UdiTests.cs b/src/Umbraco.Tests/CoreThings/UdiTests.cs index 77f3b10a2f..3ee7f33b6e 100644 --- a/src/Umbraco.Tests/CoreThings/UdiTests.cs +++ b/src/Umbraco.Tests/CoreThings/UdiTests.cs @@ -22,11 +22,11 @@ namespace Umbraco.Tests.CoreThings public void SetUp() { // fixme - bad in a unit test - but Udi has a static ctor that wants it?! - var container = new Mock(); + var container = new Mock(); var globalSettings = SettingsForTests.GenerateMockGlobalSettings(); container.Setup(x => x.GetInstance(typeof(TypeLoader))).Returns( new TypeLoader(NullCacheProvider.Instance, globalSettings, new ProfilingLogger(Mock.Of(), Mock.Of()))); - Current.Container = container.Object; + Current.Factory = container.Object; Udi.ResetUdiTypes(); } diff --git a/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs b/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs index 3d33604870..7571388d1b 100644 --- a/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs +++ b/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs @@ -406,7 +406,7 @@ namespace Umbraco.Tests.FrontEnd private void SetUpDependencyContainer() { // fixme - bad in a unit test - but Udi has a static ctor that wants it?! - var container = new Mock(); + var container = new Mock(); var globalSettings = SettingsForTests.GenerateMockGlobalSettings(); container @@ -418,7 +418,7 @@ namespace Umbraco.Tests.FrontEnd ) ); - Current.Container = container.Object; + Current.Factory = container.Object; } } } diff --git a/src/Umbraco.Tests/IO/FileSystemsTests.cs b/src/Umbraco.Tests/IO/FileSystemsTests.cs index c72f7949f5..cd2d60395f 100644 --- a/src/Umbraco.Tests/IO/FileSystemsTests.cs +++ b/src/Umbraco.Tests/IO/FileSystemsTests.cs @@ -4,10 +4,12 @@ using System.Text; using Moq; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Cache; using Umbraco.Core.Components; using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Composing; using Umbraco.Core.Composing.Composers; +using Umbraco.Core.Configuration; using Umbraco.Core.IO; using Umbraco.Core.IO.MediaPathSchemes; using Umbraco.Core.Logging; @@ -28,8 +30,9 @@ namespace Umbraco.Tests.IO var config = SettingsForTests.GetDefaultUmbracoSettings(); SettingsForTests.ConfigureSettings(config); - _container = Current.Container = ContainerFactory.Create(); - var composition = new Composition(_container, RuntimeLevel.Run); + _container = ContainerFactory.Create(); + Current.Factory = _container; + var composition = new Composition(_container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); _container.Register(_ => Mock.Of()); _container.Register(_ => Mock.Of()); diff --git a/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs b/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs index 50ce85f356..36f4c56173 100644 --- a/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs +++ b/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs @@ -396,7 +396,7 @@ namespace Umbraco.Tests.IO var phy = new PhysicalFileSystem(path, "ignore"); - var container = Mock.Of(); + var container = Mock.Of(); var fileSystems = new FileSystems(container, logger) { IsScoped = () => scopedFileSystems }; var fs = fileSystems.GetFileSystem(phy); var sw = (ShadowWrapper) fs.InnerFileSystem; @@ -489,7 +489,7 @@ namespace Umbraco.Tests.IO var phy = new PhysicalFileSystem(path, "ignore"); - var container = Mock.Of(); + var container = Mock.Of(); var fileSystems = new FileSystems(container, logger) { IsScoped = () => scopedFileSystems }; var fs = fileSystems.GetFileSystem( phy); var sw = (ShadowWrapper) fs.InnerFileSystem; @@ -542,7 +542,7 @@ namespace Umbraco.Tests.IO var phy = new PhysicalFileSystem(path, "ignore"); - var container = Mock.Of(); + var container = Mock.Of(); var fileSystems = new FileSystems(container, logger) { IsScoped = () => scopedFileSystems }; var fs = fileSystems.GetFileSystem( phy); var sw = (ShadowWrapper)fs.InnerFileSystem; diff --git a/src/Umbraco.Tests/Manifest/ManifestParserTests.cs b/src/Umbraco.Tests/Manifest/ManifestParserTests.cs index 98ebeb9315..948171b0cb 100644 --- a/src/Umbraco.Tests/Manifest/ManifestParserTests.cs +++ b/src/Umbraco.Tests/Manifest/ManifestParserTests.cs @@ -26,7 +26,7 @@ namespace Umbraco.Tests.Manifest { Current.Reset(); var container = Mock.Of(); - Current.Container = container; + Current.Factory = container; var serviceContext = new ServiceContext( localizedTextService: Mock.Of()); diff --git a/src/Umbraco.Tests/Models/VariationTests.cs b/src/Umbraco.Tests/Models/VariationTests.cs index 6eb7e35aa8..c7bc269e61 100644 --- a/src/Umbraco.Tests/Models/VariationTests.cs +++ b/src/Umbraco.Tests/Models/VariationTests.cs @@ -27,7 +27,7 @@ namespace Umbraco.Tests.Models Current.Reset(); var container = Mock.Of(); - Current.Container = container; + Current.Factory = container; var dataEditors = new DataEditorCollection(new IDataEditor[] { diff --git a/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs b/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs index de27c30b1d..24aa1aaa55 100644 --- a/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs +++ b/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs @@ -5,8 +5,10 @@ using Newtonsoft.Json; using NUnit.Framework; using Newtonsoft.Json.Linq; using Umbraco.Core; +using Umbraco.Core.Cache; using Umbraco.Core.Components; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.IO; using Umbraco.Core.Logging; @@ -67,8 +69,9 @@ namespace Umbraco.Tests.PropertyEditors { try { - var container = Current.Container = ContainerFactory.Create(); - var composition = new Composition(container, RuntimeLevel.Run); + var container = ContainerFactory.Create(); + Current.Factory = container; + var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder(); diff --git a/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueEditorTests.cs b/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueEditorTests.cs index 00ca646360..17ca52ca61 100644 --- a/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueEditorTests.cs +++ b/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueEditorTests.cs @@ -21,7 +21,8 @@ namespace Umbraco.Tests.PropertyEditors //normalize culture Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; - var container = Current.Container = ContainerFactory.Create(); + var container = ContainerFactory.Create(); + Current.Factory = container; container.Register(_ => new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(SettingsForTests.GetDefaultUmbracoSettings()))); diff --git a/src/Umbraco.Tests/Published/ConvertersTests.cs b/src/Umbraco.Tests/Published/ConvertersTests.cs index 0e65f5723f..2a0aea1e8e 100644 --- a/src/Umbraco.Tests/Published/ConvertersTests.cs +++ b/src/Umbraco.Tests/Published/ConvertersTests.cs @@ -4,8 +4,10 @@ using System.Linq; using Moq; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Cache; using Umbraco.Core.Components; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; @@ -172,8 +174,9 @@ namespace Umbraco.Tests.Published public void SimpleConverter3Test() { Current.Reset(); - var container = Current.Container = ContainerFactory.Create(); - var composition = new Composition(container, RuntimeLevel.Run); + var container = ContainerFactory.Create(); + Current.Factory = container; + var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder() .Append() @@ -184,7 +187,7 @@ namespace Umbraco.Tests.Published typeof (PublishedSnapshotTestObjects.TestElementModel1), typeof (PublishedSnapshotTestObjects.TestElementModel2), typeof (PublishedSnapshotTestObjects.TestContentModel1), typeof (PublishedSnapshotTestObjects.TestContentModel2), }); - Current.Container.Register(f => factory); + container.Register(f => factory); var cacheMock = new Mock(); var cacheContent = new Dictionary(); @@ -193,9 +196,9 @@ namespace Umbraco.Tests.Published publishedSnapshotMock.Setup(x => x.Content).Returns(cacheMock.Object); var publishedSnapshotAccessorMock = new Mock(); publishedSnapshotAccessorMock.Setup(x => x.PublishedSnapshot).Returns(publishedSnapshotMock.Object); - Current.Container.Register(f => publishedSnapshotAccessorMock.Object); + container.Register(f => publishedSnapshotAccessorMock.Object); - var converters = Current.Container.GetInstance(); + var converters = Current.Factory.GetInstance(); var dataTypeService = new TestObjects.TestDataTypeService( new DataType(new VoidEditor(Mock.Of())) { Id = 1 }, diff --git a/src/Umbraco.Tests/PublishedContent/PublishedContentLanguageVariantTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedContentLanguageVariantTests.cs index 2288ff80c2..4b431d18e6 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedContentLanguageVariantTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedContentLanguageVariantTests.cs @@ -16,7 +16,7 @@ using Umbraco.Web; namespace Umbraco.Tests.PublishedContent { [TestFixture] - [UmbracoTest(PluginManager = UmbracoTestOptions.PluginManager.PerFixture)] + [UmbracoTest(TypeLoader = UmbracoTestOptions.TypeLoader.PerFixture)] public class PublishedContentLanguageVariantTests : PublishedContentSnapshotTestBase { protected override void Compose() diff --git a/src/Umbraco.Tests/PublishedContent/PublishedContentMoreTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedContentMoreTests.cs index 9751a7ae6a..c5b8e21870 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedContentMoreTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedContentMoreTests.cs @@ -9,7 +9,7 @@ using Umbraco.Tests.Testing; namespace Umbraco.Tests.PublishedContent { [TestFixture] - [UmbracoTest(PluginManager = UmbracoTestOptions.PluginManager.PerFixture)] + [UmbracoTest(TypeLoader = UmbracoTestOptions.TypeLoader.PerFixture)] public class PublishedContentMoreTests : PublishedContentSnapshotTestBase { internal override void PopulateCache(PublishedContentTypeFactory factory, SolidPublishedContentCache cache) diff --git a/src/Umbraco.Tests/PublishedContent/PublishedContentSnapshotTestBase.cs b/src/Umbraco.Tests/PublishedContent/PublishedContentSnapshotTestBase.cs index dc88f8bea1..c4f4d5304f 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedContentSnapshotTestBase.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedContentSnapshotTestBase.cs @@ -11,6 +11,8 @@ using Umbraco.Web.Security; using Umbraco.Core.Composing; using Current = Umbraco.Core.Composing.Current; using LightInject; +using Umbraco.Core.Cache; +using Umbraco.Core.Configuration; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.PropertyEditors; @@ -40,9 +42,9 @@ namespace Umbraco.Tests.PublishedContent Container.RegisterSingleton(f => new PublishedModelFactory(f.GetInstance().GetTypes())); } - protected override TypeLoader CreatePluginManager(IContainer f) + protected override TypeLoader CreateTypeLoader(IRuntimeCacheProvider runtimeCache, IGlobalSettings globalSettings, IProfilingLogger logger) { - var pluginManager = base.CreatePluginManager(f); + var pluginManager = base.CreateTypeLoader(runtimeCache, globalSettings, logger); // this is so the model factory looks into the test assembly pluginManager.AssembliesToScan = pluginManager.AssembliesToScan diff --git a/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs index 6eef72bcd9..9b3ceb21d1 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs @@ -10,6 +10,8 @@ using Umbraco.Web; using Umbraco.Web.PublishedCache; using Umbraco.Core.Composing; using Moq; +using Umbraco.Core.Cache; +using Umbraco.Core.Configuration; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Services; @@ -24,7 +26,7 @@ namespace Umbraco.Tests.PublishedContent /// Tests the methods on IPublishedContent using the DefaultPublishedContentStore /// [TestFixture] - [UmbracoTest(PluginManager = UmbracoTestOptions.PluginManager.PerFixture)] + [UmbracoTest(TypeLoader = UmbracoTestOptions.TypeLoader.PerFixture)] public class PublishedContentTests : PublishedContentTestBase { protected override void Compose() @@ -71,9 +73,9 @@ namespace Umbraco.Tests.PublishedContent ContentTypesCache.GetPublishedContentTypeByAlias = alias => type; } - protected override TypeLoader CreatePluginManager(IContainer f) + protected override TypeLoader CreateTypeLoader(IRuntimeCacheProvider runtimeCache, IGlobalSettings globalSettings, IProfilingLogger logger) { - var pluginManager = base.CreatePluginManager(f); + var pluginManager = base.CreateTypeLoader(runtimeCache, globalSettings, logger); // this is so the model factory looks into the test assembly pluginManager.AssembliesToScan = pluginManager.AssembliesToScan diff --git a/src/Umbraco.Tests/Runtimes/CoreRuntimeTests.cs b/src/Umbraco.Tests/Runtimes/CoreRuntimeTests.cs index f92b4264ec..ceac7127f2 100644 --- a/src/Umbraco.Tests/Runtimes/CoreRuntimeTests.cs +++ b/src/Umbraco.Tests/Runtimes/CoreRuntimeTests.cs @@ -131,7 +131,7 @@ namespace Umbraco.Tests.Runtimes It.IsAny())) .Returns(Mock.Of()); - composition.Container.RegisterInstance(scopeProvider); + composition.RegisterInstance(scopeProvider); } private MainDom _mainDom; @@ -183,8 +183,8 @@ namespace Umbraco.Tests.Runtimes { base.Compose(composition); - composition.Container.Register(factory => SettingsForTests.GetDefaultUmbracoSettings()); - composition.Container.RegisterSingleton(); + composition.Register(factory => SettingsForTests.GetDefaultUmbracoSettings()); + composition.RegisterSingleton(); Composed = true; } diff --git a/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs b/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs index 486cf55769..fa1d0482cf 100644 --- a/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs @@ -3,6 +3,7 @@ using System.Linq; using Moq; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Cache; using Umbraco.Core.Components; using Umbraco.Core.Events; using Umbraco.Core.Models; @@ -12,6 +13,7 @@ using Umbraco.Core.Scoping; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; using Umbraco.Core.Persistence.Mappers; using Umbraco.Core.Services; @@ -30,12 +32,13 @@ namespace Umbraco.Tests.Scoping DoThing2 = null; DoThing3 = null; - var container = Current.Container = ContainerFactory.Create(); - var composition = new Composition(container, RuntimeLevel.Run); + var container = ContainerFactory.Create(); + Current.Factory = container; + var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); _testObjects = new TestObjects(container); - Current.Container.RegisterSingleton(factory => new FileSystems(container, factory.TryGetInstance())); + container.RegisterSingleton(factory => new FileSystems(container, factory.TryGetInstance())); composition.GetCollectionBuilder(); SettingsForTests.Reset(); // ensure we have configuration diff --git a/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs b/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs index b25b7eed42..ada58942c3 100644 --- a/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs @@ -47,7 +47,7 @@ namespace Umbraco.Tests.Scoping Container.RegisterSingleton(); Container.RegisterSingleton(f => Mock.Of()); Composition.GetCollectionBuilder() - .Add(f => f.TryGetInstance().GetCacheRefreshers()); + .Add(() => Composition.TypeLoader.GetCacheRefreshers()); } public override void TearDown() diff --git a/src/Umbraco.Tests/Scoping/ScopedRepositoryTests.cs b/src/Umbraco.Tests/Scoping/ScopedRepositoryTests.cs index 3d281575fb..a4040ca019 100644 --- a/src/Umbraco.Tests/Scoping/ScopedRepositoryTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopedRepositoryTests.cs @@ -33,19 +33,17 @@ namespace Umbraco.Tests.Scoping Container.RegisterSingleton(); Container.RegisterSingleton(f => Mock.Of()); Composition.GetCollectionBuilder() - .Add(f => f.TryGetInstance().GetCacheRefreshers()); + .Add(() => Composition.TypeLoader.GetCacheRefreshers()); } - protected override void ComposeCacheHelper() + protected override CacheHelper GetCacheHelper() { // this is what's created core web runtime - var cacheHelper = new CacheHelper( + return new CacheHelper( new DeepCloneRuntimeCacheProvider(new ObjectCacheRuntimeCacheProvider()), new StaticCacheProvider(), NullCacheProvider.Instance, new IsolatedRuntimeCache(type => new DeepCloneRuntimeCacheProvider(new ObjectCacheRuntimeCacheProvider()))); - Container.RegisterSingleton(f => cacheHelper); - Container.RegisterSingleton(f => f.GetInstance().RuntimeCache); } [TearDown] diff --git a/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs b/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs index 2cfadb9408..9c98dcd538 100644 --- a/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs @@ -35,7 +35,7 @@ namespace Umbraco.Tests.Scoping Container.RegisterSingleton(); Container.RegisterSingleton(f => Mock.Of()); Composition.GetCollectionBuilder() - .Add(f => f.TryGetInstance().GetCacheRefreshers()); + .Add(() => Composition.TypeLoader.GetCacheRefreshers()); } [TearDown] @@ -63,7 +63,7 @@ namespace Umbraco.Tests.Scoping // xmlStore.Xml - the actual main xml document // publishedContentCache.GetXml() - the captured xml - private static XmlStore XmlStore => (Current.Container.GetInstance() as PublishedSnapshotService).XmlStore; + private static XmlStore XmlStore => (Current.Factory.GetInstance() as PublishedSnapshotService).XmlStore; private static XmlDocument XmlMaster => XmlStore.Xml; private static XmlDocument XmlInContext => ((PublishedContentCache) Umbraco.Web.Composing.Current.UmbracoContext.ContentCache).GetXml(false); diff --git a/src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs b/src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs index b934686c87..5b3d2f2583 100644 --- a/src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs +++ b/src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs @@ -38,7 +38,7 @@ namespace Umbraco.Tests.Services Container.RegisterSingleton(); Container.RegisterSingleton(f => Mock.Of()); Composition.GetCollectionBuilder() - .Add(f => f.TryGetInstance().GetCacheRefreshers()); + .Add(() => Composition.TypeLoader.GetCacheRefreshers()); } protected override IPublishedSnapshotService CreatePublishedSnapshotService() diff --git a/src/Umbraco.Tests/TestHelpers/BaseUsingSqlCeSyntax.cs b/src/Umbraco.Tests/TestHelpers/BaseUsingSqlCeSyntax.cs index c8a2219c3f..09ce5fb916 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseUsingSqlCeSyntax.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseUsingSqlCeSyntax.cs @@ -8,6 +8,7 @@ using Umbraco.Core.Logging; using Umbraco.Core.Persistence.Mappers; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; using Umbraco.Core.Persistence; namespace Umbraco.Tests.TestHelpers @@ -33,8 +34,9 @@ namespace Umbraco.Tests.TestHelpers var sqlSyntax = new SqlCeSyntaxProvider(); - var container = Current.Container = ContainerFactory.Create(); - var composition = new Composition(container, RuntimeLevel.Run); + var container = ContainerFactory.Create(); + Current.Factory = container; + var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); container.RegisterSingleton(factory => Mock.Of()); container.RegisterSingleton(factory => Mock.Of()); diff --git a/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs b/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs index cabbf40fe9..b1e9257918 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs @@ -85,12 +85,12 @@ namespace Umbraco.Tests.TestHelpers "; } - internal PublishedRouter CreatePublishedRouter(IContainer container = null, ContentFinderCollection contentFinders = null) + internal PublishedRouter CreatePublishedRouter(IFactory container = null, ContentFinderCollection contentFinders = null) { return CreatePublishedRouter(TestObjects.GetUmbracoSettings().WebRouting, container, contentFinders); } - internal static PublishedRouter CreatePublishedRouter(IWebRoutingSection webRoutingSection, IContainer container = null, ContentFinderCollection contentFinders = null) + internal static PublishedRouter CreatePublishedRouter(IWebRoutingSection webRoutingSection, IFactory container = null, ContentFinderCollection contentFinders = null) { return new PublishedRouter( webRoutingSection, diff --git a/src/Umbraco.Tests/TestHelpers/ControllerTesting/TestControllerActivatorBase.cs b/src/Umbraco.Tests/TestHelpers/ControllerTesting/TestControllerActivatorBase.cs index 7b1e47798a..0fb6e42999 100644 --- a/src/Umbraco.Tests/TestHelpers/ControllerTesting/TestControllerActivatorBase.cs +++ b/src/Umbraco.Tests/TestHelpers/ControllerTesting/TestControllerActivatorBase.cs @@ -134,10 +134,7 @@ namespace Umbraco.Tests.TestHelpers.ControllerTesting var publishedSnapshotService = new Mock(); publishedSnapshotService.Setup(x => x.CreatePublishedSnapshot(It.IsAny())).Returns(publishedSnapshot.Object); - //var umbracoContextAccessor = new TestUmbracoContextAccessor(); - //Umbraco.Web.Composing.Current.UmbracoContextAccessor = umbracoContextAccessor; var umbracoContextAccessor = Umbraco.Web.Composing.Current.UmbracoContextAccessor; - Current.Container.Register(factory => umbracoContextAccessor.UmbracoContext); // but really, should we inject this?! var umbCtx = UmbracoContext.EnsureContext( umbracoContextAccessor, diff --git a/src/Umbraco.Tests/TestHelpers/Stubs/TestControllerFactory.cs b/src/Umbraco.Tests/TestHelpers/Stubs/TestControllerFactory.cs index e9d4bb5e1a..36c5961b9f 100644 --- a/src/Umbraco.Tests/TestHelpers/Stubs/TestControllerFactory.cs +++ b/src/Umbraco.Tests/TestHelpers/Stubs/TestControllerFactory.cs @@ -48,7 +48,7 @@ namespace Umbraco.Tests.TestHelpers.Stubs foreach (var parameter in allParams) { var found = possibleParams.SingleOrDefault(x => x.GetType() == parameter.ParameterType) - ?? Current.Container.GetInstance(parameter.ParameterType); + ?? Current.Factory.GetInstance(parameter.ParameterType); if (found != null) args.Add(found); } if (args.Count == allParams.Length) diff --git a/src/Umbraco.Tests/TestHelpers/TestObjects-Mocks.cs b/src/Umbraco.Tests/TestHelpers/TestObjects-Mocks.cs index 06654a3519..eeddfa6043 100644 --- a/src/Umbraco.Tests/TestHelpers/TestObjects-Mocks.cs +++ b/src/Umbraco.Tests/TestHelpers/TestObjects-Mocks.cs @@ -53,34 +53,37 @@ namespace Umbraco.Tests.TestHelpers /// Gets a mocked service context built with mocked services. /// /// A ServiceContext. - public ServiceContext GetServiceContextMock(IContainer container = null) + public ServiceContext GetServiceContextMock(IFactory container = null) { + // fixme - else tests break - something's wrong + container = null; + return new ServiceContext( - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService(), - MockService()); + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container), + MockService(container)); } - private T MockService(IContainer container = null) + private T MockService(IFactory container = null) where T : class { return container?.TryGetInstance() ?? new Mock().Object; diff --git a/src/Umbraco.Tests/TestHelpers/TestObjects.cs b/src/Umbraco.Tests/TestHelpers/TestObjects.cs index c965a71a70..02e77ae1a5 100644 --- a/src/Umbraco.Tests/TestHelpers/TestObjects.cs +++ b/src/Umbraco.Tests/TestHelpers/TestObjects.cs @@ -205,13 +205,13 @@ namespace Umbraco.Tests.TestHelpers consentService); } - private Lazy GetLazyService(IContainer container, Func ctor) + private Lazy GetLazyService(IFactory container, Func ctor) where T : class { return new Lazy(() => container?.TryGetInstance() ?? ctor(container)); } - private T GetRepo(IContainer container) + private T GetRepo(IFactory container) where T : class, IRepository { return container?.TryGetInstance() ?? Mock.Of(); @@ -224,11 +224,11 @@ namespace Umbraco.Tests.TestHelpers //var mappersBuilder = new MapperCollectionBuilder(Current.Container); // fixme //mappersBuilder.AddCore(); //var mappers = mappersBuilder.CreateCollection(); - var mappers = Current.Container.GetInstance(); + var mappers = Current.Factory.GetInstance(); databaseFactory = new UmbracoDatabaseFactory(Constants.System.UmbracoConnectionName, logger, new Lazy(() => mappers)); } - fileSystems = fileSystems ?? new FileSystems(Current.Container, logger); + fileSystems = fileSystems ?? new FileSystems(Current.Factory, logger); var scopeProvider = new ScopeProvider(databaseFactory, fileSystems, logger); return scopeProvider; } diff --git a/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs b/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs index 02df0b4271..8128666898 100644 --- a/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs +++ b/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs @@ -78,7 +78,7 @@ namespace Umbraco.Tests.TestHelpers Composition.GetCollectionBuilder() .Clear() - .Add(f => f.GetInstance().GetDataEditors()); + .Add(() => Composition.TypeLoader.GetDataEditors()); Container.RegisterSingleton(f => { diff --git a/src/Umbraco.Tests/Testing/UmbracoTestAttribute.cs b/src/Umbraco.Tests/Testing/UmbracoTestAttribute.cs index 723ce43c6c..2bf4ba2716 100644 --- a/src/Umbraco.Tests/Testing/UmbracoTestAttribute.cs +++ b/src/Umbraco.Tests/Testing/UmbracoTestAttribute.cs @@ -48,8 +48,8 @@ namespace Umbraco.Tests.Testing /// Gets or sets a value indicating the required plugin manager support. /// /// Default is to use the global tests plugin manager. - public UmbracoTestOptions.PluginManager PluginManager { get => _pluginManager.ValueOrDefault(UmbracoTestOptions.PluginManager.Default); set => _pluginManager.Set(value); } - private readonly Settable _pluginManager = new Settable(); + public UmbracoTestOptions.TypeLoader TypeLoader { get => _typeLoader.ValueOrDefault(UmbracoTestOptions.TypeLoader.Default); set => _typeLoader.Set(value); } + private readonly Settable _typeLoader = new Settable(); protected override TestOptionAttributeBase Merge(TestOptionAttributeBase other) { @@ -62,7 +62,7 @@ namespace Umbraco.Tests.Testing _publishedRepositoryEvents.Set(attr._publishedRepositoryEvents); _logger.Set(attr._logger); _database.Set(attr._database); - _pluginManager.Set(attr._pluginManager); + _typeLoader.Set(attr._typeLoader); return this; } diff --git a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs index 6459342e7a..d81d71511c 100644 --- a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs +++ b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs @@ -117,24 +117,35 @@ namespace Umbraco.Tests.Testing // but hey, never know, better avoid garbage-in Reset(); - Container = Current.Container = ContainerFactory.Create(); - Composition = new Composition(Container, RuntimeLevel.Run); - - TestObjects = new TestObjects(Container); - // get/merge the attributes marking the method and/or the classes Options = TestOptionAttributeBase.GetTestOptions(); + // fixme see CoreRuntime and align! + var (logger, profiler) = GetLoggers(Options.Logger); + var proflogger = new ProfilingLogger(logger, profiler); + var cacheHelper = GetCacheHelper(); + var globalSettings = SettingsForTests.GetDefaultGlobalSettings(); + var typeLoader = GetTypeLoader(cacheHelper.RuntimeCache, globalSettings, proflogger, Options.TypeLoader); + + Container = ContainerFactory.Create(); + Current.Factory = Container; + + Container.RegisterInstance(typeLoader); + Container.RegisterInstance(logger); + Container.RegisterInstance(profiler); + Container.RegisterInstance(proflogger); + Container.RegisterInstance(cacheHelper); + Container.RegisterInstance(cacheHelper.RuntimeCache); + + Composition = new Composition(Container, typeLoader, proflogger, RuntimeLevel.Run); + TestObjects = new TestObjects(Container); Compose(); Initialize(); } protected virtual void Compose() { - ComposeLogging(Options.Logger); - ComposeCacheHelper(); ComposeAutoMapper(Options.AutoMapper); - ComposePluginManager(Options.PluginManager); ComposeDatabase(Options.Database); ComposeApplication(Options.WithApplication); @@ -143,8 +154,7 @@ namespace Umbraco.Tests.Testing ComposeWtf(); // not sure really - var composition = new Composition(Container, RuntimeLevel.Run); - Compose(composition); + Compose(Composition); } protected virtual void Compose(Composition composition) @@ -160,25 +170,35 @@ namespace Umbraco.Tests.Testing #region Compose - protected virtual void ComposeLogging(UmbracoTestOptions.Logger option) + protected virtual (ILogger, IProfiler) GetLoggers(UmbracoTestOptions.Logger option) { - if (option == UmbracoTestOptions.Logger.Mock) + ILogger logger; + IProfiler profiler; + + switch (option) { - Container.RegisterSingleton(f => Mock.Of()); - Container.RegisterSingleton(f => Mock.Of()); - } - else if (option == UmbracoTestOptions.Logger.Serilog) - { - Container.RegisterSingleton(f => new SerilogLogger(new FileInfo(TestHelper.MapPathForTest("~/unit-test.config")))); - Container.RegisterSingleton(f => new LogProfiler(f.GetInstance())); - } - else if (option == UmbracoTestOptions.Logger.Console) - { - Container.RegisterSingleton(f => new ConsoleLogger()); - Container.RegisterSingleton(f => new LogProfiler(f.GetInstance())); + case UmbracoTestOptions.Logger.Mock: + logger = Mock.Of(); + profiler = Mock.Of(); + break; + case UmbracoTestOptions.Logger.Serilog: + logger = new SerilogLogger(new FileInfo(TestHelper.MapPathForTest("~/unit-test.config"))); + profiler = new LogProfiler(logger); + break; + case UmbracoTestOptions.Logger.Console: + logger = new ConsoleLogger(); + profiler = new LogProfiler(logger); + break; + default: + throw new NotSupportedException($"Logger option {option} is not supported."); } - Container.RegisterSingleton(f => new ProfilingLogger(f.GetInstance(), f.GetInstance())); + return (logger, profiler); + } + + protected virtual CacheHelper GetCacheHelper() + { + return CacheHelper.Disabled; } protected virtual void ComposeWeb() @@ -215,12 +235,6 @@ namespace Umbraco.Tests.Testing Composition.GetCollectionBuilder(); } - protected virtual void ComposeCacheHelper() - { - Container.RegisterSingleton(f => CacheHelper.Disabled); - Container.RegisterSingleton(f => f.GetInstance().RuntimeCache); - } - protected virtual void ComposeAutoMapper(bool configure) { if (configure == false) return; @@ -230,32 +244,30 @@ namespace Umbraco.Tests.Testing .ComposeWebMappingProfiles(); } - protected virtual void ComposePluginManager(UmbracoTestOptions.PluginManager pluginManager) + protected virtual TypeLoader GetTypeLoader(IRuntimeCacheProvider runtimeCache, IGlobalSettings globalSettings, IProfilingLogger logger, UmbracoTestOptions.TypeLoader option) { - Container.RegisterSingleton(f => + switch (option) { - switch (pluginManager) - { - case UmbracoTestOptions.PluginManager.Default: - return _commonTypeLoader ?? (_commonTypeLoader = CreateCommonPluginManager(f)); - case UmbracoTestOptions.PluginManager.PerFixture: - return _featureTypeLoader ?? (_featureTypeLoader = CreatePluginManager(f)); - case UmbracoTestOptions.PluginManager.PerTest: - return CreatePluginManager(f); - default: - throw new ArgumentOutOfRangeException(nameof(pluginManager)); - } - }); + case UmbracoTestOptions.TypeLoader.Default: + return _commonTypeLoader ?? (_commonTypeLoader = CreateCommonTypeLoader(runtimeCache, globalSettings, logger)); + case UmbracoTestOptions.TypeLoader.PerFixture: + return _featureTypeLoader ?? (_featureTypeLoader = CreateTypeLoader(runtimeCache, globalSettings, logger)); + case UmbracoTestOptions.TypeLoader.PerTest: + return CreateTypeLoader(runtimeCache, globalSettings, logger); + default: + throw new ArgumentOutOfRangeException(nameof(option)); + } } - protected virtual TypeLoader CreatePluginManager(IContainer f) + protected virtual TypeLoader CreateTypeLoader(IRuntimeCacheProvider runtimeCache, IGlobalSettings globalSettings, IProfilingLogger logger) { - return CreateCommonPluginManager(f); + return CreateCommonTypeLoader(runtimeCache, globalSettings, logger); } - private static TypeLoader CreateCommonPluginManager(IContainer f) + // common to all tests = cannot be overriden + private static TypeLoader CreateCommonTypeLoader(IRuntimeCacheProvider runtimeCache, IGlobalSettings globalSettings, IProfilingLogger logger) { - return new TypeLoader(f.GetInstance().RuntimeCache, f.GetInstance(), f.GetInstance(), false) + return new TypeLoader(runtimeCache, globalSettings, logger, false) { AssembliesToScan = new[] { diff --git a/src/Umbraco.Tests/Testing/UmbracoTestOptions.cs b/src/Umbraco.Tests/Testing/UmbracoTestOptions.cs index 5248026788..da3ffccc55 100644 --- a/src/Umbraco.Tests/Testing/UmbracoTestOptions.cs +++ b/src/Umbraco.Tests/Testing/UmbracoTestOptions.cs @@ -26,13 +26,13 @@ NewSchemaPerTest } - public enum PluginManager + public enum TypeLoader { - // the default, global plugin manager for tests + // the default, global type loader for tests Default, - // create one plugin manager for the feature + // create one type loader for the feature PerFixture, - // create one plugin manager for each test + // create one type loader for each test PerTest } } diff --git a/src/Umbraco.Tests/Web/Mvc/RenderIndexActionSelectorAttributeTests.cs b/src/Umbraco.Tests/Web/Mvc/RenderIndexActionSelectorAttributeTests.cs index bf29f7e35e..c6609f38c9 100644 --- a/src/Umbraco.Tests/Web/Mvc/RenderIndexActionSelectorAttributeTests.cs +++ b/src/Umbraco.Tests/Web/Mvc/RenderIndexActionSelectorAttributeTests.cs @@ -34,7 +34,7 @@ namespace Umbraco.Tests.Web.Mvc public void SetUp() { Current.UmbracoContextAccessor = new TestUmbracoContextAccessor(); - Core.Composing.Current.Container = Mock.Of(); + Core.Composing.Current.Factory = Mock.Of(); } [TearDown] diff --git a/src/Umbraco.Tests/Web/TemplateUtilitiesTests.cs b/src/Umbraco.Tests/Web/TemplateUtilitiesTests.cs index fd8ace1904..613ae4f1c2 100644 --- a/src/Umbraco.Tests/Web/TemplateUtilitiesTests.cs +++ b/src/Umbraco.Tests/Web/TemplateUtilitiesTests.cs @@ -37,11 +37,11 @@ namespace Umbraco.Tests.Web var serviceContext = new ServiceContext(entityService: entityService.Object); // fixme - bad in a unit test - but Udi has a static ctor that wants it?! - var container = new Mock(); + var container = new Mock(); container.Setup(x => x.GetInstance(typeof(TypeLoader))).Returns( new TypeLoader(NullCacheProvider.Instance, SettingsForTests.GenerateMockGlobalSettings(), new ProfilingLogger(Mock.Of(), Mock.Of()))); container.Setup(x => x.GetInstance(typeof (ServiceContext))).Returns(serviceContext); - Current.Container = container.Object; + Current.Factory = container.Object; Umbraco.Web.Composing.Current.UmbracoContextAccessor = new TestUmbracoContextAccessor(); diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 3ae35a0de8..1066ee75ad 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -2382,11 +2382,6 @@ "q": "^1.1.2" } }, - "codemirror": { - "version": "5.3.0", - "resolved": "http://registry.npmjs.org/codemirror/-/codemirror-5.3.0.tgz", - "integrity": "sha1-JDyyaN1hynjdsn6C8uws74j7lGE=" - }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -10296,3088 +10291,6 @@ "sort-keys": "^1.0.0" } }, - "npm": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/npm/-/npm-6.4.1.tgz", - "integrity": "sha512-mXJL1NTVU136PtuopXCUQaNWuHlXCTp4McwlSW8S9/Aj8OEPAlSBgo8og7kJ01MjCDrkmqFQTvN5tTEhBMhXQg==", - "requires": { - "JSONStream": "^1.3.4", - "abbrev": "~1.1.1", - "ansicolors": "~0.3.2", - "ansistyles": "~0.1.3", - "aproba": "~1.2.0", - "archy": "~1.0.0", - "bin-links": "^1.1.2", - "bluebird": "~3.5.1", - "byte-size": "^4.0.3", - "cacache": "^11.2.0", - "call-limit": "~1.1.0", - "chownr": "~1.0.1", - "ci-info": "^1.4.0", - "cli-columns": "^3.1.2", - "cli-table3": "^0.5.0", - "cmd-shim": "~2.0.2", - "columnify": "~1.5.4", - "config-chain": "~1.1.11", - "debuglog": "*", - "detect-indent": "~5.0.0", - "detect-newline": "^2.1.0", - "dezalgo": "~1.0.3", - "editor": "~1.0.0", - "figgy-pudding": "^3.4.1", - "find-npm-prefix": "^1.0.2", - "fs-vacuum": "~1.2.10", - "fs-write-stream-atomic": "~1.0.10", - "gentle-fs": "^2.0.1", - "glob": "~7.1.2", - "graceful-fs": "~4.1.11", - "has-unicode": "~2.0.1", - "hosted-git-info": "^2.7.1", - "iferr": "^1.0.2", - "imurmurhash": "*", - "inflight": "~1.0.6", - "inherits": "~2.0.3", - "ini": "^1.3.5", - "init-package-json": "^1.10.3", - "is-cidr": "^2.0.6", - "json-parse-better-errors": "^1.0.2", - "lazy-property": "~1.0.0", - "libcipm": "^2.0.2", - "libnpmhook": "^4.0.1", - "libnpx": "^10.2.0", - "lock-verify": "^2.0.2", - "lockfile": "^1.0.4", - "lodash._baseindexof": "*", - "lodash._baseuniq": "~4.6.0", - "lodash._bindcallback": "*", - "lodash._cacheindexof": "*", - "lodash._createcache": "*", - "lodash._getnative": "*", - "lodash.clonedeep": "~4.5.0", - "lodash.restparam": "*", - "lodash.union": "~4.6.0", - "lodash.uniq": "~4.5.0", - "lodash.without": "~4.4.0", - "lru-cache": "^4.1.3", - "meant": "~1.0.1", - "mississippi": "^3.0.0", - "mkdirp": "~0.5.1", - "move-concurrently": "^1.0.1", - "node-gyp": "^3.8.0", - "nopt": "~4.0.1", - "normalize-package-data": "~2.4.0", - "npm-audit-report": "^1.3.1", - "npm-cache-filename": "~1.0.2", - "npm-install-checks": "~3.0.0", - "npm-lifecycle": "^2.1.0", - "npm-package-arg": "^6.1.0", - "npm-packlist": "^1.1.11", - "npm-pick-manifest": "^2.1.0", - "npm-profile": "^3.0.2", - "npm-registry-client": "^8.6.0", - "npm-registry-fetch": "^1.1.0", - "npm-user-validate": "~1.0.0", - "npmlog": "~4.1.2", - "once": "~1.4.0", - "opener": "^1.5.0", - "osenv": "^0.1.5", - "pacote": "^8.1.6", - "path-is-inside": "~1.0.2", - "promise-inflight": "~1.0.1", - "qrcode-terminal": "^0.12.0", - "query-string": "^6.1.0", - "qw": "~1.0.1", - "read": "~1.0.7", - "read-cmd-shim": "~1.0.1", - "read-installed": "~4.0.3", - "read-package-json": "^2.0.13", - "read-package-tree": "^5.2.1", - "readable-stream": "^2.3.6", - "readdir-scoped-modules": "*", - "request": "^2.88.0", - "retry": "^0.12.0", - "rimraf": "~2.6.2", - "safe-buffer": "^5.1.2", - "semver": "^5.5.0", - "sha": "~2.0.1", - "slide": "~1.1.6", - "sorted-object": "~2.0.1", - "sorted-union-stream": "~2.1.3", - "ssri": "^6.0.0", - "stringify-package": "^1.0.0", - "tar": "^4.4.6", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "uid-number": "0.0.6", - "umask": "~1.1.0", - "unique-filename": "~1.1.0", - "unpipe": "~1.0.0", - "update-notifier": "^2.5.0", - "uuid": "^3.3.2", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "~3.0.0", - "which": "^1.3.1", - "worker-farm": "^1.6.0", - "write-file-atomic": "^2.3.0" - }, - "dependencies": { - "JSONStream": { - "version": "1.3.4", - "resolved": false, - "integrity": "sha512-Y7vfi3I5oMOYIr+WxV8NZxDSwcbNgzdKYsTNInmycOq9bUYwGg9ryu57Wg5NLmCjqdFPNUmpMBo3kSJN9tCbXg==", - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": false, - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "agent-base": { - "version": "4.2.0", - "resolved": false, - "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "agentkeepalive": { - "version": "3.4.1", - "resolved": false, - "integrity": "sha512-MPIwsZU9PP9kOrZpyu2042kYA8Fdt/AedQYkYXucHgF9QoD9dXVp0ypuGnHXSR0hTstBxdt85Xkh4JolYfK5wg==", - "requires": { - "humanize-ms": "^1.2.1" - } - }, - "ajv": { - "version": "5.5.2", - "resolved": false, - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ansi-align": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": false, - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": false, - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansicolors": { - "version": "0.3.2", - "resolved": false, - "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" - }, - "ansistyles": { - "version": "0.1.3", - "resolved": false, - "integrity": "sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk=" - }, - "aproba": { - "version": "1.2.0", - "resolved": false, - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "archy": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": false, - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "asap": { - "version": "2.0.6", - "resolved": false, - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "asn1": { - "version": "0.2.4", - "resolved": false, - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "asynckit": { - "version": "0.4.0", - "resolved": false, - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": false, - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": false, - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bin-links": { - "version": "1.1.2", - "resolved": false, - "integrity": "sha512-8eEHVgYP03nILphilltWjeIjMbKyJo3wvp9K816pHbhP301ismzw15mxAAEVQ/USUwcP++1uNrbERbp8lOA6Fg==", - "requires": { - "bluebird": "^3.5.0", - "cmd-shim": "^2.0.2", - "gentle-fs": "^2.0.0", - "graceful-fs": "^4.1.11", - "write-file-atomic": "^2.3.0" - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": false, - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "requires": { - "inherits": "~2.0.0" - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": false, - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "boxen": { - "version": "1.3.0", - "resolved": false, - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": false, - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-from": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==" - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": false, - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" - }, - "builtins": { - "version": "1.0.3", - "resolved": false, - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=" - }, - "byline": { - "version": "5.0.0", - "resolved": false, - "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=" - }, - "byte-size": { - "version": "4.0.3", - "resolved": false, - "integrity": "sha512-JGC3EV2bCzJH/ENSh3afyJrH4vwxbHTuO5ljLoI5+2iJOcEpMgP8T782jH9b5qGxf2mSUIp1lfGnfKNrRHpvVg==" - }, - "cacache": { - "version": "11.2.0", - "resolved": false, - "integrity": "sha512-IFWl6lfK6wSeYCHUXh+N1lY72UDrpyrYQJNIVQf48paDuWbv5RbAtJYf/4gUQFObTCHZwdZ5sI8Iw7nqwP6nlQ==", - "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "figgy-pudding": "^3.1.0", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.3", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^6.0.0", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" - } - }, - "call-limit": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha1-b9YbA/PaQqLNDsK2DwK9DnGZH+o=" - }, - "camelcase": { - "version": "4.1.0", - "resolved": false, - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "capture-stack-trace": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" - }, - "caseless": { - "version": "0.12.0", - "resolved": false, - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "2.4.1", - "resolved": false, - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chownr": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" - }, - "ci-info": { - "version": "1.4.0", - "resolved": false, - "integrity": "sha512-Oqmw2pVfCl8sCL+1QgMywPfdxPJPkC51y4usw0iiE2S9qnEOAqXy8bwl1CpMpnoU39g4iKJTz6QZj+28FvOnjQ==" - }, - "cidr-regex": { - "version": "2.0.9", - "resolved": false, - "integrity": "sha512-F7/fBRUU45FnvSPjXdpIrc++WRSBdCiSTlyq4ZNhLKOlHFNWgtzZ0Fd+zrqI/J1j0wmlx/f5ZQDmD2GcbrNcmw==", - "requires": { - "ip-regex": "^2.1.0" - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" - }, - "cli-columns": { - "version": "3.1.2", - "resolved": false, - "integrity": "sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4=", - "requires": { - "string-width": "^2.0.0", - "strip-ansi": "^3.0.1" - } - }, - "cli-table3": { - "version": "0.5.0", - "resolved": false, - "integrity": "sha512-c7YHpUyO1SaKaO7kYtxd5NZ8FjAmSK3LpKkuzdwn+2CwpFxBpdoQLm+OAnnCfoEl7onKhN9PKQi1lsHuAIUqGQ==", - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - } - }, - "cliui": { - "version": "4.1.0", - "resolved": false, - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": false, - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": false, - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "clone": { - "version": "1.0.4", - "resolved": false, - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" - }, - "cmd-shim": { - "version": "2.0.2", - "resolved": false, - "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=", - "requires": { - "graceful-fs": "^4.1.2", - "mkdirp": "~0.5.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": false, - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "color-convert": { - "version": "1.9.1", - "resolved": false, - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "requires": { - "color-name": "^1.1.1" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": false, - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "colors": { - "version": "1.1.2", - "resolved": false, - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "optional": true - }, - "columnify": { - "version": "1.5.4", - "resolved": false, - "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", - "requires": { - "strip-ansi": "^3.0.0", - "wcwidth": "^1.0.0" - } - }, - "combined-stream": { - "version": "1.0.6", - "resolved": false, - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": false, - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": false, - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "config-chain": { - "version": "1.1.11", - "resolved": false, - "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "configstore": { - "version": "3.1.2", - "resolved": false, - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": false, - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - }, - "dependencies": { - "iferr": { - "version": "0.1.5", - "resolved": false, - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "create-error-class": { - "version": "3.0.2", - "resolved": false, - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": false, - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" - }, - "cyclist": { - "version": "0.2.2", - "resolved": false, - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" - }, - "dashdash": { - "version": "1.14.1", - "resolved": false, - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "3.1.0", - "resolved": false, - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "debuglog": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=" - }, - "decamelize": { - "version": "1.2.0", - "resolved": false, - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": false, - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "deep-extend": { - "version": "0.5.1", - "resolved": false, - "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" - }, - "defaults": { - "version": "1.0.3", - "resolved": false, - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "requires": { - "clone": "^1.0.2" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "delegates": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "detect-indent": { - "version": "5.0.0", - "resolved": false, - "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=" - }, - "detect-newline": { - "version": "2.1.0", - "resolved": false, - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=" - }, - "dezalgo": { - "version": "1.0.3", - "resolved": false, - "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": false, - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotenv": { - "version": "5.0.1", - "resolved": false, - "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": false, - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "duplexify": { - "version": "3.6.0", - "resolved": false, - "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": false, - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "optional": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "editor": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=" - }, - "encoding": { - "version": "0.1.12", - "resolved": false, - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": false, - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" - } - }, - "err-code": { - "version": "1.1.2", - "resolved": false, - "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=" - }, - "errno": { - "version": "0.1.7", - "resolved": false, - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "requires": { - "prr": "~1.0.1" - } - }, - "es6-promise": { - "version": "4.2.4", - "resolved": false, - "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": false, - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": false, - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "execa": { - "version": "0.7.0", - "resolved": false, - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": false, - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": false, - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "figgy-pudding": { - "version": "3.4.1", - "resolved": false, - "integrity": "sha512-j1SAT641cerGuOvoSBoaE9LbSzh1N/E5ufk9oMpOKuyK8MyW3sGg4rh+4qhLmVTEAzipO5XTHYT4gjb6JYLE8g==" - }, - "find-npm-prefix": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA==" - }, - "find-up": { - "version": "2.1.0", - "resolved": false, - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "^2.0.0" - } - }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": false, - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": false, - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.2", - "resolved": false, - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - } - }, - "from2": { - "version": "2.3.0", - "resolved": false, - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-minipass": { - "version": "1.2.5", - "resolved": false, - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "requires": { - "minipass": "^2.2.1" - } - }, - "fs-vacuum": { - "version": "1.2.10", - "resolved": false, - "integrity": "sha1-t2Kb7AekAxolSP35n17PHMizHjY=", - "requires": { - "graceful-fs": "^4.1.2", - "path-is-inside": "^1.0.1", - "rimraf": "^2.5.2" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": false, - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - }, - "dependencies": { - "iferr": { - "version": "0.1.5", - "resolved": false, - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "1.0.11", - "resolved": false, - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "gauge": { - "version": "2.7.4", - "resolved": false, - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "genfun": { - "version": "4.0.1", - "resolved": false, - "integrity": "sha1-7RAEHy5KfxsKOEZtF6XD4n3x38E=" - }, - "gentle-fs": { - "version": "2.0.1", - "resolved": false, - "integrity": "sha512-cEng5+3fuARewXktTEGbwsktcldA+YsnUEaXZwcK/3pjSE1X9ObnTs+/8rYf8s+RnIcQm2D5x3rwpN7Zom8Bew==", - "requires": { - "aproba": "^1.1.2", - "fs-vacuum": "^1.2.10", - "graceful-fs": "^4.1.11", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "path-is-inside": "^1.0.2", - "read-cmd-shim": "^1.0.1", - "slide": "^1.1.6" - }, - "dependencies": { - "iferr": { - "version": "0.1.5", - "resolved": false, - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" - } - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" - }, - "get-stream": { - "version": "3.0.0", - "resolved": false, - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "getpass": { - "version": "0.1.7", - "resolved": false, - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": false, - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": false, - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "requires": { - "ini": "^1.3.4" - } - }, - "got": { - "version": "6.7.1", - "resolved": false, - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": false, - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "har-schema": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.0", - "resolved": false, - "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", - "requires": { - "ajv": "^5.3.0", - "har-schema": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": false, - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-unicode": { - "version": "2.0.1", - "resolved": false, - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": false, - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" - }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": false, - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": false, - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "requires": { - "agent-base": "4", - "debug": "3.1.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": false, - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": false, - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", - "requires": { - "agent-base": "^4.1.0", - "debug": "^3.1.0" - } - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": false, - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": false, - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "iferr": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg==" - }, - "ignore-walk": { - "version": "3.0.1", - "resolved": false, - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "requires": { - "minimatch": "^3.0.4" - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": false, - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": false, - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "inflight": { - "version": "1.0.6", - "resolved": false, - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": false, - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": false, - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "init-package-json": { - "version": "1.10.3", - "resolved": false, - "integrity": "sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw==", - "requires": { - "glob": "^7.1.1", - "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", - "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "1 || 2", - "semver": "2.x || 3.x || 4 || 5", - "validate-npm-package-license": "^3.0.1", - "validate-npm-package-name": "^3.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - }, - "ip": { - "version": "1.1.5", - "resolved": false, - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "ip-regex": { - "version": "2.1.0", - "resolved": false, - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-ci": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", - "requires": { - "ci-info": "^1.0.0" - } - }, - "is-cidr": { - "version": "2.0.6", - "resolved": false, - "integrity": "sha512-A578p1dV22TgPXn6NCaDAPj6vJvYsBgAzUrAd28a4oldeXJjWqEUuSZOLIW3im51mazOKsoyVp8NU/OItlWacw==", - "requires": { - "cidr-regex": "^2.0.8" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": false, - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" - }, - "is-obj": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-redirect": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "isarray": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isstream": { - "version": "0.1.2", - "resolved": false, - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jsbn": { - "version": "0.1.1", - "resolved": false, - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "json-schema": { - "version": "0.2.3", - "resolved": false, - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": false, - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": false, - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonparse": { - "version": "1.3.1", - "resolved": false, - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": false, - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": false, - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "requires": { - "package-json": "^4.0.0" - } - }, - "lazy-property": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=" - }, - "lcid": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "^1.0.0" - } - }, - "libcipm": { - "version": "2.0.2", - "resolved": false, - "integrity": "sha512-9uZ6/LAflVEijksTRq/RX0e+pGA4mr8tND9Cmk2JMg7j2fFUBrs8PpFX2DOAJR/XoxPzz+5h8bkWmtIYLunKAg==", - "requires": { - "bin-links": "^1.1.2", - "bluebird": "^3.5.1", - "find-npm-prefix": "^1.0.2", - "graceful-fs": "^4.1.11", - "lock-verify": "^2.0.2", - "mkdirp": "^0.5.1", - "npm-lifecycle": "^2.0.3", - "npm-logical-tree": "^1.2.1", - "npm-package-arg": "^6.1.0", - "pacote": "^8.1.6", - "protoduck": "^5.0.0", - "read-package-json": "^2.0.13", - "rimraf": "^2.6.2", - "worker-farm": "^1.6.0" - } - }, - "libnpmhook": { - "version": "4.0.1", - "resolved": false, - "integrity": "sha512-3qqpfqvBD1712WA6iGe0stkG40WwAeoWcujA6BlC0Be1JArQbqwabnEnZ0CRcD05Tf1fPYJYdCbSfcfedEJCOg==", - "requires": { - "figgy-pudding": "^3.1.0", - "npm-registry-fetch": "^3.0.0" - }, - "dependencies": { - "npm-registry-fetch": { - "version": "3.1.1", - "resolved": false, - "integrity": "sha512-xBobENeenvjIG8PgQ1dy77AXTI25IbYhmA3DusMIfw/4EL5BaQ5e1V9trkPrqHvyjR3/T0cnH6o0Wt/IzcI5Ag==", - "requires": { - "bluebird": "^3.5.1", - "figgy-pudding": "^3.1.0", - "lru-cache": "^4.1.2", - "make-fetch-happen": "^4.0.0", - "npm-package-arg": "^6.0.0" - } - } - } - }, - "libnpx": { - "version": "10.2.0", - "resolved": false, - "integrity": "sha512-X28coei8/XRCt15cYStbLBph+KGhFra4VQhRBPuH/HHMkC5dxM8v24RVgUsvODKCrUZ0eTgiTqJp6zbl0sskQQ==", - "requires": { - "dotenv": "^5.0.1", - "npm-package-arg": "^6.0.0", - "rimraf": "^2.6.2", - "safe-buffer": "^5.1.0", - "update-notifier": "^2.3.0", - "which": "^1.3.0", - "y18n": "^4.0.0", - "yargs": "^11.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lock-verify": { - "version": "2.0.2", - "resolved": false, - "integrity": "sha512-QNVwK0EGZBS4R3YQ7F1Ox8p41Po9VGl2QG/2GsuvTbkJZYSsPeWHKMbbH6iZMCHWSMww5nrJroZYnGzI4cePuw==", - "requires": { - "npm-package-arg": "^5.1.2 || 6", - "semver": "^5.4.1" - } - }, - "lockfile": { - "version": "1.0.4", - "resolved": false, - "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", - "requires": { - "signal-exit": "^3.0.2" - } - }, - "lodash._baseindexof": { - "version": "3.1.0", - "resolved": false, - "integrity": "sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw=" - }, - "lodash._baseuniq": { - "version": "4.6.0", - "resolved": false, - "integrity": "sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg=", - "requires": { - "lodash._createset": "~4.0.0", - "lodash._root": "~3.0.0" - } - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": false, - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=" - }, - "lodash._cacheindexof": { - "version": "3.0.2", - "resolved": false, - "integrity": "sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI=" - }, - "lodash._createcache": { - "version": "3.1.2", - "resolved": false, - "integrity": "sha1-VtagZAF2JeeevKa4AY4XRAvc8JM=", - "requires": { - "lodash._getnative": "^3.0.0" - } - }, - "lodash._createset": { - "version": "4.0.3", - "resolved": false, - "integrity": "sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=" - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": false, - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" - }, - "lodash._root": { - "version": "3.0.1", - "resolved": false, - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": false, - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": false, - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" - }, - "lodash.union": { - "version": "4.6.0", - "resolved": false, - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": false, - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "lodash.without": { - "version": "4.4.0", - "resolved": false, - "integrity": "sha1-PNRXSgC2e643OpS3SHcmQFB7eqw=" - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "lru-cache": { - "version": "4.1.3", - "resolved": false, - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": false, - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "^3.0.0" - } - }, - "make-fetch-happen": { - "version": "4.0.1", - "resolved": false, - "integrity": "sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ==", - "requires": { - "agentkeepalive": "^3.4.1", - "cacache": "^11.0.1", - "http-cache-semantics": "^3.8.1", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", - "lru-cache": "^4.1.2", - "mississippi": "^3.0.0", - "node-fetch-npm": "^2.0.2", - "promise-retry": "^1.1.1", - "socks-proxy-agent": "^4.0.0", - "ssri": "^6.0.0" - } - }, - "meant": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg==" - }, - "mem": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "mime-db": { - "version": "1.35.0", - "resolved": false, - "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" - }, - "mime-types": { - "version": "2.1.19", - "resolved": false, - "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", - "requires": { - "mime-db": "~1.35.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": false, - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": false, - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": false, - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "minipass": { - "version": "2.3.3", - "resolved": false, - "integrity": "sha512-/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw==", - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - }, - "dependencies": { - "yallist": { - "version": "3.0.2", - "resolved": false, - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" - } - } - }, - "minizlib": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", - "requires": { - "minipass": "^2.2.1" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": false, - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": false, - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.1.1", - "resolved": false, - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "mute-stream": { - "version": "0.0.7", - "resolved": false, - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "node-fetch-npm": { - "version": "2.0.2", - "resolved": false, - "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", - "requires": { - "encoding": "^0.1.11", - "json-parse-better-errors": "^1.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node-gyp": { - "version": "3.8.0", - "resolved": false, - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "nopt": { - "version": "3.0.6", - "resolved": false, - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "requires": { - "abbrev": "1" - } - }, - "semver": { - "version": "5.3.0", - "resolved": false, - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" - }, - "tar": { - "version": "2.2.1", - "resolved": false, - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } - } - } - }, - "nopt": { - "version": "4.0.1", - "resolved": false, - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": false, - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "npm-audit-report": { - "version": "1.3.1", - "resolved": false, - "integrity": "sha512-SjTF8ZP4rOu3JiFrTMi4M1CmVo2tni2sP4TzhyCMHwnMGf6XkdGLZKt9cdZ12esKf0mbQqFyU9LtY0SoeahL7g==", - "requires": { - "cli-table3": "^0.5.0", - "console-control-strings": "^1.1.0" - } - }, - "npm-bundled": { - "version": "1.0.5", - "resolved": false, - "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==" - }, - "npm-cache-filename": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE=" - }, - "npm-install-checks": { - "version": "3.0.0", - "resolved": false, - "integrity": "sha1-1K7N/VGlPjcjt7L5Oy7ijjB7wNc=", - "requires": { - "semver": "^2.3.0 || 3.x || 4 || 5" - } - }, - "npm-lifecycle": { - "version": "2.1.0", - "resolved": false, - "integrity": "sha512-QbBfLlGBKsktwBZLj6AviHC6Q9Y3R/AY4a2PYSIRhSKSS0/CxRyD/PfxEX6tPeOCXQgMSNdwGeECacstgptc+g==", - "requires": { - "byline": "^5.0.0", - "graceful-fs": "^4.1.11", - "node-gyp": "^3.8.0", - "resolve-from": "^4.0.0", - "slide": "^1.1.6", - "uid-number": "0.0.6", - "umask": "^1.1.0", - "which": "^1.3.1" - } - }, - "npm-logical-tree": { - "version": "1.2.1", - "resolved": false, - "integrity": "sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg==" - }, - "npm-package-arg": { - "version": "6.1.0", - "resolved": false, - "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", - "requires": { - "hosted-git-info": "^2.6.0", - "osenv": "^0.1.5", - "semver": "^5.5.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-packlist": { - "version": "1.1.11", - "resolved": false, - "integrity": "sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA==", - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "2.1.0", - "resolved": false, - "integrity": "sha512-q9zLP8cTr8xKPmMZN3naxp1k/NxVFsjxN6uWuO1tiw9gxg7wZWQ/b5UTfzD0ANw2q1lQxdLKTeCCksq+bPSgbQ==", - "requires": { - "npm-package-arg": "^6.0.0", - "semver": "^5.4.1" - } - }, - "npm-profile": { - "version": "3.0.2", - "resolved": false, - "integrity": "sha512-rEJOFR6PbwOvvhGa2YTNOJQKNuc6RovJ6T50xPU7pS9h/zKPNCJ+VHZY2OFXyZvEi+UQYtHRTp8O/YM3tUD20A==", - "requires": { - "aproba": "^1.1.2 || 2", - "make-fetch-happen": "^2.5.0 || 3 || 4" - } - }, - "npm-registry-client": { - "version": "8.6.0", - "resolved": false, - "integrity": "sha512-Qs6P6nnopig+Y8gbzpeN/dkt+n7IyVd8f45NTMotGk6Qo7GfBmzwYx6jRLoOOgKiMnaQfYxsuyQlD8Mc3guBhg==", - "requires": { - "concat-stream": "^1.5.2", - "graceful-fs": "^4.1.6", - "normalize-package-data": "~1.0.1 || ^2.0.0", - "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", - "npmlog": "2 || ^3.1.0 || ^4.0.0", - "once": "^1.3.3", - "request": "^2.74.0", - "retry": "^0.10.0", - "safe-buffer": "^5.1.1", - "semver": "2 >=2.2.1 || 3.x || 4 || 5", - "slide": "^1.1.3", - "ssri": "^5.2.4" - }, - "dependencies": { - "retry": { - "version": "0.10.1", - "resolved": false, - "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=" - }, - "ssri": { - "version": "5.3.0", - "resolved": false, - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", - "requires": { - "safe-buffer": "^5.1.1" - } - } - } - }, - "npm-registry-fetch": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha512-XJPIBfMtgaooRtZmuA42xCeLf3tkxdIX0xqRsGWwNrcVvJ9UYFccD7Ho7QWCzvkM3i/QrkUC37Hu0a+vDBmt5g==", - "requires": { - "bluebird": "^3.5.1", - "figgy-pudding": "^2.0.1", - "lru-cache": "^4.1.2", - "make-fetch-happen": "^3.0.0", - "npm-package-arg": "^6.0.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "cacache": { - "version": "10.0.4", - "resolved": false, - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", - "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" - }, - "dependencies": { - "mississippi": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^2.0.1", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - } - } - }, - "figgy-pudding": { - "version": "2.0.1", - "resolved": false, - "integrity": "sha512-yIJPhIBi/oFdU/P+GSXjmk/rmGjuZkm7A5LTXZxNrEprXJXRK012FiI1BR1Pga+0d/d6taWWD+B5d2ozqaxHig==" - }, - "make-fetch-happen": { - "version": "3.0.0", - "resolved": false, - "integrity": "sha512-FmWY7gC0mL6Z4N86vE14+m719JKE4H0A+pyiOH18B025gF/C113pyfb4gHDDYP5cqnRMHOz06JGdmffC/SES+w==", - "requires": { - "agentkeepalive": "^3.4.1", - "cacache": "^10.0.4", - "http-cache-semantics": "^3.8.1", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.0", - "lru-cache": "^4.1.2", - "mississippi": "^3.0.0", - "node-fetch-npm": "^2.0.2", - "promise-retry": "^1.1.1", - "socks-proxy-agent": "^3.0.1", - "ssri": "^5.2.4" - } - }, - "pump": { - "version": "2.0.1", - "resolved": false, - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "smart-buffer": { - "version": "1.1.15", - "resolved": false, - "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=" - }, - "socks": { - "version": "1.1.10", - "resolved": false, - "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", - "requires": { - "ip": "^1.1.4", - "smart-buffer": "^1.0.13" - } - }, - "socks-proxy-agent": { - "version": "3.0.1", - "resolved": false, - "integrity": "sha512-ZwEDymm204mTzvdqyUqOdovVr2YRd2NYskrYrF2LXyZ9qDiMAoFESGK8CRphiO7rtbo2Y757k2Nia3x2hGtalA==", - "requires": { - "agent-base": "^4.1.0", - "socks": "^1.1.10" - } - }, - "ssri": { - "version": "5.3.0", - "resolved": false, - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", - "requires": { - "safe-buffer": "^5.1.1" - } - } - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": false, - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "npm-user-validate": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE=" - }, - "npmlog": { - "version": "4.1.2", - "resolved": false, - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": false, - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": false, - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "once": { - "version": "1.4.0", - "resolved": false, - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "opener": { - "version": "1.5.0", - "resolved": false, - "integrity": "sha512-MD4s/o61y2slS27zm2s4229V2gAUHX0/e3/XOmY/jsXwhysjjCIHN8lx7gqZCrZk19ym+HjCUWHeMKD7YJtKCQ==" - }, - "os-homedir": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-locale": { - "version": "2.1.0", - "resolved": false, - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": false, - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-limit": { - "version": "1.2.0", - "resolved": false, - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - }, - "package-json": { - "version": "4.0.1", - "resolved": false, - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "pacote": { - "version": "8.1.6", - "resolved": false, - "integrity": "sha512-wTOOfpaAQNEQNtPEx92x9Y9kRWVu45v583XT8x2oEV2xRB74+xdqMZIeGW4uFvAyZdmSBtye+wKdyyLaT8pcmw==", - "requires": { - "bluebird": "^3.5.1", - "cacache": "^11.0.2", - "get-stream": "^3.0.0", - "glob": "^7.1.2", - "lru-cache": "^4.1.3", - "make-fetch-happen": "^4.0.1", - "minimatch": "^3.0.4", - "minipass": "^2.3.3", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "normalize-package-data": "^2.4.0", - "npm-package-arg": "^6.1.0", - "npm-packlist": "^1.1.10", - "npm-pick-manifest": "^2.1.0", - "osenv": "^0.1.5", - "promise-inflight": "^1.0.1", - "promise-retry": "^1.1.1", - "protoduck": "^5.0.0", - "rimraf": "^2.6.2", - "safe-buffer": "^5.1.2", - "semver": "^5.5.0", - "ssri": "^6.0.0", - "tar": "^4.4.3", - "unique-filename": "^1.1.0", - "which": "^1.3.0" - } - }, - "parallel-transform": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", - "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": false, - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "path-key": { - "version": "2.0.1", - "resolved": false, - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": false, - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pify": { - "version": "3.0.0", - "resolved": false, - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "prepend-http": { - "version": "1.0.4", - "resolved": false, - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" - }, - "promise-retry": { - "version": "1.1.1", - "resolved": false, - "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", - "requires": { - "err-code": "^1.0.0", - "retry": "^0.10.0" - }, - "dependencies": { - "retry": { - "version": "0.10.1", - "resolved": false, - "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=" - } - } - }, - "promzard": { - "version": "0.3.0", - "resolved": false, - "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", - "requires": { - "read": "1" - } - }, - "proto-list": { - "version": "1.2.4", - "resolved": false, - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" - }, - "protoduck": { - "version": "5.0.0", - "resolved": false, - "integrity": "sha512-agsGWD8/RZrS4ga6v82Fxb0RHIS2RZnbsSue6A9/MBRhB/jcqOANAMNrqM9900b8duj+Gx+T/JMy5IowDoO/hQ==", - "requires": { - "genfun": "^4.0.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "psl": { - "version": "1.1.29", - "resolved": false, - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" - }, - "pump": { - "version": "3.0.0", - "resolved": false, - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": false, - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": false, - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "1.4.1", - "resolved": false, - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "qrcode-terminal": { - "version": "0.12.0", - "resolved": false, - "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==" - }, - "qs": { - "version": "6.5.2", - "resolved": false, - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "query-string": { - "version": "6.1.0", - "resolved": false, - "integrity": "sha512-pNB/Gr8SA8ff8KpUFM36o/WFAlthgaThka5bV19AD9PNTH20Pwq5Zxodif2YyHwrctp6SkL4GqlOot0qR/wGaw==", - "requires": { - "decode-uri-component": "^0.2.0", - "strict-uri-encode": "^2.0.0" - } - }, - "qw": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-77/cdA+a0FQwRCassYNBLMi5ltQ=" - }, - "rc": { - "version": "1.2.7", - "resolved": false, - "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": false, - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, - "read": { - "version": "1.0.7", - "resolved": false, - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-cmd-shim": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=", - "requires": { - "graceful-fs": "^4.1.2" - } - }, - "read-installed": { - "version": "4.0.3", - "resolved": false, - "integrity": "sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=", - "requires": { - "debuglog": "^1.0.1", - "graceful-fs": "^4.1.2", - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "slide": "~1.1.3", - "util-extend": "^1.0.1" - } - }, - "read-package-json": { - "version": "2.0.13", - "resolved": false, - "integrity": "sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg==", - "requires": { - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "json-parse-better-errors": "^1.0.1", - "normalize-package-data": "^2.0.0", - "slash": "^1.0.0" - } - }, - "read-package-tree": { - "version": "5.2.1", - "resolved": false, - "integrity": "sha512-2CNoRoh95LxY47LvqrehIAfUVda2JbuFE/HaGYs42bNrGG+ojbw1h3zOcPcQ+1GQ3+rkzNndZn85u1XyZ3UsIA==", - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "once": "^1.3.0", - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": false, - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdir-scoped-modules": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-n6+jfShr5dksuuve4DDcm19AZ0c=", - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "registry-auth-token": { - "version": "3.3.2", - "resolved": false, - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": false, - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "requires": { - "rc": "^1.0.1" - } - }, - "request": { - "version": "2.88.0", - "resolved": false, - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": false, - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "resolve-from": { - "version": "4.0.0", - "resolved": false, - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "retry": { - "version": "0.12.0", - "resolved": false, - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "rimraf": { - "version": "2.6.2", - "resolved": false, - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "requires": { - "glob": "^7.0.5" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": false, - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "requires": { - "aproba": "^1.1.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": false, - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": false, - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "semver": { - "version": "5.5.0", - "resolved": false, - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" - }, - "semver-diff": { - "version": "2.1.0", - "resolved": false, - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "requires": { - "semver": "^5.0.3" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "sha": { - "version": "2.0.1", - "resolved": false, - "integrity": "sha1-YDCCL70smCOUn49y7WQR7lzyWq4=", - "requires": { - "graceful-fs": "^4.1.2", - "readable-stream": "^2.0.2" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": false, - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": false, - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "slash": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - }, - "slide": { - "version": "1.1.6", - "resolved": false, - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" - }, - "smart-buffer": { - "version": "4.0.1", - "resolved": false, - "integrity": "sha512-RFqinRVJVcCAL9Uh1oVqE6FZkqsyLiVOYEZ20TqIOjuX7iFVJ+zsbs4RIghnw/pTs7mZvt8ZHhvm1ZUrR4fykg==" - }, - "socks": { - "version": "2.2.0", - "resolved": false, - "integrity": "sha512-uRKV9uXQ9ytMbGm2+DilS1jB7N3AC0mmusmW5TVWjNuBZjxS8+lX38fasKVY9I4opv/bY/iqTbcpFFaTwpfwRg==", - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.0.1" - } - }, - "socks-proxy-agent": { - "version": "4.0.1", - "resolved": false, - "integrity": "sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw==", - "requires": { - "agent-base": "~4.2.0", - "socks": "~2.2.0" - } - }, - "sorted-object": { - "version": "2.0.1", - "resolved": false, - "integrity": "sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw=" - }, - "sorted-union-stream": { - "version": "2.1.3", - "resolved": false, - "integrity": "sha1-x3lMfgd4gAUv9xqNSi27Sppjisc=", - "requires": { - "from2": "^1.3.0", - "stream-iterate": "^1.1.0" - }, - "dependencies": { - "from2": { - "version": "1.3.0", - "resolved": false, - "integrity": "sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0=", - "requires": { - "inherits": "~2.0.1", - "readable-stream": "~1.1.10" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": false, - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": false, - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": false, - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "spdx-correct": { - "version": "3.0.0", - "resolved": false, - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "resolved": false, - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": false, - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "resolved": false, - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" - }, - "sshpk": { - "version": "1.14.2", - "resolved": false, - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "6.0.0", - "resolved": false, - "integrity": "sha512-zYOGfVHPhxyzwi8MdtdNyxv3IynWCIM4jYReR48lqu0VngxgH1c+C6CmipRdJ55eVByTJV/gboFEEI7TEQI8DA==" - }, - "stream-each": { - "version": "1.2.2", - "resolved": false, - "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-iterate": { - "version": "1.2.0", - "resolved": false, - "integrity": "sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE=", - "requires": { - "readable-stream": "^2.1.5", - "stream-shift": "^1.0.0" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" - }, - "strict-uri-encode": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" - }, - "string-width": { - "version": "2.1.1", - "resolved": false, - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": false, - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": false, - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": false, - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringify-package": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha512-JIQqiWmLiEozOC0b0BtxZ/AOUtdUZHCBPgqIZ2kSJJqGwgb9neo44XdTHUC4HZSGqi03hOeB7W/E8rAlKnGe9g==" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": false, - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": false, - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "supports-color": { - "version": "5.4.0", - "resolved": false, - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "tar": { - "version": "4.4.6", - "resolved": false, - "integrity": "sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg==", - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.3", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - }, - "dependencies": { - "yallist": { - "version": "3.0.2", - "resolved": false, - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" - } - } - }, - "term-size": { - "version": "1.2.0", - "resolved": false, - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "requires": { - "execa": "^0.7.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": false, - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "through": { - "version": "2.3.8", - "resolved": false, - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.3", - "resolved": false, - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": false, - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "tiny-relative-date": { - "version": "1.3.0", - "resolved": false, - "integrity": "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==" - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": false, - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": false, - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": false, - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": false, - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "uid-number": { - "version": "0.0.6", - "resolved": false, - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=" - }, - "umask": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=" - }, - "unique-filename": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unzip-response": { - "version": "2.0.1", - "resolved": false, - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" - }, - "update-notifier": { - "version": "2.5.0", - "resolved": false, - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "^1.0.1" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util-extend": { - "version": "1.0.3", - "resolved": false, - "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=" - }, - "uuid": { - "version": "3.3.2", - "resolved": false, - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": false, - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": false, - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "requires": { - "builtins": "^1.0.3" - } - }, - "verror": { - "version": "1.10.0", - "resolved": false, - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "requires": { - "defaults": "^1.0.3" - } - }, - "which": { - "version": "1.3.1", - "resolved": false, - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "wide-align": { - "version": "1.1.2", - "resolved": false, - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "requires": { - "string-width": "^1.0.2" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "widest-line": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", - "requires": { - "string-width": "^2.1.1" - } - }, - "worker-farm": { - "version": "1.6.0", - "resolved": false, - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": false, - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": false, - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": false, - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" - }, - "xtend": { - "version": "4.0.1", - "resolved": false, - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "y18n": { - "version": "4.0.0", - "resolved": false, - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - }, - "yallist": { - "version": "2.1.2", - "resolved": false, - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yargs": { - "version": "11.0.0", - "resolved": false, - "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - }, - "dependencies": { - "y18n": { - "version": "3.2.1", - "resolved": false, - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - } - } - }, - "yargs-parser": { - "version": "9.0.2", - "resolved": false, - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -16606,9 +13519,9 @@ } }, "tinymce": { - "version": "4.7.13", - "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-4.7.13.tgz", - "integrity": "sha512-6QbNYGV4VExH+p7+o/5km6jOnVSD5mO7aw0s+eKByKnpyG8gZfajxXPhwBM57r7SIravrCI6LFj8DARNe31qPw==" + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-4.8.3.tgz", + "integrity": "sha512-kNEsKTqUYZRG+GTZ7tcVAktUlDeApz6d3IqnNaZXNX0CP0BsK8NPC02FCJ0EVYxdNnq6fvvknWkItmbreXD9aA==" }, "tmp": { "version": "0.0.33", diff --git a/src/Umbraco.Web/Actions/ActionCollectionBuilder.cs b/src/Umbraco.Web/Actions/ActionCollectionBuilder.cs index 8400e02271..55fa1c2099 100644 --- a/src/Umbraco.Web/Actions/ActionCollectionBuilder.cs +++ b/src/Umbraco.Web/Actions/ActionCollectionBuilder.cs @@ -9,9 +9,9 @@ namespace Umbraco.Web.Actions { protected override ActionCollectionBuilder This => this; - protected override IEnumerable CreateItems() + protected override IEnumerable CreateItems(IFactory factory) { - var items = base.CreateItems().ToList(); + var items = base.CreateItems(factory).ToList(); //validate the items, no actions should exist that do not either expose notifications or permissions var invalidItems = items.Where(x => !x.CanBePermissionAssigned && !x.ShowInNotifier).ToList(); diff --git a/src/Umbraco.Web/Cache/CacheRefresherComponent.cs b/src/Umbraco.Web/Cache/CacheRefresherComponent.cs index 3a5f716552..95b037c468 100644 --- a/src/Umbraco.Web/Cache/CacheRefresherComponent.cs +++ b/src/Umbraco.Web/Cache/CacheRefresherComponent.cs @@ -21,7 +21,6 @@ using Umbraco.Web.Composing; using Umbraco.Web.Security; using Umbraco.Web.Services; using ApplicationTree = Umbraco.Core.Models.ApplicationTree; -using ContainerExtensions = Umbraco.Core.Composing.ContainerExtensions; namespace Umbraco.Web.Cache { diff --git a/src/Umbraco.Web/Components/DatabaseServerRegistrarAndMessengerComponent.cs b/src/Umbraco.Web/Components/DatabaseServerRegistrarAndMessengerComponent.cs index 1c44098943..8e01b61302 100644 --- a/src/Umbraco.Web/Components/DatabaseServerRegistrarAndMessengerComponent.cs +++ b/src/Umbraco.Web/Components/DatabaseServerRegistrarAndMessengerComponent.cs @@ -3,6 +3,7 @@ using System.Threading; using Examine; using Umbraco.Core; using Umbraco.Core.Components; +using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.Logging; using Umbraco.Core.Persistence; @@ -11,11 +12,10 @@ using Umbraco.Core.Services; using Umbraco.Core.Services.Changes; using Umbraco.Core.Sync; using Umbraco.Web.Cache; -using Umbraco.Web.Composing; using Umbraco.Web.Routing; using Umbraco.Web.Scheduling; using Umbraco.Web.Search; -using ContainerExtensions = Umbraco.Core.Composing.ContainerExtensions; +using Current = Umbraco.Web.Composing.Current; namespace Umbraco.Web.Components { @@ -54,12 +54,12 @@ namespace Umbraco.Web.Components { composition.SetServerMessenger(factory => { - var runtime = ContainerExtensions.GetInstance(factory); - var databaseFactory = ContainerExtensions.GetInstance(factory); - var globalSettings = ContainerExtensions.GetInstance(factory); - var proflog = ContainerExtensions.GetInstance(factory); - var scopeProvider = ContainerExtensions.GetInstance(factory); - var sqlContext = ContainerExtensions.GetInstance(factory); + var runtime = RegisterExtensions.GetInstance(factory); + var databaseFactory = RegisterExtensions.GetInstance(factory); + var globalSettings = RegisterExtensions.GetInstance(factory); + var proflog = RegisterExtensions.GetInstance(factory); + var scopeProvider = RegisterExtensions.GetInstance(factory); + var sqlContext = RegisterExtensions.GetInstance(factory); return new BatchedDatabaseServerMessenger( runtime, databaseFactory, scopeProvider, sqlContext, proflog, globalSettings, diff --git a/src/Umbraco.Web/Components/NotificationsComponent.cs b/src/Umbraco.Web/Components/NotificationsComponent.cs index 38ec283cfe..b54dce4e3e 100644 --- a/src/Umbraco.Web/Components/NotificationsComponent.cs +++ b/src/Umbraco.Web/Components/NotificationsComponent.cs @@ -23,7 +23,7 @@ namespace Umbraco.Web.Components public override void Compose(Composition composition) { base.Compose(composition); - composition.Container.RegisterSingleton(); + composition.RegisterSingleton(); } public void Initialize(INotificationService notificationService, Notifier notifier, ActionCollection actions) @@ -42,7 +42,7 @@ namespace Umbraco.Web.Components //Send notifications for the delete action ContentService.Deleted += (sender, args) => notifier.Notify(actions.GetAction(), args.DeletedEntities.ToArray()); - + //Send notifications for the unpublish action ContentService.Unpublished += (sender, args) => notifier.Notify(actions.GetAction(), args.PublishedEntities.ToArray()); } @@ -54,7 +54,7 @@ namespace Umbraco.Web.Components // in this case there's nothing to report since if the root is sorted we can't report on a fake entity. // this is how it was in v7, we can't report on root changes because you can't subscribe to root changes. - if (parentId[0] <= 0) return; + if (parentId[0] <= 0) return; var parent = sender.GetById(parentId[0]); if (parent == null) return; // this shouldn't happen @@ -191,5 +191,5 @@ namespace Umbraco.Web.Components } } - + } diff --git a/src/Umbraco.Web/Composing/Composers/ControllersComposer.cs b/src/Umbraco.Web/Composing/Composers/ControllersComposer.cs index 5491c0cc97..83a52456a1 100644 --- a/src/Umbraco.Web/Composing/Composers/ControllersComposer.cs +++ b/src/Umbraco.Web/Composing/Composers/ControllersComposer.cs @@ -36,10 +36,9 @@ namespace Umbraco.Web.Composing.Composers private static void RegisterControllers(this Composition composition, Assembly assembly) { - var container = composition.Container; var types = composition.TypeLoader.GetTypes(specificAssemblies: new[] { assembly }); foreach (var type in types) - container.Register(type, Lifetime.Request); + composition.Register(type, Lifetime.Request); } } } diff --git a/src/Umbraco.Web/Composing/Composers/InstallerComposer.cs b/src/Umbraco.Web/Composing/Composers/InstallerComposer.cs index 3d1a5b5c43..760e966435 100644 --- a/src/Umbraco.Web/Composing/Composers/InstallerComposer.cs +++ b/src/Umbraco.Web/Composing/Composers/InstallerComposer.cs @@ -9,27 +9,25 @@ namespace Umbraco.Web.Composing.Composers { public static Composition ComposeInstaller(this Composition composition) { - var container = composition.Container; - // register the installer steps - container.Register(Lifetime.Scope); - container.Register(Lifetime.Scope); - container.Register(Lifetime.Scope); - container.Register(Lifetime.Scope); - container.Register(Lifetime.Scope); - container.Register(Lifetime.Scope); - container.Register(Lifetime.Scope); + composition.Register(Lifetime.Scope); + composition.Register(Lifetime.Scope); + composition.Register(Lifetime.Scope); + composition.Register(Lifetime.Scope); + composition.Register(Lifetime.Scope); + composition.Register(Lifetime.Scope); + composition.Register(Lifetime.Scope); //TODO: Add these back once we have a compatible starter kit //container.Register(Lifetime.Scope); //container.Register(Lifetime.Scope); //container.Register(Lifetime.Scope); - container.Register(Lifetime.Scope); + composition.Register(Lifetime.Scope); - container.Register(); - container.Register(); + composition.Register(); + composition.Register(); return composition; } diff --git a/src/Umbraco.Web/Composing/Composers/WebMappingProfilesComposer.cs b/src/Umbraco.Web/Composing/Composers/WebMappingProfilesComposer.cs index 4779ba129b..202849a975 100644 --- a/src/Umbraco.Web/Composing/Composers/WebMappingProfilesComposer.cs +++ b/src/Umbraco.Web/Composing/Composers/WebMappingProfilesComposer.cs @@ -13,39 +13,37 @@ namespace Umbraco.Web.Composing.Composers { public static Composition ComposeWebMappingProfiles(this Composition composition) { - var container = composition.Container; - //register the profiles - container.Register(); - container.Register(); - container.Register(); - container.Register(); - container.Register(); - container.Register(); - container.Register(); - container.Register(); - container.Register(); - container.Register(); - container.Register(); - container.Register(); - container.Register(); - container.Register(); - container.Register(); - container.Register(); - container.Register(); - container.Register(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); //register any resolvers, etc.. that the profiles use - container.Register(); - container.Register>(); - container.Register>(); - container.Register>(); - container.Register>(); - container.Register(); - container.Register(); - container.Register(); - container.Register(); - container.Register(); + composition.Register(); + composition.Register>(); + composition.Register>(); + composition.Register>(); + composition.Register>(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); + composition.Register(); return composition; } diff --git a/src/Umbraco.Web/Composing/Current.cs b/src/Umbraco.Web/Composing/Current.cs index d0d6aeb2fa..6fce8c1318 100644 --- a/src/Umbraco.Web/Composing/Current.cs +++ b/src/Umbraco.Web/Composing/Current.cs @@ -53,10 +53,10 @@ namespace Umbraco.Web.Composing } /// - /// Gets the DI container. + /// Gets the factory. /// - public static IContainer Container - => CoreCurrent.Container; + public static IFactory Factory + => CoreCurrent.Factory; #region Temp & Special @@ -67,7 +67,7 @@ namespace Umbraco.Web.Composing get { if (_umbracoContextAccessor != null) return _umbracoContextAccessor; - return _umbracoContextAccessor = Container.GetInstance(); + return _umbracoContextAccessor = Factory.GetInstance(); } set => _umbracoContextAccessor = value; // for tests } @@ -92,46 +92,46 @@ namespace Umbraco.Web.Composing => UmbracoContextAccessor.UmbracoContext; public static DistributedCache DistributedCache - => Container.GetInstance(); + => Factory.GetInstance(); public static IPublishedSnapshot PublishedSnapshot - => Container.GetInstance().PublishedSnapshot; + => Factory.GetInstance().PublishedSnapshot; public static EventMessages EventMessages - => Container.GetInstance().GetOrDefault(); + => Factory.GetInstance().GetOrDefault(); public static UrlProviderCollection UrlProviders - => Container.GetInstance(); + => Factory.GetInstance(); public static HealthCheckCollectionBuilder HealthCheckCollectionBuilder - => Container.GetInstance(); + => Factory.GetInstance(); internal static ActionCollectionBuilder ActionCollectionBuilder - => Container.GetInstance(); + => Factory.GetInstance(); public static ActionCollection Actions - => Container.GetInstance(); + => Factory.GetInstance(); public static ContentFinderCollection ContentFinders - => Container.GetInstance(); + => Factory.GetInstance(); public static IContentLastChanceFinder LastChanceContentFinder - => Container.GetInstance(); + => Factory.GetInstance(); internal static EditorValidatorCollection EditorValidators - => Container.GetInstance(); + => Factory.GetInstance(); internal static UmbracoApiControllerTypeCollection UmbracoApiControllerTypes - => Container.GetInstance(); + => Factory.GetInstance(); internal static SurfaceControllerTypeCollection SurfaceControllerTypes - => Container.GetInstance(); + => Factory.GetInstance(); public static FilteredControllerFactoryCollection FilteredControllerFactories - => Container.GetInstance(); + => Factory.GetInstance(); internal static IPublishedSnapshotService PublishedSnapshotService - => Container.GetInstance(); + => Factory.GetInstance(); #endregion diff --git a/src/Umbraco.Web/Composing/ModuleInjector.cs b/src/Umbraco.Web/Composing/ModuleInjector.cs index c415d5ca6e..01930d55fd 100644 --- a/src/Umbraco.Web/Composing/ModuleInjector.cs +++ b/src/Umbraco.Web/Composing/ModuleInjector.cs @@ -21,7 +21,7 @@ namespace Umbraco.Web.Composing try { // using the service locator here - no other way, really - Module = Current.Container.GetInstance(); + Module = Current.Factory.GetInstance(); } catch { @@ -31,7 +31,7 @@ namespace Umbraco.Web.Composing try { - runtimeState = Current.Container.GetInstance(); + runtimeState = Current.Factory.GetInstance(); } catch { /* don't make it worse */ } diff --git a/src/Umbraco.Web/CompositionExtensions.cs b/src/Umbraco.Web/CompositionExtensions.cs index 2dfb504662..ee57ca98cb 100644 --- a/src/Umbraco.Web/CompositionExtensions.cs +++ b/src/Umbraco.Web/CompositionExtensions.cs @@ -30,7 +30,7 @@ namespace Umbraco.Core.Components /// The composition. /// internal static ActionCollectionBuilder Actions(this Composition composition) - => composition.Container.GetInstance(); + => composition.GetCollectionBuilder(); /// /// Gets the content apps collection builder. @@ -38,7 +38,7 @@ namespace Umbraco.Core.Components /// The composition. /// public static ContentAppDefinitionCollectionBuilder ContentApps(this Composition composition) - => composition.Container.GetInstance(); + => composition.GetCollectionBuilder(); /// /// Gets the content finders collection builder. @@ -46,7 +46,7 @@ namespace Umbraco.Core.Components /// The composition. /// public static ContentFinderCollectionBuilder ContentFinders(this Composition composition) - => composition.Container.GetInstance(); + => composition.GetCollectionBuilder(); /// /// Gets the editor validators collection builder. @@ -54,10 +54,7 @@ namespace Umbraco.Core.Components /// The composition. /// internal static EditorValidatorCollectionBuilder EditorValidators(this Composition composition) - => composition.Container.GetInstance(); - - public static UmbracoFeatures Features(this Composition composition) - => composition.Container.GetInstance(); + => composition.GetCollectionBuilder(); /// /// Gets the filtered controller factories collection builder. @@ -65,21 +62,21 @@ namespace Umbraco.Core.Components /// The composition. /// public static FilteredControllerFactoryCollectionBuilder FilderedControllerFactory(this Composition composition) - => composition.Container.GetInstance(); + => composition.GetCollectionBuilder(); /// /// Gets the health checks collection builder. /// /// The composition. public static HealthCheckCollectionBuilder HealthChecks(this Composition composition) - => composition.Container.GetInstance(); + => composition.GetCollectionBuilder(); /// /// Gets the url providers collection builder. /// /// The composition. internal static UrlProviderCollectionBuilder UrlProviders(this Composition composition) - => composition.Container.GetInstance(); + => composition.GetCollectionBuilder(); #endregion @@ -93,7 +90,7 @@ namespace Umbraco.Core.Components public static void SetContentLastChanceFinder(this Composition composition) where T : IContentLastChanceFinder { - composition.Container.RegisterSingleton(); + composition.RegisterSingleton(); } /// @@ -101,9 +98,9 @@ namespace Umbraco.Core.Components /// /// The composition. /// A function creating a last chance finder. - public static void SetContentLastChanceFinder(this Composition composition, Func factory) + public static void SetContentLastChanceFinder(this Composition composition, Func factory) { - composition.Container.RegisterSingleton(factory); + composition.RegisterSingleton(factory); } /// @@ -113,7 +110,7 @@ namespace Umbraco.Core.Components /// A last chance finder. public static void SetContentLastChanceFinder(this Composition composition, IContentLastChanceFinder finder) { - composition.Container.RegisterSingleton(_ => finder); + composition.RegisterSingleton(_ => finder); } /// @@ -134,7 +131,7 @@ namespace Umbraco.Core.Components public static void SetPublishedSnapshotService(this Composition composition) where T : IPublishedSnapshotService { - composition.Container.RegisterSingleton(); + composition.RegisterSingleton(); } /// @@ -142,9 +139,9 @@ namespace Umbraco.Core.Components /// /// The composition. /// A function creating a published snapshot service. - public static void SetPublishedSnapshotService(this Composition composition, Func factory) + public static void SetPublishedSnapshotService(this Composition composition, Func factory) { - composition.Container.RegisterSingleton(factory); + composition.RegisterSingleton(factory); } /// @@ -154,7 +151,7 @@ namespace Umbraco.Core.Components /// A published snapshot service. public static void SetPublishedSnapshotService(this Composition composition, IPublishedSnapshotService service) { - composition.Container.RegisterSingleton(_ => service); + composition.RegisterSingleton(_ => service); } /// @@ -165,7 +162,7 @@ namespace Umbraco.Core.Components public static void SetSiteDomainHelper(this Composition composition) where T : ISiteDomainHelper { - composition.Container.RegisterSingleton(); + composition.RegisterSingleton(); } /// @@ -173,9 +170,9 @@ namespace Umbraco.Core.Components /// /// The composition. /// A function creating a helper. - public static void SetSiteDomainHelper(this Composition composition, Func factory) + public static void SetSiteDomainHelper(this Composition composition, Func factory) { - composition.Container.RegisterSingleton(factory); + composition.RegisterSingleton(factory); } /// @@ -185,7 +182,7 @@ namespace Umbraco.Core.Components /// A helper. public static void SetSiteDomainHelper(this Composition composition, ISiteDomainHelper helper) { - composition.Container.RegisterSingleton(_ => helper); + composition.RegisterSingleton(_ => helper); } #endregion diff --git a/src/Umbraco.Web/ContentApps/ContentAppDefinitionCollectionBuilder.cs b/src/Umbraco.Web/ContentApps/ContentAppDefinitionCollectionBuilder.cs index 8c47e0f640..5299fe7152 100644 --- a/src/Umbraco.Web/ContentApps/ContentAppDefinitionCollectionBuilder.cs +++ b/src/Umbraco.Web/ContentApps/ContentAppDefinitionCollectionBuilder.cs @@ -12,22 +12,22 @@ namespace Umbraco.Web.ContentApps protected override ContentAppDefinitionCollectionBuilder This => this; // need to inject dependencies in the collection, so override creation - public override ContentAppDefinitionCollection CreateCollection() + public override ContentAppDefinitionCollection CreateCollection(IFactory factory) { // get the logger just-in-time - see note below for manifest parser - var logger = Container.GetInstance(); + var logger = factory.GetInstance(); - return new ContentAppDefinitionCollection(CreateItems(), logger); + return new ContentAppDefinitionCollection(CreateItems(factory), logger); } - protected override IEnumerable CreateItems() + protected override IEnumerable CreateItems(IFactory factory) { // get the manifest parser just-in-time - injecting it in the ctor would mean that // simply getting the builder in order to configure the collection, would require // its dependencies too, and that can create cycles or other oddities - var manifestParser = Container.GetInstance(); + var manifestParser = factory.GetInstance(); - return base.CreateItems().Concat(manifestParser.Manifest.ContentApps); + return base.CreateItems(factory).Concat(manifestParser.Manifest.ContentApps); } } } diff --git a/src/Umbraco.Web/Editors/DataTypeValidateAttribute.cs b/src/Umbraco.Web/Editors/DataTypeValidateAttribute.cs index 48bae14400..bbb9e22082 100644 --- a/src/Umbraco.Web/Editors/DataTypeValidateAttribute.cs +++ b/src/Umbraco.Web/Editors/DataTypeValidateAttribute.cs @@ -25,7 +25,7 @@ namespace Umbraco.Web.Editors public PropertyEditorCollection PropertyEditors { get; } public DataTypeValidateAttribute() - : this(Current.Container.GetInstance(), Current.Container.GetInstance()) + : this(Current.Factory.GetInstance(), Current.Factory.GetInstance()) { } diff --git a/src/Umbraco.Web/Editors/TourController.cs b/src/Umbraco.Web/Editors/TourController.cs index 5b3c3ab283..021daff423 100644 --- a/src/Umbraco.Web/Editors/TourController.cs +++ b/src/Umbraco.Web/Editors/TourController.cs @@ -23,7 +23,7 @@ namespace Umbraco.Web.Editors if (UmbracoConfig.For.UmbracoSettings().BackOffice.Tours.EnableTours == false) return result; - var filters = Current.Container.GetInstance().ToList(); // fixme inject + var filters = Current.Factory.GetInstance().ToList(); // fixme inject //get all filters that will be applied to all tour aliases var aliasOnlyFilters = filters.Where(x => x.PluginName == null && x.TourFileName == null).ToList(); diff --git a/src/Umbraco.Web/HtmlHelperRenderExtensions.cs b/src/Umbraco.Web/HtmlHelperRenderExtensions.cs index 11ef966a33..5183cd0c3c 100644 --- a/src/Umbraco.Web/HtmlHelperRenderExtensions.cs +++ b/src/Umbraco.Web/HtmlHelperRenderExtensions.cs @@ -7,13 +7,13 @@ using System.Web.Mvc; using System.Web.Mvc.Html; using System.Web.Routing; using Umbraco.Core; +using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.Exceptions; using Umbraco.Core.IO; -using Umbraco.Web.Composing; using Umbraco.Web.Mvc; using Umbraco.Web.Security; -using ContainerExtensions = Umbraco.Core.Composing.ContainerExtensions; +using Current = Umbraco.Web.Composing.Current; namespace Umbraco.Web { @@ -94,7 +94,7 @@ namespace Umbraco.Web } if (cacheByMember) { - var helper = ContainerExtensions.GetInstance(Current.Container); + var helper = RegisterExtensions.GetInstance(Current.Factory); var currentMember = helper.GetCurrentMember(); cacheKey.AppendFormat("m{0}-", currentMember == null ? 0 : currentMember.Id); } diff --git a/src/Umbraco.Web/Models/LoginStatusModel.cs b/src/Umbraco.Web/Models/LoginStatusModel.cs index 3d9a1090f9..5f9391dc7c 100644 --- a/src/Umbraco.Web/Models/LoginStatusModel.cs +++ b/src/Umbraco.Web/Models/LoginStatusModel.cs @@ -1,8 +1,8 @@ using System.ComponentModel.DataAnnotations; using Umbraco.Core; -using Umbraco.Web.Composing; +using Umbraco.Core.Composing; using Umbraco.Web.Security; -using ContainerExtensions = Umbraco.Core.Composing.ContainerExtensions; +using Current = Umbraco.Web.Composing.Current; namespace Umbraco.Web.Models { @@ -24,7 +24,7 @@ namespace Umbraco.Web.Models { if (doLookup && Current.UmbracoContext != null) { - var helper = ContainerExtensions.GetInstance(Current.Container); + var helper = RegisterExtensions.GetInstance(Current.Factory); var model = helper.GetCurrentLoginStatus(); if (model != null) { diff --git a/src/Umbraco.Web/Models/ProfileModel.cs b/src/Umbraco.Web/Models/ProfileModel.cs index 17ca54687e..a3c26812a3 100644 --- a/src/Umbraco.Web/Models/ProfileModel.cs +++ b/src/Umbraco.Web/Models/ProfileModel.cs @@ -3,10 +3,10 @@ using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Web.Mvc; -using Umbraco.Web.Composing; using Umbraco.Web.Security; using Umbraco.Core; -using ContainerExtensions = Umbraco.Core.Composing.ContainerExtensions; +using Umbraco.Core.Composing; +using Current = Umbraco.Web.Composing.Current; namespace Umbraco.Web.Models { @@ -28,7 +28,7 @@ namespace Umbraco.Web.Models MemberProperties = new List(); if (doLookup && Current.UmbracoContext != null) { - var helper = ContainerExtensions.GetInstance(Current.Container); + var helper = RegisterExtensions.GetInstance(Current.Factory); var model = helper.GetCurrentMemberProfileModel(); MemberProperties = model.MemberProperties; } diff --git a/src/Umbraco.Web/Models/RegisterModel.cs b/src/Umbraco.Web/Models/RegisterModel.cs index 76d02244b7..26c3d2428c 100644 --- a/src/Umbraco.Web/Models/RegisterModel.cs +++ b/src/Umbraco.Web/Models/RegisterModel.cs @@ -5,9 +5,9 @@ using System.ComponentModel.DataAnnotations; using System.Web; using System.Web.Mvc; using Umbraco.Core; -using Umbraco.Web.Composing; +using Umbraco.Core.Composing; using Umbraco.Web.Security; -using ContainerExtensions = Umbraco.Core.Composing.ContainerExtensions; +using Current = Umbraco.Web.Composing.Current; namespace Umbraco.Web.Models { @@ -32,7 +32,7 @@ namespace Umbraco.Web.Models CreatePersistentLoginCookie = true; if (doLookup && Current.UmbracoContext != null) { - var helper = ContainerExtensions.GetInstance(Current.Container); + var helper = RegisterExtensions.GetInstance(Current.Factory); var model = helper.CreateRegistrationModel(MemberTypeAlias); MemberProperties = model.MemberProperties; } diff --git a/src/Umbraco.Web/Mvc/ContainerControllerFactory.cs b/src/Umbraco.Web/Mvc/ContainerControllerFactory.cs index 74ac491df6..9262903355 100644 --- a/src/Umbraco.Web/Mvc/ContainerControllerFactory.cs +++ b/src/Umbraco.Web/Mvc/ContainerControllerFactory.cs @@ -7,9 +7,9 @@ namespace Umbraco.Web.Mvc { public class ContainerControllerFactory : DefaultControllerFactory { - private readonly IContainer _container; + private readonly IFactory _container; - public ContainerControllerFactory(IContainer container) + public ContainerControllerFactory(IFactory container) { _container = container; } diff --git a/src/Umbraco.Web/Mvc/EnsurePublishedContentRequestAttribute.cs b/src/Umbraco.Web/Mvc/EnsurePublishedContentRequestAttribute.cs index 8477fe9322..4c1c71a223 100644 --- a/src/Umbraco.Web/Mvc/EnsurePublishedContentRequestAttribute.cs +++ b/src/Umbraco.Web/Mvc/EnsurePublishedContentRequestAttribute.cs @@ -2,9 +2,9 @@ using System.Web.Mvc; using Umbraco.Web.Routing; using Umbraco.Core; +using Umbraco.Core.Composing; using Umbraco.Core.Models.PublishedContent; -using Umbraco.Web.Composing; -using ContainerExtensions = Umbraco.Core.Composing.ContainerExtensions; +using Current = Umbraco.Web.Composing.Current; namespace Umbraco.Web.Mvc { @@ -74,7 +74,7 @@ namespace Umbraco.Web.Mvc protected UmbracoContext UmbracoContext => _umbracoContext ?? (_umbracoContext = UmbracoContext.Current); // todo - try lazy property injection? - private PublishedRouter PublishedRouter => ContainerExtensions.GetInstance(Core.Composing.Current.Container); + private PublishedRouter PublishedRouter => RegisterExtensions.GetInstance(Core.Composing.Current.Factory); /// /// Exposes an UmbracoHelper diff --git a/src/Umbraco.Web/Mvc/MasterControllerFactory.cs b/src/Umbraco.Web/Mvc/MasterControllerFactory.cs index 30838e606a..6bc799baa5 100644 --- a/src/Umbraco.Web/Mvc/MasterControllerFactory.cs +++ b/src/Umbraco.Web/Mvc/MasterControllerFactory.cs @@ -22,7 +22,7 @@ namespace Umbraco.Web.Mvc /// /// The factories accessor. public MasterControllerFactory(Func factoriesAccessor) - : base(Current.Container) + : base(Current.Factory) { // note // because the MasterControllerFactory needs to be ctored to be assigned to diff --git a/src/Umbraco.Web/Mvc/PluginController.cs b/src/Umbraco.Web/Mvc/PluginController.cs index e82d7437e2..b8e1612b36 100644 --- a/src/Umbraco.Web/Mvc/PluginController.cs +++ b/src/Umbraco.Web/Mvc/PluginController.cs @@ -90,12 +90,12 @@ namespace Umbraco.Web.Mvc protected PluginController() : this( - Current.Container.GetInstance(), - Current.Container.GetInstance(), - Current.Container.GetInstance(), - Current.Container.GetInstance(), - Current.Container.GetInstance(), - Current.Container.GetInstance() + Current.Factory.GetInstance(), + Current.Factory.GetInstance(), + Current.Factory.GetInstance(), + Current.Factory.GetInstance(), + Current.Factory.GetInstance(), + Current.Factory.GetInstance() ) { } diff --git a/src/Umbraco.Web/Mvc/RenderRouteHandler.cs b/src/Umbraco.Web/Mvc/RenderRouteHandler.cs index fa52b102d4..5ab597c5ca 100644 --- a/src/Umbraco.Web/Mvc/RenderRouteHandler.cs +++ b/src/Umbraco.Web/Mvc/RenderRouteHandler.cs @@ -49,7 +49,7 @@ namespace Umbraco.Web.Mvc private UmbracoContext UmbracoContext => _umbracoContext ?? _umbracoContextAccessor.UmbracoContext; - private UmbracoFeatures Features => Current.Container.GetInstance(); // fixme inject + private UmbracoFeatures Features => Current.Factory.GetInstance(); // fixme inject #region IRouteHandler Members @@ -397,7 +397,7 @@ namespace Umbraco.Web.Mvc && routeDef.HasHijackedRoute == false) { // fixme - better find a way to inject that engine? or at least Current.Engine of some sort! - var engine = Core.Composing.Current.Container.GetInstance(); + var engine = Core.Composing.Current.Factory.GetInstance(); request.UpdateOnMissingTemplate(); // request will go 404 // HandleHttpResponseStatus returns a value indicating that the request should diff --git a/src/Umbraco.Web/Mvc/UmbracoController.cs b/src/Umbraco.Web/Mvc/UmbracoController.cs index a7dd23b1ea..5be543bd23 100644 --- a/src/Umbraco.Web/Mvc/UmbracoController.cs +++ b/src/Umbraco.Web/Mvc/UmbracoController.cs @@ -80,12 +80,12 @@ namespace Umbraco.Web.Mvc protected UmbracoController() : this( - Current.Container.GetInstance(), - Current.Container.GetInstance(), - Current.Container.GetInstance(), - Current.Container.GetInstance(), - Current.Container.GetInstance(), - Current.Container.GetInstance() + Current.Factory.GetInstance(), + Current.Factory.GetInstance(), + Current.Factory.GetInstance(), + Current.Factory.GetInstance(), + Current.Factory.GetInstance(), + Current.Factory.GetInstance() ) { } diff --git a/src/Umbraco.Web/Mvc/UmbracoControllerFactory.cs b/src/Umbraco.Web/Mvc/UmbracoControllerFactory.cs index 45ca1480c7..1c041d417c 100644 --- a/src/Umbraco.Web/Mvc/UmbracoControllerFactory.cs +++ b/src/Umbraco.Web/Mvc/UmbracoControllerFactory.cs @@ -68,7 +68,7 @@ namespace Umbraco.Web.Mvc internal class OverridenDefaultControllerFactory : ContainerControllerFactory { public OverridenDefaultControllerFactory() - : base(Current.Container) + : base(Current.Factory) { } public new IController GetControllerInstance(RequestContext requestContext, Type controllerType) diff --git a/src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs b/src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs index 7f9c07365a..b3449c245d 100644 --- a/src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs +++ b/src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs @@ -5,15 +5,15 @@ using System.Web.Mvc; using System.Web.WebPages; using Umbraco.Core; using Umbraco.Core.Cache; +using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.IO; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.Services; -using Umbraco.Web.Composing; using Umbraco.Web.Models; using Umbraco.Web.Routing; using Umbraco.Web.Security; -using ContainerExtensions = Umbraco.Core.Composing.ContainerExtensions; +using Current = Umbraco.Web.Composing.Current; namespace Umbraco.Web.Mvc { @@ -109,8 +109,8 @@ namespace Umbraco.Web.Mvc protected UmbracoViewPage() : this( - ContainerExtensions.GetInstance(Current.Container), - ContainerExtensions.GetInstance(Current.Container) + RegisterExtensions.GetInstance(Current.Factory), + RegisterExtensions.GetInstance(Current.Factory) ) { } diff --git a/src/Umbraco.Web/Mvc/UmbracoVirtualNodeRouteHandler.cs b/src/Umbraco.Web/Mvc/UmbracoVirtualNodeRouteHandler.cs index c4f5acde19..164fb7acf7 100644 --- a/src/Umbraco.Web/Mvc/UmbracoVirtualNodeRouteHandler.cs +++ b/src/Umbraco.Web/Mvc/UmbracoVirtualNodeRouteHandler.cs @@ -12,7 +12,7 @@ namespace Umbraco.Web.Mvc public abstract class UmbracoVirtualNodeRouteHandler : IRouteHandler { // todo - try lazy property injection? - private PublishedRouter PublishedRouter => Core.Composing.Current.Container.GetInstance(); + private PublishedRouter PublishedRouter => Core.Composing.Current.Factory.GetInstance(); /// /// Returns the UmbracoContext for this route handler diff --git a/src/Umbraco.Web/PublishedCache/NuCache/NuCacheComponent.cs b/src/Umbraco.Web/PublishedCache/NuCache/NuCacheComponent.cs index 0b0effcce9..0651ea1aed 100644 --- a/src/Umbraco.Web/PublishedCache/NuCache/NuCacheComponent.cs +++ b/src/Umbraco.Web/PublishedCache/NuCache/NuCacheComponent.cs @@ -1,5 +1,4 @@ using Umbraco.Core.Components; -using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Web.PublishedCache.NuCache.DataSource; @@ -12,11 +11,11 @@ namespace Umbraco.Web.PublishedCache.NuCache base.Compose(composition); // register the NuCache database data source - composition.Container.Register(); + composition.Register(); // register the NuCache published snapshot service // must register default options, required in the service ctor - composition.Container.Register(factory => new PublishedSnapshotService.Options()); + composition.Register(factory => new PublishedSnapshotService.Options()); composition.SetPublishedSnapshotService(); // add the NuCache health check (hidden from type finder) diff --git a/src/Umbraco.Web/Routing/PublishedRouter.cs b/src/Umbraco.Web/Routing/PublishedRouter.cs index 387ec8b579..bfaf9a8121 100644 --- a/src/Umbraco.Web/Routing/PublishedRouter.cs +++ b/src/Umbraco.Web/Routing/PublishedRouter.cs @@ -627,7 +627,7 @@ namespace Umbraco.Web.Routing { _logger.Debug("EnsurePublishedContentAccess: Page is protected, check for access"); - var membershipHelper = Current.Container.GetInstance(); + var membershipHelper = Current.Factory.GetInstance(); if (membershipHelper.IsLoggedIn() == false) { diff --git a/src/Umbraco.Web/Runtime/WebRuntime.cs b/src/Umbraco.Web/Runtime/WebRuntime.cs index 3e4d2c1c1f..d9283ce0d7 100644 --- a/src/Umbraco.Web/Runtime/WebRuntime.cs +++ b/src/Umbraco.Web/Runtime/WebRuntime.cs @@ -55,12 +55,10 @@ namespace Umbraco.Web.Runtime { base.Compose(composition); - var container = composition.Container; - // some components may want to initialize with the UmbracoApplicationBase // well, they should not - we should not do this // TODO remove this eventually. - container.RegisterInstance(_umbracoApplication); + composition.RegisterInstance(_umbracoApplication); } #region Getters diff --git a/src/Umbraco.Web/Runtime/WebRuntimeComponent.cs b/src/Umbraco.Web/Runtime/WebRuntimeComponent.cs index 25b14ecadf..29e2cc1058 100644 --- a/src/Umbraco.Web/Runtime/WebRuntimeComponent.cs +++ b/src/Umbraco.Web/Runtime/WebRuntimeComponent.cs @@ -64,11 +64,9 @@ namespace Umbraco.Web.Runtime { base.Compose(composition); - var container = composition.Container; + composition.Register(); - container.Register(); - - container.RegisterSingleton(); // required for hybrid accessors + composition.RegisterSingleton(); // required for hybrid accessors composition.ComposeWebMappingProfiles(); @@ -78,49 +76,49 @@ namespace Umbraco.Web.Runtime composition.ComposeInstaller(); // register membership stuff - container.Register(factory => Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider()); - container.Register(factory => Roles.Enabled ? Roles.Provider : new MembersRoleProvider(factory.GetInstance())); - container.Register(); + composition.Register(factory => Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider()); + composition.Register(factory => Roles.Enabled ? Roles.Provider : new MembersRoleProvider(factory.GetInstance())); + composition.Register(); // register accessors for cultures - container.RegisterSingleton(); - container.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); // register the http context and umbraco context accessors // we *should* use the HttpContextUmbracoContextAccessor, however there are cases when // we have no http context, eg when booting Umbraco or in background threads, so instead // let's use an hybrid accessor that can fall back to a ThreadStatic context. - container.RegisterSingleton(); + composition.RegisterSingleton(); // register a per-request HttpContextBase object // is per-request so only one wrapper is created per request - container.Register(factory => new HttpContextWrapper(factory.GetInstance().HttpContext), Lifetime.Request); + composition.Register(factory => new HttpContextWrapper(factory.GetInstance().HttpContext), Lifetime.Request); // register the published snapshot accessor - the "current" published snapshot is in the umbraco context - container.RegisterSingleton(); + composition.RegisterSingleton(); // we should stop injecting UmbracoContext and always inject IUmbracoContextAccessor, however at the moment // there are tons of places (controllers...) which require UmbracoContext in their ctor - so let's register // a way to inject the UmbracoContext - and register it per-request to be more efficient //TODO: stop doing this - container.Register(factory => factory.GetInstance().UmbracoContext, Lifetime.Request); + composition.Register(factory => factory.GetInstance().UmbracoContext, Lifetime.Request); // register the umbraco helper - container.RegisterSingleton(); + composition.RegisterSingleton(); // register distributed cache - container.RegisterSingleton(f => new DistributedCache()); + composition.RegisterSingleton(f => new DistributedCache()); // replace some services - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); - container.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); + composition.RegisterSingleton(); - container.RegisterSingleton(factory => ExamineManager.Instance); + composition.RegisterSingleton(factory => ExamineManager.Instance); // configure the container for web - container.ConfigureForWeb(); + composition.ConfigureForWeb(); composition .ComposeMvcControllers(GetType().Assembly) .ComposeApiControllers(GetType().Assembly); @@ -133,7 +131,7 @@ namespace Umbraco.Web.Runtime composition.GetCollectionBuilder(); - container.RegisterSingleton(); + composition.RegisterSingleton(); // set the default RenderMvcController Current.DefaultRenderMvcControllerType = typeof(RenderMvcController); // fixme WRONG! @@ -142,10 +140,10 @@ namespace Umbraco.Web.Runtime .Add(() => composition.TypeLoader.GetTypes()); var surfaceControllerTypes = new SurfaceControllerTypeCollection(composition.TypeLoader.GetSurfaceControllers()); - container.RegisterInstance(surfaceControllerTypes); + composition.RegisterInstance(surfaceControllerTypes); var umbracoApiControllerTypes = new UmbracoApiControllerTypeCollection(composition.TypeLoader.GetUmbracoApiControllers()); - container.RegisterInstance(umbracoApiControllerTypes); + composition.RegisterInstance(umbracoApiControllerTypes); // both TinyMceValueConverter (in Core) and RteMacroRenderingValueConverter (in Web) will be // discovered when CoreBootManager configures the converters. We HAVE to remove one of them @@ -167,7 +165,7 @@ namespace Umbraco.Web.Runtime .Append() .Append(); - container.RegisterSingleton(); + composition.RegisterSingleton(); composition.GetCollectionBuilder() // all built-in finders in the correct order, @@ -179,9 +177,9 @@ namespace Umbraco.Web.Runtime .Append() .Append(); - container.RegisterSingleton(); + composition.RegisterSingleton(); - container.RegisterSingleton(); + composition.RegisterSingleton(); // register *all* checks, except those marked [HideFromTypeFinder] of course composition.GetCollectionBuilder() @@ -191,17 +189,17 @@ namespace Umbraco.Web.Runtime .Add(() => composition.TypeLoader.GetTypes()); // auto-register views - container.RegisterAuto(typeof(UmbracoViewPage<>)); + composition.RegisterAuto(typeof(UmbracoViewPage<>)); // register published router - container.RegisterSingleton(); - container.Register(_ => UmbracoConfig.For.UmbracoSettings().WebRouting); + composition.RegisterSingleton(); + composition.Register(_ => UmbracoConfig.For.UmbracoSettings().WebRouting); // register preview SignalR hub - container.RegisterSingleton(_ => GlobalHost.ConnectionManager.GetHubContext()); + composition.RegisterSingleton(_ => GlobalHost.ConnectionManager.GetHubContext()); // register properties fallback - container.RegisterSingleton(); + composition.RegisterSingleton(); // register known content apps composition.GetCollectionBuilder() diff --git a/src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs b/src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs index 858692edc0..a73734fab8 100644 --- a/src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs +++ b/src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs @@ -72,7 +72,7 @@ namespace Umbraco.Web.Scheduling public static MainDomHook Create(Action install, Action release) { - return new MainDomHook(Core.Composing.Current.Container.GetInstance(), install, release); + return new MainDomHook(Core.Composing.Current.Factory.GetInstance(), install, release); } public static MainDomHook CreateForTest(Action install, Action release) diff --git a/src/Umbraco.Web/Security/WebSecurity.cs b/src/Umbraco.Web/Security/WebSecurity.cs index 4b2baf127d..18ef806ad1 100644 --- a/src/Umbraco.Web/Security/WebSecurity.cs +++ b/src/Umbraco.Web/Security/WebSecurity.cs @@ -53,7 +53,7 @@ namespace Umbraco.Web.Security { return false; } - var helper = Current.Container.GetInstance(); + var helper = Current.Factory.GetInstance(); return helper.IsMemberAuthorized(allowAll, allowTypes, allowGroups, allowMembers); } diff --git a/src/Umbraco.Web/SignalR/PreviewHubComponent.cs b/src/Umbraco.Web/SignalR/PreviewHubComponent.cs index d80eb05004..e0e47ca666 100644 --- a/src/Umbraco.Web/SignalR/PreviewHubComponent.cs +++ b/src/Umbraco.Web/SignalR/PreviewHubComponent.cs @@ -14,7 +14,7 @@ namespace Umbraco.Web.SignalR public override void Compose(Composition composition) { base.Compose(composition); - composition.Container.RegisterSingleton(_ => GlobalHost.ConnectionManager.GetHubContext()); + composition.RegisterSingleton(_ => GlobalHost.ConnectionManager.GetHubContext()); } // using a lazy arg here means that we won't create the hub until necessary diff --git a/src/Umbraco.Web/Templates/TemplateRenderer.cs b/src/Umbraco.Web/Templates/TemplateRenderer.cs index dca3c34ba8..282aef8a58 100644 --- a/src/Umbraco.Web/Templates/TemplateRenderer.cs +++ b/src/Umbraco.Web/Templates/TemplateRenderer.cs @@ -10,10 +10,10 @@ using Umbraco.Web.Models; using Umbraco.Web.Mvc; using Umbraco.Web.Routing; using umbraco; +using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.Services; -using Umbraco.Web.Composing; -using ContainerExtensions = Umbraco.Core.Composing.ContainerExtensions; +using Current = Umbraco.Web.Composing.Current; namespace Umbraco.Web.Templates { @@ -41,7 +41,7 @@ namespace Umbraco.Web.Templates } // todo - inject! - private PublishedRouter PublishedRouter => ContainerExtensions.GetInstance(Core.Composing.Current.Container); + private PublishedRouter PublishedRouter => RegisterExtensions.GetInstance(Core.Composing.Current.Factory); /// diff --git a/src/Umbraco.Web/Tour/TourFilterCollectionBuilder.cs b/src/Umbraco.Web/Tour/TourFilterCollectionBuilder.cs index c5d7f7eadd..0d2f605cb1 100644 --- a/src/Umbraco.Web/Tour/TourFilterCollectionBuilder.cs +++ b/src/Umbraco.Web/Tour/TourFilterCollectionBuilder.cs @@ -15,9 +15,9 @@ namespace Umbraco.Web.Tour private readonly HashSet _instances = new HashSet(); /// - protected override IEnumerable CreateItems(/*params object[] args*/) + protected override IEnumerable CreateItems(IFactory factory) { - return base.CreateItems(/*args*/).Concat(_instances); + return base.CreateItems(factory).Concat(_instances); } /// diff --git a/src/Umbraco.Web/UI/Controls/UmbracoUserControl.cs b/src/Umbraco.Web/UI/Controls/UmbracoUserControl.cs index e1c81d9a35..e04952b2e6 100644 --- a/src/Umbraco.Web/UI/Controls/UmbracoUserControl.cs +++ b/src/Umbraco.Web/UI/Controls/UmbracoUserControl.cs @@ -2,12 +2,12 @@ using System.Web.Mvc; using System.Web.UI; using Umbraco.Core.Cache; +using Umbraco.Core.Composing; using Umbraco.Core.Logging; using Umbraco.Core.Services; -using Umbraco.Web.Composing; using Umbraco.Web.Security; using Umbraco.Web.UI.Pages; -using ContainerExtensions = Umbraco.Core.Composing.ContainerExtensions; +using Current = Umbraco.Web.Composing.Current; namespace Umbraco.Web.UI.Controls { @@ -30,7 +30,7 @@ namespace Umbraco.Web.UI.Controls if (umbracoContext == null) throw new ArgumentNullException(nameof(umbracoContext)); UmbracoContext = umbracoContext; Umbraco = new UmbracoHelper(umbracoContext, services, appCache); - Members = ContainerExtensions.GetInstance(Current.Container); + Members = RegisterExtensions.GetInstance(Current.Factory); // fixme inject somehow Logger = Current.Logger; diff --git a/src/Umbraco.Web/UmbracoContext.cs b/src/Umbraco.Web/UmbracoContext.cs index 8ee5910bae..57f2adbaa4 100644 --- a/src/Umbraco.Web/UmbracoContext.cs +++ b/src/Umbraco.Web/UmbracoContext.cs @@ -115,7 +115,7 @@ namespace Umbraco.Web UmbracoConfig.For.UmbracoSettings(), Composing.Current.UrlProviders, UmbracoConfig.For.GlobalSettings(), - Composing.Current.Container.GetInstance(), + Composing.Current.Factory.GetInstance(), true); // when the context will be disposed, it will be removed from the accessor diff --git a/src/Umbraco.Web/UmbracoHelper.cs b/src/Umbraco.Web/UmbracoHelper.cs index 6e5a25e867..8fcbb040b5 100644 --- a/src/Umbraco.Web/UmbracoHelper.cs +++ b/src/Umbraco.Web/UmbracoHelper.cs @@ -10,11 +10,11 @@ using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.Services; using Umbraco.Core.Xml; -using Umbraco.Web.Composing; using Umbraco.Core.Cache; +using Umbraco.Core.Composing; using Umbraco.Web.Routing; using Umbraco.Web.Security; -using ContainerExtensions = Umbraco.Core.Composing.ContainerExtensions; +using Current = Umbraco.Web.Composing.Current; namespace Umbraco.Web { @@ -156,7 +156,7 @@ namespace Umbraco.Web /// Gets the membership helper. /// public MembershipHelper MembershipHelper => _membershipHelper - ?? (_membershipHelper = ContainerExtensions.GetInstance(Current.Container)); + ?? (_membershipHelper = RegisterExtensions.GetInstance(Current.Factory)); /// /// Gets the url provider. diff --git a/src/Umbraco.Web/WebApi/Filters/FeatureAuthorizeAttribute.cs b/src/Umbraco.Web/WebApi/Filters/FeatureAuthorizeAttribute.cs index df5f1a58c4..d7bc311941 100644 --- a/src/Umbraco.Web/WebApi/Filters/FeatureAuthorizeAttribute.cs +++ b/src/Umbraco.Web/WebApi/Filters/FeatureAuthorizeAttribute.cs @@ -20,7 +20,7 @@ namespace Umbraco.Web.WebApi.Filters public FeatureAuthorizeAttribute() { // attributes have to use Current.Container - _features = Current.Container?.TryGetInstance(); + _features = Current.Factory?.TryGetInstance(); } protected override bool IsAuthorized(HttpActionContext actionContext) diff --git a/src/Umbraco.Web/WebApi/UmbracoApiController.cs b/src/Umbraco.Web/WebApi/UmbracoApiController.cs index b35516b59d..4f2934abf4 100644 --- a/src/Umbraco.Web/WebApi/UmbracoApiController.cs +++ b/src/Umbraco.Web/WebApi/UmbracoApiController.cs @@ -14,12 +14,10 @@ namespace Umbraco.Web.WebApi public abstract class UmbracoApiController : UmbracoApiControllerBase, IDiscoverable { protected UmbracoApiController() - { - } + { } protected UmbracoApiController(IGlobalSettings globalSettings, UmbracoContext umbracoContext, ISqlContext sqlContext, ServiceContext services, CacheHelper applicationCache, ILogger logger, IProfilingLogger profilingLogger, IRuntimeState runtimeState) : base(globalSettings, umbracoContext, sqlContext, services, applicationCache, logger, profilingLogger, runtimeState) - { - } + { } } } diff --git a/src/Umbraco.Web/WebApi/UmbracoApiControllerBase.cs b/src/Umbraco.Web/WebApi/UmbracoApiControllerBase.cs index 2e5e4b81c3..27b06ee767 100644 --- a/src/Umbraco.Web/WebApi/UmbracoApiControllerBase.cs +++ b/src/Umbraco.Web/WebApi/UmbracoApiControllerBase.cs @@ -26,14 +26,6 @@ namespace Umbraco.Web.WebApi // for debugging purposes internal Guid InstanceId { get; } = Guid.NewGuid(); - // note - // properties marked as [Inject] below will be property-injected (vs constructor-injected) in - // order to keep the constuctor as light as possible, so that ppl implementing eg a SurfaceController - // don't need to implement complex constructors + need to refactor them each time we change ours. - // this means that these properties have a setter. - // what can go wrong? - // fixme remove that comment?! - /// /// Gets or sets the Umbraco context. /// @@ -97,19 +89,21 @@ namespace Umbraco.Web.WebApi protected UmbracoApiControllerBase() : this( - Current.Container.GetInstance(), - Current.Container.GetInstance(), - Current.Container.GetInstance(), - Current.Container.GetInstance(), - Current.Container.GetInstance(), - Current.Container.GetInstance(), - Current.Container.GetInstance(), - Current.Container.GetInstance() + Current.Factory.GetInstance(), + Current.Factory.GetInstance().UmbracoContext, + Current.Factory.GetInstance(), + Current.Factory.GetInstance(), + Current.Factory.GetInstance(), + Current.Factory.GetInstance(), + Current.Factory.GetInstance(), + Current.Factory.GetInstance() ) { } // fixme - Inject fewer things? (Aggregate more) + // fixme - inject the context accessor not the context itself? + // fixme - profiling logger is logger, merge! protected UmbracoApiControllerBase(IGlobalSettings globalSettings, UmbracoContext umbracoContext, ISqlContext sqlContext, ServiceContext services, CacheHelper applicationCache, ILogger logger, IProfilingLogger profilingLogger, IRuntimeState runtimeState) { GlobalSettings = globalSettings;