Chris@18: parameters: Chris@18: jsonapi.base_path: /jsonapi Chris@18: Chris@18: services: Chris@18: jsonapi.serializer: Chris@18: class: Drupal\jsonapi\Serializer\Serializer Chris@18: calls: Chris@18: - [setFallbackNormalizer, ['@serializer']] Chris@18: arguments: [{ }, { }] Chris@18: serializer.normalizer.http_exception.jsonapi: Chris@18: class: Drupal\jsonapi\Normalizer\HttpExceptionNormalizer Chris@18: arguments: ['@current_user'] Chris@18: tags: Chris@18: - { name: jsonapi_normalizer } Chris@18: serializer.normalizer.unprocessable_entity_exception.jsonapi: Chris@18: class: Drupal\jsonapi\Normalizer\UnprocessableHttpEntityExceptionNormalizer Chris@18: arguments: ['@current_user'] Chris@18: tags: Chris@18: # This must have a higher priority than the 'serializer.normalizer.http_exception.jsonapi' to take effect. Chris@18: - { name: jsonapi_normalizer, priority: 1 } Chris@18: serializer.normalizer.entity_access_exception.jsonapi: Chris@18: class: Drupal\jsonapi\Normalizer\EntityAccessDeniedHttpExceptionNormalizer Chris@18: arguments: ['@current_user'] Chris@18: tags: Chris@18: # This must have a higher priority than the 'serializer.normalizer.http_exception.jsonapi' to take effect. Chris@18: - { name: jsonapi_normalizer, priority: 1 } Chris@18: serializer.normalizer.field_item.jsonapi: Chris@18: class: Drupal\jsonapi\Normalizer\FieldItemNormalizer Chris@18: arguments: ['@entity_type.manager'] Chris@18: tags: Chris@18: - { name: jsonapi_normalizer } Chris@18: serializer.normalizer.field.jsonapi: Chris@18: class: Drupal\jsonapi\Normalizer\FieldNormalizer Chris@18: tags: Chris@18: - { name: jsonapi_normalizer } Chris@18: serializer.normalizer.resource_identifier.jsonapi: Chris@18: class: Drupal\jsonapi\Normalizer\ResourceIdentifierNormalizer Chris@18: arguments: ['@entity_field.manager'] Chris@18: tags: Chris@18: - { name: jsonapi_normalizer } Chris@18: serializer.normalizer.data.jsonapi: Chris@18: class: Drupal\jsonapi\Normalizer\DataNormalizer Chris@18: tags: Chris@18: - { name: jsonapi_normalizer } Chris@18: serializer.normalizer.resource_object.jsonapi: Chris@18: class: Drupal\jsonapi\Normalizer\ResourceObjectNormalizer Chris@18: tags: Chris@18: - { name: jsonapi_normalizer } Chris@18: serializer.normalizer.content_entity.jsonapi: Chris@18: class: Drupal\jsonapi\Normalizer\ContentEntityDenormalizer Chris@18: arguments: ['@entity_type.manager', '@entity_field.manager', '@plugin.manager.field.field_type'] Chris@18: tags: Chris@18: - { name: jsonapi_normalizer } Chris@18: serializer.normalizer.config_entity.jsonapi: Chris@18: class: Drupal\jsonapi\Normalizer\ConfigEntityDenormalizer Chris@18: arguments: ['@entity_type.manager', '@entity_field.manager', '@plugin.manager.field.field_type'] Chris@18: tags: Chris@18: - { name: jsonapi_normalizer } Chris@18: serializer.normalizer.jsonapi_document_toplevel.jsonapi: Chris@18: class: Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer Chris@18: arguments: ['@entity_type.manager', '@jsonapi.resource_type.repository'] Chris@18: tags: Chris@18: - { name: jsonapi_normalizer } Chris@18: serializer.normalizer.link_collection.jsonapi: Chris@18: class: Drupal\jsonapi\Normalizer\LinkCollectionNormalizer Chris@18: tags: Chris@18: - { name: jsonapi_normalizer } Chris@18: serializer.normalizer.entity_reference_field.jsonapi: Chris@18: class: Drupal\jsonapi\Normalizer\EntityReferenceFieldNormalizer Chris@18: tags: Chris@18: # This must have a higher priority than the 'serializer.normalizer.field.jsonapi' to take effect. Chris@18: - { name: jsonapi_normalizer, priority: 1 } Chris@18: serializer.encoder.jsonapi: Chris@18: class: Drupal\jsonapi\Encoder\JsonEncoder Chris@18: tags: Chris@18: - { name: jsonapi_encoder, format: 'api_json' } Chris@18: jsonapi.resource_type.repository: Chris@18: class: Drupal\jsonapi\ResourceType\ResourceTypeRepository Chris@18: arguments: ['@entity_type.manager', '@entity_type.bundle.info', '@entity_field.manager', '@cache.jsonapi_resource_types'] Chris@18: jsonapi.route_enhancer: Chris@18: class: Drupal\jsonapi\Routing\RouteEnhancer Chris@18: tags: Chris@18: - { name: route_enhancer } Chris@18: jsonapi.field_resolver: Chris@18: class: Drupal\jsonapi\Context\FieldResolver Chris@18: arguments: ['@entity_type.manager', '@entity_field.manager', '@entity_type.bundle.info', '@jsonapi.resource_type.repository', '@module_handler'] Chris@18: jsonapi.include_resolver: Chris@18: class: Drupal\jsonapi\IncludeResolver Chris@18: arguments: Chris@18: - '@entity_type.manager' Chris@18: - '@jsonapi.entity_access_checker' Chris@18: paramconverter.jsonapi.entity_uuid: Chris@18: parent: paramconverter.entity Chris@18: class: Drupal\jsonapi\ParamConverter\EntityUuidConverter Chris@18: calls: Chris@18: - [setLanguageManager, ['@language_manager']] Chris@18: tags: Chris@18: # Priority 10, to ensure it runs before @paramconverter.entity. Chris@18: - { name: paramconverter, priority: 10 } Chris@18: paramconverter.jsonapi.resource_type: Chris@18: class: Drupal\jsonapi\ParamConverter\ResourceTypeConverter Chris@18: arguments: ['@jsonapi.resource_type.repository'] Chris@18: tags: Chris@18: - { name: paramconverter } Chris@18: jsonapi.exception_subscriber: Chris@18: class: Drupal\jsonapi\EventSubscriber\DefaultExceptionSubscriber Chris@18: tags: Chris@18: - { name: event_subscriber } Chris@18: arguments: ['@jsonapi.serializer', '%serializer.formats%'] Chris@18: Chris@18: logger.channel.jsonapi: Chris@18: parent: logger.channel_base Chris@18: arguments: ['jsonapi'] Chris@18: Chris@18: # Cache. Chris@18: cache.jsonapi_resource_types: Chris@18: class: Drupal\Core\Cache\MemoryCache\MemoryCache Chris@18: # We need this to add this to the Drupal's cache_tags.invalidator service. Chris@18: # This way it can invalidate the data in here based on tags. Chris@18: tags: [{ name: cache.bin }] Chris@18: Chris@18: # Route filter. Chris@18: jsonapi.route_filter.format_setter: Chris@18: class: Drupal\jsonapi\Routing\EarlyFormatSetter Chris@18: tags: Chris@18: # Set to a high priority so it runs before content_type_header_matcher Chris@18: # and other filters that might throw exceptions. Chris@18: - { name: route_filter, priority: 100 } Chris@18: Chris@18: # Access Control Chris@18: jsonapi.entity_access_checker: Chris@18: class: Drupal\jsonapi\Access\EntityAccessChecker Chris@18: public: false Chris@18: arguments: ['@jsonapi.resource_type.repository', '@router.no_access_checks', '@current_user', '@entity.repository'] Chris@18: calls: Chris@18: - [setNodeRevisionAccessCheck, ['@?access_check.node.revision']] # This is only injected when the service is available. Chris@18: - [setMediaRevisionAccessCheck, ['@?access_check.media.revision']] # This is only injected when the service is available. Chris@18: # This is a temporary measure. JSON:API should not need to be aware of the Content Moderation module. Chris@18: - [setLatestRevisionCheck, ['@?access_check.latest_revision']] # This is only injected when the service is available. Chris@18: access_check.jsonapi.relationship_field_access: Chris@18: class: Drupal\jsonapi\Access\RelationshipFieldAccess Chris@18: arguments: ['@jsonapi.entity_access_checker'] Chris@18: tags: Chris@18: - { name: access_check, applies_to: _jsonapi_relationship_field_access, needs_incoming_request: TRUE } Chris@18: Chris@18: # Route filters. Chris@18: method_filter.jsonapi: Chris@18: public: false Chris@18: class: Drupal\jsonapi\Routing\ReadOnlyModeMethodFilter Chris@18: decorates: method_filter Chris@18: arguments: ['@method_filter.jsonapi.inner', '@config.factory'] Chris@18: Chris@18: # Controller. Chris@18: jsonapi.entity_resource: Chris@18: class: Drupal\jsonapi\Controller\EntityResource Chris@18: arguments: Chris@18: - '@entity_type.manager' Chris@18: - '@entity_field.manager' Chris@18: - '@jsonapi.resource_type.repository' Chris@18: - '@renderer' Chris@18: - '@entity.repository' Chris@18: - '@jsonapi.include_resolver' Chris@18: - '@jsonapi.entity_access_checker' Chris@18: - '@jsonapi.field_resolver' Chris@18: - '@jsonapi.serializer' Chris@18: - '@datetime.time' Chris@18: - '@current_user' Chris@18: jsonapi.file_upload: Chris@18: class: Drupal\jsonapi\Controller\FileUpload Chris@18: arguments: Chris@18: - '@current_user' Chris@18: - '@entity_field.manager' Chris@18: - '@jsonapi.file.uploader.field' Chris@18: - '@http_kernel' Chris@18: Chris@18: # Event subscribers. Chris@18: jsonapi.custom_query_parameter_names_validator.subscriber: Chris@18: class: Drupal\jsonapi\EventSubscriber\JsonApiRequestValidator Chris@18: tags: Chris@18: - { name: event_subscriber } Chris@18: jsonapi.resource_response.subscriber: Chris@18: class: Drupal\jsonapi\EventSubscriber\ResourceResponseSubscriber Chris@18: arguments: ['@jsonapi.serializer'] Chris@18: tags: Chris@18: - { name: event_subscriber } Chris@18: jsonapi.resource_response_validator.subscriber: Chris@18: class: Drupal\jsonapi\EventSubscriber\ResourceResponseValidator Chris@18: arguments: ['@jsonapi.serializer', '@logger.channel.jsonapi', '@module_handler', '@app.root'] Chris@18: calls: Chris@18: - [setValidator, []] Chris@18: tags: Chris@18: - { name: event_subscriber, priority: 1000 } Chris@18: Chris@18: # Revision management. Chris@18: jsonapi.version_negotiator: Chris@18: class: Drupal\jsonapi\Revisions\VersionNegotiator Chris@18: public: false Chris@18: tags: Chris@18: - { name: service_collector, tag: jsonapi_version_negotiator, call: addVersionNegotiator } Chris@18: jsonapi.version_negotiator.default: Chris@18: arguments: ['@entity_type.manager'] Chris@18: public: false Chris@18: abstract: true Chris@18: jsonapi.version_negotiator.id: Chris@18: class: Drupal\jsonapi\Revisions\VersionById Chris@18: parent: jsonapi.version_negotiator.default Chris@18: tags: Chris@18: - { name: jsonapi_version_negotiator, negotiator_name: 'id' } Chris@18: jsonapi.version_negotiator.rel: Chris@18: class: Drupal\jsonapi\Revisions\VersionByRel Chris@18: parent: jsonapi.version_negotiator.default Chris@18: tags: Chris@18: - { name: jsonapi_version_negotiator, negotiator_name: 'rel' } Chris@18: jsonapi.resource_version.route_enhancer: Chris@18: class: Drupal\jsonapi\Revisions\ResourceVersionRouteEnhancer Chris@18: public: false Chris@18: arguments: Chris@18: - '@jsonapi.version_negotiator' Chris@18: tags: Chris@18: - { name: route_enhancer } Chris@18: Chris@18: # Deprecated services. Chris@18: serializer.normalizer.htt_exception.jsonapi: Chris@18: alias: serializer.normalizer.http_exception.jsonapi Chris@18: deprecated: The "%service_id%" service is deprecated. You should use the 'serializer.normalizer.http_exception.jsonapi' service instead. Chris@18: Chris@18: # @todo Remove once https://www.drupal.org/project/drupal/issues/2940383 lands. Chris@18: jsonapi.file.uploader.field: Chris@18: class: Drupal\jsonapi\Controller\TemporaryJsonapiFileFieldUploader Chris@18: public: false Chris@18: arguments: ['@logger.channel.file', '@file_system', '@file.mime_type.guesser', '@token', '@lock', '@config.factory']