Problem/Motivation

See #2825487-128: Fix normalization of File entities: file entities should expose the file URL as a computed property on the 'uri' base field:

[This patch] fixes it for File entities, NOT file fields! That was the original scope of the issue. The problem to this day, however, is that you cannot get the URL for a File entity at all. And file fields always
point to a File entity. Therefore, I think changing the normalization of file fields (by adding a computed property to file fields) is a nice-to-have follow-up. This current scope of the patch is the must-have. The current patch allows one to follow a file field's reference to a File entity, get the File entity, and in there the file URL can be found.

This is that nice-to-have follow-up issue.

Proposed resolution

Remaining tasks

User interface changes

API changes

Data model changes

Comments

Wim Leers created an issue. See original summary.

wim leers’s picture

Title: [PP-1] Consider adding a computed 'url' property to FileItem » [PP-1] Consider adding a computed 'url' property to FileItem (for exposing file URL in file field normalization)
berdir’s picture

This reminds me of my idea somewhere to automatically expose the entity label of a reference field in a REST response.

Of course, that again reminds my of my recent argument that adding computed properties to field types isn't free.. it results in always instantiating a class (a plugin, going through typed data manager/factory and so on) currently, even when it is not accessed.

wim leers’s picture

This reminds me of my idea somewhere to automatically expose the entity label of a reference field in a REST response.

Yep, I turned that idea in a comment of yours into an actual issue: #2913518: Expose labels of referenced entities 😀

Of course, that again reminds my of my recent argument that adding computed properties to field types isn't free.. it results in always instantiating a class (a plugin, going through typed data manager/factory and so on) currently, even when it is not accessed.

  1. Is the performance impact of this so bad?
  2. This sounds totally fixable? (i.e. making computed properties also support lazy instantiation)
wim leers’s picture

Title: [PP-1] Consider adding a computed 'url' property to FileItem (for exposing file URL in file field normalization) » [PP-1] Add a computed 'url' property to FileItem (for exposing file URL in file field normalization)

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.0-alpha1 will be released the week of January 17, 2018, which means new developments and disruptive changes should now be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

wim leers’s picture

Title: [PP-1] Add a computed 'url' property to FileItem (for exposing file URL in file field normalization) » Add a computed 'url' property to FileItem (for exposing file URL in file field normalization)
Status: Postponed » Active
tedbow’s picture

Ok I am kind of confused with the issue summary.

We could add a 'url' property to \Drupal\file\Plugin\Field\FieldType\FileItem::propertyDefinitions

But I am pretty sure this would be overwritten in normalization because in \Drupal\serialization\Normalizer\EntityReferenceFieldItemNormalizer::normalize

if ($url = $entity->url('canonical')) {
        $values['url'] = $url;
      }

So this would overwrite any 'url' property, correct?

Is 'url' what this issue was meant for adding anyways?
Here is the output I get already:

"field_file": [
{
"target_id": 1,
"display": true,
"description": "",
"target_type": "file",
"target_uuid": "93eba630-9208-4219-91a6-bc1895087c98",
"url": "http://drupal.test/d8/sites/default/files/2018-02/interdiff-5-6.txt"
}
],
"field_private_file": [
{
"target_id": 2,
"display": true,
"description": "",
"target_type": "file",
"target_uuid": "cd4db23d-2c82-4a1d-9566-68ae45690368",
"url": "http://drupal.test/d8/system/files/2018-02/interdiff-61-64.txt"
}
]

So do we still need this issue?

berdir’s picture

Hm, interesting problem.

The thing is that url is using the deprecated url() method. And only that url method returns the return to the physical file as it does not actually have a canonical link template. So if we'd at the same time convert it to use toUrl() if there is a canonical link template, then it would continue to work as-is for files and other entity types and we would not result a change while getting rid of the deprecated all and custom override of file entity.

The only problem is when combining with file_entity which does add a canonical link template, then we'd end up with overwriting it again. What if we expose this as file_url? Means we can't remove the deprecated call for file, but we could officially deprecate it, possibly with a hidden setting like other things we did?

tedbow’s picture

What if we expose this as file_url? Means we can't remove the deprecated call for file, but we could officially deprecate it, possibly with a hidden setting like other things we did?

