protected function registerActiveExtensions(): void
    {
        $available = $this->memory->get('extensions.available', []);
        $active = $this->memory->get('extensions.active', []);

        // Loop all active extension and merge the configuration with
        // available config. Extension registration is handled by dispatcher
        // process due to complexity of extension boot process.

        Collection::make($active)->filter(function ($options, $name) use ($available) {
            return isset($available[$name]);
        })->map(function ($options, $name) use ($available) {
            $options['config'] = \array_merge(
                (array) $available[$name]['config'] ?? [],
                (array) $options['config'] ?? []
            );

            return $options;
        })->each(function ($options, $name) {
            $this->extensions->put($name, $options);
            $this->dispatcher->register($name, $options);
        });
    }