services:
  _defaults:
    public: false

  # Twig loader to allow embedding templates with a component identifier.
  # Note that this service name is not guaranteed to remain the same once this
  # module is out of the experimental phase.
  Drupal\sdc\Twig\TwigComponentLoader:
    arguments:
      - '@plugin.manager.sdc'
      - '@logger.channel.default'
    tags:
      - { name: twig.loader, priority: 5 }

  # Note that this service name is not guaranteed to remain the same once this
  # module is out of the experimental phase.
  Drupal\sdc\ComponentNegotiator:
    arguments:
      - '@theme.manager'
      - '@extension.list.module'

  # Note that this service name is not guaranteed to remain the same once this
  # module is out of the experimental phase.
  Drupal\sdc\Twig\TwigExtension:
    arguments:
      - '@plugin.manager.sdc'
      - '@Drupal\sdc\Component\ComponentValidator'
    tags:
      - { name: twig.extension }

  # This service is part of the module's API and it's guaranteed to have the
  # same name once the module is stable.
  plugin.manager.sdc:
    public: true
    class: Drupal\sdc\ComponentPluginManager
    arguments:
      - '@module_handler'
      - '@theme_handler'
      - '@cache.discovery'
      - '@config.factory'
      - '@theme.manager'
      - '@Drupal\sdc\ComponentNegotiator'
      - '@file_system'
      - '@Drupal\sdc\Component\SchemaCompatibilityChecker'
      - '@Drupal\sdc\Component\ComponentValidator'
      - '%app.root%'

  # Note that this service name is not guaranteed to remain the same once this
  # module is out of the experimental phase.
  Drupal\sdc\Component\SchemaCompatibilityChecker: {}

  # Note that this service name is not guaranteed to remain the same once this
  # module is out of the experimental phase.
  Drupal\sdc\Component\ComponentValidator:
    calls:
      - [setValidator, []]