So if we did this the REST response for FileItems would have

  1. 'url' which is from \Drupal\serialization\Normalizer\EntityReferenceFieldItemNormalizer::normalize()
  2. 'file_url' which is from the new computed field added in \Drupal\file\Plugin\Field\FieldType\FileItem::propertyDefinitions()

So without File Entity installed these would both be the same value? It seems like that would be confusing to consumers. How would they they know which one to use?

berdir’s picture

'url' for file entities would only be exposed anymore if serialization.settings:bc_expose_file_item_url (or something like that) would be set, which like other settings, would only be set to TRUE by default on existing installations.

wim leers’s picture

So this would overwrite any 'url' property, correct?

Hm, interesting problem.

Indeed… 🤐

This time, it's not #2402533: Provide File::createFileUrl() as a replacement for the deprecated File:url() implementation that gets in the way, but the default Drupal normalization.

[…] if there is a canonical link template, then it would continue to work as-is for files and other entity types and we would not result a change while getting rid of the deprecated all and custom override of file entity.

This sounds splendid.

The only problem is when combining with file_entity which does add a canonical link template, then we'd end up with overwriting it again.

Can't you do a pre-emptive release of file_entity for 8.5.x that detects the Drupal core version and if so, behaves differently on 8.6, to account for this change landing in Drupal 8.6? Because the file_entity module is filling a gap in Drupal core. Once core no longer has that gap, the need for the file_entity module disappears (I know the module does much more than only providing a canonical route though.) This is similar to how the jsonapi module was (and still is) adding a computed url field: Drupal 8.5 is shipping with the fix for that, so the need for the JSON API-specific work-around disappears. So the module needs to adapt (and it has to do/maintain less 🎉).
Just trying to propose a pragmatic approach with long-term, slow evolution here.

What if we expose this as file_url?

I can live with that.

So without File Entity installed these would both be the same value? It seems like that would be confusing to consumers. How would they they know which one to use?

Right, the unfortunate thing is that #2277705: Files don't have URI nor href introduced a hacky work-around rather than solving the root of the problem (which this issue is solving).

I think as part of this issue, we should remove \Drupal\file\Entity\File::url() (i.e. revert #2277705: Files don't have URI nor href). But of course, there are BC implications to that :( That's what #2402533: Provide File::createFileUrl() as a replacement for the deprecated File:url() implementation is trying to deal with. Also see #2922487-19: Follow-up for #2910211: fix all deprecation warnings — we have to fix the deprecation warnings in the REST module, but to do so, we have to solve the whole File::url() problem. Because \Drupal\serialization\Normalizer\EntityReferenceFieldItemNormalizer::normalize() is triggering a deprecation warning by calling the deprecated EntityInterface::url() method, but we need to call that to not break BC for File! It's tough.

'url' for file entities would only be exposed anymore if […]

You meant file_url for file fields, right?

wim leers’s picture

berdir’s picture

Can't you do a pre-emptive release of file_entity for 8.5.x that detects the Drupal core version and if so, behaves differently on 8.6, to account for this change landing in Drupal 8.6? Because the file_entity module is filling a gap in Drupal core. Once core no longer has that gap, the need for the file_entity module disappears (I know the module does much more than only providing a canonical route though.)

Behave differently how? file_entity really *has* a canonical link template, at /file/ID, which is where you can view the file entity just like you can view a node at /node/ID, with the fields.

If we go with file_url then this becomes a non-issue.

Also, I think file_entity should really be officially marked as deprecated now in favor of media, but it will not go away any time soon.

I think as part of this issue, we should remove \Drupal\file\Entity\File::url() (i.e. revert #2277705: Files don't have URI nor href). But of course, there are BC implications to that :(

As (I think?) I already wrote, the thing is that url() already *is* deprecated. We don't need to remove it now, we can just let it stay a behavior specific to url(), which will be removed in in 9.x, and mark #2402533: Provide File::createFileUrl() as a replacement for the deprecated File:url() implementation as a won't fix.

The harder part is indeed getting rid of the call in the normalizer. That's what I meant with:

> Means we can't remove the deprecated call for file, but we could officially deprecate it, possibly with a hidden setting like other things we did?

By setting, I mean we would add another bc setting to serializer that would skip that call, similar to hal.settings:bc_file_uri_as_url_normalizer (that's why I would have liked to put both behind the same setting, as they are closely related, now we need two different settings).

So as usual with those things, existing sites continue to export url and file_url as the same thing. New sites only expose file_url. If you install file_entity, you also get the url as a real canonical link.

wim leers’s picture

Sorry for the confusion!

By setting, I mean we would add another bc setting to serializer that would skip that call, similar to hal.settings:bc_file_uri_as_url_normalizer

Ahh! I definitely didn't catch that, sorry! Do you mean it'd only skip that call for the File entity type?

wim leers’s picture

Title: Add a computed 'url' property to FileItem (for exposing file URL in file field normalization) » Add a computed 'file_url' property to FileItem (for exposing file URL in file field normalization)
Status: Active » Needs review
StatusFileSize
new1.07 KB

So, something like this. (Just meant to be a starting point.)

berdir’s picture

> Do you mean it'd only skip that call for the File entity type?

I think we'd simply make it trigger using toUrl()->toString() instead of url(), which would then automatically no longer call the special url() method on file entity. So no, it would not be specific, we need to get rid of that call for all entity types.

Not sure if we want to name it specifically about file entity or something more generic.

Status: Needs review » Needs work

The last submitted patch, 19: 2925520-19.patch, failed testing. View results

Version: 8.6.x-dev » 8.7.x-dev

Drupal 8.6.0-alpha1 will be released the week of July 16, 2018, which means new developments and disruptive changes should now be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.7.x-dev » 8.8.x-dev

Drupal 8.7.0-alpha1 will be released the week of March 11, 2019, which means new developments and disruptive changes should now be targeted against the 8.8.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

berdir’s picture

StatusFileSize
new3.7 KB

Re #19, yes basically that, but ComputedFileUri is specifically for the file uri base field and gets it from the field parent, while here we want to get it from the referenced entity in the file, small but important difference (->entity vs. getEntity(), yes I know how confusing this is). So I had to add a second class.

Working on the test fails, we've made a bit of a mess.

So in #3009854: Fix "The "serializer.normalizer.file_entity.hal" normalizer service is deprecated: it is obsolete, it only remains available for backwards compatibility." deprecation error, I pointed out that there is no file url left after that change. That is correct, but it's only correct for hal_json I believe, "regular json" has a fallback in \Drupal\serialization\Normalizer\EntityReferenceFieldItemNormalizer::normalize(), but that doesn't apply to hal_json. Yes, I totally get the irony that this is the point that Wim always makes and I'm reluctant about (adding everything on the typed data level instead of normalization because then it works for all formats).

The relevant code was changed in #2922487: Follow-up for #2910211: fix all deprecation warnings but it was kept like that as it was before for BC, and it has a @todo pointing here, except that we'd like to add here here with a different property. I guess we'll have to name it url then here to continue that BC :-/.

Also interesting that ComputedFileUri explicitly makes it root-relative whlie the existing code there is absolute, so to keep BC there too, we need to make ComputedFileItemUri and ComputedFileUri inconsistent :-/.

So I tried to make that BC by renaming to just url and adding it as an absolute URL.

Also, something about the Hal tests is weird... I think extra properties in entity reference fields are still broken there. Fact is that the Hal tests weren't failing unlike Json and XML based tests and also now, no changes seem to be necessary, when they actually should fail as we are supposed to be adding extra stuff to the output. Double-irony or something, extra computed properties only work if the normalization layer actually cares about that... :)

berdir’s picture

Status: Needs work » Needs review

Status: Needs review » Needs work

The last submitted patch, 24: 2925520-24.patch, failed testing. View results

berdir’s picture

Status: Needs work » Needs review
StatusFileSize
new5.6 KB
new1.91 KB

Getting that jsonapi test working was pretty icky, the hardcoded file ID's for example are pretty tricky to get right. Also hardcoded ids in general is a bad idea, because it will fail on environments that skip autoincrement values. Would be better to load the files based on a unique filename instead. But I went with the existing logic in the test.

Also the flow is sometimes quite hard to follow, which test fail is getting its values from where, that's the downside of those generic tests.

Also, seems like it would be useful to test with actual values for display/description in that file field.

Status: Needs review » Needs work

The last submitted patch, 27: 2925520-27.patch, failed testing. View results

jibran’s picture

berdir’s picture

Some new things that I found while looking at this again and also things to check/discuss based on the new direction of #3009854: Fix "The "serializer.normalizer.file_entity.hal" normalizer service is deprecated: it is obsolete, it only remains available for backwards compatibility." deprecation error.

That logic there will automatically be applied to hal_json normalization as well, which is good. But, regular json doesn't have that reusable logic and has hardcoded/duplicated it, with another file fallback as mentioned earlier. I would assume it would only make sense to apply that behavior from hal_json also to json, possibly even as the same setting, if we move the BC setting up into serialzation.

If we do that, then we basically also lose the file URL in json, just like we do now in hal_json. But that might actually be a good thing because we do then not have to respect the existing behavior and can instead make the file url on file/image item an the file entity consistent: file_url property, root-relative URL.

Also, something about the Hal tests is weird... I think extra properties in entity reference fields are still broken there. Fact is that the Hal tests weren't failing unlike Json and XML based tests and also now, no changes seem to be necessary, when they actually should fail as we are supposed to be adding extra stuff to the output. Double-irony or something, extra computed properties only work if the normalization layer actually cares about that... :)

Just manually confirmed that, steps to reproduce:
1. Install standard
2. Enable rest, hal, basic_auth (to get the optional default config imported). Optionally allow cookie in rest.resource.entity.node
3. Create an article with image and alt text.
4. Visit node/1?_format=hal_json

You don't see the alt text. And the file obviously also doesn't contain it. That is because \Drupal\hal\Normalizer\EntityReferenceItemNormalizer::normalize() specifically only does the embedded uuid + lang + self/link. But we also need to include the stuff from \Drupal\hal\Normalizer\FieldItemNormalizer::normalizedFieldValues() (again minus target_id) somehow. top-level, new nested key? I think in _embedded doesn't make sense.

So my regular question.. how is anyone using this for something real if you can't possible access alt text, file description, ...

If we can find a name for a setting we could possibly bring that all under one BC setting. Because we do need all of it to eventually be able to have consistency and direct access to file URL's on node/media entities. I'd vote for "serialization_file_insanity: true". I'll show myself out now...

berdir’s picture

Issue summary: View changes
StatusFileSize
new13.8 KB

We could actually add those extra attributes like any other field

Still needs some work, but this:

diff --git a/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php b/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php
index 48dbb81b47..31f91e7bb6 100644
--- a/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php
+++ b/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php
@@ -66,8 +66,12 @@ public function __construct(LinkManagerInterface $link_manager, EntityResolverIn
   public function normalize($field_item, $format = NULL, array $context = []) {
     // If this is not a fieldable entity, let the parent implementation handle
     // it, only fieldable entities are supported as embedded resources.
+    $normalized =parent::normalize($field_item, $format, $context);
     if (!$this->targetEntityIsFieldable($field_item)) {
-      return parent::normalize($field_item, $format, $context);
+      return $normalized;
+    }
+    else {
+      unset($normalized[$field_item->getParent()->getName()][0]['target_id']);
     }
 
     /** @var $field_item \Drupal\Core\Field\FieldItemInterface */
@@ -95,7 +99,7 @@ public function normalize($field_item, $format = NULL, array $context = []) {
     $field_name = $field_item->getParent()->getName();
     $entity = $field_item->getEntity();
     $field_uri = $this->linkManager->getRelationUri($entity->getEntityTypeId(), $entity->bundle(), $field_name, $context);
-    return [
+    return $normalized + [
       '_links' => [
         $field_uri => [$link],
       ],

Results in this:

Needs some more cleanup at least to get rid of empty entries with nothing but the langcode (the url is coming from the patch here)

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.0-alpha1 will be released the week of October 14th, 2019, which means new developments and disruptive changes should now be targeted against the 8.9.x-dev branch. (Any changes to 8.9.x will also be committed to 9.0.x in preparation for Drupal 9’s release, but some changes like significant feature additions will be deferred to 9.1.x.). For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

wim leers’s picture

  • If we go with file_url then this becomes a non-issue.

    Let's do that then.

    The harder part is indeed getting rid of the call in the normalizer. That's what I meant with:

    > Means we can't remove the deprecated call for file, but we could officially deprecate it, possibly with a hidden setting like other things we did?

    By setting, I mean we would add another bc setting to serializer that would skip that call, similar to hal.settings:bc_file_uri_as_url_normalizer (that's why I would have liked to put both behind the same setting, as they are closely related, now we need two different settings).

    +1

    So as usual with those things, existing sites continue to export url and file_url as the same thing. New sites only expose file_url. If you install file_entity, you also get the url as a real canonical link.

    Right.

  • #24: this is where my brain melted after the past 48 crazy hours.
  • #27: hardcoded file IDs are intentionally used to keep things simpler. Why do they make things harder?
  • #30:

    If we do that, then we basically also lose the file URL in json, just like we do now in hal_json. But that might actually be a good thing because we do then not have to respect the existing behavior and can instead make the file url on file/image item an the file entity consistent: file_url property, root-relative URL.

    This sounds great! 👍 Not perfect, but at least consistent :)

    So my regular question.. how is anyone using this for something real if you can't possible access alt text, file description, ...

    Heh … this is what I've been saying for a while… and it's why I pushed for #3049856: [policy] Mark HAL module as deprecated in D9 so it can be removed in D10 a while ago 😅

    If we can find a name for a setting we could possibly bring that all under one BC setting. Because we do need all of it to eventually be able to have consistency and direct access to file URL's on node/media entities. I'd vote for "serialization_file_insanity: true". I'll show myself out now...

    😭

  • #31: I don't think dealing with those other properties in this issue is in scope of this issue. But if it makes things easier, then … sure!
  • Sorry that this isn't more helpful. I can do a more helpful comment tomorrow. 🤞

berdir’s picture

> #31: I don't think dealing with those other properties in this issue is in scope of this issue. But if it makes things easier, then … sure!

I wish. file_uri is a property too. So either we deal with it generically, or we special case file_uri now. Either way, we need to do *something*.

berdir’s picture

#24: Yeah, that comment is the result of hours of debugging I think, my brain might not have been fully sane anymore at that point. Take your time with that comment ;)

See updates on #3009854: Fix "The "serializer.normalizer.file_entity.hal" normalizer service is deprecated: it is obsolete, it only remains available for backwards compatibility." deprecation error and #2907402: HAL normalization of file fields don't provide file entity id or file entity REST URL, I think this is 9.1 material at this time, so we can take our time with it. Or if we decide by then to remove hal.module from core, which might not be the worst idea. As mentioned before, my only use case is default_content.module, and as discussed before, it might more sense for that to just do its own format that just has the raw content, we don't need any fancy normalization, $entity->toArray(), a bit of metadata and converting that to json or yaml should mostly do the trick :) The main thing to figure out is the dependency tree, we'll need to keep those referenced-entity uuid's something. That's the number #1 selling point of default_content compared alternatives.

wim leers’s picture

Or if we decide by then to remove hal.module from core, which might not be the worst idea. As mentioned before, my only use case is default_content.module, and as discussed before, it might more sense for that to just do its own format that just has the raw content, we don't need any fancy normalization, $entity->toArray(), a bit of metadata and converting that to json or yaml should mostly do the trick :)

I frankly think this is the simplest, sanest course of action. default_content does not need any URIs at all. There is an issue for that already at #3049856: [policy] Mark HAL module as deprecated in D9 so it can be removed in D10. Would you mind leaving a comment there?

If you're switching to that line of thinking … then can you please post a comment there?

wim leers’s picture

#34: I think it's preferable to special-case file_uri then.

#24:

That logic there will automatically be applied to hal_json normalization as well, which is good. But, regular json doesn't have that reusable logic and has hardcoded/duplicated it, with another file fallback as mentioned earlier. I would assume it would only make sense to apply that behavior from hal_json also to json, possibly even as the same setting, if we move the BC setting up into serialzation.

I still can't make sense of this. #3009854 is only about the HAL normalization and hence only about the hal_json format. So I don't know how to interpret the "as well" in the first sentence. Ah, this is drawing the parallel between \Drupal\hal\Normalizer\FileEntityNormalizer::normalize()'s BC logic and \Drupal\serialization\Normalizer\EntityReferenceFieldItemNormalizer::normalize()'s special case for file entity references I think. Then yes, I think you're right, we want the same setting, and it needs to apply to both.

If we do that, then we basically also lose the file URL in json, just like we do now in hal_json. But that might actually be a good thing because we do then not have to respect the existing behavior and can instead make the file url on file/image item an the file entity consistent: file_url property, root-relative URL.

Correct!

We could actually add those extra attributes like any other field

We could do that. JSON:API already does something like that:

        "field_image": {
          "data": {
            "type": "file--file",
            "id": "1cf8bc57-3d42-4375-8af5-7ede9b2ffd3d",
            "meta": {
              "alt": "sadfsdf",
              "title": "",
              "width": 175,
              "height": 200
            }
          },
          "links": {
            "related": {
              "href": "http://d8.test/jsonapi/node/article/7366d47d-e343-40eb-a64c-921c8a947df7/field_image?resourceVersion=id%3A1"
            },
            "self": {
              "href": "http://d8.test/jsonapi/node/article/7366d47d-e343-40eb-a64c-921c8a947df7/relationships/field_image?resourceVersion=id%3A1"
            }
          }
        },

It puts the additional properties that live on that entity reference (a "relationship") that aren't solely about the reference (alt, width, height, title in the case of a @FieldType=image) under the meta key (which is how the JSON:API spec allows adding extra information to relationships).

Also interesting that ComputedFileUri explicitly makes it root-relative whlie the existing code there is absolute, so to keep BC there too, we need to make ComputedFileItemUri and ComputedFileUri inconsistent :-/.

We did that to avoid making the data computed in ComputedFileUri site-specific: we didn't want to make it have to vary by the url.site cache context. If we want to keep BC for the existing HAL normalization, then we can just make the HAL normalization do extra work: make it detect if a relative URL is being returned, and if so, prefix it with the current request's hostname + port + subdir.

berdir’s picture

Will try to find some time to get back to this after the two related issues are done.

One comment on this though:
> default_content does not need any URIs at all.

That isn't quite so simple. It doesn't use URI's anymore, but it very much requires content relationships. That's the most important functionality of default_content IMHO. It builds a dependency tree of all content that is to be imported, and makes sure that it creates terms referenced by nodes first, authors of nodes also first, comments on those nodes afterwards and so on.

That's why hal+json was chosen as a format, because it provides the necessary information for that. Initially it used URL's but that was changed to using the UUID's that are provided for each relationship.

Version: 8.9.x-dev » 9.1.x-dev

Drupal 8.9.0-beta1 was released on March 20, 2020. 8.9.x is the final, long-term support (LTS) minor release of Drupal 8, which means new developments and disruptive changes should now be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 9.1.x-dev » 9.2.x-dev

Drupal 9.1.0-alpha1 will be released the week of October 19, 2020, which means new developments and disruptive changes should now be targeted for the 9.2.x-dev branch. For more information see the Drupal 9 minor version schedule and the Allowed changes during the Drupal 9 release cycle.

Version: 9.2.x-dev » 9.3.x-dev

Drupal 9.2.0-alpha1 will be released the week of May 3, 2021, which means new developments and disruptive changes should now be targeted for the 9.3.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.0-rc1 was released on November 26, 2021, which means new developments and disruptive changes should now be targeted for the 9.4.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.0-alpha1 was released on May 6, 2022, which means new developments and disruptive changes should now be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.5.x-dev » 10.1.x-dev

Drupal 9.5.0-beta2 and Drupal 10.0.0-beta2 were released on September 29, 2022, which means new developments and disruptive changes should now be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 10.1.x-dev » 11.x-dev

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch, which currently accepts only minor-version allowed changes. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

claudiu.cristea’s picture

+1 for this. It should be similar with "processed" computer property from rich text fields.

claudiu.cristea’s picture

This module would benefit from such a new property, see #3446770: How to map image field?

Version: 11.x-dev » main

Drupal core is now using the main branch as the primary development branch. New developments and disruptive changes should now be targeted to the main branch.

Read more in the announcement.